diff --git a/clients/tabby-agent/src/chat/inlineEdit.ts b/clients/tabby-agent/src/chat/inlineEdit.ts index 02543641198c..c9e90e2f6444 100644 --- a/clients/tabby-agent/src/chat/inlineEdit.ts +++ b/clients/tabby-agent/src/chat/inlineEdit.ts @@ -22,6 +22,10 @@ import cryptoRandomString from "crypto-random-string"; import { isEmptyRange } from "../utils/range"; import { readResponseStream, Edit, applyWorkspaceEdit } from "./utils"; import { initMutexAbortController, mutexAbortController, resetMutexAbortController } from "./global"; +import { readFile } from "fs-extra"; +import { getLogger } from "../logger"; + +const logger = getLogger("ChatEditProvider"); export class ChatEditProvider implements Feature { private lspConnection: Connection | undefined = undefined; @@ -170,6 +174,20 @@ export class ChatEditProvider implements Feature { } } + // get file context + const fileContext = + ( + await Promise.all( + (params.context ?? []).map(async (item) => { + const content = await readFile(item.path, "utf-8"); + const fileContent = content.toString().substring(0, config.chat.edit.documentMaxChars); + return `filePath: "${item.path}" \n ${fileContent} \n`; + }), + ) + ).join("\n") ?? ""; + + logger.debug(`fileContext: ${fileContext}`); + const messages: { role: "user"; content: string }[] = [ { role: "user", @@ -189,6 +207,8 @@ export class ChatEditProvider implements Feature { return userCommand; case "{{languageId}}": return document.languageId; + case "{{fileContext}}": + return fileContext; default: return ""; } @@ -196,6 +216,7 @@ export class ChatEditProvider implements Feature { ), }, ]; + logger.debug(`messages: ${JSON.stringify(messages)}`); const readableStream = await this.tabbyApiClient.fetchChatStream( { messages, diff --git a/clients/tabby-agent/src/protocol.ts b/clients/tabby-agent/src/protocol.ts index 63006e711d5e..b2c7066dc89a 100644 --- a/clients/tabby-agent/src/protocol.ts +++ b/clients/tabby-agent/src/protocol.ts @@ -439,8 +439,31 @@ export type ChatEditParams = { * use {@link ChatEditResolveRequest} to resolve it later. */ format: "previewChanges"; + + /** + * list of file contexts. + */ + context?: FileContext[]; }; +/** + * Represents a file context. + * This type should only be used for sending context from client to server. + */ +export interface FileContext { + /** + * The filepath of the file. + * The path is relative to the workspace root. + */ + path: string; + + /** + * The range of the selected content in the file. + * If the range is not provided, the whole file is considered. + */ + range?: Range; +} + export type ChatEditToken = string; export type ChatFeatureNotAvailableError = { diff --git a/clients/vscode/.mocha.env.js b/clients/vscode/.mocha.env.js new file mode 100644 index 000000000000..887ad378dcdc --- /dev/null +++ b/clients/vscode/.mocha.env.js @@ -0,0 +1,2 @@ +process.env.NODE_ENV = "test"; +process.env.IS_TEST = 1; diff --git a/clients/vscode/.mocharc.js b/clients/vscode/.mocharc.js new file mode 100644 index 000000000000..bbea71550c98 --- /dev/null +++ b/clients/vscode/.mocharc.js @@ -0,0 +1,4 @@ +module.exports = { + spec: ["src/**/*.test.ts"], + require: ["ts-node/register", "./.mocha.env.js"], +}; diff --git a/clients/vscode/package.json b/clients/vscode/package.json index eeb54608887a..9f137e5f7e1b 100644 --- a/clients/vscode/package.json +++ b/clients/vscode/package.json @@ -454,10 +454,12 @@ "ovsx:publish-prerelease": "ovsx publish --no-dependencies --pre-release --pat $OVSX_PAT", "package": "pnpm run vscode:package", "publish": "pnpm run vscode:publish && pnpm run ovsx:publish", - "publish-prerelease": "pnpm run vscode:publish-prerelease && pnpm run ovsx:publish-prerelease" + "publish-prerelease": "pnpm run vscode:publish-prerelease && pnpm run ovsx:publish-prerelease", + "test": "mocha" }, "devDependencies": { "@types/dedent": "^0.7.2", + "@types/chai": "^4.3.5", "@types/deep-equal": "^1.0.4", "@types/diff": "^5.2.1", "@types/fs-extra": "^11.0.1", @@ -474,6 +476,7 @@ "@vscode/vsce": "^2.15.0", "assert": "^2.0.0", "debounce": "^2.2.0", + "chai": "^4.3.11", "dedent": "^0.7.0", "deep-equal": "^2.2.1", "diff": "^5.2.0", @@ -483,6 +486,7 @@ "eslint-config-prettier": "^9.0.0", "fs-extra": "^11.1.1", "get-installed-path": "^4.0.8", + "mocha": "^10.2.0", "object-hash": "^3.0.0", "ovsx": "^0.9.5", "prettier": "^3.0.0", diff --git a/clients/vscode/src/chat/utils.ts b/clients/vscode/src/chat/utils.ts index 108cb929baa1..13f121a8e022 100644 --- a/clients/vscode/src/chat/utils.ts +++ b/clients/vscode/src/chat/utils.ts @@ -148,11 +148,6 @@ export function localUriToListFileItem(uri: Uri, gitProvider: GitProvider): List }; } -export function escapeGlobPattern(query: string): string { - // escape special glob characters: * ? [ ] { } ( ) ! @ - return query.replace(/[*?[\]{}()!@]/g, "\\$&"); -} - // Notebook cell uri conversion function isJupyterNotebookFilepath(uri: Uri): boolean { diff --git a/clients/vscode/src/chat/webview.ts b/clients/vscode/src/chat/webview.ts index 3cb76cc908bd..aa9fe8b949ab 100644 --- a/clients/vscode/src/chat/webview.ts +++ b/clients/vscode/src/chat/webview.ts @@ -49,9 +49,8 @@ import { chatPanelLocationToVSCodeRange, isValidForSyncActiveEditorSelection, localUriToListFileItem, - escapeGlobPattern, } from "./utils"; -import { findFiles } from "../findFiles"; +import { caseInsensitivePattern, findFiles } from "../findFiles"; import mainHtml from "./html/main.html"; import errorHtml from "./html/error.html"; @@ -519,17 +518,7 @@ export class ChatWebview { } try { - const caseInsensitivePattern = searchQuery - .split("") - .map((char) => { - if (char.toLowerCase() !== char.toUpperCase()) { - return `{${char.toLowerCase()},${char.toUpperCase()}}`; - } - return escapeGlobPattern(char); - }) - .join(""); - - const globPattern = `**/${caseInsensitivePattern}*`; + const globPattern = caseInsensitivePattern(searchQuery); this.logger.info(`Searching files with pattern: ${globPattern}, limit: ${maxResults}`); const files = await findFiles(globPattern, { maxResults }); this.logger.info(`Found ${files.length} files.`); diff --git a/clients/vscode/src/findFiles.ts b/clients/vscode/src/findFiles.ts index b1f5b9c44a5b..76487bd011cf 100644 --- a/clients/vscode/src/findFiles.ts +++ b/clients/vscode/src/findFiles.ts @@ -181,3 +181,22 @@ export async function findFiles( }); } } + +export function escapeGlobPattern(query: string): string { + // escape special glob characters: * ? [ ] { } ( ) ! @ + return query.replace(/[*?[\]{}()!@]/g, "\\$&"); +} + +export function caseInsensitivePattern(query: string) { + const caseInsensitivePattern = query + .split("") + .map((char) => { + if (char.toLowerCase() !== char.toUpperCase()) { + return `{${char.toLowerCase()},${char.toUpperCase()}}`; + } + return escapeGlobPattern(char); + }) + .join(""); + + return `**/${caseInsensitivePattern}*`; +} diff --git a/clients/vscode/src/inline-edit/index.ts b/clients/vscode/src/inline-edit/index.ts index b0d6b80ecca4..b86a2a95e757 100644 --- a/clients/vscode/src/inline-edit/index.ts +++ b/clients/vscode/src/inline-edit/index.ts @@ -10,16 +10,22 @@ import { Position, CancellationToken, Range, + workspace, + Uri, + TabInputText, } from "vscode"; -import { ChatEditCommand } from "tabby-agent"; +import { ChatEditCommand, FileContext } from "tabby-agent"; import { Client } from "../lsp/Client"; import { Config } from "../Config"; import { ContextVariables } from "../ContextVariables"; import { getLogger } from "../logger"; +import { parseInput, InlineChatParseResult, replaceLastOccurrence } from "./util"; +import { caseInsensitivePattern, findFiles } from "../findFiles"; export class InlineEditController { private readonly logger = getLogger("InlineEditController"); private readonly editLocation: Location; + private maxSearchFileResult = 30; constructor( private client: Client, @@ -40,32 +46,63 @@ export class InlineEditController { }; } + private get workspaceFolder() { + return workspace.getWorkspaceFolder(this.editor.document.uri); + } + + async searchFileList(searchQuery: string) { + if (!this.workspaceFolder) { + return []; + } + const globPattern = caseInsensitivePattern(searchQuery); + const fileList = await findFiles(globPattern, { maxResults: this.maxSearchFileResult }); + return fileList.sort((a, b) => a.fsPath.length - b.fsPath.length).map((file) => workspace.asRelativePath(file)); + } + async start(userCommand: string | undefined, cancellationToken: CancellationToken) { - const command = userCommand ?? (await this.showQuickPick()); - if (command) { - this.logger.log(`Start inline edit with user command: ${command}`); - await this.provideEditWithCommand(command, cancellationToken); + const input: InlineChatParseResult | undefined = userCommand + ? { command: userCommand } + : await this.showQuickPick(); + if (input?.command) { + await this.provideEditWithCommand(input, cancellationToken); } } - private async showQuickPick(): Promise { + private getFileContext(mentions?: string[]): FileContext[] | undefined { + if (!mentions) { + return undefined; + } + const worksapceUri = this.workspaceFolder?.uri; + if (!worksapceUri) { + return; + } + return mentions.map((mention) => ({ + path: Uri.joinPath(worksapceUri, mention).fsPath, + })); + } + + private async showQuickPick(): Promise { return new Promise((resolve) => { const quickPick = window.createQuickPick(); - quickPick.placeholder = "Enter the command for editing"; + quickPick.placeholder = "Enter the command for editing (type @ to include file)"; quickPick.matchOnDescription = true; const recentlyCommand = this.config.chatEditRecentlyCommand.slice(0, this.config.maxChatEditHistory); const suggestedCommand: ChatEditCommand[] = []; - const updateQuickPickList = () => { - const input = quickPick.value; - const list: CommandQuickPickItem[] = []; + const getInputParseResult = (): InlineChatParseResult => { + return parseInput(quickPick.value); + }; + + const getCommandList = (input: string) => { + const list: (QuickPickItem & { value: string })[] = []; list.push( ...suggestedCommand.map((item) => ({ label: item.label, value: item.command, iconPath: item.source === "preset" ? new ThemeIcon("run") : new ThemeIcon("spark"), description: item.source === "preset" ? item.command : "Suggested", + alwaysShow: true, })), ); if (list.length > 0) { @@ -76,13 +113,16 @@ export class InlineEditController { alwaysShow: true, }); } - const recentlyCommandToAdd = recentlyCommand.filter((item) => !list.find((i) => i.value === item)); + const recentlyCommandToAdd = recentlyCommand.filter( + (item) => !list.find((i) => i.value === item) && item.includes(input), + ); list.push( ...recentlyCommandToAdd.map((item) => ({ label: item, value: item, iconPath: new ThemeIcon("history"), description: "History", + alwaysShow: true, buttons: [ { iconPath: new ThemeIcon("edit"), @@ -102,6 +142,64 @@ export class InlineEditController { alwaysShow: true, }); } + + return list; + }; + + const getFileListFromMention = async (mention: string) => { + const list: (QuickPickItem & { value: string })[] = []; + if (mention === "") { + if (window.activeTextEditor) { + const path = workspace.asRelativePath(window.activeTextEditor?.document.uri); + list.push({ + label: path, + value: path, + alwaysShow: true, + }); + } + + if (list.length > 0) { + list.push({ + label: "", + value: "", + kind: QuickPickItemKind.Separator, + alwaysShow: true, + }); + } + + getOpenTabs().forEach((path) => { + if (list.find((i) => i.value === path) === undefined) { + list.push({ + label: path, + value: path, + alwaysShow: true, + }); + } + }); + } else { + const fileList = await this.searchFileList(mention); + list.push( + ...fileList.map((file) => ({ + label: file, + value: file, + alwaysShow: true, + })), + ); + } + + return list; + }; + + const updateQuickPickList = async () => { + let list: (QuickPickItem & { value: string })[] = []; + const { mentionQuery, command } = getInputParseResult(); + if (mentionQuery !== undefined) { + quickPick.busy = true; + list = await getFileListFromMention(mentionQuery); + quickPick.busy = false; + } else { + list = getCommandList(command); + } quickPick.items = list; }; @@ -131,8 +229,7 @@ export class InlineEditController { } }); - quickPick.onDidAccept(async () => { - const command = quickPick.selectedItems[0]?.value; + const acceptCommand = async (command: string | undefined, mentions?: string[]) => { if (!command) { resolve(undefined); return; @@ -149,8 +246,26 @@ export class InlineEditController { .slice(0, this.config.maxChatEditHistory); await this.config.updateChatEditRecentlyCommand(updatedRecentlyCommand); - resolve(command); + resolve({ command, mentions }); quickPick.hide(); + }; + + const acceptFile = async (file: string | undefined, query: string) => { + if (!file) { + return; + } + const newValue = replaceLastOccurrence(quickPick.value, query, file); + quickPick.value = newValue + " "; + }; + + quickPick.onDidAccept(async () => { + const commandOrFile = quickPick.selectedItems[0]?.value; + const inputParseResult = getInputParseResult(); + if (inputParseResult.mentionQuery !== undefined) { + acceptFile(commandOrFile, inputParseResult.mentionQuery); + } else { + acceptCommand(commandOrFile, inputParseResult.mentions); + } }); quickPick.onDidHide(() => { fetchingSuggestedCommandCancellationTokenSource.cancel(); @@ -161,7 +276,7 @@ export class InlineEditController { }); } - private async provideEditWithCommand(command: string, cancellationToken: CancellationToken) { + private async provideEditWithCommand(inputResult: InlineChatParseResult, cancellationToken: CancellationToken) { // Lock the cursor (editor selection) at start position, it will be unlocked after the edit is done const startPosition = new Position(this.range.start.line, 0); const resetEditorSelection = () => { @@ -175,12 +290,13 @@ export class InlineEditController { resetEditorSelection(); this.contextVariables.chatEditInProgress = true; - this.logger.log(`Provide edit with command: ${command}`); + this.logger.log(`Provide edit with command: ${JSON.stringify(inputResult)}`); try { await this.client.chat.provideEdit( { location: this.editLocation, - command, + command: inputResult.command, + context: this.getFileContext(inputResult.mentions), format: "previewChanges", }, cancellationToken, @@ -202,3 +318,11 @@ export class InlineEditController { interface CommandQuickPickItem extends QuickPickItem { value: string; } + +export const getOpenTabs = () => { + return window.tabGroups.all + .flatMap((group) => + group.tabs.map((tab) => (tab.input instanceof TabInputText ? workspace.asRelativePath(tab.input.uri) : null)), + ) + .filter((item): item is string => item !== null); +}; diff --git a/clients/vscode/src/inline-edit/util.test.ts b/clients/vscode/src/inline-edit/util.test.ts new file mode 100644 index 000000000000..9f6a8ca6c4e7 --- /dev/null +++ b/clients/vscode/src/inline-edit/util.test.ts @@ -0,0 +1,152 @@ +import { describe } from "mocha"; +import { expect } from "chai"; +import { parseInput, InlineChatParseResult } from "./util"; + +describe("parseInput", () => { + it("should parse input correctly", () => { + const input = `this is a user command`; + + const parseResult: InlineChatParseResult = { + command: "this is a user command", + mentions: [], + mentionQuery: undefined, + }; + expect(parseInput(input)).to.deep.equal(parseResult); + }); + + it("should parse input correctly", () => { + const input = `@file1`; + + const parseResult: InlineChatParseResult = { + command: "", + mentions: ["file1"], + mentionQuery: "file1", + }; + expect(parseInput(input)).to.deep.equal(parseResult); + }); + + it("should parse input correctly", () => { + const input = `@`; + + const parseResult: InlineChatParseResult = { + command: "", + mentions: [], + mentionQuery: "", + }; + expect(parseInput(input)).to.deep.equal(parseResult); + }); + + it("should parse input correctly", () => { + const input = `this is a user command @`; + + const parseResult: InlineChatParseResult = { + command: "this is a user command", + mentions: [], + mentionQuery: "", + }; + expect(parseInput(input)).to.deep.equal(parseResult); + }); + + it("should parse input correctly", () => { + const input = `this is a user command@`; + + const parseResult: InlineChatParseResult = { + command: "this is a user command@", + mentions: [], + mentionQuery: undefined, + }; + expect(parseInput(input)).to.deep.equal(parseResult); + }); + + it("should parse input correctly", () => { + const input = ` @file1`; + + const parseResult: InlineChatParseResult = { + command: "", + mentions: ["file1"], + mentionQuery: "file1", + }; + expect(parseInput(input)).to.deep.equal(parseResult); + }); + + it("should parse input correctly", () => { + const input = `@file1 `; + + const parseResult: InlineChatParseResult = { + command: "", + mentions: ["file1"], + mentionQuery: undefined, + }; + expect(parseInput(input)).to.deep.equal(parseResult); + }); + + it("should parse input correctly", () => { + const input = `@file1 @file2`; + const parseResult: InlineChatParseResult = { + command: "", + mentions: ["file1", "file2"], + mentionQuery: "file2", + }; + expect(parseInput(input)).to.deep.equal(parseResult); + }); + + it("should parse input correctly", () => { + const input = `@file1 @file2 `; + const parseResult: InlineChatParseResult = { + command: "", + mentions: ["file1", "file2"], + mentionQuery: undefined, + }; + expect(parseInput(input)).to.deep.equal(parseResult); + }); + + it("should parse input correctly", () => { + const input = ` @file1 @file2 this is a user command`; + const parseResult: InlineChatParseResult = { + command: "this is a user command", + mentions: ["file1", "file2"], + mentionQuery: undefined, + }; + expect(parseInput(input)).to.deep.equal(parseResult); + }); + + it("should parse input correctly", () => { + const input = ` @file1 @file2 this is a user command@file3`; + const parseResult: InlineChatParseResult = { + command: "this is a user command@file3", + mentions: ["file1", "file2"], + mentionQuery: undefined, + }; + expect(parseInput(input)).to.deep.equal(parseResult); + }); + + it("should parse input correctly", () => { + const input = ` @file1 @file2 this is a user command @file3`; + const parseResult: InlineChatParseResult = { + command: "this is a user command", + mentions: ["file1", "file2", "file3"], + mentionQuery: "file3", + }; + expect(parseInput(input)).to.deep.equal(parseResult); + }); + + it("should parse input correctly", () => { + const input = ` this is a user command @file3 `; + const parseResult: InlineChatParseResult = { + command: "this is a user command", + mentions: ["file3"], + mentionQuery: undefined, + }; + expect(parseInput(input)).to.deep.equal(parseResult); + }); + + it("should parse input correctly", () => { + const input = ` this is a @file3 user command `; + const parseResult: InlineChatParseResult = { + command: "this is a user command", + mentions: ["file3"], + mentionQuery: undefined, + }; + expect(parseInput(input)).to.deep.equal(parseResult); + }); +}); diff --git a/clients/vscode/src/inline-edit/util.ts b/clients/vscode/src/inline-edit/util.ts new file mode 100644 index 000000000000..c515742f8e74 --- /dev/null +++ b/clients/vscode/src/inline-edit/util.ts @@ -0,0 +1,49 @@ +export interface InlineChatParseResult { + command: string; + mentions?: string[]; + mentionQuery?: string; +} + +export const parseInput = (input: string): InlineChatParseResult => { + const mentions: string[] = []; + const regex = /(?<=\s|^)@(\S*)/g; + let match; + const matches = []; + + while ((match = regex.exec(input)) !== null) { + const file = match[1]; + if (file) { + mentions.push(file); + } + matches.push(match); + } + + let mentionQuery = undefined; + if (matches.length > 0) { + const lastMatch = matches[matches.length - 1]; + if (lastMatch) { + const endPos = lastMatch.index + lastMatch[0].length; + if (endPos === input.length) { + mentionQuery = lastMatch[1] || ""; + } + } + } + + const command = input.replace(regex, "").trim(); + + return { + command, + mentions, + mentionQuery: mentionQuery !== undefined ? mentionQuery : undefined, + }; +}; + +export const replaceLastOccurrence = (str: string, substrToReplace: string, replacementStr: string): string => { + const lastIndex = str.lastIndexOf(substrToReplace); + + if (lastIndex === -1) { + return str; + } + + return str.substring(0, lastIndex) + replacementStr + str.substring(lastIndex + substrToReplace.length); +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fa2691c5277f..e56c1cdd4a7b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -187,13 +187,13 @@ importers: version: 3.0.0 ts-node: specifier: ^10.9.1 - version: 10.9.2(@swc/core@1.3.101)(@types/node@18.19.33)(typescript@5.3.3) + version: 10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@18.19.33)(typescript@5.3.3) tsc-watch: specifier: ^6.2.0 version: 6.2.0(typescript@5.3.3) tsup: specifier: ^8.0.2 - version: 8.0.2(@swc/core@1.3.101)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.101)(@types/node@18.19.33)(typescript@5.3.3))(typescript@5.3.3) + version: 8.0.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@18.19.33)(typescript@5.3.3))(typescript@5.3.3) typescript: specifier: ^5.3.2 version: 5.3.3 @@ -310,6 +310,9 @@ importers: '@types/dedent': specifier: ^0.7.2 version: 0.7.2 + '@types/chai': + specifier: ^4.3.5 + version: 4.3.16 '@types/deep-equal': specifier: ^1.0.4 version: 1.0.4 @@ -358,6 +361,9 @@ importers: debounce: specifier: ^2.2.0 version: 2.2.0 + chai: + specifier: ^4.3.11 + version: 4.4.1 dedent: specifier: ^0.7.0 version: 0.7.0 @@ -369,10 +375,10 @@ importers: version: 5.2.0 esbuild-plugin-copy: specifier: ^2.1.1 - version: 2.1.1(esbuild@0.19.12) + version: 2.1.1(esbuild@0.20.2) esbuild-plugin-polyfill-node: specifier: ^0.3.0 - version: 0.3.0(esbuild@0.19.12) + version: 0.3.0(esbuild@0.20.2) eslint: specifier: ^8.55.0 version: 8.57.0 @@ -385,6 +391,9 @@ importers: get-installed-path: specifier: ^4.0.8 version: 4.0.8 + mocha: + specifier: ^10.2.0 + version: 10.4.0 object-hash: specifier: ^3.0.0 version: 3.0.0 @@ -411,7 +420,7 @@ importers: version: 6.2.0(typescript@5.4.5) tsup: specifier: ^8.0.2 - version: 8.0.2(@swc/core@1.3.101)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.101)(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5) + version: 8.0.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5) typescript: specifier: ^5.3.2 version: 5.4.5 @@ -435,7 +444,7 @@ importers: version: 18.2.0 react-email: specifier: 2.1.3 - version: 2.1.3(@swc/helpers@0.5.2)(eslint@9.3.0)(ts-node@10.9.2) + version: 2.1.3(@swc/helpers@0.5.2)(eslint@9.3.0)(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@20.12.12)(typescript@5.4.5)) ee/tabby-ui: dependencies: @@ -784,7 +793,7 @@ importers: version: 2.3.0 '@tailwindcss/typography': specifier: ^0.5.9 - version: 0.5.10(tailwindcss@3.3.3(ts-node@10.9.2(@types/node@17.0.45)(typescript@5.2.2))) + version: 0.5.10(tailwindcss@3.3.3(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@17.0.45)(typescript@5.2.2))) '@types/color': specifier: ^3.0.6 version: 3.0.6 @@ -844,7 +853,7 @@ importers: version: 8.10.0(eslint@8.50.0) eslint-plugin-tailwindcss: specifier: ^3.12.0 - version: 3.13.0(tailwindcss@3.3.3(ts-node@10.9.2(@types/node@17.0.45)(typescript@5.2.2))) + version: 3.13.0(tailwindcss@3.3.3(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@17.0.45)(typescript@5.2.2))) eslint-plugin-unused-imports: specifier: ^3.0.0 version: 3.0.0(@typescript-eslint/eslint-plugin@7.4.0(@typescript-eslint/parser@5.62.0(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0)(typescript@5.2.2))(eslint@8.50.0) @@ -874,10 +883,10 @@ importers: version: 1.14.0 tailwindcss: specifier: ^3.3.1 - version: 3.3.3(ts-node@10.9.2(@types/node@17.0.45)(typescript@5.2.2)) + version: 3.3.3(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@17.0.45)(typescript@5.2.2)) tailwindcss-animate: specifier: ^1.0.5 - version: 1.0.7(tailwindcss@3.3.3(ts-node@10.9.2(@types/node@17.0.45)(typescript@5.2.2))) + version: 1.0.7(tailwindcss@3.3.3(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@17.0.45)(typescript@5.2.2))) typescript: specifier: ^5.1.3 version: 5.2.2 @@ -2373,48 +2382,56 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@next/swc-linux-arm64-gnu@14.1.4': resolution: {integrity: sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@next/swc-linux-arm64-musl@13.5.3': resolution: {integrity: sha512-A/C1shbyUhj7wRtokmn73eBksjTM7fFQoY2v/0rTM5wehpkjQRLOXI8WJsag2uLhnZ4ii5OzR1rFPwoD9cvOgA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@next/swc-linux-arm64-musl@14.1.4': resolution: {integrity: sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@next/swc-linux-x64-gnu@13.5.3': resolution: {integrity: sha512-FubPuw/Boz8tKkk+5eOuDHOpk36F80rbgxlx4+xty/U71e3wZZxVYHfZXmf0IRToBn1Crb8WvLM9OYj/Ur815g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@next/swc-linux-x64-gnu@14.1.4': resolution: {integrity: sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@next/swc-linux-x64-musl@13.5.3': resolution: {integrity: sha512-DPw8nFuM1uEpbX47tM3wiXIR0Qa+atSzs9Q3peY1urkhofx44o7E1svnq+a5Q0r8lAcssLrwiM+OyJJgV/oj7g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@next/swc-linux-x64-musl@14.1.4': resolution: {integrity: sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@next/swc-win32-arm64-msvc@13.5.3': resolution: {integrity: sha512-zBPSP8cHL51Gub/YV8UUePW7AVGukp2D8JU93IHbVDu2qmhFAn9LWXiOOLKplZQKxnIPUkJTQAJDCWBWU4UWUA==} @@ -2506,30 +2523,35 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-glibc@2.3.0': resolution: {integrity: sha512-mQ0gBSQEiq1k/MMkgcSB0Ic47UORZBmWoAWlMrTW6nbAGoLZP+h7AtUM7H3oDu34TBFFvjy4JCGP43JlylkTQA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.3.0': resolution: {integrity: sha512-LXZAExpepJew0Gp8ZkJ+xDZaTQjLHv48h0p0Vw2VMFQ8A+RKrAvpFuPVCVwKJCr5SE+zvaG+Etg56qXvTDIedw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.3.0': resolution: {integrity: sha512-P7Wo91lKSeSgMTtG7CnBS6WrA5otr1K7shhSjKHNePVmfBHDoAOHYRXgUmhiNfbcGk0uMCHVcdbfxtuiZCHVow==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.3.0': resolution: {integrity: sha512-+kiRE1JIq8QdxzwoYY+wzBs9YbJ34guBweTK8nlzLKimn5EQ2b2FSC+tAOpq302BuIMjyuUGvBiUhEcLIGMQ5g==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-win32-arm64@2.3.0': resolution: {integrity: sha512-35gXCnaz1AqIXpG42evcoP2+sNL62gZTMZne3IackM+6QlfMcJLy3DrjuL6Iks7Czpd3j4xRBzez3ADCj1l7Aw==} @@ -3554,91 +3576,109 @@ packages: resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-gnueabihf@4.27.4': resolution: {integrity: sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.17.2': resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm-musleabihf@4.27.4': resolution: {integrity: sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.17.2': resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-gnu@4.27.4': resolution: {integrity: sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.17.2': resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-musl@4.27.4': resolution: {integrity: sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-powerpc64le-gnu@4.27.4': resolution: {integrity: sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.17.2': resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.27.4': resolution: {integrity: sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-s390x-gnu@4.17.2': resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-s390x-gnu@4.27.4': resolution: {integrity: sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.17.2': resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.27.4': resolution: {integrity: sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.17.2': resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-linux-x64-musl@4.27.4': resolution: {integrity: sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.17.2': resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} @@ -3751,24 +3791,28 @@ packages: engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [glibc] '@swc/core-linux-arm64-musl@1.3.101': resolution: {integrity: sha512-OGjYG3H4BMOTnJWJyBIovCez6KiHF30zMIu4+lGJTCrxRI2fAjGLml3PEXj8tC3FMcud7U2WUn6TdG0/te2k6g==} engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [musl] '@swc/core-linux-x64-gnu@1.3.101': resolution: {integrity: sha512-/kBMcoF12PRO/lwa8Z7w4YyiKDcXQEiLvM+S3G9EvkoKYGgkkz4Q6PSNhF5rwg/E3+Hq5/9D2R+6nrkF287ihg==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [glibc] '@swc/core-linux-x64-musl@1.3.101': resolution: {integrity: sha512-kDN8lm4Eew0u1p+h1l3JzoeGgZPQ05qDE0czngnjmfpsH2sOZxVj1hdiCwS5lArpy7ktaLu5JdRnx70MkUzhXw==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [musl] '@swc/core-win32-arm64-msvc@1.3.101': resolution: {integrity: sha512-9Wn8TTLWwJKw63K/S+jjrZb9yoJfJwCE2RV5vPCCWmlMf3U1AXj5XuWOLUX+Rp2sGKau7wZKsvywhheWm+qndQ==} @@ -4968,10 +5012,6 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -5822,9 +5862,6 @@ packages: electron-to-chromium@1.4.777: resolution: {integrity: sha512-n02NCwLJ3wexLfK/yQeqfywCblZqLcXphzmid5e8yVPdtEcida7li0A5WQKghHNG0FeOMCzeFOzEbtAh5riXFw==} - emoji-regex@10.2.1: - resolution: {integrity: sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==} - emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} @@ -5933,10 +5970,6 @@ packages: engines: {node: '>=12'} hasBin: true - escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -6438,10 +6471,6 @@ packages: file-stream-rotator@1.0.0: resolution: {integrity: sha512-qg5mQO7o+vhS7NPqkrkfJS8qqhz0d17Tnewmb5sUTUKwYe27LKaDtbTuRAtQWkBn6jROuFPVIDF5DtckzokFTQ==} - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -14332,13 +14361,13 @@ snapshots: dependencies: '@swc/counter': 0.1.3 - '@tailwindcss/typography@0.5.10(tailwindcss@3.3.3(ts-node@10.9.2(@types/node@17.0.45)(typescript@5.2.2)))': + '@tailwindcss/typography@0.5.10(tailwindcss@3.3.3(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@17.0.45)(typescript@5.2.2)))': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.3.3(ts-node@10.9.2(@types/node@17.0.45)(typescript@5.2.2)) + tailwindcss: 3.3.3(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@17.0.45)(typescript@5.2.2)) '@tiptap/core@2.10.4(@tiptap/pm@2.10.4)': dependencies: @@ -15924,10 +15953,6 @@ snapshots: dependencies: balanced-match: 1.0.2 - braces@3.0.2: - dependencies: - fill-range: 7.0.1 - braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -16819,8 +16844,6 @@ snapshots: electron-to-chromium@1.4.777: {} - emoji-regex@10.2.1: {} - emoji-regex@10.3.0: {} emoji-regex@8.0.0: {} @@ -16987,11 +17010,11 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 - esbuild-plugin-copy@2.1.1(esbuild@0.19.12): + esbuild-plugin-copy@2.1.1(esbuild@0.20.2): dependencies: chalk: 4.1.2 chokidar: 3.6.0 - esbuild: 0.19.12 + esbuild: 0.20.2 fs-extra: 10.1.0 globby: 11.1.0 @@ -17001,6 +17024,12 @@ snapshots: esbuild: 0.19.12 import-meta-resolve: 3.1.1 + esbuild-plugin-polyfill-node@0.3.0(esbuild@0.20.2): + dependencies: + '@jspm/core': 2.0.1 + esbuild: 0.20.2 + import-meta-resolve: 3.1.1 + esbuild@0.19.11: optionalDependencies: '@esbuild/aix-ppc64': 0.19.11 @@ -17079,8 +17108,6 @@ snapshots: '@esbuild/win32-ia32': 0.20.2 '@esbuild/win32-x64': 0.20.2 - escalade@3.1.1: {} - escalade@3.1.2: {} escape-carriage@1.3.1: {} @@ -17164,7 +17191,7 @@ snapshots: debug: 4.3.4(supports-color@9.4.0) enhanced-resolve: 5.15.0 eslint: 8.50.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.50.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0(eslint@8.50.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.50.0))(eslint@8.50.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.50.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0) eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0(eslint@8.50.0)(typescript@5.2.2))(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0) fast-glob: 3.3.1 get-tsconfig: 4.7.2 @@ -17180,7 +17207,7 @@ snapshots: dependencies: eslint: 9.3.0 - eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.50.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0(eslint@8.50.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.50.0))(eslint@8.50.0): + eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.50.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0): dependencies: debug: 3.2.7 optionalDependencies: @@ -17239,7 +17266,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.50.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.50.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0(eslint@8.50.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.50.0))(eslint@8.50.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.50.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0) has: 1.0.3 is-core-module: 2.13.0 is-glob: 4.0.3 @@ -17376,11 +17403,11 @@ snapshots: regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-tailwindcss@3.13.0(tailwindcss@3.3.3(ts-node@10.9.2(@types/node@17.0.45)(typescript@5.2.2))): + eslint-plugin-tailwindcss@3.13.0(tailwindcss@3.3.3(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@17.0.45)(typescript@5.2.2))): dependencies: fast-glob: 3.3.1 postcss: 8.4.31 - tailwindcss: 3.3.3(ts-node@10.9.2(@types/node@17.0.45)(typescript@5.2.2)) + tailwindcss: 3.3.3(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@17.0.45)(typescript@5.2.2)) eslint-plugin-toml@0.11.0(eslint@9.3.0): dependencies: @@ -17814,10 +17841,6 @@ snapshots: file-stream-rotator@1.0.0: {} - fill-range@7.0.1: - dependencies: - to-regex-range: 5.0.1 - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -19625,7 +19648,7 @@ snapshots: micromatch@4.0.5: dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 micromatch@4.0.6: @@ -20462,29 +20485,37 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.38 - postcss-load-config@4.0.1(postcss@8.4.31)(ts-node@10.9.2(@types/node@17.0.45)(typescript@5.2.2)): + postcss-load-config@4.0.1(postcss@8.4.31)(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@17.0.45)(typescript@5.2.2)): dependencies: lilconfig: 2.1.0 yaml: 2.3.4 optionalDependencies: postcss: 8.4.31 - ts-node: 10.9.2(@types/node@17.0.45)(typescript@5.2.2) + ts-node: 10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@17.0.45)(typescript@5.2.2) - postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.101)(@types/node@18.19.33)(typescript@5.4.5)): + postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@18.19.33)(typescript@5.3.3)): dependencies: lilconfig: 3.1.1 yaml: 2.4.2 optionalDependencies: postcss: 8.4.38 - ts-node: 10.9.2(@swc/core@1.3.101)(@types/node@18.19.33)(typescript@5.4.5) + ts-node: 10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@18.19.33)(typescript@5.3.3) - postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2): + postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@18.19.33)(typescript@5.4.5)): dependencies: lilconfig: 3.1.1 yaml: 2.4.2 optionalDependencies: postcss: 8.4.38 - ts-node: 10.9.2(@swc/core@1.3.101)(@types/node@18.19.33)(typescript@5.3.3) + ts-node: 10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@18.19.33)(typescript@5.4.5) + + postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@20.12.12)(typescript@5.4.5)): + dependencies: + lilconfig: 3.1.1 + yaml: 2.4.2 + optionalDependencies: + postcss: 8.4.38 + ts-node: 10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@20.12.12)(typescript@5.4.5) postcss-merge-longhand@7.0.0(postcss@8.4.38): dependencies: @@ -20910,7 +20941,7 @@ snapshots: react: 18.2.0 scheduler: 0.23.0 - react-email@2.1.3(@swc/helpers@0.5.2)(eslint@9.3.0)(ts-node@10.9.2): + react-email@2.1.3(@swc/helpers@0.5.2)(eslint@9.3.0)(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@20.12.12)(typescript@5.4.5)): dependencies: '@babel/parser': 7.24.1 '@radix-ui/colors': 1.0.1 @@ -20951,7 +20982,7 @@ snapshots: source-map-js: 1.0.2 stacktrace-parser: 0.1.10 tailwind-merge: 2.2.0 - tailwindcss: 3.4.0(ts-node@10.9.2) + tailwindcss: 3.4.0(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@20.12.12)(typescript@5.4.5)) typescript: 5.1.6 transitivePeerDependencies: - '@babel/core' @@ -21456,7 +21487,7 @@ snapshots: css-background-parser: 0.1.0 css-box-shadow: 1.0.0-3 css-to-react-native: 3.2.0 - emoji-regex: 10.2.1 + emoji-regex: 10.3.0 escape-html: 1.0.3 linebreak: 1.1.0 parse-css-color: 0.2.1 @@ -22012,11 +22043,11 @@ snapshots: dependencies: '@babel/runtime': 7.24.4 - tailwindcss-animate@1.0.7(tailwindcss@3.3.3(ts-node@10.9.2(@types/node@17.0.45)(typescript@5.2.2))): + tailwindcss-animate@1.0.7(tailwindcss@3.3.3(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@17.0.45)(typescript@5.2.2))): dependencies: - tailwindcss: 3.3.3(ts-node@10.9.2(@types/node@17.0.45)(typescript@5.2.2)) + tailwindcss: 3.3.3(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@17.0.45)(typescript@5.2.2)) - tailwindcss@3.3.3(ts-node@10.9.2(@types/node@17.0.45)(typescript@5.2.2)): + tailwindcss@3.3.3(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@17.0.45)(typescript@5.2.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -22035,7 +22066,7 @@ snapshots: postcss: 8.4.31 postcss-import: 15.1.0(postcss@8.4.31) postcss-js: 4.0.1(postcss@8.4.31) - postcss-load-config: 4.0.1(postcss@8.4.31)(ts-node@10.9.2(@types/node@17.0.45)(typescript@5.2.2)) + postcss-load-config: 4.0.1(postcss@8.4.31)(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@17.0.45)(typescript@5.2.2)) postcss-nested: 6.0.1(postcss@8.4.31) postcss-selector-parser: 6.0.13 resolve: 1.22.8 @@ -22043,7 +22074,7 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@3.4.0(ts-node@10.9.2): + tailwindcss@3.4.0(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@20.12.12)(typescript@5.4.5)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -22062,7 +22093,7 @@ snapshots: postcss: 8.4.38 postcss-import: 15.1.0(postcss@8.4.38) postcss-js: 4.0.1(postcss@8.4.38) - postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2) + postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@20.12.12)(typescript@5.4.5)) postcss-nested: 6.0.1(postcss@8.4.38) postcss-selector-parser: 6.0.16 resolve: 1.22.8 @@ -22112,7 +22143,7 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 - terser-webpack-plugin@5.3.10(@swc/core@1.3.101(@swc/helpers@0.5.2))(esbuild@0.19.11)(webpack@5.91.0): + terser-webpack-plugin@5.3.10(@swc/core@1.3.101(@swc/helpers@0.5.2))(esbuild@0.19.11)(webpack@5.91.0(@swc/core@1.3.101(@swc/helpers@0.5.2))(esbuild@0.19.11)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 @@ -22231,7 +22262,28 @@ snapshots: ts-log@2.2.5: {} - ts-node@10.9.2(@swc/core@1.3.101)(@types/node@18.19.33)(typescript@5.3.3): + ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@17.0.45)(typescript@5.2.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 17.0.45 + acorn: 8.11.3 + acorn-walk: 8.3.2 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.2.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.3.101(@swc/helpers@0.5.2) + optional: true + + ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@18.19.33)(typescript@5.3.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -22251,7 +22303,7 @@ snapshots: optionalDependencies: '@swc/core': 1.3.101(@swc/helpers@0.5.2) - ts-node@10.9.2(@swc/core@1.3.101)(@types/node@18.19.33)(typescript@5.4.5): + ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@18.19.33)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -22272,23 +22324,25 @@ snapshots: '@swc/core': 1.3.101(@swc/helpers@0.5.2) optional: true - ts-node@10.9.2(@types/node@17.0.45)(typescript@5.2.2): + ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@20.12.12)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 17.0.45 + '@types/node': 20.12.12 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.2.2 + typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.3.101(@swc/helpers@0.5.2) optional: true tsc-watch@6.2.0(typescript@5.3.3): @@ -22322,7 +22376,7 @@ snapshots: tsscmp@1.0.6: {} - tsup@8.0.2(@swc/core@1.3.101)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.101)(@types/node@18.19.33)(typescript@5.3.3))(typescript@5.3.3): + tsup@8.0.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@18.19.33)(typescript@5.3.3))(typescript@5.3.3): dependencies: bundle-require: 4.1.0(esbuild@0.19.12) cac: 6.7.14 @@ -22332,7 +22386,7 @@ snapshots: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2) + postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@18.19.33)(typescript@5.3.3)) resolve-from: 5.0.0 rollup: 4.17.2 source-map: 0.8.0-beta.0 @@ -22346,7 +22400,7 @@ snapshots: - supports-color - ts-node - tsup@8.0.2(@swc/core@1.3.101)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.101)(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5): + tsup@8.0.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5): dependencies: bundle-require: 4.1.0(esbuild@0.19.12) cac: 6.7.14 @@ -22356,7 +22410,7 @@ snapshots: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.101)(@types/node@18.19.33)(typescript@5.4.5)) + postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@18.19.33)(typescript@5.4.5)) resolve-from: 5.0.0 rollup: 4.17.2 source-map: 0.8.0-beta.0 @@ -22611,13 +22665,13 @@ snapshots: update-browserslist-db@1.0.13(browserslist@4.22.1): dependencies: browserslist: 4.22.1 - escalade: 3.1.1 + escalade: 3.1.2 picocolors: 1.0.0 update-browserslist-db@1.0.13(browserslist@4.23.0): dependencies: browserslist: 4.23.0 - escalade: 3.1.1 + escalade: 3.1.2 picocolors: 1.0.0 upper-case-first@2.0.2: @@ -22983,7 +23037,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.3.101(@swc/helpers@0.5.2))(esbuild@0.19.11)(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.3.101(@swc/helpers@0.5.2))(esbuild@0.19.11)(webpack@5.91.0(@swc/core@1.3.101(@swc/helpers@0.5.2))(esbuild@0.19.11)) watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -23186,7 +23240,7 @@ snapshots: yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3