diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 7ba4fae97..000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "plugins": ["solid", "spellcheck"], - "extends": [ - "eslint:recommended", - "plugin:solid/typescript", - "plugin:@typescript-eslint/recommended", - "prettier" - ], - "rules": { - "@typescript-eslint/no-non-null-assertion": "off", - "spellcheck/spell-checker": [ - "warn", - { - "lang": "en_GB", - "strings": false, - "identifiers": false, - "templates": false, - "skipWords": ["dismissable", "regex", "accessor", "dnd", "webhooks"], - "minLength": 3 - } - ], - "@typescript-eslint/no-unused-vars": [ - "warn", - { - "varsIgnorePattern": "^_" - } - ], - "no-unused-vars": [ - "warn", - { - "varsIgnorePattern": "^_" - } - ], - "require-jsdoc": [ - "warn", - { - "require": { - "FunctionDeclaration": true, - "MethodDefinition": true, - "ClassDeclaration": true, - "ArrowFunctionExpression": true, - "FunctionExpression": true - } - } - ] - } -} diff --git a/.gitignore b/.gitignore index 233f6745a..84fa7fc3d 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ dist .env* !.env.example .vercel +.idea diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index d15c81ce9..000000000 --- a/.prettierrc +++ /dev/null @@ -1,15 +0,0 @@ -{ - "tabWidth": 2, - "useTabs": false, - "plugins": ["@trivago/prettier-plugin-sort-imports"], - "importOrder": [ - "^solid", - "<THIRD_PARTY_MODULES>", - "^@revolt", - "^@material-design-icons", - "^\\.\\.", - "^[./]" - ], - "importOrderSeparation": true, - "importOrderSortSpecifiers": true -} diff --git a/.prettierrc.cjs b/.prettierrc.cjs new file mode 100644 index 000000000..d14cd8be6 --- /dev/null +++ b/.prettierrc.cjs @@ -0,0 +1,14 @@ +const prettierConfigStandard = require('prettier-config-standard'); + +const modifiedConfig = { + ...prettierConfigStandard, + semi: true, + parser: 'typescript', + singleQuote: true, + trailingComma: 'es5', + proseWrap: 'never', + arrowParens: 'always', + tabWidth: 2, +}; + +module.exports = modifiedConfig; \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 000000000..f434f30d7 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,52 @@ +// @ts-check +import eslint from '@eslint/js'; +import prettier from 'eslint-plugin-prettier/recommended'; +import promise from 'eslint-plugin-promise'; +import simpleImportSort from 'eslint-plugin-simple-import-sort'; +import solid from 'eslint-plugin-solid/configs/typescript'; +import tseslint from 'typescript-eslint'; +import path from 'node:path'; +import tsParser from '@typescript-eslint/parser'; + +export default tseslint.config( + prettier, + eslint.configs.recommended, + ...tseslint.configs.recommended, + ...tseslint.configs.stylistic, + { + ignores: ['**/styled-system/'], + }, + { + files: ['**/*.tsx', '**/*.ts'], + extends: [solid], + plugins: { + 'simple-import-sort': simpleImportSort, + promise, + }, + languageOptions: { + parser: tsParser, + parserOptions: { + project: path.resolve( + import.meta.dirname, + 'packages', + 'client', + 'tsconfig.json' + ), + tsconfigRootDir: path.resolve( + import.meta.dirname, + 'packages', + 'client' + ), + }, + }, + rules: { + 'simple-import-sort/imports': 'error', + 'simple-import-sort/exports': 'error', + '@typescript-eslint/consistent-type-imports': 'error', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-unused-vars': 'off', + 'solid/jsx-no-undef': 'off', + 'no-unused-vars': 'off', + }, + } +); diff --git a/package.json b/package.json index 7494cbd31..496465bae 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,10 @@ { "name": "resolvite", + "type": "module", "version": "1.0.0", "description": "Revolt's front-end monorepo.", "scripts": { - "test": "pnpm --filter test-runner test", + "test": "pnpm test --filter=client", "test:coverage": "pnpm --filter test-runner coverage", "test:browser:install": "pnpm --filter browser-test-runner exec playwright install", "test:browser:regression": "pnpm --filter browser-test-runner exec playwright test regression", @@ -20,6 +21,20 @@ "fmt:check": "prettier --check '**/*.{ts,tsx,json}'", "typecheck": "cd packages/client && pnpm run typecheck" }, + "devDependencies": { + "@eslint/js": "^9.12.0", + "@types/node": "^22.7.5", + "eslint": "^9.12.0", + "eslint-config-prettier": "^8.10.0", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-promise": "^7.1.0", + "eslint-plugin-simple-import-sort": "^12.1.1", + "eslint-plugin-solid": "^0.14.3", + "prettier": "^3.3.3", + "prettier-config-standard": "^7.0.0", + "typescript-eslint": "^8.8.1", + "@typescript-eslint/parser": "^8.8.1" + }, "keywords": [], "engines": { "node": ">=16", diff --git a/packages/client/.storybook/main.ts b/packages/client/.storybook/main.ts index b6631c16e..eed860f87 100644 --- a/packages/client/.storybook/main.ts +++ b/packages/client/.storybook/main.ts @@ -1,16 +1,16 @@ -import type { StorybookConfig } from "storybook-solidjs-vite"; +import type { StorybookConfig } from 'storybook-solidjs-vite'; const config: StorybookConfig = { - stories: ["../**/*.mdx", "../**/*.story.@(js|jsx|mjs|ts|tsx)"], + stories: ['../**/*.mdx', '../**/*.story.@(js|jsx|mjs|ts|tsx)'], // stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"], addons: [ - "@storybook/addon-links", - "@storybook/addon-essentials", - "@chromatic-com/storybook", - "@storybook/addon-interactions", + '@storybook/addon-links', + '@storybook/addon-essentials', + '@chromatic-com/storybook', + '@storybook/addon-interactions', ], framework: { - name: "storybook-solidjs-vite", + name: 'storybook-solidjs-vite', options: {}, }, }; diff --git a/packages/client/.storybook/preview.tsx b/packages/client/.storybook/preview.tsx index 9be8a494c..1cb9a1396 100644 --- a/packages/client/.storybook/preview.tsx +++ b/packages/client/.storybook/preview.tsx @@ -1,7 +1,7 @@ -import { ApplyGlobalStyles, ThemeProvider, darkTheme } from "@revolt/ui"; -import "@revolt/ui/styles"; +import '@revolt/ui/styles'; +import './panda.css'; -import "./panda.css"; +import { ApplyGlobalStyles, darkTheme, ThemeProvider } from '@revolt/ui'; const preview: Preview = { parameters: { @@ -14,7 +14,7 @@ const preview: Preview = { }, decorators: [ (story) => ( - <ThemeProvider theme={darkTheme("#FF5733", false)}> + <ThemeProvider theme={darkTheme('#FF5733', false)}> {story} <ApplyGlobalStyles /> </ThemeProvider> ), diff --git a/packages/client/codegen.plugin.ts b/packages/client/codegen.plugin.ts index 0ec019d43..d0d591410 100644 --- a/packages/client/codegen.plugin.ts +++ b/packages/client/codegen.plugin.ts @@ -1,27 +1,27 @@ -import { readdirSync } from "node:fs"; +import { readdirSync } from 'node:fs'; const fileRegex = /\.tsx$/; const codegenRegex = /\/\/ @codegen (.*)/g; -const DIRECTIVES = readdirSync("./components/ui/directives") - .filter((x) => x !== "index.ts") +const DIRECTIVES = readdirSync('./components/ui/directives') + .filter((x) => x !== 'index.ts') .map((x) => x.substring(0, x.length - 3)); -const directiveRegex = new RegExp("use:(" + DIRECTIVES.join("|") + ")"); +const directiveRegex = new RegExp('use:(' + DIRECTIVES.join('|') + ')'); export default function codegenPlugin() { return { - name: "codegen", - enforce: "pre", + name: 'codegen', + enforce: 'pre' as const, transform(src: string, id: string) { if (fileRegex.test(id)) { src = src.replace(codegenRegex, (substring, group1) => { - const rawArgs: string[] = group1.split(" "); + const rawArgs: string[] = group1.split(' '); const type = rawArgs.shift(); const args = rawArgs.reduce( (d, arg) => { - const [key, value] = arg.split("="); + const [key, value] = arg.split('='); return { ...d, [key]: value, @@ -29,30 +29,30 @@ export default function codegenPlugin() { }, { type } ) as { - type: "directives"; + type: 'directives'; props?: string; include?: string; }; switch (args.type) { - case "directives": + case 'directives': // Generate directives forwarding - const source = args.props ?? "props"; + const source = args.props ?? 'props'; const permitted: string[] = - args.include?.split(",") ?? DIRECTIVES; + args.include?.split(',') ?? DIRECTIVES; return DIRECTIVES.filter((d) => permitted.includes(d)) .map((d) => `use:${d}={${source}["use:${d}"]}`) - .join("\n"); + .join('\n'); default: return substring; } }); if (directiveRegex.test(src)) { - if (!id.endsWith("client/components/ui/index.tsx")) + if (!id.endsWith('client/components/ui/index.tsx')) src = `import { ${DIRECTIVES.join( - ", " + ', ' )} } from "@revolt/ui/directives";\n` + src; } diff --git a/packages/client/components/app/index.tsx b/packages/client/components/app/index.tsx index 411a38df4..ef1a48177 100644 --- a/packages/client/components/app/index.tsx +++ b/packages/client/components/app/index.tsx @@ -1,6 +1,5 @@ -export { Message } from "./interface/channels/text/Message"; -export { Messages } from "./interface/channels/text/Messages"; -export { DraftMessages } from "./interface/channels/text/DraftMessages"; - -export * from "./interface/settings"; -export * from "./menus"; +export { DraftMessages } from './interface/channels/text/DraftMessages'; +export { Message } from './interface/channels/text/Message'; +export { Messages } from './interface/channels/text/Messages'; +export * from './interface/settings'; +export * from './menus'; diff --git a/packages/client/components/app/interface/channels/text/DraftMessage.tsx b/packages/client/components/app/interface/channels/text/DraftMessage.tsx index d3be1fbd2..c7ae33d06 100644 --- a/packages/client/components/app/interface/channels/text/DraftMessage.tsx +++ b/packages/client/components/app/interface/channels/text/DraftMessage.tsx @@ -1,13 +1,11 @@ -import { For } from "solid-js"; +import { useClient, useUser } from '@revolt/client'; +import { userInformation } from '@revolt/markdown/users'; +import type { UnsentMessage } from '@revolt/state/stores/Draft'; +import { Avatar, MessageContainer, MessageReply, Username } from '@revolt/ui'; +import type { Channel } from 'revolt.js'; +import { For } from 'solid-js'; -import type { Channel } from "revolt.js"; - -import { useClient, useUser } from "@revolt/client"; -import { userInformation } from "@revolt/markdown/users"; -import type { UnsentMessage } from "@revolt/state/stores/Draft"; -import { Avatar, MessageContainer, MessageReply, Username } from "@revolt/ui"; - -import { DraftMessageContextMenu } from "../../../menus/DraftMessageContextMenu"; +import { DraftMessageContextMenu } from '../../../menus/DraftMessageContextMenu'; interface Props { draft: UnsentMessage; @@ -31,13 +29,13 @@ export function DraftMessage(props: Props) { timestamp={ // TODO // i18n missing - props.draft.status === "sending" - ? "Sending..." - : props.draft.status === "failed" - ? "Failed to send" // add icons here - : "Unsent message" // add icons here + props.draft.status === 'sending' + ? 'Sending...' + : props.draft.status === 'failed' + ? 'Failed to send' // add icons here + : 'Unsent message' // add icons here } - sendStatus={props.draft.status === "sending" ? "sending" : "failed"} + sendStatus={props.draft.status === 'sending' ? 'sending' : 'failed'} username={<Username username={userInfo().username} />} header={ <For each={props.draft.replies}> diff --git a/packages/client/components/app/interface/channels/text/DraftMessages.tsx b/packages/client/components/app/interface/channels/text/DraftMessages.tsx index fb3766435..96c23e1eb 100644 --- a/packages/client/components/app/interface/channels/text/DraftMessages.tsx +++ b/packages/client/components/app/interface/channels/text/DraftMessages.tsx @@ -1,10 +1,8 @@ -import { For } from "solid-js"; +import { state } from '@revolt/state'; +import type { Channel } from 'revolt.js'; +import { For } from 'solid-js'; -import { Channel } from "revolt.js"; - -import { state } from "@revolt/state"; - -import { DraftMessage } from "./DraftMessage"; +import { DraftMessage } from './DraftMessage'; interface Props { channel: Channel; @@ -19,12 +17,12 @@ export function DraftMessages(props: Props) { const unsent = () => state.draft .getPendingMessages(props.channel.id) - .filter((draft) => draft.status === "sending"); + .filter((draft) => draft.status === 'sending'); const failed = () => state.draft .getPendingMessages(props.channel.id) - .filter((draft) => draft.status !== "sending"); + .filter((draft) => draft.status !== 'sending'); return ( <> diff --git a/packages/client/components/app/interface/channels/text/Message.tsx b/packages/client/components/app/interface/channels/text/Message.tsx index 8224673b1..80cac2198 100644 --- a/packages/client/components/app/interface/channels/text/Message.tsx +++ b/packages/client/components/app/interface/channels/text/Message.tsx @@ -1,41 +1,38 @@ -import { For, Match, Show, Switch, onMount } from "solid-js"; - -import { Message as MessageInterface, WebsiteEmbed } from "revolt.js"; -import { decodeTime } from "ulid"; - -import { useClient } from "@revolt/client"; -import { dayjs, useTranslation } from "@revolt/i18n"; -import { Markdown } from "@revolt/markdown"; -import { state } from "@revolt/state"; +import MdCloud from '@material-design-icons/svg/filled/cloud.svg?component-solid'; +import MdLink from '@material-design-icons/svg/filled/link.svg?component-solid'; +import MdNotificationsOff from '@material-design-icons/svg/filled/notifications_off.svg?component-solid'; +import MdShield from '@material-design-icons/svg/filled/shield.svg?component-solid'; +import MdSmartToy from '@material-design-icons/svg/filled/smart_toy.svg?component-solid'; +import MdSpa from '@material-design-icons/svg/filled/spa.svg?component-solid'; +import { useClient } from '@revolt/client'; +import { dayjs, useTranslation } from '@revolt/i18n'; +import { Markdown } from '@revolt/markdown'; +import { state } from '@revolt/state'; import { Attachment, Avatar, BreakText, Column, Embed, + iconSize, MessageContainer, MessageReply, Reactions, + styled, SystemMessage, SystemMessageIcon, Tooltip, Username, - iconSize, - styled, -} from "@revolt/ui"; - -import MdCloud from "@material-design-icons/svg/filled/cloud.svg?component-solid"; -import MdLink from "@material-design-icons/svg/filled/link.svg?component-solid"; -import MdNotificationsOff from "@material-design-icons/svg/filled/notifications_off.svg?component-solid"; -import MdShield from "@material-design-icons/svg/filled/shield.svg?component-solid"; -import MdSmartToy from "@material-design-icons/svg/filled/smart_toy.svg?component-solid"; -import MdSpa from "@material-design-icons/svg/filled/spa.svg?component-solid"; +} from '@revolt/ui'; +import type { Message as MessageInterface, WebsiteEmbed } from 'revolt.js'; +import { For, Match, onMount, Show, Switch } from 'solid-js'; +import { decodeTime } from 'ulid'; -import { MessageContextMenu } from "../../../menus/MessageContextMenu"; +import { MessageContextMenu } from '../../../menus/MessageContextMenu'; import { floatingUserMenus, floatingUserMenusFromMessage, -} from "../../../menus/UserContextMenu"; +} from '../../../menus/UserContextMenu'; /** * Regex for matching URLs @@ -73,10 +70,10 @@ export function Message(props: Props) { const isOnlyGIF = () => props.message.embeds && props.message.embeds.length === 1 && - props.message.embeds[0].type === "Website" && - (props.message.embeds[0] as WebsiteEmbed).specialContent?.type === "GIF" && + props.message.embeds[0].type === 'Website' && + (props.message.embeds[0] as WebsiteEmbed).specialContent?.type === 'GIF' && props.message.content && - !props.message.content.replace(RE_URL, "").length; + !props.message.content.replace(RE_URL, '').length; /** * React with an emoji @@ -112,7 +109,7 @@ export function Message(props: Props) { edited={props.message.editedAt} mentioned={props.message.mentioned} highlight={props.highlight} - tail={props.tail || state.settings.getValue("appearance:compact_mode")} + tail={props.tail || state.settings.getValue('appearance:compact_mode')} header={ <Show when={props.message.replyIds}> <For each={props.message.replyIds}> @@ -145,46 +142,46 @@ export function Message(props: Props) { <Match when={ props.message.masquerade && - props.message.authorId === "01FHGJ3NPP7XANQQH8C2BE44ZY" + props.message.authorId === '01FHGJ3NPP7XANQQH8C2BE44ZY' } > - <Tooltip content={t("app.main.channel.bridged")} placement="top"> + <Tooltip content={t('app.main.channel.bridged')} placement='top'> <MdLink {...iconSize(16)} /> </Tooltip> </Match> <Match when={props.message.author?.privileged}> - <Tooltip content={t("app.main.channel.team")} placement="top"> + <Tooltip content={t('app.main.channel.team')} placement='top'> <MdShield {...iconSize(16)} /> </Tooltip> </Match> <Match when={props.message.author?.bot}> - <Tooltip content={t("app.main.channel.bot")} placement="top"> + <Tooltip content={t('app.main.channel.bot')} placement='top'> <MdSmartToy {...iconSize(16)} /> </Tooltip> </Match> <Match when={props.message.webhook}> - <Tooltip content={t("app.main.channel.webhook")} placement="top"> + <Tooltip content={t('app.main.channel.webhook')} placement='top'> <MdCloud {...iconSize(16)} /> </Tooltip> </Match> <Match when={props.message.webhook}> - <Tooltip content={t("app.main.channel.webhook")} placement="top"> + <Tooltip content={t('app.main.channel.webhook')} placement='top'> <MdCloud {...iconSize(16)} /> </Tooltip> </Match> <Match when={props.message.isSuppressed}> - <Tooltip content={"Silent" /* TODO: i18n */} placement="top"> + <Tooltip content={'Silent' /* TODO: i18n */} placement='top'> <MdNotificationsOff {...iconSize(16)} /> </Tooltip> </Match> <Match when={ props.message.authorId && - dayjs().diff(decodeTime(props.message.authorId), "day") < 1 + dayjs().diff(decodeTime(props.message.authorId), 'day') < 1 } > <NewUser> - <Tooltip content="New to Revolt" placement="top"> + <Tooltip content='New to Revolt' placement='top'> <MdSpa {...iconSize(16)} /> </Tooltip> </NewUser> @@ -192,16 +189,16 @@ export function Message(props: Props) { <Match when={ props.message.member && - dayjs().diff(props.message.member.joinedAt, "day") < 1 + dayjs().diff(props.message.member.joinedAt, 'day') < 1 } > <NewUser> - <Tooltip content="New to the server" placement="top"> + <Tooltip content='New to the server' placement='top'> <MdSpa {...iconSize(16)} /> </Tooltip> </NewUser> </Match> - <Match when={props.message.authorId === "01EX2NCWQ0CHS3QJF0FEQS1GR4"}> + <Match when={props.message.authorId === '01EX2NCWQ0CHS3QJF0FEQS1GR4'}> <span /> <span>he/him · </span> </Match> @@ -209,7 +206,7 @@ export function Message(props: Props) { } compact={ !!props.message.systemMessage || - state.settings.getValue("appearance:compact_mode") + state.settings.getValue('appearance:compact_mode') } infoMatch={ <Match when={props.message.systemMessage}> @@ -221,7 +218,7 @@ export function Message(props: Props) { </Match> } > - <Column gap="sm"> + <Column gap='sm'> <Show when={props.message.systemMessage}> <SystemMessage systemMessage={props.message.systemMessage!} diff --git a/packages/client/components/app/interface/channels/text/Messages.tsx b/packages/client/components/app/interface/channels/text/Messages.tsx index 4f70f674e..93133a997 100644 --- a/packages/client/components/app/interface/channels/text/Messages.tsx +++ b/packages/client/components/app/interface/channels/text/Messages.tsx @@ -1,35 +1,32 @@ +import { useClient } from '@revolt/client'; +import { dayjs } from '@revolt/i18n'; +import { + BlockedMessage, + ConversationStart, + JumpToBottom, + ListView, + MessageDivider, + styled, +} from '@revolt/ui'; +import isEqual from 'lodash.isequal'; +import type { Channel, Message as MessageInterface } from 'revolt.js'; +import type { Accessor, JSX } from 'solid-js'; import { - Accessor, - For, - JSX, - Match, - Show, - Switch, batch, createEffect, createMemo, createSignal, + For, + Match, on, onCleanup, onMount, + Show, splitProps, -} from "solid-js"; - -import isEqual from "lodash.isequal"; -import { Channel, Message as MessageInterface } from "revolt.js"; - -import { useClient } from "@revolt/client"; -import { dayjs } from "@revolt/i18n"; -import { - BlockedMessage, - ConversationStart, - JumpToBottom, - ListView, - MessageDivider, - styled, -} from "@revolt/ui"; + Switch, +} from 'solid-js'; -import { Message } from "./Message"; +import { Message } from './Message'; /** * Default fetch limit @@ -110,7 +107,7 @@ export function Messages(props: Props) { * The current direction of fetching */ const [fetching, setFetching] = createSignal< - "initial" | "upwards" | "downwards" | "jump_end" | "jump_msg" + 'initial' | 'upwards' | 'downwards' | 'jump_end' | 'jump_msg' >(); /** @@ -185,7 +182,7 @@ export function Messages(props: Props) { async function caseInitialLoad(nearby?: string) { // Pre-empt any fetches preempt(); - setFetching("initial"); + setFetching('initial'); // Handle incoming pre-emptions const preempted = newPreempted(); @@ -213,7 +210,7 @@ export function Messages(props: Props) { // Assume we are not at the end if we jumped to a message // NB. we set this late to not display the "jump to bottom" bar - if (typeof nearby === "string") { + if (typeof nearby === 'string') { setEnd( // If the messages fetched include the latest message, // then we are at the end and mark the channel as such. @@ -262,7 +259,7 @@ export function Messages(props: Props) { if (atStart() || !canFetch()) return; // Indicate we are fetching upwards - setFetching("upwards"); + setFetching('upwards'); // Handle incoming pre-emptions const preempted = newPreempted(); @@ -334,7 +331,7 @@ export function Messages(props: Props) { if (atEnd() || !canFetch()) return; // Indicate we are fetching downwards - setFetching("downwards"); + setFetching('downwards'); // Handle incoming pre-emptions const preempted = newPreempted(); @@ -344,7 +341,7 @@ export function Messages(props: Props) { const result = await props.channel.fetchMessagesWithUsers({ limit: props.fetchLimit, after: messages()[0].id, - sort: "Oldest", + sort: 'Oldest', }); // Cancel if we've been pre-empted @@ -407,7 +404,7 @@ export function Messages(props: Props) { function findScrollContainer(el: Element | null) { if (!el) { return null; - } else if (getComputedStyle(el).overflowY === "scroll") { + } else if (getComputedStyle(el).overflowY === 'scroll') { return el; } else { return el.parentElement; @@ -418,15 +415,15 @@ export function Messages(props: Props) { if (atEnd()) { const containerChild = findScrollContainer(listRef!)!.children[0]; containerChild!.scrollIntoView({ - behavior: "smooth", - block: "end", + behavior: 'smooth', + block: 'end', }); } // Otherwise fetch present messages else { // Pre-empty any fetches preempt(); - setFetching("jump_end"); + setFetching('jump_end'); // Handle incoming pre-emptions const preempted = newPreempted(); @@ -470,14 +467,14 @@ export function Messages(props: Props) { const containerChild = findScrollContainer(listRef!)!.children[0]; containerChild!.scrollIntoView({ - behavior: "instant", - block: "start", + behavior: 'instant', + block: 'start', }); setTimeout(() => { containerChild!.scrollIntoView({ - behavior: "smooth", - block: "end", + behavior: 'smooth', + block: 'end', }); // Mark as fetching has ended @@ -505,8 +502,8 @@ export function Messages(props: Props) { ); // use localeCompare listRef!.children[index + (atStart() ? 1 : 0)].scrollIntoView({ - behavior: "smooth", - block: "center", + behavior: 'smooth', + block: 'center', }); }; @@ -517,7 +514,7 @@ export function Messages(props: Props) { // Pre-empty any fetches preempt(); - setFetching("jump_msg"); + setFetching('jump_msg'); // Handle incoming pre-emptions const preempted = newPreempted(); @@ -611,14 +608,14 @@ export function Messages(props: Props) { // Add listener for messages onMount(() => { const c = client(); - c.addListener("messageCreate", onMessage); - c.addListener("messageDelete", onMessageDelete); + c.addListener('messageCreate', onMessage); + c.addListener('messageDelete', onMessageDelete); }); onCleanup(() => { const c = client(); - c.removeListener("messageCreate", onMessage); - c.removeListener("messageDelete", onMessageDelete); + c.removeListener('messageCreate', onMessage); + c.removeListener('messageDelete', onMessageDelete); }); // We need to cache created objects to prevent needless re-rendering @@ -627,7 +624,7 @@ export function Messages(props: Props) { // Determine which messages have a tail and add message dividers const messagesWithTail = createMemo<ListEntry[]>(() => { const messagesWithTail: ListEntry[] = []; - const lastReadId = props.lastReadId() ?? "0"; + const lastReadId = props.lastReadId() ?? '0'; let blockedMessages = 0; let insertedUnreadDivider = false; @@ -698,7 +695,7 @@ export function Messages(props: Props) { ); } - if (message.author?.relationship === "Blocked") { + if (message.author?.relationship === 'Blocked') { blockedMessages++; } else { // Push any blocked messages if they haven't been yet @@ -719,7 +716,7 @@ export function Messages(props: Props) { messagesWithTail.push( objectCache.get(date) ?? { t: 1, - date: dayjs(date).format("LL"), + date: dayjs(date).format('LL'), } ); } @@ -837,8 +834,8 @@ type ListEntry = /** * Render individual list entry */ -function Entry(props: ListEntry & Pick<Props, "highlightedMessageId">) { - const [local, other] = splitProps(props, ["t", "highlightedMessageId"]); +function Entry(props: ListEntry & Pick<Props, 'highlightedMessageId'>) { + const [local, other] = splitProps(props, ['t', 'highlightedMessageId']); return ( <Switch> diff --git a/packages/client/components/app/interface/settings/Settings.tsx b/packages/client/components/app/interface/settings/Settings.tsx index c91a7ac13..1da9c6406 100644 --- a/packages/client/components/app/interface/settings/Settings.tsx +++ b/packages/client/components/app/interface/settings/Settings.tsx @@ -1,17 +1,11 @@ -import { - Accessor, - createContext, - createSignal, - untrack, - useContext, -} from "solid-js"; +import { Rerun } from '@solid-primitives/keyed'; +import type { Accessor } from 'solid-js'; +import { createContext, createSignal, untrack, useContext } from 'solid-js'; +import { Motion, Presence } from 'solid-motionone'; -import { Motion, Presence } from "@motionone/solid"; -import { Rerun } from "@solid-primitives/keyed"; - -import { SettingsConfiguration, SettingsEntry } from "."; -import { SettingsContent } from "./_layout/Content"; -import { SettingsSidebar } from "./_layout/Sidebar"; +import type { SettingsConfiguration, SettingsEntry } from '.'; +import { SettingsContent } from './_layout/Content'; +import { SettingsSidebar } from './_layout/Sidebar'; export interface SettingsProps { /** @@ -28,7 +22,7 @@ export interface SettingsProps { /** * Transition animation */ -export type SettingsTransition = "normal" | "to-child" | "to-parent"; +export type SettingsTransition = 'normal' | 'to-child' | 'to-parent'; /** * Provide navigation to child components @@ -44,18 +38,18 @@ const SettingsNavigationContext = createContext<{ export function Settings(props: SettingsProps & SettingsConfiguration<never>) { const [page, setPage] = createSignal<undefined | string>(); const [transition, setTransition] = - createSignal<SettingsTransition>("normal"); + createSignal<SettingsTransition>('normal'); /** * Navigate to a certain page */ function navigate(entry: string | SettingsEntry) { let id; - if (typeof entry === "object") { + if (typeof entry === 'object') { if (entry.onClick) { entry.onClick(); } else if (entry.href) { - window.open(entry.href, "_blank"); + window.open(entry.href, '_blank'); } else if (entry.id) { id = entry.id; } @@ -67,11 +61,11 @@ export function Settings(props: SettingsProps & SettingsConfiguration<never>) { const current = page(); if (current?.startsWith(id)) { - setTransition("to-parent"); + setTransition('to-parent'); } else if (current && id.startsWith(current)) { - setTransition("to-child"); + setTransition('to-child'); } else { - setTransition("normal"); + setTransition('normal'); } setPage(id); @@ -95,20 +89,20 @@ export function Settings(props: SettingsProps & SettingsConfiguration<never>) { <Rerun on={page}> <Motion.div style={ - untrack(transition) === "normal" ? {} : { visibility: "hidden" } + untrack(transition) === 'normal' ? {} : { visibility: 'hidden' } } ref={(el) => - untrack(transition) !== "normal" && - setTimeout(() => (el.style.visibility = "visible"), 250) + untrack(transition) !== 'normal' && + setTimeout(() => (el.style.visibility = 'visible'), 250) } initial={ - transition() === "normal" + transition() === 'normal' ? { opacity: 0, y: 50 } - : transition() === "to-child" - ? { - x: "100vw", - } - : { x: "-100vw" } + : transition() === 'to-child' + ? { + x: '100vw', + } + : { x: '-100vw' } } animate={{ opacity: 1, @@ -116,13 +110,13 @@ export function Settings(props: SettingsProps & SettingsConfiguration<never>) { y: 0, }} exit={ - transition() === "normal" + transition() === 'normal' ? undefined - : transition() === "to-child" - ? { - x: "-100vw", - } - : { x: "100vw" } + : transition() === 'to-child' + ? { + x: '-100vw', + } + : { x: '100vw' } } transition={{ duration: 0.2, easing: [0.17, 0.67, 0.58, 0.98] }} > diff --git a/packages/client/components/app/interface/settings/_layout/Content.tsx b/packages/client/components/app/interface/settings/_layout/Content.tsx index f45e81400..a4a082552 100644 --- a/packages/client/components/app/interface/settings/_layout/Content.tsx +++ b/packages/client/components/app/interface/settings/_layout/Content.tsx @@ -1,12 +1,10 @@ -import { Accessor, JSX, Show } from "solid-js"; +import MdClose from '@material-design-icons/svg/outlined/close.svg?component-solid'; +import { Breadcrumbs, Column, iconSize, styled, Typography } from '@revolt/ui'; +import type { Accessor, JSX } from 'solid-js'; +import { Show } from 'solid-js'; +import { cva } from 'styled-system/css'; -import { cva } from "styled-system/css"; - -import { Breadcrumbs, Column, Typography, iconSize, styled } from "@revolt/ui"; - -import MdClose from "@material-design-icons/svg/outlined/close.svg?component-solid"; - -import { useSettingsNavigation } from "../Settings"; +import { useSettingsNavigation } from '../Settings'; /** * Content portion of the settings menu @@ -22,19 +20,19 @@ export function SettingsContent(props: { return ( <div use:scrollable={{ - foreground: "var(--colours-settings-content-scroll-thumb)", - background: "var(--colours-settings-content-background)", + foreground: 'var(--colours-settings-content-scroll-thumb)', + background: 'var(--colours-settings-content-background)', class: base(), }} > <Show when={props.page()}> <InnerContent> - <InnerColumn gap="x"> - <Typography variant="settings-title"> + <InnerColumn gap='x'> + <Typography variant='settings-title'> <Breadcrumbs - elements={props.page()!.split("/")} + elements={props.page()!.split('/')} renderElement={(key) => props.title(key)} - navigate={(keys) => navigate(keys.join("/"))} + navigate={(keys) => navigate(keys.join('/'))} /> </Typography> {props.children} @@ -58,17 +56,17 @@ export function SettingsContent(props: { const base = cva({ base: { minWidth: 0, - flex: "1 1 800px", - flexDirection: "row", + flex: '1 1 800px', + flexDirection: 'row', - display: "flex", - background: "var(--colours-settings-content-background)", + display: 'flex', + background: 'var(--colours-settings-content-background)', - borderStartStartRadius: "30px", - borderEndStartRadius: "30px", + borderStartStartRadius: '30px', + borderEndStartRadius: '30px', - "& > a": { - textDecoration: "none", + '& > a': { + textDecoration: 'none', }, }, }); @@ -76,7 +74,7 @@ const base = cva({ /** * Settings pane */ -const InnerContent = styled("div", "Pane")` +const InnerContent = styled('div', 'Pane')` gap: 13px; min-width: 0; width: 100%; @@ -106,22 +104,22 @@ const CloseAnchor = styled.a` justify-content: center; border-radius: ${(props) => props.theme!.borderRadius.full}; - border: 3px solid ${(props) => props.theme!.colours["settings-close-anchor"]}; + border: 3px solid ${(props) => props.theme!.colours['settings-close-anchor']}; transition: ${(props) => props.theme!.transitions.fast} background-color; svg { transition: ${(props) => props.theme!.transitions.fast} background-color; color: ${(props) => - props.theme!.colours["settings-close-anchor"]} !important; + props.theme!.colours['settings-close-anchor']} !important; } &:hover { - background: ${(props) => props.theme!.colours["settings-close-anchor"]}; + background: ${(props) => props.theme!.colours['settings-close-anchor']}; } &:hover svg { color: ${(props) => - props.theme!.colours["settings-close-anchor-hover"]} !important; + props.theme!.colours['settings-close-anchor-hover']} !important; } &:active { @@ -141,13 +139,13 @@ const CloseAction = styled.div` top: 0; &:after { - content: "ESC"; + content: 'ESC'; margin-top: 4px; display: flex; justify-content: center; width: 36px; font-weight: 600; - color: ${(props) => props.theme!.colours["settings-content-foreground"]}; + color: ${(props) => props.theme!.colours['settings-content-foreground']}; font-size: 0.75rem; } `; diff --git a/packages/client/components/app/interface/settings/_layout/Sidebar.tsx b/packages/client/components/app/interface/settings/_layout/Sidebar.tsx index 064f1c1fa..49994584e 100644 --- a/packages/client/components/app/interface/settings/_layout/Sidebar.tsx +++ b/packages/client/components/app/interface/settings/_layout/Sidebar.tsx @@ -1,17 +1,16 @@ -import { Accessor, For, Setter, Show, createMemo, onMount } from "solid-js"; - -import { Column, OverflowingText, styled } from "@revolt/ui"; +import { Column, OverflowingText, styled } from '@revolt/ui'; +import type { Accessor, Setter } from 'solid-js'; +import { createMemo, For, onMount, Show } from 'solid-js'; // import MdError from "@material-design-icons/svg/filled/error.svg?component-solid"; // import MdOpenInNew from "@material-design-icons/svg/filled/open_in_new.svg?component-solid"; -import { SettingsList } from ".."; -import { useSettingsNavigation } from "../Settings"; - +import type { SettingsList } from '..'; +import { useSettingsNavigation } from '../Settings'; import { SidebarButton, SidebarButtonContent, SidebarButtonTitle, -} from "./SidebarButton"; +} from './SidebarButton'; /** * Settings Sidebar Layout @@ -44,7 +43,7 @@ export function SettingsSidebar(props: { <Base> <div use:invisibleScrollable> <Content> - <Column gap="lg"> + <Column gap='lg'> {list().prepend} <For each={list().entries}> {(category) => ( @@ -53,15 +52,15 @@ export function SettingsSidebar(props: { <Show when={category.title}> <CategoryTitle>{category.title}</CategoryTitle> </Show> - <Column gap="s"> + <Column gap='s'> <For each={category.entries}> {(entry) => ( <Show when={!entry.hidden}> <SidebarButton onClick={() => navigate(entry)} aria-selected={ - props.page()?.split("/")[0] === - entry.id?.split("/")[0] + props.page()?.split('/')[0] === + entry.id?.split('/')[0] } > <SidebarButtonTitle> @@ -102,19 +101,19 @@ export function SettingsSidebar(props: { /** * Base layout of the sidebar */ -const Base = styled("div", "Sidebar")` +const Base = styled('div', 'Sidebar')` display: flex; flex: 1 0 218px; padding-left: 8px; justify-content: flex-end; - color: ${(props) => props.theme!.colours["settings-foreground"]}; + color: ${(props) => props.theme!.colours['settings-foreground']}; `; /** * Aligned content within the sidebar */ -const Content = styled("div", "Content")` +const Content = styled('div', 'Content')` min-width: 230px; max-width: 300px; padding: 74px 0 8px; @@ -137,5 +136,5 @@ const CategoryTitle = styled(OverflowingText)` font-weight: 700; margin: 0 8px; margin-inline-end: 20px; - color: ${(props) => props.theme!.colours["settings-sidebar-category"]}; + color: ${(props) => props.theme!.colours['settings-sidebar-category']}; `; diff --git a/packages/client/components/app/interface/settings/_layout/SidebarButton.tsx b/packages/client/components/app/interface/settings/_layout/SidebarButton.tsx index aca5b8eb9..b1b97ef9c 100644 --- a/packages/client/components/app/interface/settings/_layout/SidebarButton.tsx +++ b/packages/client/components/app/interface/settings/_layout/SidebarButton.tsx @@ -1,4 +1,4 @@ -import { styled } from "@revolt/ui"; +import { styled } from '@revolt/ui'; // TODO: move to @revolt/ui package @@ -19,11 +19,11 @@ export const SidebarButton = styled.a<Props>` font-size: 15px; user-select: none; transition: background-color 0.1s ease-in-out; - color: ${(props) => props.theme!.colours["settings-sidebar-foreground"]}; + color: ${(props) => props.theme!.colours['settings-sidebar-foreground']}; background: ${(props) => - props["aria-selected"] - ? props.theme!.colours["settings-sidebar-button-hover"] - : "unset"}; + props['aria-selected'] + ? props.theme!.colours['settings-sidebar-button-hover'] + : 'unset'}; svg { flex-shrink: 0; @@ -31,12 +31,12 @@ export const SidebarButton = styled.a<Props>` &:hover { background-color: ${(props) => - props.theme!.colours["settings-sidebar-button-hover"]}; + props.theme!.colours['settings-sidebar-button-hover']}; } &:active { background-color: ${(props) => - props.theme!.colours["settings-sidebar-button-active"]}; + props.theme!.colours['settings-sidebar-button-active']}; } `; diff --git a/packages/client/components/app/interface/settings/channel/Webhooks.tsx b/packages/client/components/app/interface/settings/channel/Webhooks.tsx index 630599106..94e1d4e06 100644 --- a/packages/client/components/app/interface/settings/channel/Webhooks.tsx +++ b/packages/client/components/app/interface/settings/channel/Webhooks.tsx @@ -1,20 +1,17 @@ -import { BiSolidCloud, BiSolidTrash } from "solid-icons/bi"; -import { For, Match, Show, Switch, createSignal, onMount } from "solid-js"; - -import type { ChannelWebhook } from "revolt.js"; - -import { useClient } from "@revolt/client"; +import { useClient } from '@revolt/client'; import { Avatar, CategoryButton, Column, Preloader, Typography, -} from "@revolt/ui"; - -import { useSettingsNavigation } from "../Settings"; +} from '@revolt/ui'; +import type { ChannelWebhook } from 'revolt.js'; +import { BiSolidCloud, BiSolidTrash } from 'solid-icons/bi'; +import { createSignal, For, Match, onMount, Show, Switch } from 'solid-js'; -import { ChannelSettingsProps } from "."; +import { useSettingsNavigation } from '../Settings'; +import type { ChannelSettingsProps } from '.'; /** * Webhooks @@ -37,9 +34,9 @@ export default function Webhooks(props: ChannelSettingsProps) { }); return ( - <Column gap="xl"> + <Column gap='xl'> <CategoryButton - action="chevron" + action='chevron' icon={<BiSolidCloud size={24} />} onClick={() => void 0} > @@ -48,8 +45,8 @@ export default function Webhooks(props: ChannelSettingsProps) { <Show when={!webhooks() || webhooks()!.length !== 0}> <Column> - <Typography variant="label">My Bots</Typography> - <Switch fallback={<Preloader type="ring" />}> + <Typography variant='label'>My Bots</Typography> + <Switch fallback={<Preloader type='ring' />}> <Match when={webhooks()?.length}> <For each={webhooks()}> {(webhook) => ( @@ -57,7 +54,7 @@ export default function Webhooks(props: ChannelSettingsProps) { icon={<Avatar src={webhook.avatarURL} size={24} />} description={webhook.id} onClick={() => navigate(`webhooks/${webhook.id}`)} - action="chevron" + action='chevron' > {webhook.name} </CategoryButton> @@ -76,9 +73,9 @@ export default function Webhooks(props: ChannelSettingsProps) { */ export function Webhook(props: { webhook: ChannelWebhook }) { return ( - <Column gap="xl"> + <Column gap='xl'> <CategoryButton - action="chevron" + action='chevron' icon={<BiSolidTrash size={24} />} onClick={() => void 0} > diff --git a/packages/client/components/app/interface/settings/channel/index.tsx b/packages/client/components/app/interface/settings/channel/index.tsx index 436f0f93b..19bba9715 100644 --- a/packages/client/components/app/interface/settings/channel/index.tsx +++ b/packages/client/components/app/interface/settings/channel/index.tsx @@ -1,21 +1,18 @@ +import { useClient } from '@revolt/client'; +import { getController } from '@revolt/common'; +import { useTranslation } from '@revolt/i18n'; +import { TextWithEmoji } from '@revolt/markdown'; +import { ColouredText, useTheme } from '@revolt/ui'; +import type { Channel } from 'revolt.js'; import { BiRegularListUl, BiSolidCloud, BiSolidInfoCircle, BiSolidTrash, -} from "solid-icons/bi"; +} from 'solid-icons/bi'; -import { Channel } from "revolt.js"; - -import { useClient } from "@revolt/client"; -import { getController } from "@revolt/common"; -import { useTranslation } from "@revolt/i18n"; -import { TextWithEmoji } from "@revolt/markdown"; -import { ColouredText, useTheme } from "@revolt/ui"; - -import { SettingsConfiguration } from ".."; - -import Webhooks, { Webhook } from "./Webhooks"; +import type { SettingsConfiguration } from '..'; +import Webhooks, { Webhook } from './Webhooks'; const Config: SettingsConfiguration<Channel> = { /** @@ -26,29 +23,28 @@ const Config: SettingsConfiguration<Channel> = { const t = useTranslation(); const client = useClient(); - if (key.startsWith("webhooks/")) { + if (key.startsWith('webhooks/')) { const webhook = client().channelWebhooks.get(key.substring(9)); return webhook!.name; } - return t(`app.settings.channel_pages.${key.replaceAll("/", ".")}.title`); + return t(`app.settings.channel_pages.${key.replaceAll('/', '.')}.title`); }, /** * Render the current channel settings page */ render(props, channel) { - // eslint-disable-next-line solid/reactivity const id = props.page(); const client = useClient(); - if (id?.startsWith("webhooks/")) { + if (id?.startsWith('webhooks/')) { const webhook = client().channelWebhooks.get(id.substring(9)); return <Webhook webhook={webhook!} />; } switch (id) { - case "webhooks": + case 'webhooks': return <Webhooks channel={channel} />; default: return null; @@ -69,27 +65,27 @@ const Config: SettingsConfiguration<Channel> = { title: <TextWithEmoji content={channel.name} />, entries: [ { - id: "overview", + id: 'overview', icon: <BiSolidInfoCircle size={20} />, - title: t("app.settings.channel_pages.overview.title"), + title: t('app.settings.channel_pages.overview.title'), }, { - hidden: !channel.havePermission("ManagePermissions"), - id: "permissions", + hidden: !channel.havePermission('ManagePermissions'), + id: 'permissions', icon: <BiRegularListUl size={20} />, - title: t("app.settings.channel_pages.permissions.title"), + title: t('app.settings.channel_pages.permissions.title'), }, { - hidden: !channel.havePermission("ManageWebhooks"), - id: "webhooks", + hidden: !channel.havePermission('ManageWebhooks'), + id: 'webhooks', icon: <BiSolidCloud size={20} />, - title: t("app.settings.channel_pages.webhooks.title"), + title: t('app.settings.channel_pages.webhooks.title'), }, ], }, { hidden: !( - channel.type !== "Group" && channel.havePermission("ManageChannel") + channel.type !== 'Group' && channel.havePermission('ManageChannel') ), entries: [ { @@ -101,15 +97,15 @@ const Config: SettingsConfiguration<Channel> = { ), title: ( <ColouredText colour={theme!.customColours.error.color}> - {t("app.context_menu.delete_channel")} + {t('app.context_menu.delete_channel')} </ColouredText> ), /** * Handle server deletion request */ onClick() { - getController("modal").push({ - type: "delete_channel", + getController('modal').push({ + type: 'delete_channel', channel, }); }, @@ -123,9 +119,9 @@ const Config: SettingsConfiguration<Channel> = { export default Config; -export type ChannelSettingsProps = { +export interface ChannelSettingsProps { /** * Channel */ channel: Channel; -}; +} diff --git a/packages/client/components/app/interface/settings/index.tsx b/packages/client/components/app/interface/settings/index.tsx index adc2c1828..7d25f5bc2 100644 --- a/packages/client/components/app/interface/settings/index.tsx +++ b/packages/client/components/app/interface/settings/index.tsx @@ -1,13 +1,14 @@ -import { Accessor, JSX } from "solid-js"; +import type { Accessor, JSX } from 'solid-js'; -import { Settings, SettingsProps } from "./Settings"; -import channel from "./channel"; -import server from "./server"; -import user from "./user"; +import channel from './channel'; +import server from './server'; +import type { SettingsProps } from './Settings'; +import { Settings } from './Settings'; +import user from './user'; -export { Settings } from "./Settings"; +export { Settings } from './Settings'; -export type SettingsConfiguration<T> = { +export interface SettingsConfiguration<T> { /** * Generate list of categories and entries * @returns List @@ -28,12 +29,12 @@ export type SettingsConfiguration<T> = { props: { page: Accessor<undefined | string> }, context: T ) => JSX.Element; -}; +} /** * List of categories and entries */ -export type SettingsList = { +export interface SettingsList { prepend?: JSX.Element; append?: JSX.Element; entries: { @@ -41,12 +42,12 @@ export type SettingsList = { title?: JSX.Element; entries: SettingsEntry[]; }[]; -}; +} /** * Individual settings entry */ -export type SettingsEntry = { +export interface SettingsEntry { id?: string; href?: string; onClick?: () => void; @@ -55,7 +56,7 @@ export type SettingsEntry = { icon: JSX.Element; title: JSX.Element; -}; +} export const SettingsConfigurations: Record< string, @@ -75,7 +76,7 @@ export function SettingsUsingConfiguration( props: SettingsProps & { configKey: string } ) { // eslint-disable-next-line solid/reactivity - const config = SettingsConfigurations[props.configKey ?? "client"]; + const config = SettingsConfigurations[props.configKey ?? 'client']; return ( <Settings diff --git a/packages/client/components/app/interface/settings/server/Overview.tsx b/packages/client/components/app/interface/settings/server/Overview.tsx index 516ded52b..720f9939c 100644 --- a/packages/client/components/app/interface/settings/server/Overview.tsx +++ b/packages/client/components/app/interface/settings/server/Overview.tsx @@ -1,9 +1,4 @@ -import { BiRegularAbacus, BiRegularGlobe, BiSolidFlag } from "solid-icons/bi"; -import { Show } from "solid-js"; - -import { ServerFlags } from "revolt.js"; - -import { useClient } from "@revolt/client"; +import { useClient } from '@revolt/client'; import { CategoryButton, CategoryButtonGroup, @@ -12,9 +7,12 @@ import { Column, FormGroup, Typography, -} from "@revolt/ui"; +} from '@revolt/ui'; +import { ServerFlags } from 'revolt.js'; +import { BiRegularAbacus, BiRegularGlobe, BiSolidFlag } from 'solid-icons/bi'; +import { Show } from 'solid-js'; -import { ServerSettingsProps } from "."; +import type { ServerSettingsProps } from '.'; /** * Server overview @@ -23,19 +21,19 @@ export default function ServerOverview(props: ServerSettingsProps) { const user = useClient(); return ( - <Column gap="xl"> + <Column gap='xl'> <Show when={user().user?.privileged}> <Column> - <Typography variant="label">Platform</Typography> + <Typography variant='label'>Platform</Typography> <CategoryButtonGroup> <CategoryCollapse - title="Flags" + title='Flags' icon={<BiSolidFlag size={24} />} - description="Set visible badges on server" + description='Set visible badges on server' > <FormGroup> <CategoryButton - icon="blank" + icon='blank' action={ <Checkbox value={!props.server.flags} @@ -53,7 +51,7 @@ export default function ServerOverview(props: ServerSettingsProps) { </FormGroup> <FormGroup> <CategoryButton - icon="blank" + icon='blank' action={ <Checkbox value={props.server.flags === ServerFlags.Official} @@ -71,7 +69,7 @@ export default function ServerOverview(props: ServerSettingsProps) { </FormGroup> <FormGroup> <CategoryButton - icon="blank" + icon='blank' action={ <Checkbox value={props.server.flags === ServerFlags.Verified} @@ -90,7 +88,7 @@ export default function ServerOverview(props: ServerSettingsProps) { </CategoryCollapse> <FormGroup> <CategoryButton - description="Message counts will be collected for server" + description='Message counts will be collected for server' icon={<BiRegularAbacus size={24} />} action={ <Checkbox @@ -109,7 +107,7 @@ export default function ServerOverview(props: ServerSettingsProps) { </FormGroup> <FormGroup> <CategoryButton - description="Server can be joined from Discover" + description='Server can be joined from Discover' icon={<BiRegularGlobe size={24} />} action={ <Checkbox diff --git a/packages/client/components/app/interface/settings/server/index.tsx b/packages/client/components/app/interface/settings/server/index.tsx index 522a76097..1bced4a78 100644 --- a/packages/client/components/app/interface/settings/server/index.tsx +++ b/packages/client/components/app/interface/settings/server/index.tsx @@ -1,3 +1,9 @@ +import { useUser } from '@revolt/client'; +import { getController } from '@revolt/common'; +import { useTranslation } from '@revolt/i18n'; +import { TextWithEmoji } from '@revolt/markdown'; +import { ColouredText, useTheme } from '@revolt/ui'; +import type { Server } from 'revolt.js'; import { BiSolidEnvelope, BiSolidFlagAlt, @@ -6,19 +12,10 @@ import { BiSolidInfoCircle, BiSolidTrash, BiSolidUserX, -} from "solid-icons/bi"; +} from 'solid-icons/bi'; -import { Server } from "revolt.js"; - -import { useUser } from "@revolt/client"; -import { getController } from "@revolt/common"; -import { useTranslation } from "@revolt/i18n"; -import { TextWithEmoji } from "@revolt/markdown"; -import { ColouredText, useTheme } from "@revolt/ui"; - -import { SettingsConfiguration } from ".."; - -import Overview from "./Overview"; +import type { SettingsConfiguration } from '..'; +import Overview from './Overview'; const Config: SettingsConfiguration<Server> = { /** @@ -28,7 +25,7 @@ const Config: SettingsConfiguration<Server> = { title(key) { const t = useTranslation(); return t( - `app.settings.server_pages.${key.replaceAll("/", ".")}.title`, + `app.settings.server_pages.${key.replaceAll('/', '.')}.title`, undefined, key ); @@ -38,16 +35,15 @@ const Config: SettingsConfiguration<Server> = { * Render the current server settings page */ render(props, server) { - // eslint-disable-next-line solid/reactivity const id = props.page(); if (!server.$exists) { - getController("modal").pop(); + getController('modal').pop(); return null; } switch (id) { - case "overview": + case 'overview': return <Overview server={server} />; default: return null; @@ -69,14 +65,14 @@ const Config: SettingsConfiguration<Server> = { title: <TextWithEmoji content={server.name} />, entries: [ { - id: "overview", + id: 'overview', icon: <BiSolidInfoCircle size={20} />, - title: t("app.settings.server_pages.overview.title"), + title: t('app.settings.server_pages.overview.title'), }, { - id: "members", + id: 'members', icon: <BiSolidGroup size={20} />, - title: t("app.settings.server_pages.members.title"), + title: t('app.settings.server_pages.members.title'), }, /*{ TODO: deprecate id: "categories", @@ -85,43 +81,43 @@ const Config: SettingsConfiguration<Server> = { },*/ { hidden: !( - server.havePermission("ManageRole") || - server.havePermission("AssignRoles") + server.havePermission('ManageRole') || + server.havePermission('AssignRoles') ), - id: "roles", + id: 'roles', icon: <BiSolidFlagAlt size={20} />, - title: t("app.settings.server_pages.roles.title"), + title: t('app.settings.server_pages.roles.title'), }, ], }, { - hidden: !server.havePermission("ManageCustomisation"), - title: t("app.settings.server_pages.customisation.title"), + hidden: !server.havePermission('ManageCustomisation'), + title: t('app.settings.server_pages.customisation.title'), entries: [ { - id: "emojis", + id: 'emojis', icon: <BiSolidHappyBeaming size={20} />, - title: t("app.settings.server_pages.emojis.title"), + title: t('app.settings.server_pages.emojis.title'), }, ], }, { hidden: - !server.havePermission("ManageServer") && - !server.havePermission("BanMembers"), - title: t("app.settings.server_pages.management.title"), + !server.havePermission('ManageServer') && + !server.havePermission('BanMembers'), + title: t('app.settings.server_pages.management.title'), entries: [ { - hidden: !server.havePermission("ManageServer"), - id: "invites", + hidden: !server.havePermission('ManageServer'), + id: 'invites', icon: <BiSolidEnvelope size={20} />, - title: t("app.settings.server_pages.invites.title"), + title: t('app.settings.server_pages.invites.title'), }, { - hidden: !server.havePermission("BanMembers"), - id: "bans", + hidden: !server.havePermission('BanMembers'), + id: 'bans', icon: <BiSolidUserX size={20} />, - title: t("app.settings.server_pages.bans.title"), + title: t('app.settings.server_pages.bans.title'), }, ], }, @@ -137,15 +133,15 @@ const Config: SettingsConfiguration<Server> = { ), title: ( <ColouredText colour={theme!.customColours.error.color}> - {t("app.context_menu.delete_server")} + {t('app.context_menu.delete_server')} </ColouredText> ), /** * Handle server deletion request */ onClick() { - getController("modal").push({ - type: "delete_server", + getController('modal').push({ + type: 'delete_server', server, }); }, @@ -159,9 +155,9 @@ const Config: SettingsConfiguration<Server> = { export default Config; -export type ServerSettingsProps = { +export interface ServerSettingsProps { /** * Server */ server: Server; -}; +} diff --git a/packages/client/components/app/interface/settings/user/Accessibility.tsx b/packages/client/components/app/interface/settings/user/Accessibility.tsx index 2fce479f6..ff667ee63 100644 --- a/packages/client/components/app/interface/settings/user/Accessibility.tsx +++ b/packages/client/components/app/interface/settings/user/Accessibility.tsx @@ -1,35 +1,36 @@ -import { useTranslation } from "@revolt/i18n"; +import MdAnimation from '@material-design-icons/svg/outlined/animation.svg?component-solid'; +import { useTranslation } from '@revolt/i18n'; import { - CategoryButton, - CategoryButtonGroup, - Checkbox, - Column, - FormGroup, - iconSize, -} from "@revolt/ui"; - -import MdAnimation from "@material-design-icons/svg/outlined/animation.svg?component-solid"; + CategoryButton, + CategoryButtonGroup, + Checkbox, + Column, + FormGroup, + iconSize, +} from '@revolt/ui'; /** * Accessibility settings page */ export default function Accessibility() { - const t = useTranslation(); + const t = useTranslation(); - return ( - <Column gap="lg"> - <CategoryButtonGroup> - <FormGroup> - <CategoryButton - action={<Checkbox value onChange={(value) => void value} />} - onClick={() => void 0} - icon={<MdAnimation {...iconSize(22)} />} - description={t("app.settings.pages.accessibility.descriptions.reduced_motion")} - > - {t("app.settings.pages.accessibility.reduced_motion")} - </CategoryButton> - </FormGroup> - </CategoryButtonGroup> - </Column> - ); + return ( + <Column gap='lg'> + <CategoryButtonGroup> + <FormGroup> + <CategoryButton + action={<Checkbox value onChange={(value) => void value} />} + onClick={() => void 0} + icon={<MdAnimation {...iconSize(22)} />} + description={t( + 'app.settings.pages.accessibility.descriptions.reduced_motion' + )} + > + {t('app.settings.pages.accessibility.reduced_motion')} + </CategoryButton> + </FormGroup> + </CategoryButtonGroup> + </Column> + ); } diff --git a/packages/client/components/app/interface/settings/user/Account.tsx b/packages/client/components/app/interface/settings/user/Account.tsx index 2d58805c9..47dcdb9f4 100644 --- a/packages/client/components/app/interface/settings/user/Account.tsx +++ b/packages/client/components/app/interface/settings/user/Account.tsx @@ -1,47 +1,44 @@ -import { - Accessor, - Match, - Show, - Switch, - createMemo, - createSignal, - onMount, -} from "solid-js"; - -import { clientController, useClient } from "@revolt/client"; +import MdCakeFill from '@material-design-icons/svg/filled/cake.svg?component-solid'; +import MdAlternateEmail from '@material-design-icons/svg/outlined/alternate_email.svg?component-solid'; +import MdBlock from '@material-design-icons/svg/outlined/block.svg?component-solid'; +import MdDelete from '@material-design-icons/svg/outlined/delete.svg?component-solid'; +import MdDraw from '@material-design-icons/svg/outlined/draw.svg?component-solid'; +import MdEdit from '@material-design-icons/svg/outlined/edit.svg?component-solid'; +import MdLock from '@material-design-icons/svg/outlined/lock.svg?component-solid'; +import MdMail from '@material-design-icons/svg/outlined/mail.svg?component-solid'; +import MdPassword from '@material-design-icons/svg/outlined/password.svg?component-solid'; +import MdVerifiedUser from '@material-design-icons/svg/outlined/verified_user.svg?component-solid'; +import { clientController, useClient } from '@revolt/client'; import { createMfaResource, createOwnProfileResource, -} from "@revolt/client/resources"; -import { getController } from "@revolt/common"; -import { dayjs, useTranslation } from "@revolt/i18n"; +} from '@revolt/client/resources'; +import { getController } from '@revolt/common'; +import { dayjs, useTranslation } from '@revolt/i18n'; import { Avatar, CategoryButton, CategoryButtonGroup, CategoryCollapse, Column, - Row, - Typography, iconSize, + Row, styled, + Typography, useTheme, -} from "@revolt/ui"; - -import MdCakeFill from "@material-design-icons/svg/filled/cake.svg?component-solid"; -import MdAlternateEmail from "@material-design-icons/svg/outlined/alternate_email.svg?component-solid"; -import MdBlock from "@material-design-icons/svg/outlined/block.svg?component-solid"; -import MdDelete from "@material-design-icons/svg/outlined/delete.svg?component-solid"; -import MdDraw from "@material-design-icons/svg/outlined/draw.svg?component-solid"; -import MdEdit from "@material-design-icons/svg/outlined/edit.svg?component-solid"; -import MdLock from "@material-design-icons/svg/outlined/lock.svg?component-solid"; -import MdMail from "@material-design-icons/svg/outlined/mail.svg?component-solid"; -import MdPassword from "@material-design-icons/svg/outlined/password.svg?component-solid"; -import MdVerifiedUser from "@material-design-icons/svg/outlined/verified_user.svg?component-solid"; - -import { useSettingsNavigation } from "../Settings"; +} from '@revolt/ui'; +import { + type Accessor, + createMemo, + createSignal, + Match, + onMount, + Show, + Switch, +} from 'solid-js'; -import { UserSummary } from "./account"; +import { useSettingsNavigation } from '../Settings'; +import { UserSummary } from './account/index'; /** * Account Page @@ -52,11 +49,11 @@ export default function MyAccount() { const { navigate } = useSettingsNavigation(); return ( - <Column gap="lg"> + <Column gap='lg'> <UserSummary user={client().user!} bannerUrl={profile.data?.animatedBannerURL} - onEdit={() => navigate("profile")} + onEdit={() => navigate('profile')} showBadges /> <EditAccount /> @@ -72,36 +69,36 @@ export default function MyAccount() { function EditAccount() { const t = useTranslation(); const client = useClient(); - const [email, setEmail] = createSignal("•••••••••••@•••••••••••"); + const [email, setEmail] = createSignal('•••••••••••@•••••••••••'); return ( <CategoryButtonGroup> <CategoryButton - action="chevron" + action='chevron' onClick={() => - getController("modal").push({ - type: "edit_username", + getController('modal').push({ + type: 'edit_username', client: client(), }) } icon={<MdAlternateEmail {...iconSize(22)} />} description={client().user?.username} > - <Typography variant="label">{t("login.username")}</Typography> + <Typography variant='label'>{t('login.username')}</Typography> </CategoryButton> <CategoryButton - action="chevron" + action='chevron' onClick={() => - getController("modal").push({ - type: "edit_email", + getController('modal').push({ + type: 'edit_email', client: client(), }) } icon={<MdMail {...iconSize(22)} />} description={ <Row> - {email()}{" "} - <Show when={email().startsWith("•")}> + {email()}{' '} + <Show when={email().startsWith('•')}> <a onClick={(event) => { event.stopPropagation(); @@ -114,20 +111,20 @@ function EditAccount() { </Row> } > - <Typography variant="label">{t("login.email")}</Typography> + <Typography variant='label'>{t('login.email')}</Typography> </CategoryButton> <CategoryButton - action="chevron" + action='chevron' onClick={() => - getController("modal").push({ - type: "edit_password", + getController('modal').push({ + type: 'edit_password', client: client(), }) } icon={<MdPassword {...iconSize(22)} />} - description={"•••••••••"} + description={'•••••••••'} > - <Typography variant="label">{t("login.password")}</Typography> + <Typography variant='label'>{t('login.password')}</Typography> </CategoryButton> </CategoryButtonGroup> ); @@ -144,12 +141,12 @@ function MultiFactorAuth() { * Show recovery codes */ async function showRecoveryCodes() { - const modals = getController("modal"); + const modals = getController('modal'); const ticket = await modals.mfaFlow(mfa.data!); ticket!.fetchRecoveryCodes().then((codes) => - getController("modal").push({ - type: "mfa_recovery", + getController('modal').push({ + type: 'mfa_recovery', mfa: mfa.data!, codes, }) @@ -160,12 +157,12 @@ function MultiFactorAuth() { * Generate recovery codes */ async function generateRecoveryCodes() { - const modals = getController("modal"); + const modals = getController('modal'); const ticket = await modals.mfaFlow(mfa.data!); ticket!.generateRecoveryCodes().then((codes) => - getController("modal").push({ - type: "mfa_recovery", + getController('modal').push({ + type: 'mfa_recovery', mfa: mfa.data!, codes, }) @@ -176,7 +173,7 @@ function MultiFactorAuth() { * Configure authenticator app */ async function setupAuthenticatorApp() { - const modals = getController("modal"); + const modals = getController('modal'); const ticket = await modals.mfaFlow(mfa.data!); const secret = await ticket!.generateAuthenticatorSecret(); @@ -202,7 +199,7 @@ function MultiFactorAuth() { * Disable authenticator app */ function disableAuthenticatorApp() { - getController("modal") + getController('modal') .mfaFlow(mfa.data!) .then((ticket) => ticket!.disableAuthenticator()); } @@ -211,16 +208,16 @@ function MultiFactorAuth() { <CategoryButtonGroup> <CategoryCollapse icon={<MdVerifiedUser {...iconSize(22)} />} - title="Recovery Codes" - description="Configure a way to get back into your account in case your 2FA is lost" + title='Recovery Codes' + description='Configure a way to get back into your account in case your 2FA is lost' > <Switch fallback={ <CategoryButton - icon="blank" + icon='blank' disabled={mfa.isLoading} onClick={generateRecoveryCodes} - description="Setup recovery codes" + description='Setup recovery codes' > Generate Recovery Codes </CategoryButton> @@ -228,15 +225,15 @@ function MultiFactorAuth() { > <Match when={!mfa.isLoading && mfa.data?.recoveryEnabled}> <CategoryButton - icon="blank" - description="Get active recovery codes" + icon='blank' + description='Get active recovery codes' onClick={showRecoveryCodes} > View Recovery Codes </CategoryButton> <CategoryButton - icon="blank" - description="Get a new set of recovery codes" + icon='blank' + description='Get a new set of recovery codes' onClick={generateRecoveryCodes} > Reset Recovery Codes @@ -246,16 +243,16 @@ function MultiFactorAuth() { </CategoryCollapse> <CategoryCollapse icon={<MdLock {...iconSize(22)} />} - title="Authenticator App" - description="Configure one-time password authentication" + title='Authenticator App' + description='Configure one-time password authentication' > <Switch fallback={ <CategoryButton - icon="blank" + icon='blank' disabled={mfa.isLoading} onClick={setupAuthenticatorApp} - description="Setup one-time password authenticator" + description='Setup one-time password authenticator' > Enable Authenticator </CategoryButton> @@ -263,8 +260,8 @@ function MultiFactorAuth() { > <Match when={!mfa.isLoading && mfa.data?.authenticatorEnabled}> <CategoryButton - icon="blank" - description="Disable one-time password authenticator" + icon='blank' + description='Disable one-time password authenticator' onClick={disableAuthenticatorApp} > Remove Authenticator @@ -295,7 +292,7 @@ function ManageAccount() { * Disable account */ function disableAccount() { - getController("modal") + getController('modal') .mfaFlow(mfa.data!) .then((ticket) => ticket!.disableAccount().then(() => clientController.logout()) @@ -306,7 +303,7 @@ function ManageAccount() { * Delete account */ function deleteAccount() { - getController("modal") + getController('modal') .mfaFlow(mfa.data!) .then((ticket) => ticket!.deleteAccount().then(() => clientController.logout()) @@ -316,29 +313,29 @@ function ManageAccount() { return ( <CategoryButtonGroup> <CategoryButton - action="chevron" + action='chevron' disabled={mfa.isLoading} onClick={disableAccount} icon={ <MdBlock {...iconSize(22)} fill={theme!.customColours.error.color} /> } - description={t("app.settings.pages.account.manage.disable_description")} + description={t('app.settings.pages.account.manage.disable_description')} > - {t("app.settings.pages.account.manage.disable")} + {t('app.settings.pages.account.manage.disable')} </CategoryButton> <CategoryButton - action={stillOwnServers() ? undefined : "chevron"} + action={stillOwnServers() ? undefined : 'chevron'} disabled={mfa.isLoading || stillOwnServers()} onClick={deleteAccount} icon={ <MdDelete {...iconSize(22)} fill={theme!.customColours.error.color} /> } - description={t("app.settings.pages.account.manage.delete_description")} + description={t('app.settings.pages.account.manage.delete_description')} > {t( stillOwnServers() - ? "app.settings.pages.account.manage.delete_still_own_servers" - : "app.settings.pages.account.manage.delete" + ? 'app.settings.pages.account.manage.delete_still_own_servers' + : 'app.settings.pages.account.manage.delete' )} </CategoryButton> </CategoryButtonGroup> diff --git a/packages/client/components/app/interface/settings/user/Appearance.tsx b/packages/client/components/app/interface/settings/user/Appearance.tsx index ae40f9897..8fa34f4b8 100644 --- a/packages/client/components/app/interface/settings/user/Appearance.tsx +++ b/packages/client/components/app/interface/settings/user/Appearance.tsx @@ -1,20 +1,19 @@ +import MdBrush from '@material-design-icons/svg/outlined/brush.svg?component-solid'; +import MdDataObject from '@material-design-icons/svg/outlined/data_object.svg?component-solid'; +import MdFormatSize from '@material-design-icons/svg/outlined/format_size.svg?component-solid'; +import MdPalette from '@material-design-icons/svg/outlined/palette.svg?component-solid'; +import MdSentimentVerySatisfied from '@material-design-icons/svg/outlined/sentiment_very_satisfied.svg?component-solid'; +import MdWallpaper from '@material-design-icons/svg/outlined/wallpaper.svg?component-solid'; import { CategoryButton, CategoryButtonGroup, Column, - Row, iconSize, + Row, styled, -} from "@revolt/ui"; - -import MdBrush from "@material-design-icons/svg/outlined/brush.svg?component-solid"; -import MdDataObject from "@material-design-icons/svg/outlined/data_object.svg?component-solid"; -import MdFormatSize from "@material-design-icons/svg/outlined/format_size.svg?component-solid"; -import MdPalette from "@material-design-icons/svg/outlined/palette.svg?component-solid"; -import MdSentimentVerySatisfied from "@material-design-icons/svg/outlined/sentiment_very_satisfied.svg?component-solid"; -import MdWallpaper from "@material-design-icons/svg/outlined/wallpaper.svg?component-solid"; +} from '@revolt/ui'; -import { useSettingsNavigation } from "../Settings"; +import { useSettingsNavigation } from '../Settings'; /** * Appearance @@ -22,61 +21,61 @@ import { useSettingsNavigation } from "../Settings"; export default function Appearance() { const { navigate } = useSettingsNavigation(); return ( - <Column gap="lg"> + <Column gap='lg'> <Row> <ThemePreview - src="https://app.revolt.chat/assets/dark.f38e16a0.svg" + src='https://app.revolt.chat/assets/dark.f38e16a0.svg' draggable={false} /> <ThemeProperties>hello</ThemeProperties> </Row> <CategoryButtonGroup> <CategoryButton - action="chevron" + action='chevron' icon={<MdPalette {...iconSize(22)} />} - onClick={() => navigate("appearance/colours")} - description="Customise accent colour, additional colours, and transparency" + onClick={() => navigate('appearance/colours')} + description='Customise accent colour, additional colours, and transparency' > Colours </CategoryButton> <CategoryButton - action="chevron" + action='chevron' icon={<MdFormatSize {...iconSize(22)} />} - onClick={() => navigate("appearance/fonts")} - description="Customise display and text options" + onClick={() => navigate('appearance/fonts')} + description='Customise display and text options' > Display and fonts </CategoryButton> <CategoryButton - action="chevron" + action='chevron' icon={<MdWallpaper {...iconSize(22)} />} - onClick={() => navigate("appearance/wallpaper")} - description="Set a wallpaper for your chats" + onClick={() => navigate('appearance/wallpaper')} + description='Set a wallpaper for your chats' > Wallpaper </CategoryButton> <CategoryButton - action="chevron" + action='chevron' icon={<MdSentimentVerySatisfied {...iconSize(22)} />} - onClick={() => navigate("appearance/emoji")} - description="Change how your emojis look" + onClick={() => navigate('appearance/emoji')} + description='Change how your emojis look' > Emoji </CategoryButton> <CategoryButton - action="chevron" + action='chevron' icon={<MdDataObject {...iconSize(22)} />} - onClick={() => navigate("appearance/advanced_options")} - description="Customise theme variables and apply custom CSS" + onClick={() => navigate('appearance/advanced_options')} + description='Customise theme variables and apply custom CSS' > Advanced Options </CategoryButton> </CategoryButtonGroup> <CategoryButtonGroup> <CategoryButton - action="external" + action='external' icon={<MdBrush {...iconSize(22)} />} - description="Browse themes made by the community" + description='Browse themes made by the community' > Discover themes </CategoryButton> @@ -101,6 +100,6 @@ const ThemeProperties = styled.div` display: flex; width: 100%; padding: 20px; - background: ${(props) => props.theme!.colours["temp-1"]}; + background: ${(props) => props.theme!.colours['temp-1']}; border-radius: ${(props) => props.theme!.borderRadius.xl}; `; diff --git a/packages/client/components/app/interface/settings/user/Experiments.tsx b/packages/client/components/app/interface/settings/user/Experiments.tsx index 3b92b2483..d69adae5b 100644 --- a/packages/client/components/app/interface/settings/user/Experiments.tsx +++ b/packages/client/components/app/interface/settings/user/Experiments.tsx @@ -1,16 +1,15 @@ -import { For } from "solid-js"; - -import { state } from "@revolt/state"; +import { state } from '@revolt/state'; import { AVAILABLE_EXPERIMENTS, EXPERIMENTS, -} from "@revolt/state/stores/Experiments"; +} from '@revolt/state/stores/Experiments'; import { CategoryButton, CategoryButtonGroup, Checkbox, FormGroup, -} from "@revolt/ui"; +} from '@revolt/ui'; +import { For } from 'solid-js'; /** * Experiments diff --git a/packages/client/components/app/interface/settings/user/Feedback.tsx b/packages/client/components/app/interface/settings/user/Feedback.tsx index 5ab318016..6490cafac 100644 --- a/packages/client/components/app/interface/settings/user/Feedback.tsx +++ b/packages/client/components/app/interface/settings/user/Feedback.tsx @@ -1,17 +1,16 @@ -import { useTranslation } from "@revolt/i18n"; +import MdBugReport from '@material-design-icons/svg/outlined/bug_report.svg?component-solid'; +import MdExitToApp from '@material-design-icons/svg/outlined/exit_to_app.svg?component-solid'; +import MdFormatListNumbered from '@material-design-icons/svg/outlined/format_list_numbered.svg?component-solid'; +import MdStar from '@material-design-icons/svg/outlined/star_outline.svg?component-solid'; +import MdViewKanban from '@material-design-icons/svg/outlined/view_kanban.svg?component-solid'; +import { useTranslation } from '@revolt/i18n'; import { CategoryButton, CategoryButtonGroup, Column, iconSize, styled, -} from "@revolt/ui"; - -import MdBugReport from "@material-design-icons/svg/outlined/bug_report.svg?component-solid"; -import MdExitToApp from "@material-design-icons/svg/outlined/exit_to_app.svg?component-solid"; -import MdFormatListNumbered from "@material-design-icons/svg/outlined/format_list_numbered.svg?component-solid"; -import MdStar from "@material-design-icons/svg/outlined/star_outline.svg?component-solid"; -import MdViewKanban from "@material-design-icons/svg/outlined/view_kanban.svg?component-solid"; +} from '@revolt/ui'; /** * Feedback @@ -20,14 +19,14 @@ export default function Feedback() { const t = useTranslation(); return ( - <Column gap="lg"> + <Column gap='lg'> <CategoryButtonGroup> <Link - href="https://github.com/orgs/revoltchat/projects/6/views/4" - target="_blank" + href='https://github.com/orgs/revoltchat/projects/6/views/4' + target='_blank' > <CategoryButton - action="external" + action='external' icon={<MdViewKanban {...iconSize(22)} />} onClick={() => void 0} description="See what we're currently working on." @@ -36,51 +35,51 @@ export default function Feedback() { </CategoryButton> </Link> <Link - href="https://github.com/orgs/revoltchat/discussions" - target="_blank" + href='https://github.com/orgs/revoltchat/discussions' + target='_blank' > <CategoryButton - action="external" + action='external' icon={<MdStar {...iconSize(22)} />} onClick={() => void 0} - description={t("app.settings.pages.feedback.suggest_desc")} + description={t('app.settings.pages.feedback.suggest_desc')} > - {t("app.settings.pages.feedback.suggest")} + {t('app.settings.pages.feedback.suggest')} </CategoryButton> </Link> <Link - href="https://github.com/revoltchat/frontend/issues/new/choose" - target="_blank" + href='https://github.com/revoltchat/frontend/issues/new/choose' + target='_blank' > <CategoryButton - action="external" + action='external' icon={<MdFormatListNumbered {...iconSize(22)} />} onClick={() => void 0} - description={t("app.settings.pages.feedback.issue_desc")} + description={t('app.settings.pages.feedback.issue_desc')} > - {t("app.settings.pages.feedback.issue")} + {t('app.settings.pages.feedback.issue')} </CategoryButton> </Link> <Link - href="https://github.com/orgs/revoltchat/projects/3" - target="_blank" + href='https://github.com/orgs/revoltchat/projects/3' + target='_blank' > <CategoryButton - action="external" + action='external' icon={<MdBugReport {...iconSize(22)} />} onClick={() => void 0} - description={t("app.settings.pages.feedback.bug_desc")} + description={t('app.settings.pages.feedback.bug_desc')} > - {t("app.settings.pages.feedback.bug")} + {t('app.settings.pages.feedback.bug')} </CategoryButton> </Link> </CategoryButtonGroup> <CategoryButtonGroup> <CategoryButton - action="chevron" + action='chevron' icon={<MdExitToApp {...iconSize(22)} />} onClick={() => void 0} - description="You can report issues and discuss improvements with us directly here." + description='You can report issues and discuss improvements with us directly here.' > Join the Revolt Lounge </CategoryButton> diff --git a/packages/client/components/app/interface/settings/user/Keybinds.tsx b/packages/client/components/app/interface/settings/user/Keybinds.tsx index bb60a4405..de6508519 100644 --- a/packages/client/components/app/interface/settings/user/Keybinds.tsx +++ b/packages/client/components/app/interface/settings/user/Keybinds.tsx @@ -1,17 +1,9 @@ -import { - BiSolidPencil, - BiSolidPlusCircle, - BiSolidXCircle, -} from "solid-icons/bi"; -import { BiRegularReset } from "solid-icons/bi"; -import { For, Match, Switch, createMemo, createSignal } from "solid-js"; - -import { getController } from "@revolt/common"; -import { useTranslation } from "@revolt/i18n"; -import { KeybindAction } from "@revolt/keybinds"; -import { KeyComboSequence } from "@revolt/keybinds"; -import { KeyCombo } from "@revolt/keybinds"; -import { state } from "@revolt/state"; +import { getController } from '@revolt/common'; +import { useTranslation } from '@revolt/i18n'; +import type { KeyComboSequence } from '@revolt/keybinds'; +import type { KeyCombo } from '@revolt/keybinds'; +import { KeybindAction } from '@revolt/keybinds'; +import { state } from '@revolt/state'; import { Button, CategoryButton, @@ -20,7 +12,14 @@ import { Input, KeySequence, styled, -} from "@revolt/ui"; +} from '@revolt/ui'; +import { + BiSolidPencil, + BiSolidPlusCircle, + BiSolidXCircle, +} from 'solid-icons/bi'; +import { BiRegularReset } from 'solid-icons/bi'; +import { createMemo, createSignal, For, Match, Switch } from 'solid-js'; const categories: Record<string, KeybindAction[]> = { navigation: [ @@ -62,15 +61,15 @@ export default function Keybinds() { const translateCombo = (combo: KeyCombo, short: boolean) => combo - .map((key) => t(`keys.${key}.${short ? "short" : "full"}`, {}, key)) - .join("+"); + .map((key) => t(`keys.${key}.${short ? 'short' : 'full'}`, {}, key)) + .join('+'); const translateSequence = (sequence: KeyComboSequence, short: boolean) => - sequence.map((combo) => translateCombo(combo, short)).join(" "); + sequence.map((combo) => translateCombo(combo, short)).join(' '); const editKeybind = (action: KeybindAction, index: number) => - getController("modal").push({ - type: "edit_keybind", + getController('modal').push({ + type: 'edit_keybind', action, onSubmit: (sequence) => { state.keybinds.setKeybind(action, index, sequence); @@ -78,8 +77,8 @@ export default function Keybinds() { }); const addKeybind = (action: KeybindAction) => - getController("modal").push({ - type: "edit_keybind", + getController('modal').push({ + type: 'edit_keybind', action, onSubmit: (sequence) => { state.keybinds.addKeybind(action, sequence); @@ -98,14 +97,13 @@ export default function Keybinds() { t(`app.settings.pages.keybinds.action.${action}.title`) as string, ...state.keybinds .getKeybinds() - [action].flatMap((sequence) => [ - translateSequence(sequence, false), - translateSequence(sequence, true), - ]), + [ + action + ].flatMap((sequence) => [translateSequence(sequence, false), translateSequence(sequence, true)]), ]) ); - const [searchText, setSearchText] = createSignal(""); + const [searchText, setSearchText] = createSignal(''); const filteredData = createMemo(() => { const foundActions = searchData() @@ -128,9 +126,9 @@ export default function Keybinds() { return ( <Column> <Input - type="text" + type='text' onInput={(e) => setSearchText(e.target.value)} - placeholder={t("app.settings.pages.keybinds.search")} + placeholder={t('app.settings.pages.keybinds.search')} /> <For each={filteredData()}> {([category, actions]) => ( @@ -138,7 +136,7 @@ export default function Keybinds() { title={t(`app.settings.pages.keybinds.category.${category}`)} // TODO: open={category !== "advanced"} > - <Column group="6px"> + <Column group='6px'> <For each={actions}> {(action) => ( <ActionCategory> @@ -165,8 +163,8 @@ export default function Keybinds() { <CategoryButton action={[ <Button - size="fluid" - variant="plain" + size='fluid' + variant='plain' onPress={() => editKeybind(action, index())} > <BiSolidPencil size={24} /> @@ -176,8 +174,8 @@ export default function Keybinds() { when={!keybindIsDefault && indexIsDefault} > <Button - size="fluid" - variant="plain" + size='fluid' + variant='plain' // title={t( // "app.settings.pages.keybinds.remove_keybind" // )} @@ -190,8 +188,8 @@ export default function Keybinds() { </Match> <Match when={!keybindIsDefault}> <Button - size="fluid" - variant="plain" + size='fluid' + variant='plain' // title={t( // "app.settings.pages.keybinds.remove_keybind" // )} @@ -222,7 +220,7 @@ export default function Keybinds() { } // TODO: theming -const ActionCategory = styled("section", "ActionCategory")` +const ActionCategory = styled('section', 'ActionCategory')` display: grid; gap: 1px; @@ -242,7 +240,7 @@ const ActionCategory = styled("section", "ActionCategory")` border-end-start-radius: 0; } `; -const KeybindEntry = styled("article", "KeybindEntry")` +const KeybindEntry = styled('article', 'KeybindEntry')` display: flex; gap: ${({ theme }) => theme?.gap.lg}; diff --git a/packages/client/components/app/interface/settings/user/Language.tsx b/packages/client/components/app/interface/settings/user/Language.tsx index a4736c749..bf2cd928d 100644 --- a/packages/client/components/app/interface/settings/user/Language.tsx +++ b/packages/client/components/app/interface/settings/user/Language.tsx @@ -1,13 +1,19 @@ -import { For, Match, Switch, createMemo } from "solid-js"; - +import MdErrorFill from '@material-design-icons/svg/filled/error.svg?component-solid'; +import MdVerifiedFill from '@material-design-icons/svg/filled/verified.svg?component-solid'; +import MdCalendarMonth from '@material-design-icons/svg/outlined/calendar_month.svg?component-solid'; +import MdKeyboardTab from '@material-design-icons/svg/outlined/keyboard_tab.svg?component-solid'; +import MdKeyboardTabRtl from '@material-design-icons/svg/outlined/keyboard_tab.svg?component-solid'; +import MdLanguage from '@material-design-icons/svg/outlined/language.svg?component-solid'; +import MdSchedule from '@material-design-icons/svg/outlined/schedule.svg?component-solid'; +import MdTranslate from '@material-design-icons/svg/outlined/translate.svg?component-solid'; import { - Languages, browserPreferredLanguage, language, - loadAndSetLanguage, + Languages, + setLanguage, useTranslation, -} from "@revolt/i18n"; -import { UnicodeEmoji } from "@revolt/markdown/emoji"; +} from '@revolt/i18n'; +import { UnicodeEmoji } from '@revolt/markdown/emoji'; import { CategoryButton, CategoryButtonGroup, @@ -15,27 +21,19 @@ import { Checkbox, Column, FormGroup, + iconSize, Row, Time, - iconSize, useTheme, -} from "@revolt/ui"; - -import MdErrorFill from "@material-design-icons/svg/filled/error.svg?component-solid"; -import MdVerifiedFill from "@material-design-icons/svg/filled/verified.svg?component-solid"; -import MdCalendarMonth from "@material-design-icons/svg/outlined/calendar_month.svg?component-solid"; -import MdKeyboardTab from "@material-design-icons/svg/outlined/keyboard_tab.svg?component-solid"; -import MdKeyboardTabRtl from "@material-design-icons/svg/outlined/keyboard_tab.svg?component-solid"; -import MdLanguage from "@material-design-icons/svg/outlined/language.svg?component-solid"; -import MdSchedule from "@material-design-icons/svg/outlined/schedule.svg?component-solid"; -import MdTranslate from "@material-design-icons/svg/outlined/translate.svg?component-solid"; +} from '@revolt/ui'; +import { createMemo, For, Match, Switch } from 'solid-js'; /** * Language */ export default function Language() { return ( - <Column gap="lg"> + <Column gap='lg'> <CategoryButtonGroup> <PickLanguage /> {/* <ConfigureRTL /> */} @@ -74,7 +72,7 @@ function PickLanguage() { if (preferredLanguage) { // This moves the user's system language to the top of the language list const prefLangKey = languages.find( - (lang) => lang[0].replace(/_/g, "-") == preferredLanguage + (lang) => lang[0].replace(/_/g, '-') == preferredLanguage ); if (prefLangKey) { @@ -92,7 +90,7 @@ function PickLanguage() { return ( <CategoryCollapse icon={<MdLanguage {...iconSize(22)} />} - title={t("app.settings.pages.language.select")} + title={t('app.settings.pages.language.select')} description={currentLanguage().display} scrollable > @@ -101,16 +99,16 @@ function PickLanguage() { <CategoryButton icon={<UnicodeEmoji emoji={lang.emoji} />} action={<Checkbox value={id === language()} />} - onClick={() => loadAndSetLanguage(id as never)} + onClick={() => setLanguage(id as never)} > <Row> - {lang.display}{" "} + {lang.display}{' '} {lang.verified && ( <MdVerifiedFill {...iconSize(18)} fill={theme!.colours.foreground} /> - )}{" "} + )}{' '} {lang.incomplete && ( <MdErrorFill {...iconSize(18)} @@ -135,35 +133,35 @@ function PickDateFormat() { return ( <CategoryCollapse icon={<MdCalendarMonth {...iconSize(22)} />} - title="Select date format" + title='Select date format' description={`Traditional`} > <FormGroup> <CategoryButton - icon={"blank"} + icon={'blank'} onClick={() => void 0} action={<Checkbox value />} - description={<Time format="date" value={LastWeek} />} + description={<Time format='date' value={LastWeek} />} > Traditional (DD/MM/YYYY) </CategoryButton> </FormGroup> <FormGroup> <CategoryButton - icon={"blank"} + icon={'blank'} onClick={() => void 0} action={<Checkbox />} - description={<Time format="dateAmerican" value={LastWeek} />} + description={<Time format='dateAmerican' value={LastWeek} />} > American (MM/DD/YYYY) </CategoryButton> </FormGroup> <FormGroup> <CategoryButton - icon={"blank"} + icon={'blank'} onClick={() => void 0} action={<Checkbox />} - description={<Time format="iso8601" value={LastWeek} />} + description={<Time format='iso8601' value={LastWeek} />} > ISO8601 (YYYY/MM/DD) </CategoryButton> @@ -179,25 +177,25 @@ function PickTimeFormat() { return ( <CategoryCollapse icon={<MdSchedule {...iconSize(22)} />} - title="Select time format" + title='Select time format' description={`24 hours`} > <FormGroup> <CategoryButton - icon={"blank"} + icon={'blank'} onClick={() => void 0} action={<Checkbox value />} - description={<Time format="time24" value={new Date()} />} + description={<Time format='time24' value={new Date()} />} > 24 hours </CategoryButton> </FormGroup> <FormGroup> <CategoryButton - icon={"blank"} + icon={'blank'} onClick={() => void 0} action={<Checkbox />} - description={<Time format="time12" value={new Date()} />} + description={<Time format='time12' value={new Date()} />} > 12 hours </CategoryButton> @@ -220,7 +218,7 @@ function ConfigureRTL() { fallback={ <CategoryButton icon={<MdKeyboardTabRtl {...iconSize(22)} />} - description="Flip the user interface right to left" + description='Flip the user interface right to left' action={<Checkbox />} onClick={() => void 0} > @@ -231,7 +229,7 @@ function ConfigureRTL() { <Match when={currentLanguage().rtl}> <CategoryButton icon={<MdKeyboardTab {...iconSize(22)} />} - description="Keep the user interface left to right" + description='Keep the user interface left to right' action={<Checkbox />} onClick={() => void 0} > @@ -247,12 +245,12 @@ function ConfigureRTL() { */ function ContributeLanguageLink() { return ( - <a href="https://weblate.insrt.uk/engage/revolt/" target="_blank"> + <a href='https://weblate.insrt.uk/engage/revolt/' target='_blank'> <CategoryButton - action="external" + action='external' icon={<MdTranslate {...iconSize(22)} />} onClick={() => void 0} - description="Help contribute to an existing or new language" + description='Help contribute to an existing or new language' > Contribute a language </CategoryButton> diff --git a/packages/client/components/app/interface/settings/user/Native.tsx b/packages/client/components/app/interface/settings/user/Native.tsx index c36f67779..dc9f99b3e 100644 --- a/packages/client/components/app/interface/settings/user/Native.tsx +++ b/packages/client/components/app/interface/settings/user/Native.tsx @@ -1,8 +1,7 @@ -import MdExitToApp from "@material-design-icons/svg/outlined/exit_to_app.svg?component-solid"; -import MdCancelPresentation from "@material-design-icons/svg/outlined/cancel_presentation.svg?component-solid"; -import MdWebAsset from "@material-design-icons/svg/outlined/web_asset.svg?component-solid"; -import MdDesktopWindows from "@material-design-icons/svg/outlined/desktop_windows.svg?component-solid"; - +import MdCancelPresentation from '@material-design-icons/svg/outlined/cancel_presentation.svg?component-solid'; +import MdDesktopWindows from '@material-design-icons/svg/outlined/desktop_windows.svg?component-solid'; +import MdExitToApp from '@material-design-icons/svg/outlined/exit_to_app.svg?component-solid'; +import MdWebAsset from '@material-design-icons/svg/outlined/web_asset.svg?component-solid'; import { CategoryButton, CategoryButtonGroup, @@ -10,21 +9,21 @@ import { Column, FormGroup, iconSize, -} from "@revolt/ui"; +} from '@revolt/ui'; /** * Desktop Configuration Page */ export default function Native() { return ( - <Column gap="lg"> + <Column gap='lg'> <CategoryButtonGroup> <FormGroup> <CategoryButton action={<Checkbox value onChange={(value) => void value} />} onClick={() => void 0} icon={<MdExitToApp {...iconSize(22)} />} - description="Launch Revolt when you log into your computer." + description='Launch Revolt when you log into your computer.' > Start with Computer </CategoryButton> @@ -34,7 +33,7 @@ export default function Native() { action={<Checkbox value onChange={(value) => void value} />} onClick={() => void 0} icon={<MdCancelPresentation {...iconSize(22)} />} - description="Instead of closing, Revolt will hide in your tray." + description='Instead of closing, Revolt will hide in your tray.' > Minimise to Tray </CategoryButton> @@ -46,7 +45,7 @@ export default function Native() { action={<Checkbox value onChange={(value) => void value} />} onClick={() => void 0} icon={<MdWebAsset {...iconSize(22)} />} - description="Let Revolt use its own custom titlebar." + description='Let Revolt use its own custom titlebar.' > Custom window frame </CategoryButton> @@ -55,7 +54,7 @@ export default function Native() { <CategoryButtonGroup> <CategoryButton icon={<MdDesktopWindows {...iconSize(22)} />} - description="Version 1.0.0" + description='Version 1.0.0' > Revolt Desktop </CategoryButton> diff --git a/packages/client/components/app/interface/settings/user/Notifications.tsx b/packages/client/components/app/interface/settings/user/Notifications.tsx index 28a9baf67..2b489ba12 100644 --- a/packages/client/components/app/interface/settings/user/Notifications.tsx +++ b/packages/client/components/app/interface/settings/user/Notifications.tsx @@ -1,8 +1,7 @@ -import MdNotifications from "@material-design-icons/svg/outlined/notifications.svg?component-solid"; -import MdMarkUnreadChatAlt from "@material-design-icons/svg/outlined/mark_unread_chat_alt.svg?component-solid"; -import MdSpeaker from "@material-design-icons/svg/outlined/speaker.svg?component-solid"; - -import { useTranslation } from "@revolt/i18n"; +import MdMarkUnreadChatAlt from '@material-design-icons/svg/outlined/mark_unread_chat_alt.svg?component-solid'; +import MdNotifications from '@material-design-icons/svg/outlined/notifications.svg?component-solid'; +import MdSpeaker from '@material-design-icons/svg/outlined/speaker.svg?component-solid'; +import { useTranslation } from '@revolt/i18n'; import { CategoryButton, CategoryButtonGroup, @@ -10,7 +9,7 @@ import { Checkbox, FormGroup, iconSize, -} from "@revolt/ui"; +} from '@revolt/ui'; /** * Notifications Page @@ -26,10 +25,10 @@ export default function Notifications() { onClick={() => void 0} icon={<MdNotifications {...iconSize(22)} />} description={t( - "app.settings.pages.notifications.descriptions.enable_desktop" + 'app.settings.pages.notifications.descriptions.enable_desktop' )} > - {t("app.settings.pages.notifications.enable_desktop")} + {t('app.settings.pages.notifications.enable_desktop')} </CategoryButton> </FormGroup> <FormGroup> @@ -38,50 +37,50 @@ export default function Notifications() { onClick={() => void 0} icon={<MdMarkUnreadChatAlt {...iconSize(22)} />} description={t( - "app.settings.pages.notifications.descriptions.enable_push" + 'app.settings.pages.notifications.descriptions.enable_push' )} > - {t("app.settings.pages.notifications.enable_push")} + {t('app.settings.pages.notifications.enable_push')} </CategoryButton> </FormGroup> <CategoryCollapse - title={t("app.settings.pages.notifications.sounds")} + title={t('app.settings.pages.notifications.sounds')} icon={<MdSpeaker {...iconSize(22)} />} > <FormGroup> <CategoryButton action={<Checkbox value onChange={(value) => void value} />} onClick={() => void 0} - icon="blank" + icon='blank' > - {t("app.settings.pages.notifications.sound.message")} + {t('app.settings.pages.notifications.sound.message')} </CategoryButton> </FormGroup> <FormGroup> <CategoryButton action={<Checkbox onChange={(value) => void value} />} onClick={() => void 0} - icon="blank" + icon='blank' > - {t("app.settings.pages.notifications.sound.outbound")} + {t('app.settings.pages.notifications.sound.outbound')} </CategoryButton> </FormGroup> <FormGroup> <CategoryButton action={<Checkbox value onChange={(value) => void value} />} onClick={() => void 0} - icon="blank" + icon='blank' > - {t("app.settings.pages.notifications.sound.call_join")} + {t('app.settings.pages.notifications.sound.call_join')} </CategoryButton> </FormGroup> <FormGroup> <CategoryButton action={<Checkbox value onChange={(value) => void value} />} onClick={() => void 0} - icon="blank" + icon='blank' > - {t("app.settings.pages.notifications.sound.call_leave")} + {t('app.settings.pages.notifications.sound.call_leave')} </CategoryButton> </FormGroup> </CategoryCollapse> diff --git a/packages/client/components/app/interface/settings/user/Sessions.tsx b/packages/client/components/app/interface/settings/user/Sessions.tsx index 516854b43..98a6fed25 100644 --- a/packages/client/components/app/interface/settings/user/Sessions.tsx +++ b/packages/client/components/app/interface/settings/user/Sessions.tsx @@ -1,38 +1,28 @@ -import { - BiLogosAndroid, - BiLogosApple, - BiLogosWindows, - BiRegularQuestionMark, -} from "solid-icons/bi"; -import { FaBrandsLinux } from "solid-icons/fa"; -import { - Accessor, - For, - Match, - Show, - Switch, - createMemo, - onMount, -} from "solid-js"; - -import { Session } from "revolt.js"; - -import { useClient } from "@revolt/client"; -import { getController } from "@revolt/common"; +import MdAutoMode from '@material-design-icons/svg/outlined/auto_mode.svg?component-solid'; +import MdLogout from '@material-design-icons/svg/outlined/logout.svg?component-solid'; +import { useClient } from '@revolt/client'; +import { getController } from '@revolt/common'; import { CategoryButton, CategoryButtonGroup, CategoryCollapse, Column, - Preloader, - Time, iconSize, + Preloader, styled, + Time, useTheme, -} from "@revolt/ui"; - -import MdAutoMode from "@material-design-icons/svg/outlined/auto_mode.svg?component-solid"; -import MdLogout from "@material-design-icons/svg/outlined/logout.svg?component-solid"; +} from '@revolt/ui'; +import type { Session } from 'revolt.js'; +import { + BiLogosAndroid, + BiLogosApple, + BiLogosWindows, + BiRegularQuestionMark, +} from 'solid-icons/bi'; +import { FaBrandsLinux } from 'solid-icons/fa'; +import type { Accessor } from 'solid-js'; +import { createMemo, For, Match, onMount, Show, Switch } from 'solid-js'; /** * Sessions @@ -51,8 +41,8 @@ export default function Sessions() { ); return ( - <Column gap="lg"> - <Switch fallback={<Preloader type="ring" />}> + <Column gap='lg'> + <Switch fallback={<Preloader type='ring' />}> <Match when={client().sessions.size()}> <ManageCurrentSession otherSessions={otherSessions} /> <ListOtherSessions otherSessions={otherSessions} /> @@ -77,17 +67,17 @@ function ManageCurrentSession(props: { otherSessions: Accessor<Session[]> }) { return ( <CategoryButtonGroup> <CategoryCollapse - title="Current Session" + title='Current Session' description={currentSession()?.name} icon={<SessionIcon session={currentSession()} />} > <CategoryButton - icon="blank" - action="chevron" + icon='blank' + action='chevron' onClick={() => currentSession() && - getController("modal").push({ - type: "rename_session", + getController('modal').push({ + type: 'rename_session', session: currentSession()!, }) } @@ -96,23 +86,23 @@ function ManageCurrentSession(props: { otherSessions: Accessor<Session[]> }) { </CategoryButton> </CategoryCollapse> <CategoryButton - action="chevron" + action='chevron' icon={ <MdAutoMode {...iconSize(24)} fill={theme.customColours.error.color} /> } - description="Keeps your last sessions active and automatically logs you out of other ones" + description='Keeps your last sessions active and automatically logs you out of other ones' > Keep Last Active Sessions </CategoryButton> <Show when={props.otherSessions().length}> <CategoryButton - action="chevron" + action='chevron' onClick={() => - getController("modal").push({ - type: "sign_out_sessions", + getController('modal').push({ + type: 'sign_out_sessions', client: client(), }) } @@ -122,7 +112,7 @@ function ManageCurrentSession(props: { otherSessions: Accessor<Session[]> }) { fill={theme.customColours.error.color} /> } - description="Logs you out of all sessions except this device." + description='Logs you out of all sessions except this device.' > Log Out Other Sessions </CategoryButton> @@ -146,16 +136,16 @@ function ListOtherSessions(props: { otherSessions: Accessor<Session[]> }) { title={<Capitalise>{session.name}</Capitalise>} description={ <> - Created <Time value={session.createdAt} format="relative" /> + Created <Time value={session.createdAt} format='relative' /> </> } > <CategoryButton - icon="blank" - action="chevron" + icon='blank' + action='chevron' onClick={() => - getController("modal").push({ - type: "rename_session", + getController('modal').push({ + type: 'rename_session', session, }) } @@ -163,8 +153,8 @@ function ListOtherSessions(props: { otherSessions: Accessor<Session[]> }) { Rename </CategoryButton> <CategoryButton - icon="blank" - action="chevron" + icon='blank' + action='chevron' onClick={() => session.delete()} > Log Out @@ -191,16 +181,16 @@ const Capitalise = styled.div` function SessionIcon(props: { session?: Session }) { return ( <Switch fallback={<BiRegularQuestionMark size={22} />}> - <Match when={/linux/i.test(props.session?.name ?? "")}> + <Match when={/linux/i.test(props.session?.name ?? '')}> <FaBrandsLinux size={22} /> </Match> - <Match when={/windows/i.test(props.session?.name ?? "")}> + <Match when={/windows/i.test(props.session?.name ?? '')}> <BiLogosWindows size={22} /> </Match> - <Match when={/android/i.test(props.session?.name ?? "")}> + <Match when={/android/i.test(props.session?.name ?? '')}> <BiLogosAndroid size={22} /> </Match> - <Match when={/mac.*os|i(Pad)?os/i.test(props.session?.name ?? "")}> + <Match when={/mac.*os|i(Pad)?os/i.test(props.session?.name ?? '')}> <BiLogosApple size={22} /> </Match> </Switch> diff --git a/packages/client/components/app/interface/settings/user/Sync.tsx b/packages/client/components/app/interface/settings/user/Sync.tsx index 5016018b7..02626b496 100644 --- a/packages/client/components/app/interface/settings/user/Sync.tsx +++ b/packages/client/components/app/interface/settings/user/Sync.tsx @@ -1,17 +1,16 @@ -import { useTranslation } from "@revolt/i18n"; +import MdBrush from '@material-design-icons/svg/outlined/brush.svg?component-solid'; +import MdLanguage from '@material-design-icons/svg/outlined/language.svg?component-solid'; +import MdPalette from '@material-design-icons/svg/outlined/palette.svg?component-solid'; +import { useTranslation } from '@revolt/i18n'; import { CategoryButton, CategoryButtonGroup, Checkbox, Column, FormGroup, - Time, iconSize, -} from "@revolt/ui"; - -import MdBrush from "@material-design-icons/svg/outlined/brush.svg?component-solid"; -import MdLanguage from "@material-design-icons/svg/outlined/language.svg?component-solid"; -import MdPalette from "@material-design-icons/svg/outlined/palette.svg?component-solid"; + Time, +} from '@revolt/ui'; /** * Sync Configuration Page @@ -20,16 +19,16 @@ export default function Sync() { const t = useTranslation(); return ( - <Column gap="lg"> + <Column gap='lg'> <CategoryButtonGroup> <FormGroup> <CategoryButton action={<Checkbox value onChange={(value) => void value} />} onClick={() => void 0} icon={<MdPalette {...iconSize(22)} />} - description={t("app.settings.pages.sync.descriptions.appearance")} + description={t('app.settings.pages.sync.descriptions.appearance')} > - {t("app.settings.pages.appearance.title")} + {t('app.settings.pages.appearance.title')} </CategoryButton> </FormGroup> <FormGroup> @@ -37,9 +36,9 @@ export default function Sync() { action={<Checkbox value onChange={(value) => void value} />} onClick={() => void 0} icon={<MdBrush {...iconSize(22)} />} - description={t("app.settings.pages.sync.descriptions.theme")} + description={t('app.settings.pages.sync.descriptions.theme')} > - {t("app.settings.pages.appearance.theme")} + {t('app.settings.pages.appearance.theme')} </CategoryButton> </FormGroup> <FormGroup> @@ -47,15 +46,15 @@ export default function Sync() { action={<Checkbox value onChange={(value) => void value} />} onClick={() => void 0} icon={<MdLanguage {...iconSize(22)} />} - description={t("app.settings.pages.sync.descriptions.locale")} + description={t('app.settings.pages.sync.descriptions.locale')} > - {t("app.settings.pages.language.title")} + {t('app.settings.pages.language.title')} </CategoryButton> </FormGroup> </CategoryButtonGroup> <CategoryButtonGroup> <CategoryButton> - Last sync <Time format="relative" value={0} /> + Last sync <Time format='relative' value={0} /> </CategoryButton> </CategoryButtonGroup> </Column> diff --git a/packages/client/components/app/interface/settings/user/_AccountCard.tsx b/packages/client/components/app/interface/settings/user/_AccountCard.tsx index 97fae9565..3ba1e8424 100644 --- a/packages/client/components/app/interface/settings/user/_AccountCard.tsx +++ b/packages/client/components/app/interface/settings/user/_AccountCard.tsx @@ -1,14 +1,14 @@ -import { useClient } from "@revolt/client"; -import { useTranslation } from "@revolt/i18n"; -import { Avatar, OverflowingText, Typography } from "@revolt/ui"; +import { useClient } from '@revolt/client'; +import { useTranslation } from '@revolt/i18n'; +import { Avatar, OverflowingText, Typography } from '@revolt/ui'; -// import MdError from "@material-design-icons/svg/filled/error.svg?component-solid"; -import { useSettingsNavigation } from "../Settings"; import { SidebarButton, SidebarButtonContent, SidebarButtonTitle, -} from "../_layout/SidebarButton"; +} from '../_layout/SidebarButton'; +// import MdError from "@material-design-icons/svg/filled/error.svg?component-solid"; +import { useSettingsNavigation } from '../Settings'; /** * Account Card @@ -21,19 +21,19 @@ export function AccountCard() { return ( <SidebarButton - onClick={() => navigate("account")} - aria-selected={page() === "account"} + onClick={() => navigate('account')} + aria-selected={page() === 'account'} > <SidebarButtonTitle> <Avatar size={36} src={client().user!.animatedAvatarURL} /> <SidebarButtonContent> <OverflowingText> - <Typography variant="settings-account-card-title"> + <Typography variant='settings-account-card-title'> {client().user!.displayName} </Typography> </OverflowingText> - <Typography variant="settings-account-card-subtitle"> - {t("app.settings.pages.account.title")} + <Typography variant='settings-account-card-subtitle'> + {t('app.settings.pages.account.title')} </Typography> </SidebarButtonContent> </SidebarButtonTitle> diff --git a/packages/client/components/app/interface/settings/user/account/UserSummary.tsx b/packages/client/components/app/interface/settings/user/account/UserSummary.tsx index 3777625c2..e373ce3c4 100644 --- a/packages/client/components/app/interface/settings/user/account/UserSummary.tsx +++ b/packages/client/components/app/interface/settings/user/account/UserSummary.tsx @@ -1,14 +1,11 @@ -import { Accessor, Show } from "solid-js"; - -import dayjs from "dayjs"; -import { User } from "revolt.js"; -import { cva } from "styled-system/css"; -import { styled } from "styled-system/jsx"; - -import { Avatar, Button, CategoryButtonGroup, iconSize } from "@revolt/ui"; - -import MdCakeFill from "@material-design-icons/svg/filled/cake.svg?component-solid"; -import MdEdit from "@material-design-icons/svg/outlined/edit.svg?component-solid"; +import MdCakeFill from '@material-design-icons/svg/filled/cake.svg?component-solid'; +import MdEdit from '@material-design-icons/svg/outlined/edit.svg?component-solid'; +import { Avatar, Button, CategoryButtonGroup, iconSize } from '@revolt/ui'; +import dayjs from 'dayjs'; +import type { User } from 'revolt.js'; +import { Accessor, Show } from 'solid-js'; +import { cva } from 'styled-system/css'; +import { styled } from 'styled-system/jsx'; export function UserSummary(props: { user: User; @@ -19,7 +16,7 @@ export function UserSummary(props: { const bannerStyle = () => props.bannerUrl ? { - "background-image": `linear-gradient(rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7)), url("${props.bannerUrl}")`, + 'background-image': `linear-gradient(rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.7)), url("${props.bannerUrl}")`, } : { background: `var(--colours-settings-background)`, @@ -37,7 +34,7 @@ export function UserSummary(props: { </span> </Username> <Show when={props.onEdit}> - <Button size="fab" onPress={props.onEdit}> + <Button size='fab' onPress={props.onEdit}> <MdEdit /> </Button> </Show> @@ -54,9 +51,9 @@ export function UserSummary(props: { <span use:floating={{ tooltip: { - placement: "top", + placement: 'top', content: dayjs(props.user.createdAt).format( - "[Account created] Do MMMM YYYY [at] HH:mm" + '[Account created] Do MMMM YYYY [at] HH:mm' ), }, }} @@ -71,70 +68,70 @@ export function UserSummary(props: { ); } -const AccountBox = styled("div", { +const AccountBox = styled('div', { base: { - display: "flex", - padding: "var(--gap-lg)", - flexDirection: "column", + display: 'flex', + padding: 'var(--gap-lg)', + flexDirection: 'column', - backgroundSize: "cover", - backgroundPosition: "center", + backgroundSize: 'cover', + backgroundPosition: 'center', }, }); -const ProfileDetails = styled("div", { +const ProfileDetails = styled('div', { base: { - display: "flex", - gap: "var(--gap-lg)", - alignItems: "center", + display: 'flex', + gap: 'var(--gap-lg)', + alignItems: 'center', }, }); -const Username = styled("div", { +const Username = styled('div', { base: { flexGrow: 1, - display: "flex", - flexDirection: "column", + display: 'flex', + flexDirection: 'column', // Display Name - "& :nth-child(1)": { - fontSize: "18px", + '& :nth-child(1)': { + fontSize: '18px', fontWeight: 600, }, // Username#Discrim - "& :nth-child(2)": { - fontSize: "14px", + '& :nth-child(2)': { + fontSize: '14px', fontWeight: 400, }, }, }); -const BottomBar = styled("div", { +const BottomBar = styled('div', { base: { - display: "flex", + display: 'flex', }, }); -const DummyPadding = styled("div", { +const DummyPadding = styled('div', { base: { flexShrink: 0, // Matches with avatar size - width: "58px", + width: '58px', // Matches with ProfileDetails - marginInlineEnd: "var(--gap-lg)", + marginInlineEnd: 'var(--gap-lg)', }, }); -const ProfileBadges = styled("div", { +const ProfileBadges = styled('div', { base: { - display: "flex", - gap: "var(--gap-sm)", - width: "fit-content", - padding: "var(--gap-sm) var(--gap-sm)", - borderRadius: "var(--borderRadius-md)", + display: 'flex', + gap: 'var(--gap-sm)', + width: 'fit-content', + padding: 'var(--gap-sm) var(--gap-sm)', + borderRadius: 'var(--borderRadius-md)', - background: "var(--colours-settings-background)", + background: 'var(--colours-settings-background)', }, }); diff --git a/packages/client/components/app/interface/settings/user/account/index.ts b/packages/client/components/app/interface/settings/user/account/index.ts index b647066cb..589126b01 100644 --- a/packages/client/components/app/interface/settings/user/account/index.ts +++ b/packages/client/components/app/interface/settings/user/account/index.ts @@ -1 +1 @@ -export { UserSummary } from "./UserSummary"; +export { UserSummary } from './UserSummary'; diff --git a/packages/client/components/app/interface/settings/user/bots/MyBots.tsx b/packages/client/components/app/interface/settings/user/bots/MyBots.tsx index 03f539285..4ce528ca3 100644 --- a/packages/client/components/app/interface/settings/user/bots/MyBots.tsx +++ b/packages/client/components/app/interface/settings/user/bots/MyBots.tsx @@ -1,28 +1,26 @@ -import { ErrorBoundary, For, Suspense } from "solid-js"; - -import { useClient } from "@revolt/client"; -import { createOwnBotsResource } from "@revolt/client/resources"; -import { modalController } from "@revolt/modal"; +import MdLibraryBooks from '@material-design-icons/svg/outlined/library_books.svg?component-solid'; +import MdSmartToy from '@material-design-icons/svg/outlined/smart_toy.svg?component-solid'; +import { useClient } from '@revolt/client'; +import { createOwnBotsResource } from '@revolt/client/resources'; +import { modalController } from '@revolt/modal'; import { Avatar, CategoryButton, CategoryButtonGroup, Column, - Preloader, iconSize, -} from "@revolt/ui"; - -import MdLibraryBooks from "@material-design-icons/svg/outlined/library_books.svg?component-solid"; -import MdSmartToy from "@material-design-icons/svg/outlined/smart_toy.svg?component-solid"; + Preloader, +} from '@revolt/ui'; +import { ErrorBoundary, For, Suspense } from 'solid-js'; -import { useSettingsNavigation } from "../../Settings"; +import { useSettingsNavigation } from '../../Settings'; /** * View all owned bots */ export function MyBots() { return ( - <Column gap="lg"> + <Column gap='lg'> <CreateBot /> <ListBots /> </Column> @@ -39,26 +37,26 @@ function CreateBot() { return ( <CategoryButtonGroup> <CategoryButton - action="chevron" + action='chevron' icon={<MdSmartToy {...iconSize(22)} />} onClick={() => modalController.push({ - type: "create_bot", + type: 'create_bot', client: client(), onCreate(bot) { navigate(`bots/${bot.id}`); }, }) } - description="You agree that your bot is subject to the Acceptable Usage Policy." + description='You agree that your bot is subject to the Acceptable Usage Policy.' > Create Bot </CategoryButton> <CategoryButton - action="external" + action='external' icon={<MdLibraryBooks {...iconSize(22)} />} - onClick={() => window.open("https://developers.revolt.chat", "_blank")} - description="Learn more about how to create bots on Revolt." + onClick={() => window.open('https://developers.revolt.chat', '_blank')} + description='Learn more about how to create bots on Revolt.' > Developer Documentation </CategoryButton> @@ -74,8 +72,8 @@ function ListBots() { const bots = createOwnBotsResource(); return ( - <ErrorBoundary fallback="Failed to load bots..."> - <Suspense fallback={<Preloader type="ring" />}> + <ErrorBoundary fallback='Failed to load bots...'> + <Suspense fallback={<Preloader type='ring' />}> <CategoryButtonGroup> <For each={bots.data}> {(bot) => ( @@ -88,7 +86,7 @@ function ListBots() { /> } onClick={() => navigate(`bots/${bot.id}`)} - action="chevron" + action='chevron' // description={bot.id} > {bot.user!.displayName} diff --git a/packages/client/components/app/interface/settings/user/bots/ViewBot.tsx b/packages/client/components/app/interface/settings/user/bots/ViewBot.tsx index 421d1f97b..a9fd09baf 100644 --- a/packages/client/components/app/interface/settings/user/bots/ViewBot.tsx +++ b/packages/client/components/app/interface/settings/user/bots/ViewBot.tsx @@ -1,20 +1,19 @@ -import { useClient } from "@revolt/client"; -import { createProfileResource } from "@revolt/client/resources"; +import MdLink from '@material-design-icons/svg/outlined/link.svg?component-solid'; +import MdPersonAdd from '@material-design-icons/svg/outlined/person_add.svg?component-solid'; +import MdPublic from '@material-design-icons/svg/outlined/public.svg?component-solid'; +import MdToken from '@material-design-icons/svg/outlined/token.svg?component-solid'; +import { useClient } from '@revolt/client'; +import { createProfileResource } from '@revolt/client/resources'; import { CategoryButton, CategoryButtonGroup, Column, iconSize, -} from "@revolt/ui"; +} from '@revolt/ui'; -import MdLink from "@material-design-icons/svg/outlined/link.svg?component-solid"; -import MdPersonAdd from "@material-design-icons/svg/outlined/person_add.svg?component-solid"; -import MdPublic from "@material-design-icons/svg/outlined/public.svg?component-solid"; -import MdToken from "@material-design-icons/svg/outlined/token.svg?component-solid"; - -import { useSettingsNavigation } from "../../Settings"; -import { UserSummary } from "../account"; -import { EditProfileButtons } from "../profile/EditProfileButtons"; +import { useSettingsNavigation } from '../../Settings'; +import { UserSummary } from '../account/index'; +import { EditProfileButtons } from '../profile/EditProfileButtons'; /** * View a specific bot @@ -23,11 +22,11 @@ export function ViewBot() { const client = useClient(); const { page } = useSettingsNavigation(); - const bot = () => client().bots.get(page()!.substring("bots/".length))!; + const bot = () => client().bots.get(page()!.substring('bots/'.length))!; const profile = createProfileResource(bot().user!); return ( - <Column gap="lg"> + <Column gap='lg'> <UserSummary user={bot().user!} showBadges @@ -40,28 +39,28 @@ export function ViewBot() { <CategoryButtonGroup> <CategoryButton - description="Generate a new token if it gets lost or compromised" + description='Generate a new token if it gets lost or compromised' icon={<MdToken {...iconSize(22)} />} - action="chevron" + action='chevron' > Reset Token </CategoryButton> <CategoryButton - description="Allow others to add your bot to their servers from Discover" + description='Allow others to add your bot to their servers from Discover' icon={<MdPublic {...iconSize(22)} />} - action="chevron" + action='chevron' > Submit to Discover </CategoryButton> </CategoryButtonGroup> <CategoryButtonGroup> - <CategoryButton icon={<MdLink {...iconSize(22)} />} action="copy"> + <CategoryButton icon={<MdLink {...iconSize(22)} />} action='copy'> Copy Invite </CategoryButton> <CategoryButton icon={<MdPersonAdd {...iconSize(22)} />} - action="chevron" + action='chevron' > Invite Bot </CategoryButton> diff --git a/packages/client/components/app/interface/settings/user/bots/index.ts b/packages/client/components/app/interface/settings/user/bots/index.ts index 645bc0cf1..d52fb65be 100644 --- a/packages/client/components/app/interface/settings/user/bots/index.ts +++ b/packages/client/components/app/interface/settings/user/bots/index.ts @@ -1,2 +1,2 @@ -export { MyBots } from "./MyBots"; -export { ViewBot } from "./ViewBot"; +export { MyBots } from './MyBots'; +export { ViewBot } from './ViewBot'; diff --git a/packages/client/components/app/interface/settings/user/index.tsx b/packages/client/components/app/interface/settings/user/index.tsx index 798e6397b..d8b183b84 100644 --- a/packages/client/components/app/interface/settings/user/index.tsx +++ b/packages/client/components/app/interface/settings/user/index.tsx @@ -1,66 +1,63 @@ -import { Component, Show } from "solid-js"; - -import { Server } from "revolt.js"; - -import { getController } from "@revolt/common"; -import { useTranslation } from "@revolt/i18n"; -import { useUser } from "@revolt/markdown/users"; -import { ColouredText, Column, iconSize, useTheme } from "@revolt/ui"; -import { ColourSwatches } from "@revolt/ui/components/design/atoms/inputs/ColourSwatches"; - // Filled Icons -import MdAccountCircleFill from "@material-design-icons/svg/filled/account_circle.svg?component-solid"; -import MdDesktopWindowsFill from "@material-design-icons/svg/filled/desktop_windows.svg?component-solid"; -import MdExtensionFill from "@material-design-icons/svg/filled/extension.svg?component-solid"; -import MdFormatListBulletedFill from "@material-design-icons/svg/filled/format_list_bulleted.svg?component-solid"; -import MdLanguageFill from "@material-design-icons/svg/filled/language.svg?component-solid"; -import MdLocalCafeFill from "@material-design-icons/svg/filled/local_cafe.svg?component-solid"; -import MdLogoutFill from "@material-design-icons/svg/filled/logout.svg?component-solid"; -import MdMemoryFill from "@material-design-icons/svg/filled/memory.svg?component-solid"; -import MdNotificationsFill from "@material-design-icons/svg/filled/notifications.svg?component-solid"; -import MdPaletteFill from "@material-design-icons/svg/filled/palette.svg?component-solid"; -import MdRateReviewFill from "@material-design-icons/svg/filled/rate_review.svg?component-solid"; -import MdScienceFill from "@material-design-icons/svg/filled/science.svg?component-solid"; -import MdSmartToyFill from "@material-design-icons/svg/filled/smart_toy.svg?component-solid"; -import MdSpeakerFill from "@material-design-icons/svg/filled/speaker.svg?component-solid"; -import MdSyncFill from "@material-design-icons/svg/filled/sync.svg?component-solid"; -import MdVerifiedUserFill from "@material-design-icons/svg/filled/verified_user.svg?component-solid"; -import MdAccessibility from "@material-design-icons/svg/outlined/accessibility.svg?component-solid"; +import MdAccountCircleFill from '@material-design-icons/svg/filled/account_circle.svg?component-solid'; +import MdDesktopWindowsFill from '@material-design-icons/svg/filled/desktop_windows.svg?component-solid'; +import MdExtensionFill from '@material-design-icons/svg/filled/extension.svg?component-solid'; +import MdFormatListBulletedFill from '@material-design-icons/svg/filled/format_list_bulleted.svg?component-solid'; +import MdLanguageFill from '@material-design-icons/svg/filled/language.svg?component-solid'; +import MdLocalCafeFill from '@material-design-icons/svg/filled/local_cafe.svg?component-solid'; +import MdLogoutFill from '@material-design-icons/svg/filled/logout.svg?component-solid'; +import MdMemoryFill from '@material-design-icons/svg/filled/memory.svg?component-solid'; +import MdNotificationsFill from '@material-design-icons/svg/filled/notifications.svg?component-solid'; +import MdPaletteFill from '@material-design-icons/svg/filled/palette.svg?component-solid'; +import MdRateReviewFill from '@material-design-icons/svg/filled/rate_review.svg?component-solid'; +import MdScienceFill from '@material-design-icons/svg/filled/science.svg?component-solid'; +import MdSmartToyFill from '@material-design-icons/svg/filled/smart_toy.svg?component-solid'; +import MdSpeakerFill from '@material-design-icons/svg/filled/speaker.svg?component-solid'; +import MdSyncFill from '@material-design-icons/svg/filled/sync.svg?component-solid'; +import MdVerifiedUserFill from '@material-design-icons/svg/filled/verified_user.svg?component-solid'; +import MdAccessibility from '@material-design-icons/svg/outlined/accessibility.svg?component-solid'; // Outlined Icons -import MdAccountCircle from "@material-design-icons/svg/outlined/account_circle.svg?component-solid"; -import MdDesktopWindows from "@material-design-icons/svg/outlined/desktop_windows.svg?component-solid"; -import MdExtension from "@material-design-icons/svg/outlined/extension.svg?component-solid"; -import MdFormatListBulleted from "@material-design-icons/svg/outlined/format_list_bulleted.svg?component-solid"; -import MdKeybinds from "@material-design-icons/svg/outlined/keyboard.svg?component-solid"; -import MdLanguage from "@material-design-icons/svg/outlined/language.svg?component-solid"; -import MdLocalCafe from "@material-design-icons/svg/outlined/local_cafe.svg?component-solid"; -import MdLogout from "@material-design-icons/svg/outlined/logout.svg?component-solid"; -import MdMemory from "@material-design-icons/svg/outlined/memory.svg?component-solid"; -import MdNotifications from "@material-design-icons/svg/outlined/notifications.svg?component-solid"; -import MdPalette from "@material-design-icons/svg/outlined/palette.svg?component-solid"; -import MdRateReview from "@material-design-icons/svg/outlined/rate_review.svg?component-solid"; -import MdScience from "@material-design-icons/svg/outlined/science.svg?component-solid"; -import MdSmartToy from "@material-design-icons/svg/outlined/smart_toy.svg?component-solid"; -import MdSpeaker from "@material-design-icons/svg/outlined/speaker.svg?component-solid"; -import MdSync from "@material-design-icons/svg/outlined/sync.svg?component-solid"; -import MdVerifiedUser from "@material-design-icons/svg/outlined/verified_user.svg?component-solid"; - -import { SettingsConfiguration } from ".."; +import MdAccountCircle from '@material-design-icons/svg/outlined/account_circle.svg?component-solid'; +import MdDesktopWindows from '@material-design-icons/svg/outlined/desktop_windows.svg?component-solid'; +import MdExtension from '@material-design-icons/svg/outlined/extension.svg?component-solid'; +import MdFormatListBulleted from '@material-design-icons/svg/outlined/format_list_bulleted.svg?component-solid'; +import MdKeybinds from '@material-design-icons/svg/outlined/keyboard.svg?component-solid'; +import MdLanguage from '@material-design-icons/svg/outlined/language.svg?component-solid'; +import MdLocalCafe from '@material-design-icons/svg/outlined/local_cafe.svg?component-solid'; +import MdLogout from '@material-design-icons/svg/outlined/logout.svg?component-solid'; +import MdMemory from '@material-design-icons/svg/outlined/memory.svg?component-solid'; +import MdNotifications from '@material-design-icons/svg/outlined/notifications.svg?component-solid'; +import MdPalette from '@material-design-icons/svg/outlined/palette.svg?component-solid'; +import MdRateReview from '@material-design-icons/svg/outlined/rate_review.svg?component-solid'; +import MdScience from '@material-design-icons/svg/outlined/science.svg?component-solid'; +import MdSmartToy from '@material-design-icons/svg/outlined/smart_toy.svg?component-solid'; +import MdSpeaker from '@material-design-icons/svg/outlined/speaker.svg?component-solid'; +import MdSync from '@material-design-icons/svg/outlined/sync.svg?component-solid'; +import MdVerifiedUser from '@material-design-icons/svg/outlined/verified_user.svg?component-solid'; +import { getController } from '@revolt/common'; +import { useTranslation } from '@revolt/i18n'; +import { useUser } from '@revolt/markdown/users'; +import { ColouredText, Column, iconSize, useTheme } from '@revolt/ui'; +import { ColourSwatches } from '@revolt/ui/components/design/atoms/inputs/ColourSwatches'; +import type { Server } from 'revolt.js'; +import type { Component } from 'solid-js'; +import { Show } from 'solid-js'; -import accessibility from "./Accessibility"; -import account from "./Account"; -import appearance from "./Appearance"; -import experiments from "./Experiments"; -import feedback from "./Feedback"; -import keybinds from "./Keybinds"; -import language from "./Language"; -import native from "./Native"; -import notifications from "./Notifications"; -import sessions from "./Sessions"; -import sync from "./Sync"; -import { AccountCard } from "./_AccountCard"; -import { MyBots, ViewBot } from "./bots"; -import { EditProfile } from "./profile"; +import type { SettingsConfiguration } from '..'; +import { AccountCard } from './_AccountCard'; +import accessibility from './Accessibility'; +import account from './Account'; +import appearance from './Appearance'; +import { MyBots, ViewBot } from './bots'; +import experiments from './Experiments'; +import feedback from './Feedback'; +import keybinds from './Keybinds'; +import language from './Language'; +import native from './Native'; +import notifications from './Notifications'; +import { EditProfile } from './profile'; +import sessions from './Sessions'; +import sync from './Sync'; /** * All the available routes for client settings @@ -72,12 +69,12 @@ const ClientSettingsRouting: Record<string, Component> = { // Bots bots: MyBots, - "bots/view": ViewBot, + 'bots/view': ViewBot, feedback, audio: () => null, appearance, - "appearance/colours": () => <ColourSwatches />, + 'appearance/colours': () => <ColourSwatches />, accessibility, notifications, language, @@ -93,8 +90,8 @@ const ClientSettingsRouting: Record<string, Component> = { * @returns New Id */ function mapRoutingId(id: string) { - if (id.startsWith("bots/")) { - return "bots/view"; + if (id.startsWith('bots/')) { + return 'bots/view'; } return id; @@ -108,13 +105,13 @@ const Config: SettingsConfiguration<{ server: Server }> = { title(key) { const t = useTranslation(); - if (key.startsWith("bots/")) { + if (key.startsWith('bots/')) { const user = useUser(key.substring(5)); return user()!.username; } return t( - `app.settings.pages.${key.replaceAll("/", ".")}.title`, + `app.settings.pages.${key.replaceAll('/', '.')}.title`, undefined, key ); @@ -147,55 +144,55 @@ const Config: SettingsConfiguration<{ server: Server }> = { return { prepend: ( - <Column gap="s"> + <Column gap='s'> <AccountCard /> <div /> </Column> ), entries: [ { - title: t("app.settings.categories.user_settings"), + title: t('app.settings.categories.user_settings'), entries: [ { - id: "account", + id: 'account', icon: <></>, title: <></>, hidden: true, }, { - id: "profile", + id: 'profile', icon: <MdAccountCircle {...iconSize(20)} />, - title: t("app.settings.pages.profile.title"), + title: t('app.settings.pages.profile.title'), }, { - id: "sessions", + id: 'sessions', icon: <MdVerifiedUser {...iconSize(20)} />, - title: t("app.settings.pages.sessions.title"), + title: t('app.settings.pages.sessions.title'), }, ], }, { - title: "Revolt", + title: 'Revolt', entries: [ { - id: "bots", + id: 'bots', icon: <MdSmartToy {...iconSize(20)} />, - title: t("app.settings.pages.bots.title"), + title: t('app.settings.pages.bots.title'), }, { - id: "feedback", + id: 'feedback', icon: <MdRateReview {...iconSize(20)} />, - title: t("app.settings.pages.feedback.title"), + title: t('app.settings.pages.feedback.title'), }, { - href: "https://insrt.uk/donate", + href: 'https://insrt.uk/donate', icon: <MdLocalCafe {...iconSize(20)} />, - title: t("app.settings.pages.donate.title"), + title: t('app.settings.pages.donate.title'), }, ], }, { - title: t("app.settings.categories.client_settings"), + title: t('app.settings.categories.client_settings'), entries: [ // { // id: "audio", @@ -231,9 +228,9 @@ const Config: SettingsConfiguration<{ server: Server }> = { // title: t("app.settings.pages.keybinds.title"), // }, { - id: "language", + id: 'language', icon: <MdLanguage {...iconSize(20)} />, - title: t("app.settings.pages.language.title"), + title: t('app.settings.pages.language.title'), }, // { // id: "sync", @@ -247,9 +244,9 @@ const Config: SettingsConfiguration<{ server: Server }> = { // title: t("app.settings.pages.native.title"), // }, { - id: "experiments", + id: 'experiments', icon: <MdScience {...iconSize(20)} />, - title: t("app.settings.pages.experiments.title"), + title: t('app.settings.pages.experiments.title'), }, ], }, @@ -262,12 +259,12 @@ const Config: SettingsConfiguration<{ server: Server }> = { // title: t("app.special.modals.changelogs.title"), // }, { - href: "https://github.com/revoltchat", + href: 'https://github.com/revoltchat', icon: <MdMemory {...iconSize(20)} />, - title: t("app.settings.pages.source_code"), + title: t('app.settings.pages.source_code'), }, { - id: "logout", + id: 'logout', icon: ( <MdLogout {...iconSize(20)} @@ -276,12 +273,12 @@ const Config: SettingsConfiguration<{ server: Server }> = { ), title: ( <ColouredText colour={theme!.customColours.error.color}> - {t("app.settings.pages.logOut")} + {t('app.settings.pages.logOut')} </ColouredText> ), onClick: () => { - getController("modal").pop(); - getController("client").logout(); + getController('modal').pop(); + getController('client').logout(); }, }, ], diff --git a/packages/client/components/app/interface/settings/user/profile/EditProfile.tsx b/packages/client/components/app/interface/settings/user/profile/EditProfile.tsx index 30d04683e..533dbc840 100644 --- a/packages/client/components/app/interface/settings/user/profile/EditProfile.tsx +++ b/packages/client/components/app/interface/settings/user/profile/EditProfile.tsx @@ -1,8 +1,7 @@ -import { For } from "solid-js"; - -import { useClient } from "@revolt/client"; -import { createOwnProfileResource } from "@revolt/client/resources"; -import { modalController } from "@revolt/modal"; +import MdGroups from '@material-design-icons/svg/outlined/groups.svg?component-solid'; +import { useClient } from '@revolt/client'; +import { createOwnProfileResource } from '@revolt/client/resources'; +import { modalController } from '@revolt/modal'; import { Avatar, CategoryButton, @@ -10,13 +9,11 @@ import { CategoryCollapse, Column, iconSize, -} from "@revolt/ui"; - -import MdGroups from "@material-design-icons/svg/outlined/groups.svg?component-solid"; - -import { UserSummary } from "../account"; +} from '@revolt/ui'; +import { For } from 'solid-js'; -import { EditProfileButtons } from "./EditProfileButtons"; +import { UserSummary } from '../account/index'; +import { EditProfileButtons } from './EditProfileButtons'; /** * Edit profile @@ -26,7 +23,7 @@ export function EditProfile() { const profile = createOwnProfileResource(); return ( - <Column gap="lg"> + <Column gap='lg'> <UserSummary user={client().user!} bannerUrl={profile.data?.animatedBannerURL} @@ -37,8 +34,8 @@ export function EditProfile() { <CategoryButtonGroup> <CategoryCollapse icon={<MdGroups {...iconSize(22)} />} - title="Server Identities" - description="Change your profile per-server" + title='Server Identities' + description='Change your profile per-server' scrollable > <For each={client().servers.toList()}> @@ -53,7 +50,7 @@ export function EditProfile() { } onClick={() => modalController.push({ - type: "server_identity", + type: 'server_identity', member: server.member!, }) } diff --git a/packages/client/components/app/interface/settings/user/profile/EditProfileButtons.tsx b/packages/client/components/app/interface/settings/user/profile/EditProfileButtons.tsx index 230e8e64f..475cd6022 100644 --- a/packages/client/components/app/interface/settings/user/profile/EditProfileButtons.tsx +++ b/packages/client/components/app/interface/settings/user/profile/EditProfileButtons.tsx @@ -1,44 +1,41 @@ -import { Match, Switch } from "solid-js"; - -import { User } from "revolt.js"; - -import { useClient } from "@revolt/client"; -import { createOwnProfileResource } from "@revolt/client/resources"; -import { modalController } from "@revolt/modal"; +import MdBadge from '@material-design-icons/svg/outlined/badge.svg?component-solid'; +import MdCrop169 from '@material-design-icons/svg/outlined/crop_16_9.svg?component-solid'; +import MdDelete from '@material-design-icons/svg/outlined/delete.svg?component-solid'; +import MdReplaceImage from '@material-design-icons/svg/outlined/edit.svg?component-solid'; +import MdEditNote from '@material-design-icons/svg/outlined/edit_note.svg?component-solid'; +import MdImage from '@material-design-icons/svg/outlined/image.svg?component-solid'; +import { useClient } from '@revolt/client'; +import { createOwnProfileResource } from '@revolt/client/resources'; +import { modalController } from '@revolt/modal'; import { CategoryButton, CategoryButtonGroup, CategoryCollapse, iconSize, -} from "@revolt/ui"; - -import MdBadge from "@material-design-icons/svg/outlined/badge.svg?component-solid"; -import MdCrop169 from "@material-design-icons/svg/outlined/crop_16_9.svg?component-solid"; -import MdDelete from "@material-design-icons/svg/outlined/delete.svg?component-solid"; -import MdReplaceImage from "@material-design-icons/svg/outlined/edit.svg?component-solid"; -import MdEditNote from "@material-design-icons/svg/outlined/edit_note.svg?component-solid"; -import MdImage from "@material-design-icons/svg/outlined/image.svg?component-solid"; +} from '@revolt/ui'; +import type { User } from 'revolt.js'; +import { Match, Switch } from 'solid-js'; export function EditProfileButtons(props: { user: User }) { const client = useClient(); const profile = createOwnProfileResource(); function selectImage(tag: string, cb: (id: string) => void) { - const el = document.createElement("input"); - el.type = "file"; - el.accept = "image/*"; + const el = document.createElement('input'); + el.type = 'file'; + el.accept = 'image/*'; el.onchange = async () => { if (el.files) { const [file] = el.files; if (file) { const body = new FormData(); - body.append("file", file); + body.append('file', file); const data = await fetch( `${client().configuration?.features.autumn.url}/${tag}`, { - method: "POST", + method: 'POST', body, } ).then((res) => res.json()); @@ -57,11 +54,11 @@ export function EditProfileButtons(props: { user: User }) { } function replaceAvatar() { - selectImage("avatars", (avatar) => props.user.edit({ avatar })); + selectImage('avatars', (avatar) => props.user.edit({ avatar })); } function replaceBanner() { - selectImage("backgrounds", (background) => + selectImage('backgrounds', (background) => props.user.edit({ profile: { background } }).then(() => profile.refetch()) ); } @@ -69,12 +66,12 @@ export function EditProfileButtons(props: { user: User }) { return ( <CategoryButtonGroup> <CategoryButton - description="Set a global name" + description='Set a global name' icon={<MdBadge {...iconSize(22)} />} - action="chevron" + action='chevron' onClick={() => modalController.push({ - type: "edit_display_name", + type: 'edit_display_name', user: props.user, }) } @@ -84,9 +81,9 @@ export function EditProfileButtons(props: { user: User }) { <Switch fallback={ <CategoryButton - description="Set a profile picture" + description='Set a profile picture' icon={<MdImage {...iconSize(22)} />} - action="chevron" + action='chevron' onClick={replaceAvatar} > Avatar @@ -96,22 +93,22 @@ export function EditProfileButtons(props: { user: User }) { <Match when={props.user.avatar}> <CategoryCollapse icon={<MdImage {...iconSize(22)} />} - title="Avatar" - description="Change or remove your profile picture" + title='Avatar' + description='Change or remove your profile picture' > <CategoryButton - description="Set a new picture" + description='Set a new picture' icon={<MdReplaceImage {...iconSize(22)} />} - action="chevron" + action='chevron' onClick={replaceAvatar} > Replace Avatar </CategoryButton> <CategoryButton - description="Remove your current avatar" + description='Remove your current avatar' icon={<MdDelete {...iconSize(22)} />} - action="chevron" - onClick={() => props.user.edit({ remove: ["Avatar"] })} + action='chevron' + onClick={() => props.user.edit({ remove: ['Avatar'] })} > Remove Avatar </CategoryButton> @@ -121,9 +118,9 @@ export function EditProfileButtons(props: { user: User }) { <Switch fallback={ <CategoryButton - description="Set a profile banner" + description='Set a profile banner' icon={<MdCrop169 {...iconSize(22)} />} - action="chevron" + action='chevron' onClick={replaceBanner} > Banner @@ -133,22 +130,22 @@ export function EditProfileButtons(props: { user: User }) { <Match when={profile.data?.banner}> <CategoryCollapse icon={<MdCrop169 {...iconSize(22)} />} - title="Banner" - description="Change or remove your profile banner" + title='Banner' + description='Change or remove your profile banner' > <CategoryButton - description="Set a new banner" + description='Set a new banner' icon={<MdReplaceImage {...iconSize(22)} />} - action="chevron" + action='chevron' onClick={replaceBanner} > Replace Banner </CategoryButton> <CategoryButton - description="Remove your current banner" + description='Remove your current banner' icon={<MdDelete {...iconSize(22)} />} - action="chevron" - onClick={() => props.user.edit({ remove: ["ProfileBackground"] })} + action='chevron' + onClick={() => props.user.edit({ remove: ['ProfileBackground'] })} > Remove Banner </CategoryButton> @@ -156,9 +153,9 @@ export function EditProfileButtons(props: { user: User }) { </Match> </Switch> <CategoryButton - description="Set a profile description" + description='Set a profile description' icon={<MdEditNote {...iconSize(22)} />} - action="chevron" + action='chevron' > Bio </CategoryButton> diff --git a/packages/client/components/app/interface/settings/user/profile/index.ts b/packages/client/components/app/interface/settings/user/profile/index.ts index 30d571ff9..a839133bf 100644 --- a/packages/client/components/app/interface/settings/user/profile/index.ts +++ b/packages/client/components/app/interface/settings/user/profile/index.ts @@ -1 +1 @@ -export * from "./EditProfile"; +export * from './EditProfile'; diff --git a/packages/client/components/app/menus/ChannelContextMenu.tsx b/packages/client/components/app/menus/ChannelContextMenu.tsx index 9975646d6..3c94a6bd0 100644 --- a/packages/client/components/app/menus/ChannelContextMenu.tsx +++ b/packages/client/components/app/menus/ChannelContextMenu.tsx @@ -1,25 +1,22 @@ -import { Show } from "solid-js"; - -import { Channel } from "revolt.js"; - -import { getController } from "@revolt/common"; -import { useTranslation } from "@revolt/i18n"; - -import MdBadge from "@material-design-icons/svg/outlined/badge.svg?component-solid"; -import MdDelete from "@material-design-icons/svg/outlined/delete.svg?component-solid"; -import MdGroupAdd from "@material-design-icons/svg/outlined/group_add.svg?component-solid"; -import MdLibraryAdd from "@material-design-icons/svg/outlined/library_add.svg?component-solid"; -import MdLogout from "@material-design-icons/svg/outlined/logout.svg?component-solid"; -import MdMarkChatRead from "@material-design-icons/svg/outlined/mark_chat_read.svg?component-solid"; -import MdSettings from "@material-design-icons/svg/outlined/settings.svg?component-solid"; -import MdShare from "@material-design-icons/svg/outlined/share.svg?component-solid"; -import MdShield from "@material-design-icons/svg/outlined/shield.svg?component-solid"; +import MdBadge from '@material-design-icons/svg/outlined/badge.svg?component-solid'; +import MdDelete from '@material-design-icons/svg/outlined/delete.svg?component-solid'; +import MdGroupAdd from '@material-design-icons/svg/outlined/group_add.svg?component-solid'; +import MdLibraryAdd from '@material-design-icons/svg/outlined/library_add.svg?component-solid'; +import MdLogout from '@material-design-icons/svg/outlined/logout.svg?component-solid'; +import MdMarkChatRead from '@material-design-icons/svg/outlined/mark_chat_read.svg?component-solid'; +import MdSettings from '@material-design-icons/svg/outlined/settings.svg?component-solid'; +import MdShare from '@material-design-icons/svg/outlined/share.svg?component-solid'; +import MdShield from '@material-design-icons/svg/outlined/shield.svg?component-solid'; +import { getController } from '@revolt/common'; +import { useTranslation } from '@revolt/i18n'; +import type { Channel } from 'revolt.js'; +import { Show } from 'solid-js'; import { ContextMenu, ContextMenuButton, ContextMenuDivider, -} from "./ContextMenu"; +} from './ContextMenu'; /** * Context menu for channels @@ -38,8 +35,8 @@ export function ChannelContextMenu(props: { channel: Channel }) { * Create a new invite */ function createInvite() { - getController("modal").push({ - type: "create_invite", + getController('modal').push({ + type: 'create_invite', channel: props.channel, }); } @@ -48,8 +45,8 @@ export function ChannelContextMenu(props: { channel: Channel }) { * Create a new channel */ function createChannel() { - getController("modal").push({ - type: "create_channel", + getController('modal').push({ + type: 'create_channel', server: props.channel.server!, }); } @@ -58,9 +55,9 @@ export function ChannelContextMenu(props: { channel: Channel }) { * Edit channel */ function editChannel() { - getController("modal").push({ - type: "settings", - config: "channel", + getController('modal').push({ + type: 'settings', + config: 'channel', context: props.channel, }); } @@ -69,8 +66,8 @@ export function ChannelContextMenu(props: { channel: Channel }) { * Delete channel */ function deleteChannel() { - getController("modal").push({ - type: "delete_channel", + getController('modal').push({ + type: 'delete_channel', channel: props.channel, }); } @@ -81,7 +78,7 @@ export function ChannelContextMenu(props: { channel: Channel }) { function openAdminPanel() { window.open( `https://admin.revolt.chat/panel/inspect/channel/${props.channel.id}`, - "_blank" + '_blank' ); } @@ -91,7 +88,7 @@ export function ChannelContextMenu(props: { channel: Channel }) { function copyLink() { navigator.clipboard.writeText( `${location.origin}${ - props.channel.server ? `/server/${props.channel.server?.id}` : "" + props.channel.server ? `/server/${props.channel.server?.id}` : '' }/channel/${props.channel.id}` ); } @@ -107,48 +104,48 @@ export function ChannelContextMenu(props: { channel: Channel }) { <ContextMenu> <Show when={ - props.channel.unread || props.channel.havePermission("InviteOthers") + props.channel.unread || props.channel.havePermission('InviteOthers') } > <Show when={props.channel.unread}> <ContextMenuButton icon={MdMarkChatRead} onClick={markAsRead}> - {t("app.context_menu.mark_as_read")} + {t('app.context_menu.mark_as_read')} </ContextMenuButton> </Show> - <Show when={props.channel.havePermission("InviteOthers")}> + <Show when={props.channel.havePermission('InviteOthers')}> <ContextMenuButton icon={MdGroupAdd} onClick={createInvite}> - {t("app.context_menu.create_invite")} + {t('app.context_menu.create_invite')} </ContextMenuButton> </Show> <ContextMenuDivider /> </Show> - <Show when={props.channel.server?.havePermission("ManageChannel")}> + <Show when={props.channel.server?.havePermission('ManageChannel')}> <ContextMenuButton icon={MdLibraryAdd} onClick={createChannel}> - {t("app.context_menu.create_channel")} + {t('app.context_menu.create_channel')} </ContextMenuButton> </Show> - <Show when={props.channel.havePermission("ManageChannel")}> + <Show when={props.channel.havePermission('ManageChannel')}> <ContextMenuButton icon={MdSettings} onClick={editChannel}> - {t("app.context_menu.open_channel_settings")} + {t('app.context_menu.open_channel_settings')} </ContextMenuButton> <ContextMenuButton - icon={props.channel.type === "Group" ? MdLogout : MdDelete} + icon={props.channel.type === 'Group' ? MdLogout : MdDelete} onClick={deleteChannel} destructive > {t( - props.channel.type === "Group" - ? "app.context_menu.leave_group" - : "app.context_menu.delete_channel" + props.channel.type === 'Group' + ? 'app.context_menu.leave_group' + : 'app.context_menu.delete_channel' )} </ContextMenuButton> </Show> <Show when={ - props.channel.server?.havePermission("ManageChannel") || - props.channel.havePermission("ManageChannel") + props.channel.server?.havePermission('ManageChannel') || + props.channel.havePermission('ManageChannel') } > <ContextMenuDivider /> @@ -158,10 +155,10 @@ export function ChannelContextMenu(props: { channel: Channel }) { Admin Panel </ContextMenuButton> <ContextMenuButton icon={MdShare} onClick={copyLink}> - {t("app.context_menu.copy_link")} + {t('app.context_menu.copy_link')} </ContextMenuButton> <ContextMenuButton icon={MdBadge} onClick={copyId}> - {t("app.context_menu.copy_cid")} + {t('app.context_menu.copy_cid')} </ContextMenuButton> </ContextMenu> ); diff --git a/packages/client/components/app/menus/ContextMenu.tsx b/packages/client/components/app/menus/ContextMenu.tsx index 9edac6ffc..f60bb6e44 100644 --- a/packages/client/components/app/menus/ContextMenu.tsx +++ b/packages/client/components/app/menus/ContextMenu.tsx @@ -1,6 +1,6 @@ -import { Component, ComponentProps, JSX, splitProps } from "solid-js"; - -import { iconSize, styled } from "@revolt/ui"; +import { iconSize, styled } from '@revolt/ui'; +import type { Component, ComponentProps, JSX } from 'solid-js'; +import { splitProps } from 'solid-js'; export const ContextMenu = styled.div` display: flex; @@ -10,29 +10,29 @@ export const ContextMenu = styled.div` overflow: hidden; border-radius: ${(props) => props.theme!.borderRadius.md}; background: ${(props) => - props.theme!.colours["component-context-menu-background"]}; + props.theme!.colours['component-context-menu-background']}; color: ${(props) => - props.theme!.colours["component-context-menu-foreground"]}; - fill: ${(props) => props.theme!.colours["component-context-menu-foreground"]}; + props.theme!.colours['component-context-menu-foreground']}; + fill: ${(props) => props.theme!.colours['component-context-menu-foreground']}; box-shadow: 0 0 3px - ${(props) => props.theme!.colours["component-context-menu-shadow"]}; + ${(props) => props.theme!.colours['component-context-menu-shadow']}; `; export const ContextMenuDivider = styled.div` height: 1px; margin: ${(props) => props.theme!.gap.sm} 0; background: ${(props) => - props.theme!.colours["component-context-menu-divider"]}; + props.theme!.colours['component-context-menu-divider']}; `; -export const ContextMenuItem = styled("a", "MenuItem")` +export const ContextMenuItem = styled('a', 'MenuItem')` display: block; padding: ${(props) => props.theme!.gap.md} ${(props) => props.theme!.gap.lg}; &:hover { background: ${(props) => - props.theme!.colours["component-context-menu-item-hover-background"]}; + props.theme!.colours['component-context-menu-item-hover-background']}; } `; @@ -52,7 +52,7 @@ const ButtonBase = styled(ContextMenuItem)<{ destructive?: boolean }>` ? `fill: ${props.theme!.customColours.error.color}; color: ${ props.theme!.customColours.error.color };` - : ""} + : ''} `; type ButtonProps = ComponentProps<typeof ContextMenuItem> & { @@ -61,11 +61,11 @@ type ButtonProps = ComponentProps<typeof ContextMenuItem> & { }; export function ContextMenuButton(props: ButtonProps) { - const [local, remote] = splitProps(props, ["icon", "children"]); + const [local, remote] = splitProps(props, ['icon', 'children']); return ( <ButtonBase {...remote}> - {local.icon?.(iconSize("1.2em"))} + {local.icon?.(iconSize('1.2em'))} <span>{local.children}</span> </ButtonBase> ); diff --git a/packages/client/components/app/menus/DraftMessageContextMenu.tsx b/packages/client/components/app/menus/DraftMessageContextMenu.tsx index 1a6025357..898e9fb59 100644 --- a/packages/client/components/app/menus/DraftMessageContextMenu.tsx +++ b/packages/client/components/app/menus/DraftMessageContextMenu.tsx @@ -1,17 +1,14 @@ -import { Show } from "solid-js"; +import MdClose from '@material-design-icons/svg/outlined/close.svg?component-solid'; +import MdDelete from '@material-design-icons/svg/outlined/delete.svg?component-solid'; +import MdRefresh from '@material-design-icons/svg/outlined/refresh.svg?component-solid'; +import { useClient } from '@revolt/client'; +import { useTranslation } from '@revolt/i18n'; +import { state } from '@revolt/state'; +import type { UnsentMessage } from '@revolt/state/stores/Draft'; +import type { Channel } from 'revolt.js'; +import { Show } from 'solid-js'; -import { Channel } from "revolt.js"; - -import { useClient } from "@revolt/client"; -import { useTranslation } from "@revolt/i18n"; -import { state } from "@revolt/state"; -import { UnsentMessage } from "@revolt/state/stores/Draft"; - -import MdClose from "@material-design-icons/svg/outlined/close.svg?component-solid"; -import MdDelete from "@material-design-icons/svg/outlined/delete.svg?component-solid"; -import MdRefresh from "@material-design-icons/svg/outlined/refresh.svg?component-solid"; - -import { ContextMenu, ContextMenuButton } from "./ContextMenu"; +import { ContextMenu, ContextMenuButton } from './ContextMenu'; interface Props { draft: UnsentMessage; @@ -40,27 +37,27 @@ export function DraftMessageContextMenu(props: Props) { } return ( - <Show when={props.draft.status !== "sending"}> + <Show when={props.draft.status !== 'sending'}> <ContextMenu> <Show when={false}> <ContextMenuButton icon={MdClose} onClick={deleteMessage} destructive> - {t("app.context_menu.cancel_message")} + {t('app.context_menu.cancel_message')} </ContextMenuButton> </Show> <Show when={ - props.draft.status === "failed" || props.draft.status === "unsent" + props.draft.status === 'failed' || props.draft.status === 'unsent' } > <ContextMenuButton icon={MdRefresh} onClick={retrySend}> - {t("app.context_menu.retry_message")} + {t('app.context_menu.retry_message')} </ContextMenuButton> <ContextMenuButton icon={MdDelete} onClick={deleteMessage} destructive > - {t("app.context_menu.delete_message")} + {t('app.context_menu.delete_message')} </ContextMenuButton> </Show> </ContextMenu> diff --git a/packages/client/components/app/menus/MessageContextMenu.tsx b/packages/client/components/app/menus/MessageContextMenu.tsx index f6cb0c67f..43abe244e 100644 --- a/packages/client/components/app/menus/MessageContextMenu.tsx +++ b/packages/client/components/app/menus/MessageContextMenu.tsx @@ -1,26 +1,23 @@ -import { Show } from "solid-js"; - -import { Message } from "revolt.js"; - -import { useClient, useUser } from "@revolt/client"; -import { getController } from "@revolt/common"; -import { useTranslation } from "@revolt/i18n"; -import { state } from "@revolt/state"; - -import MdBadge from "@material-design-icons/svg/outlined/badge.svg?component-solid"; -import MdContentCopy from "@material-design-icons/svg/outlined/content_copy.svg?component-solid"; -import MdDelete from "@material-design-icons/svg/outlined/delete.svg?component-solid"; -import MdMarkChatUnread from "@material-design-icons/svg/outlined/mark_chat_unread.svg?component-solid"; -import MdReply from "@material-design-icons/svg/outlined/reply.svg?component-solid"; -import MdReport from "@material-design-icons/svg/outlined/report.svg?component-solid"; -import MdShare from "@material-design-icons/svg/outlined/share.svg?component-solid"; -import MdShield from "@material-design-icons/svg/outlined/shield.svg?component-solid"; +import MdBadge from '@material-design-icons/svg/outlined/badge.svg?component-solid'; +import MdContentCopy from '@material-design-icons/svg/outlined/content_copy.svg?component-solid'; +import MdDelete from '@material-design-icons/svg/outlined/delete.svg?component-solid'; +import MdMarkChatUnread from '@material-design-icons/svg/outlined/mark_chat_unread.svg?component-solid'; +import MdReply from '@material-design-icons/svg/outlined/reply.svg?component-solid'; +import MdReport from '@material-design-icons/svg/outlined/report.svg?component-solid'; +import MdShare from '@material-design-icons/svg/outlined/share.svg?component-solid'; +import MdShield from '@material-design-icons/svg/outlined/shield.svg?component-solid'; +import { useClient, useUser } from '@revolt/client'; +import { getController } from '@revolt/common'; +import { useTranslation } from '@revolt/i18n'; +import { state } from '@revolt/state'; +import type { Message } from 'revolt.js'; +import { Show } from 'solid-js'; import { ContextMenu, ContextMenuButton, ContextMenuDivider, -} from "./ContextMenu"; +} from './ContextMenu'; /** * Context menu for messages @@ -55,8 +52,8 @@ export function MessageContextMenu(props: { message: Message }) { * Report the message */ function report() { - getController("modal").push({ - type: "report_content", + getController('modal').push({ + type: 'report_content', target: props.message, client: client(), }); @@ -69,8 +66,8 @@ export function MessageContextMenu(props: { message: Message }) { if (ev.shiftKey) { props.message.delete(); } else { - getController("modal").push({ - type: "delete_message", + getController('modal').push({ + type: 'delete_message', message: props.message, }); } @@ -82,7 +79,7 @@ export function MessageContextMenu(props: { message: Message }) { function openAdminPanel() { window.open( `https://admin.revolt.chat/panel/inspect/message/${props.message.id}`, - "_blank" + '_blank' ); } @@ -92,7 +89,7 @@ export function MessageContextMenu(props: { message: Message }) { function copyLink() { navigator.clipboard.writeText( `${location.origin}${ - props.message.server ? `/server/${props.message.server?.id}` : "" + props.message.server ? `/server/${props.message.server?.id}` : '' }/channel/${props.message.channelId}/${props.message.id}` ); } @@ -107,28 +104,28 @@ export function MessageContextMenu(props: { message: Message }) { return ( <ContextMenu> <ContextMenuButton icon={MdReply} onClick={reply}> - {t("app.context_menu.reply_message")} + {t('app.context_menu.reply_message')} </ContextMenuButton> <ContextMenuButton icon={MdMarkChatUnread} onClick={markAsUnread}> - {t("app.context_menu.mark_unread")} + {t('app.context_menu.mark_unread')} </ContextMenuButton> <ContextMenuButton icon={MdContentCopy} onClick={copyText}> - {t("app.context_menu.copy_text")} + {t('app.context_menu.copy_text')} </ContextMenuButton> <ContextMenuDivider /> <Show when={!props.message.author?.self}> <ContextMenuButton icon={MdReport} onClick={report} destructive> - {t("app.context_menu.report_message")} + {t('app.context_menu.report_message')} </ContextMenuButton> </Show> <Show when={ props.message.author?.self || - props.message.channel?.havePermission("ManageMessages") + props.message.channel?.havePermission('ManageMessages') } > <ContextMenuButton icon={MdDelete} onClick={deleteMessage} destructive> - {t("app.context_menu.delete_message")} + {t('app.context_menu.delete_message')} </ContextMenuButton> </Show> <ContextMenuDivider /> @@ -136,10 +133,10 @@ export function MessageContextMenu(props: { message: Message }) { Admin Panel </ContextMenuButton> <ContextMenuButton icon={MdShare} onClick={copyLink}> - {t("app.context_menu.copy_link")} + {t('app.context_menu.copy_link')} </ContextMenuButton> <ContextMenuButton icon={MdBadge} onClick={copyId}> - {t("app.context_menu.copy_mid")} + {t('app.context_menu.copy_mid')} </ContextMenuButton> </ContextMenu> ); diff --git a/packages/client/components/app/menus/ServerContextMenu.tsx b/packages/client/components/app/menus/ServerContextMenu.tsx index 45fd8dd47..3b839a1de 100644 --- a/packages/client/components/app/menus/ServerContextMenu.tsx +++ b/packages/client/components/app/menus/ServerContextMenu.tsx @@ -1,25 +1,22 @@ -import { Show } from "solid-js"; - -import { Server } from "revolt.js"; - -import { useClient } from "@revolt/client"; -import { getController } from "@revolt/common"; -import { useTranslation } from "@revolt/i18n"; - -import MdBadge from "@material-design-icons/svg/outlined/badge.svg?component-solid"; -import MdFace from "@material-design-icons/svg/outlined/face.svg?component-solid"; -import MdLogout from "@material-design-icons/svg/outlined/logout.svg?component-solid"; -import MdMarkChatRead from "@material-design-icons/svg/outlined/mark_chat_read.svg?component-solid"; -import MdPersonAdd from "@material-design-icons/svg/outlined/person_add.svg?component-solid"; -import MdReport from "@material-design-icons/svg/outlined/report.svg?component-solid"; -import MdSettings from "@material-design-icons/svg/outlined/settings.svg?component-solid"; -import MdShield from "@material-design-icons/svg/outlined/shield.svg?component-solid"; +import MdBadge from '@material-design-icons/svg/outlined/badge.svg?component-solid'; +import MdFace from '@material-design-icons/svg/outlined/face.svg?component-solid'; +import MdLogout from '@material-design-icons/svg/outlined/logout.svg?component-solid'; +import MdMarkChatRead from '@material-design-icons/svg/outlined/mark_chat_read.svg?component-solid'; +import MdPersonAdd from '@material-design-icons/svg/outlined/person_add.svg?component-solid'; +import MdReport from '@material-design-icons/svg/outlined/report.svg?component-solid'; +import MdSettings from '@material-design-icons/svg/outlined/settings.svg?component-solid'; +import MdShield from '@material-design-icons/svg/outlined/shield.svg?component-solid'; +import { useClient } from '@revolt/client'; +import { getController } from '@revolt/common'; +import { useTranslation } from '@revolt/i18n'; +import type { Server } from 'revolt.js'; +import { Show } from 'solid-js'; import { ContextMenu, ContextMenuButton, ContextMenuDivider, -} from "./ContextMenu"; +} from './ContextMenu'; /** * Context menu for servers @@ -43,13 +40,13 @@ export function ServerContextMenu(props: { server: Server }) { const channel = props.server.orderedChannels .find((category) => category.channels.find((channel) => - channel.havePermission("InviteOthers") + channel.havePermission('InviteOthers') ) )! - .channels.find((channel) => channel.havePermission("InviteOthers"))!; + .channels.find((channel) => channel.havePermission('InviteOthers'))!; - getController("modal").push({ - type: "create_invite", + getController('modal').push({ + type: 'create_invite', channel, }); } @@ -58,8 +55,8 @@ export function ServerContextMenu(props: { server: Server }) { * Open server settings */ function editIdentity() { - getController("modal").push({ - type: "server_identity", + getController('modal').push({ + type: 'server_identity', member: props.server.member!, }); } @@ -68,9 +65,9 @@ export function ServerContextMenu(props: { server: Server }) { * Open server settings */ function openSettings() { - getController("modal").push({ - type: "settings", - config: "server", + getController('modal').push({ + type: 'settings', + config: 'server', context: props.server, }); } @@ -79,8 +76,8 @@ export function ServerContextMenu(props: { server: Server }) { * Report the server */ function report() { - getController("modal").push({ - type: "report_content", + getController('modal').push({ + type: 'report_content', target: props.server, client: client(), }); @@ -90,8 +87,8 @@ export function ServerContextMenu(props: { server: Server }) { * Leave the server */ function leave() { - getController("modal").push({ - type: "leave_server", + getController('modal').push({ + type: 'leave_server', server: props.server, }); } @@ -102,7 +99,7 @@ export function ServerContextMenu(props: { server: Server }) { function openAdminPanel() { window.open( `https://admin.revolt.chat/panel/inspect/server/${props.server.id}`, - "_blank" + '_blank' ); } @@ -118,54 +115,54 @@ export function ServerContextMenu(props: { server: Server }) { */ const permissionInviteOthers = () => props.server.channels.find((channel) => - channel.havePermission("InviteOthers") + channel.havePermission('InviteOthers') ); /** * Determine whether we can edit our identity */ const permissionEditIdentity = () => - props.server.havePermission("ChangeNickname") || - props.server.havePermission("ChangeAvatar"); + props.server.havePermission('ChangeNickname') || + props.server.havePermission('ChangeAvatar'); /** * Determine whether we can access settings */ const permissionServerSettings = () => props.server.owner?.self || - props.server.havePermission("AssignRoles") || - props.server.havePermission("BanMembers") || - props.server.havePermission("KickMembers") || - props.server.havePermission("ManageChannel") || - props.server.havePermission("ManageCustomisation") || - props.server.havePermission("ManageNicknames") || - props.server.havePermission("ManagePermissions") || - props.server.havePermission("ManageRole") || - props.server.havePermission("ManageServer") || - props.server.havePermission("ManageWebhooks"); + props.server.havePermission('AssignRoles') || + props.server.havePermission('BanMembers') || + props.server.havePermission('KickMembers') || + props.server.havePermission('ManageChannel') || + props.server.havePermission('ManageCustomisation') || + props.server.havePermission('ManageNicknames') || + props.server.havePermission('ManagePermissions') || + props.server.havePermission('ManageRole') || + props.server.havePermission('ManageServer') || + props.server.havePermission('ManageWebhooks'); return ( <ContextMenu> <Show when={props.server.unread}> <ContextMenuButton icon={MdMarkChatRead} onClick={markAsRead}> - {t("app.context_menu.mark_as_read")} + {t('app.context_menu.mark_as_read')} </ContextMenuButton> <ContextMenuDivider /> </Show> <Show when={permissionInviteOthers()}> <ContextMenuButton icon={MdPersonAdd} onClick={createInvite}> - {t("app.context_menu.create_invite")} + {t('app.context_menu.create_invite')} </ContextMenuButton> </Show> <Show when={permissionEditIdentity()}> <ContextMenuButton icon={MdFace} onClick={editIdentity}> - {t("app.context_menu.edit_your_identity")} + {t('app.context_menu.edit_your_identity')} </ContextMenuButton> </Show> <Show when={permissionServerSettings()}> <ContextMenuButton icon={MdSettings} onClick={openSettings}> - {t("app.context_menu.open_server_settings")} + {t('app.context_menu.open_server_settings')} </ContextMenuButton> </Show> <Show @@ -179,11 +176,11 @@ export function ServerContextMenu(props: { server: Server }) { </Show> <ContextMenuButton icon={MdReport} onClick={report} destructive> - {t("app.context_menu.report_server")} + {t('app.context_menu.report_server')} </ContextMenuButton> <Show when={!props.server.owner?.self}> <ContextMenuButton icon={MdLogout} onClick={leave} destructive> - {t("app.context_menu.leave_server")} + {t('app.context_menu.leave_server')} </ContextMenuButton> </Show> <ContextMenuDivider /> @@ -191,7 +188,7 @@ export function ServerContextMenu(props: { server: Server }) { Admin Panel </ContextMenuButton> <ContextMenuButton icon={MdBadge} onClick={copyId}> - {t("app.context_menu.copy_sid")} + {t('app.context_menu.copy_sid')} </ContextMenuButton> </ContextMenu> ); diff --git a/packages/client/components/app/menus/ServerSidebarContextMenu.tsx b/packages/client/components/app/menus/ServerSidebarContextMenu.tsx index b0d837904..a5916ec03 100644 --- a/packages/client/components/app/menus/ServerSidebarContextMenu.tsx +++ b/packages/client/components/app/menus/ServerSidebarContextMenu.tsx @@ -1,13 +1,10 @@ -import { Show } from "solid-js"; +import MdLibraryAdd from '@material-design-icons/svg/outlined/library_add.svg?component-solid'; +import { getController } from '@revolt/common'; +import { useTranslation } from '@revolt/i18n'; +import type { Server } from 'revolt.js'; +import { Show } from 'solid-js'; -import { Server } from "revolt.js"; - -import { getController } from "@revolt/common"; -import { useTranslation } from "@revolt/i18n"; - -import MdLibraryAdd from "@material-design-icons/svg/outlined/library_add.svg?component-solid"; - -import { ContextMenu, ContextMenuButton } from "./ContextMenu"; +import { ContextMenu, ContextMenuButton } from './ContextMenu'; /** * Context menu for server sidebar @@ -19,17 +16,17 @@ export function ServerSidebarContextMenu(props: { server: Server }) { * Create a new channel */ function createChannel() { - getController("modal").push({ - type: "create_channel", + getController('modal').push({ + type: 'create_channel', server: props.server!, }); } return ( <ContextMenu> - <Show when={props.server?.havePermission("ManageChannel")}> + <Show when={props.server?.havePermission('ManageChannel')}> <ContextMenuButton icon={MdLibraryAdd} onClick={createChannel}> - {t("app.context_menu.create_channel")} + {t('app.context_menu.create_channel')} </ContextMenuButton> </Show> </ContextMenu> diff --git a/packages/client/components/app/menus/UserContextMenu.tsx b/packages/client/components/app/menus/UserContextMenu.tsx index 2c6dd3f90..436903f07 100644 --- a/packages/client/components/app/menus/UserContextMenu.tsx +++ b/packages/client/components/app/menus/UserContextMenu.tsx @@ -1,29 +1,27 @@ -import { JSX, Show } from "solid-js"; - -import { Channel, Message, ServerMember, User } from "revolt.js"; - -import { useClient } from "@revolt/client"; -import { getController } from "@revolt/common"; -import { useTranslation } from "@revolt/i18n"; - -import MdAddCircleOutline from "@material-design-icons/svg/outlined/add_circle_outline.svg?component-solid"; -import MdAdminPanelSettings from "@material-design-icons/svg/outlined/admin_panel_settings.svg?component-solid"; -import MdAlternateEmail from "@material-design-icons/svg/outlined/alternate_email.svg?component-solid"; -import MdBadge from "@material-design-icons/svg/outlined/badge.svg?component-solid"; -import MdBlock from "@material-design-icons/svg/outlined/block.svg?component-solid"; -import MdCancel from "@material-design-icons/svg/outlined/cancel.svg?component-solid"; -import MdClose from "@material-design-icons/svg/outlined/close.svg?component-solid"; -import MdDoNotDisturbOn from "@material-design-icons/svg/outlined/do_not_disturb_on.svg?component-solid"; -import MdFace from "@material-design-icons/svg/outlined/face.svg?component-solid"; -import MdPersonAddAlt from "@material-design-icons/svg/outlined/person_add_alt.svg?component-solid"; -import MdPersonRemove from "@material-design-icons/svg/outlined/person_remove.svg?component-solid"; -import MdReport from "@material-design-icons/svg/outlined/report.svg?component-solid"; +import MdAddCircleOutline from '@material-design-icons/svg/outlined/add_circle_outline.svg?component-solid'; +import MdAdminPanelSettings from '@material-design-icons/svg/outlined/admin_panel_settings.svg?component-solid'; +import MdAlternateEmail from '@material-design-icons/svg/outlined/alternate_email.svg?component-solid'; +import MdBadge from '@material-design-icons/svg/outlined/badge.svg?component-solid'; +import MdBlock from '@material-design-icons/svg/outlined/block.svg?component-solid'; +import MdCancel from '@material-design-icons/svg/outlined/cancel.svg?component-solid'; +import MdClose from '@material-design-icons/svg/outlined/close.svg?component-solid'; +import MdDoNotDisturbOn from '@material-design-icons/svg/outlined/do_not_disturb_on.svg?component-solid'; +import MdFace from '@material-design-icons/svg/outlined/face.svg?component-solid'; +import MdPersonAddAlt from '@material-design-icons/svg/outlined/person_add_alt.svg?component-solid'; +import MdPersonRemove from '@material-design-icons/svg/outlined/person_remove.svg?component-solid'; +import MdReport from '@material-design-icons/svg/outlined/report.svg?component-solid'; +import { useClient } from '@revolt/client'; +import { getController } from '@revolt/common'; +import { useTranslation } from '@revolt/i18n'; +import type { Channel, Message, ServerMember, User } from 'revolt.js'; +import type { JSX } from 'solid-js'; +import { Show } from 'solid-js'; import { ContextMenu, ContextMenuButton, ContextMenuDivider, -} from "./ContextMenu"; +} from './ContextMenu'; /** * Context menu for users @@ -43,8 +41,8 @@ export function UserContextMenu(props: { * Delete channel */ function closeDm() { - getController("modal").push({ - type: "delete_channel", + getController('modal').push({ + type: 'delete_channel', channel: props.channel!, }); } @@ -53,15 +51,15 @@ export function UserContextMenu(props: { * Mention the user */ function mention() { - getController("state").draft.insertText(props.user.toString()); + getController('state').draft.insertText(props.user.toString()); } /** * Edit server identity for user */ function editIdentity() { - getController("modal").push({ - type: "server_identity", + getController('modal').push({ + type: 'server_identity', member: props.member!, }); } @@ -70,8 +68,8 @@ export function UserContextMenu(props: { * Report the user */ function reportUser() { - getController("modal").push({ - type: "report_content", + getController('modal').push({ + type: 'report_content', target: props.user!, client: client(), contextMessage: props.contextMessage, @@ -82,8 +80,8 @@ export function UserContextMenu(props: { * Kick the member */ function kickMember() { - getController("modal").push({ - type: "kick_member", + getController('modal').push({ + type: 'kick_member', member: props.member!, }); } @@ -92,8 +90,8 @@ export function UserContextMenu(props: { * Ban the member */ function banMember() { - getController("modal").push({ - type: "ban_member", + getController('modal').push({ + type: 'ban_member', member: props.member!, }); } @@ -132,7 +130,7 @@ export function UserContextMenu(props: { function openAdminPanel() { window.open( `https://admin.revolt.chat/panel/inspect/user/${props.user.id}`, - "_blank" + '_blank' ); } @@ -147,12 +145,12 @@ export function UserContextMenu(props: { <ContextMenu> <Show when={props.channel}> <ContextMenuButton icon={MdClose} onClick={closeDm}> - {t("app.context_menu.close_dm")} + {t('app.context_menu.close_dm')} </ContextMenuButton> </Show> <Show when={!props.channel}> <ContextMenuButton icon={MdAlternateEmail} onClick={mention}> - {t("app.context_menu.mention")} + {t('app.context_menu.mention')} </ContextMenuButton> </Show> <ContextMenuDivider /> @@ -161,17 +159,17 @@ export function UserContextMenu(props: { when={ props.member && (props.user.self - ? props.member!.server!.havePermission("ChangeNickname") || - props.member!.server!.havePermission("ChangeAvatar") - : (props.member!.server!.havePermission("ManageNicknames") || - props.member!.server!.havePermission("RemoveAvatars")) && + ? props.member!.server!.havePermission('ChangeNickname') || + props.member!.server!.havePermission('ChangeAvatar') + : (props.member!.server!.havePermission('ManageNicknames') || + props.member!.server!.havePermission('RemoveAvatars')) && props.member!.inferiorTo(props.member!.server!.member!)) } > <ContextMenuButton icon={MdFace} onClick={editIdentity}> {t( `app.context_menu.${ - props.user.self ? "edit_your_identity" : "edit_identity" + props.user.self ? 'edit_your_identity' : 'edit_identity' }` )} </ContextMenuButton> @@ -181,7 +179,7 @@ export function UserContextMenu(props: { <Show when={ !props.user.self && - props.member?.server?.havePermission("KickMembers") && + props.member?.server?.havePermission('KickMembers') && props.member.inferiorTo(props.member.server.member!) } > @@ -190,13 +188,13 @@ export function UserContextMenu(props: { onClick={kickMember} destructive > - {t("app.context_menu.kick_member")} + {t('app.context_menu.kick_member')} </ContextMenuButton> </Show> <Show when={ !props.user.self && - props.member?.server?.havePermission("BanMembers") && + props.member?.server?.havePermission('BanMembers') && props.member.inferiorTo(props.member.server.member!) } > @@ -205,7 +203,7 @@ export function UserContextMenu(props: { onClick={banMember} destructive > - {t("app.context_menu.ban_member")} + {t('app.context_menu.ban_member')} </ContextMenuButton> </Show> </Show> @@ -215,42 +213,42 @@ export function UserContextMenu(props: { <Show when={!props.user.self}> <ContextMenuButton icon={MdReport} onClick={reportUser} destructive> - {t("app.context_menu.report_user")} + {t('app.context_menu.report_user')} </ContextMenuButton> {/* TODO: #286 show profile / message */} - <Show when={props.user.relationship === "None" && !props.user.bot}> + <Show when={props.user.relationship === 'None' && !props.user.bot}> <ContextMenuButton icon={MdPersonAddAlt} onClick={addFriend}> - {t("app.context_menu.add_friend")} + {t('app.context_menu.add_friend')} </ContextMenuButton> </Show> - <Show when={props.user.relationship === "Friend"}> + <Show when={props.user.relationship === 'Friend'}> <ContextMenuButton icon={MdPersonRemove} onClick={removeFriend}> - {t("app.context_menu.remove_friend")} + {t('app.context_menu.remove_friend')} </ContextMenuButton> </Show> - <Show when={props.user.relationship === "Incoming"}> + <Show when={props.user.relationship === 'Incoming'}> <ContextMenuButton icon={MdPersonAddAlt} onClick={addFriend}> - {t("app.context_menu.accept_friend")} + {t('app.context_menu.accept_friend')} </ContextMenuButton> </Show> - <Show when={props.user.relationship === "Incoming"}> + <Show when={props.user.relationship === 'Incoming'}> <ContextMenuButton icon={MdCancel} onClick={removeFriend}> - {t("app.context_menu.reject_friend")} + {t('app.context_menu.reject_friend')} </ContextMenuButton> </Show> - <Show when={props.user.relationship === "Outgoing"}> + <Show when={props.user.relationship === 'Outgoing'}> <ContextMenuButton icon={MdCancel} onClick={removeFriend}> - {t("app.context_menu.cancel_friend")} + {t('app.context_menu.cancel_friend')} </ContextMenuButton> </Show> - <Show when={props.user.relationship !== "Blocked"}> + <Show when={props.user.relationship !== 'Blocked'}> <ContextMenuButton icon={MdBlock} onClick={blockUser}> - {t("app.context_menu.block_user")} + {t('app.context_menu.block_user')} </ContextMenuButton> </Show> - <Show when={props.user.relationship === "Blocked"}> + <Show when={props.user.relationship === 'Blocked'}> <ContextMenuButton icon={MdAddCircleOutline} onClick={unblockUser}> - {t("app.context_menu.unblock_user")} + {t('app.context_menu.unblock_user')} </ContextMenuButton> </Show> <ContextMenuDivider /> @@ -260,7 +258,7 @@ export function UserContextMenu(props: { Admin Panel </ContextMenuButton> <ContextMenuButton icon={MdBadge} onClick={copyId}> - {t("app.context_menu.copy_uid")} + {t('app.context_menu.copy_uid')} </ContextMenuButton> </ContextMenu> ); @@ -275,7 +273,7 @@ export function floatingUserMenus( user: User, member?: ServerMember, contextMessage?: Message -): JSX.Directives["floating"] & object { +): JSX.Directives['floating'] & object { return { userCard: { user, diff --git a/packages/client/components/app/menus/index.tsx b/packages/client/components/app/menus/index.tsx index e25bf8f50..6110f9b58 100644 --- a/packages/client/components/app/menus/index.tsx +++ b/packages/client/components/app/menus/index.tsx @@ -1,5 +1,5 @@ -export { MessageContextMenu } from "./MessageContextMenu"; -export { UserContextMenu } from "./UserContextMenu"; -export { ServerContextMenu } from "./ServerContextMenu"; -export { ChannelContextMenu } from "./ChannelContextMenu"; -export { ServerSidebarContextMenu } from "./ServerSidebarContextMenu"; +export { ChannelContextMenu } from './ChannelContextMenu'; +export { MessageContextMenu } from './MessageContextMenu'; +export { ServerContextMenu } from './ServerContextMenu'; +export { ServerSidebarContextMenu } from './ServerSidebarContextMenu'; +export { UserContextMenu } from './UserContextMenu'; diff --git a/packages/client/components/auth/index.tsx b/packages/client/components/auth/index.tsx index 66bc7085e..48277fbd3 100644 --- a/packages/client/components/auth/index.tsx +++ b/packages/client/components/auth/index.tsx @@ -1,3 +1,3 @@ -import "../ui/styled.d.ts"; +import '../ui/styled.d.ts'; -export { AuthPage } from "./src/AuthPage"; +export { AuthPage } from './src/AuthPage'; diff --git a/packages/client/components/auth/src/AuthPage.tsx b/packages/client/components/auth/src/AuthPage.tsx index 9e6bc9421..eb1293a8a 100644 --- a/packages/client/components/auth/src/AuthPage.tsx +++ b/packages/client/components/auth/src/AuthPage.tsx @@ -1,41 +1,37 @@ -import { BiLogosGithub, BiLogosMastodon, BiLogosTwitter } from "solid-icons/bi"; -import { JSX } from "solid-js"; - -import { styled } from "styled-system/jsx"; - -import { useTranslation } from "@revolt/i18n"; -import { Button, iconSize } from "@revolt/ui"; - -import MdDarkMode from "@material-design-icons/svg/filled/dark_mode.svg?component-solid"; - -import background from "./background.jpg"; -import { FlowBase } from "./flows/Flow"; - +import MdDarkMode from '@material-design-icons/svg/filled/dark_mode.svg?component-solid'; +import { useTranslation } from '@revolt/i18n'; +import { Button, iconSize } from '@revolt/ui'; +import { BiLogosGithub, BiLogosMastodon, BiLogosTwitter } from 'solid-icons/bi'; +import type { JSX } from 'solid-js'; +import { styled } from 'styled-system/jsx'; + +import background from './background.jpg'; +import { FlowBase } from './flows/Flow'; /** * Authentication page layout */ -const Base = styled("div", { +const Base = styled('div', { base: { - width: "100%", - height: "100%", - padding: "40px 35px", + width: '100%', + height: '100%', + padding: '40px 35px', - userSelect: "none", - overflowY: "scroll", + userSelect: 'none', + overflowY: 'scroll', - color: "white", + color: 'white', background: `var(--url)`, - backgroundPosition: "center", - backgroundRepeat: "no-repeat", - backgroundSize: "cover", + backgroundPosition: 'center', + backgroundRepeat: 'no-repeat', + backgroundSize: 'cover', - display: "flex", - flexDirection: "column", - justifyContent: "space-between", + display: 'flex', + flexDirection: 'column', + justifyContent: 'space-between', mdDown: { - padding: "30px 20px", - background: "var(--colours-background)", + padding: '30px 20px', + background: 'var(--colours-background)', }, }, }); @@ -43,19 +39,19 @@ const Base = styled("div", { /** * Top and bottom navigation bars */ -const Nav = styled("div", { +const Nav = styled('div', { base: { - height: "32px", - display: "flex", - alignItems: "center", - flexDirection: "row", - justifyContent: "space-between", + height: '32px', + display: 'flex', + alignItems: 'center', + flexDirection: 'row', + justifyContent: 'space-between', - color: "white", - textDecoration: "none", + color: 'white', + textDecoration: 'none', mdDown: { - color: "var(--colours-foreground)", + color: 'var(--colours-foreground)', }, }, }); @@ -65,51 +61,51 @@ const Nav = styled("div", { */ const NavItems = styled(`div`, { base: { - gap: "10px", - display: "flex", - alignItems: "center", + gap: '10px', + display: 'flex', + alignItems: 'center', - fontSize: "0.9em", + fontSize: '0.9em', }, variants: { variant: { default: {}, stack: { mdDown: { - flexDirection: "column", + flexDirection: 'column', }, }, hide: { mdDown: { - display: "none", + display: 'none', }, }, }, }, defaultVariants: { - variant: "default", + variant: 'default', }, }); /** * Link with an icon inside */ -const LinkWithIcon = styled("a", { - base: { height: "24px" }, +const LinkWithIcon = styled('a', { + base: { height: '24px' }, }); /** * Middot-like bullet */ -const Bullet = styled("div", { +const Bullet = styled('div', { base: { - height: "5px", - width: "5px", - background: "grey", - borderRadius: "50%", + height: '5px', + width: '5px', + background: 'grey', + borderRadius: '50%', mdDown: { - display: "none", + display: 'none', }, }, }); @@ -117,9 +113,9 @@ const Bullet = styled("div", { /** * Revolt Wordmark */ -const Logo = styled("img", { +const Logo = styled('img', { base: { - height: "24px", + height: '24px', }, }); @@ -132,17 +128,17 @@ export function AuthPage(props: { children: JSX.Element }) { const t = useTranslation(); return ( - <Base style={{ "--url": `url('${background}')` }}> + <Base style={{ '--url': `url('${background}')` }}> <Nav> <div /> <Button - size="icon" + size='icon' onClick={() => { a = !a; (window as any)._demo_setDarkMode(a); }} > - <MdDarkMode {...iconSize("24px")} /> + <MdDarkMode {...iconSize('24px')} /> </Button> </Nav> {/*<Nav> @@ -151,38 +147,38 @@ export function AuthPage(props: { children: JSX.Element }) { </Nav>*/} <FlowBase>{props.children}</FlowBase> <Nav> - <NavItems variant="stack"> + <NavItems variant='stack'> <NavItems> - <LinkWithIcon href="https://github.com/revoltchat" target="_blank"> + <LinkWithIcon href='https://github.com/revoltchat' target='_blank'> <BiLogosGithub size={24} /> </LinkWithIcon> - <LinkWithIcon href="https://twitter.com/revoltchat" target="_blank"> + <LinkWithIcon href='https://twitter.com/revoltchat' target='_blank'> <BiLogosTwitter size={24} /> </LinkWithIcon> <LinkWithIcon - href="https://mastodon.social/web/@revoltchat" - target="_blank" + href='https://mastodon.social/web/@revoltchat' + target='_blank' > <BiLogosMastodon size={24} /> </LinkWithIcon> </NavItems> <Bullet /> <NavItems> - <a href="https://revolt.chat/about" target="_blank"> - {t("general.about")} + <a href='https://revolt.chat/about' target='_blank'> + {t('general.about')} </a> - <a href="https://revolt.chat/terms" target="_blank"> - {t("general.tos")} + <a href='https://revolt.chat/terms' target='_blank'> + {t('general.tos')} </a> - <a href="https://revolt.chat/privacy" target="_blank"> - {t("general.privacy")} + <a href='https://revolt.chat/privacy' target='_blank'> + {t('general.privacy')} </a> </NavItems> </NavItems> - <NavItems variant="hide"> - {t("general.image_by")} @fakurian + <NavItems variant='hide'> + {t('general.image_by')} @fakurian <Bullet /> - <a href="https://unsplash.com/" target="_blank" rel="noreferrer"> + <a href='https://unsplash.com/' target='_blank' rel='noreferrer'> unsplash.com </a> </NavItems> diff --git a/packages/client/components/auth/src/LocaleSelector.tsx b/packages/client/components/auth/src/LocaleSelector.tsx index 019ba7328..4ccff04e8 100644 --- a/packages/client/components/auth/src/LocaleSelector.tsx +++ b/packages/client/components/auth/src/LocaleSelector.tsx @@ -1,8 +1,8 @@ -import { For } from "solid-js"; - -import { Language, Languages } from "@revolt/i18n/locales/Languages"; -import { state } from "@revolt/state"; -import { ComboBox } from "@revolt/ui"; +import type { Language } from '@revolt/i18n/locales/Languages'; +import { Languages } from '@revolt/i18n/locales/Languages'; +import { state } from '@revolt/state'; +import { ComboBox } from '@revolt/ui'; +import { For } from 'solid-js'; /** * Dropdown box for selecting the current language @@ -10,7 +10,7 @@ import { ComboBox } from "@revolt/ui"; export function LocaleSelector() { return ( <ComboBox - value={state.get("locale").lang} + value={state.get('locale').lang} onChange={(e) => state.locale.switch(e.currentTarget.value as Language)} > <For each={Object.keys(Languages)}> diff --git a/packages/client/components/auth/src/flows/Flow.tsx b/packages/client/components/auth/src/flows/Flow.tsx index 5e0c1d531..114ed5f32 100644 --- a/packages/client/components/auth/src/flows/Flow.tsx +++ b/packages/client/components/auth/src/flows/Flow.tsx @@ -1,10 +1,10 @@ -import { JSX, Show } from "solid-js"; -import { keyframes, styled } from "solid-styled-components"; +import { Column, Row, Typography } from '@revolt/ui'; +import type { JSX } from 'solid-js'; +import { Show } from 'solid-js'; +import { keyframes, styled } from 'solid-styled-components'; -import { Column, Row, Typography } from "@revolt/ui"; - -import envelope from "./envelope.svg"; -import wave from "./wave.svg"; +import envelope from './envelope.svg'; +import wave from './wave.svg'; /** * Container for authentication page flows @@ -13,10 +13,10 @@ export const FlowBase = styled(Column)` background: ${ (props) => props.theme!.colours[ - "messaging-message-box-background" + 'messaging-message-box-background' ] /* TODO: change and in other places */ }; - color: ${(props) => props.theme!.colours["messaging-message-box-foreground"]}; + color: ${(props) => props.theme!.colours['messaging-message-box-foreground']}; /* background-color: rgba(36, 36, 36, 0.75); backdrop-filter: blur(20px); */ @@ -120,23 +120,23 @@ const Mail = styled.img` export function FlowTitle(props: { children: JSX.Element; subtitle?: JSX.Element; - emoji?: "wave" | "mail"; + emoji?: 'wave' | 'mail'; }) { return ( <Column> - <Row align gap="sm"> - <Show when={props.emoji === "wave"}> + <Row align gap='sm'> + <Show when={props.emoji === 'wave'}> <Wave src={wave} /> </Show> - <Show when={props.emoji === "mail"}> + <Show when={props.emoji === 'mail'}> <Mail src={envelope} /> </Show> - <Typography variant="legacy-settings-title"> + <Typography variant='legacy-settings-title'> {props.children} </Typography> </Row> <Show when={props.subtitle}> - <Typography variant="legacy-settings-description"> + <Typography variant='legacy-settings-description'> {props.subtitle} </Typography> </Show> diff --git a/packages/client/components/auth/src/flows/FlowCheck.tsx b/packages/client/components/auth/src/flows/FlowCheck.tsx index 6ab8adf83..82aca18dc 100644 --- a/packages/client/components/auth/src/flows/FlowCheck.tsx +++ b/packages/client/components/auth/src/flows/FlowCheck.tsx @@ -1,18 +1,16 @@ -import { Show } from "solid-js"; +import MdArrowBack from '@material-design-icons/svg/filled/arrow_back.svg?component-solid'; +import { useTranslation } from '@revolt/i18n'; +import { useNavigate } from '@revolt/routing'; +import { Button, iconSize, Row } from '@revolt/ui'; +import { Show } from 'solid-js'; -import { useTranslation } from "@revolt/i18n"; -import { useNavigate } from "@revolt/routing"; -import { Button, Row, iconSize } from "@revolt/ui"; - -import MdArrowBack from "@material-design-icons/svg/filled/arrow_back.svg?component-solid"; - -import { FlowTitle } from "./Flow"; -import { MailProvider } from "./MailProvider"; +import { FlowTitle } from './Flow'; +import { MailProvider } from './MailProvider'; /** * Keep track of email within the same session */ -let email = "postmaster@revolt.wtf"; +let email = 'postmaster@revolt.wtf'; /** * Persist email information temporarily @@ -30,13 +28,13 @@ export default function FlowCheck() { return ( <> - <FlowTitle subtitle={t("login.email_delay")} emoji="mail"> - {t("login.check_mail")} + <FlowTitle subtitle={t('login.email_delay')} emoji='mail'> + {t('login.check_mail')} </FlowTitle> - <Row align justify="center"> - <a href=".."> - <Button variant="plain"> - <MdArrowBack {...iconSize("1.2em")} /> Back + <Row align justify='center'> + <a href='..'> + <Button variant='plain'> + <MdArrowBack {...iconSize('1.2em')} /> Back </Button> </a> <Show when={email}> @@ -46,15 +44,15 @@ export default function FlowCheck() { {import.meta.env.DEV && ( <div style={{ - position: "fixed", + position: 'fixed', top: 0, left: 0, - background: "white", - color: "black", - cursor: "pointer", + background: 'white', + color: 'black', + cursor: 'pointer', }} onClick={() => { - navigate("/login/verify/abc", { replace: true }); + navigate('/login/verify/abc', { replace: true }); }} > Mock Verify diff --git a/packages/client/components/auth/src/flows/FlowConfirmReset.tsx b/packages/client/components/auth/src/flows/FlowConfirmReset.tsx index ac1994c42..b8b024030 100644 --- a/packages/client/components/auth/src/flows/FlowConfirmReset.tsx +++ b/packages/client/components/auth/src/flows/FlowConfirmReset.tsx @@ -1,10 +1,10 @@ -import { clientController } from "@revolt/client"; -import { useTranslation } from "@revolt/i18n"; -import { useNavigate, useParams } from "@revolt/routing"; -import { Button, Typography } from "@revolt/ui"; +import { clientController } from '@revolt/client'; +import { useTranslation } from '@revolt/i18n'; +import { useNavigate, useParams } from '@revolt/routing'; +import { Button, Typography } from '@revolt/ui'; -import { FlowTitle } from "./Flow"; -import { Fields, Form } from "./Form"; +import { FlowTitle } from './Flow'; +import { Fields, Form } from './Form'; /** * Flow for confirming a new password @@ -19,27 +19,27 @@ export default function FlowConfirmReset() { * @param data Form Data */ async function reset(data: FormData) { - const password = data.get("new-password") as string; - const remove_sessions = !!(data.get("log-out") as "on" | undefined); + const password = data.get('new-password') as string; + const remove_sessions = !!(data.get('log-out') as 'on' | undefined); - await clientController.api.patch("/auth/account/reset_password", { + await clientController.api.patch('/auth/account/reset_password', { password, token, remove_sessions, }); - navigate("/login/auth", { replace: true }); + navigate('/login/auth', { replace: true }); } return ( <> - <FlowTitle>{t("login.reset")}</FlowTitle> + <FlowTitle>{t('login.reset')}</FlowTitle> <Form onSubmit={reset}> - <Fields fields={["new-password", "log-out"]} /> - <Button type="submit">{t("login.reset")}</Button> + <Fields fields={['new-password', 'log-out']} /> + <Button type='submit'>{t('login.reset')}</Button> </Form> - <Typography variant="legacy-settings-description"> - <a href="/login/auth">{t("login.remembered")}</a> + <Typography variant='legacy-settings-description'> + <a href='/login/auth'>{t('login.remembered')}</a> </Typography> </> ); diff --git a/packages/client/components/auth/src/flows/FlowCreate.tsx b/packages/client/components/auth/src/flows/FlowCreate.tsx index 6084c3640..85985e313 100644 --- a/packages/client/components/auth/src/flows/FlowCreate.tsx +++ b/packages/client/components/auth/src/flows/FlowCreate.tsx @@ -1,15 +1,13 @@ -import { CONFIGURATION } from "@revolt/common"; -import { useTranslation } from "@revolt/i18n"; -import { useNavigate } from "@revolt/routing"; -import { Button, Row, iconSize } from "@revolt/ui"; +import MdArrowBack from '@material-design-icons/svg/filled/arrow_back.svg?component-solid'; +import { CONFIGURATION } from '@revolt/common'; +import { useTranslation } from '@revolt/i18n'; +import { useNavigate } from '@revolt/routing'; +import { Button, iconSize, Row } from '@revolt/ui'; -import MdArrowBack from "@material-design-icons/svg/filled/arrow_back.svg?component-solid"; - -import { clientController } from "../../../client"; - -import { FlowTitle } from "./Flow"; -import { setFlowCheckEmail } from "./FlowCheck"; -import { Fields, Form } from "./Form"; +import { clientController } from '../../../client'; +import { FlowTitle } from './Flow'; +import { setFlowCheckEmail } from './FlowCheck'; +import { Fields, Form } from './Form'; /** * Flow for creating a new account @@ -23,11 +21,11 @@ export default function FlowCreate() { * @param data Form Data */ async function create(data: FormData) { - const email = data.get("email") as string; - const password = data.get("password") as string; - const captcha = data.get("captcha") as string; + const email = data.get('email') as string; + const password = data.get('password') as string; + const captcha = data.get('captcha') as string; - await clientController.api.post("/auth/account/create", { + await clientController.api.post('/auth/account/create', { email, password, captcha, @@ -39,38 +37,38 @@ export default function FlowCreate() { // TODO: log straight in if no email confirmation? setFlowCheckEmail(email); - navigate("/login/check", { replace: true }); + navigate('/login/check', { replace: true }); } return ( <> - <FlowTitle subtitle={t("login.subtitle2")} emoji="wave"> - {t("login.welcome2")} + <FlowTitle subtitle={t('login.subtitle2')} emoji='wave'> + {t('login.welcome2')} </FlowTitle> <Form onSubmit={create} captcha={CONFIGURATION.HCAPTCHA_SITEKEY}> - <Fields fields={["email", "password"]} /> - <Row align justify="center"> - <a href=".."> - <Button variant="plain"> - <MdArrowBack {...iconSize("1.2em")} /> Back + <Fields fields={['email', 'password']} /> + <Row align justify='center'> + <a href='..'> + <Button variant='plain'> + <MdArrowBack {...iconSize('1.2em')} /> Back </Button> </a> - <Button type="submit">{t("login.register")}</Button> + <Button type='submit'>{t('login.register')}</Button> </Row> </Form> {import.meta.env.DEV && ( <div style={{ - position: "fixed", + position: 'fixed', top: 0, left: 0, - background: "white", - color: "black", - cursor: "pointer", + background: 'white', + color: 'black', + cursor: 'pointer', }} onClick={() => { - setFlowCheckEmail("insert@revolt.chat"); - navigate("/login/check", { replace: true }); + setFlowCheckEmail('insert@revolt.chat'); + navigate('/login/check', { replace: true }); }} > Mock Submission diff --git a/packages/client/components/auth/src/flows/FlowHome.tsx b/packages/client/components/auth/src/flows/FlowHome.tsx index 2de63cc65..ba66cec57 100644 --- a/packages/client/components/auth/src/flows/FlowHome.tsx +++ b/packages/client/components/auth/src/flows/FlowHome.tsx @@ -1,16 +1,15 @@ -import { Show } from "solid-js"; +import { clientController } from '@revolt/client'; +import { useTranslation } from '@revolt/i18n'; +import { Navigate } from '@revolt/routing'; +import { Button, Column, styled } from '@revolt/ui'; +import { Show } from 'solid-js'; -import { clientController } from "@revolt/client"; -import { useTranslation } from "@revolt/i18n"; -import { Navigate } from "@revolt/routing"; -import { Button, Column, styled } from "@revolt/ui"; +// import RevoltSvg from "../../../../public/assets/wordmark_wide_500px.svg?component-solid"; -import RevoltSvg from "../../../../public/assets/wordmark_wide_500px.svg?component-solid"; - -const Logo = styled(RevoltSvg)` +const Logo = styled('div')` width: 100%; object-fit: contain; - fill: ${(props) => props.theme!.colours["messaging-message-box-foreground"]}; + fill: ${(props) => props.theme!.colours['messaging-message-box-foreground']}; `; /** @@ -22,41 +21,41 @@ export default function FlowHome() { return ( <> <Show when={clientController.isLoggedIn()}> - <Navigate href="/app" /> + <Navigate href='/app' /> </Show> - <Column gap="xl"> + <Column gap='xl'> <Logo /> <Column> <b style={{ - "font-weight": 800, - "font-size": "1.4em", - display: "flex", - "flex-direction": "column", - "align-items": "center", + 'font-weight': 800, + 'font-size': '1.4em', + display: 'flex', + 'flex-direction': 'column', + 'align-items': 'center', }} > <span>Find your community,</span> <br /> <span>connect with the world.</span> </b> - <span style={{ "text-align": "center", opacity: "0.5" }}> + <span style={{ 'text-align': 'center', opacity: '0.5' }}> Revolt is one of the best ways to stay connected with your friends and community, anywhere, anytime. </span> </Column> <Column> - <a href="/login/auth"> + <a href='/login/auth'> <Column> <Button>Log In</Button> </Column> </a> - <a href="/login/create"> + <a href='/login/create'> <Column> - <Button variant="secondary">Sign Up</Button> + <Button variant='secondary'>Sign Up</Button> </Column> </a> </Column> diff --git a/packages/client/components/auth/src/flows/FlowLogin.tsx b/packages/client/components/auth/src/flows/FlowLogin.tsx index 968553a8a..5073348a9 100644 --- a/packages/client/components/auth/src/flows/FlowLogin.tsx +++ b/packages/client/components/auth/src/flows/FlowLogin.tsx @@ -1,32 +1,28 @@ -import { Match, Show, Switch } from "solid-js"; - -import { styled } from "styled-system/jsx"; - -import { State, TransitionType } from "@revolt/client/Controller"; -import { useTranslation } from "@revolt/i18n"; -import { Navigate } from "@revolt/routing"; +import MdArrowBack from '@material-design-icons/svg/filled/arrow_back.svg?component-solid'; +import { State, TransitionType } from '@revolt/client/Controller'; +import { useTranslation } from '@revolt/i18n'; +import { Navigate } from '@revolt/routing'; import { Button, Column, + iconSize, Preloader, Row, Typography, - iconSize, -} from "@revolt/ui"; - -import MdArrowBack from "@material-design-icons/svg/filled/arrow_back.svg?component-solid"; - -import RevoltSvg from "../../../../public/assets/wordmark_wide_500px.svg?component-solid"; -import { clientController } from "../../../client"; +} from '@revolt/ui'; +import { Match, Show, Switch } from 'solid-js'; +import { styled } from 'styled-system/jsx'; -import { FlowTitle } from "./Flow"; -import { Fields, Form } from "./Form"; +// import RevoltSvg from "../../../../public/assets/wordmark_wide_500px.svg?component-solid"; +import { clientController } from '../../../client'; +import { FlowTitle } from './Flow'; +import { Fields, Form } from './Form'; -const Logo = styled(RevoltSvg, { +const Logo = styled('div', { base: { - height: "0.8em", - display: "inline", - fill: "var(--colours-messaging-message-box-foreground)", + height: '0.8em', + display: 'inline', + fill: 'var(--colours-messaging-message-box-foreground)', }, }); @@ -41,8 +37,8 @@ export default function FlowLogin() { * @param data Form Data */ async function login(data: FormData) { - const email = data.get("email") as string; - const password = data.get("password") as string; + const email = data.get('email') as string; + const password = data.get('password') as string; await clientController.login({ email, @@ -55,7 +51,7 @@ export default function FlowLogin() { * @param data Form Data */ async function select(data: FormData) { - const username = data.get("username") as string; + const username = data.get('username') as string; await clientController.selectUsername(username); } @@ -64,62 +60,62 @@ export default function FlowLogin() { <Switch fallback={ <> - <FlowTitle subtitle={t("login.subtitle")} emoji="wave"> - {t("login.welcome")} + <FlowTitle subtitle={t('login.subtitle')} emoji='wave'> + {t('login.welcome')} </FlowTitle> <Form onSubmit={login}> - <Fields fields={["email", "password"]} /> - <Row align justify="center"> - <a href=".."> - <Button variant="plain"> - <MdArrowBack {...iconSize("1.2em")} /> Back + <Fields fields={['email', 'password']} /> + <Row align justify='center'> + <a href='..'> + <Button variant='plain'> + <MdArrowBack {...iconSize('1.2em')} /> Back </Button> </a> - <Button type="submit">{t("login.title")}</Button> + <Button type='submit'>{t('login.title')}</Button> </Row> </Form> <Column> - <Typography variant="legacy-settings-description"> - <a href="/login/reset">{t("login.reset")}</a> + <Typography variant='legacy-settings-description'> + <a href='/login/reset'>{t('login.reset')}</a> </Typography> - <Typography variant="legacy-settings-description"> - <a href="/login/resend">{t("login.resend")}</a> + <Typography variant='legacy-settings-description'> + <a href='/login/resend'>{t('login.resend')}</a> </Typography> </Column> </> } > <Match when={clientController.isLoggedIn()}> - <Navigate href="/app" /> + <Navigate href='/app' /> </Match> <Match when={clientController.lifecycle.state() === State.LoggingIn}> - <Preloader type="ring" /> + <Preloader type='ring' /> </Match> <Match when={clientController.lifecycle.state() === State.Onboarding}> - <FlowTitle subtitle={t("app.special.modals.onboarding.pick")}> - <Row gap="sm"> - {t("app.special.modals.onboarding.welcome")} <Logo /> + <FlowTitle subtitle={t('app.special.modals.onboarding.pick')}> + <Row gap='sm'> + {t('app.special.modals.onboarding.welcome')} <Logo /> </Row> </FlowTitle> <Form onSubmit={select}> - <Fields fields={["username"]} /> - <Row align justify="center"> + <Fields fields={['username']} /> + <Row align justify='center'> <Button - variant="plain" + variant='plain' onClick={() => clientController.lifecycle.transition({ type: TransitionType.Cancel, }) } > - <MdArrowBack {...iconSize("1.2em")} /> Cancel + <MdArrowBack {...iconSize('1.2em')} /> Cancel </Button> - <Button type="submit"> - {t("app.special.modals.actions.confirm")} + <Button type='submit'> + {t('app.special.modals.actions.confirm')} </Button> </Row> </Form> diff --git a/packages/client/components/auth/src/flows/FlowResend.tsx b/packages/client/components/auth/src/flows/FlowResend.tsx index 7c7fd015e..c0411dbb1 100644 --- a/packages/client/components/auth/src/flows/FlowResend.tsx +++ b/packages/client/components/auth/src/flows/FlowResend.tsx @@ -1,12 +1,12 @@ -import { clientController } from "@revolt/client"; -import { CONFIGURATION } from "@revolt/common"; -import { useTranslation } from "@revolt/i18n"; -import { useNavigate } from "@revolt/routing"; -import { Button, Typography } from "@revolt/ui"; +import { clientController } from '@revolt/client'; +import { CONFIGURATION } from '@revolt/common'; +import { useTranslation } from '@revolt/i18n'; +import { useNavigate } from '@revolt/routing'; +import { Button, Typography } from '@revolt/ui'; -import { FlowTitle } from "./Flow"; -import { setFlowCheckEmail } from "./FlowCheck"; -import { Fields, Form } from "./Form"; +import { FlowTitle } from './Flow'; +import { setFlowCheckEmail } from './FlowCheck'; +import { Fields, Form } from './Form'; /** * Flow for resending email verification @@ -20,27 +20,27 @@ export default function FlowResend() { * @param data Form Data */ async function resend(data: FormData) { - const email = data.get("email") as string; - const captcha = data.get("captcha") as string; + const email = data.get('email') as string; + const captcha = data.get('captcha') as string; - await clientController.api.post("/auth/account/reverify", { + await clientController.api.post('/auth/account/reverify', { email, captcha, }); setFlowCheckEmail(email); - navigate("/login/check", { replace: true }); + navigate('/login/check', { replace: true }); } return ( <> - <FlowTitle>{t("login.resend")}</FlowTitle> + <FlowTitle>{t('login.resend')}</FlowTitle> <Form onSubmit={resend} captcha={CONFIGURATION.HCAPTCHA_SITEKEY}> - <Fields fields={["email"]} /> - <Button type="submit">{t("login.resend")}</Button> + <Fields fields={['email']} /> + <Button type='submit'>{t('login.resend')}</Button> </Form> - <Typography variant="legacy-settings-description"> - <a href="/login/auth">{t("login.remembered")}</a> + <Typography variant='legacy-settings-description'> + <a href='/login/auth'>{t('login.remembered')}</a> </Typography> </> ); diff --git a/packages/client/components/auth/src/flows/FlowReset.tsx b/packages/client/components/auth/src/flows/FlowReset.tsx index 8ddbc0b13..61f610635 100644 --- a/packages/client/components/auth/src/flows/FlowReset.tsx +++ b/packages/client/components/auth/src/flows/FlowReset.tsx @@ -1,12 +1,12 @@ -import { clientController } from "@revolt/client"; -import { CONFIGURATION } from "@revolt/common"; -import { useTranslation } from "@revolt/i18n"; -import { useNavigate } from "@revolt/routing"; -import { Button, Typography } from "@revolt/ui"; +import { clientController } from '@revolt/client'; +import { CONFIGURATION } from '@revolt/common'; +import { useTranslation } from '@revolt/i18n'; +import { useNavigate } from '@revolt/routing'; +import { Button, Typography } from '@revolt/ui'; -import { FlowTitle } from "./Flow"; -import { setFlowCheckEmail } from "./FlowCheck"; -import { Fields, Form } from "./Form"; +import { FlowTitle } from './Flow'; +import { setFlowCheckEmail } from './FlowCheck'; +import { Fields, Form } from './Form'; /** * Flow for sending password reset @@ -20,40 +20,40 @@ export default function FlowReset() { * @param data Form Data */ async function reset(data: FormData) { - const email = data.get("email") as string; - const captcha = data.get("captcha") as string; + const email = data.get('email') as string; + const captcha = data.get('captcha') as string; - await clientController.api.post("/auth/account/reset_password", { + await clientController.api.post('/auth/account/reset_password', { email, captcha, }); setFlowCheckEmail(email); - navigate("/login/check", { replace: true }); + navigate('/login/check', { replace: true }); } return ( <> - <FlowTitle>{t("login.reset")}</FlowTitle> + <FlowTitle>{t('login.reset')}</FlowTitle> <Form onSubmit={reset} captcha={CONFIGURATION.HCAPTCHA_SITEKEY}> - <Fields fields={["email"]} /> - <Button type="submit">{t("login.reset")}</Button> + <Fields fields={['email']} /> + <Button type='submit'>{t('login.reset')}</Button> </Form> - <Typography variant="legacy-settings-description"> - <a href="/login/auth">{t("login.remembered")}</a> + <Typography variant='legacy-settings-description'> + <a href='/login/auth'>{t('login.remembered')}</a> </Typography> {import.meta.env.DEV && ( <div style={{ - position: "fixed", + position: 'fixed', top: 0, left: 0, - background: "white", - color: "black", - cursor: "pointer", + background: 'white', + color: 'black', + cursor: 'pointer', }} onClick={() => { - navigate("/login/reset/abc", { replace: true }); + navigate('/login/reset/abc', { replace: true }); }} > Mock Reset Screen diff --git a/packages/client/components/auth/src/flows/FlowVerify.tsx b/packages/client/components/auth/src/flows/FlowVerify.tsx index a403d9f11..ea82dfbbe 100644 --- a/packages/client/components/auth/src/flows/FlowVerify.tsx +++ b/packages/client/components/auth/src/flows/FlowVerify.tsx @@ -1,22 +1,21 @@ -import { Match, Show, Switch, createSignal, onMount } from "solid-js"; +import { clientController, mapAnyError } from '@revolt/client'; +import { useTranslation } from '@revolt/i18n'; +import { useNavigate, useParams } from '@revolt/routing'; +import { Button, Preloader, Typography } from '@revolt/ui'; +import { createSignal, Match, onMount, Show, Switch } from 'solid-js'; -import { clientController, mapAnyError } from "@revolt/client"; -import { useTranslation } from "@revolt/i18n"; -import { useNavigate, useParams } from "@revolt/routing"; -import { Button, Preloader, Typography } from "@revolt/ui"; - -import { FlowTitle } from "./Flow"; +import { FlowTitle } from './Flow'; type State = | { - state: "verifying"; + state: 'verifying'; } | { - state: "error"; + state: 'error'; error: string; } | { - state: "success"; + state: 'success'; mfa_ticket?: string; }; @@ -29,17 +28,17 @@ export default function FlowVerify() { const navigate = useNavigate(); const [state, setState] = createSignal<State>({ - state: "verifying", + state: 'verifying', }); onMount(async () => { try { if (import.meta.env.DEV) { - if (confirm("Mock verification?")) { - if (confirm("Successful verification?")) { - setState({ state: "success", mfa_ticket: "token" }); + if (confirm('Mock verification?')) { + if (confirm('Successful verification?')) { + setState({ state: 'success', mfa_ticket: 'token' }); } else { - setState({ state: "error", error: "InvalidToken" }); + setState({ state: 'error', error: 'InvalidToken' }); } return; @@ -50,9 +49,9 @@ export default function FlowVerify() { `/auth/account/verify/${params.token}` )) as { ticket?: { token: string } }; - setState({ state: "success", mfa_ticket: data.ticket?.token }); + setState({ state: 'success', mfa_ticket: data.ticket?.token }); } catch (err) { - setState({ state: "error", error: mapAnyError(err) }); + setState({ state: 'error', error: mapAnyError(err) }); } }); @@ -61,41 +60,41 @@ export default function FlowVerify() { */ async function login() { const v = state(); - if (v.state === "success" && v.mfa_ticket) { + if (v.state === 'success' && v.mfa_ticket) { await clientController.login({ mfa_ticket: v.mfa_ticket, }); - navigate("/login/auth", { replace: true }); + navigate('/login/auth', { replace: true }); } } return ( <Switch> - <Match when={state().state === "verifying"}> - <FlowTitle>{t("login.verifying_account")}</FlowTitle> - <Preloader type="ring" /> + <Match when={state().state === 'verifying'}> + <FlowTitle>{t('login.verifying_account')}</FlowTitle> + <Preloader type='ring' /> </Match> - <Match when={state().state === "error"}> - <FlowTitle>{t("login.error.verify")}</FlowTitle> - <Typography variant="legacy-settings-description"> + <Match when={state().state === 'error'}> + <FlowTitle>{t('login.error.verify')}</FlowTitle> + <Typography variant='legacy-settings-description'> {t( - `error.${(state() as State & { state: "error" }).error}`, + `error.${(state() as State & { state: 'error' }).error}`, undefined, - (state() as State & { state: "error" }).error + (state() as State & { state: 'error' }).error )} </Typography> - <Typography variant="legacy-settings-description"> - <a href="/login/auth">{t("login.remembered")}</a> + <Typography variant='legacy-settings-description'> + <a href='/login/auth'>{t('login.remembered')}</a> </Typography> </Match> - <Match when={state().state === "success"}> - <FlowTitle>{t("login.verified_account")}</FlowTitle> - <Show when={"mfa_ticket" in state()}> - <Button onClick={login}>{t("login.verified_continue")}</Button> + <Match when={state().state === 'success'}> + <FlowTitle>{t('login.verified_account')}</FlowTitle> + <Show when={'mfa_ticket' in state()}> + <Button onClick={login}>{t('login.verified_continue')}</Button> </Show> - <Typography variant="legacy-settings-description"> - <a href="/login/auth">{t("login.remembered")}</a> + <Typography variant='legacy-settings-description'> + <a href='/login/auth'>{t('login.remembered')}</a> </Typography> </Match> </Switch> diff --git a/packages/client/components/auth/src/flows/Form.tsx b/packages/client/components/auth/src/flows/Form.tsx index b1e565882..7603c0dc0 100644 --- a/packages/client/components/auth/src/flows/Form.tsx +++ b/packages/client/components/auth/src/flows/Form.tsx @@ -1,16 +1,16 @@ -import HCaptcha, { HCaptchaFunctions } from "solid-hcaptcha"; -import { For, JSX, Show, createSignal } from "solid-js"; - -import { cva } from "styled-system/css"; - -import { mapAnyError } from "@revolt/client"; -import { useTranslation } from "@revolt/i18n"; -import { Checkbox, Column, FormGroup, Input, Typography } from "@revolt/ui"; +import { mapAnyError } from '@revolt/client'; +import { useTranslation } from '@revolt/i18n'; +import { Checkbox, Column, FormGroup, Input, Typography } from '@revolt/ui'; +import type { HCaptchaFunctions } from 'solid-hcaptcha'; +import HCaptcha from 'solid-hcaptcha'; +import type { JSX } from 'solid-js'; +import { createSignal, For, Show } from 'solid-js'; +import { cva } from 'styled-system/css'; /** * Available field types */ -type Field = "email" | "password" | "new-password" | "log-out" | "username"; +type Field = 'email' | 'password' | 'new-password' | 'log-out' | 'username'; /** * Properties to apply to fields @@ -20,41 +20,41 @@ const useFieldConfiguration = () => { return { email: { - type: "email", - name: () => t("login.email"), - placeholder: () => t("login.enter.email"), + type: 'email', + name: () => t('login.email'), + placeholder: () => t('login.enter.email'), }, password: { minLength: 8, - type: "password", - name: () => t("login.password"), - placeholder: () => t("login.enter.password"), + type: 'password', + name: () => t('login.password'), + placeholder: () => t('login.enter.password'), }, - "new-password": { + 'new-password': { minLength: 8, - type: "password", - autocomplete: "new-password", - name: () => t("login.new_password"), - placeholder: () => t("login.enter.new_password"), + type: 'password', + autocomplete: 'new-password', + name: () => t('login.new_password'), + placeholder: () => t('login.enter.new_password'), }, - "log-out": { - name: () => t("login.log_out_other"), + 'log-out': { + name: () => t('login.log_out_other'), }, username: { minLength: 2, - type: "text", - autocomplete: "none", - name: () => t("login.username"), - placeholder: () => t("login.enter.username"), + type: 'text', + autocomplete: 'none', + name: () => t('login.username'), + placeholder: () => t('login.enter.username'), }, }; }; const labelRow = cva({ base: { - gap: "var(--gap-sm)", - display: "flex", - alignItems: "center", + gap: 'var(--gap-sm)', + display: 'flex', + alignItems: 'center', }, }); @@ -83,16 +83,16 @@ export function Fields(props: FieldProps) { <For each={props.fields}> {(field) => ( <FormGroup> - {field === "log-out" ? ( + {field === 'log-out' ? ( <label class={labelRow()}> - <Checkbox name="log-out" /> - <Typography variant="label"> - {fieldConfiguration["log-out"].name()} + <Checkbox name='log-out' /> + <Typography variant='label'> + {fieldConfiguration['log-out'].name()} </Typography> </label> ) : ( <> - <Typography variant="label"> + <Typography variant='label'> {fieldConfiguration[field].name()} </Typography> <Input @@ -133,7 +133,7 @@ interface Props { */ export function Form(props: Props) { const t = useTranslation(); - const [error, setError] = createSignal(""); + const [error, setError] = createSignal(''); let hcaptcha: HCaptchaFunctions | undefined; /** @@ -146,9 +146,9 @@ export function Form(props: Props) { const formData = new FormData(event.currentTarget as HTMLFormElement); if (props.captcha) { - if (!hcaptcha) return alert("hCaptcha not loaded!"); + if (!hcaptcha) return alert('hCaptcha not loaded!'); const response = await hcaptcha.execute(); - formData.set("captcha", response!.response); + formData.set('captcha', response!.response); } try { @@ -163,7 +163,7 @@ export function Form(props: Props) { <Column> {props.children} <Show when={error()}> - <Typography variant="legacy-settings-description"> + <Typography variant='legacy-settings-description'> {t(`error.${error()}`, undefined, error())} </Typography> </Show> @@ -172,7 +172,7 @@ export function Form(props: Props) { <HCaptcha sitekey={props.captcha!} onLoad={(instance) => (hcaptcha = instance)} - size="invisible" + size='invisible' /> </Show> </form> diff --git a/packages/client/components/auth/src/flows/MailProvider.tsx b/packages/client/components/auth/src/flows/MailProvider.tsx index 8831ffa1c..099849d9a 100644 --- a/packages/client/components/auth/src/flows/MailProvider.tsx +++ b/packages/client/components/auth/src/flows/MailProvider.tsx @@ -1,7 +1,6 @@ -import { Show } from "solid-js"; - -import { useTranslation } from "@revolt/i18n"; -import { Button } from "@revolt/ui"; +import { useTranslation } from '@revolt/i18n'; +import { Button } from '@revolt/ui'; +import { Show } from 'solid-js'; interface Props { email?: string; @@ -20,91 +19,91 @@ function mapMailProvider(email?: string): [string, string] | undefined { const domain = match[1]; switch (domain) { - case "gmail.com": - case "googlemail.com": - return ["Gmail", "https://gmail.com"]; - case "tuta.io": - return ["Tutanota", "https://mail.tutanota.com"]; - case "outlook.com": - case "hotmail.com": - case "outlook.jp": - case "outlook.fr": - case "outlook.dk": - case "outlook.com.ar": - case "outlook.com.au": - case "outlook.at": - case "outlook.be": - case "outlook.com.br": - case "outlook.cl": - case "outlook.cz": - case "outlook.com.gr": - case "outlook.co.il": - case "outlook.in": - case "outlook.co.id": - case "outlook.ie": - case "outlook.it": - case "outlook.hu": - case "outlook.kr": - case "outlook.lv": - case "outlook.my": - case "outlook.co.nz": - case "outlook.com.pe": - case "outlook.ph": - case "outlook.pt": - case "outlook.sa": - case "outlook.sg": - case "outlook.sk": - case "outlook.es": - case "outlook.co.th": - case "outlook.com.tr": - case "outlook.com.vn": - return ["Outlook", "https://outlook.live.com"]; - case "yahoo.com": - return ["Yahoo", "https://mail.yahoo.com"]; - case "wp.pl": - return ["WP Poczta", "https://poczta.wp.pl"]; - case "protonmail.com": - case "protonmail.ch": - case "pm.me": - return ["ProtonMail", "https://mail.protonmail.com"]; - case "seznam.cz": - case "email.cz": - case "post.cz": - return ["Seznam", "https://email.seznam.cz"]; - case "zoho.com": - return ["Zoho Mail", "https://mail.zoho.com/zm/"]; - case "aol.com": - case "aim.com": - return ["AOL Mail", "https://mail.aol.com/"]; - case "icloud.com": - return ["iCloud Mail", "https://mail.icloud.com/"]; - case "mail.com": - case "email.com": - return ["mail.com", "https://www.mail.com/mail/"]; - case "yandex.ru": - case "yandex.by": - case "yandex.ua": - case "yandex.com": - return ["Yandex Mail", "https://mail.yandex.com/"]; - case "hey.com": - return ["HEY", "https://app.hey.com/"]; - case "mail.ru": - case "bk.ru": - case "inbox.ru": - case "list.ru": - case "internet.ru": - return ["Mail.ru", "https://mail.ru/"]; - case "rambler.ru": - case "lenta.ru": - case "autorambler.ru": - case "myrambler.ru": - case "ro.ru": - case "rambler.ua": - return ["Rambler", "https://rambler.ru/"]; - case "revolt.chat": - case "revolt.wtf": - case "insert.moe": - return ["Revolt Mail", "https://webmail.revolt.wtf"]; + case 'gmail.com': + case 'googlemail.com': + return ['Gmail', 'https://gmail.com']; + case 'tuta.io': + return ['Tutanota', 'https://mail.tutanota.com']; + case 'outlook.com': + case 'hotmail.com': + case 'outlook.jp': + case 'outlook.fr': + case 'outlook.dk': + case 'outlook.com.ar': + case 'outlook.com.au': + case 'outlook.at': + case 'outlook.be': + case 'outlook.com.br': + case 'outlook.cl': + case 'outlook.cz': + case 'outlook.com.gr': + case 'outlook.co.il': + case 'outlook.in': + case 'outlook.co.id': + case 'outlook.ie': + case 'outlook.it': + case 'outlook.hu': + case 'outlook.kr': + case 'outlook.lv': + case 'outlook.my': + case 'outlook.co.nz': + case 'outlook.com.pe': + case 'outlook.ph': + case 'outlook.pt': + case 'outlook.sa': + case 'outlook.sg': + case 'outlook.sk': + case 'outlook.es': + case 'outlook.co.th': + case 'outlook.com.tr': + case 'outlook.com.vn': + return ['Outlook', 'https://outlook.live.com']; + case 'yahoo.com': + return ['Yahoo', 'https://mail.yahoo.com']; + case 'wp.pl': + return ['WP Poczta', 'https://poczta.wp.pl']; + case 'protonmail.com': + case 'protonmail.ch': + case 'pm.me': + return ['ProtonMail', 'https://mail.protonmail.com']; + case 'seznam.cz': + case 'email.cz': + case 'post.cz': + return ['Seznam', 'https://email.seznam.cz']; + case 'zoho.com': + return ['Zoho Mail', 'https://mail.zoho.com/zm/']; + case 'aol.com': + case 'aim.com': + return ['AOL Mail', 'https://mail.aol.com/']; + case 'icloud.com': + return ['iCloud Mail', 'https://mail.icloud.com/']; + case 'mail.com': + case 'email.com': + return ['mail.com', 'https://www.mail.com/mail/']; + case 'yandex.ru': + case 'yandex.by': + case 'yandex.ua': + case 'yandex.com': + return ['Yandex Mail', 'https://mail.yandex.com/']; + case 'hey.com': + return ['HEY', 'https://app.hey.com/']; + case 'mail.ru': + case 'bk.ru': + case 'inbox.ru': + case 'list.ru': + case 'internet.ru': + return ['Mail.ru', 'https://mail.ru/']; + case 'rambler.ru': + case 'lenta.ru': + case 'autorambler.ru': + case 'myrambler.ru': + case 'ro.ru': + case 'rambler.ua': + return ['Rambler', 'https://rambler.ru/']; + case 'revolt.chat': + case 'revolt.wtf': + case 'insert.moe': + return ['Revolt Mail', 'https://webmail.revolt.wtf']; default: return [domain, `https://${domain}`]; } @@ -124,9 +123,9 @@ export function MailProvider(props: Props) { return ( <Show when={provider()}> - <a href={provider()![1]} target="_blank" rel="noreferrer"> + <a href={provider()![1]} target='_blank' rel='noreferrer'> <Button> - {t("login.open_mail_provider", { provider: provider()![0] })} + {t('login.open_mail_provider', { provider: provider()![0] })} </Button> </a> </Show> diff --git a/packages/client/components/client/Controller.ts b/packages/client/components/client/Controller.ts index fd7411aa6..38e35d46a 100644 --- a/packages/client/components/client/Controller.ts +++ b/packages/client/components/client/Controller.ts @@ -1,15 +1,14 @@ -import { Accessor, Setter, createSignal } from "solid-js"; - -import { detect } from "detect-browser"; -import { API, Client, ConnectionState } from "revolt.js"; - import { CONFIGURATION, getController, registerController, -} from "@revolt/common"; -import { state } from "@revolt/state"; -import type { Session } from "@revolt/state/stores/Auth"; +} from '@revolt/common'; +import { state } from '@revolt/state'; +import type { Session } from '@revolt/state/stores/Auth'; +import { detect } from 'detect-browser'; +import { API, Client, ConnectionState } from 'revolt.js'; +import type { Accessor, Setter } from 'solid-js'; +import { createSignal } from 'solid-js'; export enum State { Ready, @@ -134,12 +133,12 @@ class Lifecycle { ws: CONFIGURATION.DEFAULT_WS_URL, }; - this.client.events.on("state", this.onState); - this.client.on("ready", this.onReady); + this.client.events.on('state', this.onState); + this.client.on('ready', this.onReady); } #enter(nextState: State) { - console.debug("Entering state", nextState); + console.debug('Entering state', nextState); this.#setStateSetter(nextState); // Clean up retry timer @@ -150,7 +149,7 @@ class Lifecycle { switch (nextState) { case State.LoggingIn: - this.client.api.get("/onboard/hello").then(({ onboarding }) => { + this.client.api.get('/onboard/hello').then(({ onboarding }) => { if (onboarding) { this.transition({ type: TransitionType.NoUser, @@ -190,9 +189,9 @@ class Lifecycle { (0.8 + Math.random() * 0.4); console.info( - "Will try to reconnect in", + 'Will try to reconnect in', retryIn.toFixed(2), - "seconds!" + 'seconds!' ); this.#retryTimeout = setTimeout(() => { @@ -207,7 +206,7 @@ class Lifecycle { } transition(transition: Transition) { - console.debug("Received transition", transition.type); + console.debug('Received transition', transition.type); const currentState = this.state(); switch (currentState) { @@ -329,9 +328,9 @@ class Lifecycle { if (currentState === this.state()) { console.error( - "An unhandled transition occurred!", + 'An unhandled transition occurred!', transition, - "was received on", + 'was received on', currentState ); } @@ -385,7 +384,7 @@ export default class ClientController { this.lifecycle = new Lifecycle(); - registerController("client", this); + registerController('client', this); } getCurrentClient() { @@ -413,64 +412,64 @@ export default class ClientController { let friendly_name; if (browser) { let { name, os } = browser as { name: string; os: string }; - if (name === "ios") { - name = "safari"; - } else if (name === "fxios") { - name = "firefox"; - } else if (name === "crios") { - name = "chrome"; - } else if (os === "Mac OS" && navigator.maxTouchPoints > 0) { - os = "iPadOS"; + if (name === 'ios') { + name = 'safari'; + } else if (name === 'fxios') { + name = 'firefox'; + } else if (name === 'crios') { + name = 'chrome'; + } else if (os === 'Mac OS' && navigator.maxTouchPoints > 0) { + os = 'iPadOS'; } friendly_name = `Revolt Web (${name} on ${os})`; } else { - friendly_name = "Revolt Web (Unknown Device)"; + friendly_name = 'Revolt Web (Unknown Device)'; } // Try to login with given credentials - let session = await this.api.post("/auth/session/login", { + let session = await this.api.post('/auth/session/login', { ...credentials, friendly_name, }); // Prompt for MFA verification if necessary - if (session.result === "MFA") { + if (session.result === 'MFA') { const { allowed_methods } = session; - while (session.result === "MFA") { + while (session.result === 'MFA') { const mfa_response: API.MFAResponse | undefined = await new Promise( (callback) => - getController("modal").push({ - type: "mfa_flow", - state: "unknown", + getController('modal').push({ + type: 'mfa_flow', + state: 'unknown', available_methods: allowed_methods, callback, }) ); - if (typeof mfa_response === "undefined") { + if (typeof mfa_response === 'undefined') { break; } try { - session = await this.api.post("/auth/session/login", { + session = await this.api.post('/auth/session/login', { mfa_response, mfa_ticket: session.ticket, friendly_name, }); } catch (err) { - console.error("Failed login:", err); + console.error('Failed login:', err); } } - if (session.result === "MFA") { - throw "Cancelled"; + if (session.result === 'MFA') { + throw 'Cancelled'; } } - if (session.result === "Disabled") { + if (session.result === 'Disabled') { // TODO - alert("Account is disabled, run special logic here."); + alert('Account is disabled, run special logic here.'); return; } @@ -489,7 +488,7 @@ export default class ClientController { } async selectUsername(username: string) { - await this.lifecycle.client.api.post("/onboard/complete", { + await this.lifecycle.client.api.post('/onboard/complete', { username, }); diff --git a/packages/client/components/client/error.ts b/packages/client/components/client/error.ts index 580f5de7c..a5e705468 100644 --- a/packages/client/components/client/error.ts +++ b/packages/client/components/client/error.ts @@ -3,7 +3,7 @@ * @param error Error object */ export function mapAnyError(error: any) { - console.error("Encountered an error:", error); + console.error('Encountered an error:', error); // Check if Axios error if (error.response) { @@ -16,19 +16,19 @@ export function mapAnyError(error: any) { // Otherwise infer from status switch (error.response.status) { case 429: - return "TooManyRequests"; + return 'TooManyRequests'; case 401: case 403: - return "Unauthorized"; + return 'Unauthorized'; default: - return "UnknownError"; + return 'UnknownError'; } // Check if network issue } else if (error.request) { - return "NetworkError"; + return 'NetworkError'; } - return typeof error === "string" ? error : "UnknownError"; + return typeof error === 'string' ? error : 'UnknownError'; } /** diff --git a/packages/client/components/client/index.tsx b/packages/client/components/client/index.tsx index 0af4f7b15..ce6757c24 100644 --- a/packages/client/components/client/index.tsx +++ b/packages/client/components/client/index.tsx @@ -1,12 +1,10 @@ -import { Accessor } from "solid-js"; +import type { Client, User } from 'revolt.js'; +import type { Accessor } from 'solid-js'; -import type { Client, User } from "revolt.js"; +import ClientController from './Controller'; -import ClientController from "./Controller"; - -export type { default as ClientController } from "./Controller"; - -export { mapAnyError, mapAndRethrowError } from "./error"; +export type { default as ClientController } from './Controller'; +export { mapAndRethrowError, mapAnyError } from './error'; /** * Global client controller @@ -38,8 +36,8 @@ export function useApi() { } export const IS_REVOLT = - import.meta.env.VITE_API_URL === "https://api.revolt.chat" || - import.meta.env.VITE_API_URL === "https://revolt.chat/api" || - typeof import.meta.env.VITE_API_URL !== "string"; + import.meta.env.VITE_API_URL === 'https://api.revolt.chat' || + import.meta.env.VITE_API_URL === 'https://revolt.chat/api' || + typeof import.meta.env.VITE_API_URL !== 'string'; export const IS_DEV = import.meta.env.DEV; diff --git a/packages/client/components/client/resources.ts b/packages/client/components/client/resources.ts index 10b0b0570..d65a6e5b2 100644 --- a/packages/client/components/client/resources.ts +++ b/packages/client/components/client/resources.ts @@ -1,7 +1,7 @@ -import { createQuery } from "@tanstack/solid-query"; -import { User } from "revolt.js"; +import { createQuery } from '@tanstack/solid-query'; +import type { User } from 'revolt.js'; -import { useClient } from "."; +import { useClient } from '.'; /** * Create a new resource for current account's MFA configuration @@ -11,7 +11,7 @@ export function createMfaResource() { const client = useClient(); return createQuery(() => ({ - queryKey: ["mfa", client().user!.id], + queryKey: ['mfa', client().user!.id], queryFn: () => client().account.mfa(), throwOnError: true, })); @@ -24,7 +24,7 @@ export function createMfaResource() { */ export function createProfileResource(user: User) { return createQuery(() => ({ - queryKey: ["profile", user.id], + queryKey: ['profile', user.id], queryFn: () => user!.fetchProfile(), throwOnError: true, })); @@ -46,7 +46,7 @@ export function createOwnProfileResource() { export function createOwnBotsResource() { const client = useClient(); return createQuery(() => ({ - queryKey: ["bots", client().user!.id], + queryKey: ['bots', client().user!.id], queryFn: () => client().bots.fetchOwned(), throwOnError: true, })); diff --git a/packages/client/components/common/index.tsx b/packages/client/components/common/index.tsx index 3bac97318..cd134cd58 100644 --- a/packages/client/components/common/index.tsx +++ b/packages/client/components/common/index.tsx @@ -1,4 +1,4 @@ -export { insecureUniqueId } from "./lib/unique"; -export { registerController, getController } from "./lib/controllers"; -export { default as CONFIGURATION } from "./lib/env"; -export { debounce } from "./lib/debounce"; +export { getController, registerController } from './lib/controllers'; +export { debounce } from './lib/debounce'; +export { default as CONFIGURATION } from './lib/env'; +export { insecureUniqueId } from './lib/unique'; diff --git a/packages/client/components/common/lib/controllers.ts b/packages/client/components/common/lib/controllers.ts index 2e57dcda4..9370d7785 100644 --- a/packages/client/components/common/lib/controllers.ts +++ b/packages/client/components/common/lib/controllers.ts @@ -1,6 +1,6 @@ -import type { ClientController } from "@revolt/client"; -import type { ModalControllerExtended } from "@revolt/modal"; -import type { State } from "@revolt/state"; +import type { ClientController } from '@revolt/client'; +import type { ModalControllerExtended } from '@revolt/modal'; +import type { State } from '@revolt/state'; /** * Single source of truth for global state controllers diff --git a/packages/client/components/common/lib/env.ts b/packages/client/components/common/lib/env.ts index 4cec8f93b..691a37060 100644 --- a/packages/client/components/common/lib/env.ts +++ b/packages/client/components/common/lib/env.ts @@ -5,28 +5,28 @@ export default { DEFAULT_API_URL: (import.meta.env.DEV ? import.meta.env.VITE_DEV_API_URL : undefined) ?? (import.meta.env.VITE_API_URL as string) ?? - "https://revolt.chat/api", + 'https://revolt.chat/api', /** * What WS server to connect to by default. */ DEFAULT_WS_URL: (import.meta.env.DEV ? import.meta.env.VITE_DEV_WS_URL : undefined) ?? (import.meta.env.VITE_WS_URL as string) ?? - "wss://revolt.chat/events", + 'wss://revolt.chat/events', /** * What media server to connect to by default. */ DEFAULT_MEDIA_URL: (import.meta.env.DEV ? import.meta.env.VITE_DEV_WS_URL : undefined) ?? (import.meta.env.VITE_WS_URL as string) ?? - "https://autumn.revolt.chat", + 'https://autumn.revolt.chat', /** * What proxy server to connect to by default. */ DEFAULT_PROXY_URL: (import.meta.env.DEV ? import.meta.env.VITE_DEV_WS_URL : undefined) ?? (import.meta.env.VITE_WS_URL as string) ?? - "https://jan.revolt.chat", + 'https://jan.revolt.chat', /** * hCaptcha site key to use if enabled */ diff --git a/packages/client/components/i18n/__tests__/translationComponent.test.tsx b/packages/client/components/i18n/__tests__/translationComponent.test.tsx index f7b05971b..4949ee43e 100644 --- a/packages/client/components/i18n/__tests__/translationComponent.test.tsx +++ b/packages/client/components/i18n/__tests__/translationComponent.test.tsx @@ -1,23 +1,23 @@ -import { render, screen } from "@solidjs/testing-library"; -import { describe, expect, it } from "vitest"; +import { render, screen } from '@solidjs/testing-library'; +import { describe, expect, it } from 'vitest'; -import { I18nContext, default as i18n, useTranslation } from ".."; +import { default as i18n, I18nContext, useTranslation } from '..'; const TranslatedText = () => { const t = useTranslation(); - return <div>{t("login.welcome")}</div>; + return <div>{t('login.welcome')}</div>; }; -describe("Translation component", () => { - it("should translate the text", () => { +describe('Translation component', () => { + it('should translate the text', () => { render(() => ( <I18nContext.Provider value={i18n}> <TranslatedText /> </I18nContext.Provider> )); - const textElm = screen.getByText("Welcome!"); + const textElm = screen.getByText('Welcome!'); expect(textElm).toBeInTheDocument(); }); }); diff --git a/packages/client/components/i18n/dayjs.ts b/packages/client/components/i18n/dayjs.ts index 123357c6a..2d4823f7f 100644 --- a/packages/client/components/i18n/dayjs.ts +++ b/packages/client/components/i18n/dayjs.ts @@ -1,8 +1,8 @@ -import dayJS from "dayjs"; -import advancedFormat from "dayjs/plugin/advancedFormat"; -import calendar from "dayjs/plugin/calendar"; -import localizedFormat from "dayjs/plugin/localizedFormat"; -import relativeTime from "dayjs/plugin/relativeTime"; +import dayJS from 'dayjs'; +import advancedFormat from 'dayjs/plugin/advancedFormat'; +import calendar from 'dayjs/plugin/calendar'; +import localizedFormat from 'dayjs/plugin/localizedFormat'; +import relativeTime from 'dayjs/plugin/relativeTime'; /** * Export our dayjs function diff --git a/packages/client/components/i18n/index.tsx b/packages/client/components/i18n/index.tsx index 787ece4e3..734eb292a 100644 --- a/packages/client/components/i18n/index.tsx +++ b/packages/client/components/i18n/index.tsx @@ -1,49 +1,59 @@ -import { createSignal } from "solid-js"; +import * as i18n from '@solid-primitives/i18n'; +import { + createContext, + createSignal, + useContext, + useTransition, +} from 'solid-js'; -import { createI18nContext, useI18n } from "@solid-primitives/i18n"; -import defaultsDeep from "lodash.defaultsdeep"; +import en from './locales/en.json'; +import { Language, Languages } from './locales/Languages'; -import { Language, Languages } from "./locales/Languages"; -import en from "./locales/en.json"; - -export { Language, Languages } from "./locales/Languages"; -export { I18nContext, useI18n } from "@solid-primitives/i18n"; -export * from "./dayjs"; +export * from './dayjs'; +export { Language, Languages } from './locales/Languages'; /** * Default dictionary object */ -const dict = { +export const dict = { en, }; +export type RawDictionary = typeof dict.en; +export type Dictionary = i18n.Flatten<RawDictionary>; + /** * Currently set language */ -const [language, setLanguage] = createSignal<Language>("en" as Language); +const [language, _setLanguage] = createSignal<Language>('en' as Language); export { language }; -/** - * i18n Context - */ -const context = createI18nContext(dict, "en"); -export default context; - /** * Use translation function as a hook */ -export const useTranslation = () => useI18n()[0]; + +export const I18nContext = createContext( + i18n.translator(() => i18n.flatten(dict.en), i18n.resolveTemplate) +); + +export const useTranslation = () => useContext(I18nContext); + +const [duringI18nTransition, startI18nTransition] = useTransition(); + +export { duringI18nTransition }; + +export async function fetchLanguage(key: Language): Promise<Dictionary> { + const data = (await import( + `./locales/${Languages[key].i18n}.json` + )) as typeof dict.en; + return i18n.flatten(data); +} /** - * Load and set a language by the given key + * set a language by the given key */ -export async function loadAndSetLanguage(key: Language) { - if (language() === key) return; - setLanguage(key); - - const data = await import(`./locales/${Languages[key].i18n}.json`); - context[1].add(key, defaultsDeep({}, data, en)); - context[1].locale(key); +export function setLanguage(key: Language) { + startI18nTransition(() => _setLanguage(key)); } /** @@ -59,10 +69,10 @@ export function browserPreferredLanguage() { // matches first, otherwise check for partial matches return ( navigator.languages - .map((lang) => languages.find((l) => l[0].replace(/_/g, "-") == lang)) + .map((lang) => languages.find((l) => l[0].replace(/_/g, '-') == lang)) .filter((lang) => lang)[0]?.[0] ?? navigator.languages - .map((x) => x.split("-")[0]) + .map((x) => x.split('-')[0]) .map((lang) => languages.find((l) => l[0] == lang)) .filter((lang) => lang)[0]?.[0] ?? Language.ENGLISH @@ -74,8 +84,8 @@ export function browserPreferredLanguage() { */ export const useQuantity = () => { const t = useTranslation(); - return (id: string, count: number) => - t(`quantities.${id}.${count > 1 ? "many" : "one"}`, { + return (id: 'members' | 'dropFiles', count: number) => + t(`quantities.${id}.${count > 1 ? 'many' : 'one'}`, { count: count.toString(), }); }; diff --git a/packages/client/components/keybinds/actions.ts b/packages/client/components/keybinds/actions.ts index 7212331d3..8fbddf706 100644 --- a/packages/client/components/keybinds/actions.ts +++ b/packages/client/components/keybinds/actions.ts @@ -1,30 +1,30 @@ -import { KeyComboSequence } from "."; +import type { KeyComboSequence } from '.'; export enum KeybindAction { // Navigation - NavigateChannelUp = "navigate_channel_up", - NavigateChannelDown = "navigate_channel_down", - NavigateServerUp = "navigate_server_up", - NavigateServerDown = "navigate_server_down", + NavigateChannelUp = 'navigate_channel_up', + NavigateChannelDown = 'navigate_channel_down', + NavigateServerUp = 'navigate_server_up', + NavigateServerDown = 'navigate_server_down', - AutoCompleteUp = "auto_complete_up", - AutoCompleteDown = "auto_complete_down", - AutoCompleteSelect = "auto_complete_select", + AutoCompleteUp = 'auto_complete_up', + AutoCompleteDown = 'auto_complete_down', + AutoCompleteSelect = 'auto_complete_select', - NavigatePreviousContext = "navigate_previous_context", - NavigatePreviousContextModal = "navigate_previous_context_modal", - NavigatePreviousContextSettings = "navigate_previous_context_settings", + NavigatePreviousContext = 'navigate_previous_context', + NavigatePreviousContextModal = 'navigate_previous_context_modal', + NavigatePreviousContextSettings = 'navigate_previous_context_settings', - InputSubmit = "input_submit", - InputCancel = "input_cancel", - InputForceSubmit = "input_force_submit", + InputSubmit = 'input_submit', + InputCancel = 'input_cancel', + InputForceSubmit = 'input_force_submit', - MessagingMarkChannelRead = "messaging_mark_channel_read", - MessagingScrollToBottom = "messaging_scroll_to_bottom", - MessagingEditPreviousMessage = "messaging_edit_previous_message", + MessagingMarkChannelRead = 'messaging_mark_channel_read', + MessagingScrollToBottom = 'messaging_scroll_to_bottom', + MessagingEditPreviousMessage = 'messaging_edit_previous_message', // Developer - DeveloperToggleAllExperiments = "developer_toggle_all_experiments", + DeveloperToggleAllExperiments = 'developer_toggle_all_experiments', } export type KeybindActions = Record<KeybindAction, KeyComboSequence[]>; diff --git a/packages/client/components/keybinds/index.ts b/packages/client/components/keybinds/index.ts index 661dbbaff..a0e1285bf 100644 --- a/packages/client/components/keybinds/index.ts +++ b/packages/client/components/keybinds/index.ts @@ -1,7 +1,7 @@ -import { debounce } from "@revolt/common"; +import { debounce } from '@revolt/common'; // note: order dependent! -export const KEYBINDING_MODIFIER_KEYS = ["Control", "Alt", "Meta", "Shift"]; +export const KEYBINDING_MODIFIER_KEYS = ['Control', 'Alt', 'Meta', 'Shift']; /** * Keys that must be pressed at the same time, order should not matter. @@ -17,7 +17,7 @@ export const KeyCombo = { ); if (!KEYBINDING_MODIFIER_KEYS.includes(event.key)) { - pressed.push(event.key.replace(" ", "Space")); + pressed.push(event.key.replace(' ', 'Space')); } return pressed; @@ -44,12 +44,12 @@ export const KeybindSequence = { * ``` */ parse(sequence: string): KeyComboSequence { - return sequence.split(" ").map((expr) => expr.split("+")); + return sequence.split(' ').map((expr) => expr.split('+')); }, /** Stringify a keybind sequence */ stringify(sequence: KeyComboSequence) { - return sequence.map((combo) => combo.join("+")).join(" "); + return sequence.map((combo) => combo.join('+')).join(' '); }, /** Checks to see if two key sequences match */ @@ -63,13 +63,16 @@ export const KeybindSequence = { // having the type be 'keybind' would be more idiomatic but this works better as an api export class KeybindEvent<T extends string> extends KeyboardEvent { - constructor(public action: T, eventInitDict?: KeyboardEventInit | undefined) { + constructor( + public action: T, + eventInitDict?: KeyboardEventInit | undefined + ) { super(action, eventInitDict); } } export class KeybindEventHandler< - KeybindAction extends string + KeybindAction extends string, > extends EventTarget { possibleSequences = new Map<KeyComboSequence, KeyCombo[]>(); @@ -106,7 +109,7 @@ export class KeybindEventHandler< this.possibleSequences.set(sequence, expectedSequence.slice(1)); } else { this.possibleSequences.delete(sequence); - console.info("dispatch", action, event); + console.info('dispatch', action, event); this.dispatchEvent( new KeybindEvent(action as KeybindAction, event) ); @@ -145,4 +148,4 @@ export class KeybindEventHandler< ) => void; } -export * from "./actions"; +export * from './actions'; diff --git a/packages/client/components/markdown/elements.ts b/packages/client/components/markdown/elements.ts index b0c09f3dd..d717de70f 100644 --- a/packages/client/components/markdown/elements.ts +++ b/packages/client/components/markdown/elements.ts @@ -1,147 +1,147 @@ -import { cva } from "styled-system/css"; -import { styled } from "styled-system/jsx"; -import type { SystemStyleObject } from "styled-system/types"; +import { cva } from 'styled-system/css'; +import { styled } from 'styled-system/jsx'; +import type { SystemStyleObject } from 'styled-system/types'; const inlineCodeStyles: SystemStyleObject = { flexShrink: 0, - padding: "1px 4px", - borderRadius: "var(--borderRadius-md)", + padding: '1px 4px', + borderRadius: 'var(--borderRadius-md)', - color: "var(--colours-messaging-component-code-block-foreground)", - background: "var(--colours-messaging-component-code-block-background)", + color: 'var(--colours-messaging-component-code-block-foreground)', + background: 'var(--colours-messaging-component-code-block-background)', }; -export const paragraph = styled("p", { +export const paragraph = styled('p', { base: { - "&>code": inlineCodeStyles, + '&>code': inlineCodeStyles, }, variants: { emojiSize: { small: { - "--emoji-size": "var(--layout-emoji-small)", + '--emoji-size': 'var(--layout-emoji-small)', }, medium: { - "--emoji-size": "var(--layout-emoji-medium)", + '--emoji-size': 'var(--layout-emoji-medium)', }, large: { - "--emoji-size": "var(--layout-emoji-large)", + '--emoji-size': 'var(--layout-emoji-large)', }, }, }, }); -export const emphasis = styled("em", { +export const emphasis = styled('em', { base: { - fontStyle: "italic", + fontStyle: 'italic', }, }); -export const heading1 = styled("h1", { +export const heading1 = styled('h1', { base: { - fontSize: "2em", + fontSize: '2em', fontWeight: 600, }, }); -export const heading2 = styled("h2", { +export const heading2 = styled('h2', { base: { - fontSize: "1.6em", + fontSize: '1.6em', fontWeight: 600, }, }); -export const heading3 = styled("h3", { +export const heading3 = styled('h3', { base: { - fontSize: "1.4em", + fontSize: '1.4em', fontWeight: 600, }, }); -export const heading4 = styled("h4", { +export const heading4 = styled('h4', { base: { - fontSize: "1.2em", + fontSize: '1.2em', fontWeight: 600, }, }); -export const heading5 = styled("h5", { +export const heading5 = styled('h5', { base: { - fontSize: "1em", + fontSize: '1em', fontWeight: 600, }, }); -export const heading6 = styled("h6", { +export const heading6 = styled('h6', { base: { - fontSize: "0.8em", + fontSize: '0.8em', fontWeight: 600, }, }); -export const listItem = styled("li", { +export const listItem = styled('li', { base: {}, }); -export const unorderedList = styled("ul", { +export const unorderedList = styled('ul', { base: { - listStylePosition: "outside", - paddingLeft: "1.5em", + listStylePosition: 'outside', + paddingLeft: '1.5em', - "& li": { - listStyleType: "disc", + '& li': { + listStyleType: 'disc', }, - "& li li": { - listStyleType: "circle", + '& li li': { + listStyleType: 'circle', }, }, }); -export const orderedList = styled("ol", { +export const orderedList = styled('ol', { base: { - listStylePosition: "outside", - paddingLeft: "1.5em", + listStylePosition: 'outside', + paddingLeft: '1.5em', - listStyleType: "decimal", + listStyleType: 'decimal', }, }); -export const blockquote = styled("blockquote", { +export const blockquote = styled('blockquote', { base: { - margin: "var(--gap-sm) 0", - padding: "var(--gap-sm) var(--gap-md)", - borderRadius: "var(--borderRadius-md)", - color: "var(--colours-messaging-component-blockquote-foreground)", - background: "var(--colours-messaging-component-blockquote-background)", + margin: 'var(--gap-sm) 0', + padding: 'var(--gap-sm) var(--gap-md)', + borderRadius: 'var(--borderRadius-md)', + color: 'var(--colours-messaging-component-blockquote-foreground)', + background: 'var(--colours-messaging-component-blockquote-background)', borderInlineStart: - "var(--gap-sm) solid var(--colours-messaging-component-blockquote-foreground)", + 'var(--gap-sm) solid var(--colours-messaging-component-blockquote-foreground)', }, }); -export const table = styled("table", { +export const table = styled('table', { base: { - borderCollapse: "collapse", + borderCollapse: 'collapse', }, }); -export const tableHeader = styled("th", { +export const tableHeader = styled('th', { base: { fontWeight: 600, - padding: "var(--gap-sm)", - border: "1px solid var(--colours-foreground)", + padding: 'var(--gap-sm)', + border: '1px solid var(--colours-foreground)', }, }); -export const tableElement = styled("td", { +export const tableElement = styled('td', { base: { - padding: "var(--gap-sm)", - border: "1px solid var(--colours-foreground)", + padding: 'var(--gap-sm)', + border: '1px solid var(--colours-foreground)', }, }); -export const code = styled("code", { +export const code = styled('code', { base: { - fontFamily: "var(--fonts-monospace)", + fontFamily: 'var(--fonts-monospace)', }, }); diff --git a/packages/client/components/markdown/emoji/CustomEmoji.tsx b/packages/client/components/markdown/emoji/CustomEmoji.tsx index 5c96a33a2..ec54446ee 100644 --- a/packages/client/components/markdown/emoji/CustomEmoji.tsx +++ b/packages/client/components/markdown/emoji/CustomEmoji.tsx @@ -1,8 +1,8 @@ -import { ComponentProps, splitProps } from "solid-js"; +import { useClient } from '@revolt/client'; +import type { ComponentProps } from 'solid-js'; +import { splitProps } from 'solid-js'; -import { useClient } from "@revolt/client"; - -import { EmojiBase } from "."; +import { EmojiBase } from '.'; /** * Display custom emoji @@ -10,10 +10,10 @@ import { EmojiBase } from "."; export function CustomEmoji( props: { id: string } & Omit< ComponentProps<typeof EmojiBase>, - "loading" | "class" | "draggable" | "src" + 'loading' | 'class' | 'draggable' | 'src' > ) { - const [local, remote] = splitProps(props, ["id"]); + const [local, remote] = splitProps(props, ['id']); const client = useClient(); /** @@ -25,8 +25,8 @@ export function CustomEmoji( return ( <EmojiBase {...remote} - loading="lazy" - class="emoji" + loading='lazy' + class='emoji' draggable={false} src={url()} alt={`:${local.id}:`} diff --git a/packages/client/components/markdown/emoji/Emoji.tsx b/packages/client/components/markdown/emoji/Emoji.tsx index 8ae8687a2..e8369ddf5 100644 --- a/packages/client/components/markdown/emoji/Emoji.tsx +++ b/packages/client/components/markdown/emoji/Emoji.tsx @@ -1,12 +1,12 @@ -import { Match, Switch } from "solid-js"; -import { styled } from "solid-styled-components"; +import { Match, Switch } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { CustomEmoji, UnicodeEmoji } from "."; +import { CustomEmoji, UnicodeEmoji } from '.'; /** * Image component for rendering emojis */ -export const EmojiBase = styled("img", "Emoji")` +export const EmojiBase = styled('img', 'Emoji')` object-fit: contain; display: inline; @@ -16,7 +16,7 @@ export const EmojiBase = styled("img", "Emoji")` vertical-align: -0.3em; img:before { - content: " "; + content: ' '; display: block; position: absolute; height: 50px; diff --git a/packages/client/components/markdown/emoji/TextWithEmoji.tsx b/packages/client/components/markdown/emoji/TextWithEmoji.tsx index a7c93c210..eaf0f9305 100644 --- a/packages/client/components/markdown/emoji/TextWithEmoji.tsx +++ b/packages/client/components/markdown/emoji/TextWithEmoji.tsx @@ -1,6 +1,6 @@ -import { JSX } from "solid-js"; +import type { JSX } from 'solid-js'; -import { CustomEmoji, RE_ANY_EMOJI, UnicodeEmoji } from "."; +import { CustomEmoji, RE_ANY_EMOJI, UnicodeEmoji } from '.'; /** * Convert any arbitrary text to rich text with emoji diff --git a/packages/client/components/markdown/emoji/UnicodeEmoji.tsx b/packages/client/components/markdown/emoji/UnicodeEmoji.tsx index 3728278c6..c22bf7367 100644 --- a/packages/client/components/markdown/emoji/UnicodeEmoji.tsx +++ b/packages/client/components/markdown/emoji/UnicodeEmoji.tsx @@ -1,6 +1,7 @@ -import { ComponentProps, splitProps } from "solid-js"; +import type { ComponentProps } from 'solid-js'; +import { splitProps } from 'solid-js'; -import { EmojiBase, toCodepoint } from "."; +import { EmojiBase, toCodepoint } from '.'; /** * Display Unicode emoji @@ -8,16 +9,16 @@ import { EmojiBase, toCodepoint } from "."; export function UnicodeEmoji( props: { emoji: string } & Omit< ComponentProps<typeof EmojiBase>, - "loading" | "class" | "alt" | "draggable" | "src" + 'loading' | 'class' | 'alt' | 'draggable' | 'src' > ) { - const [local, remote] = splitProps(props, ["emoji"]); + const [local, remote] = splitProps(props, ['emoji']); return ( <EmojiBase {...remote} - loading="lazy" - class="emoji" + loading='lazy' + class='emoji' alt={local.emoji} draggable={false} src={`https://static.revolt.chat/emoji/fluent-3d/${toCodepoint( diff --git a/packages/client/components/markdown/emoji/index.ts b/packages/client/components/markdown/emoji/index.ts index b70cebe74..092fe9828 100644 --- a/packages/client/components/markdown/emoji/index.ts +++ b/packages/client/components/markdown/emoji/index.ts @@ -1,4 +1,4 @@ -export { CustomEmoji } from "./CustomEmoji"; -export { UnicodeEmoji } from "./UnicodeEmoji"; -export { EmojiBase, Emoji } from "./Emoji"; -export * from "./util"; +export { CustomEmoji } from './CustomEmoji'; +export { Emoji, EmojiBase } from './Emoji'; +export { UnicodeEmoji } from './UnicodeEmoji'; +export * from './util'; diff --git a/packages/client/components/markdown/emoji/util.ts b/packages/client/components/markdown/emoji/util.ts index 5238f9893..d8939ed33 100644 --- a/packages/client/components/markdown/emoji/util.ts +++ b/packages/client/components/markdown/emoji/util.ts @@ -1,6 +1,6 @@ -import emojiRegex from "emoji-regex"; +import emojiRegex from 'emoji-regex'; -import { MarkdownProps } from ".."; +import type { MarkdownProps } from '..'; /** * Regex for custom emoji @@ -11,8 +11,8 @@ export const RE_CUSTOM_EMOJI = /:([0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}):/g; * Regex for any emoji */ export const RE_ANY_EMOJI = new RegExp( - RE_CUSTOM_EMOJI.source + "|" + emojiRegex().source, - "g" + RE_CUSTOM_EMOJI.source + '|' + emojiRegex().source, + 'g' ); /** @@ -21,7 +21,7 @@ export const RE_ANY_EMOJI = new RegExp( * @returns Whether it is only emoji */ export function isOnlyEmoji(text: string) { - return text.replaceAll(RE_ANY_EMOJI, "").trim().length === 0; + return text.replaceAll(RE_ANY_EMOJI, '').trim().length === 0; } /** @@ -33,7 +33,7 @@ export function injectEmojiSize( props: MarkdownProps, hastNode: { children?: { properties: Record<string, string> }[] } ) { - const content = props.content ?? ""; + const content = props.content ?? ''; // inject emoji size information const properties = ( @@ -48,15 +48,15 @@ export function injectEmojiSize( RE_ANY_EMOJI.exec(content); // large by default - let size = "large"; + let size = 'large'; // check if we match more than one // if so, make it slightly smaller if (RE_ANY_EMOJI.exec(content)) { - size = "medium"; + size = 'medium'; } - properties["emojiSize"] = size; + properties['emojiSize'] = size; } } } @@ -94,8 +94,8 @@ export function toCodepoint(input: string) { } } - return pairs.map((char) => char.toString(16)).join("-"); + return pairs.map((char) => char.toString(16)).join('-'); } - return ""; + return ''; } diff --git a/packages/client/components/markdown/hast.ts b/packages/client/components/markdown/hast.ts index 4109066fa..a2c08740d 100644 --- a/packages/client/components/markdown/hast.ts +++ b/packages/client/components/markdown/hast.ts @@ -1,5 +1,5 @@ -import { passThroughComponents } from "./plugins/remarkRegexComponent"; -import { timestampHandler } from "./plugins/timestamps"; +import { passThroughComponents } from './plugins/remarkRegexComponent'; +import { timestampHandler } from './plugins/timestamps'; export const handlers = { // ...passThroughComponents("uemoji", "cemoji", "spoiler", "mention", "channel"), diff --git a/packages/client/components/markdown/index.tsx b/packages/client/components/markdown/index.tsx index c6fa50b6a..78706f707 100644 --- a/packages/client/components/markdown/index.tsx +++ b/packages/client/components/markdown/index.tsx @@ -1,46 +1,46 @@ -import { createEffect, createSignal, on } from "solid-js"; -import { styled } from "solid-styled-components"; - -import "katex/dist/katex.min.css"; -import { html } from "property-information"; -import rehypeHighlight from "rehype-highlight"; -import rehypeKatex from "rehype-katex"; -import remarkBreaks from "remark-breaks"; -import remarkGfm from "remark-gfm"; -import remarkMath from "remark-math"; -import remarkParse from "remark-parse"; -import remarkRehype from "remark-rehype"; -import { unified } from "unified"; -import { VFile } from "vfile"; - -import * as elements from "./elements"; -import { injectEmojiSize } from "./emoji/util"; -import { handlers } from "./hast"; -import { RenderCodeblock } from "./plugins/Codeblock"; -import { RenderAnchor } from "./plugins/anchors"; -import { remarkChannels } from "./plugins/channels"; -import { RenderCustomEmoji, remarkCustomEmoji } from "./plugins/customEmoji"; -import { remarkHtmlToText } from "./plugins/htmlToText"; +import 'katex/dist/katex.min.css'; + +import { html } from 'property-information'; +import rehypeHighlight from 'rehype-highlight'; +import rehypeKatex from 'rehype-katex'; +import remarkBreaks from 'remark-breaks'; +import remarkGfm from 'remark-gfm'; +import remarkMath from 'remark-math'; +import remarkParse from 'remark-parse'; +import remarkRehype from 'remark-rehype'; +import { createEffect, createSignal, on } from 'solid-js'; +import { styled } from 'solid-styled-components'; +import { unified } from 'unified'; +import { VFile } from 'vfile'; + +import * as elements from './elements'; +import { injectEmojiSize } from './emoji/util'; +import { handlers } from './hast'; +import { RenderAnchor } from './plugins/anchors'; +import { remarkChannels } from './plugins/channels'; +import { RenderCodeblock } from './plugins/Codeblock'; +import { remarkCustomEmoji, RenderCustomEmoji } from './plugins/customEmoji'; +import { remarkHtmlToText } from './plugins/htmlToText'; import { - RenderMention, mentionHandler, remarkMentions, -} from "./plugins/mentions"; -import { passThroughComponents } from "./plugins/remarkRegexComponent"; + RenderMention, +} from './plugins/mentions'; +import { passThroughComponents } from './plugins/remarkRegexComponent'; import { - RenderSpoiler, remarkSpoiler, + RenderSpoiler, spoilerHandler, -} from "./plugins/spoiler"; +} from './plugins/spoiler'; import { - RenderTimestamp, remarkTimestamps, + RenderTimestamp, timestampHandler, -} from "./plugins/timestamps"; -import { RenderUnicodeEmoji, remarkUnicodeEmoji } from "./plugins/unicodeEmoji"; -import { remarkInsertBreaks, sanitise } from "./sanitise"; -import { childrenToSolid } from "./solid-markdown/ast-to-solid"; -import { defaults } from "./solid-markdown/defaults"; +} from './plugins/timestamps'; +import { remarkUnicodeEmoji, RenderUnicodeEmoji } from './plugins/unicodeEmoji'; +import { remarkInsertBreaks, sanitise } from './sanitise'; +import { childrenToSolid } from './solid-markdown/ast-to-solid'; +import { defaults } from './solid-markdown/defaults'; /** * Empty component @@ -123,8 +123,8 @@ const pipeline = unified() maxExpand: 2, trust: false, strict: false, - output: "html", - errorColor: "var(--customColours-error-color)", + output: 'html', + errorColor: 'var(--customColours-error-color)', }) .use(rehypeHighlight); @@ -140,8 +140,8 @@ export interface MarkdownProps { disallowBigEmoji?: boolean; } -export { TextWithEmoji } from "./emoji/TextWithEmoji"; -export { Emoji } from "./emoji/Emoji"; +export { Emoji } from './emoji/Emoji'; +export { TextWithEmoji } from './emoji/TextWithEmoji'; /** * Remark renderer component @@ -151,14 +151,14 @@ export function Markdown(props: MarkdownProps) { * Render some given Markdown content * @param content content */ - function render(content = "") { + function render(content = '') { const file = new VFile(); file.value = sanitise(content); const hastNode = pipeline.runSync(pipeline.parse(file), file); - if (hastNode.type !== "root") { - throw new TypeError("Expected a `root` node"); + if (hastNode.type !== 'root') { + throw new TypeError('Expected a `root` node'); } injectEmojiSize(props, hastNode as any); diff --git a/packages/client/components/markdown/plugins/Codeblock.tsx b/packages/client/components/markdown/plugins/Codeblock.tsx index 3fadd281c..137a77734 100644 --- a/packages/client/components/markdown/plugins/Codeblock.tsx +++ b/packages/client/components/markdown/plugins/Codeblock.tsx @@ -1,21 +1,20 @@ -import { JSX } from "solid-js"; +import type { JSX } from 'solid-js'; +import { styled } from 'styled-system/jsx'; -import { styled } from "styled-system/jsx"; - -const Codeblock = styled("pre", { +const Codeblock = styled('pre', { base: { - color: "#c9d1d9", - background: "#0d1117", + color: '#c9d1d9', + background: '#0d1117', - padding: "var(--gap-md)", - borderRadius: "var(--borderRadius-md)", + padding: 'var(--gap-md)', + borderRadius: 'var(--borderRadius-md)', - wordWrap: "break-word", - whiteSpace: "pre-wrap", + wordWrap: 'break-word', + whiteSpace: 'pre-wrap', - "&> code": { - color: "inherit !important", - background: "transparent !important", + '&> code': { + color: 'inherit !important', + background: 'transparent !important', }, }, }); diff --git a/packages/client/components/markdown/plugins/anchors.tsx b/packages/client/components/markdown/plugins/anchors.tsx index f12112818..18813a497 100644 --- a/packages/client/components/markdown/plugins/anchors.tsx +++ b/packages/client/components/markdown/plugins/anchors.tsx @@ -1,58 +1,56 @@ -import { JSX, Switch, splitProps } from "solid-js"; - -import { cva } from "styled-system/css"; - -import { useClient } from "@revolt/client"; -import { paramsFromPathname } from "@revolt/routing"; -import { Avatar, iconSize } from "@revolt/ui"; - -import MdChat from "@material-design-icons/svg/outlined/chat.svg?component-solid"; -import MdChevronRight from "@material-design-icons/svg/outlined/chevron_right.svg?component-solid"; +import MdChat from '@material-design-icons/svg/outlined/chat.svg?component-solid'; +import MdChevronRight from '@material-design-icons/svg/outlined/chevron_right.svg?component-solid'; // import { determineLink } from "../../../lib/links"; // import { modalController } from "../../../controllers/modals/ModalController"; -import MdTag from "@material-design-icons/svg/outlined/tag.svg?component-solid"; +import MdTag from '@material-design-icons/svg/outlined/tag.svg?component-solid'; +import { useClient } from '@revolt/client'; +import { paramsFromPathname } from '@revolt/routing'; +import { Avatar, iconSize } from '@revolt/ui'; +import type { JSX } from 'solid-js'; +import { splitProps, Switch } from 'solid-js'; +import { cva } from 'styled-system/css'; const link = cva({ base: { - color: "#0088ce !important", + color: '#0088ce !important', }, }); const internalLink = cva({ base: { - verticalAlign: "bottom", + verticalAlign: 'bottom', - gap: "4px", - paddingLeft: "2px", - paddingRight: "6px", - alignItems: "center", - display: "inline-flex", - textDecoration: "none !important", + gap: '4px', + paddingLeft: '2px', + paddingRight: '6px', + alignItems: 'center', + display: 'inline-flex', + textDecoration: 'none !important', - cursor: "pointer", + cursor: 'pointer', fontWeight: 600, - borderRadius: "var(--borderRadius-lg)", - color: "var(--colours-messaging-component-mention-foreground)", - background: "var(--colours-messaging-component-mention-background)", + borderRadius: 'var(--borderRadius-lg)', + color: 'var(--colours-messaging-component-mention-foreground)', + background: 'var(--colours-messaging-component-mention-background)', }, }); export function RenderAnchor( props: JSX.AnchorHTMLAttributes<HTMLAnchorElement> ) { - const [localProps, remoteProps] = splitProps(props, ["href"]); + const [localProps, remoteProps] = splitProps(props, ['href']); // Pass-through no href or if anchor if (!localProps.href) return <a href={localProps.href} {...props} />; - let internal = false; + const internal = false; try { const url = new URL(localProps.href); if ( [ location.origin, - "https://app.revolt.chat", - "https://revolt.chat", + 'https://app.revolt.chat', + 'https://revolt.chat', ].includes(url.origin) ) { const newUrl = new URL(url.pathname, location.origin); @@ -62,12 +60,12 @@ export function RenderAnchor( if (params.exactChannel) { return ( <a class={internalLink()} href={newUrl.toString()}> - <MdTag {...iconSize("1em")} /> + <MdTag {...iconSize('1em')} /> {client().channels.get(params.channelId!)?.name} {params.exactMessage && ( <> - <MdChevronRight {...iconSize("1em")} /> - <MdChat {...iconSize("1em")} /> + <MdChevronRight {...iconSize('1em')} /> + <MdChat {...iconSize('1em')} /> </> )} </a> @@ -85,7 +83,7 @@ export function RenderAnchor( {...remoteProps} class={link()} href={newUrl.toString()} - rel="noreferrer" + rel='noreferrer' /> ); } @@ -108,8 +106,8 @@ export function RenderAnchor( {...remoteProps} class={link()} href={localProps.href} - target={"_blank"} - rel="noreferrer" + target={'_blank'} + rel='noreferrer' // onClick={(ev) => modalController.openLink(href) && ev.preventDefault()} /> ); diff --git a/packages/client/components/markdown/plugins/channels.tsx b/packages/client/components/markdown/plugins/channels.tsx index 03a47f3d5..b49c5d061 100644 --- a/packages/client/components/markdown/plugins/channels.tsx +++ b/packages/client/components/markdown/plugins/channels.tsx @@ -1,38 +1,37 @@ -import { Plugin } from "unified"; -import { visit } from "unist-util-visit"; - -import { clientController } from "@revolt/client"; +import { clientController } from '@revolt/client'; +import type { Plugin } from 'unified'; +import { visit } from 'unist-util-visit'; const RE_CHANNEL = /<#([A-z0-9]{26})>/g; export const remarkChannels: Plugin = () => (tree) => { visit( tree, - "text", + 'text', ( - node: { type: "text"; value: string }, + node: { type: 'text'; value: string }, idx, parent: { children: any[] } ) => { - let elements = node.value.split(RE_CHANNEL); + const elements = node.value.split(RE_CHANNEL); if (elements.length === 1) return; // no matches const client = clientController.getCurrentClient(); - let newNodes = elements.map((value, index) => { + const newNodes = elements.map((value, index) => { if (index % 2) { const channel = client.channels.get(value); if (channel) { return { - type: "link", + type: 'link', url: `${location.origin}${ - channel.server ? `/server/${channel.serverId}` : "" + channel.server ? `/server/${channel.serverId}` : '' }/channel/${channel.id}`, }; } } return { - type: "text", + type: 'text', value, }; }); diff --git a/packages/client/components/markdown/plugins/customEmoji.tsx b/packages/client/components/markdown/plugins/customEmoji.tsx index 464b0ba8e..69bf090b5 100644 --- a/packages/client/components/markdown/plugins/customEmoji.tsx +++ b/packages/client/components/markdown/plugins/customEmoji.tsx @@ -1,14 +1,10 @@ -import { Match, Switch, createSignal, onMount } from "solid-js"; +import { useClient } from '@revolt/client'; +import { Avatar, Column, Row, styled } from '@revolt/ui'; +import { createSignal, Match, onMount, Switch } from 'solid-js'; -import { useClient } from "@revolt/client"; -import { Avatar, Column, Row, styled } from "@revolt/ui"; - -import { CustomEmoji, Emoji, RE_CUSTOM_EMOJI } from "../emoji"; - -import { - CustomComponentProps, - createRegexComponent, -} from "./remarkRegexComponent"; +import { CustomEmoji, Emoji, RE_CUSTOM_EMOJI } from '../emoji'; +import type { CustomComponentProps } from './remarkRegexComponent'; +import { createRegexComponent } from './remarkRegexComponent'; /** * Render a custom emoji @@ -30,7 +26,7 @@ export function RenderCustomEmoji(props: CustomComponentProps) { */ const server = () => client()!.servers.get( - (emoji()!.parent as { type: "Server"; id: string }).id + (emoji()!.parent as { type: 'Server'; id: string }).id )!; return ( @@ -39,10 +35,10 @@ export function RenderCustomEmoji(props: CustomComponentProps) { <TooltipTrigger use:floating={{ tooltip: { - placement: "top", + placement: 'top', content: () => ( - <Row align gap="lg"> - <span style={{ "--emoji-size": "3em" }}> + <Row align gap='lg'> + <span style={{ '--emoji-size': '3em' }}> <Emoji emoji={props.match} /> </span> <Switch @@ -53,10 +49,10 @@ export function RenderCustomEmoji(props: CustomComponentProps) { </> } > - <Match when={emoji()?.parent.type === "Server"}> + <Match when={emoji()?.parent.type === 'Server'}> <Column align> <span>{`:${emoji()!.name}:`}</span> - <Switch fallback="Private Server"> + <Switch fallback='Private Server'> <Match when={server()}> <Row align> <Avatar @@ -73,11 +69,11 @@ export function RenderCustomEmoji(props: CustomComponentProps) { </Row> ), aria: - emoji()?.parent.type === "Server" + emoji()?.parent.type === 'Server' ? `:${emoji()!.name}: from ${ - server()?.name ?? "Private Server" + server()?.name ?? 'Private Server' }` - : "Unknown emote", + : 'Unknown emote', }, }} > @@ -105,6 +101,6 @@ function FetchEmote(props: { id: string }) { } export const remarkCustomEmoji = createRegexComponent( - "cemoji", + 'cemoji', RE_CUSTOM_EMOJI ); diff --git a/packages/client/components/markdown/plugins/htmlToText.ts b/packages/client/components/markdown/plugins/htmlToText.ts index cc787346d..009526a7c 100644 --- a/packages/client/components/markdown/plugins/htmlToText.ts +++ b/packages/client/components/markdown/plugins/htmlToText.ts @@ -1,10 +1,10 @@ -import { Plugin } from "unified"; -import { visit } from "unist-util-visit"; +import type { Plugin } from 'unified'; +import { visit } from 'unist-util-visit'; export const remarkHtmlToText: Plugin = () => { return (tree) => { - visit(tree, "html", (node: { type: string; value: string }) => { - node.type = "text"; + visit(tree, 'html', (node: { type: string; value: string }) => { + node.type = 'text'; }); }; }; diff --git a/packages/client/components/markdown/plugins/mentions.tsx b/packages/client/components/markdown/plugins/mentions.tsx index 37df7e010..73eee72cc 100644 --- a/packages/client/components/markdown/plugins/mentions.tsx +++ b/packages/client/components/markdown/plugins/mentions.tsx @@ -1,36 +1,34 @@ -import { Match, Show, Switch } from "solid-js"; +import { UserContextMenu } from '@revolt/app'; +import { Avatar, ColouredText } from '@revolt/ui'; +import type { Handler } from 'mdast-util-to-hast'; +import { Match, Show, Switch } from 'solid-js'; +import { cva } from 'styled-system/css'; +import type { Plugin } from 'unified'; +import { visit } from 'unist-util-visit'; -import { Handler } from "mdast-util-to-hast"; -import { cva } from "styled-system/css"; -import { Plugin } from "unified"; -import { visit } from "unist-util-visit"; - -import { UserContextMenu } from "@revolt/app"; -import { Avatar, ColouredText } from "@revolt/ui"; - -import { useUser } from "../users"; +import { useUser } from '../users'; const mention = cva({ base: { - verticalAlign: "bottom", + verticalAlign: 'bottom', - gap: "4px", - paddingLeft: "2px", - paddingRight: "6px", - alignItems: "center", - display: "inline-flex", + gap: '4px', + paddingLeft: '2px', + paddingRight: '6px', + alignItems: 'center', + display: 'inline-flex', - cursor: "pointer", + cursor: 'pointer', fontWeight: 600, - borderRadius: "var(--borderRadius-lg)", - color: "var(--colours-messaging-component-mention-foreground)", - background: "var(--colours-messaging-component-mention-background)", + borderRadius: 'var(--borderRadius-lg)', + color: 'var(--colours-messaging-component-mention-foreground)', + background: 'var(--colours-messaging-component-mention-background)', }, variants: { valid: { false: { - paddingLeft: "6px", - cursor: "not-allowed", + paddingLeft: '6px', + cursor: 'not-allowed', }, }, }, @@ -59,7 +57,7 @@ export function RenderMention(props: { userId: string }) { <Avatar size={16} src={user().avatar} fallback={user().username} /> <ColouredText colour={user().colour!} - clip={user().colour?.includes("gradient")} + clip={user().colour?.includes('gradient')} > {user().username} </ColouredText> @@ -77,12 +75,12 @@ export const remarkMentions: Plugin = () => (tree) => { // chain, so instead we just convert these links where appropriate! visit( tree, - "link", - (node: { type: "link"; url: string }, idx, parent: { children: any[] }) => { + 'link', + (node: { type: 'link'; url: string }, idx, parent: { children: any[] }) => { const match = RE_MENTION.exec(node.url); if (match) { parent.children.splice(idx, 1, { - type: "mention", + type: 'mention', userId: match[1], }); } @@ -121,8 +119,8 @@ export const remarkMentions: Plugin = () => (tree) => { export const mentionHandler: Handler = (h, node) => { return { - type: "element" as const, - tagName: "mention", + type: 'element' as const, + tagName: 'mention', children: [], properties: { userId: node.userId, diff --git a/packages/client/components/markdown/plugins/remarkRegexComponent.ts b/packages/client/components/markdown/plugins/remarkRegexComponent.ts index 14eaf1fa1..bfbf354f2 100644 --- a/packages/client/components/markdown/plugins/remarkRegexComponent.ts +++ b/packages/client/components/markdown/plugins/remarkRegexComponent.ts @@ -1,6 +1,6 @@ -import type { Handler } from "mdast-util-to-hast"; -import type { Plugin } from "unified"; -import { visit } from "unist-util-visit"; +import type { Handler } from 'mdast-util-to-hast'; +import type { Plugin } from 'unified'; +import { visit } from 'unist-util-visit'; /** * Props given to custom components @@ -28,11 +28,11 @@ export function createRegexComponent( */ return () => { return (tree) => { - console.info("the tree", tree); + console.info('the tree', tree); visit( tree, - "text", + 'text', ( node: { value: string }, index: number, @@ -51,7 +51,7 @@ export function createRegexComponent( if (start !== position) { result.push({ - type: "text", + type: 'text', value: node.value.slice(start, position), }); } @@ -68,10 +68,10 @@ export function createRegexComponent( match = regex.exec(node.value); } - if (result.length > 0 && parent && typeof index === "number") { + if (result.length > 0 && parent && typeof index === 'number') { if (start < node.value.length) { result.push({ - type: "text", + type: 'text', value: node.value.slice(start), }); } @@ -92,13 +92,13 @@ export function createRegexComponent( */ export const passThroughRehype: (name: string) => Handler = (name: string) => { return (h, node, parent) => { - console.info("Build", h, node, parent); + console.info('Build', h, node, parent); return { - type: "element", - tagName: "spoiler", + type: 'element', + tagName: 'spoiler', children: [ { - type: "raw", + type: 'raw', value: node.match, }, ], diff --git a/packages/client/components/markdown/plugins/spoiler.tsx b/packages/client/components/markdown/plugins/spoiler.tsx index 09a5cc28a..131863826 100644 --- a/packages/client/components/markdown/plugins/spoiler.tsx +++ b/packages/client/components/markdown/plugins/spoiler.tsx @@ -1,26 +1,25 @@ -import { createSignal } from "solid-js"; -import { styled } from "solid-styled-components"; +import type { Handler } from 'mdast-util-to-hast'; +import { createSignal } from 'solid-js'; +import { styled } from 'solid-styled-components'; +import type { Plugin } from 'unified'; +import { visit } from 'unist-util-visit'; -import { Handler } from "mdast-util-to-hast"; -import { Plugin } from "unified"; -import { visit } from "unist-util-visit"; +import type { CustomComponentProps } from './remarkRegexComponent'; -import { CustomComponentProps } from "./remarkRegexComponent"; - -const Spoiler = styled("span", "Spoiler")<{ shown: boolean }>` +const Spoiler = styled('span', 'Spoiler')<{ shown: boolean }>` padding: 0 2px; border-radius: ${(props) => props.theme!.borderRadius.md}; - cursor: ${(props) => (props.shown ? "auto" : "pointer")}; - user-select: ${(props) => (props.shown ? "all" : "none")}; + cursor: ${(props) => (props.shown ? 'auto' : 'pointer')}; + user-select: ${(props) => (props.shown ? 'all' : 'none')}; color: ${(props) => - props.shown ? props.theme!.colours.background : "transparent"}; + props.shown ? props.theme!.colours.background : 'transparent'}; background: ${(props) => - props.shown ? props.theme!.colours.foreground : "#151515"}; + props.shown ? props.theme!.colours.foreground : '#151515'}; > * { opacity: ${(props) => (props.shown ? 1 : 0)}; - pointer-events: ${(props) => (props.shown ? "unset" : "none")}; + pointer-events: ${(props) => (props.shown ? 'unset' : 'none')}; } `; @@ -37,13 +36,13 @@ export function RenderSpoiler(props: CustomComponentProps & { children: any }) { export const remarkSpoiler: Plugin = () => (tree) => { visit( tree, - "paragraph", + 'paragraph', ( node: { children: ( - | { type: "text"; value: string } - | { type: "paragraph"; children: any[] } - | { type: "spoiler"; children: any[] } + | { type: 'text'; value: string } + | { type: 'paragraph'; children: any[] } + | { type: 'spoiler'; children: any[] } )[]; }, idx, @@ -58,8 +57,8 @@ export const remarkSpoiler: Plugin = () => (tree) => { const child = node.children[i]; // Find the next text element to start a spoiler from - if (child.type === "text") { - const components = child.value.split("||"); + if (child.type === 'text') { + const components = child.value.split('||'); if (components.length === 1) continue; // no spoilers // Handle terminating spoiler tag @@ -72,12 +71,12 @@ export const remarkSpoiler: Plugin = () => (tree) => { // Create a spoiler node.children.splice(i, 0, { - type: "spoiler", + type: 'spoiler', children: [ ...spoilerContent, ...elements, { - type: "text", + type: 'text', value: components.shift(), }, ], @@ -104,16 +103,16 @@ export const remarkSpoiler: Plugin = () => (tree) => { i + 1, 0, { - type: "spoiler", + type: 'spoiler', children: [ { - type: "text", + type: 'text', value: components.shift(), }, ], }, { - type: "text", + type: 'text', value: components.shift()!, } ); @@ -126,7 +125,7 @@ export const remarkSpoiler: Plugin = () => (tree) => { if (spillOver) { searchingForEnd = i + 1; spoilerContent.push({ - type: "text", + type: 'text', value: components.pop(), }); } @@ -138,10 +137,10 @@ export const remarkSpoiler: Plugin = () => (tree) => { export const spoilerHandler: Handler = (h, node) => { return { - type: "element" as const, - tagName: "spoiler", + type: 'element' as const, + tagName: 'spoiler', children: h.all({ - type: "paragraph", + type: 'paragraph', children: node.children, }), properties: {}, diff --git a/packages/client/components/markdown/plugins/timestamps.tsx b/packages/client/components/markdown/plugins/timestamps.tsx index 47ba4c768..a3744974c 100644 --- a/packages/client/components/markdown/plugins/timestamps.tsx +++ b/packages/client/components/markdown/plugins/timestamps.tsx @@ -1,13 +1,11 @@ -import { createEffect, createSignal } from "solid-js"; +import { dayjs } from '@revolt/i18n'; +import type { Dayjs } from 'dayjs'; +import type { Handler } from 'mdast-util-to-hast'; +import { createEffect, createSignal } from 'solid-js'; +import type { Plugin } from 'unified'; +import { visit } from 'unist-util-visit'; -import { Dayjs } from "dayjs"; -import type { Handler } from "mdast-util-to-hast"; -import { Plugin } from "unified"; -import { visit } from "unist-util-visit"; - -import { dayjs } from "@revolt/i18n"; - -import { time as Time } from "../elements"; +import { time as Time } from '../elements'; export function RenderTimestamp(props: { format: string; date: Dayjs }) { /** @@ -15,18 +13,18 @@ export function RenderTimestamp(props: { format: string; date: Dayjs }) { */ function format() { switch (props.format) { - case "t": - return props.date.format("hh:mm"); - case "T": - return props.date.format("hh:mm:ss"); - case "R": + case 't': + return props.date.format('hh:mm'); + case 'T': + return props.date.format('hh:mm:ss'); + case 'R': return props.date.fromNow(); - case "D": - return props.date.format("DD MMMM YYYY"); - case "F": - return props.date.format("dddd, DD MMMM YYYY hh:mm"); + case 'D': + return props.date.format('DD MMMM YYYY'); + case 'F': + return props.date.format('dddd, DD MMMM YYYY hh:mm'); default: - return props.date.format("DD MMMM YYYY hh:mm"); + return props.date.format('DD MMMM YYYY hh:mm'); } } @@ -36,8 +34,8 @@ export function RenderTimestamp(props: { format: string; date: Dayjs }) { createEffect(() => { // Update every second if we are rendering relative time - if (props.format === "R") { - let interval = setInterval(update, 1000); + if (props.format === 'R') { + const interval = setInterval(update, 1000); return () => clearInterval(interval); } }); @@ -47,7 +45,7 @@ export function RenderTimestamp(props: { format: string; date: Dayjs }) { class={Time()} use:floating={{ tooltip: { - placement: "top", + placement: 'top', content: props.date.toString(), }, }} @@ -65,26 +63,26 @@ const RE_TIMESTAMP = /<t:([0-9]+)(?::(\w))?>/g; export const remarkTimestamps: Plugin = () => (tree) => { visit( tree, - "text", + 'text', ( - node: { type: "text"; value: string }, + node: { type: 'text'; value: string }, idx, parent: { children: any[] } ) => { - let elements = node.value.split(RE_TIMESTAMP); + const elements = node.value.split(RE_TIMESTAMP); if (elements.length === 1) return; // no matches // Generate initial node const newNodes: ( - | { type: "text"; value: string } + | { type: 'text'; value: string } | { - type: "timestamp"; + type: 'timestamp'; format: string; date: Dayjs; } )[] = [ { - type: "text", + type: 'text', value: elements.shift()!, }, ]; @@ -96,13 +94,13 @@ export const remarkTimestamps: Plugin = () => (tree) => { // Insert components newNodes.push({ - type: "timestamp", + type: 'timestamp', format: elements[i * 3 + 1], date, }); newNodes.push({ - type: "text", + type: 'text', value: elements[i * 3 + 2], }); } @@ -115,8 +113,8 @@ export const remarkTimestamps: Plugin = () => (tree) => { export const timestampHandler: Handler = (h, node) => { return { - type: "element" as const, - tagName: "timestamp", + type: 'element' as const, + tagName: 'timestamp', children: [], properties: { format: node.format, diff --git a/packages/client/components/markdown/plugins/unicodeEmoji.tsx b/packages/client/components/markdown/plugins/unicodeEmoji.tsx index ad4a267e5..27a0b2fdb 100644 --- a/packages/client/components/markdown/plugins/unicodeEmoji.tsx +++ b/packages/client/components/markdown/plugins/unicodeEmoji.tsx @@ -1,11 +1,8 @@ -import emojiRegex from "emoji-regex"; +import emojiRegex from 'emoji-regex'; -import { UnicodeEmoji } from "../emoji"; - -import { - CustomComponentProps, - createRegexComponent, -} from "./remarkRegexComponent"; +import { UnicodeEmoji } from '../emoji'; +import type { CustomComponentProps } from './remarkRegexComponent'; +import { createRegexComponent } from './remarkRegexComponent'; /** * Render Unicode emoji @@ -14,4 +11,4 @@ export function RenderUnicodeEmoji(props: CustomComponentProps) { return <UnicodeEmoji emoji={props.str} />; } -export const remarkUnicodeEmoji = createRegexComponent("uemoji", emojiRegex()); +export const remarkUnicodeEmoji = createRegexComponent('uemoji', emojiRegex()); diff --git a/packages/client/components/markdown/sanitise.ts b/packages/client/components/markdown/sanitise.ts index f95f52ffa..f8285cf10 100644 --- a/packages/client/components/markdown/sanitise.ts +++ b/packages/client/components/markdown/sanitise.ts @@ -1,5 +1,3 @@ -import { Root } from "hast"; - /** * Regex for matching execessive recursion of blockquotes and lists */ @@ -50,7 +48,7 @@ export function sanitise(content: string) { // Replace empty lines with non-breaking space // because remark renderer is collapsing empty // or otherwise whitespace-only lines of text - .replace(RE_EMPTY_LINE, "\uF800\n") + .replace(RE_EMPTY_LINE, '\uF800\n') // Ensure empty line after blockquotes for correct rendering .replace(RE_BLOCKQUOTE, (match) => `${match}\n`) @@ -61,18 +59,18 @@ export function sanitise(content: string) { * Replace \uF800 with break elements */ export function remarkInsertBreaks() { - return (tree: Root) => { + return (tree: import('hast').Root) => { /** * Process element and sub-tree * @param element Element * @returns Element */ function recurse(element: any): any { - if (element.type === "text") { - if (element.value === "\uF800") { + if (element.type === 'text') { + if (element.value === '\uF800') { return { - type: "element", - tagName: "br", + type: 'element', + tagName: 'br', properties: {}, children: [], }; diff --git a/packages/client/components/markdown/solid-markdown/ast-to-solid.tsx b/packages/client/components/markdown/solid-markdown/ast-to-solid.tsx index 7d91e2dad..fcacf1038 100644 --- a/packages/client/components/markdown/solid-markdown/ast-to-solid.tsx +++ b/packages/client/components/markdown/solid-markdown/ast-to-solid.tsx @@ -373,7 +373,7 @@ function addProperty( let result = value; // Ignore nullish and `NaN` values. - // eslint-disable-next-line no-self-compare + if (result === null || result === undefined || result !== result) { return; } diff --git a/packages/client/components/markdown/users.ts b/packages/client/components/markdown/users.ts index 7c1905ee5..47174ff5a 100644 --- a/packages/client/components/markdown/users.ts +++ b/packages/client/components/markdown/users.ts @@ -1,9 +1,8 @@ -import { Accessor, createMemo } from "solid-js"; - -import { ServerMember, User } from "revolt.js"; - -import { useClient } from "@revolt/client"; -import { useParams } from "@revolt/routing"; +import { useClient } from '@revolt/client'; +import { useParams } from '@revolt/routing'; +import type { ServerMember, User } from 'revolt.js'; +import type { Accessor } from 'solid-js'; +import { createMemo } from 'solid-js'; // TODO: move to @revolt/common? @@ -45,7 +44,7 @@ interface UserInformation { */ export function userInformation(user?: User, member?: ServerMember) { return { - username: member?.nickname ?? user?.displayName ?? "Unknown User", + username: member?.nickname ?? user?.displayName ?? 'Unknown User', avatar: member?.animatedAvatarURL ?? user?.animatedAvatarURL, colour: member?.roleColour, user, @@ -71,7 +70,7 @@ export function useUsers( // eslint-disable-next-line solid/reactivity return createMemo(() => { const client = clientAccessor()!; - const list = (typeof ids === "function" ? ids() : ids).map((id) => { + const list = (typeof ids === 'function' ? ids() : ids).map((id) => { const user = client.users.get(id)!; if (user) { @@ -98,5 +97,5 @@ export function useUsers( */ export function useUser(id: string): Accessor<UserInformation> { const users = useUsers([id]); - return () => users()[0] ?? { username: "Unknown User" }; + return () => users()[0] ?? { username: 'Unknown User' }; } diff --git a/packages/client/components/modal/form.tsx b/packages/client/components/modal/form.tsx index b8cdbdb36..c819dd190 100644 --- a/packages/client/components/modal/form.tsx +++ b/packages/client/components/modal/form.tsx @@ -1,26 +1,25 @@ -import { Show, createSignal, splitProps } from "solid-js"; -import { createStore } from "solid-js/store"; - -import { mapAnyError } from "@revolt/client"; -import { useTranslation } from "@revolt/i18n"; -import { Column, Form, Typography, styled } from "@revolt/ui"; +import { mapAnyError } from '@revolt/client'; +import { useTranslation } from '@revolt/i18n'; +import { Column, Form, styled, Typography } from '@revolt/ui'; import type { Action, Props as ModalProps, -} from "@revolt/ui/components/design/atoms/display/Modal"; -import { getInitialValues } from "@revolt/ui/components/tools/Form"; +} from '@revolt/ui/components/design/atoms/display/Modal'; import type { - Props as FormProps, FormTemplate, MapFormToValues, -} from "@revolt/ui/components/tools/Form"; + Props as FormProps, +} from '@revolt/ui/components/tools/Form'; +import { getInitialValues } from '@revolt/ui/components/tools/Form'; +import { createSignal, Show, splitProps } from 'solid-js'; +import { createStore } from 'solid-js/store'; -import { modalController } from "."; -import { Modals, PropGenerator } from "./types"; +import { modalController } from '.'; +import type { Modals, PropGenerator } from './types'; type Props<T extends FormTemplate> = Omit< FormProps<T>, - "onChange" | "store" | "setStore" | "submitBtn" | "onSubmit" + 'onChange' | 'store' | 'setStore' | 'submitBtn' | 'onSubmit' > & { /** * Form submission callback @@ -30,7 +29,7 @@ type Props<T extends FormTemplate> = Omit< /** * Submit button properties */ - submit?: Omit<Action, "onClick" | "confirmation">; + submit?: Omit<Action, 'onClick' | 'confirmation'>; /** * Custom actions after submit button @@ -40,7 +39,7 @@ type Props<T extends FormTemplate> = Omit< /** * Props for the modal */ - modalProps?: Omit<ModalProps, "disabled" | "actions">; + modalProps?: Omit<ModalProps, 'disabled' | 'actions'>; }; /** @@ -48,14 +47,14 @@ type Props<T extends FormTemplate> = Omit< */ export function createFormModal< T extends FormTemplate, - P extends Modals["type"] + P extends Modals['type'], >(props: Props<T>): ReturnType<PropGenerator<P>> { const t = useTranslation(); const [localProps, formProps] = splitProps(props, [ - "callback", - "submit", - "actions", - "modalProps", + 'callback', + 'submit', + 'actions', + 'modalProps', ]); const [store, setStore] = createStore( @@ -83,15 +82,15 @@ export function createFormModal< actions: [ { onClick: onSubmit, - children: t("actions.submit"), + children: t('actions.submit'), confirmation: true, ...props.submit, }, ...(props.actions ?? [ { onClick: () => true, - children: t("app.special.modals.actions.cancel"), - variant: "plain", + children: t('app.special.modals.actions.cancel'), + variant: 'plain', }, ]), ], @@ -109,7 +108,7 @@ export function createFormModal< /> <Show when={error()}> <Error> - <Typography variant="label"> + <Typography variant='label'> {t(`error.${error()}`, undefined, error())} </Typography> </Error> diff --git a/packages/client/components/modal/index.tsx b/packages/client/components/modal/index.tsx index 1ba8578da..f61ffafe6 100644 --- a/packages/client/components/modal/index.tsx +++ b/packages/client/components/modal/index.tsx @@ -1,16 +1,15 @@ -import { For } from "solid-js"; -import { SetStoreFunction, createStore } from "solid-js/store"; +import '../ui/styled.d.ts'; -import type { MFA, MFATicket } from "revolt.js"; +import { registerController } from '@revolt/common'; +import type { MFA, MFATicket } from 'revolt.js'; +import { For } from 'solid-js'; +import type { SetStoreFunction } from 'solid-js/store'; +import { createStore } from 'solid-js/store'; -import { registerController } from "@revolt/common"; +import { RenderModal } from './modals'; +import type { Modals } from './types'; -import "../ui/styled.d.ts"; - -import { RenderModal } from "./modals"; -import { Modals } from "./types"; - -export type ActiveModal = { +export interface ActiveModal { /** * Unique modal Id */ @@ -25,7 +24,7 @@ export type ActiveModal = { * Props to pass to modal */ props: Modals; -}; +} /** * Global modal controller for layering and displaying one or more modal to the user @@ -54,12 +53,12 @@ export class ModalController { * @param event Event */ function keyDown(event: KeyboardEvent) { - if (event.key === "Escape") { + if (event.key === 'Escape') { modalController.pop(); } } - document.addEventListener("keydown", keyDown); + document.addEventListener('keydown', keyDown); } /** @@ -93,7 +92,7 @@ export class ModalController { * Close modal by id */ remove(id: string) { - this.setModals((entry) => entry.id === id, "show", false); + this.setModals((entry) => entry.id === id, 'show', false); setTimeout(() => { this.setModals(this.modals.filter((entry) => entry.id !== id)); @@ -118,7 +117,7 @@ export class ModalControllerExtended extends ModalController { */ constructor() { super(); - registerController("modal", this); + registerController('modal', this); } /** @@ -128,8 +127,8 @@ export class ModalControllerExtended extends ModalController { mfaFlow(mfa: MFA) { return new Promise((callback: (ticket?: MFATicket) => void) => this.push({ - type: "mfa_flow", - state: "known", + type: 'mfa_flow', + state: 'known', mfa, callback, }) @@ -143,7 +142,7 @@ export class ModalControllerExtended extends ModalController { mfaEnableTOTP(secret: string, identifier: string) { return new Promise((callback: (value?: string) => void) => this.push({ - type: "mfa_enable_totp", + type: 'mfa_enable_totp', identifier, secret, callback, @@ -160,7 +159,7 @@ export class ModalControllerExtended extends ModalController { navigator.clipboard.writeText(text); } else { this.push({ - type: "clipboard", + type: 'clipboard', text, }); } diff --git a/packages/client/components/modal/modals/AddFriend.tsx b/packages/client/components/modal/modals/AddFriend.tsx index 4bf3e6a0b..13bd35068 100644 --- a/packages/client/components/modal/modals/AddFriend.tsx +++ b/packages/client/components/modal/modals/AddFriend.tsx @@ -1,30 +1,30 @@ -import { useTranslation } from "@revolt/i18n"; +import { useTranslation } from '@revolt/i18n'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal for adding another user as a friend */ -const AddFriend: PropGenerator<"add_friend"> = (props) => { +const AddFriend: PropGenerator<'add_friend'> = (props) => { const t = useTranslation(); return createFormModal({ modalProps: { - title: t("app.context_menu.add_friend"), + title: t('app.context_menu.add_friend'), }, schema: { - username: "text", + username: 'text', }, data: { username: { - field: "Username", + field: 'Username', }, }, callback: async ({ username }) => void (await props.client.api.post(`/users/friend`, { username })), submit: { - children: t("app.special.modals.actions.ok"), + children: t('app.special.modals.actions.ok'), }, }); }; diff --git a/packages/client/components/modal/modals/BanMember.tsx b/packages/client/components/modal/modals/BanMember.tsx index b5a7a0217..bb5609158 100644 --- a/packages/client/components/modal/modals/BanMember.tsx +++ b/packages/client/components/modal/modals/BanMember.tsx @@ -1,36 +1,36 @@ -import { useTranslation } from "@revolt/i18n"; -import { Avatar, Column } from "@revolt/ui"; +import { useTranslation } from '@revolt/i18n'; +import { Avatar, Column } from '@revolt/ui'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal to ban server member */ -const BanMember: PropGenerator<"ban_member"> = (props) => { +const BanMember: PropGenerator<'ban_member'> = (props) => { const t = useTranslation(); return createFormModal({ modalProps: { - title: t("app.context_menu.ban_member"), + title: t('app.context_menu.ban_member'), }, schema: { - member: "custom", - reason: "text", + member: 'custom', + reason: 'text', }, data: { member: { element: ( - <Column align="center"> + <Column align='center'> <Avatar src={props.member.user?.animatedAvatarURL} size={64} /> - {t("app.special.modals.prompt.confirm_ban", { + {t('app.special.modals.prompt.confirm_ban', { name: props.member.user?.username as string, })} </Column> ), }, reason: { - field: t("app.special.modals.prompt.confirm_ban_reason"), + field: t('app.special.modals.prompt.confirm_ban_reason'), }, }, callback: async ({ reason }) => @@ -38,8 +38,8 @@ const BanMember: PropGenerator<"ban_member"> = (props) => { reason, })), submit: { - variant: "error", - children: t("app.special.modals.actions.ban"), + variant: 'error', + children: t('app.special.modals.actions.ban'), }, }); }; diff --git a/packages/client/components/modal/modals/Changelog.tsx b/packages/client/components/modal/modals/Changelog.tsx index 43ef20998..24f93aa1c 100644 --- a/packages/client/components/modal/modals/Changelog.tsx +++ b/packages/client/components/modal/modals/Changelog.tsx @@ -1,10 +1,9 @@ -import { For, Match, Switch, createSignal } from "solid-js"; +import { dayjs, useTranslation } from '@revolt/i18n'; +import { CategoryButton, Column, styled } from '@revolt/ui'; +import type { Action } from '@revolt/ui/components/design/atoms/display/Modal'; +import { createSignal, For, Match, Switch } from 'solid-js'; -import { dayjs, useTranslation } from "@revolt/i18n"; -import { CategoryButton, Column, styled } from "@revolt/ui"; -import type { Action } from "@revolt/ui/components/design/atoms/display/Modal"; - -import { PropGenerator } from "../types"; +import type { PropGenerator } from '../types'; /** * Changelog element @@ -12,7 +11,7 @@ import { PropGenerator } from "../types"; type Element = | string | { - type: "image"; + type: 'image'; src: string; }; @@ -28,10 +27,9 @@ export interface ChangelogPost { /** * Modal to display changelog */ -const Changelog: PropGenerator<"changelog"> = (props) => { +const Changelog: PropGenerator<'changelog'> = (props) => { const t = useTranslation(); - // eslint-disable-next-line solid/reactivity const [log, setLog] = createSignal(props.initial); /** @@ -39,16 +37,16 @@ const Changelog: PropGenerator<"changelog"> = (props) => { * @returns Log */ const currentLog = () => - typeof log() !== "undefined" ? props.posts[log()!] : undefined; + typeof log() !== 'undefined' ? props.posts[log()!] : undefined; return { title: ( - <Switch fallback={t("app.special.modals.changelogs.title")}> + <Switch fallback={t('app.special.modals.changelogs.title')}> <Match when={currentLog()}>{currentLog()!.title}</Match> </Switch> ), description: ( - <Switch fallback={t("app.special.modals.changelogs.description")}> + <Switch fallback={t('app.special.modals.changelogs.description')}> <Match when={currentLog()}> {dayjs(currentLog()!.date).calendar()} </Match> @@ -57,16 +55,16 @@ const Changelog: PropGenerator<"changelog"> = (props) => { actions: () => { const actions: Action[] = [ { - variant: "primary", - children: t("app.special.modals.actions.close"), + variant: 'primary', + children: t('app.special.modals.actions.close'), onClick: () => true, }, ]; if (currentLog()) { actions.push({ - variant: "plain", - children: t("app.special.modals.changelogs.older"), + variant: 'plain', + children: t('app.special.modals.changelogs.older'), onClick: () => { setLog(undefined); return false; @@ -114,8 +112,8 @@ function RenderLog(props: { post: ChangelogPost }) { <For each={props.post.content}> {(entry) => ( <Switch> - <Match when={typeof entry === "string"}>{entry as string}</Match> - <Match when={typeof entry === "object" && entry.type === "image"}> + <Match when={typeof entry === 'string'}>{entry as string}</Match> + <Match when={typeof entry === 'object' && entry.type === 'image'}> <Image src={(entry as { src: string }).src} /> </Match> </Switch> diff --git a/packages/client/components/modal/modals/ChannelInfo.tsx b/packages/client/components/modal/modals/ChannelInfo.tsx index a7ed85ae6..0fb00e8ef 100644 --- a/packages/client/components/modal/modals/ChannelInfo.tsx +++ b/packages/client/components/modal/modals/ChannelInfo.tsx @@ -1,21 +1,20 @@ -import { BiRegularX } from "solid-icons/bi"; +import { Markdown } from '@revolt/markdown'; +import { Button, Column, Row, Typography } from '@revolt/ui'; +import { BiRegularX } from 'solid-icons/bi'; -import { Markdown } from "@revolt/markdown"; -import { Button, Column, Row, Typography } from "@revolt/ui"; - -import { PropGenerator } from "../types"; +import type { PropGenerator } from '../types'; /** * Modal to display channel information */ -const ChannelInfo: PropGenerator<"channel_info"> = (props, onClose) => { +const ChannelInfo: PropGenerator<'channel_info'> = (props, onClose) => { return { title: ( - <Row align="center"> + <Row align='center'> <Column grow> - <Typography variant="legacy-modal-title">{`#${props.channel.name}`}</Typography> + <Typography variant='legacy-modal-title'>{`#${props.channel.name}`}</Typography> </Column> - <Button size="icon" variant="plain" onClick={onClose}> + <Button size='icon' variant='plain' onClick={onClose}> <BiRegularX size={36} /> </Button> </Row> diff --git a/packages/client/components/modal/modals/Clipboard.tsx b/packages/client/components/modal/modals/Clipboard.tsx index c534722ed..1210dcf55 100644 --- a/packages/client/components/modal/modals/Clipboard.tsx +++ b/packages/client/components/modal/modals/Clipboard.tsx @@ -1,31 +1,31 @@ -import { useTranslation } from "@revolt/i18n"; +import { useTranslation } from '@revolt/i18n'; -import { PropGenerator } from "../types"; +import type { PropGenerator } from '../types'; /** * Modal to display some text which could not be written to the browser clipboard */ -const Clipboard: PropGenerator<"clipboard"> = (props) => { +const Clipboard: PropGenerator<'clipboard'> = (props) => { const t = useTranslation(); return { - title: t("app.special.modals.clipboard.unavailable"), + title: t('app.special.modals.clipboard.unavailable'), description: - location.protocol !== "https:" - ? t("app.special.modals.clipboard.https") + location.protocol !== 'https:' + ? t('app.special.modals.clipboard.https') : undefined, actions: [ { onClick: () => true, confirmation: true, - children: t("app.special.modals.actions.close"), + children: t('app.special.modals.actions.close'), }, ], children: ( <> - {t("app.special.modals.clipboard.copy")} + {t('app.special.modals.clipboard.copy')} <br /> - <code style={{ "user-select": "all", "word-break": "break-all" }}> + <code style={{ 'user-select': 'all', 'word-break': 'break-all' }}> {props.text} </code> </> diff --git a/packages/client/components/modal/modals/CreateBot.tsx b/packages/client/components/modal/modals/CreateBot.tsx index ed2d0dc10..fbcb103c7 100644 --- a/packages/client/components/modal/modals/CreateBot.tsx +++ b/packages/client/components/modal/modals/CreateBot.tsx @@ -1,25 +1,25 @@ -import { mapAndRethrowError } from "@revolt/client"; -import { useTranslation } from "@revolt/i18n"; +import { mapAndRethrowError } from '@revolt/client'; +import { useTranslation } from '@revolt/i18n'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal to create a new bot */ -const CreateBot: PropGenerator<"create_bot"> = (props) => { +const CreateBot: PropGenerator<'create_bot'> = (props) => { const t = useTranslation(); return createFormModal({ modalProps: { - title: t("app.special.popovers.create_bot.title"), + title: t('app.special.popovers.create_bot.title'), }, schema: { - name: "text", + name: 'text', }, data: { name: { - field: t("login.username"), + field: t('login.username'), }, }, callback: async ({ name }) => { @@ -30,7 +30,7 @@ const CreateBot: PropGenerator<"create_bot"> = (props) => { props.onCreate(bot); }, submit: { - children: t("app.special.modals.actions.create"), + children: t('app.special.modals.actions.create'), }, }); }; diff --git a/packages/client/components/modal/modals/CreateCategory.tsx b/packages/client/components/modal/modals/CreateCategory.tsx index d910b1cee..d837ba5d9 100644 --- a/packages/client/components/modal/modals/CreateCategory.tsx +++ b/packages/client/components/modal/modals/CreateCategory.tsx @@ -1,27 +1,26 @@ -import { ulid } from "ulid"; +import { mapAndRethrowError } from '@revolt/client'; +import { useTranslation } from '@revolt/i18n'; +import { ulid } from 'ulid'; -import { mapAndRethrowError } from "@revolt/client"; -import { useTranslation } from "@revolt/i18n"; - -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal to create a new category */ -const CreateCategory: PropGenerator<"create_category"> = (props) => { +const CreateCategory: PropGenerator<'create_category'> = (props) => { const t = useTranslation(); return createFormModal({ modalProps: { - title: t("app.context_menu.create_category"), + title: t('app.context_menu.create_category'), }, schema: { - name: "text", + name: 'text', }, data: { name: { - field: t("app.main.servers.channel_name"), + field: t('app.main.servers.channel_name'), }, }, callback: async ({ name }) => { @@ -39,7 +38,7 @@ const CreateCategory: PropGenerator<"create_category"> = (props) => { .catch(mapAndRethrowError); }, submit: { - children: t("app.special.modals.actions.create"), + children: t('app.special.modals.actions.create'), }, }); }; diff --git a/packages/client/components/modal/modals/CreateChannel.tsx b/packages/client/components/modal/modals/CreateChannel.tsx index f2bc5d59f..9c7ee9a47 100644 --- a/packages/client/components/modal/modals/CreateChannel.tsx +++ b/packages/client/components/modal/modals/CreateChannel.tsx @@ -1,50 +1,50 @@ -import { mapAndRethrowError } from "@revolt/client"; -import { useTranslation } from "@revolt/i18n"; -import { useNavigate } from "@revolt/routing"; +import { mapAndRethrowError } from '@revolt/client'; +import { useTranslation } from '@revolt/i18n'; +import { useNavigate } from '@revolt/routing'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal to create a new server channel */ -const CreateChannel: PropGenerator<"create_channel"> = (props) => { +const CreateChannel: PropGenerator<'create_channel'> = (props) => { const t = useTranslation(); const navigate = useNavigate(); return createFormModal({ modalProps: { - title: t("app.context_menu.create_channel"), + title: t('app.context_menu.create_channel'), }, schema: { - name: "text", - type: "radio", + name: 'text', + type: 'radio', }, data: { name: { - field: t("app.main.servers.channel_name"), + field: t('app.main.servers.channel_name'), }, type: { - field: t("app.main.servers.channel_type"), + field: t('app.main.servers.channel_type'), choices: [ { - name: t("app.main.servers.text_channel"), - value: "Text", + name: t('app.main.servers.text_channel'), + value: 'Text', }, { - name: t("app.main.servers.voice_channel"), - value: "Voice", + name: t('app.main.servers.voice_channel'), + value: 'Voice', }, ], }, }, defaults: { - type: "Text", + type: 'Text', }, callback: async ({ name, type }) => { const channel = await props.server .createChannel({ - type: type as "Text" | "Voice", + type: type as 'Text' | 'Voice', name, }) .catch((err) => { @@ -58,7 +58,7 @@ const CreateChannel: PropGenerator<"create_channel"> = (props) => { } }, submit: { - children: t("app.special.modals.actions.create"), + children: t('app.special.modals.actions.create'), }, }); }; diff --git a/packages/client/components/modal/modals/CreateGroup.tsx b/packages/client/components/modal/modals/CreateGroup.tsx index ea5556223..1d2aab447 100644 --- a/packages/client/components/modal/modals/CreateGroup.tsx +++ b/packages/client/components/modal/modals/CreateGroup.tsx @@ -1,27 +1,27 @@ -import { mapAndRethrowError } from "@revolt/client"; -import { useTranslation } from "@revolt/i18n"; -import { useNavigate } from "@revolt/routing"; +import { mapAndRethrowError } from '@revolt/client'; +import { useTranslation } from '@revolt/i18n'; +import { useNavigate } from '@revolt/routing'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal to create a new group channel */ -const CreateGroup: PropGenerator<"create_group"> = (props) => { +const CreateGroup: PropGenerator<'create_group'> = (props) => { const t = useTranslation(); const navigate = useNavigate(); return createFormModal({ modalProps: { - title: t("app.main.groups.create"), + title: t('app.main.groups.create'), }, schema: { - name: "text", + name: 'text', }, data: { name: { - field: t("app.main.groups.name"), + field: t('app.main.groups.name'), }, }, callback: async ({ name }) => { @@ -32,7 +32,7 @@ const CreateGroup: PropGenerator<"create_group"> = (props) => { navigate(`/channel/${group.id}`); }, submit: { - children: t("app.special.modals.actions.create"), + children: t('app.special.modals.actions.create'), }, }); }; diff --git a/packages/client/components/modal/modals/CreateInvite.tsx b/packages/client/components/modal/modals/CreateInvite.tsx index 23ccd2f83..092385f0a 100644 --- a/packages/client/components/modal/modals/CreateInvite.tsx +++ b/packages/client/components/modal/modals/CreateInvite.tsx @@ -1,12 +1,11 @@ -import { Match, Switch, createSignal, onMount } from "solid-js"; +import { IS_REVOLT, mapAnyError } from '@revolt/client'; +import { useTranslation } from '@revolt/i18n'; +import { Column, styled } from '@revolt/ui'; +import { createSignal, Match, onMount, Switch } from 'solid-js'; -import { IS_REVOLT, mapAnyError } from "@revolt/client"; -import { useTranslation } from "@revolt/i18n"; -import { Column, styled } from "@revolt/ui"; - -import { modalController } from ".."; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { modalController } from '..'; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Code block which displays invite @@ -24,11 +23,11 @@ const Invite = styled(Column)` /** * Modal to create a new invite */ -const CreateInvite: PropGenerator<"create_invite"> = (props) => { +const CreateInvite: PropGenerator<'create_invite'> = (props) => { const t = useTranslation(); const [processing, setProcessing] = createSignal(false); - const [link, setLink] = createSignal("..."); + const [link, setLink] = createSignal('...'); // Generate an invite code onMount(() => { @@ -44,27 +43,27 @@ const CreateInvite: PropGenerator<"create_invite"> = (props) => { ) ) .catch((err) => - modalController.push({ type: "error", error: mapAnyError(err) }) + modalController.push({ type: 'error', error: mapAnyError(err) }) ) .finally(() => setProcessing(false)); }); return createFormModal({ modalProps: { - title: t("app.context_menu.create_invite"), + title: t('app.context_menu.create_invite'), }, schema: { - invite: "custom", + invite: 'custom', }, data: { invite: { element: ( <Switch - fallback={t("app.special.modals.prompt.create_invite_generate")} + fallback={t('app.special.modals.prompt.create_invite_generate')} > <Match when={!processing()}> <Invite> - {t("app.special.modals.prompt.create_invite_created")} + {t('app.special.modals.prompt.create_invite_created')} <code>{link()}</code> </Invite> </Match> @@ -74,11 +73,11 @@ const CreateInvite: PropGenerator<"create_invite"> = (props) => { }, callback: async () => void 0, submit: { - children: t("app.special.modals.actions.ok"), + children: t('app.special.modals.actions.ok'), }, actions: [ { - children: t("app.context_menu.copy_link"), + children: t('app.context_menu.copy_link'), onClick: () => modalController.writeText(link()), }, ], diff --git a/packages/client/components/modal/modals/CreateOrJoinServer.tsx b/packages/client/components/modal/modals/CreateOrJoinServer.tsx index 730cc2d5d..34fc62710 100644 --- a/packages/client/components/modal/modals/CreateOrJoinServer.tsx +++ b/packages/client/components/modal/modals/CreateOrJoinServer.tsx @@ -1,27 +1,26 @@ -import { useTranslation } from "@revolt/i18n"; -import { iconSize, styled } from "@revolt/ui"; +import MdAdd from '@material-design-icons/svg/outlined/add.svg?component-solid'; +import MdLink from '@material-design-icons/svg/outlined/link.svg?component-solid'; +import { useTranslation } from '@revolt/i18n'; +import { iconSize, styled } from '@revolt/ui'; -import MdAdd from "@material-design-icons/svg/outlined/add.svg?component-solid"; -import MdLink from "@material-design-icons/svg/outlined/link.svg?component-solid"; - -import { modalController } from ".."; -import { PropGenerator } from "../types"; +import { modalController } from '..'; +import type { PropGenerator } from '../types'; /** * Modal to create or join a server */ -const CreateOrJoinServer: PropGenerator<"create_or_join_server"> = (props) => { +const CreateOrJoinServer: PropGenerator<'create_or_join_server'> = (props) => { const t = useTranslation(); return { - title: "Create or join a server", + title: 'Create or join a server', description: ( <Base> <a onClick={() => { modalController.pop(); modalController.push({ - type: "create_server", + type: 'create_server', client: props.client, }); }} @@ -32,7 +31,7 @@ const CreateOrJoinServer: PropGenerator<"create_or_join_server"> = (props) => { <a onClick={() => { modalController.pop(); - modalController.push({ type: "join_server", client: props.client }); + modalController.push({ type: 'join_server', client: props.client }); }} > <MdLink {...iconSize(48)} /> @@ -60,7 +59,7 @@ const Base = styled.div` border-radius: 8px; background: ${(props) => - props.theme!.colours["sidebar-channels-background"]}; + props.theme!.colours['sidebar-channels-background']}; } `; diff --git a/packages/client/components/modal/modals/CreateRole.tsx b/packages/client/components/modal/modals/CreateRole.tsx index f7e0ff5d3..cd60fc801 100644 --- a/packages/client/components/modal/modals/CreateRole.tsx +++ b/packages/client/components/modal/modals/CreateRole.tsx @@ -1,24 +1,24 @@ -import { useTranslation } from "@revolt/i18n"; +import { useTranslation } from '@revolt/i18n'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal to create a new server role */ -const CreateInvite: PropGenerator<"create_role"> = (props) => { +const CreateInvite: PropGenerator<'create_role'> = (props) => { const t = useTranslation(); return createFormModal({ modalProps: { - title: t("app.settings.permissions.create_role"), + title: t('app.settings.permissions.create_role'), }, schema: { - name: "text", + name: 'text', }, data: { name: { - field: t("app.settings.permissions.role_name"), + field: t('app.settings.permissions.role_name'), }, }, callback: async ({ name }) => { @@ -26,7 +26,7 @@ const CreateInvite: PropGenerator<"create_role"> = (props) => { props.callback(role.id); }, submit: { - children: t("app.special.modals.actions.create"), + children: t('app.special.modals.actions.create'), }, }); }; diff --git a/packages/client/components/modal/modals/CreateServer.tsx b/packages/client/components/modal/modals/CreateServer.tsx index 80632bcb3..368935d86 100644 --- a/packages/client/components/modal/modals/CreateServer.tsx +++ b/packages/client/components/modal/modals/CreateServer.tsx @@ -1,24 +1,24 @@ -import { mapAndRethrowError } from "@revolt/client"; -import { useTranslation } from "@revolt/i18n"; -import { useNavigate } from "@revolt/routing"; +import { mapAndRethrowError } from '@revolt/client'; +import { useTranslation } from '@revolt/i18n'; +import { useNavigate } from '@revolt/routing'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal to create a new server */ -const CreateServer: PropGenerator<"create_server"> = (props) => { +const CreateServer: PropGenerator<'create_server'> = (props) => { const t = useTranslation(); const navigate = useNavigate(); return createFormModal({ modalProps: { - title: t("app.main.servers.create"), + title: t('app.main.servers.create'), description: ( <> - By creating this server, you agree to the{" "} - <a href="https://revolt.chat/aup" target="_blank" rel="noreferrer"> + By creating this server, you agree to the{' '} + <a href='https://revolt.chat/aup' target='_blank' rel='noreferrer'> Acceptable Use Policy </a> . @@ -26,11 +26,11 @@ const CreateServer: PropGenerator<"create_server"> = (props) => { ), }, schema: { - name: "text", + name: 'text', }, data: { name: { - field: t("app.main.servers.name"), + field: t('app.main.servers.name'), }, }, callback: async ({ name }) => { @@ -43,7 +43,7 @@ const CreateServer: PropGenerator<"create_server"> = (props) => { setTimeout(() => navigate(`/server/${server.id}`)); }, submit: { - children: t("app.special.modals.actions.create"), + children: t('app.special.modals.actions.create'), }, }); }; diff --git a/packages/client/components/modal/modals/CustomStatus.tsx b/packages/client/components/modal/modals/CustomStatus.tsx index 33d141a97..9b0297f5f 100644 --- a/packages/client/components/modal/modals/CustomStatus.tsx +++ b/packages/client/components/modal/modals/CustomStatus.tsx @@ -1,28 +1,28 @@ -import { useTranslation } from "@revolt/i18n"; +import { useTranslation } from '@revolt/i18n'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal for editing user's custom status */ -const CustomStatus: PropGenerator<"custom_status"> = (props) => { +const CustomStatus: PropGenerator<'custom_status'> = (props) => { const t = useTranslation(); return createFormModal({ modalProps: { - title: t("app.context_menu.set_custom_status"), + title: t('app.context_menu.set_custom_status'), }, schema: { - text: "text", + text: 'text', }, defaults: { text: props.client.user?.status?.text as string, }, data: { text: { - field: t("app.context_menu.custom_status"), - "use:autoComplete": true, + field: t('app.context_menu.custom_status'), + 'use:autoComplete': true, }, }, callback: ({ text }) => @@ -33,7 +33,7 @@ const CustomStatus: PropGenerator<"custom_status"> = (props) => { }, }), submit: { - children: t("app.special.modals.actions.save"), + children: t('app.special.modals.actions.save'), }, }); }; diff --git a/packages/client/components/modal/modals/DeleteBot.tsx b/packages/client/components/modal/modals/DeleteBot.tsx index cb795045f..f188ff3e5 100644 --- a/packages/client/components/modal/modals/DeleteBot.tsx +++ b/packages/client/components/modal/modals/DeleteBot.tsx @@ -1,27 +1,27 @@ -import { useTranslation } from "@revolt/i18n"; +import { useTranslation } from '@revolt/i18n'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal to delete a bot */ -const DeleteBot: PropGenerator<"delete_bot"> = (props) => { +const DeleteBot: PropGenerator<'delete_bot'> = (props) => { const t = useTranslation(); return createFormModal({ modalProps: { - title: t("app.special.modals.prompt.confirm_delete", { + title: t('app.special.modals.prompt.confirm_delete', { name: props.bot.user!.displayName, }), - description: t("app.special.modals.prompt.confirm_delete_long"), + description: t('app.special.modals.prompt.confirm_delete_long'), }, schema: {}, data: {}, callback: () => props.bot.delete(), submit: { - variant: "error", - children: t("app.special.modals.actions.delete"), + variant: 'error', + children: t('app.special.modals.actions.delete'), }, }); }; diff --git a/packages/client/components/modal/modals/DeleteChannel.tsx b/packages/client/components/modal/modals/DeleteChannel.tsx index 63583d0b6..a8657ebfa 100644 --- a/packages/client/components/modal/modals/DeleteChannel.tsx +++ b/packages/client/components/modal/modals/DeleteChannel.tsx @@ -1,40 +1,40 @@ -import { useTranslation } from "@revolt/i18n"; +import { useTranslation } from '@revolt/i18n'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal to delete a channel */ -const DeleteChannel: PropGenerator<"delete_channel"> = (props) => { +const DeleteChannel: PropGenerator<'delete_channel'> = (props) => { const t = useTranslation(); const i18nKey = `app.special.modals.prompt.${ - props.channel.type === "DirectMessage" - ? "confirm_close_dm" - : props.channel.type === "Group" - ? "confirm_leave" - : "confirm_delete" + props.channel.type === 'DirectMessage' + ? 'confirm_close_dm' + : props.channel.type === 'Group' + ? 'confirm_leave' + : 'confirm_delete' }`; const i18nKeyAction = - props.channel.type === "DirectMessage" - ? "close" - : props.channel.type === "Group" - ? "leave" - : "delete"; + props.channel.type === 'DirectMessage' + ? 'close' + : props.channel.type === 'Group' + ? 'leave' + : 'delete'; return createFormModal({ modalProps: { title: t(i18nKey, { name: props.channel.name ?? props.channel.recipient?.displayName, }), - description: t(i18nKey + "_long"), + description: t(i18nKey + '_long'), }, schema: {}, data: {}, callback: () => props.channel.delete(), submit: { - variant: "error", + variant: 'error', children: t(`app.special.modals.actions.${i18nKeyAction}`), }, }); diff --git a/packages/client/components/modal/modals/DeleteMessage.tsx b/packages/client/components/modal/modals/DeleteMessage.tsx index 661fd2911..e1cfaec75 100644 --- a/packages/client/components/modal/modals/DeleteMessage.tsx +++ b/packages/client/components/modal/modals/DeleteMessage.tsx @@ -1,32 +1,32 @@ -import { useTranslation } from "@revolt/i18n"; +import { useTranslation } from '@revolt/i18n'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal to delete a message */ -const DeleteMessage: PropGenerator<"delete_message"> = (props) => { +const DeleteMessage: PropGenerator<'delete_message'> = (props) => { const t = useTranslation(); return createFormModal({ modalProps: { - title: t("app.context_menu.delete_message"), - description: t("app.special.modals.prompt.confirm_delete_message_long"), + title: t('app.context_menu.delete_message'), + description: t('app.special.modals.prompt.confirm_delete_message_long'), }, schema: { - message: "custom", + message: 'custom', }, data: { message: { // TODO: find a fix or render part of it? - element: "MESSAGE", + element: 'MESSAGE', }, }, callback: () => props.message.delete(), submit: { - variant: "error", - children: t("app.special.modals.actions.delete"), + variant: 'error', + children: t('app.special.modals.actions.delete'), }, }); }; diff --git a/packages/client/components/modal/modals/DeleteServer.tsx b/packages/client/components/modal/modals/DeleteServer.tsx index 9672bbc75..b7cf505d1 100644 --- a/packages/client/components/modal/modals/DeleteServer.tsx +++ b/packages/client/components/modal/modals/DeleteServer.tsx @@ -1,23 +1,23 @@ -import { useClient } from "@revolt/client"; -import { useTranslation } from "@revolt/i18n"; +import { useClient } from '@revolt/client'; +import { useTranslation } from '@revolt/i18n'; -import { modalController } from ".."; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { modalController } from '..'; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal to delete a server */ -const DeleteServer: PropGenerator<"delete_server"> = (props) => { +const DeleteServer: PropGenerator<'delete_server'> = (props) => { const t = useTranslation(); const client = useClient(); return createFormModal({ modalProps: { - title: t("app.special.modals.prompt.confirm_delete", { + title: t('app.special.modals.prompt.confirm_delete', { name: props.server.name, }), - description: t("app.special.modals.prompt.confirm_delete_long"), + description: t('app.special.modals.prompt.confirm_delete_long'), }, schema: {}, data: {}, @@ -27,8 +27,8 @@ const DeleteServer: PropGenerator<"delete_server"> = (props) => { await props.server.delete(); // TODO: should use ticket in API }, submit: { - variant: "error", - children: t("app.special.modals.actions.delete"), + variant: 'error', + children: t('app.special.modals.actions.delete'), }, }); }; diff --git a/packages/client/components/modal/modals/EditDisplayName.tsx b/packages/client/components/modal/modals/EditDisplayName.tsx index 561583a82..9a8d6742f 100644 --- a/packages/client/components/modal/modals/EditDisplayName.tsx +++ b/packages/client/components/modal/modals/EditDisplayName.tsx @@ -1,12 +1,12 @@ -import { useTranslation } from "@revolt/i18n"; +import { useTranslation } from '@revolt/i18n'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal for editing display name */ -const EditDisplayName: PropGenerator<"edit_display_name"> = (props) => { +const EditDisplayName: PropGenerator<'edit_display_name'> = (props) => { const t = useTranslation(); async function applyName(display_name?: string) { @@ -15,33 +15,33 @@ const EditDisplayName: PropGenerator<"edit_display_name"> = (props) => { } else { await props.user.edit({ // @ts-expect-error missing in types - remove: ["DisplayName"], + remove: ['DisplayName'], }); } } return createFormModal({ modalProps: { - title: t("app.special.modals.account.change.display_name"), + title: t('app.special.modals.account.change.display_name'), }, schema: { - display_name: "text", + display_name: 'text', }, data: { display_name: { - field: "Display Name", - placeholder: "Choose a display name", + field: 'Display Name', + placeholder: 'Choose a display name', }, }, callback: ({ display_name }) => applyName(display_name), submit: { - children: t("app.special.modals.actions.update"), + children: t('app.special.modals.actions.update'), }, actions: [ { - type: "button", - variant: "plain", - children: "Clear", + type: 'button', + variant: 'plain', + children: 'Clear', async onClick() { await applyName(); return true; diff --git a/packages/client/components/modal/modals/EditEmail.tsx b/packages/client/components/modal/modals/EditEmail.tsx index eea1b1c12..d16feefea 100644 --- a/packages/client/components/modal/modals/EditEmail.tsx +++ b/packages/client/components/modal/modals/EditEmail.tsx @@ -1,36 +1,36 @@ -import { useTranslation } from "@revolt/i18n"; +import { useTranslation } from '@revolt/i18n'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal for editing email */ -const EditEmail: PropGenerator<"edit_email"> = (props) => { +const EditEmail: PropGenerator<'edit_email'> = (props) => { const t = useTranslation(); return createFormModal({ modalProps: { - title: t("app.special.modals.account.change.email"), + title: t('app.special.modals.account.change.email'), }, schema: { - email: "text", - currentPassword: "password", + email: 'text', + currentPassword: 'password', }, data: { email: { - field: t("login.email"), - placeholder: t("login.enter.username"), + field: t('login.email'), + placeholder: t('login.enter.username'), }, currentPassword: { - field: t("login.current_password"), - placeholder: t("login.enter.current_password"), + field: t('login.current_password'), + placeholder: t('login.enter.current_password'), }, }, callback: async ({ email, currentPassword }) => void (await props.client.account.changeEmail(email, currentPassword)), submit: { - children: t("app.special.modals.actions.update"), + children: t('app.special.modals.actions.update'), }, }); }; diff --git a/packages/client/components/modal/modals/EditKeybind.tsx b/packages/client/components/modal/modals/EditKeybind.tsx index 28d800faa..4386f9727 100644 --- a/packages/client/components/modal/modals/EditKeybind.tsx +++ b/packages/client/components/modal/modals/EditKeybind.tsx @@ -1,22 +1,19 @@ -import { BiRegularReset } from "solid-icons/bi"; -import { createSignal, onMount } from "solid-js"; +import { useTranslation } from '@revolt/i18n'; +import type { KeyComboSequence as TKeySequence } from '@revolt/keybinds'; +import { KEYBINDING_MODIFIER_KEYS } from '@revolt/keybinds'; +import { Button, KeySequence, styled } from '@revolt/ui'; +import { BiRegularReset } from 'solid-icons/bi'; +import { createSignal, onMount } from 'solid-js'; -import { useTranslation } from "@revolt/i18n"; -import { - KEYBINDING_MODIFIER_KEYS, - KeyComboSequence as TKeySequence, -} from "@revolt/keybinds"; -import { Button, KeySequence, styled } from "@revolt/ui"; +import type { PropGenerator } from '../types'; -import { PropGenerator } from "../types"; - -const Container = styled("div", "EditKeybind-Container")` +const Container = styled('div', 'EditKeybind-Container')` display: flex; gap: 1ch; place-items: center; `; -const KeybindInput = styled("output", "EditKeybind-KeybindInput")` +const KeybindInput = styled('output', 'EditKeybind-KeybindInput')` cursor: pointer; display: flex; align-items: center; @@ -34,11 +31,11 @@ const KeybindInput = styled("output", "EditKeybind-KeybindInput")` `; const REPLACEMENTS: Record<string, string> = { - " ": "Space", + ' ': 'Space', }; // TODO: maybe add warning if the user doesn't have a modifier included? -export const EditKeybind: PropGenerator<"edit_keybind"> = (props) => { +export const EditKeybind: PropGenerator<'edit_keybind'> = (props) => { const t = useTranslation(); const [sequence, setSequence] = createSignal<TKeySequence>([]); @@ -118,7 +115,7 @@ export const EditKeybind: PropGenerator<"edit_keybind"> = (props) => { return { // TODO: the way this reads and looks is awkward, find a better way - title: t("app.special.modals.edit_keybind.title", { + title: t('app.special.modals.edit_keybind.title', { action: t(`app.settings.pages.keybinds.action.${props.action}.title`), }), actions: [ @@ -129,12 +126,12 @@ export const EditKeybind: PropGenerator<"edit_keybind"> = (props) => { return true; }, confirmation: true, - children: t("app.special.modals.actions.ok"), + children: t('app.special.modals.actions.ok'), }, { onClick: () => true, confirmation: false, - children: t("app.special.modals.actions.cancel"), + children: t('app.special.modals.actions.cancel'), }, ], children: ( @@ -152,7 +149,7 @@ export const EditKeybind: PropGenerator<"edit_keybind"> = (props) => { // title="clear input" onPress={reset} > - <BiRegularReset size={20}></BiRegularReset> + <BiRegularReset size={20} /> </Button> </Container> ), diff --git a/packages/client/components/modal/modals/EditPassword.tsx b/packages/client/components/modal/modals/EditPassword.tsx index f16a9bbd2..180e051c4 100644 --- a/packages/client/components/modal/modals/EditPassword.tsx +++ b/packages/client/components/modal/modals/EditPassword.tsx @@ -1,30 +1,30 @@ -import { useTranslation } from "@revolt/i18n"; +import { useTranslation } from '@revolt/i18n'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal for editing password */ -const EditPassword: PropGenerator<"edit_password"> = (props) => { +const EditPassword: PropGenerator<'edit_password'> = (props) => { const t = useTranslation(); return createFormModal({ modalProps: { - title: t("app.special.modals.account.change.password"), + title: t('app.special.modals.account.change.password'), }, schema: { - password: "password", - currentPassword: "password", + password: 'password', + currentPassword: 'password', }, data: { password: { - field: t("login.password"), - placeholder: t("login.enter.password"), + field: t('login.password'), + placeholder: t('login.enter.password'), }, currentPassword: { - field: t("login.current_password"), - placeholder: t("login.enter.current_password"), + field: t('login.current_password'), + placeholder: t('login.enter.current_password'), }, }, callback: async ({ password, currentPassword }) => @@ -33,7 +33,7 @@ const EditPassword: PropGenerator<"edit_password"> = (props) => { currentPassword )), submit: { - children: t("app.special.modals.actions.update"), + children: t('app.special.modals.actions.update'), }, }); }; diff --git a/packages/client/components/modal/modals/EditUsername.tsx b/packages/client/components/modal/modals/EditUsername.tsx index 765e0bab1..8ec487a54 100644 --- a/packages/client/components/modal/modals/EditUsername.tsx +++ b/packages/client/components/modal/modals/EditUsername.tsx @@ -1,36 +1,36 @@ -import { useTranslation } from "@revolt/i18n"; +import { useTranslation } from '@revolt/i18n'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal for editing username */ -const EditUsername: PropGenerator<"edit_username"> = (props) => { +const EditUsername: PropGenerator<'edit_username'> = (props) => { const t = useTranslation(); return createFormModal({ modalProps: { - title: t("app.special.modals.account.change.username"), + title: t('app.special.modals.account.change.username'), }, schema: { - username: "text", - password: "password", + username: 'text', + password: 'password', }, data: { username: { - field: "Username", - placeholder: t("login.enter.username"), + field: 'Username', + placeholder: t('login.enter.username'), }, password: { - field: "Current Password", - placeholder: t("login.enter.current_password"), + field: 'Current Password', + placeholder: t('login.enter.current_password'), }, }, callback: async ({ username, password }) => void (await props.client.user!.changeUsername(username, password)), submit: { - children: t("app.special.modals.actions.update"), + children: t('app.special.modals.actions.update'), }, }); }; diff --git a/packages/client/components/modal/modals/Error.tsx b/packages/client/components/modal/modals/Error.tsx index 7545560e0..617deabe4 100644 --- a/packages/client/components/modal/modals/Error.tsx +++ b/packages/client/components/modal/modals/Error.tsx @@ -1,20 +1,20 @@ -import { useTranslation } from "@revolt/i18n"; +import { useTranslation } from '@revolt/i18n'; -import { PropGenerator } from "../types"; +import type { PropGenerator } from '../types'; /** * Modal to notify the user they've been signed out */ -const Error: PropGenerator<"error"> = (props) => { +const Error: PropGenerator<'error'> = (props) => { const t = useTranslation(); return { - title: t("app.special.modals.signed_out"), + title: t('app.special.modals.signed_out'), children: <span>{props.error}</span>, actions: [ { - children: t("app.special.modals.actions.ok"), - palette: "secondary", + children: t('app.special.modals.actions.ok'), + palette: 'secondary', onClick() { return true; }, diff --git a/packages/client/components/modal/modals/ImageViewer.tsx b/packages/client/components/modal/modals/ImageViewer.tsx index ba4442095..2067633b2 100644 --- a/packages/client/components/modal/modals/ImageViewer.tsx +++ b/packages/client/components/modal/modals/ImageViewer.tsx @@ -1,9 +1,9 @@ -import { PropGenerator } from "../types"; +import type { PropGenerator } from '../types'; /** * Modal for viewing images */ -const ImageViewer: PropGenerator<"image_viewer"> = (props) => { +const ImageViewer: PropGenerator<'image_viewer'> = (props) => { return { _children(props) { return <h1>hi!</h1>; diff --git a/packages/client/components/modal/modals/JoinServer.tsx b/packages/client/components/modal/modals/JoinServer.tsx index 7f9f91c9c..1087efb39 100644 --- a/packages/client/components/modal/modals/JoinServer.tsx +++ b/packages/client/components/modal/modals/JoinServer.tsx @@ -1,30 +1,30 @@ -import { useTranslation } from "@revolt/i18n"; -import { useNavigate } from "@revolt/routing"; +import { useTranslation } from '@revolt/i18n'; +import { useNavigate } from '@revolt/routing'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; const RE_INVITE_URL = /(?:invite|rvlt.gg)\/([a-z0-9]+)/gi; /** * Modal to join a server */ -const JoinServer: PropGenerator<"join_server"> = (props) => { +const JoinServer: PropGenerator<'join_server'> = (props) => { const t = useTranslation(); const navigate = useNavigate(); return createFormModal({ modalProps: { - title: "Join a server", + title: 'Join a server', description: <>Use a code or invite link</>, }, schema: { - link: "text", + link: 'text', }, data: { link: { - field: "code", - placeholder: "rvlt.gg/wVEJDGVs", + field: 'code', + placeholder: 'rvlt.gg/wVEJDGVs', }, }, callback: async ({ link }) => { @@ -37,7 +37,7 @@ const JoinServer: PropGenerator<"join_server"> = (props) => { // TODO: replace const result = await props.client.api.post(`/invites/${code}`); - if (result.type === "Server") { + if (result.type === 'Server') { navigate(`/server/${result.server._id}`); } else { // TODO: group @@ -45,7 +45,7 @@ const JoinServer: PropGenerator<"join_server"> = (props) => { } }, submit: { - children: "Join", + children: 'Join', }, }); }; diff --git a/packages/client/components/modal/modals/KickMember.tsx b/packages/client/components/modal/modals/KickMember.tsx index 7b7511778..9016c7df4 100644 --- a/packages/client/components/modal/modals/KickMember.tsx +++ b/packages/client/components/modal/modals/KickMember.tsx @@ -1,28 +1,28 @@ -import { useTranslation } from "@revolt/i18n"; -import { Avatar, Column } from "@revolt/ui"; +import { useTranslation } from '@revolt/i18n'; +import { Avatar, Column } from '@revolt/ui'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal to kick server member */ -const KickMember: PropGenerator<"kick_member"> = (props) => { +const KickMember: PropGenerator<'kick_member'> = (props) => { const t = useTranslation(); return createFormModal({ modalProps: { - title: t("app.context_menu.kick_member"), + title: t('app.context_menu.kick_member'), }, schema: { - member: "custom", + member: 'custom', }, data: { member: { element: ( - <Column align="center"> + <Column align='center'> <Avatar src={props.member.user?.animatedAvatarURL} size={64} /> - {t("app.special.modals.prompt.confirm_kick", { + {t('app.special.modals.prompt.confirm_kick', { name: props.member.user?.username as string, })} </Column> @@ -31,8 +31,8 @@ const KickMember: PropGenerator<"kick_member"> = (props) => { }, callback: () => props.member.kick(), submit: { - variant: "error", - children: t("app.special.modals.actions.ban"), + variant: 'error', + children: t('app.special.modals.actions.ban'), }, }); }; diff --git a/packages/client/components/modal/modals/LeaveServer.tsx b/packages/client/components/modal/modals/LeaveServer.tsx index 387558cf2..93ba7f8a0 100644 --- a/packages/client/components/modal/modals/LeaveServer.tsx +++ b/packages/client/components/modal/modals/LeaveServer.tsx @@ -1,34 +1,34 @@ -import { useTranslation } from "@revolt/i18n"; +import { useTranslation } from '@revolt/i18n'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal to leave a server */ -const LeaveServer: PropGenerator<"leave_server"> = (props) => { +const LeaveServer: PropGenerator<'leave_server'> = (props) => { const t = useTranslation(); return createFormModal({ modalProps: { - title: t("app.special.modals.prompt.confirm_leave", { + title: t('app.special.modals.prompt.confirm_leave', { name: props.server.name, }), - description: t("app.special.modals.prompt.confirm_leave_long"), + description: t('app.special.modals.prompt.confirm_leave_long'), }, schema: { - silent: "checkbox", + silent: 'checkbox', }, data: { silent: { - title: t("app.special.modals.prompt.silent_leave"), - description: t("app.special.modals.prompt.members_not_notified"), + title: t('app.special.modals.prompt.silent_leave'), + description: t('app.special.modals.prompt.members_not_notified'), }, }, callback: (data) => props.server.delete(data.silent), submit: { - variant: "error", - children: t("app.special.modals.actions.leave"), + variant: 'error', + children: t('app.special.modals.actions.leave'), }, }); }; diff --git a/packages/client/components/modal/modals/MFAEnableTOTP.tsx b/packages/client/components/modal/modals/MFAEnableTOTP.tsx index e3c0efd5e..bb9cda1ca 100644 --- a/packages/client/components/modal/modals/MFAEnableTOTP.tsx +++ b/packages/client/components/modal/modals/MFAEnableTOTP.tsx @@ -1,10 +1,9 @@ -import { createSignal } from "solid-js"; -import { QRCodeSVG } from "solid-qr-code"; +import { useTranslation } from '@revolt/i18n'; +import { Column, Input, styled, Typography } from '@revolt/ui'; +import { createSignal } from 'solid-js'; +import { QRCodeSVG } from 'solid-qr-code'; -import { useTranslation } from "@revolt/i18n"; -import { Column, Input, Typography, styled } from "@revolt/ui"; - -import { PropGenerator } from "../types"; +import type { PropGenerator } from '../types'; /** * Wrapper element for the raw TOTP code @@ -16,7 +15,7 @@ const Code = styled.code` /** * Wrapper element for the QR code */ -const Qr = styled("div", "Qr")` +const Qr = styled('div', 'Qr')` border-radius: 4px; background: white; @@ -30,9 +29,9 @@ const Qr = styled("div", "Qr")` /** * Modal to display QR code and secret key for MFA and accept the correct code */ -const MFAEnableTOTP: PropGenerator<"mfa_enable_totp"> = (props) => { +const MFAEnableTOTP: PropGenerator<'mfa_enable_totp'> = (props) => { const t = useTranslation(); - const [value, setValue] = createSignal(""); + const [value, setValue] = createSignal(''); /** * Generate OTP URI @@ -41,21 +40,21 @@ const MFAEnableTOTP: PropGenerator<"mfa_enable_totp"> = (props) => { `otpauth://totp/Revolt:${props.identifier}?secret=${props.secret}&issuer=Revolt`; return { - title: t("app.special.modals.mfa.enable_totp"), - description: t("app.special.modals.mfa.prompt_totp"), + title: t('app.special.modals.mfa.enable_totp'), + description: t('app.special.modals.mfa.prompt_totp'), actions: [ { - palette: "primary", - children: t("app.special.modals.actions.continue"), + palette: 'primary', + children: t('app.special.modals.actions.continue'), onClick: () => { - props.callback(value().trim().replace(/\s/g, "")); + props.callback(value().trim().replace(/\s/g, '')); return true; }, confirmation: true, }, { - palette: "plain", - children: t("app.special.modals.actions.cancel"), + palette: 'plain', + children: t('app.special.modals.actions.cancel'), onClick: () => { props.callback(); return true; @@ -65,13 +64,13 @@ const MFAEnableTOTP: PropGenerator<"mfa_enable_totp"> = (props) => { nonDismissable: true, children: ( <> - <Column align="center"> + <Column align='center'> <Qr> <QRCodeSVG value={uri()} - backgroundColor="white" - foregroundColor="black" - level="medium" + backgroundColor='white' + foregroundColor='black' + level='medium' height={140} width={140} backgroundAlpha={1} @@ -81,8 +80,8 @@ const MFAEnableTOTP: PropGenerator<"mfa_enable_totp"> = (props) => { <Code>{props.secret}</Code> </Column> - <Typography variant="label"> - {t("app.special.modals.mfa.enter_code")} + <Typography variant='label'> + {t('app.special.modals.mfa.enter_code')} </Typography> <Input diff --git a/packages/client/components/modal/modals/MFAFlow.tsx b/packages/client/components/modal/modals/MFAFlow.tsx index ad1499417..156f04c83 100644 --- a/packages/client/components/modal/modals/MFAFlow.tsx +++ b/packages/client/components/modal/modals/MFAFlow.tsx @@ -1,30 +1,28 @@ -import { BiRegularArchive, BiSolidKey, BiSolidKeyboard } from "solid-icons/bi"; +import { useTranslation } from '@revolt/i18n'; +import { CategoryButton, Input, Preloader, Typography } from '@revolt/ui'; +import type { API } from 'revolt.js'; +import { BiRegularArchive, BiSolidKey, BiSolidKeyboard } from 'solid-icons/bi'; import { - For, - Match, - Switch, createEffect, createSignal, + For, + Match, onMount, -} from "solid-js"; - -import type { API } from "revolt.js"; - -import { useTranslation } from "@revolt/i18n"; -import { CategoryButton, Input, Preloader, Typography } from "@revolt/ui"; + Switch, +} from 'solid-js'; -import { PropGenerator } from "../types"; +import type { PropGenerator } from '../types'; /** * Modal to create an MFA ticket */ -const MFAFlow: PropGenerator<"mfa_flow"> = (props) => { +const MFAFlow: PropGenerator<'mfa_flow'> = (props) => { const t = useTranslation(); // Keep track of available methods const [methods, setMethods] = createSignal<API.MFAMethod[] | undefined>( // eslint-disable-next-line solid/reactivity - props.state === "unknown" ? props.available_methods : undefined + props.state === 'unknown' ? props.available_methods : undefined ); // Current state of the modal @@ -33,7 +31,7 @@ const MFAFlow: PropGenerator<"mfa_flow"> = (props) => { // Fetch available methods if they have not been provided. onMount(() => { - if (!methods() && props.state === "known") { + if (!methods() && props.state === 'known') { setMethods(props.mfa.availableMethods); } }); @@ -42,7 +40,7 @@ const MFAFlow: PropGenerator<"mfa_flow"> = (props) => { createEffect(() => { const list = methods(); if (list) { - setSelected(list.find((entry) => entry !== "Recovery")); + setSelected(list.find((entry) => entry !== 'Recovery')); } }); @@ -53,7 +51,7 @@ const MFAFlow: PropGenerator<"mfa_flow"> = (props) => { const mfa_response = response(); if (!mfa_response) return false; - if (props.state === "known") { + if (props.state === 'known') { const ticket = await props.mfa.createTicket(mfa_response); props.callback(ticket); } else { @@ -64,11 +62,11 @@ const MFAFlow: PropGenerator<"mfa_flow"> = (props) => { }; return { - title: t("app.special.modals.confirm"), + title: t('app.special.modals.confirm'), description: ( - <Switch fallback={t("app.special.modals.mfa.select_method")}> + <Switch fallback={t('app.special.modals.mfa.select_method')}> <Match when={selectedMethod()}> - {t("app.special.modals.mfa.confirm")} + {t('app.special.modals.mfa.confirm')} </Match> </Switch> ), @@ -76,16 +74,16 @@ const MFAFlow: PropGenerator<"mfa_flow"> = (props) => { selectedMethod() ? [ { - palette: "primary", - children: t("app.special.modals.actions.confirm"), + palette: 'primary', + children: t('app.special.modals.actions.confirm'), onClick: generateTicket, confirmation: true, }, { - palette: "plain", + palette: 'plain', children: t( `app.special.modals.actions.${ - methods()!.length === 1 ? "cancel" : "back" + methods()!.length === 1 ? 'cancel' : 'back' }` ), onClick: () => { @@ -100,8 +98,8 @@ const MFAFlow: PropGenerator<"mfa_flow"> = (props) => { ] : [ { - palette: "plain", - children: t("app.special.modals.actions.cancel"), + palette: 'plain', + children: t('app.special.modals.actions.cancel'), onClick: () => { props.callback(); return true; @@ -115,35 +113,35 @@ const MFAFlow: PropGenerator<"mfa_flow"> = (props) => { // or when switching to your password manager. nonDismissable: // eslint-disable-next-line solid/reactivity - props.state === "unknown" || typeof selectedMethod !== "undefined", + props.state === 'unknown' || typeof selectedMethod !== 'undefined', children: ( - <Switch fallback={<Preloader type="ring" />}> + <Switch fallback={<Preloader type='ring' />}> <Match when={selectedMethod()}> - <Typography variant="label"> + <Typography variant='label'> {t(`login.${selectedMethod()!.toLowerCase()}`)} </Typography> <Switch> - <Match when={selectedMethod() === "Password"}> + <Match when={selectedMethod() === 'Password'}> <Input - type="password" + type='password' value={(response() as { password: string })?.password} onChange={(e) => setResponse({ password: e.currentTarget.value }) } /> </Match> - <Match when={selectedMethod() === "Totp"}> + <Match when={selectedMethod() === 'Totp'}> <Input - type="text" + type='text' value={(response() as { totp_code: string })?.totp_code} onChange={(e) => setResponse({ totp_code: e.currentTarget.value }) } /> </Match> - <Match when={selectedMethod() === "Recovery"}> + <Match when={selectedMethod() === 'Recovery'}> <Input - type="text" + type='text' value={(response() as { recovery_code: string })?.recovery_code} onChange={(e) => setResponse({ recovery_code: e.currentTarget.value }) @@ -156,16 +154,16 @@ const MFAFlow: PropGenerator<"mfa_flow"> = (props) => { <For each={methods()}> {(method) => ( <CategoryButton - action="chevron" + action='chevron' icon={ <Switch> - <Match when={method === "Password"}> + <Match when={method === 'Password'}> <BiSolidKeyboard size={24} /> </Match> - <Match when={method === "Totp"}> + <Match when={method === 'Totp'}> <BiSolidKey size={24} /> </Match> - <Match when={method === "Recovery"}> + <Match when={method === 'Recovery'}> <BiRegularArchive size={24} /> </Match> </Switch> diff --git a/packages/client/components/modal/modals/MFARecovery.tsx b/packages/client/components/modal/modals/MFARecovery.tsx index e56a6c4d8..8677d506a 100644 --- a/packages/client/components/modal/modals/MFARecovery.tsx +++ b/packages/client/components/modal/modals/MFARecovery.tsx @@ -1,10 +1,9 @@ -import { For, createSignal } from "solid-js"; +import { useTranslation } from '@revolt/i18n'; +import { styled } from '@revolt/ui'; +import { createSignal, For } from 'solid-js'; -import { useTranslation } from "@revolt/i18n"; -import { styled } from "@revolt/ui"; - -import { modalController } from ".."; -import { PropGenerator } from "../types"; +import { modalController } from '..'; +import type { PropGenerator } from '../types'; /** * List of recovery codes @@ -28,7 +27,7 @@ const List = styled.div` /** * Modal to display a list of recovery codes */ -const MFARecovery: PropGenerator<"mfa_recovery"> = (props) => { +const MFARecovery: PropGenerator<'mfa_recovery'> = (props) => { const t = useTranslation(); // Keep track of changes to recovery codes @@ -49,18 +48,18 @@ const MFARecovery: PropGenerator<"mfa_recovery"> = (props) => { }; return { - title: t("app.special.modals.mfa.recovery_codes"), - description: t("app.special.modals.mfa.save_codes"), + title: t('app.special.modals.mfa.recovery_codes'), + description: t('app.special.modals.mfa.save_codes'), actions: [ { - palette: "primary", - children: t("app.special.modals.actions.done"), + palette: 'primary', + children: t('app.special.modals.actions.done'), onClick: () => true, confirmation: true, }, { - palette: "plain", - children: t("app.special.modals.actions.reset"), + palette: 'plain', + children: t('app.special.modals.actions.reset'), onClick: reset, }, ], @@ -69,7 +68,7 @@ const MFARecovery: PropGenerator<"mfa_recovery"> = (props) => { <For each={known()}> {(code, index) => ( <span> - {code} {index() !== known.length && <i>{","}</i>} + {code} {index() !== known.length && <i>{','}</i>} </span> )} </For> diff --git a/packages/client/components/modal/modals/Onboarding.tsx b/packages/client/components/modal/modals/Onboarding.tsx index 0459eeaab..8079d989f 100644 --- a/packages/client/components/modal/modals/Onboarding.tsx +++ b/packages/client/components/modal/modals/Onboarding.tsx @@ -1,31 +1,31 @@ -import { useTranslation } from "@revolt/i18n"; +import { useTranslation } from '@revolt/i18n'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; // TODO: port the onboarding modal design /** * Modal to pick a new username */ -const Onboarding: PropGenerator<"onboarding"> = (props) => { +const Onboarding: PropGenerator<'onboarding'> = (props) => { const t = useTranslation(); return createFormModal({ modalProps: { - title: "Choose username", + title: 'Choose username', }, schema: { - username: "text", + username: 'text', }, data: { username: { - field: "Username", + field: 'Username', }, }, callback: async ({ username }) => await props.callback(username), submit: { - children: "Good", + children: 'Good', }, }); }; diff --git a/packages/client/components/modal/modals/RenameSession.tsx b/packages/client/components/modal/modals/RenameSession.tsx index 59239ea51..901a9c58e 100644 --- a/packages/client/components/modal/modals/RenameSession.tsx +++ b/packages/client/components/modal/modals/RenameSession.tsx @@ -1,33 +1,33 @@ -import { useTranslation } from "@revolt/i18n"; +import { useTranslation } from '@revolt/i18n'; -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; /** * Modal for renaming session */ -const RenameSession: PropGenerator<"rename_session"> = (props) => { +const RenameSession: PropGenerator<'rename_session'> = (props) => { const t = useTranslation(); return createFormModal({ modalProps: { - title: "Rename Session", + title: 'Rename Session', }, schema: { - name: "text", + name: 'text', }, defaults: { name: props.session.name, }, data: { name: { - field: "Name", - placeholder: "Enter a new name for this session", + field: 'Name', + placeholder: 'Enter a new name for this session', }, }, callback: async ({ name }) => void (await props.session.rename(name)), submit: { - children: t("app.special.modals.actions.update"), + children: t('app.special.modals.actions.update'), }, }); }; diff --git a/packages/client/components/modal/modals/ReportContent.tsx b/packages/client/components/modal/modals/ReportContent.tsx index 8124299c8..08ad0300e 100644 --- a/packages/client/components/modal/modals/ReportContent.tsx +++ b/packages/client/components/modal/modals/ReportContent.tsx @@ -1,71 +1,71 @@ -import { API, Server, User } from "revolt.js"; +import { Message } from '@revolt/app'; +import { useTranslation } from '@revolt/i18n'; +import { Avatar, Column, Initials, styled } from '@revolt/ui'; +import type { API } from 'revolt.js'; +import { Server, User } from 'revolt.js'; -import { Message } from "@revolt/app"; -import { useTranslation } from "@revolt/i18n"; -import { Avatar, Column, Initials, styled } from "@revolt/ui"; - -import { createFormModal } from "../form"; -import { PropGenerator } from "../types"; +import { createFormModal } from '../form'; +import type { PropGenerator } from '../types'; const CONTENT_REPORT_REASONS: API.ContentReportReason[] = [ - "Illegal", - "IllegalGoods", - "IllegalExtortion", - "IllegalPornography", - "IllegalHacking", - "ExtremeViolence", - "PromotesHarm", - "UnsolicitedSpam", - "Raid", - "SpamAbuse", - "ScamsFraud", - "Malware", - "Harassment", - "NoneSpecified", + 'Illegal', + 'IllegalGoods', + 'IllegalExtortion', + 'IllegalPornography', + 'IllegalHacking', + 'ExtremeViolence', + 'PromotesHarm', + 'UnsolicitedSpam', + 'Raid', + 'SpamAbuse', + 'ScamsFraud', + 'Malware', + 'Harassment', + 'NoneSpecified', ]; const USER_REPORT_REASONS: API.UserReportReason[] = [ - "UnsolicitedSpam", - "SpamAbuse", - "InappropriateProfile", - "Impersonation", - "BanEvasion", - "Underage", - "NoneSpecified", + 'UnsolicitedSpam', + 'SpamAbuse', + 'InappropriateProfile', + 'Impersonation', + 'BanEvasion', + 'Underage', + 'NoneSpecified', ]; /** * Modal to report content */ -const ReportContent: PropGenerator<"report_content"> = (props) => { +const ReportContent: PropGenerator<'report_content'> = (props) => { const t = useTranslation(); return createFormModal({ modalProps: { title: `Tell us what's wrong with this ${ /* TEMP TODO */ props.target instanceof User - ? "user" + ? 'user' : props.target instanceof Server - ? "server" - : "message" + ? 'server' + : 'message' }`, }, schema: { - preview: "custom", - category: "combo", - detail: "text", + preview: 'custom', + category: 'combo', + detail: 'text', }, data: { preview: { element: ( <ContentContainer use:scrollable> {props.target instanceof User ? ( - <Column align="center"> + <Column align='center'> <Avatar src={props.target.animatedAvatarURL} size={64} /> {props.target.displayName} </Column> ) : props.target instanceof Server ? ( - <Column align="center"> + <Column align='center'> <Avatar src={props.target.animatedIconURL} fallback={<Initials input={props.target.name} />} @@ -82,8 +82,8 @@ const ReportContent: PropGenerator<"report_content"> = (props) => { category: { options: [ { - name: "Please select a reason", - value: "", + name: 'Please select a reason', + value: '', disabled: true, selected: true, }, @@ -99,41 +99,41 @@ const ReportContent: PropGenerator<"report_content"> = (props) => { value, })), ], - field: "Pick a category", + field: 'Pick a category', }, detail: { - field: "Give us some detail", + field: 'Give us some detail', }, }, callback: async ({ category, detail }) => { - if (!category || (category === "NoneSpecified" && !detail)) - throw "NoReasonProvided"; + if (!category || (category === 'NoneSpecified' && !detail)) + throw 'NoReasonProvided'; - await props.client.api.post("/safety/report", { + await props.client.api.post('/safety/report', { content: props.target instanceof User ? { - type: "User", + type: 'User', id: props.target.id, report_reason: category as API.UserReportReason, message_id: props.contextMessage?.id, } : props.target instanceof Server - ? { - type: "Server", - id: props.target.id, - report_reason: category as API.ContentReportReason, - } - : { - type: "Message", - id: props.target.id, - report_reason: category as API.ContentReportReason, - }, + ? { + type: 'Server', + id: props.target.id, + report_reason: category as API.ContentReportReason, + } + : { + type: 'Message', + id: props.target.id, + report_reason: category as API.ContentReportReason, + }, additional_context: detail, }); }, submit: { - children: "Report", + children: 'Report', }, }); }; diff --git a/packages/client/components/modal/modals/ServerIdentity.tsx b/packages/client/components/modal/modals/ServerIdentity.tsx index f38758e0b..fc0e5cd31 100644 --- a/packages/client/components/modal/modals/ServerIdentity.tsx +++ b/packages/client/components/modal/modals/ServerIdentity.tsx @@ -1,15 +1,14 @@ -import { Accessor, createEffect, createSignal } from "solid-js"; +import { useTranslation } from '@revolt/i18n'; +import { Avatar, Column, Input, MessageContainer, Username } from '@revolt/ui'; +import type { ServerMember } from 'revolt.js'; +import type { Accessor } from 'solid-js'; +import { createEffect, createSignal } from 'solid-js'; -import { ServerMember } from "revolt.js"; - -import { useTranslation } from "@revolt/i18n"; -import { Avatar, Column, Input, MessageContainer, Username } from "@revolt/ui"; - -import { PropGenerator } from "../types"; +import type { PropGenerator } from '../types'; function Preview(props: { nickname: Accessor<string>; member: ServerMember }) { createEffect(() => { - console.info("n:", props.nickname()); + console.info('n:', props.nickname()); }); return ( @@ -34,20 +33,20 @@ function Preview(props: { nickname: Accessor<string>; member: ServerMember }) { /** * Modal to update the user's server identity */ -const ServerIdentity: PropGenerator<"server_identity"> = (props) => { +const ServerIdentity: PropGenerator<'server_identity'> = (props) => { const t = useTranslation(); - const [nickname, setNickname] = createSignal(props.member.nickname ?? ""); + const [nickname, setNickname] = createSignal(props.member.nickname ?? ''); const [avatarFile, setAvatarFile] = createSignal<File>(); return { - title: t("app.special.popovers.server_identity.title", { + title: t('app.special.popovers.server_identity.title', { server: props.member.server!.name, }), children: ( <Column> {/* <span>developer ui</span> */} - <span>{t("app.special.popovers.server_identity.nickname")}</span> + <span>{t('app.special.popovers.server_identity.nickname')}</span> <Input value={nickname()} onChange={(e) => setNickname(e.currentTarget.value)} @@ -59,7 +58,7 @@ const ServerIdentity: PropGenerator<"server_identity"> = (props) => { ), actions: [ { - children: t("app.special.modals.actions.save"), + children: t('app.special.modals.actions.save'), async onClick() { await props.member.edit( nickname() @@ -67,7 +66,7 @@ const ServerIdentity: PropGenerator<"server_identity"> = (props) => { nickname: nickname(), } : { - remove: ["Nickname"], + remove: ['Nickname'], } ); diff --git a/packages/client/components/modal/modals/ServerInfo.tsx b/packages/client/components/modal/modals/ServerInfo.tsx index 23e92000c..11891af63 100644 --- a/packages/client/components/modal/modals/ServerInfo.tsx +++ b/packages/client/components/modal/modals/ServerInfo.tsx @@ -1,28 +1,27 @@ -import { BiRegularX } from "solid-icons/bi"; -import { Show } from "solid-js"; +import { useTranslation } from '@revolt/i18n'; +import { Markdown } from '@revolt/markdown'; +import { Button, Column, Row, Typography } from '@revolt/ui'; +import { BiRegularX } from 'solid-icons/bi'; +import { Show } from 'solid-js'; -import { useTranslation } from "@revolt/i18n"; -import { Markdown } from "@revolt/markdown"; -import { Button, Column, Row, Typography } from "@revolt/ui"; - -import { modalController } from ".."; -import { PropGenerator } from "../types"; +import { modalController } from '..'; +import type { PropGenerator } from '../types'; /** * Modal to display server information */ -const ServerInfo: PropGenerator<"server_info"> = (props, onClose) => { +const ServerInfo: PropGenerator<'server_info'> = (props, onClose) => { const t = useTranslation(); return { title: ( - <Row align="center"> + <Row align='center'> <Column grow> - <Typography variant="legacy-settings-title"> + <Typography variant='legacy-settings-title'> {props.server.name} </Typography> </Column> - <Button size="icon" variant="plain" onClick={onClose}> + <Button size='icon' variant='plain' onClick={onClose}> <BiRegularX size={36} /> </Button> </Row> @@ -36,31 +35,31 @@ const ServerInfo: PropGenerator<"server_info"> = (props, onClose) => { { // TODO: report server onClick: () => true, //report(server), - children: t("app.special.modals.actions.report"), - palette: "error", + children: t('app.special.modals.actions.report'), + palette: 'error', }, { onClick: () => { modalController.push({ - type: "server_identity", + type: 'server_identity', member: props.server.member!, }); return true; }, - children: "Edit Identity", - palette: "secondary", + children: 'Edit Identity', + palette: 'secondary', }, { onClick: () => { modalController.push({ - type: "settings", - config: "server", + type: 'settings', + config: 'server', context: props.server, }); return true; }, - children: "Settings", - palette: "secondary", + children: 'Settings', + palette: 'secondary', }, ], }; diff --git a/packages/client/components/modal/modals/Settings.tsx b/packages/client/components/modal/modals/Settings.tsx index cde815b9b..aea6405b3 100644 --- a/packages/client/components/modal/modals/Settings.tsx +++ b/packages/client/components/modal/modals/Settings.tsx @@ -1,16 +1,14 @@ -import { Show } from "solid-js"; -import { Portal } from "solid-js/web"; +import { Settings, SettingsConfigurations } from '@revolt/app'; +import { Show } from 'solid-js'; +import { Portal } from 'solid-js/web'; +import { Motion, Presence } from 'solid-motionone'; -import { Motion, Presence } from "@motionone/solid"; - -import { Settings, SettingsConfigurations } from "@revolt/app"; - -import { PropGenerator } from "../types"; +import type { PropGenerator } from '../types'; /** * Modal to display server information */ -const SettingsModal: PropGenerator<"settings"> = ({ +const SettingsModal: PropGenerator<'settings'> = ({ config: configKey, context, }) => { @@ -19,25 +17,25 @@ const SettingsModal: PropGenerator<"settings"> = ({ return { _children: (props) => { return ( - <Portal mount={document.getElementById("floating")!}> + <Portal mount={document.getElementById('floating')!}> <div style={{ - position: "fixed", - width: "100%", - height: "100vh", + position: 'fixed', + width: '100%', + height: '100vh', left: 0, top: 0, - "pointer-events": "none", + 'pointer-events': 'none', }} > <Presence> <Show when={props?.show}> <Motion.div style={{ - height: "100%", - "pointer-events": "all", - display: "flex", - background: "var(--colours-settings-background)", + height: '100%', + 'pointer-events': 'all', + display: 'flex', + background: 'var(--colours-settings-background)', }} initial={{ opacity: 0, scale: 1.1 }} animate={{ opacity: 1, scale: 1 }} diff --git a/packages/client/components/modal/modals/SignOutSessions.tsx b/packages/client/components/modal/modals/SignOutSessions.tsx index 0db87ac48..5ef8f6022 100644 --- a/packages/client/components/modal/modals/SignOutSessions.tsx +++ b/packages/client/components/modal/modals/SignOutSessions.tsx @@ -1,11 +1,11 @@ -import { useTranslation } from "@revolt/i18n"; +import { useTranslation } from '@revolt/i18n'; -import { PropGenerator } from "../types"; +import type { PropGenerator } from '../types'; /** * Modal to display server information */ -const SignOutSessions: PropGenerator<"sign_out_sessions"> = (props) => { +const SignOutSessions: PropGenerator<'sign_out_sessions'> = (props) => { const t = useTranslation(); /** @@ -14,17 +14,17 @@ const SignOutSessions: PropGenerator<"sign_out_sessions"> = (props) => { const confirm = () => props.client.sessions.deleteAll().then(() => true); return { - title: t("app.special.modals.sessions.title"), - children: t("app.special.modals.sessions.short"), + title: t('app.special.modals.sessions.title'), + children: t('app.special.modals.sessions.short'), actions: [ { - palette: "accent", + palette: 'accent', onClick: () => true, - children: t("app.special.modals.actions.cancel"), + children: t('app.special.modals.actions.cancel'), }, { onClick: confirm, - children: t("app.special.modals.sessions.accept"), + children: t('app.special.modals.sessions.accept'), }, ], }; diff --git a/packages/client/components/modal/modals/SignedOut.tsx b/packages/client/components/modal/modals/SignedOut.tsx index 6258dc066..c99e79d1e 100644 --- a/packages/client/components/modal/modals/SignedOut.tsx +++ b/packages/client/components/modal/modals/SignedOut.tsx @@ -1,20 +1,20 @@ -import { useTranslation } from "@revolt/i18n"; +import { useTranslation } from '@revolt/i18n'; -import { PropGenerator } from "../types"; +import type { PropGenerator } from '../types'; /** * Modal to notify the user they've been signed out * TODO: show if user is banned, etc */ -const SignedOut: PropGenerator<"signed_out"> = () => { +const SignedOut: PropGenerator<'signed_out'> = () => { const t = useTranslation(); return { - title: t("app.special.modals.signed_out"), + title: t('app.special.modals.signed_out'), actions: [ { - children: t("app.special.modals.actions.ok"), - palette: "secondary", + children: t('app.special.modals.actions.ok'), + palette: 'secondary', onClick() { return true; }, diff --git a/packages/client/components/modal/modals/index.tsx b/packages/client/components/modal/modals/index.tsx index d25d19e06..6bed7cce8 100644 --- a/packages/client/components/modal/modals/index.tsx +++ b/packages/client/components/modal/modals/index.tsx @@ -1,51 +1,50 @@ -import { JSX } from "solid-js"; +import { Modal } from '@revolt/ui'; +import type { JSX } from 'solid-js'; -import { Modal } from "@revolt/ui"; +import type { ActiveModal } from '..'; +import { modalController } from '..'; +import type { Modals as AllModals, PropGenerator } from '../types'; +import add_friend from './AddFriend'; +import ban_member from './BanMember'; +import changelog from './Changelog'; +import channel_info from './ChannelInfo'; +import clipboard from './Clipboard'; +import create_bot from './CreateBot'; +import create_category from './CreateCategory'; +import create_channel from './CreateChannel'; +import create_group from './CreateGroup'; +import create_invite from './CreateInvite'; +import create_or_join_server from './CreateOrJoinServer'; +import create_role from './CreateRole'; +import create_server from './CreateServer'; +import custom_status from './CustomStatus'; +import delete_bot from './DeleteBot'; +import delete_channel from './DeleteChannel'; +import delete_message from './DeleteMessage'; +import delete_server from './DeleteServer'; +import edit_display_name from './EditDisplayName'; +import edit_email from './EditEmail'; +import edit_keybind from './EditKeybind'; +import edit_password from './EditPassword'; +import edit_username from './EditUsername'; +import error from './Error'; +import image_viewer from './ImageViewer'; +import join_server from './JoinServer'; +import kick_member from './KickMember'; +import leave_server from './LeaveServer'; +import mfa_enable_totp from './MFAEnableTOTP'; +import mfa_flow from './MFAFlow'; +import mfa_recovery from './MFARecovery'; +import onboarding from './Onboarding'; +import rename_session from './RenameSession'; +import report_content from './ReportContent'; +import server_identity from './ServerIdentity'; +import server_info from './ServerInfo'; +import settings from './Settings'; +import signed_out from './SignedOut'; +import sign_out_sessions from './SignOutSessions'; -import { ActiveModal, modalController } from ".."; -import type { Modals as AllModals, PropGenerator } from "../types"; - -import add_friend from "./AddFriend"; -import ban_member from "./BanMember"; -import changelog from "./Changelog"; -import channel_info from "./ChannelInfo"; -import clipboard from "./Clipboard"; -import create_bot from "./CreateBot"; -import create_category from "./CreateCategory"; -import create_channel from "./CreateChannel"; -import create_group from "./CreateGroup"; -import create_invite from "./CreateInvite"; -import create_or_join_server from "./CreateOrJoinServer"; -import create_role from "./CreateRole"; -import create_server from "./CreateServer"; -import custom_status from "./CustomStatus"; -import delete_bot from "./DeleteBot"; -import delete_channel from "./DeleteChannel"; -import delete_message from "./DeleteMessage"; -import delete_server from "./DeleteServer"; -import edit_display_name from "./EditDisplayName"; -import edit_email from "./EditEmail"; -import edit_keybind from "./EditKeybind"; -import edit_password from "./EditPassword"; -import edit_username from "./EditUsername"; -import error from "./Error"; -import image_viewer from "./ImageViewer"; -import join_server from "./JoinServer"; -import kick_member from "./KickMember"; -import leave_server from "./LeaveServer"; -import mfa_enable_totp from "./MFAEnableTOTP"; -import mfa_flow from "./MFAFlow"; -import mfa_recovery from "./MFARecovery"; -import onboarding from "./Onboarding"; -import rename_session from "./RenameSession"; -import report_content from "./ReportContent"; -import server_identity from "./ServerIdentity"; -import server_info from "./ServerInfo"; -import settings from "./Settings"; -import sign_out_sessions from "./SignOutSessions"; -import signed_out from "./SignedOut"; - -const Modals: Record<AllModals["type"], PropGenerator<any>> = { +const Modals: Record<AllModals['type'], PropGenerator<any>> = { add_friend, ban_member, changelog, @@ -99,7 +98,7 @@ export function RenderModal(props: ActiveModal) { if (import.meta.env.DEV) { // eslint-disable-next-line solid/reactivity - console.info("modal:", props.props.type); + console.info('modal:', props.props.type); } // eslint-disable-next-line solid/reactivity diff --git a/packages/client/components/modal/types.ts b/packages/client/components/modal/types.ts index 3827175ca..92846ab27 100644 --- a/packages/client/components/modal/types.ts +++ b/packages/client/components/modal/types.ts @@ -1,243 +1,241 @@ -import type { ComponentProps, JSX } from "solid-js"; - -import { +import type { SettingsConfigurations } from '@revolt/app'; +import type { KeybindAction, KeyComboSequence } from '@revolt/keybinds'; +import type { Modal } from '@revolt/ui'; +import type { API, Bot, Channel, Client, File, + Message, MFA, MFATicket, - Message, Server, ServerMember, Session, User, -} from "revolt.js"; - -import { SettingsConfigurations } from "@revolt/app"; -import type { KeyComboSequence, KeybindAction } from "@revolt/keybinds"; -import type { Modal } from "@revolt/ui"; +} from 'revolt.js'; +import type { ComponentProps, JSX } from 'solid-js'; -import { ChangelogPost } from "./modals/Changelog"; +import type { ChangelogPost } from './modals/Changelog'; export type Modals = | { type: - | "add_friend" - | "create_group" - | "create_or_join_server" - | "create_server" - | "join_server" - | "custom_status" - | "edit_username" - | "edit_email" - | "edit_password"; + | 'add_friend' + | 'create_group' + | 'create_or_join_server' + | 'create_server' + | 'join_server' + | 'custom_status' + | 'edit_username' + | 'edit_email' + | 'edit_password'; client: Client; } | { - type: "edit_display_name"; + type: 'edit_display_name'; user: User; } | { - type: "rename_session"; + type: 'rename_session'; session: Session; } | { - type: "report_content"; + type: 'report_content'; client: Client; target: Server | User | Message; contextMessage?: Message; } | { - type: "report_success"; + type: 'report_success'; user?: User; } | { - type: "signed_out"; + type: 'signed_out'; } | ({ - type: "mfa_flow"; + type: 'mfa_flow'; } & ( | { mfa: MFA; - state: "known"; + state: 'known'; callback: (ticket?: MFATicket) => void; } | { - state: "unknown"; + state: 'unknown'; available_methods: API.MFAMethod[]; callback: (response?: API.MFAResponse) => void; } )) - | { type: "mfa_recovery"; codes: string[]; mfa: MFA } + | { type: 'mfa_recovery'; codes: string[]; mfa: MFA } | { - type: "mfa_enable_totp"; + type: 'mfa_enable_totp'; identifier: string; secret: string; callback: (code?: string) => void; } | { - type: "out_of_date"; + type: 'out_of_date'; version: string; } | { - type: "changelog"; + type: 'changelog'; initial?: number; posts: ChangelogPost[]; } | { - type: "sign_out_sessions"; + type: 'sign_out_sessions'; client: Client; } | { - type: "show_token"; + type: 'show_token'; name: string; token: string; } | { - type: "error"; + type: 'error'; error: string; } | { - type: "clipboard"; + type: 'clipboard'; text: string; } | { - type: "link_warning"; + type: 'link_warning'; link: string; callback: () => true; } | { - type: "pending_friend_requests"; + type: 'pending_friend_requests'; users: User[]; } | { - type: "modify_account"; + type: 'modify_account'; client: Client; - field: "username" | "email" | "password"; + field: 'username' | 'email' | 'password'; } | { - type: "server_identity"; + type: 'server_identity'; member: ServerMember; } | { - type: "channel_info"; + type: 'channel_info'; channel: Channel; } | { - type: "server_info"; + type: 'server_info'; server: Server; } | { - type: "image_viewer"; + type: 'image_viewer'; embed?: API.Image; file?: File; } | { - type: "user_picker"; + type: 'user_picker'; omit?: string[]; callback: (users: string[]) => Promise<void>; } | { - type: "user_profile"; + type: 'user_profile'; user_id: string; isPlaceholder?: boolean; placeholderProfile?: API.UserProfile; } | { - type: "create_bot"; + type: 'create_bot'; client: Client; onCreate: (bot: Bot) => void; } | { - type: "onboarding"; + type: 'onboarding'; callback: (username: string, loginAfterSuccess?: true) => Promise<void>; } | { - type: "create_role"; + type: 'create_role'; server: Server; callback: (id: string) => void; } | { - type: "leave_group"; + type: 'leave_group'; channel: Channel; } | { - type: "close_dm"; + type: 'close_dm'; channel: Channel; } | { - type: "delete_channel"; + type: 'delete_channel'; channel: Channel; } | { - type: "create_invite"; + type: 'create_invite'; channel: Channel; } | { - type: "leave_server"; + type: 'leave_server'; server: Server; } | { - type: "delete_server"; + type: 'delete_server'; server: Server; } | { - type: "delete_bot"; + type: 'delete_bot'; bot: Bot; } | { - type: "delete_message"; + type: 'delete_message'; message: Message; } | { - type: "kick_member"; + type: 'kick_member'; member: ServerMember; } | { - type: "ban_member"; + type: 'ban_member'; member: ServerMember; } | { - type: "unfriend_user"; + type: 'unfriend_user'; user: User; } | { - type: "block_user"; + type: 'block_user'; user: User; } | { - type: "create_channel"; + type: 'create_channel'; server: Server; cb?: (channel: Channel) => void; } | { - type: "create_category"; + type: 'create_category'; server: Server; } | { - type: "import_theme"; + type: 'import_theme'; } | { - type: "settings"; + type: 'settings'; config: keyof typeof SettingsConfigurations; // eslint-disable-next-line context?: any; } | { - type: "edit_keybind"; + type: 'edit_keybind'; action: KeybindAction; onSubmit: (sequence: KeyComboSequence) => void; }; -export type ModalProps<T extends Modals["type"]> = Modals & { type: T }; +export type ModalProps<T extends Modals['type']> = Modals & { type: T }; export type ReturnType = | ComponentProps<typeof Modal> | { _children: (props: { show: boolean; onClose: () => void }) => JSX.Element; }; -export type PropGenerator<T extends Modals["type"]> = ( +export type PropGenerator<T extends Modals['type']> = ( props: ModalProps<T>, onClose: () => void ) => ReturnType; diff --git a/packages/client/components/routing/index.tsx b/packages/client/components/routing/index.tsx index 50b5aab2e..8cf60434e 100644 --- a/packages/client/components/routing/index.tsx +++ b/packages/client/components/routing/index.tsx @@ -1,6 +1,5 @@ -import { Accessor } from "solid-js"; - -import { useLocation } from "@solidjs/router"; +import { useLocation } from '@solidjs/router'; +import { type Accessor } from 'solid-js'; /** * We re-export everything to prevent us importing @solidjs/router @@ -11,13 +10,13 @@ import { useLocation } from "@solidjs/router"; */ export { Navigate, - Router, Route, + Router, + useBeforeLeave, + useLocation, useNavigate, useParams, - useLocation, - useBeforeLeave, -} from "@solidjs/router"; +} from '@solidjs/router'; const RE_SERVER = /\/server\/([A-Z0-9]{26})/; const RE_CHANNEL = /\/channel\/([A-Z0-9]{26})/; @@ -32,7 +31,7 @@ const RE_MESSAGE_ID_EXACT = /** * Route parameters available globally */ -type GlobalParams = { +interface GlobalParams { /** * Server ID */ @@ -62,7 +61,7 @@ type GlobalParams = { * Exact match for message? */ exactMessage: boolean; -}; +} /** * Generate global params from path diff --git a/packages/client/components/state/index.tsx b/packages/client/components/state/index.tsx index 15944eab0..7f7e02e69 100644 --- a/packages/client/components/state/index.tsx +++ b/packages/client/components/state/index.tsx @@ -1,21 +1,21 @@ -import { JSX, Show, createSignal, onMount } from "solid-js"; -import { SetStoreFunction, createStore } from "solid-js/store"; - -import equal from "fast-deep-equal"; -import localforage from "localforage"; - -import { registerController } from "@revolt/common"; - -import { AbstractStore, Store } from "./stores"; -import { Auth } from "./stores/Auth"; -import { Draft } from "./stores/Draft"; -import { Experiments } from "./stores/Experiments"; -import { Keybinds } from "./stores/Keybinds"; -import { Layout } from "./stores/Layout"; -import { Locale } from "./stores/Locale"; -import { NotificationOptions } from "./stores/NotificationOptions"; -import { Ordering } from "./stores/Ordering"; -import { Settings } from "./stores/Settings"; +import { registerController } from '@revolt/common'; +import equal from 'fast-deep-equal'; +import localforage from 'localforage'; +import type { JSX } from 'solid-js'; +import { createSignal, onMount, Show } from 'solid-js'; +import type { SetStoreFunction } from 'solid-js/store'; +import { createStore } from 'solid-js/store'; + +import type { AbstractStore, Store } from './stores'; +import { Auth } from './stores/Auth'; +import { Draft } from './stores/Draft'; +import { Experiments } from './stores/Experiments'; +import { Keybinds } from './stores/Keybinds'; +import { Layout } from './stores/Layout'; +import { Locale } from './stores/Locale'; +import { NotificationOptions } from './stores/NotificationOptions'; +import { Ordering } from './stores/Ordering'; +import { Settings } from './stores/Settings'; /** * Introduce some delay before writing state to disk @@ -25,7 +25,7 @@ const DISK_WRITE_WAIT_MS = 1200; /** * Stores for which we don't want to wait to write to */ -const IGNORE_WRITE_DELAY = ["auth"]; +const IGNORE_WRITE_DELAY = ['auth']; /** * Global application state @@ -85,7 +85,7 @@ export class State { this.setStore = setStore; this.writeQueue = {}; - registerController("state", this); + registerController('state', this); } /** @@ -118,7 +118,7 @@ export class State { ); if (import.meta.env.DEV) { - console.info("Wrote state to disk."); + console.info('Wrote state to disk.'); } }, IGNORE_WRITE_DELAY.includes(key) ? 0 : DISK_WRITE_WAIT_MS @@ -134,7 +134,7 @@ export class State { // run side-effects if (import.meta.env.DEV) { - console.info("[store] updated data", args[0]); + console.info('[store] updated data', args[0]); } }; diff --git a/packages/client/components/state/stores/Auth.ts b/packages/client/components/state/stores/Auth.ts index 2933d5a08..cd1270eb6 100644 --- a/packages/client/components/state/stores/Auth.ts +++ b/packages/client/components/state/stores/Auth.ts @@ -1,34 +1,33 @@ -import { TransitionType } from "@revolt/client/Controller"; -import { CONFIGURATION, getController } from "@revolt/common"; +import { TransitionType } from '@revolt/client/Controller'; +import { CONFIGURATION, getController } from '@revolt/common'; -import { State } from ".."; +import type { State } from '..'; +import { AbstractStore } from '.'; -import { AbstractStore } from "."; - -export type Session = { +export interface Session { _id: string; token: string; userId: string; valid: boolean; -}; +} -export type TypeAuth = { +export interface TypeAuth { /** * Session information */ session?: Session; -}; +} /** * Authentication details store */ -export class Auth extends AbstractStore<"auth", TypeAuth> { +export class Auth extends AbstractStore<'auth', TypeAuth> { /** * Construct store * @param state State */ constructor(state: State) { - super(state, "auth"); + super(state, 'auth'); } /** @@ -37,7 +36,7 @@ export class Auth extends AbstractStore<"auth", TypeAuth> { hydrate(): void { if (CONFIGURATION.DEVELOPMENT_TOKEN && CONFIGURATION.DEVELOPMENT_USER_ID) { this.setSession({ - _id: CONFIGURATION.DEVELOPMENT_SESSION_ID ?? "0", + _id: CONFIGURATION.DEVELOPMENT_SESSION_ID ?? '0', token: CONFIGURATION.DEVELOPMENT_TOKEN, userId: CONFIGURATION.DEVELOPMENT_USER_ID, valid: true, @@ -46,7 +45,7 @@ export class Auth extends AbstractStore<"auth", TypeAuth> { const session = this.getSession(); if (session) { - const clientController = getController("client"); + const clientController = getController('client'); clientController.lifecycle.transition({ type: TransitionType.LoginCached, session, @@ -68,11 +67,11 @@ export class Auth extends AbstractStore<"auth", TypeAuth> { */ clean(input: Partial<TypeAuth>): TypeAuth { let session; - if (typeof input.session === "object") { + if (typeof input.session === 'object') { if ( - typeof input.session._id === "string" && - typeof input.session.token === "string" && - typeof input.session.userId === "string" && + typeof input.session._id === 'string' && + typeof input.session.token === 'string' && + typeof input.session.userId === 'string' && input.session.valid ) { session = { @@ -102,14 +101,14 @@ export class Auth extends AbstractStore<"auth", TypeAuth> { * @param session Session */ setSession(session: Session) { - this.set("session", session); + this.set('session', session); } /** * Remove existing session. */ removeSession() { - this.set("session", undefined!); + this.set('session', undefined!); } /** @@ -118,7 +117,7 @@ export class Auth extends AbstractStore<"auth", TypeAuth> { markValid() { const session = this.get().session; if (session && !session.valid) { - this.set("session", "valid", true); + this.set('session', 'valid', true); } } } diff --git a/packages/client/components/state/stores/Draft.ts b/packages/client/components/state/stores/Draft.ts index 630ffd99b..df4a2f4d1 100644 --- a/packages/client/components/state/stores/Draft.ts +++ b/packages/client/components/state/stores/Draft.ts @@ -1,13 +1,10 @@ -import { batch } from "solid-js"; +import { CONFIGURATION, insecureUniqueId } from '@revolt/common'; +import type { API, Channel, Client, Message } from 'revolt.js'; +import { batch } from 'solid-js'; -import { API, Channel, Client, Message } from "revolt.js"; - -import { CONFIGURATION, insecureUniqueId } from "@revolt/common"; - -import { State } from ".."; - -import { AbstractStore } from "."; -import { LAYOUT_SECTIONS } from "./Layout"; +import type { State } from '..'; +import { AbstractStore } from '.'; +import { LAYOUT_SECTIONS } from './Layout'; export interface DraftData { /** @@ -35,7 +32,7 @@ export type UnsentMessage = { /** * Status */ - status: "sending" | "unsent" | "failed"; + status: 'sending' | 'unsent' | 'failed'; } & DraftData; export interface TextSelection { @@ -55,7 +52,7 @@ export interface TextSelection { end: number; } -export type TypeDraft = { +export interface TypeDraft { /** * All active message drafts */ @@ -65,22 +62,22 @@ export type TypeDraft = { * Unsent messages */ outbox: Record<string, UnsentMessage[]>; -}; +} /** * List of image content types */ export const ALLOWED_IMAGE_TYPES = [ - "image/jpeg", - "image/png", - "image/gif", - "image/webp", + 'image/jpeg', + 'image/png', + 'image/gif', + 'image/webp', ]; /** * Message drafts store */ -export class Draft extends AbstractStore<"draft", TypeDraft> { +export class Draft extends AbstractStore<'draft', TypeDraft> { /** * Keep track of cached files */ @@ -99,7 +96,7 @@ export class Draft extends AbstractStore<"draft", TypeDraft> { * @param state State */ constructor(state: State) { - super(state, "draft"); + super(state, 'draft'); this.fileCache = {}; this.getFile = this.getFile.bind(this); @@ -126,8 +123,8 @@ export class Draft extends AbstractStore<"draft", TypeDraft> { * Validate the given data to see if it is compliant and return a compliant object */ clean(input: Partial<TypeDraft>): TypeDraft { - const drafts: TypeDraft["drafts"] = {}; - const outbox: TypeDraft["outbox"] = {}; + const drafts: TypeDraft['drafts'] = {}; + const outbox: TypeDraft['outbox'] = {}; /** * Validate replies array is correct @@ -139,18 +136,18 @@ export class Draft extends AbstractStore<"draft", TypeDraft> { replies.length && !replies.find( (x) => - typeof x !== "object" || - typeof x.id !== "string" || - typeof x.mention !== "boolean" + typeof x !== 'object' || + typeof x.id !== 'string' || + typeof x.mention !== 'boolean' ); const messageDrafts = input.drafts; - if (typeof messageDrafts === "object") { + if (typeof messageDrafts === 'object') { for (const channelId of Object.keys(messageDrafts)) { const entry = messageDrafts?.[channelId]; const draft: DraftData = {}; - if (typeof entry?.content === "string" && entry.content) { + if (typeof entry?.content === 'string' && entry.content) { draft.content = entry.content; } @@ -165,7 +162,7 @@ export class Draft extends AbstractStore<"draft", TypeDraft> { } const pendingMessages = input.outbox; - if (typeof pendingMessages === "object") { + if (typeof pendingMessages === 'object') { for (const channelId of Object.keys(pendingMessages)) { const entry = pendingMessages[channelId]; const messages: UnsentMessage[] = []; @@ -173,15 +170,15 @@ export class Draft extends AbstractStore<"draft", TypeDraft> { if (Array.isArray(entry)) { for (const message of entry) { if ( - typeof message === "object" && - ["sending", "unsent", "failed"].includes(message.status) && - typeof message.idempotencyKey === "string" && - typeof message.content === "string" // shouldn't be enforced once we support caching files + typeof message === 'object' && + ['sending', 'unsent', 'failed'].includes(message.status) && + typeof message.idempotencyKey === 'string' && + typeof message.content === 'string' // shouldn't be enforced once we support caching files ) { const msg: UnsentMessage = { idempotencyKey: message.idempotencyKey, content: message.content, - status: "unsent", + status: 'unsent', // TODO: support storing unsent files in local storage // files: [..] }; @@ -231,15 +228,15 @@ export class Draft extends AbstractStore<"draft", TypeDraft> { channelId: string, data?: DraftData | ((data: DraftData) => DraftData) ) { - if (typeof data === "function") { + if (typeof data === 'function') { data = data(this.getDraft(channelId)); } - if (typeof data === "undefined") { + if (typeof data === 'undefined') { return this.clearDraft(channelId); } - this.set("drafts", channelId, data); + this.set('drafts', channelId, data); } /** @@ -253,7 +250,7 @@ export class Draft extends AbstractStore<"draft", TypeDraft> { } this.setDraft(channelId, { - content: "", + content: '', replies: [], files: [], }); @@ -270,12 +267,12 @@ export class Draft extends AbstractStore<"draft", TypeDraft> { // TODO: const idempotencyKey = ulid(); const idempotencyKey = Math.random().toString(); - this.set("outbox", channel.id, [ + this.set('outbox', channel.id, [ ...this.getPendingMessages(channel.id), { ...draft, idempotencyKey, - status: "sending", + status: 'sending', } as UnsentMessage, ]); @@ -300,28 +297,28 @@ export class Draft extends AbstractStore<"draft", TypeDraft> { // Prepare for upload const body = new FormData(); const { file } = this.getFile(fileId); - body.set("file", file); + body.set('file', file); // We have to use XMLHttpRequest because modern fetch duplex streams require QUIC or HTTP/2 const xhr = new XMLHttpRequest(); - xhr.responseType = "json"; + xhr.responseType = 'json'; const [success, response] = await new Promise< [boolean, { id: string }] >((resolve) => { - xhr.upload.addEventListener("progress", (event) => { + xhr.upload.addEventListener('progress', (event) => { if (event.lengthComputable) { // TODO: show this to users - console.log("upload progress:", event.loaded / event.total); + console.log('upload progress:', event.loaded / event.total); } }); - xhr.addEventListener("loadend", () => { + xhr.addEventListener('loadend', () => { resolve([xhr.readyState === 4 && xhr.status === 200, xhr.response]); }); xhr.open( - "POST", + 'POST', `${client.configuration!.features.autumn.url}/attachments`, true ); @@ -329,7 +326,7 @@ export class Draft extends AbstractStore<"draft", TypeDraft> { }); // TODO: keep track of uploaded files (and don't reupload those that succeded if message or something else fails) - if (!success) throw "Upload Error"; + if (!success) throw 'Upload Error'; attachments.push(response.id); } } @@ -350,7 +347,7 @@ export class Draft extends AbstractStore<"draft", TypeDraft> { } this.set( - "outbox", + 'outbox', channel.id, this.getPendingMessages(channel.id).filter( (entry) => entry.idempotencyKey !== idempotencyKey @@ -358,13 +355,13 @@ export class Draft extends AbstractStore<"draft", TypeDraft> { ); } catch (err) { this.set( - "outbox", + 'outbox', channel.id, this.getPendingMessages(channel.id).map((entry) => entry.idempotencyKey === idempotencyKey ? { ...entry, - status: "failed", + status: 'failed', } : entry ) @@ -381,7 +378,7 @@ export class Draft extends AbstractStore<"draft", TypeDraft> { const { content, replies, files } = this.getDraft(channelId); this.setDraft(channelId, { - content: "", + content: '', replies: [], files: files?.splice(CONFIGURATION.MAX_ATTACHMENTS), }); @@ -418,7 +415,7 @@ export class Draft extends AbstractStore<"draft", TypeDraft> { */ cancelSend(channel: Channel, idempotencyKey: string) { this.set( - "outbox", + 'outbox', channel.id, this.getPendingMessages(channel.id).filter( (entry) => entry.idempotencyKey !== idempotencyKey @@ -455,7 +452,7 @@ export class Draft extends AbstractStore<"draft", TypeDraft> { */ insertText(string: string) { if (this.textSelection) { - const content = this.getDraft(this.textSelection.channelId).content ?? ""; + const content = this.getDraft(this.textSelection.channelId).content ?? ''; const startStr = content.slice(0, this.textSelection.start); const endStr = content.slice(this.textSelection.end, content.length); @@ -477,7 +474,7 @@ export class Draft extends AbstractStore<"draft", TypeDraft> { * Reset and clear all drafts. */ reset() { - this.set("drafts", {}); + this.set('drafts', {}); } /** diff --git a/packages/client/components/state/stores/Experiments.ts b/packages/client/components/state/stores/Experiments.ts index 5a3d048be..835a2c6db 100644 --- a/packages/client/components/state/stores/Experiments.ts +++ b/packages/client/components/state/stores/Experiments.ts @@ -1,47 +1,46 @@ -import { State } from ".."; - -import { AbstractStore } from "."; +import type { State } from '..'; +import { AbstractStore } from '.'; /** * Union type of available experiments. */ export type Experiment = - | "file_uploads" - | "friends" - | "account_switcher" - | "gif_picker" - | "user_card" - | "emoji_picker" - | "plugins" - | "voice_chat"; + | 'file_uploads' + | 'friends' + | 'account_switcher' + | 'gif_picker' + | 'user_card' + | 'emoji_picker' + | 'plugins' + | 'voice_chat'; /** * Currently active experiments. */ export const AVAILABLE_EXPERIMENTS: Experiment[] = [ - "file_uploads", - "friends", - "account_switcher", - "gif_picker", - "user_card", - "emoji_picker", - "plugins", - "voice_chat", + 'file_uploads', + 'friends', + 'account_switcher', + 'gif_picker', + 'user_card', + 'emoji_picker', + 'plugins', + 'voice_chat', ]; /** * Experiments enabled by default. */ -export const DEFAULT_EXPERIMENTS: Experiment[] = ["file_uploads"]; +export const DEFAULT_EXPERIMENTS: Experiment[] = ['file_uploads']; /** * Always-on development-mode experiments. */ export const ALWAYS_ON_DEVELOPMENT_EXPERIMENTS: Experiment[] = [ - "file_uploads", - "friends", - "gif_picker", - "user_card", + 'file_uploads', + 'friends', + 'gif_picker', + 'user_card', ]; /** @@ -51,36 +50,36 @@ export const EXPERIMENTS: { [key in Experiment]: { title: string; description: string }; } = { file_uploads: { - title: "File Uploads", - description: "Enable file uploads when messaging.", + title: 'File Uploads', + description: 'Enable file uploads when messaging.', }, friends: { - title: "Friends Menu", - description: "Enable the friends menu in home.", + title: 'Friends Menu', + description: 'Enable the friends menu in home.', }, account_switcher: { - title: "Account Switcher", - description: "Enable the account switcher on the login page.", + title: 'Account Switcher', + description: 'Enable the account switcher on the login page.', }, gif_picker: { - title: "GIF Picker", - description: "Search and send GIFs from GIFBox!", + title: 'GIF Picker', + description: 'Search and send GIFs from GIFBox!', }, user_card: { - title: "Member Pop-out Card", - description: "Click on members to see more information about them.", + title: 'Member Pop-out Card', + description: 'Click on members to see more information about them.', }, emoji_picker: { - title: "Emoji Picker Placeholder", - description: "Search and add emoji to your messages.", + title: 'Emoji Picker Placeholder', + description: 'Search and add emoji to your messages.', }, plugins: { - title: "Plugins v2 Placeholder", - description: "Not available yet.", + title: 'Plugins v2 Placeholder', + description: 'Not available yet.', }, voice_chat: { - title: "Voice Chat Placeholder", - description: "Not available yet.", + title: 'Voice Chat Placeholder', + description: 'Not available yet.', }, }; @@ -99,13 +98,13 @@ export interface TypeExperiments { /** * Handles enabling and disabling client experiments. */ -export class Experiments extends AbstractStore<"experiments", TypeExperiments> { +export class Experiments extends AbstractStore<'experiments', TypeExperiments> { /** * Construct store * @param state State */ constructor(state: State) { - super(state, "experiments"); + super(state, 'experiments'); this.toggleSafeMode = this.toggleSafeMode.bind(this); } @@ -131,7 +130,7 @@ export class Experiments extends AbstractStore<"experiments", TypeExperiments> { * Validate the given data to see if it is compliant and return a compliant object */ clean(input: Partial<TypeExperiments>): TypeExperiments { - const enabled: Set<Experiment> = new Set(); + const enabled = new Set<Experiment>(); if (input.enabled) { for (const entry of input.enabled) { @@ -166,7 +165,7 @@ export class Experiments extends AbstractStore<"experiments", TypeExperiments> { */ enable(experiment: Experiment) { if (!this.isEnabled(experiment)) { - this.set("enabled", (enabled) => [...enabled, experiment]); + this.set('enabled', (enabled) => [...enabled, experiment]); } } @@ -176,7 +175,7 @@ export class Experiments extends AbstractStore<"experiments", TypeExperiments> { */ disable(experiment: Experiment) { if (this.isEnabled(experiment)) { - this.set("enabled", (enabled) => + this.set('enabled', (enabled) => enabled.filter((entry) => entry !== experiment) ); } @@ -199,13 +198,13 @@ export class Experiments extends AbstractStore<"experiments", TypeExperiments> { * Toggle safe mode. */ toggleSafeMode() { - this.set("safeMode", (safeMode) => !safeMode); + this.set('safeMode', (safeMode) => !safeMode); } /** * Reset and disable all experiments. */ reset() { - this.set("enabled", []); + this.set('enabled', []); } } diff --git a/packages/client/components/state/stores/Keybinds.ts b/packages/client/components/state/stores/Keybinds.ts index e0190b3d9..b8091c367 100644 --- a/packages/client/components/state/stores/Keybinds.ts +++ b/packages/client/components/state/stores/Keybinds.ts @@ -1,14 +1,8 @@ -import { - KeyCombo, - KeyComboSequence, - KeybindAction, - KeybindActions, - KeybindSequence, -} from "@revolt/keybinds"; +import type { KeybindActions, KeyComboSequence } from '@revolt/keybinds'; +import { KeybindAction, KeybindSequence, KeyCombo } from '@revolt/keybinds'; -import { State } from ".."; - -import { AbstractStore } from "."; +import type { State } from '..'; +import { AbstractStore } from '.'; /** utility to make writing the default keybinds easier, requires all `KeybindAction` values to be filled out */ function keybindMap( @@ -23,36 +17,36 @@ function keybindMap( } export const DEFAULT_VALUES: KeybindActions = keybindMap({ - [KeybindAction.NavigateChannelUp]: ["Alt+ArrowUp"], - [KeybindAction.NavigateChannelDown]: ["Alt+ArrowDown"], + [KeybindAction.NavigateChannelUp]: ['Alt+ArrowUp'], + [KeybindAction.NavigateChannelDown]: ['Alt+ArrowDown'], // temporary, Control+Alt+ArrowUp does not seem to work on chrome or firefox at the moment - [KeybindAction.NavigateServerUp]: ["Control+ArrowUp"], - [KeybindAction.NavigateServerDown]: ["Control+ArrowDown"], + [KeybindAction.NavigateServerUp]: ['Control+ArrowUp'], + [KeybindAction.NavigateServerDown]: ['Control+ArrowDown'], - [KeybindAction.AutoCompleteUp]: ["ArrowUp"], - [KeybindAction.AutoCompleteDown]: ["ArrowDown"], - [KeybindAction.AutoCompleteSelect]: ["Enter", "Tab"], + [KeybindAction.AutoCompleteUp]: ['ArrowUp'], + [KeybindAction.AutoCompleteDown]: ['ArrowDown'], + [KeybindAction.AutoCompleteSelect]: ['Enter', 'Tab'], [KeybindAction.NavigatePreviousContext]: [], //["Escape"], [KeybindAction.NavigatePreviousContextModal]: [], [KeybindAction.NavigatePreviousContextSettings]: [], - [KeybindAction.InputForceSubmit]: ["Control+Enter"], - [KeybindAction.InputSubmit]: ["Enter"], + [KeybindAction.InputForceSubmit]: ['Control+Enter'], + [KeybindAction.InputSubmit]: ['Enter'], [KeybindAction.InputCancel]: [], // ["Escape"], [KeybindAction.MessagingMarkChannelRead]: [], // ["Escape"], - [KeybindAction.MessagingScrollToBottom]: ["Escape"], - [KeybindAction.MessagingEditPreviousMessage]: ["ArrowUp"], + [KeybindAction.MessagingScrollToBottom]: ['Escape'], + [KeybindAction.MessagingEditPreviousMessage]: ['ArrowUp'], [KeybindAction.DeveloperToggleAllExperiments]: [], }); -export type TypeKeybinds = { +export interface TypeKeybinds { keybinds: KeybindActions; -}; +} -export class Keybinds extends AbstractStore<"keybinds", TypeKeybinds> { +export class Keybinds extends AbstractStore<'keybinds', TypeKeybinds> { keybinds = Map; /** @@ -60,7 +54,7 @@ export class Keybinds extends AbstractStore<"keybinds", TypeKeybinds> { * @param state State */ constructor(state: State) { - super(state, "keybinds"); + super(state, 'keybinds'); } /** @@ -105,7 +99,7 @@ export class Keybinds extends AbstractStore<"keybinds", TypeKeybinds> { * @param sequence the keybind sequence */ setKeybind(action: KeybindAction, index: number, sequence: KeyComboSequence) { - this.set("keybinds", action, index, sequence); + this.set('keybinds', action, index, sequence); } /** @@ -114,7 +108,7 @@ export class Keybinds extends AbstractStore<"keybinds", TypeKeybinds> { * @param sequence the keybind sequence to add */ addKeybind(action: KeybindAction, sequence: KeyComboSequence) { - this.set("keybinds", action, (keybinds) => [...keybinds, sequence]); + this.set('keybinds', action, (keybinds) => [...keybinds, sequence]); } /** @@ -126,10 +120,10 @@ export class Keybinds extends AbstractStore<"keybinds", TypeKeybinds> { resetKeybindToDefault(action: KeybindAction, index: number) { const defaultValue = this.getDefaultKeybind(action, index); if (defaultValue) { - this.set("keybinds", action, index, defaultValue); + this.set('keybinds', action, index, defaultValue); } else { // todo: maybe convert into a more efficient utility - this.set("keybinds", action, (keybinds) => { + this.set('keybinds', action, (keybinds) => { // shallow copy so splice doesn't mutate the original keybinds = [...keybinds]; keybinds.splice(index, 1); diff --git a/packages/client/components/state/stores/Layout.ts b/packages/client/components/state/stores/Layout.ts index 95ec094d8..53a722503 100644 --- a/packages/client/components/state/stores/Layout.ts +++ b/packages/client/components/state/stores/Layout.ts @@ -1,15 +1,14 @@ -import { paramsFromPathname } from "@revolt/routing"; +import { paramsFromPathname } from '@revolt/routing'; -import { State } from ".."; - -import { AbstractStore } from "."; +import type { State } from '..'; +import { AbstractStore } from '.'; /** * Static section IDs */ export enum LAYOUT_SECTIONS { - MEMBER_SIDEBAR = "MEMBER_SIDEBAR", - MENTION_REPLY = "MENTION_REPLY", + MEMBER_SIDEBAR = 'MEMBER_SIDEBAR', + MENTION_REPLY = 'MENTION_REPLY', } export interface TypeLayout { @@ -21,12 +20,12 @@ export interface TypeLayout { * - discover * - a server ID */ - activeInterface: "home" | "discover" | string; + activeInterface: 'home' | 'discover' | string; /** * Current path within an interface */ - activePath: Record<TypeLayout["activeInterface"], string>; + activePath: Record<TypeLayout['activeInterface'], string>; /** * Open (or closed) sections of the UI @@ -39,13 +38,13 @@ export interface TypeLayout { /** * Handles layout and navigation of the app. */ -export class Layout extends AbstractStore<"layout", TypeLayout> { +export class Layout extends AbstractStore<'layout', TypeLayout> { /** * Construct store * @param state State */ constructor(state: State) { - super(state, "layout"); + super(state, 'layout'); } /** @@ -60,10 +59,10 @@ export class Layout extends AbstractStore<"layout", TypeLayout> { */ default(): TypeLayout { return { - activeInterface: "home", + activeInterface: 'home', activePath: { - home: "/", - discover: "/discover/servers", + home: '/', + discover: '/discover/servers', }, openSections: {}, }; @@ -75,21 +74,21 @@ export class Layout extends AbstractStore<"layout", TypeLayout> { clean(input: Partial<TypeLayout>): TypeLayout { const layout: TypeLayout = this.default(); - if (typeof input.activeInterface === "string") { + if (typeof input.activeInterface === 'string') { layout.activeInterface = input.activeInterface; } - if (typeof input.activePath === "object") { + if (typeof input.activePath === 'object') { for (const interfaceId of Object.keys(input.activePath)) { - if (typeof input.activePath[interfaceId] === "string") { + if (typeof input.activePath[interfaceId] === 'string') { layout.activePath[interfaceId] = input.activePath[interfaceId]; } } } - if (typeof input.openSections === "object") { + if (typeof input.openSections === 'object') { for (const section of Object.keys(input.openSections)) { - if (typeof input.openSections[section] === "boolean") { + if (typeof input.openSections[section] === 'boolean') { layout.openSections[section] = input.openSections[section]; } } @@ -103,7 +102,7 @@ export class Layout extends AbstractStore<"layout", TypeLayout> { */ getLastActivePath() { const section = this.get().activeInterface; - return this.get().activePath[section] ?? "/"; + return this.get().activePath[section] ?? '/'; } /** @@ -111,9 +110,9 @@ export class Layout extends AbstractStore<"layout", TypeLayout> { */ setLastActivePath(pathname: string) { const params = paramsFromPathname(pathname); - const section = params.serverId ?? "home"; - this.set("activeInterface", section); - this.set("activePath", section, pathname); + const section = params.serverId ?? 'home'; + this.set('activeInterface', section); + this.set('activePath', section, pathname); } /** @@ -133,7 +132,7 @@ export class Layout extends AbstractStore<"layout", TypeLayout> { * @param defaultValue Default state value */ setSectionState(id: string, value: boolean, defaultValue = false) { - this.set("openSections", id, value === defaultValue ? undefined! : value); + this.set('openSections', id, value === defaultValue ? undefined! : value); } /** diff --git a/packages/client/components/state/stores/Locale.ts b/packages/client/components/state/stores/Locale.ts index e8bda0156..229ba8b2f 100644 --- a/packages/client/components/state/stores/Locale.ts +++ b/packages/client/components/state/stores/Locale.ts @@ -1,38 +1,33 @@ -import { - Language, - Languages, - browserPreferredLanguage, - loadAndSetLanguage, -} from "@revolt/i18n"; +import type { Language } from '@revolt/i18n'; +import { browserPreferredLanguage, Languages, setLanguage } from '@revolt/i18n'; -import { State } from ".."; +import type { State } from '..'; +import { AbstractStore } from '.'; -import { AbstractStore } from "."; - -export type TypeLocale = { +export interface TypeLocale { /** * Current language in use */ lang: Language; -}; +} /** * Manage localisation of the application */ -export class Locale extends AbstractStore<"locale", TypeLocale> { +export class Locale extends AbstractStore<'locale', TypeLocale> { /** * Construct store * @param state State */ constructor(state: State) { - super(state, "locale"); + super(state, 'locale'); } /** * Hydrate external context */ hydrate(): void { - loadAndSetLanguage(this.get().lang); + setLanguage(this.get().lang); } /** @@ -63,7 +58,7 @@ export class Locale extends AbstractStore<"locale", TypeLocale> { * @param language Language */ switch(language: Language): void { - this.set("lang", language); + this.set('lang', language); this.hydrate(); } } diff --git a/packages/client/components/state/stores/NotificationOptions.ts b/packages/client/components/state/stores/NotificationOptions.ts index 5376b5b92..88c45dd80 100644 --- a/packages/client/components/state/stores/NotificationOptions.ts +++ b/packages/client/components/state/stores/NotificationOptions.ts @@ -1,33 +1,32 @@ -import { Channel, Server } from "revolt.js"; +import { Channel, Server } from 'revolt.js'; -import { State } from ".."; - -import { AbstractStore } from "."; +import type { State } from '..'; +import { AbstractStore } from '.'; /** * Possible notification states */ -export type NotificationState = "all" | "mention" | "none" | "muted"; +export type NotificationState = 'all' | 'mention' | 'none' | 'muted'; /** * Possible notification states */ const NotificationStates: NotificationState[] = [ - "all", - "mention", - "none", - "muted", + 'all', + 'mention', + 'none', + 'muted', ]; /** * Default notification states for various types of channels */ export const DEFAULT_STATES: { - [key in Channel["type"]]: NotificationState; + [key in Channel['type']]: NotificationState; } = { - SavedMessages: "all", - DirectMessage: "all", - Group: "all", + SavedMessages: 'all', + DirectMessage: 'all', + Group: 'all', TextChannel: undefined!, VoiceChannel: undefined!, }; @@ -35,7 +34,7 @@ export const DEFAULT_STATES: { /** * Default state for servers */ -export const DEFAULT_SERVER_STATE: NotificationState = "mention"; +export const DEFAULT_SERVER_STATE: NotificationState = 'mention'; export interface TypeNotificationOptions { /** @@ -71,7 +70,7 @@ async function createNotification( * Manages the user's notification preferences. */ export class NotificationOptions extends AbstractStore< - "notifications", + 'notifications', TypeNotificationOptions > { private activeNotifications: Record<string, Notification> = {}; @@ -80,7 +79,7 @@ export class NotificationOptions extends AbstractStore< * Construct new Experiments store. */ constructor(state: State) { - super(state, "notifications"); + super(state, 'notifications'); } /** @@ -104,10 +103,10 @@ export class NotificationOptions extends AbstractStore< * Validate the given data to see if it is compliant and return a compliant object */ clean(input: Partial<TypeNotificationOptions>): TypeNotificationOptions { - const server: TypeNotificationOptions["server"] = {}; - const channel: TypeNotificationOptions["channel"] = {}; + const server: TypeNotificationOptions['server'] = {}; + const channel: TypeNotificationOptions['channel'] = {}; - if (typeof input.server === "object") { + if (typeof input.server === 'object') { for (const serverId of Object.keys(input.server)) { const entry = input.server[serverId]; if (NotificationStates.includes(entry)) { @@ -116,7 +115,7 @@ export class NotificationOptions extends AbstractStore< } } - if (typeof input.channel === "object") { + if (typeof input.channel === 'object') { for (const channelId of Object.keys(input.channel)) { const entry = input.channel[channelId]; if (NotificationStates.includes(entry)) { @@ -138,7 +137,7 @@ export class NotificationOptions extends AbstractStore< */ computeForServer(server?: Server) { return server - ? this.get().server[server.id] ?? DEFAULT_SERVER_STATE + ? (this.get().server[server.id] ?? DEFAULT_SERVER_STATE) : undefined; } @@ -168,7 +167,7 @@ export class NotificationOptions extends AbstractStore< value = this.computeForServer(target); } - if (value === "muted") { + if (value === 'muted') { return true; } diff --git a/packages/client/components/state/stores/Ordering.ts b/packages/client/components/state/stores/Ordering.ts index 90cda1478..8240a6dc7 100644 --- a/packages/client/components/state/stores/Ordering.ts +++ b/packages/client/components/state/stores/Ordering.ts @@ -1,8 +1,7 @@ -import { getController } from "@revolt/common"; +import { getController } from '@revolt/common'; -import { State } from ".."; - -import { AbstractStore } from "."; +import type { State } from '..'; +import { AbstractStore } from '.'; export interface TypeOrdering { /** @@ -14,13 +13,13 @@ export interface TypeOrdering { /** * Handles ordering of items in the app interface. */ -export class Ordering extends AbstractStore<"ordering", TypeOrdering> { +export class Ordering extends AbstractStore<'ordering', TypeOrdering> { /** * Construct store * @param state State */ constructor(state: State) { - super(state, "ordering"); + super(state, 'ordering'); this.setServerOrder = this.setServerOrder.bind(this); } @@ -48,7 +47,7 @@ export class Ordering extends AbstractStore<"ordering", TypeOrdering> { if (Array.isArray(input.servers)) { for (const serverId of input.servers) { - if (typeof serverId === "string") { + if (typeof serverId === 'string') { ordering.servers.push(serverId); } } @@ -62,7 +61,7 @@ export class Ordering extends AbstractStore<"ordering", TypeOrdering> { * @returns List of Server objects */ get orderedServers() { - const client = getController("client").getCurrentClient(); + const client = getController('client').getCurrentClient(); const known = new Set(client?.servers.keys() ?? []); const ordered = [...this.get().servers]; @@ -85,7 +84,7 @@ export class Ordering extends AbstractStore<"ordering", TypeOrdering> { * @param ids List of IDs */ setServerOrder(ids: string[]) { - this.set("servers", ids); + this.set('servers', ids); } /** @@ -93,15 +92,15 @@ export class Ordering extends AbstractStore<"ordering", TypeOrdering> { * @returns List of Channel objects */ get orderedConversations() { - const client = getController("client").getCurrentClient(); + const client = getController('client').getCurrentClient(); return ( client?.channels .toList() .filter( (channel) => - (channel.type === "DirectMessage" && channel.active) || - channel.type === "Group" + (channel.type === 'DirectMessage' && channel.active) || + channel.type === 'Group' ) .sort((a, b) => +b.updatedAt - +a.updatedAt) ?? [] ); diff --git a/packages/client/components/state/stores/Settings.ts b/packages/client/components/state/stores/Settings.ts index 0eedac265..963ab907c 100644 --- a/packages/client/components/state/stores/Settings.ts +++ b/packages/client/components/state/stores/Settings.ts @@ -1,6 +1,5 @@ -import { State } from ".."; - -import { AbstractStore } from "."; +import type { State } from '..'; +import { AbstractStore } from '.'; interface SettingsDefinition { /** @@ -37,12 +36,12 @@ interface SettingsDefinition { /** * Show message send button */ - "appearance:show_send_button": boolean; + 'appearance:show_send_button': boolean; /** * Whether to render messages in compact mode */ - "appearance:compact_mode": boolean; + 'appearance:compact_mode': boolean; /** * Indicate new users to Revolt @@ -56,18 +55,20 @@ interface SettingsDefinition { */ type ValueType<T extends keyof SettingsDefinition> = SettingsDefinition[T] extends boolean - ? "boolean" + ? 'boolean' : SettingsDefinition[T] extends string - ? "string" - : (v: Partial<SettingsDefinition[T]>) => SettingsDefinition[T] | undefined; + ? 'string' + : ( + v: Partial<SettingsDefinition[T]> + ) => SettingsDefinition[T] | undefined; /** * Expected types of settings keys, enforce some sort of validation is present for all keys. * If we cannot validate the value as a primitive, clean it up using a function. */ const EXPECTED_TYPES: { [K in keyof SettingsDefinition]: ValueType<K> } = { - "appearance:show_send_button": "boolean", - "appearance:compact_mode": "boolean", + 'appearance:show_send_button': 'boolean', + 'appearance:compact_mode': 'boolean', }; /** @@ -83,13 +84,13 @@ const DEFAULT_VALUES: TypeSettings = {}; /** * Settings store */ -export class Settings extends AbstractStore<"settings", TypeSettings> { +export class Settings extends AbstractStore<'settings', TypeSettings> { /** * Construct store * @param state State */ constructor(state: State) { - super(state, "settings"); + super(state, 'settings'); } /** @@ -115,7 +116,7 @@ export class Settings extends AbstractStore<"settings", TypeSettings> { for (const key of Object.keys(input) as (keyof TypeSettings)[]) { const expectedType = EXPECTED_TYPES[key]; - if (typeof expectedType === "function") { + if (typeof expectedType === 'function') { const cleanedValue = (expectedType as (value: unknown) => unknown)( input[key] ); diff --git a/packages/client/components/state/stores/index.ts b/packages/client/components/state/stores/index.ts index 511e2a2ef..7eb010bfb 100644 --- a/packages/client/components/state/stores/index.ts +++ b/packages/client/components/state/stores/index.ts @@ -1,18 +1,17 @@ -import { SetStoreFunction } from "solid-js/store"; +import type { SetStoreFunction } from 'solid-js/store'; -import { State } from ".."; +import type { State } from '..'; +import type { TypeAuth } from './Auth'; +import type { TypeDraft } from './Draft'; +import type { TypeExperiments } from './Experiments'; +import type { TypeKeybinds } from './Keybinds'; +import type { TypeLayout } from './Layout'; +import type { TypeLocale } from './Locale'; +import type { TypeNotificationOptions } from './NotificationOptions'; +import type { TypeOrdering } from './Ordering'; +import type { TypeSettings } from './Settings'; -import { TypeAuth } from "./Auth"; -import { TypeDraft } from "./Draft"; -import { TypeExperiments } from "./Experiments"; -import { TypeKeybinds } from "./Keybinds"; -import { TypeLayout } from "./Layout"; -import { TypeLocale } from "./Locale"; -import { TypeNotificationOptions } from "./NotificationOptions"; -import { TypeOrdering } from "./Ordering"; -import { TypeSettings } from "./Settings"; - -export type Store = { +export interface Store { auth: TypeAuth; draft: TypeDraft; experiments: TypeExperiments; @@ -22,7 +21,7 @@ export type Store = { notifications: TypeNotificationOptions; ordering: TypeOrdering; settings: TypeSettings; -}; +} /** * Abstract store implementation diff --git a/packages/client/components/ui/components/common/Draggable.tsx b/packages/client/components/ui/components/common/Draggable.tsx index 4e1e3dce9..746e909de 100644 --- a/packages/client/components/ui/components/common/Draggable.tsx +++ b/packages/client/components/ui/components/common/Draggable.tsx @@ -1,5 +1,6 @@ -import { dndzone } from "solid-dnd-directive"; -import { For, JSX, createEffect, createSignal } from "solid-js"; +import { dndzone } from 'solid-dnd-directive'; +import type { JSX } from 'solid-js'; +import { createEffect, createSignal, For } from 'solid-js'; interface Props<T> { items: Item<T>[]; @@ -21,7 +22,7 @@ interface DragHandleEvent<T> { detail: { items: ContainerItem<T>[]; }; - type: "consider" | "finalize"; + type: 'consider' | 'finalize'; } /** @@ -54,7 +55,7 @@ export function Draggable<T>(props: Props<T>) { function handleDndEvent(e: DragHandleEvent<T>) { const { items: newContainerItems } = e.detail; setContainerItems(newContainerItems); - if (e.type === "finalize") + if (e.type === 'finalize') props.onChange( newContainerItems.map((containerItems) => containerItems.id) ); @@ -66,7 +67,6 @@ export function Draggable<T>(props: Props<T>) { */ return ( <div - // @ts-expect-error Typescript doesn't support directives use:dndzone={{ items: containerItems }} on:consider={handleDndEvent} on:finalize={handleDndEvent} diff --git a/packages/client/components/ui/components/common/Masks.tsx b/packages/client/components/ui/components/common/Masks.tsx index c464a283f..b92e78bdd 100644 --- a/packages/client/components/ui/components/common/Masks.tsx +++ b/packages/client/components/ui/components/common/Masks.tsx @@ -3,56 +3,56 @@ */ export function Masks() { return ( - <svg width={0} height={0} style={{ position: "fixed" }}> + <svg width={0} height={0} style={{ position: 'fixed' }}> <defs> - <mask id="holepunch-top-left"> - <rect x="0" y="0" width="32" height="32" fill="white" /> - <circle cx="5" cy="5" r="7" fill={"black"} /> + <mask id='holepunch-top-left'> + <rect x='0' y='0' width='32' height='32' fill='white' /> + <circle cx='5' cy='5' r='7' fill={'black'} /> </mask> - <mask id="holepunch-top-right"> - <rect x="0" y="0" width="32" height="32" fill="white" /> - <circle cx="27" cy="5" r="7" fill={"black"} /> + <mask id='holepunch-top-right'> + <rect x='0' y='0' width='32' height='32' fill='white' /> + <circle cx='27' cy='5' r='7' fill={'black'} /> </mask> - <mask id="holepunch-bottom-right"> - <rect x="0" y="0" width="32" height="32" fill="white" /> - <circle cx="27" cy="27" r="7" fill={"black"} /> + <mask id='holepunch-bottom-right'> + <rect x='0' y='0' width='32' height='32' fill='white' /> + <circle cx='27' cy='27' r='7' fill={'black'} /> </mask> - <mask id="holepunch-right"> - <rect x="0" y="0" width="32" height="32" fill="white" /> - <circle cx="27" cy="5" r="7" fill={"black"} /> - <circle cx="27" cy="27" r="7" fill={"black"} /> + <mask id='holepunch-right'> + <rect x='0' y='0' width='32' height='32' fill='white' /> + <circle cx='27' cy='5' r='7' fill={'black'} /> + <circle cx='27' cy='27' r='7' fill={'black'} /> </mask> - <mask id="holepunch-overlap"> - <rect x="0" y="0" width="32" height="32" fill="white" /> - <circle cx="32" cy="16" r="18" fill="black" /> + <mask id='holepunch-overlap'> + <rect x='0' y='0' width='32' height='32' fill='white' /> + <circle cx='32' cy='16' r='18' fill='black' /> </mask> - <mask id="holepunch-overlap-subtle"> - <rect x="0" y="0" width="32" height="32" fill="white" /> - <circle cx="33" cy="16" r="18" fill="black" /> + <mask id='holepunch-overlap-subtle'> + <rect x='0' y='0' width='32' height='32' fill='white' /> + <circle cx='33' cy='16' r='18' fill='black' /> </mask> - <mask id="accessible-status-offline"> - <circle cx="27" cy="27" r="5" fill="white" /> - <circle cx="27" cy="27" r="3" fill="black" /> + <mask id='accessible-status-offline'> + <circle cx='27' cy='27' r='5' fill='white' /> + <circle cx='27' cy='27' r='3' fill='black' /> </mask> - <mask id="accessible-status-idle"> - <circle cx="27" cy="27" r="5" fill="white" /> - <circle cx="25" cy="25" r="4" fill="black" /> + <mask id='accessible-status-idle'> + <circle cx='27' cy='27' r='5' fill='white' /> + <circle cx='25' cy='25' r='4' fill='black' /> </mask> - <mask id="accessible-status-busy"> - <circle cx="27" cy="27" r="5" fill="white" /> + <mask id='accessible-status-busy'> + <circle cx='27' cy='27' r='5' fill='white' /> <line - x1="24" - y1="27" - x2="30" - y2="27" - stroke="black" + x1='24' + y1='27' + x2='30' + y2='27' + stroke='black' stroke-width={2} /> </mask> - <mask id="accessible-status-focus"> - <circle cx="27" cy="27" r="5" fill="white" /> - <circle cx="27" cy="27" r="4" fill="black" /> - <circle cx="27" cy="27" r="2" fill="white" /> + <mask id='accessible-status-focus'> + <circle cx='27' cy='27' r='5' fill='white' /> + <circle cx='27' cy='27' r='4' fill='black' /> + <circle cx='27' cy='27' r='2' fill='white' /> </mask> </defs> </svg> diff --git a/packages/client/components/ui/components/common/index.ts b/packages/client/components/ui/components/common/index.ts index e92b6c41d..b9b3dba24 100644 --- a/packages/client/components/ui/components/common/index.ts +++ b/packages/client/components/ui/components/common/index.ts @@ -1,2 +1,2 @@ -export { Draggable } from "./Draggable"; -export { Masks } from "./Masks"; +export { Draggable } from './Draggable'; +export { Masks } from './Masks'; diff --git a/packages/client/components/ui/components/context/Keybinds.tsx b/packages/client/components/ui/components/context/Keybinds.tsx index 38bb56674..f2f58a854 100644 --- a/packages/client/components/ui/components/context/Keybinds.tsx +++ b/packages/client/components/ui/components/context/Keybinds.tsx @@ -1,17 +1,7 @@ -import { - Accessor, - ParentComponent, - createContext, - onCleanup, - onMount, - useContext, -} from "solid-js"; - -import { - KeybindAction, - KeybindActions, - KeybindEventHandler, -} from "@revolt/keybinds"; +import type { KeybindAction, KeybindActions } from '@revolt/keybinds'; +import { KeybindEventHandler } from '@revolt/keybinds'; +import type { Accessor, ParentComponent } from 'solid-js'; +import { createContext, onCleanup, onMount, useContext } from 'solid-js'; const KeybindsContext = createContext<KeybindEventHandler<KeybindAction>>(); @@ -25,11 +15,11 @@ export const KeybindsProvider: ParentComponent<Props> = (props) => { const handler = new KeybindEventHandler<KeybindAction>(props.keybinds); onMount(() => { - document.addEventListener("keydown", handler); + document.addEventListener('keydown', handler); }); onCleanup(() => { - document.removeEventListener("keydown", handler); + document.removeEventListener('keydown', handler); }); return ( diff --git a/packages/client/components/ui/components/context/index.ts b/packages/client/components/ui/components/context/index.ts index 7038dcfa6..0b05bc89f 100644 --- a/packages/client/components/ui/components/context/index.ts +++ b/packages/client/components/ui/components/context/index.ts @@ -1 +1 @@ -export { KeybindsProvider } from "./Keybinds"; +export { KeybindsProvider } from './Keybinds'; diff --git a/packages/client/components/ui/components/design/atoms/display/Avatar.stories.tsx b/packages/client/components/ui/components/design/atoms/display/Avatar.stories.tsx index 66ece5bf7..05d12189d 100644 --- a/packages/client/components/ui/components/design/atoms/display/Avatar.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/display/Avatar.stories.tsx @@ -1,32 +1,31 @@ -import type { ComponentProps } from "solid-js"; +import type { ComponentProps } from 'solid-js'; -import TestImage from "../../../../test-images/the-halal-design-studio-ZrJpH6W-HDs-unsplash.jpg"; -import type { ComponentStory } from "../../../stories"; -import { UserStatusGraphic } from "../indicators"; - -import { Avatar } from "./Avatar"; +import TestImage from '../../../../test-images/the-halal-design-studio-ZrJpH6W-HDs-unsplash.jpg'; +import type { ComponentStory } from '../../../stories'; +import { UserStatusGraphic } from '../indicators'; +import { Avatar } from './Avatar'; export default { - category: "Design System/Atoms/Avatar", + category: 'Design System/Atoms/Avatar', component: Avatar, stories: [ - { title: "Default" }, + { title: 'Default' }, { - title: "Cut Out", + title: 'Cut Out', props: { interactive: true, - holepunch: "bottom-right", - overlay: () => <UserStatusGraphic status="Online" />, + holepunch: 'bottom-right', + overlay: () => <UserStatusGraphic status='Online' />, }, }, { - title: "Fallback", + title: 'Fallback', props: { - fallback: "test fallback string", + fallback: 'test fallback string', src: undefined, interactive: true, - holepunch: "bottom-right", - overlay: () => <UserStatusGraphic status="Focus" />, + holepunch: 'bottom-right', + overlay: () => <UserStatusGraphic status='Focus' />, }, }, ], @@ -35,11 +34,11 @@ export default { src: TestImage, }, propTypes: { - size: "number", - src: "string", - fallback: "string", - interactive: "boolean", - holepunch: ["none", "bottom-right", "top-right", "right"], - overlay: "component", + size: 'number', + src: 'string', + fallback: 'string', + interactive: 'boolean', + holepunch: ['none', 'bottom-right', 'top-right', 'right'], + overlay: 'component', }, } as ComponentStory<typeof Avatar, ComponentProps<typeof Avatar>>; diff --git a/packages/client/components/ui/components/design/atoms/display/Avatar.tsx b/packages/client/components/ui/components/design/atoms/display/Avatar.tsx index a1699974d..a90895796 100644 --- a/packages/client/components/ui/components/design/atoms/display/Avatar.tsx +++ b/packages/client/components/ui/components/design/atoms/display/Avatar.tsx @@ -1,9 +1,10 @@ -import { JSXElement, createEffect, createSignal, on } from "solid-js"; -import { styled } from "solid-styled-components"; +import type { JSXElement } from 'solid-js'; +import { createEffect, createSignal, on } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { Initials } from "./Initials"; +import { Initials } from './Initials'; -export type Props = { +export interface Props { /** * Avatar size */ @@ -12,7 +13,7 @@ export type Props = { /** * Avatar shape */ - shape?: "circle" | "rounded-square"; + shape?: 'circle' | 'rounded-square'; /** * Image source @@ -33,12 +34,12 @@ export type Props = { * Punch a hole through the avatar */ holepunch?: - | "bottom-right" - | "top-right" - | "right" - | "overlap" - | "overlap-subtle" - | "none" + | 'bottom-right' + | 'top-right' + | 'right' + | 'overlap' + | 'overlap-subtle' + | 'none' | false; /** @@ -50,18 +51,18 @@ export type Props = { * Whether this icon is interactive */ interactive?: boolean; -}; +} /** * Avatar image */ -const Image = styled("img")<Pick<Props, "shape">>` +const Image = styled('img')<Pick<Props, 'shape'>>` width: 100%; height: 100%; object-fit: cover; border-radius: ${(props) => - props.shape === "rounded-square" + props.shape === 'rounded-square' ? props.theme!.borderRadius.md : props.theme!.borderRadius.full}; `; @@ -69,12 +70,12 @@ const Image = styled("img")<Pick<Props, "shape">>` /** * Text fallback container */ -const FallbackBase = styled("div")<Pick<Props, "shape" | "primaryContrast">>` +const FallbackBase = styled('div')<Pick<Props, 'shape' | 'primaryContrast'>>` width: 100%; height: 100%; border-radius: ${(props) => - props.shape === "rounded-square" + props.shape === 'rounded-square' ? props.theme!.borderRadius.md : props.theme!.borderRadius.full}; @@ -87,13 +88,13 @@ const FallbackBase = styled("div")<Pick<Props, "shape" | "primaryContrast">>` color: ${(props) => props.theme!.colours[ `component-avatar-fallback${ - props.primaryContrast ? "-contrast" : "" + props.primaryContrast ? '-contrast' : '' }-foreground` ]}; background: ${(props) => props.theme!.colours[ `component-avatar-fallback${ - props.primaryContrast ? "-contrast" : "" + props.primaryContrast ? '-contrast' : '' }-background` ]}; `; @@ -101,10 +102,10 @@ const FallbackBase = styled("div")<Pick<Props, "shape" | "primaryContrast">>` /** * Avatar parent container */ -const ParentBase = styled("svg", "Avatar")<Pick<Props, "interactive">>` +const ParentBase = styled('svg', 'Avatar')<Pick<Props, 'interactive'>>` flex-shrink: 0; user-select: none; - cursor: ${(props) => (props.interactive ? "cursor" : "inherit")}; + cursor: ${(props) => (props.interactive ? 'cursor' : 'inherit')}; foreignObject { transition: ${(props) => props.theme!.transitions.fast} filter; @@ -127,7 +128,7 @@ export function Avatar(props: Props) { () => props.src, (src) => { if (url() !== src) { - setUrl(""); + setUrl(''); setTimeout(() => setUrl(src)); } }, @@ -139,14 +140,14 @@ export function Avatar(props: Props) { <ParentBase width={props.size} height={props.size} - viewBox="0 0 32 32" + viewBox='0 0 32 32' interactive={props.interactive} > <foreignObject - x="0" - y="0" - width="32" - height="32" + x='0' + y='0' + width='32' + height='32' // @ts-expect-error Solid.js typing issue mask={ props.holepunch ? `url(#holepunch-${props.holepunch})` : undefined @@ -159,7 +160,7 @@ export function Avatar(props: Props) { shape={props.shape} primaryContrast={props.primaryContrast} > - {typeof props.fallback === "string" ? ( + {typeof props.fallback === 'string' ? ( <Initials input={props.fallback} maxLength={2} /> ) : ( props.fallback diff --git a/packages/client/components/ui/components/design/atoms/display/Breadcrumbs.tsx b/packages/client/components/ui/components/design/atoms/display/Breadcrumbs.tsx index 15bd4e34c..c89c0ed3b 100644 --- a/packages/client/components/ui/components/design/atoms/display/Breadcrumbs.tsx +++ b/packages/client/components/ui/components/design/atoms/display/Breadcrumbs.tsx @@ -1,8 +1,9 @@ -import { BiSolidChevronRight } from "solid-icons/bi"; -import { For, JSX, Match, Show, Switch } from "solid-js"; -import { styled } from "solid-styled-components"; +import { BiSolidChevronRight } from 'solid-icons/bi'; +import type { JSX } from 'solid-js'; +import { For, Match, Show, Switch } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { Row } from "../../layout"; +import { Row } from '../../layout'; interface Props { elements: string[]; @@ -31,18 +32,18 @@ export function Breadcrumbs(props: Props) { return ( <> <Show when={index() !== 0}> - <BiSolidChevronRight size="0.6em" /> + <BiSolidChevronRight size='0.6em' /> </Show> <Switch fallback={ <Unselected onClick={navigate}> - {props.renderElement(segments().join("/"))} + {props.renderElement(segments().join('/'))} </Unselected> } > <Match when={index() === props.elements.length - 1}> <Selected> - {props.renderElement(segments().join("/"))} + {props.renderElement(segments().join('/'))} </Selected> </Match> </Switch> @@ -59,7 +60,7 @@ export function Breadcrumbs(props: Props) { */ const Base = styled(Row)` user-select: none; - color: ${(props) => props.theme!.colours["foreground-300"]}; + color: ${(props) => props.theme!.colours['foreground-300']}; `; /** @@ -82,5 +83,5 @@ const Unselected = styled.div` * Selected styles */ const Selected = styled.div` - color: ${(props) => props.theme!.colours["foreground"]}; + color: ${(props) => props.theme!.colours['foreground']}; `; diff --git a/packages/client/components/ui/components/design/atoms/display/ColouredText.tsx b/packages/client/components/ui/components/design/atoms/display/ColouredText.tsx index 9dbbdc33d..adc5e847f 100644 --- a/packages/client/components/ui/components/design/atoms/display/ColouredText.tsx +++ b/packages/client/components/ui/components/design/atoms/display/ColouredText.tsx @@ -1,13 +1,13 @@ -import { styled } from "solid-styled-components"; +import { styled } from 'solid-styled-components'; /** * Coloured text */ export const ColouredText = styled.span<{ colour?: string; clip?: boolean }>` - color: ${(props) => props.colour ?? "inherit"}; - background: ${(props) => (props.clip ? props.colour! : "none")}; - -webkit-text-fill-color: ${(props) => (props.clip ? "transparent" : "unset")}; - background-clip: ${(props) => (props.clip ? "text" : "unset")}; - -webkit-background-clip: ${(props) => (props.clip ? "text" : "unset")}; - text-decoration: ${(props) => (props.clip ? "none" : "unset")} !important; + color: ${(props) => props.colour ?? 'inherit'}; + background: ${(props) => (props.clip ? props.colour! : 'none')}; + -webkit-text-fill-color: ${(props) => (props.clip ? 'transparent' : 'unset')}; + background-clip: ${(props) => (props.clip ? 'text' : 'unset')}; + -webkit-background-clip: ${(props) => (props.clip ? 'text' : 'unset')}; + text-decoration: ${(props) => (props.clip ? 'none' : 'unset')} !important; `; diff --git a/packages/client/components/ui/components/design/atoms/display/FormGroup.stories.tsx b/packages/client/components/ui/components/design/atoms/display/FormGroup.stories.tsx index e0278ab50..7a2e95e30 100644 --- a/packages/client/components/ui/components/design/atoms/display/FormGroup.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/display/FormGroup.stories.tsx @@ -1,24 +1,23 @@ -import type { ComponentProps } from "solid-js"; +import type { ComponentProps } from 'solid-js'; -import type { ComponentStory } from "../../../stories"; -import { Input } from "../inputs"; - -import { FormGroup } from "./FormGroup"; -import { Typography } from "./Typography"; +import type { ComponentStory } from '../../../stories'; +import { Input } from '../inputs'; +import { FormGroup } from './FormGroup'; +import { Typography } from './Typography'; export default { - category: "Design System/Atoms/Form Group", + category: 'Design System/Atoms/Form Group', component: FormGroup, - stories: [{ title: "Default" }], + stories: [{ title: 'Default' }], props: { children: () => ( <> - <Typography variant="label">Title</Typography> - <Input placeholder="Type something..." /> + <Typography variant='label'>Title</Typography> + <Input placeholder='Type something...' /> </> ), }, propTypes: { - children: "component", + children: 'component', }, } as ComponentStory<typeof FormGroup, ComponentProps<typeof FormGroup>>; diff --git a/packages/client/components/ui/components/design/atoms/display/FormGroup.tsx b/packages/client/components/ui/components/design/atoms/display/FormGroup.tsx index 411115519..896375140 100644 --- a/packages/client/components/ui/components/design/atoms/display/FormGroup.tsx +++ b/packages/client/components/ui/components/design/atoms/display/FormGroup.tsx @@ -1,9 +1,9 @@ -import { styled } from "solid-styled-components"; +import { styled } from 'solid-styled-components'; /** * Input element and label grouping */ -export const FormGroup = styled("label")` +export const FormGroup = styled('label')` display: flex; flex-direction: column; gap: ${(props) => props.theme!.gap.md}; diff --git a/packages/client/components/ui/components/design/atoms/display/Header.stories.tsx b/packages/client/components/ui/components/design/atoms/display/Header.stories.tsx index 10948883f..6b04abdef 100644 --- a/packages/client/components/ui/components/design/atoms/display/Header.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/display/Header.stories.tsx @@ -1,20 +1,19 @@ -import type { ComponentProps } from "solid-js"; +import type { ComponentProps } from 'solid-js'; -import TextColourDecorator from "../../../../decorators/TextColourDecorator"; -import type { ComponentStory } from "../../../stories"; -import { Column } from "../../layout"; - -import { Header, HeaderWithTransparency } from "./Header"; +import TextColourDecorator from '../../../../decorators/TextColourDecorator'; +import type { ComponentStory } from '../../../stories'; +import { Column } from '../../layout'; +import { Header, HeaderWithTransparency } from './Header'; export default { - category: "Design System/Atoms/Display", + category: 'Design System/Atoms/Display', component: Header, stories: [ { - title: "Default", + title: 'Default', }, { - title: "With Transparency", + title: 'With Transparency', component: HeaderWithTransparency, decorators: [ (props) => ( @@ -31,10 +30,10 @@ export default { }, ], props: { - children: "My Cool Server", + children: 'My Cool Server', }, decorators: [TextColourDecorator], propTypes: { - children: "string", + children: 'string', }, } as ComponentStory<typeof Header, ComponentProps<typeof Header>>; diff --git a/packages/client/components/ui/components/design/atoms/display/Header.tsx b/packages/client/components/ui/components/design/atoms/display/Header.tsx index d138d9c10..78028a7a7 100644 --- a/packages/client/components/ui/components/design/atoms/display/Header.tsx +++ b/packages/client/components/ui/components/design/atoms/display/Header.tsx @@ -1,7 +1,7 @@ -import { styled } from "solid-styled-components"; +import { styled } from 'solid-styled-components'; export interface Props { - readonly placement: "primary" | "secondary"; + readonly placement: 'primary' | 'secondary'; readonly topBorder?: boolean; readonly bottomBorder?: boolean; @@ -10,7 +10,7 @@ export interface Props { /** * Generic header component */ -export const Header = styled("div", "Header")<Props>` +export const Header = styled('div', 'Header')<Props>` gap: 10px; flex: 0 auto; display: flex; @@ -22,16 +22,16 @@ export const Header = styled("div", "Header")<Props>` user-select: none; margin: ${(props) => - props.placement === "primary" - ? (props.theme!.gap.md + " ").repeat(3) + "0" - : ""}; + props.placement === 'primary' + ? (props.theme!.gap.md + ' ').repeat(3) + '0' + : ''}; overflow: hidden; height: ${(props) => props.theme!.layout.height.header}; border-radius: ${(props) => props.theme!.borderRadius.lg}; - color: ${(props) => props.theme!.colours["sidebar-header-foreground"]}; + color: ${(props) => props.theme!.colours['sidebar-header-foreground']}; background-color: ${(props) => - props.theme!.colours["sidebar-header-background"]}; + props.theme!.colours['sidebar-header-background']}; svg { flex-shrink: 0; @@ -48,7 +48,7 @@ export const Header = styled("div", "Header")<Props>` */ export const BelowFloatingHeader = styled.div` position: relative; - z-index: ${(props) => props.theme!.layout.zIndex["floating-bar"]}; + z-index: ${(props) => props.theme!.layout.zIndex['floating-bar']}; > * { width: 100%; @@ -65,12 +65,12 @@ export const BelowFloatingHeader = styled.div` */ export const HeaderWithTransparency = styled(Header)` background-color: ${(props) => - props.theme!.colours["sidebar-header-transparent-background"]}; + props.theme!.colours['sidebar-header-transparent-background']}; backdrop-filter: ${(props) => props.theme!.effects.blur.md}; position: absolute; width: calc(100% - ${(props) => props.theme!.gap.md}); - z-index: ${(props) => props.theme!.layout.zIndex["floating-bar"]}; + z-index: ${(props) => props.theme!.layout.zIndex['floating-bar']}; `; /** @@ -81,18 +81,18 @@ export const HeaderWithImage = styled(Header)` align-items: flex-end; justify-content: stretch; text-shadow: 0px 0px 1px ${(props) => props.theme!.colours.foreground}; - height: ${(props) => props.theme!.layout.height["tall-header"]}; + height: ${(props) => props.theme!.layout.height['tall-header']}; margin: ${(props) => props.theme!.gap.md}; > * { flex-grow: 1; padding: 6px 14px; color: ${(props) => - props.theme!.colours["sidebar-header-with-image-text-foreground"]}; + props.theme!.colours['sidebar-header-with-image-text-foreground']}; background: linear-gradient( 0deg, ${(props) => - props.theme!.colours["sidebar-header-with-image-text-background"]}, + props.theme!.colours['sidebar-header-with-image-text-background']}, transparent ); } diff --git a/packages/client/components/ui/components/design/atoms/display/Initials.stories.tsx b/packages/client/components/ui/components/design/atoms/display/Initials.stories.tsx index f9c6eee81..6f6ea443d 100644 --- a/packages/client/components/ui/components/design/atoms/display/Initials.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/display/Initials.stories.tsx @@ -1,25 +1,24 @@ -import type { ComponentProps } from "solid-js"; +import type { ComponentProps } from 'solid-js'; -import TextColourDecorator from "../../../../decorators/TextColourDecorator"; -import type { ComponentStory } from "../../../stories"; - -import { Initials } from "./Initials"; +import TextColourDecorator from '../../../../decorators/TextColourDecorator'; +import type { ComponentStory } from '../../../stories'; +import { Initials } from './Initials'; export default { - category: "Design System/Atoms/Display", + category: 'Design System/Atoms/Display', component: Initials, stories: [ { - title: "Default", + title: 'Default', props: { - input: "this is a long string", + input: 'this is a long string', maxLength: 3, }, }, ], propTypes: { - input: "string", - maxLength: "number", + input: 'string', + maxLength: 'number', }, decorators: [TextColourDecorator], } as ComponentStory<typeof Initials, ComponentProps<typeof Initials>>; diff --git a/packages/client/components/ui/components/design/atoms/display/Initials.tsx b/packages/client/components/ui/components/design/atoms/display/Initials.tsx index b251d6c35..7055c2abc 100644 --- a/packages/client/components/ui/components/design/atoms/display/Initials.tsx +++ b/packages/client/components/ui/components/design/atoms/display/Initials.tsx @@ -1,4 +1,4 @@ -export type Props = { +export interface Props { /** * Input string */ @@ -8,7 +8,7 @@ export type Props = { * Maximum length */ maxLength?: number; -}; +} /** * Generate initials from some string @@ -30,5 +30,5 @@ export function toInitials(input: string, maxLength = 2) { * Takes some string and displays the first letter of each word */ export function Initials(props: Props) { - return <>{toInitials(props.input, props.maxLength).join("")}</>; + return <>{toInitials(props.input, props.maxLength).join('')}</>; } diff --git a/packages/client/components/ui/components/design/atoms/display/Key.stories.tsx b/packages/client/components/ui/components/design/atoms/display/Key.stories.tsx index e87b37dac..43fe686ce 100644 --- a/packages/client/components/ui/components/design/atoms/display/Key.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/display/Key.stories.tsx @@ -1,37 +1,36 @@ -import type { ComponentProps } from "solid-js"; +import type { ComponentProps } from 'solid-js'; -import TextColourDecorator from "../../../../decorators/TextColourDecorator"; -import type { ComponentStory } from "../../../stories"; - -import { Key } from "./Key"; +import TextColourDecorator from '../../../../decorators/TextColourDecorator'; +import type { ComponentStory } from '../../../stories'; +import { Key } from './Key'; export default { - category: "Design System/Atoms/Display", + category: 'Design System/Atoms/Display', component: Key, stories: [ { - title: "Default", + title: 'Default', props: { - children: "K", + children: 'K', }, }, { - title: "Simple", + title: 'Simple', props: { - children: "ArrowUp", + children: 'ArrowUp', simple: true, }, }, { - title: "Special Key Replacement", + title: 'Special Key Replacement', props: { - children: "ArrowUp", + children: 'ArrowUp', }, }, ], propTypes: { - children: "string", - short: "boolean", - simple: "boolean", + children: 'string', + short: 'boolean', + simple: 'boolean', }, } as ComponentStory<typeof Key, ComponentProps<typeof Key>>; diff --git a/packages/client/components/ui/components/design/atoms/display/Key.tsx b/packages/client/components/ui/components/design/atoms/display/Key.tsx index 8fc1db450..7c1779621 100644 --- a/packages/client/components/ui/components/design/atoms/display/Key.tsx +++ b/packages/client/components/ui/components/design/atoms/display/Key.tsx @@ -1,13 +1,13 @@ +import { useTranslation } from '@revolt/i18n'; import { FaSolidArrowDown, FaSolidArrowLeft, FaSolidArrowRight, FaSolidArrowUp, -} from "solid-icons/fa"; -import { Component, JSXElement, createMemo } from "solid-js"; -import { styled } from "solid-styled-components"; - -import { useTranslation } from "@revolt/i18n"; +} from 'solid-icons/fa'; +import type { Component, JSXElement } from 'solid-js'; +import { createMemo } from 'solid-js'; +import { styled } from 'solid-styled-components'; export interface Props { children: string; @@ -16,7 +16,7 @@ export interface Props { simple?: boolean; } -const Base = styled("kbd", "Key")<Pick<Props, "simple">>` +const Base = styled('kbd', 'Key')<Pick<Props, 'simple'>>` display: inline-flex; color: var(--colours-component-key-foreground); background: var(--colours-component-key-background); @@ -52,10 +52,10 @@ const Base = styled("kbd", "Key")<Pick<Props, "simple">>` `; const REPLACEMENTS: Record<string, () => JSXElement> = { - ArrowUp: () => <FaSolidArrowUp size="1em" />, - ArrowDown: () => <FaSolidArrowDown size="1em" />, - ArrowLeft: () => <FaSolidArrowLeft size="1em" />, - ArrowRight: () => <FaSolidArrowRight size="1em" />, + ArrowUp: () => <FaSolidArrowUp size='1em' />, + ArrowDown: () => <FaSolidArrowDown size='1em' />, + ArrowLeft: () => <FaSolidArrowLeft size='1em' />, + ArrowRight: () => <FaSolidArrowRight size='1em' />, }; export const Key: Component<Props> = (props) => { diff --git a/packages/client/components/ui/components/design/atoms/display/KeySequence.stories.tsx b/packages/client/components/ui/components/design/atoms/display/KeySequence.stories.tsx index 05bb46ba6..07dbcf75a 100644 --- a/packages/client/components/ui/components/design/atoms/display/KeySequence.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/display/KeySequence.stories.tsx @@ -1,40 +1,39 @@ -import type { ComponentProps } from "solid-js"; +import type { ComponentProps } from 'solid-js'; -import TextColourDecorator from "../../../../decorators/TextColourDecorator"; -import type { ComponentStory } from "../../../stories"; - -import { KeySequence } from "./KeySequence"; +import TextColourDecorator from '../../../../decorators/TextColourDecorator'; +import type { ComponentStory } from '../../../stories'; +import { KeySequence } from './KeySequence'; export default { - category: "Design System/Atoms/Display", + category: 'Design System/Atoms/Display', component: KeySequence, stories: [ { - title: "Default", + title: 'Default', props: { - sequence: "Control+Alt+ArrowUp", + sequence: 'Control+Alt+ArrowUp', short: true, }, }, { - title: "Simple", + title: 'Simple', props: { - sequence: "Control+Alt+ArrowUp", + sequence: 'Control+Alt+ArrowUp', simple: true, short: true, }, }, { - title: "Long", + title: 'Long', props: { - sequence: "Control+Alt+ArrowUp", + sequence: 'Control+Alt+ArrowUp', short: false, }, }, ], propTypes: { - sequence: "string", - short: "boolean", - simple: "boolean", + sequence: 'string', + short: 'boolean', + simple: 'boolean', }, } as ComponentStory<typeof KeySequence, ComponentProps<typeof KeySequence>>; diff --git a/packages/client/components/ui/components/design/atoms/display/KeySequence.tsx b/packages/client/components/ui/components/design/atoms/display/KeySequence.tsx index b77aeab4a..dbdfa11d2 100644 --- a/packages/client/components/ui/components/design/atoms/display/KeySequence.tsx +++ b/packages/client/components/ui/components/design/atoms/display/KeySequence.tsx @@ -1,12 +1,12 @@ -import { Component, For, createMemo } from "solid-js"; -import { styled } from "solid-styled-components"; - import { KeybindSequence, type KeyComboSequence as TKeySequence, -} from "@revolt/keybinds"; +} from '@revolt/keybinds'; +import type { Component } from 'solid-js'; +import { createMemo, For } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { Key } from "./Key"; +import { Key } from './Key'; export interface Props { sequence: string | TKeySequence; @@ -15,7 +15,7 @@ export interface Props { simple?: boolean; } -const Base = styled("kbd", "KeySequence")` +const Base = styled('kbd', 'KeySequence')` display: inline-flex; place-items: center; flex-wrap: wrap; @@ -35,7 +35,7 @@ const Base = styled("kbd", "KeySequence")` export const KeySequence: Component<Props> = (props) => { // accepting strings and parsing them isn't really needed other than a nice api? const sequence = createMemo(() => - typeof props.sequence === "string" + typeof props.sequence === 'string' ? KeybindSequence.parse(props.sequence) : props.sequence ); @@ -47,7 +47,7 @@ export const KeySequence: Component<Props> = (props) => { <For each={combo}> {(key, index) => ( <> - {index() !== 0 && "+"} + {index() !== 0 && '+'} <Key {...props}>{key}</Key> </> )} diff --git a/packages/client/components/ui/components/design/atoms/display/Modal.stories.tsx b/packages/client/components/ui/components/design/atoms/display/Modal.stories.tsx index 21f7f9147..fd4bc7a85 100644 --- a/packages/client/components/ui/components/design/atoms/display/Modal.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/display/Modal.stories.tsx @@ -1,66 +1,65 @@ -import { ComponentProps } from "solid-js"; +import type { ComponentProps } from 'solid-js'; -import type { ComponentStory } from "../../../stories"; -import { Button } from "../inputs"; - -import { Modal } from "./Modal"; +import type { ComponentStory } from '../../../stories'; +import { Button } from '../inputs'; +import { Modal } from './Modal'; const urlSearchParams = new URLSearchParams(window.location.search); const params = Object.fromEntries(urlSearchParams.entries()); -function shouldShow(key: "default" | "no-actions") { - const show = params["show"]; +function shouldShow(key: 'default' | 'no-actions') { + const show = params['show']; return show ? show === key : false; } export default { component: Modal, - category: "Design System/Atoms/Display", + category: 'Design System/Atoms/Display', stories: [ { - title: "Default", + title: 'Default', props: { - show: shouldShow("default"), + show: shouldShow('default'), }, }, { - title: "No Actions", + title: 'No Actions', props: { actions: [], - show: shouldShow("no-actions"), + show: shouldShow('no-actions'), }, }, ], props: { - title: "Modal Title", - description: "Optional modal description.", + title: 'Modal Title', + description: 'Optional modal description.', children: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.", actions: [ { - children: "OK", - palette: "accent", + children: 'OK', + palette: 'accent', confirmation: true, onClick: () => true, }, { - children: "Cancel", - palette: "plain", + children: 'Cancel', + palette: 'plain', onClick: () => true, }, ], }, propTypes: { - show: "boolean", - title: "string", - description: "string", - children: "string", + show: 'boolean', + title: 'string', + description: 'string', + children: 'string', }, decorators: [ (props) => ( <div> <Button - palette="primary" + palette='primary' onClick={() => (props.childProps as any).onShow()} > Open Modal diff --git a/packages/client/components/ui/components/design/atoms/display/Modal.tsx b/packages/client/components/ui/components/design/atoms/display/Modal.tsx index 6f3a8a14c..d91915cd3 100644 --- a/packages/client/components/ui/components/design/atoms/display/Modal.tsx +++ b/packages/client/components/ui/components/design/atoms/display/Modal.tsx @@ -1,14 +1,13 @@ -import { ComponentProps, For, JSX, Show } from "solid-js"; -import { Portal } from "solid-js/web"; -import { styled } from "solid-styled-components"; +import type { ComponentProps, JSX } from 'solid-js'; +import { For, Show } from 'solid-js'; +import { Portal } from 'solid-js/web'; +import { Motion, Presence } from 'solid-motionone'; +import { styled } from 'solid-styled-components'; -import { Motion, Presence } from "@motionone/solid"; +import { Button } from '../inputs/Button'; +import { Typography } from './Typography'; -import { Button } from "../inputs/Button"; - -import { Typography } from "./Typography"; - -export type Action = Omit<ComponentProps<typeof Button>, "onClick"> & { +export type Action = Omit<ComponentProps<typeof Button>, 'onClick'> & { confirmation?: boolean; onClick: () => void | boolean | Promise<boolean>; }; @@ -78,14 +77,14 @@ export interface Props { /** * Fixed position container to centre the modal */ -const Base = styled("div", "Modal")<{ show?: boolean }>` +const Base = styled('div', 'Modal')<{ show?: boolean }>` top: 0; left: 0; width: 100%; height: 100%; position: fixed; - z-index: ${(props) => props.theme!.layout.zIndex["modal"]}; + z-index: ${(props) => props.theme!.layout.zIndex['modal']}; max-height: 100%; user-select: none; @@ -98,13 +97,13 @@ const Base = styled("div", "Modal")<{ show?: boolean }>` place-items: center; transition: ${(props) => props.theme!.transitions.medium} all; - pointer-events: ${(props) => (props.show ? "all" : "none")}; + pointer-events: ${(props) => (props.show ? 'all' : 'none')}; /** TODO: rgb value here */ - background: ${(props) => (props.show ? "rgba(0, 0, 0, 0.6)" : "transparent")}; + background: ${(props) => (props.show ? 'rgba(0, 0, 0, 0.6)' : 'transparent')}; `; -type ContainerProps = Pick<Props, "transparent" | "maxWidth" | "maxHeight"> & { +type ContainerProps = Pick<Props, 'transparent' | 'maxWidth' | 'maxHeight'> & { actions: boolean; }; @@ -112,22 +111,22 @@ type ContainerProps = Pick<Props, "transparent" | "maxWidth" | "maxHeight"> & { * Component that wraps all of the actual modal content */ const Container = styled.div<ContainerProps>` - width: ${(props) => (props.maxWidth ? "100%" : "unset")}; - max-width: min(calc(100vw - 20px), ${(props) => props.maxWidth ?? "450px"}); - max-height: min(calc(100vh - 20px), ${(props) => props.maxHeight ?? "650px"}); + width: ${(props) => (props.maxWidth ? '100%' : 'unset')}; + max-width: min(calc(100vw - 20px), ${(props) => props.maxWidth ?? '450px'}); + max-height: min(calc(100vh - 20px), ${(props) => props.maxHeight ?? '650px'}); margin: 20px; display: flex; flex-direction: column; - color: ${(props) => props.theme!.colours["component-modal-foreground"]}; + color: ${(props) => props.theme!.colours['component-modal-foreground']}; background: ${(props) => props.transparent - ? "transparent" - : props.theme!.colours["component-modal-background"]}; + ? 'transparent' + : props.theme!.colours['component-modal-background']}; border-radius: ${(props) => - props.transparent ? "none" : props.theme!.borderRadius.lg}; - overflow: ${(props) => (props.transparent ? "unset" : "hidden")}; + props.transparent ? 'none' : props.theme!.borderRadius.lg}; + overflow: ${(props) => (props.transparent ? 'unset' : 'hidden')}; `; /** @@ -160,7 +159,7 @@ const Content = styled.div<Props>` /** * Container for bottom modal actions */ -const Actions = styled("div", "Actions")` +const Actions = styled('div', 'Actions')` flex-shrink: 0; gap: 8px; @@ -176,11 +175,11 @@ const Actions = styled("div", "Actions")` */ export function Modal(props: Props) { const showActions = () => - typeof props.actions === "function" || + typeof props.actions === 'function' || (props.actions ? props.actions.length > 0 : false); return ( - <Portal mount={document.getElementById("floating")!}> + <Portal mount={document.getElementById('floating')!}> <Base show={props.show} onClick={() => !props.nonDismissable && props.onClose?.()} @@ -200,12 +199,12 @@ export function Modal(props: Props) { <Show when={props.title || props.description}> <Title> <Show when={props.title}> - <Typography variant="modal-title"> + <Typography variant='modal-title'> {props.title} </Typography> </Show> <Show when={props.description}> - <Typography variant="modal-description"> + <Typography variant='modal-description'> {props.description} </Typography> </Show> @@ -218,7 +217,7 @@ export function Modal(props: Props) { <Actions> <For each={ - typeof props.actions === "function" + typeof props.actions === 'function' ? props.actions() : props.actions } diff --git a/packages/client/components/ui/components/design/atoms/display/Time.stories.tsx b/packages/client/components/ui/components/design/atoms/display/Time.stories.tsx index 4f0a01e85..1a043d858 100644 --- a/packages/client/components/ui/components/design/atoms/display/Time.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/display/Time.stories.tsx @@ -1,50 +1,49 @@ -import type { ComponentProps } from "solid-js"; +import type { ComponentProps } from 'solid-js'; -import TextColourDecorator from "../../../../decorators/TextColourDecorator"; -import type { ComponentStory } from "../../../stories"; +import TextColourDecorator from '../../../../decorators/TextColourDecorator'; +import type { ComponentStory } from '../../../stories'; +import { Time } from './Time'; -import { Time } from "./Time"; - -const REFERENCE_TIME = "2022-12-07T20:27:50.000Z"; +const REFERENCE_TIME = '2022-12-07T20:27:50.000'; export const TIME_TEST_DATA = [ { - value: "2022-12-07T20:20:50.000Z", - format: "calendar" as const, - expected: "Today at 8:20 PM", + value: '2022-12-07T20:20:50.000', + format: 'calendar' as const, + expected: 'Today at 8:20 PM', referenceTime: REFERENCE_TIME, }, { - value: "2022-12-05T20:20:50.000Z", - format: "calendar" as const, - expected: "Last Monday at 8:20 PM", + value: '2022-12-05T20:20:50.000', + format: 'calendar' as const, + expected: 'Last Monday at 8:20 PM', referenceTime: REFERENCE_TIME, }, { - value: "2022-12-01T20:20:50.000Z", - format: "time" as const, - expected: "20:20", + value: '2022-12-01T20:20:50.000', + format: 'time' as const, + expected: '20:20', referenceTime: REFERENCE_TIME, }, ]; export default { - category: "Design System/Atoms/Display", + category: 'Design System/Atoms/Display', component: Time, stories: [ { - title: "Calendar", + title: 'Calendar', props: { ...TIME_TEST_DATA[0] }, }, { - title: "Time", + title: 'Time', props: { ...TIME_TEST_DATA[2] }, }, ], propTypes: { - value: "string", - format: ["time", "calendar"], - referenceTime: "string", + value: 'string', + format: ['time', 'calendar'], + referenceTime: 'string', }, decorators: [TextColourDecorator], } as ComponentStory<typeof Time, ComponentProps<typeof Time>>; diff --git a/packages/client/components/ui/components/design/atoms/display/Time.tsx b/packages/client/components/ui/components/design/atoms/display/Time.tsx index 4d5cc92e5..bc8533ae7 100644 --- a/packages/client/components/ui/components/design/atoms/display/Time.tsx +++ b/packages/client/components/ui/components/design/atoms/display/Time.tsx @@ -1,20 +1,19 @@ -import { createSignal, onCleanup } from "solid-js"; - -import { dayjs } from "@revolt/i18n"; +import { dayjs } from '@revolt/i18n'; +import { createSignal, onCleanup } from 'solid-js'; interface Props { value: number | Date | string; format: - | "calendar" - | "datetime" - | "date" - | "dateNormal" - | "dateAmerican" - | "iso8601" - | "relative" - | "time" - | "time24" - | "time12"; + | 'calendar' + | 'datetime' + | 'date' + | 'dateNormal' + | 'dateAmerican' + | 'iso8601' + | 'relative' + | 'time' + | 'time24' + | 'time12'; referenceTime?: number | Date | string; } @@ -23,27 +22,27 @@ interface Props { */ export function formatTime(options: Props): string { switch (options.format) { - case "calendar": + case 'calendar': return dayjs(options.value).calendar(options.referenceTime); - case "datetime": + case 'datetime': return `${formatTime({ - format: "date", + format: 'date', value: options.value, - })} ${formatTime({ format: "time", value: options.value })}`; - case "date": - case "dateNormal": - return dayjs(options.value).format("DD/MM/YYYY"); - case "dateAmerican": - return dayjs(options.value).format("MM/DD/YYYY"); - case "iso8601": - return dayjs(options.value).format("YYYY-MM-DD"); - case "relative": + })} ${formatTime({ format: 'time', value: options.value })}`; + case 'date': + case 'dateNormal': + return dayjs(options.value).format('DD/MM/YYYY'); + case 'dateAmerican': + return dayjs(options.value).format('MM/DD/YYYY'); + case 'iso8601': + return dayjs(options.value).format('YYYY-MM-DD'); + case 'relative': return dayjs(options.value).fromNow(); - case "time12": - return dayjs(options.value).format("h:mm A"); - case "time24": + case 'time12': + return dayjs(options.value).format('h:mm A'); + case 'time24': default: - return dayjs(options.value).format("HH:mm"); + return dayjs(options.value).format('HH:mm'); } } diff --git a/packages/client/components/ui/components/design/atoms/display/Typography.stories.tsx b/packages/client/components/ui/components/design/atoms/display/Typography.stories.tsx index fe91e5aad..715fd5f4d 100644 --- a/packages/client/components/ui/components/design/atoms/display/Typography.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/display/Typography.stories.tsx @@ -1,70 +1,69 @@ -import type { ComponentProps } from "solid-js"; +import type { ComponentProps } from 'solid-js'; -import TextColourDecorator from "../../../../decorators/TextColourDecorator"; -import type { ComponentStory } from "../../../stories"; - -import { Typography } from "./Typography"; +import TextColourDecorator from '../../../../decorators/TextColourDecorator'; +import type { ComponentStory } from '../../../stories'; +import { Typography } from './Typography'; export default { - category: "Design System/Atoms/Display", + category: 'Design System/Atoms/Display', component: Typography, stories: [ { - title: "Heading 1", + title: 'Heading 1', props: { - variant: "h1", + variant: 'h1', }, }, { - title: "Heading 2", + title: 'Heading 2', props: { - variant: "h2", + variant: 'h2', }, }, { - title: "Heading 3", + title: 'Heading 3', props: { - variant: "h3", + variant: 'h3', }, }, { - title: "Heading 4", + title: 'Heading 4', props: { - variant: "h4", + variant: 'h4', }, }, { - title: "Subtitle", + title: 'Subtitle', props: { - variant: "subtitle", + variant: 'subtitle', }, }, { - title: "Label", + title: 'Label', props: { - variant: "label", + variant: 'label', }, }, { - title: "Small", + title: 'Small', props: { - variant: "small", + variant: 'small', }, decorators: [TextColourDecorator], }, { - title: "Username", + title: 'Username', props: { - variant: "username", + variant: 'username', }, decorators: [TextColourDecorator], }, ], props: { - children: "The quick brown fox jumps over the lazy dog.", + children: 'The quick brown fox jumps over the lazy dog.', }, propTypes: { - children: "string", - variant: ["h1", "h2", "h3", "h4", "subtitle", "label", "small", "username"], + children: 'string', + variant: ['h1', 'h2', 'h3', 'h4', 'subtitle', 'label', 'small', 'username'], }, } as ComponentStory<typeof Typography, ComponentProps<typeof Typography>>; diff --git a/packages/client/components/ui/components/design/atoms/display/Typography.tsx b/packages/client/components/ui/components/design/atoms/display/Typography.tsx index b15d6c905..50cd3811c 100644 --- a/packages/client/components/ui/components/design/atoms/display/Typography.tsx +++ b/packages/client/components/ui/components/design/atoms/display/Typography.tsx @@ -1,17 +1,13 @@ -import { splitProps } from "solid-js"; -import type { JSX } from "solid-js/jsx-runtime"; -import { - DefaultTheme, - StylesArg, - css, - useTheme, -} from "solid-styled-components"; +import { splitProps } from 'solid-js'; +import type { JSX } from 'solid-js/jsx-runtime'; +import type { DefaultTheme, StylesArg } from 'solid-styled-components'; +import { css, useTheme } from 'solid-styled-components'; type TypographyProps = { /** * Which variant to use */ - readonly variant: keyof DefaultTheme["typography"]; + readonly variant: keyof DefaultTheme['typography']; // eslint-disable-next-line @typescript-eslint/no-explicit-any } & JSX.HTMLAttributes<any>; @@ -23,7 +19,7 @@ type TypographyProps = { */ export function generateTypography( theme: DefaultTheme, - variant: keyof DefaultTheme["typography"] + variant: keyof DefaultTheme['typography'] ) { const { fontSize, fontWeight, lineHeight, margin, textTransform, colour } = theme.typography[variant] ?? {}; @@ -51,17 +47,17 @@ export function generateTypography( */ export function generateTypographyCSS( theme: DefaultTheme, - variant: keyof DefaultTheme["typography"] + variant: keyof DefaultTheme['typography'] ) { const { fontSize, fontWeight, lineHeight, margin, textTransform, colour } = theme.typography[variant] ?? {}; const styles = { - "font-size": fontSize, - "font-weight": fontWeight, - "line-height": lineHeight, + 'font-size': fontSize, + 'font-weight': fontWeight, + 'line-height': lineHeight, margin, - "text-transform": textTransform, + 'text-transform': textTransform, } as Record<string, string>; if (colour) { @@ -71,7 +67,7 @@ export function generateTypographyCSS( return Object.keys(styles) .filter((key) => styles[key]) .map((key) => `${key}:${styles[key]};`) - .join(""); + .join(''); } /** @@ -80,23 +76,23 @@ export function generateTypographyCSS( */ export const Typography = (props: TypographyProps) => { /* eslint-disable solid/reactivity, solid/components-return-once */ - const [local, others] = splitProps(props, ["variant"]); + const [local, others] = splitProps(props, ['variant']); const theme = useTheme(); const className = css(generateTypography(theme, local.variant)); switch (theme.typography[local.variant]?.element) { - case "h1": + case 'h1': return <h1 class={className} {...others} />; - case "h2": + case 'h2': return <h2 class={className} {...others} />; - case "h3": + case 'h3': return <h3 class={className} {...others} />; - case "h4": + case 'h4': return <h4 class={className} {...others} />; - case "label": + case 'label': return <label class={className} {...others} />; - case "div": + case 'div': return <div class={className} {...others} />; default: return <span class={className} {...others} />; diff --git a/packages/client/components/ui/components/design/atoms/display/Username.tsx b/packages/client/components/ui/components/design/atoms/display/Username.tsx index 1b9540b17..6dd5bcf39 100644 --- a/packages/client/components/ui/components/design/atoms/display/Username.tsx +++ b/packages/client/components/ui/components/design/atoms/display/Username.tsx @@ -1,7 +1,8 @@ -import { ComponentProps, splitProps } from "solid-js"; +import type { ComponentProps } from 'solid-js'; +import { splitProps } from 'solid-js'; -import { ColouredText } from "./ColouredText"; -import { Typography } from "./Typography"; +import { ColouredText } from './ColouredText'; +import { Typography } from './Typography'; type Props = { /** @@ -13,19 +14,19 @@ type Props = { * Text colour */ colour?: string; -} & Omit<ComponentProps<typeof Typography>, "variant">; +} & Omit<ComponentProps<typeof Typography>, 'variant'>; /** * Username */ export function Username(props: Props) { - const [local, remote] = splitProps(props, ["username", "colour"]); + const [local, remote] = splitProps(props, ['username', 'colour']); return ( - <Typography {...remote} variant="username"> + <Typography {...remote} variant='username'> <ColouredText colour={local.colour!} - clip={local.colour?.includes("gradient")} + clip={local.colour?.includes('gradient')} > {local.username} </ColouredText> diff --git a/packages/client/components/ui/components/design/atoms/display/__tests__/initialsComponent.test.tsx b/packages/client/components/ui/components/design/atoms/display/__tests__/initialsComponent.test.tsx index da0dc4545..70d155b23 100644 --- a/packages/client/components/ui/components/design/atoms/display/__tests__/initialsComponent.test.tsx +++ b/packages/client/components/ui/components/design/atoms/display/__tests__/initialsComponent.test.tsx @@ -1,35 +1,35 @@ -import { render, screen } from "@solidjs/testing-library"; -import { describe, expect, it } from "vitest"; +import { render, screen } from '@solidjs/testing-library'; +import { describe, expect, it } from 'vitest'; -import { Initials, toInitials } from "../Initials"; +import { Initials, toInitials } from '../Initials'; const TEST_DATA = [ { - input: "test string", - output: "ts", + input: 'test string', + output: 'ts', }, { - input: "test string", + input: 'test string', maxLength: 1, - output: "t", + output: 't', }, { - input: "some other test string which is quite long", + input: 'some other test string which is quite long', maxLength: 3, - output: "sot", + output: 'sot', }, ]; -describe("Initials component", () => { - it("should have correct output", () => { +describe('Initials component', () => { + it('should have correct output', () => { for (const entry of TEST_DATA) { expect(toInitials(entry.input, entry.maxLength)).toStrictEqual( - entry.output.split("") + entry.output.split('') ); } }); - it("should render the correct output", () => { + it('should render the correct output', () => { for (const entry of TEST_DATA) { render(() => <Initials {...entry} />); const textElm = screen.getByText(entry.output); diff --git a/packages/client/components/ui/components/design/atoms/display/__tests__/timeComponent.test.tsx b/packages/client/components/ui/components/design/atoms/display/__tests__/timeComponent.test.tsx index cb0cde63a..dc3bf13b8 100644 --- a/packages/client/components/ui/components/design/atoms/display/__tests__/timeComponent.test.tsx +++ b/packages/client/components/ui/components/design/atoms/display/__tests__/timeComponent.test.tsx @@ -1,17 +1,19 @@ -import { render, screen } from "@solidjs/testing-library"; -import { describe, expect, it } from "vitest"; +import { render, screen } from '@solidjs/testing-library'; +import { describe, expect, it } from 'vitest'; -import { Time, formatTime } from "../Time"; -import { TIME_TEST_DATA } from "../Time.stories"; +import { formatTime, Time } from '../Time'; +import { TIME_TEST_DATA } from '../Time.stories'; +import dayjs from "dayjs"; -describe("Time component", () => { - it("should have correct output", () => { +describe('Time component', () => { + it('should have correct output', () => { for (const entry of TIME_TEST_DATA) { + console.log(dayjs(entry.value).format()) expect(formatTime(entry)).toBe(entry.expected); } }); - it("should render the correct output", () => { + it('should render the correct output', () => { for (const entry of TIME_TEST_DATA) { render(() => <Time {...entry} />); const textElm = screen.getByText(entry.expected); diff --git a/packages/client/components/ui/components/design/atoms/display/index.ts b/packages/client/components/ui/components/design/atoms/display/index.ts index b11981b13..0404955cc 100644 --- a/packages/client/components/ui/components/design/atoms/display/index.ts +++ b/packages/client/components/ui/components/design/atoms/display/index.ts @@ -1,17 +1,17 @@ -export { Avatar } from "./Avatar"; -export { Breadcrumbs } from "./Breadcrumbs"; -export { ColouredText } from "./ColouredText"; -export { FormGroup } from "./FormGroup"; +export { Avatar } from './Avatar'; +export { Breadcrumbs } from './Breadcrumbs'; +export { ColouredText } from './ColouredText'; +export { FormGroup } from './FormGroup'; export { + BelowFloatingHeader, Header, HeaderWithImage, HeaderWithTransparency, - BelowFloatingHeader, -} from "./Header"; -export { Initials } from "./Initials"; -export { Time } from "./Time"; -export { Typography } from "./Typography"; -export { Modal } from "./Modal"; -export { Username } from "./Username"; -export { Key } from "./Key"; -export { KeySequence } from "./KeySequence"; +} from './Header'; +export { Initials } from './Initials'; +export { Key } from './Key'; +export { KeySequence } from './KeySequence'; +export { Modal } from './Modal'; +export { Time } from './Time'; +export { Typography } from './Typography'; +export { Username } from './Username'; diff --git a/packages/client/components/ui/components/design/atoms/index.ts b/packages/client/components/ui/components/design/atoms/index.ts index d5b50baa4..e1740809d 100644 --- a/packages/client/components/ui/components/design/atoms/index.ts +++ b/packages/client/components/ui/components/design/atoms/index.ts @@ -1,3 +1,3 @@ -export * from "./display"; -export * from "./indicators"; -export * from "./inputs"; +export * from './display'; +export * from './indicators'; +export * from './inputs'; diff --git a/packages/client/components/ui/components/design/atoms/indicators/BlockedMessage.tsx b/packages/client/components/ui/components/design/atoms/indicators/BlockedMessage.tsx index 14971d61b..583d11194 100644 --- a/packages/client/components/ui/components/design/atoms/indicators/BlockedMessage.tsx +++ b/packages/client/components/ui/components/design/atoms/indicators/BlockedMessage.tsx @@ -1,15 +1,13 @@ -import { styled } from "solid-styled-components"; +import MdClose from '@material-design-icons/svg/filled/close.svg?component-solid'; +import { useTranslation } from '@revolt/i18n'; +import { styled } from 'solid-styled-components'; -import { useTranslation } from "@revolt/i18n"; - -import MdClose from "@material-design-icons/svg/filled/close.svg?component-solid"; - -import { iconSize } from "../../../.."; +import { iconSize } from '../../../..'; /** * Base styles */ -const Base = styled("div")<{ unread?: boolean }>` +const Base = styled('div')<{ unread?: boolean }>` display: flex; align-items: center; @@ -20,11 +18,11 @@ const Base = styled("div")<{ unread?: boolean }>` font-size: 0.8em; /* TODO should be in typography */ color: ${(props) => - props.theme!.colours["messaging-component-blocked-message-foreground"]}; + props.theme!.colours['messaging-component-blocked-message-foreground']}; fill: ${(props) => - props.theme!.colours["messaging-component-blocked-message-foreground"]}; + props.theme!.colours['messaging-component-blocked-message-foreground']}; background: ${(props) => - props.theme!.colours["messaging-component-blocked-message-background"]}; + props.theme!.colours['messaging-component-blocked-message-background']}; `; interface Props { @@ -42,8 +40,8 @@ export function BlockedMessage(props: Props) { return ( <Base use:ripple={{ enable: false }}> - <MdClose {...iconSize(16)} />{" "} - {t("app.main.channel.misc.blocked_messages", { + <MdClose {...iconSize(16)} />{' '} + {t('app.main.channel.misc.blocked_messages', { count: props.count.toString(), })} </Base> diff --git a/packages/client/components/ui/components/design/atoms/indicators/ConversationStart.tsx b/packages/client/components/ui/components/design/atoms/indicators/ConversationStart.tsx index f1c366589..e36f97e45 100644 --- a/packages/client/components/ui/components/design/atoms/indicators/ConversationStart.tsx +++ b/packages/client/components/ui/components/design/atoms/indicators/ConversationStart.tsx @@ -1,11 +1,9 @@ -import { Show } from "solid-js"; -import { styled } from "solid-styled-components"; +import { useTranslation } from '@revolt/i18n'; +import type { Channel } from 'revolt.js'; +import { Show } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { Channel } from "revolt.js"; - -import { useTranslation } from "@revolt/i18n"; - -import { Typography } from "../display"; +import { Typography } from '../display'; interface Props { /** @@ -22,15 +20,15 @@ export function ConversationStart(props: Props) { return ( <Base> - <Show when={props.channel.type !== "SavedMessages"}> - <Typography variant="conversation-channel-name"> + <Show when={props.channel.type !== 'SavedMessages'}> + <Typography variant='conversation-channel-name'> {props.channel.name ?? props.channel.recipient?.username} </Typography> </Show> - <Typography variant="conversation-start"> + <Typography variant='conversation-start'> {t( `app.main.channel.start.${ - props.channel.type === "SavedMessages" ? "saved" : "group" + props.channel.type === 'SavedMessages' ? 'saved' : 'group' }` )} </Typography> diff --git a/packages/client/components/ui/components/design/atoms/indicators/MessageDivider.stories.tsx b/packages/client/components/ui/components/design/atoms/indicators/MessageDivider.stories.tsx index f9c67c68e..b20157f12 100644 --- a/packages/client/components/ui/components/design/atoms/indicators/MessageDivider.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/indicators/MessageDivider.stories.tsx @@ -1,36 +1,35 @@ -import makeContainerDecorator from "../../../../decorators/ContainerDecorator"; -import type { ComponentStory } from "../../../stories"; - -import { MessageDivider } from "./MessageDivider"; +import makeContainerDecorator from '../../../../decorators/ContainerDecorator'; +import type { ComponentStory } from '../../../stories'; +import { MessageDivider } from './MessageDivider'; export default { - category: "Design System/Atoms/Indicators", + category: 'Design System/Atoms/Indicators', component: MessageDivider, stories: [ { - title: "Default", + title: 'Default', }, { - title: "Unread", + title: 'Unread', props: { unread: true, }, }, ], props: { - date: "1st December 2022", + date: '1st December 2022', }, decorators: [ makeContainerDecorator({ width: 360, - flex: "col", + flex: 'col', }), makeContainerDecorator({ height: 32, }), ], propTypes: { - date: "string", - unread: "boolean", + date: 'string', + unread: 'boolean', }, } as ComponentStory<typeof MessageDivider>; diff --git a/packages/client/components/ui/components/design/atoms/indicators/MessageDivider.tsx b/packages/client/components/ui/components/design/atoms/indicators/MessageDivider.tsx index 5a5444c3a..d7b5a8931 100644 --- a/packages/client/components/ui/components/design/atoms/indicators/MessageDivider.tsx +++ b/packages/client/components/ui/components/design/atoms/indicators/MessageDivider.tsx @@ -1,10 +1,10 @@ -import { Show } from "solid-js"; -import { styled } from "solid-styled-components"; +import { Show } from 'solid-js'; +import { styled } from 'solid-styled-components'; /** * Divider line */ -const Base = styled("div")<{ unread?: boolean }>` +const Base = styled('div')<{ unread?: boolean }>` height: 0; display: flex; user-select: none; @@ -21,7 +21,7 @@ const Base = styled("div")<{ unread?: boolean }>` border-radius: ${(props) => props.theme!.borderRadius.md}; color: ${({ theme }) => - theme!.colours["messaging-component-message-divider-foreground"]}; + theme!.colours['messaging-component-message-divider-foreground']}; background: ${({ theme }) => theme!.colours.background}; } @@ -29,7 +29,7 @@ const Base = styled("div")<{ unread?: boolean }>` ${({ unread, theme }) => theme!.colours[ `messaging-component-message-divider${ - unread ? "-unread" : "" + unread ? '-unread' : '' }-background` ]}; `; @@ -37,13 +37,13 @@ const Base = styled("div")<{ unread?: boolean }>` /** * Unread indicator */ -const Unread = styled("div")` +const Unread = styled('div')` font-size: 0.625rem; font-weight: 600; color: ${({ theme }) => - theme!.colours["messaging-component-message-divider-unread-foreground"]}; + theme!.colours['messaging-component-message-divider-unread-foreground']}; background: ${({ theme }) => - theme!.colours["messaging-component-message-divider-unread-background"]}; + theme!.colours['messaging-component-message-divider-unread-background']}; padding: 2px 6px; margin-top: -1px; diff --git a/packages/client/components/ui/components/design/atoms/indicators/Preloader.stories.tsx b/packages/client/components/ui/components/design/atoms/indicators/Preloader.stories.tsx index 547c0f010..f271dd9e7 100644 --- a/packages/client/components/ui/components/design/atoms/indicators/Preloader.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/indicators/Preloader.stories.tsx @@ -1,28 +1,27 @@ -import type { ComponentProps } from "solid-js"; +import type { ComponentProps } from 'solid-js'; -import type { ComponentStory } from "../../../stories"; - -import { Preloader } from "./Preloader"; +import type { ComponentStory } from '../../../stories'; +import { Preloader } from './Preloader'; export default { - category: "Design System/Atoms/Indicators", + category: 'Design System/Atoms/Indicators', component: Preloader, stories: [ { - title: "Ring", + title: 'Ring', props: { - type: "ring", + type: 'ring', }, }, { - title: "Spinner", + title: 'Spinner', props: { - type: "spinner", + type: 'spinner', }, }, ], propTypes: { - type: ["ring", "spinner"], - grow: "boolean", + type: ['ring', 'spinner'], + grow: 'boolean', }, } as ComponentStory<typeof Preloader, ComponentProps<typeof Preloader>>; diff --git a/packages/client/components/ui/components/design/atoms/indicators/Preloader.tsx b/packages/client/components/ui/components/design/atoms/indicators/Preloader.tsx index ffe393044..c49df07c1 100644 --- a/packages/client/components/ui/components/design/atoms/indicators/Preloader.tsx +++ b/packages/client/components/ui/components/design/atoms/indicators/Preloader.tsx @@ -1,4 +1,4 @@ -import { keyframes, styled } from "solid-styled-components"; +import { keyframes, styled } from 'solid-styled-components'; /** * Animation for spinner @@ -29,8 +29,8 @@ const prRing = keyframes` /** * Preloader component styling */ -const PreloaderBase = styled("div")<{ grow?: boolean }>` - height: ${(props) => (props.grow ? "100%" : "fit-content")}; +const PreloaderBase = styled('div')<{ grow?: boolean }>` + height: ${(props) => (props.grow ? '100%' : 'fit-content')}; display: flex; align-items: center; @@ -96,7 +96,7 @@ const PreloaderBase = styled("div")<{ grow?: boolean }>` `; export interface Props { - type: "spinner" | "ring"; + type: 'spinner' | 'ring'; grow?: boolean; } diff --git a/packages/client/components/ui/components/design/atoms/indicators/SaveStatus.stories.tsx b/packages/client/components/ui/components/design/atoms/indicators/SaveStatus.stories.tsx index b8e1f7a56..0663d7aae 100644 --- a/packages/client/components/ui/components/design/atoms/indicators/SaveStatus.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/indicators/SaveStatus.stories.tsx @@ -1,33 +1,32 @@ -import type { ComponentProps } from "solid-js"; +import type { ComponentProps } from 'solid-js'; -import type { ComponentStory } from "../../../stories"; - -import { SaveStatus } from "./SaveStatus"; +import type { ComponentStory } from '../../../stories'; +import { SaveStatus } from './SaveStatus'; export default { - category: "Design System/Atoms/Indicators", + category: 'Design System/Atoms/Indicators', component: SaveStatus, stories: [ { - title: "Saved", + title: 'Saved', props: { - status: "saved", + status: 'saved', }, }, { - title: "Editing", + title: 'Editing', props: { - status: "editing", + status: 'editing', }, }, { - title: "Saving", + title: 'Saving', props: { - status: "saving", + status: 'saving', }, }, ], propTypes: { - status: ["saved", "saving", "editing"], + status: ['saved', 'saving', 'editing'], }, } as ComponentStory<typeof SaveStatus, ComponentProps<typeof SaveStatus>>; diff --git a/packages/client/components/ui/components/design/atoms/indicators/SaveStatus.tsx b/packages/client/components/ui/components/design/atoms/indicators/SaveStatus.tsx index ce741e4ee..6bb84d47a 100644 --- a/packages/client/components/ui/components/design/atoms/indicators/SaveStatus.tsx +++ b/packages/client/components/ui/components/design/atoms/indicators/SaveStatus.tsx @@ -2,14 +2,14 @@ import { BiRegularCheck, BiRegularCloudUpload, BiSolidPencil, -} from "solid-icons/bi"; -import { Match, Switch } from "solid-js"; -import { styled } from "solid-styled-components"; +} from 'solid-icons/bi'; +import { Match, Switch } from 'solid-js'; +import { styled } from 'solid-styled-components'; /** * Text and icon styling */ -const Base = styled("div")` +const Base = styled('div')` gap: 8px; padding: 4px; display: flex; @@ -24,7 +24,7 @@ const Base = styled("div")` /** * Possible edit states */ -export type EditStatus = "saved" | "editing" | "saving"; +export type EditStatus = 'saved' | 'editing' | 'saving'; interface Props { status: EditStatus; @@ -37,10 +37,10 @@ export function SaveStatus(props: Props) { return ( <Base> <Switch fallback={<BiRegularCheck size={20} />}> - <Match when={props.status === "editing"}> + <Match when={props.status === 'editing'}> <BiSolidPencil size={20} /> </Match> - <Match when={props.status === "saving"}> + <Match when={props.status === 'saving'}> <BiRegularCloudUpload size={20} /> </Match> </Switch> diff --git a/packages/client/components/ui/components/design/atoms/indicators/Unreads.stories.tsx b/packages/client/components/ui/components/design/atoms/indicators/Unreads.stories.tsx index 18040a736..97dd6b816 100644 --- a/packages/client/components/ui/components/design/atoms/indicators/Unreads.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/indicators/Unreads.stories.tsx @@ -1,25 +1,24 @@ -import type { ComponentProps } from "solid-js"; +import type { ComponentProps } from 'solid-js'; -import makeSvgDecorator from "../../../../decorators/SvgDecorator"; -import type { ComponentStory } from "../../../stories"; - -import { UnreadsGraphic } from "./Unreads"; +import makeSvgDecorator from '../../../../decorators/SvgDecorator'; +import type { ComponentStory } from '../../../stories'; +import { UnreadsGraphic } from './Unreads'; export default { - category: "Design System/Atoms/Indicators", + category: 'Design System/Atoms/Indicators', component: UnreadsGraphic, stories: [ { - title: "Default", + title: 'Default', }, { - title: "With Count", + title: 'With Count', props: { count: 3, }, }, { - title: "Overflow Count", + title: 'Overflow Count', props: { count: 10, }, @@ -30,8 +29,8 @@ export default { }, decorators: [makeSvgDecorator(32, 128)], propTypes: { - unread: "boolean", - count: "number", + unread: 'boolean', + count: 'number', }, } as ComponentStory< typeof UnreadsGraphic, diff --git a/packages/client/components/ui/components/design/atoms/indicators/Unreads.tsx b/packages/client/components/ui/components/design/atoms/indicators/Unreads.tsx index bc2d7a51b..c3ee0f88f 100644 --- a/packages/client/components/ui/components/design/atoms/indicators/Unreads.tsx +++ b/packages/client/components/ui/components/design/atoms/indicators/Unreads.tsx @@ -1,27 +1,26 @@ -import { Match, Switch } from "solid-js"; -import { useTheme } from "solid-styled-components"; +import { Match, Switch } from 'solid-js'; +import { useTheme } from 'solid-styled-components'; +import { styled } from 'styled-system/jsx'; -import { styled } from "styled-system/jsx"; - -export type Props = { +export interface Props { unread: boolean; count: number; -}; +} /** * Styles for the counter */ -const UnreadCounter = styled("div", { +const UnreadCounter = styled('div', { base: { - width: "10px", - height: "10px", - marginTop: "-1px", - textAlign: "center", + width: '10px', + height: '10px', + marginTop: '-1px', + textAlign: 'center', - fontSize: "8px", + fontSize: '8px', fontWeight: 600, - color: "var(--customColours-error-onColor)", + color: 'var(--customColours-error-onColor)', }, }); @@ -34,13 +33,13 @@ export function UnreadsGraphic(props: Props) { return ( <Switch> <Match when={props.count > 0}> - <circle cx="27" cy="5" r="5" fill={theme!.customColours.error.color} /> - <foreignObject x="22" y="0" width="10" height="10"> - <UnreadCounter>{props.count < 10 ? props.count : "9+"}</UnreadCounter> + <circle cx='27' cy='5' r='5' fill={theme!.customColours.error.color} /> + <foreignObject x='22' y='0' width='10' height='10'> + <UnreadCounter>{props.count < 10 ? props.count : '9+'}</UnreadCounter> </foreignObject> </Match> <Match when={props.unread}> - <circle cx="27" cy="5" r="5" fill={theme!.colours.foreground} /> + <circle cx='27' cy='5' r='5' fill={theme!.colours.foreground} /> </Match> </Switch> ); @@ -51,7 +50,7 @@ export function UnreadsGraphic(props: Props) { */ export function Unreads(props: Props & { size: string }) { return ( - <svg viewBox="22 0 10 10" height={props.size}> + <svg viewBox='22 0 10 10' height={props.size}> <UnreadsGraphic {...props} /> </svg> ); diff --git a/packages/client/components/ui/components/design/atoms/indicators/UserStatus.stories.tsx b/packages/client/components/ui/components/design/atoms/indicators/UserStatus.stories.tsx index 536f9c72f..1353adf77 100644 --- a/packages/client/components/ui/components/design/atoms/indicators/UserStatus.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/indicators/UserStatus.stories.tsx @@ -1,48 +1,47 @@ -import type { ComponentProps } from "solid-js"; +import type { ComponentProps } from 'solid-js'; -import makeSvgDecorator from "../../../../decorators/SvgDecorator"; -import type { ComponentStory } from "../../../stories"; - -import { UserStatusGraphic } from "./UserStatus"; +import makeSvgDecorator from '../../../../decorators/SvgDecorator'; +import type { ComponentStory } from '../../../stories'; +import { UserStatusGraphic } from './UserStatus'; export default { - category: "Design System/Atoms/Indicators", + category: 'Design System/Atoms/Indicators', component: UserStatusGraphic, stories: [ { - title: "Online", + title: 'Online', }, { - title: "Idle", + title: 'Idle', props: { - status: "Idle", + status: 'Idle', }, }, { - title: "Busy", + title: 'Busy', props: { - status: "Busy", + status: 'Busy', }, }, { - title: "Focus", + title: 'Focus', props: { - status: "Focus", + status: 'Focus', }, }, { - title: "Invisible", + title: 'Invisible', props: { - status: "Invisible", + status: 'Invisible', }, }, ], props: { - status: "Online", + status: 'Online', }, decorators: [makeSvgDecorator(32, 128)], propTypes: { - status: "string", + status: 'string', }, } as ComponentStory< typeof UserStatusGraphic, diff --git a/packages/client/components/ui/components/design/atoms/indicators/UserStatus.tsx b/packages/client/components/ui/components/design/atoms/indicators/UserStatus.tsx index 036717069..a158ffb7a 100644 --- a/packages/client/components/ui/components/design/atoms/indicators/UserStatus.tsx +++ b/packages/client/components/ui/components/design/atoms/indicators/UserStatus.tsx @@ -1,14 +1,13 @@ -import { useTheme } from "solid-styled-components"; +import type { API } from 'revolt.js'; +import { useTheme } from 'solid-styled-components'; -import type { API } from "revolt.js"; - -export type Props = { +export interface Props { /** * User we are dealing with * @default Invisible */ status?: API.Presence; -}; +} /** * Overlays user status in current SVG @@ -19,15 +18,15 @@ export const UserStatusGraphic = (props: Props) => { /** * Convert status to lower case */ - const statusLowercase = () => props.status?.toLowerCase() ?? "invisible"; + const statusLowercase = () => props.status?.toLowerCase() ?? 'invisible'; return ( <circle - cx="27" - cy="27" - r="5" + cx='27' + cy='27' + r='5' fill={ - theme.customColours[`status-${statusLowercase() as "online"}`].color + theme.customColours[`status-${statusLowercase() as 'online'}`].color } mask={`url(#accessible-status-${statusLowercase()})`} /> @@ -39,7 +38,7 @@ export const UserStatusGraphic = (props: Props) => { */ export function UserStatus(props: Props & { size: string }) { return ( - <svg viewBox="22 22 10 10" height={props.size}> + <svg viewBox='22 22 10 10' height={props.size}> <UserStatusGraphic {...props} /> </svg> ); diff --git a/packages/client/components/ui/components/design/atoms/indicators/index.tsx b/packages/client/components/ui/components/design/atoms/indicators/index.tsx index 439bc0036..3d6282b13 100644 --- a/packages/client/components/ui/components/design/atoms/indicators/index.tsx +++ b/packages/client/components/ui/components/design/atoms/indicators/index.tsx @@ -1,7 +1,7 @@ -export { MessageDivider } from "./MessageDivider"; -export { BlockedMessage } from "./BlockedMessage"; -export { Preloader } from "./Preloader"; -export { SaveStatus } from "./SaveStatus"; -export { UnreadsGraphic, Unreads } from "./Unreads"; -export { UserStatusGraphic, UserStatus } from "./UserStatus"; -export { ConversationStart } from "./ConversationStart"; +export { BlockedMessage } from './BlockedMessage'; +export { ConversationStart } from './ConversationStart'; +export { MessageDivider } from './MessageDivider'; +export { Preloader } from './Preloader'; +export { SaveStatus } from './SaveStatus'; +export { Unreads, UnreadsGraphic } from './Unreads'; +export { UserStatus, UserStatusGraphic } from './UserStatus'; diff --git a/packages/client/components/ui/components/design/atoms/inputs/Button.story.tsx b/packages/client/components/ui/components/design/atoms/inputs/Button.story.tsx index f47dadc71..889d2f8b8 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/Button.story.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/Button.story.tsx @@ -1,23 +1,22 @@ -import type { ComponentProps } from "solid-js"; +import type { Meta, StoryObj } from '@storybook/html'; +import type { ComponentProps } from 'solid-js'; -import type { Meta, StoryObj } from "@storybook/html"; - -import { Button } from "./Button"; +import { Button } from './Button'; type Story = StoryObj<ComponentProps<typeof Button>>; export default { - title: "Design System/Atoms/Inputs/Button", - tags: ["autodocs"], + title: 'Design System/Atoms/Inputs/Button', + tags: ['autodocs'], render: (props: any) => <Button {...props} />, argTypes: { size: { - options: ["normal", "icon", "fluid"], - control: { type: "radio" }, + options: ['normal', 'icon', 'fluid'], + control: { type: 'radio' }, }, variant: { - options: ["primary", "secondary", "plain", "success", "warning", "error"], - control: { type: "radio" }, + options: ['primary', 'secondary', 'plain', 'success', 'warning', 'error'], + control: { type: 'radio' }, }, }, } as Meta<ComponentProps<typeof Button>>; @@ -25,55 +24,55 @@ export default { export const Primary: Story = { args: { children: "Hello, I'm a button!", - size: "normal", - variant: "primary", + size: 'normal', + variant: 'primary', }, }; export const Secondary: Story = { args: { - children: "Secondary Style", - size: "normal", - variant: "secondary", + children: 'Secondary Style', + size: 'normal', + variant: 'secondary', }, }; export const Success: Story = { args: { - children: "Awesome!", - size: "normal", - variant: "success", + children: 'Awesome!', + size: 'normal', + variant: 'success', }, }; export const Warning: Story = { args: { - children: "This looks wrong...", - size: "normal", - variant: "warning", + children: 'This looks wrong...', + size: 'normal', + variant: 'warning', }, }; export const Error: Story = { args: { - children: "Stop! Look at me first!", - size: "normal", - variant: "error", + children: 'Stop! Look at me first!', + size: 'normal', + variant: 'error', }, }; export const Plain: Story = { args: { - children: "Just some plain old text...", - size: "fluid", - variant: "plain", + children: 'Just some plain old text...', + size: 'fluid', + variant: 'plain', }, }; export const Icon: Story = { args: { - children: "🦄", - size: "icon", - variant: "secondary", + children: '🦄', + size: 'icon', + variant: 'secondary', }, }; diff --git a/packages/client/components/ui/components/design/atoms/inputs/Button.tsx b/packages/client/components/ui/components/design/atoms/inputs/Button.tsx index 1428a5ddd..60d24766a 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/Button.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/Button.tsx @@ -1,78 +1,78 @@ -import { splitProps } from "solid-js"; -import { JSX } from "solid-js/jsx-runtime"; - -import { AriaButtonProps, createButton } from "@solid-aria/button"; -import { cva } from "styled-system/css/cva"; +import type { AriaButtonProps } from '@solid-aria/button'; +import { createButton } from '@solid-aria/button'; +import { splitProps } from 'solid-js'; +import type { JSX } from 'solid-js/jsx-runtime'; +import { cva } from 'styled-system/css/cva'; const button = cva({ base: { flexShrink: 0, - display: "flex", - alignItems: "center", - justifyContent: "center", + display: 'flex', + alignItems: 'center', + justifyContent: 'center', fontWeight: 500, - fontFamily: "inherit", + fontFamily: 'inherit', - cursor: "pointer", - border: "none", - borderRadius: "var(--borderRadius-xxl)", - transition: "var(--transitions-fast) all", + cursor: 'pointer', + border: 'none', + borderRadius: 'var(--borderRadius-xxl)', + transition: 'var(--transitions-fast) all', // "&:hover": { // filter: "brightness(1.2)", // }, - "&:disabled": { - cursor: "not-allowed", + '&:disabled': { + cursor: 'not-allowed', }, }, variants: { variant: { success: { - fill: "var(--customColours-success-onColor)", - color: "var(--customColours-success-onColor)", - background: "var(--customColours-success-color)", + fill: 'var(--customColours-success-onColor)', + color: 'var(--customColours-success-onColor)', + background: 'var(--customColours-success-color)', }, warning: { - fill: "var(--customColours-warning-onColor)", - color: "var(--customColours-warning-onColor)", - background: "var(--customColours-warning-color)", + fill: 'var(--customColours-warning-onColor)', + color: 'var(--customColours-warning-onColor)', + background: 'var(--customColours-warning-color)', }, error: { - fill: "var(--customColours-error-onColor)", - color: "var(--customColours-error-onColor)", - background: "var(--customColours-error-color)", + fill: 'var(--customColours-error-onColor)', + color: 'var(--customColours-error-onColor)', + background: 'var(--customColours-error-color)', }, primary: { - fill: "var(--colours-component-btn-foreground-primary)", - color: "var(--colours-component-btn-foreground-primary)", - background: "var(--colours-component-btn-background-primary)", + fill: 'var(--colours-component-btn-foreground-primary)', + color: 'var(--colours-component-btn-foreground-primary)', + background: 'var(--colours-component-btn-background-primary)', }, secondary: { - fill: "var(--colours-component-btn-foreground-secondary)", - color: "var(--colours-component-btn-foreground-secondary)", - background: "var(--colours-component-btn-background-secondary)", + fill: 'var(--colours-component-btn-foreground-secondary)', + color: 'var(--colours-component-btn-foreground-secondary)', + background: 'var(--colours-component-btn-background-secondary)', }, plain: { - fill: "var(--colours-component-btn-foreground-plain)", - color: "var(--colours-component-btn-foreground-plain)", + fill: 'var(--colours-component-btn-foreground-plain)', + color: 'var(--colours-component-btn-foreground-plain)', - "&:hover": { - textDecoration: "underline", + '&:hover': { + textDecoration: 'underline', }, - "&:disabled": { - textDecoration: "none", + '&:disabled': { + textDecoration: 'none', }, }, }, size: { normal: { - height: "38px", - minWidth: "96px", - padding: "2px 16px", - fontSize: "0.8125rem", + height: '38px', + minWidth: '96px', + padding: '2px 16px', + fontSize: '0.8125rem', }, // compact: { // minWidth: "96px", @@ -81,32 +81,32 @@ const button = cva({ // padding: "2px 12px", // }, icon: { - width: "38px", - height: "38px", + width: '38px', + height: '38px', }, fab: { - width: "42px", - height: "42px", - borderRadius: "var(--borderRadius-xl)", + width: '42px', + height: '42px', + borderRadius: 'var(--borderRadius-xl)', }, fluid: { - borderRadius: "var(--borderRadius-md)", + borderRadius: 'var(--borderRadius-md)', }, }, }, defaultVariants: { - size: "normal", - variant: "primary", + size: 'normal', + variant: 'primary', }, }); export function Button( props: Omit< Parameters<typeof button>[0] & AriaButtonProps & JSX.DirectiveAttributes, - "onClick" + 'onClick' > ) { - const [style, rest] = splitProps(props, ["size", "variant"]); + const [style, rest] = splitProps(props, ['size', 'variant']); let ref: HTMLButtonElement | undefined; const { buttonProps } = createButton(rest, () => ref); diff --git a/packages/client/components/ui/components/design/atoms/inputs/CategoryButton.tsx b/packages/client/components/ui/components/design/atoms/inputs/CategoryButton.tsx index cadcd30bf..883f682af 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/CategoryButton.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/CategoryButton.tsx @@ -1,28 +1,27 @@ -import { For, JSX, Match, Show, Switch } from "solid-js"; -import { styled } from "solid-styled-components"; +import MdChevronRight from '@material-design-icons/svg/outlined/chevron_right.svg?component-solid'; +import MdContentCopy from '@material-design-icons/svg/outlined/content_copy.svg?component-solid'; +import MdKeyboardDown from '@material-design-icons/svg/outlined/keyboard_arrow_down.svg?component-solid'; +import MdOpenInNew from '@material-design-icons/svg/outlined/open_in_new.svg?component-solid'; +import { iconSize } from '@revolt/ui'; +import type { JSX } from 'solid-js'; +import { For, Match, Show, Switch } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { iconSize } from "@revolt/ui"; - -import MdChevronRight from "@material-design-icons/svg/outlined/chevron_right.svg?component-solid"; -import MdContentCopy from "@material-design-icons/svg/outlined/content_copy.svg?component-solid"; -import MdKeyboardDown from "@material-design-icons/svg/outlined/keyboard_arrow_down.svg?component-solid"; -import MdOpenInNew from "@material-design-icons/svg/outlined/open_in_new.svg?component-solid"; - -import { Column, OverflowingText } from "../../layout"; +import { Column, OverflowingText } from '../../layout'; /** * Permissible actions */ type Action = - | "chevron" - | "collapse" - | "external" - | "edit" - | "copy" + | 'chevron' + | 'collapse' + | 'external' + | 'edit' + | 'copy' | JSX.Element; export interface Props { - readonly icon?: JSX.Element | "blank"; + readonly icon?: JSX.Element | 'blank'; readonly children?: JSX.Element; readonly description?: JSX.Element; @@ -42,11 +41,11 @@ export function CategoryButton(props: Props) { aria-disabled={props.disabled} onClick={props.disabled ? undefined : props.onClick} > - <Show when={props.icon !== "blank"}> + <Show when={props.icon !== 'blank'}> <IconWrapper>{props.icon}</IconWrapper> </Show> - <Show when={props.icon === "blank"}> + <Show when={props.icon === 'blank'}> <BlankIconWrapper /> </Show> @@ -61,22 +60,22 @@ export function CategoryButton(props: Props) { <For each={Array.isArray(props.action) ? props.action : [props.action]}> {(action) => ( <Switch fallback={action}> - <Match when={action === "chevron"}> + <Match when={action === 'chevron'}> <Action> <MdChevronRight {...iconSize(18)} /> </Action> </Match> - <Match when={action === "collapse"}> + <Match when={action === 'collapse'}> <Action> <MdKeyboardDown {...iconSize(18)} /> </Action> </Match> - <Match when={action === "external"}> + <Match when={action === 'external'}> <Action> <MdOpenInNew {...iconSize(18)} /> </Action> </Match> - <Match when={action === "copy"}> + <Match when={action === 'copy'}> <Action> <MdContentCopy {...iconSize(18)} /> </Action> @@ -91,7 +90,7 @@ export function CategoryButton(props: Props) { /** * Base container for button */ -const Base = styled("a", "CategoryButton")<{ +const Base = styled('a', 'CategoryButton')<{ isLink: boolean; disabled?: boolean; }>` @@ -99,13 +98,13 @@ const Base = styled("a", "CategoryButton")<{ padding: 13px; /*TODO: make this a prop*/ border-radius: ${(props) => props.theme!.borderRadius.md}; - color: ${(props) => props.theme!.colours["component-categorybtn-foreground"]}; + color: ${(props) => props.theme!.colours['component-categorybtn-foreground']}; background: ${(props) => - props.theme!.colours["component-categorybtn-background"]}; + props.theme!.colours['component-categorybtn-background']}; user-select: none; cursor: ${(props) => - props.disabled ? "not-allowed" : props.isLink ? "pointer" : "initial"}; + props.disabled ? 'not-allowed' : props.isLink ? 'pointer' : 'initial'}; transition: background-color 0.1s ease-in-out; display: flex; @@ -118,12 +117,12 @@ const Base = styled("a", "CategoryButton")<{ &:hover { background-color: ${(props) => - props.theme!.colours["component-categorybtn-background-hover"]}; + props.theme!.colours['component-categorybtn-background-hover']}; } &:active { background-color: ${(props) => - props.theme!.colours["component-categorybtn-background-active"]}; + props.theme!.colours['component-categorybtn-background-active']}; } `; @@ -144,7 +143,7 @@ const Content = styled(Column)` */ const IconWrapper = styled.div` background: ${(props) => - props.theme!.colours["component-categorybtn-background-icon"]}; + props.theme!.colours['component-categorybtn-background-icon']}; width: 36px; height: 36px; @@ -156,7 +155,7 @@ const IconWrapper = styled.div` svg { color: ${(props) => - props.theme!.colours["component-categorybtn-foreground-description"]}; + props.theme!.colours['component-categorybtn-foreground-description']}; } `; @@ -174,7 +173,7 @@ const Description = styled.span` font-weight: 500; font-size: 12px; color: ${(props) => - props.theme!.colours["component-categorybtn-foreground-description"]}; + props.theme!.colours['component-categorybtn-foreground-description']}; text-wrap: wrap; a:hover { diff --git a/packages/client/components/ui/components/design/atoms/inputs/CategoryButtonGroup.tsx b/packages/client/components/ui/components/design/atoms/inputs/CategoryButtonGroup.tsx index 32de7e2ec..0c68856bf 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/CategoryButtonGroup.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/CategoryButtonGroup.tsx @@ -1,4 +1,4 @@ -import { styled } from "solid-styled-components"; +import { styled } from 'solid-styled-components'; /** * Group a set of category buttons (M3+Fluent) diff --git a/packages/client/components/ui/components/design/atoms/inputs/CategoryCollapse.tsx b/packages/client/components/ui/components/design/atoms/inputs/CategoryCollapse.tsx index 34d699406..9fa51d192 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/CategoryCollapse.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/CategoryCollapse.tsx @@ -1,20 +1,13 @@ -import { - ComponentProps, - JSX, - Match, - Switch, - createSignal, - splitProps, -} from "solid-js"; -import { styled } from "solid-styled-components"; +import type { ComponentProps, JSX } from 'solid-js'; +import { createSignal, Match, splitProps, Switch } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { Column } from "../../layout"; - -import { CategoryButton } from "./CategoryButton"; +import { Column } from '../../layout'; +import { CategoryButton } from './CategoryButton'; type Props = Omit< ComponentProps<typeof CategoryButton>, - "onClick" | "children" + 'onClick' | 'children' > & { children?: JSX.Element; title?: JSX.Element; @@ -26,7 +19,7 @@ type Props = Omit< * Category button with collapsed children (Fluent) */ export function CategoryCollapse(props: Props) { - const [local, remote] = splitProps(props, ["action", "children"]); + const [local, remote] = splitProps(props, ['action', 'children']); const [opened, setOpened] = createSignal(false); @@ -59,12 +52,12 @@ export function CategoryCollapse(props: Props) { <Details ref={details!} onClick={toggleOpened} - class={opened() ? "open" : undefined} + class={opened() ? 'open' : undefined} > <summary> <CategoryButton {...remote} - action={[local.action, "collapse"].flat()} + action={[local.action, 'collapse'].flat()} onClick={() => void 0} > {props.title} @@ -73,7 +66,7 @@ export function CategoryCollapse(props: Props) { <Switch fallback={ <StaticInnerColumn - gap="xs" + gap='xs' ref={column!} style={{ height: updatedHeight() }} > @@ -83,7 +76,7 @@ export function CategoryCollapse(props: Props) { > <Match when={props.scrollable}> <InnerColumn - gap="xs" + gap='xs' ref={column!} style={{ height: updatedHeight() }} use:scrollable @@ -158,7 +151,7 @@ const Details = styled.div` > :not(summary) .CategoryButton { /* and set child backgrounds */ background: ${(props) => - props.theme!.colours["component-categorybtn-background-collapse"]}; + props.theme!.colours['component-categorybtn-background-collapse']}; } /*> :not(summary) > :last-child.CategoryButton { diff --git a/packages/client/components/ui/components/design/atoms/inputs/Checkbox.tsx b/packages/client/components/ui/components/design/atoms/inputs/Checkbox.tsx index 01bb64fb1..070684c53 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/Checkbox.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/Checkbox.tsx @@ -1,14 +1,14 @@ -import { BiRegularCheck } from "solid-icons/bi"; -import { createSignal, splitProps } from "solid-js"; -import { styled } from "solid-styled-components"; +import { BiRegularCheck } from 'solid-icons/bi'; +import { createSignal, splitProps } from 'solid-js'; +import { styled } from 'solid-styled-components'; -export type Props = { +export interface Props { readonly disabled?: boolean; readonly name?: string; readonly value?: boolean; readonly onChange?: (state: boolean) => void; -}; +} /** * Checkbox @@ -18,14 +18,14 @@ export function Checkbox(props: Props) { const checked = () => props.value ?? controlledValue(); return ( - <Checkmark value={checked()} class="checkmark"> - <BiRegularCheck size={20} class="check" /> + <Checkmark value={checked()} class='checkmark'> + <BiRegularCheck size={20} class='check' /> <Input name={props.name} - type="checkbox" + type='checkbox' checked={checked()} onChange={() => - typeof props.value !== "undefined" + typeof props.value !== 'undefined' ? !props.disabled && props.onChange?.(!props.value) : setControlledValue((v) => !v) } @@ -37,17 +37,17 @@ const Input = styled.input` display: none; `; -const Checkmark = styled.div<Pick<Props, "value">>` +const Checkmark = styled.div<Pick<Props, 'value'>>` display: flex; align-items: center; justify-content: center; width: 24px; height: 24px; border: 2px solid - ${(props) => props.theme!.colours["component-checkbox-foreground"]}; - border-radius: ${(props) => props.theme!.borderRadius["md"]}; + ${(props) => props.theme!.colours['component-checkbox-foreground']}; + border-radius: ${(props) => props.theme!.borderRadius['md']}; background: ${(props) => - props.theme!.colours["component-checkbox-background"]}; + props.theme!.colours['component-checkbox-background']}; flex-shrink: 0; margin: 4px; transition: 0.1s ease-in-out all; @@ -55,7 +55,7 @@ const Checkmark = styled.div<Pick<Props, "value">>` .check { transition: inherit; fill: ${(props) => - props.theme!.colours["component-checkbox-foreground-check"]}; + props.theme!.colours['component-checkbox-foreground-check']}; visibility: hidden; opacity: 0; } @@ -63,14 +63,14 @@ const Checkmark = styled.div<Pick<Props, "value">>` ${(props) => props.value ? ` - border-color: ${props.theme!.colours["component-checkbox-foreground"]}; - background: ${props.theme!.colours["component-checkbox-foreground"]}; + border-color: ${props.theme!.colours['component-checkbox-foreground']}; + background: ${props.theme!.colours['component-checkbox-foreground']}; .check { visibility: visible; opacity: 1; - color: ${props.theme!.colours["component-checkbox-foreground-check"]}; + color: ${props.theme!.colours['component-checkbox-foreground-check']}; } ` - : ""} + : ''} `; diff --git a/packages/client/components/ui/components/design/atoms/inputs/Chip.tsx b/packages/client/components/ui/components/design/atoms/inputs/Chip.tsx index 6c01ab16d..e15d03d2f 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/Chip.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/Chip.tsx @@ -1,7 +1,7 @@ -import { styled } from "solid-styled-components"; +import { styled } from 'solid-styled-components'; -import { Row } from "../../layout"; -import { generateTypographyCSS } from "../display/Typography"; +import { Row } from '../../layout'; +import { generateTypographyCSS } from '../display/Typography'; /** * Chip (M3) @@ -9,10 +9,10 @@ import { generateTypographyCSS } from "../display/Typography"; export const Chip = styled(Row)` align-items: center; flex-shrink: 0; - ${(props) => generateTypographyCSS(props.theme!, "chip")} + ${(props) => generateTypographyCSS(props.theme!, 'chip')} gap: ${(props) => props.theme!.gap.s}; border-radius: ${(props) => props.theme!.borderRadius.md}; - background: ${(props) => props.theme!.colours["component-chip-background"]}; + background: ${(props) => props.theme!.colours['component-chip-background']}; padding: ${(props) => props.theme!.gap.sm} ${(props) => props.theme!.gap.s}; `; diff --git a/packages/client/components/ui/components/design/atoms/inputs/ColourSwatches.stories.tsx b/packages/client/components/ui/components/design/atoms/inputs/ColourSwatches.stories.tsx index bfe8b1f3a..8c8fadf97 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/ColourSwatches.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/ColourSwatches.stories.tsx @@ -1,30 +1,29 @@ -import type { ComponentStory } from "../../../stories"; - -import { ColourSwatches } from "./ColourSwatches"; +import type { ComponentStory } from '../../../stories'; +import { ColourSwatches } from './ColourSwatches'; export default { - category: "Design System/Atoms/Inputs", + category: 'Design System/Atoms/Inputs', component: ColourSwatches, stories: [ { - title: "Default", + title: 'Default', props: { - value: "#FD6671", + value: '#FD6671', }, }, { - title: "Default (Different Palette)", + title: 'Default (Different Palette)', props: { - value: "#cc6", + value: '#cc6', presets: [ - ["#cc6", "#000", "#f55", "#a88"], - ["#bc2", "#aa5", "#fb8", "#16d"], + ['#cc6', '#000', '#f55', '#a88'], + ['#bc2', '#aa5', '#fb8', '#16d'], ], }, }, ], propTypes: { - value: "string", - onChange: "function", + value: 'string', + onChange: 'function', }, } as ComponentStory<typeof ColourSwatches>; diff --git a/packages/client/components/ui/components/design/atoms/inputs/ColourSwatches.tsx b/packages/client/components/ui/components/design/atoms/inputs/ColourSwatches.tsx index 5d5e42f75..fb64794dc 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/ColourSwatches.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/ColourSwatches.tsx @@ -1,6 +1,6 @@ -import { BiRegularCheck, BiSolidPalette } from "solid-icons/bi"; -import { For, Show, createSignal, splitProps } from "solid-js"; -import { styled } from "solid-styled-components"; +import { BiRegularCheck, BiSolidPalette } from 'solid-icons/bi'; +import { createSignal, For, Show, splitProps } from 'solid-js'; +import { styled } from 'solid-styled-components'; interface Props { readonly presets?: string[][]; @@ -9,30 +9,30 @@ interface Props { } interface SwatchProps { - type: "small" | "large"; + type: 'small' | 'large'; colour: string; } const DEFAULT_PRESETS = [ [ - "#7B68EE", - "#3498DB", - "#1ABC9C", - "#F1C40F", - "#FF7F50", - "#FD6671", - "#E91E63", - "#D468EE", + '#7B68EE', + '#3498DB', + '#1ABC9C', + '#F1C40F', + '#FF7F50', + '#FD6671', + '#E91E63', + '#D468EE', ], [ - "#594CAD", - "#206694", - "#11806A", - "#C27C0E", - "#CD5B45", - "#FF424F", - "#AD1457", - "#954AA8", + '#594CAD', + '#206694', + '#11806A', + '#C27C0E', + '#CD5B45', + '#FF424F', + '#AD1457', + '#954AA8', ], ]; @@ -84,7 +84,7 @@ const Swatch = styled.div<SwatchProps>` } ${(props) => - props.type === "small" + props.type === 'small' ? ` height: 30px; width: 30px; @@ -111,29 +111,29 @@ const Rows = styled.div` `; export function ColourSwatches(props: Props) { - let inputRef: HTMLInputElement | null = null!; - const [local, others] = splitProps(props, ["onChange", "presets", "value"]); + const inputRef: HTMLInputElement | null = null!; + const [local, others] = splitProps(props, ['onChange', 'presets', 'value']); const [controlledValue, setControlledValue] = createSignal<string>( - local.value || "#FD6671" + local.value || '#FD6671' ); return ( <Base {...others}> <input ref={inputRef} - type="color" + type='color' value={controlledValue()} onChange={(ev) => setControlledValue(ev.currentTarget.value)} /> <Swatch colour={controlledValue()} - type="large" + type='large' onClick={() => inputRef!.click()} > <BiSolidPalette size={32} /> </Swatch> - <div class="overlay"> + <div class='overlay'> <div /> </div> <Rows> @@ -144,7 +144,7 @@ export function ColourSwatches(props: Props) { {(swatch) => ( <Swatch colour={swatch} - type="small" + type='small' onClick={() => setControlledValue(swatch)} > <Show when={swatch === controlledValue()}> diff --git a/packages/client/components/ui/components/design/atoms/inputs/ComboBox.stories.tsx b/packages/client/components/ui/components/design/atoms/inputs/ComboBox.stories.tsx index 285be0558..ec085eb81 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/ComboBox.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/ComboBox.stories.tsx @@ -1,13 +1,12 @@ -import type { ComponentStory } from "../../../stories"; - -import { ComboBox } from "./ComboBox"; +import type { ComponentStory } from '../../../stories'; +import { ComboBox } from './ComboBox'; export default { - category: "Design System/Atoms/Inputs", + category: 'Design System/Atoms/Inputs', component: ComboBox, stories: [ { - title: "Default", + title: 'Default', }, ], props: { diff --git a/packages/client/components/ui/components/design/atoms/inputs/ComboBox.tsx b/packages/client/components/ui/components/design/atoms/inputs/ComboBox.tsx index a8ed1124b..16100272c 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/ComboBox.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/ComboBox.tsx @@ -1,9 +1,9 @@ -import { styled } from "solid-styled-components"; +import { styled } from 'solid-styled-components'; /** * Dropdown element */ -export const ComboBox = styled("select")` +export const ComboBox = styled('select')` padding: 4px; height: fit-content; @@ -11,19 +11,19 @@ export const ComboBox = styled("select")` font-size: 0.9375rem; font-family: inherit; - color: ${({ theme }) => theme!.colours["component-combo-foreground"]}; - background: ${({ theme }) => theme!.colours["component-combo-background"]}; + color: ${({ theme }) => theme!.colours['component-combo-foreground']}; + background: ${({ theme }) => theme!.colours['component-combo-background']}; box-sizing: border-box; border-radius: ${({ theme }) => theme!.borderRadius.md}; border: 2px solid - ${({ theme }) => theme!.colours["component-combo-foreground"]}; + ${({ theme }) => theme!.colours['component-combo-foreground']}; outline: none; cursor: pointer; &:focus-visible { box-shadow: 0 0 0 1.5pt - ${({ theme }) => theme!.colours["component-combo-focus"]}; + ${({ theme }) => theme!.colours['component-combo-focus']}; } `; // TODO: re-do this and Input to work like Button diff --git a/packages/client/components/ui/components/design/atoms/inputs/Input.stories.tsx b/packages/client/components/ui/components/design/atoms/inputs/Input.stories.tsx index de0fada0e..bb4bd71f4 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/Input.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/Input.stories.tsx @@ -1,60 +1,59 @@ -import type { ComponentStory } from "../../../stories"; - -import { Input } from "./Input"; +import type { ComponentStory } from '../../../stories'; +import { Input } from './Input'; export default { - category: "Design System/Atoms/Inputs", + category: 'Design System/Atoms/Inputs', component: Input, stories: [ { - title: "Primary", + title: 'Primary', props: { - palette: "primary", + palette: 'primary', }, }, { - title: "Secondary", + title: 'Secondary', props: { - palette: "secondary", + palette: 'secondary', }, }, { - title: "Primary (Disabled)", + title: 'Primary (Disabled)', props: { - palette: "primary", + palette: 'primary', disabled: true, }, }, { - title: "Secondary (Disabled)", + title: 'Secondary (Disabled)', props: { - palette: "secondary", + palette: 'secondary', disabled: true, }, }, { - title: "Primary (Placeholder)", + title: 'Primary (Placeholder)', props: { - palette: "secondary", - value: "", - placeholder: "Placeholder text", + palette: 'secondary', + value: '', + placeholder: 'Placeholder text', }, }, { - title: "Secondary (Placeholder)", + title: 'Secondary (Placeholder)', props: { - palette: "secondary", - value: "", - placeholder: "Placeholder text", + palette: 'secondary', + value: '', + placeholder: 'Placeholder text', }, }, ], props: { - value: "I am an input...", + value: 'I am an input...', }, propTypes: { - palette: ["primary", "secondary"], - value: "string", - placeholder: "string", + palette: ['primary', 'secondary'], + value: 'string', + placeholder: 'string', }, } as ComponentStory<typeof Input>; diff --git a/packages/client/components/ui/components/design/atoms/inputs/Input.tsx b/packages/client/components/ui/components/design/atoms/inputs/Input.tsx index 153a4d15b..4e677b85c 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/Input.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/Input.tsx @@ -1,10 +1,10 @@ -import { styled } from "solid-styled-components"; +import { styled } from 'solid-styled-components'; export interface Props { /** * Colour scheme */ - readonly palette?: "primary" | "secondary"; + readonly palette?: 'primary' | 'secondary'; /** * Whether a submission has been tried and errors should display on the input @@ -15,7 +15,7 @@ export interface Props { /** * Input element */ -export const Input = styled("input")<Props>` +export const Input = styled('input')<Props>` width: 100%; margin: 0.2em 0; padding: 0.75em 1em; @@ -36,27 +36,27 @@ export const Input = styled("input")<Props>` &:focus-visible { box-shadow: 0 0 0 1.5pt - ${({ theme }) => theme!.colours["component-input-focus"]}; + ${({ theme }) => theme!.colours['component-input-focus']}; } - color: ${(props) => props.theme!.colours["component-input-foreground"]}; + color: ${(props) => props.theme!.colours['component-input-foreground']}; background: ${(props) => props.theme!.colours[ - `component-input-background-${props.palette ?? "primary"}` + `component-input-background-${props.palette ?? 'primary'}` ]}; &:hover { background: ${(props) => props.theme!.colours[ - `component-input-hover-${props.palette ?? "primary"}` + `component-input-hover-${props.palette ?? 'primary'}` ]}; } ${(props) => props.submissionTried ? `&:invalid { border-color: ${props.theme!.customColours.error.color}; }` - : ""} + : ''} &:focus { outline-offset: 4px; @@ -75,15 +75,15 @@ export const Input = styled("input")<Props>` -webkit-box-shadow: 0 0 0 30px ${(props) => props.theme!.colours[ - `component-input-background-${props.palette ?? "primary"}` + `component-input-background-${props.palette ?? 'primary'}` ]} inset !important; } &:-webkit-autofill { caret-color: ${(props) => - props.theme!.colours["component-input-foreground"]} !important; + props.theme!.colours['component-input-foreground']} !important; -webkit-text-fill-color: ${(props) => - props.theme!.colours["component-input-foreground"]} !important; + props.theme!.colours['component-input-foreground']} !important; } `; diff --git a/packages/client/components/ui/components/design/atoms/inputs/LegacyCheckbox.stories.tsx b/packages/client/components/ui/components/design/atoms/inputs/LegacyCheckbox.stories.tsx index ff557e12e..59403060a 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/LegacyCheckbox.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/LegacyCheckbox.stories.tsx @@ -1,31 +1,30 @@ -import type { ComponentStory } from "../../../stories"; - -import { LegacyCheckbox } from "./LegacyCheckbox"; +import type { ComponentStory } from '../../../stories'; +import { LegacyCheckbox } from './LegacyCheckbox'; export default { - category: "Design System/Atoms/Inputs", + category: 'Design System/Atoms/Inputs', component: LegacyCheckbox, stories: [ { - title: "Default", + title: 'Default', }, { - title: "Checked", + title: 'Checked', props: { value: true, }, }, ], props: { - title: "Do you want this enabled?", - description: "This will enable this specific thing for you.", + title: 'Do you want this enabled?', + description: 'This will enable this specific thing for you.', }, propTypes: { - title: "string", - description: "string", - disabled: "boolean", - value: "boolean", - onChange: "function", + title: 'string', + description: 'string', + disabled: 'boolean', + value: 'boolean', + onChange: 'function', }, effects: { onChange: (props) => ({ diff --git a/packages/client/components/ui/components/design/atoms/inputs/LegacyCheckbox.tsx b/packages/client/components/ui/components/design/atoms/inputs/LegacyCheckbox.tsx index 5c31226d7..0fb0e7ca1 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/LegacyCheckbox.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/LegacyCheckbox.tsx @@ -1,15 +1,16 @@ -import { BiRegularCheck } from "solid-icons/bi"; -import { JSX, Show, createSignal, splitProps } from "solid-js"; -import { styled } from "solid-styled-components"; +import { BiRegularCheck } from 'solid-icons/bi'; +import type { JSX } from 'solid-js'; +import { createSignal, Show, splitProps } from 'solid-js'; +import { styled } from 'solid-styled-components'; -const Base = styled("label")` +const Base = styled('label')` gap: 10px; padding: 4px; display: flex; cursor: pointer; user-select: none; align-items: center; - border-radius: ${(props) => props.theme!.borderRadius["md"]}; + border-radius: ${(props) => props.theme!.borderRadius['md']}; transition: 0.1s ease background-color; input { @@ -42,7 +43,7 @@ const TitleContent = styled.div` display: flex; align-items: center; gap: 8px; - color: ${(props) => props.theme!.colours["foreground"]}; + color: ${(props) => props.theme!.colours['foreground']}; `; const Title = styled.div` @@ -64,14 +65,14 @@ const Description = styled.div` overflow: hidden; `; -const Checkmark = styled.div<Pick<Props, "value">>` +const Checkmark = styled.div<Pick<Props, 'value'>>` display: flex; align-items: center; justify-content: center; width: 24px; height: 24px; border: 2px solid var(--unset-fg); - border-radius: ${(props) => props.theme!.borderRadius["md"]}; + border-radius: ${(props) => props.theme!.borderRadius['md']}; background: var(--unset-bg); flex-shrink: 0; margin: 4px; @@ -96,7 +97,7 @@ const Checkmark = styled.div<Pick<Props, "value">>` color: var(--accent-contrast); } ` - : ""} + : ''} `; export type Props = { @@ -110,17 +111,17 @@ export type Props = { readonly onChange?: (state: boolean) => void; } & Omit< JSX.LabelHTMLAttributes<HTMLLabelElement>, - "value" | "children" | "onChange" | "title" + 'value' | 'children' | 'onChange' | 'title' >; export function LegacyCheckbox(props: Props) { const [local, others] = splitProps(props, [ - "disabled", - "title", - "description", - "name", - "value", - "onChange", + 'disabled', + 'title', + 'description', + 'name', + 'value', + 'onChange', ]); const [controlledValue, setControlledValue] = createSignal(false); @@ -140,16 +141,16 @@ export function LegacyCheckbox(props: Props) { </Content> <input name={local.name} - type="checkbox" + type='checkbox' checked={checked()} onChange={() => - typeof local.value !== "undefined" + typeof local.value !== 'undefined' ? !local.disabled && local.onChange?.(!local.value) : setControlledValue((v) => !v) } /> - <Checkmark value={checked()} class="checkmark"> - <BiRegularCheck size={20} class="check" /> + <Checkmark value={checked()} class='checkmark'> + <BiRegularCheck size={20} class='check' /> </Checkmark> </Base> ); diff --git a/packages/client/components/ui/components/design/atoms/inputs/MenuButton.stories.tsx b/packages/client/components/ui/components/design/atoms/inputs/MenuButton.stories.tsx index 2038d7e75..70d5f0a16 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/MenuButton.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/MenuButton.stories.tsx @@ -1,76 +1,75 @@ -import { BiSolidUser } from "solid-icons/bi"; +import { BiSolidUser } from 'solid-icons/bi'; -import type { ComponentStory } from "../../../stories"; - -import { MenuButton } from "./MenuButton"; +import type { ComponentStory } from '../../../stories'; +import { MenuButton } from './MenuButton'; export default { - category: "Design System/Atoms/Inputs", + category: 'Design System/Atoms/Inputs', component: MenuButton, stories: [ { - title: "Thin (default, active)", + title: 'Thin (default, active)', props: { - attention: "active", + attention: 'active', }, }, { - title: "Normal", + title: 'Normal', props: { - size: "normal", + size: 'normal', }, }, { - title: "Normal (selected)", + title: 'Normal (selected)', props: { - size: "normal", - attention: "selected", + size: 'normal', + attention: 'selected', }, }, { - title: "Normal (active)", + title: 'Normal (active)', props: { - size: "normal", - attention: "active", + size: 'normal', + attention: 'active', }, }, { - title: "Normal (muted)", + title: 'Normal (muted)', props: { - size: "normal", - attention: "muted", + size: 'normal', + attention: 'muted', }, }, { - title: "Normal (active, alert)", + title: 'Normal (active, alert)', props: { - size: "normal", - attention: "active", + size: 'normal', + attention: 'active', alert: true, }, }, { - title: "Normal (active, alert=1)", + title: 'Normal (active, alert=1)', props: { - size: "normal", - attention: "active", + size: 'normal', + attention: 'active', alert: 1, }, }, { - title: "Normal (active, icon)", + title: 'Normal (active, icon)', props: { - size: "normal", - attention: "active", + size: 'normal', + attention: 'active', icon: <BiSolidUser size={16} />, - children: "User Settings", + children: 'User Settings', }, }, ], props: { - children: "Menu Item", + children: 'Menu Item', }, propTypes: { - children: "string", + children: 'string', }, } as ComponentStory<typeof MenuButton>; diff --git a/packages/client/components/ui/components/design/atoms/inputs/MenuButton.tsx b/packages/client/components/ui/components/design/atoms/inputs/MenuButton.tsx index 97caf0007..68d36b5d6 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/MenuButton.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/MenuButton.tsx @@ -1,23 +1,23 @@ -import { ComponentProps, JSX, Show, splitProps } from "solid-js"; +import type { ComponentProps, JSX } from 'solid-js'; +import { Show, splitProps } from 'solid-js'; +import { cva } from 'styled-system/css'; +import { styled } from 'styled-system/jsx'; -import { cva } from "styled-system/css"; -import { styled } from "styled-system/jsx"; +import type { Row } from '../../layout'; +import { Unreads } from '../indicators'; -import { Row } from "../../layout"; -import { Unreads } from "../indicators"; - -export type Props = { +export interface Props { /** * Button size * @default thin */ - readonly size?: "thin" | "normal"; + readonly size?: 'thin' | 'normal'; /** * Button attention * @default normal */ - readonly attention?: "muted" | "normal" | "active" | "selected"; + readonly attention?: 'muted' | 'normal' | 'active' | 'selected'; /** * Button icon @@ -38,7 +38,7 @@ export type Props = { * Hover actions */ readonly actions?: JSX.Element; -}; +} /** * Top-level container @@ -48,70 +48,70 @@ const base = cva({ flexShrink: 0, fontWeight: 500, - fontSize: "15px", - userSelect: "none", + fontSize: '15px', + userSelect: 'none', - display: "flex", - margin: "0 var(--gap-lg)", - padding: "0 var(--gap-md)", - borderRadius: "var(--borderRadius-md)", + display: 'flex', + margin: '0 var(--gap-lg)', + padding: '0 var(--gap-md)', + borderRadius: 'var(--borderRadius-md)', - "& > svg": { - alignSelf: "center", + '& > svg': { + alignSelf: 'center', }, }, variants: { size: { normal: { - height: "42px", - gap: "var(--gap-md)", + height: '42px', + gap: 'var(--gap-md)', }, thin: { - height: "32px", - gap: "var(--gap-sm)", + height: '32px', + gap: 'var(--gap-sm)', // implicitly align center since we won't stack anything - alignItems: "center", + alignItems: 'center', }, }, attention: { normal: { - color: "var(--colours-component-menubtn-default-foreground)", - background: "var(--colours-component-menubtn-default-background)", + color: 'var(--colours-component-menubtn-default-foreground)', + background: 'var(--colours-component-menubtn-default-background)', }, muted: { - color: "var(--colours-component-menubtn-muted-foreground)", - background: "var(--colours-component-menubtn-muted-background)", + color: 'var(--colours-component-menubtn-muted-foreground)', + background: 'var(--colours-component-menubtn-muted-background)', }, active: { - color: "var(--colours-component-menubtn-selected-foreground)", - background: "var(--colours-component-menubtn-default-background)", + color: 'var(--colours-component-menubtn-selected-foreground)', + background: 'var(--colours-component-menubtn-default-background)', }, selected: { - color: "var(--colours-component-menubtn-selected-foreground)", - background: "var(--colours-component-menubtn-selected-background)", + color: 'var(--colours-component-menubtn-selected-foreground)', + background: 'var(--colours-component-menubtn-selected-background)', }, }, hasActions: { no: {}, yes: { - "&:hover :last-child": { - display: "flex", + '&:hover :last-child': { + display: 'flex', }, }, }, }, defaultVariants: { - size: "normal", - attention: "normal", - hasActions: "no", + size: 'normal', + attention: 'normal', + hasActions: 'no', }, }); /** * Textual content */ -const Content = styled("div", { +const Content = styled('div', { base: { flexGrow: 1, minWidth: 0, @@ -121,14 +121,14 @@ const Content = styled("div", { /** * Right-side actions */ -const Actions = styled("div", { +const Actions = styled('div', { base: { - alignSelf: "center", + alignSelf: 'center', - display: "none", - alignItems: "center", - flexDirection: "row", - gap: "var(--gap-sm)", + display: 'none', + alignItems: 'center', + flexDirection: 'row', + gap: 'var(--gap-sm)', }, }); @@ -137,12 +137,12 @@ const Actions = styled("div", { */ export function MenuButton(props: Props & ComponentProps<typeof Row>) { const [local, other] = splitProps(props, [ - "attention", - "size", - "icon", - "children", - "alert", - "actions", + 'attention', + 'size', + 'icon', + 'children', + 'alert', + 'actions', ]); return ( @@ -152,7 +152,7 @@ export function MenuButton(props: Props & ComponentProps<typeof Row>) { class={base({ attention: local.attention, size: local.size, - hasActions: local.actions ? "yes" : "no", + hasActions: local.actions ? 'yes' : 'no', })} use:ripple // @codegen directives props=other include=floating @@ -162,8 +162,8 @@ export function MenuButton(props: Props & ComponentProps<typeof Row>) { <Content>{local.children}</Content> <Show when={local.alert}> <Unreads - count={typeof local.alert === "number" ? local.alert : 0} - size={typeof local.alert === "number" ? "0.85rem" : "0.4rem"} + count={typeof local.alert === 'number' ? local.alert : 0} + size={typeof local.alert === 'number' ? '0.85rem' : '0.4rem'} unread /> </Show> diff --git a/packages/client/components/ui/components/design/atoms/inputs/OverrideSwitch.stories.tsx b/packages/client/components/ui/components/design/atoms/inputs/OverrideSwitch.stories.tsx index c9ff114f7..29ec15ecb 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/OverrideSwitch.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/OverrideSwitch.stories.tsx @@ -1,28 +1,27 @@ -import type { ComponentStory } from "../../../stories"; - -import { OverrideSwitch } from "./OverrideSwitch"; +import type { ComponentStory } from '../../../stories'; +import { OverrideSwitch } from './OverrideSwitch'; export default { - category: "Design System/Atoms/Inputs", + category: 'Design System/Atoms/Inputs', component: OverrideSwitch, stories: [ { - title: "Default", + title: 'Default', }, { - title: "Disabled", + title: 'Disabled', props: { disabled: true, }, }, ], propTypes: { - disabled: "boolean", - state: ["Allow", "Neutral", "Deny"], - onChange: "function", + disabled: 'boolean', + state: ['Allow', 'Neutral', 'Deny'], + onChange: 'function', }, props: { - state: "Neutral", + state: 'Neutral', }, effects: { onChange: (_, state) => ({ diff --git a/packages/client/components/ui/components/design/atoms/inputs/OverrideSwitch.tsx b/packages/client/components/ui/components/design/atoms/inputs/OverrideSwitch.tsx index b50b9199b..cdcfb09a5 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/OverrideSwitch.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/OverrideSwitch.tsx @@ -1,8 +1,8 @@ -import { BiRegularCheck, BiRegularX } from "solid-icons/bi"; -import { createSignal, splitProps } from "solid-js"; -import { styled } from "solid-styled-components"; +import { BiRegularCheck, BiRegularX } from 'solid-icons/bi'; +import { createSignal, splitProps } from 'solid-js'; +import { styled } from 'solid-styled-components'; -type State = "Allow" | "Neutral" | "Deny"; +type State = 'Allow' | 'Neutral' | 'Deny'; interface Props { readonly state?: State; @@ -51,61 +51,61 @@ const Switch = styled.div<{ state: State; selected: boolean }>` * Override Switch */ export function OverrideSwitch(props: Props) { - const [local, others] = splitProps(props, ["disabled", "onChange", "state"]); + const [local, others] = splitProps(props, ['disabled', 'onChange', 'state']); const [controlledValue, setControlledValue] = createSignal<State>( - local.state || "Neutral" + local.state || 'Neutral' ); const currentState = () => local.state ?? controlledValue(); return ( <SwitchContainer - role="radiogroup" - aria-orientiation="horizontal" + role='radiogroup' + aria-orientiation='horizontal' aria-disabled={local.disabled} state={currentState()} {...others} > <Switch onClick={() => - typeof local.state !== "undefined" - ? !local.disabled && local.onChange?.("Allow") - : setControlledValue("Allow") + typeof local.state !== 'undefined' + ? !local.disabled && local.onChange?.('Allow') + : setControlledValue('Allow') } - state="Allow" - role="radio" - selected={currentState() === "Allow"} + state='Allow' + role='radio' + selected={currentState() === 'Allow'} > <BiRegularCheck size={24} /> </Switch> <Switch onClick={() => - typeof local.state !== "undefined" - ? !local.disabled && local.onChange?.("Neutral") - : setControlledValue("Neutral") + typeof local.state !== 'undefined' + ? !local.disabled && local.onChange?.('Neutral') + : setControlledValue('Neutral') } - state="Neutral" - role="radio" - selected={currentState() === "Neutral"} + state='Neutral' + role='radio' + selected={currentState() === 'Neutral'} > <svg - xmlns="http://www.w3.org/2000/svg" - height="24" - width="24" - viewBox="0 96 960 960" + xmlns='http://www.w3.org/2000/svg' + height='24' + width='24' + viewBox='0 96 960 960' > - <path d="M120 936v-60h60v60h-60Zm0-148v-83h60v83h-60Zm0-171v-83h60v83h-60Zm0-170v-83h60v83h-60Zm0-171v-60h60v60h-60Zm148 660v-60h83v60h-83Zm0-660v-60h83v60h-83Zm171 660v-60h83v60h-83Zm0-660v-60h83v60h-83Zm170 660v-60h83v60h-83Zm0-660v-60h83v60h-83Zm171 660v-60h60v60h-60Zm0-148v-83h60v83h-60Zm0-171v-83h60v83h-60Zm0-170v-83h60v83h-60Zm0-171v-60h60v60h-60Z" /> + <path d='M120 936v-60h60v60h-60Zm0-148v-83h60v83h-60Zm0-171v-83h60v83h-60Zm0-170v-83h60v83h-60Zm0-171v-60h60v60h-60Zm148 660v-60h83v60h-83Zm0-660v-60h83v60h-83Zm171 660v-60h83v60h-83Zm0-660v-60h83v60h-83Zm170 660v-60h83v60h-83Zm0-660v-60h83v60h-83Zm171 660v-60h60v60h-60Zm0-148v-83h60v83h-60Zm0-171v-83h60v83h-60Zm0-170v-83h60v83h-60Zm0-171v-60h60v60h-60Z' /> </svg> </Switch> <Switch onClick={() => - typeof local.state !== "undefined" - ? !local.disabled && local.onChange?.("Deny") - : setControlledValue("Deny") + typeof local.state !== 'undefined' + ? !local.disabled && local.onChange?.('Deny') + : setControlledValue('Deny') } - state="Deny" - role="radio" - selected={currentState() === "Deny"} + state='Deny' + role='radio' + selected={currentState() === 'Deny'} > <BiRegularX size={24} /> </Switch> diff --git a/packages/client/components/ui/components/design/atoms/inputs/Radio.stories.tsx b/packages/client/components/ui/components/design/atoms/inputs/Radio.stories.tsx index 5b5757388..e7da3a6d5 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/Radio.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/Radio.stories.tsx @@ -1,40 +1,39 @@ -import type { ComponentStory } from "../../../stories"; - -import { Radio } from "./Radio"; +import type { ComponentStory } from '../../../stories'; +import { Radio } from './Radio'; export default { - category: "Design System/Atoms/Inputs", + category: 'Design System/Atoms/Inputs', component: Radio, stories: [ { - title: "Default", + title: 'Default', props: { value: false, }, }, { - title: "Checked", + title: 'Checked', props: { value: true, }, }, { - title: "Disabled", + title: 'Disabled', props: { disabled: true, }, }, ], props: { - title: "Hello, I am a radio button", - description: "And this is a cool description.", + title: 'Hello, I am a radio button', + description: 'And this is a cool description.', }, propTypes: { - title: "string", - description: "string", - disabled: "boolean", - value: "boolean", - onSelect: "function", + title: 'string', + description: 'string', + disabled: 'boolean', + value: 'boolean', + onSelect: 'function', }, effects: { onSelect: (props) => ({ diff --git a/packages/client/components/ui/components/design/atoms/inputs/Radio.tsx b/packages/client/components/ui/components/design/atoms/inputs/Radio.tsx index d119a055f..10bd820d3 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/Radio.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/Radio.tsx @@ -1,6 +1,7 @@ -import { FaSolidCircle as CircleIcon } from "solid-icons/fa"; -import { JSX, Show, createSignal, splitProps } from "solid-js"; -import { styled } from "solid-styled-components"; +import { FaSolidCircle as CircleIcon } from 'solid-icons/fa'; +import type { JSX } from 'solid-js'; +import { createSignal, Show, splitProps } from 'solid-js'; +import { styled } from 'solid-styled-components'; interface Props { title?: JSX.Element; @@ -130,11 +131,11 @@ const Description = styled.div<BaseProps>` export function Radio(props: Props) { const [local, others] = splitProps(props, [ - "disabled", - "title", - "description", - "value", - "onSelect", + 'disabled', + 'title', + 'description', + 'value', + 'onSelect', ]); const [controlledValue, setControlledValue] = createSignal(false); @@ -146,10 +147,10 @@ export function Radio(props: Props) { <CircleIcon size={12} /> </RadioCircle> <input - type="radio" + type='radio' checked={selected()} onChange={() => - typeof local.value !== "undefined" + typeof local.value !== 'undefined' ? !local.disabled && local.onSelect?.(!local.value) : setControlledValue((v) => !v) } diff --git a/packages/client/components/ui/components/design/atoms/inputs/Tabs.stories.tsx b/packages/client/components/ui/components/design/atoms/inputs/Tabs.stories.tsx index 2bfe78fd1..e24e3abff 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/Tabs.stories.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/Tabs.stories.tsx @@ -1,27 +1,27 @@ -import { ComponentProps, createSignal } from "solid-js"; +import type { ComponentProps } from 'solid-js'; +import { createSignal } from 'solid-js'; -import type { ComponentStory } from "../../../stories"; +import type { ComponentStory } from '../../../stories'; +import { Tabs } from './Tabs'; -import { Tabs } from "./Tabs"; - -const [tab, onSelect] = createSignal("a"); +const [tab, onSelect] = createSignal('a'); export default { - category: "Design System/Atoms/Inputs", + category: 'Design System/Atoms/Inputs', component: Tabs, stories: [ { - title: "Default", + title: 'Default', props: { tabs: () => ({ a: { - label: "First", + label: 'First', }, b: { - label: "Second", + label: 'Second', }, c: { - label: "Last", + label: 'Last', }, }), tab, diff --git a/packages/client/components/ui/components/design/atoms/inputs/Tabs.tsx b/packages/client/components/ui/components/design/atoms/inputs/Tabs.tsx index e1cb2f100..6582a73a5 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/Tabs.tsx +++ b/packages/client/components/ui/components/design/atoms/inputs/Tabs.tsx @@ -1,8 +1,9 @@ -import { BiSolidXCircle } from "solid-icons/bi"; -import { Accessor, For, JSX } from "solid-js"; -import { styled } from "solid-styled-components"; +import { BiSolidXCircle } from 'solid-icons/bi'; +import type { Accessor, JSX } from 'solid-js'; +import { For } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { Row } from "../../layout"; +import { Row } from '../../layout'; interface Props { /** @@ -52,14 +53,14 @@ const Tab = styled.a<{ active: boolean }>` padding: 0.4em 1em; border-top: 4px solid transparent; border-bottom: 4px solid - ${(props) => (props.active ? "var(--unset-fg)" : "transparent")}; - color: ${(props) => props.theme!.colours["foreground"]}; + ${(props) => (props.active ? 'var(--unset-fg)' : 'transparent')}; + color: ${(props) => props.theme!.colours['foreground']}; background: var(--unset-bg); transition: ${(props) => props.theme!.transitions.fast}; &:hover { filter: brightness(1.2); - color: ${(props) => props.theme!.colours["foreground"]}; + color: ${(props) => props.theme!.colours['foreground']}; } `; @@ -76,7 +77,7 @@ const Dismiss = styled.a` */ export function Tabs(props: Props) { return ( - <Base role="tablist" gap="none"> + <Base role='tablist' gap='none'> <For each={Object.keys(props.tabs())}> {(tab) => { /** @@ -113,7 +114,7 @@ export function Tabs(props: Props) { return ( <Tab - role="tab" + role='tab' aria-selected={active()} active={active()} onMouseDown={onMouseDown} diff --git a/packages/client/components/ui/components/design/atoms/inputs/index.ts b/packages/client/components/ui/components/design/atoms/inputs/index.ts index 32a36ff4e..159cd4d7a 100644 --- a/packages/client/components/ui/components/design/atoms/inputs/index.ts +++ b/packages/client/components/ui/components/design/atoms/inputs/index.ts @@ -1,13 +1,13 @@ -export { ComboBox } from "./ComboBox"; -export { LegacyCheckbox } from "./LegacyCheckbox"; -export { Checkbox } from "./Checkbox"; -export { Input } from "./Input"; -export { Button } from "./Button"; -export { MenuButton } from "./MenuButton"; -export { Radio } from "./Radio"; -export { Tabs } from "./Tabs"; -export { CategoryButton } from "./CategoryButton"; -export { OverrideSwitch } from "./OverrideSwitch"; -export { CategoryCollapse } from "./CategoryCollapse"; -export { CategoryButtonGroup } from "./CategoryButtonGroup"; -export { Chip } from "./Chip"; +export { Button } from './Button'; +export { CategoryButton } from './CategoryButton'; +export { CategoryButtonGroup } from './CategoryButtonGroup'; +export { CategoryCollapse } from './CategoryCollapse'; +export { Checkbox } from './Checkbox'; +export { Chip } from './Chip'; +export { ComboBox } from './ComboBox'; +export { Input } from './Input'; +export { LegacyCheckbox } from './LegacyCheckbox'; +export { MenuButton } from './MenuButton'; +export { OverrideSwitch } from './OverrideSwitch'; +export { Radio } from './Radio'; +export { Tabs } from './Tabs'; diff --git a/packages/client/components/ui/components/design/index.ts b/packages/client/components/ui/components/design/index.ts index ea1cd44e2..5b88f533c 100644 --- a/packages/client/components/ui/components/design/index.ts +++ b/packages/client/components/ui/components/design/index.ts @@ -1,2 +1,2 @@ -export * from "./atoms"; -export * from "./layout"; +export * from './atoms'; +export * from './layout'; diff --git a/packages/client/components/ui/components/design/layout/BreakText.tsx b/packages/client/components/ui/components/design/layout/BreakText.tsx index a599285b9..b2cbe343e 100644 --- a/packages/client/components/ui/components/design/layout/BreakText.tsx +++ b/packages/client/components/ui/components/design/layout/BreakText.tsx @@ -1,11 +1,11 @@ -import { styled } from "solid-styled-components"; +import { styled } from 'solid-styled-components'; /** * Container to break all text and prevent overflow from math blocks * * Use this to wrap Markdown */ -export const BreakText = styled("div")` +export const BreakText = styled('div')` word-break: break-word; .math { diff --git a/packages/client/components/ui/components/design/layout/Column.stories.tsx b/packages/client/components/ui/components/design/layout/Column.stories.tsx index 7e23bd0b1..b1fa60db7 100644 --- a/packages/client/components/ui/components/design/layout/Column.stories.tsx +++ b/packages/client/components/ui/components/design/layout/Column.stories.tsx @@ -1,35 +1,34 @@ -import TextColourDecorator from "../../../decorators/TextColourDecorator"; -import type { ComponentStory } from "../../stories"; - -import { Column } from "./Column"; +import TextColourDecorator from '../../../decorators/TextColourDecorator'; +import type { ComponentStory } from '../../stories'; +import { Column } from './Column'; export default { - category: "Design System/Layout", + category: 'Design System/Layout', component: Column, stories: [ { - title: "Default", + title: 'Default', }, { - title: "No Gap", + title: 'No Gap', props: { - gap: "none", + gap: 'none', }, }, { - title: "Small Gap", + title: 'Small Gap', props: { - gap: "sm", + gap: 'sm', }, }, { - title: "Large Gap", + title: 'Large Gap', props: { - gap: "lg", + gap: 'lg', }, }, { - title: "Align (Center)", + title: 'Align (Center)', props: { children: ( <> @@ -42,21 +41,21 @@ export default { }, }, { - title: "Justify (End)", + title: 'Justify (End)', props: { - justify: "end", + justify: 'end', grow: true, }, decorators: [ (props) => ( - <div style={{ height: "120px", display: "flex" }}> + <div style={{ height: '120px', display: 'flex' }}> {props.children} </div> ), ], }, { - title: "Group", + title: 'Group', props: { group: true, }, @@ -70,19 +69,19 @@ export default { <div>Element 3</div> </> ), - gap: "md", - align: "start", - justify: "start", + gap: 'md', + align: 'start', + justify: 'start', grow: false, group: undefined, }, decorators: [TextColourDecorator], propTypes: { - children: "component", - gap: ["none", "sm", "md", "lg"], - align: ["start", "end", "left", "right", "center", "stretch", true], - justify: ["start", "end", "left", "right", "center", "stretch", true], - grow: "boolean", - group: "boolean", + children: 'component', + gap: ['none', 'sm', 'md', 'lg'], + align: ['start', 'end', 'left', 'right', 'center', 'stretch', true], + justify: ['start', 'end', 'left', 'right', 'center', 'stretch', true], + grow: 'boolean', + group: 'boolean', }, } as ComponentStory<typeof Column>; diff --git a/packages/client/components/ui/components/design/layout/Column.tsx b/packages/client/components/ui/components/design/layout/Column.tsx index a0cc760bd..a16928594 100644 --- a/packages/client/components/ui/components/design/layout/Column.tsx +++ b/packages/client/components/ui/components/design/layout/Column.tsx @@ -1,10 +1,11 @@ -import { DefaultTheme, styled } from "solid-styled-components"; +import type { DefaultTheme } from 'solid-styled-components'; +import { styled } from 'solid-styled-components'; interface Props { /** * Gap between child elements. */ - gap?: keyof DefaultTheme["gap"]; + gap?: keyof DefaultTheme['gap']; /** * This column is a group of elements and should be visually distinct. @@ -14,12 +15,12 @@ interface Props { /** * Item alignment */ - align?: AlignSetting | "stretch" | true; + align?: AlignSetting | 'stretch' | true; /** * Content justification */ - justify?: AlignSetting | "stretch" | true; + justify?: AlignSetting | 'stretch' | true; /** * This row should grow to fit parent container. @@ -30,28 +31,28 @@ interface Props { /** * Generic Flex Column */ -export const Column = styled("div")<Props>` +export const Column = styled('div')<Props>` display: flex; flex-direction: column; - flex-grow: ${(props) => (props.grow ? 1 : "initial")}; - gap: ${(props) => props.theme!.gap[props.gap ?? "md"]}; + flex-grow: ${(props) => (props.grow ? 1 : 'initial')}; + gap: ${(props) => props.theme!.gap[props.gap ?? 'md']}; margin: ${(props) => props.group - ? `${typeof props.group === "string" ? props.group : "16px"} 0` - : "0"}; + ? `${typeof props.group === 'string' ? props.group : '16px'} 0` + : '0'}; align-items: ${(props) => props.align - ? typeof props.align === "string" + ? typeof props.align === 'string' ? props.align - : "center" - : "initial"}; + : 'center' + : 'initial'}; justify-content: ${(props) => props.justify - ? typeof props.justify === "string" + ? typeof props.justify === 'string' ? props.justify - : "center" - : "initial"}; + : 'center' + : 'initial'}; `; diff --git a/packages/client/components/ui/components/design/layout/InlineIcon.tsx b/packages/client/components/ui/components/design/layout/InlineIcon.tsx index fbf416cf7..981b89c26 100644 --- a/packages/client/components/ui/components/design/layout/InlineIcon.tsx +++ b/packages/client/components/ui/components/design/layout/InlineIcon.tsx @@ -1,12 +1,12 @@ -import { styled } from "solid-styled-components"; +import { styled } from 'solid-styled-components'; /** * Specific-width icon container */ -export const InlineIcon = styled.div<{ size: "short" | "normal" | "wide" }>` +export const InlineIcon = styled.div<{ size: 'short' | 'normal' | 'wide' }>` display: grid; flex-shrink: 0; place-items: center; width: ${({ size }) => - size === "wide" ? 62 : size === "normal" ? 42 : 14}px; + size === 'wide' ? 62 : size === 'normal' ? 42 : 14}px; `; diff --git a/packages/client/components/ui/components/design/layout/ListView.tsx b/packages/client/components/ui/components/design/layout/ListView.tsx index eae680a02..eaa4ec277 100644 --- a/packages/client/components/ui/components/design/layout/ListView.tsx +++ b/packages/client/components/ui/components/design/layout/ListView.tsx @@ -1,5 +1,6 @@ -import { JSX, createSignal, createUniqueId } from "solid-js"; -import { styled } from "solid-styled-components"; +import type { JSX } from 'solid-js'; +import { createSignal, createUniqueId } from 'solid-js'; +import { styled } from 'solid-styled-components'; interface Props { /** @@ -90,13 +91,13 @@ export function ListView(props: Props) { <div id={id} use:scrollable={{ - direction: "y", + direction: 'y', offsetTop: props.offsetTop, }} style={{ - "flex-grow": 1, - display: "flex", - "flex-direction": "column-reverse", + 'flex-grow': 1, + display: 'flex', + 'flex-direction': 'column-reverse', }} onScroll={onScroll} > diff --git a/packages/client/components/ui/components/design/layout/NonBreakingText.tsx b/packages/client/components/ui/components/design/layout/NonBreakingText.tsx index eeab8d607..3d09fcd67 100644 --- a/packages/client/components/ui/components/design/layout/NonBreakingText.tsx +++ b/packages/client/components/ui/components/design/layout/NonBreakingText.tsx @@ -1,9 +1,9 @@ -import { styled } from "solid-styled-components"; +import { styled } from 'solid-styled-components'; /** * Container to prevent text breaking */ -export const NonBreakingText = styled("div")` +export const NonBreakingText = styled('div')` white-space: nowrap; * { diff --git a/packages/client/components/ui/components/design/layout/OverflowingText.stories.tsx b/packages/client/components/ui/components/design/layout/OverflowingText.stories.tsx index 85a0a56fc..4ec6c270e 100644 --- a/packages/client/components/ui/components/design/layout/OverflowingText.stories.tsx +++ b/packages/client/components/ui/components/design/layout/OverflowingText.stories.tsx @@ -1,29 +1,28 @@ -import TextColourDecorator from "../../../decorators/TextColourDecorator"; -import type { ComponentStory } from "../../stories"; - -import { OverflowingText } from "./OverflowingText"; +import TextColourDecorator from '../../../decorators/TextColourDecorator'; +import type { ComponentStory } from '../../stories'; +import { OverflowingText } from './OverflowingText'; export default { - category: "Design System/Layout", + category: 'Design System/Layout', component: OverflowingText, stories: [ { - title: "Default", + title: 'Default', }, ], props: { - children: "This is a long piece of text.", + children: 'This is a long piece of text.', }, propTypes: { - children: "string", + children: 'string', }, decorators: [ (props) => ( <div style={{ - display: "flex", - "justify-content": "stretch", - width: "120px", + display: 'flex', + 'justify-content': 'stretch', + width: '120px', }} > {props.children} diff --git a/packages/client/components/ui/components/design/layout/OverflowingText.tsx b/packages/client/components/ui/components/design/layout/OverflowingText.tsx index ad97f035d..2ed3693b9 100644 --- a/packages/client/components/ui/components/design/layout/OverflowingText.tsx +++ b/packages/client/components/ui/components/design/layout/OverflowingText.tsx @@ -1,9 +1,9 @@ -import { styled } from "solid-styled-components"; +import { styled } from 'solid-styled-components'; /** * Container to prevent text overflow */ -export const OverflowingText = styled("div")` +export const OverflowingText = styled('div')` overflow: hidden; white-space: nowrap; text-overflow: ellipsis; diff --git a/packages/client/components/ui/components/design/layout/PreviewStack.tsx b/packages/client/components/ui/components/design/layout/PreviewStack.tsx index e4891dc3c..073c6249b 100644 --- a/packages/client/components/ui/components/design/layout/PreviewStack.tsx +++ b/packages/client/components/ui/components/design/layout/PreviewStack.tsx @@ -1,5 +1,6 @@ -import { Accessor, For, JSX, onMount } from "solid-js"; -import { styled } from "solid-styled-components"; +import type { Accessor, JSX } from 'solid-js'; +import { For, onMount } from 'solid-js'; +import { styled } from 'solid-styled-components'; interface Props<T> { /** @@ -72,7 +73,7 @@ const Overlay = styled.div` /** * Default transform used for children */ -const DEFAULT_TRANSFORM = "translate(-50%, -50%) scale(0.001)"; +const DEFAULT_TRANSFORM = 'translate(-50%, -50%) scale(0.001)'; /** * Dynamic child positioning @@ -94,5 +95,5 @@ const Base = styled.div<{ hideStack: boolean }>` ${(props) => props.hideStack ? `> * { transform: ${DEFAULT_TRANSFORM} !important; }` - : ""} + : ''} `; diff --git a/packages/client/components/ui/components/design/layout/Row.stories.tsx b/packages/client/components/ui/components/design/layout/Row.stories.tsx index 2e9adfed4..fdbd2ff5c 100644 --- a/packages/client/components/ui/components/design/layout/Row.stories.tsx +++ b/packages/client/components/ui/components/design/layout/Row.stories.tsx @@ -1,35 +1,34 @@ -import TextColourDecorator from "../../../decorators/TextColourDecorator"; -import type { ComponentStory } from "../../stories"; - -import { Row } from "./Row"; +import TextColourDecorator from '../../../decorators/TextColourDecorator'; +import type { ComponentStory } from '../../stories'; +import { Row } from './Row'; export default { - category: "Design System/Layout", + category: 'Design System/Layout', component: Row, stories: [ { - title: "Default", + title: 'Default', }, { - title: "No Gap", + title: 'No Gap', props: { - gap: "none", + gap: 'none', }, }, { - title: "Small Gap", + title: 'Small Gap', props: { - gap: "sm", + gap: 'sm', }, }, { - title: "Large Gap", + title: 'Large Gap', props: { - gap: "lg", + gap: 'lg', }, }, { - title: "Align (Center)", + title: 'Align (Center)', props: { children: ( <> @@ -46,14 +45,14 @@ export default { }, }, { - title: "Justify (End)", + title: 'Justify (End)', props: { - justify: "end", + justify: 'end', grow: true, }, decorators: [ (props) => ( - <div style={{ width: "360px", display: "flex" }}> + <div style={{ width: '360px', display: 'flex' }}> {props.children} </div> ), @@ -68,17 +67,17 @@ export default { <div>Element 3</div> </> ), - gap: "md", - align: "start", - justify: "start", + gap: 'md', + align: 'start', + justify: 'start', grow: false, }, decorators: [TextColourDecorator], propTypes: { - children: "component", - gap: ["none", "sm", "md", "lg"], - align: ["start", "end", "left", "right", "center", "stretch", true], - justify: ["start", "end", "left", "right", "center", "stretch", true], - grow: "boolean", + children: 'component', + gap: ['none', 'sm', 'md', 'lg'], + align: ['start', 'end', 'left', 'right', 'center', 'stretch', true], + justify: ['start', 'end', 'left', 'right', 'center', 'stretch', true], + grow: 'boolean', }, } as ComponentStory<typeof Row>; diff --git a/packages/client/components/ui/components/design/layout/Row.tsx b/packages/client/components/ui/components/design/layout/Row.tsx index 8d910a836..0caf7880d 100644 --- a/packages/client/components/ui/components/design/layout/Row.tsx +++ b/packages/client/components/ui/components/design/layout/Row.tsx @@ -1,20 +1,21 @@ -import { DefaultTheme, styled } from "solid-styled-components"; +import type { DefaultTheme } from 'solid-styled-components'; +import { styled } from 'solid-styled-components'; interface Props { /** * Gap between child elements. */ - gap?: keyof DefaultTheme["gap"]; + gap?: keyof DefaultTheme['gap']; /** * Item alignment */ - align?: AlignSetting | "stretch" | true; + align?: AlignSetting | 'stretch' | true; /** * Content justification */ - justify?: AlignSetting | "stretch" | true; + justify?: AlignSetting | 'stretch' | true; /** * This row should grow to fit parent container. @@ -30,24 +31,24 @@ interface Props { /** * Generic Flex Row */ -export const Row = styled("div")<Props>` +export const Row = styled('div')<Props>` display: flex; flex-direction: row; - flex-grow: ${(props) => (props.grow ? 1 : "initial")}; - flex-wrap: ${(props) => (props.wrap ? "wrap" : "initial")}; - gap: ${(props) => props.theme!.gap[props.gap ?? "md"]}; + flex-grow: ${(props) => (props.grow ? 1 : 'initial')}; + flex-wrap: ${(props) => (props.wrap ? 'wrap' : 'initial')}; + gap: ${(props) => props.theme!.gap[props.gap ?? 'md']}; align-items: ${(props) => props.align - ? typeof props.align === "string" + ? typeof props.align === 'string' ? props.align - : "center" - : "initial"}; + : 'center' + : 'initial'}; justify-content: ${(props) => props.justify - ? typeof props.justify === "string" + ? typeof props.justify === 'string' ? props.justify - : "center" - : "initial"}; + : 'center' + : 'initial'}; `; diff --git a/packages/client/components/ui/components/design/layout/SizedContent.tsx b/packages/client/components/ui/components/design/layout/SizedContent.tsx index 00bcf5183..6a641ebd1 100644 --- a/packages/client/components/ui/components/design/layout/SizedContent.tsx +++ b/packages/client/components/ui/components/design/layout/SizedContent.tsx @@ -1,5 +1,5 @@ -import { JSX } from "solid-js"; -import { styled } from "solid-styled-components"; +import type { JSX } from 'solid-js'; +import { styled } from 'solid-styled-components'; interface Props { /** @@ -21,7 +21,7 @@ interface Props { /** * Sized content base container */ -const Base = styled("figure")` +const Base = styled('figure')` margin: 0; > :not(.container), @@ -35,11 +35,11 @@ const Base = styled("figure")` video, iframe, .Spoiler.Video { - min-width: ${(props) => props.theme!.layout.attachments["min-width"]}; - max-width: ${(props) => props.theme!.layout.attachments["max-width"]}; + min-width: ${(props) => props.theme!.layout.attachments['min-width']}; + max-width: ${(props) => props.theme!.layout.attachments['max-width']}; - min-height: ${(props) => props.theme!.layout.attachments["min-height"]}; - max-height: ${(props) => props.theme!.layout.attachments["max-height"]}; + min-height: ${(props) => props.theme!.layout.attachments['min-height']}; + max-height: ${(props) => props.theme!.layout.attachments['max-height']}; } `; @@ -50,8 +50,8 @@ const Tall = styled(Base)` img, .Spoiler.Image { width: auto; - min-height: ${(props) => props.theme!.layout.attachments["min-height"]}; - max-height: ${(props) => props.theme!.layout.attachments["max-height"]}; + min-height: ${(props) => props.theme!.layout.attachments['min-height']}; + max-height: ${(props) => props.theme!.layout.attachments['max-height']}; } .Spoiler.Image { @@ -66,8 +66,8 @@ const Wide = styled(Base)` img, .Spoiler.Image { height: auto; - min-width: ${(props) => props.theme!.layout.attachments["min-width"]}; - max-width: ${(props) => props.theme!.layout.attachments["max-width"]}; + min-width: ${(props) => props.theme!.layout.attachments['min-width']}; + max-width: ${(props) => props.theme!.layout.attachments['max-width']}; } .Spoiler.Image, @@ -91,10 +91,10 @@ export function SizedContent(props: Props) { return ( <Base style={{ - "--width": props.width, - "--height": props.height, - "--width-px": props.width + "px", - "--height-px": props.height + "px", + '--width': props.width, + '--height': props.height, + '--width-px': props.width + 'px', + '--height-px': props.height + 'px', }} > {props.children} diff --git a/packages/client/components/ui/components/design/layout/Spacer.tsx b/packages/client/components/ui/components/design/layout/Spacer.tsx index 14ec16cf2..71278c618 100644 --- a/packages/client/components/ui/components/design/layout/Spacer.tsx +++ b/packages/client/components/ui/components/design/layout/Spacer.tsx @@ -1,4 +1,4 @@ -import { styled } from "solid-styled-components"; +import { styled } from 'solid-styled-components'; /** * An empty container that fills all available space diff --git a/packages/client/components/ui/components/design/layout/Spoiler.tsx b/packages/client/components/ui/components/design/layout/Spoiler.tsx index c963dfe02..d34b67de6 100644 --- a/packages/client/components/ui/components/design/layout/Spoiler.tsx +++ b/packages/client/components/ui/components/design/layout/Spoiler.tsx @@ -1,13 +1,12 @@ -import { Show, createSignal } from "solid-js"; -import { styled } from "solid-styled-components"; - -import { useTranslation } from "@revolt/i18n"; +import { useTranslation } from '@revolt/i18n'; +import { createSignal, Show } from 'solid-js'; +import { styled } from 'solid-styled-components'; interface Props { - contentType?: "Image" | "Video"; + contentType?: 'Image' | 'Video'; } -const Base = styled("div")` +const Base = styled('div')` z-index: 1; position: relative; @@ -41,12 +40,12 @@ export function Spoiler(props: Props) { return ( <Show when={shown()}> - <Base class="container"> + <Base class='container'> <div class={`Spoiler ${props.contentType}`} onClick={() => setShown(false)} > - <span>{t("app.main.channel.misc.spoiler_attachment")}</span> + <span>{t('app.main.channel.misc.spoiler_attachment')}</span> </div> </Base> </Show> diff --git a/packages/client/components/ui/components/design/layout/index.tsx b/packages/client/components/ui/components/design/layout/index.tsx index 80b7f9f8c..aefeefb35 100644 --- a/packages/client/components/ui/components/design/layout/index.tsx +++ b/packages/client/components/ui/components/design/layout/index.tsx @@ -1,11 +1,11 @@ -export { Column } from "./Column"; -export { OverflowingText } from "./OverflowingText"; -export { Row } from "./Row"; -export { SizedContent } from "./SizedContent"; -export { Spoiler } from "./Spoiler"; -export { NonBreakingText } from "./NonBreakingText"; -export { Spacer } from "./Spacer"; -export { InlineIcon } from "./InlineIcon"; -export { PreviewStack } from "./PreviewStack"; -export { ListView } from "./ListView"; -export { BreakText } from "./BreakText"; +export { BreakText } from './BreakText'; +export { Column } from './Column'; +export { InlineIcon } from './InlineIcon'; +export { ListView } from './ListView'; +export { NonBreakingText } from './NonBreakingText'; +export { OverflowingText } from './OverflowingText'; +export { PreviewStack } from './PreviewStack'; +export { Row } from './Row'; +export { SizedContent } from './SizedContent'; +export { Spacer } from './Spacer'; +export { Spoiler } from './Spoiler'; diff --git a/packages/client/components/ui/components/floating/AutoComplete.tsx b/packages/client/components/ui/components/floating/AutoComplete.tsx index 100fd1782..93cb762ac 100644 --- a/packages/client/components/ui/components/floating/AutoComplete.tsx +++ b/packages/client/components/ui/components/floating/AutoComplete.tsx @@ -1,26 +1,25 @@ -import { For, JSX, Match, Show, Switch } from "solid-js"; -import { styled } from "solid-styled-components"; +import { CustomEmoji, UnicodeEmoji } from '@revolt/markdown/emoji'; +import { ServerMember } from 'revolt.js'; +import type { JSX } from 'solid-js'; +import { For, Match, Show, Switch } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { ServerMember } from "revolt.js"; - -import { CustomEmoji, UnicodeEmoji } from "@revolt/markdown/emoji"; - -import { AutoCompleteState } from "../../directives"; -import { Avatar, Column, Row } from "../design"; +import type { AutoCompleteState } from '../../directives'; +import { Avatar, Column, Row } from '../design'; /** * Auto complete popup */ export function AutoComplete( - props: Exclude<JSX.Directives["floating"]["autoComplete"], undefined> + props: Exclude<JSX.Directives['floating']['autoComplete'], undefined> ) { return ( <Base> <Switch> - <Match when={props.state().matched === "emoji"}> + <Match when={props.state().matched === 'emoji'}> <For each={ - (props.state() as AutoCompleteState & { matched: "emoji" }) + (props.state() as AutoCompleteState & { matched: 'emoji' }) .matches } > @@ -31,13 +30,13 @@ export function AutoComplete( <> <UnicodeEmoji emoji={(match as { codepoint: string }).codepoint} - />{" "} + />{' '} <Name>:{match.shortcode}:</Name> </> } > - <Match when={match.type === "custom"}> - <CustomEmoji id={(match as { id: string }).id} />{" "} + <Match when={match.type === 'custom'}> + <CustomEmoji id={(match as { id: string }).id} />{' '} <Name>:{match.shortcode}:</Name> </Match> </Switch> @@ -45,24 +44,24 @@ export function AutoComplete( )} </For> </Match> - <Match when={props.state().matched === "user"}> + <Match when={props.state().matched === 'user'}> <For each={ ( props.state() as AutoCompleteState & { - matched: "user"; + matched: 'user'; } ).matches } > {(match, index) => ( <Entry align selected={index() === props.selection()}> - <Avatar src={match.user.animatedAvatarURL} size={24} />{" "} + <Avatar src={match.user.animatedAvatarURL} size={24} />{' '} <Name>{match.user.displayName}</Name> {match.user instanceof ServerMember && match.user.displayName !== match.user.user?.username && ( <> - {" "} + {' '} @{match.user.user?.username}# {match.user.user?.discriminator} </> @@ -71,12 +70,12 @@ export function AutoComplete( )} </For> </Match> - <Match when={props.state().matched === "channel"}> + <Match when={props.state().matched === 'channel'}> <For each={ ( props.state() as AutoCompleteState & { - matched: "channel"; + matched: 'channel'; } ).matches } @@ -101,8 +100,8 @@ const Entry = styled(Row)<{ selected: boolean }>` padding: ${(props) => props.theme!.gap.sm} ${(props) => props.theme!.gap.md}; background: ${(props) => props.selected - ? props.theme!.colours["component-context-menu-item-hover-background"] - : "transparent"}; + ? props.theme!.colours['component-context-menu-item-hover-background'] + : 'transparent'}; `; /** @@ -123,7 +122,7 @@ const Base = styled(Column)` backdrop-filter: ${(props) => props.theme!.effects.blur.md}; color: ${(props) => - props.theme!.colours["component-context-menu-foreground"]}; + props.theme!.colours['component-context-menu-foreground']}; background: ${(props) => - props.theme!.colours["component-context-menu-background"]}; + props.theme!.colours['component-context-menu-background']}; `; diff --git a/packages/client/components/ui/components/floating/CompositionPicker.tsx b/packages/client/components/ui/components/floating/CompositionPicker.tsx index 36d53b3ee..cf439507c 100644 --- a/packages/client/components/ui/components/floating/CompositionPicker.tsx +++ b/packages/client/components/ui/components/floating/CompositionPicker.tsx @@ -1,13 +1,13 @@ -import { useFloating } from "solid-floating-ui"; -import { For, JSX, Ref, Show, createEffect, createSignal, on } from "solid-js"; -import { Portal } from "solid-js/web"; -import { styled } from "solid-styled-components"; +import { autoUpdate, flip, offset, shift } from '@floating-ui/dom'; +import { useFloating } from 'solid-floating-ui'; +import type { JSX, Ref } from 'solid-js'; +import { createEffect, createSignal, For, on, Show } from 'solid-js'; +import { Portal } from 'solid-js/web'; +import { Motion, Presence } from 'solid-motionone'; +import { styled } from 'solid-styled-components'; -import { autoUpdate, flip, offset, shift } from "@floating-ui/dom"; -import { Motion, Presence } from "@motionone/solid"; - -import { scrollable } from "../../directives"; -import { Column, Input } from "../design"; +import { scrollable } from '../../directives'; +import { Column, Input } from '../design'; /** * Base element @@ -22,7 +22,7 @@ const Base = styled(Column)` /** * Container element for the picker */ -const Container = styled("div", "Picker")` +const Container = styled('div', 'Picker')` flex-grow: 1; display: flex; height: 400px; @@ -59,7 +59,7 @@ interface Props { sendGIFMessage: (content: string) => void; } -type GifBoxFile = { +interface GifBoxFile { _id: string; fileName: string; originalFileName: string; @@ -70,9 +70,9 @@ type GifBoxFile = { author: string; size: number; sha512: string; -}; +} -type Gif = { +interface Gif { author: { _id: string; displayName: string; @@ -88,7 +88,7 @@ type Gif = { file: GifBoxFile; createdAt: string; views: number; -}; +} /** * CompositionPicker component @@ -101,7 +101,7 @@ export function CompositionPicker(props: Props) { const [show, setShow] = createSignal(false); const position = useFloating(anchor, floating, { - placement: "top-end", + placement: 'top-end', whileElementsMounted: autoUpdate, middleware: [offset(5), flip(), shift()], }); @@ -115,7 +115,7 @@ export function CompositionPicker(props: Props) { () => show(), (show) => { if (show && !fetched) { - fetch("https://api.gifbox.me/post/popular") + fetch('https://api.gifbox.me/post/popular') .then((x) => x.json()) .then(setData); @@ -147,7 +147,7 @@ export function CompositionPicker(props: Props) { onClickGif: () => setShow(!show()), onClickEmoji: () => setShow(!show()), })} - <Portal mount={document.getElementById("floating")!}> + <Portal mount={document.getElementById('floating')!}> <Presence> <Show when={show()}> <Motion @@ -163,13 +163,13 @@ export function CompositionPicker(props: Props) { top: `${position.y ?? 0}px`, left: `${position.x ?? 0}px`, }} - role="tooltip" + role='tooltip' > <Container> <Input - placeholder="search for gifs :)" + placeholder='search for gifs :)' onKeyDown={(e) => { - if (e.key === "Enter") { + if (e.key === 'Enter') { e.preventDefault(); search(e.currentTarget.value); } @@ -187,7 +187,7 @@ export function CompositionPicker(props: Props) { } > <img - style={{ width: "100%" }} + style={{ width: '100%' }} src={`https://api.gifbox.me/file/${entry.file.bucket}/${entry.file.fileName}`} /> </a> diff --git a/packages/client/components/ui/components/floating/FloatingManager.tsx b/packages/client/components/ui/components/floating/FloatingManager.tsx index 0a473991a..df56b3936 100644 --- a/packages/client/components/ui/components/floating/FloatingManager.tsx +++ b/packages/client/components/ui/components/floating/FloatingManager.tsx @@ -1,23 +1,22 @@ -import { useFloating } from "solid-floating-ui"; +import { autoUpdate, flip, offset, shift } from '@floating-ui/dom'; +import { useFloating } from 'solid-floating-ui'; import { + createSignal, For, Match, - Show, - Switch, - createSignal, onCleanup, onMount, -} from "solid-js"; -import { Portal } from "solid-js/web"; - -import { autoUpdate, flip, offset, shift } from "@floating-ui/dom"; -import { Motion, Presence } from "@motionone/solid"; - -import { FloatingElement, floatingElements } from "../../directives"; + Show, + Switch, +} from 'solid-js'; +import { Portal } from 'solid-js/web'; +import { Motion, Presence } from 'solid-motionone'; -import { AutoComplete } from "./AutoComplete"; -import { TooltipBase } from "./Tooltip"; -import { UserCard } from "./UserCard"; +import type { FloatingElement } from '../../directives'; +import { floatingElements } from '../../directives'; +import { AutoComplete } from './AutoComplete'; +import { TooltipBase } from './Tooltip'; +import { UserCard } from './UserCard'; /** * Render the actual floating elements @@ -34,11 +33,11 @@ export function FloatingManager() { mouseY = clientY; } - onMount(() => document.addEventListener("mousemove", onMouseMove)); - onCleanup(() => document.addEventListener("mousemove", onMouseMove)); + onMount(() => document.addEventListener('mousemove', onMouseMove)); + onCleanup(() => document.addEventListener('mousemove', onMouseMove)); return ( - <Portal mount={document.getElementById("floating")!}> + <Portal mount={document.getElementById('floating')!}> <For each={floatingElements()}> {(element) => ( <Presence> @@ -68,11 +67,11 @@ function Floating(props: FloatingElement & { mouseX: number; mouseY: number }) { if (current.tooltip) { return current.tooltip.placement; } else if (current.userCard) { - return "right-start"; + return 'right-start'; } else if (current.contextMenu) { - return "right-start"; + return 'right-start'; } else if (current.autoComplete) { - return "top-start"; + return 'top-start'; } }; @@ -142,8 +141,8 @@ function Floating(props: FloatingElement & { mouseX: number; mouseY: number }) { // We know what we're doing here... // eslint-disable-next-line solid/reactivity if (props.config().userCard || props.config().contextMenu) { - onMount(() => document.addEventListener("mousedown", onMouseDown)); - onCleanup(() => document.removeEventListener("mousedown", onMouseDown)); + onMount(() => document.addEventListener('mousedown', onMouseDown)); + onCleanup(() => document.removeEventListener('mousedown', onMouseDown)); } return ( @@ -161,13 +160,13 @@ function Floating(props: FloatingElement & { mouseX: number; mouseY: number }) { top: `${position.y ?? 0}px`, left: `${position.x ?? 0}px`, // TODO: use floating-element zIndex from theme - "z-index": 10000, + 'z-index': 10000, }} > <Switch> <Match when={props.show()?.tooltip}> <TooltipBase> - {typeof props.show()!.tooltip!.content === "function" + {typeof props.show()!.tooltip!.content === 'function' ? (props.show()!.tooltip!.content as Function)({}) : props.show()!.tooltip!.content} </TooltipBase> diff --git a/packages/client/components/ui/components/floating/Tooltip.stories.tsx b/packages/client/components/ui/components/floating/Tooltip.stories.tsx index 0730ee517..90795d684 100644 --- a/packages/client/components/ui/components/floating/Tooltip.stories.tsx +++ b/packages/client/components/ui/components/floating/Tooltip.stories.tsx @@ -1,26 +1,25 @@ -import type { ComponentProps } from "solid-js"; +import type { ComponentProps } from 'solid-js'; -import { Button } from "../design"; -import type { ComponentStory } from "../stories"; - -import { Tooltip } from "./Tooltip"; +import { Button } from '../design'; +import type { ComponentStory } from '../stories'; +import { Tooltip } from './Tooltip'; export default { - category: "Floating/Tooltip", + category: 'Floating/Tooltip', component: Tooltip, - stories: [{ title: "Default" }], + stories: [{ title: 'Default' }], props: { /** * Render the children */ children(fn) { return ( - <Button {...fn} type="button"> + <Button {...fn} type='button'> Example </Button> ); }, - content: "Hello, I am a tooltip!", + content: 'Hello, I am a tooltip!', initialState: true, }, propTypes: {}, diff --git a/packages/client/components/ui/components/floating/Tooltip.tsx b/packages/client/components/ui/components/floating/Tooltip.tsx index f043d5435..5847f030a 100644 --- a/packages/client/components/ui/components/floating/Tooltip.tsx +++ b/packages/client/components/ui/components/floating/Tooltip.tsx @@ -1,15 +1,16 @@ -import { JSX, splitProps } from "solid-js"; -import { styled } from "solid-styled-components"; +import type { JSX } from 'solid-js'; +import { splitProps } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { generateTypographyCSS } from "../design/atoms/display/Typography"; +import { generateTypographyCSS } from '../design/atoms/display/Typography'; /** * Base element for the tooltip */ -export const TooltipBase = styled("div", "Tooltip")` +export const TooltipBase = styled('div', 'Tooltip')` color: white; background: black; - ${(props) => generateTypographyCSS(props.theme!, "tooltip")}; + ${(props) => generateTypographyCSS(props.theme!, 'tooltip')}; padding: ${(props) => props.theme!.gap.md}; border-radius: ${(props) => props.theme!.borderRadius.md}; @@ -20,13 +21,13 @@ type Props = { * Tooltip trigger area */ children: JSX.Element; -} & (JSX.Directives["floating"] & object)["tooltip"]; +} & (JSX.Directives['floating'] & object)['tooltip']; /** * Tooltip component */ export function Tooltip(props: Props) { - const [local, remote] = splitProps(props, ["children"]); + const [local, remote] = splitProps(props, ['children']); return ( <div diff --git a/packages/client/components/ui/components/floating/UserCard.tsx b/packages/client/components/ui/components/floating/UserCard.tsx index 70f50e52f..836dfccc2 100644 --- a/packages/client/components/ui/components/floating/UserCard.tsx +++ b/packages/client/components/ui/components/floating/UserCard.tsx @@ -1,15 +1,15 @@ -import { JSX, createMemo } from "solid-js"; -import { For, Show } from "solid-js"; -import { styled } from "solid-styled-components"; +import { getController } from '@revolt/common'; +import type { JSX } from 'solid-js'; +import { createMemo } from 'solid-js'; +import { For, Show } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { getController } from "@revolt/common"; - -import { ColouredText, Row, Username } from "../design"; +import { ColouredText, Row, Username } from '../design'; /** * Base element for the card */ -const Base = styled("div", "Tooltip")` +const Base = styled('div', 'Tooltip')` color: white; background: black; width: 400px; @@ -20,14 +20,14 @@ const Base = styled("div", "Tooltip")` * User Card */ export function UserCard( - props: JSX.Directives["floating"]["userCard"] & object + props: JSX.Directives['floating']['userCard'] & object ) { const roleIds = createMemo( () => new Set(props.member?.orderedRoles.map((role) => role.id)) ); // Disable it while it's being developed - if (!getController("state").experiments.isEnabled("user_card")) return null; + if (!getController('state').experiments.isEnabled('user_card')) return null; return ( <Base> @@ -53,7 +53,7 @@ export function UserCard( > <ColouredText colour={role.colour!} - clip={role.colour?.includes("gradient")} + clip={role.colour?.includes('gradient')} > {role.name} </ColouredText> @@ -77,7 +77,7 @@ export function UserCard( > <ColouredText colour={role.colour!} - clip={role.colour?.includes("gradient")} + clip={role.colour?.includes('gradient')} > {role.name} </ColouredText> diff --git a/packages/client/components/ui/components/floating/index.ts b/packages/client/components/ui/components/floating/index.ts index b29eab398..cdf677fc4 100644 --- a/packages/client/components/ui/components/floating/index.ts +++ b/packages/client/components/ui/components/floating/index.ts @@ -1,4 +1,4 @@ -export { UserCard } from "./UserCard"; -export { FloatingManager } from "./FloatingManager"; -export { Tooltip } from "./Tooltip"; -export { CompositionPicker } from "./CompositionPicker"; +export { CompositionPicker } from './CompositionPicker'; +export { FloatingManager } from './FloatingManager'; +export { Tooltip } from './Tooltip'; +export { UserCard } from './UserCard'; diff --git a/packages/client/components/ui/components/index.ts b/packages/client/components/ui/components/index.ts index 5f025c5f4..33ba0751d 100644 --- a/packages/client/components/ui/components/index.ts +++ b/packages/client/components/ui/components/index.ts @@ -1,8 +1,8 @@ -export * from "./tools"; -export * from "./common"; -export * from "./design"; -export * from "./floating"; -export * from "./messaging"; -export * from "./navigation"; -export * from "./context"; -export * from "./native"; +export * from './common'; +export * from './context'; +export * from './design'; +export * from './floating'; +export * from './messaging'; +export * from './native'; +export * from './navigation'; +export * from './tools'; diff --git a/packages/client/components/ui/components/messaging/composition/FileCarousel.tsx b/packages/client/components/ui/components/messaging/composition/FileCarousel.tsx index 0d96a06fc..09f2b6e2c 100644 --- a/packages/client/components/ui/components/messaging/composition/FileCarousel.tsx +++ b/packages/client/components/ui/components/messaging/composition/FileCarousel.tsx @@ -1,12 +1,11 @@ -import { BiRegularPlus, BiRegularXCircle, BiSolidFile } from "solid-icons/bi"; -import { For, Match, Show, Switch } from "solid-js"; -import { styled } from "solid-styled-components"; +import { CONFIGURATION } from '@revolt/common'; +import { BiRegularPlus, BiRegularXCircle, BiSolidFile } from 'solid-icons/bi'; +import { For, Match, Show, Switch } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { CONFIGURATION } from "@revolt/common"; - -import { ALLOWED_IMAGE_TYPES } from "../../../../state/stores/Draft"; -import { OverflowingText } from "../../design"; -import { generateTypographyCSS } from "../../design/atoms/display/Typography"; +import { ALLOWED_IMAGE_TYPES } from '../../../../state/stores/Draft'; +import { OverflowingText } from '../../design'; +import { generateTypographyCSS } from '../../design/atoms/display/Typography'; interface Props { /** @@ -57,7 +56,7 @@ export function FileCarousel(props: Props) { return ( <Show when={props.files.length}> <Container> - <Carousel use:scrollable={{ direction: "x" }}> + <Carousel use:scrollable={{ direction: 'x' }}> <For each={props.files}> {(id, index) => { /** @@ -94,7 +93,7 @@ export function FileCarousel(props: Props) { <Image src={file().dataUri} alt={file().file.name} - loading="eager" + loading='eager' /> </Match> </Switch> @@ -126,9 +125,9 @@ export function FileCarousel(props: Props) { const PreviewBox = styled.div<{ image: boolean }>` display: grid; justify-items: center; - grid-template: "main" ${(props) => - props.theme!.layout.height["attachment-preview"]} / minmax( - ${(props) => props.theme!.layout.height["attachment-preview"]}, + grid-template: 'main' ${(props) => + props.theme!.layout.height['attachment-preview']} / minmax( + ${(props) => props.theme!.layout.height['attachment-preview']}, 1fr ); @@ -138,7 +137,7 @@ const PreviewBox = styled.div<{ image: boolean }>` background: ${(props) => props.theme!.colours[`messaging-upload-file-background`]}; - color: ${(props) => props.theme!.colours["messaging-upload-file-foreground"]}; + color: ${(props) => props.theme!.colours['messaging-upload-file-foreground']}; > * { grid-area: main; @@ -152,7 +151,7 @@ const Image = styled.img` width: 100%; object-fit: cover; margin-bottom: ${(props) => props.theme!.gap.md}; - height: ${(props) => props.theme!.layout.height["attachment-preview"]}; + height: ${(props) => props.theme!.layout.height['attachment-preview']}; `; /** @@ -183,8 +182,8 @@ const EmptyEntry = styled.div` display: grid; flex-shrink: 0; place-items: center; - width: ${(props) => props.theme!.layout.height["attachment-preview"]}; - height: ${(props) => props.theme!.layout.height["attachment-preview"]}; + width: ${(props) => props.theme!.layout.height['attachment-preview']}; + height: ${(props) => props.theme!.layout.height['attachment-preview']}; cursor: pointer; border-radius: ${(props) => props.theme!.gap.md}; @@ -198,7 +197,7 @@ const Entry = styled.div<{ ignored: boolean }>` display: flex; align-items: center; flex-direction: column; - opacity: ${(props) => (props.ignored ? "0.4" : "1")}; + opacity: ${(props) => (props.ignored ? '0.4' : '1')}; `; /** @@ -206,8 +205,8 @@ const Entry = styled.div<{ ignored: boolean }>` */ const FileName = styled.span` ${(props) => - generateTypographyCSS(props.theme!, "composition-file-upload-name")} - max-width: ${(props) => props.theme!.layout.height["attachment-preview"]}; + generateTypographyCSS(props.theme!, 'composition-file-upload-name')} + max-width: ${(props) => props.theme!.layout.height['attachment-preview']}; text-align: center; `; @@ -216,7 +215,7 @@ const FileName = styled.span` */ const Size = styled.span` ${(props) => - generateTypographyCSS(props.theme!, "composition-file-upload-size")} + generateTypographyCSS(props.theme!, 'composition-file-upload-size')} `; /** @@ -227,7 +226,7 @@ const Divider = styled.div` flex-shrink: 0; width: ${(props) => props.theme!.gap.sm}; border-radius: ${(props) => props.theme!.borderRadius.md}; - background: ${(props) => props.theme!.colours["messaging-upload-divider"]}; + background: ${(props) => props.theme!.colours['messaging-upload-divider']}; `; /** @@ -255,6 +254,6 @@ const Container = styled.div` border-radius: ${(props) => props.theme!.borderRadius.lg}; background: ${(props) => - props.theme!.colours["messaging-message-box-background"]}; - color: ${(props) => props.theme!.colours["messaging-message-box-foreground"]}; + props.theme!.colours['messaging-message-box-background']}; + color: ${(props) => props.theme!.colours['messaging-message-box-foreground']}; `; diff --git a/packages/client/components/ui/components/messaging/composition/MessageBox.tsx b/packages/client/components/ui/components/messaging/composition/MessageBox.tsx index 92c2e2835..1c5678a31 100644 --- a/packages/client/components/ui/components/messaging/composition/MessageBox.tsx +++ b/packages/client/components/ui/components/messaging/composition/MessageBox.tsx @@ -1,11 +1,11 @@ -import { BiRegularBlock } from "solid-icons/bi"; -import { JSX, Match, Show, Switch, onMount } from "solid-js"; -import { styled } from "solid-styled-components"; +import { useTranslation } from '@revolt/i18n'; +import { BiRegularBlock } from 'solid-icons/bi'; +import type { JSX } from 'solid-js'; +import { Match, onMount, Show, Switch } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { useTranslation } from "@revolt/i18n"; - -import { generateTypographyCSS } from "../../design/atoms/display/Typography"; -import { InlineIcon, Row } from "../../design/layout"; +import { generateTypographyCSS } from '../../design/atoms/display/Typography'; +import { InlineIcon, Row } from '../../design/layout'; interface Props { /** @@ -54,7 +54,7 @@ interface Props { /** * Auto complete config */ - autoCompleteConfig?: JSX.Directives["autoComplete"]; + autoCompleteConfig?: JSX.Directives['autoComplete']; /** * Update the current draft selection @@ -65,7 +65,7 @@ interface Props { /** * Message box container */ -const Base = styled("div", "MessageBox")` +const Base = styled('div', 'MessageBox')` height: 48px; flex-shrink: 0; @@ -74,14 +74,14 @@ const Base = styled("div", "MessageBox")` display: flex; background: ${({ theme }) => - theme!.colours["messaging-message-box-background"]}; - color: ${({ theme }) => theme!.colours["messaging-message-box-foreground"]}; + theme!.colours['messaging-message-box-background']}; + color: ${({ theme }) => theme!.colours['messaging-message-box-foreground']}; `; /** * Input area */ -const Input = styled("textarea")` +const Input = styled('textarea')` border: none; resize: none; outline: none; @@ -91,8 +91,8 @@ const Input = styled("textarea")` padding: 14px 0; font-family: ${(props) => props.theme!.fonts.primary}; - color: ${({ theme }) => theme!.colours["messaging-message-box-foreground"]}; - ${(props) => generateTypographyCSS(props.theme!, "messages")} + color: ${({ theme }) => theme!.colours['messaging-message-box-foreground']}; + ${(props) => generateTypographyCSS(props.theme!, 'messages')} `; /** @@ -144,7 +144,7 @@ export function MessageBox(props: Props) { <Base> <Switch fallback={props.actionsStart}> <Match when={!props.sendingAllowed}> - <InlineIcon size="wide"> + <InlineIcon size='wide'> <Blocked> <BiRegularBlock size={24} /> </Blocked> @@ -164,7 +164,7 @@ export function MessageBox(props: Props) { } > <Match when={!props.sendingAllowed}> - <Blocked align>{t("app.main.channel.misc.no_sending")}</Blocked> + <Blocked align>{t('app.main.channel.misc.no_sending')}</Blocked> </Match> </Switch> <Show when={props.sendingAllowed}>{props.actionsEnd}</Show> diff --git a/packages/client/components/ui/components/messaging/composition/MessageReplyPreview.tsx b/packages/client/components/ui/components/messaging/composition/MessageReplyPreview.tsx index 953b4d62b..fc628b3c0 100644 --- a/packages/client/components/ui/components/messaging/composition/MessageReplyPreview.tsx +++ b/packages/client/components/ui/components/messaging/composition/MessageReplyPreview.tsx @@ -1,13 +1,11 @@ -import { BiRegularAt, BiSolidXCircle } from "solid-icons/bi"; -import { Show } from "solid-js"; -import { styled } from "solid-styled-components"; +import { useTranslation } from '@revolt/i18n'; +import type { Message } from 'revolt.js'; +import { BiRegularAt, BiSolidXCircle } from 'solid-icons/bi'; +import { Show } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import type { Message } from "revolt.js"; - -import { useTranslation } from "@revolt/i18n"; - -import { Row } from "../../design"; -import { MessageReply } from "../message/MessageReply"; +import { Row } from '../../design'; +import { MessageReply } from '../message/MessageReply'; interface Props { /** @@ -56,7 +54,7 @@ const MentionToggle = styled.a<{ mention: boolean }>` color: ${(props) => props.theme!.colours[ - `messaging-indicator-reply-${props.mention ? "enabled" : "disabled"}` + `messaging-indicator-reply-${props.mention ? 'enabled' : 'disabled'}` ]}; `; @@ -78,9 +76,9 @@ const Base = styled(Row)` padding: ${(props) => props.theme!.gap.md} ${(props) => props.theme!.gap.lg}; border-radius: ${(props) => props.theme!.borderRadius.lg}; - color: ${(props) => props.theme!.colours["messaging-indicator-foreground"]}; + color: ${(props) => props.theme!.colours['messaging-indicator-foreground']}; background: ${(props) => - props.theme!.colours["messaging-indicator-background"]}; + props.theme!.colours['messaging-indicator-background']}; a:hover { filter: brightness(1.2); @@ -94,14 +92,14 @@ export function MessageReplyPreview(props: Props) { const t = useTranslation(); return ( - <Base gap="md" align> - <ReplyTo>{t("app.main.channel.reply.replying")}</ReplyTo> + <Base gap='md' align> + <ReplyTo>{t('app.main.channel.reply.replying')}</ReplyTo> <MessageReply message={props.message} noDecorations /> - <Row gap="lg" align> + <Row gap='lg' align> <Show when={!props.self}> <MentionToggle mention={props.mention} onClick={props.toggle}> <BiRegularAt size={16} /> - {props.mention ? t("general.on") : t("general.off")} + {props.mention ? t('general.on') : t('general.off')} </MentionToggle> </Show> <Dismiss onClick={props.dismiss}> diff --git a/packages/client/components/ui/components/messaging/composition/TypingIndicator.tsx b/packages/client/components/ui/components/messaging/composition/TypingIndicator.tsx index 5bc9c5332..3ec37dbb4 100644 --- a/packages/client/components/ui/components/messaging/composition/TypingIndicator.tsx +++ b/packages/client/components/ui/components/messaging/composition/TypingIndicator.tsx @@ -1,12 +1,10 @@ -import { For, Match, Show, Switch } from "solid-js"; -import { styled } from "solid-styled-components"; +import { useTranslation } from '@revolt/i18n'; +import { useUsers } from '@revolt/markdown/users'; +import type { User } from 'revolt.js'; +import { For, Match, Show, Switch } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { User } from "revolt.js"; - -import { useTranslation } from "@revolt/i18n"; -import { useUsers } from "@revolt/markdown/users"; - -import { Avatar, OverflowingText, Typography } from "../../design"; +import { Avatar, OverflowingText, Typography } from '../../design'; interface Props { /** @@ -34,9 +32,9 @@ export function TypingIndicator(props: Props) { ( props.users.filter( (user) => - typeof user !== "undefined" && + typeof user !== 'undefined' && user.id !== props.ownId && - user.relationship !== "Blocked" + user.relationship !== 'Blocked' ) as User[] ) .sort((a, b) => a!.id.toUpperCase().localeCompare(b!.id.toUpperCase())) @@ -55,27 +53,27 @@ export function TypingIndicator(props: Props) { src={user!.avatar} size={15} holepunch={ - index() + 1 < users().length ? "overlap-subtle" : "none" + index() + 1 < users().length ? 'overlap-subtle' : 'none' } /> )} </For> </Avatars> <OverflowingText> - <Typography variant="composition-typing-indicator"> - <Switch fallback={t("app.main.channel.typing.several")}> + <Typography variant='composition-typing-indicator'> + <Switch fallback={t('app.main.channel.typing.several')}> <Match when={users().length === 1}> - {t("app.main.channel.typing.single", { + {t('app.main.channel.typing.single', { user: users()[0]!.username, })} </Match> <Match when={users().length < 5}> - {t("app.main.channel.typing.multiple", { + {t('app.main.channel.typing.multiple', { user: users().slice(-1)[0]!.username, userlist: users() .slice(0, -1) .map((user) => user!.username) - .join(", "), + .join(', '), })} </Match> </Switch> @@ -120,14 +118,14 @@ const Bar = styled.div` flex-direction: row; backdrop-filter: ${(props) => props.theme!.effects.blur.md}; - color: ${(props) => props.theme!.colours["messaging-indicator-foreground"]}; + color: ${(props) => props.theme!.colours['messaging-indicator-foreground']}; background: ${(props) => - props.theme!.colours["messaging-indicator-background"]}; + props.theme!.colours['messaging-indicator-background']}; `; /** * Position relatively to this space */ -const Base = styled("div", "TypingIndicator")` +const Base = styled('div', 'TypingIndicator')` position: relative; `; diff --git a/packages/client/components/ui/components/messaging/composition/index.ts b/packages/client/components/ui/components/messaging/composition/index.ts index 00e21a5e7..2a46f7e70 100644 --- a/packages/client/components/ui/components/messaging/composition/index.ts +++ b/packages/client/components/ui/components/messaging/composition/index.ts @@ -1,4 +1,4 @@ -export { MessageReplyPreview } from "./MessageReplyPreview"; -export { TypingIndicator } from "./TypingIndicator"; -export { FileCarousel } from "./FileCarousel"; -export { MessageBox } from "./MessageBox"; +export { FileCarousel } from './FileCarousel'; +export { MessageBox } from './MessageBox'; +export { MessageReplyPreview } from './MessageReplyPreview'; +export { TypingIndicator } from './TypingIndicator'; diff --git a/packages/client/components/ui/components/messaging/index.ts b/packages/client/components/ui/components/messaging/index.ts index 50dcdc3ab..57a4f55cf 100644 --- a/packages/client/components/ui/components/messaging/index.ts +++ b/packages/client/components/ui/components/messaging/index.ts @@ -1,3 +1,3 @@ -export * from "./composition"; -export * from "./message"; -export * from "./indicators"; +export * from './composition'; +export * from './indicators'; +export * from './message'; diff --git a/packages/client/components/ui/components/messaging/indicators/FloatingIndicator.tsx b/packages/client/components/ui/components/messaging/indicators/FloatingIndicator.tsx index 54c15afce..e5b0e699d 100644 --- a/packages/client/components/ui/components/messaging/indicators/FloatingIndicator.tsx +++ b/packages/client/components/ui/components/messaging/indicators/FloatingIndicator.tsx @@ -1,12 +1,12 @@ -import { styled } from "solid-styled-components"; +import { styled } from 'solid-styled-components'; -import { generateTypographyCSS } from "../../design/atoms/display/Typography"; +import { generateTypographyCSS } from '../../design/atoms/display/Typography'; /** * Common styles for the floating indicators */ -export const FloatingIndicator = styled("div", "FloatingIndicator")<{ - position: "top" | "bottom"; +export const FloatingIndicator = styled('div', 'FloatingIndicator')<{ + position: 'top' | 'bottom'; }>` display: flex; user-select: none; @@ -19,16 +19,16 @@ export const FloatingIndicator = styled("div", "FloatingIndicator")<{ cursor: pointer; backdrop-filter: ${(props) => props.theme!.effects.blur.md}; - color: ${(props) => props.theme!.colours["messaging-indicator-foreground"]}; + color: ${(props) => props.theme!.colours['messaging-indicator-foreground']}; background-color: ${(props) => - props.theme!.colours["messaging-indicator-background"]}; + props.theme!.colours['messaging-indicator-background']}; - ${(props) => generateTypographyCSS(props.theme!, "conversation-indicator")} + ${(props) => generateTypographyCSS(props.theme!, 'conversation-indicator')} @keyframes anim { 0% { transform: translateY( - ${(props) => (props.position === "top" ? "-33px" : "33px")} + ${(props) => (props.position === 'top' ? '-33px' : '33px')} ); } 100% { diff --git a/packages/client/components/ui/components/messaging/indicators/JumpToBottom.tsx b/packages/client/components/ui/components/messaging/indicators/JumpToBottom.tsx index e251ed335..f88d94d0a 100644 --- a/packages/client/components/ui/components/messaging/indicators/JumpToBottom.tsx +++ b/packages/client/components/ui/components/messaging/indicators/JumpToBottom.tsx @@ -1,10 +1,8 @@ -import { useTranslation } from "@revolt/i18n"; +import MdArrowForward from '@material-design-icons/svg/filled/arrow_forward.svg?component-solid'; +import { useTranslation } from '@revolt/i18n'; -import MdArrowForward from "@material-design-icons/svg/filled/arrow_forward.svg?component-solid"; - -import { iconSize } from "../../.."; - -import { FloatingIndicator } from "./FloatingIndicator"; +import { iconSize } from '../../..'; +import { FloatingIndicator } from './FloatingIndicator'; interface Props { /** @@ -20,11 +18,11 @@ export function JumpToBottom(props: Props) { const t = useTranslation(); return ( - <FloatingIndicator use:ripple position="bottom" onClick={props.onClick}> - <span style={{ "flex-grow": 1 }}> - {t("app.main.channel.misc.viewing_old")} + <FloatingIndicator use:ripple position='bottom' onClick={props.onClick}> + <span style={{ 'flex-grow': 1 }}> + {t('app.main.channel.misc.viewing_old')} </span> - <span>{t("app.main.channel.misc.jump_present")}</span> + <span>{t('app.main.channel.misc.jump_present')}</span> <MdArrowForward {...iconSize(16)} /> </FloatingIndicator> ); diff --git a/packages/client/components/ui/components/messaging/indicators/NewMessages.tsx b/packages/client/components/ui/components/messaging/indicators/NewMessages.tsx index fbbd99097..acd503db2 100644 --- a/packages/client/components/ui/components/messaging/indicators/NewMessages.tsx +++ b/packages/client/components/ui/components/messaging/indicators/NewMessages.tsx @@ -1,14 +1,11 @@ -import { Accessor, Show } from "solid-js"; +import MdClose from '@material-design-icons/svg/filled/close.svg?component-solid'; +import { dayjs, useTranslation } from '@revolt/i18n'; +import type { Accessor } from 'solid-js'; +import { Show } from 'solid-js'; +import { decodeTime } from 'ulid'; -import { decodeTime } from "ulid"; - -import { dayjs, useTranslation } from "@revolt/i18n"; - -import MdClose from "@material-design-icons/svg/filled/close.svg?component-solid"; - -import { iconSize, styled } from "../../.."; - -import { FloatingIndicator } from "./FloatingIndicator"; +import { iconSize, styled } from '../../..'; +import { FloatingIndicator } from './FloatingIndicator'; interface Props { /** @@ -45,13 +42,13 @@ export function NewMessages(props: Props) { return ( <Show when={props.lastId()}> - <FloatingIndicator use:ripple position="top" onClick={props.jumpBack}> - <span style={{ "flex-grow": 1 }}> - {t("app.main.channel.misc.new_messages", { + <FloatingIndicator use:ripple position='top' onClick={props.jumpBack}> + <span style={{ 'flex-grow': 1 }}> + {t('app.main.channel.misc.new_messages', { time_ago: dayjs(decodeTime(props.lastId()!)).fromNow(), })} </span> - <span>{t("app.main.channel.misc.jump_beginning")}</span> + <span>{t('app.main.channel.misc.jump_beginning')}</span> <CancelIcon onClick={onCancel}> <MdClose {...iconSize(16)} /> </CancelIcon> diff --git a/packages/client/components/ui/components/messaging/indicators/index.tsx b/packages/client/components/ui/components/messaging/indicators/index.tsx index e20d8dd8c..21da1971d 100644 --- a/packages/client/components/ui/components/messaging/indicators/index.tsx +++ b/packages/client/components/ui/components/messaging/indicators/index.tsx @@ -1,2 +1,2 @@ -export { NewMessages } from "./NewMessages"; -export { JumpToBottom } from "./JumpToBottom"; +export { JumpToBottom } from './JumpToBottom'; +export { NewMessages } from './NewMessages'; diff --git a/packages/client/components/ui/components/messaging/message/Attachment.stories.tsx b/packages/client/components/ui/components/messaging/message/Attachment.stories.tsx index f11f245bb..191c23c3d 100644 --- a/packages/client/components/ui/components/messaging/message/Attachment.stories.tsx +++ b/packages/client/components/ui/components/messaging/message/Attachment.stories.tsx @@ -1,11 +1,10 @@ -import type { ComponentProps } from "solid-js"; +import type { API } from 'revolt.js'; +import { Client, File } from 'revolt.js'; +import type { ComponentProps } from 'solid-js'; -import { API, Client, File } from "revolt.js"; - -import FitContentDecorator from "../../../decorators/FitContentDecorator"; -import type { ComponentStory } from "../../stories"; - -import { Attachment } from "./Attachment"; +import FitContentDecorator from '../../../decorators/FitContentDecorator'; +import type { ComponentStory } from '../../stories'; +import { Attachment } from './Attachment'; const client = new Client(); @@ -13,178 +12,178 @@ client.configuration = { features: { autumn: { enabled: true, - url: "http://local.revolt.chat:5273", + url: 'http://local.revolt.chat:5273', }, }, } as never; export const attachments: { [key in - | "audio" - | "text" - | "file" - | `${"tall" | "wide"}_${"image" | "video"}`]: API.File; + | 'audio' + | 'text' + | 'file' + | `${'tall' | 'wide'}_${'image' | 'video'}`]: API.File; } = { tall_image: { - tag: "attachments", - content_type: "image/jpg", - _id: "jeremy-hynes-4tmtN4YU5yM-unsplash.jpg", - filename: "jeremy-hynes-4tmtN4YU5yM-unsplash.jpg", + tag: 'attachments', + content_type: 'image/jpg', + _id: 'jeremy-hynes-4tmtN4YU5yM-unsplash.jpg', + filename: 'jeremy-hynes-4tmtN4YU5yM-unsplash.jpg', size: 5_000, metadata: { - type: "Image", + type: 'Image', width: 640, height: 960, }, }, wide_image: { - tag: "attachments", - content_type: "image/jpg", - _id: "maxim-berg-Ac02zYZs22Y-unsplash.jpg", - filename: "maxim-berg-Ac02zYZs22Y-unsplash.jpg", + tag: 'attachments', + content_type: 'image/jpg', + _id: 'maxim-berg-Ac02zYZs22Y-unsplash.jpg', + filename: 'maxim-berg-Ac02zYZs22Y-unsplash.jpg', size: 5_000, metadata: { - type: "Image", + type: 'Image', width: 640, height: 427, }, }, tall_video: { - tag: "attachments", - content_type: "video/mp4", - _id: "pexels-polina-kovaleva-8035714.mp4", - filename: "pexels-polina-kovaleva-8035714.mp4", + tag: 'attachments', + content_type: 'video/mp4', + _id: 'pexels-polina-kovaleva-8035714.mp4', + filename: 'pexels-polina-kovaleva-8035714.mp4', size: 5_000, metadata: { - type: "Video", + type: 'Video', width: 360, height: 640, }, }, wide_video: { - tag: "attachments", - content_type: "video/mp4", - _id: "pexels-lachlan-ross-8775687.mp4", - filename: "pexels-lachlan-ross-8775687.mp4", + tag: 'attachments', + content_type: 'video/mp4', + _id: 'pexels-lachlan-ross-8775687.mp4', + filename: 'pexels-lachlan-ross-8775687.mp4', size: 5_000, metadata: { - type: "Video", + type: 'Video', width: 640, height: 360, }, }, audio: { - tag: "attachments", - content_type: "audio/ogg", - _id: "667237__klankbeeld__pound-in-summer-hydrophone-1331-220725-0457.wav", + tag: 'attachments', + content_type: 'audio/ogg', + _id: '667237__klankbeeld__pound-in-summer-hydrophone-1331-220725-0457.wav', filename: - "667237__klankbeeld__pound-in-summer-hydrophone-1331-220725-0457.wav", + '667237__klankbeeld__pound-in-summer-hydrophone-1331-220725-0457.wav', size: 5_000, metadata: { - type: "Audio", + type: 'Audio', }, }, text: { - tag: "attachments", - content_type: "plain/text", - _id: "file.txt", - filename: "file.txt", + tag: 'attachments', + content_type: 'plain/text', + _id: 'file.txt', + filename: 'file.txt', size: 2_500, metadata: { - type: "Text", + type: 'Text', }, }, file: { - tag: "attachments", - content_type: "application/octet-stream", - _id: "file", - filename: "file", + tag: 'attachments', + content_type: 'application/octet-stream', + _id: 'file', + filename: 'file', size: 2_500, metadata: { - type: "File", + type: 'File', }, }, }; export default { - category: "Messaging/Message/Attachment", + category: 'Messaging/Message/Attachment', component: Attachment, stories: [ { - title: "Image (Tall)", + title: 'Image (Tall)', props: { file: new File(client, attachments.tall_image), }, }, { - title: "Image (Wide)", + title: 'Image (Wide)', props: { file: new File(client, attachments.wide_image), }, }, { - title: "Image (Tall Spoiler)", + title: 'Image (Tall Spoiler)', props: { file: new File(client, { ...attachments.tall_image, - filename: "SPOILER_tall.jpg", + filename: 'SPOILER_tall.jpg', }), }, }, { - title: "Image (Wide Spoiler)", + title: 'Image (Wide Spoiler)', props: { file: new File(client, { ...attachments.wide_image, - filename: "SPOILER_wide.jpg", + filename: 'SPOILER_wide.jpg', }), }, }, { - title: "Video (Tall)", + title: 'Video (Tall)', props: { file: new File(client, attachments.tall_video), }, }, { - title: "Video (Wide)", + title: 'Video (Wide)', props: { file: new File(client, attachments.wide_video), }, }, { - title: "Video (Tall Spoiler)", + title: 'Video (Tall Spoiler)', props: { file: new File(client, { ...attachments.tall_video, - filename: "SPOILER_tall.mp4", + filename: 'SPOILER_tall.mp4', }), }, }, { - title: "Video (Wide Spoiler)", + title: 'Video (Wide Spoiler)', props: { file: new File(client, { ...attachments.wide_video, - filename: "SPOILER_wide.mp4", + filename: 'SPOILER_wide.mp4', }), }, }, { - title: "Audio", + title: 'Audio', props: { file: new File(client, attachments.audio), }, }, { - title: "Text", + title: 'Text', props: { file: new File(client, attachments.text), }, }, { - title: "Text (Large)", + title: 'Text (Large)', props: { file: new File(client, { ...attachments.text, @@ -193,7 +192,7 @@ export default { }, }, { - title: "File", + title: 'File', props: { file: new File(client, attachments.file), }, diff --git a/packages/client/components/ui/components/messaging/message/Attachment.tsx b/packages/client/components/ui/components/messaging/message/Attachment.tsx index 246f5b6ac..24a66dbfc 100644 --- a/packages/client/components/ui/components/messaging/message/Attachment.tsx +++ b/packages/client/components/ui/components/messaging/message/Attachment.tsx @@ -1,16 +1,13 @@ -import { Match, Show, Switch } from "solid-js"; -import { styled } from "solid-styled-components"; +import { getController } from '@revolt/common'; +import type { File, ImageEmbed, VideoEmbed } from 'revolt.js'; +import { Match, Show, Switch } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { File, ImageEmbed, VideoEmbed } from "revolt.js"; - -import { getController } from "@revolt/common"; - -import { Column } from "../../design/layout"; -import { SizedContent } from "../../design/layout/SizedContent"; -import { Spoiler } from "../../design/layout/Spoiler"; - -import { FileInfo } from "./FileInfo"; -import { TextFile } from "./TextFile"; +import { Column } from '../../design/layout'; +import { SizedContent } from '../../design/layout/SizedContent'; +import { Spoiler } from '../../design/layout/Spoiler'; +import { FileInfo } from './FileInfo'; +import { TextFile } from './TextFile'; /** * List of attachments @@ -20,9 +17,9 @@ export const AttachmentContainer = styled(Column)` border-radius: ${(props) => props.theme!.borderRadius.md}; color: ${(props) => - props.theme!.colours["messaging-component-attachment-foreground"]}; + props.theme!.colours['messaging-component-attachment-foreground']}; background: ${(props) => - props.theme!.colours["messaging-component-attachment-background"]}; + props.theme!.colours['messaging-component-attachment-background']}; `; /** @@ -44,39 +41,39 @@ export function humanFileSize(size: number) { export function Attachment(props: { file: File }) { return ( <Switch fallback={`Could not render ${props.file.metadata.type}!`}> - <Match when={props.file.metadata.type === "Image"}> + <Match when={props.file.metadata.type === 'Image'}> <SizedContent width={(props.file.metadata as ImageEmbed).width} height={(props.file.metadata as ImageEmbed).height} > <Show when={props.file.isSpoiler}> - <Spoiler contentType="Image" /> + <Spoiler contentType='Image' /> </Show> <img // TODO: cursor: pointer onClick={() => - getController("modal").push({ - type: "image_viewer", + getController('modal').push({ + type: 'image_viewer', file: props.file, }) } - loading="lazy" + loading='lazy' src={props.file.createFileURL({ max_side: 512 }, true)} /> </SizedContent> </Match> - <Match when={props.file.metadata.type === "Video"}> + <Match when={props.file.metadata.type === 'Video'}> <SizedContent width={(props.file.metadata as VideoEmbed).width} height={(props.file.metadata as VideoEmbed).height} > <Show when={props.file.isSpoiler}> - <Spoiler contentType="Video" /> + <Spoiler contentType='Video' /> </Show> - <video controls preload="metadata" src={props.file.url} /> + <video controls preload='metadata' src={props.file.url} /> </SizedContent> </Match> - <Match when={props.file.metadata.type === "Audio"}> + <Match when={props.file.metadata.type === 'Audio'}> <AttachmentContainer> <FileInfo file={props.file} /> <SizedContent width={360} height={48}> @@ -84,12 +81,12 @@ export function Attachment(props: { file: File }) { </SizedContent> </AttachmentContainer> </Match> - <Match when={props.file.metadata.type === "File"}> + <Match when={props.file.metadata.type === 'File'}> <AttachmentContainer> <FileInfo file={props.file} /> </AttachmentContainer> </Match> - <Match when={props.file.metadata.type === "Text"}> + <Match when={props.file.metadata.type === 'Text'}> <AttachmentContainer> <FileInfo file={props.file} /> <SizedContent width={480} height={120}> diff --git a/packages/client/components/ui/components/messaging/message/Container.stories.tsx b/packages/client/components/ui/components/messaging/message/Container.stories.tsx index aa7f4a793..c784f4e4a 100644 --- a/packages/client/components/ui/components/messaging/message/Container.stories.tsx +++ b/packages/client/components/ui/components/messaging/message/Container.stories.tsx @@ -1,59 +1,58 @@ -import type { ComponentProps } from "solid-js"; +import type { ComponentProps } from 'solid-js'; -import TestImage from "../../../test-images/the-halal-design-studio-ZrJpH6W-HDs-unsplash.jpg"; -import type { ComponentStory } from "../../stories"; - -import { MessageContainer } from "./Container"; +import TestImage from '../../../test-images/the-halal-design-studio-ZrJpH6W-HDs-unsplash.jpg'; +import type { ComponentStory } from '../../stories'; +import { MessageContainer } from './Container'; export default { - category: "Messaging/Message/Container", + category: 'Messaging/Message/Container', component: MessageContainer, stories: [ - { title: "Default" }, + { title: 'Default' }, { - title: "Tail", + title: 'Tail', props: { tail: true, }, }, { - title: "Edited Message", + title: 'Edited Message', props: { - children: "hello this is an edit", - edited: +new Date("Thu, 30 Dec 2022 12:33:35 GMT"), + children: 'hello this is an edit', + edited: +new Date('Thu, 30 Dec 2022 12:33:35 GMT'), }, }, { - title: "Edited Tail", + title: 'Edited Tail', props: { tail: true, - children: "hello this is an edit", - edited: +new Date("Thu, 30 Dec 2022 12:33:35 GMT"), + children: 'hello this is an edit', + edited: +new Date('Thu, 30 Dec 2022 12:33:35 GMT'), }, }, { - title: "Coloured Username", + title: 'Coloured Username', props: { - colour: "linear-gradient(30deg, purple, orange)", + colour: 'linear-gradient(30deg, purple, orange)', }, }, ], props: { - children: "I love rolt!!!!!", - timestamp: +new Date("Thu, 29 Dec 2022 12:33:35 GMT"), + children: 'I love rolt!!!!!', + timestamp: +new Date('Thu, 29 Dec 2022 12:33:35 GMT'), avatar: TestImage, - username: "rolt user", - _referenceTime: +new Date("Thu, 29 Dec 2022 13:00:00 GMT"), + username: 'rolt user', + _referenceTime: +new Date('Thu, 29 Dec 2022 13:00:00 GMT'), }, propTypes: { - children: "string", - avatar: "string", - colour: "string", - username: "string", - timestamp: "number", - edited: "number", - header: "component", - tail: "boolean", + children: 'string', + avatar: 'string', + colour: 'string', + username: 'string', + timestamp: 'number', + edited: 'number', + header: 'component', + tail: 'boolean', }, } as ComponentStory< typeof MessageContainer, diff --git a/packages/client/components/ui/components/messaging/message/Container.tsx b/packages/client/components/ui/components/messaging/message/Container.tsx index a3c3d09fd..4301c8f5a 100644 --- a/packages/client/components/ui/components/messaging/message/Container.tsx +++ b/packages/client/components/ui/components/messaging/message/Container.tsx @@ -1,17 +1,18 @@ -import { Component, JSX, Match, Show, Switch } from "solid-js"; -import { styled } from "solid-styled-components"; +import type { Component, JSX } from 'solid-js'; +import { Match, Show, Switch } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { Time } from "../../design/atoms/display/Time"; +import { Time } from '../../design/atoms/display/Time'; import { - Typography, generateTypographyCSS, -} from "../../design/atoms/display/Typography"; + Typography, +} from '../../design/atoms/display/Typography'; import { Column, NonBreakingText, OverflowingText, Row, -} from "../../design/layout"; +} from '../../design/layout'; interface CommonProps { /** @@ -76,7 +77,7 @@ type Props = CommonProps & { /** * Send status of this message */ - sendStatus?: "sending" | "failed"; + sendStatus?: 'sending' | 'failed'; /** * Component to render message context menu @@ -97,25 +98,25 @@ type Props = CommonProps & { /** * Message container layout */ -const Base = styled(Column as Component, "Message")< - CommonProps & Pick<Props, "mentioned" | "highlight" | "sendStatus"> +const Base = styled(Column as Component, 'Message')< + CommonProps & Pick<Props, 'mentioned' | 'highlight' | 'sendStatus'> >` - ${(props) => generateTypographyCSS(props.theme!, "messages")} + ${(props) => generateTypographyCSS(props.theme!, 'messages')} padding: 2px 0; color: ${(props) => - props.sendStatus === "failed" + props.sendStatus === 'failed' ? props.theme!.customColours.error.color : props.theme!.colours.foreground}; background: ${(props) => props.mentioned - ? props.theme!.colours["messaging-message-mentioned-background"] - : "transparent"}; - margin-top: ${(props) => (props.tail ? 0 : "12px")} !important; + ? props.theme!.colours['messaging-message-mentioned-background'] + : 'transparent'}; + margin-top: ${(props) => (props.tail ? 0 : '12px')} !important; border-radius: ${(props) => props.theme!.borderRadius.md}; min-height: 1em; - ${(props) => (props.highlight ? "outline: 2px solid red;" : "")} + ${(props) => (props.highlight ? 'outline: 2px solid red;' : '')} .hidden { display: none; @@ -135,12 +136,12 @@ const Base = styled(Column as Component, "Message")< /** * Left-side information or avatar */ -const Info = styled("div", "Info")<Pick<CommonProps, "tail" | "compact">>` +const Info = styled('div', 'Info')<Pick<CommonProps, 'tail' | 'compact'>>` display: flex; flex-shrink: 0; justify-content: center; padding: ${(props) => (props.tail ? 0 : 2)}px 0; - ${(props) => (props.compact ? "" : "width: 62px;")} + ${(props) => (props.compact ? '' : 'width: 62px;')} `; /** @@ -159,7 +160,7 @@ const Content = styled(Column)` */ const InfoText = styled(Row)` color: var(--unset-fg); - ${(props) => generateTypographyCSS(props.theme!, "small")} + ${(props) => generateTypographyCSS(props.theme!, 'small')} `; /** @@ -186,15 +187,15 @@ export function MessageContainer(props: Props) { use:ripple={{ enable: false }} > {props.header} - <Row gap="none"> + <Row gap='none'> <Info tail={props.tail} compact={props.compact}> <Switch fallback={props.avatar}> {props.infoMatch ?? <Match when={false} children={null} />} <Match when={props.compact}> - <CompactInfo gap="sm" align> - <InfoText gap="sm"> + <CompactInfo gap='sm' align> + <InfoText gap='sm'> <Time - format="time" + format='time' value={props.timestamp} referenceTime={props._referenceTime} /> @@ -204,13 +205,13 @@ export function MessageContainer(props: Props) { </CompactInfo> </Match> <Match when={props.tail}> - <InfoText class={!props.edited ? "hidden" : undefined}> - <Typography variant="small"> + <InfoText class={!props.edited ? 'hidden' : undefined}> + <Typography variant='small'> <Show when={props.edited}>(edited)</Show> <Show when={!props.edited}> <Time value={props.timestamp} - format="time" + format='time' referenceTime={props._referenceTime} /> </Show> @@ -221,15 +222,15 @@ export function MessageContainer(props: Props) { </Info> <Content> <Show when={!props.tail && !props.compact}> - <Row gap="sm" align> + <Row gap='sm' align> <OverflowingText>{props.username}</OverflowingText> <NonBreakingText> - <InfoText gap="sm" align> + <InfoText gap='sm' align> {props.info} <Switch fallback={props.timestamp as string}> <Match when={props.timestamp instanceof Date}> <Time - format="calendar" + format='calendar' value={props.timestamp} referenceTime={props._referenceTime} /> diff --git a/packages/client/components/ui/components/messaging/message/Embed.stories.tsx b/packages/client/components/ui/components/messaging/message/Embed.stories.tsx index 99168db6f..d525c2a0d 100644 --- a/packages/client/components/ui/components/messaging/message/Embed.stories.tsx +++ b/packages/client/components/ui/components/messaging/message/Embed.stories.tsx @@ -1,14 +1,13 @@ -import type { ComponentProps } from "solid-js"; +import type { API } from 'revolt.js'; +import { Client, WebsiteEmbed } from 'revolt.js'; +import { MessageEmbed } from 'revolt.js'; +import type { ComponentProps } from 'solid-js'; -import { API, Client, WebsiteEmbed } from "revolt.js"; -import { MessageEmbed } from "revolt.js"; - -import FitContentDecorator from "../../../decorators/FitContentDecorator"; -import MotherboardIcon from "../../../test-images/icons8-motherboard-48.png"; -import type { ComponentStory } from "../../stories"; - -import { attachments } from "./Attachment.stories"; -import { Embed } from "./Embed"; +import FitContentDecorator from '../../../decorators/FitContentDecorator'; +import MotherboardIcon from '../../../test-images/icons8-motherboard-48.png'; +import type { ComponentStory } from '../../stories'; +import { attachments } from './Attachment.stories'; +import { Embed } from './Embed'; const client = new Client(); @@ -16,7 +15,7 @@ client.configuration = { features: { autumn: { enabled: true, - url: "http://local.revolt.chat:5273", + url: 'http://local.revolt.chat:5273', }, january: { enabled: false, @@ -25,92 +24,92 @@ client.configuration = { } as never; const embeds: { - [key in "text" | "website" | "image" | "video"]: API.Embed; + [key in 'text' | 'website' | 'image' | 'video']: API.Embed; } = { text: { - type: "Text", - title: "My Text Embed", - description: "hello and welcome to my embed", + type: 'Text', + title: 'My Text Embed', + description: 'hello and welcome to my embed', icon_url: MotherboardIcon, - colour: "#ff4655", - url: "https://revolt.chat", + colour: '#ff4655', + url: 'https://revolt.chat', media: { ...attachments.tall_image, - _id: "jeremy-hynes-3qe0f3-i-Pc-unsplash.jpg", + _id: 'jeremy-hynes-3qe0f3-i-Pc-unsplash.jpg', metadata: { - type: "Image", + type: 'Image', width: 360, height: 640, }, }, }, website: { - type: "Website", - site_name: "Motherboard", + type: 'Website', + site_name: 'Motherboard', icon_url: MotherboardIcon, - title: "This Is The Article Of All Time", - description: "This embed has a small preview image on the right...", - original_url: "https://revolt.chat", - url: "https://revolt.chat/posts/eat-drywall", + title: 'This Is The Article Of All Time', + description: 'This embed has a small preview image on the right...', + original_url: 'https://revolt.chat', + url: 'https://revolt.chat/posts/eat-drywall', image: { - url: "http://local.revolt.chat:5273/attachments/maxim-berg-Ac02zYZs22Y-unsplash.jpg", + url: 'http://local.revolt.chat:5273/attachments/maxim-berg-Ac02zYZs22Y-unsplash.jpg', width: 640, height: 427, - size: "Preview", + size: 'Preview', }, }, image: { - type: "Image", - url: "http://local.revolt.chat:5273/attachments/jeremy-hynes-3qe0f3-i-Pc-unsplash.jpg", + type: 'Image', + url: 'http://local.revolt.chat:5273/attachments/jeremy-hynes-3qe0f3-i-Pc-unsplash.jpg', width: 640, height: 1138, - size: "Large", + size: 'Large', }, video: { - type: "Video", - url: "http://local.revolt.chat:5273/attachments/pexels-polina-kovaleva-8035714.mp4", + type: 'Video', + url: 'http://local.revolt.chat:5273/attachments/pexels-polina-kovaleva-8035714.mp4', width: 360, height: 640, }, }; export default { - category: "Messaging/Message/Embed", + category: 'Messaging/Message/Embed', component: Embed, stories: [ { - title: "Text", + title: 'Text', props: { embed: MessageEmbed.from(client, embeds.text), }, }, { - title: "Website", + title: 'Website', props: { embed: MessageEmbed.from(client, embeds.website), }, }, { - title: "Website (Large Preview)", + title: 'Website (Large Preview)', props: { embed: new WebsiteEmbed(client, { ...embeds.website, - description: "This embed has a large image preview attached.", + description: 'This embed has a large image preview attached.', image: { - ...(embeds.website as API.Embed & { type: "Website" }).image!, - size: "Large", + ...(embeds.website as API.Embed & { type: 'Website' }).image!, + size: 'Large', }, }), }, }, { - title: "Website (With Video)", + title: 'Website (With Video)', props: { embed: new WebsiteEmbed(client, { ...embeds.website, - description: "This embed has a video attached.", + description: 'This embed has a video attached.', video: { - url: "http://local.revolt.chat:5273/attachments/pexels-lachlan-ross-8775687.mp4", + url: 'http://local.revolt.chat:5273/attachments/pexels-lachlan-ross-8775687.mp4', width: 640, height: 360, }, @@ -118,121 +117,121 @@ export default { }, }, { - title: "Image", + title: 'Image', props: { embed: MessageEmbed.from(client, embeds.image), }, }, { - title: "Video", + title: 'Video', props: { embed: MessageEmbed.from(client, embeds.video), }, }, { - title: "GIF (Video)", + title: 'GIF (Video)', props: { embed: new WebsiteEmbed(client, { ...embeds.website, video: { - url: "http://local.revolt.chat:5273/attachments/pexels-lachlan-ross-8775687.mp4", + url: 'http://local.revolt.chat:5273/attachments/pexels-lachlan-ross-8775687.mp4', width: 640, height: 360, }, special: { - type: "GIF", + type: 'GIF', }, }), }, }, { - title: "GIF (Image)", + title: 'GIF (Image)', props: { embed: new WebsiteEmbed(client, { ...embeds.website, special: { - type: "GIF", + type: 'GIF', }, }), }, }, { - title: "YouTube", + title: 'YouTube', props: { embed: MessageEmbed.from(client, { - type: "Website", + type: 'Website', special: { - type: "YouTube", - id: "LXb3EKWsInQ", + type: 'YouTube', + id: 'LXb3EKWsInQ', }, }), }, skipRegressionTests: true, }, { - title: "Twitch", + title: 'Twitch', props: { embed: MessageEmbed.from(client, { - type: "Website", + type: 'Website', special: { - type: "Twitch", - content_type: "Channel", - id: "insertpaulhere", + type: 'Twitch', + content_type: 'Channel', + id: 'insertpaulhere', }, }), }, skipRegressionTests: true, }, { - title: "Lightspeed", + title: 'Lightspeed', props: { embed: MessageEmbed.from(client, { - type: "Website", + type: 'Website', special: { - type: "Lightspeed", - content_type: "Channel", - id: "insert", + type: 'Lightspeed', + content_type: 'Channel', + id: 'insert', }, }), }, skipRegressionTests: true, }, { - title: "Spotify", + title: 'Spotify', props: { embed: MessageEmbed.from(client, { - type: "Website", + type: 'Website', special: { - type: "Spotify", - content_type: "track", - id: "4NsPgRYUdHu2Q5JRNgXYU5", + type: 'Spotify', + content_type: 'track', + id: '4NsPgRYUdHu2Q5JRNgXYU5', }, }), }, skipRegressionTests: true, }, { - title: "Soundcloud", + title: 'Soundcloud', props: { embed: MessageEmbed.from(client, { - type: "Website", - url: "https://soundcloud.com/minecraftwizards/18-c418-sweden", + type: 'Website', + url: 'https://soundcloud.com/minecraftwizards/18-c418-sweden', special: { - type: "Soundcloud", + type: 'Soundcloud', }, }), }, skipRegressionTests: true, }, { - title: "Bandcamp", + title: 'Bandcamp', props: { embed: MessageEmbed.from(client, { - type: "Website", + type: 'Website', special: { - type: "Bandcamp", - content_type: "Album", - id: "1349219244", + type: 'Bandcamp', + content_type: 'Album', + id: '1349219244', }, }), }, diff --git a/packages/client/components/ui/components/messaging/message/Embed.tsx b/packages/client/components/ui/components/messaging/message/Embed.tsx index f68e372e5..4a2f7201d 100644 --- a/packages/client/components/ui/components/messaging/message/Embed.tsx +++ b/packages/client/components/ui/components/messaging/message/Embed.tsx @@ -1,16 +1,14 @@ -import { Match, Switch } from "solid-js"; - -import { +import type { ImageEmbed, MessageEmbed, TextEmbed as TextEmbedClass, VideoEmbed, WebsiteEmbed, -} from "revolt.js"; - -import { SizedContent } from "../../design/layout/SizedContent"; +} from 'revolt.js'; +import { Match, Switch } from 'solid-js'; -import { TextEmbed } from "./TextEmbed"; +import { SizedContent } from '../../design/layout/SizedContent'; +import { TextEmbed } from './TextEmbed'; /** * Render a given embed @@ -20,14 +18,14 @@ export function Embed(props: { embed: MessageEmbed }) { * Whether the embed is a GIF */ const isGIF = () => - props.embed.type === "Website" && - (props.embed as WebsiteEmbed).specialContent?.type === "GIF"; + props.embed.type === 'Website' && + (props.embed as WebsiteEmbed).specialContent?.type === 'GIF'; /** * Whether there is a video */ const video = () => - (props.embed.type === "Video" + (props.embed.type === 'Video' ? (props.embed as VideoEmbed) : isGIF() && (props.embed as WebsiteEmbed).video) || undefined; @@ -35,7 +33,7 @@ export function Embed(props: { embed: MessageEmbed }) { * Whether there is a image */ const image = () => - (props.embed.type === "Image" + (props.embed.type === 'Image' ? (props.embed as ImageEmbed) : isGIF() && (props.embed as WebsiteEmbed).image) || undefined; @@ -48,7 +46,7 @@ export function Embed(props: { embed: MessageEmbed }) { muted={isGIF()} autoplay={isGIF()} controls={!isGIF()} - preload="metadata" + preload='metadata' // bypass proxy for known GIF providers src={isGIF() ? video()!.url : video()!.proxiedURL} /> @@ -59,16 +57,16 @@ export function Embed(props: { embed: MessageEmbed }) { <img // bypass proxy for known GIF providers src={isGIF() ? image()!.url : image()!.proxiedURL} - loading="lazy" + loading='lazy' /> </SizedContent> </Match> <Match - when={props.embed.type === "Website" || props.embed.type === "Text"} + when={props.embed.type === 'Website' || props.embed.type === 'Text'} > <TextEmbed embed={props.embed as WebsiteEmbed | TextEmbedClass} /> </Match> - <Match when={props.embed.type === "None"}> </Match> + <Match when={props.embed.type === 'None'}> </Match> </Switch> ); } diff --git a/packages/client/components/ui/components/messaging/message/FileInfo.tsx b/packages/client/components/ui/components/messaging/message/FileInfo.tsx index 24e2f9067..5f1f55789 100644 --- a/packages/client/components/ui/components/messaging/message/FileInfo.tsx +++ b/packages/client/components/ui/components/messaging/message/FileInfo.tsx @@ -1,3 +1,4 @@ +import type { File, MessageEmbed } from 'revolt.js'; import { BiRegularDownload, BiRegularHeadphone, @@ -6,16 +7,13 @@ import { BiSolidFileTxt, BiSolidImage, BiSolidVideo, -} from "solid-icons/bi"; -import { Match, Show, Switch } from "solid-js"; -import { styled } from "solid-styled-components"; +} from 'solid-icons/bi'; +import { Match, Show, Switch } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { File, MessageEmbed } from "revolt.js"; - -import { Typography } from "../../design/atoms/display/Typography"; -import { Column, Row } from "../../design/layout"; - -import { humanFileSize } from "./Attachment"; +import { Typography } from '../../design/atoms/display/Typography'; +import { Column, Row } from '../../design/layout'; +import { humanFileSize } from './Attachment'; interface Props { /** @@ -33,13 +31,13 @@ interface Props { * Base container */ const Base = styled(Row)` - color: ${(props) => props.theme!.colours["foreground"]}; + color: ${(props) => props.theme!.colours['foreground']}; `; /** * Link action */ -const Action = styled("a")` +const Action = styled('a')` color: var(--unset-fg); display: grid; @@ -56,38 +54,38 @@ export function FileInfo(props: Props) { <Switch fallback={<BiSolidFile size={24} />}> <Match when={ - props.file?.metadata.type === "Image" || - props.embed?.type === "Image" + props.file?.metadata.type === 'Image' || + props.embed?.type === 'Image' } > <BiSolidImage size={24} /> </Match> <Match when={ - props.file?.metadata.type === "Video" || - props.embed?.type === "Video" + props.file?.metadata.type === 'Video' || + props.embed?.type === 'Video' } > <BiSolidVideo size={24} /> </Match> - <Match when={props.file?.metadata.type === "Audio"}> + <Match when={props.file?.metadata.type === 'Audio'}> <BiRegularHeadphone size={24} /> </Match> - <Match when={props.file?.metadata.type === "Text"}> + <Match when={props.file?.metadata.type === 'Text'}> <BiSolidFileTxt size={24} /> </Match> </Switch> </Action> - <Column grow gap="none"> + <Column grow gap='none'> <span>{props.file?.filename}</span> <Show when={props.file?.size}> - <Typography variant="small"> + <Typography variant='small'> {humanFileSize(props.file!.size!)} </Typography> </Show> </Column> <Show when={props.file?.url}> - <Action href={props.file?.url} target="_blank" rel="noreferrer"> + <Action href={props.file?.url} target='_blank' rel='noreferrer'> <BiRegularLinkExternal size={24} /> </Action> </Show> diff --git a/packages/client/components/ui/components/messaging/message/MessageReply.tsx b/packages/client/components/ui/components/messaging/message/MessageReply.tsx index 85af42435..f10b71806 100644 --- a/packages/client/components/ui/components/messaging/message/MessageReply.tsx +++ b/packages/client/components/ui/components/messaging/message/MessageReply.tsx @@ -1,24 +1,22 @@ -import { BiSolidFile } from "solid-icons/bi"; -import { Match, Switch } from "solid-js"; -import { Show } from "solid-js"; -import { styled as styledL } from "solid-styled-components"; - -import type { Message } from "revolt.js"; -import { styled } from "styled-system/jsx"; - -import { useTranslation } from "@revolt/i18n"; -import { TextWithEmoji } from "@revolt/markdown"; +import { useTranslation } from '@revolt/i18n'; +import { TextWithEmoji } from '@revolt/markdown'; +import type { Message } from 'revolt.js'; +import { BiSolidFile } from 'solid-icons/bi'; +import { Match, Switch } from 'solid-js'; +import { Show } from 'solid-js'; +import { styled as styledL } from 'solid-styled-components'; +import { styled } from 'styled-system/jsx'; import { Avatar, ColouredText, NonBreakingText, OverflowingText, -} from "../../design"; +} from '../../design'; import { - Typography, generateTypographyCSS, -} from "../../design/atoms/display/Typography"; + Typography, +} from '../../design/atoms/display/Typography'; interface Props { /** @@ -37,17 +35,17 @@ interface Props { noDecorations?: boolean; } -export const Base = styledL("div", "Reply")<Pick<Props, "noDecorations">>` +export const Base = styledL('div', 'Reply')<Pick<Props, 'noDecorations'>>` min-width: 0; flex-grow: 1; display: flex; user-select: none; align-items: center; - margin-inline-end: ${(props) => (props.noDecorations ? "0" : "12px")}; - margin-inline-start: ${(props) => (props.noDecorations ? "0" : "30px")}; + margin-inline-end: ${(props) => (props.noDecorations ? '0' : '12px')}; + margin-inline-start: ${(props) => (props.noDecorations ? '0' : '30px')}; - ${(props) => generateTypographyCSS(props.theme!, "reply")} + ${(props) => generateTypographyCSS(props.theme!, 'reply')} gap: ${(props) => props.theme!.gap.md}; @@ -56,7 +54,7 @@ export const Base = styledL("div", "Reply")<Pick<Props, "noDecorations">>` } &::before { - display: ${(props) => (props.noDecorations ? "none" : "block")}; + display: ${(props) => (props.noDecorations ? 'none' : 'block')}; content: ""; width: 22px; @@ -88,12 +86,12 @@ const InfoText = styledL.a` /** * Link styling */ -const Link = styled("a", { +const Link = styled('a', { base: { minWidth: 0, - display: "flex", - alignItems: "center", - gap: "var(--gap-md)", + display: 'flex', + alignItems: 'center', + gap: 'var(--gap-md)', }, }); @@ -106,20 +104,20 @@ export function MessageReply(props: Props) { return ( <Base noDecorations={props.noDecorations}> <Switch - fallback={<InfoText>{t("app.main.channel.misc.not_loaded")}</InfoText>} + fallback={<InfoText>{t('app.main.channel.misc.not_loaded')}</InfoText>} > - <Match when={props.message?.author?.relationship === "Blocked"}> - {t("app.main.channel.misc.blocked_user")} + <Match when={props.message?.author?.relationship === 'Blocked'}> + {t('app.main.channel.misc.blocked_user')} </Match> <Match when={props.message}> <Avatar src={props.message!.avatarURL} size={14} /> <NonBreakingText> <ColouredText colour={props.message!.roleColour!} - clip={props.message!.roleColour?.includes("gradient")} + clip={props.message!.roleColour?.includes('gradient')} > - <Typography variant="username"> - {props.mention && "@"} + <Typography variant='username'> + {props.mention && '@'} {props.message!.username} </Typography> </ColouredText> @@ -129,8 +127,8 @@ export function MessageReply(props: Props) { <Attachments> <BiSolidFile size={16} /> {props.message!.attachments!.length > 1 - ? t("app.main.channel.misc.sent_multiple_files") - : t("app.main.channel.misc.sent_file")} + ? t('app.main.channel.misc.sent_multiple_files') + : t('app.main.channel.misc.sent_file')} </Attachments> </Show> <Show when={props.message!.content}> diff --git a/packages/client/components/ui/components/messaging/message/Reactions.tsx b/packages/client/components/ui/components/messaging/message/Reactions.tsx index 97b0299e4..bf118746d 100644 --- a/packages/client/components/ui/components/messaging/message/Reactions.tsx +++ b/packages/client/components/ui/components/messaging/message/Reactions.tsx @@ -1,14 +1,12 @@ -import { For, Show, createMemo } from "solid-js"; -import { styled } from "solid-styled-components"; +import { useTranslation } from '@revolt/i18n'; +import { Emoji } from '@revolt/markdown'; +import { useUsers } from '@revolt/markdown/users'; +import type { API } from 'revolt.js'; +import { createMemo, For, Show } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { API } from "revolt.js"; - -import { useTranslation } from "@revolt/i18n"; -import { Emoji } from "@revolt/markdown"; -import { useUsers } from "@revolt/markdown/users"; - -import { OverflowingText, Row, Typography } from "../../design"; -import { Tooltip } from "../../floating"; +import { OverflowingText, Row, Typography } from '../../design'; +import { Tooltip } from '../../floating'; interface Props { /** @@ -19,7 +17,7 @@ interface Props { /** * Interactions */ - interactions: API.Message["interactions"]; + interactions: API.Message['interactions']; /** * ID of current user @@ -110,7 +108,7 @@ export function Reactions(props: Props) { /> )} </For> - <AddReaction class="add">{"+"}</AddReaction> + <AddReaction class='add'>{'+'}</AddReaction> </List> </Show> ); @@ -152,23 +150,23 @@ function Reaction(props: { const usernames = list .slice(0, 2) .map((user) => user?.username) - .join(", "); + .join(', '); if (unknown) { if (usernames) { - return t("app.main.channel.reactions.others_reacted", { + return t('app.main.channel.reactions.others_reacted', { userlist: usernames, count: unknown.toString(), }); } else if (unknown === 1) { - return t("app.main.channel.reactions.single_reacted"); + return t('app.main.channel.reactions.single_reacted'); } else { - return t("app.main.channel.reactions.unknown_reacted", { + return t('app.main.channel.reactions.unknown_reacted', { count: unknown.toString(), }); } } else { - return t("app.main.channel.reactions.people_reacted", { + return t('app.main.channel.reactions.people_reacted', { people: usernames, }); } @@ -176,13 +174,13 @@ function Reaction(props: { return ( <Tooltip - placement="top" + placement='top' content={() => ( - <Row align gap="lg"> - <span style={{ "--emoji-size": "3em" }}> + <Row align gap='lg'> + <span style={{ '--emoji-size': '3em' }}> <Emoji emoji={props.reaction} /> </span> - <Typography variant="messages"> + <Typography variant='messages'> <PeopleList>{peopleList()}</PeopleList> </Typography> </Row> @@ -199,7 +197,7 @@ function Reaction(props: { /** * Reaction styling */ -const ReactionBase = styled("div", "Reaction")<{ active?: boolean }>` +const ReactionBase = styled('div', 'Reaction')<{ active?: boolean }>` display: flex; flex-direction: row; gap: ${(props) => props.theme!.gap.md}; @@ -213,19 +211,19 @@ const ReactionBase = styled("div", "Reaction")<{ active?: boolean }>` color: ${(props) => props.theme!.colours[ `messaging-component-reaction${ - props.active ? "-selected" : "" + props.active ? '-selected' : '' }-foreground` ]}; background: ${(props) => props.theme!.colours[ `messaging-component-reaction${ - props.active ? "-selected" : "" + props.active ? '-selected' : '' }-background` ]}; transition: ${(props) => props.theme!.transitions.fast} all; font-weight: 600; - font-feature-settings: "tnum" 1; + font-feature-settings: 'tnum' 1; img { width: 1.2em; @@ -251,7 +249,7 @@ const AddReaction = styled(ReactionBase)` font-size: var(--emoji-size); background: ${(props) => - props.theme!.colours["messaging-component-reaction-background"]}; + props.theme!.colours['messaging-component-reaction-background']}; height: 33px; aspect-ratio: 1/1; @@ -265,7 +263,7 @@ const Divider = styled.div` width: 1px; height: 14px; background: ${(props) => - props.theme!.colours["messaging-component-reaction-foreground"]}; + props.theme!.colours['messaging-component-reaction-foreground']}; `; /** diff --git a/packages/client/components/ui/components/messaging/message/SpecialEmbed.tsx b/packages/client/components/ui/components/messaging/message/SpecialEmbed.tsx index d783bd634..7a1fde45c 100644 --- a/packages/client/components/ui/components/messaging/message/SpecialEmbed.tsx +++ b/packages/client/components/ui/components/messaging/message/SpecialEmbed.tsx @@ -1,6 +1,6 @@ -import type { WebsiteEmbed } from "revolt.js"; +import type { WebsiteEmbed } from 'revolt.js'; -import { SizedContent } from "../../design"; +import { SizedContent } from '../../design'; /** * Special Embed @@ -15,28 +15,28 @@ export function SpecialEmbed(props: { embed: WebsiteEmbed }) { let width = 0, height = 0; switch (special.type) { - case "YouTube": { + case 'YouTube': { width = props.embed.video?.width ?? 1280; height = props.embed.video?.height ?? 720; break; } - case "Twitch": { + case 'Twitch': { (width = 1280), (height = 720); break; } - case "Lightspeed": { + case 'Lightspeed': { (width = 1280), (height = 720); break; } - case "Spotify": { + case 'Spotify': { (width = 420), (height = 355); break; } - case "Soundcloud": { + case 'Soundcloud': { (width = 480), (height = 460); break; } - case "Bandcamp": { + case 'Bandcamp': { width = props.embed.video?.width ?? 1280; height = props.embed.video?.height ?? 720; break; @@ -49,13 +49,13 @@ export function SpecialEmbed(props: { embed: WebsiteEmbed }) { return ( <SizedContent width={getSize()?.width} height={getSize()?.height}> <iframe - loading="lazy" + loading='lazy' // @ts-expect-error attributes are not recognised - scrolling="no" + scrolling='no' allowFullScreen allowTransparency frameBorder={0} - style={{ width: getSize()?.width + "px" }} + style={{ width: getSize()?.width + 'px' }} src={props.embed.embedURL} /> </SizedContent> diff --git a/packages/client/components/ui/components/messaging/message/SystemMessage.tsx b/packages/client/components/ui/components/messaging/message/SystemMessage.tsx index 2015bbb91..b57f0026f 100644 --- a/packages/client/components/ui/components/messaging/message/SystemMessage.tsx +++ b/packages/client/components/ui/components/messaging/message/SystemMessage.tsx @@ -1,7 +1,4 @@ -import { JSX, Match, Switch } from "solid-js"; -import { styled } from "solid-styled-components"; - -import { +import type { ChannelEditSystemMessage, ChannelOwnershipChangeSystemMessage, ChannelRenamedSystemMessage, @@ -10,9 +7,12 @@ import { User, UserModeratedSystemMessage, UserSystemMessage, -} from "revolt.js"; +} from 'revolt.js'; +import type { JSX } from 'solid-js'; +import { Match, Switch } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { Typography } from "../../design"; +import { Typography } from '../../design'; interface Props { /** @@ -23,7 +23,7 @@ interface Props { /** * Menu generator */ - menuGenerator: (user?: User) => JSX.Directives["floating"]; + menuGenerator: (user?: User) => JSX.Directives['floating']; /** * Whether this is rendered within a server @@ -34,7 +34,7 @@ interface Props { /** * Render the actual user */ -function Usr(props: { user?: User } & Pick<Props, "menuGenerator">) { +function Usr(props: { user?: User } & Pick<Props, 'menuGenerator'>) { return ( <Username use:floating={props.menuGenerator(props.user)}> {props.user?.username} @@ -49,97 +49,97 @@ export function SystemMessage(props: Props) { // TODO: i18n with components return ( <Base> - <Typography variant="system-message"> + <Typography variant='system-message'> <Switch fallback={props.systemMessage.type}> - <Match when={props.systemMessage.type === "user_added"}> + <Match when={props.systemMessage.type === 'user_added'}> <Usr menuGenerator={props.menuGenerator} user={(props.systemMessage as UserModeratedSystemMessage).user} - />{" "} - has been added by{" "} + />{' '} + has been added by{' '} <Usr menuGenerator={props.menuGenerator} user={(props.systemMessage as UserModeratedSystemMessage).by} /> </Match> <Match - when={props.systemMessage.type === "user_left" && !props.isServer} + when={props.systemMessage.type === 'user_left' && !props.isServer} > <Usr menuGenerator={props.menuGenerator} user={(props.systemMessage as UserSystemMessage).user} - />{" "} + />{' '} left the group </Match> - <Match when={props.systemMessage.type === "user_remove"}> + <Match when={props.systemMessage.type === 'user_remove'}> <Usr menuGenerator={props.menuGenerator} user={(props.systemMessage as UserModeratedSystemMessage).user} - />{" "} - has been removed by{" "} + />{' '} + has been removed by{' '} <Usr menuGenerator={props.menuGenerator} user={(props.systemMessage as UserModeratedSystemMessage).by} /> </Match> - <Match when={props.systemMessage.type === "user_kicked"}> + <Match when={props.systemMessage.type === 'user_kicked'}> <Usr menuGenerator={props.menuGenerator} user={(props.systemMessage as UserSystemMessage).user} - />{" "} + />{' '} has been kicked from the server </Match> - <Match when={props.systemMessage.type === "user_banned"}> + <Match when={props.systemMessage.type === 'user_banned'}> <Usr menuGenerator={props.menuGenerator} user={(props.systemMessage as UserSystemMessage).user} - />{" "} + />{' '} has been banned from the server </Match> - <Match when={props.systemMessage.type === "user_joined"}> + <Match when={props.systemMessage.type === 'user_joined'}> <Usr menuGenerator={props.menuGenerator} user={(props.systemMessage as UserSystemMessage).user} - />{" "} + />{' '} joined the server </Match> <Match - when={props.systemMessage.type === "user_left" && props.isServer} + when={props.systemMessage.type === 'user_left' && props.isServer} > <Usr menuGenerator={props.menuGenerator} user={(props.systemMessage as UserSystemMessage).user} - />{" "} + />{' '} left the server </Match> - <Match when={props.systemMessage.type === "channel_renamed"}> + <Match when={props.systemMessage.type === 'channel_renamed'}> <Usr menuGenerator={props.menuGenerator} user={(props.systemMessage as ChannelRenamedSystemMessage).by} - />{" "} - updated the group name to{" "} + />{' '} + updated the group name to{' '} <Username> {(props.systemMessage as ChannelRenamedSystemMessage).name} </Username> </Match> <Match - when={props.systemMessage.type === "channel_description_changed"} + when={props.systemMessage.type === 'channel_description_changed'} > <Usr menuGenerator={props.menuGenerator} user={(props.systemMessage as ChannelEditSystemMessage).by} - />{" "} + />{' '} updated the group description </Match> - <Match when={props.systemMessage.type === "channel_icon_changed"}> + <Match when={props.systemMessage.type === 'channel_icon_changed'}> <Usr menuGenerator={props.menuGenerator} user={(props.systemMessage as ChannelEditSystemMessage).by} - />{" "} + />{' '} updated the group icon </Match> <Match - when={props.systemMessage.type === "channel_ownership_changed"} + when={props.systemMessage.type === 'channel_ownership_changed'} > <Usr menuGenerator={props.menuGenerator} @@ -147,8 +147,8 @@ export function SystemMessage(props: Props) { (props.systemMessage as ChannelOwnershipChangeSystemMessage) .from } - />{" "} - transferred group ownership to{" "} + />{' '} + transferred group ownership to{' '} <Usr menuGenerator={props.menuGenerator} user={ @@ -156,7 +156,7 @@ export function SystemMessage(props: Props) { } /> </Match> - <Match when={props.systemMessage.type === "text"}> + <Match when={props.systemMessage.type === 'text'}> {(props.systemMessage as TextSystemMessage).content} </Match> </Switch> @@ -165,7 +165,7 @@ export function SystemMessage(props: Props) { ); } -const Base = styled("div", "SystemMessage")` +const Base = styled('div', 'SystemMessage')` display: flex; min-height: 20px; align-items: center; @@ -173,5 +173,5 @@ const Base = styled("div", "SystemMessage")` `; const Username = styled.span` - color: ${(props) => props.theme!.colours["foreground"]}; + color: ${(props) => props.theme!.colours['foreground']}; `; diff --git a/packages/client/components/ui/components/messaging/message/SystemMessageIcon.tsx b/packages/client/components/ui/components/messaging/message/SystemMessageIcon.tsx index 269d53931..34dbac491 100644 --- a/packages/client/components/ui/components/messaging/message/SystemMessageIcon.tsx +++ b/packages/client/components/ui/components/messaging/message/SystemMessageIcon.tsx @@ -1,3 +1,4 @@ +import type { SystemMessage } from 'revolt.js'; import { BiRegularAlignLeft, BiRegularLeftArrowAlt, @@ -11,15 +12,13 @@ import { BiSolidPurchaseTag, BiSolidShieldX, BiSolidXCircle, -} from "solid-icons/bi"; -import { Match, Switch } from "solid-js"; -import { styled } from "solid-styled-components"; +} from 'solid-icons/bi'; +import { Match, Switch } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { SystemMessage } from "revolt.js"; - -import { Time } from "../../design"; -import { formatTime } from "../../design/atoms/display/Time"; -import { Tooltip } from "../../floating"; +import { Time } from '../../design'; +import { formatTime } from '../../design/atoms/display/Time'; +import { Tooltip } from '../../floating'; /** * System Message Icon @@ -32,49 +31,49 @@ export function SystemMessageIcon(props: { return ( <Base type={props.systemMessage.type}> <Tooltip - content={() => <Time format="relative" value={props.createdAt} />} - aria={formatTime({ format: "relative", value: props.createdAt })} - placement="top" + content={() => <Time format='relative' value={props.createdAt} />} + aria={formatTime({ format: 'relative', value: props.createdAt })} + placement='top' > <Switch fallback={<BiSolidInfoCircle size={16} />}> - <Match when={props.systemMessage.type === "user_added"}> + <Match when={props.systemMessage.type === 'user_added'}> <BiRegularPlus size={16} /> </Match> <Match - when={props.systemMessage.type === "user_left" && !props.isServer} + when={props.systemMessage.type === 'user_left' && !props.isServer} > <BiRegularMinus size={16} /> </Match> - <Match when={props.systemMessage.type === "user_remove"}> + <Match when={props.systemMessage.type === 'user_remove'}> <BiRegularX size={16} /> </Match> - <Match when={props.systemMessage.type === "user_kicked"}> + <Match when={props.systemMessage.type === 'user_kicked'}> <BiSolidXCircle size={16} /> </Match> - <Match when={props.systemMessage.type === "user_banned"}> + <Match when={props.systemMessage.type === 'user_banned'}> <BiSolidShieldX size={16} /> </Match> - <Match when={props.systemMessage.type === "user_joined"}> + <Match when={props.systemMessage.type === 'user_joined'}> <BiRegularRightArrowAlt size={16} /> </Match> <Match - when={props.systemMessage.type === "user_left" && props.isServer} + when={props.systemMessage.type === 'user_left' && props.isServer} > <BiRegularLeftArrowAlt size={16} /> </Match> - <Match when={props.systemMessage.type === "channel_renamed"}> + <Match when={props.systemMessage.type === 'channel_renamed'}> <BiSolidPurchaseTag size={16} /> </Match> <Match - when={props.systemMessage.type === "channel_description_changed"} + when={props.systemMessage.type === 'channel_description_changed'} > <BiRegularAlignLeft size={16} /> </Match> - <Match when={props.systemMessage.type === "channel_icon_changed"}> + <Match when={props.systemMessage.type === 'channel_icon_changed'}> <BiSolidImage size={16} /> </Match> <Match - when={props.systemMessage.type === "channel_ownership_changed"} + when={props.systemMessage.type === 'channel_ownership_changed'} > <BiSolidKey size={16} /> </Match> @@ -84,23 +83,23 @@ export function SystemMessageIcon(props: { ); } -const success = new Set<SystemMessage["type"]>(["user_added", "user_joined"]); +const success = new Set<SystemMessage['type']>(['user_added', 'user_joined']); -const warning = new Set<SystemMessage["type"]>(["channel_ownership_changed"]); +const warning = new Set<SystemMessage['type']>(['channel_ownership_changed']); -const danger = new Set<SystemMessage["type"]>([ - "user_left", - "user_kicked", - "user_banned", +const danger = new Set<SystemMessage['type']>([ + 'user_left', + 'user_kicked', + 'user_banned', ]); -const Base = styled.div<{ type: SystemMessage["type"] }>` +const Base = styled.div<{ type: SystemMessage['type'] }>` width: 62px; display: grid; place-items: center; color: ${ - "var(--unset-fg)" + 'var(--unset-fg)' // (props) => // props.theme!.colours[ // danger.has(props.type) diff --git a/packages/client/components/ui/components/messaging/message/TextEmbed.tsx b/packages/client/components/ui/components/messaging/message/TextEmbed.tsx index 919a9c14f..75cb55be0 100644 --- a/packages/client/components/ui/components/messaging/message/TextEmbed.tsx +++ b/packages/client/components/ui/components/messaging/message/TextEmbed.tsx @@ -1,21 +1,18 @@ -import { Match, Show, Switch } from "solid-js"; -import { styled } from "solid-styled-components"; - -import { TextEmbed as TextEmbedClass, WebsiteEmbed } from "revolt.js"; - -import { Markdown } from "@revolt/markdown"; +import { Markdown } from '@revolt/markdown'; +import type { TextEmbed as TextEmbedClass, WebsiteEmbed } from 'revolt.js'; +import { Match, Show, Switch } from 'solid-js'; +import { styled } from 'solid-styled-components'; import { Column, OverflowingText, SizedContent, Typography, -} from "../../design"; - -import { Attachment } from "./Attachment"; -import { SpecialEmbed } from "./SpecialEmbed"; +} from '../../design'; +import { Attachment } from './Attachment'; +import { SpecialEmbed } from './SpecialEmbed'; -const Base = styled("div", "TextEmbed")<{ borderColour?: string }>` +const Base = styled('div', 'TextEmbed')<{ borderColour?: string }>` display: flex; max-width: 480px; /* TODO: theme this */ flex-direction: row; @@ -25,37 +22,37 @@ const Base = styled("div", "TextEmbed")<{ borderColour?: string }>` border-radius: ${(props) => props.theme!.borderRadius.md}; color: ${(props) => - props.theme!.colours["messaging-component-text-embed-foreground"]}; + props.theme!.colours['messaging-component-text-embed-foreground']}; background: ${(props) => - props.theme!.colours["messaging-component-text-embed-background"]}; + props.theme!.colours['messaging-component-text-embed-background']}; border-inline-start: var(--gap-sm) solid ${(props) => props.borderColour ?? - props.theme!.colours["messaging-component-text-embed-foreground"]}; + props.theme!.colours['messaging-component-text-embed-foreground']}; `; -const SiteInformation = styled("div", "SiteInfo")` +const SiteInformation = styled('div', 'SiteInfo')` display: flex; flex-direction: row; gap: ${(props) => props.theme!.gap.md}; color: var(--unset-fg); `; -const Favicon = styled("img", "Favicon")` +const Favicon = styled('img', 'Favicon')` width: 14px; height: 14px; flex-shrink: 0; `; -const PreviewImage = styled("img", "PreviewImage")` +const PreviewImage = styled('img', 'PreviewImage')` max-width: 120px; max-height: 120px; border-radius: ${(props) => props.theme!.borderRadius.md}; `; // TODO: move all font sizes into typography -const Title = styled("div", "Title")` +const Title = styled('div', 'Title')` font-size: 16px; `; @@ -63,7 +60,7 @@ const Content = styled(Column)` min-width: 0; `; -const Description = styled("div", "Description")` +const Description = styled('div', 'Description')` font-size: 12px; overflow: hidden; word-wrap: break-word; @@ -75,24 +72,24 @@ const Description = styled("div", "Description")` export function TextEmbed(props: { embed: TextEmbedClass | WebsiteEmbed }) { return ( <Base borderColour={props.embed.colour!}> - <Content gap="md" grow> + <Content gap='md' grow> <Show when={ - props.embed.type === "Website" && + props.embed.type === 'Website' && (props.embed as WebsiteEmbed).siteName } > <SiteInformation> <Show when={props.embed.iconUrl}> <Favicon - loading="lazy" + loading='lazy' draggable={false} src={props.embed.proxiedIconURL} - onError={(e) => (e.currentTarget.style.display = "none")} + onError={(e) => (e.currentTarget.style.display = 'none')} /> </Show> <OverflowingText> - <Typography variant="small"> + <Typography variant='small'> {(props.embed as WebsiteEmbed).siteName} </Typography> </OverflowingText> @@ -110,7 +107,7 @@ export function TextEmbed(props: { embed: TextEmbedClass | WebsiteEmbed }) { <Show when={props.embed.description}> <Description> <Switch fallback={props.embed.description}> - <Match when={props.embed.type === "Text"}> + <Match when={props.embed.type === 'Text'}> <Markdown content={props.embed.description!} /> </Match> </Switch> @@ -119,18 +116,18 @@ export function TextEmbed(props: { embed: TextEmbedClass | WebsiteEmbed }) { <Show when={ - props.embed.type === "Text" && (props.embed as TextEmbedClass).media + props.embed.type === 'Text' && (props.embed as TextEmbedClass).media } > <Attachment file={(props.embed as TextEmbedClass).media!} /> </Show> - <Show when={props.embed.type === "Website"}> + <Show when={props.embed.type === 'Website'}> <Switch> <Match when={ (props.embed as WebsiteEmbed).specialContent?.type && - (props.embed as WebsiteEmbed).specialContent?.type !== "None" + (props.embed as WebsiteEmbed).specialContent?.type !== 'None' } > <SpecialEmbed embed={props.embed as WebsiteEmbed} /> @@ -142,19 +139,19 @@ export function TextEmbed(props: { embed: TextEmbedClass | WebsiteEmbed }) { > <video controls - preload="metadata" + preload='metadata' src={(props.embed as WebsiteEmbed).video!.proxiedURL} /> </SizedContent> </Match> - <Match when={(props.embed as WebsiteEmbed).image?.size === "Large"}> + <Match when={(props.embed as WebsiteEmbed).image?.size === 'Large'}> <SizedContent width={(props.embed as WebsiteEmbed).image!.width} height={(props.embed as WebsiteEmbed).image!.height} > <img src={(props.embed as WebsiteEmbed).image!.proxiedURL} - loading="lazy" + loading='lazy' /> </SizedContent> </Match> @@ -164,14 +161,14 @@ export function TextEmbed(props: { embed: TextEmbedClass | WebsiteEmbed }) { <Show when={ - props.embed.type === "Website" && - (props.embed as WebsiteEmbed).image?.size === "Preview" && + props.embed.type === 'Website' && + (props.embed as WebsiteEmbed).image?.size === 'Preview' && !(props.embed as WebsiteEmbed).video } > <PreviewImage src={(props.embed as WebsiteEmbed).image!.proxiedURL} - loading="lazy" + loading='lazy' /> </Show> </Base> diff --git a/packages/client/components/ui/components/messaging/message/TextFile.tsx b/packages/client/components/ui/components/messaging/message/TextFile.tsx index 603ccc31e..0652a1d39 100644 --- a/packages/client/components/ui/components/messaging/message/TextFile.tsx +++ b/packages/client/components/ui/components/messaging/message/TextFile.tsx @@ -1,15 +1,12 @@ -import { Match, Switch, createSignal, onMount } from "solid-js"; -import { styled } from "solid-styled-components"; +import { useTranslation } from '@revolt/i18n'; +import type { File } from 'revolt.js'; +import { createSignal, Match, onMount, Switch } from 'solid-js'; +import { styled } from 'solid-styled-components'; -import { File } from "revolt.js"; - -import { useTranslation } from "@revolt/i18n"; - -import { Preloader } from "../../design/atoms/indicators"; -import { Button } from "../../design/atoms/inputs"; -import { Row } from "../../design/layout"; - -import { humanFileSize } from "./Attachment"; +import { Preloader } from '../../design/atoms/indicators'; +import { Button } from '../../design/atoms/inputs'; +import { Row } from '../../design/layout'; +import { humanFileSize } from './Attachment'; interface Props { /** @@ -21,12 +18,12 @@ interface Props { /** * Text file container */ -const Container = styled("pre")` +const Container = styled('pre')` display: flex; overflow: auto; scrollbar-width: thin; flex-direction: column; - color: ${(props) => props.theme!.colours["foreground"]}; + color: ${(props) => props.theme!.colours['foreground']}; `; /** @@ -62,7 +59,7 @@ export function TextFile(props: Props) { return ( <Container> - <Switch fallback={<Preloader type="ring" grow />}> + <Switch fallback={<Preloader type='ring' grow />}> <Match when={ !loading() && @@ -71,13 +68,13 @@ export function TextFile(props: Props) { } > <Row align justify grow> - <Button variant="secondary" onClick={load}> - {t("app.main.channel.misc.load_file")} ( + <Button variant='secondary' onClick={load}> + {t('app.main.channel.misc.load_file')} ( {humanFileSize(props.file.size ?? 0)}) </Button> </Row> </Match> - <Match when={typeof contents() !== "undefined"}> + <Match when={typeof contents() !== 'undefined'}> <code>{contents()}</code> </Match> </Switch> diff --git a/packages/client/components/ui/components/messaging/message/index.ts b/packages/client/components/ui/components/messaging/message/index.ts index fb7c71fe1..a1052adc8 100644 --- a/packages/client/components/ui/components/messaging/message/index.ts +++ b/packages/client/components/ui/components/messaging/message/index.ts @@ -1,11 +1,11 @@ -export { Attachment, AttachmentContainer } from "./Attachment"; -export { MessageContainer } from "./Container"; -export { Embed } from "./Embed"; -export { FileInfo } from "./FileInfo"; -export { MessageReply } from "./MessageReply"; -export { Reactions } from "./Reactions"; -export { SpecialEmbed } from "./SpecialEmbed"; -export { SystemMessage } from "./SystemMessage"; -export { SystemMessageIcon } from "./SystemMessageIcon"; -export { TextEmbed } from "./TextEmbed"; -export { TextFile } from "./TextFile"; +export { Attachment, AttachmentContainer } from './Attachment'; +export { MessageContainer } from './Container'; +export { Embed } from './Embed'; +export { FileInfo } from './FileInfo'; +export { MessageReply } from './MessageReply'; +export { Reactions } from './Reactions'; +export { SpecialEmbed } from './SpecialEmbed'; +export { SystemMessage } from './SystemMessage'; +export { SystemMessageIcon } from './SystemMessageIcon'; +export { TextEmbed } from './TextEmbed'; +export { TextFile } from './TextFile'; diff --git a/packages/client/components/ui/components/native/Titlebar.tsx b/packages/client/components/ui/components/native/Titlebar.tsx index 7fb67feb7..e342eafe8 100644 --- a/packages/client/components/ui/components/native/Titlebar.tsx +++ b/packages/client/components/ui/components/native/Titlebar.tsx @@ -1,7 +1,7 @@ -import { BiSolidWrench } from "solid-icons/bi"; -import type { Component } from "solid-js"; -import { Show } from "solid-js"; -import { css, styled, useTheme } from "solid-styled-components"; +import { BiSolidWrench } from 'solid-icons/bi'; +import type { Component } from 'solid-js'; +import { Show } from 'solid-js'; +import { css, styled, useTheme } from 'solid-styled-components'; // TODO // import UpdateIndicator from "../common/UpdateIndicator"; @@ -20,10 +20,10 @@ type Props = BaseProps & { }; // TODO: Should maybe be moved to `theme`? -const TITLEBAR_HEIGHT = "29px"; -const TITLEBAR_ACTION_PADDING = "8px"; +const TITLEBAR_HEIGHT = '29px'; +const TITLEBAR_ACTION_PADDING = '8px'; -const TitlebarBase = styled("div", "Titlebar")<BaseProps>` +const TitlebarBase = styled('div', 'Titlebar')<BaseProps>` flex-shrink: 0; height: ${TITLEBAR_HEIGHT}; display: flex; @@ -113,18 +113,18 @@ export const Titlebar: Component<Props> = (props) => { return ( <TitlebarBase {...props}> - <div data-tauri-drag-region class="title"> - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 193.733 37.438"> + <div data-tauri-drag-region class='title'> + <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 193.733 37.438'> <path - d="M23.393,1.382c0,2.787-1.52,4.46-4.764,4.46H13.258V-2.977H18.63C21.873-2.977,23.393-1.254,23.393,1.382Zm-24-11.555,5.2,7.213V25.4h8.666V11.973h2.078l7.4,13.43h9.781l-8.21-14.089A10.355,10.355,0,0,0,32.212,1.027c0-6.183-4.358-11.2-13.075-11.2Zm60.035,0H37.634V25.4H59.426V18.46H46.3v-7.8H57.906V3.966H46.3V-2.969H59.426Zm20.981,26.86-8.818-26.86H62.365L74.984,25.4H85.83L98.449-10.173H89.276Zm56.659-9.173c0-10.693-8.058-18.194-18.194-18.194-10.085,0-18.3,7.5-18.3,18.194a17.9,17.9,0,0,0,18.3,18.244A17.815,17.815,0,0,0,137.066,7.514Zm-27.62,0c0-6.335,3.649-10.338,9.426-10.338,5.676,0,9.376,4,9.376,10.338,0,6.233-3.7,10.338-9.376,10.338C113.095,17.852,109.446,13.747,109.446,7.514ZM141.88-10.173V25.4H161.9v-6.95H150.545V-10.173Zm22.248,7.2h9.426V25.4h8.666V-2.975h9.426v-7.2H164.128Z" - transform="translate(1.586 11.18)" + d='M23.393,1.382c0,2.787-1.52,4.46-4.764,4.46H13.258V-2.977H18.63C21.873-2.977,23.393-1.254,23.393,1.382Zm-24-11.555,5.2,7.213V25.4h8.666V11.973h2.078l7.4,13.43h9.781l-8.21-14.089A10.355,10.355,0,0,0,32.212,1.027c0-6.183-4.358-11.2-13.075-11.2Zm60.035,0H37.634V25.4H59.426V18.46H46.3v-7.8H57.906V3.966H46.3V-2.969H59.426Zm20.981,26.86-8.818-26.86H62.365L74.984,25.4H85.83L98.449-10.173H89.276Zm56.659-9.173c0-10.693-8.058-18.194-18.194-18.194-10.085,0-18.3,7.5-18.3,18.194a17.9,17.9,0,0,0,18.3,18.244A17.815,17.815,0,0,0,137.066,7.514Zm-27.62,0c0-6.335,3.649-10.338,9.426-10.338,5.676,0,9.376,4,9.376,10.338,0,6.233-3.7,10.338-9.376,10.338C113.095,17.852,109.446,13.747,109.446,7.514ZM141.88-10.173V25.4H161.9v-6.95H150.545V-10.173Zm22.248,7.2h9.426V25.4h8.666V-2.975h9.426v-7.2H164.128Z' + transform='translate(1.586 11.18)' // fill={theme.colours["foreground-200"]} // stroke={theme.colours["foreground-200"]} - stroke-width="1" + stroke-width='1' /> </svg> <Show when={props.isBuildDev}> - <BiSolidWrench size="12.5" /> + <BiSolidWrench size='12.5' /> </Show> </div> {/*<div class="actions quick"> @@ -143,34 +143,34 @@ export const Titlebar: Component<Props> = (props) => { </div> </Tooltip> </div>*/} - <div data-tauri-drag-region class="drag" /> + <div data-tauri-drag-region class='drag' /> {/* <UpdateIndicator style="titlebar" /> */} - <div class="actions"> + <div class='actions'> <div onClick={() => props.onMinimize()}> - <svg aria-hidden="false" width="12" height="12" viewBox="0 0 12 12"> - <rect fill="currentColor" width="10" height="1" x="1" y="6" /> + <svg aria-hidden='false' width='12' height='12' viewBox='0 0 12 12'> + <rect fill='currentColor' width='10' height='1' x='1' y='6' /> </svg> </div> <div onClick={() => props.onMaximize()}> - <svg aria-hidden="false" width="12" height="12" viewBox="0 0 12 12"> + <svg aria-hidden='false' width='12' height='12' viewBox='0 0 12 12'> <rect - width="9" - height="9" - x="1.5" - y="1.5" - fill="none" - stroke="currentColor" + width='9' + height='9' + x='1.5' + y='1.5' + fill='none' + stroke='currentColor' /> </svg> </div> - <div onClick={() => props.onClose()} class="error"> - <svg aria-hidden="false" width="12" height="12" viewBox="0 0 12 12"> + <div onClick={() => props.onClose()} class='error'> + <svg aria-hidden='false' width='12' height='12' viewBox='0 0 12 12'> <polygon - fill="currentColor" - stroke-width="1" - fill-rule="evenodd" - points="11 1.576 6.583 6 11 10.424 10.424 11 6 6.583 1.576 11 1 10.424 5.417 6 1 1.576 1.576 1 6 5.417 10.424 1" - style="stroke:currentColor;stroke-width:0.4" + fill='currentColor' + stroke-width='1' + fill-rule='evenodd' + points='11 1.576 6.583 6 11 10.424 10.424 11 6 6.583 1.576 11 1 10.424 5.417 6 1 1.576 1.576 1 6 5.417 10.424 1' + style={{ stroke: 'currentColor', 'stroke-width': '0.4' }} /> </svg> </div> diff --git a/packages/client/components/ui/components/native/index.ts b/packages/client/components/ui/components/native/index.ts index aa4b8e029..9e86de940 100644 --- a/packages/client/components/ui/components/native/index.ts +++ b/packages/client/components/ui/components/native/index.ts @@ -1 +1 @@ -export { Titlebar } from "./Titlebar"; +export { Titlebar } from './Titlebar'; diff --git a/packages/client/components/ui/components/navigation/channels/AdminSidebar.tsx b/packages/client/components/ui/components/navigation/channels/AdminSidebar.tsx index 50471d2e4..72cc04daa 100644 --- a/packages/client/components/ui/components/navigation/channels/AdminSidebar.tsx +++ b/packages/client/components/ui/components/navigation/channels/AdminSidebar.tsx @@ -1,8 +1,7 @@ -import { MenuButton } from "../../design"; -import { Typography } from "../../design/atoms/display/Typography"; -import { Column } from "../../design/layout"; - -import { SidebarBase } from "./common"; +import { MenuButton } from '../../design'; +import { Typography } from '../../design/atoms/display/Typography'; +import { Column } from '../../design/layout'; +import { SidebarBase } from './common'; interface Props { /** @@ -22,10 +21,10 @@ export const AdminSidebar = (props: Props) => { <div use:scrollable> <Column> <p> - <Typography variant="legacy-settings-title">Admin Panel</Typography> + <Typography variant='legacy-settings-title'>Admin Panel</Typography> </p> - <a onClick={() => props.openTab("inspector", "Inspector")}> - <MenuButton attention="active">Inspector</MenuButton> + <a onClick={() => props.openTab('inspector', 'Inspector')}> + <MenuButton attention='active'>Inspector</MenuButton> </a> </Column> </div> diff --git a/packages/client/components/ui/components/navigation/channels/HomeSidebar.tsx b/packages/client/components/ui/components/navigation/channels/HomeSidebar.tsx index 0f813f720..09dace89d 100644 --- a/packages/client/components/ui/components/navigation/channels/HomeSidebar.tsx +++ b/packages/client/components/ui/components/navigation/channels/HomeSidebar.tsx @@ -1,32 +1,28 @@ -import { BiSolidHome, BiSolidNotepad, BiSolidUserDetail } from "solid-icons/bi"; -import { Match, Show, Switch, createMemo, splitProps } from "solid-js"; -import { styled as styledLegacy } from "solid-styled-components"; +import MdPlus from '@material-design-icons/svg/outlined/add.svg?component-solid'; +import MdClose from '@material-design-icons/svg/outlined/close.svg?component-solid'; +import { VirtualContainer } from '@minht11/solid-virtual-container'; +import { ChannelContextMenu, UserContextMenu } from '@revolt/app'; +import { useClient } from '@revolt/client'; +import { getController } from '@revolt/common'; +import { useQuantity, useTranslation } from '@revolt/i18n'; +import { TextWithEmoji } from '@revolt/markdown'; +import { modalController } from '@revolt/modal'; +import { useLocation, useNavigate } from '@revolt/routing'; +import { iconSize } from '@revolt/ui'; +import type { Channel } from 'revolt.js'; +import { BiSolidHome, BiSolidNotepad, BiSolidUserDetail } from 'solid-icons/bi'; +import { createMemo, Match, Show, splitProps, Switch } from 'solid-js'; +import { styled as styledLegacy } from 'solid-styled-components'; +import { styled } from 'styled-system/jsx'; -import { VirtualContainer } from "@minht11/solid-virtual-container"; -import { Channel } from "revolt.js"; -import { styled } from "styled-system/jsx"; - -import { ChannelContextMenu, UserContextMenu } from "@revolt/app"; -import { useClient } from "@revolt/client"; -import { getController } from "@revolt/common"; -import { useQuantity, useTranslation } from "@revolt/i18n"; -import { TextWithEmoji } from "@revolt/markdown"; -import { modalController } from "@revolt/modal"; -import { useLocation, useNavigate } from "@revolt/routing"; -import { iconSize } from "@revolt/ui"; - -import MdPlus from "@material-design-icons/svg/outlined/add.svg?component-solid"; -import MdClose from "@material-design-icons/svg/outlined/close.svg?component-solid"; - -import { Avatar } from "../../design/atoms/display/Avatar"; -import { Typography } from "../../design/atoms/display/Typography"; -import { UserStatusGraphic } from "../../design/atoms/indicators"; -import { MenuButton } from "../../design/atoms/inputs/MenuButton"; -import { OverflowingText } from "../../design/layout/OverflowingText"; -import { Tooltip } from "../../floating"; -import { Deferred } from "../../tools"; - -import { SidebarBase } from "./common"; +import { Avatar } from '../../design/atoms/display/Avatar'; +import { Typography } from '../../design/atoms/display/Typography'; +import { UserStatusGraphic } from '../../design/atoms/indicators'; +import { MenuButton } from '../../design/atoms/inputs/MenuButton'; +import { OverflowingText } from '../../design/layout/OverflowingText'; +import { Tooltip } from '../../floating'; +import { Deferred } from '../../tools'; +import { SidebarBase } from './common'; interface Props { /** @@ -52,11 +48,11 @@ interface Props { __tempDisplayFriends: () => boolean; } -const ButtonTitle = styled("div", { +const ButtonTitle = styled('div', { base: { - height: "100%", - display: "flex", - alignItems: "center", + height: '100%', + display: 'flex', + alignItems: 'center', }, }); @@ -77,35 +73,35 @@ export const HomeSidebar = (props: Props) => { <SidebarBase> <div ref={scrollTargetElement} - use:scrollable={{ direction: "y", showOnHover: true }} + use:scrollable={{ direction: 'y', showOnHover: true }} > <List> <SidebarTitle> - <Typography variant="sidebar-title"> - {t("app.main.categories.conversations")} + <Typography variant='sidebar-title'> + {t('app.main.categories.conversations')} </Typography> </SidebarTitle> - <a href="/app"> + <a href='/app'> <MenuButton - size="normal" + size='normal' icon={<BiSolidHome size={24} />} - attention={location.pathname === "/app" ? "selected" : "normal"} + attention={location.pathname === '/app' ? 'selected' : 'normal'} > - <ButtonTitle>{t("app.navigation.tabs.home")}</ButtonTitle> + <ButtonTitle>{t('app.navigation.tabs.home')}</ButtonTitle> </MenuButton> </a> <Show when={props.__tempDisplayFriends()}> - <a href="/friends"> + <a href='/friends'> <MenuButton - size="normal" + size='normal' icon={<BiSolidUserDetail size={24} />} attention={ - location.pathname === "/friends" ? "selected" : "normal" + location.pathname === '/friends' ? 'selected' : 'normal' } > - <ButtonTitle>{t("app.navigation.tabs.friends")}</ButtonTitle> + <ButtonTitle>{t('app.navigation.tabs.friends')}</ButtonTitle> </MenuButton> </a> </Show> @@ -113,28 +109,27 @@ export const HomeSidebar = (props: Props) => { <Switch fallback={ <MenuButton - size="normal" - attention={"normal"} + size='normal' + attention={'normal'} icon={<BiSolidNotepad size={24} />} - // eslint-disable-next-line solid/reactivity onClick={() => props.openSavedNotes(navigate)} > - <ButtonTitle>{t("app.navigation.tabs.saved")}</ButtonTitle> + <ButtonTitle>{t('app.navigation.tabs.saved')}</ButtonTitle> </MenuButton> } > <Match when={savedNotesChannelId()}> <a href={`/channel/${savedNotesChannelId()}`}> <MenuButton - size="normal" + size='normal' icon={<BiSolidNotepad size={24} />} attention={ props.channelId && savedNotesChannelId() === props.channelId - ? "selected" - : "normal" + ? 'selected' + : 'normal' } > - <ButtonTitle>{t("app.navigation.tabs.saved")}</ButtonTitle> + <ButtonTitle>{t('app.navigation.tabs.saved')}</ButtonTitle> </MenuButton> </a> </Match> @@ -142,19 +137,19 @@ export const HomeSidebar = (props: Props) => { <span style={{ - display: "flex", - "padding-top": "var(--gap-md)", - "padding-inline": "var(--gap-lg)", - "align-items": "center", - "justify-content": "space-between", + display: 'flex', + 'padding-top': 'var(--gap-md)', + 'padding-inline': 'var(--gap-lg)', + 'align-items': 'center', + 'justify-content': 'space-between', // TODO style this }} > - <Typography variant="category">Direct Messages</Typography> + <Typography variant='category'>Direct Messages</Typography> <a onClick={() => modalController.push({ - type: "create_group", + type: 'create_group', client: client(), }) } @@ -173,13 +168,13 @@ export const HomeSidebar = (props: Props) => { <div style={{ ...item.style, - width: "100%", - "padding-block": "3px", + width: '100%', + 'padding-block': '3px', }} > <Entry // @ts-expect-error missing type on Entry - role="listitem" + role='listitem' tabIndex={item.tabIndex} style={item.style} channel={item.item} @@ -206,13 +201,13 @@ const SidebarTitle = styledLegacy.p` /** * Styles required to correctly display name and status */ -const NameStatusStack = styled("div", { +const NameStatusStack = styled('div', { base: { - height: "100%", + height: '100%', - display: "flex", - flexDirection: "column", - justifyContent: "center", + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', }, }); @@ -225,7 +220,7 @@ function Entry( "href" >*/ ) { - const [local, remote] = splitProps(props, ["channel", "active"]); + const [local, remote] = splitProps(props, ['channel', 'active']); const q = useQuantity(); const t = useTranslation(); @@ -241,31 +236,31 @@ function Entry( return ( <a {...remote} href={`/channel/${local.channel.id}`}> <MenuButton - size="normal" + size='normal' alert={ !local.active && local.channel.unread && (local.channel.mentions?.size || true) } attention={ - local.active ? "selected" : local.channel.unread ? "active" : "normal" + local.active ? 'selected' : local.channel.unread ? 'active' : 'normal' } icon={ <Switch> - <Match when={local.channel.type === "Group"}> + <Match when={local.channel.type === 'Group'}> <Avatar size={32} - shape="rounded-square" + shape='rounded-square' fallback={local.channel.name} src={local.channel.iconURL} primaryContrast /> </Match> - <Match when={local.channel.type === "DirectMessage"}> + <Match when={local.channel.type === 'DirectMessage'}> <Avatar size={32} src={local.channel.iconURL} - holepunch="bottom-right" + holepunch='bottom-right' overlay={ <UserStatusGraphic status={local.channel?.recipient?.presence} @@ -279,18 +274,18 @@ function Entry( <a onClick={(e) => { e.preventDefault(); - getController("modal").push({ - type: "delete_channel", + getController('modal').push({ + type: 'delete_channel', channel: local.channel, }); }} > - <MdClose {...iconSize("18px")} /> + <MdClose {...iconSize('18px')} /> </a> } use:floating={{ contextMenu: () => - local.channel.type === "DirectMessage" ? ( + local.channel.type === 'DirectMessage' ? ( <UserContextMenu user={local.channel.recipient!} channel={local.channel} @@ -302,26 +297,26 @@ function Entry( > <NameStatusStack> <Switch> - <Match when={local.channel.type === "Group"}> + <Match when={local.channel.type === 'Group'}> <OverflowingText> <TextWithEmoji content={local.channel.name!} /> </OverflowingText> - <Typography variant="status"> - {q("members", local.channel.recipients.length || 0)} + <Typography variant='status'> + {q('members', local.channel.recipients.length || 0)} </Typography> </Match> - <Match when={local.channel.type === "DirectMessage"}> + <Match when={local.channel.type === 'DirectMessage'}> <OverflowingText> {local.channel?.recipient?.displayName} </OverflowingText> <Show when={status()}> <Tooltip content={() => <TextWithEmoji content={status()!} />} - placement="top-start" + placement='top-start' aria={status()!} > <OverflowingText> - <Typography variant="status"> + <Typography variant='status'> <TextWithEmoji content={status()!} /> </Typography> </OverflowingText> @@ -341,5 +336,5 @@ function Entry( */ const List = styledLegacy.div` /* padding: ${(props) => props.theme!.gap.md}; */ - width: ${(props) => props.theme!.layout.width["channel-sidebar"]}; + width: ${(props) => props.theme!.layout.width['channel-sidebar']}; `; diff --git a/packages/client/components/ui/components/navigation/channels/ServerSidebar.tsx b/packages/client/components/ui/components/navigation/channels/ServerSidebar.tsx index 47e42d8c7..958647b2c 100644 --- a/packages/client/components/ui/components/navigation/channels/ServerSidebar.tsx +++ b/packages/client/components/ui/components/navigation/channels/ServerSidebar.tsx @@ -1,3 +1,11 @@ +import MdPersonAdd from '@material-design-icons/svg/filled/person_add.svg?component-solid'; +import MdSettings from '@material-design-icons/svg/filled/settings.svg?component-solid'; +import { getController } from '@revolt/common'; +import { useTranslation } from '@revolt/i18n'; +import { KeybindAction } from '@revolt/keybinds/actions'; +import { TextWithEmoji } from '@revolt/markdown'; +import { useNavigate } from '@revolt/routing'; +import type { API, Channel, Server, ServerFlags } from 'revolt.js'; import { BiRegularCheckCircle, BiRegularHash, @@ -5,40 +13,28 @@ import { BiSolidCheckCircle, BiSolidChevronRight, BiSolidCog, -} from "solid-icons/bi"; +} from 'solid-icons/bi'; +import type { JSX } from 'solid-js'; import { - For, - JSX, - Match, - Show, - Switch, createMemo, createSignal, + For, + Match, onCleanup, onMount, -} from "solid-js"; -import { styled } from "solid-styled-components"; - -import type { API, Channel, Server, ServerFlags } from "revolt.js"; - -import { getController } from "@revolt/common"; -import { useTranslation } from "@revolt/i18n"; -import { KeybindAction } from "@revolt/keybinds/actions"; -import { TextWithEmoji } from "@revolt/markdown"; -import { useNavigate } from "@revolt/routing"; - -import MdPersonAdd from "@material-design-icons/svg/filled/person_add.svg?component-solid"; -import MdSettings from "@material-design-icons/svg/filled/settings.svg?component-solid"; - -import { iconSize } from "../../.."; -import { useKeybindActions } from "../../context/Keybinds"; -import { Header, HeaderWithImage } from "../../design/atoms/display/Header"; -import { Typography } from "../../design/atoms/display/Typography"; -import { MenuButton } from "../../design/atoms/inputs/MenuButton"; -import { Column, OverflowingText, Row } from "../../design/layout"; -import { Tooltip } from "../../floating"; - -import { SidebarBase } from "./common"; + Show, + Switch, +} from 'solid-js'; +import { styled } from 'solid-styled-components'; + +import { iconSize } from '../../..'; +import { useKeybindActions } from '../../context/Keybinds'; +import { Header, HeaderWithImage } from '../../design/atoms/display/Header'; +import { Typography } from '../../design/atoms/display/Typography'; +import { MenuButton } from '../../design/atoms/inputs/MenuButton'; +import { Column, OverflowingText, Row } from '../../design/layout'; +import { Tooltip } from '../../floating'; +import { SidebarBase } from './common'; interface Props { /** @@ -64,13 +60,13 @@ interface Props { /** * Menu generator */ - menuGenerator: (target: Server | Channel) => JSX.Directives["floating"]; + menuGenerator: (target: Server | Channel) => JSX.Directives['floating']; } /** * Ordered category data returned from server */ -type CategoryData = Omit<API.Category, "channels"> & { channels: Channel[] }; +type CategoryData = Omit<API.Category, 'channels'> & { channels: Channel[] }; /** * Display server information and channels @@ -139,7 +135,7 @@ export const ServerSidebar = (props: Props) => { <SidebarBase> <Switch fallback={ - <Header placement="secondary"> + <Header placement='secondary'> <ServerInfo server={props.server} openServerInfo={props.openServerInfo} @@ -150,7 +146,7 @@ export const ServerSidebar = (props: Props) => { > <Match when={props.server.banner}> <HeaderWithImage - placement="secondary" + placement='secondary' style={{ background: `url('${props.server.bannerURL}')`, }} @@ -165,10 +161,10 @@ export const ServerSidebar = (props: Props) => { </Switch> <div use:scrollable={{ showOnHover: true }} - style={{ "flex-grow": 1 }} + style={{ 'flex-grow': 1 }} use:floating={props.menuGenerator(props.server)} > - <List gap="lg"> + <List gap='lg'> <div /> <For each={props.server.orderedChannels}> {(category) => ( @@ -190,7 +186,7 @@ export const ServerSidebar = (props: Props) => { * Server Information */ function ServerInfo( - props: Pick<Props, "server" | "openServerInfo" | "openServerSettings"> + props: Pick<Props, 'server' | 'openServerInfo' | 'openServerSettings'> ) { return ( <Row align grow> @@ -236,10 +232,10 @@ function ServerBadge(props: { flags: ServerFlags }) { <Tooltip content={ props.flags === 1 - ? t("app.special.server-badges.official") - : t("app.special.server-badges.verified") + ? t('app.special.server-badges.official') + : t('app.special.server-badges.verified') } - placement="top" + placement='top' > {props.flags === 1 ? ( <BiSolidCheckCircle size={12} /> @@ -258,13 +254,13 @@ function Category( props: { category: CategoryData; channelId: string | undefined; - } & Pick<Props, "menuGenerator"> + } & Pick<Props, 'menuGenerator'> ) { const [shown, setShown] = createSignal(true); const channels = createMemo(() => props.category.channels.filter( (channel) => - props.category.id === "default" || + props.category.id === 'default' || shown() || channel.unread || channel.id === props.channelId @@ -272,16 +268,16 @@ function Category( ); return ( - <Column gap="sm"> - <Show when={props.category.id !== "default"}> + <Column gap='sm'> + <Show when={props.category.id !== 'default'}> <CategoryBase open={shown()} onClick={() => setShown((shown) => !shown)} align - gap="sm" + gap='sm' > <BiSolidChevronRight size={12} /> - <Typography variant="category">{props.category.title}</Typography> + <Typography variant='category'>{props.category.title}</Typography> </CategoryBase> </Show> <For each={channels()}> @@ -308,7 +304,7 @@ const CategoryBase = styled(Row)<{ open: boolean }>` transition: ${(props) => props.theme!.transitions.fast} all; color: ${(props) => - props.theme!.colours["sidebar-channels-category-foreground"]}; + props.theme!.colours['sidebar-channels-category-foreground']}; &:hover { filter: brightness(1.1); @@ -328,25 +324,25 @@ const CategoryBase = styled(Row)<{ open: boolean }>` * Server channel entry */ function Entry( - props: { channel: Channel; active: boolean } & Pick<Props, "menuGenerator"> + props: { channel: Channel; active: boolean } & Pick<Props, 'menuGenerator'> ) { return ( <a href={`/server/${props.channel.serverId}/channel/${props.channel.id}`}> <MenuButton use:floating={props.menuGenerator(props.channel)} - size="thin" + size='thin' alert={ !props.active && props.channel.unread && (props.channel.mentions?.size || true) } attention={ - props.active ? "selected" : props.channel.unread ? "active" : "normal" + props.active ? 'selected' : props.channel.unread ? 'active' : 'normal' } icon={ <> <Switch fallback={<BiRegularHash size={20} />}> - <Match when={props.channel.type === "VoiceChannel"}> + <Match when={props.channel.type === 'VoiceChannel'}> <BiRegularPhoneCall size={20} /> </Match> </Switch> @@ -360,38 +356,38 @@ function Entry( <a use:floating={{ tooltip: { - placement: "top", - content: "Create Invite", + placement: 'top', + content: 'Create Invite', }, }} onClick={(e) => { e.preventDefault(); - getController("modal").push({ - type: "create_invite", + getController('modal').push({ + type: 'create_invite', channel: props.channel, }); }} > - <MdPersonAdd {...iconSize("14px")} /> + <MdPersonAdd {...iconSize('14px')} /> </a> <a use:floating={{ tooltip: { - placement: "top", - content: "Edit Channel", + placement: 'top', + content: 'Edit Channel', }, }} onClick={(e) => { e.preventDefault(); - getController("modal").push({ - type: "settings", - config: "channel", + getController('modal').push({ + type: 'settings', + config: 'channel', context: props.channel, }); }} > - <MdSettings {...iconSize("14px")} /> + <MdSettings {...iconSize('14px')} /> </a> </> } @@ -407,7 +403,7 @@ function Entry( /** * Channel icon styling */ -const ChannelIcon = styled("img")` +const ChannelIcon = styled('img')` width: 16px; height: 16px; object-fit: contain; @@ -418,5 +414,5 @@ const ChannelIcon = styled("img")` * We fix the width in order to prevent scrollbar from moving stuff around */ const List = styled(Column)` - width: ${(props) => props.theme!.layout.width["channel-sidebar"]}; + width: ${(props) => props.theme!.layout.width['channel-sidebar']}; `; diff --git a/packages/client/components/ui/components/navigation/channels/common.tsx b/packages/client/components/ui/components/navigation/channels/common.tsx index 4d25a3a87..02569ebb4 100644 --- a/packages/client/components/ui/components/navigation/channels/common.tsx +++ b/packages/client/components/ui/components/navigation/channels/common.tsx @@ -1,20 +1,20 @@ -import { styled } from "solid-styled-components"; +import { styled } from 'solid-styled-components'; /** * Common styles for sidebar */ -export const SidebarBase = styled("div", "Sidebar")` +export const SidebarBase = styled('div', 'Sidebar')` display: flex; flex-shrink: 0; flex-direction: column; overflow: hidden; border-radius: ${(props) => props.theme!.borderRadius.lg}; - margin: ${(props) => (props.theme!.gap.md + " ").repeat(3)}0; - width: ${(props) => props.theme!.layout.width["channel-sidebar"]}; + margin: ${(props) => (props.theme!.gap.md + ' ').repeat(3)}0; + width: ${(props) => props.theme!.layout.width['channel-sidebar']}; - color: ${({ theme }) => theme!.colours["sidebar-channels-foreground"]}; - background: ${({ theme }) => theme!.colours["sidebar-channels-background"]}; + color: ${({ theme }) => theme!.colours['sidebar-channels-foreground']}; + background: ${({ theme }) => theme!.colours['sidebar-channels-background']}; a { text-decoration: none; diff --git a/packages/client/components/ui/components/navigation/channels/index.ts b/packages/client/components/ui/components/navigation/channels/index.ts index 226314bd4..8174a34a7 100644 --- a/packages/client/components/ui/components/navigation/channels/index.ts +++ b/packages/client/components/ui/components/navigation/channels/index.ts @@ -1,3 +1,3 @@ -export { HomeSidebar } from "./HomeSidebar"; -export { AdminSidebar } from "./AdminSidebar"; -export { ServerSidebar } from "./ServerSidebar"; +export { AdminSidebar } from './AdminSidebar'; +export { HomeSidebar } from './HomeSidebar'; +export { ServerSidebar } from './ServerSidebar'; diff --git a/packages/client/components/ui/components/navigation/index.ts b/packages/client/components/ui/components/navigation/index.ts index a218d936b..d0f3d4b7f 100644 --- a/packages/client/components/ui/components/navigation/index.ts +++ b/packages/client/components/ui/components/navigation/index.ts @@ -1,2 +1,2 @@ -export * from "./channels"; -export * from "./servers"; +export * from './channels'; +export * from './servers'; diff --git a/packages/client/components/ui/components/navigation/servers/ServerList.tsx b/packages/client/components/ui/components/navigation/servers/ServerList.tsx index 51db21bda..00bc7c60c 100644 --- a/packages/client/components/ui/components/navigation/servers/ServerList.tsx +++ b/packages/client/components/ui/components/navigation/servers/ServerList.tsx @@ -1,30 +1,27 @@ -import { Accessor, For, Show, onCleanup, onMount } from "solid-js"; -import { JSX } from "solid-js"; -import { styled as styledLegacy } from "solid-styled-components"; - -import { Channel, Server, User } from "revolt.js"; -import { cva } from "styled-system/css"; -import { styled } from "styled-system/jsx"; - -import { KeybindAction } from "@revolt/keybinds"; -import { useNavigate } from "@revolt/routing"; - -import MdAdd from "@material-design-icons/svg/filled/add.svg?component-solid"; -import MdExplore from "@material-design-icons/svg/filled/explore.svg?component-solid"; -import MdHome from "@material-design-icons/svg/filled/home.svg?component-solid"; -import MdSettings from "@material-design-icons/svg/filled/settings.svg?component-solid"; - -import { Draggable } from "../../common/Draggable"; -import { useKeybindActions } from "../../context/Keybinds"; -import { Column, Typography } from "../../design"; -import { Avatar } from "../../design/atoms/display/Avatar"; +import MdAdd from '@material-design-icons/svg/filled/add.svg?component-solid'; +import MdExplore from '@material-design-icons/svg/filled/explore.svg?component-solid'; +import MdHome from '@material-design-icons/svg/filled/home.svg?component-solid'; +import MdSettings from '@material-design-icons/svg/filled/settings.svg?component-solid'; +import { KeybindAction } from '@revolt/keybinds'; +import { useNavigate } from '@revolt/routing'; +import type { Channel, Server, User } from 'revolt.js'; +import type { Accessor } from 'solid-js'; +import type { JSX } from 'solid-js'; +import { For, onCleanup, onMount, Show } from 'solid-js'; +import { styled as styledLegacy } from 'solid-styled-components'; +import { cva } from 'styled-system/css'; +import { styled } from 'styled-system/jsx'; + +import { Draggable } from '../../common/Draggable'; +import { useKeybindActions } from '../../context/Keybinds'; +import { Column, Typography } from '../../design'; +import { Avatar } from '../../design/atoms/display/Avatar'; import { UnreadsGraphic, UserStatusGraphic, -} from "../../design/atoms/indicators"; -import { Tooltip } from "../../floating"; - -import { Swoosh } from "./Swoosh"; +} from '../../design/atoms/indicators'; +import { Tooltip } from '../../floating'; +import { Swoosh } from './Swoosh'; interface Props { /** @@ -61,7 +58,7 @@ interface Props { /** * Menu generator */ - menuGenerator: (target: Server | Channel) => JSX.Directives["floating"]; + menuGenerator: (target: Server | Channel) => JSX.Directives['floating']; } /** @@ -93,7 +90,7 @@ export const ServerList = (props: Props) => { const nextIndex = currentServerIndex + byOffset; if (nextIndex === -1) { - return navigate("/app"); + return navigate('/app'); } // this will wrap the index around @@ -130,34 +127,34 @@ export const ServerList = (props: Props) => { return ( <ServerListBase> - <div use:invisibleScrollable={{ direction: "y", class: listBase() }}> + <div use:invisibleScrollable={{ direction: 'y', class: listBase() }}> <EntryContainer> {/* <Show when={!props.selectedServer()}> <PositionSwoosh> <Swoosh topItem /> </PositionSwoosh> </Show> */} - <a href="/app"> + <a href='/app'> <Avatar size={42} fallback={<MdHome />} /> </a> </EntryContainer> <Tooltip - placement="right" + placement='right' content={() => ( - <Column gap="none"> + <Column gap='none'> <span>{props.user.username}</span> - <Typography variant="small">{props.user.presence}</Typography> + <Typography variant='small'>{props.user.presence}</Typography> </Column> )} aria={props.user.username} > <EntryContainer> {/* TODO: Make this open user status context menu */} - <a href="/app"> + <a href='/app'> <Avatar size={42} src={props.user.avatarURL} - holepunch={"bottom-right"} + holepunch={'bottom-right'} overlay={<UserStatusGraphic status={props.user.presence} />} interactive /> @@ -166,14 +163,14 @@ export const ServerList = (props: Props) => { </Tooltip> <For each={props.unreadConversations.slice(0, 9)}> {(conversation) => ( - <Tooltip placement="right" content={conversation.displayName}> + <Tooltip placement='right' content={conversation.displayName}> <EntryContainer use:floating={props.menuGenerator(conversation)}> <a href={`/channel/${conversation.id}`}> <Avatar size={42} // TODO: fix this src={conversation.iconURL} - holepunch={conversation.unread ? "top-right" : "none"} + holepunch={conversation.unread ? 'top-right' : 'none'} overlay={ <> <Show when={conversation.unread}> @@ -213,7 +210,7 @@ export const ServerList = (props: Props) => { just check existence before continuing */ } > - <Tooltip placement="right" content={item.name}> + <Tooltip placement='right' content={item.name}> <EntryContainer use:floating={props.menuGenerator(item)}> <Show when={props.selectedServer() === item.id}> <PositionSwoosh> @@ -224,7 +221,7 @@ export const ServerList = (props: Props) => { <Avatar size={42} src={item.iconURL} - holepunch={item.unread ? "top-right" : "none"} + holepunch={item.unread ? 'top-right' : 'none'} overlay={ <> <Show when={item.unread}> @@ -244,14 +241,14 @@ export const ServerList = (props: Props) => { </Show> )} </Draggable> - <Tooltip placement="right" content={"Create or join a server"}> + <Tooltip placement='right' content={'Create or join a server'}> <EntryContainer> <a onClick={() => props.onCreateOrJoinServer()}> <Avatar size={42} fallback={<MdAdd />} /> </a> </EntryContainer> </Tooltip> - <Tooltip placement="right" content={"Find new servers to join"}> + <Tooltip placement='right' content={'Find new servers to join'}> <EntryContainer> <Avatar size={42} fallback={<MdExplore />} /> </EntryContainer> @@ -260,9 +257,9 @@ export const ServerList = (props: Props) => { <Shadow> <div /> </Shadow> - <Tooltip placement="right" content="Settings"> + <Tooltip placement='right' content='Settings'> <EntryContainer> - <a href="/settings"> + <a href='/settings'> <Avatar size={42} fallback={<MdSettings />} interactive /> </a> </EntryContainer> @@ -274,11 +271,11 @@ export const ServerList = (props: Props) => { /** * Server list container */ -const ServerListBase = styled("div", { +const ServerListBase = styled('div', { base: { - display: "flex", - flexDirection: "column", - background: "var(--colours-background)", + display: 'flex', + flexDirection: 'column', + background: 'var(--colours-background)', }, }); @@ -294,7 +291,7 @@ const listBase = cva({ /** * Server entries */ -const EntryContainer = styledLegacy("div", "Entry")` +const EntryContainer = styledLegacy('div', 'Entry')` width: 56px; height: 56px; position: relative; @@ -316,7 +313,7 @@ const LineDivider = styledLegacy.div` margin: 6px auto; width: calc(100% - 24px); background: ${({ theme }) => - theme!.colours["sidebar-server-list-foreground"]}; + theme!.colours['sidebar-server-list-foreground']}; `; /** @@ -331,7 +328,7 @@ const PositionSwoosh = styledLegacy.div` /** * Shadow at the bottom of the list */ -const Shadow = styledLegacy("div", "Shadow")` +const Shadow = styledLegacy('div', 'Shadow')` height: 0; z-index: 1; display: relative; @@ -343,7 +340,7 @@ const Shadow = styledLegacy("div", "Shadow")` background: linear-gradient( to bottom, transparent, - ${(props) => props.theme!.colours["background"]} + ${(props) => props.theme!.colours['background']} ); } `; diff --git a/packages/client/components/ui/components/navigation/servers/Swoosh.tsx b/packages/client/components/ui/components/navigation/servers/Swoosh.tsx index f958f2b65..a63f6649d 100644 --- a/packages/client/components/ui/components/navigation/servers/Swoosh.tsx +++ b/packages/client/components/ui/components/navigation/servers/Swoosh.tsx @@ -1,4 +1,4 @@ -import { useTheme } from "solid-styled-components"; +import { useTheme } from 'solid-styled-components'; interface Props { // Whether this is being placed under the top item on the list @@ -14,31 +14,31 @@ export function Swoosh(props: Props) { // TODO: should depend on if server sidebar is hidden return ( <svg - width="56" - height="106" - viewBox="0 0 56 106" - xmlns="http://www.w3.org/2000/svg" + width='56' + height='106' + viewBox='0 0 56 106' + xmlns='http://www.w3.org/2000/svg' > <path - d="M54 53C54 67.9117 41.9117 80 27 80C12.0883 80 0 67.9117 0 53C0 38.0883 12.0883 26 27 26C41.9117 26 54 38.0883 54 53Z" - fill={theme.colours["sidebar-channels-background"]} + d='M54 53C54 67.9117 41.9117 80 27 80C12.0883 80 0 67.9117 0 53C0 38.0883 12.0883 26 27 26C41.9117 26 54 38.0883 54 53Z' + fill={theme.colours['sidebar-channels-background']} /> <path - d="M27.0002 80C4.50023 80 56.0002 53 56.0002 53V106C56.0002 106 49.5002 80 27.0002 80Z" - fill={theme.colours["sidebar-channels-background"]} + d='M27.0002 80C4.50023 80 56.0002 53 56.0002 53V106C56.0002 106 49.5002 80 27.0002 80Z' + fill={theme.colours['sidebar-channels-background']} /> {!props.topItem && ( <path - d="M27.0003 26C4.50025 26 56 53 56 53L56.0003 0C56.0003 0 49.5003 26 27.0003 26Z" - fill={theme.colours["sidebar-channels-background"]} + d='M27.0003 26C4.50025 26 56 53 56 53L56.0003 0C56.0003 0 49.5003 26 27.0003 26Z' + fill={theme.colours['sidebar-channels-background']} /> )} <rect - x="51" - y="50" - width="5" - height="7" - fill={theme.colours["sidebar-channels-background"]} + x='51' + y='50' + width='5' + height='7' + fill={theme.colours['sidebar-channels-background']} /> </svg> ); diff --git a/packages/client/components/ui/components/navigation/servers/index.ts b/packages/client/components/ui/components/navigation/servers/index.ts index e16cddd33..45408704e 100644 --- a/packages/client/components/ui/components/navigation/servers/index.ts +++ b/packages/client/components/ui/components/navigation/servers/index.ts @@ -1 +1 @@ -export { ServerList } from "./ServerList"; +export { ServerList } from './ServerList'; diff --git a/packages/client/components/ui/components/stories.d.ts b/packages/client/components/ui/components/stories.d.ts index f069a0018..1c6dbfcbd 100644 --- a/packages/client/components/ui/components/stories.d.ts +++ b/packages/client/components/ui/components/stories.d.ts @@ -1,20 +1,20 @@ -import type { Component, ComponentProps } from "solid-js"; -import type { JSX } from "solid-js"; +import type { Component, ComponentProps } from 'solid-js'; +import type { JSX } from 'solid-js'; type Decorator<T extends Component<P>, P = object> = Component<{ children: JSX.Element; childProps: ComponentProps<T>; }>; -declare type Story<T extends Component<P>, P = object> = { +declare interface Story<T extends Component<P>, P = object> { title: string; props?: ComponentProps<T>; decorators?: Decorator<T, P>[]; component?: T; skipRegressionTests?: boolean; -}; +} -declare type ComponentStory<T extends Component<P>, P = object> = { +declare interface ComponentStory<T extends Component<P>, P = object> { category?: string; component: T; stories: Story<T, P>[]; @@ -22,15 +22,15 @@ declare type ComponentStory<T extends Component<P>, P = object> = { decorators?: Decorator<T, P>[]; propTypes?: Record< keyof ComponentProps<T>, - | "string" - | "boolean" - | "number" - | "function" - | "component" + | 'string' + | 'boolean' + | 'number' + | 'function' + | 'component' | (string | boolean)[] >; effects?: Record< keyof ComponentProps<T>, (props: ComponentProps<T>, ...args: unknown[]) => Partial<ComponentProps<T>> >; -}; +} diff --git a/packages/client/components/ui/components/tools/Deferred.tsx b/packages/client/components/ui/components/tools/Deferred.tsx index f6caa1e4e..7d660a761 100644 --- a/packages/client/components/ui/components/tools/Deferred.tsx +++ b/packages/client/components/ui/components/tools/Deferred.tsx @@ -1,7 +1,8 @@ -import { Match } from "solid-js"; -import { JSX, Switch, createSignal, onMount } from "solid-js"; +import type { JSX } from 'solid-js'; +import { Match } from 'solid-js'; +import { createSignal, onMount, Switch } from 'solid-js'; -import { Preloader } from "../design"; +import { Preloader } from '../design'; /** * Render component after other elements have been drawn to DOM @@ -12,7 +13,7 @@ export function Deferred(props: { children: JSX.Element }) { const [render, setRender] = createSignal(false); onMount(() => setTimeout(() => setRender(true))); return ( - <Switch fallback={<Preloader type="ring" />}> + <Switch fallback={<Preloader type='ring' />}> <Match when={render()}>{props.children}</Match> </Switch> ); diff --git a/packages/client/components/ui/components/tools/Form.tsx b/packages/client/components/ui/components/tools/Form.tsx index 0f9f3d93c..9bb114dec 100644 --- a/packages/client/components/ui/components/tools/Form.tsx +++ b/packages/client/components/ui/components/tools/Form.tsx @@ -1,16 +1,12 @@ /* eslint-disable solid/reactivity */ -import { ComponentProps, For, JSX, Match, Show, Switch } from "solid-js"; -import { SetStoreFunction, createStore } from "solid-js/store"; +import type { ComponentProps, JSX } from 'solid-js'; +import { For, Match, Show, Switch } from 'solid-js'; +import type { SetStoreFunction } from 'solid-js/store'; +import { createStore } from 'solid-js/store'; -import { Button, Column } from "../design"; - -import { - InputElement, - Type, - TypeProps, - Value, - emptyValue, -} from "./InputElement"; +import { Button, Column } from '../design'; +import type { Type, TypeProps, Value } from './InputElement'; +import { emptyValue, InputElement } from './InputElement'; /** * Form schema @@ -73,7 +69,7 @@ export interface Props<T extends FormTemplate> { /** * Submit button properties */ - submitBtn?: Omit<ComponentProps<typeof Button>, "type">; + submitBtn?: Omit<ComponentProps<typeof Button>, 'type'>; /** * Whether all elements are disabled @@ -158,8 +154,8 @@ export function Form<T extends FormTemplate>(props: Props<T>) { <Show when={props.submitBtn}> <Button - type="submit" - children="Submit" + type='submit' + children='Submit' isDisabled={props.disabled} {...props.submitBtn} /> diff --git a/packages/client/components/ui/components/tools/files/FileDropAnywhereCollector.tsx b/packages/client/components/ui/components/tools/files/FileDropAnywhereCollector.tsx index 898e9ab0b..bd0b96f8f 100644 --- a/packages/client/components/ui/components/tools/files/FileDropAnywhereCollector.tsx +++ b/packages/client/components/ui/components/tools/files/FileDropAnywhereCollector.tsx @@ -1,27 +1,25 @@ +import { getController } from '@revolt/common'; +import { useQuantity } from '@revolt/i18n'; import { BiSolidFile, BiSolidFileImage, BiSolidFileTxt, BiSolidVideoRecording, -} from "solid-icons/bi"; +} from 'solid-icons/bi'; import { - Match, - Show, - Switch, createSignal, + Match, onCleanup, onMount, -} from "solid-js"; -import { Portal } from "solid-js/web"; -import { styled } from "solid-styled-components"; - -import { Motion } from "@motionone/solid"; - -import { getController } from "@revolt/common"; -import { useQuantity } from "@revolt/i18n"; + Show, + Switch, +} from 'solid-js'; +import { Portal } from 'solid-js/web'; +import { Motion } from 'solid-motionone'; +import { styled } from 'solid-styled-components'; -import { PreviewStack } from "../../design"; -import { generateTypographyCSS } from "../../design/atoms/display/Typography"; +import { PreviewStack } from '../../design'; +import { generateTypographyCSS } from '../../design/atoms/display/Typography'; interface Props { /** @@ -64,7 +62,7 @@ const DimScreen = styled.div` * File drop information */ const DropText = styled(Motion.div)` - ${(props) => generateTypographyCSS(props.theme!, "label")} + ${(props) => generateTypographyCSS(props.theme!, 'label')} margin-top: 48px; white-space: nowrap; @@ -91,13 +89,13 @@ export function FileDropAnywhereCollector(props: Props) { * @param event Drag event */ function onDragOver(event: DragEvent) { - if (getController("modal").isOpen()) return; + if (getController('modal').isOpen()) return; event.preventDefault(); clearTimeout(deferredHide); if (event.dataTransfer) { - event.dataTransfer.dropEffect = "copy"; + event.dataTransfer.dropEffect = 'copy'; if (!showIndicator()) { setShowIndicator(true); @@ -136,15 +134,15 @@ export function FileDropAnywhereCollector(props: Props) { } onMount(() => { - document.addEventListener("dragover", onDragOver); - document.addEventListener("dragleave", onDragLeave); - document.addEventListener("drop", onDrop); + document.addEventListener('dragover', onDragOver); + document.addEventListener('dragleave', onDragLeave); + document.addEventListener('drop', onDrop); }); onCleanup(() => { - document.removeEventListener("dragover", onDragOver); - document.removeEventListener("dragleave", onDragLeave); - document.removeEventListener("drop", onDrop); + document.removeEventListener('dragover', onDragOver); + document.removeEventListener('dragleave', onDragLeave); + document.removeEventListener('drop', onDrop); }); /** @@ -176,19 +174,19 @@ export function FileDropAnywhereCollector(props: Props) { animate={{ opacity: 1 }} transition={{ duration: 0.2 }} > - {q("dropFiles", items().length)} + {q('dropFiles', items().length)} </DropText> } > {(item) => ( <Switch fallback={<BiSolidFile size={64} />}> - <Match when={item.type.startsWith("text/")}> + <Match when={item.type.startsWith('text/')}> <BiSolidFileTxt size={64} /> </Match> - <Match when={item.type.startsWith("image/")}> + <Match when={item.type.startsWith('image/')}> <BiSolidFileImage size={64} /> </Match> - <Match when={item.type.startsWith("video/")}> + <Match when={item.type.startsWith('video/')}> <BiSolidVideoRecording size={64} /> </Match> </Switch> diff --git a/packages/client/components/ui/components/tools/files/FilePasteCollector.tsx b/packages/client/components/ui/components/tools/files/FilePasteCollector.tsx index 0475da8bc..7b1900392 100644 --- a/packages/client/components/ui/components/tools/files/FilePasteCollector.tsx +++ b/packages/client/components/ui/components/tools/files/FilePasteCollector.tsx @@ -1,4 +1,4 @@ -import { onCleanup, onMount } from "solid-js"; +import { onCleanup, onMount } from 'solid-js'; interface Props { /** @@ -18,11 +18,11 @@ export function FilePasteCollector(props: Props) { */ function onPaste(event: ClipboardEvent) { const items = event.clipboardData?.items; - if (typeof items === "undefined") return; + if (typeof items === 'undefined') return; // Filter for files const files: File[] = [...items] - .filter((item) => !item.type.startsWith("text/")) + .filter((item) => !item.type.startsWith('text/')) .map((item) => item.getAsFile()!) .filter((item) => item); @@ -32,8 +32,8 @@ export function FilePasteCollector(props: Props) { } } - onMount(() => document.addEventListener("paste", onPaste)); - onCleanup(() => document.removeEventListener("paste", onPaste)); + onMount(() => document.addEventListener('paste', onPaste)); + onCleanup(() => document.removeEventListener('paste', onPaste)); return <></>; } diff --git a/packages/client/components/ui/components/tools/files/index.ts b/packages/client/components/ui/components/tools/files/index.ts index 8aef99654..c7bbb8406 100644 --- a/packages/client/components/ui/components/tools/files/index.ts +++ b/packages/client/components/ui/components/tools/files/index.ts @@ -1,2 +1,2 @@ -export { FilePasteCollector } from "./FilePasteCollector"; -export { FileDropAnywhereCollector } from "./FileDropAnywhereCollector"; +export { FileDropAnywhereCollector } from './FileDropAnywhereCollector'; +export { FilePasteCollector } from './FilePasteCollector'; diff --git a/packages/client/components/ui/components/tools/index.ts b/packages/client/components/ui/components/tools/index.ts index f2de4d81c..979befea6 100644 --- a/packages/client/components/ui/components/tools/index.ts +++ b/packages/client/components/ui/components/tools/index.ts @@ -1,4 +1,4 @@ -export { InputElement } from "./InputElement"; -export { Form } from "./Form"; -export { Deferred } from "./Deferred"; -export * from "./files"; +export { Deferred } from './Deferred'; +export * from './files'; +export { Form } from './Form'; +export { InputElement } from './InputElement'; diff --git a/packages/client/components/ui/decorators/ContainerDecorator.tsx b/packages/client/components/ui/decorators/ContainerDecorator.tsx index 8e06e0dbf..cd13023ac 100644 --- a/packages/client/components/ui/decorators/ContainerDecorator.tsx +++ b/packages/client/components/ui/decorators/ContainerDecorator.tsx @@ -1,4 +1,4 @@ -import type { JSX } from "solid-js"; +import type { JSX } from 'solid-js'; /** * Create container around some element @@ -10,15 +10,15 @@ export default function makeContainerDecorator({ }: { width?: number; height?: number; - flex?: "col" | "row"; + flex?: 'col' | 'row'; }) { return (props: { children: JSX.Element }) => ( <div style={{ - "min-width": width ? `${width}px` : undefined, - "min-height": height ? `${height}px` : undefined, - display: flex ? "flex" : "block", - "flex-direction": flex === "col" ? "column" : undefined, + 'min-width': width ? `${width}px` : undefined, + 'min-height': height ? `${height}px` : undefined, + display: flex ? 'flex' : 'block', + 'flex-direction': flex === 'col' ? 'column' : undefined, }} > {props.children} diff --git a/packages/client/components/ui/decorators/FitContentDecorator.tsx b/packages/client/components/ui/decorators/FitContentDecorator.tsx index d5da534b6..95bd0360f 100644 --- a/packages/client/components/ui/decorators/FitContentDecorator.tsx +++ b/packages/client/components/ui/decorators/FitContentDecorator.tsx @@ -1,8 +1,8 @@ -import type { JSX } from "solid-js"; +import type { JSX } from 'solid-js'; /** * Create fit-content container around some content */ export default function FitContentDecorator(props: { children: JSX.Element }) { - return <div style={{ width: "fit-content" }}>{props.children}</div>; + return <div style={{ width: 'fit-content' }}>{props.children}</div>; } diff --git a/packages/client/components/ui/decorators/ResizeContainerDecorator.tsx b/packages/client/components/ui/decorators/ResizeContainerDecorator.tsx index 24eb31780..f20a2d264 100644 --- a/packages/client/components/ui/decorators/ResizeContainerDecorator.tsx +++ b/packages/client/components/ui/decorators/ResizeContainerDecorator.tsx @@ -1,4 +1,4 @@ -import type { JSX } from "solid-js"; +import type { JSX } from 'solid-js'; /** * Create resize container around some content @@ -9,12 +9,12 @@ export default function ResizeContentDecorator(props: { return ( <div style={{ - width: "460px", - height: "640px", - display: "flex", - "flex-direction": "column", - resize: "both", - overflow: "hidden", + width: '460px', + height: '640px', + display: 'flex', + 'flex-direction': 'column', + resize: 'both', + overflow: 'hidden', }} > {props.children} diff --git a/packages/client/components/ui/decorators/SvgDecorator.tsx b/packages/client/components/ui/decorators/SvgDecorator.tsx index af5dbfe11..80966ede5 100644 --- a/packages/client/components/ui/decorators/SvgDecorator.tsx +++ b/packages/client/components/ui/decorators/SvgDecorator.tsx @@ -1,4 +1,4 @@ -import type { JSX } from "solid-js"; +import type { JSX } from 'solid-js'; /** * Create SVG container around some content diff --git a/packages/client/components/ui/decorators/TextColourDecorator.tsx b/packages/client/components/ui/decorators/TextColourDecorator.tsx index 90f7c613b..ca4a50826 100644 --- a/packages/client/components/ui/decorators/TextColourDecorator.tsx +++ b/packages/client/components/ui/decorators/TextColourDecorator.tsx @@ -1,8 +1,8 @@ -import type { JSX } from "solid-js"; +import type { JSX } from 'solid-js'; /** * Set text colour to white for content */ export default function TextColourDecorator(props: { children: JSX.Element }) { - return <div style={{ color: "white" }}>{props.children}</div>; + return <div style={{ color: 'white' }}>{props.children}</div>; } diff --git a/packages/client/components/ui/directives/autoComplete.ts b/packages/client/components/ui/directives/autoComplete.ts index b1321fcff..3ea2550cd 100644 --- a/packages/client/components/ui/directives/autoComplete.ts +++ b/packages/client/components/ui/directives/autoComplete.ts @@ -1,45 +1,45 @@ -import { Accessor, JSX, createSignal, onCleanup } from "solid-js"; +import type { Channel, Client, User } from 'revolt.js'; +import { ServerMember } from 'revolt.js'; +import type { Accessor, JSX } from 'solid-js'; +import { createSignal, onCleanup } from 'solid-js'; -import { Channel, Client, ServerMember, User } from "revolt.js"; - -import emojiMapping from "../emojiMapping.json"; - -import { registerFloatingElement, unregisterFloatingElement } from "./floating"; +import emojiMapping from '../emojiMapping.json'; +import { registerFloatingElement, unregisterFloatingElement } from './floating'; const EMOJI_KEYS = Object.keys(emojiMapping).sort(); const MAPPED_EMOJI_KEYS = EMOJI_KEYS.map((id) => ({ id, name: id })); -type Operator = "@" | ":" | "#"; +type Operator = '@' | ':' | '#'; export type AutoCompleteState = | { - matched: "none"; + matched: 'none'; } | ({ length: number; } & ( | { - matched: "emoji"; + matched: 'emoji'; matches: (( | { - type: "unicode"; + type: 'unicode'; codepoint: string; } | { - type: "custom"; + type: 'custom'; id: string; } ) & { replacement: string; shortcode: string })[]; } | { - matched: "user"; + matched: 'user'; matches: { user: User | ServerMember; replacement: string; }[]; } | { - matched: "channel"; + matched: 'channel'; matches: { channel: Channel; replacement: string; @@ -54,12 +54,12 @@ export type AutoCompleteState = */ export function autoComplete( element: HTMLInputElement, - config: Accessor<JSX.Directives["autoComplete"]> + config: Accessor<JSX.Directives['autoComplete']> ) { if (!config()) return; const [state, setState] = createSignal<AutoCompleteState>({ - matched: "none", + matched: 'none', }); const [selection, setSelection] = createSignal(0); @@ -70,7 +70,7 @@ export function autoComplete( */ function select(index: number) { const info = state() as AutoCompleteState & { - matched: "emoji" | "user" | "member"; + matched: 'emoji' | 'user' | 'member'; }; const currentPosition = element.selectionStart; if (!currentPosition) return; @@ -84,16 +84,16 @@ export function autoComplete( element.value = originalValue.slice(0, currentPosition - info.length) + replacement + - " " + + ' ' + originalValue.slice(currentPosition); const newPosition = currentPosition - info.length + replacement.length + 1; - element.setSelectionRange(newPosition, newPosition, "none"); + element.setSelectionRange(newPosition, newPosition, 'none'); // Bubble up this change to the rest of the application, // we should do this directly through state in the future // but for now this will do. - element.dispatchEvent(new Event("input", { bubbles: true })); + element.dispatchEvent(new Event('input', { bubbles: true })); } // TODO: use a virtual element on the caret @@ -109,7 +109,7 @@ export function autoComplete( registerFloatingElement({ element, config: accessor, - show: () => (state().matched === "none" ? undefined : accessor()), + show: () => (state().matched === 'none' ? undefined : accessor()), hide: () => void 0, }); @@ -120,14 +120,14 @@ export function autoComplete( event: KeyboardEvent & { currentTarget: HTMLTextAreaElement } ) { const current = state(); - if (current.matched !== "none") { - if (event.key === "Enter") { + if (current.matched !== 'none') { + if (event.key === 'Enter') { event.preventDefault(); select(selection()); return; } - if (event.key === "ArrowUp") { + if (event.key === 'ArrowUp') { event.preventDefault(); setSelection( (prev) => (prev === 0 ? current.matches.length : prev) - 1 @@ -135,7 +135,7 @@ export function autoComplete( return; } - if (event.key === "ArrowDown") { + if (event.key === 'ArrowDown') { event.preventDefault(); setSelection( (prev) => (prev + 1 === current.matches.length ? -1 : prev) + 1 @@ -145,7 +145,7 @@ export function autoComplete( } const value = config(); - if (typeof value === "object") { + if (typeof value === 'object') { value.onKeyDown?.(event); } } @@ -156,8 +156,8 @@ export function autoComplete( function onKeyUp(event: unknown) { if (event instanceof KeyboardEvent) { const current = state(); - if (current.matched !== "none") { - if (["ArrowUp", "ArrowDown"].includes(event.key)) { + if (current.matched !== 'none') { + if (['ArrowUp', 'ArrowDown'].includes(event.key)) { return; } } @@ -168,7 +168,7 @@ export function autoComplete( const content = element.value.slice(0, cursor); // Try to figure out what we're matching - const current = (["@", ":", "#"] as Operator[]) + const current = (['@', ':', '#'] as Operator[]) // First find any applicable string .map((searchType) => { const index = content.lastIndexOf(searchType); @@ -184,7 +184,7 @@ export function autoComplete( .filter(([, matchedString]) => /^[^\s@:#]*$/.test(matchedString)) // Enforce minimum length for emoji matching .filter(([searchType, matchedString]) => - searchType === ":" ? matchedString.length > 0 : true + searchType === ':' ? matchedString.length > 0 : true )[0]; if (current) { @@ -194,9 +194,9 @@ export function autoComplete( } } - if (state().matched !== "none") + if (state().matched !== 'none') setState({ - matched: "none", + matched: 'none', }); } @@ -204,24 +204,24 @@ export function autoComplete( * Hide if currently showing if input loses focus */ function onBlur() { - if (state().matched !== "none") + if (state().matched !== 'none') setState({ - matched: "none", + matched: 'none', }); } - element.addEventListener("keydown", onKeyDown as never); - element.addEventListener("keyup", onKeyUp); - element.addEventListener("focus", onKeyUp); - element.addEventListener("blur", onBlur); + element.addEventListener('keydown', onKeyDown as never); + element.addEventListener('keyup', onKeyUp); + element.addEventListener('focus', onKeyUp); + element.addEventListener('blur', onBlur); onCleanup(() => { unregisterFloatingElement(element); - element.removeEventListener("keydown", onKeyDown as never); - element.removeEventListener("keyup", onKeyUp); - element.removeEventListener("focus", onKeyUp); - element.removeEventListener("blur", onBlur); + element.removeEventListener('keydown', onKeyDown as never); + element.removeEventListener('keyup', onKeyUp); + element.removeEventListener('focus', onKeyUp); + element.removeEventListener('blur', onBlur); }); } @@ -231,12 +231,12 @@ export function autoComplete( function searchMatches( operator: Operator, query: string, - config: JSX.Directives["autoComplete"] + config: JSX.Directives['autoComplete'] ): AutoCompleteState { - if (operator === ":") { + if (operator === ':') { const matches: string[] = []; - if (typeof config === "object" && config.client) { + if (typeof config === 'object' && config.client) { const searchSpace = [ ...MAPPED_EMOJI_KEYS, ...config.client.emojis.toList(), @@ -263,24 +263,24 @@ function searchMatches( if (!matches.length) { return { - matched: "none", + matched: 'none', }; } return { - matched: "emoji", + matched: 'emoji', length: query.length + 1, matches: matches.map((id) => id.length === 26 ? { - type: "custom", + type: 'custom', id, shortcode: (config as { client: Client }).client!.emojis.get(id)! .name, - replacement: ":" + id + ":", + replacement: ':' + id + ':', } : { - type: "unicode", + type: 'unicode', shortcode: id, codepoint: emojiMapping[id as keyof typeof emojiMapping], replacement: emojiMapping[id as keyof typeof emojiMapping], @@ -289,8 +289,8 @@ function searchMatches( }; } - if (typeof config === "object" && config.client) { - if (operator === "@") { + if (typeof config === 'object' && config.client) { + if (operator === '@') { const matches: (User | ServerMember)[] = []; const searchSpace = ( config.searchSpace?.members ?? @@ -314,7 +314,7 @@ function searchMatches( if (matches.length) { return { - matched: "user", + matched: 'user', length: query.length + 1, matches: matches.map((user) => ({ user, @@ -324,7 +324,7 @@ function searchMatches( } } - if (operator === "#") { + if (operator === '#') { const matches: Channel[] = []; const searchSpace = ( config.searchSpace?.channels ?? config.client.channels.toList() @@ -343,7 +343,7 @@ function searchMatches( if (matches.length) { return { - matched: "channel", + matched: 'channel', length: query.length + 1, matches: matches.map((channel) => ({ channel, @@ -355,6 +355,6 @@ function searchMatches( } return { - matched: "none", + matched: 'none', }; } diff --git a/packages/client/components/ui/directives/floating.ts b/packages/client/components/ui/directives/floating.ts index e9058d132..774f7a320 100644 --- a/packages/client/components/ui/directives/floating.ts +++ b/packages/client/components/ui/directives/floating.ts @@ -1,13 +1,13 @@ -import { Accessor, JSX, createSignal, onCleanup } from "solid-js"; +import { type Accessor, createSignal, type JSX, onCleanup } from 'solid-js'; -type Props = JSX.Directives["floating"] & object; +type Props = JSX.Directives['floating'] & object; -export type FloatingElement = { +export interface FloatingElement { config: () => Props; element: HTMLElement; hide: () => void; show: Accessor<Props | undefined>; -}; +} const [floatingElements, setFloatingElements] = createSignal<FloatingElement[]>( [] @@ -63,7 +63,7 @@ export function floating(element: HTMLElement, accessor: Accessor<Props>) { const current = show(); const config = accessor(); - if (target === "userCard" && config.userCard) { + if (target === 'userCard' && config.userCard) { if (current?.userCard) { setShow(undefined); } else if (!current) { @@ -74,7 +74,7 @@ export function floating(element: HTMLElement, accessor: Accessor<Props>) { } } - if (target === "tooltip" && config.tooltip) { + if (target === 'tooltip' && config.tooltip) { if (current?.tooltip) { if (desiredState !== true) { setShow(undefined); @@ -86,7 +86,7 @@ export function floating(element: HTMLElement, accessor: Accessor<Props>) { } } - if (target === "contextMenu" && config.contextMenu) { + if (target === 'contextMenu' && config.contextMenu) { if (current?.contextMenu) { setShow(undefined); } else if (!current) { @@ -103,7 +103,7 @@ export function floating(element: HTMLElement, accessor: Accessor<Props>) { */ function onClick() { // TODO: handle shift+click for mention - trigger("userCard"); + trigger('userCard'); } /** @@ -112,41 +112,41 @@ export function floating(element: HTMLElement, accessor: Accessor<Props>) { function onContextMenu(event: MouseEvent) { event.preventDefault(); event.stopPropagation(); - trigger("contextMenu"); + trigger('contextMenu'); } /** * Handle mouse entering */ function onMouseEnter() { - trigger("tooltip", true); + trigger('tooltip', true); } /** * Handle mouse leaving */ function onMouseLeave() { - trigger("tooltip", false); + trigger('tooltip', false); } if (config.userCard) { - element.style.cursor = "pointer"; - element.style.userSelect = "none"; - element.addEventListener("click", onClick); + element.style.cursor = 'pointer'; + element.style.userSelect = 'none'; + element.addEventListener('click', onClick); } if (config.tooltip) { element.ariaLabel = - typeof config.tooltip.content === "string" + typeof config.tooltip.content === 'string' ? config.tooltip.content : config.tooltip!.aria!; - element.addEventListener("mouseenter", onMouseEnter); - element.addEventListener("mouseleave", onMouseLeave); + element.addEventListener('mouseenter', onMouseEnter); + element.addEventListener('mouseleave', onMouseLeave); } if (config.contextMenu) { - element.addEventListener("contextmenu", onContextMenu); + element.addEventListener('contextmenu', onContextMenu); // TODO: iOS events for touch } @@ -154,16 +154,16 @@ export function floating(element: HTMLElement, accessor: Accessor<Props>) { unregisterFloatingElement(element); if (config.userCard) { - element.removeEventListener("click", onClick); + element.removeEventListener('click', onClick); } if (config.tooltip) { - element.removeEventListener("mouseenter", onMouseEnter); - element.removeEventListener("mouseleave", onMouseLeave); + element.removeEventListener('mouseenter', onMouseEnter); + element.removeEventListener('mouseleave', onMouseLeave); } if (config.contextMenu) { - element.removeEventListener("contextmenu", onContextMenu); + element.removeEventListener('contextmenu', onContextMenu); } }); } diff --git a/packages/client/components/ui/directives/index.ts b/packages/client/components/ui/directives/index.ts index 13f8077d2..92ae0e5b6 100644 --- a/packages/client/components/ui/directives/index.ts +++ b/packages/client/components/ui/directives/index.ts @@ -1,5 +1,5 @@ -export * from "./scrollable"; -export * from "./floating"; -export * from "./autoComplete"; -export * from "./ripple"; -export * from "./invisibleScrollable"; +export * from './autoComplete'; +export * from './floating'; +export * from './invisibleScrollable'; +export * from './ripple'; +export * from './scrollable'; diff --git a/packages/client/components/ui/directives/invisibleScrollable.ts b/packages/client/components/ui/directives/invisibleScrollable.ts index 1dc2e10eb..3fc7d2c0b 100644 --- a/packages/client/components/ui/directives/invisibleScrollable.ts +++ b/packages/client/components/ui/directives/invisibleScrollable.ts @@ -1,5 +1,5 @@ -import { Accessor, JSX } from "solid-js"; -import { css } from "solid-styled-components"; +import type { Accessor, JSX } from 'solid-js'; +import { css } from 'solid-styled-components'; /** * Add styles for an invisible scrollable container @@ -8,13 +8,13 @@ import { css } from "solid-styled-components"; */ export function invisibleScrollable( el: HTMLDivElement, - accessor: Accessor<JSX.Directives["invisibleScrollable"] & object> + accessor: Accessor<JSX.Directives['invisibleScrollable'] & object> ) { const props = accessor(); el.classList.add(css` will-change: transform; - ${"overflow-" + (props?.direction ?? "y")}: scroll; + ${'overflow-' + (props?.direction ?? 'y')}: scroll; scrollbar-width: none; @@ -24,6 +24,6 @@ export function invisibleScrollable( `); if (props.class) { - props.class.split(" ").forEach((cls) => el.classList.add(cls)); + props.class.split(' ').forEach((cls) => el.classList.add(cls)); } } diff --git a/packages/client/components/ui/directives/ripple.ts b/packages/client/components/ui/directives/ripple.ts index 00f02f64d..d3156823b 100644 --- a/packages/client/components/ui/directives/ripple.ts +++ b/packages/client/components/ui/directives/ripple.ts @@ -1,5 +1,6 @@ -import { Accessor, JSX, createEffect, on, onMount } from "solid-js"; -import { css, useTheme } from "solid-styled-components"; +import type { Accessor, JSX } from 'solid-js'; +import { createEffect, on, onMount } from 'solid-js'; +import { css, useTheme } from 'solid-styled-components'; /** * Add styles and events for ripple @@ -8,7 +9,7 @@ import { css, useTheme } from "solid-styled-components"; */ export function ripple( el: HTMLDivElement, - accessor: Accessor<JSX.Directives["ripple"] & object> + accessor: Accessor<JSX.Directives['ripple'] & object> ) { const props = accessor(); if (!props) return; @@ -18,40 +19,38 @@ export function ripple( // FIXME: there is a bug here if theme is changed, this class just disappears createEffect(() => { - el.classList.add( - css` - overflow: hidden; - position: relative; + el.classList.add(css` + overflow: hidden; + position: relative; - * { - z-index: 1; - } + * { + z-index: 1; + } - &::before { - content: " "; - position: absolute; - width: 100%; - height: 100%; + &::before { + content: ' '; + position: absolute; + width: 100%; + height: 100%; - opacity: 0; - z-index: 0; - transform: scale(2); - pointer-events: none; - background: ${theme.darkMode ? "white" : "black"}; + opacity: 0; + z-index: 0; + transform: scale(2); + pointer-events: none; + background: ${theme.darkMode ? 'white' : 'black'}; - transition: ${theme.transitions.fast}; - } + transition: ${theme.transitions.fast}; + } - &:hover::before { - opacity: ${theme.effects.ripple.hover.toString()}; - } - ` - ); + &:hover::before { + opacity: ${theme.effects.ripple.hover.toString()}; + } + `); - if (typeof props === "boolean" || props.enable) + if (typeof props === 'boolean' || props.enable) el.classList.add(css` &::after { - content: " "; + content: ' '; position: absolute; width: 100%; aspect-ratio: 1; @@ -60,7 +59,7 @@ export function ripple( border-radius: 50%; transform: scale(0); pointer-events: none; - background: ${theme.darkMode ? "white" : "black"}; + background: ${theme.darkMode ? 'white' : 'black'}; opacity: ${theme.effects.ripple.hover.toString()}; transition: ${theme.transitions.medium}; diff --git a/packages/client/components/ui/directives/scrollable.ts b/packages/client/components/ui/directives/scrollable.ts index 2e185201b..71f8138a6 100644 --- a/packages/client/components/ui/directives/scrollable.ts +++ b/packages/client/components/ui/directives/scrollable.ts @@ -1,5 +1,5 @@ -import { Accessor, JSX, onCleanup } from "solid-js"; -import { css, useTheme } from "solid-styled-components"; +import { type Accessor, type JSX, onCleanup } from 'solid-js'; +import { css, useTheme } from 'solid-styled-components'; /** * Add styles and events for a scrollable container @@ -8,7 +8,7 @@ import { css, useTheme } from "solid-styled-components"; */ export function scrollable( el: HTMLDivElement, - accessor: Accessor<JSX.Directives["scrollable"] & object> + accessor: Accessor<JSX.Directives['scrollable'] & object> ) { const props = accessor(); if (!props) return; @@ -17,29 +17,29 @@ export function scrollable( el.classList.add(css` will-change: transform; - ${props.offsetTop ? "padding-top: " + props.offsetTop + "px;" : ""} - ${"overflow-" + (props?.direction ?? "y")}: scroll; - ${"overflow-" + ((props?.direction ?? "y") === "y" ? "x" : "y")}: hidden; + ${props.offsetTop ? 'padding-top: ' + props.offsetTop + 'px;' : ''} + ${'overflow-' + (props?.direction ?? 'y')}: scroll; + ${'overflow-' + ((props?.direction ?? 'y') === 'y' ? 'x' : 'y')}: hidden; - scrollbar-width: ${props?.showOnHover ? "none" : "initial"}; + scrollbar-width: ${props?.showOnHover ? 'none' : 'initial'}; scrollbar-color: ${props.foreground ?? - theme!.colours["component-scrollbar-foreground"]} - ${props.background ?? theme!.colours["component-scrollbar-background"]}; + theme!.colours['component-scrollbar-foreground']} + ${props.background ?? theme!.colours['component-scrollbar-background']}; &::-webkit-scrollbar { width: 8px; height: 8px; - ${props?.showOnHover ? "display: none;" : ""} + ${props?.showOnHover ? 'display: none;' : ''} } &::-webkit-scrollbar-track { background: ${props.background ?? - theme!.colours["component-scrollbar-background"]}; + theme!.colours['component-scrollbar-background']}; } &::-webkit-scrollbar-thumb { background: ${props.foreground ?? - theme!.colours["component-scrollbar-foreground"]}; + theme!.colours['component-scrollbar-foreground']}; background-clip: content-box; border: 1px solid transparent; @@ -49,7 +49,7 @@ export function scrollable( `); if (props.class) { - props.class.split(" ").forEach((cls) => el.classList.add(cls)); + props.class.split(' ').forEach((cls) => el.classList.add(cls)); } if (props.showOnHover) { @@ -75,12 +75,12 @@ export function scrollable( el.classList.remove(showClass); }; - el.addEventListener("mouseenter", onMouseEnter); - el.addEventListener("mouseleave", onMouseLeave); + el.addEventListener('mouseenter', onMouseEnter); + el.addEventListener('mouseleave', onMouseLeave); onCleanup(() => { - el.removeEventListener("mouseenter", onMouseEnter); - el.removeEventListener("mouseleave", onMouseLeave); + el.removeEventListener('mouseenter', onMouseEnter); + el.removeEventListener('mouseleave', onMouseLeave); }); } } diff --git a/packages/client/components/ui/index.tsx b/packages/client/components/ui/index.tsx index d7cad9db4..3f56c64ce 100644 --- a/packages/client/components/ui/index.tsx +++ b/packages/client/components/ui/index.tsx @@ -1,24 +1,17 @@ -import { Component, createEffect } from "solid-js"; -import type { JSX } from "solid-js"; -import { useTheme } from "solid-styled-components"; -import { DirectiveProvider } from "solid-styled-components"; +import type { Placement } from '@floating-ui/dom'; +import type { Channel, Client, ServerMember, User } from 'revolt.js'; +import type { Component, JSX } from 'solid-js'; +import { createEffect } from 'solid-js'; +import { useTheme } from 'solid-styled-components'; +import { DirectiveProvider } from 'solid-styled-components'; -import { Placement } from "@floating-ui/dom"; -import { Channel, Client, ServerMember, User } from "revolt.js"; +import type { AutoCompleteState } from './directives'; +import { autoComplete, floating, ripple, scrollable } from './directives'; -import { - AutoCompleteState, - autoComplete, - floating, - ripple, - scrollable, -} from "./directives"; - -export * from "./components"; -export { darkTheme } from "./themes/darkTheme"; - -export { ThemeProvider, styled, useTheme } from "solid-styled-components"; -export type { DefaultTheme } from "solid-styled-components"; +export * from './components'; +export { darkTheme } from './themes/darkTheme'; +export type { DefaultTheme } from 'solid-styled-components'; +export { styled, ThemeProvider, useTheme } from 'solid-styled-components'; /** * Generate SVG props to configure icon size @@ -30,7 +23,7 @@ export function iconSize(size: string | number, viewBox?: string) { return { width: size, height: size, - viewBox: viewBox ?? "0 0 24 24", + viewBox: viewBox ?? '0 0 24 24', }; } @@ -41,10 +34,10 @@ export function ProvideDirectives(props: { children: JSX.Element }) { return ( <DirectiveProvider directives={{ - "use:floating": floating, - "use:scrollable": scrollable, - "use:autoComplete": autoComplete, - "use:ripple": ripple, + 'use:floating': floating, + 'use:scrollable': scrollable, + 'use:autoComplete': autoComplete, + 'use:ripple': ripple, }} > {props.children} @@ -61,162 +54,34 @@ export function ApplyGlobalStyles() { createEffect(() => { // Inject common theme styles Object.assign(document.body.style, { - "font-family": theme.fonts.primary, + 'font-family': theme.fonts.primary, background: theme.colours.background, color: theme.colours.foreground, }); // Set default emoji size - document.body.style.setProperty("--emoji-size", theme.layout.emoji.small); + document.body.style.setProperty('--emoji-size', theme.layout.emoji.small); // Unset variables - document.body.style.setProperty("--unset-fg", "red"); + document.body.style.setProperty('--unset-fg', 'red'); document.body.style.setProperty( - "--unset-bg", - "repeating-conic-gradient(red 0% 25%, transparent 0% 50%) 50% / 5px 5px" + '--unset-bg', + 'repeating-conic-gradient(red 0% 25%, transparent 0% 50%) 50% / 5px 5px' ); // Inject all theme properties function recursivelyInject(key: string, obj: any) { - if (typeof obj === "object") { + if (typeof obj === 'object') { for (const subkey of Object.keys(obj)) { - recursivelyInject(key + "-" + subkey, obj[subkey]); + recursivelyInject(key + '-' + subkey, obj[subkey]); } } else { document.body.style.setProperty(`-${key}`, obj); } } - recursivelyInject("", theme); + recursivelyInject('', theme); }); return <></>; } - -/** - * Export directive typing - */ -declare module "solid-js" { - // eslint-disable-next-line - namespace JSX { - interface Directives { - ripple: - | true - | { - enable: boolean; - - /** - * Pass-through class names - */ - class?: string; - }; - scrollable: - | true - | { - /** - * Scroll direction - */ - direction?: "x" | "y"; - - /** - * Offset to apply to top of scroll container - */ - offsetTop?: number; - - /** - * Whether to only show scrollbar on hover - */ - showOnHover?: boolean; - - /** - * Pass-through class names - */ - class?: string; - - /** - * Set custom foreground on track - */ - foreground?: string; - - /** - * Set custom background on track - */ - background?: string; - }; - invisibleScrollable: - | true - | { - /** - * Scroll direction - */ - direction?: "x" | "y"; - - /** - * Pass-through class names - */ - class?: string; - }; - floating: { - tooltip?: { - /** - * Where the tooltip should be placed - */ - placement: Placement; - } & ( - | { - /** - * Tooltip content - */ - content: Component; - - /** - * Aria label fallback - */ - aria: string; - } - | { - /** - * Tooltip content - */ - content: string | undefined; - - /** - * Content is used as aria fallback - */ - aria?: undefined; - } - ); - userCard?: { - /** - * User to display - */ - user: User; - - /** - * Member to display - */ - member?: ServerMember; - }; - contextMenu?: Component; - autoComplete?: { - state: Accessor<AutoCompleteState>; - selection: Accessor<number>; - select: (index: number) => void; - }; - }; - autoComplete: - | true - | { - client?: Client; - onKeyDown?: ( - event: KeyboardEvent & { currentTarget: HTMLTextAreaElement } - ) => void; - searchSpace?: { - users?: User[]; - members?: ServerMember[]; - channels?: Channel[]; - }; - }; - } - } -} diff --git a/packages/client/components/ui/styled.d.ts b/packages/client/components/ui/styled.d.ts index 80878b1f9..901984134 100644 --- a/packages/client/components/ui/styled.d.ts +++ b/packages/client/components/ui/styled.d.ts @@ -1,16 +1,16 @@ -import "solid-styled-components"; +import 'solid-styled-components'; import type { ColorGroup, CustomColorGroup, Scheme, TonalPalette, -} from "@material/material-color-utilities"; +} from '@material/material-color-utilities'; /** * Declare our custom theme options */ -declare module "solid-styled-components" { +declare module 'solid-styled-components' { export interface DefaultTheme { /* colour(base: keyof Scheme, tone?: number): string; scheme: Record<keyof Scheme, string>; @@ -18,166 +18,166 @@ declare module "solid-styled-components" { darkMode: boolean; customColours: Record< | `status-${ - | "online" - | "idle" - | "focus" - | "busy" - | "streaming" - | "invisible"}` - | "success" - | "warning" - | "error", + | 'online' + | 'idle' + | 'focus' + | 'busy' + | 'streaming' + | 'invisible'}` + | 'success' + | 'warning' + | 'error', Record<keyof ColorGroup, string> >; colours: { [key in - | "background" - | "foreground" + | 'background' + | 'foreground' | `component-${ - | `${"fab" | "checkbox" | "scrollbar"}-${ - | "background" - | "foreground"}` - | "checkbox-foreground-check" - | "chip-background" - | `btn-${"background" | "foreground"}-${"primary" | "secondary"}` - | `btn-foreground-${"plain" | "plain-secondary"}` - | `menubtn-${"default" | "selected" | "muted" | "hover"}-${ - | "background" - | "foreground"}` - | `input-${"foreground" | "focus"}` - | `input-${"background" | "hover"}-${"primary" | "secondary"}` + | `${'fab' | 'checkbox' | 'scrollbar'}-${ + | 'background' + | 'foreground'}` + | 'checkbox-foreground-check' + | 'chip-background' + | `btn-${'background' | 'foreground'}-${'primary' | 'secondary'}` + | `btn-foreground-${'plain' | 'plain-secondary'}` + | `menubtn-${'default' | 'selected' | 'muted' | 'hover'}-${ + | 'background' + | 'foreground'}` + | `input-${'foreground' | 'focus'}` + | `input-${'background' | 'hover'}-${'primary' | 'secondary'}` | `categorybtn-${ - | "background" - | "foreground" - | "foreground-description" - | `background-${"icon" | "collapse" | "hover" | "active"}`}` - | `modal-${"background" | "foreground"}` - | `avatar-fallback${"-contrast" | ""}-${ - | "background" - | "foreground"}` + | 'background' + | 'foreground' + | 'foreground-description' + | `background-${'icon' | 'collapse' | 'hover' | 'active'}`}` + | `modal-${'background' | 'foreground'}` + | `avatar-fallback${'-contrast' | ''}-${ + | 'background' + | 'foreground'}` | `context-menu-${ - | "background" - | "foreground" - | "item-hover-background" - | "divider" - | "shadow"}` - | `key-${"background" | "foreground"}` - | `combo-${"focus" | "background" | "foreground"}`}` + | 'background' + | 'foreground' + | 'item-hover-background' + | 'divider' + | 'shadow'}` + | `key-${'background' | 'foreground'}` + | `combo-${'focus' | 'background' | 'foreground'}`}` | `preloader-foreground` | `sidebar-${ - | "header-transparent-background" - | "server-list-foreground" - | "channels-category-foreground" + | 'header-transparent-background' + | 'server-list-foreground' + | 'channels-category-foreground' | `${ - | "channels" - | "members" - | "header" - | "header-with-image-text"}-${"background" | "foreground"}`}` + | 'channels' + | 'members' + | 'header' + | 'header-with-image-text'}-${'background' | 'foreground'}`}` | `messaging-${ - | `indicator-${"background" | "foreground"}` - | `indicator-reply-${"enabled" | "disabled"}` - | `upload-${"file-background" | "file-foreground" | "divider"}` - | `message-box-${"background" | "foreground"}` + | `indicator-${'background' | 'foreground'}` + | `indicator-reply-${'enabled' | 'disabled'}` + | `upload-${'file-background' | 'file-foreground' | 'divider'}` + | `message-box-${'background' | 'foreground'}` | `message-mentioned-background` | `component-${`${ - | "blocked-message" - | "code-block" - | "blockquote" - | "text-embed" - | "attachment" - | "code-block-language" - | "message-divider" - | "message-divider-unread" - | "reaction" - | "reaction-selected" - | "mention"}-${"background" | "foreground"}`}`}` + | 'blocked-message' + | 'code-block' + | 'blockquote' + | 'text-embed' + | 'attachment' + | 'code-block-language' + | 'message-divider' + | 'message-divider-unread' + | 'reaction' + | 'reaction-selected' + | 'mention'}-${'background' | 'foreground'}`}`}` | `settings-${ - | "background" - | "foreground" - | `content-${"background" | "foreground" | "scroll-thumb"}` - | `close-anchor${"" | "-hover"}` + | 'background' + | 'foreground' + | `content-${'background' | 'foreground' | 'scroll-thumb'}` + | `close-anchor${'' | '-hover'}` | `sidebar-${ - | "category" - | "foreground" - | `button-${"hover" | "active"}`}`}` + | 'category' + | 'foreground' + | `button-${'hover' | 'active'}`}`}` | `temp-1`]: string; }; rgb: { - [key in "header" | "typing-indicator"]: string; + [key in 'header' | 'typing-indicator']: string; }; breakpoints: { - [key in "sm" | "md" | "lg" | "xl"]: string; + [key in 'sm' | 'md' | 'lg' | 'xl']: string; }; borderRadius: { - [key in "sm" | "md" | "lg" | "xl" | "xxl" | "full"]: string; + [key in 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | 'full']: string; }; gap: { [key in - | "none" - | "xxs" - | "xs" - | "s" - | "sm" - | "md" - | "l" - | "lg" - | "x" - | "xl" - | "xxl"]: string; + | 'none' + | 'xxs' + | 'xs' + | 's' + | 'sm' + | 'md' + | 'l' + | 'lg' + | 'x' + | 'xl' + | 'xxl']: string; }; fonts: { - [key in "primary" | "monospace"]: string; + [key in 'primary' | 'monospace']: string; }; typography: { [key in - | "label" - | "chip" - | "username" - | "status" - | "tooltip" - | "category" - | "menu-button" - | "messages" - | "reply" - | "composition-file-upload-name" - | "composition-file-upload-size" - | "composition-typing-indicator" - | "conversation-channel-name" - | "conversation-start" - | "conversation-indicator" - | "system-message" - | "sidebar-title" - | "channel-topic" - | "settings-title" - | "settings-account-username" - | "settings-account-card-title" - | "settings-account-card-subtitle" - | "modal-title" - | "modal-description" - | "home-page-title" - | "legacy-settings-title" - | "small" - | "legacy-modal-title" - | "legacy-settings-section-title" - | "legacy-modal-title-2" - | "legacy-settings-description"]: { + | 'label' + | 'chip' + | 'username' + | 'status' + | 'tooltip' + | 'category' + | 'menu-button' + | 'messages' + | 'reply' + | 'composition-file-upload-name' + | 'composition-file-upload-size' + | 'composition-typing-indicator' + | 'conversation-channel-name' + | 'conversation-start' + | 'conversation-indicator' + | 'system-message' + | 'sidebar-title' + | 'channel-topic' + | 'settings-title' + | 'settings-account-username' + | 'settings-account-card-title' + | 'settings-account-card-subtitle' + | 'modal-title' + | 'modal-description' + | 'home-page-title' + | 'legacy-settings-title' + | 'small' + | 'legacy-modal-title' + | 'legacy-settings-section-title' + | 'legacy-modal-title-2' + | 'legacy-settings-description']: { [key in - | "margin" - | "fontWeight" - | "fontSize" - | "lineHeight" - | "textTransform"]?: number | string; + | 'margin' + | 'fontWeight' + | 'fontSize' + | 'lineHeight' + | 'textTransform']?: number | string; } & { - element?: "h1" | "h2" | "h3" | "h4" | "h5" | "span" | "div" | "label"; - colour?: keyof DefaultTheme["colours"]; + element?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'span' | 'div' | 'label'; + colour?: keyof DefaultTheme['colours']; }; }; transitions: { - [key in "fast" | "medium"]: string; + [key in 'fast' | 'medium']: string; }; effects: { blur: { - [key in "md"]: string; + [key in 'md']: string; }; ripple: { hover: number; @@ -193,23 +193,23 @@ declare module "solid-styled-components" { }; layout: { width: { - [key in "channel-sidebar"]: string; + [key in 'channel-sidebar']: string; }; height: { [key in - | "header" - | "tall-header" - | "message-box" - | "attachment-preview"]: string; + | 'header' + | 'tall-header' + | 'message-box' + | 'attachment-preview']: string; }; attachments: { - [key in `${"min" | "max"}-${"width" | "height"}`]: string; + [key in `${'min' | 'max'}-${'width' | 'height'}`]: string; }; emoji: { - [key in "small" | "medium" | "large"]: string; + [key in 'small' | 'medium' | 'large']: string; }; zIndex: { - [key in "floating-bar" | "modal" | "floating-element"]: number; + [key in 'floating-bar' | 'modal' | 'floating-element']: number; }; }; } diff --git a/packages/client/components/ui/styles.ts b/packages/client/components/ui/styles.ts index fed29db17..46dea4530 100644 --- a/packages/client/components/ui/styles.ts +++ b/packages/client/components/ui/styles.ts @@ -1 +1 @@ -import "./styles.css"; +import './styles.css'; diff --git a/packages/client/components/ui/themes/darkTheme.ts b/packages/client/components/ui/themes/darkTheme.ts index 5fc97454b..b6f7ce9cb 100644 --- a/packages/client/components/ui/themes/darkTheme.ts +++ b/packages/client/components/ui/themes/darkTheme.ts @@ -1,14 +1,12 @@ -import { DefaultTheme } from "solid-styled-components"; - +import type { ColorGroup, Scheme } from '@material/material-color-utilities'; import { - ColorGroup, - Hct, - Scheme, - TonalPalette, argbFromHex, + Hct, hexFromArgb, themeFromSourceColor, -} from "@material/material-color-utilities"; + TonalPalette, +} from '@material/material-color-utilities'; +import type { DefaultTheme } from 'solid-styled-components'; /** * Convert a scheme to usable hex colours @@ -24,7 +22,7 @@ function schemeToHex(scheme: Scheme) { Object.getOwnPropertyDescriptors(Object.getPrototypeOf(scheme)) ) as (keyof Scheme)[] ) - .filter((key) => typeof scheme[key] === "number") + .filter((key) => typeof scheme[key] === 'number') .forEach((key) => { const colour = Hct.fromInt(scheme[key] as number); hexScheme[key] = hexFromArgb(colour.toInt()); @@ -48,7 +46,7 @@ function hexToRgb(v: string) { export const darkTheme: ( accentColour?: string, darkMode?: boolean -) => DefaultTheme = (accentColour = "#FF5733", darkMode = false) => { +) => DefaultTheme = (accentColour = '#FF5733', darkMode = false) => { // const hex = "#d59ff5"; // const hex = "#FF7F50"; // const hex = "#B4CBAF"; // Green @@ -57,60 +55,60 @@ export const darkTheme: ( // const darkMode = false; const theme = themeFromSourceColor(argbFromHex(accentColour), [ { - name: "success", - value: argbFromHex("#65E572"), + name: 'success', + value: argbFromHex('#65E572'), blend: true, }, { - name: "warning", - value: argbFromHex("#FAA352"), + name: 'warning', + value: argbFromHex('#FAA352'), blend: true, }, { - name: "error", - value: argbFromHex("#FF3322"), + name: 'error', + value: argbFromHex('#FF3322'), blend: true, }, ]); const customColours = { - "status-online": { - color: "#3ABF7E", - onColor: "black", + 'status-online': { + color: '#3ABF7E', + onColor: 'black', }, - "status-idle": { - color: "#F39F00", - onColor: "black", + 'status-idle': { + color: '#F39F00', + onColor: 'black', }, - "status-focus": { - color: "#4799F0", - onColor: "black", + 'status-focus': { + color: '#4799F0', + onColor: 'black', }, - "status-busy": { - color: "#F84848", - onColor: "white", + 'status-busy': { + color: '#F84848', + onColor: 'white', }, - "status-invisible": { - color: "#A5A5A5", - onColor: "black", + 'status-invisible': { + color: '#A5A5A5', + onColor: 'black', }, } as Record< | `status-${ - | "online" - | "idle" - | "focus" - | "busy" - | "streaming" - | "invisible"}` - | "success" - | "warning" - | "error", + | 'online' + | 'idle' + | 'focus' + | 'busy' + | 'streaming' + | 'invisible'}` + | 'success' + | 'warning' + | 'error', Record<keyof ColorGroup, string> >; for (const c of theme.customColors) { const output: Record<string, string> = {}; - const source = c[darkMode ? "dark" : "light"] as unknown as Record< + const source = c[darkMode ? 'dark' : 'light'] as unknown as Record< string, number >; @@ -124,7 +122,7 @@ export const darkTheme: ( ] = output as Record<keyof ColorGroup, string>; } - const materialTheme = schemeToHex(theme.schemes[darkMode ? "dark" : "light"]); + const materialTheme = schemeToHex(theme.schemes[darkMode ? 'dark' : 'light']); function materialColour(base: keyof Scheme, tone?: number) { return tone @@ -138,133 +136,133 @@ export const darkTheme: ( darkMode, colours: { // Global - background: materialColour("background"), - foreground: materialColour("onBackground"), + background: materialColour('background'), + foreground: materialColour('onBackground'), // Component: Button - "component-btn-background-primary": materialColour("primary"), - "component-btn-foreground-primary": materialColour("onBackground", 98), - "component-btn-background-secondary": materialColour("surfaceVariant"), - "component-btn-foreground-secondary": materialColour( - "onSurfaceVariant", + 'component-btn-background-primary': materialColour('primary'), + 'component-btn-foreground-primary': materialColour('onBackground', 98), + 'component-btn-background-secondary': materialColour('surfaceVariant'), + 'component-btn-foreground-secondary': materialColour( + 'onSurfaceVariant', 30 ), - "component-btn-foreground-plain": materialColour("onBackground"), - "component-btn-foreground-plain-secondary": materialColour( - "onBackground", + 'component-btn-foreground-plain': materialColour('onBackground'), + 'component-btn-foreground-plain-secondary': materialColour( + 'onBackground', 40 ), // Component: Menu Button - "component-menubtn-default-background": "transparent", - "component-menubtn-default-foreground": materialColour( - "onSurfaceVariant", + 'component-menubtn-default-background': 'transparent', + 'component-menubtn-default-foreground': materialColour( + 'onSurfaceVariant', 55 ), - "component-menubtn-selected-background": materialColour("surfaceVariant"), - "component-menubtn-selected-foreground": materialColour( - "onSurfaceVariant", + 'component-menubtn-selected-background': materialColour('surfaceVariant'), + 'component-menubtn-selected-foreground': materialColour( + 'onSurfaceVariant', 30 ), - "component-menubtn-muted-background": "transparent", - "component-menubtn-muted-foreground": materialColour( - "onSurfaceVariant", + 'component-menubtn-muted-background': 'transparent', + 'component-menubtn-muted-foreground': materialColour( + 'onSurfaceVariant', 45 ), - "component-menubtn-hover-background": materialColour("surfaceVariant"), // DEPRECATE - "component-menubtn-hover-foreground": materialColour( + 'component-menubtn-hover-background': materialColour('surfaceVariant'), // DEPRECATE + 'component-menubtn-hover-foreground': materialColour( // DEPRECATE - "onSurfaceVariant", + 'onSurfaceVariant', 25 ), // Component: Input - "component-input-focus": materialColour("primary"), - "component-input-foreground": materialColour("onBackground"), - "component-input-background-primary": materialColour("background", 100), - "component-input-background-secondary": materialColour("background", 98), - "component-input-hover-primary": materialColour("background", 98), // DEPRECATE? - "component-input-hover-secondary": materialColour("background", 100), // DEPRECATE? + 'component-input-focus': materialColour('primary'), + 'component-input-foreground': materialColour('onBackground'), + 'component-input-background-primary': materialColour('background', 100), + 'component-input-background-secondary': materialColour('background', 98), + 'component-input-hover-primary': materialColour('background', 98), // DEPRECATE? + 'component-input-hover-secondary': materialColour('background', 100), // DEPRECATE? // Component: Chip - "component-chip-background": materialColour("secondary", 96), + 'component-chip-background': materialColour('secondary', 96), // Component: Checkbox - "component-checkbox-background": materialColour("primary", 92), - "component-checkbox-foreground": materialColour("primary"), - "component-checkbox-foreground-check": materialColour("onPrimary"), + 'component-checkbox-background': materialColour('primary', 92), + 'component-checkbox-foreground': materialColour('primary'), + 'component-checkbox-foreground-check': materialColour('onPrimary'), // Component: FAB - "component-fab-background": materialColour("primary"), - "component-fab-foreground": materialColour("primary", 90), + 'component-fab-background': materialColour('primary'), + 'component-fab-foreground': materialColour('primary', 90), // Component: Scrollbar - "component-scrollbar-background": "transparent", - "component-scrollbar-foreground": materialColour("primary", 85), + 'component-scrollbar-background': 'transparent', + 'component-scrollbar-foreground': materialColour('primary', 85), // Component: Category Button - "component-categorybtn-background": materialColour("background", 99), - "component-categorybtn-background-icon": materialColour("primary", 90), - "component-categorybtn-background-collapse": materialColour( - "background", + 'component-categorybtn-background': materialColour('background', 99), + 'component-categorybtn-background-icon': materialColour('primary', 90), + 'component-categorybtn-background-collapse': materialColour( + 'background', 97 ), - "component-categorybtn-background-hover": materialColour( - "background", + 'component-categorybtn-background-hover': materialColour( + 'background', 100 ), - "component-categorybtn-background-active": materialColour( - "background", + 'component-categorybtn-background-active': materialColour( + 'background', 94 ), - "component-categorybtn-foreground": materialColour("onBackground", 10), - "component-categorybtn-foreground-description": materialColour( - "onBackground", + 'component-categorybtn-foreground': materialColour('onBackground', 10), + 'component-categorybtn-foreground-description': materialColour( + 'onBackground', 30 ), // Component: Modal - "component-modal-background": materialColour("secondary", 96), - "component-modal-foreground": materialColour("onBackground"), + 'component-modal-background': materialColour('secondary', 96), + 'component-modal-foreground': materialColour('onBackground'), // Component: Avatar (Fallback) - "component-avatar-fallback-background": materialColour( - "onBackground", + 'component-avatar-fallback-background': materialColour( + 'onBackground', 94 ), - "component-avatar-fallback-foreground": materialColour("onBackground"), - "component-avatar-fallback-contrast-background": - materialColour("primary"), - "component-avatar-fallback-contrast-foreground": - materialColour("onPrimary"), + 'component-avatar-fallback-foreground': materialColour('onBackground'), + 'component-avatar-fallback-contrast-background': + materialColour('primary'), + 'component-avatar-fallback-contrast-foreground': + materialColour('onPrimary'), // Component: Context Menu - "component-context-menu-background": materialColour("surfaceVariant", 97), - "component-context-menu-foreground": materialColour("onSurface"), - "component-context-menu-item-hover-background": materialColour( - "surfaceVariant", + 'component-context-menu-background': materialColour('surfaceVariant', 97), + 'component-context-menu-foreground': materialColour('onSurface'), + 'component-context-menu-item-hover-background': materialColour( + 'surfaceVariant', 92 ), - "component-context-menu-divider": materialColour("onSurface", 92), - "component-context-menu-shadow": "#0004", + 'component-context-menu-divider': materialColour('onSurface', 92), + 'component-context-menu-shadow': '#0004', // Component: Key - "component-key-background": materialColour("secondary"), - "component-key-foreground": materialColour("onSecondary"), + 'component-key-background': materialColour('secondary'), + 'component-key-foreground': materialColour('onSecondary'), // Component: Combo Box - "component-combo-focus": materialColour("primary"), - "component-combo-foreground": materialColour("onBackground"), - "component-combo-background": materialColour("background", 100), + 'component-combo-focus': materialColour('primary'), + 'component-combo-foreground': materialColour('onBackground'), + 'component-combo-background': materialColour('background', 100), // Component: Preloader - "preloader-foreground": materialColour("primary"), + 'preloader-foreground': materialColour('primary'), // Sidebar // TODO: figure this out // works better for both dark and light theme but more muted: - "sidebar-channels-background": materialColour("onBackground", 94), - "sidebar-channels-foreground": materialColour("onPrimaryContainer"), - "sidebar-members-background": materialColour("onBackground", 94), - "sidebar-members-foreground": materialColour("onPrimaryContainer"), - "sidebar-header-background": materialColour("onBackground", 94), - "sidebar-header-foreground": materialColour("onPrimaryContainer"), - "sidebar-header-transparent-background": `rgba(${hexToRgb( - materialColour("onBackground", 94) + 'sidebar-channels-background': materialColour('onBackground', 94), + 'sidebar-channels-foreground': materialColour('onPrimaryContainer'), + 'sidebar-members-background': materialColour('onBackground', 94), + 'sidebar-members-foreground': materialColour('onPrimaryContainer'), + 'sidebar-header-background': materialColour('onBackground', 94), + 'sidebar-header-foreground': materialColour('onPrimaryContainer'), + 'sidebar-header-transparent-background': `rgba(${hexToRgb( + materialColour('onBackground', 94) )}, 0.75)`, - "sidebar-header-with-image-text-background": `rgba(${hexToRgb( - materialColour("onBackground") + 'sidebar-header-with-image-text-background': `rgba(${hexToRgb( + materialColour('onBackground') )}, 0.5)`, - "sidebar-header-with-image-text-foreground": materialColour("background"), - "sidebar-server-list-foreground": materialColour("onBackground", 80), - "sidebar-channels-category-foreground": materialColour( - "onSurfaceVariant", + 'sidebar-header-with-image-text-foreground': materialColour('background'), + 'sidebar-server-list-foreground': materialColour('onBackground', 80), + 'sidebar-channels-category-foreground': materialColour( + 'onSurfaceVariant', 60 ), // OR balls to the wall: (but dark mode gets fucked) @@ -284,123 +282,123 @@ export const darkTheme: ( // "sidebar-server-list-foreground": materialColour("onBackground", 80), // Messaging: Interface - "messaging-indicator-background": `rgba(${hexToRgb( - materialColour("background", 94) + 'messaging-indicator-background': `rgba(${hexToRgb( + materialColour('background', 94) )}, 0.50)`, - "messaging-indicator-foreground": materialColour("onBackground"), - "messaging-indicator-reply-enabled": materialColour("primary"), - "messaging-indicator-reply-disabled": materialColour("onBackground", 60), - "messaging-upload-file-background": materialColour("surfaceVariant", 80), - "messaging-upload-file-foreground": materialColour("onBackground", 98), - "messaging-upload-divider": materialColour("primary", 85), - "messaging-message-box-background": materialColour("onBackground", 94), - "messaging-message-box-foreground": materialColour("onPrimaryContainer"), - "messaging-message-mentioned-background": materialColour( - "surfaceVariant", + 'messaging-indicator-foreground': materialColour('onBackground'), + 'messaging-indicator-reply-enabled': materialColour('primary'), + 'messaging-indicator-reply-disabled': materialColour('onBackground', 60), + 'messaging-upload-file-background': materialColour('surfaceVariant', 80), + 'messaging-upload-file-foreground': materialColour('onBackground', 98), + 'messaging-upload-divider': materialColour('primary', 85), + 'messaging-message-box-background': materialColour('onBackground', 94), + 'messaging-message-box-foreground': materialColour('onPrimaryContainer'), + 'messaging-message-mentioned-background': materialColour( + 'surfaceVariant', 97 ), // "messaging-message-box-background": materialColour("primaryContainer"), // "messaging-message-box-foreground": materialColour("onPrimaryContainer"), // Messaging: Components - "messaging-component-blocked-message-background": "transparent", - "messaging-component-blocked-message-foreground": materialColour( - "onBackground", + 'messaging-component-blocked-message-background': 'transparent', + 'messaging-component-blocked-message-foreground': materialColour( + 'onBackground', 60 ), - "messaging-component-code-block-background": - materialColour("surfaceVariant"), - "messaging-component-code-block-foreground": - materialColour("onSurfaceVariant"), - "messaging-component-code-block-language-background": - materialColour("primary"), - "messaging-component-code-block-language-foreground": - materialColour("onPrimary"), - "messaging-component-blockquote-background": - materialColour("surfaceVariant"), - "messaging-component-blockquote-foreground": - materialColour("onSurfaceVariant"), - "messaging-component-text-embed-background": - materialColour("surfaceVariant"), - "messaging-component-text-embed-foreground": - materialColour("onSurfaceVariant"), - "messaging-component-attachment-background": - materialColour("surfaceVariant"), - "messaging-component-attachment-foreground": - materialColour("onSurfaceVariant"), - "messaging-component-message-divider-background": materialColour( - "onSurfaceVariant", + 'messaging-component-code-block-background': + materialColour('surfaceVariant'), + 'messaging-component-code-block-foreground': + materialColour('onSurfaceVariant'), + 'messaging-component-code-block-language-background': + materialColour('primary'), + 'messaging-component-code-block-language-foreground': + materialColour('onPrimary'), + 'messaging-component-blockquote-background': + materialColour('surfaceVariant'), + 'messaging-component-blockquote-foreground': + materialColour('onSurfaceVariant'), + 'messaging-component-text-embed-background': + materialColour('surfaceVariant'), + 'messaging-component-text-embed-foreground': + materialColour('onSurfaceVariant'), + 'messaging-component-attachment-background': + materialColour('surfaceVariant'), + 'messaging-component-attachment-foreground': + materialColour('onSurfaceVariant'), + 'messaging-component-message-divider-background': materialColour( + 'onSurfaceVariant', 80 ), - "messaging-component-message-divider-foreground": materialColour( - "onSurfaceVariant", + 'messaging-component-message-divider-foreground': materialColour( + 'onSurfaceVariant', 60 ), - "messaging-component-message-divider-unread-background": - materialColour("primary"), - "messaging-component-message-divider-unread-foreground": - materialColour("onPrimary"), - "messaging-component-reaction-background": materialColour( - "onBackground", + 'messaging-component-message-divider-unread-background': + materialColour('primary'), + 'messaging-component-message-divider-unread-foreground': + materialColour('onPrimary'), + 'messaging-component-reaction-background': materialColour( + 'onBackground', 97 ), - "messaging-component-reaction-foreground": materialColour("onBackground"), - "messaging-component-reaction-selected-background": - materialColour("primaryContainer"), - "messaging-component-reaction-selected-foreground": - materialColour("onPrimaryContainer"), - "messaging-component-mention-background": - materialColour("surfaceVariant"), - "messaging-component-mention-foreground": - materialColour("onSurfaceVariant"), + 'messaging-component-reaction-foreground': materialColour('onBackground'), + 'messaging-component-reaction-selected-background': + materialColour('primaryContainer'), + 'messaging-component-reaction-selected-foreground': + materialColour('onPrimaryContainer'), + 'messaging-component-mention-background': + materialColour('surfaceVariant'), + 'messaging-component-mention-foreground': + materialColour('onSurfaceVariant'), // Settings - "settings-background": materialColour("secondary", 96), - "settings-foreground": materialColour("onSecondaryContainer"), - "settings-content-background": materialColour("secondary", 92), - "settings-content-foreground": materialColour("onSecondary", 20), - "settings-content-scroll-thumb": materialColour("secondary", 70), - "settings-close-anchor": materialColour("primary"), - "settings-close-anchor-hover": materialColour("onPrimary"), - "settings-sidebar-category": materialColour("primary"), - "settings-sidebar-foreground": materialColour("onSecondary", 20), - "settings-sidebar-button-hover": materialColour("secondary", 90), - "settings-sidebar-button-active": materialColour("secondary", 82), + 'settings-background': materialColour('secondary', 96), + 'settings-foreground': materialColour('onSecondaryContainer'), + 'settings-content-background': materialColour('secondary', 92), + 'settings-content-foreground': materialColour('onSecondary', 20), + 'settings-content-scroll-thumb': materialColour('secondary', 70), + 'settings-close-anchor': materialColour('primary'), + 'settings-close-anchor-hover': materialColour('onPrimary'), + 'settings-sidebar-category': materialColour('primary'), + 'settings-sidebar-foreground': materialColour('onSecondary', 20), + 'settings-sidebar-button-hover': materialColour('secondary', 90), + 'settings-sidebar-button-active': materialColour('secondary', 82), // Temporary Colours - "temp-1": materialColour("secondary", 85), + 'temp-1': materialColour('secondary', 85), }, customColours, // TODO: deprecate, provide hexToRgb utility instead rgb: { - header: "54,54,54", - "typing-indicator": "30,30,30", + header: '54,54,54', + 'typing-indicator': '30,30,30', }, breakpoints: { - sm: "640px", - md: "768px", - lg: "1024px", - xl: "1280px", + sm: '640px', + md: '768px', + lg: '1024px', + xl: '1280px', }, borderRadius: { - sm: "2px", - md: "6px", - lg: "12px", - xl: "16px", - xxl: "28px", - full: "100%", + sm: '2px', + md: '6px', + lg: '12px', + xl: '16px', + xxl: '28px', + full: '100%', }, gap: { - none: "0", - xxs: "1px", - xs: "2px", - s: "6px", - sm: "4px", - md: "8px", - l: "12px", - lg: "15px", - x: "28px", - xl: "32px", - xxl: "64px", + none: '0', + xxs: '1px', + xs: '2px', + s: '6px', + sm: '4px', + md: '8px', + l: '12px', + lg: '15px', + x: '28px', + xl: '32px', + xxl: '64px', }, fonts: { primary: '"Inter", sans-serif', @@ -409,201 +407,201 @@ export const darkTheme: ( typography: { // Form elements label: { - textTransform: "capitalize", + textTransform: 'capitalize', }, // Common UI elements chip: { fontWeight: 500, - fontSize: "12px", + fontSize: '12px', }, username: { fontWeight: 600, }, status: { - fontSize: "11px", + fontSize: '11px', fontWeight: 400, }, tooltip: { fontWeight: 600, - fontSize: "13px", + fontSize: '13px', }, category: { fontWeight: 600, - fontSize: "0.7rem", + fontSize: '0.7rem', }, - "menu-button": { + 'menu-button': { fontWeight: 600, - fontSize: "0.90625rem", + fontSize: '0.90625rem', }, - "sidebar-title": { + 'sidebar-title': { margin: 0, - element: "h1", + element: 'h1', fontWeight: 600, - fontSize: "1.2rem", + fontSize: '1.2rem', }, - "channel-topic": { + 'channel-topic': { fontWeight: 400, - fontSize: "0.8em", + fontSize: '0.8em', }, // Messaging specific messages: { - fontSize: "14px", + fontSize: '14px', fontWeight: 400, }, reply: { - fontSize: "0.8rem", + fontSize: '0.8rem', }, - "composition-file-upload-name": { - fontSize: "0.8em", + 'composition-file-upload-name': { + fontSize: '0.8em', }, - "composition-file-upload-size": { - fontSize: "0.6em", + 'composition-file-upload-size': { + fontSize: '0.6em', }, - "composition-typing-indicator": { - element: "div", - fontSize: "13px", + 'composition-typing-indicator': { + element: 'div', + fontSize: '13px', }, - "conversation-channel-name": { - element: "h1", - fontSize: "23px", - margin: "0 0 8px 0", + 'conversation-channel-name': { + element: 'h1', + fontSize: '23px', + margin: '0 0 8px 0', }, - "conversation-start": { - element: "h4", + 'conversation-start': { + element: 'h4', fontWeight: 400, margin: 0, - fontSize: "14px", + fontSize: '14px', }, - "conversation-indicator": { - fontSize: "12px", + 'conversation-indicator': { + fontSize: '12px', fontWeight: 600, }, - "system-message": { + 'system-message': { fontWeight: 700, }, // Settings - "settings-title": { - element: "h1", + 'settings-title': { + element: 'h1', margin: 0, fontWeight: 500, - fontSize: "1.75rem", + fontSize: '1.75rem', }, - "settings-account-username": { - fontSize: "20px", + 'settings-account-username': { + fontSize: '20px', fontWeight: 600, }, - "settings-account-card-title": { + 'settings-account-card-title': { fontWeight: 600, }, - "settings-account-card-subtitle": { - fontSize: "12px", + 'settings-account-card-subtitle': { + fontSize: '12px', }, // Modal - "modal-title": { - element: "h2", + 'modal-title': { + element: 'h2', margin: 0, fontWeight: 700, - fontSize: "1.2rem", + fontSize: '1.2rem', }, - "modal-description": { - element: "h2", + 'modal-description': { + element: 'h2', margin: 0, fontWeight: 500, - fontSize: "0.9rem", + fontSize: '0.9rem', }, // Home - "home-page-title": { - element: "h1", + 'home-page-title': { + element: 'h1', margin: 0, - lineHeight: "1rem", + lineHeight: '1rem', fontWeight: 600, - fontSize: "1.4rem", + fontSize: '1.4rem', }, // Legacy - "legacy-settings-title": { - element: "h1", + 'legacy-settings-title': { + element: 'h1', margin: 0, - lineHeight: "1rem", + lineHeight: '1rem', fontWeight: 600, - fontSize: "1.2rem", + fontSize: '1.2rem', }, small: { - fontSize: "0.7rem", + fontSize: '0.7rem', }, - "legacy-modal-title": { - element: "h2", + 'legacy-modal-title': { + element: 'h2', margin: 0, fontWeight: 700, - fontSize: "0.9375rem", + fontSize: '0.9375rem', }, - "legacy-settings-section-title": { - element: "h3", + 'legacy-settings-section-title': { + element: 'h3', margin: 0, fontWeight: 700, - fontSize: "0.75rem", + fontSize: '0.75rem', }, - "legacy-modal-title-2": { - element: "h4", + 'legacy-modal-title-2': { + element: 'h4', margin: 0, fontWeight: 500, - fontSize: "0.8125rem", + fontSize: '0.8125rem', }, - "legacy-settings-description": { - element: "span", + 'legacy-settings-description': { + element: 'span', margin: 0, fontWeight: 500, - fontSize: "0.8rem", + fontSize: '0.8rem', }, }, transitions: { - fast: ".1s ease-in-out", - medium: ".2s ease", + fast: '.1s ease-in-out', + medium: '.2s ease', }, effects: { blur: { - md: "blur(20px)", + md: 'blur(20px)', }, ripple: { hover: 0.05, }, invert: { - black: darkMode ? "invert(100%)" : "invert(0%)", - white: darkMode ? "invert(0%)" : "invert(100%)", + black: darkMode ? 'invert(100%)' : 'invert(0%)', + white: darkMode ? 'invert(0%)' : 'invert(100%)', }, - muted: "brightness(0)", // DEPRECATE - hover: "brightness(0)", // DEPRECATE - active: "brightness(0)", // DEPRECATE + muted: 'brightness(0)', // DEPRECATE + hover: 'brightness(0)', // DEPRECATE + active: 'brightness(0)', // DEPRECATE // muted: "brightness(0.5) saturate(0.75)", // hover: "brightness(1.1)", // active: "brightness(0.9)", - spoiler: "brightness(0.2) contrast(0.8) blur(24px)", + spoiler: 'brightness(0.2) contrast(0.8) blur(24px)', }, layout: { width: { // "channel-sidebar": "232px", (without margins) - "channel-sidebar": "248px", + 'channel-sidebar': '248px', }, height: { - header: "48px", - "tall-header": "120px", - "message-box": "48px", - "attachment-preview": "100px", + header: '48px', + 'tall-header': '120px', + 'message-box': '48px', + 'attachment-preview': '100px', }, attachments: { - "min-width": "240px", - "max-width": "420px", - "min-height": "120px", - "max-height": "420px", + 'min-width': '240px', + 'max-width': '420px', + 'min-height': '120px', + 'max-height': '420px', }, emoji: { - small: "1.4em", - medium: "48px", - large: "96px", + small: '1.4em', + medium: '48px', + large: '96px', }, zIndex: { - "floating-bar": 20, + 'floating-bar': 20, modal: 50, - "floating-element": 100, + 'floating-element': 100, }, }, }; diff --git a/packages/client/package.json b/packages/client/package.json index f0d0bddf6..ae390ccff 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -16,97 +16,94 @@ "build-storybook": "storybook build" }, "devDependencies": { - "@chromatic-com/storybook": "^1.5.0", - "@pandacss/dev": "^0.35.0", - "@solid-devtools/transform": "^0.10.4", - "@solidjs/testing-library": "^0.8.6", - "@storybook/addon-essentials": "8.2.0-alpha.5", - "@storybook/addon-interactions": "8.2.0-alpha.5", - "@storybook/addon-links": "8.2.0-alpha.5", - "@storybook/blocks": "8.2.0-alpha.5", - "@storybook/html": "^8.1.6", + "@chromatic-com/storybook": "^2.0.2", + "@pandacss/dev": "^0.46.1", + "@solidjs/testing-library": "^0.8.10", + "@storybook/addon-essentials": "8.3.5", + "@storybook/addon-interactions": "8.3.5", + "@storybook/addon-links": "8.3.5", + "@storybook/blocks": "8.3.5", + "@storybook/html": "^8.3.5", "@storybook/testing-library": "^0.2.2", - "@testing-library/jest-dom": "^6.4.2", + "@testing-library/jest-dom": "^6.5.0", "@types/hast": "^3.0.4", "@types/lodash.defaultsdeep": "^4.6.9", "@types/lodash.isequal": "^4.5.8", - "@types/unist": "^3.0.2", - "@vitest/coverage-v8": "^1.6.0", + "@types/unist": "^3.0.3", + "@vitest/coverage-v8": "^2.1.2", "babel-plugin-codegen": "^4.1.5", - "jsdom": "^24.0.0", + "jsdom": "^25.0.1", "lnk": "^1.1.0", - "rehype-stringify": "^10.0.0", + "rehype-stringify": "^10.0.1", "revolt.js": "workspace:^", - "storybook": "8.2.0-alpha.5", - "storybook-solidjs": "^1.0.0-beta.2", - "storybook-solidjs-vite": "^1.0.0-beta.2", - "typescript": "^5.4.2", - "vite": "^5.1.6", - "vite-plugin-inspect": "^0.8.3", - "vite-plugin-pwa": "^0.19.4", + "solid-devtools": "^0.30.1", + "solid-motionone": "^1.0.2", + "storybook": "8.3.5", + "storybook-solidjs": "1.0.0-beta.2", + "storybook-solidjs-vite": "1.0.0-beta.2", + "typescript": "^5.6.3", + "vite": "^5.4.8", + "vite-plugin-inspect": "^0.8.7", + "vite-plugin-pwa": "^0.20.5", "vite-plugin-solid": "^2.10.2", - "vite-plugin-solid-svg": "^0.8.0", - "vitest": "^1.4.0" + "vite-plugin-solid-svg": "^0.8.1", + "vitest": "^2.1.2" }, "dependencies": { - "@floating-ui/dom": "^1.6.3", - "@fontsource/inter": "^5.0.17", - "@fontsource/jetbrains-mono": "^5.0.19", - "@fontsource/open-sans": "^5.0.27", + "@floating-ui/dom": "^1.6.11", + "@fontsource/inter": "^5.1.0", + "@fontsource/jetbrains-mono": "^5.1.1", + "@fontsource/open-sans": "^5.1.0", "@material-design-icons/svg": "^0.14.13", - "@material/material-color-utilities": "^0.2.7", + "@material/material-color-utilities": "^0.3.0", "@minht11/solid-virtual-container": "^0.2.1", - "@motionone/solid": "^10.16.4", - "@sentry/browser": "^7.107.0", - "@sentry/tracing": "^7.107.0", + "@sentry/browser": "^8.33.1", + "@sentry/tracing": "^7.114.0", "@solid-aria/button": "^0.1.3", - "@solid-devtools/debugger": "^0.23.3", - "@solid-devtools/overlay": "^0.29.3", - "@solid-primitives/i18n": "^1.1.1", + "@solid-primitives/i18n": "^2.1.1", "@solid-primitives/keyed": "^1.2.2", - "@solid-primitives/map": "^0.4.11", - "@solidjs/router": "^0.13.0", - "@tanstack/solid-query": "^5.48.0", - "@tauri-apps/api": "^1.5.3", + "@solid-primitives/map": "^0.4.13", + "@solidjs/router": "^0.14.7", + "@tanstack/solid-query": "^5.59.0", + "@tauri-apps/api": "^2.0.2", "@thisbeyond/solid-dnd": "^0.7.5", "color-rgba": "^3.0.0", "comma-separated-tokens": "^2.0.3", - "dayjs": "^1.11.10", + "dayjs": "^1.11.13", "detect-browser": "^5.3.0", - "emoji-regex": "^10.3.0", + "emoji-regex": "^10.4.0", "fast-deep-equal": "^3.1.3", - "hast": "^1.0.0", "json-stringify-deterministic": "^1.0.12", - "katex": "^0.16.9", + "katex": "^0.16.11", "localforage": "^1.10.0", "lodash.defaultsdeep": "^4.6.1", "lodash.isequal": "^4.5.0", - "mdast-util-to-hast": "^12.2.4", - "property-information": "^6.2.0", + "mdast-util-to-hast": "^13.2.0", + "property-information": "^6.5.0", "rehype-highlight": "^7.0.0", - "rehype-katex": "^7.0.0", + "rehype-katex": "^7.0.1", "rehype-prism": "^2.3.2", "remark-breaks": "^4.0.0", "remark-gfm": "^4.0.0", "remark-math": "^6.0.0", "remark-parse": "^11.0.0", - "remark-rehype": "^11.1.0", + "remark-rehype": "^11.1.1", "revolt.js": "workspace:^", - "shiki": "^1.9.0", + "shiki": "^1.22.0", "solid-dnd-directive": "^0.2.0", "solid-floating-ui": "^0.3.1", "solid-hcaptcha": "^0.4.0", "solid-icons": "^1.1.0", - "solid-js": "^1.8.15", + "solid-js": "^1.9.2", "solid-qr-code": "^0.1.11", - "solid-styled-components": "workspace:^0.28.5", + "solid-styled-components": "workspace:^", "space-separated-tokens": "^2.0.2", - "style-to-object": "^0.4.4", + "style-to-object": "^1.0.8", "ulid": "^2.3.0", - "unified": "^11.0.4", + "unified": "^11.0.5", "unist-util-visit": "^5.0.0", - "vfile": "^6.0.1", - "workbox-precaching": "^7.0.0" + "vfile": "^6.0.3", + "workbox-precaching": "^7.1.0" }, "private": true } diff --git a/packages/client/panda.config.ts b/packages/client/panda.config.ts index 1f368a9d8..c8608593f 100644 --- a/packages/client/panda.config.ts +++ b/packages/client/panda.config.ts @@ -1,11 +1,11 @@ -import { defineConfig } from "@pandacss/dev"; +import { defineConfig } from '@pandacss/dev'; export default defineConfig({ // Whether to use css reset preflight: true, // Where to look for your css declarations - include: ["./src/**/*.{js,jsx,ts,tsx}", "./components/**/*.{js,jsx,ts,tsx}"], + include: ['./src/**/*.{js,jsx,ts,tsx}', './components/**/*.{js,jsx,ts,tsx}'], // Files to exclude exclude: [], @@ -16,10 +16,10 @@ export default defineConfig({ }, // The output directory for your css system - outdir: "styled-system", + outdir: 'styled-system', // Enable jsx code gen - jsxFramework: "solid", + jsxFramework: 'solid', // Use template style // syntax: "template-literal", diff --git a/packages/client/src/Auth.tsx b/packages/client/src/Auth.tsx index 81004104c..034eb6d40 100644 --- a/packages/client/src/Auth.tsx +++ b/packages/client/src/Auth.tsx @@ -1,4 +1,4 @@ -import { AuthPage } from "@revolt/auth"; +import { AuthPage } from '@revolt/auth'; /** * Re-export to take advantage of lazy-loaded components diff --git a/packages/client/src/Interface.tsx b/packages/client/src/Interface.tsx index 02e456814..4236732e5 100644 --- a/packages/client/src/Interface.tsx +++ b/packages/client/src/Interface.tsx @@ -1,18 +1,17 @@ -import { Component, JSX, Match, Switch, onCleanup, onMount } from "solid-js"; +import { ChannelContextMenu, ServerContextMenu } from '@revolt/app'; +import { clientController } from '@revolt/client'; +import { State, TransitionType } from '@revolt/client/Controller'; +import { KeybindAction } from '@revolt/keybinds'; +import { modalController } from '@revolt/modal'; +import { Navigate, useBeforeLeave } from '@revolt/routing'; +import { state } from '@revolt/state'; +import { Button, Preloader, styled } from '@revolt/ui'; +import { useKeybindActions } from '@revolt/ui/components/context/Keybinds'; +import { Server } from 'revolt.js'; +import type { JSX } from 'solid-js'; +import { Component, Match, onCleanup, onMount, Switch } from 'solid-js'; -import { Server } from "revolt.js"; - -import { ChannelContextMenu, ServerContextMenu } from "@revolt/app"; -import { clientController } from "@revolt/client"; -import { State, TransitionType } from "@revolt/client/Controller"; -import { KeybindAction } from "@revolt/keybinds"; -import { modalController } from "@revolt/modal"; -import { Navigate, useBeforeLeave } from "@revolt/routing"; -import { state } from "@revolt/state"; -import { Button, Preloader, styled } from "@revolt/ui"; -import { useKeybindActions } from "@revolt/ui/components/context/Keybinds"; - -import { Sidebar } from "./interface/Sidebar"; +import { Sidebar } from './interface/Sidebar'; /** * Application layout @@ -22,13 +21,13 @@ const Interface = (props: { children: JSX.Element }) => { useBeforeLeave((e) => { if (!e.defaultPrevented) { - if (e.to === "/settings") { + if (e.to === '/settings') { e.preventDefault(); modalController.push({ - type: "settings", - config: "user", + type: 'settings', + config: 'user', }); - } else if (typeof e.to === "string") { + } else if (typeof e.to === 'string') { state.layout.setLastActivePath(e.to); } } @@ -49,20 +48,20 @@ const Interface = (props: { children: JSX.Element }) => { }); return ( - <Switch fallback={<Preloader grow type="spinner" />}> + <Switch fallback={<Preloader grow type='spinner' />}> <Match when={!clientController.isLoggedIn()}> - <Navigate href="/login" /> + <Navigate href='/login' /> </Match> <Match when={clientController.lifecycle.loadedOnce()}> <div style={{ - display: "flex", - "flex-direction": "column", - height: "100%", + display: 'flex', + 'flex-direction': 'column', + height: '100%', }} > <Notice> - ⚠️ This is beta software, things will break! State:{" "} + ⚠️ This is beta software, things will break! State:{' '} <Switch> <Match when={clientController.lifecycle.state() === State.Connecting} @@ -77,7 +76,7 @@ const Interface = (props: { children: JSX.Element }) => { <Match when={clientController.lifecycle.state() === State.Disconnected} > - Disconnected{" "} + Disconnected{' '} <a onClick={() => clientController.lifecycle.transition({ @@ -101,9 +100,9 @@ const Interface = (props: { children: JSX.Element }) => { </Switch> </Notice> <Layout - style={{ "flex-grow": 1, "min-height": 0 }} + style={{ 'flex-grow': 1, 'min-height': 0 }} onDragOver={(e) => { - if (e.dataTransfer) e.dataTransfer.dropEffect = "none"; + if (e.dataTransfer) e.dataTransfer.dropEffect = 'none'; }} onDrop={(e) => e.preventDefault()} > @@ -137,15 +136,15 @@ const Notice = styled.div` ${(props) => props.theme!.gap.md}; padding: ${(props) => props.theme!.gap.md}; background: ${(props) => - props.theme!.colours["messaging-message-box-background"]}; - color: ${(props) => props.theme!.colours["messaging-message-box-foreground"]}; + props.theme!.colours['messaging-message-box-background']}; + color: ${(props) => props.theme!.colours['messaging-message-box-foreground']}; border-radius: ${(props) => props.theme!.borderRadius.md}; `; /** * Parent container */ -const Layout = styled("div", "Layout")` +const Layout = styled('div', 'Layout')` display: flex; height: 100%; `; diff --git a/packages/client/src/globals.d.ts b/packages/client/src/globals.d.ts index e62b23cb3..66e614323 100644 --- a/packages/client/src/globals.d.ts +++ b/packages/client/src/globals.d.ts @@ -1,7 +1,138 @@ -export { }; +import type { Placement } from '@floating-ui/dom'; +import type { AutoCompleteState } from '@revolt/ui/directives'; +import type { Channel, Client, ServerMember, User } from 'revolt.js'; +import { type SolidOptions } from 'solid-dnd-directive'; +import type { Component } from 'solid-js'; + +export {}; declare global { interface Window { - __TAURI__: Object; + __TAURI__: object; + } +} + +declare module 'solid-js' { + namespace JSX { + interface Directives { + dndzone: SolidOptions; + ripple: + | true + | { + enable: boolean; + + /** + * Pass-through class names + */ + class?: string; + }; + scrollable: + | true + | { + /** + * Scroll direction + */ + direction?: 'x' | 'y'; + + /** + * Offset to apply to top of scroll container + */ + offsetTop?: number; + + /** + * Whether to only show scrollbar on hover + */ + showOnHover?: boolean; + + /** + * Pass-through class names + */ + class?: string; + + /** + * Set custom foreground on track + */ + foreground?: string; + + /** + * Set custom background on track + */ + background?: string; + }; + invisibleScrollable: + | true + | { + /** + * Scroll direction + */ + direction?: 'x' | 'y'; + + /** + * Pass-through class names + */ + class?: string; + }; + floating: { + tooltip?: { + /** + * Where the tooltip should be placed + */ + placement: Placement; + } & ( + | { + /** + * Tooltip content + */ + content: Component; + + /** + * Aria label fallback + */ + aria: string; + } + | { + /** + * Tooltip content + */ + content: string | undefined; + + /** + * Content is used as aria fallback + */ + aria?: undefined; + } + ); + userCard?: { + /** + * User to display + */ + user: User; + + /** + * Member to display + */ + member?: ServerMember; + }; + contextMenu?: Component; + autoComplete?: { + state: Accessor<AutoCompleteState>; + selection: Accessor<number>; + select: (index: number) => void; + }; + }; + autoComplete: + | true + | { + client?: Client; + onKeyDown?: ( + event: KeyboardEvent & { currentTarget: HTMLTextAreaElement } + ) => void; + searchSpace?: { + users?: User[]; + members?: ServerMember[]; + channels?: Channel[]; + }; + }; + } } -} \ No newline at end of file +} diff --git a/packages/client/src/index.tsx b/packages/client/src/index.tsx index 10141ad82..f5f945b0e 100644 --- a/packages/client/src/index.tsx +++ b/packages/client/src/index.tsx @@ -1,55 +1,68 @@ /** * Configure contexts and render App */ -import { JSX, Show, createEffect, createSignal, on, onMount } from "solid-js"; -import { createStore } from "solid-js/store"; -import { render } from "solid-js/web"; - -import { attachDevtoolsOverlay } from "@solid-devtools/overlay"; -import { Navigate, Route, Router } from "@solidjs/router"; -import { QueryClient, QueryClientProvider } from "@tanstack/solid-query"; -import { appWindow } from "@tauri-apps/api/window"; +/* @refresh reload */ +import '@revolt/ui/styles'; +import './index.css'; +import './sentry'; +import 'solid-devtools'; -import FlowCheck from "@revolt/auth/src/flows/FlowCheck"; -import FlowConfirmReset from "@revolt/auth/src/flows/FlowConfirmReset"; -import FlowCreate from "@revolt/auth/src/flows/FlowCreate"; -import FlowHome from "@revolt/auth/src/flows/FlowHome"; -import FlowLogin from "@revolt/auth/src/flows/FlowLogin"; -import FlowResend from "@revolt/auth/src/flows/FlowResend"; -import FlowReset from "@revolt/auth/src/flows/FlowReset"; -import FlowVerify from "@revolt/auth/src/flows/FlowVerify"; -import i18n, { I18nContext } from "@revolt/i18n"; -import { ModalRenderer, modalController } from "@revolt/modal"; -import { Hydrate, state } from "@revolt/state"; +import FlowCheck from '@revolt/auth/src/flows/FlowCheck'; +import FlowConfirmReset from '@revolt/auth/src/flows/FlowConfirmReset'; +import FlowCreate from '@revolt/auth/src/flows/FlowCreate'; +import FlowHome from '@revolt/auth/src/flows/FlowHome'; +import FlowLogin from '@revolt/auth/src/flows/FlowLogin'; +import FlowResend from '@revolt/auth/src/flows/FlowResend'; +import FlowReset from '@revolt/auth/src/flows/FlowReset'; +import FlowVerify from '@revolt/auth/src/flows/FlowVerify'; +import { + dict, + fetchLanguage, + I18nContext, + language, + setLanguage, +} from '@revolt/i18n'; +import { modalController, ModalRenderer } from '@revolt/modal'; +import { Hydrate, state } from '@revolt/state'; import { ApplyGlobalStyles, + darkTheme, FloatingManager, KeybindsProvider, Masks, ProvideDirectives, ThemeProvider, Titlebar, - darkTheme, -} from "@revolt/ui"; - -/* @refresh reload */ -import "@revolt/ui/styles"; - -import AuthPage from "./Auth"; -import Interface from "./Interface"; -import "./index.css"; -import { DevelopmentPage } from "./interface/Development"; -import { Friends } from "./interface/Friends"; -import { HomePage } from "./interface/Home"; -import { ServerHome } from "./interface/ServerHome"; -import { ChannelPage } from "./interface/channels/ChannelPage"; -import "./sentry"; +} from '@revolt/ui'; +import * as i18n from '@solid-primitives/i18n'; +import { Navigate, Route, Router } from '@solidjs/router'; +import { QueryClient, QueryClientProvider } from '@tanstack/solid-query'; +import { isTauri } from '@tauri-apps/api/core'; +import { getCurrentWindow } from '@tauri-apps/api/window'; +import type { JSX } from 'solid-js'; +import { + createEffect, + createMemo, + createResource, + createSignal, + on, + onMount, + Show, +} from 'solid-js'; +import { createStore } from 'solid-js/store'; +import { render } from 'solid-js/web'; -attachDevtoolsOverlay(); +import AuthPage from './Auth'; +import Interface from './Interface'; +import { ChannelPage } from './interface/channels/ChannelPage'; +import { DevelopmentPage } from './interface/Development'; +import { Friends } from './interface/Friends'; +import { HomePage } from './interface/Home'; +import { ServerHome } from './interface/ServerHome'; /** TEMPORARY */ function MountTheme(props: { children: any }) { - const [accent, setAccent] = createSignal("#FF5733"); + const [accent, setAccent] = createSignal('#FF5733'); const [darkMode, setDarkMode] = createSignal(false); (window as any)._demo_setAccent = setAccent; @@ -79,27 +92,35 @@ function PWARedirect() { * Open settings and redirect to last active path */ function SettingsRedirect() { - onMount(() => modalController.push({ type: "settings", config: "user" })); + onMount(() => modalController.push({ type: 'settings', config: 'user' })); return <PWARedirect />; } const client = new QueryClient(); function MountContext(props: { children?: JSX.Element }) { + const [dictionary] = createResource(language, fetchLanguage, { + initialValue: i18n.flatten(dict.en), + }); + + const t = createMemo(() => i18n.translator(dictionary, i18n.resolveTemplate)); + + const appWindow = isTauri() ? getCurrentWindow() : null; + return ( - <QueryClientProvider client={client}> - <Hydrate> - <Masks /> - <I18nContext.Provider value={i18n}> + <I18nContext.Provider value={t()}> + <QueryClientProvider client={client}> + <Hydrate> + <Masks /> <MountTheme> <ProvideDirectives> <KeybindsProvider keybinds={() => state.keybinds.getKeybinds()}> <Show when={window.__TAURI__}> <Titlebar isBuildDev={import.meta.env.DEV} - onMinimize={() => appWindow.minimize()} - onMaximize={() => appWindow.toggleMaximize()} - onClose={() => appWindow.hide()} + onMinimize={() => appWindow?.minimize?.()} + onMaximize={() => appWindow?.toggleMaximize?.()} + onClose={() => appWindow?.hide?.()} /> </Show> {props.children} @@ -109,38 +130,38 @@ function MountContext(props: { children?: JSX.Element }) { <ApplyGlobalStyles /> </ProvideDirectives> </MountTheme> - </I18nContext.Provider> - </Hydrate> - </QueryClientProvider> + </Hydrate> + </QueryClientProvider> + </I18nContext.Provider> ); } render( () => ( <Router root={MountContext}> - <Route path="/login" component={AuthPage as never}> - <Route path="/check" component={FlowCheck} /> - <Route path="/create" component={FlowCreate} /> - <Route path="/auth" component={FlowLogin} /> - <Route path="/resend" component={FlowResend} /> - <Route path="/reset" component={FlowReset} /> - <Route path="/verify/:token" component={FlowVerify} /> - <Route path="/reset/:token" component={FlowConfirmReset} /> - <Route path="/*" component={FlowHome} /> + <Route path='/login' component={AuthPage as never}> + <Route path='/check' component={FlowCheck} /> + <Route path='/create' component={FlowCreate} /> + <Route path='/auth' component={FlowLogin} /> + <Route path='/resend' component={FlowResend} /> + <Route path='/reset' component={FlowReset} /> + <Route path='/verify/:token' component={FlowVerify} /> + <Route path='/reset/:token' component={FlowConfirmReset} /> + <Route path='/*' component={FlowHome} /> </Route> - <Route path="/" component={Interface as never}> - <Route path="/pwa" component={PWARedirect} /> - <Route path="/dev" component={DevelopmentPage} /> - <Route path="/settings" component={SettingsRedirect} /> - <Route path="/friends" component={Friends} /> - <Route path="/server/:server/*"> - <Route path="/channel/:channel/*" component={ChannelPage} /> - <Route path="/*" component={ServerHome} /> + <Route path='/' component={Interface as never}> + <Route path='/pwa' component={PWARedirect} /> + <Route path='/dev' component={DevelopmentPage} /> + <Route path='/settings' component={SettingsRedirect} /> + <Route path='/friends' component={Friends} /> + <Route path='/server/:server/*'> + <Route path='/channel/:channel/*' component={ChannelPage} /> + <Route path='/*' component={ServerHome} /> </Route> - <Route path="/channel/:channel/*" component={ChannelPage} /> - <Route path="/*" component={HomePage} /> + <Route path='/channel/:channel/*' component={ChannelPage} /> + <Route path='/*' component={HomePage} /> </Route> </Router> ), - document.getElementById("root") as HTMLElement + document.getElementById('root') as HTMLElement ); diff --git a/packages/client/src/interface/Content.tsx b/packages/client/src/interface/Content.tsx index fa1754e58..5716bc139 100644 --- a/packages/client/src/interface/Content.tsx +++ b/packages/client/src/interface/Content.tsx @@ -1,14 +1,14 @@ -import { Component, Match, Switch, onMount } from "solid-js"; +import { modalController } from '@revolt/modal'; +import { Navigate, Route, useParams } from '@revolt/routing'; +import { state } from '@revolt/state'; +import type { Component } from 'solid-js'; +import { Match, onMount, Switch } from 'solid-js'; -import { modalController } from "@revolt/modal"; -import { Navigate, Route, useParams } from "@revolt/routing"; -import { state } from "@revolt/state"; - -import { DevelopmentPage } from "./Development"; -import { Friends } from "./Friends"; -import { HomePage } from "./Home"; -import { ServerHome } from "./ServerHome"; -import { ChannelPage } from "./channels/ChannelPage"; +import { ChannelPage } from './channels/ChannelPage'; +import { DevelopmentPage } from './Development'; +import { Friends } from './Friends'; +import { HomePage } from './Home'; +import { ServerHome } from './ServerHome'; /** * Render content without sidebars diff --git a/packages/client/src/interface/Friends.tsx b/packages/client/src/interface/Friends.tsx index 9215c2088..81eeb866e 100644 --- a/packages/client/src/interface/Friends.tsx +++ b/packages/client/src/interface/Friends.tsx @@ -1,37 +1,28 @@ -import { BiSolidChevronDown, BiSolidUserDetail } from "solid-icons/bi"; -import { - Accessor, - For, - JSX, - Show, - createMemo, - createSignal, - splitProps, -} from "solid-js"; - -import { VirtualContainer } from "@minht11/solid-virtual-container"; -import type { User } from "revolt.js"; -import { styled } from "styled-system/jsx"; - -import { useClient } from "@revolt/client"; -import { useTranslation } from "@revolt/i18n"; +import { VirtualContainer } from '@minht11/solid-virtual-container'; +import { useClient } from '@revolt/client'; +import { useTranslation } from '@revolt/i18n'; import { Avatar, CategoryButton, Deferred, Header, OverflowingText, + styled as styledLegacy, Typography, UserStatusGraphic, - styled as styledLegacy, -} from "@revolt/ui"; +} from '@revolt/ui'; +import type { User } from 'revolt.js'; +import { BiSolidChevronDown, BiSolidUserDetail } from 'solid-icons/bi'; +import type { Accessor, JSX } from 'solid-js'; +import { createMemo, createSignal, For, Show, splitProps } from 'solid-js'; +import { styled } from 'styled-system/jsx'; -import { HeaderIcon } from "./common/CommonHeader"; +import { HeaderIcon } from './common/CommonHeader'; /** * Base layout of the friends page */ -const Base = styledLegacy("div")` +const Base = styledLegacy('div')` width: 100%; display: flex; flex-direction: column; @@ -41,10 +32,10 @@ const Base = styledLegacy("div")` } `; -const ListBase = styled("div", { +const ListBase = styled('div', { base: { - "&:not(:first-child)": { - paddingTop: "var(--gap-lg)", + '&:not(:first-child)': { + paddingTop: 'var(--gap-lg)', }, }, }); @@ -53,7 +44,7 @@ const ListBase = styled("div", { * Typed accessor for lists */ type FriendLists = Accessor<{ - [key in "online" | "offline" | "incoming" | "outgoing" | "blocked"]: User[]; + [key in 'online' | 'offline' | 'incoming' | 'outgoing' | 'blocked']: User[]; }>; /** @@ -79,20 +70,20 @@ export function Friends() { const list = client()!.users.toList(); const friends = list - .filter((user) => user.relationship === "Friend") + .filter((user) => user.relationship === 'Friend') .sort((a, b) => a.username.localeCompare(b.username)); return { online: friends.filter((user) => user.online), offline: friends.filter((user) => !user.online), incoming: list - .filter((user) => user.relationship === "Incoming") + .filter((user) => user.relationship === 'Incoming') .sort((a, b) => a.username.localeCompare(b.username)), outgoing: list - .filter((user) => user.relationship === "Outgoing") + .filter((user) => user.relationship === 'Outgoing') .sort((a, b) => a.username.localeCompare(b.username)), blocked: list - .filter((user) => user.relationship === "Blocked") + .filter((user) => user.relationship === 'Blocked') .sort((a, b) => a.username.localeCompare(b.username)), }; }); @@ -100,32 +91,32 @@ export function Friends() { return ( // TODO: i18n <Base> - <Header placement="primary"> + <Header placement='primary'> <HeaderIcon> <BiSolidUserDetail size={24} /> </HeaderIcon> Friends </Header> <Deferred> - <div class="FriendsList" ref={scrollTargetElement} use:scrollable> + <div class='FriendsList' ref={scrollTargetElement} use:scrollable> {/* <PendingRequests lists={lists} /> */} <List - title="Outgoing" + title='Outgoing' users={lists().outgoing} scrollTargetElement={targetSignal} /> <List - title="Online" + title='Online' users={lists().online} scrollTargetElement={targetSignal} /> <List - title="Offline" + title='Offline' users={lists().offline} scrollTargetElement={targetSignal} /> <List - title="Blocked" + title='Blocked' users={lists().blocked} scrollTargetElement={targetSignal} /> @@ -145,8 +136,8 @@ function List(props: { }) { return ( <ListBase> - <Typography variant="category"> - {props.title} {"–"} {props.users.length} + <Typography variant='category'> + {props.title} {'–'} {props.users.length} </Typography> <VirtualContainer items={props.users} @@ -162,9 +153,9 @@ function List(props: { ...item.style, }} > - <div style={{ margin: "6px" }}> + <div style={{ margin: '6px' }}> <Entry - role="listitem" + role='listitem' tabIndex={item.tabIndex} style={item.style} user={item.item} @@ -180,12 +171,12 @@ function List(props: { /** * Some temporary styles for friend entries */ -const Friend = styled("div", { +const Friend = styled('div', { base: { minWidth: 0, - display: "flex", - gap: "var(--gap-md)", - alignItems: "center", + display: 'flex', + gap: 'var(--gap-md)', + alignItems: 'center', // padding: "var(--gap-md)", // borderRadius: "var(--borderRadius-lg)", // background: "var(--colours-sidebar-channels-background)", @@ -198,10 +189,10 @@ const Friend = styled("div", { function Entry( props: { user: User } & Omit< JSX.AnchorHTMLAttributes<HTMLAnchorElement>, - "href" + 'href' > ) { - const [local, remote] = splitProps(props, ["user"]); + const [local, remote] = splitProps(props, ['user']); return ( <a {...remote}> @@ -210,12 +201,12 @@ function Entry( size={36} src={local.user.animatedAvatarURL} holepunch={ - props.user.relationship === "Friend" ? "bottom-right" : "none" + props.user.relationship === 'Friend' ? 'bottom-right' : 'none' } overlay={ - <Show when={props.user.relationship === "Friend"}> + <Show when={props.user.relationship === 'Friend'}> <UserStatusGraphic - status={props.user.status?.presence ?? "Online"} + status={props.user.status?.presence ?? 'Online'} /> </Show> } @@ -229,7 +220,7 @@ function Entry( /** * Overlapping avatars */ -const Avatars = styledLegacy("div", "Avatars")` +const Avatars = styledLegacy('div', 'Avatars')` flex-shrink: 0; svg:not(:first-child) { @@ -259,21 +250,21 @@ function PendingRequests(props: { lists: FriendLists }) { const length = list.length; if (length === 1) { - return t("app.special.friends.from.single", { user: list[0].username }); + return t('app.special.friends.from.single', { user: list[0].username }); } else if (length <= 3) { - return t("app.special.friends.from.multiple", { + return t('app.special.friends.from.multiple', { userlist: list .slice(0, 2) .map((user) => user.username) - .join(", "), + .join(', '), user: list.slice(-1)[0].username, }); } else { - return t("app.special.friends.from.several", { + return t('app.special.friends.from.several', { userlist: list .slice(0, 3) .map((user) => user.username) - .join(", "), + .join(', '), count: (length - 3).toString(), }); } @@ -282,7 +273,7 @@ function PendingRequests(props: { lists: FriendLists }) { return ( <Show when={incoming().length}> <CategoryButton - action="chevron" + action='chevron' icon={ <Avatars> <For each={incoming().slice(0, 3)}> @@ -290,7 +281,7 @@ function PendingRequests(props: { lists: FriendLists }) { <Avatar src={user.animatedAvatarURL} size={64} - holepunch={index() == 2 ? "none" : "overlap"} + holepunch={index() == 2 ? 'none' : 'overlap'} /> )} </For> diff --git a/packages/client/src/interface/Home.tsx b/packages/client/src/interface/Home.tsx index 3ae1fc1e5..0a6a2b9ed 100644 --- a/packages/client/src/interface/Home.tsx +++ b/packages/client/src/interface/Home.tsx @@ -1,42 +1,39 @@ -import { Match, Show, Switch } from "solid-js"; - -import { cva } from "styled-system/css"; - -import { IS_DEV, IS_REVOLT, useClient } from "@revolt/client"; -import { useTranslation } from "@revolt/i18n"; -import { modalController } from "@revolt/modal"; -import { useNavigate } from "@revolt/routing"; +import MdAddCircle from '@material-design-icons/svg/filled/add_circle.svg?component-solid'; +import MdExplore from '@material-design-icons/svg/filled/explore.svg?component-solid'; +import MdGroups3 from '@material-design-icons/svg/filled/groups_3.svg?component-solid'; +import MdHome from '@material-design-icons/svg/filled/home.svg?component-solid'; +import MdPayments from '@material-design-icons/svg/filled/payments.svg?component-solid'; +import MdRateReview from '@material-design-icons/svg/filled/rate_review.svg?component-solid'; +import MdSettings from '@material-design-icons/svg/filled/settings.svg?component-solid'; +import { IS_DEV, IS_REVOLT, useClient } from '@revolt/client'; +import { useTranslation } from '@revolt/i18n'; +import { modalController } from '@revolt/modal'; +import { useNavigate } from '@revolt/routing'; import { Button, CategoryButton, Column, Header, - Typography, iconSize, styled, -} from "@revolt/ui"; - -import MdAddCircle from "@material-design-icons/svg/filled/add_circle.svg?component-solid"; -import MdExplore from "@material-design-icons/svg/filled/explore.svg?component-solid"; -import MdGroups3 from "@material-design-icons/svg/filled/groups_3.svg?component-solid"; -import MdHome from "@material-design-icons/svg/filled/home.svg?component-solid"; -import MdPayments from "@material-design-icons/svg/filled/payments.svg?component-solid"; -import MdRateReview from "@material-design-icons/svg/filled/rate_review.svg?component-solid"; -import MdSettings from "@material-design-icons/svg/filled/settings.svg?component-solid"; - -import RevoltSvg from "../../public/assets/wordmark_wide_500px.svg?component-solid"; + Typography, +} from '@revolt/ui'; +import { Match, Show, Switch } from 'solid-js'; +import { cva } from 'styled-system/css'; -import { HeaderIcon } from "./common/CommonHeader"; +// +// import RevoltSvg from "../../public/assets/wordmark_wide_500px.svg?component-solid"; +import { HeaderIcon } from './common/CommonHeader'; -const Logo = styled(RevoltSvg)` +const Logo = styled('div')` width: 240px; - fill: ${(props) => props.theme!.colours["foreground"]}; + fill: ${(props) => props.theme!.colours['foreground']}; `; /** * Base layout of the home page (i.e. the header/background) */ -const Base = styled("div")` +const Base = styled('div')` width: 100%; display: flex; flex-direction: column; @@ -48,27 +45,27 @@ const Base = styled("div")` const content = cva({ base: { minHeight: 0, - width: "100%", - margin: "auto", - padding: "var(--gap-xxl) 0", - - display: "flex", - gap: "var(--gap-xl)", - alignItems: "center", - flexDirection: "column", + width: '100%', + margin: 'auto', + padding: 'var(--gap-xxl) 0', + + display: 'flex', + gap: 'var(--gap-xl)', + alignItems: 'center', + flexDirection: 'column', }, }); /** * Layout of the buttons */ -const Buttons = styled("div")` +const Buttons = styled('div')` display: flex; padding: ${(props) => props.theme!.gap.md}; border-radius: ${(props) => props.theme!.borderRadius.lg}; - background: ${(props) => props.theme!.colours["sidebar-channels-background"]}; + background: ${(props) => props.theme!.colours['sidebar-channels-background']}; `; /** @@ -87,7 +84,7 @@ const SeparatedColumn = styled(Column)` /** * Make sure the image is separated from the welcome text */ -const Image = styled("img")` +const Image = styled('img')` margin-top: 0.5em; height: 36px; @@ -105,12 +102,12 @@ export function HomePage() { // check if we're revolt.chat; if so, check if the user is in the Lounge const showLoungeButton = IS_REVOLT; const isInLounge = - client()!.servers.get("01F7ZSBSFHQ8TA81725KQCSDDP") !== undefined; + client()!.servers.get('01F7ZSBSFHQ8TA81725KQCSDDP') !== undefined; return ( // TODO: i18n <Base> - <Header placement="primary"> + <Header placement='primary'> <HeaderIcon> <MdHome {...iconSize(22)} /> </HeaderIcon> @@ -118,8 +115,8 @@ export function HomePage() { </Header> <div use:scrollable={{ class: content() }}> <Column> - <Typography variant="home-page-title"> - {t("app.special.modals.onboarding.welcome")} + <Typography variant='home-page-title'> + {t('app.special.modals.onboarding.welcome')} </Typography> <Logo /> </Column> @@ -128,73 +125,73 @@ export function HomePage() { <CategoryButton onClick={() => modalController.push({ - type: "create_group", + type: 'create_group', client: client()!, }) } - description={t("app.home.group_desc")} + description={t('app.home.group_desc')} icon={<MdAddCircle />} > - {t("app.home.group")} + {t('app.home.group')} </CategoryButton> <Switch fallback={null}> <Match when={showLoungeButton && isInLounge}> <CategoryButton - onClick={() => navigate("/server/01F7ZSBSFHQ8TA81725KQCSDDP")} - description={t("app.home.goto-testers_desc")} + onClick={() => navigate('/server/01F7ZSBSFHQ8TA81725KQCSDDP')} + description={t('app.home.goto-testers_desc')} icon={<MdGroups3 />} > - {t("app.home.goto-testers")} + {t('app.home.goto-testers')} </CategoryButton> </Match> <Match when={showLoungeButton && !isInLounge}> <CategoryButton - description={t("app.home.join-testers_desc")} + description={t('app.home.join-testers_desc')} icon={<MdGroups3 />} > - {t("app.home.join-testers")} + {t('app.home.join-testers')} </CategoryButton> </Match> </Switch> <CategoryButton onClick={() => - window.open("https://insrt.uk/donate?utm_source=revoltapp") + window.open('https://insrt.uk/donate?utm_source=revoltapp') } - description={t("app.home.donate_desc")} + description={t('app.home.donate_desc')} icon={<MdPayments />} > - {t("app.home.donate")} + {t('app.home.donate')} </CategoryButton> </SeparatedColumn> <SeparatedColumn> <Show when={IS_REVOLT}> <CategoryButton - onClick={() => navigate("/discover")} - description={t("app.home.discover_desc")} + onClick={() => navigate('/discover')} + description={t('app.home.discover_desc')} icon={<MdExplore />} > - {t("app.home.discover")} + {t('app.home.discover')} </CategoryButton> </Show> <CategoryButton - description={t("app.home.feedback_desc")} + description={t('app.home.feedback_desc')} icon={<MdRateReview {...iconSize(22)} />} > - {t("app.home.feedback")} + {t('app.home.feedback')} </CategoryButton> <CategoryButton onClick={() => - modalController.push({ type: "settings", config: "user" }) + modalController.push({ type: 'settings', config: 'user' }) } - description={t("app.home.settings-tooltip")} + description={t('app.home.settings-tooltip')} icon={<MdSettings />} > - {t("app.home.settings")} + {t('app.home.settings')} </CategoryButton> </SeparatedColumn> </Buttons> <Show when={IS_DEV}> - <Button onPress={() => navigate("/dev")}> + <Button onPress={() => navigate('/dev')}> Open Development Page </Button> </Show> diff --git a/packages/client/src/interface/ServerHome.tsx b/packages/client/src/interface/ServerHome.tsx index 1de543d0f..6966808a0 100644 --- a/packages/client/src/interface/ServerHome.tsx +++ b/packages/client/src/interface/ServerHome.tsx @@ -1,7 +1,7 @@ -import { Component, Match, Switch, createMemo } from "solid-js"; - -import { useClient } from "@revolt/client"; -import { Navigate, useParams } from "@revolt/routing"; +import { useClient } from '@revolt/client'; +import { Navigate, useParams } from '@revolt/routing'; +import type { Component } from 'solid-js'; +import { createMemo, Match, Switch } from 'solid-js'; /** * Server home component @@ -13,9 +13,9 @@ export const ServerHome: Component = () => { return ( // TODO: port the nice fallback - <Switch fallback="No channels!"> + <Switch fallback='No channels!'> <Match when={!server()}> - <Navigate href={"/"} /> + <Navigate href={'/'} /> </Match> <Match when={server().defaultChannel}> <Navigate href={`channel/${server().defaultChannel!.id}`} /> diff --git a/packages/client/src/interface/Sidebar.tsx b/packages/client/src/interface/Sidebar.tsx index f924bf807..357705e3c 100644 --- a/packages/client/src/interface/Sidebar.tsx +++ b/packages/client/src/interface/Sidebar.tsx @@ -1,14 +1,14 @@ -import { Component, Match, Show, Switch, createMemo } from "solid-js"; -import { JSX } from "solid-js"; - -import { Channel, Server as ServerI } from "revolt.js"; - -import { ChannelContextMenu, ServerSidebarContextMenu } from "@revolt/app"; -import { useClient, useUser } from "@revolt/client"; -import { modalController } from "@revolt/modal"; -import { Route, useParams, useSmartParams } from "@revolt/routing"; -import { state } from "@revolt/state"; -import { HomeSidebar, ServerList, ServerSidebar } from "@revolt/ui"; +import { ChannelContextMenu, ServerSidebarContextMenu } from '@revolt/app'; +import { useClient, useUser } from '@revolt/client'; +import { modalController } from '@revolt/modal'; +import { Route, useParams, useSmartParams } from '@revolt/routing'; +import { state } from '@revolt/state'; +import { HomeSidebar, ServerList, ServerSidebar } from '@revolt/ui'; +import type { Server as ServerI } from 'revolt.js'; +import { Channel } from 'revolt.js'; +import type { Component } from 'solid-js'; +import type { JSX } from 'solid-js'; +import { createMemo, Match, Show, Switch } from 'solid-js'; /** * Left-most channel navigation sidebar @@ -17,14 +17,14 @@ export const Sidebar = (props: { /** * Menu generator TODO FIXME: remove */ - menuGenerator: (t: ServerI | Channel) => JSX.Directives["floating"]; + menuGenerator: (t: ServerI | Channel) => JSX.Directives['floating']; }) => { const user = useUser(); const client = useClient(); const params = useParams<{ server: string }>(); return ( - <div style={{ display: "flex", "flex-shrink": 0 }}> + <div style={{ display: 'flex', 'flex-shrink': 0 }}> <ServerList orderedServers={state.ordering.orderedServers} setServerOrder={state.ordering.setServerOrder} @@ -36,7 +36,7 @@ export const Sidebar = (props: { selectedServer={() => params.server} onCreateOrJoinServer={() => modalController.push({ - type: "create_or_join_server", + type: 'create_or_join_server', client: client(), }) } @@ -66,7 +66,7 @@ const Home: Component = () => { openSavedNotes={(navigate) => { // Check whether the saved messages channel exists already const channelId = [...client()!.channels.values()].find( - (channel) => channel.type === "SavedMessages" + (channel) => channel.type === 'SavedMessages' )?.id; if (navigate) { @@ -84,7 +84,7 @@ const Home: Component = () => { // Otherwise return channel ID if available return channelId; }} - __tempDisplayFriends={() => state.experiments.isEnabled("friends")} + __tempDisplayFriends={() => state.experiments.isEnabled('friends')} /> ); }; @@ -107,7 +107,7 @@ const Server: Component = () => { */ function openServerInfo() { modalController.push({ - type: "server_info", + type: 'server_info', server: server(), }); } @@ -117,8 +117,8 @@ const Server: Component = () => { */ function openServerSettings() { modalController.push({ - type: "settings", - config: "server", + type: 'settings', + config: 'server', context: server(), }); } diff --git a/packages/client/src/interface/channels/ChannelHeader.tsx b/packages/client/src/interface/channels/ChannelHeader.tsx index 376404683..3ce634bd1 100644 --- a/packages/client/src/interface/channels/ChannelHeader.tsx +++ b/packages/client/src/interface/channels/ChannelHeader.tsx @@ -1,30 +1,28 @@ -import { - BiRegularAt, - BiRegularHash, - BiSolidCog, - BiSolidGroup, - BiSolidNotepad, -} from "solid-icons/bi"; -import { Match, Show, Switch } from "solid-js"; - -import { Channel } from "revolt.js"; - -import { useTranslation } from "@revolt/i18n"; -import { TextWithEmoji } from "@revolt/markdown"; -import { modalController } from "@revolt/modal"; -import { state } from "@revolt/state"; -import { LAYOUT_SECTIONS } from "@revolt/state/stores/Layout"; +import { useTranslation } from '@revolt/i18n'; +import { TextWithEmoji } from '@revolt/markdown'; +import { modalController } from '@revolt/modal'; +import { state } from '@revolt/state'; +import { LAYOUT_SECTIONS } from '@revolt/state/stores/Layout'; import { Button, NonBreakingText, OverflowingText, Spacer, + styled, Typography, UserStatus, - styled, -} from "@revolt/ui"; +} from '@revolt/ui'; +import type { Channel } from 'revolt.js'; +import { + BiRegularAt, + BiRegularHash, + BiSolidCog, + BiSolidGroup, + BiSolidNotepad, +} from 'solid-icons/bi'; +import { Match, Show, Switch } from 'solid-js'; -import { HeaderIcon } from "../common/CommonHeader"; +import { HeaderIcon } from '../common/CommonHeader'; interface Props { /** @@ -44,7 +42,7 @@ export function ChannelHeader(props: Props) { */ function openChannelInfo() { modalController.push({ - type: "channel_info", + type: 'channel_info', channel: props.channel, }); } @@ -54,8 +52,8 @@ export function ChannelHeader(props: Props) { */ function openChannelSettings() { modalController.push({ - type: "settings", - config: "channel", + type: 'settings', + config: 'channel', context: props.channel, }); } @@ -65,9 +63,9 @@ export function ChannelHeader(props: Props) { <Switch> <Match when={ - props.channel.type === "TextChannel" || - props.channel.type === "VoiceChannel" || - props.channel.type === "Group" + props.channel.type === 'TextChannel' || + props.channel.type === 'VoiceChannel' || + props.channel.type === 'Group' } > <HeaderIcon> @@ -80,27 +78,27 @@ export function ChannelHeader(props: Props) { <Divider /> <DescriptionLink onClick={openChannelInfo}> <OverflowingText> - <Typography variant="channel-topic"> + <Typography variant='channel-topic'> <TextWithEmoji - content={props.channel.description?.split("\n").shift()} + content={props.channel.description?.split('\n').shift()} /> </Typography> </OverflowingText> </DescriptionLink> </Show> </Match> - <Match when={props.channel.type === "DirectMessage"}> + <Match when={props.channel.type === 'DirectMessage'}> <HeaderIcon> <BiRegularAt size={24} /> </HeaderIcon> <TextWithEmoji content={props.channel.recipient?.username} /> - <UserStatus status={props.channel.recipient?.presence} size="8px" /> + <UserStatus status={props.channel.recipient?.presence} size='8px' /> </Match> - <Match when={props.channel.type === "SavedMessages"}> + <Match when={props.channel.type === 'SavedMessages'}> <HeaderIcon> <BiSolidNotepad size={24} /> </HeaderIcon> - {t("app.navigation.tabs.saved")} + {t('app.navigation.tabs.saved')} </Match> </Switch> @@ -108,18 +106,18 @@ export function ChannelHeader(props: Props) { <Show when={ - props.channel.type === "Group" || - props.channel.orPermission("ManageChannel", "ManagePermissions") + props.channel.type === 'Group' || + props.channel.orPermission('ManageChannel', 'ManagePermissions') } > - <Button variant="plain" size="fluid" onPress={openChannelSettings}> + <Button variant='plain' size='fluid' onPress={openChannelSettings}> <BiSolidCog size={24} /> </Button> </Show> <Button - variant="plain" - size="fluid" + variant='plain' + size='fluid' onPress={() => state.layout.toggleSectionState(LAYOUT_SECTIONS.MEMBER_SIDEBAR, true) } @@ -133,7 +131,7 @@ export function ChannelHeader(props: Props) { /** * Vertical divider between name and topic */ -const Divider = styled("div", "Divider")` +const Divider = styled('div', 'Divider')` height: 20px; margin: 0px 5px; padding-left: 1px; diff --git a/packages/client/src/interface/channels/ChannelPage.tsx b/packages/client/src/interface/channels/ChannelPage.tsx index cadad84c0..c2f978999 100644 --- a/packages/client/src/interface/channels/ChannelPage.tsx +++ b/packages/client/src/interface/channels/ChannelPage.tsx @@ -1,18 +1,17 @@ -import { Component, Match, Switch, createMemo } from "solid-js"; +import { useClient } from '@revolt/client'; +import { TextWithEmoji } from '@revolt/markdown'; +import { Navigate, useParams } from '@revolt/routing'; +import { Header, styled, Typography } from '@revolt/ui'; +import type { Channel } from 'revolt.js'; +import type { Component } from 'solid-js'; +import { createMemo, Match, Switch } from 'solid-js'; -import { Channel } from "revolt.js"; - -import { useClient } from "@revolt/client"; -import { TextWithEmoji } from "@revolt/markdown"; -import { Navigate, useParams } from "@revolt/routing"; -import { Header, Typography, styled } from "@revolt/ui"; - -import { TextChannel } from "./text/TextChannel"; +import { TextChannel } from './text/TextChannel'; /** * Channel layout */ -const Base = styled("div")` +const Base = styled('div')` min-width: 0; flex-grow: 1; display: flex; @@ -24,11 +23,11 @@ export interface ChannelPageProps { channel: Channel; } -const TEXT_CHANNEL_TYPES: Channel["type"][] = [ - "TextChannel", - "DirectMessage", - "Group", - "SavedMessages", +const TEXT_CHANNEL_TYPES: Channel['type'][] = [ + 'TextChannel', + 'DirectMessage', + 'Group', + 'SavedMessages', ]; /** @@ -41,18 +40,18 @@ export const ChannelPage: Component = () => { return ( <Base> - <Switch fallback="Unknown channel type!"> + <Switch fallback='Unknown channel type!'> <Match when={!channel()}> - <Navigate href={"../.."} /> + <Navigate href={'../..'} /> </Match> <Match when={TEXT_CHANNEL_TYPES.includes(channel()!.type)}> <TextChannel channel={channel()} /> </Match> - <Match when={channel()!.type === "VoiceChannel"}> - <Header placement="primary"> + <Match when={channel()!.type === 'VoiceChannel'}> + <Header placement='primary'> <TextWithEmoji content={channel().name!} /> </Header> - <Typography variant="legacy-modal-title"> + <Typography variant='legacy-modal-title'> Legacy voice channels are not supported! </Typography> </Match> diff --git a/packages/client/src/interface/channels/text/Composition.tsx b/packages/client/src/interface/channels/text/Composition.tsx index f62828548..ac88cf4ea 100644 --- a/packages/client/src/interface/channels/text/Composition.tsx +++ b/packages/client/src/interface/channels/text/Composition.tsx @@ -1,18 +1,8 @@ -import { - BiRegularPlus, - BiSolidFileGif, - BiSolidHappyBeaming, - BiSolidSend, -} from "solid-icons/bi"; -import { For, Match, Show, Switch, onCleanup, onMount } from "solid-js"; - -import { API, Channel } from "revolt.js"; - -import { useClient } from "@revolt/client"; -import { debounce } from "@revolt/common"; -import { useTranslation } from "@revolt/i18n"; -import { modalController } from "@revolt/modal"; -import { state } from "@revolt/state"; +import { useClient } from '@revolt/client'; +import { debounce } from '@revolt/common'; +import { useTranslation } from '@revolt/i18n'; +import { modalController } from '@revolt/modal'; +import { state } from '@revolt/state'; import { Button, CompositionPicker, @@ -22,7 +12,16 @@ import { InlineIcon, MessageBox, MessageReplyPreview, -} from "@revolt/ui"; +} from '@revolt/ui'; +import type { Channel } from 'revolt.js'; +import { API } from 'revolt.js'; +import { + BiRegularPlus, + BiSolidFileGif, + BiSolidHappyBeaming, + BiSolidSend, +} from 'solid-icons/bi'; +import { For, Match, onCleanup, onMount, Show, Switch } from 'solid-js'; interface Props { /** @@ -39,7 +38,7 @@ interface Props { /** * Tests for code block delimiters (``` at start of line) */ -const RE_CODE_DELIMITER = new RegExp("^```", "gm"); +const RE_CODE_DELIMITER = new RegExp('^```', 'gm'); /** * Message composition engine @@ -70,13 +69,13 @@ export function MessageComposition(props: Props) { * Send typing packet */ function startTyping() { - if (typeof isTyping === "number" && +new Date() < isTyping) return; + if (typeof isTyping === 'number' && +new Date() < isTyping) return; const ws = client()!.events; if (ws.state() === 2) { isTyping = +new Date() + 2500; ws.send({ - type: "BeginTyping", + type: 'BeginTyping', channel: props.channel.id, }); } @@ -91,7 +90,7 @@ export function MessageComposition(props: Props) { if (ws.state() === 2) { isTyping = undefined; ws.send({ - type: "EndTyping", + type: 'EndTyping', channel: props.channel.id, }); } @@ -110,7 +109,7 @@ export function MessageComposition(props: Props) { async function sendMessage(useContent?: unknown) { props.onMessageSend?.(); - if (typeof useContent === "string") { + if (typeof useContent === 'string') { return props.channel.sendMessage(useContent); } @@ -131,7 +130,7 @@ export function MessageComposition(props: Props) { * @returns Whether we are in a code block */ function isInCodeBlock(cursor: number): boolean { - const contentBeforeCursor = (draft().content ?? "").substring(0, cursor); + const contentBeforeCursor = (draft().content ?? '').substring(0, cursor); let delimiterCount = 0; for (const _delimiter of contentBeforeCursor.matchAll(RE_CODE_DELIMITER)) { @@ -152,24 +151,24 @@ export function MessageComposition(props: Props) { const insideCodeBlock = isInCodeBlock(event.currentTarget.selectionStart); const usingBracketIndent = (event.ctrlKey || event.metaKey) && - (event.key === "[" || event.key === "]"); + (event.key === '[' || event.key === ']'); if ( - (event.key === "Tab" || usingBracketIndent) && + (event.key === 'Tab' || usingBracketIndent) && !event.isComposing && insideCodeBlock ) { // Handle code block indentation. event.preventDefault(); - const indent = " "; // 2 spaces + const indent = ' '; // 2 spaces const selectStart = event.currentTarget.selectionStart; const selectEnd = event.currentTarget.selectionEnd; let selectionStartColumn = 0; let selectionEndColumn = 0; - const lines = (draft().content ?? "").split("\n"); + const lines = (draft().content ?? '').split('\n'); const selectLines = []; // Get indexes of selected lines @@ -194,7 +193,7 @@ export function MessageComposition(props: Props) { lineIndex += currentLine.length + 1; // add 1 to account for missing newline char } - if ((event.shiftKey && event.key === "Tab") || event.key === "[") { + if ((event.shiftKey && event.key === 'Tab') || event.key === '[') { const whitespaceRegex = new RegExp(`(?<=^ *) {1,${indent.length}}`); // Used to ensure selection remains the same after indentation changes @@ -215,7 +214,7 @@ export function MessageComposition(props: Props) { } } - setContent(lines.join("\n")); + setContent(lines.join('\n')); // Update selection positions. event.currentTarget.selectionStart = @@ -229,7 +228,7 @@ export function MessageComposition(props: Props) { for (const selectedLineIndex of selectLines) { const currentLine = lines[selectedLineIndex]; - if (selectStart === selectEnd && event.key === "Tab") { + if (selectStart === selectEnd && event.key === 'Tab') { // Insert spacing at current position instead of line start const beforeIndent = currentLine.slice(0, selectionStartColumn); const afterIndent = currentLine.slice(selectionEndColumn); @@ -243,7 +242,7 @@ export function MessageComposition(props: Props) { indentsAdded++; } - setContent(lines.join("\n")); + setContent(lines.join('\n')); // Update selection positions. event.currentTarget.selectionStart = selectStart + indent.length; @@ -253,7 +252,7 @@ export function MessageComposition(props: Props) { } if ( - event.key === "Enter" && + event.key === 'Enter' && !event.shiftKey && !event.isComposing && !insideCodeBlock /*&& props.ref*/ @@ -271,7 +270,7 @@ export function MessageComposition(props: Props) { * @param event Keyboard Event */ function onKeyDown(event: KeyboardEvent) { - if (event.key === "Escape") { + if (event.key === 'Escape') { if (state.draft.popFromDraft(props.channel.id)) { event.preventDefault(); } @@ -281,15 +280,15 @@ export function MessageComposition(props: Props) { // Don't take focus from modals !modalController.isOpen() && // Only focus if pasting to allow copying of text elsewhere - (!(event.ctrlKey || event.metaKey) || event.key.toLowerCase() === "v") + (!(event.ctrlKey || event.metaKey) || event.key.toLowerCase() === 'v') ) { ref?.focus(); } } // Bind onKeyDown to the document - onMount(() => document.addEventListener("keydown", onKeyDown)); - onCleanup(() => document.removeEventListener("keydown", onKeyDown)); + onMount(() => document.addEventListener('keydown', onKeyDown)); + onCleanup(() => document.removeEventListener('keydown', onKeyDown)); /** * Handle files being added to the draft. @@ -298,7 +297,7 @@ export function MessageComposition(props: Props) { function onFiles(files: File[]) { for (const file of files) { if (file.size > 20_000_000) { - alert("file too large"); + alert('file too large'); } } @@ -315,13 +314,13 @@ export function MessageComposition(props: Props) { * Add a file to the message */ function addFile() { - const input = document.createElement("input"); - input.accept = "*"; - input.type = "file"; + const input = document.createElement('input'); + input.accept = '*'; + input.type = 'file'; input.multiple = true; - input.style.display = "none"; + input.style.display = 'none'; - input.addEventListener("change", async (e) => { + input.addEventListener('change', async (e) => { // Get all attached files const files = (e.currentTarget as HTMLInputElement)?.files; @@ -386,18 +385,18 @@ export function MessageComposition(props: Props) { </For> <MessageBox ref={ref} - content={draft()?.content ?? ""} + content={draft()?.content ?? ''} setContent={setContent} actionsStart={ - <Switch fallback={<InlineIcon size="short" />}> + <Switch fallback={<InlineIcon size='short' />}> <Match when={ - props.channel.havePermission("UploadFiles") && - state.experiments.isEnabled("file_uploads") + props.channel.havePermission('UploadFiles') && + state.experiments.isEnabled('file_uploads') } > - <InlineIcon size="wide"> - <Button variant="plain" size="fluid" onPress={addFile}> + <InlineIcon size='wide'> + <Button variant='plain' size='fluid' onPress={addFile}> <BiRegularPlus size={24} /> </Button> </InlineIcon> @@ -408,22 +407,22 @@ export function MessageComposition(props: Props) { <CompositionPicker sendGIFMessage={sendMessage}> {(triggerProps) => ( <> - <Show when={state.experiments.isEnabled("gif_picker")}> - <InlineIcon size="normal"> + <Show when={state.experiments.isEnabled('gif_picker')}> + <InlineIcon size='normal'> <Button - variant="plain" - size="fluid" + variant='plain' + size='fluid' onPress={triggerProps.onClickGif} > <BiSolidFileGif size={24} /> </Button> </InlineIcon> </Show> - <Show when={state.experiments.isEnabled("emoji_picker")}> - <InlineIcon size="normal"> + <Show when={state.experiments.isEnabled('emoji_picker')}> + <InlineIcon size='normal'> <Button - variant="plain" - size="fluid" + variant='plain' + size='fluid' onPress={triggerProps.onClickEmoji} > <BiSolidHappyBeaming size={24} /> @@ -431,10 +430,10 @@ export function MessageComposition(props: Props) { </InlineIcon> </Show> <Show - when={state.settings.getValue("appearance:show_send_button")} + when={state.settings.getValue('appearance:show_send_button')} > - <InlineIcon size="normal"> - <Button variant="plain" size="fluid" onPress={sendMessage}> + <InlineIcon size='normal'> + <Button variant='plain' size='fluid' onPress={sendMessage}> <BiSolidSend size={24} /> </Button> </InlineIcon> @@ -446,17 +445,17 @@ export function MessageComposition(props: Props) { </CompositionPicker> } placeholder={ - props.channel.type === "SavedMessages" - ? t("app.main.channel.message_saved") - : props.channel.type === "DirectMessage" - ? t("app.main.channel.message_who", { - person: props.channel.recipient?.username as string, - }) - : t("app.main.channel.message_where", { - channel_name: props.channel.name as string, - }) + props.channel.type === 'SavedMessages' + ? t('app.main.channel.message_saved') + : props.channel.type === 'DirectMessage' + ? t('app.main.channel.message_who', { + person: props.channel.recipient?.username as string, + }) + : t('app.main.channel.message_where', { + channel_name: props.channel.name as string, + }) } - sendingAllowed={props.channel.havePermission("SendMessage")} + sendingAllowed={props.channel.havePermission('SendMessage')} autoCompleteConfig={{ onKeyDown: onKeyDownMessageBox, client: client(), @@ -467,9 +466,9 @@ export function MessageComposition(props: Props) { ), channels: props.channel.server.channels, } - : props.channel.type === "Group" - ? { users: props.channel.recipients, channels: [] } - : { channels: [] }, + : props.channel.type === 'Group' + ? { users: props.channel.recipients, channels: [] } + : { channels: [] }, }} updateDraftSelection={(start, end) => state.draft.setSelection(props.channel.id, start, end) diff --git a/packages/client/src/interface/channels/text/MemberSidebar.tsx b/packages/client/src/interface/channels/text/MemberSidebar.tsx index 79a0324ce..034d0e059 100644 --- a/packages/client/src/interface/channels/text/MemberSidebar.tsx +++ b/packages/client/src/interface/channels/text/MemberSidebar.tsx @@ -1,27 +1,25 @@ -import { For, Match, Show, Switch, createMemo, onMount } from "solid-js"; - -import { VirtualContainer } from "@minht11/solid-virtual-container"; -import { Channel, ServerMember, User } from "revolt.js"; -import { styled } from "styled-system/jsx"; - -import { floatingUserMenus } from "@revolt/app/menus/UserContextMenu"; -import { useClient } from "@revolt/client"; -import { useTranslation } from "@revolt/i18n"; -import { TextWithEmoji } from "@revolt/markdown"; -import { userInformation } from "@revolt/markdown/users"; +import { VirtualContainer } from '@minht11/solid-virtual-container'; +import { floatingUserMenus } from '@revolt/app/menus/UserContextMenu'; +import { useClient } from '@revolt/client'; +import { useTranslation } from '@revolt/i18n'; +import { TextWithEmoji } from '@revolt/markdown'; +import { userInformation } from '@revolt/markdown/users'; import { Avatar, Deferred, MenuButton, OverflowingText, Row, + styled as styledLegacy, Tooltip, Typography, + Username, UserStatus, UserStatusGraphic, - Username, - styled as styledLegacy, -} from "@revolt/ui"; +} from '@revolt/ui'; +import type { Channel, ServerMember, User } from 'revolt.js'; +import { createMemo, Match, onMount, Show, Switch } from 'solid-js'; +import { styled } from 'styled-system/jsx'; interface Props { /** @@ -36,10 +34,10 @@ interface Props { export function MemberSidebar(props: Props) { return ( <Switch> - <Match when={props.channel.type === "Group"}> + <Match when={props.channel.type === 'Group'}> <GroupMemberSidebar channel={props.channel} /> </Match> - <Match when={props.channel.type === "TextChannel"}> + <Match when={props.channel.type === 'TextChannel'}> <ServerMemberSidebar channel={props.channel} /> </Match> </Switch> @@ -49,7 +47,7 @@ export function MemberSidebar(props: Props) { /** * Servers to not fetch all members for */ -const IGNORE_ALL = ["01F7ZSBSFHQ8TA81725KQCSDDP", "01F80118K1F2EYD9XAMCPQ0BCT"]; +const IGNORE_ALL = ['01F7ZSBSFHQ8TA81725KQCSDDP', '01F80118K1F2EYD9XAMCPQ0BCT']; /** * Server Member Sidebar @@ -82,7 +80,7 @@ export function ServerMemberSidebar(props: Props) { const [members] = stage1(); if (props.channel.potentiallyRestrictedChannel) { return members.filter((member) => - member.hasPermission(props.channel, "ViewChannel") + member.hasPermission(props.channel, 'ViewChannel') ); } else { return members; @@ -99,7 +97,7 @@ export function ServerMemberSidebar(props: Props) { for (const member of members) { if (!member.user?.online) { - byRole["offline"].push(member); + byRole['offline'].push(member); continue; } @@ -116,7 +114,7 @@ export function ServerMemberSidebar(props: Props) { if (assigned) continue; } - byRole["default"].push(member); + byRole['default'].push(member); } return [ @@ -126,17 +124,17 @@ export function ServerMemberSidebar(props: Props) { })), { role: { - id: "default", - name: "Online", + id: 'default', + name: 'Online', }, - members: byRole["default"], + members: byRole['default'], }, { role: { - id: "offline", - name: "Offline", + id: 'offline', + name: 'Offline', }, - members: byRole["offline"], + members: byRole['offline'], }, ].filter((entry) => entry.members.length); }); @@ -150,7 +148,7 @@ export function ServerMemberSidebar(props: Props) { members: [...entry.members].sort( (a, b) => (a.nickname ?? a.user?.displayName)?.localeCompare( - b.nickname ?? b.user?.displayName ?? "" + b.nickname ?? b.user?.displayName ?? '' ) || 0 ), })); @@ -210,15 +208,15 @@ export function ServerMemberSidebar(props: Props) { <Base ref={scrollTargetElement} use:scrollable={{ - direction: "y", + direction: 'y', showOnHover: true, }} > <Container> - <MemberTitle bottomMargin="yes"> - <Typography variant="category"> + <MemberTitle bottomMargin='yes'> + <Typography variant='category'> <Row align> - <UserStatus size="0.7em" status="Online" /> + <UserStatus size='0.7em' status='Online' /> { client().serverMembers.filter( (member) => @@ -226,7 +224,7 @@ export function ServerMemberSidebar(props: Props) { member.user?.online) || false ).length - }{" "} + }{' '} members online </Row> </Typography> @@ -242,14 +240,14 @@ export function ServerMemberSidebar(props: Props) { <div style={{ ...item.style, - width: "100%", + width: '100%', }} > <Switch fallback={ <CategoryTitle> - <Typography variant="category"> - {(item.item as { name: string }).name} {"–"}{" "} + <Typography variant='category'> + {(item.item as { name: string }).name} {'–'}{' '} {(item.item as { count: number }).count} </Typography> </CategoryTitle> @@ -280,13 +278,13 @@ export function GroupMemberSidebar(props: Props) { <Base ref={scrollTargetElement} use:scrollable={{ - direction: "y", + direction: 'y', showOnHover: true, }} > <Container> <MemberTitle> - <Typography variant="category"> + <Typography variant='category'> <Row align>{props.channel.recipientIds.size} members</Row> </Typography> </MemberTitle> @@ -303,7 +301,7 @@ export function GroupMemberSidebar(props: Props) { <div style={{ ...item.style, - width: "100%", + width: '100%', }} > <Member user={item.item} /> @@ -322,20 +320,20 @@ export function GroupMemberSidebar(props: Props) { const Base = styledLegacy.div` flex-shrink: 0; - width: ${(props) => props.theme!.layout.width["channel-sidebar"]}; - margin: ${(props) => (props.theme!.gap.md + " ").repeat(3)}0; + width: ${(props) => props.theme!.layout.width['channel-sidebar']}; + margin: ${(props) => (props.theme!.gap.md + ' ').repeat(3)}0; margin-top: calc(48px + 2 * ${(props) => props.theme!.gap.md}); border-radius: ${(props) => props.theme!.borderRadius.lg}; - color: ${({ theme }) => theme!.colours["sidebar-channels-foreground"]}; - background: ${({ theme }) => theme!.colours["sidebar-channels-background"]}; + color: ${({ theme }) => theme!.colours['sidebar-channels-foreground']}; + background: ${({ theme }) => theme!.colours['sidebar-channels-background']}; `; /** * Container styles */ const Container = styledLegacy.div` - width: ${(props) => props.theme!.layout.width["channel-sidebar"]}; + width: ${(props) => props.theme!.layout.width['channel-sidebar']}; `; /** @@ -348,16 +346,16 @@ const CategoryTitle = styledLegacy.div` /** * Member title */ -const MemberTitle = styled("div", { +const MemberTitle = styled('div', { base: { - marginTop: "12px", - marginLeft: "14px", + marginTop: '12px', + marginLeft: '14px', }, variants: { bottomMargin: { no: {}, yes: { - marginBottom: "-12px", + marginBottom: '-12px', }, }, }, @@ -366,18 +364,19 @@ const MemberTitle = styled("div", { /** * Styles required to correctly display name and status */ -const NameStatusStack = styled("div", { +const NameStatusStack = styled('div', { base: { - height: "100%", + height: '100%', - display: "flex", - flexDirection: "column", - justifyContent: "center", + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', }, }); /** * Member + * TODO: Type discrimination correctly. */ function Member(props: { user?: User; member?: ServerMember }) { const t = useTranslation(); @@ -393,7 +392,7 @@ function Member(props: { user?: User; member?: ServerMember }) { */ const status = () => (props.user ?? props.member?.user)?.statusMessage((presence) => - t(`app.status.${presence.toLowerCase()}`) + t(`app.status.${presence.toLowerCase() as Lowercase<typeof presence>}`) ); return ( @@ -404,15 +403,15 @@ function Member(props: { user?: User; member?: ServerMember }) { )} > <MenuButton - size="normal" + size='normal' attention={ - (props.user ?? props.member?.user)?.online ? "active" : "muted" + (props.user ?? props.member?.user)?.online ? 'active' : 'muted' } icon={ <Avatar src={user().avatar} size={32} - holepunch="bottom-right" + holepunch='bottom-right' overlay={ <UserStatusGraphic status={(props.user ?? props.member?.user)?.presence} @@ -428,11 +427,11 @@ function Member(props: { user?: User; member?: ServerMember }) { <Show when={status()}> <Tooltip content={() => <TextWithEmoji content={status()!} />} - placement="top-start" + placement='top-start' aria={status()!} > <OverflowingText> - <Typography variant="status"> + <Typography variant='status'> <TextWithEmoji content={status()!} /> </Typography> </OverflowingText> diff --git a/packages/client/src/interface/channels/text/TextChannel.tsx b/packages/client/src/interface/channels/text/TextChannel.tsx index b3863d1a4..fb74454c9 100644 --- a/packages/client/src/interface/channels/text/TextChannel.tsx +++ b/packages/client/src/interface/channels/text/TextChannel.tsx @@ -1,23 +1,10 @@ -import { - For, - Show, - createEffect, - createSignal, - on, - onCleanup, - onMount, -} from "solid-js"; - -import { Message as MessageInterface } from "revolt.js"; -import { decodeTime, ulid } from "ulid"; - -import { DraftMessages, Message, Messages } from "@revolt/app"; -import { useClient, useUser } from "@revolt/client"; -import { KeybindAction } from "@revolt/keybinds"; -import { userInformation } from "@revolt/markdown/users"; -import { useNavigate, useSmartParams } from "@revolt/routing"; -import { state } from "@revolt/state"; -import { LAYOUT_SECTIONS } from "@revolt/state/stores/Layout"; +import { DraftMessages, Message, Messages } from '@revolt/app'; +import { useClient, useUser } from '@revolt/client'; +import { KeybindAction } from '@revolt/keybinds'; +import { userInformation } from '@revolt/markdown/users'; +import { useNavigate, useSmartParams } from '@revolt/routing'; +import { state } from '@revolt/state'; +import { LAYOUT_SECTIONS } from '@revolt/state/stores/Layout'; import { Avatar, BelowFloatingHeader, @@ -25,17 +12,27 @@ import { MessageContainer, MessageReply, NewMessages, + styled, TypingIndicator, Username, - styled, -} from "@revolt/ui"; -import { useKeybindActions } from "@revolt/ui/components/context/Keybinds"; - -import { ChannelHeader } from "../ChannelHeader"; -import { ChannelPageProps } from "../ChannelPage"; +} from '@revolt/ui'; +import { useKeybindActions } from '@revolt/ui/components/context/Keybinds'; +import { Message as MessageInterface } from 'revolt.js'; +import { + createEffect, + createSignal, + For, + on, + onCleanup, + onMount, + Show, +} from 'solid-js'; +import { decodeTime, ulid } from 'ulid'; -import { MessageComposition } from "./Composition"; -import { MemberSidebar } from "./MemberSidebar"; +import { ChannelHeader } from '../ChannelHeader'; +import type { ChannelPageProps } from '../ChannelPage'; +import { MessageComposition } from './Composition'; +import { MemberSidebar } from './MemberSidebar'; /** * Channel component @@ -122,7 +119,7 @@ export function TextChannel(props: ChannelPageProps) { return ( <> - <HeaderWithTransparency placement="primary"> + <HeaderWithTransparency placement='primary'> <ChannelHeader channel={props.channel} /> </HeaderWithTransparency> <Content> @@ -142,7 +139,7 @@ export function TextChannel(props: ChannelPageProps) { lastReadId={lastId} pendingMessages={<DraftMessages channel={props.channel} />} highlightedMessageId={highlightMessageId} - clearHighlightedMessage={() => navigate(".")} + clearHighlightedMessage={() => navigate('.')} atEndRef={(ref) => (atEndRef = ref)} jumpToBottomRef={(ref) => (jumpToBottomRef = ref)} /> diff --git a/packages/client/src/interface/common/CommonHeader.tsx b/packages/client/src/interface/common/CommonHeader.tsx index fe8739274..c33a3e5b1 100644 --- a/packages/client/src/interface/common/CommonHeader.tsx +++ b/packages/client/src/interface/common/CommonHeader.tsx @@ -1,7 +1,6 @@ -import { BiRegularChevronLeft } from "solid-icons/bi"; -import { JSX } from "solid-js"; - -import { Row } from "@revolt/ui"; +import { Row } from '@revolt/ui'; +import { BiRegularChevronLeft } from 'solid-icons/bi'; +import type { JSX } from 'solid-js'; /** * Wrapper for header icons which adds the chevron on the @@ -10,7 +9,7 @@ import { Row } from "@revolt/ui"; */ export function HeaderIcon(props: { children: JSX.Element }) { return ( - <Row gap="none" align> + <Row gap='none' align> <BiRegularChevronLeft size={20} /> {props.children} </Row> diff --git a/packages/client/src/sentry.ts b/packages/client/src/sentry.ts index 9edd2224c..c8d1b5591 100644 --- a/packages/client/src/sentry.ts +++ b/packages/client/src/sentry.ts @@ -1,5 +1,5 @@ -import * as Sentry from "@sentry/browser"; -import { BrowserTracing } from "@sentry/tracing"; +import * as Sentry from '@sentry/browser'; +import { BrowserTracing } from '@sentry/tracing'; if (import.meta.env.PROD && import.meta.env.VITE_SENTRY_DSN) { Sentry.init({ @@ -7,7 +7,7 @@ if (import.meta.env.PROD && import.meta.env.VITE_SENTRY_DSN) { integrations: [ new BrowserTracing({ // Set `tracePropagationTargets` to control for which URLs distributed tracing should be enabled - tracePropagationTargets: ["localhost", /^https:\/\/revolt\.chat\/api/], + tracePropagationTargets: ['localhost', /^https:\/\/revolt\.chat\/api/], }), ], diff --git a/packages/client/src/sw.ts b/packages/client/src/sw.ts index 378cee49d..0683ed07b 100644 --- a/packages/client/src/sw.ts +++ b/packages/client/src/sw.ts @@ -1,11 +1,10 @@ -// eslint-disable-next-line /// <reference lib="webworker" /> -import { cleanupOutdatedCaches, precacheAndRoute } from "workbox-precaching"; +import { cleanupOutdatedCaches, precacheAndRoute } from 'workbox-precaching'; declare let self: ServiceWorkerGlobalScope; -self.addEventListener("message", (event) => { - if (event.data && event.data.type === "SKIP_WAITING") self.skipWaiting(); +self.addEventListener('message', (event) => { + if (event.data && event.data.type === 'SKIP_WAITING') self.skipWaiting(); }); cleanupOutdatedCaches(); @@ -18,12 +17,12 @@ const locale_keys = ["af","am","ar-dz","ar-kw","ar-ly","ar-ma","ar-sa","ar-tn"," precacheAndRoute( self.__WB_MANIFEST.filter((entry) => { try { - const url = typeof entry === "string" ? entry : entry.url; - if (url.includes("-legacy")) return false; + const url = typeof entry === 'string' ? entry : entry.url; + if (url.includes('-legacy')) return false; - const fn = url.split("/").pop(); + const fn = url.split('/').pop(); if (fn) { - if (fn.endsWith("css") && !isNaN(parseInt(fn.substring(0, 3)))) { + if (fn.endsWith('css') && !isNaN(parseInt(fn.substring(0, 3)))) { return false; } diff --git a/packages/client/test/index.tsx b/packages/client/test/index.tsx index fd64b8843..c364ade52 100644 --- a/packages/client/test/index.tsx +++ b/packages/client/test/index.tsx @@ -1,10 +1,8 @@ -import type { JSX } from "solid-js"; - -import { HashRouter } from "@solidjs/router"; -import { render } from "@solidjs/testing-library"; - -import i18n, { I18nContext } from "@revolt/i18n"; -import { Masks, ThemeProvider, darkTheme } from "@revolt/ui"; +import i18n, { I18nContext } from '@revolt/i18n'; +import { darkTheme, Masks, ThemeProvider } from '@revolt/ui'; +import { HashRouter } from '@solidjs/router'; +import { render } from '@solidjs/testing-library'; +import type { JSX } from 'solid-js'; /** * Inject Context above children diff --git a/packages/client/vite.config.ts b/packages/client/vite.config.ts index 1231f5bd5..36985a342 100644 --- a/packages/client/vite.config.ts +++ b/packages/client/vite.config.ts @@ -1,16 +1,16 @@ -import devtools from "@solid-devtools/transform"; -import { readdirSync } from "node:fs"; -import { resolve } from "node:path"; -import { defineConfig } from "vite"; -import Inspect from "vite-plugin-inspect"; -import { VitePWA } from "vite-plugin-pwa"; -import solidPlugin from "vite-plugin-solid"; -// @ts-expect-error -import solidSvg from "vite-plugin-solid-svg"; +import { readdirSync } from 'node:fs'; +import { resolve } from 'node:path'; -import codegenPlugin from "./codegen.plugin"; +import devtools from 'solid-devtools/vite'; +import { defineConfig } from 'vite'; +import Inspect from 'vite-plugin-inspect'; +import { VitePWA } from 'vite-plugin-pwa'; +import solidPlugin from 'vite-plugin-solid'; +import solidSvg from 'vite-plugin-solid-svg'; -const base = process.env.BASE_PATH ?? "/"; +import codegenPlugin from './codegen.plugin'; + +const base = process.env.BASE_PATH ?? '/'; export default defineConfig({ base, @@ -23,42 +23,42 @@ export default defineConfig({ defaultAsComponent: false, }), VitePWA({ - srcDir: "src", - filename: "sw.ts", - strategies: "injectManifest", + srcDir: 'src', + filename: 'sw.ts', + strategies: 'injectManifest', manifest: { - name: "Revolt", - short_name: "Revolt", - description: "User-first open source chat platform.", - categories: ["communication", "chat", "messaging"], - start_url: "/pwa", - orientation: "portrait", - display_override: ["window-controls-overlay"], - display: "standalone", - background_color: "#101823", - theme_color: "#101823", + name: 'Revolt', + short_name: 'Revolt', + description: 'User-first open source chat platform.', + categories: ['communication', 'chat', 'messaging'], + start_url: '/pwa', + orientation: 'portrait', + display_override: ['window-controls-overlay'], + display: 'standalone', + background_color: '#101823', + theme_color: '#101823', icons: [ { src: `${base}assets/icons/android-chrome-192x192.png`, - type: "image/png", - sizes: "192x192", + type: 'image/png', + sizes: '192x192', }, { src: `${base}assets/icons/android-chrome-512x512.png`, - type: "image/png", - sizes: "512x512", + type: 'image/png', + sizes: '512x512', }, { src: `${base}assets/icons/monochrome.svg`, - type: "image/svg+xml", - sizes: "48x48 72x72 96x96 128x128 256x256", - purpose: "monochrome", + type: 'image/svg+xml', + sizes: '48x48 72x72 96x96 128x128 256x256', + purpose: 'monochrome', }, { src: `${base}assets/icons/masking-512x512.png`, - type: "image/png", - sizes: "512x512", - purpose: "maskable", + type: 'image/png', + sizes: '512x512', + purpose: 'maskable', }, ], // TODO: take advantage of shortcuts @@ -66,18 +66,21 @@ export default defineConfig({ }), ], build: { - target: "esnext", + target: 'esnext', + rollupOptions: { + external: ['hast'], + }, }, optimizeDeps: { - exclude: ["solid-styled-components"], + exclude: ['solid-styled-components', 'hast'], }, resolve: { alias: { - "styled-system": resolve(__dirname, "styled-system"), - ...readdirSync(resolve(__dirname, "components")).reduce( + 'styled-system': resolve(__dirname, 'styled-system'), + ...readdirSync(resolve(__dirname, 'components')).reduce( (p, f) => ({ ...p, - [`@revolt/${f}`]: resolve(__dirname, "components", f), + [`@revolt/${f}`]: resolve(__dirname, 'components', f), }), {} ), diff --git a/packages/client/vitest.config.ts b/packages/client/vitest.config.ts index 00c37e812..4eb73587b 100644 --- a/packages/client/vitest.config.ts +++ b/packages/client/vitest.config.ts @@ -1,20 +1,20 @@ -import { resolve } from "node:path"; -import { defineConfig, mergeConfig } from "vite"; -import solidPlugin from "vite-plugin-solid"; +import { resolve } from 'node:path'; -import viteConfig from "./vite.config"; +import { defineConfig, mergeConfig } from 'vite'; + +import viteConfig from './vite.config'; export default mergeConfig( viteConfig, defineConfig({ test: { globals: true, - environment: "jsdom", - setupFiles: ["node_modules/@testing-library/jest-dom/dist/index.js"], + environment: 'jsdom', + setupFiles: ['node_modules/@testing-library/jest-dom/dist/index.js'], testTransformMode: { - web: ["/.[jt]sx?$/"], + web: ['/.[jt]sx?$/'], }, - pool: "forks", + pool: 'forks', poolOptions: { forks: { isolate: false, @@ -23,23 +23,23 @@ export default mergeConfig( deps: { optimizer: { web: { - exclude: ["solid-js"], + exclude: ['solid-js'], }, }, }, server: { deps: { - inline: ["solid-icons", "@solid-aria/focus"], + inline: ['solid-icons', '@solid-aria/focus'], }, }, coverage: { - reporter: ["text", "json", "html"], + reporter: ['text', 'json', 'html'], }, }, resolve: { - conditions: ["development", "browser"], + conditions: ['development', 'browser'], alias: { - "@test": resolve(__dirname, "test"), + '@test': resolve(__dirname, 'test'), }, }, }) diff --git a/packages/desktop/package.json b/packages/desktop/package.json index d96836f34..84de50a6b 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -6,6 +6,6 @@ "tauri": "tauri" }, "devDependencies": { - "@tauri-apps/cli": "^1.2.3" + "@tauri-apps/cli": "^2.0.2" } } \ No newline at end of file diff --git a/packages/desktop/src-tauri/Cargo.lock b/packages/desktop/src-tauri/Cargo.lock index 1233467d7..63e5198f8 100644 --- a/packages/desktop/src-tauri/Cargo.lock +++ b/packages/desktop/src-tauri/Cargo.lock @@ -3,16 +3,25 @@ version = 3 [[package]] -name = "adler" -version = "1.0.2" +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aho-corasick" -version = "0.7.20" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] @@ -32,53 +41,82 @@ dependencies = [ "alloc-no-stdlib", ] +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anyhow" -version = "1.0.70" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] name = "atk" -version = "0.15.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd" +checksum = "b4af014b17dd80e8af9fa689b2d4a211ddba6eb583c1622f35d0cb543f6b17e4" dependencies = [ "atk-sys", - "bitflags", "glib", "libc", ] [[package]] name = "atk-sys" -version = "0.15.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6" +checksum = "251e0b7d90e33e0ba930891a505a9a35ece37b2dd37a14f3ffc306c13b980009" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.0.4", + "system-deps", ] [[package]] name = "autocfg" -version = "1.1.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] [[package]] name = "base64" -version = "0.13.1" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64" -version = "0.21.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bitflags" @@ -86,6 +124,15 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +dependencies = [ + "serde", +] + [[package]] name = "block" version = "0.1.6" @@ -101,11 +148,20 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +dependencies = [ + "objc2", +] + [[package]] name = "brotli" -version = "3.3.4" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -114,81 +170,116 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.3.4" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" +checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", ] [[package]] -name = "bstr" -version = "1.4.0" +name = "bumpalo" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" -dependencies = [ - "memchr", - "serde", -] +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.4.0" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" +dependencies = [ + "serde", +] [[package]] name = "cairo-rs" -version = "0.15.12" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags", + "bitflags 2.6.0", "cairo-sys-rs", "glib", "libc", + "once_cell", "thiserror", ] [[package]] name = "cairo-sys-rs" -version = "0.15.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" dependencies = [ "glib-sys", "libc", - "system-deps 6.0.4", + "system-deps", +] + +[[package]] +name = "camino" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", ] [[package]] name = "cargo_toml" -version = "0.13.3" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497049e9477329f8f6a559972ee42e117487d01d1e8c2cc9f836ea6fa23a9e1a" +checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719" dependencies = [ "serde", - "toml 0.5.11", + "toml 0.8.2", ] [[package]] name = "cc" -version = "1.0.79" +version = "1.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "2e80e3b6a3ab07840e1cae9b0666a63970dc28e8ed5ffbcdacbfc760c281bfc1" +dependencies = [ + "shlex", +] [[package]] name = "cesu8" @@ -198,49 +289,77 @@ checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" [[package]] name = "cfb" -version = "0.6.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74f89d248799e3f15f91b70917f65381062a01bb8e222700ea0e5a7ff9785f9c" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" dependencies = [ "byteorder", - "uuid 0.8.2", + "fnv", + "uuid", ] [[package]] name = "cfg-expr" -version = "0.9.1" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" dependencies = [ "smallvec", + "target-lexicon", ] [[package]] -name = "cfg-expr" -version = "0.14.0" +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a35b255461940a32985c627ce82900867c61db1659764d3675ea81963f72a4c6" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ - "smallvec", + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.6", ] [[package]] -name = "cfg-if" -version = "1.0.0" +name = "cocoa" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation 0.1.2", + "core-foundation 0.9.4", + "core-graphics 0.23.2", + "foreign-types", + "libc", + "objc", +] [[package]] name = "cocoa" -version = "0.24.1" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" +checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2" dependencies = [ - "bitflags", + "bitflags 2.6.0", "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", + "cocoa-foundation 0.2.0", + "core-foundation 0.10.0", + "core-graphics 0.24.0", "foreign-types", "libc", "objc", @@ -248,30 +367,37 @@ dependencies = [ [[package]] name = "cocoa-foundation" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" dependencies = [ - "bitflags", + "bitflags 1.3.2", "block", - "core-foundation", - "core-graphics-types", - "foreign-types", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", "libc", "objc", ] [[package]] -name = "color_quant" -version = "1.1.0" +name = "cocoa-foundation" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" +checksum = "e14045fb83be07b5acf1c0884b2180461635b433455fa35d1cd6f17f1450679d" +dependencies = [ + "bitflags 2.6.0", + "block", + "core-foundation 0.10.0", + "core-graphics-types 0.2.0", + "libc", + "objc", +] [[package]] name = "combine" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ "bytes", "memchr", @@ -285,9 +411,19 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" dependencies = [ "core-foundation-sys", "libc", @@ -295,71 +431,90 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core-graphics" -version = "0.22.3" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ - "bitflags", - "core-foundation", - "core-graphics-types", + "bitflags 1.3.2", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", "foreign-types", "libc", ] [[package]] -name = "core-graphics-types" -version = "0.1.1" +name = "core-graphics" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" +checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ - "bitflags", - "core-foundation", + "bitflags 2.6.0", + "core-foundation 0.10.0", + "core-graphics-types 0.2.0", "foreign-types", "libc", ] +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.6.0", + "core-foundation 0.10.0", + "libc", +] + [[package]] name = "cpufeatures" -version = "0.2.6" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.3.2" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" -version = "0.5.7" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ - "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.15" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" -dependencies = [ - "cfg-if", -] +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crypto-common" @@ -390,29 +545,29 @@ dependencies = [ [[package]] name = "cssparser-macros" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 1.0.109", + "syn 2.0.79", ] [[package]] name = "ctor" -version = "0.1.26" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" +checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 1.0.109", + "syn 2.0.79", ] [[package]] name = "darling" -version = "0.13.4" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ "darling_core", "darling_macro", @@ -420,71 +575,81 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.13.4" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 1.0.109", + "syn 2.0.79", ] [[package]] name = "darling_macro" -version = "0.13.4" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 1.0.109", + "syn 2.0.79", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", ] [[package]] name = "derive_more" -version = "0.99.17" +version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ "convert_case", "proc-macro2", "quote", "rustc_version", - "syn 1.0.109", + "syn 2.0.79", ] [[package]] name = "digest" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", ] [[package]] -name = "dirs-next" -version = "2.0.0" +name = "dirs" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ - "cfg-if", - "dirs-sys-next", + "dirs-sys", ] [[package]] -name = "dirs-sys-next" -version = "0.1.2" +name = "dirs-sys" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ "libc", + "option-ext", "redox_users", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -493,26 +658,78 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" +[[package]] +name = "dlopen2" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "dpi" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" +dependencies = [ + "serde", +] + [[package]] name = "dtoa" -version = "0.4.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" [[package]] name = "dtoa-short" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" dependencies = [ "dtoa", ] [[package]] name = "dunce" -version = "1.0.3" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + +[[package]] +name = "embed-resource" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c" +checksum = "f4e24052d7be71f0efb50c201557f6fe7d237cfd5a64fd5bcd7fd8fe32dbbffa" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 0.8.2", + "vswhom", + "winreg", +] [[package]] name = "embed_plist" @@ -522,73 +739,65 @@ checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" [[package]] name = "encoding_rs" -version = "0.8.32" +version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" dependencies = [ "cfg-if", ] [[package]] -name = "errno" -version = "0.3.0" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.45.0", -] +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "erased-serde" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" dependencies = [ - "cc", - "libc", + "serde", + "typeid", ] [[package]] -name = "fastrand" -version = "1.9.0" +name = "fdeflate" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +checksum = "d8090f921a24b04994d9929e204f50b498a33ea6ba559ffaa05e04f7ee7fb5ab" dependencies = [ - "instant", + "simd-adler32", ] [[package]] name = "field-offset" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" dependencies = [ "memoffset", "rustc_version", ] [[package]] -name = "filetime" -version = "0.2.20" +name = "flate2" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" +checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "windows-sys 0.45.0", + "crc32fast", + "miniz_oxide", ] [[package]] -name = "flate2" -version = "1.0.25" +name = "fluent-uri" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +checksum = "17c704e9dbe1ddd863da1e6ff3567795087b1eb201ce80d8fa81162e1516500d" dependencies = [ - "crc32fast", - "miniz_oxide", + "bitflags 1.3.2", ] [[package]] @@ -599,24 +808,36 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foreign-types" -version = "0.3.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" dependencies = [ + "foreign-types-macros", "foreign-types-shared", ] +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] + [[package]] name = "foreign-types-shared" -version = "0.1.1" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -633,24 +854,24 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", ] [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -659,36 +880,45 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.12", + "syn 2.0.79", ] +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-core", + "futures-io", "futures-macro", + "futures-sink", "futures-task", + "memchr", "pin-project-lite", "pin-utils", "slab", @@ -705,11 +935,10 @@ dependencies = [ [[package]] name = "gdk" -version = "0.15.4" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8" +checksum = "f5ba081bdef3b75ebcdbfc953699ed2d7417d6bd853347a42a37d76406a33646" dependencies = [ - "bitflags", "cairo-rs", "gdk-pixbuf", "gdk-sys", @@ -721,35 +950,35 @@ dependencies = [ [[package]] name = "gdk-pixbuf" -version = "0.15.11" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" dependencies = [ - "bitflags", "gdk-pixbuf-sys", "gio", "glib", "libc", + "once_cell", ] [[package]] name = "gdk-pixbuf-sys" -version = "0.15.10" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" dependencies = [ "gio-sys", "glib-sys", "gobject-sys", "libc", - "system-deps 6.0.4", + "system-deps", ] [[package]] name = "gdk-sys" -version = "0.15.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88" +checksum = "31ff856cb3386dae1703a920f803abafcc580e9b5f711ca62ed1620c25b51ff2" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -759,33 +988,48 @@ dependencies = [ "libc", "pango-sys", "pkg-config", - "system-deps 6.0.4", + "system-deps", ] [[package]] -name = "gdkx11-sys" -version = "0.15.1" +name = "gdkwayland-sys" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178" +checksum = "a90fbf5c033c65d93792192a49a8efb5bb1e640c419682a58bb96f5ae77f3d4a" dependencies = [ "gdk-sys", "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2ea8a4909d530f79921290389cbd7c34cb9d623bfe970eaae65ca5f9cd9cce" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib", "libc", - "system-deps 6.0.4", "x11", ] [[package]] -name = "generator" -version = "0.7.3" +name = "gdkx11-sys" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33a20a288a94683f5f4da0adecdbe095c94a77c295e514cc6484e9394dd8376e" +checksum = "fee8f00f4ee46cad2939b8990f5c70c94ff882c3028f3cc5abf950fa4ab53043" dependencies = [ - "cc", + "gdk-sys", + "glib-sys", "libc", - "log", - "rustversion", - "windows 0.44.0", + "system-deps", + "x11", ] [[package]] @@ -811,60 +1055,71 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", "wasi 0.11.0+wasi-snapshot-preview1", ] +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + [[package]] name = "gio" -version = "0.15.12" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" dependencies = [ - "bitflags", "futures-channel", "futures-core", "futures-io", + "futures-util", "gio-sys", "glib", "libc", "once_cell", + "pin-project-lite", + "smallvec", "thiserror", ] [[package]] name = "gio-sys" -version = "0.15.10" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.0.4", + "system-deps", "winapi", ] [[package]] name = "glib" -version = "0.15.12" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags", + "bitflags 2.6.0", "futures-channel", "futures-core", "futures-executor", "futures-task", + "futures-util", + "gio-sys", "glib-macros", "glib-sys", "gobject-sys", "libc", + "memchr", "once_cell", "smallvec", "thiserror", @@ -872,27 +1127,26 @@ dependencies = [ [[package]] name = "glib-macros" -version = "0.15.13" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10c6ae9f6fa26f4fb2ac16b528d138d971ead56141de489f8111e259b9df3c4a" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" dependencies = [ - "anyhow", "heck 0.4.1", - "proc-macro-crate", + "proc-macro-crate 2.0.2", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.79", ] [[package]] name = "glib-sys" -version = "0.15.10" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" dependencies = [ "libc", - "system-deps 6.0.4", + "system-deps", ] [[package]] @@ -901,38 +1155,24 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" -[[package]] -name = "globset" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" -dependencies = [ - "aho-corasick", - "bstr", - "fnv", - "log", - "regex", -] - [[package]] name = "gobject-sys" -version = "0.15.10" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" dependencies = [ "glib-sys", "libc", - "system-deps 6.0.4", + "system-deps", ] [[package]] name = "gtk" -version = "0.15.5" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0" +checksum = "93c4f5e0e20b60e10631a5f06da7fe3dda744b05ad0ea71fee2f47adf865890c" dependencies = [ "atk", - "bitflags", "cairo-rs", "field-offset", "futures-channel", @@ -943,16 +1183,15 @@ dependencies = [ "gtk-sys", "gtk3-macros", "libc", - "once_cell", "pango", "pkg-config", ] [[package]] name = "gtk-sys" -version = "0.15.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84" +checksum = "771437bf1de2c1c0b496c11505bdf748e26066bbe942dfc8f614c9460f6d7722" dependencies = [ "atk-sys", "cairo-sys-rs", @@ -963,21 +1202,20 @@ dependencies = [ "gobject-sys", "libc", "pango-sys", - "system-deps 6.0.4", + "system-deps", ] [[package]] name = "gtk3-macros" -version = "0.15.6" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "684c0456c086e8e7e9af73ec5b84e35938df394712054550e81558d21c44ab0d" +checksum = "c6063efb63db582968fb7df72e1ae68aa6360dcfb0a75143f34fc7d616bad75e" dependencies = [ - "anyhow", - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.79", ] [[package]] @@ -987,13 +1225,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] -name = "heck" -version = "0.3.3" +name = "hashbrown" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" [[package]] name = "heck" @@ -1002,25 +1237,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] -name = "hermit-abi" -version = "0.2.6" +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.1" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "html5ever" -version = "0.25.2" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" +checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" dependencies = [ "log", "mac", @@ -1032,76 +1270,129 @@ dependencies = [ [[package]] name = "http" -version = "0.2.9" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" dependencies = [ "bytes", "fnv", - "itoa 1.0.6", + "itoa 1.0.11", ] [[package]] -name = "http-range" -version = "0.1.5" +name = "http-body" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] [[package]] -name = "ico" -version = "0.2.0" +name = "http-body-util" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "031530fe562d8c8d71c0635013d6d155bbfe8ba0aa4b4d2d24ce8af6b71047bd" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ - "byteorder", - "png", + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", ] [[package]] -name = "ident_case" -version = "1.0.1" +name = "httparse" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] -name = "idna" -version = "0.3.0" +name = "hyper" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "httparse", + "itoa 1.0.11", + "pin-project-lite", + "smallvec", + "tokio", + "want", ] [[package]] -name = "ignore" -version = "0.4.18" +name = "hyper-util" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d" +checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" dependencies = [ - "crossbeam-utils", - "globset", - "lazy_static", - "log", - "memchr", - "regex", - "same-file", - "thread_local", - "walkdir", - "winapi-util", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", ] [[package]] -name = "image" -version = "0.24.6" +name = "iana-time-zone" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core 0.52.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ico" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" dependencies = [ - "bytemuck", "byteorder", - "color_quant", - "num-rational", - "num-traits", + "png", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", ] [[package]] @@ -1111,36 +1402,62 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +dependencies = [ + "equivalent", + "hashbrown 0.15.0", + "serde", ] [[package]] name = "infer" -version = "0.7.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20b2b533137b9cad970793453d4f921c2e91312a6d88b1085c07bc15fc51bb3b" +checksum = "bc150e5ce2330295b8616ce0e3f53250e53af31759a9dbedad1621ba29151847" dependencies = [ "cfb", ] [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] [[package]] -name = "io-lifetimes" -version = "1.0.9" +name = "ipnet" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" + +[[package]] +name = "is-docker" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" dependencies = [ - "hermit-abi 0.3.1", - "libc", - "windows-sys 0.45.0", + "once_cell", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", ] [[package]] @@ -1151,45 +1468,47 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "javascriptcore-rs" -version = "0.16.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" dependencies = [ - "bitflags", + "bitflags 1.3.2", "glib", "javascriptcore-rs-sys", ] [[package]] name = "javascriptcore-rs-sys" -version = "0.4.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 5.0.0", + "system-deps", ] [[package]] name = "jni" -version = "0.20.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" dependencies = [ "cesu8", + "cfg-if", "combine", "jni-sys", "log", "thiserror", "walkdir", + "windows-sys 0.45.0", ] [[package]] @@ -1198,40 +1517,73 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +[[package]] +name = "js-sys" +version = "0.3.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "json-patch" -version = "0.2.7" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b1fb8864823fad91877e6caea0baca82e49e8db50f8e5c9f9a453e27d3330fc" +dependencies = [ + "jsonptr", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "jsonptr" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3fa5a61630976fc4c353c70297f2e93f1930e3ccee574d59d618ccbd5154ce" +checksum = "1c6e529149475ca0b2820835d3dce8fcc41c6b943ca608d32f35b449255e4627" dependencies = [ + "fluent-uri", "serde", "serde_json", - "treediff", ] [[package]] -name = "kuchiki" -version = "0.8.1" +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.6.0", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "kuchikiki" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358" +checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8" dependencies = [ "cssparser", "html5ever", + "indexmap 1.9.3", "matches", "selectors", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libappindicator" -version = "0.7.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2d3cb96d092b4824cb306c9e544c856a4cb6210c1081945187f7f1924b47e8" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" dependencies = [ "glib", "gtk", @@ -1242,9 +1594,9 @@ dependencies = [ [[package]] name = "libappindicator-sys" -version = "0.7.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1b3b6681973cea8cc3bce7391e6d7d5502720b80a581c9a95c9cbaf592826aa" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" dependencies = [ "gtk-sys", "libloading", @@ -1253,9 +1605,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.140" +version = "0.2.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" +checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" [[package]] name = "libloading" @@ -1268,25 +1620,20 @@ dependencies = [ ] [[package]] -name = "line-wrap" -version = "0.1.1" +name = "libredox" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "safemem", + "bitflags 2.6.0", + "libc", ] -[[package]] -name = "linux-raw-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" - [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -1294,27 +1641,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "loom" -version = "0.5.6" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "serde", - "serde_json", - "tracing", - "tracing-subscriber", -] +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "mac" @@ -1333,27 +1662,18 @@ dependencies = [ [[package]] name = "markup5ever" -version = "0.10.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" +checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" dependencies = [ "log", - "phf 0.8.0", - "phf_codegen", + "phf 0.10.1", + "phf_codegen 0.10.0", "string_cache", "string_cache_codegen", "tendril", ] -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata", -] - [[package]] name = "matches" version = "0.1.10" @@ -1362,61 +1682,102 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "memchr" -version = "2.5.0" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memoffset" -version = "0.8.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ "autocfg", ] +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + [[package]] name = "miniz_oxide" -version = "0.6.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", + "simd-adler32", ] [[package]] -name = "ndk" -version = "0.6.0" +name = "mio" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ - "bitflags", - "jni-sys", - "ndk-sys", - "num_enum", - "thiserror", + "hermit-abi", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", ] [[package]] -name = "ndk-context" +name = "muda" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8123dfd4996055ac9b15a60ad263b44b01e539007523ad7a4a533a3d93b0591" +dependencies = [ + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "once_cell", + "png", + "serde", + "thiserror", + "windows-sys 0.59.0", +] + +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.6.0", + "jni-sys", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle 0.6.2", + "thiserror", +] + +[[package]] +name = "ndk-context" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" [[package]] name = "ndk-sys" -version = "0.3.0" +version = "0.6.0+11769913" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" dependencies = [ "jni-sys", ] [[package]] name = "new_debug_unreachable" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "nodrop" @@ -1425,84 +1786,148 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" [[package]] -name = "nu-ansi-term" -version = "0.46.0" +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ - "overload", - "winapi", + "num_enum_derive", ] [[package]] -name = "num-integer" -version = "0.1.45" +name = "num_enum_derive" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "autocfg", - "num-traits", + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 2.0.79", ] [[package]] -name = "num-rational" -version = "0.4.1" +name = "objc" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ - "autocfg", - "num-integer", - "num-traits", + "malloc_buf", + "objc_exception", ] [[package]] -name = "num-traits" -version = "0.2.15" +name = "objc-sys" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" + +[[package]] +name = "objc2" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" dependencies = [ - "autocfg", + "objc-sys", + "objc2-encode", ] [[package]] -name = "num_cpus" -version = "1.15.0" +name = "objc2-app-kit" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "hermit-abi 0.2.6", + "bitflags 2.6.0", + "block2", "libc", + "objc2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation", + "objc2-quartz-core", ] [[package]] -name = "num_enum" -version = "0.5.11" +name = "objc2-core-data" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "num_enum_derive", + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", ] [[package]] -name = "num_enum_derive" -version = "0.5.11" +name = "objc2-core-image" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", ] [[package]] -name = "objc" -version = "0.2.7" +name = "objc2-encode" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" + +[[package]] +name = "objc2-foundation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "malloc_buf", - "objc_exception", + "bitflags 2.6.0", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "objc2-metal" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", ] [[package]] @@ -1523,35 +1948,55 @@ dependencies = [ "objc", ] +[[package]] +name = "object" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" -version = "1.17.1" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "open" -version = "3.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8" +checksum = "61a877bf6abd716642a53ef1b89fb498923a4afca5c754f9050b4d081c05c4b3" dependencies = [ + "is-wsl", + "libc", "pathdiff", - "windows-sys 0.42.0", ] [[package]] -name = "overload" -version = "0.1.1" +name = "option-ext" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "os_pipe" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] [[package]] name = "pango" -version = "0.15.10" +version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" dependencies = [ - "bitflags", + "gio", "glib", "libc", "once_cell", @@ -1560,21 +2005,21 @@ dependencies = [ [[package]] name = "pango-sys" -version = "0.15.10" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.0.4", + "system-deps", ] [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -1582,23 +2027,17 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.7" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.2.16", + "redox_syscall", "smallvec", - "windows-sys 0.45.0", + "windows-targets 0.52.6", ] -[[package]] -name = "paste" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" - [[package]] name = "pathdiff" version = "0.2.1" @@ -1607,9 +2046,9 @@ checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "phf" @@ -1628,9 +2067,17 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" dependencies = [ - "phf_macros 0.10.0", "phf_shared 0.10.0", - "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros 0.11.2", + "phf_shared 0.11.2", ] [[package]] @@ -1643,6 +2090,16 @@ dependencies = [ "phf_shared 0.8.0", ] +[[package]] +name = "phf_codegen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", +] + [[package]] name = "phf_generator" version = "0.8.0" @@ -1663,6 +2120,16 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared 0.11.2", + "rand 0.8.5", +] + [[package]] name = "phf_macros" version = "0.8.0" @@ -1679,16 +2146,15 @@ dependencies = [ [[package]] name = "phf_macros" -version = "0.10.0" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", + "phf_generator 0.11.2", + "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.79", ] [[package]] @@ -1709,11 +2175,20 @@ dependencies = [ "siphasher", ] +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "pin-utils" @@ -1723,19 +2198,18 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.26" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "plist" -version = "1.4.3" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590" +checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" dependencies = [ - "base64 0.21.0", - "indexmap", - "line-wrap", + "base64 0.22.1", + "indexmap 2.6.0", "quick-xml", "serde", "time", @@ -1743,21 +2217,31 @@ dependencies = [ [[package]] name = "png" -version = "0.17.7" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638" +checksum = "52f9d46a34a05a6a57566bc2bfae066ef07585a6e3fa30fbbdff5936380623f0" dependencies = [ - "bitflags", + "bitflags 1.3.2", "crc32fast", + "fdeflate", "flate2", "miniz_oxide", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "precomputed-hash" @@ -1772,7 +2256,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", - "toml_edit", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", ] [[package]] @@ -1807,27 +2301,27 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.54" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534" +checksum = "b3e4daa0dcf6feba26f985457cdf104d4b4256fc5a09547140f3631bb076b19a" dependencies = [ "unicode-ident", ] [[package]] name = "quick-xml" -version = "0.28.1" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c1a97b1bc42b1d550bfb48d4262153fe400a12bab1511821736f7eac76d7e2" +checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" dependencies = [ "memchr", ] [[package]] name = "quote" -version = "1.0.26" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -1892,7 +2386,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.15", ] [[package]] @@ -1915,64 +2409,101 @@ dependencies = [ [[package]] name = "raw-window-handle" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f851a03551ceefd30132e447f07f96cb7011d6b658374f3aed847333adb5559" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" [[package]] -name = "redox_syscall" -version = "0.2.16" +name = "raw-window-handle" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ - "bitflags", + "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.8", - "redox_syscall 0.2.16", + "getrandom 0.2.15", + "libredox", "thiserror", ] [[package]] name = "regex" -version = "1.7.3" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" +checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" dependencies = [ "aho-corasick", "memchr", + "regex-automata", "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.1.10" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ + "aho-corasick", + "memchr", "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "reqwest" +version = "0.12.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "windows-registry", +] [[package]] name = "revolt" @@ -1982,49 +2513,30 @@ dependencies = [ "serde_json", "tauri", "tauri-build", + "tauri-plugin-shell", "window-shadows", ] [[package]] -name = "rustc_version" -version = "0.4.0" +name = "rustc-demangle" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] -name = "rustix" -version = "0.37.5" +name = "rustc_version" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e78cc525325c06b4a7ff02db283472f3c042b7ff0c391f96c6d5ac6f4f91b75" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "bitflags", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys", - "windows-sys 0.45.0", + "semver", ] -[[package]] -name = "rustversion" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" - [[package]] name = "ryu" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" - -[[package]] -name = "safemem" -version = "0.3.3" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "same-file" @@ -2036,16 +2548,37 @@ dependencies = [ ] [[package]] -name = "scoped-tls" -version = "1.0.1" +name = "schemars" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", + "uuid", +] + +[[package]] +name = "schemars_derive" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.79", +] [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "selectors" @@ -2053,14 +2586,14 @@ version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cssparser", "derive_more", "fxhash", "log", "matches", "phf 0.8.0", - "phf_codegen", + "phf_codegen 0.8.0", "precomputed-hash", "servo_arc", "smallvec", @@ -2069,84 +2602,127 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" dependencies = [ "serde", ] [[package]] name = "serde" -version = "1.0.159" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] +[[package]] +name = "serde-untagged" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2676ba99bd82f75cae5cbd2c8eda6fa0b8760f18978ea840e980dd5567b5c5b6" +dependencies = [ + "erased-serde", + "serde", + "typeid", +] + [[package]] name = "serde_derive" -version = "1.0.159" +version = "1.0.210" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.12", + "syn 2.0.79", ] [[package]] name = "serde_json" -version = "1.0.95" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ - "itoa 1.0.6", + "itoa 1.0.11", + "memchr", "ryu", "serde", ] [[package]] name = "serde_repr" -version = "0.1.12" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.12", + "syn 2.0.79", ] [[package]] name = "serde_spanned" -version = "0.6.1" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] [[package]] -name = "serde_with" -version = "1.14.0" +name = "serde_urlencoded" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ + "form_urlencoded", + "itoa 1.0.11", + "ryu", "serde", - "serde_with_macros", +] + +[[package]] +name = "serde_with" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.6.0", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", ] [[package]] name = "serde_with_macros" -version = "1.5.2" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" +checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" dependencies = [ "darling", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.79", ] [[package]] @@ -2183,9 +2759,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.6" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", @@ -2193,61 +2769,104 @@ dependencies = [ ] [[package]] -name = "sharded-slab" -version = "0.1.4" +name = "shared_child" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "09fa9338aed9a1df411814a5b2252f7cd206c55ae9bf2fa763f8de84603aa60c" dependencies = [ - "lazy_static", + "libc", + "windows-sys 0.59.0", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + [[package]] name = "siphasher" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "smallvec" -version = "1.10.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] -name = "soup2" -version = "0.2.1" +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "softbuffer" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" +dependencies = [ + "bytemuck", + "cfg_aliases", + "core-graphics 0.24.0", + "foreign-types", + "js-sys", + "log", + "objc2", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle 0.6.2", + "redox_syscall", + "wasm-bindgen", + "web-sys", + "windows-sys 0.59.0", +] + +[[package]] +name = "soup3" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" dependencies = [ - "bitflags", + "futures-channel", "gio", "glib", "libc", - "once_cell", - "soup2-sys", + "soup3-sys", ] [[package]] -name = "soup2-sys" -version = "0.2.0" +name = "soup3-sys" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" dependencies = [ - "bitflags", "gio-sys", "glib-sys", "gobject-sys", "libc", - "system-deps 5.0.0", + "system-deps", ] [[package]] @@ -2256,15 +2875,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" -[[package]] -name = "state" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" -dependencies = [ - "loom", -] - [[package]] name = "string_cache" version = "0.8.7" @@ -2293,9 +2903,20 @@ dependencies = [ [[package]] name = "strsim" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "swift-rs" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7" +dependencies = [ + "base64 0.21.7", + "serde", + "serde_json", +] [[package]] name = "syn" @@ -2310,9 +2931,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.12" +version = "2.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79d9531f94112cfc3e4c8f5f02cb2b58f72c97b7efd85f70203cc6d8efda5927" +checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" dependencies = [ "proc-macro2", "quote", @@ -2320,59 +2941,47 @@ dependencies = [ ] [[package]] -name = "system-deps" -version = "5.0.0" +name = "sync_wrapper" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" dependencies = [ - "cfg-expr 0.9.1", - "heck 0.3.3", - "pkg-config", - "toml 0.5.11", - "version-compare 0.0.11", + "futures-core", ] [[package]] name = "system-deps" -version = "6.0.4" +version = "6.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555fc8147af6256f3931a36bb83ad0023240ce9cf2b319dec8236fd1f220b05f" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ - "cfg-expr 0.14.0", - "heck 0.4.1", + "cfg-expr", + "heck 0.5.0", "pkg-config", - "toml 0.7.3", - "version-compare 0.1.1", + "toml 0.8.2", + "version-compare", ] [[package]] name = "tao" -version = "0.15.8" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac8e6399427c8494f9849b58694754d7cc741293348a6836b6c8d2c5aa82d8e6" +checksum = "a0dbbebe82d02044dfa481adca1550d6dd7bd16e086bc34fa0fbecceb5a63751" dependencies = [ - "bitflags", - "cairo-rs", - "cc", - "cocoa", - "core-foundation", - "core-graphics", + "bitflags 2.6.0", + "cocoa 0.26.0", + "core-foundation 0.10.0", + "core-graphics 0.24.0", "crossbeam-channel", - "dirs-next", "dispatch", - "gdk", - "gdk-pixbuf", - "gdk-sys", + "dlopen2", + "dpi", + "gdkwayland-sys", "gdkx11-sys", - "gio", - "glib", - "glib-sys", "gtk", - "image", "instant", "jni", "lazy_static", - "libappindicator", "libc", "log", "ndk", @@ -2381,99 +2990,113 @@ dependencies = [ "objc", "once_cell", "parking_lot", - "paste", - "png", - "raw-window-handle", + "raw-window-handle 0.6.2", "scopeguard", - "serde", + "tao-macros", "unicode-segmentation", - "uuid 1.3.0", - "windows 0.39.0", - "windows-implement", + "url", + "windows", + "windows-core 0.58.0", + "windows-version", "x11-dl", ] [[package]] -name = "tar" -version = "0.4.38" +name = "tao-macros" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" +checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ - "filetime", - "libc", - "xattr", + "proc-macro2", + "quote", + "syn 2.0.79", ] +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + [[package]] name = "tauri" -version = "1.2.4" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe7e0f1d535e7cbbbab43c82be4fc992b84f9156c16c160955617e0260ebc449" +checksum = "5920aad0804ea5e86808d4b6e8753d3bcbae7efc8f4e41a4da00b45427559868" dependencies = [ "anyhow", - "cocoa", - "dirs-next", + "bytes", + "dirs", + "dunce", "embed_plist", - "encoding_rs", - "flate2", "futures-util", - "glib", + "getrandom 0.2.15", "glob", "gtk", - "heck 0.4.1", + "heck 0.5.0", "http", - "ignore", - "objc", - "once_cell", - "open", + "jni", + "libc", + "log", + "mime", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "regex", - "semver", + "plist", + "raw-window-handle 0.6.2", + "reqwest", "serde", "serde_json", "serde_repr", "serialize-to-javascript", - "state", - "tar", + "swift-rs", + "tauri-build", "tauri-macros", "tauri-runtime", "tauri-runtime-wry", "tauri-utils", - "tempfile", "thiserror", "tokio", + "tray-icon", "url", - "uuid 1.3.0", + "urlpattern", "webkit2gtk", "webview2-com", - "windows 0.39.0", + "window-vibrancy", + "windows", ] [[package]] name = "tauri-build" -version = "1.2.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8807c85d656b2b93927c19fe5a5f1f1f348f96c2de8b90763b3c2d561511f9b4" +checksum = "935f9b3c49b22b3e2e485a57f46d61cd1ae07b1cbb2ba87387a387caf2d8c4e7" dependencies = [ "anyhow", "cargo_toml", - "heck 0.4.1", + "dirs", + "glob", + "heck 0.5.0", "json-patch", + "schemars", "semver", + "serde", "serde_json", "tauri-utils", - "winres", + "tauri-winres", + "toml 0.8.2", + "walkdir", ] [[package]] name = "tauri-codegen" -version = "1.2.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14388d484b6b1b5dc0f6a7d6cc6433b3b230bec85eaa576adcdf3f9fafa49251" +checksum = "95d7443dd4f0b597704b6a14b964ee2ed16e99928d8e6292ae9825f09fbcd30e" dependencies = [ - "base64 0.13.1", + "base64 0.22.1", "brotli", "ico", "json-patch", @@ -2481,111 +3104,160 @@ dependencies = [ "png", "proc-macro2", "quote", - "regex", "semver", "serde", "serde_json", "sha2", + "syn 2.0.79", "tauri-utils", "thiserror", "time", - "uuid 1.3.0", + "url", + "uuid", "walkdir", ] [[package]] name = "tauri-macros" -version = "1.2.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069319e5ecbe653a799b94b0690d9f9bf5d00f7b1d3989aa331c524d4e354075" +checksum = "4d2c0963ccfc3f5194415f2cce7acc975942a8797fbabfb0aa1ed6f59326ae7f" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.79", "tauri-codegen", "tauri-utils", ] +[[package]] +name = "tauri-plugin" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2e6660a409963e4d57b9bfab4addd141eeff41bd3a7fb14e13004a832cf7ef6" +dependencies = [ + "anyhow", + "glob", + "plist", + "schemars", + "serde", + "serde_json", + "tauri-utils", + "toml 0.8.2", + "walkdir", +] + +[[package]] +name = "tauri-plugin-shell" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "371fb9aca2823990a2d0db7970573be5fdf07881fcaa2b835b29631feb84aec1" +dependencies = [ + "encoding_rs", + "log", + "open", + "os_pipe", + "regex", + "schemars", + "serde", + "serde_json", + "shared_child", + "tauri", + "tauri-plugin", + "thiserror", + "tokio", +] + [[package]] name = "tauri-runtime" -version = "0.12.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c507d954d08ac8705d235bc70ec6975b9054fb95ff7823af72dbb04186596f3b" +checksum = "af12ad1af974b274ef1d32a94e6eba27a312b429ef28fcb98abc710df7f9151d" dependencies = [ + "dpi", "gtk", "http", - "http-range", - "rand 0.8.5", - "raw-window-handle", + "jni", + "raw-window-handle 0.6.2", "serde", "serde_json", "tauri-utils", "thiserror", - "uuid 1.3.0", - "webview2-com", - "windows 0.39.0", + "url", + "windows", ] [[package]] name = "tauri-runtime-wry" -version = "0.12.2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36b1c5764a41a13176a4599b5b7bd0881bea7d94dfe45e1e755f789b98317e30" +checksum = "e45e88aa0b11b302d836e6ea3e507a6359044c4a8bc86b865ba99868c695753d" dependencies = [ - "cocoa", "gtk", + "http", + "jni", + "log", + "objc2", + "objc2-app-kit", + "objc2-foundation", "percent-encoding", - "rand 0.8.5", - "raw-window-handle", + "raw-window-handle 0.6.2", + "softbuffer", + "tao", "tauri-runtime", "tauri-utils", - "uuid 1.3.0", + "url", "webkit2gtk", "webview2-com", - "windows 0.39.0", + "windows", "wry", ] [[package]] name = "tauri-utils" -version = "1.2.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5abbc109a6eb45127956ffcc26ef0e875d160150ac16cfa45d26a6b2871686f1" +checksum = "c38b0230d6880cf6dd07b6d7dd7789a0869f98ac12146e0d18d1c1049215a045" dependencies = [ "brotli", + "cargo_metadata", "ctor", + "dunce", "glob", - "heck 0.4.1", "html5ever", "infer", "json-patch", - "kuchiki", + "kuchikiki", + "log", "memchr", - "phf 0.10.1", + "phf 0.11.2", "proc-macro2", "quote", + "regex", + "schemars", "semver", "serde", + "serde-untagged", "serde_json", "serde_with", + "swift-rs", "thiserror", + "toml 0.8.2", "url", + "urlpattern", + "uuid", "walkdir", - "windows 0.39.0", ] [[package]] -name = "tempfile" -version = "3.5.0" +name = "tauri-winres" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" +checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb" dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall 0.3.5", - "rustix", - "windows-sys 0.45.0", + "embed-resource", + "toml 0.7.8", ] [[package]] @@ -2607,41 +3279,34 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.12", -] - -[[package]] -name = "thread_local" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" -dependencies = [ - "cfg-if", - "once_cell", + "syn 2.0.79", ] [[package]] name = "time" -version = "0.3.20" +version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ - "itoa 1.0.6", + "deranged", + "itoa 1.0.11", + "num-conv", + "powerfmt", "serde", "time-core", "time-macros", @@ -2649,24 +3314,25 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.8" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" dependencies = [ + "num-conv", "time-core", ] [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -2679,54 +3345,72 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.27.0" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ - "autocfg", + "backtrace", "bytes", - "num_cpus", + "libc", + "mio", "pin-project-lite", - "windows-sys 0.45.0", + "socket2", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-util" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", ] [[package]] name = "toml" -version = "0.5.11" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" dependencies = [ "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", ] [[package]] name = "toml" -version = "0.7.3" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.20.2", ] [[package]] name = "toml_datetime" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.19.8" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.6.0", "serde", "serde_spanned", "toml_datetime", @@ -2734,114 +3418,155 @@ dependencies = [ ] [[package]] -name = "tracing" -version = "0.1.37" +name = "toml_edit" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "cfg-if", - "pin-project-lite", - "tracing-attributes", - "tracing-core", + "indexmap 2.6.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", ] [[package]] -name = "tracing-attributes" -version = "0.1.23" +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "pin-project-lite", + "tracing-core", ] [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", - "valuable", ] [[package]] -name = "tracing-log" -version = "0.1.3" +name = "tray-icon" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +checksum = "533fc2d4105e0e3d96ce1c71f2d308c9fbbe2ef9c587cab63dd627ab5bde218f" dependencies = [ - "lazy_static", - "log", - "tracing-core", + "core-graphics 0.24.0", + "crossbeam-channel", + "dirs", + "libappindicator", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "once_cell", + "png", + "serde", + "thiserror", + "windows-sys 0.59.0", ] [[package]] -name = "tracing-subscriber" -version = "0.3.16" +name = "try-lock" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typeid" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", + "unic-char-range", ] [[package]] -name = "treediff" -version = "3.0.2" +name = "unic-char-range" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "761e8d5ad7ce14bb82b7e61ccc0ca961005a275a060b9644a2431aa11553c2ff" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" dependencies = [ - "serde_json", + "unic-char-property", + "unic-char-range", + "unic-ucd-version", ] [[package]] -name = "typenum" -version = "1.16.0" +name = "unic-ucd-version" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.10.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "url" -version = "2.3.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", "idna", @@ -2850,60 +3575,84 @@ dependencies = [ ] [[package]] -name = "utf-8" -version = "0.7.6" +name = "urlpattern" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" +dependencies = [ + "regex", + "serde", + "unic-ucd-ident", + "url", +] [[package]] -name = "uuid" -version = "0.8.2" +name = "utf-8" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] name = "uuid" -version = "1.3.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.15", + "serde", ] [[package]] -name = "valuable" -version = "0.1.0" +name = "version-compare" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" [[package]] -name = "version-compare" -version = "0.0.11" +name = "version_check" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] -name = "version-compare" -version = "0.1.1" +name = "vswhom" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] [[package]] -name = "version_check" -version = "0.9.4" +name = "vswhom-sys" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" +dependencies = [ + "cc", + "libc", +] [[package]] name = "walkdir" -version = "2.3.3" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", "winapi-util", ] +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" @@ -2916,13 +3665,103 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.79", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" + +[[package]] +name = "wasm-streams" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e072d4e72f700fb3443d8fe94a39315df013eef1104903cdb0a2abd322bbecd" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "webkit2gtk" -version = "0.18.2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370" +checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cairo-rs", "gdk", "gdk-sys", @@ -2936,20 +3775,18 @@ dependencies = [ "javascriptcore-rs", "libc", "once_cell", - "soup2", + "soup3", "webkit2gtk-sys", ] [[package]] name = "webkit2gtk-sys" -version = "0.18.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3" +checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c" dependencies = [ - "atk-sys", - "bitflags", + "bitflags 1.3.2", "cairo-sys-rs", - "gdk-pixbuf-sys", "gdk-sys", "gio-sys", "glib-sys", @@ -2957,48 +3794,45 @@ dependencies = [ "gtk-sys", "javascriptcore-rs-sys", "libc", - "pango-sys", "pkg-config", - "soup2-sys", - "system-deps 6.0.4", + "soup3-sys", + "system-deps", ] [[package]] name = "webview2-com" -version = "0.19.1" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178" +checksum = "6f61ff3d9d0ee4efcb461b14eb3acfda2702d10dc329f339303fc3e57215ae2c" dependencies = [ "webview2-com-macros", "webview2-com-sys", - "windows 0.39.0", + "windows", + "windows-core 0.58.0", "windows-implement", + "windows-interface", ] [[package]] name = "webview2-com-macros" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" +checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.79", ] [[package]] name = "webview2-com-sys" -version = "0.19.0" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7" +checksum = "a3a3e2eeb58f82361c93f9777014668eb3d07e7d174ee4c819575a9208011886" dependencies = [ - "regex", - "serde", - "serde_json", "thiserror", - "windows 0.39.0", - "windows-bindgen", - "windows-metadata", + "windows", + "windows-core 0.58.0", ] [[package]] @@ -3019,11 +3853,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -3034,78 +3868,112 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "window-shadows" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29d30320647cfc3dc45554c8ad825b84831def81f967a2f7589931328ff9b16d" +checksum = "67ff424735b1ac21293b0492b069394b0a189c8a463fb015a16dea7c2e221c08" dependencies = [ - "cocoa", + "cocoa 0.25.0", "objc", - "raw-window-handle", - "windows-sys 0.42.0", + "raw-window-handle 0.5.2", + "windows-sys 0.48.0", ] [[package]] -name = "windows" -version = "0.39.0" +name = "window-vibrancy" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a" +checksum = "3ea403deff7b51fff19e261330f71608ff2cdef5721d72b64180bb95be7c4150" dependencies = [ - "windows-implement", - "windows_aarch64_msvc 0.39.0", - "windows_i686_gnu 0.39.0", - "windows_i686_msvc 0.39.0", - "windows_x86_64_gnu 0.39.0", - "windows_x86_64_msvc 0.39.0", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "raw-window-handle 0.6.2", + "windows-sys 0.59.0", + "windows-version", ] [[package]] name = "windows" -version = "0.44.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" dependencies = [ - "windows-targets", + "windows-core 0.58.0", + "windows-targets 0.52.6", ] [[package]] -name = "windows-bindgen" -version = "0.39.0" +name = "windows-core" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68003dbd0e38abc0fb85b939240f4bce37c43a5981d3df37ccbaaa981b47cb41" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-metadata", - "windows-tokens", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", ] [[package]] name = "windows-implement" -version = "0.39.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ - "syn 1.0.109", - "windows-tokens", + "proc-macro2", + "quote", + "syn 2.0.79", ] [[package]] -name = "windows-metadata" -version = "0.39.0" +name = "windows-interface" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] [[package]] -name = "windows-sys" -version = "0.42.0" +name = "windows-registry" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.2", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", ] [[package]] @@ -3114,7 +3982,34 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets", + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -3123,20 +4018,54 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows_aarch64_gnullvm", + "windows_aarch64_gnullvm 0.42.2", "windows_aarch64_msvc 0.42.2", "windows_i686_gnu 0.42.2", "windows_i686_msvc 0.42.2", "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm", + "windows_x86_64_gnullvm 0.42.2", "windows_x86_64_msvc 0.42.2", ] [[package]] -name = "windows-tokens" -version = "0.39.0" +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-version" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6998aa457c9ba8ff2fb9f13e9d2a930dabcea28f1d0ab94d687d8b3654844515" +dependencies = [ + "windows-targets 0.52.6", +] [[package]] name = "windows_aarch64_gnullvm" @@ -3145,10 +4074,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] -name = "windows_aarch64_msvc" -version = "0.39.0" +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -3157,10 +4092,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] -name = "windows_i686_gnu" -version = "0.39.0" +name = "windows_aarch64_msvc" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -3169,10 +4110,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] -name = "windows_i686_msvc" -version = "0.39.0" +name = "windows_i686_gnu" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -3181,10 +4134,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] -name = "windows_x86_64_gnu" -version = "0.39.0" +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -3192,6 +4151,18 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -3199,10 +4170,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] -name = "windows_x86_64_msvc" -version = "0.39.0" +name = "windows_x86_64_gnullvm" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -3210,60 +4187,75 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + [[package]] name = "winnow" -version = "0.4.1" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] [[package]] -name = "winres" -version = "0.1.12" +name = "winreg" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" dependencies = [ - "toml 0.5.11", + "cfg-if", + "windows-sys 0.48.0", ] [[package]] name = "wry" -version = "0.23.4" +version = "0.44.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c1ad8e2424f554cc5bdebe8aa374ef5b433feff817aebabca0389961fc7ef98" +checksum = "440600584cfbd8b0d28eace95c1f2c253db05dae43780b79380aa1e868f04c73" dependencies = [ - "base64 0.13.1", + "base64 0.22.1", "block", - "cocoa", - "core-graphics", + "cocoa 0.26.0", + "core-graphics 0.24.0", "crossbeam-channel", + "dpi", "dunce", - "gdk", - "gio", - "glib", + "gdkx11", "gtk", "html5ever", "http", - "kuchiki", + "javascriptcore-rs", + "jni", + "kuchikiki", "libc", - "log", + "ndk", "objc", "objc_id", "once_cell", - "serde", - "serde_json", + "percent-encoding", + "raw-window-handle 0.6.2", "sha2", - "soup2", - "tao", + "soup3", + "tao-macros", "thiserror", - "url", "webkit2gtk", "webkit2gtk-sys", "webview2-com", - "windows 0.39.0", - "windows-implement", + "windows", + "windows-core 0.58.0", + "windows-version", + "x11-dl", ] [[package]] @@ -3288,10 +4280,22 @@ dependencies = [ ] [[package]] -name = "xattr" -version = "0.2.3" +name = "zerocopy" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ - "libc", + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", ] diff --git a/packages/desktop/src-tauri/Cargo.toml b/packages/desktop/src-tauri/Cargo.toml index 45031eb90..71b92a484 100644 --- a/packages/desktop/src-tauri/Cargo.toml +++ b/packages/desktop/src-tauri/Cargo.toml @@ -10,13 +10,14 @@ edition = "2021" rust-version = "1.59" [build-dependencies] -tauri-build = { version = "1.2.1", features = [] } +tauri-build = { version = "2", features = [] } [dependencies] serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } -tauri = { version = "1.2.4", features = ["shell-open", "system-tray", "window-close", "window-hide", "window-maximize", "window-minimize", "window-show", "window-start-dragging", "window-unmaximize", "window-unminimize"] } -window-shadows = "0.2.1" +tauri = { version = "2", features = ["tray-icon"] } +window-shadows = "0.2.2" +tauri-plugin-shell = "2" [features] # by default Tauri runs in production mode diff --git a/packages/desktop/src-tauri/build.rs b/packages/desktop/src-tauri/build.rs index 795b9b7c8..d860e1e6a 100644 --- a/packages/desktop/src-tauri/build.rs +++ b/packages/desktop/src-tauri/build.rs @@ -1,3 +1,3 @@ fn main() { - tauri_build::build() + tauri_build::build() } diff --git a/packages/desktop/src-tauri/capabilities/migrated.json b/packages/desktop/src-tauri/capabilities/migrated.json new file mode 100644 index 000000000..2cead9e10 --- /dev/null +++ b/packages/desktop/src-tauri/capabilities/migrated.json @@ -0,0 +1,21 @@ +{ + "identifier": "migrated", + "description": "permissions that were migrated from v1", + "local": true, + "windows": [ + "main" + ], + "permissions": [ + "core:default", + "core:window:allow-maximize", + "core:window:allow-unmaximize", + "core:window:allow-minimize", + "core:window:allow-unminimize", + "core:window:allow-show", + "core:window:allow-hide", + "core:window:allow-close", + "core:window:allow-start-dragging", + "shell:allow-open", + "shell:default" + ] +} \ No newline at end of file diff --git a/packages/desktop/src-tauri/gen/schemas/acl-manifests.json b/packages/desktop/src-tauri/gen/schemas/acl-manifests.json new file mode 100644 index 000000000..bce39ff6b --- /dev/null +++ b/packages/desktop/src-tauri/gen/schemas/acl-manifests.json @@ -0,0 +1 @@ +{"core":{"default_permission":{"identifier":"default","description":"Default core plugins set which includes:\n- 'core:path:default'\n- 'core:event:default'\n- 'core:window:default'\n- 'core:webview:default'\n- 'core:app:default'\n- 'core:image:default'\n- 'core:resources:default'\n- 'core:menu:default'\n- 'core:tray:default'\n","permissions":["core:path:default","core:event:default","core:window:default","core:webview:default","core:app:default","core:image:default","core:resources:default","core:menu:default","core:tray:default"]},"permissions":{},"permission_sets":{},"global_scope_schema":null},"core:app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-set-app-theme":{"identifier":"allow-set-app-theme","description":"Enables the set_app_theme command without any pre-configured scope.","commands":{"allow":["set_app_theme"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-set-app-theme":{"identifier":"deny-set-app-theme","description":"Denies the set_app_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_app_theme"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"core:event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"core:image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"core:menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"core:path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"core:resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"core:tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"core:webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-webviews","allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-clear-all-browsing-data":{"identifier":"allow-clear-all-browsing-data","description":"Enables the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":["clear_all_browsing_data"],"deny":[]}},"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-get-all-webviews":{"identifier":"allow-get-all-webviews","description":"Enables the get_all_webviews command without any pre-configured scope.","commands":{"allow":["get_all_webviews"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-hide":{"identifier":"allow-webview-hide","description":"Enables the webview_hide command without any pre-configured scope.","commands":{"allow":["webview_hide"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-show":{"identifier":"allow-webview-show","description":"Enables the webview_show command without any pre-configured scope.","commands":{"allow":["webview_show"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-clear-all-browsing-data":{"identifier":"deny-clear-all-browsing-data","description":"Denies the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":[],"deny":["clear_all_browsing_data"]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-get-all-webviews":{"identifier":"deny-get-all-webviews","description":"Denies the get_all_webviews command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_webviews"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-hide":{"identifier":"deny-webview-hide","description":"Denies the webview_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_hide"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-show":{"identifier":"deny-webview-show","description":"Denies the webview_show command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_show"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"core:window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-windows","allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-is-enabled","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-internal-toggle-maximize"]},"permissions":{"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-get-all-windows":{"identifier":"allow-get-all-windows","description":"Enables the get_all_windows command without any pre-configured scope.","commands":{"allow":["get_all_windows"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-size-constraints":{"identifier":"allow-set-size-constraints","description":"Enables the set_size_constraints command without any pre-configured scope.","commands":{"allow":["set_size_constraints"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-theme":{"identifier":"allow-set-theme","description":"Enables the set_theme command without any pre-configured scope.","commands":{"allow":["set_theme"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-get-all-windows":{"identifier":"deny-get-all-windows","description":"Denies the get_all_windows command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_windows"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-size-constraints":{"identifier":"deny-set-size-constraints","description":"Denies the set_size_constraints command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size_constraints"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-theme":{"identifier":"deny-set-theme","description":"Denies the set_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_theme"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null},"shell":{"default_permission":{"identifier":"default","description":"This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n","permissions":["allow-open"]},"permissions":{"allow-execute":{"identifier":"allow-execute","description":"Enables the execute command without any pre-configured scope.","commands":{"allow":["execute"],"deny":[]}},"allow-kill":{"identifier":"allow-kill","description":"Enables the kill command without any pre-configured scope.","commands":{"allow":["kill"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-spawn":{"identifier":"allow-spawn","description":"Enables the spawn command without any pre-configured scope.","commands":{"allow":["spawn"],"deny":[]}},"allow-stdin-write":{"identifier":"allow-stdin-write","description":"Enables the stdin_write command without any pre-configured scope.","commands":{"allow":["stdin_write"],"deny":[]}},"deny-execute":{"identifier":"deny-execute","description":"Denies the execute command without any pre-configured scope.","commands":{"allow":[],"deny":["execute"]}},"deny-kill":{"identifier":"deny-kill","description":"Denies the kill command without any pre-configured scope.","commands":{"allow":[],"deny":["kill"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-spawn":{"identifier":"deny-spawn","description":"Denies the spawn command without any pre-configured scope.","commands":{"allow":[],"deny":["spawn"]}},"deny-stdin-write":{"identifier":"deny-stdin-write","description":"Denies the stdin_write command without any pre-configured scope.","commands":{"allow":[],"deny":["stdin_write"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"additionalProperties":false,"properties":{"args":{"allOf":[{"$ref":"#/definitions/ShellScopeEntryAllowedArgs"}],"description":"The allowed arguments for the command execution."},"cmd":{"description":"The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.","type":"string"},"name":{"description":"The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.","type":"string"}},"required":["cmd","name"],"type":"object"},{"additionalProperties":false,"properties":{"args":{"allOf":[{"$ref":"#/definitions/ShellScopeEntryAllowedArgs"}],"description":"The allowed arguments for the command execution."},"name":{"description":"The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.","type":"string"},"sidecar":{"description":"If this command is a sidecar command.","type":"boolean"}},"required":["name","sidecar"],"type":"object"}],"definitions":{"ShellScopeEntryAllowedArg":{"anyOf":[{"description":"A non-configurable argument that is passed to the command in the order it was specified.","type":"string"},{"additionalProperties":false,"description":"A variable that is set while calling the command from the webview API.","properties":{"raw":{"default":false,"description":"Marks the validator as a raw regex, meaning the plugin should not make any modification at runtime.\n\nThis means the regex will not match on the entire string by default, which might be exploited if your regex allow unexpected input to be considered valid. When using this option, make sure your regex is correct.","type":"boolean"},"validator":{"description":"[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\nThe regex string is by default surrounded by `^...$` to match the full string. For example the `https?://\\w+` regex would be registered as `^https?://\\w+$`.\n\n[regex]: <https://docs.rs/regex/latest/regex/#syntax>","type":"string"}},"required":["validator"],"type":"object"}],"description":"A command argument allowed to be executed by the webview API."},"ShellScopeEntryAllowedArgs":{"anyOf":[{"description":"Use a simple boolean to allow all or disable all arguments to this command configuration.","type":"boolean"},{"description":"A specific set of [`ShellScopeEntryAllowedArg`] that are valid to call for the command configuration.","items":{"$ref":"#/definitions/ShellScopeEntryAllowedArg"},"type":"array"}],"description":"A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellScopeEntryAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration."}},"description":"Shell scope entry.","title":"ShellScopeEntry"}}} \ No newline at end of file diff --git a/packages/desktop/src-tauri/gen/schemas/capabilities.json b/packages/desktop/src-tauri/gen/schemas/capabilities.json new file mode 100644 index 000000000..f9089c501 --- /dev/null +++ b/packages/desktop/src-tauri/gen/schemas/capabilities.json @@ -0,0 +1 @@ +{"migrated":{"identifier":"migrated","description":"permissions that were migrated from v1","local":true,"windows":["main"],"permissions":["core:default","core:window:allow-maximize","core:window:allow-unmaximize","core:window:allow-minimize","core:window:allow-unminimize","core:window:allow-show","core:window:allow-hide","core:window:allow-close","core:window:allow-start-dragging","shell:allow-open","shell:default"]}} \ No newline at end of file diff --git a/packages/desktop/src-tauri/gen/schemas/desktop-schema.json b/packages/desktop/src-tauri/gen/schemas/desktop-schema.json new file mode 100644 index 000000000..ed816e6cc --- /dev/null +++ b/packages/desktop/src-tauri/gen/schemas/desktop-schema.json @@ -0,0 +1,2054 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "CapabilityFile", + "description": "Capability formats accepted in a capability file.", + "anyOf": [ + { + "description": "A single capability.", + "allOf": [ + { + "$ref": "#/definitions/Capability" + } + ] + }, + { + "description": "A list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + }, + { + "description": "A list of capabilities.", + "type": "object", + "required": [ + "capabilities" + ], + "properties": { + "capabilities": { + "description": "The list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + } + } + } + ], + "definitions": { + "Capability": { + "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows fine grained access to the Tauri core, application, or plugin commands. If a window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, \"platforms\": [\"macOS\",\"windows\"] } ```", + "type": "object", + "required": [ + "identifier", + "permissions" + ], + "properties": { + "identifier": { + "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`", + "type": "string" + }, + "description": { + "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.", + "default": "", + "type": "string" + }, + "remote": { + "description": "Configure remote URLs that can use the capability permissions.\n\nThis setting is optional and defaults to not being set, as our default use case is that the content is served from our local application.\n\n:::caution Make sure you understand the security implications of providing remote sources with local system access. :::\n\n## Example\n\n```json { \"urls\": [\"https://*.mydomain.dev\"] } ```", + "anyOf": [ + { + "$ref": "#/definitions/CapabilityRemote" + }, + { + "type": "null" + } + ] + }, + "local": { + "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.", + "default": true, + "type": "boolean" + }, + "windows": { + "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nOn multiwebview windows, prefer [`Self::webviews`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", + "type": "array", + "items": { + "type": "string" + } + }, + "webviews": { + "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThis is only required when using on multiwebview contexts, by default all child webviews of a window that matches [`Self::windows`] are linked.\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", + "type": "array", + "items": { + "type": "string" + } + }, + "permissions": { + "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ```", + "type": "array", + "items": { + "$ref": "#/definitions/PermissionEntry" + }, + "uniqueItems": true + }, + "platforms": { + "description": "Limit which target platforms this capability applies to.\n\nBy default all platforms are targeted.\n\n## Example\n\n`[\"macOS\",\"windows\"]`", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Target" + } + } + } + }, + "CapabilityRemote": { + "description": "Configuration for remote URLs that are associated with the capability.", + "type": "object", + "required": [ + "urls" + ], + "properties": { + "urls": { + "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n## Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "PermissionEntry": { + "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.", + "anyOf": [ + { + "description": "Reference a permission or permission set by identifier.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + { + "description": "Reference a permission or permission set by identifier and extends its scope.", + "type": "object", + "allOf": [ + { + "if": { + "properties": { + "identifier": { + "anyOf": [ + { + "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n", + "type": "string", + "const": "shell:default" + }, + { + "description": "Enables the execute command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-execute" + }, + { + "description": "Enables the kill command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-kill" + }, + { + "description": "Enables the open command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-open" + }, + { + "description": "Enables the spawn command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-spawn" + }, + { + "description": "Enables the stdin_write command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-stdin-write" + }, + { + "description": "Denies the execute command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-execute" + }, + { + "description": "Denies the kill command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-kill" + }, + { + "description": "Denies the open command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-open" + }, + { + "description": "Denies the spawn command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-spawn" + }, + { + "description": "Denies the stdin_write command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-stdin-write" + } + ] + } + } + }, + "then": { + "properties": { + "allow": { + "items": { + "title": "ShellScopeEntry", + "description": "Shell scope entry.", + "anyOf": [ + { + "type": "object", + "required": [ + "cmd", + "name" + ], + "properties": { + "args": { + "description": "The allowed arguments for the command execution.", + "allOf": [ + { + "$ref": "#/definitions/ShellScopeEntryAllowedArgs" + } + ] + }, + "cmd": { + "description": "The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", + "type": "string" + }, + "name": { + "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", + "type": "string" + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "name", + "sidecar" + ], + "properties": { + "args": { + "description": "The allowed arguments for the command execution.", + "allOf": [ + { + "$ref": "#/definitions/ShellScopeEntryAllowedArgs" + } + ] + }, + "name": { + "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", + "type": "string" + }, + "sidecar": { + "description": "If this command is a sidecar command.", + "type": "boolean" + } + }, + "additionalProperties": false + } + ] + } + }, + "deny": { + "items": { + "title": "ShellScopeEntry", + "description": "Shell scope entry.", + "anyOf": [ + { + "type": "object", + "required": [ + "cmd", + "name" + ], + "properties": { + "args": { + "description": "The allowed arguments for the command execution.", + "allOf": [ + { + "$ref": "#/definitions/ShellScopeEntryAllowedArgs" + } + ] + }, + "cmd": { + "description": "The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", + "type": "string" + }, + "name": { + "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", + "type": "string" + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "name", + "sidecar" + ], + "properties": { + "args": { + "description": "The allowed arguments for the command execution.", + "allOf": [ + { + "$ref": "#/definitions/ShellScopeEntryAllowedArgs" + } + ] + }, + "name": { + "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", + "type": "string" + }, + "sidecar": { + "description": "If this command is a sidecar command.", + "type": "boolean" + } + }, + "additionalProperties": false + } + ] + } + } + } + }, + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + } + } + }, + { + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + "allow": { + "description": "Data that defines what is allowed by the scope.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + }, + "deny": { + "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + } + } + } + ], + "required": [ + "identifier" + ] + } + ] + }, + "Identifier": { + "description": "Permission identifier", + "oneOf": [ + { + "description": "Default core plugins set which includes:\n- 'core:path:default'\n- 'core:event:default'\n- 'core:window:default'\n- 'core:webview:default'\n- 'core:app:default'\n- 'core:image:default'\n- 'core:resources:default'\n- 'core:menu:default'\n- 'core:tray:default'\n", + "type": "string", + "const": "core:default" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:app:default" + }, + { + "description": "Enables the app_hide command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-app-hide" + }, + { + "description": "Enables the app_show command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-app-show" + }, + { + "description": "Enables the default_window_icon command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-default-window-icon" + }, + { + "description": "Enables the name command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-name" + }, + { + "description": "Enables the set_app_theme command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-set-app-theme" + }, + { + "description": "Enables the tauri_version command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-tauri-version" + }, + { + "description": "Enables the version command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-version" + }, + { + "description": "Denies the app_hide command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-app-hide" + }, + { + "description": "Denies the app_show command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-app-show" + }, + { + "description": "Denies the default_window_icon command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-default-window-icon" + }, + { + "description": "Denies the name command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-name" + }, + { + "description": "Denies the set_app_theme command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-set-app-theme" + }, + { + "description": "Denies the tauri_version command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-tauri-version" + }, + { + "description": "Denies the version command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-version" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:event:default" + }, + { + "description": "Enables the emit command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-emit" + }, + { + "description": "Enables the emit_to command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-emit-to" + }, + { + "description": "Enables the listen command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-listen" + }, + { + "description": "Enables the unlisten command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-unlisten" + }, + { + "description": "Denies the emit command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-emit" + }, + { + "description": "Denies the emit_to command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-emit-to" + }, + { + "description": "Denies the listen command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-listen" + }, + { + "description": "Denies the unlisten command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-unlisten" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:image:default" + }, + { + "description": "Enables the from_bytes command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-from-bytes" + }, + { + "description": "Enables the from_path command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-from-path" + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-new" + }, + { + "description": "Enables the rgba command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-rgba" + }, + { + "description": "Enables the size command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-size" + }, + { + "description": "Denies the from_bytes command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-from-bytes" + }, + { + "description": "Denies the from_path command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-from-path" + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-new" + }, + { + "description": "Denies the rgba command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-rgba" + }, + { + "description": "Denies the size command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-size" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:menu:default" + }, + { + "description": "Enables the append command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-append" + }, + { + "description": "Enables the create_default command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-create-default" + }, + { + "description": "Enables the get command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-get" + }, + { + "description": "Enables the insert command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-insert" + }, + { + "description": "Enables the is_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-is-checked" + }, + { + "description": "Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-is-enabled" + }, + { + "description": "Enables the items command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-items" + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-new" + }, + { + "description": "Enables the popup command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-popup" + }, + { + "description": "Enables the prepend command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-prepend" + }, + { + "description": "Enables the remove command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-remove" + }, + { + "description": "Enables the remove_at command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-remove-at" + }, + { + "description": "Enables the set_accelerator command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-accelerator" + }, + { + "description": "Enables the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-app-menu" + }, + { + "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-help-menu-for-nsapp" + }, + { + "description": "Enables the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-window-menu" + }, + { + "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-windows-menu-for-nsapp" + }, + { + "description": "Enables the set_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-checked" + }, + { + "description": "Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-enabled" + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-icon" + }, + { + "description": "Enables the set_text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-text" + }, + { + "description": "Enables the text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-text" + }, + { + "description": "Denies the append command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-append" + }, + { + "description": "Denies the create_default command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-create-default" + }, + { + "description": "Denies the get command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-get" + }, + { + "description": "Denies the insert command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-insert" + }, + { + "description": "Denies the is_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-is-checked" + }, + { + "description": "Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-is-enabled" + }, + { + "description": "Denies the items command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-items" + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-new" + }, + { + "description": "Denies the popup command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-popup" + }, + { + "description": "Denies the prepend command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-prepend" + }, + { + "description": "Denies the remove command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-remove" + }, + { + "description": "Denies the remove_at command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-remove-at" + }, + { + "description": "Denies the set_accelerator command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-accelerator" + }, + { + "description": "Denies the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-app-menu" + }, + { + "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-help-menu-for-nsapp" + }, + { + "description": "Denies the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-window-menu" + }, + { + "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-windows-menu-for-nsapp" + }, + { + "description": "Denies the set_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-checked" + }, + { + "description": "Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-enabled" + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-icon" + }, + { + "description": "Denies the set_text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-text" + }, + { + "description": "Denies the text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-text" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:path:default" + }, + { + "description": "Enables the basename command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-basename" + }, + { + "description": "Enables the dirname command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-dirname" + }, + { + "description": "Enables the extname command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-extname" + }, + { + "description": "Enables the is_absolute command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-is-absolute" + }, + { + "description": "Enables the join command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-join" + }, + { + "description": "Enables the normalize command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-normalize" + }, + { + "description": "Enables the resolve command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-resolve" + }, + { + "description": "Enables the resolve_directory command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-resolve-directory" + }, + { + "description": "Denies the basename command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-basename" + }, + { + "description": "Denies the dirname command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-dirname" + }, + { + "description": "Denies the extname command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-extname" + }, + { + "description": "Denies the is_absolute command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-is-absolute" + }, + { + "description": "Denies the join command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-join" + }, + { + "description": "Denies the normalize command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-normalize" + }, + { + "description": "Denies the resolve command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-resolve" + }, + { + "description": "Denies the resolve_directory command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-resolve-directory" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:resources:default" + }, + { + "description": "Enables the close command without any pre-configured scope.", + "type": "string", + "const": "core:resources:allow-close" + }, + { + "description": "Denies the close command without any pre-configured scope.", + "type": "string", + "const": "core:resources:deny-close" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:tray:default" + }, + { + "description": "Enables the get_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-get-by-id" + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-new" + }, + { + "description": "Enables the remove_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-remove-by-id" + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-icon" + }, + { + "description": "Enables the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-icon-as-template" + }, + { + "description": "Enables the set_menu command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-menu" + }, + { + "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-show-menu-on-left-click" + }, + { + "description": "Enables the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-temp-dir-path" + }, + { + "description": "Enables the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-title" + }, + { + "description": "Enables the set_tooltip command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-tooltip" + }, + { + "description": "Enables the set_visible command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-visible" + }, + { + "description": "Denies the get_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-get-by-id" + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-new" + }, + { + "description": "Denies the remove_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-remove-by-id" + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-icon" + }, + { + "description": "Denies the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-icon-as-template" + }, + { + "description": "Denies the set_menu command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-menu" + }, + { + "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-show-menu-on-left-click" + }, + { + "description": "Denies the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-temp-dir-path" + }, + { + "description": "Denies the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-title" + }, + { + "description": "Denies the set_tooltip command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-tooltip" + }, + { + "description": "Denies the set_visible command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-visible" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:webview:default" + }, + { + "description": "Enables the clear_all_browsing_data command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-clear-all-browsing-data" + }, + { + "description": "Enables the create_webview command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-create-webview" + }, + { + "description": "Enables the create_webview_window command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-create-webview-window" + }, + { + "description": "Enables the get_all_webviews command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-get-all-webviews" + }, + { + "description": "Enables the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-internal-toggle-devtools" + }, + { + "description": "Enables the print command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-print" + }, + { + "description": "Enables the reparent command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-reparent" + }, + { + "description": "Enables the set_webview_focus command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-focus" + }, + { + "description": "Enables the set_webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-position" + }, + { + "description": "Enables the set_webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-size" + }, + { + "description": "Enables the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-zoom" + }, + { + "description": "Enables the webview_close command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-close" + }, + { + "description": "Enables the webview_hide command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-hide" + }, + { + "description": "Enables the webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-position" + }, + { + "description": "Enables the webview_show command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-show" + }, + { + "description": "Enables the webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-size" + }, + { + "description": "Denies the clear_all_browsing_data command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-clear-all-browsing-data" + }, + { + "description": "Denies the create_webview command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-create-webview" + }, + { + "description": "Denies the create_webview_window command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-create-webview-window" + }, + { + "description": "Denies the get_all_webviews command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-get-all-webviews" + }, + { + "description": "Denies the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-internal-toggle-devtools" + }, + { + "description": "Denies the print command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-print" + }, + { + "description": "Denies the reparent command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-reparent" + }, + { + "description": "Denies the set_webview_focus command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-focus" + }, + { + "description": "Denies the set_webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-position" + }, + { + "description": "Denies the set_webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-size" + }, + { + "description": "Denies the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-zoom" + }, + { + "description": "Denies the webview_close command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-close" + }, + { + "description": "Denies the webview_hide command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-hide" + }, + { + "description": "Denies the webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-position" + }, + { + "description": "Denies the webview_show command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-show" + }, + { + "description": "Denies the webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-size" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:window:default" + }, + { + "description": "Enables the available_monitors command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-available-monitors" + }, + { + "description": "Enables the center command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-center" + }, + { + "description": "Enables the close command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-close" + }, + { + "description": "Enables the create command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-create" + }, + { + "description": "Enables the current_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-current-monitor" + }, + { + "description": "Enables the cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-cursor-position" + }, + { + "description": "Enables the destroy command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-destroy" + }, + { + "description": "Enables the get_all_windows command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-get-all-windows" + }, + { + "description": "Enables the hide command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-hide" + }, + { + "description": "Enables the inner_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-inner-position" + }, + { + "description": "Enables the inner_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-inner-size" + }, + { + "description": "Enables the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-internal-toggle-maximize" + }, + { + "description": "Enables the is_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-closable" + }, + { + "description": "Enables the is_decorated command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-decorated" + }, + { + "description": "Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-enabled" + }, + { + "description": "Enables the is_focused command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-focused" + }, + { + "description": "Enables the is_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-fullscreen" + }, + { + "description": "Enables the is_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-maximizable" + }, + { + "description": "Enables the is_maximized command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-maximized" + }, + { + "description": "Enables the is_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-minimizable" + }, + { + "description": "Enables the is_minimized command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-minimized" + }, + { + "description": "Enables the is_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-resizable" + }, + { + "description": "Enables the is_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-visible" + }, + { + "description": "Enables the maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-maximize" + }, + { + "description": "Enables the minimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-minimize" + }, + { + "description": "Enables the monitor_from_point command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-monitor-from-point" + }, + { + "description": "Enables the outer_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-outer-position" + }, + { + "description": "Enables the outer_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-outer-size" + }, + { + "description": "Enables the primary_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-primary-monitor" + }, + { + "description": "Enables the request_user_attention command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-request-user-attention" + }, + { + "description": "Enables the scale_factor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-scale-factor" + }, + { + "description": "Enables the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-always-on-bottom" + }, + { + "description": "Enables the set_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-always-on-top" + }, + { + "description": "Enables the set_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-closable" + }, + { + "description": "Enables the set_content_protected command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-content-protected" + }, + { + "description": "Enables the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-grab" + }, + { + "description": "Enables the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-icon" + }, + { + "description": "Enables the set_cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-position" + }, + { + "description": "Enables the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-visible" + }, + { + "description": "Enables the set_decorations command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-decorations" + }, + { + "description": "Enables the set_effects command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-effects" + }, + { + "description": "Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-enabled" + }, + { + "description": "Enables the set_focus command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-focus" + }, + { + "description": "Enables the set_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-fullscreen" + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-icon" + }, + { + "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-ignore-cursor-events" + }, + { + "description": "Enables the set_max_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-max-size" + }, + { + "description": "Enables the set_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-maximizable" + }, + { + "description": "Enables the set_min_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-min-size" + }, + { + "description": "Enables the set_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-minimizable" + }, + { + "description": "Enables the set_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-position" + }, + { + "description": "Enables the set_progress_bar command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-progress-bar" + }, + { + "description": "Enables the set_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-resizable" + }, + { + "description": "Enables the set_shadow command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-shadow" + }, + { + "description": "Enables the set_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-size" + }, + { + "description": "Enables the set_size_constraints command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-size-constraints" + }, + { + "description": "Enables the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-skip-taskbar" + }, + { + "description": "Enables the set_theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-theme" + }, + { + "description": "Enables the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-title" + }, + { + "description": "Enables the set_title_bar_style command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-title-bar-style" + }, + { + "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-visible-on-all-workspaces" + }, + { + "description": "Enables the show command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-show" + }, + { + "description": "Enables the start_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-start-dragging" + }, + { + "description": "Enables the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-start-resize-dragging" + }, + { + "description": "Enables the theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-theme" + }, + { + "description": "Enables the title command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-title" + }, + { + "description": "Enables the toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-toggle-maximize" + }, + { + "description": "Enables the unmaximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-unmaximize" + }, + { + "description": "Enables the unminimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-unminimize" + }, + { + "description": "Denies the available_monitors command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-available-monitors" + }, + { + "description": "Denies the center command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-center" + }, + { + "description": "Denies the close command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-close" + }, + { + "description": "Denies the create command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-create" + }, + { + "description": "Denies the current_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-current-monitor" + }, + { + "description": "Denies the cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-cursor-position" + }, + { + "description": "Denies the destroy command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-destroy" + }, + { + "description": "Denies the get_all_windows command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-get-all-windows" + }, + { + "description": "Denies the hide command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-hide" + }, + { + "description": "Denies the inner_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-inner-position" + }, + { + "description": "Denies the inner_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-inner-size" + }, + { + "description": "Denies the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-internal-toggle-maximize" + }, + { + "description": "Denies the is_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-closable" + }, + { + "description": "Denies the is_decorated command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-decorated" + }, + { + "description": "Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-enabled" + }, + { + "description": "Denies the is_focused command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-focused" + }, + { + "description": "Denies the is_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-fullscreen" + }, + { + "description": "Denies the is_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-maximizable" + }, + { + "description": "Denies the is_maximized command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-maximized" + }, + { + "description": "Denies the is_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-minimizable" + }, + { + "description": "Denies the is_minimized command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-minimized" + }, + { + "description": "Denies the is_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-resizable" + }, + { + "description": "Denies the is_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-visible" + }, + { + "description": "Denies the maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-maximize" + }, + { + "description": "Denies the minimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-minimize" + }, + { + "description": "Denies the monitor_from_point command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-monitor-from-point" + }, + { + "description": "Denies the outer_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-outer-position" + }, + { + "description": "Denies the outer_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-outer-size" + }, + { + "description": "Denies the primary_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-primary-monitor" + }, + { + "description": "Denies the request_user_attention command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-request-user-attention" + }, + { + "description": "Denies the scale_factor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-scale-factor" + }, + { + "description": "Denies the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-always-on-bottom" + }, + { + "description": "Denies the set_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-always-on-top" + }, + { + "description": "Denies the set_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-closable" + }, + { + "description": "Denies the set_content_protected command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-content-protected" + }, + { + "description": "Denies the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-grab" + }, + { + "description": "Denies the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-icon" + }, + { + "description": "Denies the set_cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-position" + }, + { + "description": "Denies the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-visible" + }, + { + "description": "Denies the set_decorations command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-decorations" + }, + { + "description": "Denies the set_effects command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-effects" + }, + { + "description": "Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-enabled" + }, + { + "description": "Denies the set_focus command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-focus" + }, + { + "description": "Denies the set_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-fullscreen" + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-icon" + }, + { + "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-ignore-cursor-events" + }, + { + "description": "Denies the set_max_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-max-size" + }, + { + "description": "Denies the set_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-maximizable" + }, + { + "description": "Denies the set_min_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-min-size" + }, + { + "description": "Denies the set_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-minimizable" + }, + { + "description": "Denies the set_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-position" + }, + { + "description": "Denies the set_progress_bar command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-progress-bar" + }, + { + "description": "Denies the set_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-resizable" + }, + { + "description": "Denies the set_shadow command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-shadow" + }, + { + "description": "Denies the set_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-size" + }, + { + "description": "Denies the set_size_constraints command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-size-constraints" + }, + { + "description": "Denies the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-skip-taskbar" + }, + { + "description": "Denies the set_theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-theme" + }, + { + "description": "Denies the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-title" + }, + { + "description": "Denies the set_title_bar_style command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-title-bar-style" + }, + { + "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-visible-on-all-workspaces" + }, + { + "description": "Denies the show command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-show" + }, + { + "description": "Denies the start_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-start-dragging" + }, + { + "description": "Denies the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-start-resize-dragging" + }, + { + "description": "Denies the theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-theme" + }, + { + "description": "Denies the title command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-title" + }, + { + "description": "Denies the toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-toggle-maximize" + }, + { + "description": "Denies the unmaximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-unmaximize" + }, + { + "description": "Denies the unminimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-unminimize" + }, + { + "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n", + "type": "string", + "const": "shell:default" + }, + { + "description": "Enables the execute command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-execute" + }, + { + "description": "Enables the kill command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-kill" + }, + { + "description": "Enables the open command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-open" + }, + { + "description": "Enables the spawn command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-spawn" + }, + { + "description": "Enables the stdin_write command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-stdin-write" + }, + { + "description": "Denies the execute command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-execute" + }, + { + "description": "Denies the kill command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-kill" + }, + { + "description": "Denies the open command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-open" + }, + { + "description": "Denies the spawn command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-spawn" + }, + { + "description": "Denies the stdin_write command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-stdin-write" + } + ] + }, + "Value": { + "description": "All supported ACL values.", + "anyOf": [ + { + "description": "Represents a null JSON value.", + "type": "null" + }, + { + "description": "Represents a [`bool`].", + "type": "boolean" + }, + { + "description": "Represents a valid ACL [`Number`].", + "allOf": [ + { + "$ref": "#/definitions/Number" + } + ] + }, + { + "description": "Represents a [`String`].", + "type": "string" + }, + { + "description": "Represents a list of other [`Value`]s.", + "type": "array", + "items": { + "$ref": "#/definitions/Value" + } + }, + { + "description": "Represents a map of [`String`] keys to [`Value`]s.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Value" + } + } + ] + }, + "Number": { + "description": "A valid ACL number.", + "anyOf": [ + { + "description": "Represents an [`i64`].", + "type": "integer", + "format": "int64" + }, + { + "description": "Represents a [`f64`].", + "type": "number", + "format": "double" + } + ] + }, + "Target": { + "description": "Platform target.", + "oneOf": [ + { + "description": "MacOS.", + "type": "string", + "enum": [ + "macOS" + ] + }, + { + "description": "Windows.", + "type": "string", + "enum": [ + "windows" + ] + }, + { + "description": "Linux.", + "type": "string", + "enum": [ + "linux" + ] + }, + { + "description": "Android.", + "type": "string", + "enum": [ + "android" + ] + }, + { + "description": "iOS.", + "type": "string", + "enum": [ + "iOS" + ] + } + ] + }, + "ShellScopeEntryAllowedArg": { + "description": "A command argument allowed to be executed by the webview API.", + "anyOf": [ + { + "description": "A non-configurable argument that is passed to the command in the order it was specified.", + "type": "string" + }, + { + "description": "A variable that is set while calling the command from the webview API.", + "type": "object", + "required": [ + "validator" + ], + "properties": { + "raw": { + "description": "Marks the validator as a raw regex, meaning the plugin should not make any modification at runtime.\n\nThis means the regex will not match on the entire string by default, which might be exploited if your regex allow unexpected input to be considered valid. When using this option, make sure your regex is correct.", + "default": false, + "type": "boolean" + }, + "validator": { + "description": "[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\nThe regex string is by default surrounded by `^...$` to match the full string. For example the `https?://\\w+` regex would be registered as `^https?://\\w+$`.\n\n[regex]: <https://docs.rs/regex/latest/regex/#syntax>", + "type": "string" + } + }, + "additionalProperties": false + } + ] + }, + "ShellScopeEntryAllowedArgs": { + "description": "A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellScopeEntryAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration.", + "anyOf": [ + { + "description": "Use a simple boolean to allow all or disable all arguments to this command configuration.", + "type": "boolean" + }, + { + "description": "A specific set of [`ShellScopeEntryAllowedArg`] that are valid to call for the command configuration.", + "type": "array", + "items": { + "$ref": "#/definitions/ShellScopeEntryAllowedArg" + } + } + ] + } + } +} \ No newline at end of file diff --git a/packages/desktop/src-tauri/gen/schemas/macOS-schema.json b/packages/desktop/src-tauri/gen/schemas/macOS-schema.json new file mode 100644 index 000000000..ed816e6cc --- /dev/null +++ b/packages/desktop/src-tauri/gen/schemas/macOS-schema.json @@ -0,0 +1,2054 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "CapabilityFile", + "description": "Capability formats accepted in a capability file.", + "anyOf": [ + { + "description": "A single capability.", + "allOf": [ + { + "$ref": "#/definitions/Capability" + } + ] + }, + { + "description": "A list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + }, + { + "description": "A list of capabilities.", + "type": "object", + "required": [ + "capabilities" + ], + "properties": { + "capabilities": { + "description": "The list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + } + } + } + ], + "definitions": { + "Capability": { + "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows fine grained access to the Tauri core, application, or plugin commands. If a window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, \"platforms\": [\"macOS\",\"windows\"] } ```", + "type": "object", + "required": [ + "identifier", + "permissions" + ], + "properties": { + "identifier": { + "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`", + "type": "string" + }, + "description": { + "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.", + "default": "", + "type": "string" + }, + "remote": { + "description": "Configure remote URLs that can use the capability permissions.\n\nThis setting is optional and defaults to not being set, as our default use case is that the content is served from our local application.\n\n:::caution Make sure you understand the security implications of providing remote sources with local system access. :::\n\n## Example\n\n```json { \"urls\": [\"https://*.mydomain.dev\"] } ```", + "anyOf": [ + { + "$ref": "#/definitions/CapabilityRemote" + }, + { + "type": "null" + } + ] + }, + "local": { + "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.", + "default": true, + "type": "boolean" + }, + "windows": { + "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nOn multiwebview windows, prefer [`Self::webviews`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", + "type": "array", + "items": { + "type": "string" + } + }, + "webviews": { + "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThis is only required when using on multiwebview contexts, by default all child webviews of a window that matches [`Self::windows`] are linked.\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", + "type": "array", + "items": { + "type": "string" + } + }, + "permissions": { + "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ```", + "type": "array", + "items": { + "$ref": "#/definitions/PermissionEntry" + }, + "uniqueItems": true + }, + "platforms": { + "description": "Limit which target platforms this capability applies to.\n\nBy default all platforms are targeted.\n\n## Example\n\n`[\"macOS\",\"windows\"]`", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Target" + } + } + } + }, + "CapabilityRemote": { + "description": "Configuration for remote URLs that are associated with the capability.", + "type": "object", + "required": [ + "urls" + ], + "properties": { + "urls": { + "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n## Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "PermissionEntry": { + "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.", + "anyOf": [ + { + "description": "Reference a permission or permission set by identifier.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + { + "description": "Reference a permission or permission set by identifier and extends its scope.", + "type": "object", + "allOf": [ + { + "if": { + "properties": { + "identifier": { + "anyOf": [ + { + "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n", + "type": "string", + "const": "shell:default" + }, + { + "description": "Enables the execute command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-execute" + }, + { + "description": "Enables the kill command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-kill" + }, + { + "description": "Enables the open command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-open" + }, + { + "description": "Enables the spawn command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-spawn" + }, + { + "description": "Enables the stdin_write command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-stdin-write" + }, + { + "description": "Denies the execute command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-execute" + }, + { + "description": "Denies the kill command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-kill" + }, + { + "description": "Denies the open command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-open" + }, + { + "description": "Denies the spawn command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-spawn" + }, + { + "description": "Denies the stdin_write command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-stdin-write" + } + ] + } + } + }, + "then": { + "properties": { + "allow": { + "items": { + "title": "ShellScopeEntry", + "description": "Shell scope entry.", + "anyOf": [ + { + "type": "object", + "required": [ + "cmd", + "name" + ], + "properties": { + "args": { + "description": "The allowed arguments for the command execution.", + "allOf": [ + { + "$ref": "#/definitions/ShellScopeEntryAllowedArgs" + } + ] + }, + "cmd": { + "description": "The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", + "type": "string" + }, + "name": { + "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", + "type": "string" + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "name", + "sidecar" + ], + "properties": { + "args": { + "description": "The allowed arguments for the command execution.", + "allOf": [ + { + "$ref": "#/definitions/ShellScopeEntryAllowedArgs" + } + ] + }, + "name": { + "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", + "type": "string" + }, + "sidecar": { + "description": "If this command is a sidecar command.", + "type": "boolean" + } + }, + "additionalProperties": false + } + ] + } + }, + "deny": { + "items": { + "title": "ShellScopeEntry", + "description": "Shell scope entry.", + "anyOf": [ + { + "type": "object", + "required": [ + "cmd", + "name" + ], + "properties": { + "args": { + "description": "The allowed arguments for the command execution.", + "allOf": [ + { + "$ref": "#/definitions/ShellScopeEntryAllowedArgs" + } + ] + }, + "cmd": { + "description": "The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", + "type": "string" + }, + "name": { + "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", + "type": "string" + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "name", + "sidecar" + ], + "properties": { + "args": { + "description": "The allowed arguments for the command execution.", + "allOf": [ + { + "$ref": "#/definitions/ShellScopeEntryAllowedArgs" + } + ] + }, + "name": { + "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", + "type": "string" + }, + "sidecar": { + "description": "If this command is a sidecar command.", + "type": "boolean" + } + }, + "additionalProperties": false + } + ] + } + } + } + }, + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + } + } + }, + { + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + "allow": { + "description": "Data that defines what is allowed by the scope.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + }, + "deny": { + "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + } + } + } + ], + "required": [ + "identifier" + ] + } + ] + }, + "Identifier": { + "description": "Permission identifier", + "oneOf": [ + { + "description": "Default core plugins set which includes:\n- 'core:path:default'\n- 'core:event:default'\n- 'core:window:default'\n- 'core:webview:default'\n- 'core:app:default'\n- 'core:image:default'\n- 'core:resources:default'\n- 'core:menu:default'\n- 'core:tray:default'\n", + "type": "string", + "const": "core:default" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:app:default" + }, + { + "description": "Enables the app_hide command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-app-hide" + }, + { + "description": "Enables the app_show command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-app-show" + }, + { + "description": "Enables the default_window_icon command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-default-window-icon" + }, + { + "description": "Enables the name command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-name" + }, + { + "description": "Enables the set_app_theme command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-set-app-theme" + }, + { + "description": "Enables the tauri_version command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-tauri-version" + }, + { + "description": "Enables the version command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-version" + }, + { + "description": "Denies the app_hide command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-app-hide" + }, + { + "description": "Denies the app_show command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-app-show" + }, + { + "description": "Denies the default_window_icon command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-default-window-icon" + }, + { + "description": "Denies the name command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-name" + }, + { + "description": "Denies the set_app_theme command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-set-app-theme" + }, + { + "description": "Denies the tauri_version command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-tauri-version" + }, + { + "description": "Denies the version command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-version" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:event:default" + }, + { + "description": "Enables the emit command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-emit" + }, + { + "description": "Enables the emit_to command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-emit-to" + }, + { + "description": "Enables the listen command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-listen" + }, + { + "description": "Enables the unlisten command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-unlisten" + }, + { + "description": "Denies the emit command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-emit" + }, + { + "description": "Denies the emit_to command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-emit-to" + }, + { + "description": "Denies the listen command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-listen" + }, + { + "description": "Denies the unlisten command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-unlisten" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:image:default" + }, + { + "description": "Enables the from_bytes command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-from-bytes" + }, + { + "description": "Enables the from_path command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-from-path" + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-new" + }, + { + "description": "Enables the rgba command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-rgba" + }, + { + "description": "Enables the size command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-size" + }, + { + "description": "Denies the from_bytes command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-from-bytes" + }, + { + "description": "Denies the from_path command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-from-path" + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-new" + }, + { + "description": "Denies the rgba command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-rgba" + }, + { + "description": "Denies the size command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-size" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:menu:default" + }, + { + "description": "Enables the append command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-append" + }, + { + "description": "Enables the create_default command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-create-default" + }, + { + "description": "Enables the get command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-get" + }, + { + "description": "Enables the insert command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-insert" + }, + { + "description": "Enables the is_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-is-checked" + }, + { + "description": "Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-is-enabled" + }, + { + "description": "Enables the items command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-items" + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-new" + }, + { + "description": "Enables the popup command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-popup" + }, + { + "description": "Enables the prepend command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-prepend" + }, + { + "description": "Enables the remove command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-remove" + }, + { + "description": "Enables the remove_at command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-remove-at" + }, + { + "description": "Enables the set_accelerator command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-accelerator" + }, + { + "description": "Enables the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-app-menu" + }, + { + "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-help-menu-for-nsapp" + }, + { + "description": "Enables the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-window-menu" + }, + { + "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-windows-menu-for-nsapp" + }, + { + "description": "Enables the set_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-checked" + }, + { + "description": "Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-enabled" + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-icon" + }, + { + "description": "Enables the set_text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-text" + }, + { + "description": "Enables the text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-text" + }, + { + "description": "Denies the append command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-append" + }, + { + "description": "Denies the create_default command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-create-default" + }, + { + "description": "Denies the get command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-get" + }, + { + "description": "Denies the insert command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-insert" + }, + { + "description": "Denies the is_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-is-checked" + }, + { + "description": "Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-is-enabled" + }, + { + "description": "Denies the items command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-items" + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-new" + }, + { + "description": "Denies the popup command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-popup" + }, + { + "description": "Denies the prepend command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-prepend" + }, + { + "description": "Denies the remove command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-remove" + }, + { + "description": "Denies the remove_at command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-remove-at" + }, + { + "description": "Denies the set_accelerator command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-accelerator" + }, + { + "description": "Denies the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-app-menu" + }, + { + "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-help-menu-for-nsapp" + }, + { + "description": "Denies the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-window-menu" + }, + { + "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-windows-menu-for-nsapp" + }, + { + "description": "Denies the set_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-checked" + }, + { + "description": "Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-enabled" + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-icon" + }, + { + "description": "Denies the set_text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-text" + }, + { + "description": "Denies the text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-text" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:path:default" + }, + { + "description": "Enables the basename command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-basename" + }, + { + "description": "Enables the dirname command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-dirname" + }, + { + "description": "Enables the extname command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-extname" + }, + { + "description": "Enables the is_absolute command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-is-absolute" + }, + { + "description": "Enables the join command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-join" + }, + { + "description": "Enables the normalize command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-normalize" + }, + { + "description": "Enables the resolve command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-resolve" + }, + { + "description": "Enables the resolve_directory command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-resolve-directory" + }, + { + "description": "Denies the basename command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-basename" + }, + { + "description": "Denies the dirname command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-dirname" + }, + { + "description": "Denies the extname command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-extname" + }, + { + "description": "Denies the is_absolute command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-is-absolute" + }, + { + "description": "Denies the join command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-join" + }, + { + "description": "Denies the normalize command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-normalize" + }, + { + "description": "Denies the resolve command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-resolve" + }, + { + "description": "Denies the resolve_directory command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-resolve-directory" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:resources:default" + }, + { + "description": "Enables the close command without any pre-configured scope.", + "type": "string", + "const": "core:resources:allow-close" + }, + { + "description": "Denies the close command without any pre-configured scope.", + "type": "string", + "const": "core:resources:deny-close" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:tray:default" + }, + { + "description": "Enables the get_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-get-by-id" + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-new" + }, + { + "description": "Enables the remove_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-remove-by-id" + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-icon" + }, + { + "description": "Enables the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-icon-as-template" + }, + { + "description": "Enables the set_menu command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-menu" + }, + { + "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-show-menu-on-left-click" + }, + { + "description": "Enables the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-temp-dir-path" + }, + { + "description": "Enables the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-title" + }, + { + "description": "Enables the set_tooltip command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-tooltip" + }, + { + "description": "Enables the set_visible command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-visible" + }, + { + "description": "Denies the get_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-get-by-id" + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-new" + }, + { + "description": "Denies the remove_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-remove-by-id" + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-icon" + }, + { + "description": "Denies the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-icon-as-template" + }, + { + "description": "Denies the set_menu command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-menu" + }, + { + "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-show-menu-on-left-click" + }, + { + "description": "Denies the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-temp-dir-path" + }, + { + "description": "Denies the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-title" + }, + { + "description": "Denies the set_tooltip command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-tooltip" + }, + { + "description": "Denies the set_visible command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-visible" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:webview:default" + }, + { + "description": "Enables the clear_all_browsing_data command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-clear-all-browsing-data" + }, + { + "description": "Enables the create_webview command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-create-webview" + }, + { + "description": "Enables the create_webview_window command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-create-webview-window" + }, + { + "description": "Enables the get_all_webviews command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-get-all-webviews" + }, + { + "description": "Enables the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-internal-toggle-devtools" + }, + { + "description": "Enables the print command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-print" + }, + { + "description": "Enables the reparent command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-reparent" + }, + { + "description": "Enables the set_webview_focus command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-focus" + }, + { + "description": "Enables the set_webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-position" + }, + { + "description": "Enables the set_webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-size" + }, + { + "description": "Enables the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-zoom" + }, + { + "description": "Enables the webview_close command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-close" + }, + { + "description": "Enables the webview_hide command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-hide" + }, + { + "description": "Enables the webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-position" + }, + { + "description": "Enables the webview_show command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-show" + }, + { + "description": "Enables the webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-size" + }, + { + "description": "Denies the clear_all_browsing_data command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-clear-all-browsing-data" + }, + { + "description": "Denies the create_webview command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-create-webview" + }, + { + "description": "Denies the create_webview_window command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-create-webview-window" + }, + { + "description": "Denies the get_all_webviews command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-get-all-webviews" + }, + { + "description": "Denies the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-internal-toggle-devtools" + }, + { + "description": "Denies the print command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-print" + }, + { + "description": "Denies the reparent command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-reparent" + }, + { + "description": "Denies the set_webview_focus command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-focus" + }, + { + "description": "Denies the set_webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-position" + }, + { + "description": "Denies the set_webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-size" + }, + { + "description": "Denies the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-zoom" + }, + { + "description": "Denies the webview_close command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-close" + }, + { + "description": "Denies the webview_hide command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-hide" + }, + { + "description": "Denies the webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-position" + }, + { + "description": "Denies the webview_show command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-show" + }, + { + "description": "Denies the webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-size" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:window:default" + }, + { + "description": "Enables the available_monitors command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-available-monitors" + }, + { + "description": "Enables the center command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-center" + }, + { + "description": "Enables the close command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-close" + }, + { + "description": "Enables the create command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-create" + }, + { + "description": "Enables the current_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-current-monitor" + }, + { + "description": "Enables the cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-cursor-position" + }, + { + "description": "Enables the destroy command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-destroy" + }, + { + "description": "Enables the get_all_windows command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-get-all-windows" + }, + { + "description": "Enables the hide command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-hide" + }, + { + "description": "Enables the inner_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-inner-position" + }, + { + "description": "Enables the inner_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-inner-size" + }, + { + "description": "Enables the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-internal-toggle-maximize" + }, + { + "description": "Enables the is_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-closable" + }, + { + "description": "Enables the is_decorated command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-decorated" + }, + { + "description": "Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-enabled" + }, + { + "description": "Enables the is_focused command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-focused" + }, + { + "description": "Enables the is_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-fullscreen" + }, + { + "description": "Enables the is_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-maximizable" + }, + { + "description": "Enables the is_maximized command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-maximized" + }, + { + "description": "Enables the is_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-minimizable" + }, + { + "description": "Enables the is_minimized command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-minimized" + }, + { + "description": "Enables the is_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-resizable" + }, + { + "description": "Enables the is_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-visible" + }, + { + "description": "Enables the maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-maximize" + }, + { + "description": "Enables the minimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-minimize" + }, + { + "description": "Enables the monitor_from_point command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-monitor-from-point" + }, + { + "description": "Enables the outer_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-outer-position" + }, + { + "description": "Enables the outer_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-outer-size" + }, + { + "description": "Enables the primary_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-primary-monitor" + }, + { + "description": "Enables the request_user_attention command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-request-user-attention" + }, + { + "description": "Enables the scale_factor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-scale-factor" + }, + { + "description": "Enables the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-always-on-bottom" + }, + { + "description": "Enables the set_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-always-on-top" + }, + { + "description": "Enables the set_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-closable" + }, + { + "description": "Enables the set_content_protected command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-content-protected" + }, + { + "description": "Enables the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-grab" + }, + { + "description": "Enables the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-icon" + }, + { + "description": "Enables the set_cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-position" + }, + { + "description": "Enables the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-visible" + }, + { + "description": "Enables the set_decorations command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-decorations" + }, + { + "description": "Enables the set_effects command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-effects" + }, + { + "description": "Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-enabled" + }, + { + "description": "Enables the set_focus command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-focus" + }, + { + "description": "Enables the set_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-fullscreen" + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-icon" + }, + { + "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-ignore-cursor-events" + }, + { + "description": "Enables the set_max_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-max-size" + }, + { + "description": "Enables the set_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-maximizable" + }, + { + "description": "Enables the set_min_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-min-size" + }, + { + "description": "Enables the set_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-minimizable" + }, + { + "description": "Enables the set_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-position" + }, + { + "description": "Enables the set_progress_bar command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-progress-bar" + }, + { + "description": "Enables the set_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-resizable" + }, + { + "description": "Enables the set_shadow command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-shadow" + }, + { + "description": "Enables the set_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-size" + }, + { + "description": "Enables the set_size_constraints command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-size-constraints" + }, + { + "description": "Enables the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-skip-taskbar" + }, + { + "description": "Enables the set_theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-theme" + }, + { + "description": "Enables the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-title" + }, + { + "description": "Enables the set_title_bar_style command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-title-bar-style" + }, + { + "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-visible-on-all-workspaces" + }, + { + "description": "Enables the show command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-show" + }, + { + "description": "Enables the start_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-start-dragging" + }, + { + "description": "Enables the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-start-resize-dragging" + }, + { + "description": "Enables the theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-theme" + }, + { + "description": "Enables the title command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-title" + }, + { + "description": "Enables the toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-toggle-maximize" + }, + { + "description": "Enables the unmaximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-unmaximize" + }, + { + "description": "Enables the unminimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-unminimize" + }, + { + "description": "Denies the available_monitors command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-available-monitors" + }, + { + "description": "Denies the center command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-center" + }, + { + "description": "Denies the close command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-close" + }, + { + "description": "Denies the create command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-create" + }, + { + "description": "Denies the current_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-current-monitor" + }, + { + "description": "Denies the cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-cursor-position" + }, + { + "description": "Denies the destroy command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-destroy" + }, + { + "description": "Denies the get_all_windows command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-get-all-windows" + }, + { + "description": "Denies the hide command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-hide" + }, + { + "description": "Denies the inner_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-inner-position" + }, + { + "description": "Denies the inner_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-inner-size" + }, + { + "description": "Denies the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-internal-toggle-maximize" + }, + { + "description": "Denies the is_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-closable" + }, + { + "description": "Denies the is_decorated command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-decorated" + }, + { + "description": "Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-enabled" + }, + { + "description": "Denies the is_focused command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-focused" + }, + { + "description": "Denies the is_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-fullscreen" + }, + { + "description": "Denies the is_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-maximizable" + }, + { + "description": "Denies the is_maximized command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-maximized" + }, + { + "description": "Denies the is_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-minimizable" + }, + { + "description": "Denies the is_minimized command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-minimized" + }, + { + "description": "Denies the is_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-resizable" + }, + { + "description": "Denies the is_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-visible" + }, + { + "description": "Denies the maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-maximize" + }, + { + "description": "Denies the minimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-minimize" + }, + { + "description": "Denies the monitor_from_point command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-monitor-from-point" + }, + { + "description": "Denies the outer_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-outer-position" + }, + { + "description": "Denies the outer_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-outer-size" + }, + { + "description": "Denies the primary_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-primary-monitor" + }, + { + "description": "Denies the request_user_attention command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-request-user-attention" + }, + { + "description": "Denies the scale_factor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-scale-factor" + }, + { + "description": "Denies the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-always-on-bottom" + }, + { + "description": "Denies the set_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-always-on-top" + }, + { + "description": "Denies the set_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-closable" + }, + { + "description": "Denies the set_content_protected command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-content-protected" + }, + { + "description": "Denies the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-grab" + }, + { + "description": "Denies the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-icon" + }, + { + "description": "Denies the set_cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-position" + }, + { + "description": "Denies the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-visible" + }, + { + "description": "Denies the set_decorations command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-decorations" + }, + { + "description": "Denies the set_effects command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-effects" + }, + { + "description": "Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-enabled" + }, + { + "description": "Denies the set_focus command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-focus" + }, + { + "description": "Denies the set_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-fullscreen" + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-icon" + }, + { + "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-ignore-cursor-events" + }, + { + "description": "Denies the set_max_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-max-size" + }, + { + "description": "Denies the set_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-maximizable" + }, + { + "description": "Denies the set_min_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-min-size" + }, + { + "description": "Denies the set_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-minimizable" + }, + { + "description": "Denies the set_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-position" + }, + { + "description": "Denies the set_progress_bar command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-progress-bar" + }, + { + "description": "Denies the set_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-resizable" + }, + { + "description": "Denies the set_shadow command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-shadow" + }, + { + "description": "Denies the set_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-size" + }, + { + "description": "Denies the set_size_constraints command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-size-constraints" + }, + { + "description": "Denies the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-skip-taskbar" + }, + { + "description": "Denies the set_theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-theme" + }, + { + "description": "Denies the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-title" + }, + { + "description": "Denies the set_title_bar_style command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-title-bar-style" + }, + { + "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-visible-on-all-workspaces" + }, + { + "description": "Denies the show command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-show" + }, + { + "description": "Denies the start_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-start-dragging" + }, + { + "description": "Denies the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-start-resize-dragging" + }, + { + "description": "Denies the theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-theme" + }, + { + "description": "Denies the title command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-title" + }, + { + "description": "Denies the toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-toggle-maximize" + }, + { + "description": "Denies the unmaximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-unmaximize" + }, + { + "description": "Denies the unminimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-unminimize" + }, + { + "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n", + "type": "string", + "const": "shell:default" + }, + { + "description": "Enables the execute command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-execute" + }, + { + "description": "Enables the kill command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-kill" + }, + { + "description": "Enables the open command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-open" + }, + { + "description": "Enables the spawn command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-spawn" + }, + { + "description": "Enables the stdin_write command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-stdin-write" + }, + { + "description": "Denies the execute command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-execute" + }, + { + "description": "Denies the kill command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-kill" + }, + { + "description": "Denies the open command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-open" + }, + { + "description": "Denies the spawn command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-spawn" + }, + { + "description": "Denies the stdin_write command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-stdin-write" + } + ] + }, + "Value": { + "description": "All supported ACL values.", + "anyOf": [ + { + "description": "Represents a null JSON value.", + "type": "null" + }, + { + "description": "Represents a [`bool`].", + "type": "boolean" + }, + { + "description": "Represents a valid ACL [`Number`].", + "allOf": [ + { + "$ref": "#/definitions/Number" + } + ] + }, + { + "description": "Represents a [`String`].", + "type": "string" + }, + { + "description": "Represents a list of other [`Value`]s.", + "type": "array", + "items": { + "$ref": "#/definitions/Value" + } + }, + { + "description": "Represents a map of [`String`] keys to [`Value`]s.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Value" + } + } + ] + }, + "Number": { + "description": "A valid ACL number.", + "anyOf": [ + { + "description": "Represents an [`i64`].", + "type": "integer", + "format": "int64" + }, + { + "description": "Represents a [`f64`].", + "type": "number", + "format": "double" + } + ] + }, + "Target": { + "description": "Platform target.", + "oneOf": [ + { + "description": "MacOS.", + "type": "string", + "enum": [ + "macOS" + ] + }, + { + "description": "Windows.", + "type": "string", + "enum": [ + "windows" + ] + }, + { + "description": "Linux.", + "type": "string", + "enum": [ + "linux" + ] + }, + { + "description": "Android.", + "type": "string", + "enum": [ + "android" + ] + }, + { + "description": "iOS.", + "type": "string", + "enum": [ + "iOS" + ] + } + ] + }, + "ShellScopeEntryAllowedArg": { + "description": "A command argument allowed to be executed by the webview API.", + "anyOf": [ + { + "description": "A non-configurable argument that is passed to the command in the order it was specified.", + "type": "string" + }, + { + "description": "A variable that is set while calling the command from the webview API.", + "type": "object", + "required": [ + "validator" + ], + "properties": { + "raw": { + "description": "Marks the validator as a raw regex, meaning the plugin should not make any modification at runtime.\n\nThis means the regex will not match on the entire string by default, which might be exploited if your regex allow unexpected input to be considered valid. When using this option, make sure your regex is correct.", + "default": false, + "type": "boolean" + }, + "validator": { + "description": "[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\nThe regex string is by default surrounded by `^...$` to match the full string. For example the `https?://\\w+` regex would be registered as `^https?://\\w+$`.\n\n[regex]: <https://docs.rs/regex/latest/regex/#syntax>", + "type": "string" + } + }, + "additionalProperties": false + } + ] + }, + "ShellScopeEntryAllowedArgs": { + "description": "A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellScopeEntryAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration.", + "anyOf": [ + { + "description": "Use a simple boolean to allow all or disable all arguments to this command configuration.", + "type": "boolean" + }, + { + "description": "A specific set of [`ShellScopeEntryAllowedArg`] that are valid to call for the command configuration.", + "type": "array", + "items": { + "$ref": "#/definitions/ShellScopeEntryAllowedArg" + } + } + ] + } + } +} \ No newline at end of file diff --git a/packages/desktop/src-tauri/src/main.rs b/packages/desktop/src-tauri/src/main.rs index fb02db30a..dcdebb741 100644 --- a/packages/desktop/src-tauri/src/main.rs +++ b/packages/desktop/src-tauri/src/main.rs @@ -1,74 +1,78 @@ #![cfg_attr( - all(not(debug_assertions), target_os = "windows"), - windows_subsystem = "windows" + all(not(debug_assertions), target_os = "windows"), + windows_subsystem = "windows" )] use tauri::{ - CustomMenuItem, - Manager, - SystemTray, - SystemTrayEvent, - SystemTrayMenu, - SystemTrayMenuItem, + menu::{Menu, MenuItem, MenuEvent}, + tray::{TrayIconBuilder, TrayIconEvent, MouseButton}, + Manager }; fn main() { - let tray_menu = SystemTrayMenu::new() - .add_item(CustomMenuItem::new("title".to_string(), "Revolt").disabled()) - .add_native_item(SystemTrayMenuItem::Separator) - .add_item(CustomMenuItem::new("open".to_string(), "Open Revolt")) - .add_item(CustomMenuItem::new("hide".to_string(), "Hide Revolt")) - .add_item(CustomMenuItem::new("quit".to_string(), "Quit Revolt")); - - let system_tray = SystemTray::new().with_menu(tray_menu); - - tauri::Builder::default() - .on_window_event(|event| match event.event() { + tauri::Builder::default() + .plugin(tauri_plugin_shell::init()) + .on_window_event(|window, event| match event { tauri::WindowEvent::CloseRequested { api, .. } => { - event.window().hide().unwrap(); + window.hide().unwrap(); api.prevent_close(); } _ => {} }) .setup(| app | { + let title = MenuItem::with_id(app, "title", "Revolt", false, None::<&str>)?; + let open = MenuItem::with_id(app, "open", "Open Revolt", true, None::<&str>)?; + let hide = MenuItem::with_id(app, "hide", "Hide Revolt", true, None::<&str>)?; + let quit = MenuItem::with_id(app, "quit", "Quit Revolt", true, None::<&str>)?; + + let menu = Menu::with_items(app, &[ + &title, + &open, + &hide, + &quit + ])?; + + let tray = TrayIconBuilder::new() + .icon(app.default_window_icon().unwrap().clone()) + .menu(&menu) + .on_tray_icon_event(|tray, event| match event { + TrayIconEvent::Click { + button: MouseButton::Left, + .. + } => { + let app = tray.app_handle(); + let window = app.get_webview_window("main").unwrap(); + + if window.set_focus().is_err() { + println!("[on_system_tray_event][:LeftClick] error when trying to set main window focus."); + } + }, + _ => {} + }) + .on_menu_event(|app, event| match event.id.as_ref() { + "open" => { + let window = app.get_webview_window("main").unwrap(); + window.show().unwrap(); + window.set_focus().unwrap(); + } + "hide" => { + let window = app.get_webview_window("main").unwrap(); + window.hide().unwrap(); + } + "quit" => { + std::process::exit(0); + } + _ => {} + }) + .build(app)?; + if cfg!(any(windows, target_os = "macos")) { - use window_shadows::set_shadow; - let window = app.get_window("main").unwrap(); - set_shadow(&window, true).unwrap_or_default(); + let window = app.get_webview_window("main").unwrap(); + window.set_shadow(true)?; } Ok(()) }) - .system_tray(system_tray) - .on_system_tray_event(|app, event| match event { - SystemTrayEvent::LeftClick { - position: _, - size: _, - .. - } => { - let window = app.get_window("main").unwrap(); - - if window.set_focus().is_err() { - println!("[on_system_tray_event][:LeftClick] error when trying to set main window focus."); - } - } - SystemTrayEvent::MenuItemClick { id, .. } => match id.as_str() { - "open" => { - let window = app.get_window("main").unwrap(); - window.show().unwrap(); - window.set_focus().unwrap(); - } - "hide" => { - let window = app.get_window("main").unwrap(); - window.hide().unwrap(); - } - "quit" => { - std::process::exit(0); - } - _ => {} - }, - _ => {} - }) .run(tauri::generate_context!()) .expect("error while running tauri application"); } diff --git a/packages/desktop/src-tauri/tauri.conf.json b/packages/desktop/src-tauri/tauri.conf.json index 26407b5de..c3b8dbf8d 100644 --- a/packages/desktop/src-tauri/tauri.conf.json +++ b/packages/desktop/src-tauri/tauri.conf.json @@ -2,72 +2,50 @@ "$schema": "../node_modules/@tauri-apps/cli/schema.json", "build": { "beforeDevCommand": "pnpm --filter client dev --port 6173", - "devPath": "http://localhost:6173", - "distDir": "../handoff", - "withGlobalTauri": false + "frontendDist": "../handoff", + "devUrl": "http://localhost:6173" }, - "package": { - "productName": "Revolt", - "version": "0.1.0" - }, - "tauri": { - "allowlist": { - "all": false, - "shell": { - "all": false, - "open": true - }, - "window": { - "all": false, - "close": true, - "hide": true, - "show": true, - "maximize": true, - "minimize": true, - "unmaximize": true, - "unminimize": true, - "startDragging": true - } + "bundle": { + "active": true, + "category": "SocialNetworking", + "copyright": "", + "targets": "all", + "externalBin": [], + "icon": [ + "../../client/assets/icons/favicon-16x16.png", + "../../client/assets/icons/android-chrome-512x512.png", + "../../client/assets/icons/icon.icns", + "../../client/assets/logo_round.png", + "../../client/assets/icons/icon.ico" + ], + "windows": { + "certificateThumbprint": null, + "digestAlgorithm": "sha256", + "timestampUrl": "" + }, + "longDescription": "User-first, privacy focused chat platform.", + "macOS": { + "entitlements": null, + "exceptionDomain": "", + "frameworks": [], + "providerShortName": null, + "signingIdentity": null }, - "bundle": { - "active": true, - "category": "SocialNetworking", - "copyright": "", + "resources": [], + "shortDescription": "User-first, privacy focused chat platform.", + "linux": { "deb": { "depends": [] - }, - "externalBin": [], - "icon": [ - "../../client/assets/icons/favicon-16x16.png", - "../../client/assets/icons/android-chrome-512x512.png", - "../../client/assets/icons/icon.icns", - "../../client/assets/logo_round.png", - "../../client/assets/icons/icon.ico" - ], - "identifier": "chat.revolt.app", - "longDescription": "User-first, privacy focused chat platform.", - "macOS": { - "entitlements": null, - "exceptionDomain": "", - "frameworks": [], - "providerShortName": null, - "signingIdentity": null - }, - "resources": [], - "shortDescription": "User-first, privacy focused chat platform.", - "targets": "all", - "windows": { - "certificateThumbprint": null, - "digestAlgorithm": "sha256", - "timestampUrl": "" } - }, - "security": { - "csp": null - }, - "updater": { - "active": false - }, + } + }, + "productName": "Revolt", + "mainBinaryName": "Revolt", + "version": "0.1.0", + "identifier": "chat.revolt.app", + "plugins": {}, + "app": { + "withGlobalTauri": false, "windows": [ { "fullscreen": false, @@ -84,7 +62,10 @@ "minHeight": 500 } ], - "systemTray": { + "security": { + "csp": null + }, + "trayIcon": { "iconPath": "../../client/assets/icons/tray/trayIcon.png", "iconAsTemplate": true, "title": "Revolt" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 82c96dabc..d4c9fa3ee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '9.0' settings: autoInstallPeers: true @@ -6,70 +6,98 @@ settings: importers: - .: {} + .: + devDependencies: + '@eslint/js': + specifier: ^9.12.0 + version: 9.12.0 + '@types/node': + specifier: ^22.7.5 + version: 22.7.5 + '@typescript-eslint/parser': + specifier: ^8.8.1 + version: 8.8.1(eslint@9.12.0)(typescript@5.6.3) + eslint: + specifier: ^9.12.0 + version: 9.12.0 + eslint-config-prettier: + specifier: ^8.10.0 + version: 8.10.0(eslint@9.12.0) + eslint-plugin-prettier: + specifier: ^5.2.1 + version: 5.2.1(eslint-config-prettier@8.10.0(eslint@9.12.0))(eslint@9.12.0)(prettier@3.3.3) + eslint-plugin-promise: + specifier: ^7.1.0 + version: 7.1.0(eslint@9.12.0) + eslint-plugin-simple-import-sort: + specifier: ^12.1.1 + version: 12.1.1(eslint@9.12.0) + eslint-plugin-solid: + specifier: ^0.14.3 + version: 0.14.3(eslint@9.12.0)(typescript@5.6.3) + prettier: + specifier: ^3.3.3 + version: 3.3.3 + prettier-config-standard: + specifier: ^7.0.0 + version: 7.0.0(prettier@3.3.3) + typescript-eslint: + specifier: ^8.8.1 + version: 8.8.1(eslint@9.12.0)(typescript@5.6.3) packages/client: dependencies: '@floating-ui/dom': - specifier: ^1.6.3 - version: 1.6.3 + specifier: ^1.6.11 + version: 1.6.11 '@fontsource/inter': - specifier: ^5.0.17 - version: 5.0.17 + specifier: ^5.1.0 + version: 5.1.0 '@fontsource/jetbrains-mono': - specifier: ^5.0.19 - version: 5.0.19 + specifier: ^5.1.1 + version: 5.1.1 '@fontsource/open-sans': - specifier: ^5.0.27 - version: 5.0.27 + specifier: ^5.1.0 + version: 5.1.0 '@material-design-icons/svg': specifier: ^0.14.13 version: 0.14.13 '@material/material-color-utilities': - specifier: ^0.2.7 - version: 0.2.7 + specifier: ^0.3.0 + version: 0.3.0 '@minht11/solid-virtual-container': specifier: ^0.2.1 - version: 0.2.1(solid-js@1.8.15) - '@motionone/solid': - specifier: ^10.16.4 - version: 10.16.4(solid-js@1.8.15) + version: 0.2.1(solid-js@1.9.2) '@sentry/browser': - specifier: ^7.107.0 - version: 7.107.0 + specifier: ^8.33.1 + version: 8.33.1 '@sentry/tracing': - specifier: ^7.107.0 - version: 7.107.0 + specifier: ^7.114.0 + version: 7.114.0 '@solid-aria/button': specifier: ^0.1.3 - version: 0.1.3(solid-js@1.8.15) - '@solid-devtools/debugger': - specifier: ^0.23.3 - version: 0.23.3(solid-js@1.8.15) - '@solid-devtools/overlay': - specifier: ^0.29.3 - version: 0.29.3(solid-js@1.8.15) + version: 0.1.3(solid-js@1.9.2) '@solid-primitives/i18n': - specifier: ^1.1.1 - version: 1.1.1(solid-js@1.8.15) + specifier: ^2.1.1 + version: 2.1.1(solid-js@1.9.2) '@solid-primitives/keyed': specifier: ^1.2.2 - version: 1.2.2(solid-js@1.8.15) + version: 1.2.2(solid-js@1.9.2) '@solid-primitives/map': - specifier: ^0.4.11 - version: 0.4.11(solid-js@1.8.15) + specifier: ^0.4.13 + version: 0.4.13(solid-js@1.9.2) '@solidjs/router': - specifier: ^0.13.0 - version: 0.13.0(solid-js@1.8.15) + specifier: ^0.14.7 + version: 0.14.7(solid-js@1.9.2) '@tanstack/solid-query': - specifier: ^5.48.0 - version: 5.48.0(solid-js@1.8.15) + specifier: ^5.59.0 + version: 5.59.0(solid-js@1.9.2) '@tauri-apps/api': - specifier: ^1.5.3 - version: 1.5.3 + specifier: ^2.0.2 + version: 2.0.2 '@thisbeyond/solid-dnd': specifier: ^0.7.5 - version: 0.7.5(solid-js@1.8.15) + version: 0.7.5(solid-js@1.9.2) color-rgba: specifier: ^3.0.0 version: 3.0.0 @@ -77,26 +105,23 @@ importers: specifier: ^2.0.3 version: 2.0.3 dayjs: - specifier: ^1.11.10 - version: 1.11.10 + specifier: ^1.11.13 + version: 1.11.13 detect-browser: specifier: ^5.3.0 version: 5.3.0 emoji-regex: - specifier: ^10.3.0 - version: 10.3.0 + specifier: ^10.4.0 + version: 10.4.0 fast-deep-equal: specifier: ^3.1.3 version: 3.1.3 - hast: - specifier: ^1.0.0 - version: 1.0.0 json-stringify-deterministic: specifier: ^1.0.12 version: 1.0.12 katex: - specifier: ^0.16.9 - version: 0.16.9 + specifier: ^0.16.11 + version: 0.16.11 localforage: specifier: ^1.10.0 version: 1.10.0 @@ -107,20 +132,20 @@ importers: specifier: ^4.5.0 version: 4.5.0 mdast-util-to-hast: - specifier: ^12.2.4 - version: 12.3.0 + specifier: ^13.2.0 + version: 13.2.0 property-information: - specifier: ^6.2.0 - version: 6.4.1 + specifier: ^6.5.0 + version: 6.5.0 rehype-highlight: specifier: ^7.0.0 version: 7.0.0 rehype-katex: - specifier: ^7.0.0 - version: 7.0.0 + specifier: ^7.0.1 + version: 7.0.1 rehype-prism: specifier: ^2.3.2 - version: 2.3.2(unified@11.0.4) + version: 2.3.2(unified@11.0.5) remark-breaks: specifier: ^4.0.0 version: 4.0.0 @@ -134,90 +159,87 @@ importers: specifier: ^11.0.0 version: 11.0.0 remark-rehype: - specifier: ^11.1.0 - version: 11.1.0 + specifier: ^11.1.1 + version: 11.1.1 revolt.js: specifier: workspace:^ version: link:../revolt.js shiki: - specifier: ^1.9.0 - version: 1.9.0 + specifier: ^1.22.0 + version: 1.22.0 solid-dnd-directive: specifier: ^0.2.0 - version: 0.2.0(solid-js@1.8.15) + version: 0.2.0(solid-js@1.9.2) solid-floating-ui: specifier: ^0.3.1 - version: 0.3.1(@floating-ui/dom@1.6.3)(solid-js@1.8.15) + version: 0.3.1(@floating-ui/dom@1.6.11)(solid-js@1.9.2) solid-hcaptcha: specifier: ^0.4.0 - version: 0.4.0(solid-js@1.8.15) + version: 0.4.0(solid-js@1.9.2) solid-icons: specifier: ^1.1.0 - version: 1.1.0(solid-js@1.8.15) + version: 1.1.0(solid-js@1.9.2) solid-js: - specifier: ^1.8.15 - version: 1.8.15 + specifier: ^1.9.2 + version: 1.9.2 solid-qr-code: specifier: ^0.1.11 - version: 0.1.11(solid-js@1.8.15) + version: 0.1.11(solid-js@1.9.2) solid-styled-components: - specifier: workspace:^0.28.5 + specifier: workspace:^ version: link:../solid-styled-components space-separated-tokens: specifier: ^2.0.2 version: 2.0.2 style-to-object: - specifier: ^0.4.4 - version: 0.4.4 + specifier: ^1.0.8 + version: 1.0.8 ulid: specifier: ^2.3.0 version: 2.3.0 unified: - specifier: ^11.0.4 - version: 11.0.4 + specifier: ^11.0.5 + version: 11.0.5 unist-util-visit: specifier: ^5.0.0 version: 5.0.0 vfile: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^6.0.3 + version: 6.0.3 workbox-precaching: - specifier: ^7.0.0 - version: 7.0.0 + specifier: ^7.1.0 + version: 7.1.0 devDependencies: '@chromatic-com/storybook': - specifier: ^1.5.0 - version: 1.5.0(react@18.3.1) + specifier: ^2.0.2 + version: 2.0.2(react@18.3.1) '@pandacss/dev': - specifier: ^0.35.0 - version: 0.35.0(jsdom@24.0.0)(typescript@5.4.2) - '@solid-devtools/transform': - specifier: ^0.10.4 - version: 0.10.4(solid-js@1.8.15)(vite@5.1.6) + specifier: ^0.46.1 + version: 0.46.1(jsdom@25.0.1)(typescript@5.6.3) '@solidjs/testing-library': - specifier: ^0.8.6 - version: 0.8.6(@solidjs/router@0.13.0)(solid-js@1.8.15) + specifier: ^0.8.10 + version: 0.8.10(@solidjs/router@0.14.7(solid-js@1.9.2))(solid-js@1.9.2) '@storybook/addon-essentials': - specifier: 8.2.0-alpha.5 - version: 8.2.0-alpha.5(@types/react@18.3.3)(prettier@3.2.5)(react-dom@18.3.1)(react@18.3.1) + specifier: 8.3.5 + version: 8.3.5(storybook@8.3.5) '@storybook/addon-interactions': - specifier: 8.2.0-alpha.5 - version: 8.2.0-alpha.5(vitest@1.4.0) + specifier: 8.3.5 + version: 8.3.5(storybook@8.3.5) '@storybook/addon-links': - specifier: 8.2.0-alpha.5 - version: 8.2.0-alpha.5(react@18.3.1) + specifier: 8.3.5 + version: 8.3.5(react@18.3.1)(storybook@8.3.5) '@storybook/blocks': - specifier: 8.2.0-alpha.5 - version: 8.2.0-alpha.5(@types/react@18.3.3)(prettier@3.2.5)(react-dom@18.3.1)(react@18.3.1) + specifier: 8.3.5 + version: 8.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.5) '@storybook/html': - specifier: ^8.1.6 - version: 8.1.6(prettier@3.2.5) + specifier: ^8.3.5 + version: 8.3.5(storybook@8.3.5) '@storybook/testing-library': specifier: ^0.2.2 version: 0.2.2 '@testing-library/jest-dom': - specifier: ^6.4.2 - version: 6.4.2(vitest@1.4.0) + specifier: ^6.5.0 + version: 6.5.0 '@types/hast': specifier: ^3.0.4 version: 3.0.4 @@ -228,53 +250,59 @@ importers: specifier: ^4.5.8 version: 4.5.8 '@types/unist': - specifier: ^3.0.2 - version: 3.0.2 + specifier: ^3.0.3 + version: 3.0.3 '@vitest/coverage-v8': - specifier: ^1.6.0 - version: 1.6.0(vitest@1.4.0) + specifier: ^2.1.2 + version: 2.1.2(vitest@2.1.2(@types/node@22.7.5)(jsdom@25.0.1)(lightningcss@1.27.0)(terser@5.34.1)) babel-plugin-codegen: specifier: ^4.1.5 version: 4.1.5 jsdom: - specifier: ^24.0.0 - version: 24.0.0 + specifier: ^25.0.1 + version: 25.0.1 lnk: specifier: ^1.1.0 version: 1.1.0 rehype-stringify: - specifier: ^10.0.0 - version: 10.0.0 + specifier: ^10.0.1 + version: 10.0.1 + solid-devtools: + specifier: ^0.30.1 + version: 0.30.1(solid-js@1.9.2)(vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1)) + solid-motionone: + specifier: ^1.0.2 + version: 1.0.2(solid-js@1.9.2) storybook: - specifier: 8.2.0-alpha.5 - version: 8.2.0-alpha.5(react-dom@18.3.1)(react@18.3.1) + specifier: 8.3.5 + version: 8.3.5 storybook-solidjs: - specifier: ^1.0.0-beta.2 - version: 1.0.0-beta.2(babel-preset-solid@1.8.15)(solid-js@1.8.15) + specifier: 1.0.0-beta.2 + version: 1.0.0-beta.2(babel-preset-solid@1.9.2(@babel/core@7.25.7))(solid-js@1.9.2) storybook-solidjs-vite: - specifier: ^1.0.0-beta.2 - version: 1.0.0-beta.2(prettier@3.2.5)(typescript@5.4.2)(vite@5.1.6) + specifier: 1.0.0-beta.2 + version: 1.0.0-beta.2(storybook@8.3.5)(vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1)) typescript: - specifier: ^5.4.2 - version: 5.4.2 + specifier: ^5.6.3 + version: 5.6.3 vite: - specifier: ^5.1.6 - version: 5.1.6 + specifier: ^5.4.8 + version: 5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1) vite-plugin-inspect: - specifier: ^0.8.3 - version: 0.8.3(rollup@2.79.1)(vite@5.1.6) + specifier: ^0.8.7 + version: 0.8.7(rollup@2.79.2)(vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1)) vite-plugin-pwa: - specifier: ^0.19.4 - version: 0.19.4(vite@5.1.6)(workbox-build@7.0.0)(workbox-window@7.0.0) + specifier: ^0.20.5 + version: 0.20.5(vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0) vite-plugin-solid: specifier: ^2.10.2 - version: 2.10.2(@testing-library/jest-dom@6.4.2)(solid-js@1.8.15)(vite@5.1.6) + version: 2.10.2(@testing-library/jest-dom@6.5.0)(solid-js@1.9.2)(vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1)) vite-plugin-solid-svg: - specifier: ^0.8.0 - version: 0.8.0(solid-js@1.8.15)(vite@5.1.6) + specifier: ^0.8.1 + version: 0.8.1(solid-js@1.9.2)(vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1)) vitest: - specifier: ^1.4.0 - version: 1.4.0(jsdom@24.0.0) + specifier: ^2.1.2 + version: 2.1.2(@types/node@22.7.5)(jsdom@25.0.1)(lightningcss@1.27.0)(terser@5.34.1) packages/client/components/i18n/locales/scripts: dependencies: @@ -286,11 +314,11 @@ importers: version: 2.1.0 typescript: specifier: ^5.1.6 - version: 5.4.2 + version: 5.6.3 devDependencies: '@types/node': specifier: ^20.3.3 - version: 20.3.3 + version: 20.16.11 dotenv: specifier: ^16.3.1 version: 16.4.5 @@ -298,87 +326,87 @@ importers: packages/desktop: devDependencies: '@tauri-apps/cli': - specifier: ^1.2.3 - version: 1.2.3 + specifier: ^2.0.2 + version: 2.0.2 packages/revolt.js: dependencies: '@solid-primitives/map': specifier: ^0.4.11 - version: 0.4.11(solid-js@1.8.15) + version: 0.4.13(solid-js@1.9.2) '@solid-primitives/set': specifier: ^0.4.11 - version: 0.4.11(solid-js@1.8.15) + version: 0.4.12(solid-js@1.9.2) eventemitter3: specifier: ^5.0.1 version: 5.0.1 isomorphic-ws: specifier: ^5.0.0 - version: 5.0.0(ws@8.16.0) + version: 5.0.0(ws@8.18.0) long: specifier: ^5.2.3 version: 5.2.3 revolt-api: - specifier: 0.7.13 - version: 0.7.13 + specifier: 0.7.16 + version: 0.7.16 solid-js: specifier: ^1.8.15 - version: 1.8.15 + version: 1.9.2 ulid: specifier: ^2.3.0 version: 2.3.0 ws: specifier: ^8.16.0 - version: 8.16.0 + version: 8.18.0 devDependencies: '@mxssfd/typedoc-theme': specifier: ^1.1.3 - version: 1.1.3(typedoc@0.25.1) + version: 1.1.7(typedoc@0.25.13(typescript@5.6.3)) '@trivago/prettier-plugin-sort-imports': specifier: ^4.3.0 - version: 4.3.0(prettier@2.8.8) + version: 4.3.0(@vue/compiler-sfc@3.5.11)(prettier@2.8.8) '@types/node': specifier: ^18.19.24 - version: 18.19.24 + version: 18.19.55 '@types/ws': specifier: ^8.5.10 - version: 8.5.10 + version: 8.5.12 '@typescript-eslint/eslint-plugin': specifier: ^5.62.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.2) + version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3) '@typescript-eslint/parser': specifier: ^5.62.0 - version: 5.62.0(eslint@8.57.0)(typescript@5.4.2) + version: 5.62.0(eslint@8.57.1)(typescript@5.6.3) dotenv: specifier: ^16.4.5 version: 16.4.5 eslint: specifier: ^8.57.0 - version: 8.57.0 + version: 8.57.1 eslint-config-prettier: specifier: ^8.10.0 - version: 8.10.0(eslint@8.57.0) + version: 8.10.0(eslint@8.57.1) eslint-plugin-solid: specifier: ^0.12.1 - version: 0.12.1(eslint@8.57.0)(typescript@5.4.2) + version: 0.12.1(eslint@8.57.1)(typescript@5.6.3) eslint-plugin-spellcheck: specifier: ^0.0.20 - version: 0.0.20(eslint@8.57.0) + version: 0.0.20(eslint@8.57.1) prettier: specifier: ^2.8.8 version: 2.8.8 tsc-watch: specifier: ^6.0.4 - version: 6.0.4(typescript@5.4.2) + version: 6.2.0(typescript@5.6.3) typed-emitter: specifier: ^2.1.0 version: 2.1.0 typedoc: specifier: ^0.25.1 - version: 0.25.1(typescript@5.4.2) + version: 0.25.13(typescript@5.6.3) typescript: specifier: ^5.4.2 - version: 5.4.2 + version: 5.6.3 packages/revolt.js/lib/esm: {} @@ -389,7815 +417,9980 @@ importers: version: 3.1.3 goober: specifier: ^2.1.14 - version: 2.1.14(csstype@3.1.3) + version: 2.1.15(csstype@3.1.3) devDependencies: '@babel/preset-typescript': specifier: 7.16.7 - version: 7.16.7(@babel/core@7.24.7) + version: 7.16.7(@babel/core@7.25.7) '@types/jest': specifier: ^27.5.2 version: 27.5.2 babel-preset-solid: specifier: ^1.8.15 - version: 1.8.15(@babel/core@7.24.7) + version: 1.9.2(@babel/core@7.25.7) jest: specifier: ^27.5.1 version: 27.5.1 solid-jest: specifier: ^0.2.0 - version: 0.2.0(@babel/core@7.24.7)(babel-preset-solid@1.8.15) + version: 0.2.0(@babel/core@7.25.7)(babel-preset-solid@1.9.2(@babel/core@7.25.7)) solid-js: specifier: ^1.8.15 - version: 1.8.15 + version: 1.9.2 typescript: specifier: ^4.9.5 version: 4.9.5 packages: - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - - /@adobe/css-tools@4.3.3: - resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==} - dev: true + '@adobe/css-tools@4.4.0': + resolution: {integrity: sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==} - /@ampproject/remapping@2.3.0: + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - dev: true - /@antfu/utils@0.7.7: - resolution: {integrity: sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==} - dev: true + '@antfu/utils@0.7.10': + resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} - /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): + '@apideck/better-ajv-errors@0.3.6': resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} engines: {node: '>=10'} peerDependencies: ajv: '>=8' - dependencies: - ajv: 8.12.0 - json-schema: 0.4.0 - jsonpointer: 5.0.1 - leven: 3.1.0 - dev: true - /@aw-web-design/x-default-browser@1.4.126: - resolution: {integrity: sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==} - hasBin: true - dependencies: - default-browser-id: 3.0.0 - dev: true - - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.24.7 - chalk: 2.4.2 - dev: true - - /@babel/code-frame@7.24.7: - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + '@babel/code-frame@7.25.7': + resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.0 - dev: true - /@babel/compat-data@7.21.0: - resolution: {integrity: sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==} + '@babel/compat-data@7.25.7': + resolution: {integrity: sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==} engines: {node: '>=6.9.0'} - dev: true - /@babel/compat-data@7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + '@babel/core@7.25.7': + resolution: {integrity: sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==} engines: {node: '>=6.9.0'} - dev: true - /@babel/compat-data@7.24.7: - resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} + '@babel/generator@7.17.7': + resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} engines: {node: '>=6.9.0'} - dev: true - /@babel/core@7.24.0: - resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==} + '@babel/generator@7.25.7': + resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.3.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/core@7.24.0) - '@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.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/core@7.24.7: - resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} + '@babel/helper-annotate-as-pure@7.25.7': + resolution: {integrity: sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==} engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helpers': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/generator@7.17.7: - resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.7': + resolution: {integrity: sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - jsesc: 2.5.2 - source-map: 0.5.7 - dev: true - /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + '@babel/helper-compilation-targets@7.25.7': + resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - dev: true - /@babel/generator@7.24.7: - resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} + '@babel/helper-create-class-features-plugin@7.25.7': + resolution: {integrity: sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - dev: true + peerDependencies: + '@babel/core': ^7.0.0 - /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + '@babel/helper-create-regexp-features-plugin@7.25.7': + resolution: {integrity: sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: true + peerDependencies: + '@babel/core': ^7.0.0 - /@babel/helper-annotate-as-pure@7.24.7: - resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: true + '@babel/helper-define-polyfill-provider@0.6.2': + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - /@babel/helper-builder-binary-assignment-operator-visitor@7.18.9: - resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} + '@babel/helper-environment-visitor@7.24.7': + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-explode-assignable-expression': 7.18.6 - '@babel/types': 7.24.7 - dev: true - /@babel/helper-builder-binary-assignment-operator-visitor@7.24.7: - resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} + '@babel/helper-function-name@7.24.7': + resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-compilation-targets@7.20.7(@babel/core@7.24.7): - resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} + '@babel/helper-hoist-variables@7.24.7': + resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.0 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - /@babel/helper-compilation-targets@7.23.6: - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + '@babel/helper-member-expression-to-functions@7.25.7': + resolution: {integrity: sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.23.0 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - /@babel/helper-compilation-targets@7.24.7: - resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} + '@babel/helper-module-imports@7.18.6': + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.0 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - /@babel/helper-create-class-features-plugin@7.19.0(@babel/core@7.24.7): - resolution: {integrity: sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==} + '@babel/helper-module-imports@7.25.7': + resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.18.9 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.19.1 - '@babel/helper-split-export-declaration': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-create-class-features-plugin@7.24.1(@babel/core@7.24.7): - resolution: {integrity: sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA==} + '@babel/helper-module-transforms@7.25.7': + resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.7 - '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-create-class-features-plugin@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==} + '@babel/helper-optimise-call-expression@7.25.7': + resolution: {integrity: sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.7 - '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-create-regexp-features-plugin@7.19.0(@babel/core@7.24.7): - resolution: {integrity: sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==} + '@babel/helper-plugin-utils@7.25.7': + resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - regexpu-core: 5.2.2 - dev: true - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.7): - resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + '@babel/helper-remap-async-to-generator@7.25.7': + resolution: {integrity: sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - regexpu-core: 5.3.2 - semver: 6.3.1 - dev: true - /@babel/helper-create-regexp-features-plugin@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==} + '@babel/helper-replace-supers@7.25.7': + resolution: {integrity: sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - regexpu-core: 5.3.2 - semver: 6.3.1 - dev: true - - /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.24.7): - resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} - peerDependencies: - '@babel/core': ^7.4.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.7 - debug: 4.3.4 - lodash.debounce: 4.0.8 - resolve: 1.22.8 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-define-polyfill-provider@0.6.1(@babel/core@7.24.7): - resolution: {integrity: sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - debug: 4.3.4 - lodash.debounce: 4.0.8 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.7): - resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - debug: 4.3.4 - lodash.debounce: 4.0.8 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-environment-visitor@7.24.7: - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} + '@babel/helper-simple-access@7.25.7': + resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: true - /@babel/helper-explode-assignable-expression@7.18.6: - resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} + '@babel/helper-skip-transparent-expression-wrappers@7.25.7': + resolution: {integrity: sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: true - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + '@babel/helper-split-export-declaration@7.24.7': + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - dev: true - /@babel/helper-function-name@7.24.7: - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} + '@babel/helper-string-parser@7.25.7': + resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - dev: true - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + '@babel/helper-validator-identifier@7.25.7': + resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: true - /@babel/helper-hoist-variables@7.24.7: - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} + '@babel/helper-validator-option@7.25.7': + resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: true - /@babel/helper-member-expression-to-functions@7.18.9: - resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==} + '@babel/helper-wrap-function@7.25.7': + resolution: {integrity: sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: true - /@babel/helper-member-expression-to-functions@7.24.7: - resolution: {integrity: sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==} + '@babel/helpers@7.25.7': + resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-module-imports@7.18.6: - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + '@babel/highlight@7.25.7': + resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: true - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: true + '@babel/parser@7.25.7': + resolution: {integrity: sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==} + engines: {node: '>=6.0.0'} + hasBin: true - /@babel/helper-module-imports@7.24.7: - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7': + resolution: {integrity: sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + peerDependencies: + '@babel/core': ^7.0.0 - /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.0): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.7': + resolution: {integrity: sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - dev: true - /@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7': + resolution: {integrity: sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-optimise-call-expression@7.18.6: - resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7': + resolution: {integrity: sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: true + peerDependencies: + '@babel/core': ^7.13.0 - /@babel/helper-optimise-call-expression@7.24.7: - resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.7': + resolution: {integrity: sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: true + peerDependencies: + '@babel/core': ^7.0.0 - /@babel/helper-plugin-utils@7.19.0: - resolution: {integrity: sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==} + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} - dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 - /@babel/helper-plugin-utils@7.20.2: - resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@babel/helper-plugin-utils@7.24.0: - resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@babel/helper-plugin-utils@7.24.7: - resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.24.7): - resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-wrap-function': 7.19.0 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + '@babel/core': ^7.0.0-0 - /@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==} - engines: {node: '>=6.9.0'} + '@babel/plugin-syntax-dynamic-import@7.8.3': + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-wrap-function': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + '@babel/core': ^7.0.0-0 - /@babel/helper-replace-supers@7.19.1: - resolution: {integrity: sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.7 - '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + '@babel/plugin-syntax-export-namespace-from@7.8.3': + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@babel/helper-replace-supers@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==} + '@babel/plugin-syntax-import-assertions@7.25.7': + resolution: {integrity: sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.7 - '@babel/helper-optimise-call-expression': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + '@babel/core': ^7.0.0-0 - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + '@babel/plugin-syntax-import-attributes@7.25.7': + resolution: {integrity: sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 - /@babel/helper-simple-access@7.24.7: - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@babel/helper-skip-transparent-expression-wrappers@7.20.0: - resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: true + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@babel/helper-skip-transparent-expression-wrappers@7.24.7: - resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: true - - /@babel/helper-split-export-declaration@7.24.7: - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: true - - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-string-parser@7.24.7: - resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-identifier@7.24.7: - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-option@7.18.6: - resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-option@7.21.0: - resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-option@7.24.7: - resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-wrap-function@7.19.0: - resolution: {integrity: sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-wrap-function@7.24.7: - resolution: {integrity: sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helpers@7.24.0: - resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helpers@7.24.7: - resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - dev: true - - /@babel/highlight@7.24.7: - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.0 - dev: true - - /@babel/parser@7.21.3: - resolution: {integrity: sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.24.7 - dev: true - - /@babel/parser@7.24.0: - resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.24.7 - dev: true - - /@babel/parser@7.24.7: - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.24.7 - dev: true - - /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} + '@babel/plugin-syntax-jsx@7.25.7': + resolution: {integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@babel/core': ^7.0.0-0 - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==} - engines: {node: '>=6.9.0'} + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@babel/core': ^7.0.0-0 - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.18.9(@babel/core@7.24.7): - resolution: {integrity: sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==} - engines: {node: '>=6.9.0'} + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: - '@babel/core': ^7.13.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.18.9(@babel/core@7.24.7) - dev: true + '@babel/core': ^7.0.0-0 - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} - engines: {node: '>=6.9.0'} + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: - '@babel/core': ^7.13.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: true + '@babel/core': ^7.0.0-0 - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==} - engines: {node: '>=6.9.0'} + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@babel/core': ^7.0.0-0 - /@babel/plugin-proposal-async-generator-functions@7.20.1(@babel/core@7.24.7): - resolution: {integrity: sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==} - engines: {node: '>=6.9.0'} + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.24.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} - engines: {node: '>=6.9.0'} + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-proposal-class-static-block@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==} + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: true + '@babel/core': ^7.0.0-0 - /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) - dev: true - /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.24.7): - resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} + '@babel/plugin-syntax-typescript@7.25.7': + resolution: {integrity: sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) - dev: true - /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) - dev: true + '@babel/core': ^7.0.0 - /@babel/plugin-proposal-logical-assignment-operators@7.18.9(@babel/core@7.24.7): - resolution: {integrity: sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==} + '@babel/plugin-transform-arrow-functions@7.25.7': + resolution: {integrity: sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) - dev: true - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + '@babel/plugin-transform-async-generator-functions@7.25.7': + resolution: {integrity: sha512-4B6OhTrwYKHYYgcwErvZjbmH9X5TxQBsaBHdzEIB4l71gR5jh/tuHGlb9in47udL2+wVUcOz5XXhhfhVJwEpEg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - dev: true - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + '@babel/plugin-transform-async-to-generator@7.25.7': + resolution: {integrity: sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) - dev: true - /@babel/plugin-proposal-object-rest-spread@7.20.2(@babel/core@7.24.7): - resolution: {integrity: sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==} + '@babel/plugin-transform-block-scoped-functions@7.25.7': + resolution: {integrity: sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-transform-parameters': 7.20.3(@babel/core@7.24.7) - dev: true - /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + '@babel/plugin-transform-block-scoping@7.25.7': + resolution: {integrity: sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - dev: true - /@babel/plugin-proposal-optional-chaining@7.18.9(@babel/core@7.24.7): - resolution: {integrity: sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==} + '@babel/plugin-transform-class-properties@7.25.7': + resolution: {integrity: sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - dev: true - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + '@babel/plugin-transform-class-static-block@7.25.7': + resolution: {integrity: sha512-rvUUtoVlkDWtDWxGAiiQj0aNktTPn3eFynBcMC2IhsXweehwgdI9ODe+XjWw515kEmv22sSOTp/rxIRuTiB7zg==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + '@babel/core': ^7.12.0 - /@babel/plugin-proposal-private-property-in-object@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==} + '@babel/plugin-transform-classes@7.25.7': + resolution: {integrity: sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7): - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + '@babel/plugin-transform-computed-properties@7.25.7': + resolution: {integrity: sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - dev: true - /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} - engines: {node: '>=4'} + '@babel/plugin-transform-destructuring@7.25.7': + resolution: {integrity: sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.19.0(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.0): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + '@babel/plugin-transform-dotall-regex@7.25.7': + resolution: {integrity: sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + '@babel/plugin-transform-duplicate-keys@7.25.7': + resolution: {integrity: sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.0): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7': + resolution: {integrity: sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==} + engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@babel/core': ^7.0.0 - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.7): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + '@babel/plugin-transform-dynamic-import@7.25.7': + resolution: {integrity: sha512-UvcLuual4h7/GfylKm2IAA3aph9rwvAM2XBA0uPKU3lca+Maai4jBjjEVUS568ld6kJcgbouuumCBhMd/Yz17w==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.0): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + '@babel/plugin-transform-exponentiation-operator@7.25.7': + resolution: {integrity: sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + '@babel/plugin-transform-export-namespace-from@7.25.7': + resolution: {integrity: sha512-h3MDAP5l34NQkkNulsTNyjdaR+OiB0Im67VU//sFupouP8Q6m9Spy7l66DcaAQxtmCqGdanPByLsnwFttxKISQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.7): - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + '@babel/plugin-transform-for-of@7.25.7': + resolution: {integrity: sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.7): - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + '@babel/plugin-transform-function-name@7.25.7': + resolution: {integrity: sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.7): - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + '@babel/plugin-transform-json-strings@7.25.7': + resolution: {integrity: sha512-Ot43PrL9TEAiCe8C/2erAjXMeVSnE/BLEx6eyrKLNFCCw5jvhTHKyHxdI1pA0kz5njZRYAnMO2KObGqOCRDYSA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-flow@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==} + '@babel/plugin-transform-literals@7.25.7': + resolution: {integrity: sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.24.7): - resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} + '@babel/plugin-transform-logical-assignment-operators@7.25.7': + resolution: {integrity: sha512-iImzbA55BjiovLyG2bggWS+V+OLkaBorNvc/yJoeeDQGztknRnDdYfp2d/UPmunZYEnZi6Lg8QcTmNMHOB0lGA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==} + '@babel/plugin-transform-member-expression-literals@7.25.7': + resolution: {integrity: sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} + '@babel/plugin-transform-modules-amd@7.25.7': + resolution: {integrity: sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.0): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + '@babel/plugin-transform-modules-commonjs@7.25.7': + resolution: {integrity: sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + '@babel/plugin-transform-modules-systemjs@7.25.7': + resolution: {integrity: sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.0): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + '@babel/plugin-transform-modules-umd@7.25.7': + resolution: {integrity: sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.7): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + '@babel/plugin-transform-named-capturing-groups-regex@7.25.7': + resolution: {integrity: sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==} + engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@babel/core': ^7.0.0 - /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.24.0): - resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + '@babel/plugin-transform-new-target@7.25.7': + resolution: {integrity: sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + '@babel/plugin-transform-nullish-coalescing-operator@7.25.7': + resolution: {integrity: sha512-FbuJ63/4LEL32mIxrxwYaqjJxpbzxPVQj5a+Ebrc8JICV6YX8nE53jY+K0RZT3um56GoNWgkS2BQ/uLGTjtwfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} + '@babel/plugin-transform-numeric-separator@7.25.7': + resolution: {integrity: sha512-8CbutzSSh4hmD+jJHIA8vdTNk15kAzOnFLVVgBSMGr28rt85ouT01/rezMecks9pkU939wDInImwCKv4ahU4IA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.0): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + '@babel/plugin-transform-object-rest-spread@7.25.7': + resolution: {integrity: sha512-1JdVKPhD7Y5PvgfFy0Mv2brdrolzpzSoUq2pr6xsR+m+3viGGeHEokFKsCgOkbeFOQxfB1Vt2F0cPJLRpFI4Zg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.7): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + '@babel/plugin-transform-object-super@7.25.7': + resolution: {integrity: sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.0): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + '@babel/plugin-transform-optional-catch-binding@7.25.7': + resolution: {integrity: sha512-m9obYBA39mDPN7lJzD5WkGGb0GO54PPLXsbcnj1Hyeu8mSRz7Gb4b1A6zxNX32ZuUySDK4G6it8SDFWD1nCnqg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.7): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + '@babel/plugin-transform-optional-chaining@7.25.7': + resolution: {integrity: sha512-h39agClImgPWg4H8mYVAbD1qP9vClFbEjqoJmt87Zen8pjqK8FTPUwrOXAvqu5soytwxrLMd2fx2KSCp2CHcNg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.0): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + '@babel/plugin-transform-parameters@7.25.7': + resolution: {integrity: sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.7): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + '@babel/plugin-transform-private-methods@7.25.7': + resolution: {integrity: sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.0): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + '@babel/plugin-transform-private-property-in-object@7.25.7': + resolution: {integrity: sha512-LzA5ESzBy7tqj00Yjey9yWfs3FKy4EmJyKOSWld144OxkTji81WWnUT8nkLUn+imN/zHL8ZQlOu/MTUAhHaX3g==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.7): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + '@babel/plugin-transform-property-literals@7.25.7': + resolution: {integrity: sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.0): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + '@babel/plugin-transform-regenerator@7.25.7': + resolution: {integrity: sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.7): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + '@babel/plugin-transform-reserved-words@7.25.7': + resolution: {integrity: sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.0): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + '@babel/plugin-transform-shorthand-properties@7.25.7': + resolution: {integrity: sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.7): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + '@babel/plugin-transform-spread@7.25.7': + resolution: {integrity: sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.7): - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + '@babel/plugin-transform-sticky-regex@7.25.7': + resolution: {integrity: sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.0): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + '@babel/plugin-transform-template-literals@7.25.7': + resolution: {integrity: sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.7): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + '@babel/plugin-transform-typeof-symbol@7.25.7': + resolution: {integrity: sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.24.7): - resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} + '@babel/plugin-transform-typescript@7.25.7': + resolution: {integrity: sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.24.0): - resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + '@babel/plugin-transform-unicode-escapes@7.25.7': + resolution: {integrity: sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.0): - resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} + '@babel/plugin-transform-unicode-property-regex@7.25.7': + resolution: {integrity: sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} + '@babel/plugin-transform-unicode-regex@7.25.7': + resolution: {integrity: sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + '@babel/plugin-transform-unicode-sets-regex@7.25.7': + resolution: {integrity: sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-transform-arrow-functions@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==} + '@babel/preset-env@7.25.7': + resolution: {integrity: sha512-Gibz4OUdyNqqLj+7OAvBZxOD7CklCtMA5/j0JgUEwOnaRULsPDXmic2iKxL2DX2vQduPR5wH2hjZas/Vr/Oc0g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} - engines: {node: '>=6.9.0'} + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - /@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==} + '@babel/preset-typescript@7.16.7': + resolution: {integrity: sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-async-to-generator@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==} + '@babel/runtime@7.25.7': + resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} + '@babel/template@7.25.7': + resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} + '@babel/traverse@7.23.2': + resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} + '@babel/traverse@7.25.7': + resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-transform-block-scoping@7.20.2(@babel/core@7.24.7): - resolution: {integrity: sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==} + '@babel/types@7.17.0': + resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==} + '@babel/types@7.25.7': + resolution: {integrity: sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true - /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.24.7): - resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - /@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + '@chromatic-com/storybook@2.0.2': + resolution: {integrity: sha512-7bPIliISedeIpnVKbzktysFYW5n56bN91kxuOj1XXKixmjbUHRUMvcXd4K2liN6MiR5ZqJtmtcPsZ6CebbGlEA==} + engines: {node: '>=16.0.0', yarn: '>=1.22.18'} - /@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: true + '@clack/core@0.3.4': + resolution: {integrity: sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw==} - /@babel/plugin-transform-classes@7.20.2(@babel/core@7.24.7): - resolution: {integrity: sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-replace-supers': 7.19.1 - '@babel/helper-split-export-declaration': 7.24.7 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true + '@clack/prompts@0.7.0': + resolution: {integrity: sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA==} + bundledDependencies: + - is-unicode-supported - /@babel/plugin-transform-classes@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==} - engines: {node: '>=6.9.0'} + '@csstools/postcss-cascade-layers@4.0.6': + resolution: {integrity: sha512-Xt00qGAQyqAODFiFEJNkTpSUz5VfYqnDLECdlA/Vv17nl/OIV5QfTRHGAXrBGG5YcJyHpJ+GF9gF/RZvOQz4oA==} + engines: {node: ^14 || ^16 || >=18} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) - '@babel/helper-split-export-declaration': 7.24.7 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true + postcss: ^8.4 - /@babel/plugin-transform-computed-properties@7.18.9(@babel/core@7.24.7): - resolution: {integrity: sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==} - engines: {node: '>=6.9.0'} + '@csstools/selector-specificity@3.1.1': + resolution: {integrity: sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==} + engines: {node: ^14 || ^16 || >=18} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + postcss-selector-parser: ^6.0.13 - /@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/template': 7.24.7 - dev: true + '@esbuild/aix-ppc64@0.20.2': + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] - /@babel/plugin-transform-destructuring@7.20.2(@babel/core@7.24.7): - resolution: {integrity: sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] - /@babel/plugin-transform-destructuring@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@esbuild/aix-ppc64@0.23.1': + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] - /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.19.0(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@esbuild/android-arm64@0.20.2': + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] - /@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] - /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.24.7): - resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@esbuild/android-arm64@0.23.1': + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] - /@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@esbuild/android-arm@0.20.2': + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] - /@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) - dev: true + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] - /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@esbuild/android-arm@0.23.1': + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] - /@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + '@esbuild/android-x64@0.20.2': + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] - /@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) - dev: true + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] - /@babel/plugin-transform-flow-strip-types@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-cjRKJ7FobOH2eakx7Ja+KpJRj8+y+/SiB3ooYm/n2UJfxu0oEaOoxOinitkJcPqv9KxS0kxTGPUaR7L2XcXDXA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.24.7) - dev: true + '@esbuild/android-x64@0.23.1': + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] - /@babel/plugin-transform-for-of@7.18.8(@babel/core@7.24.7): - resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@esbuild/darwin-arm64@0.20.2': + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] - /@babel/plugin-transform-for-of@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] - /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.24.7): - resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@esbuild/darwin-arm64@0.23.1': + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] - /@babel/plugin-transform-function-name@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@esbuild/darwin-x64@0.20.2': + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] - /@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) - dev: true + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] - /@babel/plugin-transform-literals@7.18.9(@babel/core@7.24.7): - resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@esbuild/darwin-x64@0.23.1': + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] - /@babel/plugin-transform-literals@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@esbuild/freebsd-arm64@0.20.2': + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] - /@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) - dev: true + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] - /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@esbuild/freebsd-arm64@0.23.1': + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] - /@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@esbuild/freebsd-x64@0.20.2': + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] - /@babel/plugin-transform-modules-amd@7.19.6(@babel/core@7.24.7): - resolution: {integrity: sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] - /@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + '@esbuild/freebsd-x64@0.23.1': + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] - /@babel/plugin-transform-modules-commonjs@7.19.6(@babel/core@7.24.7): - resolution: {integrity: sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-simple-access': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true + '@esbuild/linux-arm64@0.20.2': + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.23.1': + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.20.2': + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.23.1': + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.20.2': + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.23.1': + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.20.2': + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.23.1': + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.20.2': + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.23.1': + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.20.2': + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.23.1': + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.20.2': + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.23.1': + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.20.2': + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.23.1': + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.20.2': + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.23.1': + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.20.2': + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.23.1': + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.23.1': + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.20.2': + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.23.1': + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.20.2': + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.23.1': + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.20.2': + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.23.1': + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.20.2': + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.23.1': + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.20.2': + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.23.1': + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.11.1': + resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.18.0': + resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.6.0': + resolution: {integrity: sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/eslintrc@3.1.0': + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@9.12.0': + resolution: {integrity: sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.0': + resolution: {integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@floating-ui/core@1.6.8': + resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + + '@floating-ui/dom@1.6.11': + resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==} + + '@floating-ui/utils@0.2.8': + resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + + '@fontsource/inter@5.1.0': + resolution: {integrity: sha512-zKZR3kf1G0noIes1frLfOHP5EXVVm0M7sV/l9f/AaYf+M/DId35FO4LkigWjqWYjTJZGgplhdv4cB+ssvCqr5A==} + + '@fontsource/jetbrains-mono@5.1.1': + resolution: {integrity: sha512-5rwvmdQQpXev4LlBX1P+7h2dguu6iwW/9Npjde4+DEq+HgpVJI/7QY8DI1NVVFdvLtXZNP+vO2L/5BQED6FUhA==} + + '@fontsource/open-sans@5.1.0': + resolution: {integrity: sha512-g+mjF8gWUDwck9DrRCkhmFeEj7fskjtKZJKAQguVzSg93lc6ThakTHMRgs0dZfe5qBbktrV839tDrb4bIDyZSA==} + + '@hcaptcha/types@1.0.4': + resolution: {integrity: sha512-4CBrdr9DFC7sYZPRvLol82UVZVne8B2skBGfMDUqPC6q9vzHMwv/cNxXW44EIa6DaFDr+EWNSnKJpHxWr7Q42Q==} + + '@humanfs/core@0.19.0': + resolution: {integrity: sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.5': + resolution: {integrity: sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@27.5.1': + resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + '@jest/core@27.5.1': + resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@27.5.1': + resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + '@jest/fake-timers@27.5.1': + resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + '@jest/globals@27.5.1': + resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + '@jest/reporters@27.5.1': + resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@27.5.1': + resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + '@jest/test-result@27.5.1': + resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + '@jest/test-sequencer@27.5.1': + resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + '@jest/transform@27.5.1': + resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + '@jest/types@27.5.1': + resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@material-design-icons/svg@0.14.13': + resolution: {integrity: sha512-nCExGZOtoLoFeeqShEOM4XA9DkkLzLlQdk/ZxHxps0//dz6e1Lw3fvQbZ2X/+0Dz2O+udiEukfZ4Nd4KpHg8aA==} + + '@material/material-color-utilities@0.3.0': + resolution: {integrity: sha512-ztmtTd6xwnuh2/xu+Vb01btgV8SQWYCaK56CkRK8gEkWe5TuDyBcYJ0wgkMRn+2VcE9KUmhvkz+N9GHrqw/C0g==} + + '@mdx-js/react@3.0.1': + resolution: {integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + + '@minht11/solid-virtual-container@0.2.1': + resolution: {integrity: sha512-HvQWx1uE5NWwx9WsN4waFtmyOjhZKMA/3vBf+j3zGsRfi556LCUk4oOmqZcOvIB5nEpHezvuZ8oUlwxigdO3Xg==} + peerDependencies: + solid-js: '>= 1.0.0' + + '@motionone/animation@10.18.0': + resolution: {integrity: sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw==} + + '@motionone/dom@10.18.0': + resolution: {integrity: sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A==} + + '@motionone/easing@10.18.0': + resolution: {integrity: sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==} + + '@motionone/generators@10.18.0': + resolution: {integrity: sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg==} + + '@motionone/types@10.17.1': + resolution: {integrity: sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==} + + '@motionone/utils@10.18.0': + resolution: {integrity: sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==} + + '@mxssfd/typedoc-theme@1.1.7': + resolution: {integrity: sha512-dj4p0TjIoudD8j1u+Kf+KzcEc+je3IB/B1oohWcVJmMRfbw5uZYX6qOGHzfUzAPiU1pYe2u5Vo1IPqgLo58taA==} + engines: {node: '>= 14'} + peerDependencies: + typedoc: ^0.26.7 + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nothing-but/utils@0.12.1': + resolution: {integrity: sha512-1qZU1Q5El0IjE7JT/ucvJNzdr2hL3W8Rm27xNf1p6gb3Nw8pGnZmxp6/GEW9h+I1k1cICxXNq25hBwknTQ7yhg==} + + '@octokit/app@13.1.8': + resolution: {integrity: sha512-bCncePMguVyFpdBbnceFKfmPOuUD94T189GuQ0l00ZcQ+mX4hyPqnaWJlsXE2HSdA71eV7p8GPDZ+ErplTkzow==} + engines: {node: '>= 14'} + + '@octokit/auth-app@4.0.13': + resolution: {integrity: sha512-NBQkmR/Zsc+8fWcVIFrwDgNXS7f4XDrkd9LHdi9DPQw1NdGHLviLzRO2ZBwTtepnwHXW5VTrVU9eFGijMUqllg==} + engines: {node: '>= 14'} + + '@octokit/auth-oauth-app@5.0.6': + resolution: {integrity: sha512-SxyfIBfeFcWd9Z/m1xa4LENTQ3l1y6Nrg31k2Dcb1jS5ov7pmwMJZ6OGX8q3K9slRgVpeAjNA1ipOAMHkieqyw==} + engines: {node: '>= 14'} + + '@octokit/auth-oauth-device@4.0.5': + resolution: {integrity: sha512-XyhoWRTzf2ZX0aZ52a6Ew5S5VBAfwwx1QnC2Np6Et3MWQpZjlREIcbcvVZtkNuXp6Z9EeiSLSDUqm3C+aMEHzQ==} + engines: {node: '>= 14'} + + '@octokit/auth-oauth-user@2.1.2': + resolution: {integrity: sha512-kkRqNmFe7s5GQcojE3nSlF+AzYPpPv7kvP/xYEnE57584pixaFBH8Vovt+w5Y3E4zWUEOxjdLItmBTFAWECPAg==} + engines: {node: '>= 14'} + + '@octokit/auth-token@3.0.4': + resolution: {integrity: sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==} + engines: {node: '>= 14'} + + '@octokit/auth-unauthenticated@3.0.5': + resolution: {integrity: sha512-yH2GPFcjrTvDWPwJWWCh0tPPtTL5SMgivgKPA+6v/XmYN6hGQkAto8JtZibSKOpf8ipmeYhLNWQ2UgW0GYILCw==} + engines: {node: '>= 14'} + + '@octokit/core@4.2.4': + resolution: {integrity: sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==} + engines: {node: '>= 14'} + + '@octokit/endpoint@7.0.6': + resolution: {integrity: sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==} + engines: {node: '>= 14'} + + '@octokit/graphql@5.0.6': + resolution: {integrity: sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==} + engines: {node: '>= 14'} + + '@octokit/oauth-app@4.2.4': + resolution: {integrity: sha512-iuOVFrmm5ZKNavRtYu5bZTtmlKLc5uVgpqTfMEqYYf2OkieV6VdxKZAb5qLVdEPL8LU2lMWcGpavPBV835cgoA==} + engines: {node: '>= 14'} + + '@octokit/oauth-authorization-url@5.0.0': + resolution: {integrity: sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg==} + engines: {node: '>= 14'} + + '@octokit/oauth-methods@2.0.6': + resolution: {integrity: sha512-l9Uml2iGN2aTWLZcm8hV+neBiFXAQ9+3sKiQe/sgumHlL6HDg0AQ8/l16xX/5jJvfxueqTW5CWbzd0MjnlfHZw==} + engines: {node: '>= 14'} + + '@octokit/openapi-types@18.1.1': + resolution: {integrity: sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==} + + '@octokit/plugin-paginate-rest@6.1.2': + resolution: {integrity: sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==} + engines: {node: '>= 14'} + peerDependencies: + '@octokit/core': '>=4' + + '@octokit/plugin-rest-endpoint-methods@7.2.3': + resolution: {integrity: sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==} + engines: {node: '>= 14'} + peerDependencies: + '@octokit/core': '>=3' + + '@octokit/plugin-retry@4.1.6': + resolution: {integrity: sha512-obkYzIgEC75r8+9Pnfiiqy3y/x1bc3QLE5B7qvv9wi9Kj0R5tGQFC6QMBg1154WQ9lAVypuQDGyp3hNpp15gQQ==} + engines: {node: '>= 14'} + peerDependencies: + '@octokit/core': '>=3' + + '@octokit/plugin-throttling@5.2.3': + resolution: {integrity: sha512-C9CFg9mrf6cugneKiaI841iG8DOv6P5XXkjmiNNut+swePxQ7RWEdAZRp5rJoE1hjsIqiYcKa/ZkOQ+ujPI39Q==} + engines: {node: '>= 14'} + peerDependencies: + '@octokit/core': ^4.0.0 + + '@octokit/request-error@3.0.3': + resolution: {integrity: sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==} + engines: {node: '>= 14'} + + '@octokit/request@6.2.8': + resolution: {integrity: sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==} + engines: {node: '>= 14'} + + '@octokit/tsconfig@1.0.2': + resolution: {integrity: sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==} + + '@octokit/types@10.0.0': + resolution: {integrity: sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==} + + '@octokit/types@9.3.2': + resolution: {integrity: sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==} + + '@octokit/webhooks-methods@3.0.3': + resolution: {integrity: sha512-2vM+DCNTJ5vL62O5LagMru6XnYhV4fJslK+5YUkTa6rWlW2S+Tqs1lF9Wr9OGqHfVwpBj3TeztWfVON/eUoW1Q==} + engines: {node: '>= 14'} + + '@octokit/webhooks-types@6.11.0': + resolution: {integrity: sha512-AanzbulOHljrku1NGfafxdpTCfw2ENaWzH01N2vqQM+cUFbk868Cgh0xylz0JIM9BoKbfI++bdD6EYX0Q/UTEw==} + + '@octokit/webhooks@10.9.2': + resolution: {integrity: sha512-hFVF/szz4l/Y/GQdKxNmQjUke0XJXK986p+ucIlubTGVPVtVtup5G1jarQfvCMBs9Fvlf9dvH8K83E4lefmofQ==} + engines: {node: '>= 14'} + + '@pandacss/config@0.46.1': + resolution: {integrity: sha512-kcyA2RapzEK86bW1SnV99Wg1pzB2Vb/bN4eIvsJUbreIWefLQmZ0b6I6iwtWXuCy69ZVSngbkecVqqVO614xMQ==} + + '@pandacss/core@0.46.1': + resolution: {integrity: sha512-efDr8TZudyVrxEpxniuDsy5tAXBsa7qyOiGPJ+BqR76GLvtfeJaNrKryFSoUbihZpbkfuvtbg0jOHSvFNWFQrQ==} + + '@pandacss/dev@0.46.1': + resolution: {integrity: sha512-zZ72oNFXQcFhZ8bKO/e6gmbk4vI294pRIQwD0o/CCRK8zAcjbkkgfqZBMKykYKHNXoAwDnBQBIjuWqVvsWagyw==} + hasBin: true + + '@pandacss/extractor@0.46.1': + resolution: {integrity: sha512-YwZjt/x37NDBgJY3UNfzD7KJFrJKXnbYgE3+uZAYu47xD/eO6foHtlQM4pkJlTObvodIyiylQvv3bXhY0KznuA==} + + '@pandacss/generator@0.46.1': + resolution: {integrity: sha512-Af/sHBwXIbkG6mnqCTFjKJMFZcqOgvgZ3Zl31ksiSY3hY59jFidfgmV8oseMPrLBhFIFdcViQdXA9Sr9HCxdjQ==} + + '@pandacss/is-valid-prop@0.46.1': + resolution: {integrity: sha512-YSIfUw5YdQ/+uErxdwSXFVBGQPl2A58E+qt+AdsfbtYslEA5BpgBdptMliLmO2NF+jLKoN91M6IO24/lH+mUBQ==} + + '@pandacss/logger@0.46.1': + resolution: {integrity: sha512-5XU7g1uv84a5EeA5QkAcCy25kS61yqM/Y6tBPJkG0/Yn9LNlJXn9zdh8I1GNLHDAWn2QdXFyLDt8T0Xk6/EgLw==} + + '@pandacss/node@0.46.1': + resolution: {integrity: sha512-vkw6PAENndthIQ7b4jOogpbF1jsJb5BKqICjesArJhYbdm9VivfrpWcxRkYgJF3lGUu8V6+fOwXwvDrkpLvokA==} + + '@pandacss/parser@0.46.1': + resolution: {integrity: sha512-cNHXMTYTeSg6eQlLDQUypKb/TMDkDSl49XaXEekhD+o4HlMrwy9KTqqZB/Il+L3rvICMGXUjv+dAKRjDOcAhcA==} + + '@pandacss/postcss@0.46.1': + resolution: {integrity: sha512-GKG9Lm9ywn4dKgN04PIFo6FSCaEQubFhIK5KfIBG7aY+OglzVXSDWdO19zwV2lDjrdd48hyw54ERjFc0LNIU+w==} + + '@pandacss/preset-base@0.46.1': + resolution: {integrity: sha512-lWMVDujyAqTaCAa0OM0HsE//eIaGWFpT6x0hIzSoWlgwDTy584AObyxIDu97HN1irfCpBJqty2TNYs02C9Cb/g==} + + '@pandacss/preset-panda@0.46.1': + resolution: {integrity: sha512-ljPL6dU7eG/GDflOVEqz+PFRO/FMbOGoV993bh+t9c/UiJ0mw0R5HGUUotBS1KB30wH4qMC5NROK+9IgxwvR3Q==} + + '@pandacss/shared@0.46.1': + resolution: {integrity: sha512-mpeivvQTaAc/xJygWKFoWqJZ2GW3ggZXCj0Uc6+L8iqjbUVSAekqjhfgGfFNJKvwm0BgU+gbmxjCWJykKfGW9A==} + + '@pandacss/token-dictionary@0.46.1': + resolution: {integrity: sha512-94WIuy0HnzqN2f8jm8iT5iFDFlwNIsMFMuHZVxALD8RBLAB6ZhQPcKT8qdGlM+IyYK9ysGU2LF5zBR58NDIbGQ==} + + '@pandacss/types@0.46.1': + resolution: {integrity: sha512-hExBBB/QwKxf0MT8/67zNePm27996ALlEaef7z/9Fzhhh2yX5UGmDHTAQCe8T0XyWpIky8v/YekZ8YMANlvxtw==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + + '@rollup/plugin-babel@5.3.1': + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + + '@rollup/plugin-node-resolve@15.3.0': + resolution: {integrity: sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/plugin-replace@2.4.2': + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + + '@rollup/plugin-terser@0.4.4': + resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/pluginutils@3.1.0': + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + + '@rollup/pluginutils@5.1.2': + resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.24.0': + resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.24.0': + resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.24.0': + resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.24.0': + resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': + resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.24.0': + resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.24.0': + resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.24.0': + resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': + resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.24.0': + resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.24.0': + resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.24.0': + resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.24.0': + resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.24.0': + resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.24.0': + resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.24.0': + resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} + cpu: [x64] + os: [win32] + + '@sentry-internal/browser-utils@8.33.1': + resolution: {integrity: sha512-TW6/r+Gl5jiXv54iK1xZ3mlVgTS/jaBp4vcQ0xGMdgiQ3WchEPcFSeYovL+YHT3tSud0GZqVtDQCz+5i76puqA==} + engines: {node: '>=14.18'} + + '@sentry-internal/feedback@8.33.1': + resolution: {integrity: sha512-qauMRTm3qDaLqZ3ibI03cj4gLF40y0ij65nj+cns6iWxGCtPrO8tjvXFWuQsE7Aye9dGMnBgmv7uN+NTUtC3RA==} + engines: {node: '>=14.18'} + + '@sentry-internal/replay-canvas@8.33.1': + resolution: {integrity: sha512-nsxTFTPCT10Ty/v6+AiST3+yotGP1sUb8xqfKB9fPnS1hZHFryp0NnEls7xFjBsBbZPU1GpFkzrk/E6JFzixDQ==} + engines: {node: '>=14.18'} + + '@sentry-internal/replay@8.33.1': + resolution: {integrity: sha512-fm4coIOjmanU29NOVN9MyaP4fUCOYytbtFqVSKRFNZQ/xAgNeySiBIbUd6IjujMmnOk9bY0WEUMcdm3Uotjdog==} + engines: {node: '>=14.18'} + + '@sentry-internal/tracing@7.114.0': + resolution: {integrity: sha512-dOuvfJN7G+3YqLlUY4HIjyWHaRP8vbOgF+OsE5w2l7ZEn1rMAaUbPntAR8AF9GBA6j2zWNoSo8e7GjbJxVofSg==} + engines: {node: '>=8'} + + '@sentry/browser@8.33.1': + resolution: {integrity: sha512-c6zI/igexkLwZuGk+u8Rj26ChjxGgkhe6ZbKFsXCYaKAp5ep5X7HQRkkqgbxApiqlC0LduHdd/ymzh139JLg8w==} + engines: {node: '>=14.18'} + + '@sentry/core@7.114.0': + resolution: {integrity: sha512-YnanVlmulkjgZiVZ9BfY9k6I082n+C+LbZo52MTvx3FY6RE5iyiPMpaOh67oXEZRWcYQEGm+bKruRxLVP6RlbA==} + engines: {node: '>=8'} + + '@sentry/core@8.33.1': + resolution: {integrity: sha512-3SS41suXLFzxL3OQvTMZ6q92ZapELVq2l2SoWlZopcamWhog2Ru0dp2vkunq97kFHb2TzKRTlFH4+4gbT8SJug==} + engines: {node: '>=14.18'} + + '@sentry/tracing@7.114.0': + resolution: {integrity: sha512-eldEYGADReZ4jWdN5u35yxLUSTOvjsiZAYd4KBEpf+Ii65n7g/kYOKAjNl7tHbrEG1EsMW4nDPWStUMk1w+tfg==} + engines: {node: '>=8'} + + '@sentry/types@7.114.0': + resolution: {integrity: sha512-tsqkkyL3eJtptmPtT0m9W/bPLkU7ILY7nvwpi1hahA5jrM7ppoU0IMaQWAgTD+U3rzFH40IdXNBFb8Gnqcva4w==} + engines: {node: '>=8'} + + '@sentry/types@8.33.1': + resolution: {integrity: sha512-GjoAMvwtpIemoF/IiwZ7A60g4nQv3qwzR21GvJqDVUoKD0e8pv9OLX+HyXoUat4wEDGSuDUcUyUKD2G+od73QA==} + engines: {node: '>=14.18'} + + '@sentry/utils@7.114.0': + resolution: {integrity: sha512-319N90McVpupQ6vws4+tfCy/03AdtsU0MurIE4+W5cubHME08HtiEWlfacvAxX+yuKFhvdsO4K4BB/dj54ideg==} + engines: {node: '>=8'} + + '@sentry/utils@8.33.1': + resolution: {integrity: sha512-uzuYpiiJuFY3N4WNHMBWUQX5oNv2t/TbG0OHRp3Rr7yeu+HSfD542TIp9/gMZ+G0Cxd8AmVO3wkKIFbk0TL4Qg==} + engines: {node: '>=14.18'} + + '@shikijs/core@1.22.0': + resolution: {integrity: sha512-S8sMe4q71TJAW+qG93s5VaiihujRK6rqDFqBnxqvga/3LvqHEnxqBIOPkt//IdXVtHkQWKu4nOQNk0uBGicU7Q==} + + '@shikijs/engine-javascript@1.22.0': + resolution: {integrity: sha512-AeEtF4Gcck2dwBqCFUKYfsCq0s+eEbCEbkUuFou53NZ0sTGnJnJ/05KHQFZxpii5HMXbocV9URYVowOP2wH5kw==} + + '@shikijs/engine-oniguruma@1.22.0': + resolution: {integrity: sha512-5iBVjhu/DYs1HB0BKsRRFipRrD7rqjxlWTj4F2Pf+nQSPqc3kcyqFFeZXnBMzDf0HdqaFVvhDRAGiYNvyLP+Mw==} + + '@shikijs/types@1.22.0': + resolution: {integrity: sha512-Fw/Nr7FGFhlQqHfxzZY8Cwtwk5E9nKDUgeLjZgt3UuhcM3yJR9xj3ZGNravZZok8XmEZMiYkSMTPlPkULB8nww==} + + '@shikijs/vscode-textmate@9.3.0': + resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sinonjs/commons@1.8.6': + resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} + + '@sinonjs/fake-timers@8.1.0': + resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} + + '@solid-aria/button@0.1.3': + resolution: {integrity: sha512-gN7/d5YkHAbQPhzBVbNNp9grf9w+mxFRulbmeXjp61hFNLOJRDcdMPCri5MmfUJ8D2BwefcyHvCGTCc62Ua23A==} + peerDependencies: + solid-js: ^1.4.4 + + '@solid-aria/focus@0.1.4': + resolution: {integrity: sha512-yX/BbN97s7ascNJu0yB+p1bx48U0NOOWw7+TYlGcAfFGc2HMNpIxG5OdhWGUoz8D9Tp5ELEgWgN3d4dAf7Hk9Q==} + peerDependencies: + solid-js: ^1.4.4 + + '@solid-aria/interactions@0.1.4': + resolution: {integrity: sha512-gVJWJTX51mZfURoak39mxCo/vUQl8UInctJBlT2nIc3VQrTPL4ekOV6czrvTffpduoWgXeuf61+Dabc7b920lQ==} + peerDependencies: + solid-js: ^1.4.4 + + '@solid-aria/toggle@0.1.3': + resolution: {integrity: sha512-ZVRhY+Te8XBFFcumuu2J92LBntlmV6ss/6fNkDfhvr4LV42VB1goRZvPJk8rqakyR3JkQBTnQuxt7idrqqaxgA==} + peerDependencies: + solid-js: ^1.4.4 + + '@solid-aria/types@0.1.4': + resolution: {integrity: sha512-CxVXiZPE+nfD7wr7+6xtY3IrCTyAfL3zW4tH4NtsxlqBoz10tLFRCsTqeyl6OWMDhwABIaSdeHPKXVnKsKErcQ==} + peerDependencies: + solid-js: ^1.4.4 + + '@solid-aria/utils@0.2.1': + resolution: {integrity: sha512-zZgPpdg7azQUKE2jDUnCmzopN8CFdeKKcFTIv9ICrc0afS1qUR8ScywWBF/AwNBgGYhneBr7xEOwAHxe+zUcHQ==} + peerDependencies: + solid-js: ^1.4.4 + + '@solid-devtools/debugger@0.23.4': + resolution: {integrity: sha512-EfTB1Eo313wztQYGJ4Ec/wE70Ay2d603VCXfT3RlyqO5QfLrQGRHX5NXC07hJpQTJJJ3tbNgzO7+ZKo76MM5uA==} + peerDependencies: + solid-js: ^1.8.0 + + '@solid-devtools/shared@0.13.2': + resolution: {integrity: sha512-Y4uaC4EfTVwBR537MZwfaY/eiWAh+hW4mbtnwNuUw/LFmitHSkQhNQTUlLQv/S0chtwrYWQBxvXos1dC7e8R9g==} + peerDependencies: + solid-js: ^1.8.0 + + '@solid-primitives/bounds@0.0.118': + resolution: {integrity: sha512-Qj42w8LlnhJ3r/t+t0c0vrdwIvvQMPgjEFGmLiwREaA85ojLbgL9lSBq2tKvljeLCvRVkgj10KEUf+vc99VCIg==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/cursor@0.0.112': + resolution: {integrity: sha512-TAtU7qD7ipSLSXHnq8FhhosAPVX+dnOCb/ITcGcLlj8e/C9YKcxDhgBHJ3R/d1xDRb5/vO/szJtEz6fnQD311Q==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/event-bus@1.0.11': + resolution: {integrity: sha512-bSwVA4aI2aNHomSbEroUnisMSyDDXJbrw4U8kFEvrcYdlLrJX5i6QeCFx+vj/zdQQw62KAllrEIyWP8KMpPVnQ==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/event-listener@2.3.3': + resolution: {integrity: sha512-DAJbl+F0wrFW2xmcV8dKMBhk9QLVLuBSW+TR4JmIfTaObxd13PuL7nqaXnaYKDWOYa6otB00qcCUIGbuIhSUgQ==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/i18n@2.1.1': + resolution: {integrity: sha512-1p9B8hveu+gzFRWfXcRtdzzEdr7gw3c8uLXm+2bU33JHgiI8kYJsWvG128sE6vU1ZtYGPrGq980Jd6hxYupyZQ==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/keyboard@1.2.8': + resolution: {integrity: sha512-pJtcbkjozS6L1xvTht9rPpyPpX55nAkfBzbFWdf3y0Suwh6qClTibvvObzKOf7uzQ+8aZRDH4LsoGmbTKXtJjQ==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/keyed@1.2.2': + resolution: {integrity: sha512-oBziY40JK4XmJ57XGkFl8j0GtEarSu0hhjdkUQgqL/U0QQE3TZrRo9uhgH7I6VGJKBKG7SAraTPE6S5lVLM1ow==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/map@0.4.13': + resolution: {integrity: sha512-B1zyFbsiTQvqPr+cuPCXO72sRuczG9Swncqk5P74NCGw1VE8qa/Ry9GlfI1e/VdeQYHjan+XkbE3rO2GW/qKew==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/media@2.2.9': + resolution: {integrity: sha512-QUmU62D4/d9YWx/4Dvr/UZasIkIpqNXz7wosA5GLmesRW9XlPa3G5M6uOmTw73SByHNTCw0D6x8bSdtvvLgzvQ==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/platform@0.0.100': + resolution: {integrity: sha512-TMGeDtjA8b7xlUQGq3QhdR8SSa49bvqhFJ0iD+iy4fsnEHr9xA5hIDyBX/ntmz70SbOVyz+z9IdXwBnqurr4bQ==} + peerDependencies: + solid-js: ^1.4.0 + + '@solid-primitives/platform@0.1.2': + resolution: {integrity: sha512-sSxcZfuUrtxcwV0vdjmGnZQcflACzMfLriVeIIWXKp8hzaS3Or3tO6EFQkTd3L8T5dTq+kTtLvPscXIpL0Wzdg==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/props@2.2.2': + resolution: {integrity: sha512-vjRRoi/z3S2ylIJKCs+mN07oxDmt2S9gPCbTqkEx8jYHnvzocpt34UQdglLoSklTE6jI37JhW3g/Cs8Qr/peHg==} + peerDependencies: + solid-js: ^1.3.0 + + '@solid-primitives/props@3.1.11': + resolution: {integrity: sha512-jZAKWwvDRHjiydIumDgMj68qviIbowQ1ci7nkEAgzgvanNkhKSQV8iPgR2jMk1uv7S2ZqXYHslVQTgJel/TEyg==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/refs@1.0.8': + resolution: {integrity: sha512-+jIsWG8/nYvhaCoG2Vg6CJOLgTmPKFbaCrNQKWfChalgUf9WrVxWw0CdJb3yX15n5lUcQ0jBo6qYtuVVmBLpBw==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/resize-observer@2.0.26': + resolution: {integrity: sha512-KbPhwal6ML9OHeUTZszBbt6PYSMj89d4wVCLxlvDYL4U0+p+xlCEaqz6v9dkCwm/0Lb+Wed7W5T1dQZCP3JUUw==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/rootless@1.4.5': + resolution: {integrity: sha512-GFJE9GC3ojx0aUKqAUZmQPyU8fOVMtnVNrkdk2yS4kd17WqVSpXpoTmo9CnOwA+PG7FTzdIkogvfLQSLs4lrww==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/scheduled@1.4.3': + resolution: {integrity: sha512-HfWN5w7b7FEc6VPLBKnnE302h90jsLMuR28Fcf7neRGGf8jBj6wm6/UFQ00VlKexHFMR6KQ2u4VBh5a1ZcqM8g==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/script-loader@2.2.0': + resolution: {integrity: sha512-PlQEcdpvhtWUsceDp1Miyn49v74QNx/Xv7bpdqVTL6GvvQNuXF0qtpDrOZ+jZvOQiHLlnzNWrBk6YdWwenqcnw==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/set@0.4.12': + resolution: {integrity: sha512-p0CTabELYGK0oHDpET0f0p9CZtOqPocPDlZxL5MFSke0ewUByNVfNssK6aOECwvvYWL/rinFOUneOC/KLAXmwA==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/static-store@0.0.5': + resolution: {integrity: sha512-ssQ+s/wrlFAEE4Zw8GV499yBfvWx7SMm+ZVc11wvao4T5xg9VfXCL9Oa+x4h+vPMvSV/Knv5LrsLiUa+wlJUXQ==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/static-store@0.0.8': + resolution: {integrity: sha512-ZecE4BqY0oBk0YG00nzaAWO5Mjcny8Fc06CdbXadH9T9lzq/9GefqcSe/5AtdXqjvY/DtJ5C6CkcjPZO0o/eqg==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/styles@0.0.111': + resolution: {integrity: sha512-1mBxOGAPXmfD5oYCvqjKBDN7SuNjz2qz7RdH7KtsuNLQh6lpuSKadtHnLvru0Y8Vz1InqTJisBIy/6P5kyDmPw==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/transition-group@1.0.5': + resolution: {integrity: sha512-G3FuqvL13kQ55WzWPX2ewiXdZ/1iboiX53195sq7bbkDbXqP6TYKiadwEdsaDogW5rPnPYAym3+xnsNplQJRKQ==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/trigger@1.1.0': + resolution: {integrity: sha512-00BbAiXV66WwjHuKZc3wr0+GLb9C24mMUmi3JdTpNFgHBbrQGrIHubmZDg36c5/7wH+E0GQtOOanwQS063PO+A==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/utils@2.2.1': + resolution: {integrity: sha512-vaBO3MGOpjzitbSAVuJkYZnzNPRl6sRrw2do390DEBbfeqMfPpW4fAEb5/tI4b5T13V1xAY+giHoxqvVg2SRhQ==} + peerDependencies: + solid-js: ^1.4.1 + + '@solid-primitives/utils@3.1.0': + resolution: {integrity: sha512-/rerChcwgFtHEgVCCBY7BXGHh7a83HcIAzR8QhXJ789geIVbBs2YxHF4UUZlG7ec00NKSfvO3+sQquN/xKQLMw==} + peerDependencies: + solid-js: ^1.5.0 + + '@solid-primitives/utils@6.2.3': + resolution: {integrity: sha512-CqAwKb2T5Vi72+rhebSsqNZ9o67buYRdEJrIFzRXz3U59QqezuuxPsyzTSVCacwS5Pf109VRsgCJQoxKRoECZQ==} + peerDependencies: + solid-js: ^1.6.12 + + '@solidjs/router@0.14.7': + resolution: {integrity: sha512-agLf8AUz5XnW6+F64a4Iq+QQQobI5zGHQ/gUYd/WHSwcbnFpavbsiwRLob3YhWMXVX3sQyn4ekUN+uchMCRupw==} + peerDependencies: + solid-js: ^1.8.6 + + '@solidjs/testing-library@0.8.10': + resolution: {integrity: sha512-qdeuIerwyq7oQTIrrKvV0aL9aFeuwTd86VYD3afdq5HYEwoox1OBTJy4y8A3TFZr8oAR0nujYgCzY/8wgHGfeQ==} + engines: {node: '>= 14'} + peerDependencies: + '@solidjs/router': '>=0.9.0' + solid-js: '>=1.0.0' + peerDependenciesMeta: + '@solidjs/router': + optional: true + + '@storybook/addon-actions@8.3.5': + resolution: {integrity: sha512-t8D5oo+4XfD+F8091wLa2y/CDd/W2lExCeol5Vm1tp5saO+u6f2/d7iykLhTowWV84Uohi3D073uFeyTAlGebg==} + peerDependencies: + storybook: ^8.3.5 + + '@storybook/addon-backgrounds@8.3.5': + resolution: {integrity: sha512-IQGjDujuw8+iSqKREdkL8I5E/5CAHZbfOWd4A75PQK2D6qZ0fu/xRwTOQOH4jP6xn/abvfACOdL6A0d5bU90ag==} + peerDependencies: + storybook: ^8.3.5 + + '@storybook/addon-controls@8.3.5': + resolution: {integrity: sha512-2eCVobUUvY1Rq7sp1U8Mx8t44VXwvi0E+hqyrsqOx5TTSC/FUQ+hNAX6GSYUcFIyQQ1ORpKNlUjAAdjxBv1ZHQ==} + peerDependencies: + storybook: ^8.3.5 + + '@storybook/addon-docs@8.3.5': + resolution: {integrity: sha512-MOVfo1bY8kXTzbvmWnx3UuSO4WNykFz7Edvb3mxltNyuW7UDRZGuIuSe32ddT/EtLJfurrC9Ja3yBy4KBUGnMA==} + peerDependencies: + storybook: ^8.3.5 + + '@storybook/addon-essentials@8.3.5': + resolution: {integrity: sha512-hXTtPuN4/IsXjUrkMPAuz1qKAl8DovdXpjQgjQs7jSAVx3kc4BZaGqJ3gaVenKtO8uDchmA92BoQygpkc8eWhw==} + peerDependencies: + storybook: ^8.3.5 + + '@storybook/addon-highlight@8.3.5': + resolution: {integrity: sha512-ku0epul9aReCR3Gv/emwYnsqg3vgux5OmYMjoDcJC7s+LyfweSzLV/f5t9gSHazikJElh5TehtVkWbC4QfbGSw==} + peerDependencies: + storybook: ^8.3.5 + + '@storybook/addon-interactions@8.3.5': + resolution: {integrity: sha512-GtTy/A+mG7vDOahQr2avT4dpWtCRiFDSYcWyuQOZm10y8VDDw157HQM+FuhxjV9Owrrohy9F24oBUwRG8H3b5A==} + peerDependencies: + storybook: ^8.3.5 + + '@storybook/addon-links@8.3.5': + resolution: {integrity: sha512-giRCpn6cfJMYPnVJkojoQDO5ae6098fgY9YgAhwaJej/9dufNcioFdbiyfK1vyzbG6TGeTmJ9ncWCXgWRtzxPQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^8.3.5 + peerDependenciesMeta: + react: + optional: true + + '@storybook/addon-measure@8.3.5': + resolution: {integrity: sha512-6GVehgbHhFIFS69xSfRV+12VK0cnuIAtZdp1J3eUCc2ATrcigqVjTM6wzZz6kBuX6O3dcusr7Wg46KtNliqLqg==} + peerDependencies: + storybook: ^8.3.5 + + '@storybook/addon-outline@8.3.5': + resolution: {integrity: sha512-dwmK6GzjEnQP9Yo0VnBUQtJkXZlXdfjWyskZ/IlUVc+IFdeeCtIiMyA92oMfHo8eXt0k1g21ZqMaIn7ZltOuHw==} + peerDependencies: + storybook: ^8.3.5 + + '@storybook/addon-toolbars@8.3.5': + resolution: {integrity: sha512-Ml2gc9q8WbteDvmuAZGgBxt5SqWMXzuTkMjlsA8EB53hlkN1w9esX4s8YtBeNqC3HKoUzcdq8uexSBqU8fDbSA==} + peerDependencies: + storybook: ^8.3.5 + + '@storybook/addon-viewport@8.3.5': + resolution: {integrity: sha512-FSWydoPiVWFXEittG7O1YgvuaqoU9Vb+qoq9XfP/hvQHHMDcMZvC40JaV8AnJeTXaM7ngIjcn9XDEfGbFfOzXw==} + peerDependencies: + storybook: ^8.3.5 + + '@storybook/blocks@8.3.5': + resolution: {integrity: sha512-8cHTdTywolTHlgwN8I7YH7saWAIjGzV617AwjhJ95AKlC0VtpO1gAFcAgCqr4DU9eMc+LZuvbnaU/RSvA5eCCQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^8.3.5 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/builder-vite@8.4.0-alpha.6': + resolution: {integrity: sha512-7p2eCdDoSLPK145d1dDgaUi8iKGoQhL8wduJJnPToj9WfNExvHdvEc+rucY4xgNepH6gu1IlKdVXYkFeiNwV5Q==} + peerDependencies: + storybook: ^8.4.0-alpha.6 + vite: ^4.0.0 || ^5.0.0 + + '@storybook/components@8.3.5': + resolution: {integrity: sha512-Rq28YogakD3FO4F8KwAtGpo1g3t4V/gfCLqTQ8B6oQUFoxLqegkWk/DlwCzvoJndXuQJfdSyM6+r1JcA4Nql5A==} + peerDependencies: + storybook: ^8.3.5 + + '@storybook/core@8.3.5': + resolution: {integrity: sha512-GOGfTvdioNa/n+Huwg4u/dsyYyBcM+gEcdxi3B7i5x4yJ3I912KoVshumQAOF2myKSRdI8h8aGWdx7nnjd0+5Q==} + + '@storybook/csf-plugin@8.3.5': + resolution: {integrity: sha512-ODVqNXwJt90hG7QW8I9w/XUyOGlr0l7XltmIJgXwB/2cYDvaGu3JV5Ybg7O0fxPV8uXk7JlRuUD8ZYv5Low6pA==} + peerDependencies: + storybook: ^8.3.5 + + '@storybook/csf-plugin@8.4.0-alpha.6': + resolution: {integrity: sha512-A2CGUc2tz2934EtZY/KkrvhGGlPoIGuaJ96Pwu/LoRxyPxgGBdSJA8p1HqGyfn6d2Ui8w13yjb7tIlRjTIZEBQ==} + peerDependencies: + storybook: ^8.4.0-alpha.6 + + '@storybook/csf@0.1.11': + resolution: {integrity: sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==} + + '@storybook/global@5.0.0': + resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} + + '@storybook/html@8.3.5': + resolution: {integrity: sha512-lcSL6dhQUL2kEILGZcSnyM5o3zbwAZ6PVFylku7t0UKGwXfSRt9w8JmlSsmB3v8cannexeETDxjNa5nd1frNqA==} + engines: {node: '>=18.0.0'} + peerDependencies: + storybook: ^8.3.5 + + '@storybook/icons@1.2.12': + resolution: {integrity: sha512-UxgyK5W3/UV4VrI3dl6ajGfHM4aOqMAkFLWe2KibeQudLf6NJpDrDMSHwZj+3iKC4jFU7dkKbbtH2h/al4sW3Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@storybook/instrumenter@8.3.5': + resolution: {integrity: sha512-NLDXai5y2t1ITgHVK9chyL0rMFZbICCOGcnTbyWhkLbiEWZKPJ8FuB8+g+Ba6zwtCve1A1Cnb4O2LOWy7TgWQw==} + peerDependencies: + storybook: ^8.3.5 + + '@storybook/manager-api@8.3.5': + resolution: {integrity: sha512-fEQoKKi7h7pzh2z9RfuzatJxubrsfL/CB99fNXQ0wshMSY/7O4ckd18pK4fzG9ErnCtLAO9qsim4N/4eQC+/8Q==} + peerDependencies: + storybook: ^8.3.5 + + '@storybook/preview-api@8.3.5': + resolution: {integrity: sha512-VPqpudE8pmjTLvdNJoW/2//nqElDgUOmIn3QxbbCmdZTHDg5tFtxuqwdlNfArF0TxvTSBDIulXt/Q6K56TAfTg==} + peerDependencies: + storybook: ^8.3.5 + + '@storybook/react-dom-shim@8.3.5': + resolution: {integrity: sha512-Hf0UitJ/K0C7ajooooUK/PxOR4ihUWqsC7iCV1Gqth8U37dTeLMbaEO4PBwu0VQ+Ufg0N8BJLWfg7o6G4hrODw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^8.3.5 + + '@storybook/test@8.3.5': + resolution: {integrity: sha512-1BXWsUGWk9FiKKelZZ55FDJdeoL8uRBHbjTYBRM2xJLhdNSvGzI4Tb3bkmxPpGn72Ua6AyldhlTxr2BpUFKOHA==} + peerDependencies: + storybook: ^8.3.5 + + '@storybook/testing-library@0.2.2': + resolution: {integrity: sha512-L8sXFJUHmrlyU2BsWWZGuAjv39Jl1uAqUHdxmN42JY15M4+XCMjGlArdCCjDe1wpTSW6USYISA9axjZojgtvnw==} + deprecated: In Storybook 8, this package functionality has been integrated to a new package called @storybook/test, which uses Vitest APIs for an improved experience. When upgrading to Storybook 8 with 'npx storybook@latest upgrade', you will get prompted and will get an automigration for the new package. Please migrate when you can. + + '@storybook/theming@8.3.5': + resolution: {integrity: sha512-9HmDDyC691oqfg4RziIM9ElsS2HITaxmH7n/yeUPtuirkPdAQzqOzhvH/Sa0qOhifzs8VjR+Gd/a/ZQ+S38r7w==} + peerDependencies: + storybook: ^8.3.5 + + '@surma/rollup-plugin-off-main-thread@2.2.3': + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + + '@tanstack/query-core@5.59.0': + resolution: {integrity: sha512-WGD8uIhX6/deH/tkZqPNcRyAhDUqs729bWKoByYHSogcshXfFbppOdTER5+qY7mFvu8KEFJwT0nxr8RfPTVh0Q==} + + '@tanstack/solid-query@5.59.0': + resolution: {integrity: sha512-2yCObsJ9NHpKSKfHJ3R2TRuYbxtU2Hzg8rxlexl3uHm3VIvQQ1KH18/PYdQAR6oXymCl7ls5QZKvTvgJRtX9bg==} + peerDependencies: + solid-js: ^1.6.0 + + '@tauri-apps/api@2.0.2': + resolution: {integrity: sha512-3wSwmG+1kr6WrgAFKK5ijkNFPp8TT3FLj3YHUb5EwMO+3FxX4uWlfSWkeeBy+Kc1RsKzugtYLuuya+98Flj+3w==} + + '@tauri-apps/cli-darwin-arm64@2.0.2': + resolution: {integrity: sha512-B+/a8Q6wAqmB4A4HVeK0oQP5TdQGKW60ZLOI9O2ktH2HPr9ETr3XkwXPuJ2uAOuGEgtRZHBgFOIgG000vMnKlg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tauri-apps/cli-darwin-x64@2.0.2': + resolution: {integrity: sha512-kaurhn6XT4gAVCPAQSSHl/CHFxTS0ljc47N7iGTSlYJ03sCWPRZeNuVa/bn6rolz9MA2JfnRnFqB1pUL6jzp9Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tauri-apps/cli-linux-arm-gnueabihf@2.0.2': + resolution: {integrity: sha512-bVrofjlacMxmGMcqK18iBW05tsZXOd19/MnqruFFcHSVjvkGGIXHMtUbMXnZNXBPkHDsnfytNtkY9SZGfCFaBA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tauri-apps/cli-linux-arm64-gnu@2.0.2': + resolution: {integrity: sha512-7XCBn0TTBVQGnV42dXcbHPLg/9W8kJoVzuliIozvNGyRWxfXqDbQYzpI48HUQG3LgHMabcw8+pVZAfGhevLrCA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tauri-apps/cli-linux-arm64-musl@2.0.2': + resolution: {integrity: sha512-1xi2SreGVlpAL68MCsDUY63rdItUdPZreXIAcOVqvUehcJRYOa1XGSBhrV0YXRgZeh0AtKC19z6PRzcv4rosZA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tauri-apps/cli-linux-x64-gnu@2.0.2': + resolution: {integrity: sha512-WVjwYzPWFqZVg1fx6KSU5w47Q0VbMyaCp34qs5EcS8EIU0/RnofdzqUoOYqvgGVgNgoz7Pj5dXK2SkS8BHXMmA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tauri-apps/cli-linux-x64-musl@2.0.2': + resolution: {integrity: sha512-h5miE2mctgaQNn/BbG9o1pnJcrx+VGBi2A6JFqGu934lFgSV5+s28M8Gc8AF2JgFH4hQV4IuMkeSw8Chu5Dodg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tauri-apps/cli-win32-arm64-msvc@2.0.2': + resolution: {integrity: sha512-2b8oO0+dYonahG5PfA/zoq0zlafLclfmXgqoWDZ++UiPtQHJNpNeEQ8GWbSFKGHQ494Jo6jHvazOojGRE1kqAg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tauri-apps/cli-win32-ia32-msvc@2.0.2': + resolution: {integrity: sha512-axgICLunFi0To3EibdCBgbST5RocsSmtM4c04+CbcX8WQQosJ9ziWlCSrrOTRr+gJERAMSvEyVUS98f6bWMw9A==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@tauri-apps/cli-win32-x64-msvc@2.0.2': + resolution: {integrity: sha512-JR17cM6+DyExZRgpXr2/DdqvcFYi/EKvQt8dI5R1/uQoesWd8jeNnrU7c1FG1Zmw9+pTzDztsNqEKsrNq2sNIg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tauri-apps/cli@2.0.2': + resolution: {integrity: sha512-R4ontHZvXORArERAHIidp5zRfZEshZczTiK+poslBv7AGKpQZoMw+E49zns7mOmP64i2Cq9Ci0pJvi4Rm8Okzw==} + engines: {node: '>= 10'} + hasBin: true + + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} + + '@testing-library/dom@9.3.4': + resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} + engines: {node: '>=14'} + + '@testing-library/jest-dom@6.5.0': + resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/user-event@14.5.2': + resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + + '@thisbeyond/solid-dnd@0.7.5': + resolution: {integrity: sha512-DfI5ff+yYGpK9M21LhYwIPlbP2msKxN2ARwuu6GF8tT1GgNVDTI8VCQvH4TJFoVApP9d44izmAcTh/iTCH2UUw==} + engines: {node: '>=18.0.0', pnpm: '>=8.6.0'} + peerDependencies: + solid-js: ^1.5 + + '@tootallnate/once@1.1.2': + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + + '@trivago/prettier-plugin-sort-imports@4.3.0': + resolution: {integrity: sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==} + peerDependencies: + '@vue/compiler-sfc': 3.x + prettier: 2.x - 3.x + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@ts-morph/common@0.22.0': + resolution: {integrity: sha512-HqNBuV/oIlMKdkLshXd1zKBqNQCsuPEsgQOkfFQ/eUKjRlwndXW1AjN9LVkBEIukm00gGXSRmfkl0Wv5VXLnlw==} + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/aws-lambda@8.10.145': + resolution: {integrity: sha512-dtByW6WiFk5W5Jfgz1VM+YPA21xMXTuSFoLYIDY0L44jDLLflVPtZkYuu3/YxpGcvjzKFBZLU+GyKjR0HOYtyw==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/body-parser@1.19.5': + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + + '@types/btoa-lite@1.0.2': + resolution: {integrity: sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/estree@0.0.39': + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/express-serve-static-core@4.19.6': + resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} + + '@types/express@4.17.21': + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jest@27.5.2': + resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/jsonwebtoken@9.0.7': + resolution: {integrity: sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==} + + '@types/katex@0.16.7': + resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} + + '@types/lodash.defaultsdeep@4.6.9': + resolution: {integrity: sha512-pLtCFK0YkHfGtGLYLNMTbFB5/G5+RsmQCIbbHH8GOAXjv+gDkVilY98kILfe8JH2Kev0OCReYxp1AjxEjP8ixA==} + + '@types/lodash.isequal@4.5.8': + resolution: {integrity: sha512-uput6pg4E/tj2LGxCZo9+y27JNyB2OZuuI/T5F+ylVDYuqICLG2/ktjxx0v6GvVntAf8TvEzeQLcV0ffRirXuA==} + + '@types/lodash@4.17.10': + resolution: {integrity: sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/ms@0.7.34': + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + + '@types/node@17.0.45': + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + + '@types/node@18.19.55': + resolution: {integrity: sha512-zzw5Vw52205Zr/nmErSEkN5FLqXPuKX/k5d1D7RKHATGqU7y6YfX9QxZraUzUrFGqH6XzOzG196BC35ltJC4Cw==} + + '@types/node@20.16.11': + resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} + + '@types/node@22.7.5': + resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} + + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + + '@types/prettier@2.7.3': + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} + + '@types/prop-types@15.7.13': + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} + + '@types/qs@6.9.16': + resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/react@18.3.11': + resolution: {integrity: sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==} + + '@types/resolve@1.20.2': + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + + '@types/send@0.17.4': + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + + '@types/serve-static@1.15.7': + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/uuid@9.0.8': + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + + '@types/ws@8.5.12': + resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@16.0.9': + resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} + + '@typescript-eslint/eslint-plugin@5.62.0': + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/eslint-plugin@8.8.1': + resolution: {integrity: sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@5.62.0': + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@8.8.1': + resolution: {integrity: sha512-hQUVn2Lij2NAxVFEdvIGxT9gP1tq2yM83m+by3whWFsWC+1y8pxxxHUFE1UqDu2VsGi2i6RLcv4QvouM84U+ow==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@5.62.0': + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/scope-manager@8.8.1': + resolution: {integrity: sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@5.62.0': + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/type-utils@8.8.1': + resolution: {integrity: sha512-qSVnpcbLP8CALORf0za+vjLYj1Wp8HSoiI8zYU5tHxRVj30702Z1Yw4cLwfNKhTPWp5+P+k1pjmD5Zd1nhxiZA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@5.62.0': + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/types@8.8.1': + resolution: {integrity: sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@5.62.0': + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@8.8.1': + resolution: {integrity: sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@5.62.0': + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@typescript-eslint/utils@8.8.1': + resolution: {integrity: sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + '@typescript-eslint/visitor-keys@5.62.0': + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/visitor-keys@8.8.1': + resolution: {integrity: sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + '@vitest/coverage-v8@2.1.2': + resolution: {integrity: sha512-b7kHrFrs2urS0cOk5N10lttI8UdJ/yP3nB4JYTREvR5o18cR99yPpK4gK8oQgI42BVv0ILWYUSYB7AXkAUDc0g==} + peerDependencies: + '@vitest/browser': 2.1.2 + vitest: 2.1.2 + peerDependenciesMeta: + '@vitest/browser': + optional: true + + '@vitest/expect@2.0.5': + resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} + + '@vitest/expect@2.1.2': + resolution: {integrity: sha512-FEgtlN8mIUSEAAnlvn7mP8vzaWhEaAEvhSXCqrsijM7K6QqjB11qoRZYEd4AKSCDz8p0/+yH5LzhZ47qt+EyPg==} + + '@vitest/mocker@2.1.2': + resolution: {integrity: sha512-ExElkCGMS13JAJy+812fw1aCv2QO/LBK6CyO4WOPAzLTmve50gydOlWhgdBJPx2ztbADUq3JVI0C5U+bShaeEA==} + peerDependencies: + '@vitest/spy': 2.1.2 + msw: ^2.3.5 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@2.0.5': + resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} + + '@vitest/pretty-format@2.1.2': + resolution: {integrity: sha512-FIoglbHrSUlOJPDGIrh2bjX1sNars5HbxlcsFKCtKzu4+5lpsRhOCVcuzp0fEhAGHkPZRIXVNzPcpSlkoZ3LuA==} + + '@vitest/runner@2.1.2': + resolution: {integrity: sha512-UCsPtvluHO3u7jdoONGjOSil+uON5SSvU9buQh3lP7GgUXHp78guN1wRmZDX4wGK6J10f9NUtP6pO+SFquoMlw==} + + '@vitest/snapshot@2.1.2': + resolution: {integrity: sha512-xtAeNsZ++aRIYIUsek7VHzry/9AcxeULlegBvsdLncLmNCR6tR8SRjn8BbDP4naxtccvzTqZ+L1ltZlRCfBZFA==} + + '@vitest/spy@2.0.5': + resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} + + '@vitest/spy@2.1.2': + resolution: {integrity: sha512-GSUi5zoy+abNRJwmFhBDC0yRuVUn8WMlQscvnbbXdKLXX9dE59YbfwXxuJ/mth6eeqIzofU8BB5XDo/Ns/qK2A==} + + '@vitest/utils@2.0.5': + resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} + + '@vitest/utils@2.1.2': + resolution: {integrity: sha512-zMO2KdYy6mx56btx9JvAqAZ6EyS3g49krMPPrgOp1yxGZiA93HumGk+bZ5jIZtOg5/VBYl5eBmGRQHqq4FG6uQ==} + + '@vue/compiler-core@3.4.19': + resolution: {integrity: sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w==} + + '@vue/compiler-core@3.5.11': + resolution: {integrity: sha512-PwAdxs7/9Hc3ieBO12tXzmTD+Ln4qhT/56S+8DvrrZ4kLDn4Z/AMUr8tXJD0axiJBS0RKIoNaR0yMuQB9v9Udg==} + + '@vue/compiler-dom@3.4.19': + resolution: {integrity: sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA==} + + '@vue/compiler-dom@3.5.11': + resolution: {integrity: sha512-pyGf8zdbDDRkBrEzf8p7BQlMKNNF5Fk/Cf/fQ6PiUz9at4OaUfyXW0dGJTo2Vl1f5U9jSLCNf0EZJEogLXoeew==} + + '@vue/compiler-sfc@3.4.19': + resolution: {integrity: sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg==} + + '@vue/compiler-sfc@3.5.11': + resolution: {integrity: sha512-gsbBtT4N9ANXXepprle+X9YLg2htQk1sqH/qGJ/EApl+dgpUBdTv3yP7YlR535uHZY3n6XaR0/bKo0BgwwDniw==} + + '@vue/compiler-ssr@3.4.19': + resolution: {integrity: sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw==} + + '@vue/compiler-ssr@3.5.11': + resolution: {integrity: sha512-P4+GPjOuC2aFTk1Z4WANvEhyOykcvEd5bIj2KVNGKGfM745LaXGr++5njpdBTzVz5pZifdlR1kpYSJJpIlSePA==} + + '@vue/shared@3.4.19': + resolution: {integrity: sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw==} + + '@vue/shared@3.5.11': + resolution: {integrity: sha512-W8GgysJVnFo81FthhzurdRAWP/byq3q2qIw70e0JWblzVhjgOMiC2GyovXrZTFQJnFVryYaKGP3Tc9vYzYm6PQ==} + + abab@2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-globals@6.0.0: + resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + + acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-sequence-parser@1.1.1: + resolution: {integrity: sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axios@0.26.1: + resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} + + babel-jest@27.5.1: + resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-codegen@4.1.5: + resolution: {integrity: sha512-mId3XW/ndFe7kqUdDUPvMhzYC7ST2gC+C20pO2jVVRQqlHrB1KbMpI/mpawX3DKkAmAuAzWVcBFHb5ULRyNl4A==} + engines: {node: '>=10', npm: '>=6'} + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@27.5.1: + resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + babel-plugin-jsx-dom-expressions@0.39.2: + resolution: {integrity: sha512-rCkSYFuLl5/XD+BXjZk1XxFAsIBgNe9WZ7xBHjQV1dBliI64kO+EWktAD3b6Bj/SXk+LpVXFyMVydhnI35svWQ==} + peerDependencies: + '@babel/core': ^7.20.12 + + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + + babel-plugin-polyfill-corejs2@0.4.11: + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.10.6: + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.2: + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@27.5.1: + resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-solid@1.9.2: + resolution: {integrity: sha512-rWx968GIDghgFStRDQaoqelGspEm9rgPci/yNzNPFlkzMqHaL2yob+t7BbzyqZw5b9/llkzjqUNIOybT9Z9mcg==} + peerDependencies: + '@babel/core': ^7.0.0 + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + before-after-hook@2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + + better-opn@3.0.2: + resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} + engines: {node: '>=12.0.0'} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + bottleneck@2.19.5: + resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-assert@1.2.1: + resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} + + browser-process-hrtime@1.0.0: + resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} + + browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + browserslist@4.24.0: + resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + btoa-lite@1.0.0: + resolution: {integrity: sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==} + + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + bundle-n-require@1.1.1: + resolution: {integrity: sha512-EB2wFjXF106LQLe/CYnKCMCdLeTW47AtcEtUfiqAOgr2a08k0+YgRklur2aLfEYHlhz6baMskZ8L2U92Hh0vyA==} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + + caniuse-lite@1.0.30001667: + resolution: {integrity: sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + chai@5.1.1: + resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} + engines: {node: '>=12'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chromatic@11.12.0: + resolution: {integrity: sha512-7nHjFrGoRcGVNSGUmVdAGfWDN97z74D4Q5da48IAt4CcougEffVr+WWmJYqJ/WUa7by0/Ny5iYyX3FMz40juxw==} + hasBin: true + peerDependencies: + '@chromatic-com/cypress': ^0.*.* || ^1.0.0 + '@chromatic-com/playwright': ^0.*.* || ^1.0.0 + peerDependenciesMeta: + '@chromatic-com/cypress': + optional: true + '@chromatic-com/playwright': + optional: true + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cjs-module-lexer@1.4.1: + resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + code-block-writer@12.0.0: + resolution: {integrity: sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==} + + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-name@2.0.0: + resolution: {integrity: sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==} + engines: {node: '>=12.20'} + + color-parse@2.0.2: + resolution: {integrity: sha512-eCtOz5w5ttWIUcaKLiktF+DxZO1R9KLNY/xhbV6CkhM7sR3GhVghmt6X6yOnzeaM24po+Z9/S1apbXMwA3Iepw==} + + color-rgba@3.0.0: + resolution: {integrity: sha512-PPwZYkEY3M2THEHHV6Y95sGUie77S7X8v+h1r6LSAPF3/LL2xJ8duUXSrkic31Nzc4odPwHgUbiX/XuTYzQHQg==} + + color-space@2.0.1: + resolution: {integrity: sha512-nKqUYlo0vZATVOFHY810BSYjmCARrG7e5R3UE3CQlyjJTvv5kSSmPG1kzm/oDyyqjehM+lW1RnEt9It9GNa5JA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + + core-js-compat@3.38.1: + resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + crosspath@2.0.0: + resolution: {integrity: sha512-ju88BYCQ2uvjO2bR+SsgLSTwTSctU+6Vp2ePbKPgSCZyy4MWZxYsT738DlKVRE5utUjobjPRm1MkTYKJxCmpTA==} + engines: {node: '>=14.9.0'} + + crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-selector-parser@3.0.5: + resolution: {integrity: sha512-3itoDFbKUNx1eKmVpYMFyqKX04Ww9osZ+dLgrk6GEv6KMVeXUhUnp4I5X+evw+u3ZxVU6RFXSSRxlTeMh8bA+g==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + cssnano-utils@5.0.0: + resolution: {integrity: sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + cssom@0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + + cssom@0.4.4: + resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} + + cssstyle@2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + + cssstyle@4.1.0: + resolution: {integrity: sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==} + engines: {node: '>=18'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + data-urls@2.0.0: + resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} + engines: {node: '>=10'} + + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + + decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + + dedent@0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + deep-equal@2.2.3: + resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} + engines: {node: '>= 0.4'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + deprecation@2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-browser@5.3.0: + resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + diff-sequences@27.5.1: + resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domexception@2.0.1: + resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} + engines: {node: '>=8'} + deprecated: Use your platform's native DOMException instead + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.5.33: + resolution: {integrity: sha512-+cYTcFB1QqD4j4LegwLfpCNxifb6dDFUAwk6RsLusCwIaZI6or2f+q8rs5tTB2YC53HhOlIbEaqHMAAC8IOIwA==} + + emittery@0.8.1: + resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} + engines: {node: '>=10'} + + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + enhanced-resolve-jest@1.1.0: + resolution: {integrity: sha512-GM7yVsiLIaunYkCqnGRPO4kQbT6hPSgkyOFKTseWboPMjZ2tlpQYh2ttLuE8ORkR72Wb1f9SJBbnPu0AjcTzgg==} + + enhanced-resolve@4.5.0: + resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==} + engines: {node: '>=6.9.0'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + errno@0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + error-stack-parser-es@0.1.5: + resolution: {integrity: sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + esbuild-register@3.6.0: + resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} + peerDependencies: + esbuild: '>=0.12 <1' + + esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-config-prettier@8.10.0: + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-prettier@5.2.1: + resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-promise@7.1.0: + resolution: {integrity: sha512-8trNmPxdAy3W620WKDpaS65NlM5yAumod6XeC4LOb+jxlkG4IVcp68c6dXY2ev+uT4U1PtG57YDV6EGAXN0GbQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + + eslint-plugin-simple-import-sort@12.1.1: + resolution: {integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==} + peerDependencies: + eslint: '>=5.0.0' + + eslint-plugin-solid@0.12.1: + resolution: {integrity: sha512-fM0sEg9PcS1mcNbWklwc+W/lOv1/XyEwXf53HmFFy4GOA8E3u41h8JW+hc+Vv1m3kh01umKoTalOTET08zKdAQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + + eslint-plugin-solid@0.14.3: + resolution: {integrity: sha512-eDeyPrijSjVGeyb4oKoyidgLlMDZwAg/YdxiY9QvGXl2kLgpcHvLpgpaGK4KJ8xSsg0ym3B2dPRBAIlT7iUrEQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + + eslint-plugin-spellcheck@0.0.20: + resolution: {integrity: sha512-GJa6vgzWAYqe0elKADAsiBRrhvqBnKyt7tpFSqlCZJsK2W9+K80oMyHhKolA7vJ13H5RCGs5/KCN+mKUyKoAiA==} + peerDependencies: + eslint: '>=0.8.0' + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-scope@8.1.0: + resolution: {integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.1.0: + resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + + eslint@9.12.0: + resolution: {integrity: sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.2.0: + resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + event-stream@3.3.4: + resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@27.5.1: + resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + express@4.21.1: + resolution: {integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==} + engines: {node: '>= 0.10.0'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.0.2: + resolution: {integrity: sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + fdir@6.4.0: + resolution: {integrity: sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + file-size@1.0.0: + resolution: {integrity: sha512-tLIdonWTpABkU6Axg2yGChYdrOsy4V8xcm0IcyAP8fSsu6jiXLm5pgs083e4sq5fzNRZuAYolUbZyYmPvCKfwQ==} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + filesize@10.1.6: + resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==} + engines: {node: '>= 10.4.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + form-data@3.0.1: + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + engines: {node: '>= 6'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + from@0.1.7: + resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} + + fromentries@1.3.2: + resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + goober@2.1.15: + resolution: {integrity: sha512-LP0xChUqgLlr5ORa1m4LobVy++/dhP4Kta2gVla9i2pc30XvtpEFrye4JtcD265g1tEFLOjYIQEiTa+9bGGQ/g==} + peerDependencies: + csstype: ^3.0.10 + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hast-util-from-dom@5.0.0: + resolution: {integrity: sha512-d6235voAp/XR3Hh5uy7aGLbM3S4KamdW0WEgOaU1YoewnuYw4HXb5eRtv9g65m/RFGEfUY1Mw4UqCc5Y8L4Stg==} + + hast-util-from-html-isomorphic@2.0.0: + resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} + + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + + hast-util-from-parse5@8.0.1: + resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} + + hast-util-heading-rank@3.0.0: + resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} + + hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-to-html@9.0.3: + resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} + + hast-util-to-string@3.0.1: + resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} + + hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hastscript@8.0.0: + resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} + + hey-listen@1.0.8: + resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} + + highlight.js@11.9.0: + resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==} + engines: {node: '>=12.0.0'} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + html-encoding-sniffer@2.0.1: + resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} + engines: {node: '>=10'} + + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + + html-entities@2.3.3: + resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-proxy-agent@4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + hunspell-spellchecker@1.0.2: + resolution: {integrity: sha512-4DwmFAvlz+ChsqLDsZT2cwBsYNXh+oWboemxXtafwKIyItq52xfR4e4kr017sLAoPaSYVofSOvPUfmOAhXyYvw==} + hasBin: true + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + inline-style-parser@0.1.1: + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + + inline-style-parser@0.2.4: + resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-absolute-url@4.0.1: + resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-html@2.0.0: + resolution: {integrity: sha512-S+OpgB5i7wzIue/YSE5hg0e5ZYfG3hhpNh9KGl6ayJ38p7ED6wxQLd1TV91xHpcTvw90KMJ9EwN3F/iNflHBVg==} + engines: {node: '>=8'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} + + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@5.0.0: + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + + javascript-natural-sort@0.7.1: + resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} + + javascript-stringify@2.1.0: + resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} + + jest-changed-files@27.5.1: + resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-circus@27.5.1: + resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-cli@27.5.1: + resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@27.5.1: + resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + ts-node: '>=9.0.0' + peerDependenciesMeta: + ts-node: + optional: true + + jest-diff@27.5.1: + resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@27.5.1: + resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-each@27.5.1: + resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-environment-jsdom@27.5.1: + resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-environment-node@27.5.1: + resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-get-type@27.5.1: + resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@27.5.1: + resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-jasmine2@27.5.1: + resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-leak-detector@27.5.1: + resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-matcher-utils@27.5.1: + resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-message-util@27.5.1: + resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-mock@27.5.1: + resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@27.5.1: + resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-resolve-dependencies@27.5.1: + resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-resolve@27.5.1: + resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-runner@27.5.1: + resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-runtime@27.5.1: + resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-serializer@27.5.1: + resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-snapshot@27.5.1: + resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-util@27.5.1: + resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-validate@27.5.1: + resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-watcher@27.5.1: + resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jest@27.5.1: + resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsdoc-type-pratt-parser@4.1.0: + resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} + engines: {node: '>=12.0.0'} + + jsdom@16.7.0: + resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} + engines: {node: '>=10'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + + jsdom@25.0.1: + resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json-stringify-deterministic@1.0.12: + resolution: {integrity: sha512-q3PN0lbUdv0pmurkBNdJH3pfFvOTL/Zp0lquqpvcjfKzt6Y0j49EPHAmVHCAS4Ceq/Y+PejWTzyiVpoY71+D6g==} + engines: {node: '>= 4'} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + + jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + + katex@0.16.11: + resolution: {integrity: sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==} + hasBin: true + + kebab-case@1.0.2: + resolution: {integrity: sha512-7n6wXq4gNgBELfDCpzKc+mRrZFs7D+wgfF5WRFLNAr4DA/qtr9Js8uOAVAfHhuLMfAcQ0pRKqbpjx+TcJVdE1Q==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + known-css-properties@0.24.0: + resolution: {integrity: sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==} + + known-css-properties@0.30.0: + resolution: {integrity: sha512-VSWXYUnsPu9+WYKkfmJyLKtIvaRJi1kXUqVmBACORXZQxT5oZDsoZ2vQP+bQFDnWtpI/4eq3MLoRMjI2fnLzTQ==} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lie@3.1.1: + resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} + + lightningcss-darwin-arm64@1.25.1: + resolution: {integrity: sha512-G4Dcvv85bs5NLENcu/s1f7ehzE3D5ThnlWSDwE190tWXRQCQaqwcuHe+MGSVI/slm0XrxnaayXY+cNl3cSricw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-arm64@1.27.0: + resolution: {integrity: sha512-Gl/lqIXY+d+ySmMbgDf0pgaWSqrWYxVHoc88q+Vhf2YNzZ8DwoRzGt5NZDVqqIW5ScpSnmmjcgXP87Dn2ylSSQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.25.1: + resolution: {integrity: sha512-dYWuCzzfqRueDSmto6YU5SoGHvZTMU1Em9xvhcdROpmtOQLorurUZz8+xFxZ51lCO2LnYbfdjZ/gCqWEkwixNg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-darwin-x64@1.27.0: + resolution: {integrity: sha512-0+mZa54IlcNAoQS9E0+niovhyjjQWEMrwW0p2sSdLRhLDc8LMQ/b67z7+B5q4VmjYCMSfnFi3djAAQFIDuj/Tg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.25.1: + resolution: {integrity: sha512-hXoy2s9A3KVNAIoKz+Fp6bNeY+h9c3tkcx1J3+pS48CqAt+5bI/R/YY4hxGL57fWAIquRjGKW50arltD6iRt/w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-freebsd-x64@1.27.0: + resolution: {integrity: sha512-n1sEf85fePoU2aDN2PzYjoI8gbBqnmLGEhKq7q0DKLj0UTVmOTwDC7PtLcy/zFxzASTSBlVQYJUhwIStQMIpRA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.25.1: + resolution: {integrity: sha512-tWyMgHFlHlp1e5iW3EpqvH5MvsgoN7ZkylBbG2R2LWxnvH3FuWCJOhtGcYx9Ks0Kv0eZOBud789odkYLhyf1ng==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm-gnueabihf@1.27.0: + resolution: {integrity: sha512-MUMRmtdRkOkd5z3h986HOuNBD1c2lq2BSQA1Jg88d9I7bmPGx08bwGcnB75dvr17CwxjxD6XPi3Qh8ArmKFqCA==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.25.1: + resolution: {integrity: sha512-Xjxsx286OT9/XSnVLIsFEDyDipqe4BcLeB4pXQ/FEA5+2uWCCuAEarUNQumRucnj7k6ftkAHUEph5r821KBccQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-gnu@1.27.0: + resolution: {integrity: sha512-cPsxo1QEWq2sfKkSq2Bq5feQDHdUEwgtA9KaB27J5AX22+l4l0ptgjMZZtYtUnteBofjee+0oW1wQ1guv04a7A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.25.1: + resolution: {integrity: sha512-IhxVFJoTW8wq6yLvxdPvyHv4NjzcpN1B7gjxrY3uaykQNXPHNIpChLB52+wfH+yS58zm1PL4LemUp8u9Cfp6Bw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.27.0: + resolution: {integrity: sha512-rCGBm2ax7kQ9pBSeITfCW9XSVF69VX+fm5DIpvDZQl4NnQoMQyRwhZQm9pd59m8leZ1IesRqWk2v/DntMo26lg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.25.1: + resolution: {integrity: sha512-RXIaru79KrREPEd6WLXfKfIp4QzoppZvD3x7vuTKkDA64PwTzKJ2jaC43RZHRt8BmyIkRRlmywNhTRMbmkPYpA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-gnu@1.27.0: + resolution: {integrity: sha512-Dk/jovSI7qqhJDiUibvaikNKI2x6kWPN79AQiD/E/KeQWMjdGe9kw51RAgoWFDi0coP4jinaH14Nrt/J8z3U4A==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.25.1: + resolution: {integrity: sha512-TdcNqFsAENEEFr8fJWg0Y4fZ/nwuqTRsIr7W7t2wmDUlA8eSXVepeeONYcb+gtTj1RaXn/WgNLB45SFkz+XBZA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.27.0: + resolution: {integrity: sha512-QKjTxXm8A9s6v9Tg3Fk0gscCQA1t/HMoF7Woy1u68wCk5kS4fR+q3vXa1p3++REW784cRAtkYKrPy6JKibrEZA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.27.0: + resolution: {integrity: sha512-/wXegPS1hnhkeG4OXQKEMQeJd48RDC3qdh+OA8pCuOPCyvnm/yEayrJdJVqzBsqpy1aJklRCVxscpFur80o6iQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.25.1: + resolution: {integrity: sha512-9KZZkmmy9oGDSrnyHuxP6iMhbsgChUiu/NSgOx+U1I/wTngBStDf2i2aGRCHvFqj19HqqBEI4WuGVQBa2V6e0A==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss-win32-x64-msvc@1.27.0: + resolution: {integrity: sha512-/OJLj94Zm/waZShL8nB5jsNj3CfNATLCTyFxZyouilfTmSoLDX7VlVAmhPHoZWVFp4vdmoiEbPEYC8HID3m6yw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.25.1: + resolution: {integrity: sha512-V0RMVZzK1+rCHpymRv4URK2lNhIRyO8g7U7zOFwVAhJuat74HtkjIQpQRKNCwFEYkRGpafOpmXXLoaoBcyVtBg==} + engines: {node: '>= 12.0.0'} + + lightningcss@1.27.0: + resolution: {integrity: sha512-8f7aNmS1+etYSLHht0fQApPc2kNO8qGRutifN5rVIc6Xo6ABsEbqOr758UwI7ALVbTt4x1fllKt0PYgzD9S3yQ==} + engines: {node: '>= 12.0.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lnk@1.1.0: + resolution: {integrity: sha512-m3q+8W+stYiJYCBwefzrU+inN9h2KxofWuxhNH1iS+MdG9MIKfDpBtbmmIKstVwussx48PXALwonyzuzZUXjQQ==} + engines: {node: '>=4'} + + localforage@1.10.0: + resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.defaultsdeep@4.6.1: + resolution: {integrity: sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==} + + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + long@5.2.3: + resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + look-it-up@2.1.0: + resolution: {integrity: sha512-nMoGWW2HurtuJf6XAL56FWTDCWLOTSsanrgwOyaR5Y4e3zfG5N/0cU5xWZSEU3tBxhQugRbV1xL9jb+ug7yZww==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + loupe@3.1.2: + resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} + + lowlight@3.1.0: + resolution: {integrity: sha512-CEbNVoSikAxwDMDPjXlqlFYiZLkDJHwyGu/MfOsJnF3d7f3tds5J3z8s/l9TMXhzfsJCCJEAsD78842mwmg0PQ==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@9.1.2: + resolution: {integrity: sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==} + engines: {node: 14 || >=16.14} + + lunr@2.3.9: + resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + + magic-string@0.30.11: + resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + map-or-similar@1.5.0: + resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} + + map-stream@0.1.0: + resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} + + markdown-table@3.0.3: + resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + + markdown-to-jsx@7.5.0: + resolution: {integrity: sha512-RrBNcMHiFPcz/iqIj0n3wclzHXjwS7mzjBNWecKKVhNTIxQepIix6Il/wZCn2Cg5Y1ow2Qi84+eJrryFRWBEWw==} + engines: {node: '>= 10'} + peerDependencies: + react: '>= 0.14.0' + + marked@4.3.0: + resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} + engines: {node: '>= 12'} + hasBin: true + + mdast-util-find-and-replace@3.0.1: + resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} + + mdast-util-from-markdown@2.0.1: + resolution: {integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.0.0: + resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.0.0: + resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} + + mdast-util-math@3.0.0: + resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} + + mdast-util-newline-to-break@2.0.0: + resolution: {integrity: sha512-MbgeFca0hLYIEx/2zGsszCSEJJ1JSCdiY5xQxRcLDDGa8EPvlLPupJ4DSajbMPAnC0je8jfb9TiUATnxxrHUog==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + + mdast-util-to-markdown@2.1.0: + resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + memoizerific@1.11.3: + resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} + + memory-fs@0.5.0: + resolution: {integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==} + engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + + merge-anything@5.1.7: + resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} + engines: {node: '>=12.13'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + microdiff@1.3.2: + resolution: {integrity: sha512-pKy60S2febliZIbwdfEQKTtL5bLNxOyiRRmD400gueYl9XcHyNGxzHSlJWn9IMHwYXT0yohPYL08+bGozVk8cQ==} + + micromark-core-commonmark@2.0.1: + resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.0: + resolution: {integrity: sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-extension-math@3.1.0: + resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} + + micromark-factory-destination@2.0.0: + resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} + + micromark-factory-label@2.0.0: + resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} + + micromark-factory-space@2.0.0: + resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + + micromark-factory-title@2.0.0: + resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + + micromark-factory-whitespace@2.0.0: + resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + + micromark-util-character@2.1.0: + resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + + micromark-util-chunked@2.0.0: + resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} + + micromark-util-classify-character@2.0.0: + resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} + + micromark-util-combine-extensions@2.0.0: + resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + + micromark-util-decode-numeric-character-reference@2.0.1: + resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + + micromark-util-decode-string@2.0.0: + resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + + micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + + micromark-util-html-tag-name@2.0.0: + resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} + + micromark-util-normalize-identifier@2.0.0: + resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + + micromark-util-resolve-all@2.0.0: + resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + + micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + + micromark-util-subtokenize@2.0.1: + resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==} + + micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + + micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + + micromark@4.0.0: + resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + mlly@1.7.2: + resolution: {integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==} + + mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + node-cleanup@2.1.2: + resolution: {integrity: sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==} + + node-eval@2.0.0: + resolution: {integrity: sha512-Ap+L9HznXAVeJj3TJ1op6M6bg5xtTq8L5CU/PJxtkhea/DrIxdTknGKIECKd/v/Lgql95iuMAYvIzBNd0pmcMg==} + engines: {node: '>= 4'} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + nwsapi@2.2.13: + resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==} + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object-path@0.11.8: + resolution: {integrity: sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==} + engines: {node: '>= 10.12.0'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + + octokit@2.1.0: + resolution: {integrity: sha512-Pxi6uKTjBRZWgAwsw1NgHdRlL+QASCN35OYS7X79o7PtBME0CLXEroZmPtEwlWZbPTP+iDbEy2wCbSOgm0uGIQ==} + engines: {node: '>= 14'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + oniguruma-to-js@0.4.3: + resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==} + + open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + outdent@0.8.0: + resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + package-manager-detector@0.1.0: + resolution: {integrity: sha512-qRwvZgEE7geMY6xPChI3T0qrM0PL4s/AKiLnNVjhg3GdN2/fUUSrpGA5Z8mejMXauT1BS6RJIgWvSGAdqg8NnQ==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + + parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@0.1.10: + resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + + pause-stream@0.0.11: + resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + + pkg-types@1.2.1: + resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + polished@4.3.1: + resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} + engines: {node: '>=10'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss-discard-duplicates@7.0.1: + resolution: {integrity: sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-empty@7.0.0: + resolution: {integrity: sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-merge-rules@7.0.2: + resolution: {integrity: sha512-VAR47UNvRsdrTHLe7TV1CeEtF9SJYR5ukIB9U4GZyZOptgtsS20xSxy+k5wMrI3udST6O1XuIn7cjQkg7sDAAw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-selectors@7.0.2: + resolution: {integrity: sha512-dCzm04wqW1uqLmDZ41XYNBJfjgps3ZugDpogAmJXoCb5oCiTzIX4oPXXKxDpTvWOnKxQKR4EbV4ZawJBLcdXXA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-nested@6.0.1: + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-normalize-whitespace@7.0.0: + resolution: {integrity: sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-selector-parser@6.1.1: + resolution: {integrity: sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-config-standard@7.0.0: + resolution: {integrity: sha512-NgZy4TYupJR6aMMuV/Aqs0ONnVhlFT8PXVkYRskxREq8EUhJHOddVfBxPV6fWpgcASpJSgvvhVLk0CBO5M3Hvw==} + peerDependencies: + prettier: ^2.6.0 || ^3.0.0 + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + engines: {node: '>=14'} + hasBin: true + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + + pretty-bytes@6.1.1: + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} + engines: {node: ^14.13.1 || >=16.0.0} + + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + prr@1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + + ps-tree@1.2.0: + resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} + engines: {node: '>= 0.10'} + hasBin: true + + psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + react-colorful@5.6.1: + resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + react-confetti@6.1.0: + resolution: {integrity: sha512-7Ypx4vz0+g8ECVxr88W9zhcQpbeujJAVqL14ZnXJ3I23mOI9/oBVTQ3dkJhUmB0D6XOtCZEM6N0Gm9PMngkORw==} + engines: {node: '>=10.18'} + peerDependencies: + react: ^16.3.0 || ^17.0.1 || ^18.0.0 + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + recast@0.23.9: + resolution: {integrity: sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==} + engines: {node: '>= 4'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + + regex@4.3.3: + resolution: {integrity: sha512-r/AadFO7owAq1QJVeZ/nq9jNS1vyZt+6t1p/E59B56Rn2GCya+gr1KSyOzNL/er+r+B7phv5jG2xU2Nz1YkmJg==} + + regexp.prototype.flags@1.5.3: + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} + engines: {node: '>= 0.4'} + + regexpu-core@6.1.1: + resolution: {integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==} + engines: {node: '>=4'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.11.1: + resolution: {integrity: sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==} + hasBin: true + + rehype-external-links@3.0.0: + resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==} + + rehype-highlight@7.0.0: + resolution: {integrity: sha512-QtobgRgYoQaK6p1eSr2SD1i61f7bjF2kZHAQHxeCHAuJf7ZUDMvQ7owDq9YTkmar5m5TSUol+2D3bp3KfJf/oA==} + + rehype-katex@7.0.1: + resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} + + rehype-parse@9.0.1: + resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} + + rehype-prism@2.3.2: + resolution: {integrity: sha512-UvLT8kwsR7mPpAGtikypFTWV+Y8RkfoKCynLl+pa2MvrR6u4D72FZlVRkvxWa3ZkfMcWqAWekJ7s2J0GEp0v+Q==} + peerDependencies: + unified: ^10 || ^11 + + rehype-slug@6.0.0: + resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} + + rehype-stringify@10.0.1: + resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} + + remark-breaks@4.0.0: + resolution: {integrity: sha512-IjEjJOkH4FuJvHZVIW0QCDWxcG96kCq7An/KVH2NfJe6rKZU2AsHeB3OEjPNRxi4QC34Xdx7I2KGYn6IpT7gxQ==} + + remark-gfm@4.0.0: + resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} + + remark-math@6.0.0: + resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.1: + resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve.exports@1.1.1: + resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} + engines: {node: '>=10'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + revolt-api@0.7.16: + resolution: {integrity: sha512-Buoc5XQAjAud2GxG210bNHiRne4lOSybuSYoN3FQJXQz1JApFuDx20PPnqJQS2r3/9eWZSgr1HlyBasvzACqTQ==} + + rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rollup@2.79.2: + resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} + engines: {node: '>=10.0.0'} + hasBin: true + + rollup@4.24.0: + resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + rrweb-cssom@0.7.1: + resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} + + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + saxes@5.0.1: + resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} + engines: {node: '>=10'} + + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + seroval-plugins@1.1.1: + resolution: {integrity: sha512-qNSy1+nUj7hsCOon7AO4wdAIo9P0jrzAMp18XhiOzA6/uO5TKtP7ScozVJ8T293oRIvi5wyCHSM4TrJo/c/GJA==} + engines: {node: '>=10'} + peerDependencies: + seroval: ^1.0 + + seroval@1.1.1: + resolution: {integrity: sha512-rqEO6FZk8mv7Hyv4UCj3FD3b6Waqft605TLfsCe/BiaylRpyyMC0b+uA5TJKawX3KzMrdi3wsLbCaLplrQmBvQ==} + engines: {node: '>=10'} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shiki@0.14.7: + resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==} + + shiki@1.22.0: + resolution: {integrity: sha512-/t5LlhNs+UOKQCYBtl5ZsH/Vclz73GIqT2yQsCBygr8L/ppTdmpL4w3kPLoZJbMKVWtoG77Ue1feOjZfDxvMkw==} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sirv@2.0.4: + resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} + engines: {node: '>= 10'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + smob@1.5.0: + resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} + + solid-devtools@0.30.1: + resolution: {integrity: sha512-axpXL4JV1dnGhuei+nSGS8ewGeNkmIgFDsAlO90YyYY5t8wU1R0aYAQtL+I+5KICLKPBvfkzdcFa2br7AV4lAw==} + peerDependencies: + solid-js: ^1.8.0 + solid-start: ^0.3.0 + vite: ^2.2.3 || ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + solid-start: + optional: true + vite: + optional: true + + solid-dnd-directive@0.2.0: + resolution: {integrity: sha512-4aPKidTrwSVBHqeiUPPe218t+HyRp0S4iYNJw7nDsWqP33HHYhAwvAyWVfqlqHBlnA/+A5jdevRvbCOiLV5Qew==} + engines: {node: '>=14.16.0', npm: '>=6.14.8'} + peerDependencies: + solid-js: ^1.0.0 + + solid-floating-ui@0.3.1: + resolution: {integrity: sha512-o/QmGsWPS2Z3KidAxP0nDvN7alI7Kqy0kU+wd85Fz+au5SYcnYm7I6Fk3M60Za35azsPX0U+5fEtqfOuk6Ao0Q==} + engines: {node: '>=10'} + peerDependencies: + '@floating-ui/dom': ^1.5 + solid-js: ^1.8 + + solid-hcaptcha@0.4.0: + resolution: {integrity: sha512-ermYlhU09wPxqNZujVJr6NQI0T/25Ru8rN9a3gGjB83vqpQTapzP3HujmRBDGTF0Ghuy6r0xexhDnOYVTPrxhw==} + peerDependencies: + solid-js: ^1.6.15 || ^1.7.12 + + solid-icons@1.1.0: + resolution: {integrity: sha512-IesTfr/F1ElVwH2E1110s2RPXH4pujKfSs+koT8rwuTAdleO5s26lNSpqJV7D1+QHooJj18mcOiz2PIKs0ic+A==} + peerDependencies: + solid-js: '*' + + solid-jest@0.2.0: + resolution: {integrity: sha512-1ILtAj+z6bh1vTvaDlcT8501vmkzkVZMk2aiexJy+XWTZ+sb9B7IWedvWadIhOwwL97fiW4eMmN6SrbaHjn12A==} + peerDependencies: + babel-preset-solid: ^1.0.0 + + solid-js@1.9.2: + resolution: {integrity: sha512-fe/K03nV+kMFJYhAOE8AIQHcGxB4rMIEoEyrulbtmf217NffbbwBqJnJI4ovt16e+kaIt0czE2WA7mP/pYN9yg==} + + solid-motionone@1.0.2: + resolution: {integrity: sha512-nMdfTZND5FzZSD5gcaSmjjgF7aldMmk4PHC88rUSSdUcrCP/LlVl0xMoy/qncQihgkqHRW0ywewbpE/+ToEibA==} + engines: {node: '>=20', pnpm: '>=9.0.0'} + peerDependencies: + solid-js: ^1.8.0 + + solid-qr-code@0.1.11: + resolution: {integrity: sha512-8TpELeuK6OoPz5TfJaycsna63IivaSr6Y34qU79eYDF+SRTowO9os8gpElNvNe2FFROZuMZpf28jgmn9gV20Eg==} + engines: {node: '>=18'} + peerDependencies: + solid-js: ^1.8.0 + + solid-refresh@0.6.3: + resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} + peerDependencies: + solid-js: ^1.3 + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + split@0.3.3: + resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + + stop-iteration-iterator@1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + + storybook-solidjs-vite@1.0.0-beta.2: + resolution: {integrity: sha512-dD+VMYC5fBBQNesVb+mjB0LOkZIf100SQFbjAt9/sDstNUvc5ce3yZwLYXzgcOc7jcSMkrBu/cZNRzEM4YIAyw==} + engines: {node: ^14.18 || >=16} + + storybook-solidjs@1.0.0-beta.2: + resolution: {integrity: sha512-wXjM/uH29IPjgxlPvQVNTM/7iBFNNzjuOugpk7iM2oy+sZl7K70eBjvOqGgX5v35pNHTaA8Ju3BlLdp+O20abg==} + engines: {node: '>=16.0.0'} + peerDependencies: + babel-preset-solid: ^1.6.6 + solid-js: ^1.6.6 + + storybook@8.3.5: + resolution: {integrity: sha512-hYQVtP2l+3kO8oKDn4fjXXQYxgTRsj/LaV6lUMJH0zt+OhVmDXKJLxmdUP4ieTm0T8wEbSYosFavgPcQZlxRfw==} + hasBin: true + + stream-combiner@0.0.4: + resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-comments@2.0.1: + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + style-to-object@0.3.0: + resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} + + style-to-object@1.0.8: + resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svelte-dnd-action@0.9.11: + resolution: {integrity: sha512-hkuBs8rT0yVD0Xq9p9GxeHN1zYD8r7oZO872VQHg7DJe3cAYwus4WXpx3DNYZiTcLcIOmDw3BVNdKvAl/B6VPg==} + + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + engines: {node: '>=14.0.0'} + hasBin: true + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + engines: {node: ^14.18.0 || >=16.0.0} + + tapable@1.1.3: + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + engines: {node: '>=6'} + + telejson@7.2.0: + resolution: {integrity: sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==} + + temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + + tempy@0.6.0: + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} + + terminal-link@2.1.1: + resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} + engines: {node: '>=8'} + + terser@5.34.1: + resolution: {integrity: sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==} + engines: {node: '>=10'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + throat@6.0.2: + resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.0: + resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} + + tinyglobby@0.2.9: + resolution: {integrity: sha512-8or1+BGEdk1Zkkw2ii16qSS7uVrQJPre5A9o/XkWPATkk23FZh/15BKFxPnlTy6vkljZxLqYCzzBMj30ZrSvjw==} + engines: {node: '>=12.0.0'} + + tinypool@1.0.1: + resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + + tldts-core@6.1.50: + resolution: {integrity: sha512-na2EcZqmdA2iV9zHV7OHQDxxdciEpxrjbkp+aHmZgnZKHzoElLajP59np5/4+sare9fQBfixgvXKx8ev1d7ytw==} + + tldts@6.1.50: + resolution: {integrity: sha512-q9GOap6q3KCsLMdOjXhWU5jVZ8/1dIib898JBRLsN+tBhENpBDcAVQbE0epADOjw11FhQQy9AcbqKGBQPUfTQA==} + hasBin: true + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + + tough-cookie@5.0.0: + resolution: {integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==} + engines: {node: '>=16'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + + tr46@2.1.0: + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + engines: {node: '>=8'} + + tr46@5.0.0: + resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + engines: {node: '>=18'} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + + ts-evaluator@1.2.0: + resolution: {integrity: sha512-ncSGek1p92bj2ifB7s9UBgryHCkU9vwC5d+Lplt12gT9DH+e41X8dMoHRQjIMeAvyG7j9dEnuHmwgOtuRIQL+Q==} + engines: {node: '>=14.19.0'} + peerDependencies: + jsdom: '>=14.x || >=15.x || >=16.x || >=17.x || >=18.x || >=19.x || >=20.x || >=21.x || >=22.x' + typescript: '>=3.2.x || >= 4.x || >= 5.x' + peerDependenciesMeta: + jsdom: + optional: true + + ts-morph@21.0.1: + resolution: {integrity: sha512-dbDtVdEAncKctzrVZ+Nr7kHpHkv+0JDJb2MjjpBaj8bFeCkePU9rHfMklmhuLFnpeq/EJZk2IhStY6NzqgjOkg==} + + ts-pattern@5.0.8: + resolution: {integrity: sha512-aafbuAQOTEeWmA7wtcL94w6I89EgLD7F+IlWkr596wYxeb0oveWDO5dQpv85YP0CGbxXT/qXBIeV6IYLcoZ2uA==} + + tsc-watch@6.2.0: + resolution: {integrity: sha512-2LBhf9kjKXnz7KQ/puLHlozMzzUNHAdYBNMkg3eksQJ9GBAgMg8czznM83T5PmsoUvDnXzfIeQn2lNcIYDr8LA==} + engines: {node: '>=12.12.0'} + hasBin: true + peerDependencies: + typescript: '*' + + tsconfck@3.0.2: + resolution: {integrity: sha512-6lWtFjwuhS3XI4HsX4Zg0izOI3FU/AI9EGVlPEUMDIhvLPMD4wkiof0WCoDgW7qY+Dy198g4d9miAqUHWHFH6Q==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + + tween-functions@1.2.0: + resolution: {integrity: sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typed-emitter@2.1.0: + resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==} + + typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + + typedoc@0.25.13: + resolution: {integrity: sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==} + engines: {node: '>= 16'} + hasBin: true + peerDependencies: + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x + + typescript-eslint@8.8.1: + resolution: {integrity: sha512-R0dsXFt6t4SAFjUSKFjMh4pXDtq04SsFKCVGDP3ZOzNP7itF0jBcZYU4fMsZr4y7O7V7Nc751dDeESbe4PbQMQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - /@babel/plugin-transform-modules-commonjs@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==} - engines: {node: '>=6.9.0'} + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + + ulid@2.3.0: + resolution: {integrity: sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==} + hasBin: true + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + + unist-util-select@5.1.0: + resolution: {integrity: sha512-4A5mfokSHG/rNQ4g7gSbdEs+H586xyd24sdJqF1IWamqrLHvYb+DH48fzxowyOhOfK7YSqX+XlCojAyuuyyT2A==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + + universal-github-app-jwt@1.2.0: + resolution: {integrity: sha512-dncpMpnsKBk0eetwfN8D8OUHGfiDhhJ+mtsbMl+7PfW7mYjiH8LIcqRmYMtzYLgSh47HjfdBtrBwIQ/gizKR3g==} + + universal-user-agent@6.0.1: + resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + unplugin@1.14.1: + resolution: {integrity: sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==} + engines: {node: '>=14.0.0'} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + webpack-sources: ^3 + peerDependenciesMeta: + webpack-sources: + optional: true - /@babel/plugin-transform-modules-systemjs@7.19.6(@babel/core@7.24.7): - resolution: {integrity: sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==} - engines: {node: '>=6.9.0'} + upath@1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + browserslist: '>= 4.21.0' - /@babel/plugin-transform-modules-systemjs@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==} - engines: {node: '>=6.9.0'} + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + v8-to-istanbul@8.1.1: + resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} + engines: {node: '>=10.12.0'} + + validate-html-nesting@1.2.2: + resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite-node@2.1.2: + resolution: {integrity: sha512-HPcGNN5g/7I2OtPjLqgOtCRu/qhVvBxTUD3qzitmL0SrG1cWFzxzhMDWussxSbrRYWqnKf8P2jiNhPMSN+ymsQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + + vite-plugin-inspect@0.8.7: + resolution: {integrity: sha512-/XXou3MVc13A5O9/2Nd6xczjrUwt7ZyI9h8pTnUMkr5SshLcb0PJUOVq2V+XVkdeU4njsqAtmK87THZuO2coGA==} + engines: {node: '>=14'} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + '@nuxt/kit': '*' + vite: ^3.1.0 || ^4.0.0 || ^5.0.0-0 + peerDependenciesMeta: + '@nuxt/kit': + optional: true - /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} - engines: {node: '>=6.9.0'} + vite-plugin-pwa@0.20.5: + resolution: {integrity: sha512-aweuI/6G6n4C5Inn0vwHumElU/UEpNuO+9iZzwPZGTCH87TeZ6YFMrEY6ZUBQdIHHlhTsbMDryFARcSuOdsz9Q==} + engines: {node: '>=16.0.0'} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + '@vite-pwa/assets-generator': ^0.2.6 + vite: ^3.1.0 || ^4.0.0 || ^5.0.0 + workbox-build: ^7.1.0 + workbox-window: ^7.1.0 + peerDependenciesMeta: + '@vite-pwa/assets-generator': + optional: true - /@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} - engines: {node: '>=6.9.0'} + vite-plugin-solid-svg@0.8.1: + resolution: {integrity: sha512-ROGC2ae1eYUCMd+zfJtsbUtuZwsb6DZS0+Sy5/ZXDokOunGi0Ez/cL7OPdsixN3I0/rNYd/3hilo3kpRMAS+IA==} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + solid-js: ^1 + vite: '>=4' - /@babel/plugin-transform-named-capturing-groups-regex@7.19.1(@babel/core@7.24.7): - resolution: {integrity: sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==} - engines: {node: '>=6.9.0'} + vite-plugin-solid@2.10.2: + resolution: {integrity: sha512-AOEtwMe2baBSXMXdo+BUwECC8IFHcKS6WQV/1NEd+Q7vHPap5fmIhLcAzr+DUJ04/KHx/1UBU0l1/GWP+rMAPQ==} peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.19.0(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* + solid-js: ^1.7.2 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + '@testing-library/jest-dom': + optional: true - /@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} - engines: {node: '>=6.9.0'} + vite@5.4.8: + resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true - /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} - engines: {node: '>=6.9.0'} + vitefu@0.2.5: + resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + vite: + optional: true - /@babel/plugin-transform-new-target@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} - engines: {node: '>=6.9.0'} + vitest@2.1.2: + resolution: {integrity: sha512-veNjLizOMkRrJ6xxb+pvxN6/QAWg95mzcRjtmkepXdN87FNfxAss9RKe2far/G9cQpipfgP2taqg0KiWsquj8A==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 2.1.2 + '@vitest/ui': 2.1.2 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + vscode-oniguruma@1.7.0: + resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} + + vscode-textmate@8.0.0: + resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} + + w3c-hr-time@1.0.2: + resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} + deprecated: Use your platform's native performance.now() and performance.timeOrigin. + + w3c-xmlserializer@2.0.0: + resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} + engines: {node: '>=10'} + + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + webidl-conversions@5.0.0: + resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} + engines: {node: '>=8'} + + webidl-conversions@6.1.0: + resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} + engines: {node: '>=10.4'} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + whatwg-encoding@1.0.5: + resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@2.3.0: + resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@14.0.0: + resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} + engines: {node: '>=18'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.24.7): - resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - dev: true + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - /@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - dev: true + whatwg-url@8.7.0: + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} + engines: {node: '>=10'} - /@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) - dev: true + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - /@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) - dev: true + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} - /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-replace-supers': 7.19.1 - transitivePeerDependencies: - - supports-color - dev: true + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} - /@babel/plugin-transform-object-super@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: true + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true - /@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - dev: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true - /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.24.7): - resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: true + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} - /@babel/plugin-transform-optional-chaining@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: true + workbox-background-sync@7.1.0: + resolution: {integrity: sha512-rMbgrzueVWDFcEq1610YyDW71z0oAXLfdRHRQcKw4SGihkfOK0JUEvqWHFwA6rJ+6TClnMIn7KQI5PNN1XQXwQ==} - /@babel/plugin-transform-parameters@7.20.3(@babel/core@7.24.7): - resolution: {integrity: sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + workbox-broadcast-update@7.1.0: + resolution: {integrity: sha512-O36hIfhjej/c5ar95pO67k1GQw0/bw5tKP7CERNgK+JdxBANQhDmIuOXZTNvwb2IHBx9hj2kxvcDyRIh5nzOgQ==} - /@babel/plugin-transform-parameters@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + workbox-build@7.1.1: + resolution: {integrity: sha512-WdkVdC70VMpf5NBCtNbiwdSZeKVuhTEd5PV3mAwpTQCGAB5XbOny1P9egEgNdetv4srAMmMKjvBk4RD58LpooA==} + engines: {node: '>=16.0.0'} - /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.24.7): - resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + workbox-cacheable-response@7.1.0: + resolution: {integrity: sha512-iwsLBll8Hvua3xCuBB9h92+/e0wdsmSVgR2ZlvcfjepZWwhd3osumQB3x9o7flj+FehtWM2VHbZn8UJeBXXo6Q==} - /@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + workbox-core@7.1.0: + resolution: {integrity: sha512-5KB4KOY8rtL31nEF7BfvU7FMzKT4B5TkbYa2tzkS+Peqj0gayMT9SytSFtNzlrvMaWgv6y/yvP9C0IbpFjV30Q==} - /@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: true + workbox-expiration@7.1.0: + resolution: {integrity: sha512-m5DcMY+A63rJlPTbbBNtpJ20i3enkyOtSgYfv/l8h+D6YbbNiA0zKEkCUaMsdDlxggla1oOfRkyqTvl5Ni5KQQ==} - /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + workbox-google-analytics@7.1.0: + resolution: {integrity: sha512-FvE53kBQHfVTcZyczeBVRexhh7JTkyQ8HAvbVY6mXd2n2A7Oyz/9fIwnY406ZcDhvE4NFfKGjW56N4gBiqkrew==} - /@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + workbox-navigation-preload@7.1.0: + resolution: {integrity: sha512-4wyAbo0vNI/X0uWNJhCMKxnPanNyhybsReMGN9QUpaePLTiDpKxPqFxl4oUmBNddPwIXug01eTSLVIFXimRG/A==} - /@babel/plugin-transform-regenerator@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - regenerator-transform: 0.15.1 - dev: true + workbox-precaching@7.1.0: + resolution: {integrity: sha512-LyxzQts+UEpgtmfnolo0hHdNjoB7EoRWcF7EDslt+lQGd0lW4iTvvSe3v5JiIckQSB5KTW5xiCqjFviRKPj1zA==} - /@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - regenerator-transform: 0.15.2 - dev: true + workbox-range-requests@7.1.0: + resolution: {integrity: sha512-m7+O4EHolNs5yb/79CrnwPR/g/PRzMFYEdo01LqwixVnc/sbzNSvKz0d04OE3aMRel1CwAAZQheRsqGDwATgPQ==} - /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + workbox-recipes@7.1.0: + resolution: {integrity: sha512-NRrk4ycFN9BHXJB6WrKiRX3W3w75YNrNrzSX9cEZgFB5ubeGoO8s/SDmOYVrFYp9HMw6sh1Pm3eAY/1gVS8YLg==} - /@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + workbox-routing@7.1.0: + resolution: {integrity: sha512-oOYk+kLriUY2QyHkIilxUlVcFqwduLJB7oRZIENbqPGeBP/3TWHYNNdmGNhz1dvKuw7aqvJ7CQxn27/jprlTdg==} - /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + workbox-strategies@7.1.0: + resolution: {integrity: sha512-/UracPiGhUNehGjRm/tLUQ+9PtWmCbRufWtV0tNrALuf+HZ4F7cmObSEK+E4/Bx1p8Syx2tM+pkIrvtyetdlew==} - /@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + workbox-streams@7.1.0: + resolution: {integrity: sha512-WyHAVxRXBMfysM8ORwiZnI98wvGWTVAq/lOyBjf00pXFvG0mNaVz4Ji+u+fKa/mf1i2SnTfikoYKto4ihHeS6w==} - /@babel/plugin-transform-spread@7.19.0(@babel/core@7.24.7): - resolution: {integrity: sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - dev: true + workbox-sw@7.1.0: + resolution: {integrity: sha512-Hml/9+/njUXBglv3dtZ9WBKHI235AQJyLBV1G7EFmh4/mUdSQuXui80RtjDeVRrXnm/6QWgRUEHG3/YBVbxtsA==} - /@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: true + workbox-window@7.1.0: + resolution: {integrity: sha512-ZHeROyqR+AS5UPzholQRDttLFqGMwP0Np8MKWAdyxsDETxq3qOAyXvqessc3GniohG6e0mAqSQyKOHmT8zPF7g==} - /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} - /@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} - /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.24.7): - resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.24.7): - resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} - engines: {node: '>=6.9.0'} + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true - /@babel/plugin-transform-typeof-symbol@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==} - engines: {node: '>=6.9.0'} + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true - /@babel/plugin-transform-typescript@7.19.1(@babel/core@7.24.7): - resolution: {integrity: sha512-+ILcOU+6mWLlvCwnL920m2Ow3wWx3Wo8n2t5aROQmV55GZt+hOiLvBaa3DNzRjSEHa1aauRs4/YLmkCfFkhhRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.19.0(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: true + xml-name-validator@3.0.0: + resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - /@babel/plugin-transform-typescript@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: true + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} - /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.24.7): - resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - /@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: true + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} - /@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - dev: true + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.19.0(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - dev: true + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} - /@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - dev: true + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} - /@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - dev: true + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} - /@babel/preset-env@7.20.2(@babel/core@7.24.7): - resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.21.0 - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.18.9(@babel/core@7.24.7) - '@babel/plugin-proposal-async-generator-functions': 7.20.1(@babel/core@7.24.7) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-proposal-class-static-block': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.24.7) - '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-proposal-logical-assignment-operators': 7.18.9(@babel/core@7.24.7) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-proposal-object-rest-spread': 7.20.2(@babel/core@7.24.7) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-proposal-optional-chaining': 7.18.9(@babel/core@7.24.7) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-proposal-private-property-in-object': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.24.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-transform-arrow-functions': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-async-to-generator': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-block-scoping': 7.20.2(@babel/core@7.24.7) - '@babel/plugin-transform-classes': 7.20.2(@babel/core@7.24.7) - '@babel/plugin-transform-computed-properties': 7.18.9(@babel/core@7.24.7) - '@babel/plugin-transform-destructuring': 7.20.2(@babel/core@7.24.7) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.24.7) - '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-for-of': 7.18.8(@babel/core@7.24.7) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.24.7) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.24.7) - '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-modules-amd': 7.19.6(@babel/core@7.24.7) - '@babel/plugin-transform-modules-commonjs': 7.19.6(@babel/core@7.24.7) - '@babel/plugin-transform-modules-systemjs': 7.19.6(@babel/core@7.24.7) - '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.19.1(@babel/core@7.24.7) - '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-parameters': 7.20.3(@babel/core@7.24.7) - '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-regenerator': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-spread': 7.19.0(@babel/core@7.24.7) - '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.24.7) - '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.24.7) - '@babel/preset-modules': 0.1.5(@babel/core@7.24.7) - '@babel/types': 7.24.7 - babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.24.7) - babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.24.7) - babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.24.7) - core-js-compat: 3.26.1 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} - /@babel/preset-env@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.24.7 - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-async-generator-functions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-classes': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-destructuring': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-function-name': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-typeof-symbol': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.24.7) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.7) - babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.24.7) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.7) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.7) - core-js-compat: 3.36.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - /@babel/preset-flow@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - '@babel/plugin-transform-flow-strip-types': 7.24.7(@babel/core@7.24.7) - dev: true +snapshots: - /@babel/preset-modules@0.1.5(@babel/core@7.24.7): - resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@adobe/css-tools@4.4.0': {} + + '@ampproject/remapping@2.3.0': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.24.7) - '@babel/types': 7.24.7 - esutils: 2.0.3 - dev: true + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.7): - resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + '@antfu/utils@0.7.10': {} + + '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/types': 7.24.7 - esutils: 2.0.3 - dev: true + ajv: 8.17.1 + json-schema: 0.4.0 + jsonpointer: 5.0.1 + leven: 3.1.0 - /@babel/preset-typescript@7.16.7(@babel/core@7.24.7): - resolution: {integrity: sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/code-frame@7.25.7': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-transform-typescript': 7.19.1(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: true + '@babel/highlight': 7.25.7 + picocolors: 1.1.0 - /@babel/preset-typescript@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/compat-data@7.25.7': {} + + '@babel/core@7.25.7': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.24.7) + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helpers': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /@babel/register@7.24.6(@babel/core@7.24.7): - resolution: {integrity: sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/generator@7.17.7': dependencies: - '@babel/core': 7.24.7 - clone-deep: 4.0.1 - find-cache-dir: 2.1.0 - make-dir: 2.1.0 - pirates: 4.0.6 - source-map-support: 0.5.21 - dev: true + '@babel/types': 7.17.0 + jsesc: 2.5.2 + source-map: 0.5.7 - /@babel/regjsgen@0.8.0: - resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - dev: true + '@babel/generator@7.25.7': + dependencies: + '@babel/types': 7.25.7 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 - /@babel/runtime@7.24.0: - resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==} - engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.25.7': dependencies: - regenerator-runtime: 0.14.1 - dev: true + '@babel/types': 7.25.7 - /@babel/template@7.24.0: - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} - engines: {node: '>=6.9.0'} + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.7': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - dev: true + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 + transitivePeerDependencies: + - supports-color - /@babel/template@7.24.7: - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} - engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.25.7': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - dev: true + '@babel/compat-data': 7.25.7 + '@babel/helper-validator-option': 7.25.7 + browserslist: 4.24.0 + lru-cache: 5.1.1 + semver: 6.3.1 - /@babel/traverse@7.23.2: - resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} - engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.24.7 - '@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.7 - '@babel/types': 7.24.7 - debug: 4.3.4 - globals: 11.12.0 + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-member-expression-to-functions': 7.25.7 + '@babel/helper-optimise-call-expression': 7.25.7 + '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/traverse': 7.25.7 + semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /@babel/traverse@7.24.0: - resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} - engines: {node: '>=6.9.0'} + '@babel/helper-create-regexp-features-plugin@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + regexpu-core: 6.1.1 + semver: 6.3.1 - /@babel/traverse@7.24.7: - resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} - engines: {node: '>=6.9.0'} + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.7)': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - debug: 4.3.4 - globals: 11.12.0 + '@babel/core': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + debug: 4.3.7 + lodash.debounce: 4.0.8 + resolve: 1.22.8 transitivePeerDependencies: - supports-color - dev: true - /@babel/types@7.17.0: - resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} - engines: {node: '>=6.9.0'} + '@babel/helper-environment-visitor@7.24.7': dependencies: - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - dev: true + '@babel/types': 7.25.7 - /@babel/types@7.24.0: - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} - engines: {node: '>=6.9.0'} + '@babel/helper-function-name@7.24.7': dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: true + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 - /@babel/types@7.24.7: - resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} - engines: {node: '>=6.9.0'} + '@babel/helper-hoist-variables@7.24.7': dependencies: - '@babel/helper-string-parser': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - dev: true - - /@bcoe/v8-coverage@0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: true + '@babel/types': 7.25.7 - /@chromatic-com/storybook@1.5.0(react@18.3.1): - resolution: {integrity: sha512-LkLKv7SWu/6kGep1ft2HA1T/cm14wU0zoW71gE4cZRcgUoRQJtyhITFTLHrjqAxz6bVqNgqzQtd5oBZ2nK3L3g==} - engines: {node: '>=16.0.0', yarn: '>=1.22.18'} + '@babel/helper-member-expression-to-functions@7.25.7': dependencies: - chromatic: 11.5.3 - filesize: 10.1.0 - jsonfile: 6.1.0 - react-confetti: 6.1.0(react@18.3.1) - strip-ansi: 7.1.0 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - - '@chromatic-com/cypress' - - '@chromatic-com/playwright' - - react - dev: true + - supports-color - /@clack/core@0.3.4: - resolution: {integrity: sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw==} + '@babel/helper-module-imports@7.18.6': dependencies: - picocolors: 1.0.0 - sisteransi: 1.0.5 - dev: true + '@babel/types': 7.25.7 - /@clack/prompts@0.7.0: - resolution: {integrity: sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA==} + '@babel/helper-module-imports@7.25.7': dependencies: - '@clack/core': 0.3.4 - picocolors: 1.0.0 - sisteransi: 1.0.5 - dev: true - bundledDependencies: - - is-unicode-supported - - /@colors/colors@1.5.0: - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} - requiresBuild: true - dev: true - optional: true + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 + transitivePeerDependencies: + - supports-color - /@csstools/postcss-cascade-layers@4.0.3(postcss@8.4.35): - resolution: {integrity: sha512-RbkQoOH23yGhWVetgBTwFgIOHEyU2tKMN7blTz/YAKKabR6tr9pP7mYS23Q9snFY2hr8WSaV8Le64KdM9BtUSA==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.7)': dependencies: - '@csstools/selector-specificity': 3.0.2(postcss-selector-parser@6.0.15) - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 - dev: true + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-simple-access': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color - /@csstools/selector-specificity@3.0.2(postcss-selector-parser@6.0.15): - resolution: {integrity: sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss-selector-parser: ^6.0.13 + '@babel/helper-optimise-call-expression@7.25.7': dependencies: - postcss-selector-parser: 6.0.15 - dev: true + '@babel/types': 7.25.7 - /@discoveryjs/json-ext@0.5.7: - resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} - engines: {node: '>=10.0.0'} - dev: true + '@babel/helper-plugin-utils@7.25.7': {} - /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.3.1): - resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} - peerDependencies: - react: '>=16.8.0' + '@babel/helper-remap-async-to-generator@7.25.7(@babel/core@7.25.7)': dependencies: - react: 18.3.1 - dev: true - - /@esbuild/aix-ppc64@0.19.12: - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: true - optional: true - - /@esbuild/aix-ppc64@0.20.2: - resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm64@0.19.12: - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm64@0.20.2: - resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.19.12: - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.20.2: - resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.19.12: - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.20.2: - resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.19.12: - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.20.2: - resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.19.12: - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.20.2: - resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.19.12: - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.20.2: - resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.19.12: - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.20.2: - resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.19.12: - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.20.2: - resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.19.12: - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.20.2: - resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-wrap-function': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color - /@esbuild/linux-ia32@0.19.12: - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@babel/helper-replace-supers@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-member-expression-to-functions': 7.25.7 + '@babel/helper-optimise-call-expression': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color - /@esbuild/linux-ia32@0.20.2: - resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@babel/helper-simple-access@7.25.7': + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 + transitivePeerDependencies: + - supports-color - /@esbuild/linux-loong64@0.19.12: - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@babel/helper-skip-transparent-expression-wrappers@7.25.7': + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 + transitivePeerDependencies: + - supports-color - /@esbuild/linux-loong64@0.20.2: - resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@babel/helper-split-export-declaration@7.24.7': + dependencies: + '@babel/types': 7.25.7 - /@esbuild/linux-mips64el@0.19.12: - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@babel/helper-string-parser@7.25.7': {} - /@esbuild/linux-mips64el@0.20.2: - resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@babel/helper-validator-identifier@7.25.7': {} - /@esbuild/linux-ppc64@0.19.12: - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@babel/helper-validator-option@7.25.7': {} - /@esbuild/linux-ppc64@0.20.2: - resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@babel/helper-wrap-function@7.25.7': + dependencies: + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 + transitivePeerDependencies: + - supports-color - /@esbuild/linux-riscv64@0.19.12: - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@babel/helpers@7.25.7': + dependencies: + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 - /@esbuild/linux-riscv64@0.20.2: - resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@babel/highlight@7.25.7': + dependencies: + '@babel/helper-validator-identifier': 7.25.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.0 - /@esbuild/linux-s390x@0.19.12: - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@babel/parser@7.25.7': + dependencies: + '@babel/types': 7.25.7 - /@esbuild/linux-s390x@0.20.2: - resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color - /@esbuild/linux-x64@0.19.12: - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@esbuild/linux-x64@0.20.2: - resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@esbuild/netbsd-x64@0.19.12: - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/plugin-transform-optional-chaining': 7.25.7(@babel/core@7.25.7) + transitivePeerDependencies: + - supports-color - /@esbuild/netbsd-x64@0.20.2: - resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color - /@esbuild/openbsd-x64@0.19.12: - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 - /@esbuild/openbsd-x64@0.20.2: - resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@esbuild/sunos-x64@0.19.12: - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@esbuild/sunos-x64@0.20.2: - resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@esbuild/win32-arm64@0.19.12: - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@esbuild/win32-arm64@0.20.2: - resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@esbuild/win32-ia32@0.19.12: - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@esbuild/win32-ia32@0.20.2: - resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true + '@babel/plugin-syntax-import-assertions@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@esbuild/win32-x64@0.19.12: - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true + '@babel/plugin-syntax-import-attributes@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@esbuild/win32-x64@0.20.2: - resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.7)': dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 - dev: true + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true + '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@eslint-community/regexpp@4.5.0: - resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.7)': dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.20.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@eslint/js@8.57.0: - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@fal-works/esbuild-plugin-global-externals@2.1.2: - resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} - dev: true + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@floating-ui/core@1.6.0: - resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==} + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.7)': dependencies: - '@floating-ui/utils': 0.2.1 - dev: false + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@floating-ui/dom@1.6.3: - resolution: {integrity: sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==} + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.7)': dependencies: - '@floating-ui/core': 1.6.0 - '@floating-ui/utils': 0.2.1 - dev: false + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@floating-ui/utils@0.2.1: - resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} - dev: false + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@fontsource/inter@5.0.17: - resolution: {integrity: sha512-2meBGx1kt7u5LwzGc5Sz5rka6ZDrydg6nT3x6Wkt310vHXUchIywrO8pooWMzZdHYcyFY/cv4lEpJZgMD94bCg==} - dev: false + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@fontsource/jetbrains-mono@5.0.19: - resolution: {integrity: sha512-SdwUuvdfuAvGWRRc4LOFRSmDrpkE+vFUpCtOIOUl1PpXdLfeU//93BZiGf7j/oFGSZJbHAurfux2uLT38/NIjw==} - dev: false + '@babel/plugin-syntax-typescript@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@fontsource/open-sans@5.0.27: - resolution: {integrity: sha512-tFTqx2TE9srmM3pMEHldw0lTglqhKwFX6PVDEL0OF9xNT0x5W9brsezFHhV/U36pQV9So7S0vo4yVpnLzBBQew==} - dev: false + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 - /@hcaptcha/types@1.0.3: - resolution: {integrity: sha512-1mbU6eSGawRrqeahRrOzZo/SVLI6oZ5/azuBpSyVrRRR96CnS3fOVDWfzxpngfxKD0/I9Rwu6c/3ITqD8rXeTQ==} - dev: false + '@babel/plugin-transform-arrow-functions@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} + '@babel/plugin-transform-async-generator-functions@7.25.7(@babel/core@7.25.7)': dependencies: - '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4 - minimatch: 3.1.2 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) + '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color - dev: true - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true - - /@humanwhocodes/object-schema@2.0.2: - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} - dev: true + '@babel/plugin-transform-async-to-generator@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.25.7) + transitivePeerDependencies: + - supports-color - /@isaacs/cliui@8.0.2: - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} + '@babel/plugin-transform-block-scoped-functions@7.25.7(@babel/core@7.25.7)': dependencies: - string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: /strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@istanbuljs/load-nyc-config@1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} + '@babel/plugin-transform-block-scoping@7.25.7(@babel/core@7.25.7)': dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - dev: true + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: true + '@babel/plugin-transform-class-properties@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + transitivePeerDependencies: + - supports-color - /@jest/console@27.5.1: - resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + '@babel/plugin-transform-class-static-block@7.25.7(@babel/core@7.25.7)': dependencies: - '@jest/types': 27.5.1 - '@types/node': 20.12.2 - chalk: 4.1.2 - jest-message-util: 27.5.1 - jest-util: 27.5.1 - slash: 3.0.0 - dev: true + '@babel/core': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) + transitivePeerDependencies: + - supports-color - /@jest/core@27.5.1: - resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + '@babel/plugin-transform-classes@7.25.7(@babel/core@7.25.7)': dependencies: - '@jest/console': 27.5.1 - '@jest/reporters': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.12.2 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.8.1 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 27.5.1 - jest-config: 27.5.1 - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-resolve-dependencies: 27.5.1 - jest-runner: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - jest-watcher: 27.5.1 - micromatch: 4.0.5 - rimraf: 3.0.2 - slash: 3.0.0 - strip-ansi: 6.0.1 + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.7) + '@babel/traverse': 7.25.7 + globals: 11.12.0 transitivePeerDependencies: - - bufferutil - - canvas - supports-color - - ts-node - - utf-8-validate - dev: true - /@jest/environment@27.5.1: - resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + '@babel/plugin-transform-computed-properties@7.25.7(@babel/core@7.25.7)': dependencies: - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.12.2 - jest-mock: 27.5.1 - dev: true + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/template': 7.25.7 - /@jest/fake-timers@27.5.1: - resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + '@babel/plugin-transform-destructuring@7.25.7(@babel/core@7.25.7)': dependencies: - '@jest/types': 27.5.1 - '@sinonjs/fake-timers': 8.1.0 - '@types/node': 20.12.2 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-util: 27.5.1 - dev: true + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@jest/globals@27.5.1: - resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + '@babel/plugin-transform-dotall-regex@7.25.7(@babel/core@7.25.7)': dependencies: - '@jest/environment': 27.5.1 - '@jest/types': 27.5.1 - expect: 27.5.1 - dev: true + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 - /@jest/reporters@27.5.1: - resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + '@babel/plugin-transform-duplicate-keys@7.25.7(@babel/core@7.25.7)': dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.12.2 - chalk: 4.1.2 - collect-v8-coverage: 1.0.1 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 5.2.1 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 - jest-haste-map: 27.5.1 - jest-resolve: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - slash: 3.0.0 - source-map: 0.6.1 - string-length: 4.0.2 - terminal-link: 2.1.1 - v8-to-istanbul: 8.1.1 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-dynamic-import@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.7) + + '@babel/plugin-transform-exponentiation-operator@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 transitivePeerDependencies: - supports-color - dev: true - /@jest/schemas@29.6.3: - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@babel/plugin-transform-export-namespace-from@7.25.7(@babel/core@7.25.7)': dependencies: - '@sinclair/typebox': 0.27.8 - dev: true + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.7) - /@jest/source-map@27.5.1: - resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + '@babel/plugin-transform-for-of@7.25.7(@babel/core@7.25.7)': dependencies: - callsites: 3.1.0 - graceful-fs: 4.2.11 - source-map: 0.6.1 - dev: true + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + transitivePeerDependencies: + - supports-color - /@jest/test-result@27.5.1: - resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + '@babel/plugin-transform-function-name@7.25.7(@babel/core@7.25.7)': dependencies: - '@jest/console': 27.5.1 - '@jest/types': 27.5.1 - '@types/istanbul-lib-coverage': 2.0.4 - collect-v8-coverage: 1.0.1 - dev: true + '@babel/core': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color - /@jest/test-sequencer@27.5.1: - resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + '@babel/plugin-transform-json-strings@7.25.7(@babel/core@7.25.7)': dependencies: - '@jest/test-result': 27.5.1 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-runtime: 27.5.1 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) + + '@babel/plugin-transform-literals@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-logical-assignment-operators@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) + + '@babel/plugin-transform-member-expression-literals@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-modules-amd@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 transitivePeerDependencies: - supports-color - dev: true - /@jest/transform@27.5.1: - resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + '@babel/plugin-transform-modules-commonjs@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.0 - '@jest/types': 27.5.1 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 1.9.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-regex-util: 27.5.1 - jest-util: 27.5.1 - micromatch: 4.0.5 - pirates: 4.0.5 - slash: 3.0.0 - source-map: 0.6.1 - write-file-atomic: 3.0.3 + '@babel/core': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-simple-access': 7.25.7 transitivePeerDependencies: - supports-color - dev: true - /@jest/types@27.5.1: - resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + '@babel/plugin-transform-modules-systemjs@7.25.7(@babel/core@7.25.7)': dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 20.12.2 - '@types/yargs': 16.0.4 - chalk: 4.1.2 - dev: true + '@babel/core': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color - /@jridgewell/gen-mapping@0.3.5: - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} + '@babel/plugin-transform-modules-umd@7.25.7(@babel/core@7.25.7)': dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 - dev: true - - /@jridgewell/resolve-uri@3.1.2: - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - dev: true + '@babel/core': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + transitivePeerDependencies: + - supports-color - /@jridgewell/set-array@1.2.1: - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - dev: true + '@babel/plugin-transform-named-capturing-groups-regex@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 - /@jridgewell/source-map@0.3.6: - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + '@babel/plugin-transform-new-target@7.25.7(@babel/core@7.25.7)': dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - dev: true + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true + '@babel/plugin-transform-nullish-coalescing-operator@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) - /@jridgewell/trace-mapping@0.3.25: - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@babel/plugin-transform-numeric-separator@7.25.7(@babel/core@7.25.7)': dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) - /@material-design-icons/svg@0.14.13: - resolution: {integrity: sha512-nCExGZOtoLoFeeqShEOM4XA9DkkLzLlQdk/ZxHxps0//dz6e1Lw3fvQbZ2X/+0Dz2O+udiEukfZ4Nd4KpHg8aA==} - dev: false + '@babel/plugin-transform-object-rest-spread@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.25.7) - /@material/material-color-utilities@0.2.7: - resolution: {integrity: sha512-0FCeqG6WvK4/Cc06F/xXMd/pv4FeisI0c1tUpBbfhA2n9Y8eZEv4Karjbmf2ZqQCPUWMrGp8A571tCjizxoTiQ==} - dev: false + '@babel/plugin-transform-object-super@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.7) + transitivePeerDependencies: + - supports-color - /@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==} - peerDependencies: - '@types/react': '>=16' - react: '>=16' + '@babel/plugin-transform-optional-catch-binding@7.25.7(@babel/core@7.25.7)': dependencies: - '@types/mdx': 2.0.13 - '@types/react': 18.3.3 - react: 18.3.1 - dev: true + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) - /@minht11/solid-virtual-container@0.2.1(solid-js@1.8.15): - resolution: {integrity: sha512-HvQWx1uE5NWwx9WsN4waFtmyOjhZKMA/3vBf+j3zGsRfi556LCUk4oOmqZcOvIB5nEpHezvuZ8oUlwxigdO3Xg==} - peerDependencies: - solid-js: '>= 1.0.0' + '@babel/plugin-transform-optional-chaining@7.25.7(@babel/core@7.25.7)': dependencies: - solid-js: 1.8.15 - dev: false + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) + transitivePeerDependencies: + - supports-color - /@motionone/animation@10.17.0: - resolution: {integrity: sha512-ANfIN9+iq1kGgsZxs+Nz96uiNcPLGTXwfNo2Xz/fcJXniPYpaz/Uyrfa+7I5BPLxCP82sh7quVDudf1GABqHbg==} + '@babel/plugin-transform-parameters@7.25.7(@babel/core@7.25.7)': dependencies: - '@motionone/easing': 10.17.0 - '@motionone/types': 10.17.0 - '@motionone/utils': 10.17.0 - tslib: 2.6.2 - dev: false + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@motionone/dom@10.17.0: - resolution: {integrity: sha512-cMm33swRlCX/qOPHWGbIlCl0K9Uwi6X5RiL8Ma6OrlJ/TP7Q+Np5GE4xcZkFptysFjMTi4zcZzpnNQGQ5D6M0Q==} + '@babel/plugin-transform-private-methods@7.25.7(@babel/core@7.25.7)': dependencies: - '@motionone/animation': 10.17.0 - '@motionone/generators': 10.17.0 - '@motionone/types': 10.17.0 - '@motionone/utils': 10.17.0 - hey-listen: 1.0.8 - tslib: 2.6.2 - dev: false + '@babel/core': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + transitivePeerDependencies: + - supports-color - /@motionone/easing@10.17.0: - resolution: {integrity: sha512-Bxe2wSuLu/qxqW4rBFS5m9tMLOw+QBh8v5A7Z5k4Ul4sTj5jAOfZG5R0bn5ywmk+Fs92Ij1feZ5pmC4TeXA8Tg==} + '@babel/plugin-transform-private-property-in-object@7.25.7(@babel/core@7.25.7)': dependencies: - '@motionone/utils': 10.17.0 - tslib: 2.6.2 - dev: false + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) + transitivePeerDependencies: + - supports-color - /@motionone/generators@10.17.0: - resolution: {integrity: sha512-T6Uo5bDHrZWhIfxG/2Aut7qyWQyJIWehk6OB4qNvr/jwA/SRmixwbd7SOrxZi1z5rH3LIeFFBKK1xHnSbGPZSQ==} + '@babel/plugin-transform-property-literals@7.25.7(@babel/core@7.25.7)': dependencies: - '@motionone/types': 10.17.0 - '@motionone/utils': 10.17.0 - tslib: 2.6.2 - dev: false + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@motionone/solid@10.16.4(solid-js@1.8.15): - resolution: {integrity: sha512-xS3vDhWgTB7xdSYnOTs69Ai09WWjuG6bbz2E+NjP7DswD3X2jLZNNTFmf8GTGhj7UeFHiZgtERIjvpGgZTuEiQ==} - deprecated: Motion One for Solid is deprecated. Use solid-motionone instead https://github.com/solidjs-community/solid-motionone - peerDependencies: - solid-js: ^1.5.0 + '@babel/plugin-transform-regenerator@7.25.7(@babel/core@7.25.7)': dependencies: - '@motionone/dom': 10.17.0 - '@motionone/utils': 10.17.0 - '@solid-primitives/props': 3.1.11(solid-js@1.8.15) - '@solid-primitives/refs': 1.0.8(solid-js@1.8.15) - '@solid-primitives/transition-group': 1.0.5(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + regenerator-transform: 0.15.2 - /@motionone/types@10.17.0: - resolution: {integrity: sha512-EgeeqOZVdRUTEHq95Z3t8Rsirc7chN5xFAPMYFobx8TPubkEfRSm5xihmMUkbaR2ErKJTUw3347QDPTHIW12IA==} - dev: false + '@babel/plugin-transform-reserved-words@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@motionone/utils@10.17.0: - resolution: {integrity: sha512-bGwrki4896apMWIj9yp5rAS2m0xyhxblg6gTB/leWDPt+pb410W8lYWsxyurX+DH+gO1zsQsfx2su/c1/LtTpg==} + '@babel/plugin-transform-shorthand-properties@7.25.7(@babel/core@7.25.7)': dependencies: - '@motionone/types': 10.17.0 - hey-listen: 1.0.8 - tslib: 2.6.2 - dev: false + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - /@mxssfd/typedoc-theme@1.1.3(typedoc@0.25.1): - resolution: {integrity: sha512-/yP5rqhvibMpzXpmw0YLLRCpoj3uVWWlwyJseZXzGxTfiA6/fd1uubUqNoQAi2U19atMDonq8mQc+hlVctrX4g==} - engines: {node: '>= 14'} - peerDependencies: - typedoc: ^0.25.1 + '@babel/plugin-transform-spread@7.25.7(@babel/core@7.25.7)': dependencies: - typedoc: 0.25.1(typescript@5.4.2) - dev: true + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-template-literals@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-typeof-symbol@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-typescript@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.25.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-unicode-escapes@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-unicode-property-regex@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-unicode-regex@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-unicode-sets-regex@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/preset-env@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/compat-data': 7.25.7 + '@babel/core': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-validator-option': 7.25.7 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-import-assertions': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-syntax-import-attributes': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.7) + '@babel/plugin-transform-arrow-functions': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-async-generator-functions': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-async-to-generator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-block-scoped-functions': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-block-scoping': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-class-properties': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-class-static-block': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-classes': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-computed-properties': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-destructuring': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-dotall-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-duplicate-keys': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-dynamic-import': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-exponentiation-operator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-export-namespace-from': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-for-of': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-function-name': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-json-strings': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-literals': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-logical-assignment-operators': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-member-expression-literals': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-modules-amd': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-modules-commonjs': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-modules-systemjs': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-modules-umd': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-new-target': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-numeric-separator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-object-rest-spread': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-object-super': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-optional-catch-binding': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-optional-chaining': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-private-methods': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-private-property-in-object': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-property-literals': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-regenerator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-reserved-words': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-shorthand-properties': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-spread': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-sticky-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-template-literals': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-typeof-symbol': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-unicode-escapes': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-unicode-property-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-unicode-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-unicode-sets-regex': 7.25.7(@babel/core@7.25.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.7) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.7) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.7) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.7) + core-js-compat: 3.38.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color - /@ndelangen/get-tarball@3.0.9: - resolution: {integrity: sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==} + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.7)': dependencies: - gunzip-maybe: 1.4.2 - pump: 3.0.0 - tar-fs: 2.1.1 - dev: true + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/types': 7.25.7 + esutils: 2.0.3 - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@babel/preset-typescript@7.16.7(@babel/core@7.25.7)': dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-validator-option': 7.25.7 + '@babel/plugin-transform-typescript': 7.25.7(@babel/core@7.25.7) + transitivePeerDependencies: + - supports-color - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true + '@babel/runtime@7.25.7': + dependencies: + regenerator-runtime: 0.14.1 - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@babel/template@7.25.7': dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.13.0 - dev: true + '@babel/code-frame': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 - /@nothing-but/utils@0.12.1: - resolution: {integrity: sha512-1qZU1Q5El0IjE7JT/ucvJNzdr2hL3W8Rm27xNf1p6gb3Nw8pGnZmxp6/GEW9h+I1k1cICxXNq25hBwknTQ7yhg==} - dev: false + '@babel/traverse@7.23.2': + dependencies: + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 + debug: 4.3.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color - /@octokit/app@13.1.8: - resolution: {integrity: sha512-bCncePMguVyFpdBbnceFKfmPOuUD94T189GuQ0l00ZcQ+mX4hyPqnaWJlsXE2HSdA71eV7p8GPDZ+ErplTkzow==} - engines: {node: '>= 14'} + '@babel/traverse@7.25.7': dependencies: - '@octokit/auth-app': 4.0.13 - '@octokit/auth-unauthenticated': 3.0.5 - '@octokit/core': 4.2.4 - '@octokit/oauth-app': 4.2.4 - '@octokit/plugin-paginate-rest': 6.1.2(@octokit/core@4.2.4) - '@octokit/types': 9.3.2 - '@octokit/webhooks': 10.9.2 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 + debug: 4.3.7 + globals: 11.12.0 transitivePeerDependencies: - - encoding - dev: false + - supports-color - /@octokit/auth-app@4.0.13: - resolution: {integrity: sha512-NBQkmR/Zsc+8fWcVIFrwDgNXS7f4XDrkd9LHdi9DPQw1NdGHLviLzRO2ZBwTtepnwHXW5VTrVU9eFGijMUqllg==} - engines: {node: '>= 14'} + '@babel/types@7.17.0': dependencies: - '@octokit/auth-oauth-app': 5.0.6 - '@octokit/auth-oauth-user': 2.1.2 - '@octokit/request': 6.2.8 - '@octokit/request-error': 3.0.3 - '@octokit/types': 9.3.2 - deprecation: 2.3.1 - lru-cache: 9.1.2 - universal-github-app-jwt: 1.1.2 - universal-user-agent: 6.0.1 + '@babel/helper-validator-identifier': 7.25.7 + to-fast-properties: 2.0.0 + + '@babel/types@7.25.7': + dependencies: + '@babel/helper-string-parser': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + to-fast-properties: 2.0.0 + + '@bcoe/v8-coverage@0.2.3': {} + + '@chromatic-com/storybook@2.0.2(react@18.3.1)': + dependencies: + chromatic: 11.12.0 + filesize: 10.1.6 + jsonfile: 6.1.0 + react-confetti: 6.1.0(react@18.3.1) + strip-ansi: 7.1.0 transitivePeerDependencies: - - encoding - dev: false + - '@chromatic-com/cypress' + - '@chromatic-com/playwright' + - react + + '@clack/core@0.3.4': + dependencies: + picocolors: 1.1.0 + sisteransi: 1.0.5 + + '@clack/prompts@0.7.0': + dependencies: + '@clack/core': 0.3.4 + picocolors: 1.1.0 + sisteransi: 1.0.5 + + '@csstools/postcss-cascade-layers@4.0.6(postcss@8.4.47)': + dependencies: + '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.1) + postcss: 8.4.47 + postcss-selector-parser: 6.1.1 + + '@csstools/selector-specificity@3.1.1(postcss-selector-parser@6.1.1)': + dependencies: + postcss-selector-parser: 6.1.1 + + '@esbuild/aix-ppc64@0.20.2': + optional: true + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/aix-ppc64@0.23.1': + optional: true + + '@esbuild/android-arm64@0.20.2': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.23.1': + optional: true + + '@esbuild/android-arm@0.20.2': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-arm@0.23.1': + optional: true + + '@esbuild/android-x64@0.20.2': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/android-x64@0.23.1': + optional: true + + '@esbuild/darwin-arm64@0.20.2': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.23.1': + optional: true + + '@esbuild/darwin-x64@0.20.2': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.23.1': + optional: true + + '@esbuild/freebsd-arm64@0.20.2': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.23.1': + optional: true + + '@esbuild/freebsd-x64@0.20.2': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.23.1': + optional: true + + '@esbuild/linux-arm64@0.20.2': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.23.1': + optional: true + + '@esbuild/linux-arm@0.20.2': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-arm@0.23.1': + optional: true + + '@esbuild/linux-ia32@0.20.2': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.23.1': + optional: true + + '@esbuild/linux-loong64@0.20.2': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.23.1': + optional: true + + '@esbuild/linux-mips64el@0.20.2': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.23.1': + optional: true + + '@esbuild/linux-ppc64@0.20.2': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.23.1': + optional: true + + '@esbuild/linux-riscv64@0.20.2': + optional: true - /@octokit/auth-oauth-app@5.0.6: - resolution: {integrity: sha512-SxyfIBfeFcWd9Z/m1xa4LENTQ3l1y6Nrg31k2Dcb1jS5ov7pmwMJZ6OGX8q3K9slRgVpeAjNA1ipOAMHkieqyw==} - engines: {node: '>= 14'} - dependencies: - '@octokit/auth-oauth-device': 4.0.5 - '@octokit/auth-oauth-user': 2.1.2 - '@octokit/request': 6.2.8 - '@octokit/types': 9.3.2 - '@types/btoa-lite': 1.0.2 - btoa-lite: 1.0.0 - universal-user-agent: 6.0.1 - transitivePeerDependencies: - - encoding - dev: false + '@esbuild/linux-riscv64@0.21.5': + optional: true - /@octokit/auth-oauth-device@4.0.5: - resolution: {integrity: sha512-XyhoWRTzf2ZX0aZ52a6Ew5S5VBAfwwx1QnC2Np6Et3MWQpZjlREIcbcvVZtkNuXp6Z9EeiSLSDUqm3C+aMEHzQ==} - engines: {node: '>= 14'} - dependencies: - '@octokit/oauth-methods': 2.0.6 - '@octokit/request': 6.2.8 - '@octokit/types': 9.3.2 - universal-user-agent: 6.0.1 - transitivePeerDependencies: - - encoding - dev: false + '@esbuild/linux-riscv64@0.23.1': + optional: true - /@octokit/auth-oauth-user@2.1.2: - resolution: {integrity: sha512-kkRqNmFe7s5GQcojE3nSlF+AzYPpPv7kvP/xYEnE57584pixaFBH8Vovt+w5Y3E4zWUEOxjdLItmBTFAWECPAg==} - engines: {node: '>= 14'} - dependencies: - '@octokit/auth-oauth-device': 4.0.5 - '@octokit/oauth-methods': 2.0.6 - '@octokit/request': 6.2.8 - '@octokit/types': 9.3.2 - btoa-lite: 1.0.0 - universal-user-agent: 6.0.1 - transitivePeerDependencies: - - encoding - dev: false + '@esbuild/linux-s390x@0.20.2': + optional: true - /@octokit/auth-token@3.0.4: - resolution: {integrity: sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==} - engines: {node: '>= 14'} - dev: false + '@esbuild/linux-s390x@0.21.5': + optional: true - /@octokit/auth-unauthenticated@3.0.5: - resolution: {integrity: sha512-yH2GPFcjrTvDWPwJWWCh0tPPtTL5SMgivgKPA+6v/XmYN6hGQkAto8JtZibSKOpf8ipmeYhLNWQ2UgW0GYILCw==} - engines: {node: '>= 14'} - dependencies: - '@octokit/request-error': 3.0.3 - '@octokit/types': 9.3.2 - dev: false + '@esbuild/linux-s390x@0.23.1': + optional: true - /@octokit/core@4.2.4: - resolution: {integrity: sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==} - engines: {node: '>= 14'} - dependencies: - '@octokit/auth-token': 3.0.4 - '@octokit/graphql': 5.0.6 - '@octokit/request': 6.2.8 - '@octokit/request-error': 3.0.3 - '@octokit/types': 9.3.2 - before-after-hook: 2.2.3 - universal-user-agent: 6.0.1 - transitivePeerDependencies: - - encoding - dev: false + '@esbuild/linux-x64@0.20.2': + optional: true - /@octokit/endpoint@7.0.6: - resolution: {integrity: sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==} - engines: {node: '>= 14'} - dependencies: - '@octokit/types': 9.3.2 - is-plain-object: 5.0.0 - universal-user-agent: 6.0.1 - dev: false + '@esbuild/linux-x64@0.21.5': + optional: true - /@octokit/graphql@5.0.6: - resolution: {integrity: sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==} - engines: {node: '>= 14'} - dependencies: - '@octokit/request': 6.2.8 - '@octokit/types': 9.3.2 - universal-user-agent: 6.0.1 - transitivePeerDependencies: - - encoding - dev: false + '@esbuild/linux-x64@0.23.1': + optional: true - /@octokit/oauth-app@4.2.4: - resolution: {integrity: sha512-iuOVFrmm5ZKNavRtYu5bZTtmlKLc5uVgpqTfMEqYYf2OkieV6VdxKZAb5qLVdEPL8LU2lMWcGpavPBV835cgoA==} - engines: {node: '>= 14'} - dependencies: - '@octokit/auth-oauth-app': 5.0.6 - '@octokit/auth-oauth-user': 2.1.2 - '@octokit/auth-unauthenticated': 3.0.5 - '@octokit/core': 4.2.4 - '@octokit/oauth-authorization-url': 5.0.0 - '@octokit/oauth-methods': 2.0.6 - '@types/aws-lambda': 8.10.136 - fromentries: 1.3.2 - universal-user-agent: 6.0.1 - transitivePeerDependencies: - - encoding - dev: false + '@esbuild/netbsd-x64@0.20.2': + optional: true - /@octokit/oauth-authorization-url@5.0.0: - resolution: {integrity: sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg==} - engines: {node: '>= 14'} - dev: false + '@esbuild/netbsd-x64@0.21.5': + optional: true - /@octokit/oauth-methods@2.0.6: - resolution: {integrity: sha512-l9Uml2iGN2aTWLZcm8hV+neBiFXAQ9+3sKiQe/sgumHlL6HDg0AQ8/l16xX/5jJvfxueqTW5CWbzd0MjnlfHZw==} - engines: {node: '>= 14'} - dependencies: - '@octokit/oauth-authorization-url': 5.0.0 - '@octokit/request': 6.2.8 - '@octokit/request-error': 3.0.3 - '@octokit/types': 9.3.2 - btoa-lite: 1.0.0 - transitivePeerDependencies: - - encoding - dev: false + '@esbuild/netbsd-x64@0.23.1': + optional: true - /@octokit/openapi-types@18.1.1: - resolution: {integrity: sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==} - dev: false + '@esbuild/openbsd-arm64@0.23.1': + optional: true - /@octokit/plugin-paginate-rest@6.1.2(@octokit/core@4.2.4): - resolution: {integrity: sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==} - engines: {node: '>= 14'} - peerDependencies: - '@octokit/core': '>=4' - dependencies: - '@octokit/core': 4.2.4 - '@octokit/tsconfig': 1.0.2 - '@octokit/types': 9.3.2 - dev: false + '@esbuild/openbsd-x64@0.20.2': + optional: true - /@octokit/plugin-rest-endpoint-methods@7.2.3(@octokit/core@4.2.4): - resolution: {integrity: sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==} - engines: {node: '>= 14'} - peerDependencies: - '@octokit/core': '>=3' - dependencies: - '@octokit/core': 4.2.4 - '@octokit/types': 10.0.0 - dev: false + '@esbuild/openbsd-x64@0.21.5': + optional: true - /@octokit/plugin-retry@4.1.6(@octokit/core@4.2.4): - resolution: {integrity: sha512-obkYzIgEC75r8+9Pnfiiqy3y/x1bc3QLE5B7qvv9wi9Kj0R5tGQFC6QMBg1154WQ9lAVypuQDGyp3hNpp15gQQ==} - engines: {node: '>= 14'} - peerDependencies: - '@octokit/core': '>=3' - dependencies: - '@octokit/core': 4.2.4 - '@octokit/types': 9.3.2 - bottleneck: 2.19.5 - dev: false + '@esbuild/openbsd-x64@0.23.1': + optional: true - /@octokit/plugin-throttling@5.2.3(@octokit/core@4.2.4): - resolution: {integrity: sha512-C9CFg9mrf6cugneKiaI841iG8DOv6P5XXkjmiNNut+swePxQ7RWEdAZRp5rJoE1hjsIqiYcKa/ZkOQ+ujPI39Q==} - engines: {node: '>= 14'} - peerDependencies: - '@octokit/core': ^4.0.0 - dependencies: - '@octokit/core': 4.2.4 - '@octokit/types': 9.3.2 - bottleneck: 2.19.5 - dev: false + '@esbuild/sunos-x64@0.20.2': + optional: true - /@octokit/request-error@3.0.3: - resolution: {integrity: sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==} - engines: {node: '>= 14'} - dependencies: - '@octokit/types': 9.3.2 - deprecation: 2.3.1 - once: 1.4.0 - dev: false + '@esbuild/sunos-x64@0.21.5': + optional: true - /@octokit/request@6.2.8: - resolution: {integrity: sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==} - engines: {node: '>= 14'} - dependencies: - '@octokit/endpoint': 7.0.6 - '@octokit/request-error': 3.0.3 - '@octokit/types': 9.3.2 - is-plain-object: 5.0.0 - node-fetch: 2.7.0 - universal-user-agent: 6.0.1 - transitivePeerDependencies: - - encoding - dev: false + '@esbuild/sunos-x64@0.23.1': + optional: true - /@octokit/tsconfig@1.0.2: - resolution: {integrity: sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==} - dev: false + '@esbuild/win32-arm64@0.20.2': + optional: true - /@octokit/types@10.0.0: - resolution: {integrity: sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==} - dependencies: - '@octokit/openapi-types': 18.1.1 - dev: false + '@esbuild/win32-arm64@0.21.5': + optional: true - /@octokit/types@9.3.2: - resolution: {integrity: sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==} - dependencies: - '@octokit/openapi-types': 18.1.1 - dev: false + '@esbuild/win32-arm64@0.23.1': + optional: true - /@octokit/webhooks-methods@3.0.3: - resolution: {integrity: sha512-2vM+DCNTJ5vL62O5LagMru6XnYhV4fJslK+5YUkTa6rWlW2S+Tqs1lF9Wr9OGqHfVwpBj3TeztWfVON/eUoW1Q==} - engines: {node: '>= 14'} - dev: false + '@esbuild/win32-ia32@0.20.2': + optional: true - /@octokit/webhooks-types@6.11.0: - resolution: {integrity: sha512-AanzbulOHljrku1NGfafxdpTCfw2ENaWzH01N2vqQM+cUFbk868Cgh0xylz0JIM9BoKbfI++bdD6EYX0Q/UTEw==} - dev: false + '@esbuild/win32-ia32@0.21.5': + optional: true - /@octokit/webhooks@10.9.2: - resolution: {integrity: sha512-hFVF/szz4l/Y/GQdKxNmQjUke0XJXK986p+ucIlubTGVPVtVtup5G1jarQfvCMBs9Fvlf9dvH8K83E4lefmofQ==} - engines: {node: '>= 14'} + '@esbuild/win32-ia32@0.23.1': + optional: true + + '@esbuild/win32-x64@0.20.2': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@esbuild/win32-x64@0.23.1': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': dependencies: - '@octokit/request-error': 3.0.3 - '@octokit/webhooks-methods': 3.0.3 - '@octokit/webhooks-types': 6.11.0 - aggregate-error: 3.1.0 - dev: false + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 - /@pandacss/config@0.35.0: - resolution: {integrity: sha512-bCH6do+yDIOzJQi58D++wSR0Zhcrm/UaOxbTSqW6D/nLly1v+idbBEkG4h7iZVTnP0t1SIsmi0GASbhIsMtjtA==} + '@eslint-community/eslint-utils@4.4.0(eslint@9.12.0)': dependencies: - '@pandacss/logger': 0.35.0 - '@pandacss/preset-base': 0.35.0 - '@pandacss/preset-panda': 0.35.0 - '@pandacss/shared': 0.35.0 - '@pandacss/types': 0.35.0 - bundle-n-require: 1.1.1 - escalade: 3.1.2 - merge-anything: 5.1.7 - microdiff: 1.3.2 - typescript: 5.3.3 - dev: true - - /@pandacss/core@0.35.0: - resolution: {integrity: sha512-v4kbXbE+333newADA0TY/NVJCYbdxbq1y9UswYewu9c+2SQJCKnBucqOJ9FUn3nUUHVrzjDS5c72qo/WqjCtng==} - dependencies: - '@csstools/postcss-cascade-layers': 4.0.3(postcss@8.4.35) - '@pandacss/is-valid-prop': 0.35.0 - '@pandacss/logger': 0.35.0 - '@pandacss/shared': 0.35.0 - '@pandacss/token-dictionary': 0.35.0 - '@pandacss/types': 0.35.0 - browserslist: 4.23.0 - hookable: 5.5.3 - lightningcss: 1.23.0 - lodash.merge: 4.6.2 - outdent: 0.8.0 - postcss: 8.4.35 - postcss-discard-duplicates: 6.0.1(postcss@8.4.35) - postcss-discard-empty: 6.0.1(postcss@8.4.35) - postcss-merge-rules: 6.0.3(postcss@8.4.35) - postcss-minify-selectors: 6.0.2(postcss@8.4.35) - postcss-nested: 6.0.1(postcss@8.4.35) - postcss-normalize-whitespace: 6.0.1(postcss@8.4.35) - postcss-selector-parser: 6.0.15 - ts-pattern: 5.0.8 - dev: true + eslint: 9.12.0 + eslint-visitor-keys: 3.4.3 - /@pandacss/dev@0.35.0(jsdom@24.0.0)(typescript@5.4.2): - resolution: {integrity: sha512-mJiGMCmwFuHbvcnBZvwRpgrlM5JZYRrGgtVFiv7ulaXUW000JZwGGWyY6tO56cGeEl9i9JV4yutLSwQSz2AxMg==} - hasBin: true + '@eslint-community/regexpp@4.11.1': {} + + '@eslint/config-array@0.18.0': dependencies: - '@clack/prompts': 0.7.0 - '@pandacss/config': 0.35.0 - '@pandacss/logger': 0.35.0 - '@pandacss/node': 0.35.0(jsdom@24.0.0)(typescript@5.4.2) - '@pandacss/postcss': 0.35.0(jsdom@24.0.0)(typescript@5.4.2) - '@pandacss/preset-panda': 0.35.0 - '@pandacss/shared': 0.35.0 - '@pandacss/token-dictionary': 0.35.0 - '@pandacss/types': 0.35.0 - cac: 6.7.14 + '@eslint/object-schema': 2.1.4 + debug: 4.3.7 + minimatch: 3.1.2 transitivePeerDependencies: - - jsdom - - typescript - dev: true + - supports-color - /@pandacss/extractor@0.35.0(jsdom@24.0.0)(typescript@5.4.2): - resolution: {integrity: sha512-FruYUwxq3w510zprLYYdhpadO4CKbtSnyKJq+R2eHIEqv8K8pNbAMENSnvp/N5zyZ38431GqGO3kOr9SLVZX+A==} + '@eslint/core@0.6.0': {} + + '@eslint/eslintrc@2.1.4': dependencies: - '@pandacss/shared': 0.35.0 - ts-evaluator: 1.2.0(jsdom@24.0.0)(typescript@5.4.2) - ts-morph: 21.0.1 + ajv: 6.12.6 + debug: 4.3.7 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 transitivePeerDependencies: - - jsdom - - typescript - dev: true + - supports-color - /@pandacss/generator@0.35.0: - resolution: {integrity: sha512-bfq78jxwZ41t7OFM4/V7qtL9CjVhlk9ZKxqQZHvca2Qb++gjZ1RzrHoU0L1tasqZkSLK9TDAo7xuRrjY0QWzDw==} + '@eslint/eslintrc@3.1.0': dependencies: - '@pandacss/core': 0.35.0 - '@pandacss/is-valid-prop': 0.35.0 - '@pandacss/logger': 0.35.0 - '@pandacss/shared': 0.35.0 - '@pandacss/token-dictionary': 0.35.0 - '@pandacss/types': 0.35.0 - javascript-stringify: 2.1.0 - outdent: 0.8.0 - pluralize: 8.0.0 - postcss: 8.4.35 - ts-pattern: 5.0.8 - dev: true + ajv: 6.12.6 + debug: 4.3.7 + espree: 10.2.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color - /@pandacss/is-valid-prop@0.35.0: - resolution: {integrity: sha512-NzY4w7wGvA4WidVi82BYSLhPCJ0zj+RONCOg02vmSf4GcjB6RAUM7qZla+t9SV8wKupbv/dRY2VW9goslcAQwA==} - dev: true + '@eslint/js@8.57.1': {} - /@pandacss/logger@0.35.0: - resolution: {integrity: sha512-TuexbsGBSKFNZdMzZldI24SkbBGfNFrLxJzTLXoiyIe1CmBbfspeFbyqV+YXpR6r29NaH0qkHVPge09yinTdOA==} - dependencies: - '@pandacss/types': 0.35.0 - kleur: 4.1.5 - dev: true - - /@pandacss/node@0.35.0(jsdom@24.0.0)(typescript@5.4.2): - resolution: {integrity: sha512-QCYT53YsGQ2KJhaXfaozUNV0hKLvbp6Kl6hA93JtwWlU0M2O7SgJuz3zRoG03xKj1Vo1Wwn96Ca1hIw9h329kw==} - dependencies: - '@pandacss/config': 0.35.0 - '@pandacss/core': 0.35.0 - '@pandacss/extractor': 0.35.0(jsdom@24.0.0)(typescript@5.4.2) - '@pandacss/generator': 0.35.0 - '@pandacss/logger': 0.35.0 - '@pandacss/parser': 0.35.0(jsdom@24.0.0)(typescript@5.4.2) - '@pandacss/shared': 0.35.0 - '@pandacss/token-dictionary': 0.35.0 - '@pandacss/types': 0.35.0 - browserslist: 4.23.0 - chokidar: 3.6.0 - fast-glob: 3.3.2 - file-size: 1.0.0 - filesize: 10.1.0 - fs-extra: 11.2.0 - glob-parent: 6.0.2 - is-glob: 4.0.3 - lodash.merge: 4.6.2 - look-it-up: 2.1.0 - outdent: 0.8.0 - perfect-debounce: 1.0.0 - pkg-types: 1.0.3 - pluralize: 8.0.0 - postcss: 8.4.35 - preferred-pm: 3.1.2 - prettier: 3.2.5 - ts-morph: 21.0.1 - ts-pattern: 5.0.8 - tsconfck: 3.0.2(typescript@5.4.2) - transitivePeerDependencies: - - jsdom - - typescript - dev: true + '@eslint/js@9.12.0': {} - /@pandacss/parser@0.35.0(jsdom@24.0.0)(typescript@5.4.2): - resolution: {integrity: sha512-mZUZiymSb0O/SeBOhVtaJSqb/NEuWy0xkQM3umih7VRciqEscgaOlpna3enrV9VSziNi6E/ma2CAMrVca/pNpw==} + '@eslint/object-schema@2.1.4': {} + + '@eslint/plugin-kit@0.2.0': dependencies: - '@pandacss/config': 0.35.0 - '@pandacss/core': 0.35.0 - '@pandacss/extractor': 0.35.0(jsdom@24.0.0)(typescript@5.4.2) - '@pandacss/logger': 0.35.0 - '@pandacss/shared': 0.35.0 - '@pandacss/types': 0.35.0 - '@vue/compiler-sfc': 3.4.19 - magic-string: 0.30.8 - ts-morph: 21.0.1 - ts-pattern: 5.0.8 - transitivePeerDependencies: - - jsdom - - typescript - dev: true + levn: 0.4.1 - /@pandacss/postcss@0.35.0(jsdom@24.0.0)(typescript@5.4.2): - resolution: {integrity: sha512-1kZJJwGRpZu5ulEVY4o7PyuezcwmQZU8/3D+Nq17mHLiFZBrZF0mthgtBF5lHtnmgfNrA+JdthrDBQ2oc4Abyw==} + '@floating-ui/core@1.6.8': dependencies: - '@pandacss/node': 0.35.0(jsdom@24.0.0)(typescript@5.4.2) - postcss: 8.4.35 - transitivePeerDependencies: - - jsdom - - typescript - dev: true + '@floating-ui/utils': 0.2.8 - /@pandacss/preset-base@0.35.0: - resolution: {integrity: sha512-b0ElhHLKQGqNt2tWKKCVm5s3yo+BfbErWkY7ryQ9/DvMKV2yGpkB46Ncf1ySK0naLoEPSNTK4Yk6m18rXY14Tw==} + '@floating-ui/dom@1.6.11': dependencies: - '@pandacss/types': 0.35.0 - dev: true + '@floating-ui/core': 1.6.8 + '@floating-ui/utils': 0.2.8 - /@pandacss/preset-panda@0.35.0: - resolution: {integrity: sha512-fKPZmmXa3WKriGpII3dUlubz4DVbqaBtOl6xbI6CrYyhpYDuTJbzIPsEA56L3LzMzyTGYP42ylP1tBHKBMTSjQ==} - dependencies: - '@pandacss/types': 0.35.0 - dev: true + '@floating-ui/utils@0.2.8': {} - /@pandacss/shared@0.35.0: - resolution: {integrity: sha512-ZozLTritlmIzVHD/LQ/UqxwXQXO23+sTEGmrDPqma4rBSCB/9VXAmh4h+7xkAVr4E6ZO7lGMkJf655ffhyswwQ==} - dev: true + '@fontsource/inter@5.1.0': {} - /@pandacss/token-dictionary@0.35.0: - resolution: {integrity: sha512-QE0dbl4P+2KhcU3RFeOYKK3kzd/pWBjuSaH+z3YlBhC61/hGgI1ZkoJviVECXYrqy42MTddOZ/SIlE6AXB/j3A==} - dependencies: - '@pandacss/logger': 0.35.0 - '@pandacss/shared': 0.35.0 - '@pandacss/types': 0.35.0 - ts-pattern: 5.0.8 - dev: true + '@fontsource/jetbrains-mono@5.1.1': {} - /@pandacss/types@0.35.0: - resolution: {integrity: sha512-o049YHTZxJQAB7POc0k5tk7QQByGsMN6JBzQSxlcRp/hry/QYuYikj7SSZRcc2Vd+TVCnVgh8c/W9iznvN0Kag==} - dev: true + '@fontsource/open-sans@5.1.0': {} - /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - requiresBuild: true - dev: true - optional: true + '@hcaptcha/types@1.0.4': {} - /@polka/url@1.0.0-next.25: - resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} - dev: true + '@humanfs/core@0.19.0': {} - /@radix-ui/primitive@1.0.1: - resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} + '@humanfs/node@0.16.5': dependencies: - '@babel/runtime': 7.24.0 - dev: true + '@humanfs/core': 0.19.0 + '@humanwhocodes/retry': 0.3.1 - /@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@humanwhocodes/config-array@0.13.0': dependencies: - '@babel/runtime': 7.24.0 - '@types/react': 18.3.3 - react: 18.3.1 - dev: true + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.7 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color - /@radix-ui/react-context@1.0.1(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@types/react': 18.3.3 - react: 18.3.1 - dev: true + '@humanwhocodes/module-importer@1.0.1': {} - /@radix-ui/react-dialog@1.0.5(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - aria-hidden: 1.2.4 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.5(@types/react@18.3.3)(react@18.3.1) - dev: true + '@humanwhocodes/object-schema@2.0.3': {} - /@radix-ui/react-dismissable-layer@1.0.5(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@humanwhocodes/retry@0.3.1': {} + + '@isaacs/cliui@8.0.2': dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: true + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 - /@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@istanbuljs/load-nyc-config@1.1.0': dependencies: - '@babel/runtime': 7.24.0 - '@types/react': 18.3.3 - react: 18.3.1 - dev: true + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 - /@radix-ui/react-focus-scope@1.0.4(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@27.5.1': dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: true + '@jest/types': 27.5.1 + '@types/node': 20.16.11 + chalk: 4.1.2 + jest-message-util: 27.5.1 + jest-util: 27.5.1 + slash: 3.0.0 - /@radix-ui/react-id@1.0.1(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@jest/core@27.5.1': dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - react: 18.3.1 - dev: true + '@jest/console': 27.5.1 + '@jest/reporters': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.16.11 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.8.1 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 27.5.1 + jest-config: 27.5.1 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-resolve-dependencies: 27.5.1 + jest-runner: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + jest-watcher: 27.5.1 + micromatch: 4.0.8 + rimraf: 3.0.2 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate - /@radix-ui/react-portal@1.0.4(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@jest/environment@27.5.1': dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.3 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: true + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.16.11 + jest-mock: 27.5.1 - /@radix-ui/react-presence@1.0.1(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@jest/fake-timers@27.5.1': dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: true + '@jest/types': 27.5.1 + '@sinonjs/fake-timers': 8.1.0 + '@types/node': 20.16.11 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-util: 27.5.1 - /@radix-ui/react-primitive@1.0.3(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@jest/globals@27.5.1': dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: true + '@jest/environment': 27.5.1 + '@jest/types': 27.5.1 + expect: 27.5.1 - /@radix-ui/react-slot@1.0.2(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@jest/reporters@27.5.1': dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - react: 18.3.1 - dev: true + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.16.11 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 5.2.1 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-haste-map: 27.5.1 + jest-resolve: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + slash: 3.0.0 + source-map: 0.6.1 + string-length: 4.0.2 + terminal-link: 2.1.1 + v8-to-istanbul: 8.1.1 + transitivePeerDependencies: + - supports-color - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@jest/schemas@29.6.3': dependencies: - '@babel/runtime': 7.24.0 - '@types/react': 18.3.3 - react: 18.3.1 - dev: true + '@sinclair/typebox': 0.27.8 - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@jest/source-map@27.5.1': dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - react: 18.3.1 - dev: true + callsites: 3.1.0 + graceful-fs: 4.2.11 + source-map: 0.6.1 - /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@jest/test-result@27.5.1': dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - react: 18.3.1 - dev: true + '@jest/console': 27.5.1 + '@jest/types': 27.5.1 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@jest/test-sequencer@27.5.1': dependencies: - '@babel/runtime': 7.24.0 - '@types/react': 18.3.3 - react: 18.3.1 - dev: true + '@jest/test-result': 27.5.1 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-runtime: 27.5.1 + transitivePeerDependencies: + - supports-color - /@rollup/plugin-babel@5.3.1(@babel/core@7.24.7)(rollup@2.79.1): - resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} - engines: {node: '>= 10.0.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@types/babel__core': ^7.1.9 - rollup: ^1.20.0||^2.0.0 - peerDependenciesMeta: - '@types/babel__core': - optional: true + '@jest/transform@27.5.1': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - rollup: 2.79.1 + '@babel/core': 7.25.7 + '@jest/types': 27.5.1 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 1.9.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-regex-util: 27.5.1 + jest-util: 27.5.1 + micromatch: 4.0.8 + pirates: 4.0.6 + slash: 3.0.0 + source-map: 0.6.1 + write-file-atomic: 3.0.3 transitivePeerDependencies: - supports-color - dev: true - /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1): - resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} - engines: {node: '>= 10.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 + '@jest/types@27.5.1': dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - '@types/resolve': 1.17.1 - builtin-modules: 3.3.0 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.8 - rollup: 2.79.1 - dev: true + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.16.11 + '@types/yargs': 16.0.9 + chalk: 4.1.2 - /@rollup/plugin-replace@2.4.2(rollup@2.79.1): - resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 + '@jridgewell/gen-mapping@0.3.5': dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - magic-string: 0.25.9 - rollup: 2.79.1 - dev: true + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 - /@rollup/pluginutils@3.1.0(rollup@2.79.1): - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.1 - rollup: 2.79.1 - dev: true + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 - /@rollup/pluginutils@5.1.0(rollup@2.79.1): - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': dependencies: - '@types/estree': 1.0.5 - estree-walker: 2.0.2 - picomatch: 2.3.1 - rollup: 2.79.1 - dev: true + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 - /@rollup/rollup-android-arm-eabi@4.13.0: - resolution: {integrity: sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true + '@material-design-icons/svg@0.14.13': {} - /@rollup/rollup-android-arm64@4.13.0: - resolution: {integrity: sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true + '@material/material-color-utilities@0.3.0': {} - /@rollup/rollup-darwin-arm64@4.13.0: - resolution: {integrity: sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + '@mdx-js/react@3.0.1(@types/react@18.3.11)(react@18.3.1)': + dependencies: + '@types/mdx': 2.0.13 + '@types/react': 18.3.11 + react: 18.3.1 + + '@minht11/solid-virtual-container@0.2.1(solid-js@1.9.2)': + dependencies: + solid-js: 1.9.2 + + '@motionone/animation@10.18.0': + dependencies: + '@motionone/easing': 10.18.0 + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 + tslib: 2.7.0 + + '@motionone/dom@10.18.0': + dependencies: + '@motionone/animation': 10.18.0 + '@motionone/generators': 10.18.0 + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 + hey-listen: 1.0.8 + tslib: 2.7.0 - /@rollup/rollup-darwin-x64@4.13.0: - resolution: {integrity: sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + '@motionone/easing@10.18.0': + dependencies: + '@motionone/utils': 10.18.0 + tslib: 2.7.0 - /@rollup/rollup-linux-arm-gnueabihf@4.13.0: - resolution: {integrity: sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@motionone/generators@10.18.0': + dependencies: + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 + tslib: 2.7.0 - /@rollup/rollup-linux-arm64-gnu@4.13.0: - resolution: {integrity: sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@motionone/types@10.17.1': {} - /@rollup/rollup-linux-arm64-musl@4.13.0: - resolution: {integrity: sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@motionone/utils@10.18.0': + dependencies: + '@motionone/types': 10.17.1 + hey-listen: 1.0.8 + tslib: 2.7.0 - /@rollup/rollup-linux-riscv64-gnu@4.13.0: - resolution: {integrity: sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@mxssfd/typedoc-theme@1.1.7(typedoc@0.25.13(typescript@5.6.3))': + dependencies: + typedoc: 0.25.13(typescript@5.6.3) - /@rollup/rollup-linux-x64-gnu@4.13.0: - resolution: {integrity: sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 - /@rollup/rollup-linux-x64-musl@4.13.0: - resolution: {integrity: sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@nodelib/fs.stat@2.0.5': {} - /@rollup/rollup-win32-arm64-msvc@4.13.0: - resolution: {integrity: sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 - /@rollup/rollup-win32-ia32-msvc@4.13.0: - resolution: {integrity: sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true + '@nothing-but/utils@0.12.1': {} - /@rollup/rollup-win32-x64-msvc@4.13.0: - resolution: {integrity: sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true + '@octokit/app@13.1.8': + dependencies: + '@octokit/auth-app': 4.0.13 + '@octokit/auth-unauthenticated': 3.0.5 + '@octokit/core': 4.2.4 + '@octokit/oauth-app': 4.2.4 + '@octokit/plugin-paginate-rest': 6.1.2(@octokit/core@4.2.4) + '@octokit/types': 9.3.2 + '@octokit/webhooks': 10.9.2 + transitivePeerDependencies: + - encoding - /@sentry-internal/feedback@7.107.0: - resolution: {integrity: sha512-okF0B9AJHrpkwNMxNs/Lffw3N5ZNbGwz4uvCfyOfnMxc7E2VfDM18QzUvTBRvNr3bA9wl+InJ+EMG3aZhyPunA==} - engines: {node: '>=12'} + '@octokit/auth-app@4.0.13': dependencies: - '@sentry/core': 7.107.0 - '@sentry/types': 7.107.0 - '@sentry/utils': 7.107.0 - dev: false + '@octokit/auth-oauth-app': 5.0.6 + '@octokit/auth-oauth-user': 2.1.2 + '@octokit/request': 6.2.8 + '@octokit/request-error': 3.0.3 + '@octokit/types': 9.3.2 + deprecation: 2.3.1 + lru-cache: 9.1.2 + universal-github-app-jwt: 1.2.0 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding - /@sentry-internal/replay-canvas@7.107.0: - resolution: {integrity: sha512-dmDL9g3QDfo7axBOsVnpiKdJ/DXrdeuRv1AqsLgwzJKvItsv0ZizX0u+rj5b1UoxcwbXRMxJ0hit5a1yt3t/ow==} - engines: {node: '>=12'} + '@octokit/auth-oauth-app@5.0.6': dependencies: - '@sentry/core': 7.107.0 - '@sentry/replay': 7.107.0 - '@sentry/types': 7.107.0 - '@sentry/utils': 7.107.0 - dev: false + '@octokit/auth-oauth-device': 4.0.5 + '@octokit/auth-oauth-user': 2.1.2 + '@octokit/request': 6.2.8 + '@octokit/types': 9.3.2 + '@types/btoa-lite': 1.0.2 + btoa-lite: 1.0.0 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding - /@sentry-internal/tracing@7.107.0: - resolution: {integrity: sha512-le9wM8+OHBbq7m/8P7JUJ1UhSPIty+Z/HmRXc5Z64ODZcOwFV6TmDpYx729IXDdz36XUKmeI+BeM7yQdTTZPfQ==} - engines: {node: '>=8'} + '@octokit/auth-oauth-device@4.0.5': dependencies: - '@sentry/core': 7.107.0 - '@sentry/types': 7.107.0 - '@sentry/utils': 7.107.0 - dev: false + '@octokit/oauth-methods': 2.0.6 + '@octokit/request': 6.2.8 + '@octokit/types': 9.3.2 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding - /@sentry/browser@7.107.0: - resolution: {integrity: sha512-KnqaQDhxv6w9dJ+mYLsNwPeGZfgbpM3vaismBNyJCKLgWn2V75kxkSq+bDX8LQT/13AyK7iFp317L6P8EuNa3g==} - engines: {node: '>=8'} + '@octokit/auth-oauth-user@2.1.2': dependencies: - '@sentry-internal/feedback': 7.107.0 - '@sentry-internal/replay-canvas': 7.107.0 - '@sentry-internal/tracing': 7.107.0 - '@sentry/core': 7.107.0 - '@sentry/replay': 7.107.0 - '@sentry/types': 7.107.0 - '@sentry/utils': 7.107.0 - dev: false - - /@sentry/core@7.107.0: - resolution: {integrity: sha512-C7ogye6+KPyBi8NVL0P8Rxx3Ur7Td8ufnjxosVy678lqY+dcYPk/HONROrzUFYW5fMKWL4/KYnwP+x9uHnkDmw==} - engines: {node: '>=8'} + '@octokit/auth-oauth-device': 4.0.5 + '@octokit/oauth-methods': 2.0.6 + '@octokit/request': 6.2.8 + '@octokit/types': 9.3.2 + btoa-lite: 1.0.0 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + + '@octokit/auth-token@3.0.4': {} + + '@octokit/auth-unauthenticated@3.0.5': dependencies: - '@sentry/types': 7.107.0 - '@sentry/utils': 7.107.0 - dev: false + '@octokit/request-error': 3.0.3 + '@octokit/types': 9.3.2 - /@sentry/replay@7.107.0: - resolution: {integrity: sha512-BNJDEVaEwr/YnV22qnyVA1almx/3p615m3+KaF8lPo7YleYgJGSJv1auH64j1G8INkrJ0J0wFBujb1EFjMYkxA==} - engines: {node: '>=12'} + '@octokit/core@4.2.4': dependencies: - '@sentry-internal/tracing': 7.107.0 - '@sentry/core': 7.107.0 - '@sentry/types': 7.107.0 - '@sentry/utils': 7.107.0 - dev: false + '@octokit/auth-token': 3.0.4 + '@octokit/graphql': 5.0.6 + '@octokit/request': 6.2.8 + '@octokit/request-error': 3.0.3 + '@octokit/types': 9.3.2 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding - /@sentry/tracing@7.107.0: - resolution: {integrity: sha512-nxOmwlJgx9gW1c0EWtTWQxOBLxcgCGNOT2LezZTcGZ0G0Fw4y5Y+pNY0f8hP4rcJdNHhXzetEOR/I3Jauix+fw==} - engines: {node: '>=8'} + '@octokit/endpoint@7.0.6': dependencies: - '@sentry-internal/tracing': 7.107.0 - dev: false + '@octokit/types': 9.3.2 + is-plain-object: 5.0.0 + universal-user-agent: 6.0.1 - /@sentry/types@7.107.0: - resolution: {integrity: sha512-H7qcPjPSUWHE/Zf5bR1EE24G0pGVuJgrSx8Tvvl5nKEepswMYlbXHRVSDN0gTk/E5Z7cqf+hUBOpkQgZyps77w==} - engines: {node: '>=8'} - dev: false + '@octokit/graphql@5.0.6': + dependencies: + '@octokit/request': 6.2.8 + '@octokit/types': 9.3.2 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding - /@sentry/utils@7.107.0: - resolution: {integrity: sha512-C6PbN5gHh73MRHohnReeQ60N8rrLYa9LciHue3Ru2290eSThg4CzsPnx4SzkGpkSeVlhhptKtKZ+hp/ha3iVuw==} - engines: {node: '>=8'} + '@octokit/oauth-app@4.2.4': dependencies: - '@sentry/types': 7.107.0 - dev: false + '@octokit/auth-oauth-app': 5.0.6 + '@octokit/auth-oauth-user': 2.1.2 + '@octokit/auth-unauthenticated': 3.0.5 + '@octokit/core': 4.2.4 + '@octokit/oauth-authorization-url': 5.0.0 + '@octokit/oauth-methods': 2.0.6 + '@types/aws-lambda': 8.10.145 + fromentries: 1.3.2 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding - /@shikijs/core@1.9.0: - resolution: {integrity: sha512-cbSoY8P/jgGByG8UOl3jnP/CWg/Qk+1q+eAKWtcrU3pNoILF8wTsLB0jT44qUBV8Ce1SvA9uqcM9Xf+u3fJFBw==} - dev: false + '@octokit/oauth-authorization-url@5.0.0': {} - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: true + '@octokit/oauth-methods@2.0.6': + dependencies: + '@octokit/oauth-authorization-url': 5.0.0 + '@octokit/request': 6.2.8 + '@octokit/request-error': 3.0.3 + '@octokit/types': 9.3.2 + btoa-lite: 1.0.0 + transitivePeerDependencies: + - encoding - /@sindresorhus/merge-streams@2.3.0: - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} - engines: {node: '>=18'} - dev: true + '@octokit/openapi-types@18.1.1': {} - /@sinonjs/commons@1.8.5: - resolution: {integrity: sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==} + '@octokit/plugin-paginate-rest@6.1.2(@octokit/core@4.2.4)': dependencies: - type-detect: 4.0.8 - dev: true + '@octokit/core': 4.2.4 + '@octokit/tsconfig': 1.0.2 + '@octokit/types': 9.3.2 - /@sinonjs/fake-timers@8.1.0: - resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} + '@octokit/plugin-rest-endpoint-methods@7.2.3(@octokit/core@4.2.4)': dependencies: - '@sinonjs/commons': 1.8.5 - dev: true + '@octokit/core': 4.2.4 + '@octokit/types': 10.0.0 - /@solid-aria/button@0.1.3(solid-js@1.8.15): - resolution: {integrity: sha512-gN7/d5YkHAbQPhzBVbNNp9grf9w+mxFRulbmeXjp61hFNLOJRDcdMPCri5MmfUJ8D2BwefcyHvCGTCc62Ua23A==} - peerDependencies: - solid-js: ^1.4.4 + '@octokit/plugin-retry@4.1.6(@octokit/core@4.2.4)': dependencies: - '@solid-aria/focus': 0.1.4(solid-js@1.8.15) - '@solid-aria/interactions': 0.1.4(solid-js@1.8.15) - '@solid-aria/toggle': 0.1.3(solid-js@1.8.15) - '@solid-aria/types': 0.1.4(solid-js@1.8.15) - '@solid-aria/utils': 0.2.1(solid-js@1.8.15) - '@solid-primitives/props': 2.2.2(solid-js@1.8.15) - '@solid-primitives/utils': 2.2.1(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false - - /@solid-aria/focus@0.1.4(solid-js@1.8.15): - resolution: {integrity: sha512-yX/BbN97s7ascNJu0yB+p1bx48U0NOOWw7+TYlGcAfFGc2HMNpIxG5OdhWGUoz8D9Tp5ELEgWgN3d4dAf7Hk9Q==} - peerDependencies: - solid-js: ^1.4.4 + '@octokit/core': 4.2.4 + '@octokit/types': 9.3.2 + bottleneck: 2.19.5 + + '@octokit/plugin-throttling@5.2.3(@octokit/core@4.2.4)': dependencies: - '@solid-aria/interactions': 0.1.4(solid-js@1.8.15) - '@solid-aria/types': 0.1.4(solid-js@1.8.15) - '@solid-aria/utils': 0.2.1(solid-js@1.8.15) - '@solid-primitives/props': 2.2.2(solid-js@1.8.15) - '@solid-primitives/utils': 2.2.1(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@octokit/core': 4.2.4 + '@octokit/types': 9.3.2 + bottleneck: 2.19.5 - /@solid-aria/interactions@0.1.4(solid-js@1.8.15): - resolution: {integrity: sha512-gVJWJTX51mZfURoak39mxCo/vUQl8UInctJBlT2nIc3VQrTPL4ekOV6czrvTffpduoWgXeuf61+Dabc7b920lQ==} - peerDependencies: - solid-js: ^1.4.4 + '@octokit/request-error@3.0.3': dependencies: - '@solid-aria/types': 0.1.4(solid-js@1.8.15) - '@solid-aria/utils': 0.2.1(solid-js@1.8.15) - '@solid-primitives/platform': 0.0.100(solid-js@1.8.15) - '@solid-primitives/props': 2.2.2(solid-js@1.8.15) - '@solid-primitives/utils': 2.2.1(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@octokit/types': 9.3.2 + deprecation: 2.3.1 + once: 1.4.0 - /@solid-aria/toggle@0.1.3(solid-js@1.8.15): - resolution: {integrity: sha512-ZVRhY+Te8XBFFcumuu2J92LBntlmV6ss/6fNkDfhvr4LV42VB1goRZvPJk8rqakyR3JkQBTnQuxt7idrqqaxgA==} - peerDependencies: - solid-js: ^1.4.4 + '@octokit/request@6.2.8': dependencies: - '@solid-aria/focus': 0.1.4(solid-js@1.8.15) - '@solid-aria/interactions': 0.1.4(solid-js@1.8.15) - '@solid-aria/types': 0.1.4(solid-js@1.8.15) - '@solid-aria/utils': 0.2.1(solid-js@1.8.15) - '@solid-primitives/props': 2.2.2(solid-js@1.8.15) - '@solid-primitives/utils': 2.2.1(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@octokit/endpoint': 7.0.6 + '@octokit/request-error': 3.0.3 + '@octokit/types': 9.3.2 + is-plain-object: 5.0.0 + node-fetch: 2.7.0 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding - /@solid-aria/types@0.1.4(solid-js@1.8.15): - resolution: {integrity: sha512-CxVXiZPE+nfD7wr7+6xtY3IrCTyAfL3zW4tH4NtsxlqBoz10tLFRCsTqeyl6OWMDhwABIaSdeHPKXVnKsKErcQ==} - peerDependencies: - solid-js: ^1.4.4 + '@octokit/tsconfig@1.0.2': {} + + '@octokit/types@10.0.0': dependencies: - '@solid-primitives/utils': 2.2.1(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@octokit/openapi-types': 18.1.1 - /@solid-aria/utils@0.2.1(solid-js@1.8.15): - resolution: {integrity: sha512-zZgPpdg7azQUKE2jDUnCmzopN8CFdeKKcFTIv9ICrc0afS1qUR8ScywWBF/AwNBgGYhneBr7xEOwAHxe+zUcHQ==} - peerDependencies: - solid-js: ^1.4.4 + '@octokit/types@9.3.2': dependencies: - '@solid-aria/types': 0.1.4(solid-js@1.8.15) - '@solid-primitives/utils': 2.2.1(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@octokit/openapi-types': 18.1.1 - /@solid-devtools/debugger@0.18.1(solid-js@1.8.15): - resolution: {integrity: sha512-PFbf3+t5ua/v9HpnYOo24NIIM/pf/ZUFYF26YWy8qq2ddRbkKL87nmG5gDGvtgK7lVV3GM3O01fdq4YnSG1SYg==} - peerDependencies: - solid-js: ^1.6.2 + '@octokit/webhooks-methods@3.0.3': {} + + '@octokit/webhooks-types@6.11.0': {} + + '@octokit/webhooks@10.9.2': dependencies: - '@solid-devtools/shared': 0.10.6(solid-js@1.8.15) - '@solid-primitives/bounds': 0.0.105(solid-js@1.8.15) - '@solid-primitives/cursor': 0.0.103(solid-js@1.8.15) - '@solid-primitives/event-bus': 0.1.6(solid-js@1.8.15) - '@solid-primitives/event-listener': 2.3.3(solid-js@1.8.15) - '@solid-primitives/keyboard': 1.2.8(solid-js@1.8.15) - '@solid-primitives/platform': 0.0.102(solid-js@1.8.15) - '@solid-primitives/scheduled': 1.4.3(solid-js@1.8.15) - '@solid-primitives/utils': 4.0.1(solid-js@1.8.15) - solid-js: 1.8.15 - type-fest: 3.13.1 - dev: true + '@octokit/request-error': 3.0.3 + '@octokit/webhooks-methods': 3.0.3 + '@octokit/webhooks-types': 6.11.0 + aggregate-error: 3.1.0 - /@solid-devtools/debugger@0.23.3(solid-js@1.8.15): - resolution: {integrity: sha512-VrgswTjb2FyHxQJp5y5u7OaJ2k1R14LYlAOX/1rDZrGHWKdGYCaWHGzxI7C8AExtMP+LS+WOxy0uXMPQpoAD2g==} - peerDependencies: - solid-js: ^1.8.0 + '@pandacss/config@0.46.1': dependencies: - '@nothing-but/utils': 0.12.1 - '@solid-devtools/shared': 0.13.1(solid-js@1.8.15) - '@solid-primitives/bounds': 0.0.118(solid-js@1.8.15) - '@solid-primitives/cursor': 0.0.112(solid-js@1.8.15) - '@solid-primitives/event-bus': 1.0.11(solid-js@1.8.15) - '@solid-primitives/event-listener': 2.3.3(solid-js@1.8.15) - '@solid-primitives/keyboard': 1.2.8(solid-js@1.8.15) - '@solid-primitives/platform': 0.1.2(solid-js@1.8.15) - '@solid-primitives/rootless': 1.4.5(solid-js@1.8.15) - '@solid-primitives/scheduled': 1.4.3(solid-js@1.8.15) - '@solid-primitives/static-store': 0.0.5(solid-js@1.8.15) - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false - - /@solid-devtools/frontend@0.11.4(solid-js@1.8.15): - resolution: {integrity: sha512-tG/Jr0cp5iJ4+HwS0N5p/QfchKeKB71fos+021bU2SZWTtx8aB05zaOKhpdkGZbq2X1Vgzs+xMODOR+yqH4oMA==} - peerDependencies: - solid-js: ^1.8.0 + '@pandacss/logger': 0.46.1 + '@pandacss/preset-base': 0.46.1 + '@pandacss/preset-panda': 0.46.1 + '@pandacss/shared': 0.46.1 + '@pandacss/types': 0.46.1 + bundle-n-require: 1.1.1 + escalade: 3.1.2 + merge-anything: 5.1.7 + microdiff: 1.3.2 + typescript: 5.3.3 + + '@pandacss/core@0.46.1': dependencies: - '@nothing-but/utils': 0.12.1 - '@solid-devtools/debugger': 0.23.3(solid-js@1.8.15) - '@solid-devtools/shared': 0.13.1(solid-js@1.8.15) - '@solid-devtools/theme': 0.0.1 - '@solid-primitives/context': 0.2.3(solid-js@1.8.15) - '@solid-primitives/cursor': 0.0.112(solid-js@1.8.15) - '@solid-primitives/date': 2.0.21(solid-js@1.8.15) - '@solid-primitives/event-bus': 1.0.11(solid-js@1.8.15) - '@solid-primitives/event-listener': 2.3.3(solid-js@1.8.15) - '@solid-primitives/jsx-tokenizer': 1.0.10(solid-js@1.8.15) - '@solid-primitives/keyboard': 1.2.8(solid-js@1.8.15) - '@solid-primitives/keyed': 1.2.2(solid-js@1.8.15) - '@solid-primitives/media': 2.2.8(solid-js@1.8.15) - '@solid-primitives/mouse': 2.0.19(solid-js@1.8.15) - '@solid-primitives/props': 3.1.11(solid-js@1.8.15) - '@solid-primitives/range': 0.1.18(solid-js@1.8.15) - '@solid-primitives/resize-observer': 2.0.25(solid-js@1.8.15) - '@solid-primitives/scheduled': 1.4.3(solid-js@1.8.15) - '@solid-primitives/static-store': 0.0.5(solid-js@1.8.15) - '@solid-primitives/styles': 0.0.111(solid-js@1.8.15) - '@solid-primitives/timer': 1.3.9(solid-js@1.8.15) - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - clsx: 2.1.0 - solid-headless: 0.13.1(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false - - /@solid-devtools/overlay@0.29.3(solid-js@1.8.15): - resolution: {integrity: sha512-/iWw9ooHZLnZVaVlrdrbiV1MRvuOc4IBz7NwPlW34y8C+1jRXvFwG11GvQfJTE+FRMjmuMoM+JmPHU0jWACo4g==} - peerDependencies: - solid-js: ^1.8.0 + '@csstools/postcss-cascade-layers': 4.0.6(postcss@8.4.47) + '@pandacss/is-valid-prop': 0.46.1 + '@pandacss/logger': 0.46.1 + '@pandacss/shared': 0.46.1 + '@pandacss/token-dictionary': 0.46.1 + '@pandacss/types': 0.46.1 + browserslist: 4.23.3 + hookable: 5.5.3 + lightningcss: 1.25.1 + lodash.merge: 4.6.2 + outdent: 0.8.0 + postcss: 8.4.47 + postcss-discard-duplicates: 7.0.1(postcss@8.4.47) + postcss-discard-empty: 7.0.0(postcss@8.4.47) + postcss-merge-rules: 7.0.2(postcss@8.4.47) + postcss-minify-selectors: 7.0.2(postcss@8.4.47) + postcss-nested: 6.0.1(postcss@8.4.47) + postcss-normalize-whitespace: 7.0.0(postcss@8.4.47) + postcss-selector-parser: 6.1.1 + ts-pattern: 5.0.8 + + '@pandacss/dev@0.46.1(jsdom@25.0.1)(typescript@5.6.3)': dependencies: - '@nothing-but/utils': 0.12.1 - '@solid-devtools/debugger': 0.23.3(solid-js@1.8.15) - '@solid-devtools/frontend': 0.11.4(solid-js@1.8.15) - '@solid-devtools/shared': 0.13.1(solid-js@1.8.15) - '@solid-primitives/cursor': 0.0.112(solid-js@1.8.15) - '@solid-primitives/event-listener': 2.3.3(solid-js@1.8.15) - '@solid-primitives/media': 2.2.8(solid-js@1.8.15) - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false - - /@solid-devtools/shared@0.10.6(solid-js@1.8.15): - resolution: {integrity: sha512-UfLERQMxULRl2GoNc/Y1fMkRp71uTk/56dksowRLMdsyFpH3vqKr3+AHfm/2tXI/XeRAvXsXhC90zpVff5y+Hg==} - peerDependencies: - solid-js: ^1.6.2 - dependencies: - '@solid-primitives/event-bus': 0.1.6(solid-js@1.8.15) - '@solid-primitives/event-listener': 2.3.3(solid-js@1.8.15) - '@solid-primitives/media': 2.2.8(solid-js@1.8.15) - '@solid-primitives/refs': 0.3.7(solid-js@1.8.15) - '@solid-primitives/rootless': 1.4.5(solid-js@1.8.15) - '@solid-primitives/scheduled': 1.4.3(solid-js@1.8.15) - '@solid-primitives/styles': 0.0.101(solid-js@1.8.15) - '@solid-primitives/utils': 4.0.1(solid-js@1.8.15) - solid-js: 1.8.15 - type-fest: 3.13.1 - dev: true - - /@solid-devtools/shared@0.13.1(solid-js@1.8.15): - resolution: {integrity: sha512-qaAcZF47FFr4alVQSy5ooLy7mMt4MMDxSHw52heY1oCut8yfXDrnLcYDONabfoin2WYIwsQpjYhryHgjtB0uDg==} - peerDependencies: - solid-js: ^1.8.0 + '@clack/prompts': 0.7.0 + '@pandacss/config': 0.46.1 + '@pandacss/logger': 0.46.1 + '@pandacss/node': 0.46.1(jsdom@25.0.1)(typescript@5.6.3) + '@pandacss/postcss': 0.46.1(jsdom@25.0.1)(typescript@5.6.3) + '@pandacss/preset-panda': 0.46.1 + '@pandacss/shared': 0.46.1 + '@pandacss/token-dictionary': 0.46.1 + '@pandacss/types': 0.46.1 + cac: 6.7.14 + transitivePeerDependencies: + - jsdom + - typescript + + '@pandacss/extractor@0.46.1(jsdom@25.0.1)(typescript@5.6.3)': dependencies: - '@solid-primitives/event-bus': 1.0.11(solid-js@1.8.15) - '@solid-primitives/event-listener': 2.3.3(solid-js@1.8.15) - '@solid-primitives/media': 2.2.8(solid-js@1.8.15) - '@solid-primitives/refs': 1.0.8(solid-js@1.8.15) - '@solid-primitives/rootless': 1.4.5(solid-js@1.8.15) - '@solid-primitives/scheduled': 1.4.3(solid-js@1.8.15) - '@solid-primitives/static-store': 0.0.5(solid-js@1.8.15) - '@solid-primitives/styles': 0.0.111(solid-js@1.8.15) - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false - - /@solid-devtools/theme@0.0.1: - resolution: {integrity: sha512-10Kky0Ed4S89PFpJfcFsU6cc3ckNPTAjiEGYYoBdfaekvvAibdWllkbKhiDngPkwFUY8BpSi5ZLMlBPBxrxgLg==} + '@pandacss/shared': 0.46.1 + ts-evaluator: 1.2.0(jsdom@25.0.1)(typescript@5.6.3) + ts-morph: 21.0.1 + transitivePeerDependencies: + - jsdom + - typescript + + '@pandacss/generator@0.46.1': dependencies: - '@nothing-but/utils': 0.12.1 - dev: false - - /@solid-devtools/transform@0.10.4(solid-js@1.8.15)(vite@5.1.6): - resolution: {integrity: sha512-r8JzHMmBFgaFy+FQVQdvNpTX8L3zwuiW1/puV3VHyaw1FpODmdmkbOnQgUQgHqN/X1LLPzTMtVGKLcDmJJOQbQ==} - deprecated: vite plugin has been moved entirely to 'solid-devtools' pacakge. - peerDependencies: - solid-js: ^1.6.2 - vite: ^2.2.3 || ^3.0.0 || ^4.0.0 - dependencies: - '@babel/core': 7.24.0 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.0) - '@babel/types': 7.24.0 - '@solid-devtools/debugger': 0.18.1(solid-js@1.8.15) - '@solid-devtools/shared': 0.10.6(solid-js@1.8.15) - solid-js: 1.8.15 - vite: 5.1.6 + '@pandacss/core': 0.46.1 + '@pandacss/is-valid-prop': 0.46.1 + '@pandacss/logger': 0.46.1 + '@pandacss/shared': 0.46.1 + '@pandacss/token-dictionary': 0.46.1 + '@pandacss/types': 0.46.1 + javascript-stringify: 2.1.0 + outdent: 0.8.0 + pluralize: 8.0.0 + postcss: 8.4.47 + ts-pattern: 5.0.8 + + '@pandacss/is-valid-prop@0.46.1': {} + + '@pandacss/logger@0.46.1': + dependencies: + '@pandacss/types': 0.46.1 + kleur: 4.1.5 + + '@pandacss/node@0.46.1(jsdom@25.0.1)(typescript@5.6.3)': + dependencies: + '@pandacss/config': 0.46.1 + '@pandacss/core': 0.46.1 + '@pandacss/extractor': 0.46.1(jsdom@25.0.1)(typescript@5.6.3) + '@pandacss/generator': 0.46.1 + '@pandacss/logger': 0.46.1 + '@pandacss/parser': 0.46.1(jsdom@25.0.1)(typescript@5.6.3) + '@pandacss/shared': 0.46.1 + '@pandacss/token-dictionary': 0.46.1 + '@pandacss/types': 0.46.1 + browserslist: 4.23.3 + chokidar: 3.6.0 + fast-glob: 3.3.2 + file-size: 1.0.0 + filesize: 10.1.6 + fs-extra: 11.2.0 + glob-parent: 6.0.2 + is-glob: 4.0.3 + lodash.merge: 4.6.2 + look-it-up: 2.1.0 + outdent: 0.8.0 + package-manager-detector: 0.1.0 + perfect-debounce: 1.0.0 + pkg-types: 1.0.3 + pluralize: 8.0.0 + postcss: 8.4.47 + prettier: 3.2.5 + ts-morph: 21.0.1 + ts-pattern: 5.0.8 + tsconfck: 3.0.2(typescript@5.6.3) transitivePeerDependencies: - - supports-color - dev: true + - jsdom + - typescript - /@solid-primitives/bounds@0.0.105(solid-js@1.8.15): - resolution: {integrity: sha512-a2ZRuZayXV1/kSKx8cEOR5pIs2zKAF9lS3Gj/r7uHmBQBmn25GYCYOwj4LbLQbqqbumZr2eJO+/wDyi4UOX5pw==} - peerDependencies: - solid-js: ^1.6.0 + '@pandacss/parser@0.46.1(jsdom@25.0.1)(typescript@5.6.3)': dependencies: - '@solid-primitives/event-listener': 2.3.3(solid-js@1.8.15) - '@solid-primitives/resize-observer': 2.0.25(solid-js@1.8.15) - '@solid-primitives/utils': 4.0.1(solid-js@1.8.15) - solid-js: 1.8.15 - dev: true + '@pandacss/config': 0.46.1 + '@pandacss/core': 0.46.1 + '@pandacss/extractor': 0.46.1(jsdom@25.0.1)(typescript@5.6.3) + '@pandacss/logger': 0.46.1 + '@pandacss/shared': 0.46.1 + '@pandacss/types': 0.46.1 + '@vue/compiler-sfc': 3.4.19 + magic-string: 0.30.11 + ts-morph: 21.0.1 + ts-pattern: 5.0.8 + transitivePeerDependencies: + - jsdom + - typescript - /@solid-primitives/bounds@0.0.118(solid-js@1.8.15): - resolution: {integrity: sha512-Qj42w8LlnhJ3r/t+t0c0vrdwIvvQMPgjEFGmLiwREaA85ojLbgL9lSBq2tKvljeLCvRVkgj10KEUf+vc99VCIg==} - peerDependencies: - solid-js: ^1.6.12 + '@pandacss/postcss@0.46.1(jsdom@25.0.1)(typescript@5.6.3)': dependencies: - '@solid-primitives/event-listener': 2.3.3(solid-js@1.8.15) - '@solid-primitives/resize-observer': 2.0.25(solid-js@1.8.15) - '@solid-primitives/static-store': 0.0.5(solid-js@1.8.15) - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@pandacss/node': 0.46.1(jsdom@25.0.1)(typescript@5.6.3) + postcss: 8.4.47 + transitivePeerDependencies: + - jsdom + - typescript - /@solid-primitives/context@0.2.3(solid-js@1.8.15): - resolution: {integrity: sha512-6/e8qu9qJf48FJ+sxc/B782NdgFw5TvI8+r6U0gHizumfZcWZg8FAJqvRZAiwlygkUNiTQOGTeO10LVbMm0kvg==} - peerDependencies: - solid-js: ^1.6.12 + '@pandacss/preset-base@0.46.1': dependencies: - solid-js: 1.8.15 - dev: false + '@pandacss/types': 0.46.1 - /@solid-primitives/cursor@0.0.103(solid-js@1.8.15): - resolution: {integrity: sha512-bb5x5lCimBf7R2VqrrMVcP2y/aGTMjNj7fjvY+RvTAC3/WtG/odqeYwka4lCBV27pX9TiJCKtNS6mVTigdfLMA==} - peerDependencies: - solid-js: ^1.6.0 + '@pandacss/preset-panda@0.46.1': dependencies: - '@solid-primitives/utils': 4.0.1(solid-js@1.8.15) - solid-js: 1.8.15 - dev: true + '@pandacss/types': 0.46.1 - /@solid-primitives/cursor@0.0.112(solid-js@1.8.15): - resolution: {integrity: sha512-TAtU7qD7ipSLSXHnq8FhhosAPVX+dnOCb/ITcGcLlj8e/C9YKcxDhgBHJ3R/d1xDRb5/vO/szJtEz6fnQD311Q==} - peerDependencies: - solid-js: ^1.6.12 - dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@pandacss/shared@0.46.1': {} - /@solid-primitives/date@2.0.21(solid-js@1.8.15): - resolution: {integrity: sha512-DZSmILY9YZarO0IVRzac8gQ6aMgC9QKzKJEgZnv7cF5K4QdkzhdkYud3HC/pfacZ7x1elopZrS0HbCkQllCrYg==} - peerDependencies: - solid-js: ^1.6.12 + '@pandacss/token-dictionary@0.46.1': dependencies: - '@solid-primitives/memo': 1.3.8(solid-js@1.8.15) - '@solid-primitives/timer': 1.3.9(solid-js@1.8.15) - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@pandacss/logger': 0.46.1 + '@pandacss/shared': 0.46.1 + '@pandacss/types': 0.46.1 + ts-pattern: 5.0.8 - /@solid-primitives/event-bus@0.1.6(solid-js@1.8.15): - resolution: {integrity: sha512-UGtBU5zDyjSYnX0BjaYFcs1XfRD6BDN6VEJi4ydxePaUEKlloOG53BsLZjFgTux8cMEmJAaHjoJQH3/SBt3zcw==} - peerDependencies: - solid-js: ^1.6.0 - dependencies: - '@solid-primitives/immutable': 0.1.10(solid-js@1.8.15) - '@solid-primitives/utils': 5.5.2(solid-js@1.8.15) - solid-js: 1.8.15 - dev: true + '@pandacss/types@0.46.1': {} - /@solid-primitives/event-bus@1.0.11(solid-js@1.8.15): - resolution: {integrity: sha512-bSwVA4aI2aNHomSbEroUnisMSyDDXJbrw4U8kFEvrcYdlLrJX5i6QeCFx+vj/zdQQw62KAllrEIyWP8KMpPVnQ==} - peerDependencies: - solid-js: ^1.6.12 - dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@pkgjs/parseargs@0.11.0': + optional: true - /@solid-primitives/event-listener@2.3.3(solid-js@1.8.15): - resolution: {integrity: sha512-DAJbl+F0wrFW2xmcV8dKMBhk9QLVLuBSW+TR4JmIfTaObxd13PuL7nqaXnaYKDWOYa6otB00qcCUIGbuIhSUgQ==} - peerDependencies: - solid-js: ^1.6.12 - dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 + '@pkgr/core@0.1.1': {} - /@solid-primitives/i18n@1.1.1(solid-js@1.8.15): - resolution: {integrity: sha512-ywIJ4MADZ25of6X/hgPTd6UNWbgM6X/ZNJStIexAlaLi9fFWw1yFRP/cllSBabEfMoCWgOETgoT16JQzxZlphg==} - peerDependencies: - solid-js: ^1.3.1 - dependencies: - solid-js: 1.8.15 - dev: false + '@polka/url@1.0.0-next.28': {} - /@solid-primitives/immutable@0.1.10(solid-js@1.8.15): - resolution: {integrity: sha512-5XkiiBGSuUaoG2HFei1bG2eDyUwsj/b6IBP7ggm4UMU5mM/APz1u7e3rzMyPn5zVqnHT3oRSbj3UDPNYb5Y9Qg==} - peerDependencies: - solid-js: ^1.6.12 + '@rollup/plugin-babel@5.3.1(@babel/core@7.25.7)(@types/babel__core@7.20.5)(rollup@2.79.2)': dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 - dev: true + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.7 + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + rollup: 2.79.2 + optionalDependencies: + '@types/babel__core': 7.20.5 + transitivePeerDependencies: + - supports-color - /@solid-primitives/jsx-tokenizer@1.0.10(solid-js@1.8.15): - resolution: {integrity: sha512-OziPOhJcVneuEwuC4Ys2atePcBhXZK00h93Tg+dGw5GUijB8hvP97qXZ9Q8oNai0FCInlGUOYQnOgM9piBoSMQ==} - peerDependencies: - solid-js: ^1.6.12 + '@rollup/plugin-node-resolve@15.3.0(rollup@2.79.2)': dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@rollup/pluginutils': 5.1.2(rollup@2.79.2) + '@types/resolve': 1.20.2 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.8 + optionalDependencies: + rollup: 2.79.2 - /@solid-primitives/keyboard@1.2.8(solid-js@1.8.15): - resolution: {integrity: sha512-pJtcbkjozS6L1xvTht9rPpyPpX55nAkfBzbFWdf3y0Suwh6qClTibvvObzKOf7uzQ+8aZRDH4LsoGmbTKXtJjQ==} - peerDependencies: - solid-js: ^1.6.12 + '@rollup/plugin-replace@2.4.2(rollup@2.79.2)': dependencies: - '@solid-primitives/event-listener': 2.3.3(solid-js@1.8.15) - '@solid-primitives/rootless': 1.4.5(solid-js@1.8.15) - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + magic-string: 0.25.9 + rollup: 2.79.2 - /@solid-primitives/keyed@1.2.2(solid-js@1.8.15): - resolution: {integrity: sha512-oBziY40JK4XmJ57XGkFl8j0GtEarSu0hhjdkUQgqL/U0QQE3TZrRo9uhgH7I6VGJKBKG7SAraTPE6S5lVLM1ow==} - peerDependencies: - solid-js: ^1.6.12 + '@rollup/plugin-terser@0.4.4(rollup@2.79.2)': dependencies: - solid-js: 1.8.15 - dev: false + serialize-javascript: 6.0.2 + smob: 1.5.0 + terser: 5.34.1 + optionalDependencies: + rollup: 2.79.2 - /@solid-primitives/map@0.4.11(solid-js@1.8.15): - resolution: {integrity: sha512-OAD65RPxMDYv41oAvadPCqedZfDX92BbWLUC+Qwh9okVMDAF/5UM+t1916OAfGV01Cr30d/fxIT1x86P+gFgSQ==} - peerDependencies: - solid-js: ^1.6.12 + '@rollup/pluginutils@3.1.0(rollup@2.79.2)': dependencies: - '@solid-primitives/trigger': 1.0.11(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.2 - /@solid-primitives/media@2.2.8(solid-js@1.8.15): - resolution: {integrity: sha512-jcwTxjEn07W5KEeQIc0nR+07xRjvsWTf115PIwScCWgo6aPkfW3x74aq7lH5F3mLfb/9SeTn0ixz8fBVel3cHg==} - peerDependencies: - solid-js: ^1.6.12 + '@rollup/pluginutils@5.1.2(rollup@2.79.2)': dependencies: - '@solid-primitives/event-listener': 2.3.3(solid-js@1.8.15) - '@solid-primitives/rootless': 1.4.5(solid-js@1.8.15) - '@solid-primitives/static-store': 0.0.8(solid-js@1.8.15) - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 2.79.2 - /@solid-primitives/memo@1.3.8(solid-js@1.8.15): - resolution: {integrity: sha512-U75pfLFSxFmM2xbx1+2XPPyWbaXrnUFF10spbFuOUgJ7azrC+4y+FnrVi4RKqHw9gftd8aKQuTiyMQq468YLQw==} - peerDependencies: - solid-js: ^1.6.12 - dependencies: - '@solid-primitives/scheduled': 1.4.3(solid-js@1.8.15) - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@rollup/rollup-android-arm-eabi@4.24.0': + optional: true - /@solid-primitives/mouse@2.0.19(solid-js@1.8.15): - resolution: {integrity: sha512-mVYhWsMjjIdZ8iLIypiYGhNGtLOFVCmCeXaNQVYUjPOZkZOm9aaKjjGqgdwVw5RtJ0ZfNvKH/A5WE1t/fOBvLA==} - peerDependencies: - solid-js: ^1.6.12 - dependencies: - '@solid-primitives/event-listener': 2.3.3(solid-js@1.8.15) - '@solid-primitives/rootless': 1.4.5(solid-js@1.8.15) - '@solid-primitives/static-store': 0.0.8(solid-js@1.8.15) - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@rollup/rollup-android-arm64@4.24.0': + optional: true - /@solid-primitives/platform@0.0.100(solid-js@1.8.15): - resolution: {integrity: sha512-TMGeDtjA8b7xlUQGq3QhdR8SSa49bvqhFJ0iD+iy4fsnEHr9xA5hIDyBX/ntmz70SbOVyz+z9IdXwBnqurr4bQ==} - peerDependencies: - solid-js: ^1.4.0 - dependencies: - solid-js: 1.8.15 - dev: false + '@rollup/rollup-darwin-arm64@4.24.0': + optional: true - /@solid-primitives/platform@0.0.102(solid-js@1.8.15): - resolution: {integrity: sha512-1eZA1/HYOhmlZ9LrrGot+LUi/ypO2NXqfB+9F1WY98dGNDMz9pG9k+X7kg2YDJTUHDGbzY7WrsBRyAE8LurE7Q==} - peerDependencies: - solid-js: ^1.5.0 - dependencies: - solid-js: 1.8.15 - dev: true + '@rollup/rollup-darwin-x64@4.24.0': + optional: true - /@solid-primitives/platform@0.1.2(solid-js@1.8.15): - resolution: {integrity: sha512-sSxcZfuUrtxcwV0vdjmGnZQcflACzMfLriVeIIWXKp8hzaS3Or3tO6EFQkTd3L8T5dTq+kTtLvPscXIpL0Wzdg==} - peerDependencies: - solid-js: ^1.6.12 - dependencies: - solid-js: 1.8.15 - dev: false + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': + optional: true - /@solid-primitives/props@2.2.2(solid-js@1.8.15): - resolution: {integrity: sha512-vjRRoi/z3S2ylIJKCs+mN07oxDmt2S9gPCbTqkEx8jYHnvzocpt34UQdglLoSklTE6jI37JhW3g/Cs8Qr/peHg==} - peerDependencies: - solid-js: ^1.3.0 - dependencies: - '@solid-primitives/utils': 3.1.0(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@rollup/rollup-linux-arm-musleabihf@4.24.0': + optional: true - /@solid-primitives/props@3.1.11(solid-js@1.8.15): - resolution: {integrity: sha512-jZAKWwvDRHjiydIumDgMj68qviIbowQ1ci7nkEAgzgvanNkhKSQV8iPgR2jMk1uv7S2ZqXYHslVQTgJel/TEyg==} - peerDependencies: - solid-js: ^1.6.12 - dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@rollup/rollup-linux-arm64-gnu@4.24.0': + optional: true - /@solid-primitives/range@0.1.18(solid-js@1.8.15): - resolution: {integrity: sha512-F5OTdpRFdeLOPEHs92S714GKUk1ZUUmEJ45Z/Z5h6i43DHi7fUFgUL7LeHFxVgIjtGv+Tg5Op7aM9PdSo5iqeQ==} - peerDependencies: - solid-js: ^1.6.12 - dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@rollup/rollup-linux-arm64-musl@4.24.0': + optional: true - /@solid-primitives/refs@0.3.7(solid-js@1.8.15): - resolution: {integrity: sha512-aqidj/Sw5b2FvXgvNP8zH5HC2jEzDbFju+xRUCxZguaBmDJJyzec12fpZ9JV6SiWCyk08nZ/N4rfPNQnt1af1Q==} - peerDependencies: - solid-js: ^1.6.0 + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.24.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.24.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.24.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.24.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.24.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.24.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.24.0': + optional: true + + '@sentry-internal/browser-utils@8.33.1': dependencies: - '@solid-primitives/immutable': 0.1.10(solid-js@1.8.15) - '@solid-primitives/rootless': 1.4.5(solid-js@1.8.15) - '@solid-primitives/utils': 5.5.2(solid-js@1.8.15) - solid-js: 1.8.15 - dev: true + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 - /@solid-primitives/refs@1.0.8(solid-js@1.8.15): - resolution: {integrity: sha512-+jIsWG8/nYvhaCoG2Vg6CJOLgTmPKFbaCrNQKWfChalgUf9WrVxWw0CdJb3yX15n5lUcQ0jBo6qYtuVVmBLpBw==} - peerDependencies: - solid-js: ^1.6.12 + '@sentry-internal/feedback@8.33.1': dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 - /@solid-primitives/resize-observer@2.0.25(solid-js@1.8.15): - resolution: {integrity: sha512-jVDXkt2MiriYRaz4DYs62185d+6jQ+1DCsR+v7f6XMsIJJuf963qdBRFjtZtKXBaxdPNMyuPeDgf5XQe3EoDJg==} - peerDependencies: - solid-js: ^1.6.12 + '@sentry-internal/replay-canvas@8.33.1': dependencies: - '@solid-primitives/event-listener': 2.3.3(solid-js@1.8.15) - '@solid-primitives/rootless': 1.4.5(solid-js@1.8.15) - '@solid-primitives/static-store': 0.0.8(solid-js@1.8.15) - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 + '@sentry-internal/replay': 8.33.1 + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 - /@solid-primitives/rootless@1.4.5(solid-js@1.8.15): - resolution: {integrity: sha512-GFJE9GC3ojx0aUKqAUZmQPyU8fOVMtnVNrkdk2yS4kd17WqVSpXpoTmo9CnOwA+PG7FTzdIkogvfLQSLs4lrww==} - peerDependencies: - solid-js: ^1.6.12 + '@sentry-internal/replay@8.33.1': dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 + '@sentry-internal/browser-utils': 8.33.1 + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 - /@solid-primitives/scheduled@1.4.3(solid-js@1.8.15): - resolution: {integrity: sha512-HfWN5w7b7FEc6VPLBKnnE302h90jsLMuR28Fcf7neRGGf8jBj6wm6/UFQ00VlKexHFMR6KQ2u4VBh5a1ZcqM8g==} - peerDependencies: - solid-js: ^1.6.12 + '@sentry-internal/tracing@7.114.0': dependencies: - solid-js: 1.8.15 + '@sentry/core': 7.114.0 + '@sentry/types': 7.114.0 + '@sentry/utils': 7.114.0 - /@solid-primitives/script-loader@2.1.2(solid-js@1.8.15): - resolution: {integrity: sha512-dIeJ3FWfBAlYZzQ0XLpv1ukHcTxPYphCURS01Hri18ykb28eCOdYtgn3OVNgYzAvm9y8rW5IoyIMY+JzYD6Fhw==} - peerDependencies: - solid-js: ^1.6.12 + '@sentry/browser@8.33.1': dependencies: - solid-js: 1.8.15 - dev: false + '@sentry-internal/browser-utils': 8.33.1 + '@sentry-internal/feedback': 8.33.1 + '@sentry-internal/replay': 8.33.1 + '@sentry-internal/replay-canvas': 8.33.1 + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 - /@solid-primitives/set@0.4.11(solid-js@1.8.15): - resolution: {integrity: sha512-DBA4KjOvqc8aer0EO14MkJM6pgs+WHujkfRVwwE31i7NVzpiqp3RY9it2dvmLthj4MHzvOBoeZosgN8Pm44GiA==} - peerDependencies: - solid-js: ^1.6.12 + '@sentry/core@7.114.0': dependencies: - '@solid-primitives/trigger': 1.0.11(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@sentry/types': 7.114.0 + '@sentry/utils': 7.114.0 - /@solid-primitives/static-store@0.0.5(solid-js@1.8.15): - resolution: {integrity: sha512-ssQ+s/wrlFAEE4Zw8GV499yBfvWx7SMm+ZVc11wvao4T5xg9VfXCL9Oa+x4h+vPMvSV/Knv5LrsLiUa+wlJUXQ==} - peerDependencies: - solid-js: ^1.6.12 + '@sentry/core@8.33.1': dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 - /@solid-primitives/static-store@0.0.8(solid-js@1.8.15): - resolution: {integrity: sha512-ZecE4BqY0oBk0YG00nzaAWO5Mjcny8Fc06CdbXadH9T9lzq/9GefqcSe/5AtdXqjvY/DtJ5C6CkcjPZO0o/eqg==} - peerDependencies: - solid-js: ^1.6.12 + '@sentry/tracing@7.114.0': dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 + '@sentry-internal/tracing': 7.114.0 - /@solid-primitives/styles@0.0.101(solid-js@1.8.15): - resolution: {integrity: sha512-tHkeUMntlS/w+/zDzXJv82hhMy3J3q7tVV3ZTbahRo0hZienAM8ZJrCYZNK/fu2px8NHVSZFRufxv9qhIclPTw==} - peerDependencies: - solid-js: ^1.5.0 + '@sentry/types@7.114.0': {} + + '@sentry/types@8.33.1': {} + + '@sentry/utils@7.114.0': dependencies: - '@solid-primitives/rootless': 1.4.5(solid-js@1.8.15) - solid-js: 1.8.15 - dev: true + '@sentry/types': 7.114.0 - /@solid-primitives/styles@0.0.111(solid-js@1.8.15): - resolution: {integrity: sha512-1mBxOGAPXmfD5oYCvqjKBDN7SuNjz2qz7RdH7KtsuNLQh6lpuSKadtHnLvru0Y8Vz1InqTJisBIy/6P5kyDmPw==} - peerDependencies: - solid-js: ^1.6.12 + '@sentry/utils@8.33.1': dependencies: - '@solid-primitives/rootless': 1.4.5(solid-js@1.8.15) - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@sentry/types': 8.33.1 - /@solid-primitives/timer@1.3.9(solid-js@1.8.15): - resolution: {integrity: sha512-uD+4+boV7k+5W+hL5d30eodUXSwOfOQz8AfbMPVmLOHaTmd0mdfpw0NkYhyn1rgcx1bSn/nHTd8lraHiMhO/6w==} - peerDependencies: - solid-js: ^1.6.12 + '@shikijs/core@1.22.0': dependencies: - solid-js: 1.8.15 - dev: false + '@shikijs/engine-javascript': 1.22.0 + '@shikijs/engine-oniguruma': 1.22.0 + '@shikijs/types': 1.22.0 + '@shikijs/vscode-textmate': 9.3.0 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.3 - /@solid-primitives/transition-group@1.0.5(solid-js@1.8.15): - resolution: {integrity: sha512-G3FuqvL13kQ55WzWPX2ewiXdZ/1iboiX53195sq7bbkDbXqP6TYKiadwEdsaDogW5rPnPYAym3+xnsNplQJRKQ==} - peerDependencies: - solid-js: ^1.6.12 + '@shikijs/engine-javascript@1.22.0': dependencies: - solid-js: 1.8.15 - dev: false + '@shikijs/types': 1.22.0 + '@shikijs/vscode-textmate': 9.3.0 + oniguruma-to-js: 0.4.3 - /@solid-primitives/trigger@1.0.11(solid-js@1.8.15): - resolution: {integrity: sha512-4oc8grBzBit7ByXgE1aZ0QXfhdlhXaiFjDKYsOhRyUJa8fN4hdr2IgsYqjmHwxyjK+Dm2OUwkCI1bGkaLgtgXg==} - peerDependencies: - solid-js: ^1.6.12 + '@shikijs/engine-oniguruma@1.22.0': dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@shikijs/types': 1.22.0 + '@shikijs/vscode-textmate': 9.3.0 - /@solid-primitives/utils@2.2.1(solid-js@1.8.15): - resolution: {integrity: sha512-vaBO3MGOpjzitbSAVuJkYZnzNPRl6sRrw2do390DEBbfeqMfPpW4fAEb5/tI4b5T13V1xAY+giHoxqvVg2SRhQ==} - peerDependencies: - solid-js: ^1.4.1 + '@shikijs/types@1.22.0': dependencies: - solid-js: 1.8.15 - dev: false + '@shikijs/vscode-textmate': 9.3.0 + '@types/hast': 3.0.4 - /@solid-primitives/utils@3.1.0(solid-js@1.8.15): - resolution: {integrity: sha512-/rerChcwgFtHEgVCCBY7BXGHh7a83HcIAzR8QhXJ789geIVbBs2YxHF4UUZlG7ec00NKSfvO3+sQquN/xKQLMw==} - peerDependencies: - solid-js: ^1.5.0 + '@shikijs/vscode-textmate@9.3.0': {} + + '@sinclair/typebox@0.27.8': {} + + '@sinonjs/commons@1.8.6': dependencies: - solid-js: 1.8.15 - dev: false + type-detect: 4.0.8 - /@solid-primitives/utils@4.0.1(solid-js@1.8.15): - resolution: {integrity: sha512-06fSyBair7ZxCquMjIqJes29aNg65X776TVw4EUN7PBtdWsGUeIZ9F/H4ek7yrDSxaSDaPHeye5knEYsYAq2gA==} - peerDependencies: - solid-js: ^1.6.0 + '@sinonjs/fake-timers@8.1.0': dependencies: - solid-js: 1.8.15 - dev: true + '@sinonjs/commons': 1.8.6 - /@solid-primitives/utils@5.5.2(solid-js@1.8.15): - resolution: {integrity: sha512-L52ig3eHKU6CqbPCKJIb4lweBuINHBOERcE1duApyKozEN8+zCqEKwD1Qo9ljKeEzJTBGWClxNpwEiNTUWTGvg==} - peerDependencies: - solid-js: ^1.6.12 + '@solid-aria/button@0.1.3(solid-js@1.9.2)': dependencies: - solid-js: 1.8.15 - dev: true + '@solid-aria/focus': 0.1.4(solid-js@1.9.2) + '@solid-aria/interactions': 0.1.4(solid-js@1.9.2) + '@solid-aria/toggle': 0.1.3(solid-js@1.9.2) + '@solid-aria/types': 0.1.4(solid-js@1.9.2) + '@solid-aria/utils': 0.2.1(solid-js@1.9.2) + '@solid-primitives/props': 2.2.2(solid-js@1.9.2) + '@solid-primitives/utils': 2.2.1(solid-js@1.9.2) + solid-js: 1.9.2 - /@solid-primitives/utils@6.2.3(solid-js@1.8.15): - resolution: {integrity: sha512-CqAwKb2T5Vi72+rhebSsqNZ9o67buYRdEJrIFzRXz3U59QqezuuxPsyzTSVCacwS5Pf109VRsgCJQoxKRoECZQ==} - peerDependencies: - solid-js: ^1.6.12 + '@solid-aria/focus@0.1.4(solid-js@1.9.2)': dependencies: - solid-js: 1.8.15 + '@solid-aria/interactions': 0.1.4(solid-js@1.9.2) + '@solid-aria/types': 0.1.4(solid-js@1.9.2) + '@solid-aria/utils': 0.2.1(solid-js@1.9.2) + '@solid-primitives/props': 2.2.2(solid-js@1.9.2) + '@solid-primitives/utils': 2.2.1(solid-js@1.9.2) + solid-js: 1.9.2 - /@solidjs/router@0.13.0(solid-js@1.8.15): - resolution: {integrity: sha512-YHLbFv9J53+iG4yVrh0vVdYiyXPTk892UyZ1jiMPsUXn2dYkX4552N+8SjvlKWWsmNmYxaoefM6jZn1YtVIUUg==} - peerDependencies: - solid-js: ^1.8.6 + '@solid-aria/interactions@0.1.4(solid-js@1.9.2)': dependencies: - solid-js: 1.8.15 + '@solid-aria/types': 0.1.4(solid-js@1.9.2) + '@solid-aria/utils': 0.2.1(solid-js@1.9.2) + '@solid-primitives/platform': 0.0.100(solid-js@1.9.2) + '@solid-primitives/props': 2.2.2(solid-js@1.9.2) + '@solid-primitives/utils': 2.2.1(solid-js@1.9.2) + solid-js: 1.9.2 - /@solidjs/testing-library@0.8.6(@solidjs/router@0.13.0)(solid-js@1.8.15): - resolution: {integrity: sha512-MnDGfUw38SjE+lmCDZ44HeZq5WbDU7s/BTa7uvqv55GKatddoWiJmHanUAbuEtmwMdEv+fFQQzftkqrFXEn1BQ==} - engines: {node: '>= 14'} - peerDependencies: - '@solidjs/router': '>=0.9.0' - solid-js: '>=1.0.0' + '@solid-aria/toggle@0.1.3(solid-js@1.9.2)': dependencies: - '@solidjs/router': 0.13.0(solid-js@1.8.15) - '@testing-library/dom': 9.3.4 - solid-js: 1.8.15 - dev: true + '@solid-aria/focus': 0.1.4(solid-js@1.9.2) + '@solid-aria/interactions': 0.1.4(solid-js@1.9.2) + '@solid-aria/types': 0.1.4(solid-js@1.9.2) + '@solid-aria/utils': 0.2.1(solid-js@1.9.2) + '@solid-primitives/props': 2.2.2(solid-js@1.9.2) + '@solid-primitives/utils': 2.2.1(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/addon-actions@8.2.0-alpha.5: - resolution: {integrity: sha512-LVPOqkGgU9WbF79pTzMiAKBZMpRov7dEwHkhEnu4Z8ex2pFetTm5yMvbpWwCxtNZBOeAMpxPMG4lWxZ9hRofbA==} + '@solid-aria/types@0.1.4(solid-js@1.9.2)': dependencies: - '@storybook/core-events': 8.2.0-alpha.5 - '@storybook/global': 5.0.0 - '@types/uuid': 9.0.8 - dequal: 2.0.3 - polished: 4.3.1 - uuid: 9.0.1 - dev: true + '@solid-primitives/utils': 2.2.1(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/addon-backgrounds@8.2.0-alpha.5: - resolution: {integrity: sha512-5XBKVNO5a4Nt9ZPyI+ctX/vI6USw5M++1Mw7B+PxUTQIGmH/FlV52RUFv9kd32NRQ3jCrF3QxfjHbuLJyP1Ziw==} + '@solid-aria/utils@0.2.1(solid-js@1.9.2)': dependencies: - '@storybook/global': 5.0.0 - memoizerific: 1.11.3 - ts-dedent: 2.2.0 - dev: true + '@solid-aria/types': 0.1.4(solid-js@1.9.2) + '@solid-primitives/utils': 2.2.1(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/addon-controls@8.2.0-alpha.5(@types/react@18.3.3)(prettier@3.2.5)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-fygipOcpoRA4HC6AgsbWCQ4bjBGg7B2suBXKRSdSX0TRVhPpHnGEnysXXPyzo3cpA4VWho86q15MJAcvWNrSSA==} + '@solid-devtools/debugger@0.23.4(solid-js@1.9.2)': dependencies: - '@storybook/blocks': 8.2.0-alpha.5(@types/react@18.3.3)(prettier@3.2.5)(react-dom@18.3.1)(react@18.3.1) - dequal: 2.0.3 - lodash: 4.17.21 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - encoding - - prettier - - react - - react-dom - - supports-color - dev: true - - /@storybook/addon-docs@8.2.0-alpha.5(prettier@3.2.5): - resolution: {integrity: sha512-G0oZTF+HpF+WfYVcsvPoF+eHcWtgsHcUXpTEKgrgyv/WT/GpawWrrRSky9/iEk2mAWqw+oQKE4uh1nswaB1iOQ==} - dependencies: - '@babel/core': 7.24.7 - '@mdx-js/react': 3.0.1(@types/react@18.3.3)(react@18.3.1) - '@storybook/blocks': 8.2.0-alpha.5(@types/react@18.3.3)(prettier@3.2.5)(react-dom@18.3.1)(react@18.3.1) - '@storybook/client-logger': 8.2.0-alpha.5 - '@storybook/components': 8.2.0-alpha.5(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@storybook/csf-plugin': 8.2.0-alpha.5 - '@storybook/csf-tools': 8.2.0-alpha.5 - '@storybook/global': 5.0.0 - '@storybook/node-logger': 8.2.0-alpha.5 - '@storybook/preview-api': 8.2.0-alpha.5 - '@storybook/react-dom-shim': 8.2.0-alpha.5(react-dom@18.3.1)(react@18.3.1) - '@storybook/theming': 8.2.0-alpha.5(react-dom@18.3.1)(react@18.3.1) - '@storybook/types': 8.2.0-alpha.5 - '@types/react': 18.3.3 - fs-extra: 11.2.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - rehype-external-links: 3.0.0 - rehype-slug: 6.0.0 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@types/react-dom' - - encoding - - prettier - - supports-color - dev: true - - /@storybook/addon-essentials@8.2.0-alpha.5(@types/react@18.3.3)(prettier@3.2.5)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-EzYDBzp7iJShevPs0iHMVoYcMrZgUhxH+5Kc/NNG4LxBo1yBVYgj3fr1SZ1h0ChVti8SGc2slUcXLV/s1hZFUg==} - dependencies: - '@storybook/addon-actions': 8.2.0-alpha.5 - '@storybook/addon-backgrounds': 8.2.0-alpha.5 - '@storybook/addon-controls': 8.2.0-alpha.5(@types/react@18.3.3)(prettier@3.2.5)(react-dom@18.3.1)(react@18.3.1) - '@storybook/addon-docs': 8.2.0-alpha.5(prettier@3.2.5) - '@storybook/addon-highlight': 8.2.0-alpha.5 - '@storybook/addon-measure': 8.2.0-alpha.5 - '@storybook/addon-outline': 8.2.0-alpha.5 - '@storybook/addon-toolbars': 8.2.0-alpha.5 - '@storybook/addon-viewport': 8.2.0-alpha.5 - '@storybook/core-common': 8.2.0-alpha.5(prettier@3.2.5) - '@storybook/manager-api': 8.2.0-alpha.5(react-dom@18.3.1)(react@18.3.1) - '@storybook/node-logger': 8.2.0-alpha.5 - '@storybook/preview-api': 8.2.0-alpha.5 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - encoding - - prettier - - react - - react-dom - - supports-color - dev: true + '@nothing-but/utils': 0.12.1 + '@solid-devtools/shared': 0.13.2(solid-js@1.9.2) + '@solid-primitives/bounds': 0.0.118(solid-js@1.9.2) + '@solid-primitives/cursor': 0.0.112(solid-js@1.9.2) + '@solid-primitives/event-bus': 1.0.11(solid-js@1.9.2) + '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.2) + '@solid-primitives/keyboard': 1.2.8(solid-js@1.9.2) + '@solid-primitives/platform': 0.1.2(solid-js@1.9.2) + '@solid-primitives/rootless': 1.4.5(solid-js@1.9.2) + '@solid-primitives/scheduled': 1.4.3(solid-js@1.9.2) + '@solid-primitives/static-store': 0.0.5(solid-js@1.9.2) + '@solid-primitives/utils': 6.2.3(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/addon-highlight@8.2.0-alpha.5: - resolution: {integrity: sha512-A2wEiJ7ln7yX3LOPPJUeA5CAGpssHUXnOoBq97r20vfANztBpOrljVX4cuP7DXmr3G6ThZ0ME6uN/snwWQ3GoA==} + '@solid-devtools/shared@0.13.2(solid-js@1.9.2)': dependencies: - '@storybook/global': 5.0.0 - dev: true + '@solid-primitives/event-bus': 1.0.11(solid-js@1.9.2) + '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.2) + '@solid-primitives/media': 2.2.9(solid-js@1.9.2) + '@solid-primitives/refs': 1.0.8(solid-js@1.9.2) + '@solid-primitives/rootless': 1.4.5(solid-js@1.9.2) + '@solid-primitives/scheduled': 1.4.3(solid-js@1.9.2) + '@solid-primitives/static-store': 0.0.5(solid-js@1.9.2) + '@solid-primitives/styles': 0.0.111(solid-js@1.9.2) + '@solid-primitives/utils': 6.2.3(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/addon-interactions@8.2.0-alpha.5(vitest@1.4.0): - resolution: {integrity: sha512-mPXwuJpnFVAkZllEnYST4mz7kLHSjVttA+JaeVfRkgb0LehQHsIpUi1WcEcvLfq7s3E3ylz5ZS0kUJX2/WsC4A==} + '@solid-primitives/bounds@0.0.118(solid-js@1.9.2)': dependencies: - '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.2.0-alpha.5 - '@storybook/test': 8.2.0-alpha.5(vitest@1.4.0) - '@storybook/types': 8.2.0-alpha.5 - polished: 4.3.1 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@jest/globals' - - '@types/bun' - - '@types/jest' - - jest - - vitest - dev: true + '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.2) + '@solid-primitives/resize-observer': 2.0.26(solid-js@1.9.2) + '@solid-primitives/static-store': 0.0.5(solid-js@1.9.2) + '@solid-primitives/utils': 6.2.3(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/addon-links@8.2.0-alpha.5(react@18.3.1): - resolution: {integrity: sha512-h+fdVkZRbNGokCL4fPwGpOfKQPB5WWOAzYY/u7Q/6vL7GxPMUDRb8oP/ZM5srheOdZ1LudLu7gXlclabtVKLDQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - peerDependenciesMeta: - react: - optional: true + '@solid-primitives/cursor@0.0.112(solid-js@1.9.2)': dependencies: - '@storybook/csf': 0.1.8 - '@storybook/global': 5.0.0 - react: 18.3.1 - ts-dedent: 2.2.0 - dev: true + '@solid-primitives/utils': 6.2.3(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/addon-measure@8.2.0-alpha.5: - resolution: {integrity: sha512-zWqJlsgPAhq54YwyOXJqifrvH0/DK8o2E2/K2rt/xS+lwpIE9Yr4pfRECQ6UD7diGNXgKxVaMBbi35/krVsyMQ==} + '@solid-primitives/event-bus@1.0.11(solid-js@1.9.2)': dependencies: - '@storybook/global': 5.0.0 - tiny-invariant: 1.3.3 - dev: true + '@solid-primitives/utils': 6.2.3(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/addon-outline@8.2.0-alpha.5: - resolution: {integrity: sha512-KL3JbXsQh+CrwGFcvjAEiG8bZ9qe+J0QYipBCodyPzFl+sOhpsvMAzLL1LJxbwI2Qgf7O+iztmkqv/P360tnRA==} + '@solid-primitives/event-listener@2.3.3(solid-js@1.9.2)': dependencies: - '@storybook/global': 5.0.0 - ts-dedent: 2.2.0 - dev: true + '@solid-primitives/utils': 6.2.3(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/addon-toolbars@8.2.0-alpha.5: - resolution: {integrity: sha512-NHH/7WH7sBtARIb/KpVPSRaAKQjb5wj6ld6QKU0ozucgLIHp6qUxgapKIf8RAhfdDYHPmAR0bIK5konlSb8Zdw==} - dev: true + '@solid-primitives/i18n@2.1.1(solid-js@1.9.2)': + dependencies: + solid-js: 1.9.2 - /@storybook/addon-viewport@8.2.0-alpha.5: - resolution: {integrity: sha512-lhoKTT1lhlprgm+Dwg/Mm19wwqXhNOFCXHdWD8h9dKuhYKPv/9gvPJsAhIjRHIjJdAu8rjOeBUdBgPlS9d/HWg==} + '@solid-primitives/keyboard@1.2.8(solid-js@1.9.2)': dependencies: - memoizerific: 1.11.3 - dev: true + '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.2) + '@solid-primitives/rootless': 1.4.5(solid-js@1.9.2) + '@solid-primitives/utils': 6.2.3(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/blocks@8.2.0-alpha.5(@types/react@18.3.3)(prettier@3.2.5)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-G8xEdHpBy99Jy6PgCqKvJwRCSKPmLJqPtjd8gRfVVwJrFtTTZG6ELAUplC9KDWxAjP11WIRPG9O7boSkNxPyYQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true + '@solid-primitives/keyed@1.2.2(solid-js@1.9.2)': dependencies: - '@storybook/channels': 8.2.0-alpha.5 - '@storybook/client-logger': 8.2.0-alpha.5 - '@storybook/components': 8.2.0-alpha.5(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@storybook/core-events': 8.2.0-alpha.5 - '@storybook/csf': 0.1.8 - '@storybook/docs-tools': 8.2.0-alpha.5(prettier@3.2.5) - '@storybook/global': 5.0.0 - '@storybook/icons': 1.2.9(react-dom@18.3.1)(react@18.3.1) - '@storybook/manager-api': 8.2.0-alpha.5(react-dom@18.3.1)(react@18.3.1) - '@storybook/preview-api': 8.2.0-alpha.5 - '@storybook/theming': 8.2.0-alpha.5(react-dom@18.3.1)(react@18.3.1) - '@storybook/types': 8.2.0-alpha.5 - '@types/lodash': 4.17.0 - color-convert: 2.0.1 - dequal: 2.0.3 - lodash: 4.17.21 - markdown-to-jsx: 7.4.7(react@18.3.1) - memoizerific: 1.11.3 - polished: 4.3.1 - react: 18.3.1 - react-colorful: 5.6.1(react-dom@18.3.1)(react@18.3.1) - react-dom: 18.3.1(react@18.3.1) - telejson: 7.2.0 - tocbot: 4.28.2 - ts-dedent: 2.2.0 - util-deprecate: 1.0.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - encoding - - prettier - - supports-color - dev: true + solid-js: 1.9.2 - /@storybook/builder-manager@8.2.0-alpha.5(prettier@3.2.5): - resolution: {integrity: sha512-CcpMFUEGRhKFuz6BZbKXRCxDtuejJPD9hh1g/LOpJqsoALRbpjC2cGoK5PUJb05lvgkGUjR9kBwXfjDysVwcyg==} + '@solid-primitives/map@0.4.13(solid-js@1.9.2)': dependencies: - '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@storybook/core-common': 8.2.0-alpha.5(prettier@3.2.5) - '@storybook/manager': 8.2.0-alpha.5 - '@storybook/node-logger': 8.2.0-alpha.5 - '@types/ejs': 3.1.5 - '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.20.2) - browser-assert: 1.2.1 - ejs: 3.1.10 - esbuild: 0.20.2 - esbuild-plugin-alias: 0.2.1 - express: 4.19.2 - fs-extra: 11.2.0 - process: 0.11.10 - util: 0.12.5 - transitivePeerDependencies: - - encoding - - prettier - - supports-color - dev: true + '@solid-primitives/trigger': 1.1.0(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/builder-vite@8.2.0-alpha.10(prettier@3.2.5)(typescript@5.4.2)(vite@5.1.6): - resolution: {integrity: sha512-kWLMSuBb0VHW/iu+yg/IoI23c9jgz5ijzp84b7k8RFzbEnDaFGKOFybbHElvGhUEey0P4rauzDcarZ69sbg/Yg==} - peerDependencies: - '@preact/preset-vite': '*' - typescript: '>= 4.3.x' - vite: ^4.0.0 || ^5.0.0 - vite-plugin-glimmerx: '*' - peerDependenciesMeta: - '@preact/preset-vite': - optional: true - typescript: - optional: true - vite-plugin-glimmerx: - optional: true + '@solid-primitives/media@2.2.9(solid-js@1.9.2)': dependencies: - '@storybook/channels': 8.2.0-alpha.10 - '@storybook/client-logger': 8.2.0-alpha.10 - '@storybook/core-common': 8.2.0-alpha.10(prettier@3.2.5) - '@storybook/core-events': 8.2.0-alpha.10 - '@storybook/csf-plugin': 8.2.0-alpha.10 - '@storybook/node-logger': 8.2.0-alpha.10 - '@storybook/preview': 8.2.0-alpha.10 - '@storybook/preview-api': 8.2.0-alpha.10 - '@storybook/types': 8.2.0-alpha.10 - '@types/find-cache-dir': 3.2.1 - browser-assert: 1.2.1 - es-module-lexer: 1.5.3 - express: 4.19.2 - find-cache-dir: 3.3.2 - fs-extra: 11.2.0 - magic-string: 0.30.8 - ts-dedent: 2.2.0 - typescript: 5.4.2 - vite: 5.1.6 - transitivePeerDependencies: - - encoding - - prettier - - supports-color - dev: true + '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.2) + '@solid-primitives/rootless': 1.4.5(solid-js@1.9.2) + '@solid-primitives/static-store': 0.0.8(solid-js@1.9.2) + '@solid-primitives/utils': 6.2.3(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/channels@8.1.6: - resolution: {integrity: sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==} + '@solid-primitives/platform@0.0.100(solid-js@1.9.2)': dependencies: - '@storybook/client-logger': 8.1.6 - '@storybook/core-events': 8.1.6 - '@storybook/global': 5.0.0 - telejson: 7.2.0 - tiny-invariant: 1.3.3 - dev: true + solid-js: 1.9.2 - /@storybook/channels@8.2.0-alpha.10: - resolution: {integrity: sha512-b2+6TuPYR6fsfkgkvZO/LhvhlV2XeUh8Jbxk2MvmSwMa2hIR99N263wivUEK9398pSfqaqiyFQiUiaRWErUvJQ==} + '@solid-primitives/platform@0.1.2(solid-js@1.9.2)': dependencies: - '@storybook/client-logger': 8.2.0-alpha.10 - '@storybook/core-events': 8.2.0-alpha.10 - '@storybook/global': 5.0.0 - telejson: 7.2.0 - tiny-invariant: 1.3.3 - dev: true + solid-js: 1.9.2 - /@storybook/channels@8.2.0-alpha.5: - resolution: {integrity: sha512-Z+uEsD3iZ4R7eMFMXEUU9DRCC2HLvaYvdoej5bFqh75cCADiqAPZeL5mb/gUeiEIM0f5rx0npcFVYX1A1GR3rA==} + '@solid-primitives/props@2.2.2(solid-js@1.9.2)': dependencies: - '@storybook/client-logger': 8.2.0-alpha.5 - '@storybook/core-events': 8.2.0-alpha.5 - '@storybook/global': 5.0.0 - telejson: 7.2.0 - tiny-invariant: 1.3.3 - dev: true + '@solid-primitives/utils': 3.1.0(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/cli@8.2.0-alpha.5(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-1gEK2AZTTsBu2Yv/UDA/Nwxm0ptrf79uK8xR+OV3fBYEQGweDXh/wW5G1hwyGlgQiWaELNhl9jDmFAgy/SAsfQ==} - hasBin: true + '@solid-primitives/props@3.1.11(solid-js@1.9.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/types': 7.24.7 - '@ndelangen/get-tarball': 3.0.9 - '@storybook/codemod': 8.2.0-alpha.5 - '@storybook/core-common': 8.2.0-alpha.5(prettier@3.2.5) - '@storybook/core-events': 8.2.0-alpha.5 - '@storybook/core-server': 8.2.0-alpha.5(prettier@3.2.5)(react-dom@18.3.1)(react@18.3.1) - '@storybook/csf-tools': 8.2.0-alpha.5 - '@storybook/node-logger': 8.2.0-alpha.5 - '@storybook/telemetry': 8.2.0-alpha.5(prettier@3.2.5) - '@storybook/types': 8.2.0-alpha.5 - '@types/semver': 7.5.8 - '@yarnpkg/fslib': 2.10.3 - '@yarnpkg/libzip': 2.3.0 - chalk: 4.1.2 - commander: 6.2.1 - cross-spawn: 7.0.3 - detect-indent: 6.1.0 - envinfo: 7.13.0 - execa: 5.1.1 - find-up: 5.0.0 - fs-extra: 11.2.0 - get-npm-tarball-url: 2.1.0 - giget: 1.2.3 - globby: 14.0.1 - jscodeshift: 0.15.2(@babel/preset-env@7.24.7) - leven: 3.1.0 - ora: 5.4.1 - prettier: 3.2.5 - prompts: 2.4.2 - read-pkg-up: 7.0.1 - semver: 7.5.4 - strip-json-comments: 3.1.1 - tempy: 3.1.0 - tiny-invariant: 1.3.3 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@babel/preset-env' - - bufferutil - - encoding - - react - - react-dom - - supports-color - - utf-8-validate - dev: true + '@solid-primitives/utils': 6.2.3(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/client-logger@8.1.6: - resolution: {integrity: sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==} + '@solid-primitives/refs@1.0.8(solid-js@1.9.2)': dependencies: - '@storybook/global': 5.0.0 - dev: true + '@solid-primitives/utils': 6.2.3(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/client-logger@8.2.0-alpha.10: - resolution: {integrity: sha512-SN4aYOtpXl1EErjqGzc2CSOzR34R7O/4qGxklztD/ce9W/M15+Q85tjS5m7/erMbKt+7RnJ4o/LKhshdMRaRSw==} + '@solid-primitives/resize-observer@2.0.26(solid-js@1.9.2)': dependencies: - '@storybook/global': 5.0.0 - dev: true + '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.2) + '@solid-primitives/rootless': 1.4.5(solid-js@1.9.2) + '@solid-primitives/static-store': 0.0.8(solid-js@1.9.2) + '@solid-primitives/utils': 6.2.3(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/client-logger@8.2.0-alpha.5: - resolution: {integrity: sha512-DHdvd2uWSqc3u+O7pIH2KTSsDmu4OWTfmJwqSGvYnr4daLMXKhb/X6iHHooDox1L2KZm7ZWwBUOvMMvbsk2aTA==} + '@solid-primitives/rootless@1.4.5(solid-js@1.9.2)': dependencies: - '@storybook/global': 5.0.0 - dev: true - - /@storybook/codemod@8.2.0-alpha.5: - resolution: {integrity: sha512-ODs/ky0zaEkxUYp0pTpleE1/U/xhwEXyJsLiZS/3TygTrz3R9kCShPKUK76wmPGvkxwnRFdTO94Umqe+eugyvw==} - dependencies: - '@babel/core': 7.24.7 - '@babel/preset-env': 7.24.7(@babel/core@7.24.7) - '@babel/types': 7.24.7 - '@storybook/csf': 0.1.8 - '@storybook/csf-tools': 8.2.0-alpha.5 - '@storybook/node-logger': 8.2.0-alpha.5 - '@storybook/types': 8.2.0-alpha.5 - '@types/cross-spawn': 6.0.6 - cross-spawn: 7.0.3 - globby: 14.0.1 - jscodeshift: 0.15.2(@babel/preset-env@7.24.7) - lodash: 4.17.21 - prettier: 3.2.5 - recast: 0.23.9 - tiny-invariant: 1.3.3 - transitivePeerDependencies: - - supports-color - dev: true + '@solid-primitives/utils': 6.2.3(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/components@8.2.0-alpha.5(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-v6RiQyGHOekuMvpB2rnWXr292slSOwKze75zLnWw+UVWt1WPENs4nUCOPzBCOH2bPKsrXkYOcdMz7OsfIlpEkQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + '@solid-primitives/scheduled@1.4.3(solid-js@1.9.2)': dependencies: - '@radix-ui/react-dialog': 1.0.5(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) - '@storybook/client-logger': 8.2.0-alpha.5 - '@storybook/csf': 0.1.8 - '@storybook/global': 5.0.0 - '@storybook/icons': 1.2.9(react-dom@18.3.1)(react@18.3.1) - '@storybook/theming': 8.2.0-alpha.5(react-dom@18.3.1)(react@18.3.1) - '@storybook/types': 8.2.0-alpha.5 - memoizerific: 1.11.3 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - util-deprecate: 1.0.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - dev: true + solid-js: 1.9.2 - /@storybook/core-common@8.1.6(prettier@3.2.5): - resolution: {integrity: sha512-OTlfJFaTOB588ibXrrFm0TAXam6E5xV1VXSjNXL+fIifx8Kjln2HNSy1JKjvcblQneYiV4J1xPCVnAIe0EGHDg==} - peerDependencies: - prettier: ^2 || ^3 - peerDependenciesMeta: - prettier: - optional: true + '@solid-primitives/script-loader@2.2.0(solid-js@1.9.2)': dependencies: - '@storybook/core-events': 8.1.6 - '@storybook/csf-tools': 8.1.6 - '@storybook/node-logger': 8.1.6 - '@storybook/types': 8.1.6 - '@yarnpkg/fslib': 2.10.3 - '@yarnpkg/libzip': 2.3.0 - chalk: 4.1.2 - cross-spawn: 7.0.3 - esbuild: 0.20.2 - esbuild-register: 3.5.0(esbuild@0.20.2) - execa: 5.1.1 - file-system-cache: 2.3.0 - find-cache-dir: 3.3.2 - find-up: 5.0.0 - fs-extra: 11.2.0 - glob: 10.4.1 - handlebars: 4.7.8 - lazy-universal-dotenv: 4.0.0 - node-fetch: 2.7.0 - picomatch: 2.3.1 - pkg-dir: 5.0.0 - prettier: 3.2.5 - prettier-fallback: /prettier@3.2.5 - pretty-hrtime: 1.0.3 - resolve-from: 5.0.0 - semver: 7.5.4 - tempy: 3.1.0 - tiny-invariant: 1.3.3 - ts-dedent: 2.2.0 - util: 0.12.5 - transitivePeerDependencies: - - encoding - - supports-color - dev: true + solid-js: 1.9.2 - /@storybook/core-common@8.2.0-alpha.10(prettier@3.2.5): - resolution: {integrity: sha512-wVRW83B+WI/PpQ1gw9GWjnxHt3H5hbT1RSYbZp0zeuSJTJ3u+oj55HPdXWpVEe0oXHtCDKyleRHgswPdO2PNdg==} - peerDependencies: - prettier: ^2 || ^3 - peerDependenciesMeta: - prettier: - optional: true + '@solid-primitives/set@0.4.12(solid-js@1.9.2)': dependencies: - '@storybook/core-events': 8.2.0-alpha.10 - '@storybook/csf-tools': 8.2.0-alpha.10 - '@storybook/node-logger': 8.2.0-alpha.10 - '@storybook/types': 8.2.0-alpha.10 - '@yarnpkg/fslib': 2.10.3 - '@yarnpkg/libzip': 2.3.0 - chalk: 4.1.2 - cross-spawn: 7.0.3 - esbuild: 0.20.2 - esbuild-register: 3.5.0(esbuild@0.20.2) - execa: 5.1.1 - file-system-cache: 2.3.0 - find-cache-dir: 3.3.2 - find-up: 5.0.0 - fs-extra: 11.2.0 - glob: 10.4.1 - handlebars: 4.7.8 - lazy-universal-dotenv: 4.0.0 - node-fetch: 2.7.0 - picomatch: 2.3.1 - pkg-dir: 5.0.0 - prettier: 3.2.5 - prettier-fallback: /prettier@3.2.5 - pretty-hrtime: 1.0.3 - resolve-from: 5.0.0 - semver: 7.5.4 - tempy: 3.1.0 - tiny-invariant: 1.3.3 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: true + '@solid-primitives/trigger': 1.1.0(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/core-common@8.2.0-alpha.5(prettier@3.2.5): - resolution: {integrity: sha512-BSwPNGPj70Cv4d4gZDQgEDPR6tutbD7lCuH/Nq/Z5o/GLfk5yDpgqfjhPvtlEKmwAOzZ88YdPTXqL1VpgLm8LQ==} - peerDependencies: - prettier: ^2 || ^3 - peerDependenciesMeta: - prettier: - optional: true + '@solid-primitives/static-store@0.0.5(solid-js@1.9.2)': dependencies: - '@storybook/core-events': 8.2.0-alpha.5 - '@storybook/csf-tools': 8.2.0-alpha.5 - '@storybook/node-logger': 8.2.0-alpha.5 - '@storybook/types': 8.2.0-alpha.5 - '@yarnpkg/fslib': 2.10.3 - '@yarnpkg/libzip': 2.3.0 - chalk: 4.1.2 - cross-spawn: 7.0.3 - esbuild: 0.20.2 - esbuild-register: 3.5.0(esbuild@0.20.2) - execa: 5.1.1 - file-system-cache: 2.3.0 - find-cache-dir: 3.3.2 - find-up: 5.0.0 - fs-extra: 11.2.0 - glob: 10.4.1 - handlebars: 4.7.8 - lazy-universal-dotenv: 4.0.0 - node-fetch: 2.7.0 - picomatch: 2.3.1 - pkg-dir: 5.0.0 - prettier: 3.2.5 - prettier-fallback: /prettier@3.2.5 - pretty-hrtime: 1.0.3 - resolve-from: 5.0.0 - semver: 7.5.4 - tempy: 3.1.0 - tiny-invariant: 1.3.3 - ts-dedent: 2.2.0 - util: 0.12.5 - transitivePeerDependencies: - - encoding - - supports-color - dev: true + '@solid-primitives/utils': 6.2.3(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/core-events@8.1.6: - resolution: {integrity: sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==} + '@solid-primitives/static-store@0.0.8(solid-js@1.9.2)': dependencies: - '@storybook/csf': 0.1.8 - ts-dedent: 2.2.0 - dev: true + '@solid-primitives/utils': 6.2.3(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/core-events@8.2.0-alpha.10: - resolution: {integrity: sha512-9GO8cJPPHB6SKxoCg9n78otdRswRI6lwRrd+TFxfZsCUpjePOqqJT2QliGNT0AE8280TXreEex2/oAAjTV3D+g==} + '@solid-primitives/styles@0.0.111(solid-js@1.9.2)': dependencies: - '@storybook/csf': 0.1.8 - ts-dedent: 2.2.0 - dev: true + '@solid-primitives/rootless': 1.4.5(solid-js@1.9.2) + '@solid-primitives/utils': 6.2.3(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/core-events@8.2.0-alpha.5: - resolution: {integrity: sha512-keJeWLsC18jDx8tcrQwZEgkU88sEGUTaienkKdZ0OtTlJC36JfSQkkw3pM4r1+ad4p3Bv5lhMzdjG7awUKaOAw==} + '@solid-primitives/transition-group@1.0.5(solid-js@1.9.2)': dependencies: - '@storybook/csf': 0.1.8 - ts-dedent: 2.2.0 - dev: true - - /@storybook/core-server@8.2.0-alpha.5(prettier@3.2.5)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-Vq7ZBtBqXn5nhAoaErZmkhM27Yarmckg5M5PyAANO5LCsd4rT8TvryeU6q3M5WxY9ADcvcqjXc/mcTXXZ+ltTg==} - dependencies: - '@aw-web-design/x-default-browser': 1.4.126 - '@babel/core': 7.24.7 - '@babel/parser': 7.24.7 - '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 8.2.0-alpha.5(prettier@3.2.5) - '@storybook/channels': 8.2.0-alpha.5 - '@storybook/core-common': 8.2.0-alpha.5(prettier@3.2.5) - '@storybook/core-events': 8.2.0-alpha.5 - '@storybook/csf': 0.1.8 - '@storybook/csf-tools': 8.2.0-alpha.5 - '@storybook/docs-mdx': 3.1.0-next.0 - '@storybook/global': 5.0.0 - '@storybook/manager': 8.2.0-alpha.5 - '@storybook/manager-api': 8.2.0-alpha.5(react-dom@18.3.1)(react@18.3.1) - '@storybook/node-logger': 8.2.0-alpha.5 - '@storybook/preview-api': 8.2.0-alpha.5 - '@storybook/telemetry': 8.2.0-alpha.5(prettier@3.2.5) - '@storybook/types': 8.2.0-alpha.5 - '@types/detect-port': 1.3.5 - '@types/diff': 5.2.1 - '@types/node': 18.19.24 - '@types/pretty-hrtime': 1.0.3 - '@types/semver': 7.5.8 - better-opn: 3.0.2 - chalk: 4.1.2 - cli-table3: 0.6.5 - compression: 1.7.4 - detect-port: 1.6.1 - diff: 5.2.0 - express: 4.19.2 - fs-extra: 11.2.0 - globby: 14.0.1 - ip: 2.0.1 - lodash: 4.17.21 - open: 8.4.2 - pretty-hrtime: 1.0.3 - prompts: 2.4.2 - read-pkg-up: 7.0.1 - semver: 7.5.4 - telejson: 7.2.0 - tiny-invariant: 1.3.3 - ts-dedent: 2.2.0 - util: 0.12.5 - util-deprecate: 1.0.2 - watchpack: 2.4.1 - ws: 8.16.0 - transitivePeerDependencies: - - bufferutil - - encoding - - prettier - - react - - react-dom - - supports-color - - utf-8-validate - dev: true + solid-js: 1.9.2 - /@storybook/csf-plugin@8.2.0-alpha.10: - resolution: {integrity: sha512-8bGOGXZfjL3ZV0AsaKCa/xZWR6/XGvb6RoMud+nN/vd/sCQLlkxKLQBWVB0cK075RhBdocxDhPKxvllirbP2KA==} + '@solid-primitives/trigger@1.1.0(solid-js@1.9.2)': dependencies: - '@storybook/csf-tools': 8.2.0-alpha.10 - unplugin: 1.10.1 - transitivePeerDependencies: - - supports-color - dev: true + '@solid-primitives/utils': 6.2.3(solid-js@1.9.2) + solid-js: 1.9.2 - /@storybook/csf-plugin@8.2.0-alpha.5: - resolution: {integrity: sha512-DF3MBTwNZlWpSlPQoeLa7ZbsZX8ZRmFEd0YKhk+nFlUjRYHWIgFGaM2LjGLTxtN7RLKWi96GqgAy/iOeJv2uog==} + '@solid-primitives/utils@2.2.1(solid-js@1.9.2)': dependencies: - '@storybook/csf-tools': 8.2.0-alpha.5 - unplugin: 1.10.1 - transitivePeerDependencies: - - supports-color - dev: true + solid-js: 1.9.2 - /@storybook/csf-tools@8.1.6: - resolution: {integrity: sha512-jrKfHFNhiLBhWWW4/fm2wgKEVg55e6QuYUHY16KGd7PdPuzm+2Pt7jIl5V9yIj6a59YbjeMpT6jWPKbFx2TuCw==} + '@solid-primitives/utils@3.1.0(solid-js@1.9.2)': dependencies: - '@babel/generator': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - '@storybook/csf': 0.1.8 - '@storybook/types': 8.1.6 - fs-extra: 11.2.0 - recast: 0.23.9 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - dev: true + solid-js: 1.9.2 - /@storybook/csf-tools@8.2.0-alpha.10: - resolution: {integrity: sha512-g/OG30gIX7M20xBI8/0gvAR/GfplGhCxtPhkKyqfVVLU3InJq0C/DTXeif2A6TNwLMQapK1ZNv5Nn/chrVtGRA==} + '@solid-primitives/utils@6.2.3(solid-js@1.9.2)': dependencies: - '@babel/generator': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - '@storybook/csf': 0.1.8 - '@storybook/types': 8.2.0-alpha.10 - fs-extra: 11.2.0 - recast: 0.23.9 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - dev: true + solid-js: 1.9.2 - /@storybook/csf-tools@8.2.0-alpha.5: - resolution: {integrity: sha512-SHBMEZ70g4Y28qYmz4laryGRtaRePB9WbpOt7iVgSOBZEQA+UC7vagGlAXcW0ZlV7ZqQIef9aGxco351k7e9rQ==} + '@solidjs/router@0.14.7(solid-js@1.9.2)': dependencies: - '@babel/generator': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - '@storybook/csf': 0.1.8 - '@storybook/types': 8.2.0-alpha.5 - fs-extra: 11.2.0 - recast: 0.23.9 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - dev: true + solid-js: 1.9.2 - /@storybook/csf@0.1.8: - resolution: {integrity: sha512-Ntab9o7LjBCbFIao5l42itFiaSh/Qu+l16l/r/9qmV9LnYZkO+JQ7tzhdlwpgJfhs+B5xeejpdAtftDRyXNajw==} + '@solidjs/testing-library@0.8.10(@solidjs/router@0.14.7(solid-js@1.9.2))(solid-js@1.9.2)': dependencies: - type-fest: 2.19.0 - dev: true + '@testing-library/dom': 10.4.0 + solid-js: 1.9.2 + optionalDependencies: + '@solidjs/router': 0.14.7(solid-js@1.9.2) + + '@storybook/addon-actions@8.3.5(storybook@8.3.5)': + dependencies: + '@storybook/global': 5.0.0 + '@types/uuid': 9.0.8 + dequal: 2.0.3 + polished: 4.3.1 + storybook: 8.3.5 + uuid: 9.0.1 - /@storybook/docs-mdx@3.1.0-next.0: - resolution: {integrity: sha512-t4syFIeSyufieNovZbLruPt2DmRKpbwL4fERCZ1MifWDRIORCKLc4NCEHy+IqvIqd71/SJV2k4B51nF7vlJfmQ==} - dev: true + '@storybook/addon-backgrounds@8.3.5(storybook@8.3.5)': + dependencies: + '@storybook/global': 5.0.0 + memoizerific: 1.11.3 + storybook: 8.3.5 + ts-dedent: 2.2.0 - /@storybook/docs-tools@8.1.6(prettier@3.2.5): - resolution: {integrity: sha512-IhqQHSJ5nEBEJ162P/6/6c45toLinWpAkB7pwbAoP00djZSzfHNdQ4HfpZSGfD4GUJIvzsqMzUlyqCKLAoRPPA==} + '@storybook/addon-controls@8.3.5(storybook@8.3.5)': dependencies: - '@storybook/core-common': 8.1.6(prettier@3.2.5) - '@storybook/core-events': 8.1.6 - '@storybook/preview-api': 8.1.6 - '@storybook/types': 8.1.6 - '@types/doctrine': 0.0.3 - assert: 2.1.0 - doctrine: 3.0.0 + '@storybook/global': 5.0.0 + dequal: 2.0.3 lodash: 4.17.21 + storybook: 8.3.5 + ts-dedent: 2.2.0 + + '@storybook/addon-docs@8.3.5(storybook@8.3.5)': + dependencies: + '@mdx-js/react': 3.0.1(@types/react@18.3.11)(react@18.3.1) + '@storybook/blocks': 8.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.5) + '@storybook/csf-plugin': 8.3.5(storybook@8.3.5) + '@storybook/global': 5.0.0 + '@storybook/react-dom-shim': 8.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.5) + '@types/react': 18.3.11 + fs-extra: 11.2.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + rehype-external-links: 3.0.0 + rehype-slug: 6.0.0 + storybook: 8.3.5 + ts-dedent: 2.2.0 transitivePeerDependencies: - - encoding - - prettier - - supports-color - dev: true + - webpack-sources - /@storybook/docs-tools@8.2.0-alpha.5(prettier@3.2.5): - resolution: {integrity: sha512-2tKbHguR4Z3gEk1/A/rZD3GFEUVFVhPZajZ7EK3aT0cED8Eq86ZERuv76OwkEi+xsSFFEIDECXstRz8PCAUYvQ==} + '@storybook/addon-essentials@8.3.5(storybook@8.3.5)': dependencies: - '@storybook/core-common': 8.2.0-alpha.5(prettier@3.2.5) - '@storybook/core-events': 8.2.0-alpha.5 - '@storybook/preview-api': 8.2.0-alpha.5 - '@storybook/types': 8.2.0-alpha.5 - '@types/doctrine': 0.0.3 - assert: 2.1.0 - doctrine: 3.0.0 - lodash: 4.17.21 + '@storybook/addon-actions': 8.3.5(storybook@8.3.5) + '@storybook/addon-backgrounds': 8.3.5(storybook@8.3.5) + '@storybook/addon-controls': 8.3.5(storybook@8.3.5) + '@storybook/addon-docs': 8.3.5(storybook@8.3.5) + '@storybook/addon-highlight': 8.3.5(storybook@8.3.5) + '@storybook/addon-measure': 8.3.5(storybook@8.3.5) + '@storybook/addon-outline': 8.3.5(storybook@8.3.5) + '@storybook/addon-toolbars': 8.3.5(storybook@8.3.5) + '@storybook/addon-viewport': 8.3.5(storybook@8.3.5) + storybook: 8.3.5 + ts-dedent: 2.2.0 transitivePeerDependencies: - - encoding - - prettier - - supports-color - dev: true + - webpack-sources - /@storybook/global@5.0.0: - resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} - dev: true + '@storybook/addon-highlight@8.3.5(storybook@8.3.5)': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.3.5 - /@storybook/html@8.1.6(prettier@3.2.5): - resolution: {integrity: sha512-Mn2wP5CWeuhX4ejgsjzVloi/RwVneGOg/71mrn7C1118rYDG4Q1ICnTd9P+O0eW7RWHCZF4kGhQTq7HLlO0PQQ==} - engines: {node: '>=18.0.0'} + '@storybook/addon-interactions@8.3.5(storybook@8.3.5)': dependencies: - '@storybook/docs-tools': 8.1.6(prettier@3.2.5) '@storybook/global': 5.0.0 - '@storybook/preview-api': 8.1.6 - '@storybook/types': 8.1.6 + '@storybook/instrumenter': 8.3.5(storybook@8.3.5) + '@storybook/test': 8.3.5(storybook@8.3.5) + polished: 4.3.1 + storybook: 8.3.5 ts-dedent: 2.2.0 - transitivePeerDependencies: - - encoding - - prettier - - supports-color - dev: true - /@storybook/icons@1.2.9(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-cOmylsz25SYXaJL/gvTk/dl3pyk7yBFRfeXTsHvTA3dfhoU/LWSq0NKL9nM7WBasJyn6XPSGnLS4RtKXLw5EUg==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/addon-links@8.3.5(react@18.3.1)(storybook@8.3.5)': dependencies: + '@storybook/csf': 0.1.11 + '@storybook/global': 5.0.0 + storybook: 8.3.5 + ts-dedent: 2.2.0 + optionalDependencies: react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: true - /@storybook/instrumenter@8.2.0-alpha.5: - resolution: {integrity: sha512-8AA5HjtG9VWAayW/PRhl7gx8hmMxqmeaYgQBrls2gz2RqhjU00/QLI2iArqO9roUHzADjpsXlNcjAkExvJBllg==} + '@storybook/addon-measure@8.3.5(storybook@8.3.5)': dependencies: - '@storybook/channels': 8.2.0-alpha.5 - '@storybook/client-logger': 8.2.0-alpha.5 - '@storybook/core-events': 8.2.0-alpha.5 '@storybook/global': 5.0.0 - '@storybook/preview-api': 8.2.0-alpha.5 - '@vitest/utils': 1.4.0 - util: 0.12.5 - dev: true + storybook: 8.3.5 + tiny-invariant: 1.3.3 - /@storybook/manager-api@8.2.0-alpha.5(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-+GKdiKAG3oPCxdcBv46FMMQz+MNYOvcuoJbISesjyJSPlRuxIO+D7EYh5QA/AjjHGLpQt8GlvaXeGOuSuNO5HA==} + '@storybook/addon-outline@8.3.5(storybook@8.3.5)': dependencies: - '@storybook/channels': 8.2.0-alpha.5 - '@storybook/client-logger': 8.2.0-alpha.5 - '@storybook/core-events': 8.2.0-alpha.5 - '@storybook/csf': 0.1.8 '@storybook/global': 5.0.0 - '@storybook/icons': 1.2.9(react-dom@18.3.1)(react@18.3.1) - '@storybook/router': 8.2.0-alpha.5 - '@storybook/theming': 8.2.0-alpha.5(react-dom@18.3.1)(react@18.3.1) - '@storybook/types': 8.2.0-alpha.5 - dequal: 2.0.3 - lodash: 4.17.21 - memoizerific: 1.11.3 - store2: 2.14.3 - telejson: 7.2.0 + storybook: 8.3.5 ts-dedent: 2.2.0 - transitivePeerDependencies: - - react - - react-dom - dev: true - - /@storybook/manager@8.2.0-alpha.5: - resolution: {integrity: sha512-gY7mCiUTRZJDWT8y1C+3/cIg9lemPiicBbpEaGo3S+XAEP7HwevFWzcDfvGW49L1uqb2vdBuz6o2XxGON84Ecw==} - dev: true - /@storybook/node-logger@8.1.6: - resolution: {integrity: sha512-IZEiTLFHu8Oom/vdEGpisSw5CfU+cw6/fTaX1P3EVClFOWVuy8/3X5MPu4wJH3jPym6E2DBduIUFeRsiuq61gA==} - dev: true - - /@storybook/node-logger@8.2.0-alpha.10: - resolution: {integrity: sha512-emfSCYPGJpQUO/rDS+gJlLWfQHbUZ23fhFHCs9sq1jJWo9ocWoBClf4LnFsPEva8VWtUHhhoKf8T5/APPPkiCQ==} - dev: true + '@storybook/addon-toolbars@8.3.5(storybook@8.3.5)': + dependencies: + storybook: 8.3.5 - /@storybook/node-logger@8.2.0-alpha.5: - resolution: {integrity: sha512-8mA1phBebnAgdMiSFX6fLWWqxBG95RNVmRq6luwoYkF40XhSi4GlWW9psR63yOyzWSiv8Iz4H+f52Ju5326/Kw==} - dev: true + '@storybook/addon-viewport@8.3.5(storybook@8.3.5)': + dependencies: + memoizerific: 1.11.3 + storybook: 8.3.5 - /@storybook/preview-api@8.1.6: - resolution: {integrity: sha512-g9EvVg/DYqmjMh1uivJBJnSIvURyuK4LLabYicQNmYdQJscAeXX2bpMcA4aeci9BBm9B2RP7JbSnq7DbXZaJYA==} + '@storybook/blocks@8.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.5)': dependencies: - '@storybook/channels': 8.1.6 - '@storybook/client-logger': 8.1.6 - '@storybook/core-events': 8.1.6 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 - '@storybook/types': 8.1.6 - '@types/qs': 6.9.15 + '@storybook/icons': 1.2.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/lodash': 4.17.10 + color-convert: 2.0.1 dequal: 2.0.3 lodash: 4.17.21 + markdown-to-jsx: 7.5.0(react@18.3.1) memoizerific: 1.11.3 - qs: 6.12.1 - tiny-invariant: 1.3.3 + polished: 4.3.1 + react-colorful: 5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + storybook: 8.3.5 + telejson: 7.2.0 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - dev: true + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - /@storybook/preview-api@8.2.0-alpha.10: - resolution: {integrity: sha512-6HeyFxVM8AXge1t7F/F2rMG18n/qSGrfEJQk8xUGPYFJcl/lV+xjVgcuJ+K7vlG7cfjESSDbfkzNzyRqgTHNVw==} + '@storybook/builder-vite@8.4.0-alpha.6(storybook@8.3.5)(vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1))': dependencies: - '@storybook/channels': 8.2.0-alpha.10 - '@storybook/client-logger': 8.2.0-alpha.10 - '@storybook/core-events': 8.2.0-alpha.10 - '@storybook/csf': 0.1.8 - '@storybook/global': 5.0.0 - '@storybook/types': 8.2.0-alpha.10 - '@types/qs': 6.9.15 - dequal: 2.0.3 - lodash: 4.17.21 - memoizerific: 1.11.3 - qs: 6.12.1 - tiny-invariant: 1.3.3 + '@storybook/csf-plugin': 8.4.0-alpha.6(storybook@8.3.5) + browser-assert: 1.2.1 + storybook: 8.3.5 ts-dedent: 2.2.0 - util-deprecate: 1.0.2 - dev: true + vite: 5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1) + transitivePeerDependencies: + - webpack-sources + + '@storybook/components@8.3.5(storybook@8.3.5)': + dependencies: + storybook: 8.3.5 + + '@storybook/core@8.3.5': + dependencies: + '@storybook/csf': 0.1.11 + '@types/express': 4.17.21 + better-opn: 3.0.2 + browser-assert: 1.2.1 + esbuild: 0.23.1 + esbuild-register: 3.6.0(esbuild@0.23.1) + express: 4.21.1 + jsdoc-type-pratt-parser: 4.1.0 + process: 0.11.10 + recast: 0.23.9 + semver: 7.6.3 + util: 0.12.5 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@storybook/csf-plugin@8.3.5(storybook@8.3.5)': + dependencies: + storybook: 8.3.5 + unplugin: 1.14.1 + transitivePeerDependencies: + - webpack-sources + + '@storybook/csf-plugin@8.4.0-alpha.6(storybook@8.3.5)': + dependencies: + storybook: 8.3.5 + unplugin: 1.14.1 + transitivePeerDependencies: + - webpack-sources + + '@storybook/csf@0.1.11': + dependencies: + type-fest: 2.19.0 - /@storybook/preview-api@8.2.0-alpha.5: - resolution: {integrity: sha512-WPXHr4/n0bw69IW/tv6M6TrFMaZNUvt5+T6KcWpm8wzv36MHR7VHcr8Zn2v4ymXqRQ0hgQR3n2/tpQO5zWDIVA==} + '@storybook/global@5.0.0': {} + + '@storybook/html@8.3.5(storybook@8.3.5)': dependencies: - '@storybook/channels': 8.2.0-alpha.5 - '@storybook/client-logger': 8.2.0-alpha.5 - '@storybook/core-events': 8.2.0-alpha.5 - '@storybook/csf': 0.1.8 + '@storybook/components': 8.3.5(storybook@8.3.5) '@storybook/global': 5.0.0 - '@storybook/types': 8.2.0-alpha.5 - '@types/qs': 6.9.15 - dequal: 2.0.3 - lodash: 4.17.21 - memoizerific: 1.11.3 - qs: 6.12.1 - tiny-invariant: 1.3.3 + '@storybook/manager-api': 8.3.5(storybook@8.3.5) + '@storybook/preview-api': 8.3.5(storybook@8.3.5) + '@storybook/theming': 8.3.5(storybook@8.3.5) + storybook: 8.3.5 ts-dedent: 2.2.0 - util-deprecate: 1.0.2 - dev: true - /@storybook/preview@8.2.0-alpha.10: - resolution: {integrity: sha512-/A5t87NLFcMu0mz7YyLbJp7bqxq8xe1vZqknFfXsnkYx9S0IQHpm7XQ/Eq3NXJDuN7yGwE8elpFi6BelmItqfA==} - dev: true - - /@storybook/react-dom-shim@8.2.0-alpha.5(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-QG0w4dNWiGGwu0PasbeEHE7uW+kHjGsB5kltAnMOJB8BO6v6NRShsfAmEGz+OvKHJLosSvVUjojrj6Xhvr+VQw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + '@storybook/icons@1.2.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true - /@storybook/router@8.2.0-alpha.5: - resolution: {integrity: sha512-tbdFKNU2xY30lDNwiLwCGvUgmXInN6vDkYiPMVRzxGaY24bRbM0dxklYgDpqJWTBYEFEmd5ItGM0XNKgx5SV5w==} + '@storybook/instrumenter@8.3.5(storybook@8.3.5)': dependencies: - '@storybook/client-logger': 8.2.0-alpha.5 - memoizerific: 1.11.3 - qs: 6.12.1 - dev: true + '@storybook/global': 5.0.0 + '@vitest/utils': 2.1.2 + storybook: 8.3.5 + util: 0.12.5 - /@storybook/telemetry@8.2.0-alpha.5(prettier@3.2.5): - resolution: {integrity: sha512-oyfBSOXAsf3dwB7Onwh+8xbVcUGGWR0Ek6aNvMoI3Jojbgan6IKuzEL2P5Kx2p0cqoY2FSOfgxmaQqIHkqVzzQ==} + '@storybook/manager-api@8.3.5(storybook@8.3.5)': dependencies: - '@storybook/client-logger': 8.2.0-alpha.5 - '@storybook/core-common': 8.2.0-alpha.5(prettier@3.2.5) - '@storybook/csf-tools': 8.2.0-alpha.5 - chalk: 4.1.2 - detect-package-manager: 2.0.1 - fetch-retry: 5.0.6 - fs-extra: 11.2.0 - read-pkg-up: 7.0.1 - transitivePeerDependencies: - - encoding - - prettier - - supports-color - dev: true + storybook: 8.3.5 - /@storybook/test@8.2.0-alpha.5(vitest@1.4.0): - resolution: {integrity: sha512-u5g5maZYwj84S6NsHq5uSyyiBG9f6pcVw3+K+a8hwanMCJyybG6436krSNXLUUH8NF03KOFw+yRdi3CKHrZZ1Q==} - dependencies: - '@storybook/client-logger': 8.2.0-alpha.5 - '@storybook/core-events': 8.2.0-alpha.5 - '@storybook/instrumenter': 8.2.0-alpha.5 - '@storybook/preview-api': 8.2.0-alpha.5 - '@testing-library/dom': 9.3.4 - '@testing-library/jest-dom': 6.4.2(vitest@1.4.0) - '@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4) - '@vitest/expect': 1.3.1 - '@vitest/spy': 1.4.0 - util: 0.12.5 - transitivePeerDependencies: - - '@jest/globals' - - '@types/bun' - - '@types/jest' - - jest - - vitest - dev: true - - /@storybook/testing-library@0.2.2: - resolution: {integrity: sha512-L8sXFJUHmrlyU2BsWWZGuAjv39Jl1uAqUHdxmN42JY15M4+XCMjGlArdCCjDe1wpTSW6USYISA9axjZojgtvnw==} - deprecated: In Storybook 8, this package functionality has been integrated to a new package called @storybook/test, which uses Vitest APIs for an improved experience. When upgrading to Storybook 8 with 'npx storybook@latest upgrade', you will get prompted and will get an automigration for the new package. Please migrate when you can. + '@storybook/preview-api@8.3.5(storybook@8.3.5)': dependencies: - '@testing-library/dom': 9.3.4 - '@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4) - ts-dedent: 2.2.0 - dev: true + storybook: 8.3.5 - /@storybook/theming@8.2.0-alpha.5(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-A88YPmFATMjN4NGa4zuqUxOWOD23AsGNmkHBY+dshXKQCEu/rub8pFYy87NfSvkqqIGuoAAPvB3kTS0QC3D4xQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true + '@storybook/react-dom-shim@8.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.5)': dependencies: - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) - '@storybook/client-logger': 8.2.0-alpha.5 - '@storybook/global': 5.0.0 - memoizerific: 1.11.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - dev: true + storybook: 8.3.5 - /@storybook/types@8.1.6: - resolution: {integrity: sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==} + '@storybook/test@8.3.5(storybook@8.3.5)': dependencies: - '@storybook/channels': 8.1.6 - '@types/express': 4.17.21 - file-system-cache: 2.3.0 - dev: true + '@storybook/csf': 0.1.11 + '@storybook/global': 5.0.0 + '@storybook/instrumenter': 8.3.5(storybook@8.3.5) + '@testing-library/dom': 10.4.0 + '@testing-library/jest-dom': 6.5.0 + '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) + '@vitest/expect': 2.0.5 + '@vitest/spy': 2.0.5 + storybook: 8.3.5 + util: 0.12.5 - /@storybook/types@8.2.0-alpha.10: - resolution: {integrity: sha512-KPETpUZTHlJXpm6plaDRLD5wseRzKE0+2Zwqxj4Tx0OAu2gCVF/szQZzcBbxdmXUbE7RHwHEDFs3MRNQuhep6g==} + '@storybook/testing-library@0.2.2': dependencies: - '@storybook/channels': 8.2.0-alpha.10 - '@types/express': 4.17.21 - file-system-cache: 2.3.0 - dev: true + '@testing-library/dom': 9.3.4 + '@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4) + ts-dedent: 2.2.0 - /@storybook/types@8.2.0-alpha.5: - resolution: {integrity: sha512-XsJkswMxwjAOn6fKsgxrweJBl0LE7r9St5wHkcxqNPIR87T/euL5ZazQvQVUdUjZiZ7O0NkMcFB4tH7VR+6TCQ==} + '@storybook/theming@8.3.5(storybook@8.3.5)': dependencies: - '@storybook/channels': 8.2.0-alpha.5 - '@types/express': 4.17.21 - file-system-cache: 2.3.0 - dev: true + storybook: 8.3.5 - /@surma/rollup-plugin-off-main-thread@2.2.3: - resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + '@surma/rollup-plugin-off-main-thread@2.2.3': dependencies: ejs: 3.1.10 json5: 2.2.3 magic-string: 0.25.9 - string.prototype.matchall: 4.0.10 - dev: true + string.prototype.matchall: 4.0.11 - /@tanstack/query-core@5.48.0: - resolution: {integrity: sha512-lZAfPPeVIqXCswE9SSbG33B6/91XOWt/Iq41bFeWb/mnHwQSIfFRbkS4bfs+WhIk9abRArF9Id2fp0Mgo+hq6Q==} - dev: false + '@tanstack/query-core@5.59.0': {} - /@tanstack/solid-query@5.48.0(solid-js@1.8.15): - resolution: {integrity: sha512-ZhztevTrG9NPdfAoGRk1YD+O4Ao9dEIg9NdaP9yvcxHQ1jcSj8mEC56pCKKTeBcxR8o7L5fB8KhvbxBWzEtNWA==} - peerDependencies: - solid-js: ^1.6.0 + '@tanstack/solid-query@5.59.0(solid-js@1.9.2)': dependencies: - '@tanstack/query-core': 5.48.0 - solid-js: 1.8.15 - dev: false + '@tanstack/query-core': 5.59.0 + solid-js: 1.9.2 - /@tauri-apps/api@1.5.3: - resolution: {integrity: sha512-zxnDjHHKjOsrIzZm6nO5Xapb/BxqUq1tc7cGkFXsFkGTsSWgCPH1D8mm0XS9weJY2OaR73I3k3S+b7eSzJDfqA==} - engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'} - dev: false + '@tauri-apps/api@2.0.2': {} - /@tauri-apps/cli-darwin-arm64@1.2.3: - resolution: {integrity: sha512-phJN3fN8FtZZwqXg08bcxfq1+X1JSDglLvRxOxB7VWPq+O5SuB8uLyssjJsu+PIhyZZnIhTGdjhzLSFhSXfLsw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + '@tauri-apps/cli-darwin-arm64@2.0.2': optional: true - /@tauri-apps/cli-darwin-x64@1.2.3: - resolution: {integrity: sha512-jFZ/y6z8z6v4yliIbXKBXA7BJgtZVMsITmEXSuD6s5+eCOpDhQxbRkr6CA+FFfr+/r96rWSDSgDenDQuSvPAKw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + '@tauri-apps/cli-darwin-x64@2.0.2': optional: true - /@tauri-apps/cli-linux-arm-gnueabihf@1.2.3: - resolution: {integrity: sha512-C7h5vqAwXzY0kRGSU00Fj8PudiDWFCiQqqUNI1N+fhCILrzWZB9TPBwdx33ZfXKt/U4+emdIoo/N34v3TiAOmQ==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true + '@tauri-apps/cli-linux-arm-gnueabihf@2.0.2': optional: true - /@tauri-apps/cli-linux-arm64-gnu@1.2.3: - resolution: {integrity: sha512-buf1c8sdkuUzVDkGPQpyUdAIIdn5r0UgXU6+H5fGPq/Xzt5K69JzXaeo6fHsZEZghbV0hOK+taKV4J0m30UUMQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@tauri-apps/cli-linux-arm64-gnu@2.0.2': optional: true - /@tauri-apps/cli-linux-arm64-musl@1.2.3: - resolution: {integrity: sha512-x88wPS9W5xAyk392vc4uNHcKBBvCp0wf4H9JFMF9OBwB7vfd59LbQCFcPSu8f0BI7bPrOsyHqspWHuFL8ojQEA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@tauri-apps/cli-linux-arm64-musl@2.0.2': optional: true - /@tauri-apps/cli-linux-x64-gnu@1.2.3: - resolution: {integrity: sha512-ZMz1jxEVe0B4/7NJnlPHmwmSIuwiD6ViXKs8F+OWWz2Y4jn5TGxWKFg7DLx5OwQTRvEIZxxT7lXHi5CuTNAxKg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@tauri-apps/cli-linux-x64-gnu@2.0.2': optional: true - /@tauri-apps/cli-linux-x64-musl@1.2.3: - resolution: {integrity: sha512-B/az59EjJhdbZDzawEVox0LQu2ZHCZlk8rJf85AMIktIUoAZPFbwyiUv7/zjzA/sY6Nb58OSJgaPL2/IBy7E0A==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@tauri-apps/cli-linux-x64-musl@2.0.2': optional: true - /@tauri-apps/cli-win32-ia32-msvc@1.2.3: - resolution: {integrity: sha512-ypdO1OdC5ugNJAKO2m3sb1nsd+0TSvMS9Tr5qN/ZSMvtSduaNwrcZ3D7G/iOIanrqu/Nl8t3LYlgPZGBKlw7Ng==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true + '@tauri-apps/cli-win32-arm64-msvc@2.0.2': optional: true - /@tauri-apps/cli-win32-x64-msvc@1.2.3: - resolution: {integrity: sha512-CsbHQ+XhnV/2csOBBDVfH16cdK00gNyNYUW68isedmqcn8j+s0e9cQ1xXIqi+Hue3awp8g3ImYN5KPepf3UExw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + '@tauri-apps/cli-win32-ia32-msvc@2.0.2': optional: true - /@tauri-apps/cli@1.2.3: - resolution: {integrity: sha512-erxtXuPhMEGJPBtnhPILD4AjuT81GZsraqpFvXAmEJZ2p8P6t7MVBifCL8LznRknznM3jn90D3M8RNBP3wcXTw==} - engines: {node: '>= 10'} - hasBin: true + '@tauri-apps/cli-win32-x64-msvc@2.0.2': + optional: true + + '@tauri-apps/cli@2.0.2': optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 1.2.3 - '@tauri-apps/cli-darwin-x64': 1.2.3 - '@tauri-apps/cli-linux-arm-gnueabihf': 1.2.3 - '@tauri-apps/cli-linux-arm64-gnu': 1.2.3 - '@tauri-apps/cli-linux-arm64-musl': 1.2.3 - '@tauri-apps/cli-linux-x64-gnu': 1.2.3 - '@tauri-apps/cli-linux-x64-musl': 1.2.3 - '@tauri-apps/cli-win32-ia32-msvc': 1.2.3 - '@tauri-apps/cli-win32-x64-msvc': 1.2.3 - dev: true - - /@testing-library/dom@9.3.4: - resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} - engines: {node: '>=14'} + '@tauri-apps/cli-darwin-arm64': 2.0.2 + '@tauri-apps/cli-darwin-x64': 2.0.2 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.0.2 + '@tauri-apps/cli-linux-arm64-gnu': 2.0.2 + '@tauri-apps/cli-linux-arm64-musl': 2.0.2 + '@tauri-apps/cli-linux-x64-gnu': 2.0.2 + '@tauri-apps/cli-linux-x64-musl': 2.0.2 + '@tauri-apps/cli-win32-arm64-msvc': 2.0.2 + '@tauri-apps/cli-win32-ia32-msvc': 2.0.2 + '@tauri-apps/cli-win32-x64-msvc': 2.0.2 + + '@testing-library/dom@10.4.0': + dependencies: + '@babel/code-frame': 7.25.7 + '@babel/runtime': 7.25.7 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + '@testing-library/dom@9.3.4': dependencies: - '@babel/code-frame': 7.23.5 - '@babel/runtime': 7.24.0 + '@babel/code-frame': 7.25.7 + '@babel/runtime': 7.25.7 '@types/aria-query': 5.0.4 aria-query: 5.1.3 chalk: 4.1.2 dom-accessibility-api: 0.5.16 lz-string: 1.5.0 pretty-format: 27.5.1 - dev: true - /@testing-library/jest-dom@6.4.2(vitest@1.4.0): - resolution: {integrity: sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw==} - engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - peerDependencies: - '@jest/globals': '>= 28' - '@types/bun': latest - '@types/jest': '>= 28' - jest: '>= 28' - vitest: '>= 0.32' - peerDependenciesMeta: - '@jest/globals': - optional: true - '@types/bun': - optional: true - '@types/jest': - optional: true - jest: - optional: true - vitest: - optional: true + '@testing-library/jest-dom@6.5.0': dependencies: - '@adobe/css-tools': 4.3.3 - '@babel/runtime': 7.24.0 - aria-query: 5.3.0 + '@adobe/css-tools': 4.4.0 + aria-query: 5.3.2 chalk: 3.0.0 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 lodash: 4.17.21 redent: 3.0.0 - vitest: 1.4.0(jsdom@24.0.0) - dev: true - /@testing-library/user-event@14.5.2(@testing-library/dom@9.3.4): - resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} - engines: {node: '>=12', npm: '>=6'} - peerDependencies: - '@testing-library/dom': '>=7.21.4' + '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': + dependencies: + '@testing-library/dom': 10.4.0 + + '@testing-library/user-event@14.5.2(@testing-library/dom@9.3.4)': dependencies: '@testing-library/dom': 9.3.4 - dev: true - /@thisbeyond/solid-dnd@0.7.5(solid-js@1.8.15): - resolution: {integrity: sha512-DfI5ff+yYGpK9M21LhYwIPlbP2msKxN2ARwuu6GF8tT1GgNVDTI8VCQvH4TJFoVApP9d44izmAcTh/iTCH2UUw==} - engines: {node: '>=18.0.0', pnpm: '>=8.6.0'} - peerDependencies: - solid-js: ^1.5 + '@thisbeyond/solid-dnd@0.7.5(solid-js@1.9.2)': dependencies: - solid-js: 1.8.15 - dev: false + solid-js: 1.9.2 - /@tootallnate/once@1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - dev: true + '@tootallnate/once@1.1.2': {} - /@trivago/prettier-plugin-sort-imports@4.3.0(prettier@2.8.8): - resolution: {integrity: sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==} - peerDependencies: - '@vue/compiler-sfc': 3.x - prettier: 2.x - 3.x - peerDependenciesMeta: - '@vue/compiler-sfc': - optional: true + '@trivago/prettier-plugin-sort-imports@4.3.0(@vue/compiler-sfc@3.5.11)(prettier@2.8.8)': dependencies: '@babel/generator': 7.17.7 - '@babel/parser': 7.21.3 + '@babel/parser': 7.25.7 '@babel/traverse': 7.23.2 '@babel/types': 7.17.0 javascript-natural-sort: 0.7.1 lodash: 4.17.21 prettier: 2.8.8 + optionalDependencies: + '@vue/compiler-sfc': 3.5.11 transitivePeerDependencies: - supports-color - dev: true - /@trysound/sax@0.2.0: - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - dev: true + '@trysound/sax@0.2.0': {} - /@ts-morph/common@0.22.0: - resolution: {integrity: sha512-HqNBuV/oIlMKdkLshXd1zKBqNQCsuPEsgQOkfFQ/eUKjRlwndXW1AjN9LVkBEIukm00gGXSRmfkl0Wv5VXLnlw==} + '@ts-morph/common@0.22.0': dependencies: fast-glob: 3.3.2 - minimatch: 9.0.4 + minimatch: 9.0.5 mkdirp: 3.0.1 path-browserify: 1.0.1 - dev: true - /@types/aria-query@5.0.4: - resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - dev: true + '@types/aria-query@5.0.4': {} - /@types/aws-lambda@8.10.136: - resolution: {integrity: sha512-cmmgqxdVGhxYK9lZMYYXYRJk6twBo53ivtXjIUEFZxfxe4TkZTZBK3RRWrY2HjJcUIix0mdifn15yjOAat5lTA==} - dev: false + '@types/aws-lambda@8.10.145': {} - /@types/babel__core@7.20.5: - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.5 - dev: true + '@types/babel__traverse': 7.20.6 - /@types/babel__generator@7.6.8: - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.24.7 - dev: true + '@babel/types': 7.25.7 - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - dev: true + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 - /@types/babel__traverse@7.20.5: - resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} + '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.24.7 - dev: true + '@babel/types': 7.25.7 - /@types/body-parser@1.19.5: - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.12.2 - dev: true - - /@types/btoa-lite@1.0.2: - resolution: {integrity: sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg==} - dev: false + '@types/node': 20.16.11 - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - dependencies: - '@types/node': 20.12.2 - dev: true + '@types/btoa-lite@1.0.2': {} - /@types/cross-spawn@6.0.6: - resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==} + '@types/connect@3.4.38': dependencies: - '@types/node': 20.12.2 - dev: true + '@types/node': 20.16.11 - /@types/debug@4.1.12: - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/debug@4.1.12': dependencies: '@types/ms': 0.7.34 - dev: false - - /@types/detect-port@1.3.5: - resolution: {integrity: sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA==} - dev: true - - /@types/diff@5.2.1: - resolution: {integrity: sha512-uxpcuwWJGhe2AR1g8hD9F5OYGCqjqWnBUQFD8gMZsDbv8oPHzxJF6iMO6n8Tk0AdzlxoaaoQhOYlIg/PukVU8g==} - dev: true - /@types/doctrine@0.0.3: - resolution: {integrity: sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==} - dev: true - - /@types/ejs@3.1.5: - resolution: {integrity: sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==} - dev: true - - /@types/emscripten@1.39.13: - resolution: {integrity: sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw==} - dev: true - - /@types/estree@0.0.39: - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - dev: true + '@types/estree@0.0.39': {} - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true + '@types/estree@1.0.6': {} - /@types/express-serve-static-core@4.19.3: - resolution: {integrity: sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==} + '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 20.12.2 - '@types/qs': 6.9.15 + '@types/node': 20.16.11 + '@types/qs': 6.9.16 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - dev: true - /@types/express@4.17.21: - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + '@types/express@4.17.21': dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.3 - '@types/qs': 6.9.15 + '@types/express-serve-static-core': 4.19.6 + '@types/qs': 6.9.16 '@types/serve-static': 1.15.7 - dev: true - - /@types/find-cache-dir@3.2.1: - resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==} - dev: true - - /@types/graceful-fs@4.1.5: - resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} - dependencies: - '@types/node': 20.12.2 - dev: true - /@types/hast@2.3.10: - resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} + '@types/graceful-fs@4.1.9': dependencies: - '@types/unist': 2.0.10 - dev: false + '@types/node': 20.16.11 - /@types/hast@3.0.4: - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/hast@3.0.4': dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 - /@types/http-errors@2.0.4: - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - dev: true + '@types/http-errors@2.0.4': {} - /@types/istanbul-lib-coverage@2.0.4: - resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} - dev: true + '@types/istanbul-lib-coverage@2.0.6': {} - /@types/istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} + '@types/istanbul-lib-report@3.0.3': dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - dev: true + '@types/istanbul-lib-coverage': 2.0.6 - /@types/istanbul-reports@3.0.1: - resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} + '@types/istanbul-reports@3.0.4': dependencies: - '@types/istanbul-lib-report': 3.0.0 - dev: true + '@types/istanbul-lib-report': 3.0.3 - /@types/jest@27.5.2: - resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==} + '@types/jest@27.5.2': dependencies: jest-matcher-utils: 27.5.1 pretty-format: 27.5.1 - dev: true - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true + '@types/json-schema@7.0.15': {} - /@types/jsonwebtoken@9.0.6: - resolution: {integrity: sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==} + '@types/jsonwebtoken@9.0.7': dependencies: - '@types/node': 20.12.2 - dev: false + '@types/node': 20.16.11 - /@types/katex@0.16.7: - resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} - dev: false + '@types/katex@0.16.7': {} - /@types/lodash.defaultsdeep@4.6.9: - resolution: {integrity: sha512-pLtCFK0YkHfGtGLYLNMTbFB5/G5+RsmQCIbbHH8GOAXjv+gDkVilY98kILfe8JH2Kev0OCReYxp1AjxEjP8ixA==} + '@types/lodash.defaultsdeep@4.6.9': dependencies: - '@types/lodash': 4.17.0 - dev: true + '@types/lodash': 4.17.10 - /@types/lodash.isequal@4.5.8: - resolution: {integrity: sha512-uput6pg4E/tj2LGxCZo9+y27JNyB2OZuuI/T5F+ylVDYuqICLG2/ktjxx0v6GvVntAf8TvEzeQLcV0ffRirXuA==} + '@types/lodash.isequal@4.5.8': dependencies: - '@types/lodash': 4.17.0 - dev: true - - /@types/lodash@4.17.0: - resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==} - dev: true + '@types/lodash': 4.17.10 - /@types/mdast@3.0.15: - resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} - dependencies: - '@types/unist': 2.0.10 - dev: false + '@types/lodash@4.17.10': {} - /@types/mdast@4.0.3: - resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} + '@types/mdast@4.0.4': dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 - /@types/mdx@2.0.13: - resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - dev: true + '@types/mdx@2.0.13': {} - /@types/mime@1.3.5: - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - dev: true + '@types/mime@1.3.5': {} - /@types/ms@0.7.34: - resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - dev: false + '@types/ms@0.7.34': {} - /@types/node@17.0.45: - resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - dev: true + '@types/node@17.0.45': {} - /@types/node@18.19.24: - resolution: {integrity: sha512-eghAz3gnbQbvnHqB+mgB2ZR3aH6RhdEmHGS48BnV75KceQPHqabkxKI0BbUSsqhqy2Ddhc2xD/VAR9ySZd57Lw==} + '@types/node@18.19.55': dependencies: undici-types: 5.26.5 - dev: true - /@types/node@20.12.2: - resolution: {integrity: sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ==} + '@types/node@20.16.11': dependencies: - undici-types: 5.26.5 - - /@types/node@20.3.3: - resolution: {integrity: sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==} - dev: true - - /@types/normalize-package-data@2.4.4: - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - dev: true + undici-types: 6.19.8 - /@types/parse-json@4.0.2: - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - dev: true + '@types/node@22.7.5': + dependencies: + undici-types: 6.19.8 - /@types/prettier@2.7.1: - resolution: {integrity: sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==} - dev: true + '@types/parse-json@4.0.2': {} - /@types/pretty-hrtime@1.0.3: - resolution: {integrity: sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==} - dev: true + '@types/prettier@2.7.3': {} - /@types/prop-types@15.7.12: - resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} - dev: true + '@types/prop-types@15.7.13': {} - /@types/qs@6.9.15: - resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} - dev: true + '@types/qs@6.9.16': {} - /@types/range-parser@1.2.7: - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - dev: true + '@types/range-parser@1.2.7': {} - /@types/react@18.3.3: - resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} + '@types/react@18.3.11': dependencies: - '@types/prop-types': 15.7.12 + '@types/prop-types': 15.7.13 csstype: 3.1.3 - dev: true - /@types/resolve@1.17.1: - resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} - dependencies: - '@types/node': 20.12.2 - dev: true + '@types/resolve@1.20.2': {} - /@types/semver@7.5.8: - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - dev: true + '@types/semver@7.5.8': {} - /@types/send@0.17.4: - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.12.2 - dev: true + '@types/node': 20.16.11 - /@types/serve-static@1.15.7: - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 20.12.2 + '@types/node': 20.16.11 '@types/send': 0.17.4 - dev: true - - /@types/stack-utils@2.0.1: - resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} - dev: true - /@types/trusted-types@2.0.7: - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - dev: true + '@types/stack-utils@2.0.3': {} - /@types/unist@2.0.10: - resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} - dev: false + '@types/trusted-types@2.0.7': {} - /@types/unist@3.0.2: - resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} + '@types/unist@3.0.3': {} - /@types/uuid@9.0.8: - resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - dev: true + '@types/uuid@9.0.8': {} - /@types/ws@8.5.10: - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} + '@types/ws@8.5.12': dependencies: - '@types/node': 18.19.24 - dev: true + '@types/node': 20.16.11 - /@types/yargs-parser@21.0.0: - resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} - dev: true + '@types/yargs-parser@21.0.3': {} - /@types/yargs@16.0.4: - resolution: {integrity: sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==} + '@types/yargs@16.0.9': dependencies: - '@types/yargs-parser': 21.0.0 - dev: true + '@types/yargs-parser': 21.0.3 - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.2): - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)': dependencies: - '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.2) + '@eslint-community/regexpp': 4.11.1 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.3) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.2) - debug: 4.3.4 - eslint: 8.57.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.3) + debug: 4.3.7 + eslint: 8.57.1 graphemer: 1.4.0 - ignore: 5.2.0 + ignore: 5.3.2 natural-compare-lite: 1.4.0 - semver: 7.5.4 - tsutils: 3.21.0(typescript@5.4.2) - typescript: 5.4.2 + semver: 7.6.3 + tsutils: 3.21.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.2): - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.3))(eslint@9.12.0)(typescript@5.6.3)': + dependencies: + '@eslint-community/regexpp': 4.11.1 + '@typescript-eslint/parser': 8.8.1(eslint@9.12.0)(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.8.1 + '@typescript-eslint/type-utils': 8.8.1(eslint@9.12.0)(typescript@5.6.3) + '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.8.1 + eslint: 9.12.0 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.2) - debug: 4.3.4 - eslint: 8.57.0 - typescript: 5.4.2 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.3) + debug: 4.3.7 + eslint: 8.57.1 + optionalDependencies: + typescript: 5.6.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.8.1 + '@typescript-eslint/types': 8.8.1 + '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.8.1 + debug: 4.3.7 + eslint: 9.12.0 + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.4.2): - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/scope-manager@8.8.1': + dependencies: + '@typescript-eslint/types': 8.8.1 + '@typescript-eslint/visitor-keys': 8.8.1 + + '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.2) - debug: 4.3.4 - eslint: 8.57.0 - tsutils: 3.21.0(typescript@5.4.2) - typescript: 5.4.2 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.3) + debug: 4.3.7 + eslint: 8.57.1 + tsutils: 3.21.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@typescript-eslint/type-utils@8.8.1(eslint@9.12.0)(typescript@5.6.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.3) + '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.6.3) + debug: 4.3.7 + ts-api-utils: 1.3.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - eslint + - supports-color - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.2): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/types@5.62.0': {} + + '@typescript-eslint/types@8.8.1': {} + + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.3)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 + debug: 4.3.7 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.4 - tsutils: 3.21.0(typescript@5.4.2) - typescript: 5.4.2 + semver: 7.6.3 + tsutils: 3.21.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.2): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/typescript-estree@8.8.1(typescript@5.6.3)': + dependencies: + '@typescript-eslint/types': 8.8.1 + '@typescript-eslint/visitor-keys': 8.8.1 + debug: 4.3.7 + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.2) - eslint: 8.57.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.3) + eslint: 8.57.1 eslint-scope: 5.1.1 - semver: 7.5.4 + semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/utils@8.8.1(eslint@9.12.0)(typescript@5.6.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) + '@typescript-eslint/scope-manager': 8.8.1 + '@typescript-eslint/types': 8.8.1 + '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.3) + eslint: 9.12.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + + '@typescript-eslint/visitor-keys@8.8.1': dependencies: - '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/types': 8.8.1 eslint-visitor-keys: 3.4.3 - dev: true - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@ungap/structured-clone@1.2.0': {} - /@vitest/coverage-v8@1.6.0(vitest@1.4.0): - resolution: {integrity: sha512-KvapcbMY/8GYIG0rlwwOKCVNRc0OL20rrhFkg/CHNzncV03TE2XWvO5w9uZYoxNiMEBacAJt3unSOiZ7svePew==} - peerDependencies: - vitest: 1.6.0 + '@vitest/coverage-v8@2.1.2(vitest@2.1.2(@types/node@22.7.5)(jsdom@25.0.1)(lightningcss@1.27.0)(terser@5.34.1))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.4 + debug: 4.3.7 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.4 + istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.1.7 - magic-string: 0.30.8 - magicast: 0.3.4 - picocolors: 1.0.0 + magic-string: 0.30.11 + magicast: 0.3.5 std-env: 3.7.0 - strip-literal: 2.0.0 - test-exclude: 6.0.0 - vitest: 1.4.0(jsdom@24.0.0) + test-exclude: 7.0.1 + tinyrainbow: 1.2.0 + vitest: 2.1.2(@types/node@22.7.5)(jsdom@25.0.1)(lightningcss@1.27.0)(terser@5.34.1) transitivePeerDependencies: - supports-color - dev: true - /@vitest/expect@1.3.1: - resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==} + '@vitest/expect@2.0.5': + dependencies: + '@vitest/spy': 2.0.5 + '@vitest/utils': 2.0.5 + chai: 5.1.1 + tinyrainbow: 1.2.0 + + '@vitest/expect@2.1.2': + dependencies: + '@vitest/spy': 2.1.2 + '@vitest/utils': 2.1.2 + chai: 5.1.1 + tinyrainbow: 1.2.0 + + '@vitest/mocker@2.1.2(@vitest/spy@2.1.2)(vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1))': dependencies: - '@vitest/spy': 1.3.1 - '@vitest/utils': 1.3.1 - chai: 4.4.1 - dev: true + '@vitest/spy': 2.1.2 + estree-walker: 3.0.3 + magic-string: 0.30.11 + optionalDependencies: + vite: 5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1) + + '@vitest/pretty-format@2.0.5': + dependencies: + tinyrainbow: 1.2.0 - /@vitest/expect@1.4.0: - resolution: {integrity: sha512-Jths0sWCJZ8BxjKe+p+eKsoqev1/T8lYcrjavEaz8auEJ4jAVY0GwW3JKmdVU4mmNPLPHixh4GNXP7GFtAiDHA==} + '@vitest/pretty-format@2.1.2': dependencies: - '@vitest/spy': 1.4.0 - '@vitest/utils': 1.4.0 - chai: 4.4.1 - dev: true + tinyrainbow: 1.2.0 - /@vitest/runner@1.4.0: - resolution: {integrity: sha512-EDYVSmesqlQ4RD2VvWo3hQgTJ7ZrFQ2VSJdfiJiArkCerDAGeyF1i6dHkmySqk573jLp6d/cfqCN+7wUB5tLgg==} + '@vitest/runner@2.1.2': dependencies: - '@vitest/utils': 1.4.0 - p-limit: 5.0.0 + '@vitest/utils': 2.1.2 pathe: 1.1.2 - dev: true - /@vitest/snapshot@1.4.0: - resolution: {integrity: sha512-saAFnt5pPIA5qDGxOHxJ/XxhMFKkUSBJmVt5VgDsAqPTX6JP326r5C/c9UuCMPoXNzuudTPsYDZCoJ5ilpqG2A==} + '@vitest/snapshot@2.1.2': dependencies: - magic-string: 0.30.8 + '@vitest/pretty-format': 2.1.2 + magic-string: 0.30.11 pathe: 1.1.2 - pretty-format: 29.7.0 - dev: true - /@vitest/spy@1.3.1: - resolution: {integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==} + '@vitest/spy@2.0.5': dependencies: - tinyspy: 2.2.1 - dev: true + tinyspy: 3.0.2 - /@vitest/spy@1.4.0: - resolution: {integrity: sha512-Ywau/Qs1DzM/8Uc+yA77CwSegizMlcgTJuYGAi0jujOteJOUf1ujunHThYo243KG9nAyWT3L9ifPYZ5+As/+6Q==} + '@vitest/spy@2.1.2': dependencies: - tinyspy: 2.2.1 - dev: true + tinyspy: 3.0.2 - /@vitest/utils@1.3.1: - resolution: {integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==} + '@vitest/utils@2.0.5': dependencies: - diff-sequences: 29.6.3 + '@vitest/pretty-format': 2.0.5 estree-walker: 3.0.3 - loupe: 2.3.7 - pretty-format: 29.7.0 - dev: true + loupe: 3.1.2 + tinyrainbow: 1.2.0 - /@vitest/utils@1.4.0: - resolution: {integrity: sha512-mx3Yd1/6e2Vt/PUC98DcqTirtfxUyAZ32uK82r8rZzbtBeBo+nqgnjx/LvqQdWsrvNtm14VmurNgcf4nqY5gJg==} + '@vitest/utils@2.1.2': dependencies: - diff-sequences: 29.6.3 - estree-walker: 3.0.3 - loupe: 2.3.7 - pretty-format: 29.7.0 - dev: true + '@vitest/pretty-format': 2.1.2 + loupe: 3.1.2 + tinyrainbow: 1.2.0 - /@vue/compiler-core@3.4.19: - resolution: {integrity: sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w==} + '@vue/compiler-core@3.4.19': dependencies: - '@babel/parser': 7.24.7 + '@babel/parser': 7.25.7 '@vue/shared': 3.4.19 entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.2.0 - dev: true + source-map-js: 1.2.1 - /@vue/compiler-dom@3.4.19: - resolution: {integrity: sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA==} + '@vue/compiler-core@3.5.11': + dependencies: + '@babel/parser': 7.25.7 + '@vue/shared': 3.5.11 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + optional: true + + '@vue/compiler-dom@3.4.19': dependencies: '@vue/compiler-core': 3.4.19 '@vue/shared': 3.4.19 - dev: true - /@vue/compiler-sfc@3.4.19: - resolution: {integrity: sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg==} + '@vue/compiler-dom@3.5.11': + dependencies: + '@vue/compiler-core': 3.5.11 + '@vue/shared': 3.5.11 + optional: true + + '@vue/compiler-sfc@3.4.19': dependencies: - '@babel/parser': 7.24.7 + '@babel/parser': 7.25.7 '@vue/compiler-core': 3.4.19 '@vue/compiler-dom': 3.4.19 '@vue/compiler-ssr': 3.4.19 '@vue/shared': 3.4.19 estree-walker: 2.0.2 - magic-string: 0.30.8 - postcss: 8.4.35 - source-map-js: 1.2.0 - dev: true + magic-string: 0.30.11 + postcss: 8.4.47 + source-map-js: 1.2.1 - /@vue/compiler-ssr@3.4.19: - resolution: {integrity: sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw==} + '@vue/compiler-sfc@3.5.11': + dependencies: + '@babel/parser': 7.25.7 + '@vue/compiler-core': 3.5.11 + '@vue/compiler-dom': 3.5.11 + '@vue/compiler-ssr': 3.5.11 + '@vue/shared': 3.5.11 + estree-walker: 2.0.2 + magic-string: 0.30.11 + postcss: 8.4.47 + source-map-js: 1.2.1 + optional: true + + '@vue/compiler-ssr@3.4.19': dependencies: '@vue/compiler-dom': 3.4.19 '@vue/shared': 3.4.19 - dev: true - - /@vue/shared@3.4.19: - resolution: {integrity: sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw==} - dev: true - /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.20.2): - resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==} - engines: {node: '>=14.15.0'} - peerDependencies: - esbuild: '>=0.10.0' + '@vue/compiler-ssr@3.5.11': dependencies: - esbuild: 0.20.2 - tslib: 2.6.2 - dev: true + '@vue/compiler-dom': 3.5.11 + '@vue/shared': 3.5.11 + optional: true - /@yarnpkg/fslib@2.10.3: - resolution: {integrity: sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==} - engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} - dependencies: - '@yarnpkg/libzip': 2.3.0 - tslib: 1.14.1 - dev: true + '@vue/shared@3.4.19': {} - /@yarnpkg/libzip@2.3.0: - resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==} - engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} - dependencies: - '@types/emscripten': 1.39.13 - tslib: 1.14.1 - dev: true + '@vue/shared@3.5.11': + optional: true - /abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - dev: true + abab@2.0.6: {} - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} + accepts@1.3.8: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - dev: true - /acorn-globals@6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + acorn-globals@6.0.0: dependencies: acorn: 7.4.1 acorn-walk: 7.2.0 - dev: true - /acorn-jsx@5.3.2(acorn@8.11.3): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@8.12.1): dependencies: - acorn: 8.11.3 - dev: true - - /acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} - dev: true + acorn: 8.12.1 - /acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn-walk@7.2.0: {} - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@7.4.1: {} - /address@1.2.2: - resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} - engines: {node: '>= 10.0.0'} - dev: true + acorn@8.12.1: {} - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + agent-base@6.0.2: dependencies: - debug: 4.3.4 + debug: 4.3.7 transitivePeerDependencies: - supports-color - dev: true - /agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} - engines: {node: '>= 14'} + agent-base@7.1.1: dependencies: - debug: 4.3.4 + debug: 4.3.7 transitivePeerDependencies: - supports-color - dev: true - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 - dev: false - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.2 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: true - /ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - dev: true + ansi-colors@4.1.3: {} - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 - dev: true - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-regex@5.0.1: {} - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true + ansi-regex@6.1.0: {} - /ansi-sequence-parser@1.1.0: - resolution: {integrity: sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==} - dev: true + ansi-sequence-parser@1.1.1: {} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 - dev: true - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: true - /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: true + ansi-styles@5.2.0: {} - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true + ansi-styles@6.2.1: {} - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true - /app-root-dir@1.0.2: - resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} - dev: true - - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 - dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - - /aria-hidden@1.2.4: - resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} - engines: {node: '>=10'} - dependencies: - tslib: 2.6.2 - dev: true + argparse@2.0.1: {} - /aria-query@5.1.3: - resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + aria-query@5.1.3: dependencies: deep-equal: 2.2.3 - dev: true - /aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + aria-query@5.3.0: dependencies: dequal: 2.0.3 - dev: true - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.2 - dev: true + aria-query@5.3.2: {} - /array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} + array-buffer-byte-length@1.0.1: dependencies: call-bind: 1.0.7 is-array-buffer: 3.0.4 - dev: true - /array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - dev: true + array-flatten@1.1.1: {} - /array-includes@3.1.6: - resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} - engines: {node: '>= 0.4'} + array-includes@3.1.8: dependencies: call-bind: 1.0.7 - define-properties: 1.2.0 - es-abstract: 1.21.2 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 is-string: 1.0.7 - dev: true - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true + array-union@2.1.0: {} - /arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} + array.prototype.flat@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + arraybuffer.prototype.slice@1.0.3: dependencies: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.1 + es-abstract: 1.23.3 es-errors: 1.3.0 get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 - dev: true - - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true - /assert@2.1.0: - resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} - dependencies: - call-bind: 1.0.7 - is-nan: 1.3.2 - object-is: 1.1.6 - object.assign: 4.1.5 - util: 0.12.5 - dev: true + arrify@1.0.1: {} - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true + assertion-error@2.0.1: {} - /ast-types@0.16.1: - resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} - engines: {node: '>=4'} + ast-types@0.16.1: dependencies: - tslib: 2.6.2 - dev: true + tslib: 2.7.0 - /async@3.2.5: - resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - dev: true + async@3.2.6: {} - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true + asynckit@0.4.0: {} - /at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - dev: true + at-least-node@1.0.0: {} - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 - dev: true - /axios@0.26.1: - resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} + axios@0.26.1: dependencies: - follow-redirects: 1.15.2 + follow-redirects: 1.15.9 transitivePeerDependencies: - debug - dev: false - - /babel-core@7.0.0-bridge.0(@babel/core@7.24.7): - resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - dev: true - - /babel-jest@27.5.1(@babel/core@7.24.0): - resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - dependencies: - '@babel/core': 7.24.0 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1(@babel/core@7.24.0) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - /babel-jest@27.5.1(@babel/core@7.24.7): - resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.8.0 + babel-jest@27.5.1(@babel/core@7.25.7): dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.7 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1(@babel/core@7.24.7) + babel-preset-jest: 27.5.1(@babel/core@7.25.7) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-codegen@4.1.5: - resolution: {integrity: sha512-mId3XW/ndFe7kqUdDUPvMhzYC7ST2gC+C20pO2jVVRQqlHrB1KbMpI/mpawX3DKkAmAuAzWVcBFHb5ULRyNl4A==} - engines: {node: '>=10', npm: '>=6'} + babel-plugin-codegen@4.1.5: dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.25.7 babel-plugin-macros: 3.1.0 require-from-string: 2.0.2 - dev: true - /babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} + babel-plugin-istanbul@6.1.1: dependencies: - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.25.7 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 test-exclude: 6.0.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-jest-hoist@27.5.1: - resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + babel-plugin-jest-hoist@27.5.1: dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.5 - dev: true - - /babel-plugin-jsx-dom-expressions@0.37.17(@babel/core@7.24.0): - resolution: {integrity: sha512-1bv8rOTzs6TR3DVyVZ7ElxyPEhnS556FMWRIsB3gBPfkn/cSKaLvXLGk+X1lvI+SzcUo4G+UcmJrn3vr1ig8mQ==} - peerDependencies: - '@babel/core': ^7.20.12 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.24.0) - '@babel/types': 7.24.7 - html-entities: 2.3.3 - validate-html-nesting: 1.2.1 - dev: true + '@types/babel__traverse': 7.20.6 - /babel-plugin-jsx-dom-expressions@0.37.17(@babel/core@7.24.7): - resolution: {integrity: sha512-1bv8rOTzs6TR3DVyVZ7ElxyPEhnS556FMWRIsB3gBPfkn/cSKaLvXLGk+X1lvI+SzcUo4G+UcmJrn3vr1ig8mQ==} - peerDependencies: - '@babel/core': ^7.20.12 + babel-plugin-jsx-dom-expressions@0.39.2(@babel/core@7.25.7): dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.7 '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.24.7) - '@babel/types': 7.24.7 + '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7) + '@babel/types': 7.25.7 html-entities: 2.3.3 - validate-html-nesting: 1.2.1 - dev: true + jest-diff: 29.7.0 + parse5: 7.1.2 + validate-html-nesting: 1.2.2 - /babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} + babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.25.7 cosmiconfig: 7.1.0 resolve: 1.22.8 - dev: true - - /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.24.7): - resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.24.7) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.24.7): - resolution: {integrity: sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.7): dependencies: - '@babel/compat-data': 7.24.7 - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.7) + '@babel/compat-data': 7.25.7 + '@babel/core': 7.25.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.7) semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - - /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.7): - resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.7) - core-js-compat: 3.37.1 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.24.7): - resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.24.7) - core-js-compat: 3.26.1 - transitivePeerDependencies: - - supports-color - dev: true - /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.24.7): - resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} - peerDependencies: - '@babel/core': ^7.0.0-0 + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.7): dependencies: - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.24.7) + '@babel/core': 7.25.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.7) + core-js-compat: 3.38.1 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.7): - resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.7): dependencies: - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) + '@babel/core': 7.25.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.7) transitivePeerDependencies: - supports-color - dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.0): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.0 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.0) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.0) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.0) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.0) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.0) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.0) - dev: true - - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.7): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) - dev: true - - /babel-preset-jest@27.5.1(@babel/core@7.24.0): - resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.0.0 + babel-preset-current-node-syntax@1.1.0(@babel/core@7.25.7): dependencies: - '@babel/core': 7.24.0 - babel-plugin-jest-hoist: 27.5.1 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.0) - dev: true + '@babel/core': 7.25.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-import-attributes': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.7) - /babel-preset-jest@27.5.1(@babel/core@7.24.7): - resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.0.0 + babel-preset-jest@27.5.1(@babel/core@7.25.7): dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.7 babel-plugin-jest-hoist: 27.5.1 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.7) - dev: true - - /babel-preset-solid@1.8.15(@babel/core@7.24.0): - resolution: {integrity: sha512-P2yOQbB7Hn/m4YvpXV6ExHIMcgNWXWXcvY4kJzG3yqAB3hKS58OZRsvJ7RObsZWqXRvZTITBIwnpK0BMGu+ZIQ==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.0 - babel-plugin-jsx-dom-expressions: 0.37.17(@babel/core@7.24.0) - dev: true + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.7) - /babel-preset-solid@1.8.15(@babel/core@7.24.7): - resolution: {integrity: sha512-P2yOQbB7Hn/m4YvpXV6ExHIMcgNWXWXcvY4kJzG3yqAB3hKS58OZRsvJ7RObsZWqXRvZTITBIwnpK0BMGu+ZIQ==} - peerDependencies: - '@babel/core': ^7.0.0 + babel-preset-solid@1.9.2(@babel/core@7.25.7): dependencies: - '@babel/core': 7.24.7 - babel-plugin-jsx-dom-expressions: 0.37.17(@babel/core@7.24.7) - dev: true - - /bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + '@babel/core': 7.25.7 + babel-plugin-jsx-dom-expressions: 0.39.2(@babel/core@7.25.7) - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + bail@2.0.2: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true + balanced-match@1.0.2: {} - /before-after-hook@2.2.3: - resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} - dev: false + before-after-hook@2.2.3: {} - /better-opn@3.0.2: - resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} - engines: {node: '>=12.0.0'} + better-opn@3.0.2: dependencies: open: 8.4.2 - dev: true - - /big-integer@1.6.52: - resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} - engines: {node: '>=0.6'} - dev: true - - /binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - dev: true - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - dev: true + binary-extensions@2.3.0: {} - /body-parser@1.20.2: - resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@1.20.3: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -8207,246 +10400,136 @@ packages: http-errors: 2.0.0 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.11.0 + qs: 6.13.0 raw-body: 2.5.2 type-is: 1.6.18 unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - - /boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - /bottleneck@2.19.5: - resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} - dev: false + boolbase@1.0.0: {} - /bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} - dependencies: - big-integer: 1.6.52 - dev: true + bottleneck@2.19.5: {} - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - dev: true - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + braces@3.0.3: dependencies: - fill-range: 7.0.1 - dev: true + fill-range: 7.1.1 - /browser-assert@1.2.1: - resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} - dev: true + browser-assert@1.2.1: {} - /browser-process-hrtime@1.0.0: - resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - dev: true + browser-process-hrtime@1.0.0: {} - /browserify-zlib@0.1.4: - resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} + browserslist@4.23.3: dependencies: - pako: 0.2.9 - dev: true + caniuse-lite: 1.0.30001667 + electron-to-chromium: 1.5.33 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.23.3) - /browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.24.0: dependencies: - caniuse-lite: 1.0.30001598 - electron-to-chromium: 1.4.708 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.23.0) - dev: true + caniuse-lite: 1.0.30001667 + electron-to-chromium: 1.5.33 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.0) - /bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + bser@2.1.1: dependencies: node-int64: 0.4.0 - dev: true - - /btoa-lite@1.0.0: - resolution: {integrity: sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==} - dev: false - - /buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - dev: false - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + btoa-lite@1.0.0: {} - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true + buffer-equal-constant-time@1.0.1: {} - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: true + buffer-from@1.1.2: {} - /bundle-n-require@1.1.1: - resolution: {integrity: sha512-EB2wFjXF106LQLe/CYnKCMCdLeTW47AtcEtUfiqAOgr2a08k0+YgRklur2aLfEYHlhz6baMskZ8L2U92Hh0vyA==} + bundle-n-require@1.1.1: dependencies: esbuild: 0.20.2 node-eval: 2.0.0 - dev: true - /bundle-name@4.1.0: - resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} - engines: {node: '>=18'} + bundle-name@4.1.0: dependencies: run-applescript: 7.0.0 - dev: true - - /bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - dev: true - - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: true - /cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - dev: true + bytes@3.1.2: {} - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + cac@6.7.14: {} + + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 set-function-length: 1.2.2 - dev: true - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true + callsites@3.1.0: {} - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true + camelcase@5.3.1: {} - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true + camelcase@6.3.0: {} - /caniuse-api@3.0.0: - resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + caniuse-api@3.0.0: dependencies: - browserslist: 4.23.0 - caniuse-lite: 1.0.30001598 + browserslist: 4.23.3 + caniuse-lite: 1.0.30001667 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - dev: true - /caniuse-lite@1.0.30001598: - resolution: {integrity: sha512-j8mQRDziG94uoBfeFuqsJUNECW37DXpnvhcMJMdlH2u3MRkq1sAI0LJcXP1i/Py0KbSIC4UDj8YHPrTn5YsL+Q==} - dev: true + caniuse-lite@1.0.30001667: {} - /ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + ccount@2.0.1: {} - /chai@4.4.1: - resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} - engines: {node: '>=4'} + chai@5.1.1: dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.3 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.0.8 - dev: true + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.2 + pathval: 2.0.0 - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: true - /chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} + chalk@3.0.0: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: false + chalk@5.3.0: {} - /char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - dev: true + char-regex@1.0.2: {} - /character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - dev: true + character-entities-html4@2.1.0: {} - /character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - dev: true + character-entities-legacy@3.0.0: {} - /character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - dev: false + character-entities@2.0.2: {} - /check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} - dependencies: - get-func-name: 2.0.2 - dev: true + check-error@2.1.1: {} - /chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -8454,497 +10537,208 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true - - /chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - dev: true - - /chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - dev: true - /chromatic@11.5.3: - resolution: {integrity: sha512-EtDDXA4OdhsjE0IuLr5AZvOX+ZYXgqdRPtdTAQrM3nImjlteQ5biBmdEEEcdAXDTPU881rEUaUIy2owecB0wYg==} - hasBin: true - peerDependencies: - '@chromatic-com/cypress': ^0.*.* || ^1.0.0 - '@chromatic-com/playwright': ^0.*.* || ^1.0.0 - peerDependenciesMeta: - '@chromatic-com/cypress': - optional: true - '@chromatic-com/playwright': - optional: true - dev: true - - /ci-info@3.5.0: - resolution: {integrity: sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==} - dev: true - - /ci-info@3.8.0: - resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} - engines: {node: '>=8'} - dev: true - - /citty@0.1.6: - resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} - dependencies: - consola: 3.2.3 - dev: true - - /cjs-module-lexer@1.2.2: - resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} - dev: true - - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: false + chromatic@11.12.0: {} - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - dependencies: - restore-cursor: 3.1.0 - dev: true + ci-info@3.9.0: {} - /cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - dev: true + cjs-module-lexer@1.4.1: {} - /cli-table3@0.6.5: - resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} - engines: {node: 10.* || >= 12.*} - dependencies: - string-width: 4.2.3 - optionalDependencies: - '@colors/colors': 1.5.0 - dev: true + clean-stack@2.2.0: {} - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + cliui@7.0.4: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - - /clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} - dependencies: - is-plain-object: 2.0.4 - kind-of: 6.0.3 - shallow-clone: 3.0.1 - dev: true - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true - - /clsx@2.1.0: - resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} - engines: {node: '>=6'} - dev: false - - /co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: true + co@4.6.0: {} - /code-block-writer@12.0.0: - resolution: {integrity: sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==} - dev: true + code-block-writer@12.0.0: {} - /collect-v8-coverage@1.0.1: - resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} - dev: true + collect-v8-coverage@1.0.2: {} - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@1.9.3: dependencies: color-name: 1.1.3 - dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: true - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true + color-name@1.1.3: {} - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + color-name@1.1.4: {} - /color-name@2.0.0: - resolution: {integrity: sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==} - engines: {node: '>=12.20'} - dev: false + color-name@2.0.0: {} - /color-parse@2.0.2: - resolution: {integrity: sha512-eCtOz5w5ttWIUcaKLiktF+DxZO1R9KLNY/xhbV6CkhM7sR3GhVghmt6X6yOnzeaM24po+Z9/S1apbXMwA3Iepw==} + color-parse@2.0.2: dependencies: color-name: 2.0.0 - dev: false - /color-rgba@3.0.0: - resolution: {integrity: sha512-PPwZYkEY3M2THEHHV6Y95sGUie77S7X8v+h1r6LSAPF3/LL2xJ8duUXSrkic31Nzc4odPwHgUbiX/XuTYzQHQg==} + color-rgba@3.0.0: dependencies: color-parse: 2.0.2 color-space: 2.0.1 - dev: false - /color-space@2.0.1: - resolution: {integrity: sha512-nKqUYlo0vZATVOFHY810BSYjmCARrG7e5R3UE3CQlyjJTvv5kSSmPG1kzm/oDyyqjehM+lW1RnEt9It9GNa5JA==} - dev: false + color-space@2.0.1: {} - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - dev: true - - /comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true - - /commander@6.2.1: - resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} - engines: {node: '>= 6'} - dev: true - - /commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - dev: true - - /commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - dev: false + comma-separated-tokens@2.0.3: {} - /common-tags@1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} - dev: true + commander@2.20.3: {} - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: true + commander@7.2.0: {} - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: true + commander@8.3.0: {} - /compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - bytes: 3.0.0 - compressible: 2.0.18 - debug: 2.6.9 - on-headers: 1.0.2 - safe-buffer: 5.1.2 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: true + common-tags@1.8.2: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + concat-map@0.0.1: {} - /consola@3.2.3: - resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} - engines: {node: ^14.18.0 || >=16.10.0} - dev: true + confbox@0.1.8: {} - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 - dev: true - - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - dev: true - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: true - - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true + content-type@1.0.5: {} - /cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: true + convert-source-map@1.9.0: {} - /cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} - engines: {node: '>= 0.6'} - dev: true + convert-source-map@2.0.0: {} - /core-js-compat@3.26.1: - resolution: {integrity: sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==} - dependencies: - browserslist: 4.23.0 - dev: true + cookie-signature@1.0.6: {} - /core-js-compat@3.36.0: - resolution: {integrity: sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==} - dependencies: - browserslist: 4.23.0 - dev: true + cookie@0.7.1: {} - /core-js-compat@3.37.1: - resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} + core-js-compat@3.38.1: dependencies: - browserslist: 4.23.0 - dev: true + browserslist: 4.24.0 - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true + core-util-is@1.0.3: {} - /cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} + cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 import-fresh: 3.3.0 parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 - dev: true - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true - /crosspath@2.0.0: - resolution: {integrity: sha512-ju88BYCQ2uvjO2bR+SsgLSTwTSctU+6Vp2ePbKPgSCZyy4MWZxYsT738DlKVRE5utUjobjPRm1MkTYKJxCmpTA==} - engines: {node: '>=14.9.0'} + crosspath@2.0.0: dependencies: '@types/node': 17.0.45 - dev: true - - /crypto-random-string@2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - dev: true - /crypto-random-string@4.0.0: - resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} - engines: {node: '>=12'} - dependencies: - type-fest: 1.4.0 - dev: true + crypto-random-string@2.0.0: {} - /css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-select@5.1.0: dependencies: boolbase: 1.0.0 css-what: 6.1.0 domhandler: 5.0.3 domutils: 3.1.0 nth-check: 2.1.1 - dev: true - /css-selector-parser@3.0.5: - resolution: {integrity: sha512-3itoDFbKUNx1eKmVpYMFyqKX04Ww9osZ+dLgrk6GEv6KMVeXUhUnp4I5X+evw+u3ZxVU6RFXSSRxlTeMh8bA+g==} - dev: false + css-selector-parser@3.0.5: {} - /css-tree@2.2.1: - resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + css-tree@2.2.1: dependencies: mdn-data: 2.0.28 - source-map-js: 1.2.0 - dev: true + source-map-js: 1.2.1 - /css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-tree@2.3.1: dependencies: mdn-data: 2.0.30 - source-map-js: 1.2.0 - dev: true + source-map-js: 1.2.1 - /css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - dev: true + css-what@6.1.0: {} - /css.escape@1.5.1: - resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - dev: true + css.escape@1.5.1: {} - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: true + cssesc@3.0.0: {} - /cssnano-utils@4.0.2(postcss@8.4.35): - resolution: {integrity: sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + cssnano-utils@5.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.35 - dev: true + postcss: 8.4.47 - /csso@5.0.5: - resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + csso@5.0.5: dependencies: css-tree: 2.2.1 - dev: true - /cssom@0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - dev: true + cssom@0.3.8: {} - /cssom@0.4.4: - resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} - dev: true + cssom@0.4.4: {} - /cssstyle@2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} + cssstyle@2.3.0: dependencies: cssom: 0.3.8 - dev: true - /cssstyle@4.0.1: - resolution: {integrity: sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==} - engines: {node: '>=18'} + cssstyle@4.1.0: dependencies: - rrweb-cssom: 0.6.0 - dev: true + rrweb-cssom: 0.7.1 - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.1.3: {} - /data-urls@2.0.0: - resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} - engines: {node: '>=10'} + data-urls@2.0.0: dependencies: abab: 2.0.6 whatwg-mimetype: 2.3.0 whatwg-url: 8.7.0 - dev: true - /data-urls@5.0.0: - resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} - engines: {node: '>=18'} + data-urls@5.0.0: dependencies: whatwg-mimetype: 4.0.0 whatwg-url: 14.0.0 - dev: true - /data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} + data-view-buffer@1.0.1: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: true - /data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} + data-view-byte-length@1.0.1: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: true - /data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} + data-view-byte-offset@1.0.0: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: true - /dayjs@1.11.10: - resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} - dev: false + dayjs@1.11.13: {} - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@2.6.9: dependencies: ms: 2.0.0 - dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.7: dependencies: - ms: 2.1.2 + ms: 2.1.3 - /decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - dev: true + decimal.js@10.4.3: {} - /decode-named-character-reference@1.0.2: - resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + decode-named-character-reference@1.0.2: dependencies: character-entities: 2.0.2 - dev: false - /dedent@0.7.0: - resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} - dev: true + dedent@0.7.0: {} - /deep-eql@4.1.3: - resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} - engines: {node: '>=6'} - dependencies: - type-detect: 4.0.8 - dev: true + deep-eql@5.0.2: {} - /deep-equal@2.2.3: - resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} - engines: {node: '>= 0.4'} + deep-equal@2.2.3: dependencies: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 @@ -8959,399 +10753,151 @@ packages: object-is: 1.1.6 object-keys: 1.1.1 object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 + regexp.prototype.flags: 1.5.3 side-channel: 1.0.6 which-boxed-primitive: 1.0.2 which-collection: 1.0.2 which-typed-array: 1.1.15 - dev: true - - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true - - /deepmerge@4.2.2: - resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} - engines: {node: '>=0.10.0'} - dev: true - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: true + deep-is@0.1.4: {} - /default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} - dependencies: - bplist-parser: 0.2.0 - untildify: 4.0.0 - dev: true + deepmerge@4.3.1: {} - /default-browser-id@5.0.0: - resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} - engines: {node: '>=18'} - dev: true + default-browser-id@5.0.0: {} - /default-browser@5.2.1: - resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} - engines: {node: '>=18'} + default-browser@5.2.1: dependencies: bundle-name: 4.1.0 default-browser-id: 5.0.0 - dev: true - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - dependencies: - clone: 1.0.4 - dev: true - - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 - dev: true - /define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - dev: true - - /define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - dev: true + define-lazy-prop@2.0.0: {} - /define-properties@1.2.0: - resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} - engines: {node: '>= 0.4'} - dependencies: - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - dev: true + define-lazy-prop@3.0.0: {} - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 - dev: true - - /defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - dev: true - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: true - - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: true - - /deprecation@2.3.1: - resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} - dev: false - - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - /destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: true + delayed-stream@1.0.0: {} - /detect-browser@5.3.0: - resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} - dev: false + depd@2.0.0: {} - /detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - dev: true + deprecation@2.3.1: {} - /detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} - engines: {node: '>=0.10'} - hasBin: true - dev: true + dequal@2.0.3: {} - /detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - dev: true + destroy@1.2.0: {} - /detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - dev: true + detect-browser@5.3.0: {} - /detect-package-manager@2.0.1: - resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==} - engines: {node: '>=12'} - dependencies: - execa: 5.1.1 - dev: true + detect-libc@1.0.3: {} - /detect-port@1.6.1: - resolution: {integrity: sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==} - engines: {node: '>= 4.0.0'} - hasBin: true - dependencies: - address: 1.2.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true + detect-newline@3.1.0: {} - /devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + devlop@1.1.0: dependencies: dequal: 2.0.3 - /diff-sequences@27.5.1: - resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true - - /diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + diff-sequences@27.5.1: {} - /diff@5.2.0: - resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} - engines: {node: '>=0.3.1'} - dev: true + diff-sequences@29.6.3: {} - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + doctrine@3.0.0: dependencies: esutils: 2.0.3 - dev: true - /dom-accessibility-api@0.5.16: - resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - dev: true + dom-accessibility-api@0.5.16: {} - /dom-accessibility-api@0.6.3: - resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} - dev: true + dom-accessibility-api@0.6.3: {} - /dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 entities: 4.5.0 - dev: true - /domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: true + domelementtype@2.3.0: {} - /domexception@2.0.1: - resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} - engines: {node: '>=8'} - deprecated: Use your platform's native DOMException instead + domexception@2.0.1: dependencies: webidl-conversions: 5.0.0 - dev: true - /domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} + domhandler@5.0.3: dependencies: domelementtype: 2.3.0 - dev: true - /domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + domutils@3.1.0: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 - dev: true - /dotenv-expand@10.0.0: - resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} - engines: {node: '>=12'} - dev: true - - /dotenv@16.4.5: - resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} - engines: {node: '>=12'} - dev: true + dotenv@16.4.5: {} - /duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: true - - /duplexify@3.7.1: - resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} - dependencies: - end-of-stream: 1.4.4 - inherits: 2.0.4 - readable-stream: 2.3.7 - stream-shift: 1.0.3 - dev: true + duplexer@0.1.2: {} - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true + eastasianwidth@0.2.0: {} - /ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer: 5.2.1 - dev: false - /ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: true + ee-first@1.1.1: {} - /ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true + ejs@3.1.10: dependencies: - jake: 10.8.7 - dev: true + jake: 10.9.2 - /electron-to-chromium@1.4.708: - resolution: {integrity: sha512-iWgEEvREL4GTXXHKohhh33+6Y8XkPI5eHihDmm8zUk5Zo7HICEW+wI/j5kJ2tbuNUCXJ/sNXa03ajW635DiJXA==} - dev: true + electron-to-chromium@1.5.33: {} - /emittery@0.8.1: - resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} - engines: {node: '>=10'} - dev: true + emittery@0.8.1: {} - /emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} - dev: false + emoji-regex@10.4.0: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + emoji-regex@8.0.0: {} - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true + emoji-regex@9.2.2: {} - /encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: true + encodeurl@1.0.2: {} - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - dependencies: - once: 1.4.0 - dev: true + encodeurl@2.0.0: {} - /enhanced-resolve-jest@1.1.0: - resolution: {integrity: sha512-GM7yVsiLIaunYkCqnGRPO4kQbT6hPSgkyOFKTseWboPMjZ2tlpQYh2ttLuE8ORkR72Wb1f9SJBbnPu0AjcTzgg==} + enhanced-resolve-jest@1.1.0: dependencies: enhanced-resolve: 4.5.0 tslib: 1.14.1 - dev: true - /enhanced-resolve@4.5.0: - resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==} - engines: {node: '>=6.9.0'} + enhanced-resolve@4.5.0: dependencies: graceful-fs: 4.2.11 memory-fs: 0.5.0 tapable: 1.1.3 - dev: true - - /entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - /envinfo@7.13.0: - resolution: {integrity: sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==} - engines: {node: '>=4'} - hasBin: true - dev: true + entities@4.5.0: {} - /errno@0.1.8: - resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} - hasBin: true + errno@0.1.8: dependencies: prr: 1.0.1 - dev: true - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - dev: true - - /error-stack-parser-es@0.1.1: - resolution: {integrity: sha512-g/9rfnvnagiNf+DRMHEVGuGuIBlCIMDFoTA616HaP2l9PlCjGjVhD98PNbVSJvmK4TttqT5mV5tInMhoFgi+aA==} - dev: true - /es-abstract@1.21.2: - resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - es-set-tostringtag: 2.0.1 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.5 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 - gopd: 1.0.1 - has: 1.0.3 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - internal-slot: 1.0.5 - is-array-buffer: 3.0.2 - is-callable: 1.2.7 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - is-string: 1.0.7 - is-typed-array: 1.1.10 - is-weakref: 1.0.2 - object-inspect: 1.13.1 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.7 - string.prototype.trimend: 1.0.6 - string.prototype.trimstart: 1.0.6 - typed-array-length: 1.0.4 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - dev: true + error-stack-parser-es@0.1.5: {} - /es-abstract@1.23.1: - resolution: {integrity: sha512-r+YVn6hTqQb+P5kK0u3KeDqrmhHKm+OhU/Mw4jSL4eQtOxXmp75fXIUUb3sUqFZOlb/YtW5JRaIfEC3UyjYUZQ==} - engines: {node: '>= 0.4'} + es-abstract@1.23.3: dependencies: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 @@ -9368,7 +10914,7 @@ packages: function.prototype.name: 1.1.6 get-intrinsic: 1.2.4 get-symbol-description: 1.0.2 - globalthis: 1.0.3 + globalthis: 1.0.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 has-proto: 1.0.3 @@ -9384,37 +10930,29 @@ packages: is-string: 1.0.7 is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.13.1 + object-inspect: 1.13.2 object-keys: 1.1.1 object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 + regexp.prototype.flags: 1.5.3 safe-array-concat: 1.1.2 safe-regex-test: 1.0.3 string.prototype.trim: 1.2.9 string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.7 + string.prototype.trimstart: 1.0.8 typed-array-buffer: 1.0.2 typed-array-byte-length: 1.0.1 typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.5 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 which-typed-array: 1.1.15 - dev: true - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} + es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 - dev: true - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - dev: true + es-errors@1.3.0: {} - /es-get-iterator@1.1.3: - resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + es-get-iterator@1.1.3: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 @@ -9425,97 +10963,35 @@ packages: is-string: 1.0.7 isarray: 2.0.5 stop-iteration-iterator: 1.0.0 - dev: true - /es-module-lexer@1.5.3: - resolution: {integrity: sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==} - dev: true - - /es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} + es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 - dev: true - /es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.3: dependencies: get-intrinsic: 1.2.4 - has: 1.0.3 has-tostringtag: 1.0.2 - dev: true + hasown: 2.0.2 - /es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} + es-shim-unscopables@1.0.2: dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 hasown: 2.0.2 - dev: true - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + es-to-primitive@1.2.1: dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: true - - /esbuild-plugin-alias@0.2.1: - resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==} - dev: true - /esbuild-register@3.5.0(esbuild@0.20.2): - resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} - peerDependencies: - esbuild: '>=0.12 <1' + esbuild-register@3.6.0(esbuild@0.23.1): dependencies: - debug: 4.3.4 - esbuild: 0.20.2 + debug: 4.3.7 + esbuild: 0.23.1 transitivePeerDependencies: - supports-color - dev: true - /esbuild@0.19.12: - resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - 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 - dev: true - - /esbuild@0.20.2: - resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + esbuild@0.20.2: optionalDependencies: '@esbuild/aix-ppc64': 0.20.2 '@esbuild/android-arm': 0.20.2 @@ -9540,140 +11016,187 @@ packages: '@esbuild/win32-arm64': 0.20.2 '@esbuild/win32-ia32': 0.20.2 '@esbuild/win32-x64': 0.20.2 - dev: true - - /escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - dev: true - - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true - - /escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: true - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true - - /escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - dev: false - /escodegen@2.0.0: - resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} - engines: {node: '>=6.0'} - hasBin: true + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + esbuild@0.23.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 + + escalade@3.1.2: {} + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + escodegen@2.1.0: dependencies: esprima: 4.0.1 estraverse: 5.3.0 esutils: 2.0.3 - optionator: 0.8.3 optionalDependencies: source-map: 0.6.1 - dev: true - /eslint-config-prettier@8.10.0(eslint@8.57.0): - resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' + eslint-config-prettier@8.10.0(eslint@8.57.1): dependencies: - eslint: 8.57.0 - dev: true + eslint: 8.57.1 - /eslint-plugin-solid@0.12.1(eslint@8.57.0)(typescript@5.4.2): - resolution: {integrity: sha512-fM0sEg9PcS1mcNbWklwc+W/lOv1/XyEwXf53HmFFy4GOA8E3u41h8JW+hc+Vv1m3kh01umKoTalOTET08zKdAQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint-config-prettier@8.10.0(eslint@9.12.0): + dependencies: + eslint: 9.12.0 + + eslint-plugin-prettier@5.2.1(eslint-config-prettier@8.10.0(eslint@9.12.0))(eslint@9.12.0)(prettier@3.3.3): + dependencies: + eslint: 9.12.0 + prettier: 3.3.3 + prettier-linter-helpers: 1.0.0 + synckit: 0.9.2 + optionalDependencies: + eslint-config-prettier: 8.10.0(eslint@9.12.0) + + eslint-plugin-promise@7.1.0(eslint@9.12.0): + dependencies: + eslint: 9.12.0 + + eslint-plugin-simple-import-sort@12.1.1(eslint@9.12.0): + dependencies: + eslint: 9.12.0 + + eslint-plugin-solid@0.12.1(eslint@8.57.1)(typescript@5.6.3): dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.2) - eslint: 8.57.0 + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.3) + eslint: 8.57.1 is-html: 2.0.0 - jsx-ast-utils: 3.3.3 + jsx-ast-utils: 3.3.5 kebab-case: 1.0.2 known-css-properties: 0.24.0 style-to-object: 0.3.0 transitivePeerDependencies: - supports-color - typescript - dev: true - /eslint-plugin-spellcheck@0.0.20(eslint@8.57.0): - resolution: {integrity: sha512-GJa6vgzWAYqe0elKADAsiBRrhvqBnKyt7tpFSqlCZJsK2W9+K80oMyHhKolA7vJ13H5RCGs5/KCN+mKUyKoAiA==} - peerDependencies: - eslint: '>=0.8.0' + eslint-plugin-solid@0.14.3(eslint@9.12.0)(typescript@5.6.3): + dependencies: + '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.6.3) + eslint: 9.12.0 + estraverse: 5.3.0 + is-html: 2.0.0 + kebab-case: 1.0.2 + known-css-properties: 0.30.0 + style-to-object: 1.0.8 + transitivePeerDependencies: + - supports-color + - typescript + + eslint-plugin-spellcheck@0.0.20(eslint@8.57.1): dependencies: - eslint: 8.57.0 - globals: 13.17.0 + eslint: 8.57.1 + globals: 13.24.0 hunspell-spellchecker: 1.0.2 lodash: 4.17.21 - dev: true - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: true - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + eslint-scope@8.1.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 - /eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.1.0: {} + + eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@eslint-community/regexpp': 4.11.1 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.7 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.20.0 + globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -9683,78 +11206,91 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint@9.12.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) + '@eslint-community/regexpp': 4.11.1 + '@eslint/config-array': 0.18.0 + '@eslint/core': 0.6.0 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.12.0 + '@eslint/plugin-kit': 0.2.0 + '@humanfs/node': 0.16.5 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.3.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.7 + escape-string-regexp: 4.0.0 + eslint-scope: 8.1.0 + eslint-visitor-keys: 4.1.0 + espree: 10.2.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@10.2.0: dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 4.1.0 + + espree@9.6.1: + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 - dev: true - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true + esprima@4.0.1: {} - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} + esquery@1.6.0: dependencies: estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true + estraverse@4.3.0: {} - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /estree-walker@1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} - dev: true + estree-walker@1.0.1: {} - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true + estree-walker@2.0.2: {} - /estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.5 - dev: true + '@types/estree': 1.0.6 - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + esutils@2.0.3: {} - /etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - dev: true + etag@1.8.1: {} - /event-stream@3.3.4: - resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} + event-stream@3.3.4: dependencies: duplexer: 0.1.2 from: 0.1.7 @@ -9763,15 +11299,10 @@ packages: split: 0.3.3 stream-combiner: 0.0.4 through: 2.3.8 - dev: true - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: false + eventemitter3@5.0.1: {} - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + execa@5.1.1: dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -9782,68 +11313,44 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true - - /execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - dev: true - /exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - dev: true + exit@0.1.2: {} - /expect@27.5.1: - resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + expect@27.5.1: dependencies: '@jest/types': 27.5.1 jest-get-type: 27.5.1 jest-matcher-utils: 27.5.1 jest-message-util: 27.5.1 - dev: true - /express@4.19.2: - resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} - engines: {node: '>= 0.10.0'} + express@4.21.1: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.2 + body-parser: 1.20.3 content-disposition: 0.5.4 content-type: 1.0.5 - cookie: 0.6.0 + cookie: 0.7.1 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.2.0 + finalhandler: 1.3.1 fresh: 0.5.2 http-errors: 2.0.0 - merge-descriptors: 1.0.1 + merge-descriptors: 1.0.3 methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.7 + path-to-regexp: 0.1.10 proxy-addr: 2.0.7 - qs: 6.11.0 + qs: 6.13.0 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 + send: 0.19.0 + serve-static: 1.16.2 setprototypeof: 1.2.0 statuses: 2.0.1 type-is: 1.6.18 @@ -9851,91 +11358,63 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: true - /extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + extend@3.0.2: {} - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-deep-equal@3.1.3: {} - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} + fast-diff@1.3.0: {} + + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 - dev: true + micromatch: 4.0.8 - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + fast-levenshtein@2.0.6: {} + + fast-uri@3.0.2: {} - /fastq@1.13.0: - resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + fastq@1.17.1: dependencies: reusify: 1.0.4 - dev: true - /fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fb-watchman@2.0.2: dependencies: bser: 2.1.1 - dev: true - /fetch-retry@5.0.6: - resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} - dev: true + fdir@6.4.0(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@6.0.1: dependencies: - flat-cache: 3.0.4 - dev: true - - /file-size@1.0.0: - resolution: {integrity: sha512-tLIdonWTpABkU6Axg2yGChYdrOsy4V8xcm0IcyAP8fSsu6jiXLm5pgs083e4sq5fzNRZuAYolUbZyYmPvCKfwQ==} - dev: true + flat-cache: 3.2.0 - /file-system-cache@2.3.0: - resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} + file-entry-cache@8.0.0: dependencies: - fs-extra: 11.1.1 - ramda: 0.29.0 - dev: true + flat-cache: 4.0.1 - /filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + file-size@1.0.0: {} + + filelist@1.0.4: dependencies: minimatch: 5.1.6 - dev: true - /filesize@10.1.0: - resolution: {integrity: sha512-GTLKYyBSDz3nPhlLVPjPWZCnhkd9TrrRArNcy8Z+J2cqScB7h2McAzR6NBX6nYOoWafql0roY8hrocxnZBv9CQ==} - engines: {node: '>= 10.4.0'} - dev: true + filesize@10.1.6: {} - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - dev: true - /finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} + finalhandler@1.3.1: dependencies: debug: 2.6.9 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 @@ -9943,334 +11422,134 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - - /find-cache-dir@2.1.0: - resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} - engines: {node: '>=6'} - dependencies: - commondir: 1.0.1 - make-dir: 2.1.0 - pkg-dir: 3.0.0 - dev: true - - /find-cache-dir@3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} - dependencies: - commondir: 1.0.1 - make-dir: 3.1.0 - pkg-dir: 4.2.0 - dev: true - - /find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - dependencies: - locate-path: 3.0.0 - dev: true - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /find-yarn-workspace-root2@1.2.16: - resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + flat-cache@3.2.0: dependencies: - micromatch: 4.0.5 - pkg-dir: 4.2.0 - dev: true - - /flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.2.7 + flatted: 3.3.1 + keyv: 4.5.4 rimraf: 3.0.2 - dev: true - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - dev: true + flat-cache@4.0.1: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 - /flow-parser@0.237.2: - resolution: {integrity: sha512-mvI/kdfr3l1waaPbThPA8dJa77nHXrfZIun+SWvFwSwDjmeByU7mGJGRmv1+7guU6ccyLV8e1lqZA1lD4iMGnQ==} - engines: {node: '>=0.4.0'} - dev: true + flatted@3.3.1: {} - /follow-redirects@1.15.2: - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false + follow-redirects@1.15.9: {} - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.3: dependencies: is-callable: 1.2.7 - dev: true - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - dev: true - /form-data@3.0.1: - resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} - engines: {node: '>= 6'} + form-data@3.0.1: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - dev: true - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} + form-data@4.0.0: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - dev: true - - /forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - dev: true - - /fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: true - /from@0.1.7: - resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} - dev: true + forwarded@0.2.0: {} - /fromentries@1.3.2: - resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} - dev: false + fresh@0.5.2: {} - /fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - dev: true + from@0.1.7: {} - /fs-extra@11.1.1: - resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} - engines: {node: '>=14.14'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: true + fromentries@1.3.2: {} - /fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} + fs-extra@11.2.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} + fs-extra@9.1.0: dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - - /fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - dev: true - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + fs.realpath@1.0.0: {} - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.3: optional: true - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true - - /function.prototype.name@1.1.5: - resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.21.2 - functions-have-names: 1.2.3 - dev: true + function-bind@1.1.2: {} - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.6: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.1 + es-abstract: 1.23.3 functions-have-names: 1.2.3 - dev: true - - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true + functions-have-names@1.2.3: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + gensync@1.0.0-beta.2: {} - /get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - dev: true + get-caller-file@2.0.5: {} - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.2 - dev: true - - /get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} - dev: true - - /get-npm-tarball-url@2.1.0: - resolution: {integrity: sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA==} - engines: {node: '>=12.17'} - dev: true - - /get-own-enumerable-property-symbols@3.0.2: - resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} - dev: true - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: true - - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true + get-own-enumerable-property-symbols@3.0.2: {} - /get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - dev: true + get-package-type@0.1.0: {} - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - dev: true + get-stream@6.0.1: {} - /get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} + get-symbol-description@1.0.2: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - dev: true - - /giget@1.2.3: - resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==} - hasBin: true - dependencies: - citty: 0.1.6 - consola: 3.2.3 - defu: 6.1.4 - node-fetch-native: 1.6.4 - nypm: 0.3.8 - ohash: 1.1.3 - pathe: 1.1.2 - tar: 6.2.1 - dev: true - /github-slugger@2.0.0: - resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} - dev: true + github-slugger@2.0.0: {} - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: true - /glob@10.4.1: - resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} - engines: {node: '>=16 || 14 >=14.18'} - hasBin: true + glob@10.4.5: dependencies: - foreground-child: 3.1.1 - jackspeak: 3.4.0 - minimatch: 9.0.4 + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 minipass: 7.1.2 + package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -10278,984 +11557,472 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true + globals@11.12.0: {} - /globals@13.17.0: - resolution: {integrity: sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==} - engines: {node: '>=8'} + globals@13.24.0: dependencies: type-fest: 0.20.2 - dev: true - /globals@13.20.0: - resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true + globals@14.0.0: {} - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 - dev: true + gopd: 1.0.1 - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 - dev: true - - /globby@14.0.1: - resolution: {integrity: sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==} - engines: {node: '>=18'} - dependencies: - '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.2 - ignore: 5.3.1 - path-type: 5.0.0 - slash: 5.1.0 - unicorn-magic: 0.1.0 - dev: true - /goober@2.1.14(csstype@3.1.3): - resolution: {integrity: sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==} - peerDependencies: - csstype: ^3.0.10 + goober@2.1.15(csstype@3.1.3): dependencies: csstype: 3.1.3 - dev: false - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.0.1: dependencies: get-intrinsic: 1.2.4 - dev: true - - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + graceful-fs@4.2.11: {} - /gunzip-maybe@1.4.2: - resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} - hasBin: true - dependencies: - browserify-zlib: 0.1.4 - is-deflate: 1.0.0 - is-gzip: 1.0.0 - peek-stream: 1.1.3 - pumpify: 1.5.1 - through2: 2.0.5 - dev: true - - /handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.17.4 - dev: true + graphemer@1.4.0: {} - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true + has-bigints@1.0.2: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true + has-flag@3.0.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + has-flag@4.0.0: {} - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.0 - dev: true - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - dev: true + has-proto@1.0.3: {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.0.3: {} - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 - dev: true - - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.2 - dev: true - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - dev: true - /hast-util-from-dom@5.0.0: - resolution: {integrity: sha512-d6235voAp/XR3Hh5uy7aGLbM3S4KamdW0WEgOaU1YoewnuYw4HXb5eRtv9g65m/RFGEfUY1Mw4UqCc5Y8L4Stg==} + hast-util-from-dom@5.0.0: dependencies: '@types/hast': 3.0.4 hastscript: 8.0.0 web-namespaces: 2.0.1 - dev: false - /hast-util-from-html-isomorphic@2.0.0: - resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} + hast-util-from-html-isomorphic@2.0.0: dependencies: '@types/hast': 3.0.4 hast-util-from-dom: 5.0.0 - hast-util-from-html: 2.0.1 + hast-util-from-html: 2.0.3 unist-util-remove-position: 5.0.0 - dev: false - /hast-util-from-html@2.0.1: - resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==} + hast-util-from-html@2.0.3: dependencies: '@types/hast': 3.0.4 devlop: 1.1.0 hast-util-from-parse5: 8.0.1 parse5: 7.1.2 - vfile: 6.0.1 + vfile: 6.0.3 vfile-message: 4.0.2 - dev: false - /hast-util-from-parse5@8.0.1: - resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} + hast-util-from-parse5@8.0.1: dependencies: '@types/hast': 3.0.4 - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 devlop: 1.1.0 hastscript: 8.0.0 - property-information: 6.4.1 - vfile: 6.0.1 - vfile-location: 5.0.2 + property-information: 6.5.0 + vfile: 6.0.3 + vfile-location: 5.0.3 web-namespaces: 2.0.1 - /hast-util-heading-rank@3.0.0: - resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} - dependencies: - '@types/hast': 3.0.4 - dev: true - - /hast-util-is-element@3.0.0: - resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + hast-util-heading-rank@3.0.0: dependencies: '@types/hast': 3.0.4 - /hast-util-parse-selector@4.0.0: - resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + hast-util-is-element@3.0.0: dependencies: '@types/hast': 3.0.4 - /hast-util-raw@9.0.2: - resolution: {integrity: sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA==} + hast-util-parse-selector@4.0.0: dependencies: '@types/hast': 3.0.4 - '@types/unist': 3.0.2 - '@ungap/structured-clone': 1.2.0 - hast-util-from-parse5: 8.0.1 - hast-util-to-parse5: 8.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.1.0 - parse5: 7.1.2 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.1 - web-namespaces: 2.0.1 - zwitch: 2.0.4 - dev: true - /hast-util-to-html@9.0.0: - resolution: {integrity: sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==} + hast-util-to-html@9.0.3: dependencies: '@types/hast': 3.0.4 - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 ccount: 2.0.1 comma-separated-tokens: 2.0.3 - hast-util-raw: 9.0.2 hast-util-whitespace: 3.0.0 html-void-elements: 3.0.0 - mdast-util-to-hast: 13.1.0 - property-information: 6.4.1 + mdast-util-to-hast: 13.2.0 + property-information: 6.5.0 space-separated-tokens: 2.0.2 - stringify-entities: 4.0.3 + stringify-entities: 4.0.4 zwitch: 2.0.4 - dev: true - /hast-util-to-parse5@8.0.0: - resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + hast-util-to-string@3.0.1: dependencies: '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - property-information: 6.4.1 - space-separated-tokens: 2.0.2 - web-namespaces: 2.0.1 - zwitch: 2.0.4 - dev: true - - /hast-util-to-string@3.0.0: - resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==} - dependencies: - '@types/hast': 3.0.4 - dev: true - /hast-util-to-text@4.0.0: - resolution: {integrity: sha512-EWiE1FSArNBPUo1cKWtzqgnuRQwEeQbQtnFJRYV1hb1BWDgrAlBU0ExptvZMM/KSA82cDpm2sFGf3Dmc5Mza3w==} + hast-util-to-text@4.0.2: dependencies: '@types/hast': 3.0.4 - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 hast-util-is-element: 3.0.0 unist-util-find-after: 5.0.0 - dev: false - /hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + hast-util-whitespace@3.0.0: dependencies: '@types/hast': 3.0.4 - dev: true - - /hast@1.0.0: - resolution: {integrity: sha512-vFUqlRV5C+xqP76Wwq2SrM0kipnmpxJm7OfvVXpB35Fp+Fn4MV+ozr+JZr5qFvyR1q/U+Foim2x+3P+x9S1PLA==} - deprecated: Renamed to rehype - dev: false - /hastscript@8.0.0: - resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} + hastscript@8.0.0: dependencies: '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 - property-information: 6.4.1 + property-information: 6.5.0 space-separated-tokens: 2.0.2 - /hey-listen@1.0.8: - resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} - dev: false - - /highlight.js@11.9.0: - resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==} - engines: {node: '>=12.0.0'} - dev: false + hey-listen@1.0.8: {} - /hookable@5.5.3: - resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} - dev: true + highlight.js@11.9.0: {} - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true + hookable@5.5.3: {} - /html-encoding-sniffer@2.0.1: - resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} - engines: {node: '>=10'} + html-encoding-sniffer@2.0.1: dependencies: whatwg-encoding: 1.0.5 - dev: true - /html-encoding-sniffer@4.0.0: - resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} - engines: {node: '>=18'} + html-encoding-sniffer@4.0.0: dependencies: whatwg-encoding: 3.1.1 - dev: true - /html-entities@2.3.3: - resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} - dev: true + html-entities@2.3.3: {} - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true + html-escaper@2.0.2: {} - /html-tags@3.2.0: - resolution: {integrity: sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==} - engines: {node: '>=8'} - dev: true + html-tags@3.3.1: {} - /html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - dev: true + html-void-elements@3.0.0: {} - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} + http-errors@2.0.0: dependencies: depd: 2.0.0 inherits: 2.0.4 setprototypeof: 1.2.0 statuses: 2.0.1 toidentifier: 1.0.1 - dev: true - /http-proxy-agent@4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} + http-proxy-agent@4.0.1: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.7 transitivePeerDependencies: - supports-color - dev: true - /http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} + http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.0 - debug: 4.3.4 + agent-base: 7.1.1 + debug: 4.3.7 transitivePeerDependencies: - supports-color - dev: true - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.7 transitivePeerDependencies: - supports-color - dev: true - /https-proxy-agent@7.0.4: - resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} - engines: {node: '>= 14'} + https-proxy-agent@7.0.5: dependencies: - agent-base: 7.1.0 - debug: 4.3.4 + agent-base: 7.1.1 + debug: 4.3.7 transitivePeerDependencies: - supports-color - dev: true - - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true - /human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - dev: true + human-signals@2.1.0: {} - /hunspell-spellchecker@1.0.2: - resolution: {integrity: sha512-4DwmFAvlz+ChsqLDsZT2cwBsYNXh+oWboemxXtafwKIyItq52xfR4e4kr017sLAoPaSYVofSOvPUfmOAhXyYvw==} - hasBin: true - dev: true + hunspell-spellchecker@1.0.2: {} - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - dev: true - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - dev: true - - /idb@7.1.1: - resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} - dev: true - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true + idb@7.1.1: {} - /ignore@5.2.0: - resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} - engines: {node: '>= 4'} - dev: true - - /ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - dev: true + ignore@5.3.2: {} - /immediate@3.0.6: - resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - dev: false + immediate@3.0.6: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true - /import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true + import-local@3.2.0: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 - dev: true - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true + imurmurhash@0.1.4: {} - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} + indent-string@4.0.0: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + inherits@2.0.4: {} - /inline-style-parser@0.1.1: - resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + inline-style-parser@0.1.1: {} - /internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - has: 1.0.3 - side-channel: 1.0.6 - dev: true + inline-style-parser@0.2.4: {} - /internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} + internal-slot@1.0.7: dependencies: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.0.6 - dev: true - - /invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - dependencies: - loose-envify: 1.4.0 - dev: true - - /ip@2.0.1: - resolution: {integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==} - dev: true - /ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: true + ipaddr.js@1.9.1: {} - /is-absolute-url@4.0.1: - resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + is-absolute-url@4.0.1: {} - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} + is-arguments@1.1.1: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: true - - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - is-typed-array: 1.1.10 - dev: true - /is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} + is-array-buffer@3.0.4: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 - dev: true - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true + is-arrayish@0.2.1: {} - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 - dev: true - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - dev: true - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + is-boolean-object@1.1.2: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: true - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + is-callable@1.2.7: {} - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.15.1: dependencies: hasown: 2.0.2 - dev: true - /is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} + is-data-view@1.0.1: dependencies: is-typed-array: 1.1.13 - dev: true - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + is-date-object@1.0.5: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-deflate@1.0.0: - resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} - dev: true - - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true + is-docker@2.2.1: {} - /is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - dev: true + is-docker@3.0.0: {} - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - dev: true + is-generator-fn@2.1.0: {} - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} + is-generator-function@1.0.10: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - - /is-gzip@1.0.0: - resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==} - engines: {node: '>=0.10.0'} - dev: true - - /is-html@2.0.0: - resolution: {integrity: sha512-S+OpgB5i7wzIue/YSE5hg0e5ZYfG3hhpNh9KGl6ayJ38p7ED6wxQLd1TV91xHpcTvw90KMJ9EwN3F/iNflHBVg==} - engines: {node: '>=8'} - dependencies: - html-tags: 3.2.0 - dev: true - - /is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - dependencies: - is-docker: 3.0.0 - dev: true - - /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: true - - /is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - dev: true - /is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: true + is-html@2.0.0: + dependencies: + html-tags: 3.3.1 - /is-nan@1.3.2: - resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} - engines: {node: '>= 0.4'} + is-inside-container@1.0.0: dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - dev: true + is-docker: 3.0.0 - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true + is-map@2.0.3: {} - /is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - dev: true + is-module@1.0.0: {} - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + is-negative-zero@2.0.3: {} + + is-number-object@1.0.7: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /is-obj@1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} - engines: {node: '>=0.10.0'} - dev: true + is-number@7.0.0: {} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true + is-obj@1.0.1: {} - /is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} + is-path-inside@3.0.3: {} - /is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} - dependencies: - isobject: 3.0.1 - dev: true + is-plain-obj@4.1.0: {} - /is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: false + is-plain-object@5.0.0: {} - /is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - dev: true + is-potential-custom-element-name@1.0.1: {} - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + is-regex@1.1.4: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: true - /is-regexp@1.0.0: - resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} - engines: {node: '>=0.10.0'} - dev: true - - /is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - dev: true + is-regexp@1.0.0: {} - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - dependencies: - call-bind: 1.0.7 - dev: true + is-set@2.0.3: {} - /is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} + is-shared-array-buffer@1.0.3: dependencies: call-bind: 1.0.7 - dev: true - - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + is-stream@2.0.1: {} - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + is-string@1.0.7: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 - dev: true - - /is-typed-array@1.1.10: - resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - dev: true - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.13: dependencies: which-typed-array: 1.1.15 - dev: true - - /is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - dev: true - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true + is-typedarray@1.0.0: {} - /is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - dev: true + is-weakmap@2.0.2: {} - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.0.2: dependencies: call-bind: 1.0.7 - dev: true - /is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} - engines: {node: '>= 0.4'} + is-weakset@2.0.3: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 - dev: true - /is-what@4.1.16: - resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} - engines: {node: '>=12.13'} - dev: true + is-what@4.1.16: {} - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 - dev: true - /is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} - engines: {node: '>=16'} + is-wsl@3.1.0: dependencies: is-inside-container: 1.0.0 - dev: true - - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + isarray@1.0.0: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isarray@2.0.5: {} - /isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - dev: true + isexe@2.0.0: {} - /isomorphic-ws@5.0.0(ws@8.16.0): - resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} - peerDependencies: - ws: '*' + isomorphic-ws@5.0.0(ws@8.18.0): dependencies: - ws: 8.16.0 - dev: false + ws: 8.18.0 - /istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - dev: true + istanbul-lib-coverage@3.2.2: {} - /istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} + istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.24.7 - '@babel/parser': 7.24.7 + '@babel/core': 7.25.7 + '@babel/parser': 7.25.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} + istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.2 make-dir: 4.0.0 supports-color: 7.2.0 - dev: true - /istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} + istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.4 + debug: 4.3.7 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color - dev: true - /istanbul-lib-source-maps@5.0.4: - resolution: {integrity: sha512-wHOoEsNJTVltaJp8eVkm8w+GVkVNHT2YDYo53YdzQEL2gWm1hBX5cGFR9hQJtuGLebidVX7et3+dmDZrmclduw==} - engines: {node: '>=10'} + istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.25 - debug: 4.3.4 + debug: 4.3.7 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color - dev: true - /istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} - engines: {node: '>=8'} + istanbul-reports@3.1.7: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - dev: true - /jackspeak@3.4.0: - resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} - engines: {node: '>=14'} + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - dev: true - /jake@10.8.7: - resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} - engines: {node: '>=10'} - hasBin: true + jake@10.9.2: dependencies: - async: 3.2.5 + async: 3.2.6 chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 - dev: true - /javascript-natural-sort@0.7.1: - resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} - dev: true + javascript-natural-sort@0.7.1: {} - /javascript-stringify@2.1.0: - resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} - dev: true + javascript-stringify@2.1.0: {} - /jest-changed-files@27.5.1: - resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-changed-files@27.5.1: dependencies: '@jest/types': 27.5.1 execa: 5.1.1 - throat: 6.0.1 - dev: true + throat: 6.0.2 - /jest-circus@27.5.1: - resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-circus@27.5.1: dependencies: '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.12.2 + '@types/node': 20.16.11 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -11270,20 +12037,11 @@ packages: pretty-format: 27.5.1 slash: 3.0.0 stack-utils: 2.0.6 - throat: 6.0.1 + throat: 6.0.2 transitivePeerDependencies: - supports-color - dev: true - /jest-cli@27.5.1: - resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + jest-cli@27.5.1: dependencies: '@jest/core': 27.5.1 '@jest/test-result': 27.5.1 @@ -11291,7 +12049,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - import-local: 3.1.0 + import-local: 3.2.0 jest-config: 27.5.1 jest-util: 27.5.1 jest-validate: 27.5.1 @@ -11303,24 +12061,16 @@ packages: - supports-color - ts-node - utf-8-validate - dev: true - /jest-config@27.5.1: - resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - ts-node: '>=9.0.0' - peerDependenciesMeta: - ts-node: - optional: true + jest-config@27.5.1: dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.25.7 '@jest/test-sequencer': 27.5.1 '@jest/types': 27.5.1 - babel-jest: 27.5.1(@babel/core@7.24.0) + babel-jest: 27.5.1(@babel/core@7.25.7) chalk: 4.1.2 - ci-info: 3.8.0 - deepmerge: 4.2.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 jest-circus: 27.5.1 @@ -11333,7 +12083,7 @@ packages: jest-runner: 27.5.1 jest-util: 27.5.1 jest-validate: 27.5.1 - micromatch: 4.0.5 + micromatch: 4.0.8 parse-json: 5.2.0 pretty-format: 27.5.1 slash: 3.0.0 @@ -11343,44 +12093,39 @@ packages: - canvas - supports-color - utf-8-validate - dev: true - /jest-diff@27.5.1: - resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-diff@27.5.1: dependencies: chalk: 4.1.2 diff-sequences: 27.5.1 jest-get-type: 27.5.1 pretty-format: 27.5.1 - dev: true - /jest-docblock@27.5.1: - resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-docblock@27.5.1: dependencies: detect-newline: 3.1.0 - dev: true - /jest-each@27.5.1: - resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-each@27.5.1: dependencies: '@jest/types': 27.5.1 chalk: 4.1.2 jest-get-type: 27.5.1 jest-util: 27.5.1 pretty-format: 27.5.1 - dev: true - /jest-environment-jsdom@27.5.1: - resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-environment-jsdom@27.5.1: dependencies: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.12.2 + '@types/node': 20.16.11 jest-mock: 27.5.1 jest-util: 27.5.1 jsdom: 16.7.0 @@ -11389,32 +12134,25 @@ packages: - canvas - supports-color - utf-8-validate - dev: true - /jest-environment-node@27.5.1: - resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-environment-node@27.5.1: dependencies: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.12.2 + '@types/node': 20.16.11 jest-mock: 27.5.1 jest-util: 27.5.1 - dev: true - /jest-get-type@27.5.1: - resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true + jest-get-type@27.5.1: {} - /jest-haste-map@27.5.1: - resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-get-type@29.6.3: {} + + jest-haste-map@27.5.1: dependencies: '@jest/types': 27.5.1 - '@types/graceful-fs': 4.1.5 - '@types/node': 20.12.2 + '@types/graceful-fs': 4.1.9 + '@types/node': 20.16.11 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -11422,21 +12160,18 @@ packages: jest-serializer: 27.5.1 jest-util: 27.5.1 jest-worker: 27.5.1 - micromatch: 4.0.5 + micromatch: 4.0.8 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 - dev: true - /jest-jasmine2@27.5.1: - resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-jasmine2@27.5.1: dependencies: '@jest/environment': 27.5.1 '@jest/source-map': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.12.2 + '@types/node': 20.16.11 chalk: 4.1.2 co: 4.6.0 expect: 27.5.1 @@ -11448,83 +12183,54 @@ packages: jest-snapshot: 27.5.1 jest-util: 27.5.1 pretty-format: 27.5.1 - throat: 6.0.1 + throat: 6.0.2 transitivePeerDependencies: - supports-color - dev: true - /jest-leak-detector@27.5.1: - resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-leak-detector@27.5.1: dependencies: jest-get-type: 27.5.1 pretty-format: 27.5.1 - dev: true - /jest-matcher-utils@27.5.1: - resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-matcher-utils@27.5.1: dependencies: chalk: 4.1.2 jest-diff: 27.5.1 jest-get-type: 27.5.1 pretty-format: 27.5.1 - dev: true - /jest-message-util@27.5.1: - resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-message-util@27.5.1: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.25.7 '@jest/types': 27.5.1 - '@types/stack-utils': 2.0.1 + '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 - micromatch: 4.0.5 + micromatch: 4.0.8 pretty-format: 27.5.1 slash: 3.0.0 stack-utils: 2.0.6 - dev: true - /jest-mock@27.5.1: - resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-mock@27.5.1: dependencies: '@jest/types': 27.5.1 - '@types/node': 20.12.2 - dev: true + '@types/node': 20.16.11 - /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - dependencies: + jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): + optionalDependencies: jest-resolve: 27.5.1 - dev: true - /jest-regex-util@27.5.1: - resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true + jest-regex-util@27.5.1: {} - /jest-resolve-dependencies@27.5.1: - resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-resolve-dependencies@27.5.1: dependencies: '@jest/types': 27.5.1 jest-regex-util: 27.5.1 jest-snapshot: 27.5.1 transitivePeerDependencies: - supports-color - dev: true - /jest-resolve@27.5.1: - resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-resolve@27.5.1: dependencies: '@jest/types': 27.5.1 chalk: 4.1.2 @@ -11534,20 +12240,17 @@ packages: jest-util: 27.5.1 jest-validate: 27.5.1 resolve: 1.22.8 - resolve.exports: 1.1.0 + resolve.exports: 1.1.1 slash: 3.0.0 - dev: true - /jest-runner@27.5.1: - resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-runner@27.5.1: dependencies: '@jest/console': 27.5.1 '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.12.2 + '@types/node': 20.16.11 chalk: 4.1.2 emittery: 0.8.1 graceful-fs: 4.2.11 @@ -11562,17 +12265,14 @@ packages: jest-util: 27.5.1 jest-worker: 27.5.1 source-map-support: 0.5.21 - throat: 6.0.1 + throat: 6.0.2 transitivePeerDependencies: - bufferutil - canvas - supports-color - utf-8-validate - dev: true - /jest-runtime@27.5.1: - resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-runtime@27.5.1: dependencies: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 @@ -11582,8 +12282,8 @@ packages: '@jest/transform': 27.5.1 '@jest/types': 27.5.1 chalk: 4.1.2 - cjs-module-lexer: 1.2.2 - collect-v8-coverage: 1.0.1 + cjs-module-lexer: 1.4.1 + collect-v8-coverage: 1.0.2 execa: 5.1.1 glob: 7.2.3 graceful-fs: 4.2.11 @@ -11598,30 +12298,24 @@ packages: strip-bom: 4.0.0 transitivePeerDependencies: - supports-color - dev: true - /jest-serializer@27.5.1: - resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-serializer@27.5.1: dependencies: - '@types/node': 20.12.2 + '@types/node': 20.16.11 graceful-fs: 4.2.11 - dev: true - /jest-snapshot@27.5.1: - resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-snapshot@27.5.1: dependencies: - '@babel/core': 7.24.0 - '@babel/generator': 7.24.7 - '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.0) - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/core': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.25.7) + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/babel__traverse': 7.20.5 - '@types/prettier': 2.7.1 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.0) + '@types/babel__traverse': 7.20.6 + '@types/prettier': 2.7.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.7) chalk: 4.1.2 expect: 27.5.1 graceful-fs: 4.2.11 @@ -11633,26 +12327,20 @@ packages: jest-util: 27.5.1 natural-compare: 1.4.0 pretty-format: 27.5.1 - semver: 7.5.4 + semver: 7.6.3 transitivePeerDependencies: - supports-color - dev: true - /jest-util@27.5.1: - resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-util@27.5.1: dependencies: '@jest/types': 27.5.1 - '@types/node': 20.12.2 + '@types/node': 20.16.11 chalk: 4.1.2 - ci-info: 3.5.0 + ci-info: 3.9.0 graceful-fs: 4.2.11 picomatch: 2.3.1 - dev: true - /jest-validate@27.5.1: - resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-validate@27.5.1: dependencies: '@jest/types': 27.5.1 camelcase: 6.3.0 @@ -11660,51 +12348,27 @@ packages: jest-get-type: 27.5.1 leven: 3.1.0 pretty-format: 27.5.1 - dev: true - /jest-watcher@27.5.1: - resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-watcher@27.5.1: dependencies: '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.12.2 + '@types/node': 20.16.11 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 27.5.1 string-length: 4.0.2 - dev: true - - /jest-worker@26.6.2: - resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': 20.12.2 - merge-stream: 2.0.0 - supports-color: 7.2.0 - dev: true - /jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} + jest-worker@27.5.1: dependencies: - '@types/node': 20.12.2 + '@types/node': 20.16.11 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: true - /jest@27.5.1: - resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + jest@27.5.1: dependencies: '@jest/core': 27.5.1 - import-local: 3.1.0 + import-local: 3.2.0 jest-cli: 27.5.1 transitivePeerDependencies: - bufferutil @@ -11712,205 +12376,113 @@ packages: - supports-color - ts-node - utf-8-validate - dev: true - - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true - /js-tokens@8.0.3: - resolution: {integrity: sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==} - dev: true + js-tokens@4.0.0: {} - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + js-yaml@3.14.1: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: true - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /jscodeshift@0.15.2(@babel/preset-env@7.24.7): - resolution: {integrity: sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==} - hasBin: true - peerDependencies: - '@babel/preset-env': ^7.1.6 - peerDependenciesMeta: - '@babel/preset-env': - optional: true - dependencies: - '@babel/core': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.24.7) - '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.24.7) - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.24.7) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.24.7) - '@babel/preset-env': 7.24.7(@babel/core@7.24.7) - '@babel/preset-flow': 7.24.7(@babel/core@7.24.7) - '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/register': 7.24.6(@babel/core@7.24.7) - babel-core: 7.0.0-bridge.0(@babel/core@7.24.7) - chalk: 4.1.2 - flow-parser: 0.237.2 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - neo-async: 2.6.2 - node-dir: 0.1.17 - recast: 0.23.9 - temp: 0.8.4 - write-file-atomic: 2.4.3 - transitivePeerDependencies: - - supports-color - dev: true + jsdoc-type-pratt-parser@4.1.0: {} - /jsdom@16.7.0: - resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} - engines: {node: '>=10'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true + jsdom@16.7.0: dependencies: abab: 2.0.6 - acorn: 8.11.3 + acorn: 8.12.1 acorn-globals: 6.0.0 cssom: 0.4.4 cssstyle: 2.3.0 data-urls: 2.0.0 decimal.js: 10.4.3 domexception: 2.0.1 - escodegen: 2.0.0 + escodegen: 2.1.0 form-data: 3.0.1 html-encoding-sniffer: 2.0.1 http-proxy-agent: 4.0.1 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 + nwsapi: 2.2.13 parse5: 6.0.1 saxes: 5.0.1 symbol-tree: 3.2.4 - tough-cookie: 4.1.3 + tough-cookie: 4.1.4 w3c-hr-time: 1.0.2 w3c-xmlserializer: 2.0.0 webidl-conversions: 6.1.0 whatwg-encoding: 1.0.5 whatwg-mimetype: 2.3.0 whatwg-url: 8.7.0 - ws: 7.5.9 + ws: 7.5.10 xml-name-validator: 3.0.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - dev: true - /jsdom@24.0.0: - resolution: {integrity: sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==} - engines: {node: '>=18'} - peerDependencies: - canvas: ^2.11.2 - peerDependenciesMeta: - canvas: - optional: true + jsdom@25.0.1: dependencies: - cssstyle: 4.0.1 + cssstyle: 4.1.0 data-urls: 5.0.0 decimal.js: 10.4.3 form-data: 4.0.0 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.4 + https-proxy-agent: 7.0.5 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 + nwsapi: 2.2.13 parse5: 7.1.2 - rrweb-cssom: 0.6.0 + rrweb-cssom: 0.7.1 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 4.1.3 + tough-cookie: 5.0.0 w3c-xmlserializer: 5.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 14.0.0 - ws: 8.16.0 + ws: 8.18.0 xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - dev: true - /jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - dev: true + jsesc@2.5.2: {} - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true + jsesc@3.0.2: {} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true + json-buffer@3.0.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-parse-even-better-errors@2.3.1: {} - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true + json-schema-traverse@0.4.1: {} - /json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - dev: true + json-schema-traverse@1.0.0: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + json-schema@0.4.0: {} - /json-stringify-deterministic@1.0.12: - resolution: {integrity: sha512-q3PN0lbUdv0pmurkBNdJH3pfFvOTL/Zp0lquqpvcjfKzt6Y0j49EPHAmVHCAS4Ceq/Y+PejWTzyiVpoY71+D6g==} - engines: {node: '>= 4'} - dev: false + json-stable-stringify-without-jsonify@1.0.1: {} - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true + json-stringify-deterministic@1.0.12: {} - /jsonc-parser@3.2.1: - resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} - dev: true + json5@2.2.3: {} - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonc-parser@3.3.1: {} + + jsonfile@6.1.0: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - dev: true + jsonpointer@5.0.1: {} - /jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} - engines: {node: '>=12', npm: '>=6'} + jsonwebtoken@9.0.2: dependencies: jws: 3.2.2 lodash.includes: 4.3.0 @@ -11921,486 +12493,268 @@ packages: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.5.4 - dev: false + semver: 7.6.3 - /jsx-ast-utils@3.3.3: - resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} - engines: {node: '>=4.0'} + jsx-ast-utils@3.3.5: dependencies: - array-includes: 3.1.6 - object.assign: 4.1.4 - dev: true + array-includes: 3.1.8 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.2.0 - /jwa@1.4.1: - resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + jwa@1.4.1: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - dev: false - /jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + jws@3.2.2: dependencies: jwa: 1.4.1 safe-buffer: 5.2.1 - dev: false - - /katex@0.16.9: - resolution: {integrity: sha512-fsSYjWS0EEOwvy81j3vRA8TEAhQhKiqO+FQaKWp0m39qwOzHVBgAUBIXWj1pB+O2W3fIpNa6Y9KSKCVbfPhyAQ==} - hasBin: true - dependencies: - commander: 8.3.0 - dev: false - - /kebab-case@1.0.2: - resolution: {integrity: sha512-7n6wXq4gNgBELfDCpzKc+mRrZFs7D+wgfF5WRFLNAr4DA/qtr9Js8uOAVAfHhuLMfAcQ0pRKqbpjx+TcJVdE1Q==} - dev: true - - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true - - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: true - - /kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - dev: true - - /known-css-properties@0.24.0: - resolution: {integrity: sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==} - dev: true - /lazy-universal-dotenv@4.0.0: - resolution: {integrity: sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==} - engines: {node: '>=14.0.0'} + katex@0.16.11: dependencies: - app-root-dir: 1.0.2 - dotenv: 16.4.5 - dotenv-expand: 10.0.0 - dev: true + commander: 8.3.0 - /leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: true + kebab-case@1.0.2: {} - /levn@0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} - engines: {node: '>= 0.8.0'} + keyv@4.5.4: dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 - dev: true + json-buffer: 3.0.1 - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + kleur@3.0.3: {} + + kleur@4.1.5: {} + + known-css-properties@0.24.0: {} + + known-css-properties@0.30.0: {} + + leven@3.1.0: {} + + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /lie@3.1.1: - resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} + lie@3.1.1: dependencies: immediate: 3.0.6 - dev: false - /lightningcss-darwin-arm64@1.23.0: - resolution: {integrity: sha512-kl4Pk3Q2lnE6AJ7Qaij47KNEfY2/UXRZBT/zqGA24B8qwkgllr/j7rclKOf1axcslNXvvUdztjo4Xqh39Yq1aA==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + lightningcss-darwin-arm64@1.25.1: optional: true - /lightningcss-darwin-x64@1.23.0: - resolution: {integrity: sha512-KeRFCNoYfDdcolcFXvokVw+PXCapd2yHS1Diko1z1BhRz/nQuD5XyZmxjWdhmhN/zj5sH8YvWsp0/lPLVzqKpg==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + lightningcss-darwin-arm64@1.27.0: optional: true - /lightningcss-freebsd-x64@1.23.0: - resolution: {integrity: sha512-xhnhf0bWPuZxcqknvMDRFFo2TInrmQRWZGB0f6YoAsZX8Y+epfjHeeOIGCfAmgF0DgZxHwYc8mIR5tQU9/+ROA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true + lightningcss-darwin-x64@1.25.1: optional: true - /lightningcss-linux-arm-gnueabihf@1.23.0: - resolution: {integrity: sha512-fBamf/bULvmWft9uuX+bZske236pUZEoUlaHNBjnueaCTJ/xd8eXgb0cEc7S5o0Nn6kxlauMBnqJpF70Bgq3zg==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true + lightningcss-darwin-x64@1.27.0: optional: true - /lightningcss-linux-arm64-gnu@1.23.0: - resolution: {integrity: sha512-RS7sY77yVLOmZD6xW2uEHByYHhQi5JYWmgVumYY85BfNoVI3DupXSlzbw+b45A9NnVKq45+oXkiN6ouMMtTwfg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + lightningcss-freebsd-x64@1.25.1: optional: true - /lightningcss-linux-arm64-musl@1.23.0: - resolution: {integrity: sha512-cU00LGb6GUXCwof6ACgSMKo3q7XYbsyTj0WsKHLi1nw7pV0NCq8nFTn6ZRBYLoKiV8t+jWl0Hv8KkgymmK5L5g==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + lightningcss-freebsd-x64@1.27.0: optional: true - /lightningcss-linux-x64-gnu@1.23.0: - resolution: {integrity: sha512-q4jdx5+5NfB0/qMbXbOmuC6oo7caPnFghJbIAV90cXZqgV8Am3miZhC4p+sQVdacqxfd+3nrle4C8icR3p1AYw==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + lightningcss-linux-arm-gnueabihf@1.25.1: optional: true - /lightningcss-linux-x64-musl@1.23.0: - resolution: {integrity: sha512-G9Ri3qpmF4qef2CV/80dADHKXRAQeQXpQTLx7AiQrBYQHqBjB75oxqj06FCIe5g4hNCqLPnM9fsO4CyiT1sFSQ==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + lightningcss-linux-arm-gnueabihf@1.27.0: optional: true - /lightningcss-win32-x64-msvc@1.23.0: - resolution: {integrity: sha512-1rcBDJLU+obPPJM6qR5fgBUiCdZwZLafZM5f9kwjFLkb/UBNIzmae39uCSmh71nzPCTXZqHbvwu23OWnWEz+eg==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + lightningcss-linux-arm64-gnu@1.25.1: optional: true - /lightningcss@1.23.0: - resolution: {integrity: sha512-SEArWKMHhqn/0QzOtclIwH5pXIYQOUEkF8DgICd/105O+GCgd7jxjNod/QPnBCSWvpRHQBGVz5fQ9uScby03zA==} - engines: {node: '>= 12.0.0'} + lightningcss-linux-arm64-gnu@1.27.0: + optional: true + + lightningcss-linux-arm64-musl@1.25.1: + optional: true + + lightningcss-linux-arm64-musl@1.27.0: + optional: true + + lightningcss-linux-x64-gnu@1.25.1: + optional: true + + lightningcss-linux-x64-gnu@1.27.0: + optional: true + + lightningcss-linux-x64-musl@1.25.1: + optional: true + + lightningcss-linux-x64-musl@1.27.0: + optional: true + + lightningcss-win32-arm64-msvc@1.27.0: + optional: true + + lightningcss-win32-x64-msvc@1.25.1: + optional: true + + lightningcss-win32-x64-msvc@1.27.0: + optional: true + + lightningcss@1.25.1: dependencies: detect-libc: 1.0.3 optionalDependencies: - lightningcss-darwin-arm64: 1.23.0 - lightningcss-darwin-x64: 1.23.0 - lightningcss-freebsd-x64: 1.23.0 - lightningcss-linux-arm-gnueabihf: 1.23.0 - lightningcss-linux-arm64-gnu: 1.23.0 - lightningcss-linux-arm64-musl: 1.23.0 - lightningcss-linux-x64-gnu: 1.23.0 - lightningcss-linux-x64-musl: 1.23.0 - lightningcss-win32-x64-msvc: 1.23.0 - dev: true - - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true + lightningcss-darwin-arm64: 1.25.1 + lightningcss-darwin-x64: 1.25.1 + lightningcss-freebsd-x64: 1.25.1 + lightningcss-linux-arm-gnueabihf: 1.25.1 + lightningcss-linux-arm64-gnu: 1.25.1 + lightningcss-linux-arm64-musl: 1.25.1 + lightningcss-linux-x64-gnu: 1.25.1 + lightningcss-linux-x64-musl: 1.25.1 + lightningcss-win32-x64-msvc: 1.25.1 + + lightningcss@1.27.0: + dependencies: + detect-libc: 1.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.27.0 + lightningcss-darwin-x64: 1.27.0 + lightningcss-freebsd-x64: 1.27.0 + lightningcss-linux-arm-gnueabihf: 1.27.0 + lightningcss-linux-arm64-gnu: 1.27.0 + lightningcss-linux-arm64-musl: 1.27.0 + lightningcss-linux-x64-gnu: 1.27.0 + lightningcss-linux-x64-musl: 1.27.0 + lightningcss-win32-arm64-msvc: 1.27.0 + lightningcss-win32-x64-msvc: 1.27.0 + optional: true - /lnk@1.1.0: - resolution: {integrity: sha512-m3q+8W+stYiJYCBwefzrU+inN9h2KxofWuxhNH1iS+MdG9MIKfDpBtbmmIKstVwussx48PXALwonyzuzZUXjQQ==} - engines: {node: '>=4'} + lines-and-columns@1.2.4: {} + + lnk@1.1.0: dependencies: arrify: 1.0.1 mkdirp: 0.5.6 pify: 2.3.0 rimraf: 2.7.1 - dev: true - - /load-yaml-file@0.2.0: - resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} - engines: {node: '>=6'} - dependencies: - graceful-fs: 4.2.11 - js-yaml: 3.14.1 - pify: 4.0.1 - strip-bom: 3.0.0 - dev: true - - /local-pkg@0.5.0: - resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} - engines: {node: '>=14'} - dependencies: - mlly: 1.6.1 - pkg-types: 1.0.3 - dev: true - /localforage@1.10.0: - resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} + localforage@1.10.0: dependencies: lie: 3.1.1 - dev: false - - /locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - dev: true - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + locate-path@5.0.0: dependencies: p-locate: 4.1.0 - dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - - /lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - dev: true - /lodash.defaultsdeep@4.6.1: - resolution: {integrity: sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==} - dev: false + lodash.debounce@4.0.8: {} - /lodash.includes@4.3.0: - resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} - dev: false + lodash.defaultsdeep@4.6.1: {} - /lodash.isboolean@3.0.3: - resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} - dev: false + lodash.includes@4.3.0: {} - /lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - dev: false + lodash.isboolean@3.0.3: {} - /lodash.isinteger@4.0.4: - resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} - dev: false + lodash.isequal@4.5.0: {} - /lodash.isnumber@3.0.3: - resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} - dev: false + lodash.isinteger@4.0.4: {} - /lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - dev: false + lodash.isnumber@3.0.3: {} - /lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - dev: false + lodash.isplainobject@4.0.6: {} - /lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - dev: true + lodash.isstring@4.0.1: {} - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + lodash.memoize@4.1.2: {} - /lodash.once@4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - dev: false + lodash.merge@4.6.2: {} - /lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - dev: true + lodash.once@4.1.1: {} - /lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - dev: true + lodash.sortby@4.7.0: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true + lodash.uniq@4.5.0: {} - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - dev: true + lodash@4.17.21: {} - /long@5.2.3: - resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} - dev: false + long@5.2.3: {} - /longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - dev: false + longest-streak@3.1.0: {} - /look-it-up@2.1.0: - resolution: {integrity: sha512-nMoGWW2HurtuJf6XAL56FWTDCWLOTSsanrgwOyaR5Y4e3zfG5N/0cU5xWZSEU3tBxhQugRbV1xL9jb+ug7yZww==} - dev: true + look-it-up@2.1.0: {} - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - dev: true - /loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} - dependencies: - get-func-name: 2.0.2 - dev: true + loupe@3.1.2: {} - /lowlight@3.1.0: - resolution: {integrity: sha512-CEbNVoSikAxwDMDPjXlqlFYiZLkDJHwyGu/MfOsJnF3d7f3tds5J3z8s/l9TMXhzfsJCCJEAsD78842mwmg0PQ==} + lowlight@3.1.0: dependencies: '@types/hast': 3.0.4 devlop: 1.1.0 highlight.js: 11.9.0 - dev: false - /lru-cache@10.2.2: - resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} - engines: {node: 14 || >=16.14} - dev: true + lru-cache@10.4.3: {} - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - dev: true - - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - /lru-cache@9.1.2: - resolution: {integrity: sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==} - engines: {node: 14 || >=16.14} - dev: false + lru-cache@9.1.2: {} - /lunr@2.3.9: - resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} - dev: true + lunr@2.3.9: {} - /lz-string@1.5.0: - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} - hasBin: true - dev: true + lz-string@1.5.0: {} - /magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + magic-string@0.25.9: dependencies: sourcemap-codec: 1.4.8 - dev: true - - /magic-string@0.30.8: - resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - - /magicast@0.3.4: - resolution: {integrity: sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==} - dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - source-map-js: 1.2.0 - dev: true - /make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} - engines: {node: '>=6'} + magic-string@0.30.11: dependencies: - pify: 4.0.1 - semver: 5.7.2 - dev: true + '@jridgewell/sourcemap-codec': 1.5.0 - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} + magicast@0.3.5: dependencies: - semver: 6.3.1 - dev: true + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 + source-map-js: 1.2.1 - /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + make-dir@4.0.0: dependencies: - semver: 7.5.4 - dev: true + semver: 7.6.3 - /makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + makeerror@1.0.12: dependencies: tmpl: 1.0.5 - dev: true - /map-or-similar@1.5.0: - resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} - dev: true + map-or-similar@1.5.0: {} - /map-stream@0.1.0: - resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} - dev: true + map-stream@0.1.0: {} - /markdown-table@3.0.3: - resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} - dev: false + markdown-table@3.0.3: {} - /markdown-to-jsx@7.4.7(react@18.3.1): - resolution: {integrity: sha512-0+ls1IQZdU6cwM1yu0ZjjiVWYtkbExSyUIFU2ZeDIFuZM1W42Mh4OlJ4nb4apX4H8smxDHRdFaoIVJGwfv5hkg==} - engines: {node: '>= 10'} - peerDependencies: - react: '>= 0.14.0' + markdown-to-jsx@7.5.0(react@18.3.1): dependencies: react: 18.3.1 - dev: true - - /marked@4.3.0: - resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} - engines: {node: '>= 12'} - hasBin: true - dev: true - /mdast-util-definitions@5.1.2: - resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} - dependencies: - '@types/mdast': 3.0.15 - '@types/unist': 2.0.10 - unist-util-visit: 4.1.2 - dev: false + marked@4.3.0: {} - /mdast-util-find-and-replace@3.0.1: - resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} + mdast-util-find-and-replace@3.0.1: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 escape-string-regexp: 5.0.0 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - dev: false - /mdast-util-from-markdown@2.0.0: - resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} + mdast-util-from-markdown@2.0.1: dependencies: - '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 decode-named-character-reference: 1.0.2 devlop: 1.1.0 mdast-util-to-string: 4.0.0 @@ -12413,68 +12767,56 @@ packages: unist-util-stringify-position: 4.0.0 transitivePeerDependencies: - supports-color - dev: false - /mdast-util-gfm-autolink-literal@2.0.0: - resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==} + mdast-util-gfm-autolink-literal@2.0.1: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 ccount: 2.0.1 devlop: 1.1.0 mdast-util-find-and-replace: 3.0.1 micromark-util-character: 2.1.0 - dev: false - /mdast-util-gfm-footnote@2.0.0: - resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} + mdast-util-gfm-footnote@2.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.1 mdast-util-to-markdown: 2.1.0 micromark-util-normalize-identifier: 2.0.0 transitivePeerDependencies: - supports-color - dev: false - /mdast-util-gfm-strikethrough@2.0.0: - resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + mdast-util-gfm-strikethrough@2.0.0: dependencies: - '@types/mdast': 4.0.3 - mdast-util-from-markdown: 2.0.0 + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.1 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color - dev: false - /mdast-util-gfm-table@2.0.0: - resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + mdast-util-gfm-table@2.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 markdown-table: 3.0.3 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.1 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color - dev: false - /mdast-util-gfm-task-list-item@2.0.0: - resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + mdast-util-gfm-task-list-item@2.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.1 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color - dev: false - /mdast-util-gfm@3.0.0: - resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} + mdast-util-gfm@3.0.0: dependencies: - mdast-util-from-markdown: 2.0.0 - mdast-util-gfm-autolink-literal: 2.0.0 + mdast-util-from-markdown: 2.0.1 + mdast-util-gfm-autolink-literal: 2.0.1 mdast-util-gfm-footnote: 2.0.0 mdast-util-gfm-strikethrough: 2.0.0 mdast-util-gfm-table: 2.0.0 @@ -12482,139 +12824,86 @@ packages: mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color - dev: false - /mdast-util-math@3.0.0: - resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} + mdast-util-math@3.0.0: dependencies: '@types/hast': 3.0.4 - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 longest-streak: 3.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.1 mdast-util-to-markdown: 2.1.0 unist-util-remove-position: 5.0.0 transitivePeerDependencies: - supports-color - dev: false - /mdast-util-newline-to-break@2.0.0: - resolution: {integrity: sha512-MbgeFca0hLYIEx/2zGsszCSEJJ1JSCdiY5xQxRcLDDGa8EPvlLPupJ4DSajbMPAnC0je8jfb9TiUATnxxrHUog==} + mdast-util-newline-to-break@2.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 mdast-util-find-and-replace: 3.0.1 - dev: false - /mdast-util-phrasing@4.1.0: - resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + mdast-util-phrasing@4.1.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 unist-util-is: 6.0.0 - dev: false - - /mdast-util-to-hast@12.3.0: - resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} - dependencies: - '@types/hast': 2.3.10 - '@types/mdast': 3.0.15 - mdast-util-definitions: 5.1.2 - micromark-util-sanitize-uri: 1.2.0 - trim-lines: 3.0.1 - unist-util-generated: 2.0.1 - unist-util-position: 4.0.4 - unist-util-visit: 4.1.2 - dev: false - /mdast-util-to-hast@13.1.0: - resolution: {integrity: sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==} + mdast-util-to-hast@13.2.0: dependencies: '@types/hast': 3.0.4 - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 '@ungap/structured-clone': 1.2.0 devlop: 1.1.0 micromark-util-sanitize-uri: 2.0.0 trim-lines: 3.0.1 unist-util-position: 5.0.0 unist-util-visit: 5.0.0 - vfile: 6.0.1 + vfile: 6.0.3 - /mdast-util-to-markdown@2.1.0: - resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} + mdast-util-to-markdown@2.1.0: dependencies: - '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 longest-streak: 3.1.0 mdast-util-phrasing: 4.1.0 mdast-util-to-string: 4.0.0 micromark-util-decode-string: 2.0.0 unist-util-visit: 5.0.0 zwitch: 2.0.4 - dev: false - /mdast-util-to-string@4.0.0: - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + mdast-util-to-string@4.0.0: dependencies: - '@types/mdast': 4.0.3 - dev: false + '@types/mdast': 4.0.4 - /mdn-data@2.0.28: - resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} - dev: true + mdn-data@2.0.28: {} - /mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - dev: true + mdn-data@2.0.30: {} - /media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - dev: true + media-typer@0.3.0: {} - /memoizerific@1.11.3: - resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} + memoizerific@1.11.3: dependencies: map-or-similar: 1.5.0 - dev: true - /memory-fs@0.5.0: - resolution: {integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==} - engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + memory-fs@0.5.0: dependencies: errno: 0.1.8 - readable-stream: 2.3.7 - dev: true + readable-stream: 2.3.8 - /merge-anything@5.1.7: - resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} - engines: {node: '>=12.13'} + merge-anything@5.1.7: dependencies: is-what: 4.1.16 - dev: true - /merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - dev: true + merge-descriptors@1.0.3: {} - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + merge-stream@2.0.0: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + merge2@1.4.1: {} - /methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - dev: true + methods@1.1.2: {} - /microdiff@1.3.2: - resolution: {integrity: sha512-pKy60S2febliZIbwdfEQKTtL5bLNxOyiRRmD400gueYl9XcHyNGxzHSlJWn9IMHwYXT0yohPYL08+bGozVk8cQ==} - dev: true + microdiff@1.3.2: {} - /micromark-core-commonmark@2.0.0: - resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==} + micromark-core-commonmark@2.0.1: dependencies: decode-named-character-reference: 1.0.2 devlop: 1.1.0 @@ -12629,35 +12918,29 @@ packages: micromark-util-html-tag-name: 2.0.0 micromark-util-normalize-identifier: 2.0.0 micromark-util-resolve-all: 2.0.0 - micromark-util-subtokenize: 2.0.0 + micromark-util-subtokenize: 2.0.1 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-extension-gfm-autolink-literal@2.0.0: - resolution: {integrity: sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==} + micromark-extension-gfm-autolink-literal@2.1.0: dependencies: micromark-util-character: 2.1.0 micromark-util-sanitize-uri: 2.0.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-extension-gfm-footnote@2.0.0: - resolution: {integrity: sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==} + micromark-extension-gfm-footnote@2.1.0: dependencies: devlop: 1.1.0 - micromark-core-commonmark: 2.0.0 + micromark-core-commonmark: 2.0.1 micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 micromark-util-normalize-identifier: 2.0.0 micromark-util-sanitize-uri: 2.0.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-extension-gfm-strikethrough@2.0.0: - resolution: {integrity: sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==} + micromark-extension-gfm-strikethrough@2.1.0: dependencies: devlop: 1.1.0 micromark-util-chunked: 2.0.0 @@ -12665,219 +12948,147 @@ packages: micromark-util-resolve-all: 2.0.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-extension-gfm-table@2.0.0: - resolution: {integrity: sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==} + micromark-extension-gfm-table@2.1.0: dependencies: devlop: 1.1.0 micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-extension-gfm-tagfilter@2.0.0: - resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + micromark-extension-gfm-tagfilter@2.0.0: dependencies: micromark-util-types: 2.0.0 - dev: false - /micromark-extension-gfm-task-list-item@2.0.1: - resolution: {integrity: sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==} + micromark-extension-gfm-task-list-item@2.1.0: dependencies: devlop: 1.1.0 micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-extension-gfm@3.0.0: - resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + micromark-extension-gfm@3.0.0: dependencies: - micromark-extension-gfm-autolink-literal: 2.0.0 - micromark-extension-gfm-footnote: 2.0.0 - micromark-extension-gfm-strikethrough: 2.0.0 - micromark-extension-gfm-table: 2.0.0 + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.0 micromark-extension-gfm-tagfilter: 2.0.0 - micromark-extension-gfm-task-list-item: 2.0.1 + micromark-extension-gfm-task-list-item: 2.1.0 micromark-util-combine-extensions: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-extension-math@3.0.0: - resolution: {integrity: sha512-iJ2Q28vBoEovLN5o3GO12CpqorQRYDPT+p4zW50tGwTfJB+iv/VnB6Ini+gqa24K97DwptMBBIvVX6Bjk49oyQ==} + micromark-extension-math@3.1.0: dependencies: '@types/katex': 0.16.7 devlop: 1.1.0 - katex: 0.16.9 + katex: 0.16.11 micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-factory-destination@2.0.0: - resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} + micromark-factory-destination@2.0.0: dependencies: micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-factory-label@2.0.0: - resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} + micromark-factory-label@2.0.0: dependencies: devlop: 1.1.0 micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-factory-space@2.0.0: - resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + micromark-factory-space@2.0.0: dependencies: micromark-util-character: 2.1.0 micromark-util-types: 2.0.0 - dev: false - /micromark-factory-title@2.0.0: - resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + micromark-factory-title@2.0.0: dependencies: micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-factory-whitespace@2.0.0: - resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + micromark-factory-whitespace@2.0.0: dependencies: micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - - /micromark-util-character@1.2.0: - resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} - dependencies: - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - dev: false - /micromark-util-character@2.1.0: - resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + micromark-util-character@2.1.0: dependencies: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - /micromark-util-chunked@2.0.0: - resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} + micromark-util-chunked@2.0.0: dependencies: micromark-util-symbol: 2.0.0 - dev: false - /micromark-util-classify-character@2.0.0: - resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} + micromark-util-classify-character@2.0.0: dependencies: micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-util-combine-extensions@2.0.0: - resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + micromark-util-combine-extensions@2.0.0: dependencies: micromark-util-chunked: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-util-decode-numeric-character-reference@2.0.1: - resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + micromark-util-decode-numeric-character-reference@2.0.1: dependencies: micromark-util-symbol: 2.0.0 - dev: false - /micromark-util-decode-string@2.0.0: - resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + micromark-util-decode-string@2.0.0: dependencies: decode-named-character-reference: 1.0.2 micromark-util-character: 2.1.0 micromark-util-decode-numeric-character-reference: 2.0.1 micromark-util-symbol: 2.0.0 - dev: false - - /micromark-util-encode@1.1.0: - resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} - dev: false - /micromark-util-encode@2.0.0: - resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + micromark-util-encode@2.0.0: {} - /micromark-util-html-tag-name@2.0.0: - resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} - dev: false + micromark-util-html-tag-name@2.0.0: {} - /micromark-util-normalize-identifier@2.0.0: - resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + micromark-util-normalize-identifier@2.0.0: dependencies: micromark-util-symbol: 2.0.0 - dev: false - /micromark-util-resolve-all@2.0.0: - resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + micromark-util-resolve-all@2.0.0: dependencies: micromark-util-types: 2.0.0 - dev: false - - /micromark-util-sanitize-uri@1.2.0: - resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} - dependencies: - micromark-util-character: 1.2.0 - micromark-util-encode: 1.1.0 - micromark-util-symbol: 1.1.0 - dev: false - /micromark-util-sanitize-uri@2.0.0: - resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + micromark-util-sanitize-uri@2.0.0: dependencies: micromark-util-character: 2.1.0 micromark-util-encode: 2.0.0 micromark-util-symbol: 2.0.0 - /micromark-util-subtokenize@2.0.0: - resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==} + micromark-util-subtokenize@2.0.1: dependencies: devlop: 1.1.0 micromark-util-chunked: 2.0.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - - /micromark-util-symbol@1.1.0: - resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} - dev: false - - /micromark-util-symbol@2.0.0: - resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} - /micromark-util-types@1.1.0: - resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} - dev: false + micromark-util-symbol@2.0.0: {} - /micromark-util-types@2.0.0: - resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + micromark-util-types@2.0.0: {} - /micromark@4.0.0: - resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + micromark@4.0.0: dependencies: '@types/debug': 4.1.12 - debug: 4.3.4 + debug: 4.3.7 decode-named-character-reference: 1.0.2 devlop: 1.1.0 - micromark-core-commonmark: 2.0.0 + micromark-core-commonmark: 2.0.1 micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 micromark-util-chunked: 2.0.0 @@ -12887,308 +13098,123 @@ packages: micromark-util-normalize-identifier: 2.0.0 micromark-util-resolve-all: 2.0.0 micromark-util-sanitize-uri: 2.0.0 - micromark-util-subtokenize: 2.0.0 + micromark-util-subtokenize: 2.0.1 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 transitivePeerDependencies: - supports-color - dev: false - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + micromatch@4.0.8: dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 - dev: true - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: true + mime-db@1.52.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - dev: true - - /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: true - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true + mime@1.6.0: {} - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - dev: true + mimic-fn@2.1.0: {} - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true + min-indent@1.0.1: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - dev: true - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} + minimatch@5.1.6: dependencies: brace-expansion: 2.0.1 - dev: true - /minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 - dev: true - - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true - - /minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - dependencies: - yallist: 4.0.0 - dev: true - - /minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - dev: true - - /minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true - /minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - dev: true + minimist@1.2.8: {} - /mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - dev: true + minipass@7.1.2: {} - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + mkdirp@0.5.6: dependencies: minimist: 1.2.8 - dev: true - - /mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - dev: true - /mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - dev: true + mkdirp@3.0.1: {} - /mlly@1.6.1: - resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} + mlly@1.7.2: dependencies: - acorn: 8.11.3 + acorn: 8.12.1 pathe: 1.1.2 - pkg-types: 1.0.3 - ufo: 1.5.1 - dev: true - - /mrmime@2.0.0: - resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} - engines: {node: '>=10'} - dev: true + pkg-types: 1.2.1 + ufo: 1.5.4 - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: true - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + mrmime@2.0.0: {} - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + ms@2.0.0: {} - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true + ms@2.1.3: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + nanoid@3.3.7: {} - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: true + natural-compare-lite@1.4.0: {} - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: true + natural-compare@1.4.0: {} - /node-cleanup@2.1.2: - resolution: {integrity: sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==} - dev: true + negotiator@0.6.3: {} - /node-dir@0.1.17: - resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} - engines: {node: '>= 0.10.5'} - dependencies: - minimatch: 3.1.2 - dev: true + node-cleanup@2.1.2: {} - /node-eval@2.0.0: - resolution: {integrity: sha512-Ap+L9HznXAVeJj3TJ1op6M6bg5xtTq8L5CU/PJxtkhea/DrIxdTknGKIECKd/v/Lgql95iuMAYvIzBNd0pmcMg==} - engines: {node: '>= 4'} + node-eval@2.0.0: dependencies: path-is-absolute: 1.0.1 - dev: true - /node-fetch-native@1.6.4: - resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} - dev: true - - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - /node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - dev: true - - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - dev: true + node-int64@0.4.0: {} - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.8 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - dev: true + node-releases@2.0.18: {} - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-path@3.0.0: {} - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - dev: true - /npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - path-key: 4.0.0 - dev: true - - /nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nth-check@2.1.1: dependencies: boolbase: 1.0.0 - /nwsapi@2.2.7: - resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} - dev: true + nwsapi@2.2.13: {} - /nypm@0.3.8: - resolution: {integrity: sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==} - engines: {node: ^14.16.0 || >=16.10.0} - hasBin: true - dependencies: - citty: 0.1.6 - consola: 3.2.3 - execa: 8.0.1 - pathe: 1.1.2 - ufo: 1.5.1 - dev: true - - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: true + object-inspect@1.13.2: {} - /object-is@1.1.6: - resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} - engines: {node: '>= 0.4'} + object-is@1.1.6: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - dev: true - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-keys@1.1.1: {} - /object-path@0.11.8: - resolution: {integrity: sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==} - engines: {node: '>= 10.12.0'} - dev: true + object-path@0.11.8: {} - /object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} + object.assign@4.1.5: dependencies: call-bind: 1.0.7 - define-properties: 1.2.0 + define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: true - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} + object.values@1.2.0: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true + es-object-atoms: 1.0.0 - /octokit@2.1.0: - resolution: {integrity: sha512-Pxi6uKTjBRZWgAwsw1NgHdRlL+QASCN35OYS7X79o7PtBME0CLXEroZmPtEwlWZbPTP+iDbEy2wCbSOgm0uGIQ==} - engines: {node: '>= 14'} + octokit@2.1.0: dependencies: '@octokit/app': 13.1.8 '@octokit/core': 4.2.4 @@ -13201,731 +13227,302 @@ packages: '@octokit/types': 9.3.2 transitivePeerDependencies: - encoding - dev: false - - /ohash@1.1.3: - resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} - dev: true - /on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} + on-finished@2.4.1: dependencies: ee-first: 1.1.1 - dev: true - - /on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - dev: true - /onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} + oniguruma-to-js@0.4.3: dependencies: - mimic-fn: 4.0.0 - dev: true + regex: 4.3.3 - /open@10.1.0: - resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} - engines: {node: '>=18'} + open@10.1.0: dependencies: default-browser: 5.2.1 define-lazy-prop: 3.0.0 is-inside-container: 1.0.0 is-wsl: 3.1.0 - dev: true - /open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 - dev: true - /optionator@0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.3.0 - prelude-ls: 1.1.2 - type-check: 0.3.2 - word-wrap: 1.2.3 - dev: true - - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + optionator@0.9.4: dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - - /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - dev: true + word-wrap: 1.2.5 - /outdent@0.8.0: - resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} - dev: true + outdent@0.8.0: {} - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + p-limit@2.3.0: dependencies: p-try: 2.2.0 - dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - - /p-limit@5.0.0: - resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} - engines: {node: '>=18'} - dependencies: - yocto-queue: 1.0.0 - dev: true - - /p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - dependencies: - p-limit: 2.3.0 - dev: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + p-locate@4.1.0: dependencies: p-limit: 2.3.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true + p-try@2.2.0: {} - /pako@0.2.9: - resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} - dev: true + package-json-from-dist@1.0.1: {} - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + package-manager-detector@0.1.0: {} + + parent-module@1.0.1: dependencies: callsites: 3.1.0 - dev: true - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.25.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true - /parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: true + parse5@6.0.1: {} - /parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + parse5@7.1.2: dependencies: entities: 4.5.0 - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: true - - /path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - dev: true - - /path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - dev: true + parseurl@1.3.3: {} - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-browserify@1.0.1: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-exists@4.0.0: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true + path-is-absolute@1.0.1: {} - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - dev: true + path-key@3.1.1: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + path-parse@1.0.7: {} - /path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} + path-scurry@1.11.1: dependencies: - lru-cache: 10.2.2 + lru-cache: 10.4.3 minipass: 7.1.2 - dev: true - - /path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - dev: true - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true + path-to-regexp@0.1.10: {} - /path-type@5.0.0: - resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} - engines: {node: '>=12'} - dev: true + path-type@4.0.0: {} - /pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - dev: true + pathe@1.1.2: {} - /pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - dev: true + pathval@2.0.0: {} - /pause-stream@0.0.11: - resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} + pause-stream@0.0.11: dependencies: through: 2.3.8 - dev: true - - /peek-stream@1.1.3: - resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} - dependencies: - buffer-from: 1.1.2 - duplexify: 3.7.1 - through2: 2.0.5 - dev: true - /perfect-debounce@1.0.0: - resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - dev: true - - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + perfect-debounce@1.0.0: {} - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: true + picocolors@1.1.0: {} - /pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - dev: true + picomatch@2.3.1: {} - /pirates@4.0.5: - resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} - engines: {node: '>= 6'} - dev: true + picomatch@4.0.2: {} - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: true + pify@2.3.0: {} - /pkg-dir@3.0.0: - resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} - engines: {node: '>=6'} - dependencies: - find-up: 3.0.0 - dev: true + pirates@4.0.6: {} - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 - dev: true - /pkg-dir@5.0.0: - resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} - engines: {node: '>=10'} + pkg-types@1.0.3: dependencies: - find-up: 5.0.0 - dev: true + jsonc-parser: 3.3.1 + mlly: 1.7.2 + pathe: 1.1.2 - /pkg-types@1.0.3: - resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + pkg-types@1.2.1: dependencies: - jsonc-parser: 3.2.1 - mlly: 1.6.1 + confbox: 0.1.8 + mlly: 1.7.2 pathe: 1.1.2 - dev: true - /pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - dev: true + pluralize@8.0.0: {} - /polished@4.3.1: - resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} - engines: {node: '>=10'} + polished@4.3.1: dependencies: - '@babel/runtime': 7.24.0 - dev: true + '@babel/runtime': 7.25.7 - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: true + possible-typed-array-names@1.0.0: {} - /postcss-discard-duplicates@6.0.1(postcss@8.4.35): - resolution: {integrity: sha512-1hvUs76HLYR8zkScbwyJ8oJEugfPV+WchpnA+26fpJ7Smzs51CzGBHC32RS03psuX/2l0l0UKh2StzNxOrKCYg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-discard-duplicates@7.0.1(postcss@8.4.47): dependencies: - postcss: 8.4.35 - dev: true + postcss: 8.4.47 - /postcss-discard-empty@6.0.1(postcss@8.4.35): - resolution: {integrity: sha512-yitcmKwmVWtNsrrRqGJ7/C0YRy53i0mjexBDQ9zYxDwTWVBgbU4+C9jIZLmQlTDT9zhml+u0OMFJh8+31krmOg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-discard-empty@7.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.35 - dev: true + postcss: 8.4.47 - /postcss-merge-rules@6.0.3(postcss@8.4.35): - resolution: {integrity: sha512-yfkDqSHGohy8sGYIJwBmIGDv4K4/WrJPX355XrxQb/CSsT4Kc/RxDi6akqn5s9bap85AWgv21ArcUWwWdGNSHA==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-merge-rules@7.0.2(postcss@8.4.47): dependencies: - browserslist: 4.23.0 + browserslist: 4.23.3 caniuse-api: 3.0.0 - cssnano-utils: 4.0.2(postcss@8.4.35) - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 - dev: true + cssnano-utils: 5.0.0(postcss@8.4.47) + postcss: 8.4.47 + postcss-selector-parser: 6.1.1 - /postcss-minify-selectors@6.0.2(postcss@8.4.35): - resolution: {integrity: sha512-0b+m+w7OAvZejPQdN2GjsXLv5o0jqYHX3aoV0e7RBKPCsB7TYG5KKWBFhGnB/iP3213Ts8c5H4wLPLMm7z28Sg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-minify-selectors@7.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 - dev: true + cssesc: 3.0.0 + postcss: 8.4.47 + postcss-selector-parser: 6.1.1 - /postcss-nested@6.0.1(postcss@8.4.35): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 + postcss-nested@6.0.1(postcss@8.4.47): dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 - dev: true + postcss: 8.4.47 + postcss-selector-parser: 6.1.1 - /postcss-normalize-whitespace@6.0.1(postcss@8.4.35): - resolution: {integrity: sha512-76i3NpWf6bB8UHlVuLRxG4zW2YykF9CTEcq/9LGAiz2qBuX5cBStadkk0jSkg9a9TCIXbMQz7yzrygKoCW9JuA==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-whitespace@7.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.35 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - dev: true - /postcss-selector-parser@6.0.15: - resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} - engines: {node: '>=4'} + postcss-selector-parser@6.1.1: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: true - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true + postcss-value-parser@4.2.0: {} - /postcss@8.4.35: - resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.4.47: dependencies: nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.2.0 - dev: true + picocolors: 1.1.0 + source-map-js: 1.2.1 - /preferred-pm@3.1.2: - resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==} - engines: {node: '>=10'} + prelude-ls@1.2.1: {} + + prettier-config-standard@7.0.0(prettier@3.3.3): dependencies: - find-up: 5.0.0 - find-yarn-workspace-root2: 1.2.16 - path-exists: 4.0.0 - which-pm: 2.0.0 - dev: true + prettier: 3.3.3 - /prelude-ls@1.1.2: - resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} - engines: {node: '>= 0.8.0'} - dev: true + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + prettier@2.8.8: {} - /prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: true + prettier@3.2.5: {} - /prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} - engines: {node: '>=14'} - hasBin: true - dev: true + prettier@3.3.3: {} - /pretty-bytes@5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} - dev: true + pretty-bytes@5.6.0: {} - /pretty-bytes@6.1.1: - resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} - engines: {node: ^14.13.1 || >=16.0.0} - dev: true + pretty-bytes@6.1.1: {} - /pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + pretty-format@27.5.1: dependencies: ansi-regex: 5.0.1 ansi-styles: 5.2.0 react-is: 17.0.2 - dev: true - /pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 18.2.0 - dev: true - - /pretty-hrtime@1.0.3: - resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} - engines: {node: '>= 0.8'} - dev: true + react-is: 18.3.1 - /prismjs@1.29.0: - resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} - engines: {node: '>=6'} - dev: false + prismjs@1.29.0: {} - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true + process-nextick-args@2.0.1: {} - /process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - dev: true + process@0.11.10: {} - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} + prompts@2.4.2: dependencies: kleur: 3.0.3 sisteransi: 1.0.5 - dev: true - /property-information@6.4.1: - resolution: {integrity: sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w==} + property-information@6.5.0: {} - /proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 - dev: true - /prr@1.0.1: - resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} - dev: true + prr@1.0.1: {} - /ps-tree@1.2.0: - resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} - engines: {node: '>= 0.10'} - hasBin: true + ps-tree@1.2.0: dependencies: event-stream: 3.3.4 - dev: true - - /psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - dev: true - - /pump@2.0.1: - resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - dev: true - - /pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - dev: true - /pumpify@1.5.1: - resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} - dependencies: - duplexify: 3.7.1 - inherits: 2.0.4 - pump: 2.0.1 - dev: true - - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true + psl@1.9.0: {} - /qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.6 - dev: true + punycode@2.3.1: {} - /qs@6.12.1: - resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} - engines: {node: '>=0.6'} + qs@6.13.0: dependencies: side-channel: 1.0.6 - dev: true - - /querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - dev: true - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + querystringify@2.2.0: {} - /ramda@0.29.0: - resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} - dev: true + queue-microtask@1.2.3: {} - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - dev: true - /range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: true + range-parser@1.2.1: {} - /raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} + raw-body@2.5.2: dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - dev: true - - /react-colorful@5.6.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: true - - /react-confetti@6.1.0(react@18.3.1): - resolution: {integrity: sha512-7Ypx4vz0+g8ECVxr88W9zhcQpbeujJAVqL14ZnXJ3I23mOI9/oBVTQ3dkJhUmB0D6XOtCZEM6N0Gm9PMngkORw==} - engines: {node: '>=10.18'} - peerDependencies: - react: ^16.3.0 || ^17.0.1 || ^18.0.0 - dependencies: - react: 18.3.1 - tween-functions: 1.2.0 - dev: true - - /react-dom@18.3.1(react@18.3.1): - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} - peerDependencies: - react: ^18.3.1 - dependencies: - loose-envify: 1.4.0 - react: 18.3.1 - scheduler: 0.23.2 - dev: true - - /react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - dev: true - - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: true - - /react-remove-scroll-bar@2.3.6(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.3.3 - react: 18.3.1 - react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) - tslib: 2.6.2 - dev: true - /react-remove-scroll@2.5.5(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true + react-colorful@5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@types/react': 18.3.3 react: 18.3.1 - react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@18.3.1) - react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) - tslib: 2.6.2 - use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) - dev: true - - /react-style-singleton@2.2.1(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true + react-dom: 18.3.1(react@18.3.1) + + react-confetti@6.1.0(react@18.3.1): dependencies: - '@types/react': 18.3.3 - get-nonce: 1.0.1 - invariant: 2.2.4 react: 18.3.1 - tslib: 2.6.2 - dev: true + tween-functions: 1.2.0 - /react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} + react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 - dev: true + react: 18.3.1 + scheduler: 0.23.2 - /read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - dev: true + react-is@17.0.2: {} - /read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} + react-is@18.3.1: {} + + react@18.3.1: dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - dev: true + loose-envify: 1.4.0 - /readable-stream@2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -13934,124 +13531,61 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: true - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - dependencies: - inherits: 2.0.4 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: true - - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - dev: true - /recast@0.23.9: - resolution: {integrity: sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==} - engines: {node: '>= 4'} + recast@0.23.9: dependencies: ast-types: 0.16.1 esprima: 4.0.1 source-map: 0.6.1 tiny-invariant: 1.3.3 - tslib: 2.6.2 - dev: true + tslib: 2.7.0 - /redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} + redent@3.0.0: dependencies: indent-string: 4.0.0 strip-indent: 3.0.0 - dev: true - - /regenerate-unicode-properties@10.1.0: - resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} - engines: {node: '>=4'} - dependencies: - regenerate: 1.4.2 - dev: true - /regenerate-unicode-properties@10.1.1: - resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} - engines: {node: '>=4'} + regenerate-unicode-properties@10.2.0: dependencies: regenerate: 1.4.2 - dev: true - /regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - dev: true + regenerate@1.4.2: {} - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: true + regenerator-runtime@0.14.1: {} - /regenerator-transform@0.15.1: - resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} + regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.24.0 - dev: true + '@babel/runtime': 7.25.7 - /regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - dependencies: - '@babel/runtime': 7.24.0 - dev: true + regex@4.3.3: {} - /regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.3: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.2 - dev: true - - /regexpu-core@5.2.2: - resolution: {integrity: sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==} - engines: {node: '>=4'} - dependencies: - regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.0 - regjsgen: 0.7.1 - regjsparser: 0.9.1 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 - dev: true - /regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} - engines: {node: '>=4'} + regexpu-core@6.1.1: dependencies: - '@babel/regjsgen': 0.8.0 regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.1 - regjsparser: 0.9.1 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.11.1 unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 - dev: true + unicode-match-property-value-ecmascript: 2.2.0 - /regjsgen@0.7.1: - resolution: {integrity: sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==} - dev: true + regjsgen@0.8.0: {} - /regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true + regjsparser@0.11.1: dependencies: - jsesc: 0.5.0 - dev: true + jsesc: 3.0.2 - /rehype-external-links@3.0.0: - resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==} + rehype-external-links@3.0.0: dependencies: '@types/hast': 3.0.4 '@ungap/structured-clone': 1.2.0 @@ -14059,366 +13593,218 @@ packages: is-absolute-url: 4.0.1 space-separated-tokens: 2.0.2 unist-util-visit: 5.0.0 - dev: true - /rehype-highlight@7.0.0: - resolution: {integrity: sha512-QtobgRgYoQaK6p1eSr2SD1i61f7bjF2kZHAQHxeCHAuJf7ZUDMvQ7owDq9YTkmar5m5TSUol+2D3bp3KfJf/oA==} + rehype-highlight@7.0.0: dependencies: '@types/hast': 3.0.4 - hast-util-to-text: 4.0.0 + hast-util-to-text: 4.0.2 lowlight: 3.1.0 unist-util-visit: 5.0.0 - vfile: 6.0.1 - dev: false + vfile: 6.0.3 - /rehype-katex@7.0.0: - resolution: {integrity: sha512-h8FPkGE00r2XKU+/acgqwWUlyzve1IiOKwsEkg4pDL3k48PiE0Pt+/uLtVHDVkN1yA4iurZN6UES8ivHVEQV6Q==} + rehype-katex@7.0.1: dependencies: '@types/hast': 3.0.4 '@types/katex': 0.16.7 hast-util-from-html-isomorphic: 2.0.0 - hast-util-to-text: 4.0.0 - katex: 0.16.9 + hast-util-to-text: 4.0.2 + katex: 0.16.11 unist-util-visit-parents: 6.0.1 - vfile: 6.0.1 - dev: false + vfile: 6.0.3 - /rehype-parse@9.0.0: - resolution: {integrity: sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw==} + rehype-parse@9.0.1: dependencies: '@types/hast': 3.0.4 - hast-util-from-html: 2.0.1 + hast-util-from-html: 2.0.3 unified: 11.0.5 - dev: false - /rehype-prism@2.3.2(unified@11.0.4): - resolution: {integrity: sha512-UvLT8kwsR7mPpAGtikypFTWV+Y8RkfoKCynLl+pa2MvrR6u4D72FZlVRkvxWa3ZkfMcWqAWekJ7s2J0GEp0v+Q==} - peerDependencies: - unified: ^10 || ^11 + rehype-prism@2.3.2(unified@11.0.5): dependencies: hastscript: 8.0.0 prismjs: 1.29.0 - rehype-parse: 9.0.0 - unified: 11.0.4 + rehype-parse: 9.0.1 + unified: 11.0.5 unist-util-is: 6.0.0 unist-util-select: 5.1.0 unist-util-visit: 5.0.0 - dev: false - /rehype-slug@6.0.0: - resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} + rehype-slug@6.0.0: dependencies: '@types/hast': 3.0.4 github-slugger: 2.0.0 hast-util-heading-rank: 3.0.0 - hast-util-to-string: 3.0.0 + hast-util-to-string: 3.0.1 unist-util-visit: 5.0.0 - dev: true - /rehype-stringify@10.0.0: - resolution: {integrity: sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==} + rehype-stringify@10.0.1: dependencies: '@types/hast': 3.0.4 - hast-util-to-html: 9.0.0 - unified: 11.0.4 - dev: true + hast-util-to-html: 9.0.3 + unified: 11.0.5 - /remark-breaks@4.0.0: - resolution: {integrity: sha512-IjEjJOkH4FuJvHZVIW0QCDWxcG96kCq7An/KVH2NfJe6rKZU2AsHeB3OEjPNRxi4QC34Xdx7I2KGYn6IpT7gxQ==} + remark-breaks@4.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 mdast-util-newline-to-break: 2.0.0 - unified: 11.0.4 - dev: false + unified: 11.0.5 - /remark-gfm@4.0.0: - resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} + remark-gfm@4.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 mdast-util-gfm: 3.0.0 micromark-extension-gfm: 3.0.0 remark-parse: 11.0.0 remark-stringify: 11.0.0 - unified: 11.0.4 + unified: 11.0.5 transitivePeerDependencies: - supports-color - dev: false - /remark-math@6.0.0: - resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} + remark-math@6.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 mdast-util-math: 3.0.0 - micromark-extension-math: 3.0.0 - unified: 11.0.4 + micromark-extension-math: 3.1.0 + unified: 11.0.5 transitivePeerDependencies: - supports-color - dev: false - /remark-parse@11.0.0: - resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + remark-parse@11.0.0: dependencies: - '@types/mdast': 4.0.3 - mdast-util-from-markdown: 2.0.0 + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.1 micromark-util-types: 2.0.0 - unified: 11.0.4 + unified: 11.0.5 transitivePeerDependencies: - supports-color - dev: false - /remark-rehype@11.1.0: - resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} + remark-rehype@11.1.1: dependencies: '@types/hast': 3.0.4 - '@types/mdast': 4.0.3 - mdast-util-to-hast: 13.1.0 - unified: 11.0.4 - vfile: 6.0.1 - dev: false + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.3 - /remark-stringify@11.0.0: - resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + remark-stringify@11.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 mdast-util-to-markdown: 2.1.0 unified: 11.0.5 - dev: false - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true + require-directory@2.1.1: {} - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true + require-from-string@2.0.2: {} - /requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: true + requires-port@1.0.0: {} - /resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} + resolve-cwd@3.0.0: dependencies: resolve-from: 5.0.0 - dev: true - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + resolve-from@4.0.0: {} - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + resolve-from@5.0.0: {} - /resolve.exports@1.1.0: - resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} - engines: {node: '>=10'} - dev: true + resolve.exports@1.1.1: {} - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true + resolve@1.22.8: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - dev: true - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + reusify@1.0.4: {} - /revolt-api@0.7.13: - resolution: {integrity: sha512-5QxWdgTrfH8IZfLlirnEmn6mBZcMvny6v6EATtOxVVQ3IEdH0dXQ8xkSghmQq0eAYMnwvAJjDu9OKQyJCGC5MA==} + revolt-api@0.7.16: dependencies: axios: 0.26.1 lodash.defaultsdeep: 4.6.1 transitivePeerDependencies: - debug - dev: false - - /rimraf@2.6.3: - resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - /rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - hasBin: true + rimraf@2.7.1: dependencies: glob: 7.2.3 - dev: true - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true + rimraf@3.0.2: dependencies: glob: 7.2.3 - dev: true - - /rollup-plugin-terser@7.0.2(rollup@2.79.1): - resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser - peerDependencies: - rollup: ^2.0.0 - dependencies: - '@babel/code-frame': 7.24.7 - jest-worker: 26.6.2 - rollup: 2.79.1 - serialize-javascript: 4.0.0 - terser: 5.29.2 - dev: true - /rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} - engines: {node: '>=10.0.0'} - hasBin: true + rollup@2.79.2: optionalDependencies: fsevents: 2.3.3 - dev: true - /rollup@4.13.0: - resolution: {integrity: sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true + rollup@4.24.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.13.0 - '@rollup/rollup-android-arm64': 4.13.0 - '@rollup/rollup-darwin-arm64': 4.13.0 - '@rollup/rollup-darwin-x64': 4.13.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.13.0 - '@rollup/rollup-linux-arm64-gnu': 4.13.0 - '@rollup/rollup-linux-arm64-musl': 4.13.0 - '@rollup/rollup-linux-riscv64-gnu': 4.13.0 - '@rollup/rollup-linux-x64-gnu': 4.13.0 - '@rollup/rollup-linux-x64-musl': 4.13.0 - '@rollup/rollup-win32-arm64-msvc': 4.13.0 - '@rollup/rollup-win32-ia32-msvc': 4.13.0 - '@rollup/rollup-win32-x64-msvc': 4.13.0 + '@rollup/rollup-android-arm-eabi': 4.24.0 + '@rollup/rollup-android-arm64': 4.24.0 + '@rollup/rollup-darwin-arm64': 4.24.0 + '@rollup/rollup-darwin-x64': 4.24.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.24.0 + '@rollup/rollup-linux-arm-musleabihf': 4.24.0 + '@rollup/rollup-linux-arm64-gnu': 4.24.0 + '@rollup/rollup-linux-arm64-musl': 4.24.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.24.0 + '@rollup/rollup-linux-riscv64-gnu': 4.24.0 + '@rollup/rollup-linux-s390x-gnu': 4.24.0 + '@rollup/rollup-linux-x64-gnu': 4.24.0 + '@rollup/rollup-linux-x64-musl': 4.24.0 + '@rollup/rollup-win32-arm64-msvc': 4.24.0 + '@rollup/rollup-win32-ia32-msvc': 4.24.0 + '@rollup/rollup-win32-x64-msvc': 4.24.0 fsevents: 2.3.3 - dev: true - /rrweb-cssom@0.6.0: - resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} - dev: true + rrweb-cssom@0.7.1: {} - /run-applescript@7.0.0: - resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} - engines: {node: '>=18'} - dev: true + run-applescript@7.0.0: {} - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - requiresBuild: true + rxjs@7.8.1: dependencies: - tslib: 2.6.2 - dev: true + tslib: 2.7.0 optional: true - /safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} + safe-array-concat@1.1.2: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 - dev: true - - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-buffer@5.1.2: {} - /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - is-regex: 1.1.4 - dev: true + safe-buffer@5.2.1: {} - /safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} + safe-regex-test@1.0.3: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-regex: 1.1.4 - dev: true - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safer-buffer@2.1.2: {} - /saxes@5.0.1: - resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} - engines: {node: '>=10'} + saxes@5.0.1: dependencies: xmlchars: 2.2.0 - dev: true - /saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} + saxes@6.0.0: dependencies: xmlchars: 2.2.0 - dev: true - /scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scheduler@0.23.2: dependencies: loose-envify: 1.4.0 - dev: true - - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - dev: true - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true + semver@6.3.1: {} - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 + semver@7.6.3: {} - /send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} + send@0.19.0: dependencies: debug: 2.6.9 depd: 2.0.0 @@ -14435,41 +13821,27 @@ packages: statuses: 2.0.1 transitivePeerDependencies: - supports-color - dev: true - /serialize-javascript@4.0.0: - resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 - dev: true - /seroval-plugins@1.0.5(seroval@1.0.5): - resolution: {integrity: sha512-8+pDC1vOedPXjKG7oz8o+iiHrtF2WswaMQJ7CKFpccvSYfrzmvKY9zOJWCg+881722wIHfwkdnRmiiDm9ym+zQ==} - engines: {node: '>=10'} - peerDependencies: - seroval: ^1.0 + seroval-plugins@1.1.1(seroval@1.1.1): dependencies: - seroval: 1.0.5 + seroval: 1.1.1 - /seroval@1.0.5: - resolution: {integrity: sha512-TM+Z11tHHvQVQKeNlOUonOWnsNM+2IBwZ4vwoi4j3zKzIpc5IDw8WPwCfcc8F17wy6cBcJGbZbFOR0UCuTZHQA==} - engines: {node: '>=10'} + seroval@1.1.1: {} - /serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} + serve-static@1.16.2: dependencies: - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.18.0 + send: 0.19.0 transitivePeerDependencies: - supports-color - dev: true - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 @@ -14477,587 +13849,319 @@ packages: get-intrinsic: 1.2.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 - dev: true - /set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} + set-function-name@2.0.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - dev: true - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: true - - /shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} - dependencies: - kind-of: 6.0.3 - dev: true + setprototypeof@1.2.0: {} - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - dev: true - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true + shebang-regex@3.0.0: {} - /shiki@0.14.1: - resolution: {integrity: sha512-+Jz4nBkCBe0mEDqo1eKRcCdjRtrCjozmcbTUjbPTX7OOJfEbTZzlUWlZtGe3Gb5oV1/jnojhG//YZc3rs9zSEw==} + shiki@0.14.7: dependencies: - ansi-sequence-parser: 1.1.0 - jsonc-parser: 3.2.1 + ansi-sequence-parser: 1.1.1 + jsonc-parser: 3.3.1 vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 - dev: true - /shiki@1.9.0: - resolution: {integrity: sha512-i6//Lqgn7+7nZA0qVjoYH0085YdNk4MC+tJV4bo+HgjgRMJ0JmkLZzFAuvVioJqLkcGDK5GAMpghZEZkCnwxpQ==} + shiki@1.22.0: dependencies: - '@shikijs/core': 1.9.0 - dev: false + '@shikijs/core': 1.22.0 + '@shikijs/engine-javascript': 1.22.0 + '@shikijs/engine-oniguruma': 1.22.0 + '@shikijs/types': 1.22.0 + '@shikijs/vscode-textmate': 9.3.0 + '@types/hast': 3.0.4 - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} + side-channel@1.0.6: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 - dev: true + object-inspect: 1.13.2 - /siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - dev: true + siginfo@2.0.0: {} - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + signal-exit@3.0.7: {} - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true + signal-exit@4.1.0: {} - /sirv@2.0.4: - resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} - engines: {node: '>= 10'} + sirv@2.0.4: dependencies: - '@polka/url': 1.0.0-next.25 + '@polka/url': 1.0.0-next.28 mrmime: 2.0.0 totalist: 3.0.1 - dev: true - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true + sisteransi@1.0.5: {} - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true + slash@3.0.0: {} - /slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} - dev: true + smob@1.5.0: {} - /solid-dnd-directive@0.2.0(solid-js@1.8.15): - resolution: {integrity: sha512-4aPKidTrwSVBHqeiUPPe218t+HyRp0S4iYNJw7nDsWqP33HHYhAwvAyWVfqlqHBlnA/+A5jdevRvbCOiLV5Qew==} - engines: {node: '>=14.16.0', npm: '>=6.14.8'} - peerDependencies: - solid-js: ^1.0.0 + solid-devtools@0.30.1(solid-js@1.9.2)(vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1)): dependencies: - solid-js: 1.8.15 - svelte-dnd-action: 0.9.11 - dev: false + '@babel/core': 7.25.7 + '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.25.7) + '@babel/types': 7.25.7 + '@solid-devtools/debugger': 0.23.4(solid-js@1.9.2) + '@solid-devtools/shared': 0.13.2(solid-js@1.9.2) + solid-js: 1.9.2 + optionalDependencies: + vite: 5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1) + transitivePeerDependencies: + - supports-color - /solid-floating-ui@0.3.1(@floating-ui/dom@1.6.3)(solid-js@1.8.15): - resolution: {integrity: sha512-o/QmGsWPS2Z3KidAxP0nDvN7alI7Kqy0kU+wd85Fz+au5SYcnYm7I6Fk3M60Za35azsPX0U+5fEtqfOuk6Ao0Q==} - engines: {node: '>=10'} - peerDependencies: - '@floating-ui/dom': ^1.5 - solid-js: ^1.8 + solid-dnd-directive@0.2.0(solid-js@1.9.2): dependencies: - '@floating-ui/dom': 1.6.3 - solid-js: 1.8.15 - dev: false + solid-js: 1.9.2 + svelte-dnd-action: 0.9.11 - /solid-hcaptcha@0.4.0(solid-js@1.8.15): - resolution: {integrity: sha512-ermYlhU09wPxqNZujVJr6NQI0T/25Ru8rN9a3gGjB83vqpQTapzP3HujmRBDGTF0Ghuy6r0xexhDnOYVTPrxhw==} - peerDependencies: - solid-js: ^1.6.15 || ^1.7.12 + solid-floating-ui@0.3.1(@floating-ui/dom@1.6.11)(solid-js@1.9.2): dependencies: - '@hcaptcha/types': 1.0.3 - '@solid-primitives/script-loader': 2.1.2(solid-js@1.8.15) - solid-js: 1.8.15 - dev: false + '@floating-ui/dom': 1.6.11 + solid-js: 1.9.2 - /solid-headless@0.13.1(solid-js@1.8.15): - resolution: {integrity: sha512-FZJai49YmdBu6oEo8aJGPMQ1Qn8xiW0cnD6vNFDIQWMKJdXEUtDEwz0hTR9aZ7Epq3IkrZs+98E0vNiv1+pZpA==} - engines: {node: '>=10'} - peerDependencies: - solid-js: ^1.2 + solid-hcaptcha@0.4.0(solid-js@1.9.2): dependencies: - solid-js: 1.8.15 - solid-use: 0.6.2(solid-js@1.8.15) - dev: false + '@hcaptcha/types': 1.0.4 + '@solid-primitives/script-loader': 2.2.0(solid-js@1.9.2) + solid-js: 1.9.2 - /solid-icons@1.1.0(solid-js@1.8.15): - resolution: {integrity: sha512-IesTfr/F1ElVwH2E1110s2RPXH4pujKfSs+koT8rwuTAdleO5s26lNSpqJV7D1+QHooJj18mcOiz2PIKs0ic+A==} - peerDependencies: - solid-js: '*' + solid-icons@1.1.0(solid-js@1.9.2): dependencies: - solid-js: 1.8.15 - dev: false + solid-js: 1.9.2 - /solid-jest@0.2.0(@babel/core@7.24.7)(babel-preset-solid@1.8.15): - resolution: {integrity: sha512-1ILtAj+z6bh1vTvaDlcT8501vmkzkVZMk2aiexJy+XWTZ+sb9B7IWedvWadIhOwwL97fiW4eMmN6SrbaHjn12A==} - peerDependencies: - babel-preset-solid: ^1.0.0 + solid-jest@0.2.0(@babel/core@7.25.7)(babel-preset-solid@1.9.2(@babel/core@7.25.7)): dependencies: - '@babel/preset-env': 7.20.2(@babel/core@7.24.7) - babel-jest: 27.5.1(@babel/core@7.24.7) - babel-preset-solid: 1.8.15(@babel/core@7.24.7) + '@babel/preset-env': 7.25.7(@babel/core@7.25.7) + babel-jest: 27.5.1(@babel/core@7.25.7) + babel-preset-solid: 1.9.2(@babel/core@7.25.7) enhanced-resolve-jest: 1.1.0 transitivePeerDependencies: - '@babel/core' - supports-color - dev: true - /solid-js@1.8.15: - resolution: {integrity: sha512-d0QP/efr3UVcwGgWVPveQQ0IHOH6iU7yUhc2piy8arNG8wxKmvUy1kFxyF8owpmfCWGB87usDKMaVnsNYZm+Vw==} + solid-js@1.9.2: dependencies: csstype: 3.1.3 - seroval: 1.0.5 - seroval-plugins: 1.0.5(seroval@1.0.5) + seroval: 1.1.1 + seroval-plugins: 1.1.1(seroval@1.1.1) - /solid-qr-code@0.1.11(solid-js@1.8.15): - resolution: {integrity: sha512-8TpELeuK6OoPz5TfJaycsna63IivaSr6Y34qU79eYDF+SRTowO9os8gpElNvNe2FFROZuMZpf28jgmn9gV20Eg==} - engines: {node: '>=18'} - peerDependencies: - solid-js: ^1.8.0 + solid-motionone@1.0.2(solid-js@1.9.2): dependencies: - solid-js: 1.8.15 - dev: false + '@motionone/dom': 10.18.0 + '@motionone/utils': 10.18.0 + '@solid-primitives/props': 3.1.11(solid-js@1.9.2) + '@solid-primitives/refs': 1.0.8(solid-js@1.9.2) + '@solid-primitives/transition-group': 1.0.5(solid-js@1.9.2) + csstype: 3.1.3 + solid-js: 1.9.2 - /solid-refresh@0.6.3(solid-js@1.8.15): - resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} - peerDependencies: - solid-js: ^1.3 + solid-qr-code@0.1.11(solid-js@1.9.2): dependencies: - '@babel/generator': 7.23.6 - '@babel/helper-module-imports': 7.22.15 - '@babel/types': 7.24.7 - solid-js: 1.8.15 - dev: true + solid-js: 1.9.2 - /solid-use@0.6.2(solid-js@1.8.15): - resolution: {integrity: sha512-0ShJ5s+4PIN0pJB/BtsQucsZB+xnUeeTGaxErQDu6USn5jygZWXicAtOEvFbI8gv40xE751uY1Tz7Aib9lxL/Q==} - engines: {node: '>=10'} - peerDependencies: - solid-js: ^1.5 + solid-refresh@0.6.3(solid-js@1.9.2): dependencies: - solid-js: 1.8.15 - dev: false + '@babel/generator': 7.25.7 + '@babel/helper-module-imports': 7.25.7 + '@babel/types': 7.25.7 + solid-js: 1.9.2 + transitivePeerDependencies: + - supports-color - /source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - dev: true + source-map-js@1.2.1: {} - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.5.7: {} - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - requiresBuild: true - dev: true + source-map@0.6.1: {} - /source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: true + source-map@0.7.4: {} - /source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} + source-map@0.8.0-beta.0: dependencies: whatwg-url: 7.1.0 - dev: true - - /sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - dev: true - - /space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.18 - dev: true - /spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - dev: true + sourcemap-codec@1.4.8: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.18 - dev: true - - /spdx-license-ids@3.0.18: - resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} - dev: true + space-separated-tokens@2.0.2: {} - /split@0.3.3: - resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} + split@0.3.3: dependencies: through: 2.3.8 - dev: true - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + sprintf-js@1.0.3: {} - /stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 - dev: true - /stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - dev: true + stackback@0.0.2: {} - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - dev: true + statuses@2.0.1: {} - /std-env@3.7.0: - resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} - dev: true + std-env@3.7.0: {} - /stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} - engines: {node: '>= 0.4'} + stop-iteration-iterator@1.0.0: dependencies: internal-slot: 1.0.7 - dev: true - /store2@2.14.3: - resolution: {integrity: sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg==} - dev: true - - /storybook-solidjs-vite@1.0.0-beta.2(prettier@3.2.5)(typescript@5.4.2)(vite@5.1.6): - resolution: {integrity: sha512-dD+VMYC5fBBQNesVb+mjB0LOkZIf100SQFbjAt9/sDstNUvc5ce3yZwLYXzgcOc7jcSMkrBu/cZNRzEM4YIAyw==} - engines: {node: ^14.18 || >=16} + storybook-solidjs-vite@1.0.0-beta.2(storybook@8.3.5)(vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1)): dependencies: - '@storybook/builder-vite': 8.2.0-alpha.10(prettier@3.2.5)(typescript@5.4.2)(vite@5.1.6) + '@storybook/builder-vite': 8.4.0-alpha.6(storybook@8.3.5)(vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1)) transitivePeerDependencies: - - '@preact/preset-vite' - - encoding - - prettier - - supports-color - - typescript + - storybook - vite - - vite-plugin-glimmerx - dev: true + - webpack-sources - /storybook-solidjs@1.0.0-beta.2(babel-preset-solid@1.8.15)(solid-js@1.8.15): - resolution: {integrity: sha512-wXjM/uH29IPjgxlPvQVNTM/7iBFNNzjuOugpk7iM2oy+sZl7K70eBjvOqGgX5v35pNHTaA8Ju3BlLdp+O20abg==} - engines: {node: '>=16.0.0'} - peerDependencies: - babel-preset-solid: ^1.6.6 - solid-js: ^1.6.6 + storybook-solidjs@1.0.0-beta.2(babel-preset-solid@1.9.2(@babel/core@7.25.7))(solid-js@1.9.2): dependencies: - babel-preset-solid: 1.8.15(@babel/core@7.24.7) - solid-js: 1.8.15 - dev: true + babel-preset-solid: 1.9.2(@babel/core@7.25.7) + solid-js: 1.9.2 - /storybook@8.2.0-alpha.5(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-RDesMQOhqa2/Vho58JO+2Q1p8gAk61uTPbncVCxnHDwbj/l/WB6uGmxcElseK+YX6JsCfJ6ie1K6tyxjslZanQ==} - hasBin: true + storybook@8.3.5: dependencies: - '@storybook/cli': 8.2.0-alpha.5(react-dom@18.3.1)(react@18.3.1) + '@storybook/core': 8.3.5 transitivePeerDependencies: - - '@babel/preset-env' - bufferutil - - encoding - - react - - react-dom - supports-color - utf-8-validate - dev: true - /stream-combiner@0.0.4: - resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} + stream-combiner@0.0.4: dependencies: duplexer: 0.1.2 - dev: true - - /stream-shift@1.0.3: - resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} - dev: true - /string-argv@0.3.1: - resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} - engines: {node: '>=0.6.19'} - dev: true - - /string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} + string-argv@0.3.2: {} + + string-length@4.0.2: dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 - dev: true - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + string-width@5.1.2: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - dev: true - /string.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + string.prototype.matchall@4.0.11: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 + gopd: 1.0.1 has-symbols: 1.0.3 internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.2 + regexp.prototype.flags: 1.5.3 set-function-name: 2.0.2 side-channel: 1.0.6 - dev: true - /string.prototype.trim@1.2.7: - resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.21.2 - dev: true - - /string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} + string.prototype.trim@1.2.9: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.1 + es-abstract: 1.23.3 es-object-atoms: 1.0.0 - dev: true - - /string.prototype.trimend@1.0.6: - resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.21.2 - dev: true - /string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + string.prototype.trimend@1.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - - /string.prototype.trimstart@1.0.6: - resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.21.2 - dev: true - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + string.prototype.trimstart@1.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.1 - dev: true + es-object-atoms: 1.0.0 - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 - dev: true - /stringify-entities@4.0.3: - resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 - dev: true - /stringify-object@3.3.0: - resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} - engines: {node: '>=4'} + stringify-object@3.3.0: dependencies: get-own-enumerable-property-symbols: 3.0.2 is-obj: 1.0.1 is-regexp: 1.0.0 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: true - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + strip-ansi@7.1.0: dependencies: - ansi-regex: 6.0.1 - dev: true + ansi-regex: 6.1.0 - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true - - /strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - dev: true + strip-bom@4.0.0: {} - /strip-comments@2.0.1: - resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} - engines: {node: '>=10'} - dev: true - - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true + strip-comments@2.0.1: {} - /strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - dev: true + strip-final-newline@2.0.0: {} - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 - dev: true - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true - - /strip-literal@2.0.0: - resolution: {integrity: sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==} - dependencies: - js-tokens: 8.0.3 - dev: true + strip-json-comments@3.1.1: {} - /style-to-object@0.3.0: - resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} + style-to-object@0.3.0: dependencies: inline-style-parser: 0.1.1 - dev: true - /style-to-object@0.4.4: - resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} + style-to-object@1.0.8: dependencies: - inline-style-parser: 0.1.1 - dev: false + inline-style-parser: 0.2.4 - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 - dev: true - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: true - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - dev: true - /supports-hyperlinks@2.3.0: - resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} - engines: {node: '>=8'} + supports-hyperlinks@2.3.0: dependencies: has-flag: 4.0.0 supports-color: 7.2.0 - dev: true - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true + supports-preserve-symlinks-flag@1.0.0: {} - /svelte-dnd-action@0.9.11: - resolution: {integrity: sha512-hkuBs8rT0yVD0Xq9p9GxeHN1zYD8r7oZO872VQHg7DJe3cAYwus4WXpx3DNYZiTcLcIOmDw3BVNdKvAl/B6VPg==} - dev: false + svelte-dnd-action@0.9.11: {} - /svgo@3.2.0: - resolution: {integrity: sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==} - engines: {node: '>=14.0.0'} - hasBin: true + svgo@3.3.2: dependencies: '@trysound/sax': 0.2.0 commander: 7.2.0 @@ -15065,398 +14169,203 @@ packages: css-tree: 2.3.1 css-what: 6.1.0 csso: 5.0.5 - picocolors: 1.0.0 - dev: true - - /symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - dev: true - - /tapable@1.1.3: - resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} - engines: {node: '>=6'} - dev: true + picocolors: 1.1.0 - /tar-fs@2.1.1: - resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.0 - tar-stream: 2.2.0 - dev: true + symbol-tree@3.2.4: {} - /tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} + synckit@0.9.2: dependencies: - bl: 4.1.0 - end-of-stream: 1.4.4 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - dev: true + '@pkgr/core': 0.1.1 + tslib: 2.7.0 - /tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - dev: true + tapable@1.1.3: {} - /telejson@7.2.0: - resolution: {integrity: sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==} + telejson@7.2.0: dependencies: memoizerific: 1.11.3 - dev: true - - /temp-dir@2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} - dev: true - - /temp-dir@3.0.0: - resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} - engines: {node: '>=14.16'} - dev: true - /temp@0.8.4: - resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} - engines: {node: '>=6.0.0'} - dependencies: - rimraf: 2.6.3 - dev: true + temp-dir@2.0.0: {} - /tempy@0.6.0: - resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} - engines: {node: '>=10'} + tempy@0.6.0: dependencies: is-stream: 2.0.1 temp-dir: 2.0.0 type-fest: 0.16.0 unique-string: 2.0.0 - dev: true - - /tempy@3.1.0: - resolution: {integrity: sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==} - engines: {node: '>=14.16'} - dependencies: - is-stream: 3.0.0 - temp-dir: 3.0.0 - type-fest: 2.19.0 - unique-string: 3.0.0 - dev: true - /terminal-link@2.1.1: - resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} - engines: {node: '>=8'} + terminal-link@2.1.1: dependencies: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - dev: true - /terser@5.29.2: - resolution: {integrity: sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==} - engines: {node: '>=10'} - hasBin: true + terser@5.34.1: dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.11.3 + acorn: 8.12.1 commander: 2.20.3 source-map-support: 0.5.21 - dev: true - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 - dev: true - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + test-exclude@7.0.1: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 10.4.5 + minimatch: 9.0.5 - /throat@6.0.1: - resolution: {integrity: sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==} - dev: true + text-table@0.2.0: {} - /through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + throat@6.0.2: {} + + through@2.3.8: {} + + tiny-invariant@1.3.3: {} + + tinybench@2.9.0: {} + + tinyexec@0.3.0: {} + + tinyglobby@0.2.9: dependencies: - readable-stream: 2.3.7 - xtend: 4.0.2 - dev: true + fdir: 6.4.0(picomatch@4.0.2) + picomatch: 4.0.2 - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true + tinypool@1.0.1: {} - /tiny-invariant@1.3.3: - resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - dev: true + tinyrainbow@1.2.0: {} - /tinybench@2.6.0: - resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} - dev: true + tinyspy@3.0.2: {} - /tinypool@0.8.2: - resolution: {integrity: sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==} - engines: {node: '>=14.0.0'} - dev: true + tldts-core@6.1.50: {} - /tinyspy@2.2.1: - resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} - engines: {node: '>=14.0.0'} - dev: true + tldts@6.1.50: + dependencies: + tldts-core: 6.1.50 - /tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: true + tmpl@1.0.5: {} - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: true + to-fast-properties@2.0.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - - /tocbot@4.28.2: - resolution: {integrity: sha512-/MaSa9xI6mIo84IxqqliSCtPlH0oy7sLcY9s26qPMyH/2CxtZ2vNAXYlIdEQ7kjAkCQnc0rbLygf//F5c663oQ==} - dev: true - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: true + toidentifier@1.0.1: {} - /totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} - engines: {node: '>=6'} - dev: true + totalist@3.0.1: {} - /tough-cookie@4.1.3: - resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} - engines: {node: '>=6'} + tough-cookie@4.1.4: dependencies: psl: 1.9.0 punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 - dev: true - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tough-cookie@5.0.0: + dependencies: + tldts: 6.1.50 - /tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + tr46@0.0.3: {} + + tr46@1.0.1: dependencies: punycode: 2.3.1 - dev: true - /tr46@2.1.0: - resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} - engines: {node: '>=8'} + tr46@2.1.0: dependencies: punycode: 2.3.1 - dev: true - /tr46@5.0.0: - resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} - engines: {node: '>=18'} + tr46@5.0.0: dependencies: punycode: 2.3.1 - dev: true - /trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + trim-lines@3.0.1: {} - /trough@2.2.0: - resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + trough@2.2.0: {} - /ts-dedent@2.2.0: - resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} - engines: {node: '>=6.10'} - dev: true + ts-api-utils@1.3.0(typescript@5.6.3): + dependencies: + typescript: 5.6.3 - /ts-evaluator@1.2.0(jsdom@24.0.0)(typescript@5.4.2): - resolution: {integrity: sha512-ncSGek1p92bj2ifB7s9UBgryHCkU9vwC5d+Lplt12gT9DH+e41X8dMoHRQjIMeAvyG7j9dEnuHmwgOtuRIQL+Q==} - engines: {node: '>=14.19.0'} - peerDependencies: - jsdom: '>=14.x || >=15.x || >=16.x || >=17.x || >=18.x || >=19.x || >=20.x || >=21.x || >=22.x' - typescript: '>=3.2.x || >= 4.x || >= 5.x' - peerDependenciesMeta: - jsdom: - optional: true + ts-dedent@2.2.0: {} + + ts-evaluator@1.2.0(jsdom@25.0.1)(typescript@5.6.3): dependencies: ansi-colors: 4.1.3 crosspath: 2.0.0 - jsdom: 24.0.0 object-path: 0.11.8 - typescript: 5.4.2 - dev: true + typescript: 5.6.3 + optionalDependencies: + jsdom: 25.0.1 - /ts-morph@21.0.1: - resolution: {integrity: sha512-dbDtVdEAncKctzrVZ+Nr7kHpHkv+0JDJb2MjjpBaj8bFeCkePU9rHfMklmhuLFnpeq/EJZk2IhStY6NzqgjOkg==} + ts-morph@21.0.1: dependencies: '@ts-morph/common': 0.22.0 code-block-writer: 12.0.0 - dev: true - /ts-pattern@5.0.8: - resolution: {integrity: sha512-aafbuAQOTEeWmA7wtcL94w6I89EgLD7F+IlWkr596wYxeb0oveWDO5dQpv85YP0CGbxXT/qXBIeV6IYLcoZ2uA==} - dev: true + ts-pattern@5.0.8: {} - /tsc-watch@6.0.4(typescript@5.4.2): - resolution: {integrity: sha512-cHvbvhjO86w2aGlaHgSCeQRl+Aqw6X6XN4sQMPZKF88GoP30O+oTuh5lRIJr5pgFWrRpF1AgXnJJ2DoFEIPHyg==} - engines: {node: '>=12.12.0'} - hasBin: true - peerDependencies: - typescript: '*' + tsc-watch@6.2.0(typescript@5.6.3): dependencies: cross-spawn: 7.0.3 node-cleanup: 2.1.2 ps-tree: 1.2.0 - string-argv: 0.3.1 - typescript: 5.4.2 - dev: true + string-argv: 0.3.2 + typescript: 5.6.3 - /tsconfck@3.0.2(typescript@5.4.2): - resolution: {integrity: sha512-6lWtFjwuhS3XI4HsX4Zg0izOI3FU/AI9EGVlPEUMDIhvLPMD4wkiof0WCoDgW7qY+Dy198g4d9miAqUHWHFH6Q==} - engines: {node: ^18 || >=20} - hasBin: true - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - dependencies: - typescript: 5.4.2 - dev: true + tsconfck@3.0.2(typescript@5.6.3): + optionalDependencies: + typescript: 5.6.3 - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true + tslib@1.14.1: {} - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tslib@2.7.0: {} - /tsutils@3.21.0(typescript@5.4.2): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + tsutils@3.21.0(typescript@5.6.3): dependencies: tslib: 1.14.1 - typescript: 5.4.2 - dev: true - - /tween-functions@1.2.0: - resolution: {integrity: sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA==} - dev: true + typescript: 5.6.3 - /type-check@0.3.2: - resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - dev: true + tween-functions@1.2.0: {} - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - dev: true - - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true - - /type-fest@0.16.0: - resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} - engines: {node: '>=10'} - dev: true - - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true - - /type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true + type-detect@4.0.8: {} - /type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true + type-fest@0.16.0: {} - /type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - dev: true + type-fest@0.20.2: {} - /type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - dev: true + type-fest@0.21.3: {} - /type-fest@3.13.1: - resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} - engines: {node: '>=14.16'} - dev: true + type-fest@2.19.0: {} - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} + type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - dev: true - /typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} + typed-array-buffer@1.0.2: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-typed-array: 1.1.13 - dev: true - /typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.1: dependencies: call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 has-proto: 1.0.3 is-typed-array: 1.1.13 - dev: true - /typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.2: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.7 @@ -15464,19 +14373,8 @@ packages: gopd: 1.0.1 has-proto: 1.0.3 is-typed-array: 1.1.13 - dev: true - - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - is-typed-array: 1.1.10 - dev: true - /typed-array-length@1.0.5: - resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==} - engines: {node: '>= 0.4'} + typed-array-length@1.0.6: dependencies: call-bind: 1.0.7 for-each: 0.3.3 @@ -15484,1070 +14382,580 @@ packages: has-proto: 1.0.3 is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - dev: true - /typed-emitter@2.1.0: - resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==} + typed-emitter@2.1.0: optionalDependencies: rxjs: 7.8.1 - dev: true - /typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + typedarray-to-buffer@3.1.5: dependencies: is-typedarray: 1.0.0 - dev: true - /typedoc@0.25.1(typescript@5.4.2): - resolution: {integrity: sha512-c2ye3YUtGIadxN2O6YwPEXgrZcvhlZ6HlhWZ8jQRNzwLPn2ylhdGqdR8HbyDRyALP8J6lmSANILCkkIdNPFxqA==} - engines: {node: '>= 16'} - hasBin: true - peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x + typedoc@0.25.13(typescript@5.6.3): dependencies: lunr: 2.3.9 marked: 4.3.0 - minimatch: 9.0.4 - shiki: 0.14.1 - typescript: 5.4.2 - dev: true + minimatch: 9.0.5 + shiki: 0.14.7 + typescript: 5.6.3 - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true + typescript-eslint@8.8.1(eslint@9.12.0)(typescript@5.6.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.3))(eslint@9.12.0)(typescript@5.6.3) + '@typescript-eslint/parser': 8.8.1(eslint@9.12.0)(typescript@5.6.3) + '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - eslint + - supports-color - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@4.9.5: {} - /typescript@5.4.2: - resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} - engines: {node: '>=14.17'} - hasBin: true + typescript@5.3.3: {} - /ufo@1.5.1: - resolution: {integrity: sha512-HGyF79+/qZ4soRvM+nHERR2pJ3VXDZ/8sL1uLahdgEDf580NkgiWOxLk33FetExqOWp352JZRsgXbG/4MaGOSg==} - dev: true + typescript@5.6.3: {} - /uglify-js@3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true + ufo@1.5.4: {} - /ulid@2.3.0: - resolution: {integrity: sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==} - hasBin: true - dev: false + ulid@2.3.0: {} - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: true - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@5.26.5: {} - /unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} - dev: true + undici-types@6.19.8: {} - /unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-match-property-ecmascript@2.0.0: dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-canonical-property-names-ecmascript: 2.0.1 unicode-property-aliases-ecmascript: 2.1.0 - dev: true - - /unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} - engines: {node: '>=4'} - dev: true - /unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - dev: true - - /unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - dev: true + unicode-match-property-value-ecmascript@2.2.0: {} - /unified@11.0.4: - resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} - dependencies: - '@types/unist': 3.0.2 - bail: 2.0.2 - devlop: 1.1.0 - extend: 3.0.2 - is-plain-obj: 4.1.0 - trough: 2.2.0 - vfile: 6.0.1 + unicode-property-aliases-ecmascript@2.1.0: {} - /unified@11.0.5: - resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + unified@11.0.5: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 bail: 2.0.2 - devlop: 1.1.0 - extend: 3.0.2 - is-plain-obj: 4.1.0 - trough: 2.2.0 - vfile: 6.0.1 - dev: false - - /unique-string@2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - dependencies: - crypto-random-string: 2.0.0 - dev: true - - /unique-string@3.0.0: - resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} - engines: {node: '>=12'} - dependencies: - crypto-random-string: 4.0.0 - dev: true - - /unist-util-find-after@5.0.0: - resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} - dependencies: - '@types/unist': 3.0.2 - unist-util-is: 6.0.0 - dev: false - - /unist-util-generated@2.0.1: - resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} - dev: false + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 - /unist-util-is@5.2.1: - resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + unique-string@2.0.0: dependencies: - '@types/unist': 2.0.10 - dev: false + crypto-random-string: 2.0.0 - /unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + unist-util-find-after@5.0.0: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 - /unist-util-position@4.0.4: - resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} + unist-util-is@6.0.0: dependencies: - '@types/unist': 2.0.10 - dev: false + '@types/unist': 3.0.3 - /unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + unist-util-position@5.0.0: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 - /unist-util-remove-position@5.0.0: - resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + unist-util-remove-position@5.0.0: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-visit: 5.0.0 - dev: false - /unist-util-select@5.1.0: - resolution: {integrity: sha512-4A5mfokSHG/rNQ4g7gSbdEs+H586xyd24sdJqF1IWamqrLHvYb+DH48fzxowyOhOfK7YSqX+XlCojAyuuyyT2A==} + unist-util-select@5.1.0: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 css-selector-parser: 3.0.5 devlop: 1.1.0 nth-check: 2.1.1 zwitch: 2.0.4 - dev: false - - /unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - dependencies: - '@types/unist': 3.0.2 - /unist-util-visit-parents@5.1.3: - resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + unist-util-stringify-position@4.0.0: dependencies: - '@types/unist': 2.0.10 - unist-util-is: 5.2.1 - dev: false + '@types/unist': 3.0.3 - /unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + unist-util-visit-parents@6.0.1: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-is: 6.0.0 - /unist-util-visit@4.1.2: - resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} - dependencies: - '@types/unist': 2.0.10 - unist-util-is: 5.2.1 - unist-util-visit-parents: 5.1.3 - dev: false - - /unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + unist-util-visit@5.0.0: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - /universal-github-app-jwt@1.1.2: - resolution: {integrity: sha512-t1iB2FmLFE+yyJY9+3wMx0ejB+MQpEVkH0gQv7dR6FZyltyq+ZZO0uDpbopxhrZ3SLEO4dCEkIujOMldEQ2iOA==} + universal-github-app-jwt@1.2.0: dependencies: - '@types/jsonwebtoken': 9.0.6 + '@types/jsonwebtoken': 9.0.7 jsonwebtoken: 9.0.2 - dev: false - /universal-user-agent@6.0.1: - resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} - dev: false + universal-user-agent@6.0.1: {} - /universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - dev: true + universalify@0.2.0: {} - /universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - dev: true + universalify@2.0.1: {} - /unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: true + unpipe@1.0.0: {} - /unplugin@1.10.1: - resolution: {integrity: sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==} - engines: {node: '>=14.0.0'} + unplugin@1.14.1: dependencies: - acorn: 8.11.3 - chokidar: 3.6.0 - webpack-sources: 3.2.3 + acorn: 8.12.1 webpack-virtual-modules: 0.6.2 - dev: true - /untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - dev: true + upath@1.2.0: {} - /upath@1.2.0: - resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} - engines: {node: '>=4'} - dev: true + update-browserslist-db@1.1.1(browserslist@4.23.3): + dependencies: + browserslist: 4.23.3 + escalade: 3.2.0 + picocolors: 1.1.0 - /update-browserslist-db@1.0.13(browserslist@4.23.0): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.1.1(browserslist@4.24.0): dependencies: - browserslist: 4.23.0 - escalade: 3.1.2 - picocolors: 1.0.0 - dev: true + browserslist: 4.24.0 + escalade: 3.2.0 + picocolors: 1.1.0 - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.1 - dev: true - /url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + url-parse@1.5.10: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 - dev: true - - /use-callback-ref@1.3.2(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.3.3 - react: 18.3.1 - tslib: 2.6.2 - dev: true - - /use-sidecar@1.1.2(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.3.3 - detect-node-es: 1.1.0 - react: 18.3.1 - tslib: 2.6.2 - dev: true - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true + util-deprecate@1.0.2: {} - /util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + util@0.12.5: dependencies: inherits: 2.0.4 is-arguments: 1.1.1 is-generator-function: 1.0.10 is-typed-array: 1.1.13 which-typed-array: 1.1.15 - dev: true - /utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: true + utils-merge@1.0.1: {} - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - dev: true + uuid@9.0.1: {} - /v8-to-istanbul@8.1.1: - resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} - engines: {node: '>=10.12.0'} + v8-to-istanbul@8.1.1: dependencies: - '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 1.9.0 source-map: 0.7.4 - dev: true - /validate-html-nesting@1.2.1: - resolution: {integrity: sha512-T1ab131NkP3BfXB7KUSgV7Rhu81R2id+L6NaJ7NypAAG5iV6gXnPpQE5RK1fvb+3JYsPTL+ihWna5sr5RN9gaQ==} - dev: true + validate-html-nesting@1.2.2: {} - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - dev: true - - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: true + vary@1.1.2: {} - /vfile-location@5.0.2: - resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} + vfile-location@5.0.3: dependencies: - '@types/unist': 3.0.2 - vfile: 6.0.1 + '@types/unist': 3.0.3 + vfile: 6.0.3 - /vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vfile-message@4.0.2: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 - /vfile@6.0.1: - resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + vfile@6.0.3: dependencies: - '@types/unist': 3.0.2 - unist-util-stringify-position: 4.0.0 + '@types/unist': 3.0.3 vfile-message: 4.0.2 - /vite-node@1.4.0: - resolution: {integrity: sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true + vite-node@2.1.2(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1): dependencies: cac: 6.7.14 - debug: 4.3.4 + debug: 4.3.7 pathe: 1.1.2 - picocolors: 1.0.0 - vite: 5.1.6 + vite: 5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1) transitivePeerDependencies: - '@types/node' - less - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color - terser - dev: true - /vite-plugin-inspect@0.8.3(rollup@2.79.1)(vite@5.1.6): - resolution: {integrity: sha512-SBVzOIdP/kwe6hjkt7LSW4D0+REqqe58AumcnCfRNw4Kt3mbS9pEBkch+nupu2PBxv2tQi69EQHQ1ZA1vgB/Og==} - engines: {node: '>=14'} - peerDependencies: - '@nuxt/kit': '*' - vite: ^3.1.0 || ^4.0.0 || ^5.0.0-0 - peerDependenciesMeta: - '@nuxt/kit': - optional: true + vite-plugin-inspect@0.8.7(rollup@2.79.2)(vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1)): dependencies: - '@antfu/utils': 0.7.7 - '@rollup/pluginutils': 5.1.0(rollup@2.79.1) - debug: 4.3.4 - error-stack-parser-es: 0.1.1 + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.1.2(rollup@2.79.2) + debug: 4.3.7 + error-stack-parser-es: 0.1.5 fs-extra: 11.2.0 open: 10.1.0 perfect-debounce: 1.0.0 - picocolors: 1.0.0 + picocolors: 1.1.0 sirv: 2.0.4 - vite: 5.1.6 + vite: 5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1) transitivePeerDependencies: - rollup - supports-color - dev: true - /vite-plugin-pwa@0.19.4(vite@5.1.6)(workbox-build@7.0.0)(workbox-window@7.0.0): - resolution: {integrity: sha512-KiEFXaYEj2Hg1it+yECy75oqNmlXimI7BaLx7Sxl7Qsd9EIVxaf3GX1mZdLpHe83pDgHBNwm9USGQxSCNp5m7A==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@vite-pwa/assets-generator': ^0.2.4 - vite: ^3.1.0 || ^4.0.0 || ^5.0.0 - workbox-build: ^7.0.0 - workbox-window: ^7.0.0 - peerDependenciesMeta: - '@vite-pwa/assets-generator': - optional: true + vite-plugin-pwa@0.20.5(vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0): dependencies: - debug: 4.3.4 - fast-glob: 3.3.2 + debug: 4.3.7 pretty-bytes: 6.1.1 - vite: 5.1.6 - workbox-build: 7.0.0 - workbox-window: 7.0.0 + tinyglobby: 0.2.9 + vite: 5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1) + workbox-build: 7.1.1(@types/babel__core@7.20.5) + workbox-window: 7.1.0 transitivePeerDependencies: - supports-color - dev: true - /vite-plugin-solid-svg@0.8.0(solid-js@1.8.15)(vite@5.1.6): - resolution: {integrity: sha512-m4HQ6nnwjPqiJONnRRZjLkOC86ZbgfBMpE6UnqGI62R2a7SZB2To/v6oeiZ+17LFtYYCNbZ2DPQT66a/YmqM3A==} - peerDependencies: - solid-js: ^1 - vite: '>=4' + vite-plugin-solid-svg@0.8.1(solid-js@1.9.2)(vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1)): dependencies: - solid-js: 1.8.15 - svgo: 3.2.0 - vite: 5.1.6 - dev: true + solid-js: 1.9.2 + svgo: 3.3.2 + vite: 5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1) - /vite-plugin-solid@2.10.2(@testing-library/jest-dom@6.4.2)(solid-js@1.8.15)(vite@5.1.6): - resolution: {integrity: sha512-AOEtwMe2baBSXMXdo+BUwECC8IFHcKS6WQV/1NEd+Q7vHPap5fmIhLcAzr+DUJ04/KHx/1UBU0l1/GWP+rMAPQ==} - peerDependencies: - '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* - solid-js: ^1.7.2 - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - '@testing-library/jest-dom': - optional: true + vite-plugin-solid@2.10.2(@testing-library/jest-dom@6.5.0)(solid-js@1.9.2)(vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1)): dependencies: - '@babel/core': 7.24.0 - '@testing-library/jest-dom': 6.4.2(vitest@1.4.0) + '@babel/core': 7.25.7 '@types/babel__core': 7.20.5 - babel-preset-solid: 1.8.15(@babel/core@7.24.0) + babel-preset-solid: 1.9.2(@babel/core@7.25.7) merge-anything: 5.1.7 - solid-js: 1.8.15 - solid-refresh: 0.6.3(solid-js@1.8.15) - vite: 5.1.6 - vitefu: 0.2.5(vite@5.1.6) + solid-js: 1.9.2 + solid-refresh: 0.6.3(solid-js@1.9.2) + vite: 5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1) + vitefu: 0.2.5(vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1)) + optionalDependencies: + '@testing-library/jest-dom': 6.5.0 transitivePeerDependencies: - supports-color - dev: true - /vite@5.1.6: - resolution: {integrity: sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true + vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1): dependencies: - esbuild: 0.19.12 - postcss: 8.4.35 - rollup: 4.13.0 + esbuild: 0.21.5 + postcss: 8.4.47 + rollup: 4.24.0 optionalDependencies: + '@types/node': 22.7.5 fsevents: 2.3.3 - dev: true - - /vitefu@0.2.5(vite@5.1.6): - resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - vite: - optional: true - dependencies: - vite: 5.1.6 - dev: true + lightningcss: 1.27.0 + terser: 5.34.1 - /vitest@1.4.0(jsdom@24.0.0): - resolution: {integrity: sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 1.4.0 - '@vitest/ui': 1.4.0 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - dependencies: - '@vitest/expect': 1.4.0 - '@vitest/runner': 1.4.0 - '@vitest/snapshot': 1.4.0 - '@vitest/spy': 1.4.0 - '@vitest/utils': 1.4.0 - acorn-walk: 8.3.2 - chai: 4.4.1 - debug: 4.3.4 - execa: 8.0.1 - jsdom: 24.0.0 - local-pkg: 0.5.0 - magic-string: 0.30.8 + vitefu@0.2.5(vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1)): + optionalDependencies: + vite: 5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1) + + vitest@2.1.2(@types/node@22.7.5)(jsdom@25.0.1)(lightningcss@1.27.0)(terser@5.34.1): + dependencies: + '@vitest/expect': 2.1.2 + '@vitest/mocker': 2.1.2(@vitest/spy@2.1.2)(vite@5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1)) + '@vitest/pretty-format': 2.1.2 + '@vitest/runner': 2.1.2 + '@vitest/snapshot': 2.1.2 + '@vitest/spy': 2.1.2 + '@vitest/utils': 2.1.2 + chai: 5.1.1 + debug: 4.3.7 + magic-string: 0.30.11 pathe: 1.1.2 - picocolors: 1.0.0 std-env: 3.7.0 - strip-literal: 2.0.0 - tinybench: 2.6.0 - tinypool: 0.8.2 - vite: 5.1.6 - vite-node: 1.4.0 - why-is-node-running: 2.2.2 + tinybench: 2.9.0 + tinyexec: 0.3.0 + tinypool: 1.0.1 + tinyrainbow: 1.2.0 + vite: 5.4.8(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1) + vite-node: 2.1.2(@types/node@22.7.5)(lightningcss@1.27.0)(terser@5.34.1) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.7.5 + jsdom: 25.0.1 transitivePeerDependencies: - less - lightningcss + - msw - sass + - sass-embedded - stylus - sugarss - supports-color - terser - dev: true - /vscode-oniguruma@1.7.0: - resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} - dev: true + vscode-oniguruma@1.7.0: {} - /vscode-textmate@8.0.0: - resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} - dev: true + vscode-textmate@8.0.0: {} - /w3c-hr-time@1.0.2: - resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} - deprecated: Use your platform's native performance.now() and performance.timeOrigin. + w3c-hr-time@1.0.2: dependencies: browser-process-hrtime: 1.0.0 - dev: true - /w3c-xmlserializer@2.0.0: - resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} - engines: {node: '>=10'} + w3c-xmlserializer@2.0.0: dependencies: xml-name-validator: 3.0.0 - dev: true - /w3c-xmlserializer@5.0.0: - resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} - engines: {node: '>=18'} + w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 - dev: true - /walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + walker@1.0.8: dependencies: makeerror: 1.0.12 - dev: true - - /watchpack@2.4.1: - resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} - engines: {node: '>=10.13.0'} - dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - dev: true - - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - dependencies: - defaults: 1.0.4 - dev: true - - /web-namespaces@2.0.1: - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + web-namespaces@2.0.1: {} - /webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - dev: true + webidl-conversions@3.0.1: {} - /webidl-conversions@5.0.0: - resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} - engines: {node: '>=8'} - dev: true + webidl-conversions@4.0.2: {} - /webidl-conversions@6.1.0: - resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} - engines: {node: '>=10.4'} - dev: true + webidl-conversions@5.0.0: {} - /webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - dev: true + webidl-conversions@6.1.0: {} - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: true + webidl-conversions@7.0.0: {} - /webpack-virtual-modules@0.6.2: - resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - dev: true + webpack-virtual-modules@0.6.2: {} - /whatwg-encoding@1.0.5: - resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + whatwg-encoding@1.0.5: dependencies: iconv-lite: 0.4.24 - dev: true - /whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} + whatwg-encoding@3.1.1: dependencies: iconv-lite: 0.6.3 - dev: true - /whatwg-mimetype@2.3.0: - resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} - dev: true + whatwg-mimetype@2.3.0: {} - /whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - dev: true + whatwg-mimetype@4.0.0: {} - /whatwg-url@14.0.0: - resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} - engines: {node: '>=18'} + whatwg-url@14.0.0: dependencies: tr46: 5.0.0 webidl-conversions: 7.0.0 - dev: true - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - /whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + whatwg-url@7.1.0: dependencies: lodash.sortby: 4.7.0 tr46: 1.0.1 webidl-conversions: 4.0.2 - dev: true - /whatwg-url@8.7.0: - resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} - engines: {node: '>=10'} + whatwg-url@8.7.0: dependencies: lodash: 4.17.21 tr46: 2.1.0 webidl-conversions: 6.1.0 - dev: true - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true - /which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} + which-collection@1.0.2: dependencies: is-map: 2.0.3 is-set: 2.0.3 is-weakmap: 2.0.2 is-weakset: 2.0.3 - dev: true - /which-pm@2.0.0: - resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} - engines: {node: '>=8.15'} - dependencies: - load-yaml-file: 0.2.0 - path-exists: 4.0.0 - dev: true - - /which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.15: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.2 - dev: true - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /why-is-node-running@2.2.2: - resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} - engines: {node: '>=8'} - hasBin: true + why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 stackback: 0.0.2 - dev: true - - /word-wrap@1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} - engines: {node: '>=0.10.0'} - dev: true - /wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - dev: true + word-wrap@1.2.5: {} - /workbox-background-sync@7.0.0: - resolution: {integrity: sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==} + workbox-background-sync@7.1.0: dependencies: idb: 7.1.1 - workbox-core: 7.0.0 - dev: true + workbox-core: 7.1.0 - /workbox-broadcast-update@7.0.0: - resolution: {integrity: sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==} + workbox-broadcast-update@7.1.0: dependencies: - workbox-core: 7.0.0 - dev: true + workbox-core: 7.1.0 - /workbox-build@7.0.0: - resolution: {integrity: sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==} - engines: {node: '>=16.0.0'} + workbox-build@7.1.1(@types/babel__core@7.20.5): dependencies: - '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) - '@babel/core': 7.24.7 - '@babel/preset-env': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.24.0 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.24.7)(rollup@2.79.1) - '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) - '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) + '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) + '@babel/core': 7.25.7 + '@babel/preset-env': 7.25.7(@babel/core@7.25.7) + '@babel/runtime': 7.25.7 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.25.7)(@types/babel__core@7.20.5)(rollup@2.79.2) + '@rollup/plugin-node-resolve': 15.3.0(rollup@2.79.2) + '@rollup/plugin-replace': 2.4.2(rollup@2.79.2) + '@rollup/plugin-terser': 0.4.4(rollup@2.79.2) '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.12.0 + ajv: 8.17.1 common-tags: 1.8.2 fast-json-stable-stringify: 2.1.0 fs-extra: 9.1.0 glob: 7.2.3 lodash: 4.17.21 pretty-bytes: 5.6.0 - rollup: 2.79.1 - rollup-plugin-terser: 7.0.2(rollup@2.79.1) + rollup: 2.79.2 source-map: 0.8.0-beta.0 stringify-object: 3.3.0 strip-comments: 2.0.1 tempy: 0.6.0 upath: 1.2.0 - workbox-background-sync: 7.0.0 - workbox-broadcast-update: 7.0.0 - workbox-cacheable-response: 7.0.0 - workbox-core: 7.0.0 - workbox-expiration: 7.0.0 - workbox-google-analytics: 7.0.0 - workbox-navigation-preload: 7.0.0 - workbox-precaching: 7.0.0 - workbox-range-requests: 7.0.0 - workbox-recipes: 7.0.0 - workbox-routing: 7.0.0 - workbox-strategies: 7.0.0 - workbox-streams: 7.0.0 - workbox-sw: 7.0.0 - workbox-window: 7.0.0 + workbox-background-sync: 7.1.0 + workbox-broadcast-update: 7.1.0 + workbox-cacheable-response: 7.1.0 + workbox-core: 7.1.0 + workbox-expiration: 7.1.0 + workbox-google-analytics: 7.1.0 + workbox-navigation-preload: 7.1.0 + workbox-precaching: 7.1.0 + workbox-range-requests: 7.1.0 + workbox-recipes: 7.1.0 + workbox-routing: 7.1.0 + workbox-strategies: 7.1.0 + workbox-streams: 7.1.0 + workbox-sw: 7.1.0 + workbox-window: 7.1.0 transitivePeerDependencies: - '@types/babel__core' - supports-color - dev: true - /workbox-cacheable-response@7.0.0: - resolution: {integrity: sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==} + workbox-cacheable-response@7.1.0: dependencies: - workbox-core: 7.0.0 - dev: true + workbox-core: 7.1.0 - /workbox-core@7.0.0: - resolution: {integrity: sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==} + workbox-core@7.1.0: {} - /workbox-expiration@7.0.0: - resolution: {integrity: sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==} + workbox-expiration@7.1.0: dependencies: idb: 7.1.1 - workbox-core: 7.0.0 - dev: true + workbox-core: 7.1.0 - /workbox-google-analytics@7.0.0: - resolution: {integrity: sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==} - deprecated: It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained + workbox-google-analytics@7.1.0: dependencies: - workbox-background-sync: 7.0.0 - workbox-core: 7.0.0 - workbox-routing: 7.0.0 - workbox-strategies: 7.0.0 - dev: true + workbox-background-sync: 7.1.0 + workbox-core: 7.1.0 + workbox-routing: 7.1.0 + workbox-strategies: 7.1.0 - /workbox-navigation-preload@7.0.0: - resolution: {integrity: sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==} + workbox-navigation-preload@7.1.0: dependencies: - workbox-core: 7.0.0 - dev: true + workbox-core: 7.1.0 - /workbox-precaching@7.0.0: - resolution: {integrity: sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==} + workbox-precaching@7.1.0: dependencies: - workbox-core: 7.0.0 - workbox-routing: 7.0.0 - workbox-strategies: 7.0.0 + workbox-core: 7.1.0 + workbox-routing: 7.1.0 + workbox-strategies: 7.1.0 - /workbox-range-requests@7.0.0: - resolution: {integrity: sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==} + workbox-range-requests@7.1.0: dependencies: - workbox-core: 7.0.0 - dev: true + workbox-core: 7.1.0 - /workbox-recipes@7.0.0: - resolution: {integrity: sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==} + workbox-recipes@7.1.0: dependencies: - workbox-cacheable-response: 7.0.0 - workbox-core: 7.0.0 - workbox-expiration: 7.0.0 - workbox-precaching: 7.0.0 - workbox-routing: 7.0.0 - workbox-strategies: 7.0.0 - dev: true + workbox-cacheable-response: 7.1.0 + workbox-core: 7.1.0 + workbox-expiration: 7.1.0 + workbox-precaching: 7.1.0 + workbox-routing: 7.1.0 + workbox-strategies: 7.1.0 - /workbox-routing@7.0.0: - resolution: {integrity: sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==} + workbox-routing@7.1.0: dependencies: - workbox-core: 7.0.0 + workbox-core: 7.1.0 - /workbox-strategies@7.0.0: - resolution: {integrity: sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==} + workbox-strategies@7.1.0: dependencies: - workbox-core: 7.0.0 + workbox-core: 7.1.0 - /workbox-streams@7.0.0: - resolution: {integrity: sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==} + workbox-streams@7.1.0: dependencies: - workbox-core: 7.0.0 - workbox-routing: 7.0.0 - dev: true + workbox-core: 7.1.0 + workbox-routing: 7.1.0 - /workbox-sw@7.0.0: - resolution: {integrity: sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==} - dev: true + workbox-sw@7.1.0: {} - /workbox-window@7.0.0: - resolution: {integrity: sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==} + workbox-window@7.1.0: dependencies: '@types/trusted-types': 2.0.7 - workbox-core: 7.0.0 - dev: true + workbox-core: 7.1.0 - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + wrap-ansi@8.1.0: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 - dev: true - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /write-file-atomic@2.4.3: - resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} - dependencies: - graceful-fs: 4.2.11 - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - dev: true + wrappy@1.0.2: {} - /write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + write-file-atomic@3.0.3: dependencies: imurmurhash: 0.1.4 is-typedarray: 1.0.0 signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 - dev: true - - /ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - - /ws@8.16.0: - resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - /xml-name-validator@3.0.0: - resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - dev: true + ws@7.5.10: {} - /xml-name-validator@5.0.0: - resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} - engines: {node: '>=18'} - dev: true + ws@8.18.0: {} - /xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - dev: true + xml-name-validator@3.0.0: {} - /xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: true + xml-name-validator@5.0.0: {} - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + xmlchars@2.2.0: {} - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true + y18n@5.0.8: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yallist@3.1.1: {} - /yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: true + yaml@1.10.2: {} - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: true + yargs-parser@20.2.9: {} - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + yargs@16.2.0: dependencies: cliui: 7.0.4 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.9 - dev: true - - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true - /yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - dev: true + yocto-queue@0.1.0: {} - /zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + zwitch@2.0.4: {}