From 65d430b7cf19ed1e84c189d0086fe1d542af4ffb Mon Sep 17 00:00:00 2001 From: Elio Struyf Date: Wed, 13 Nov 2024 10:24:24 +0100 Subject: [PATCH 01/31] Add GitHub Copilot prompt functionality #888 --- CHANGELOG.md | 8 ++++++++ src/helpers/CustomScript.ts | 41 +++++++++++++++++++++++++++++-------- src/models/ScriptAction.ts | 7 +++++++ src/models/index.ts | 1 + src/services/Copilot.ts | 28 +++++++++++++++++++++++++ 5 files changed, 76 insertions(+), 9 deletions(-) create mode 100644 src/models/ScriptAction.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 075f4669..575b664a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Change Log +## [10.7.0] - 2024-xx-xx + +### 🎨 Enhancements + +- [#888](https://github.com/estruyf/vscode-front-matter/issues/888): Added the ability to prompt GitHub Copilot from a custom script/action + +### 🐞 Fixes + ## [10.6.0] - 2024-11-06 - [Release notes](https://beta.frontmatter.codes/updates/v10.6.0) ### 🎨 Enhancements diff --git a/src/helpers/CustomScript.ts b/src/helpers/CustomScript.ts index 79d9aa70..98de5abc 100644 --- a/src/helpers/CustomScript.ts +++ b/src/helpers/CustomScript.ts @@ -15,6 +15,8 @@ import { ParsedFrontMatter } from '../parsers'; import { SETTING_CUSTOM_SCRIPTS } from '../constants'; import { evaluateCommand, existsAsync, getPlatform } from '../utils'; import { LocalizationKey, localize } from '../localization'; +import { ScriptAction } from '../models'; +import { Copilot } from '../services/Copilot'; export class CustomScript { /** @@ -267,12 +269,7 @@ export class CustomScript { try { const data: { frontmatter?: { [key: string]: any }; - fmAction?: - | 'open' - | 'copyMediaMetadata' - | 'copyMediaMetadataAndDelete' - | 'deleteMedia' - | 'fieldAction'; + fmAction?: ScriptAction; fmPath?: string; fmSourcePath?: string; fmDestinationPath?: string; @@ -425,14 +422,31 @@ export class CustomScript { const fullScript = `${command} "${scriptPath}" ${args}`; Logger.info(localize(LocalizationKey.helpersCustomScriptExecuting, fullScript)); + const output = await CustomScript.processExecution(fullScript, wsPath); + return output; + } + + // Recursive function to process the execution of the script + private static async processExecution(fullScript: string, wsPath: string): Promise { const output: string = await CustomScript.executeScriptAsync(fullScript, wsPath); try { const data = JSON.parse(output); - if (data.questions) { + const { questions, fmAction, fmPrompt } = data as { + questions?: { + name: string; + message: string; + default?: string; + options?: string[]; + }[]; + fmAction?: ScriptAction; + fmPrompt?: any; // When the 'promptCopilot' action is used + }; + + if (questions) { const answers: string[] = []; - for (const question of data.questions) { + for (const question of questions) { if (question.name && question.message) { let answer; if (question.options) { @@ -460,7 +474,16 @@ export class CustomScript { if (answers.length > 0) { const newScript = `${fullScript} ${answers.join(' ')}`; - return await CustomScript.executeScriptAsync(newScript, wsPath); + return await CustomScript.processExecution(newScript, wsPath); + } + } else if (fmAction) { + if (fmAction === 'promptCopilot' && fmPrompt) { + const response = await Copilot.promptCopilot(fmPrompt); + if (response) { + const promptResponse = `promptResponse="${response}"`; + const newScript = `${fullScript} ${promptResponse}`; + return await CustomScript.processExecution(newScript, wsPath); + } } } } catch (error) { diff --git a/src/models/ScriptAction.ts b/src/models/ScriptAction.ts new file mode 100644 index 00000000..a50f0132 --- /dev/null +++ b/src/models/ScriptAction.ts @@ -0,0 +1,7 @@ +export type ScriptAction = + | 'open' + | 'copyMediaMetadata' + | 'copyMediaMetadataAndDelete' + | 'deleteMedia' + | 'fieldAction' + | 'promptCopilot'; diff --git a/src/models/index.ts b/src/models/index.ts index 81684673..651a3887 100644 --- a/src/models/index.ts +++ b/src/models/index.ts @@ -22,6 +22,7 @@ export * from './Mode'; export * from './PanelSettings'; export * from './PostMessageData'; export * from './Project'; +export * from './ScriptAction'; export * from './ShellSetting'; export * from './Snippets'; export * from './SortOrder'; diff --git a/src/services/Copilot.ts b/src/services/Copilot.ts index 1a07b212..dbfa14f0 100644 --- a/src/services/Copilot.ts +++ b/src/services/Copilot.ts @@ -203,6 +203,34 @@ Example: SEO, website optimization, digital marketing.` } } + /** + * Prompts the Copilot service with a given message and returns the response. + * + * @param {string} prompt - The message to send to the Copilot service. + * @returns {Promise} - The response from the Copilot service, or undefined if no prompt is provided or an error occurs. + * + * @throws {Error} - Logs an error message if an exception occurs during the process. + */ + public static async promptCopilot(prompt: string): Promise { + if (!prompt) { + return; + } + + try { + const messages = [LanguageModelChatMessage.User(prompt)]; + + const chatResponse = await Copilot.getChatResponse(messages); + if (!chatResponse) { + return; + } + + return chatResponse; + } catch (err) { + Logger.error(`Copilot:promptCopilot:: ${(err as Error).message}`); + return ''; + } + } + /** * Retrieves the chat response from the language model. * @param messages - The chat messages to send to the language model. From cb649a9a979155f7b2c97f9acc6541baf45c6089 Mon Sep 17 00:00:00 2001 From: Elio Struyf Date: Thu, 14 Nov 2024 16:30:46 +0100 Subject: [PATCH 02/31] Add timezone formatting support and related settings #887 --- CHANGELOG.md | 1 + package-lock.json | 745 ++++++++++++++------- package.json | 11 +- package.nls.json | 1 + src/commands/Article.ts | 7 +- src/commands/Folders.ts | 5 +- src/constants/settings.ts | 1 + src/helpers/processDateTimePlaceholders.ts | 9 +- src/helpers/processFmPlaceholders.ts | 4 +- src/helpers/processTimePlaceholders.ts | 22 +- src/utils/formatInTimezone.ts | 11 + src/utils/index.ts | 1 + 12 files changed, 551 insertions(+), 267 deletions(-) create mode 100644 src/utils/formatInTimezone.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 575b664a..ddca57df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### 🎨 Enhancements +- [#887](https://github.com/estruyf/vscode-front-matter/issues/887): Added new `frontMatter.global.timezone` setting, by default it is set to `UTC` for date formatting - [#888](https://github.com/estruyf/vscode-front-matter/issues/888): Added the ability to prompt GitHub Copilot from a custom script/action ### 🐞 Fixes diff --git a/package-lock.json b/package-lock.json index 506bfed3..1afddfa8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vscode-front-matter-beta", - "version": "10.5.1", + "version": "10.6.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vscode-front-matter-beta", - "version": "10.5.1", + "version": "10.6.0", "license": "MIT", "devDependencies": { "@actions/core": "^1.10.0", @@ -44,7 +44,8 @@ "cheerio": "1.0.0-rc.12", "clsx": "^2.1.0", "css-loader": "5.2.7", - "date-fns": "2.23.0", + "date-fns": "^4.1.0", + "date-fns-tz": "^3.2.0", "dotenv": "^16.3.1", "downshift": "6.0.6", "eslint": "^8.33.0", @@ -2032,6 +2033,22 @@ "react-popper": "^2.2.5" } }, + "node_modules/@types/react-datepicker/node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/@types/react-dom": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.0.tgz", @@ -2978,7 +2995,8 @@ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "opencollective", "url": "https://opencollective.com/postcss/" }, @@ -3158,7 +3176,8 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", "dev": true, - "funding": [{ + "funding": [ + { "type": "opencollective", "url": "https://opencollective.com/browserslist" }, @@ -3252,7 +3271,8 @@ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001583.tgz", "integrity": "sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q==", "dev": true, - "funding": [{ + "funding": [ + { "type": "opencollective", "url": "https://opencollective.com/browserslist" }, @@ -3375,10 +3395,12 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, - "funding": [{ - "type": "individual", - "url": "https://paulmillr.com/funding/" - }], + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -3421,10 +3443,12 @@ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, - "funding": [{ - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - }], + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "engines": { "node": ">=8" } @@ -3779,16 +3803,22 @@ "dev": true }, "node_modules/date-fns": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.23.0.tgz", - "integrity": "sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", "dev": true, - "engines": { - "node": ">=0.11" - }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/date-fns-tz": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-3.2.0.tgz", + "integrity": "sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==", + "dev": true, + "peerDependencies": { + "date-fns": "^3.0.0 || ^4.0.0" } }, "node_modules/dayjs": { @@ -4063,10 +4093,12 @@ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, - "funding": [{ - "type": "github", - "url": "https://github.com/sponsors/fb55" - }] + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, "node_modules/domhandler": { "version": "5.0.3", @@ -4994,10 +5026,12 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, - "funding": [{ - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - }], + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "engines": { "node": ">=4.0" }, @@ -6172,7 +6206,8 @@ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "github", "url": "https://github.com/sponsors/mdevils" }, @@ -6758,7 +6793,8 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "github", "url": "https://github.com/sponsors/feross" }, @@ -7659,7 +7695,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -7678,7 +7715,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -7693,7 +7731,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -7777,7 +7816,8 @@ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -7811,7 +7851,8 @@ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -7844,7 +7885,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -7864,7 +7906,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -7885,7 +7928,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -7904,7 +7948,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -7925,7 +7970,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -7946,7 +7992,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -7965,7 +8012,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -7983,7 +8031,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8003,7 +8052,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8022,7 +8072,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8040,7 +8091,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8055,7 +8107,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8070,7 +8123,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8088,7 +8142,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8106,7 +8161,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8126,7 +8182,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8147,7 +8204,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8162,7 +8220,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8257,7 +8316,8 @@ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8291,7 +8351,8 @@ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8324,7 +8385,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8344,7 +8406,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8365,7 +8428,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8384,7 +8448,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8405,7 +8470,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8426,7 +8492,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8445,7 +8512,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8463,7 +8531,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8483,7 +8552,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8502,7 +8572,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8520,7 +8591,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8535,7 +8607,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8550,7 +8623,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8568,7 +8642,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8586,7 +8661,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8606,7 +8682,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8627,7 +8704,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8642,7 +8720,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8739,7 +8818,8 @@ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8773,7 +8853,8 @@ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8806,7 +8887,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8826,7 +8908,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8847,7 +8930,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8866,7 +8950,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8887,7 +8972,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8908,7 +8994,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8927,7 +9014,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8945,7 +9033,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8965,7 +9054,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -8984,7 +9074,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9002,7 +9093,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9017,7 +9109,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9032,7 +9125,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9050,7 +9144,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9068,7 +9163,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9088,7 +9184,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9109,7 +9206,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9124,7 +9222,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9220,7 +9319,8 @@ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9254,7 +9354,8 @@ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9287,7 +9388,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9307,7 +9409,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9328,7 +9431,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9347,7 +9451,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9368,7 +9473,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9389,7 +9495,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9408,7 +9515,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9426,7 +9534,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9446,7 +9555,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9465,7 +9575,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9483,7 +9594,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9498,7 +9610,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9513,7 +9626,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9531,7 +9645,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9549,7 +9664,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9569,7 +9685,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9590,7 +9707,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9605,7 +9723,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9685,7 +9804,8 @@ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9719,7 +9839,8 @@ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9752,7 +9873,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9772,7 +9894,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9793,7 +9916,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9812,7 +9936,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9833,7 +9958,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9854,7 +9980,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9873,7 +10000,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9891,7 +10019,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9911,7 +10040,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9930,7 +10060,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9948,7 +10079,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9963,7 +10095,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9978,7 +10111,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -9996,7 +10130,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10014,7 +10149,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10034,7 +10170,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10055,7 +10192,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10070,7 +10208,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10185,7 +10324,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10204,7 +10344,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10219,7 +10360,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10239,7 +10381,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10254,7 +10397,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10515,7 +10659,8 @@ "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10549,7 +10694,8 @@ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10618,7 +10764,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10637,7 +10784,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10652,7 +10800,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10672,7 +10821,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10687,7 +10837,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10722,7 +10873,8 @@ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10755,7 +10907,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10775,7 +10928,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10796,7 +10950,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10815,7 +10970,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10836,7 +10992,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10857,7 +11014,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10876,7 +11034,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10894,7 +11053,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10914,7 +11074,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10929,7 +11090,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10944,7 +11106,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10962,7 +11125,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -10980,7 +11144,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11000,7 +11165,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11021,7 +11187,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11036,7 +11203,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11069,7 +11237,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11088,7 +11257,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11106,7 +11276,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11126,7 +11297,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11144,7 +11316,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11159,7 +11332,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11191,7 +11365,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11210,7 +11385,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11229,7 +11405,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11244,7 +11421,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11272,7 +11450,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11304,7 +11483,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11323,7 +11503,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11342,7 +11523,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11357,7 +11539,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11372,7 +11555,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11390,7 +11574,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11409,7 +11594,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11424,7 +11610,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11439,7 +11626,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11459,7 +11647,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11480,7 +11669,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11499,7 +11689,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11520,7 +11711,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11541,7 +11733,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11560,7 +11753,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11578,7 +11772,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11598,7 +11793,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11617,7 +11813,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11635,7 +11832,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11656,7 +11854,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11675,7 +11874,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11693,7 +11893,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11708,7 +11909,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11723,7 +11925,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11738,7 +11941,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11753,7 +11957,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11771,7 +11976,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11789,7 +11995,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11809,7 +12016,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11830,7 +12038,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -11845,7 +12054,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -12027,10 +12237,12 @@ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, - "funding": [{ - "type": "github", - "url": "https://github.com/sponsors/ai" - }], + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -12909,7 +13121,8 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, - "funding": [{ + "funding": [ + { "type": "opencollective", "url": "https://opencollective.com/postcss/" }, @@ -12972,7 +13185,8 @@ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "opencollective", "url": "https://opencollective.com/postcss/" }, @@ -13329,7 +13543,8 @@ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, - "funding": [{ + "funding": [ + { "type": "github", "url": "https://github.com/sponsors/feross" }, @@ -13737,6 +13952,23 @@ "react-dom": ">=16.9.0" } }, + "node_modules/rc-picker/node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/rc-progress": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-3.4.2.tgz", @@ -14111,6 +14343,22 @@ "react-dom": "^16.9.0 || ^17" } }, + "node_modules/react-datepicker/node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/react-dom": { "version": "17.0.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", @@ -14869,7 +15117,8 @@ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -14903,7 +15152,8 @@ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -14936,7 +15186,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -14956,7 +15207,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -14977,7 +15229,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -14996,7 +15249,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -15017,7 +15271,8 @@ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -15038,7 +15293,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -15057,7 +15313,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -15075,7 +15332,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -15095,7 +15353,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -15114,7 +15373,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -15132,7 +15392,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -15147,7 +15408,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -15162,7 +15424,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -15180,7 +15443,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -15198,7 +15462,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -15218,7 +15483,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -15239,7 +15505,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -15254,7 +15521,8 @@ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "funding": [{ + "funding": [ + { "type": "GitHub Sponsors", "url": "https://github.com/sponsors/unifiedjs" }, @@ -15653,7 +15921,8 @@ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "funding": [{ + "funding": [ + { "type": "github", "url": "https://github.com/sponsors/feross" }, @@ -15711,7 +15980,8 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, - "funding": [{ + "funding": [ + { "type": "github", "url": "https://github.com/sponsors/feross" }, @@ -17361,7 +17631,8 @@ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, - "funding": [{ + "funding": [ + { "type": "opencollective", "url": "https://opencollective.com/browserslist" }, @@ -18354,4 +18625,4 @@ } } } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 48cb83aa..d0510841 100644 --- a/package.json +++ b/package.json @@ -1056,7 +1056,7 @@ "error" ], "markdownDescription": "%setting.frontMatter.global.notifications.markdownDescription%", - "scope": "Templates" + "scope": "Global" }, "frontMatter.global.disabledNotifications": { "type": "array", @@ -1066,6 +1066,12 @@ "requiredFieldValidation" ] }, + "frontMatter.global.timezone": { + "default": "UTC", + "type": "string", + "markdownDescription": "%setting.frontMatter.global.timezone.markdownDescription%", + "scope": "Global" + }, "frontMatter.media.defaultSorting": { "type": "string", "default": "", @@ -2855,7 +2861,8 @@ "cheerio": "1.0.0-rc.12", "clsx": "^2.1.0", "css-loader": "5.2.7", - "date-fns": "2.23.0", + "date-fns": "^4.1.0", + "date-fns-tz": "^3.2.0", "dotenv": "^16.3.1", "downshift": "6.0.6", "eslint": "^8.33.0", diff --git a/package.nls.json b/package.nls.json index 31d2751b..e69768d3 100644 --- a/package.nls.json +++ b/package.nls.json @@ -166,6 +166,7 @@ "setting.frontMatter.global.modes.items.properties.features.description": "The features you want to use for your mode.", "setting.frontMatter.global.notifications.markdownDescription": "Specifies the notifications you want to see. By default, all notifications types will be shown. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.global.notifications) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.global.notifications%22%5D)", "setting.frontMatter.global.disabledNotifications.markdownDescription": "This is an array with the notifications types that can be disabled for Front Matter CMS. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.global.disablednotifications) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.global.disablednotifications%22%5D)", + "setting.frontMatter.global.timezone.markdownDescription": "Specify the timezone for your date formatting. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.datetimezone) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.taxonomy.datetimezone%22%5D)", "setting.frontMatter.media.defaultSorting.markdownDescription": "Specify the default sorting option for the media dashboard. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.media.defaultsorting) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.media.defaultsorting%22%5D)", "setting.frontMatter.media.supportedMimeTypes.markdownDescription": "Specify the mime types to support for the media files. [Docs](https://frontmatter.codes/docs/settings/overview#frontmatter.media.supportedmimetypes) - [View in VS Code](command:simpleBrowser.show?%5B%22https://frontmatter.codes/docs/settings/overview%23frontmatter.media.supportedmimetypes%22%5D)", diff --git a/src/commands/Article.ts b/src/commands/Article.ts index 044ef7da..75d70a4a 100644 --- a/src/commands/Article.ts +++ b/src/commands/Article.ts @@ -23,7 +23,6 @@ import { SETTING_SLUG_TEMPLATE } from './../constants'; import { CustomPlaceholder, Field } from '../models'; -import { format } from 'date-fns'; import { ArticleHelper, Logger, @@ -44,7 +43,7 @@ import { NavigationType } from '../dashboardWebView/models'; import { SNIPPET } from '../constants/Snippet'; import * as l10n from '@vscode/l10n'; import { LocalizationKey } from '../localization'; -import { getTitleField } from '../utils'; +import { formatInTimezone, getTitleField } from '../utils'; export class Article { /** @@ -407,10 +406,10 @@ export class Article { if (fieldDateFormat) { Logger.verbose(`Article:formatDate:FieldDateFormat - ${fieldDateFormat}`); - return format(dateValue, DateHelper.formatUpdate(fieldDateFormat) as string); + return formatInTimezone(dateValue, DateHelper.formatUpdate(fieldDateFormat) as string); } else if (dateFormat && typeof dateFormat === 'string') { Logger.verbose(`Article:formatDate:DateFormat - ${dateFormat}`); - return format(dateValue, DateHelper.formatUpdate(dateFormat) as string); + return formatInTimezone(dateValue, DateHelper.formatUpdate(dateFormat) as string); } else { Logger.verbose(`Article:formatDate:toISOString - ${dateValue}`); return typeof dateValue.toISOString === 'function' diff --git a/src/commands/Folders.ts b/src/commands/Folders.ts index ffe4d319..f9d0e381 100644 --- a/src/commands/Folders.ts +++ b/src/commands/Folders.ts @@ -23,7 +23,6 @@ import { Template } from './Template'; import { Notifications } from '../helpers/Notifications'; import { Extension, Logger, Settings, processTimePlaceholders } from '../helpers'; import { existsSync } from 'fs'; -import { format } from 'date-fns'; import { Dashboard } from './Dashboard'; import { parseWinPath } from '../helpers/parseWinPath'; import { MediaHelpers } from '../helpers/MediaHelpers'; @@ -31,7 +30,7 @@ import { MediaListener, PagesListener, SettingsListener } from '../listeners/das import { DEFAULT_FILE_TYPES } from '../constants/DefaultFileTypes'; import { glob } from 'glob'; import { mkdirAsync } from '../utils/mkdirAsync'; -import { existsAsync, isWindows, lstatAsync } from '../utils'; +import { existsAsync, formatInTimezone, isWindows, lstatAsync } from '../utils'; import * as l10n from '@vscode/l10n'; import { LocalizationKey } from '../localization'; import { Preview } from './Preview'; @@ -85,7 +84,7 @@ export class Folders { prompt: l10n.t(LocalizationKey.commandsFoldersAddMediaFolderInputBoxPrompt), value: startPath, ignoreFocusOut: true, - placeHolder: `${format(new Date(), `yyyy/MM`)}` + placeHolder: `${formatInTimezone(new Date(), `yyyy/MM`)}` }); if (!folderName) { diff --git a/src/constants/settings.ts b/src/constants/settings.ts index 483da63d..852c12b2 100644 --- a/src/constants/settings.ts +++ b/src/constants/settings.ts @@ -13,6 +13,7 @@ export const SETTING_GLOBAL_NOTIFICATIONS = 'global.notifications'; export const SETTING_GLOBAL_NOTIFICATIONS_DISABLED = 'global.disabledNotifications'; export const SETTING_GLOBAL_MODES = 'global.modes'; export const SETTING_GLOBAL_ACTIVE_MODE = 'global.activeMode'; +export const SETTING_GLOBAL_TIMEZONE = 'global.timezone'; export const SETTING_TAXONOMY_TAGS = 'taxonomy.tags'; export const SETTING_TAXONOMY_CATEGORIES = 'taxonomy.categories'; diff --git a/src/helpers/processDateTimePlaceholders.ts b/src/helpers/processDateTimePlaceholders.ts index 9ef10172..b6bf5004 100644 --- a/src/helpers/processDateTimePlaceholders.ts +++ b/src/helpers/processDateTimePlaceholders.ts @@ -1,5 +1,4 @@ -import { format } from 'date-fns'; -import { DateHelper } from './DateHelper'; +import { formatInTimezone } from '../utils'; /** * Replace the datetime placeholders @@ -21,10 +20,8 @@ export const processDateTimePlaceholders = (value: string, articleDate?: Date) = if (dateFormat) { if (dateFormat && typeof dateFormat === 'string') { - value = value.replace( - match, - format(articleDate || new Date(), DateHelper.formatUpdate(dateFormat) as string) - ); + const formattedDate = formatInTimezone(articleDate || new Date(), dateFormat); + value = value.replace(match, formattedDate); } else { value = value.replace(match, (articleDate || new Date()).toISOString()); } diff --git a/src/helpers/processFmPlaceholders.ts b/src/helpers/processFmPlaceholders.ts index 398c7120..0d0201e6 100644 --- a/src/helpers/processFmPlaceholders.ts +++ b/src/helpers/processFmPlaceholders.ts @@ -1,4 +1,4 @@ -import { format } from 'date-fns'; +import { formatInTimezone } from '../utils'; export const processFmPlaceholders = (value: string, fmData: { [key: string]: any }) => { // Example: {{fm.date}} or {{fm.date | dateFormat 'DD.MM.YYYY'}} @@ -27,7 +27,7 @@ export const processFmPlaceholders = (value: string, fmData: { [key: string]: an // Parse the date value and format it if (fieldValue) { - const formattedDate = format(new Date(fieldValue), dateFormat); + const formattedDate = formatInTimezone(new Date(fieldValue), dateFormat); value = value.replace(match, formattedDate); } } else if (fieldValue) { diff --git a/src/helpers/processTimePlaceholders.ts b/src/helpers/processTimePlaceholders.ts index 1bcb8898..795e6504 100644 --- a/src/helpers/processTimePlaceholders.ts +++ b/src/helpers/processTimePlaceholders.ts @@ -1,5 +1,4 @@ -import { format } from 'date-fns'; -import { DateHelper } from './DateHelper'; +import { formatInTimezone } from '../utils'; /** * Replace the time placeholders @@ -13,10 +12,7 @@ export const processTimePlaceholders = (value: string, dateFormat?: string, arti const regex = new RegExp('{{now}}', 'g'); if (dateFormat && typeof dateFormat === 'string') { - value = value.replace( - regex, - format(articleDate || new Date(), DateHelper.formatUpdate(dateFormat) as string) - ); + value = value.replace(regex, formatInTimezone(articleDate || new Date(), dateFormat)); } else { value = value.replace(regex, (articleDate || new Date()).toISOString()); } @@ -24,37 +20,37 @@ export const processTimePlaceholders = (value: string, dateFormat?: string, arti if (value.includes('{{year}}')) { const regex = new RegExp('{{year}}', 'g'); - value = value.replace(regex, format(articleDate || new Date(), 'yyyy')); + value = value.replace(regex, formatInTimezone(articleDate || new Date(), 'yyyy')); } if (value.includes('{{month}}')) { const regex = new RegExp('{{month}}', 'g'); - value = value.replace(regex, format(articleDate || new Date(), 'MM')); + value = value.replace(regex, formatInTimezone(articleDate || new Date(), 'MM')); } if (value.includes('{{day}}')) { const regex = new RegExp('{{day}}', 'g'); - value = value.replace(regex, format(articleDate || new Date(), 'dd')); + value = value.replace(regex, formatInTimezone(articleDate || new Date(), 'dd')); } if (value.includes('{{hour12}}')) { const regex = new RegExp('{{hour12}}', 'g'); - value = value.replace(regex, format(articleDate || new Date(), 'hh')); + value = value.replace(regex, formatInTimezone(articleDate || new Date(), 'hh')); } if (value.includes('{{hour24}}')) { const regex = new RegExp('{{hour24}}', 'g'); - value = value.replace(regex, format(articleDate || new Date(), 'HH')); + value = value.replace(regex, formatInTimezone(articleDate || new Date(), 'HH')); } if (value.includes('{{ampm}}')) { const regex = new RegExp('{{ampm}}', 'g'); - value = value.replace(regex, format(articleDate || new Date(), 'aaa')); + value = value.replace(regex, formatInTimezone(articleDate || new Date(), 'aaa')); } if (value.includes('{{minute}}')) { const regex = new RegExp('{{minute}}', 'g'); - value = value.replace(regex, format(articleDate || new Date(), 'mm')); + value = value.replace(regex, formatInTimezone(articleDate || new Date(), 'mm')); } } diff --git a/src/utils/formatInTimezone.ts b/src/utils/formatInTimezone.ts new file mode 100644 index 00000000..df17c063 --- /dev/null +++ b/src/utils/formatInTimezone.ts @@ -0,0 +1,11 @@ +import { format } from 'date-fns'; +import { formatInTimeZone } from 'date-fns-tz'; +import { SETTING_GLOBAL_TIMEZONE } from '../constants'; +import { DateHelper, Settings } from '../helpers'; + +export const formatInTimezone = (date: Date, dateFormat: string) => { + const timezone = Settings.get(SETTING_GLOBAL_TIMEZONE); + return timezone + ? formatInTimeZone(date, timezone, DateHelper.formatUpdate(dateFormat) as string) + : format(date, DateHelper.formatUpdate(dateFormat) as string); +}; diff --git a/src/utils/index.ts b/src/utils/index.ts index 49951555..b6d73cfc 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -6,6 +6,7 @@ export * from './existsAsync'; export * from './fetchWithTimeout'; export * from './fieldWhenClause'; export * from './flattenObjectKeys'; +export * from './formatInTimezone'; export * from './getDescriptionField'; export * from './getExtensibilityScripts'; export * from './getLocalizationFile'; From 22ce41c3eb26aba5b7a13d3cabd73e87fc5a75e9 Mon Sep 17 00:00:00 2001 From: Elio Struyf Date: Thu, 21 Nov 2024 16:14:25 +0100 Subject: [PATCH 03/31] #705 - UX improvements for SEO panel --- CHANGELOG.md | 1 + assets/media/styles.css | 5 - l10n/bundle.l10n.de.json | 8 +- l10n/bundle.l10n.fr.json | 8 +- l10n/bundle.l10n.it.json | 8 +- l10n/bundle.l10n.ja.json | 8 +- l10n/bundle.l10n.json | 12 +- package-lock.json | 15 + package.json | 334 ++++++++++-------- src/localization/localization.enum.ts | 24 +- .../components/ArticleDetails.tsx | 83 ++--- src/panelWebView/components/SeoFieldInfo.tsx | 9 +- .../components/SeoKeywordInfo.tsx | 74 ++-- src/panelWebView/components/SeoKeywords.tsx | 112 +++++- src/panelWebView/components/SeoStatus.tsx | 27 +- src/panelWebView/components/ValidInfo.tsx | 10 +- 16 files changed, 405 insertions(+), 333 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ddca57df..7a18b36a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### 🎨 Enhancements +- [#705](https://github.com/estruyf/vscode-front-matter/issues/705): UX improvements for the panel view - [#887](https://github.com/estruyf/vscode-front-matter/issues/887): Added new `frontMatter.global.timezone` setting, by default it is set to `UTC` for date formatting - [#888](https://github.com/estruyf/vscode-front-matter/issues/888): Added the ability to prompt GitHub Copilot from a custom script/action diff --git a/assets/media/styles.css b/assets/media/styles.css index ae759269..8cb1254f 100644 --- a/assets/media/styles.css +++ b/assets/media/styles.css @@ -99,11 +99,6 @@ margin-right: 0.5rem; } -.seo__status__details, -.seo__status__keywords { - margin-bottom: 1rem; -} - .collapsible__body h4 { text-align: center; font-weight: bold; diff --git a/l10n/bundle.l10n.de.json b/l10n/bundle.l10n.de.json index cc624e59..7b42c77e 100644 --- a/l10n/bundle.l10n.de.json +++ b/l10n/bundle.l10n.de.json @@ -258,9 +258,6 @@ "panel.fields.textField.limit": "Feldgrenze erreicht {0}", "panel.fields.wrapperField.unknown": "Unbekannter Feldtyp: {0}", "panel.actions.title": "Aktionen", - "panel.articleDetails.title": "Weitere Details", - "panel.articleDetails.type": "Typ", - "panel.articleDetails.total": "Gesamt", "panel.articleDetails.headings": "Überschriften", "panel.articleDetails.paragraphs": "Absätze", "panel.articleDetails.internalLinks": "Interne Links", @@ -299,16 +296,13 @@ "panel.publishAction.publish": "Veröffentlichen", "panel.publishAction.unpublish": "Zurück zu Entwurf", "panel.seoDetails.recommended": "Empfohlen", - "panel.seoKeywordInfo.density": "Stichwortdichte {0} *", "panel.seoKeywordInfo.validInfo.label": "Verwendet in Überschrift(en)", "panel.seoKeywordInfo.validInfo.content": "Inhalt", "panel.seoKeywords.title": "Stichwörter", "panel.seoKeywords.header.keyword": "Stichwort", "panel.seoKeywords.header.details": "Details", - "panel.seoKeywords.density": "* Eine Stichwortdichte von 1-1,5 % ist in den meisten Fällen ausreichend.", - "panel.seoStatus.title": "Empfehlungen", + "panel.seoKeywords.density.description": "* Eine Stichwortdichte von 1-1,5 % ist in den meisten Fällen ausreichend.", "panel.seoStatus.header.property": "Eigenschaft", - "panel.seoStatus.header.length": "Länge", "panel.seoStatus.header.valid": "Gültig", "panel.seoStatus.seoFieldInfo.characters": "{0} Zeichen", "panel.seoStatus.seoFieldInfo.words": "{0} Wörter", diff --git a/l10n/bundle.l10n.fr.json b/l10n/bundle.l10n.fr.json index e7da0220..46e9acf7 100644 --- a/l10n/bundle.l10n.fr.json +++ b/l10n/bundle.l10n.fr.json @@ -263,9 +263,6 @@ "panel.fields.textField.limit": "Limite de champ atteinte {0}", "panel.fields.wrapperField.unknown": "Type de champ inconnu : {0}", "panel.actions.title": "Actions", - "panel.articleDetails.title": "Plus de détails", - "panel.articleDetails.type": "Type", - "panel.articleDetails.total": "Total", "panel.articleDetails.headings": "En-têtes", "panel.articleDetails.paragraphs": "Paragraphes", "panel.articleDetails.internalLinks": "Liens internes", @@ -304,16 +301,13 @@ "panel.publishAction.publish": "Publié", "panel.publishAction.unpublish": "Retourner au brouillon", "panel.seoDetails.recommended": "Recommandé", - "panel.seoKeywordInfo.density": "Utilisation du mot clé {0} *", "panel.seoKeywordInfo.validInfo.label": "Utilisé dans le ou les en-tête(s)", "panel.seoKeywordInfo.validInfo.content": "Contenu", "panel.seoKeywords.title": "Mot-clés", "panel.seoKeywords.header.keyword": "Mot-clé", "panel.seoKeywords.header.details": "Détails", - "panel.seoKeywords.density": "* Une densité de mot-clé de 1-1.5% est suffisante dans la plupart des cas", - "panel.seoStatus.title": "Recommandations", + "panel.seoKeywords.density.description": "* Une densité de mot-clé de 1-1.5% est suffisante dans la plupart des cas", "panel.seoStatus.header.property": "Propriété", - "panel.seoStatus.header.length": "Longueur", "panel.seoStatus.header.valid": "Valide", "panel.seoStatus.seoFieldInfo.characters": "{0} caractères", "panel.seoStatus.seoFieldInfo.words": "{0} mots", diff --git a/l10n/bundle.l10n.it.json b/l10n/bundle.l10n.it.json index 3a6946db..f8fe310d 100644 --- a/l10n/bundle.l10n.it.json +++ b/l10n/bundle.l10n.it.json @@ -263,9 +263,6 @@ "panel.fields.textField.limit": "Limite di campi raggiunto {0}", "panel.fields.wrapperField.unknown": "Tipo di campo sconosciuto: {0}", "panel.actions.title": "Azioni", - "panel.articleDetails.title": "Più dettagli", - "panel.articleDetails.type": "Digitare", - "panel.articleDetails.total": "Totale", "panel.articleDetails.headings": "Intestazioni", "panel.articleDetails.paragraphs": "Paragrafi", "panel.articleDetails.internalLinks": "Collegamenti esterni", @@ -304,16 +301,13 @@ "panel.publishAction.publish": "Pubblica", "panel.publishAction.unpublish": "Tornare alla bozza", "panel.seoDetails.recommended": "Raccomandato", - "panel.seoKeywordInfo.density": "Utilizzo delle parole chiave {0} *", "panel.seoKeywordInfo.validInfo.label": "Utilizzato nelle rubriche", "panel.seoKeywordInfo.validInfo.content": "Contenuto", "panel.seoKeywords.title": "Parole chiavi", "panel.seoKeywords.header.keyword": "Parola chiave", "panel.seoKeywords.header.details": "Dettagli", - "panel.seoKeywords.density": "* Una densità di parole chiave dell'1-1,5% è sufficiente nella maggior parte dei casi.", - "panel.seoStatus.title": "Consigli", + "panel.seoKeywords.density.description": "* Una densità di parole chiave dell'1-1,5% è sufficiente nella maggior parte dei casi.", "panel.seoStatus.header.property": "Proprietà", - "panel.seoStatus.header.length": "Lunghezza", "panel.seoStatus.header.valid": "Valido", "panel.seoStatus.seoFieldInfo.characters": "{0} caratteri", "panel.seoStatus.seoFieldInfo.words": "{0} parole", diff --git a/l10n/bundle.l10n.ja.json b/l10n/bundle.l10n.ja.json index 4e877803..a931e9fe 100644 --- a/l10n/bundle.l10n.ja.json +++ b/l10n/bundle.l10n.ja.json @@ -438,9 +438,6 @@ "panel.actions.title": "コマンド", - "panel.articleDetails.title": "詳細", - "panel.articleDetails.type": "項目", - "panel.articleDetails.total": "数", "panel.articleDetails.headings": "見出し", "panel.articleDetails.paragraphs": "パラグラフ", "panel.articleDetails.internalLinks": "内部リンク", @@ -489,18 +486,15 @@ "panel.seoDetails.recommended": "推奨", - "panel.seoKeywordInfo.density": "キーワード出現率 {0} *", "panel.seoKeywordInfo.validInfo.label": "見出しへの利用", "panel.seoKeywordInfo.validInfo.content": "本文", "panel.seoKeywords.title": "キーワード", "panel.seoKeywords.header.keyword": "キーワード", "panel.seoKeywords.header.details": "詳細", - "panel.seoKeywords.density": "* キーワード出現率は通常1~1.5%で十分です。", + "panel.seoKeywords.density.description": "* キーワード出現率は通常1~1.5%で十分です。", - "panel.seoStatus.title": "推奨項目", "panel.seoStatus.header.property": "項目", - "panel.seoStatus.header.length": "長さ", "panel.seoStatus.header.valid": "有効", "panel.seoStatus.seoFieldInfo.characters": "{0} 文字", "panel.seoStatus.seoFieldInfo.words": "{0} 語", diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index f89e96ff..d27383e5 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -448,9 +448,6 @@ "panel.actions.title": "Actions", - "panel.articleDetails.title": "More details", - "panel.articleDetails.type": "Type", - "panel.articleDetails.total": "Total", "panel.articleDetails.headings": "Headings", "panel.articleDetails.paragraphs": "Paragraphs", "panel.articleDetails.internalLinks": "Internal links", @@ -499,18 +496,17 @@ "panel.seoDetails.recommended": "Recommended", - "panel.seoKeywordInfo.density": "Keyword usage {0} *", + "panel.seoKeywords.density": "Keyword density", "panel.seoKeywordInfo.validInfo.label": "Used in heading(s)", "panel.seoKeywordInfo.validInfo.content": "Content", "panel.seoKeywords.title": "Keywords", "panel.seoKeywords.header.keyword": "Keyword", "panel.seoKeywords.header.details": "Details", - "panel.seoKeywords.density": "* A keyword density of 1-1.5% is sufficient in most cases.", + "panel.seoKeywords.density.description": "* A keyword density of 1-1.5% is sufficient in most cases.", - "panel.seoStatus.title": "Recommendations", + "panel.seoStatus.title": "Insights", "panel.seoStatus.header.property": "Property", - "panel.seoStatus.header.length": "Length", "panel.seoStatus.header.valid": "Valid", "panel.seoStatus.seoFieldInfo.characters": "{0} chars", "panel.seoStatus.seoFieldInfo.words": "{0} words", @@ -589,7 +585,7 @@ "commands.i18n.createOrOpen.quickPick.category.new": "New translations", "commands.i18n.createOrOpen.quickPick.action.create": "Create \"{0}\"", "commands.i18n.translate.progress.title": "Translating content...", - + "commands.preview.panel.title": "Preview: {0}", "commands.preview.askUserToPickFolder.title": "Select the folder of the article to preview", diff --git a/package-lock.json b/package-lock.json index 1afddfa8..66dde5ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -83,6 +83,7 @@ "react-quill": "^2.0.0", "react-router-dom": "^6.8.0", "react-sortable-hoc": "^2.0.0", + "react-tooltip": "^5.28.0", "recoil": "^0.7.7", "rehype-parse": "^9.0.1", "rehype-remark": "^10.0.0", @@ -14702,6 +14703,20 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, + "node_modules/react-tooltip": { + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-5.28.0.tgz", + "integrity": "sha512-R5cO3JPPXk6FRbBHMO0rI9nkUG/JKfalBSQfZedZYzmqaZQgq7GLzF8vcCWx6IhUCKg0yPqJhXIzmIO5ff15xg==", + "dev": true, + "dependencies": { + "@floating-ui/dom": "^1.6.1", + "classnames": "^2.3.0" + }, + "peerDependencies": { + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", diff --git a/package.json b/package.json index d0510841..173832cc 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ "color": "#0e131f", "theme": "dark" }, - "badges": [{ + "badges": [ + { "description": "version", "url": "https://img.shields.io/github/package-json/v/estruyf/vscode-front-matter?color=green&label=vscode-front-matter&style=flat-square", "href": "https://github.com/estruyf/vscode-front-matter" @@ -70,7 +71,8 @@ "**/.frontmatter/config/*.json": "jsonc" } }, - "keybindings": [{ + "keybindings": [ + { "command": "frontMatter.dashboard", "key": "alt+d" }, @@ -94,19 +96,23 @@ } ], "viewsContainers": { - "activitybar": [{ - "id": "frontmatter-explorer", - "title": "FM", - "icon": "$(fm-logo)" - }] + "activitybar": [ + { + "id": "frontmatter-explorer", + "title": "FM", + "icon": "$(fm-logo)" + } + ] }, "views": { - "frontmatter-explorer": [{ - "id": "frontMatter.explorer", - "name": "Front Matter", - "icon": "$(fm-logo)", - "type": "webview" - }] + "frontmatter-explorer": [ + { + "id": "frontMatter.explorer", + "name": "Front Matter", + "icon": "$(fm-logo)", + "type": "webview" + } + ] }, "configuration": { "title": "%settings.configuration.title%", @@ -174,7 +180,8 @@ "frontMatter.content.defaultFileType": { "type": "string", "default": "md", - "oneOf": [{ + "oneOf": [ + { "enum": [ "md", "mdx" @@ -190,7 +197,8 @@ "frontMatter.content.defaultSorting": { "type": "string", "default": "", - "oneOf": [{ + "oneOf": [ + { "enum": [ "LastModifiedAsc", "LastModifiedDesc", @@ -550,7 +558,8 @@ "categories" ], "markdownDescription": "%setting.frontMatter.content.filters.markdownDescription%", - "items": [{ + "items": [ + { "type": "string", "enum": [ "contentFolders", @@ -624,7 +633,8 @@ "command": { "$id": "#scriptCommand", "type": "string", - "anyOf": [{ + "anyOf": [ + { "enum": [ "node", "bash", @@ -820,7 +830,8 @@ "title", "file" ], - "anyOf": [{ + "anyOf": [ + { "required": [ "schema" ] @@ -888,7 +899,8 @@ "id", "path" ], - "anyOf": [{ + "anyOf": [ + { "required": [ "schema" ] @@ -1135,26 +1147,29 @@ } } }, - "default": [{ - "name": "default", - "fileTypes": null, - "fields": [{ - "title": "Title", - "name": "title", - "type": "string" - }, - { - "title": "Caption", - "name": "caption", - "type": "string" - }, - { - "title": "Alt text", - "name": "alt", - "type": "string" - } - ] - }], + "default": [ + { + "name": "default", + "fileTypes": null, + "fields": [ + { + "title": "Title", + "name": "title", + "type": "string" + }, + { + "title": "Caption", + "name": "caption", + "type": "string" + }, + { + "title": "Alt text", + "name": "alt", + "type": "string" + } + ] + } + ], "scope": "Media" }, "frontMatter.media.supportedMimeTypes": { @@ -1257,7 +1272,8 @@ "fileType": { "type": "string", "default": "", - "oneOf": [{ + "oneOf": [ + { "enum": [ "md", "mdx" @@ -1403,7 +1419,8 @@ "default": "", "description": "%setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.taxonomyId.description%", "not": { - "anyOf": [{ + "anyOf": [ + { "const": "" }, { @@ -1609,7 +1626,8 @@ "type", "name" ], - "allOf": [{ + "allOf": [ + { "if": { "properties": { "type": { @@ -1821,48 +1839,51 @@ "fields" ] }, - "default": [{ - "name": "default", - "pageBundle": false, - "fields": [{ - "title": "Title", - "name": "title", - "type": "string" - }, - { - "title": "Description", - "name": "description", - "type": "string" - }, - { - "title": "Publishing date", - "name": "date", - "type": "datetime", - "default": "{{now}}", - "isPublishDate": true - }, - { - "title": "Content preview", - "name": "preview", - "type": "image" - }, - { - "title": "Is in draft", - "name": "draft", - "type": "boolean" - }, - { - "title": "Tags", - "name": "tags", - "type": "tags" - }, - { - "title": "Categories", - "name": "categories", - "type": "categories" - } - ] - }], + "default": [ + { + "name": "default", + "pageBundle": false, + "fields": [ + { + "title": "Title", + "name": "title", + "type": "string" + }, + { + "title": "Description", + "name": "description", + "type": "string" + }, + { + "title": "Publishing date", + "name": "date", + "type": "datetime", + "default": "{{now}}", + "isPublishDate": true + }, + { + "title": "Content preview", + "name": "preview", + "type": "image" + }, + { + "title": "Is in draft", + "name": "draft", + "type": "boolean" + }, + { + "title": "Tags", + "name": "tags", + "type": "tags" + }, + { + "title": "Categories", + "name": "categories", + "type": "categories" + } + ] + } + ], "scope": "Taxonomy" }, "frontMatter.taxonomy.customTaxonomy": { @@ -1875,7 +1896,8 @@ "type": "string", "description": "%setting.frontMatter.taxonomy.customTaxonomy.items.properties.id.description%", "not": { - "anyOf": [{ + "anyOf": [ + { "const": "" }, { @@ -2074,7 +2096,8 @@ } } }, - "commands": [{ + "commands": [ + { "command": "frontMatter.project.switch", "title": "%command.frontMatter.project.switch%", "category": "Front Matter", @@ -2415,16 +2438,21 @@ } } ], - "submenus": [{ - "id": "frontmatter.submenu", - "label": "Front Matter" - }], + "submenus": [ + { + "id": "frontmatter.submenu", + "label": "Front Matter" + } + ], "menus": { - "webview/context": [{ - "command": "workbench.action.webview.openDeveloperTools", - "when": "frontMatter:isDevelopment" - }], - "editor/title": [{ + "webview/context": [ + { + "command": "workbench.action.webview.openDeveloperTools", + "when": "frontMatter:isDevelopment" + } + ], + "editor/title": [ + { "command": "frontMatter.markup.heading", "group": "navigation@-133", "when": "frontMatter:file:isValid == true && frontMatter:markdown:wysiwyg && activeEditor == 'workbench.editors.files.textFileEditor'" @@ -2510,11 +2538,14 @@ "when": "resourceFilename == 'frontmatter.json'" } ], - "explorer/context": [{ - "submenu": "frontmatter.submenu", - "group": "frontmatter@1" - }], - "frontmatter.submenu": [{ + "explorer/context": [ + { + "submenu": "frontmatter.submenu", + "group": "frontmatter@1" + } + ], + "frontmatter.submenu": [ + { "command": "frontMatter.createFromTemplate", "when": "explorerResourceIsFolder", "group": "frontmatter@1" @@ -2530,7 +2561,8 @@ "group": "frontmatter@3" } ], - "commandPalette": [{ + "commandPalette": [ + { "command": "frontMatter.init", "when": "frontMatterCanInit" }, @@ -2707,7 +2739,8 @@ "when": "frontMatter:file:isValid == true" } ], - "view/title": [{ + "view/title": [ + { "command": "frontMatter.docs", "group": "navigation@-1", "when": "view == frontMatter.explorer" @@ -2744,13 +2777,16 @@ } ] }, - "languages": [{ - "id": "frontmatter.project.output", - "mimetypes": [ - "text/x-code-output" - ] - }], - "grammars": [{ + "languages": [ + { + "id": "frontmatter.project.output", + "mimetypes": [ + "text/x-code-output" + ] + } + ], + "grammars": [ + { "path": "./syntaxes/hugo.tmLanguage.json", "scopeName": "frontmatter.markdown.hugo", "injectTo": [ @@ -2763,45 +2799,48 @@ "path": "./syntaxes/frontmatter-output.tmLanguage.json" } ], - "walkthroughs": [{ - "id": "frontmatter.welcome", - "title": "Get started with Front Matter", - "description": "Discover the features of Front Matter and learn how to use the CMS for your SSG or static site.", - "steps": [{ - "id": "frontmatter.welcome.init", - "title": "Get started", - "description": "Initial steps to get started.\n[Open dashboard](command:frontMatter.dashboard)", - "media": { - "markdown": "assets/walkthrough/get-started.md" - }, - "completionEvents": [ - "onContext:frontMatterInitialized" - ] - }, - { - "id": "frontmatter.welcome.documentation", - "title": "Documentation", - "description": "Check out the documentation for Front Matter.\n[View our documentation](https://frontmatter.codes/docs)", - "media": { - "markdown": "assets/walkthrough/documentation.md" + "walkthroughs": [ + { + "id": "frontmatter.welcome", + "title": "Get started with Front Matter", + "description": "Discover the features of Front Matter and learn how to use the CMS for your SSG or static site.", + "steps": [ + { + "id": "frontmatter.welcome.init", + "title": "Get started", + "description": "Initial steps to get started.\n[Open dashboard](command:frontMatter.dashboard)", + "media": { + "markdown": "assets/walkthrough/get-started.md" + }, + "completionEvents": [ + "onContext:frontMatterInitialized" + ] }, - "completionEvents": [ - "onLink:https://frontmatter.codes/docs" - ] - }, - { - "id": "frontmatter.welcome.supporter", - "title": "Support the project", - "description": "Become a supporter.\n[Support the project](https://github.com/sponsors/estruyf)", - "media": { - "markdown": "assets/walkthrough/support-the-project.md" + { + "id": "frontmatter.welcome.documentation", + "title": "Documentation", + "description": "Check out the documentation for Front Matter.\n[View our documentation](https://frontmatter.codes/docs)", + "media": { + "markdown": "assets/walkthrough/documentation.md" + }, + "completionEvents": [ + "onLink:https://frontmatter.codes/docs" + ] }, - "completionEvents": [ - "onLink:https://github.com/sponsors/estruyf" - ] - } - ] - }] + { + "id": "frontmatter.welcome.supporter", + "title": "Support the project", + "description": "Become a supporter.\n[Support the project](https://github.com/sponsors/estruyf)", + "media": { + "markdown": "assets/walkthrough/support-the-project.md" + }, + "completionEvents": [ + "onLink:https://github.com/sponsors/estruyf" + ] + } + ] + } + ] }, "scripts": { "dev:ext": "npm run clean && npm run localization:generate && npm-run-all --parallel watch:*", @@ -2900,6 +2939,7 @@ "react-quill": "^2.0.0", "react-router-dom": "^6.8.0", "react-sortable-hoc": "^2.0.0", + "react-tooltip": "^5.28.0", "recoil": "^0.7.7", "rehype-parse": "^9.0.1", "rehype-remark": "^10.0.0", @@ -2938,4 +2978,4 @@ "vsce": { "dependencies": false } -} \ No newline at end of file +} diff --git a/src/localization/localization.enum.ts b/src/localization/localization.enum.ts index 2af534f4..dc001c3a 100644 --- a/src/localization/localization.enum.ts +++ b/src/localization/localization.enum.ts @@ -1448,18 +1448,6 @@ export enum LocalizationKey { * Actions */ panelActionsTitle = 'panel.actions.title', - /** - * More details - */ - panelArticleDetailsTitle = 'panel.articleDetails.title', - /** - * Type - */ - panelArticleDetailsType = 'panel.articleDetails.type', - /** - * Total - */ - panelArticleDetailsTotal = 'panel.articleDetails.total', /** * Headings */ @@ -1613,9 +1601,9 @@ export enum LocalizationKey { */ panelSeoDetailsRecommended = 'panel.seoDetails.recommended', /** - * Keyword usage {0} * + * Keyword density */ - panelSeoKeywordInfoDensity = 'panel.seoKeywordInfo.density', + panelSeoKeywordsDensity = 'panel.seoKeywords.density', /** * Used in heading(s) */ @@ -1639,19 +1627,15 @@ export enum LocalizationKey { /** * * A keyword density of 1-1.5% is sufficient in most cases. */ - panelSeoKeywordsDensity = 'panel.seoKeywords.density', + panelSeoKeywordsDensityDescription = 'panel.seoKeywords.density.description', /** - * Recommendations + * Insights */ panelSeoStatusTitle = 'panel.seoStatus.title', /** * Property */ panelSeoStatusHeaderProperty = 'panel.seoStatus.header.property', - /** - * Length - */ - panelSeoStatusHeaderLength = 'panel.seoStatus.header.length', /** * Valid */ diff --git a/src/panelWebView/components/ArticleDetails.tsx b/src/panelWebView/components/ArticleDetails.tsx index 0fc8cbdb..747d100a 100644 --- a/src/panelWebView/components/ArticleDetails.tsx +++ b/src/panelWebView/components/ArticleDetails.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import * as l10n from '@vscode/l10n'; import { LocalizationKey } from '../../localization'; -import { VSCodeTable, VSCodeTableBody, VSCodeTableCell, VSCodeTableHead, VSCodeTableHeader, VSCodeTableRow } from './VSCode/VSCodeTable'; +import { VSCodeTableCell, VSCodeTableRow } from './VSCode/VSCodeTable'; export interface IArticleDetailsProps { details: { @@ -22,59 +22,42 @@ const ArticleDetails: React.FunctionComponent = ({ } return ( -
-

{l10n.t(LocalizationKey.panelArticleDetailsTitle)}

+ <> + {details?.headings !== undefined && ( + + {l10n.t(LocalizationKey.panelArticleDetailsHeadings)} + {details.headings} + + )} - - - - - {l10n.t(LocalizationKey.panelArticleDetailsType)} - - - {l10n.t(LocalizationKey.panelArticleDetailsTotal)} - - - + {details?.paragraphs !== undefined && ( + + {l10n.t(LocalizationKey.panelArticleDetailsParagraphs)} + {details.paragraphs} + + )} - - {details?.headings !== undefined && ( - - {l10n.t(LocalizationKey.panelArticleDetailsHeadings)} - {details.headings} - - )} + {details?.internalLinks !== undefined && ( + + {l10n.t(LocalizationKey.panelArticleDetailsInternalLinks)} + {details.internalLinks} + + )} - {details?.paragraphs !== undefined && ( - - {l10n.t(LocalizationKey.panelArticleDetailsParagraphs)} - {details.paragraphs} - - )} + {details?.externalLinks !== undefined && ( + + {l10n.t(LocalizationKey.panelArticleDetailsExternalLinks)} + {details.externalLinks} + + )} - {details?.internalLinks !== undefined && ( - - {l10n.t(LocalizationKey.panelArticleDetailsInternalLinks)} - {details.internalLinks} - - )} - - {details?.externalLinks !== undefined && ( - - {l10n.t(LocalizationKey.panelArticleDetailsExternalLinks)} - {details.externalLinks} - - )} - - {details?.images !== undefined && ( - - {l10n.t(LocalizationKey.panelArticleDetailsImages)} - {details.images} - - )} - - -
+ {details?.images !== undefined && ( + + {l10n.t(LocalizationKey.panelArticleDetailsImages)} + {details.images} + + )} + ); }; diff --git a/src/panelWebView/components/SeoFieldInfo.tsx b/src/panelWebView/components/SeoFieldInfo.tsx index 8b30bde3..6679e0a2 100644 --- a/src/panelWebView/components/SeoFieldInfo.tsx +++ b/src/panelWebView/components/SeoFieldInfo.tsx @@ -7,19 +7,20 @@ export interface ISeoFieldInfoProps { value: string; recommendation: string; isValid?: boolean; + className?: string; } const SeoFieldInfo: React.FunctionComponent = ({ title, value, recommendation, - isValid + isValid, + className }: React.PropsWithChildren) => { return ( - + {title} - {value}/{recommendation} - {isValid !== undefined ? : -} + {isValid !== undefined ? : } {value}/{recommendation} ); }; diff --git a/src/panelWebView/components/SeoKeywordInfo.tsx b/src/panelWebView/components/SeoKeywordInfo.tsx index 38418233..fdd2cfe7 100644 --- a/src/panelWebView/components/SeoKeywordInfo.tsx +++ b/src/panelWebView/components/SeoKeywordInfo.tsx @@ -1,7 +1,5 @@ import * as React from 'react'; import { ValidInfo } from './ValidInfo'; -import * as l10n from '@vscode/l10n'; -import { LocalizationKey } from '../../localization'; import { VSCodeTableCell, VSCodeTableRow } from './VSCode/VSCodeTable'; export interface ISeoKeywordInfoProps { @@ -31,14 +29,14 @@ const SeoKeywordInfo: React.FunctionComponent = ({ const pattern = new RegExp(`(^${keyword.toLowerCase()}(?=\\s|$))|(\\s${keyword.toLowerCase()}(?=\\s|$))`, 'ig'); const count = (content.match(pattern) || []).length; const density = (count / wordCount) * 100; - const densityTitle = l10n.t(LocalizationKey.panelSeoKeywordInfoDensity, `${density.toFixed(2)}%`); + const densityTitle = `${density.toFixed(2)}% *`; if (density < 0.75) { - return ; + return ; } else if (density >= 0.75 && density < 1.5) { - return ; + return ; } else { - return ; + return ; } }; @@ -63,7 +61,7 @@ const SeoKeywordInfo: React.FunctionComponent = ({ } const exists = headings.filter((heading) => validateKeywords(heading, keyword)); - return 0} />; + return 0} />; }; if (!keyword || typeof keyword !== 'string') { @@ -73,39 +71,35 @@ const SeoKeywordInfo: React.FunctionComponent = ({ return ( {keyword} - -
- -
-
- -
-
- -
-
- -
- {headings && headings.length > 0 && -
{checkHeadings()}
} - {wordCount && -
{density()}
} + + + + + + + + + + + + + + {checkHeadings()} + + + {density()}
); diff --git a/src/panelWebView/components/SeoKeywords.tsx b/src/panelWebView/components/SeoKeywords.tsx index 094a73ed..226a9654 100644 --- a/src/panelWebView/components/SeoKeywords.tsx +++ b/src/panelWebView/components/SeoKeywords.tsx @@ -1,9 +1,10 @@ import * as React from 'react'; import { SeoKeywordInfo } from './SeoKeywordInfo'; import { ErrorBoundary } from '@sentry/react'; -import * as l10n from '@vscode/l10n'; -import { LocalizationKey } from '../../localization'; +import { Tooltip } from 'react-tooltip' +import { LocalizationKey, localize } from '../../localization'; import { VSCodeTable, VSCodeTableBody, VSCodeTableHead, VSCodeTableHeader, VSCodeTableRow } from './VSCode/VSCodeTable'; +import { Icon } from 'vscrui'; export interface ISeoKeywordsProps { keywords: string[] | null; @@ -22,6 +23,8 @@ const SeoKeywords: React.FunctionComponent = ({ }: React.PropsWithChildren) => { const [isReady, setIsReady] = React.useState(false); + const tooltipClasses = `!py-[2px] !px-[8px] !rounded-[3px] !border-[var(--vscode-editorHoverWidget-border)] !border !border-solid !bg-[var(--vscode-editorHoverWidget-background)] !text-[var(--vscode-editorHoverWidget-foreground)] !font-normal !opacity-100`; + const validateKeywords = () => { if (!keywords) { return []; @@ -51,17 +54,106 @@ const SeoKeywords: React.FunctionComponent = ({ } return ( -
-

{l10n.t(LocalizationKey.panelSeoKeywordsTitle)}

+
+

{localize(LocalizationKey.panelSeoKeywordsTitle)}

- + - {l10n.t(LocalizationKey.panelSeoKeywordsHeaderKeyword)} + {localize(LocalizationKey.panelSeoKeywordsHeaderKeyword)} - - {l10n.t(LocalizationKey.panelSeoKeywordsHeaderDetails)} + +
+ + +
+
+ +
+ + +
+
+ +
+ + +
+
+ +
+ + +
+
+ +
+ + H1 + + +
+
+ +
+ + +
@@ -79,10 +171,10 @@ const SeoKeywords: React.FunctionComponent = ({ {data.wordCount && (
- {l10n.t(LocalizationKey.panelSeoKeywordsDensity)} + {localize(LocalizationKey.panelSeoKeywordsDensityDescription)}
)} -
+ ); }; diff --git a/src/panelWebView/components/SeoStatus.tsx b/src/panelWebView/components/SeoStatus.tsx index f7bf280e..5f7c06e3 100644 --- a/src/panelWebView/components/SeoStatus.tsx +++ b/src/panelWebView/components/SeoStatus.tsx @@ -4,13 +4,13 @@ import { TagType } from '../TagType'; import { ArticleDetails } from './ArticleDetails'; import { Collapsible } from './Collapsible'; import FieldBoundary from './ErrorBoundary/FieldBoundary'; -import { SymbolKeywordIcon } from './Icons/SymbolKeywordIcon'; import { SeoFieldInfo } from './SeoFieldInfo'; import { SeoKeywords } from './SeoKeywords'; import { TagPicker } from './Fields/TagPicker'; import { LocalizationKey, localize } from '../../localization'; -import { VSCodeTable, VSCodeTableBody, VSCodeTableHead, VSCodeTableHeader, VSCodeTableRow } from './VSCode/VSCodeTable'; +import { VSCodeTable, VSCodeTableBody } from './VSCode/VSCodeTable'; import useContentType from '../../hooks/useContentType'; +import { Icon } from 'vscrui'; export interface ISeoStatusProps { seo: SEO; @@ -38,19 +38,11 @@ const SeoStatus: React.FunctionComponent = ({ const descriptionFieldName = contentType?.fields.find(f => f.name === descriptionField)?.title || descriptionField; return ( -
-
-

{localize(LocalizationKey.panelSeoStatusTitle)}

+
+
+

{localize(LocalizationKey.panelSeoStatusTitle)}

- - - {localize(LocalizationKey.panelSeoStatusHeaderProperty)} - {localize(LocalizationKey.panelSeoStatusHeaderLength)} - {localize(LocalizationKey.panelSeoStatusHeaderValid)} - - - {metadata[titleField] && seo.title > 0 ? ( = ({ value={metadata[titleField].length} recommendation={localize(LocalizationKey.panelSeoStatusSeoFieldInfoCharacters, seo.title)} isValid={metadata[titleField].length <= seo.title} + className={`border-t border-t-[var(--vscode-editorGroup-border)]`} /> ) : null} @@ -86,9 +79,11 @@ const SeoStatus: React.FunctionComponent = ({ recommendation={localize(LocalizationKey.panelSeoStatusSeoFieldInfoWords, seo.content)} /> ) : null} + + -
+ = ({ } + icon={} crntSelected={(metadata.keywords as string[]) || []} options={[]} freeform={true} @@ -112,8 +107,6 @@ const SeoStatus: React.FunctionComponent = ({ disableConfigurable /> - -
); }, [contentType, metadata, seo, focusElm, unsetFocus]); diff --git a/src/panelWebView/components/ValidInfo.tsx b/src/panelWebView/components/ValidInfo.tsx index 2e817775..1ab33f54 100644 --- a/src/panelWebView/components/ValidInfo.tsx +++ b/src/panelWebView/components/ValidInfo.tsx @@ -4,21 +4,23 @@ import { CheckIcon, ExclamationTriangleIcon } from '@heroicons/react/24/outline' export interface IValidInfoProps { label?: string; isValid: boolean; + className?: string; } const ValidInfo: React.FunctionComponent = ({ label, - isValid + isValid, + className, }: React.PropsWithChildren) => { return ( - <> +
{isValid ? ( ) : ( )} - {label && {label}} - + {label && {label}} +
); }; From 8cecf8d8be0a5ab48d12cc94e74234c39cca75cd Mon Sep 17 00:00:00 2001 From: Elio Struyf Date: Thu, 21 Nov 2024 16:40:24 +0100 Subject: [PATCH 04/31] #705 - change order of metadata view --- src/panelWebView/ViewPanel.tsx | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/panelWebView/ViewPanel.tsx b/src/panelWebView/ViewPanel.tsx index cf2eec3d..ba7ed5bd 100644 --- a/src/panelWebView/ViewPanel.tsx +++ b/src/panelWebView/ViewPanel.tsx @@ -124,12 +124,26 @@ export const ViewPanel: React.FunctionComponent = () => { - {!loading && ()} - + { + !loading && metadata && ( + + + + ) + } + + {!loading && ()} + { !loading && metadata && settings && settings.seo && ( @@ -153,20 +167,6 @@ export const ViewPanel: React.FunctionComponent = () => { )} - { - !loading && metadata && ( - - - - ) - } - From fca8d260d5be73a21b4429ecc931707af50eb290 Mon Sep 17 00:00:00 2001 From: Elio Struyf Date: Fri, 22 Nov 2024 09:27:46 +0100 Subject: [PATCH 05/31] Enhance SEO components with keyword management and styling updates #705 --- .../components/SeoKeywordInfo.tsx | 27 ++++++++++- src/panelWebView/components/SeoKeywords.tsx | 10 ++-- src/panelWebView/components/SeoStatus.tsx | 46 ++++++++++--------- src/panelWebView/components/Tag.tsx | 11 ++--- src/panelWebView/components/Tags.tsx | 7 ++- src/panelWebView/styles.css | 12 +++++ 6 files changed, 76 insertions(+), 37 deletions(-) diff --git a/src/panelWebView/components/SeoKeywordInfo.tsx b/src/panelWebView/components/SeoKeywordInfo.tsx index fdd2cfe7..8714f071 100644 --- a/src/panelWebView/components/SeoKeywordInfo.tsx +++ b/src/panelWebView/components/SeoKeywordInfo.tsx @@ -1,8 +1,13 @@ import * as React from 'react'; import { ValidInfo } from './ValidInfo'; import { VSCodeTableCell, VSCodeTableRow } from './VSCode/VSCodeTable'; +import { Tag } from './Tag'; +import { LocalizationKey, localize } from '../../localization'; +import { Messenger } from '@estruyf/vscode/dist/client'; +import { CommandToCode } from '../CommandToCode'; export interface ISeoKeywordInfoProps { + keywords: string[]; keyword: string; title: string; description: string; @@ -14,6 +19,7 @@ export interface ISeoKeywordInfoProps { const SeoKeywordInfo: React.FunctionComponent = ({ keyword, + keywords, title, description, slug, @@ -64,13 +70,32 @@ const SeoKeywordInfo: React.FunctionComponent = ({ return 0} />; }; + const onRemove = React.useCallback((tag: string) => { + const newSelection = keywords.filter((s) => s !== tag); + Messenger.send(CommandToCode.updateKeywords, { + values: newSelection, + parents: undefined + }); + }, [keywords]); + if (!keyword || typeof keyword !== 'string') { return null; } return ( - {keyword} + +
+ void 0} + title={localize(LocalizationKey.panelTagsTagWarning, keyword)} + disableConfigurable={true} + /> +
+
= ({ return []; }; + const validKeywords = React.useMemo(() => { + return validateKeywords(); + }, [keywords]); + // Workaround for lit components not updating render React.useEffect(() => { setIsReady(false); @@ -54,7 +58,7 @@ const SeoKeywords: React.FunctionComponent = ({ } return ( -
+

{localize(LocalizationKey.panelSeoKeywordsTitle)}

@@ -159,10 +163,10 @@ const SeoKeywords: React.FunctionComponent = ({ - {validateKeywords().map((keyword, index) => { + {validKeywords.map((keyword, index) => { return ( }> - + ); })} diff --git a/src/panelWebView/components/SeoStatus.tsx b/src/panelWebView/components/SeoStatus.tsx index 5f7c06e3..98322c5d 100644 --- a/src/panelWebView/components/SeoStatus.tsx +++ b/src/panelWebView/components/SeoStatus.tsx @@ -38,7 +38,7 @@ const SeoStatus: React.FunctionComponent = ({ const descriptionFieldName = contentType?.fields.find(f => f.name === descriptionField)?.title || descriptionField; return ( -
+

{localize(LocalizationKey.panelSeoStatusTitle)}

@@ -85,28 +85,30 @@ const SeoStatus: React.FunctionComponent = ({
- - - - } - crntSelected={(metadata.keywords as string[]) || []} - options={[]} - freeform={true} - focussed={focusElm === TagType.keywords} - unsetFocus={unsetFocus} - disableConfigurable +
+ - + + + } + crntSelected={(metadata.keywords as string[]) || []} + options={[]} + freeform={true} + focussed={focusElm === TagType.keywords} + unsetFocus={unsetFocus} + disableConfigurable + /> + +
); }, [contentType, metadata, seo, focusElm, unsetFocus]); diff --git a/src/panelWebView/components/Tag.tsx b/src/panelWebView/components/Tag.tsx index abf70759..652e10e9 100644 --- a/src/panelWebView/components/Tag.tsx +++ b/src/panelWebView/components/Tag.tsx @@ -1,7 +1,6 @@ import { PlusIcon, XMarkIcon } from '@heroicons/react/24/outline'; import * as React from 'react'; -import * as l10n from '@vscode/l10n'; -import { LocalizationKey } from '../../localization'; +import { LocalizationKey, localize } from '../../localization'; export interface ITagProps { className: string; @@ -14,16 +13,14 @@ export interface ITagProps { onRemove: (tags: string) => void; } -const Tag: React.FunctionComponent = (props: React.PropsWithChildren) => { - const { value, title, onRemove, onCreate, disableConfigurable } = props; - +const Tag: React.FunctionComponent = ({ value, title, onRemove, onCreate, disableConfigurable, className }: React.PropsWithChildren) => { return ( <> -
+
{!disableConfigurable && onCreate && (