From 39408b3c832d78783593c45709bb9facfa921e38 Mon Sep 17 00:00:00 2001 From: Mrugesh Mohapatra <1884376+raisedadead@users.noreply.github.com> Date: Tue, 21 Apr 2026 14:02:02 +0530 Subject: [PATCH] chore: land failing renovate updates (#67035) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- client/package.json | 14 +- .../src/assets/icons/green-not-completed.tsx | 3 +- client/src/assets/icons/green-pass.tsx | 3 +- client/src/components/Donation/donation.css | 12 +- .../Header/components/universal-nav.css | 30 +- client/src/components/Intro/learn-alert.css | 3 +- .../daily-coding-challenge/widget.tsx | 3 +- client/src/components/helpers/link.tsx | 6 +- .../components/challenge-transcript.tsx | 2 +- .../redux/ask-socrates-saga.test.js | 25 +- curriculum/challenges/.markdownlint.yaml | 26 +- .../698734483f9b59d7c6815583.md | 2 +- curriculum/package.json | 8 +- curriculum/src/test/test-challenges.js | 10 +- package.json | 4 +- packages/challenge-linter/package.json | 7 +- packages/challenge-linter/src/index.ts | 4 +- packages/challenge-linter/src/lint.test.js | 15 +- .../src/linter/fenced-code-block.js | 1 + packages/challenge-linter/src/linter/index.js | 10 +- .../src/linter/markdown-prism.js | 3 +- .../src/linter/markdown-yaml.js | 3 +- pnpm-lock.yaml | 896 +++++++++++------- tools/challenge-helper-scripts/package.json | 2 +- 24 files changed, 632 insertions(+), 460 deletions(-) diff --git a/client/package.json b/client/package.json index c1d27a52382..84c014eb16d 100644 --- a/client/package.json +++ b/client/package.json @@ -147,19 +147,19 @@ "@total-typescript/ts-reset": "^0.5.0", "@types/canvas-confetti": "^1.6.0", "@types/gatsbyjs__reach-router": "1.3.0", - "@types/js-yaml": "4.0.5", - "@types/loadable__component": "5.13.8", + "@types/js-yaml": "4.0.9", + "@types/loadable__component": "5.13.10", "@types/lodash-es": "^4.17.6", "@types/prismjs": "^1.26.0", - "@types/react": "18.2.79", - "@types/react-dom": "18.2.25", - "@types/react-gtm-module": "2.0.3", + "@types/react": "18.3.28", + "@types/react-dom": "18.3.7", + "@types/react-gtm-module": "2.0.4", "@types/react-helmet": "6.1.11", - "@types/react-redux": "7.1.33", + "@types/react-redux": "7.1.34", "@types/react-scroll": "1.8.10", "@types/react-spinkit": "3.0.10", "@types/react-test-renderer": "16.9.12", - "@types/react-transition-group": "4.4.10", + "@types/react-transition-group": "4.4.12", "@types/redux-actions": "2.6.5", "@types/sanitize-html": "^2.8.0", "@types/store": "^2.0.2", diff --git a/client/src/assets/icons/green-not-completed.tsx b/client/src/assets/icons/green-not-completed.tsx index ddc2df16865..bed54acf1b5 100644 --- a/client/src/assets/icons/green-not-completed.tsx +++ b/client/src/assets/icons/green-not-completed.tsx @@ -2,8 +2,7 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; interface GreenNotCompletedProps - extends JSX.IntrinsicAttributes, - React.SVGProps { + extends JSX.IntrinsicAttributes, React.SVGProps { hushScreenReaderText?: boolean; } diff --git a/client/src/assets/icons/green-pass.tsx b/client/src/assets/icons/green-pass.tsx index 62c6f641784..b5c0f7cc493 100644 --- a/client/src/assets/icons/green-pass.tsx +++ b/client/src/assets/icons/green-pass.tsx @@ -2,8 +2,7 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; interface GreenPassProps - extends JSX.IntrinsicAttributes, - React.SVGProps { + extends JSX.IntrinsicAttributes, React.SVGProps { hushScreenReaderText?: boolean; } function GreenPass(props: GreenPassProps): JSX.Element { diff --git a/client/src/components/Donation/donation.css b/client/src/components/Donation/donation.css index adb074f6652..4c5b0e4fe89 100644 --- a/client/src/components/Donation/donation.css +++ b/client/src/components/Donation/donation.css @@ -668,7 +668,8 @@ a.patreon-button:hover { .dark-palette .gradient-container { position: relative; - background: linear-gradient( + background: + linear-gradient( -10deg, rgb(7 40 94) 35%, rgba(237, 202, 216, 0) 75%, @@ -679,7 +680,8 @@ a.patreon-button:hover { .light-palette .gradient-container { position: relative; - background: linear-gradient( + background: + linear-gradient( -10deg, rgb(223 243 255) 35%, rgba(237, 202, 216, 0) 75%, @@ -693,7 +695,8 @@ a.patreon-button:hover { } .light-palette .gradient-foreground { - background-image: linear-gradient( + background-image: + linear-gradient( -10deg, rgb(0, 51, 133) 35%, rgba(237, 202, 216, 0) 75%, @@ -705,7 +708,8 @@ a.patreon-button:hover { } .dark-palette .gradient-foreground { - background-image: linear-gradient( + background-image: + linear-gradient( -10deg, rgb(223 243 255) 35%, rgba(237, 202, 216, 0) 75%, diff --git a/client/src/components/Header/components/universal-nav.css b/client/src/components/Header/components/universal-nav.css index 95c83745950..4c789427b89 100644 --- a/client/src/components/Header/components/universal-nav.css +++ b/client/src/components/Header/components/universal-nav.css @@ -99,27 +99,27 @@ } .exposed-button-nav:is( - :hover, - :hover:focus, - [aria-expanded='true'], - [aria-expanded='true']:hover - ), + :hover, + :hover:focus, + [aria-expanded='true'], + [aria-expanded='true']:hover +), .lang-button-nav:is( - :hover, - :hover:focus, - [aria-expanded='true'], - [aria-expanded='false'].force-show - ) { + :hover, + :hover:focus, + [aria-expanded='true'], + [aria-expanded='false'].force-show +) { background-color: var(--gray-00); color: var(--theme-color); } .lang-button-nav:is( - :hover, - :hover:focus, - [aria-expanded='true'], - [aria-expanded='false'].force-show - ) { + :hover, + :hover:focus, + [aria-expanded='true'], + [aria-expanded='false'].force-show +) { fill: var(--gray-00); } diff --git a/client/src/components/Intro/learn-alert.css b/client/src/components/Intro/learn-alert.css index 39eaf926c96..4440565f2ef 100644 --- a/client/src/components/Intro/learn-alert.css +++ b/client/src/components/Intro/learn-alert.css @@ -3,7 +3,8 @@ margin-bottom: 40px; border: 1px solid #31708f; color: #31708f; - background: linear-gradient( + background: + linear-gradient( -10deg, rgba(217, 237, 247, 1) 35%, rgba(237, 202, 216, 0) 75%, diff --git a/client/src/components/daily-coding-challenge/widget.tsx b/client/src/components/daily-coding-challenge/widget.tsx index b03f4950ad3..55921f9292a 100644 --- a/client/src/components/daily-coding-challenge/widget.tsx +++ b/client/src/components/daily-coding-challenge/widget.tsx @@ -10,8 +10,7 @@ import { getTodayUsCentral } from './helpers'; import './widget.css'; -interface DailyCodingChallengeWidgetProps - extends React.AnchorHTMLAttributes { +interface DailyCodingChallengeWidgetProps extends React.AnchorHTMLAttributes { forLanding: boolean; } diff --git a/client/src/components/helpers/link.tsx b/client/src/components/helpers/link.tsx index 655a5401d07..3eac1fca16c 100644 --- a/client/src/components/helpers/link.tsx +++ b/client/src/components/helpers/link.tsx @@ -1,8 +1,10 @@ import { GatsbyLinkProps, Link as GatsbyLink } from 'gatsby'; import React from 'react'; -interface LinkProps - extends Omit>, 'ref'> { +interface LinkProps extends Omit< + GatsbyLinkProps>, + 'ref' +> { children?: React.ReactNode; external?: boolean; sameTab?: boolean; diff --git a/client/src/templates/Challenges/components/challenge-transcript.tsx b/client/src/templates/Challenges/components/challenge-transcript.tsx index 5922e902c4e..6fa1d2804e0 100644 --- a/client/src/templates/Challenges/components/challenge-transcript.tsx +++ b/client/src/templates/Challenges/components/challenge-transcript.tsx @@ -22,7 +22,7 @@ function ChallengeTranscript({ // default to collapsed const [isOpen, setIsOpen] = useState(() => shouldPersistExpanded - ? (store.get('fcc-transcript-expanded') as boolean | null) ?? false + ? ((store.get('fcc-transcript-expanded') as boolean | null) ?? false) : false ); diff --git a/client/src/templates/Challenges/redux/ask-socrates-saga.test.js b/client/src/templates/Challenges/redux/ask-socrates-saga.test.js index 261c4e66686..ca75f427120 100644 --- a/client/src/templates/Challenges/redux/ask-socrates-saga.test.js +++ b/client/src/templates/Challenges/redux/ask-socrates-saga.test.js @@ -118,9 +118,8 @@ describe('askSocratesSaga', () => { }); it('dispatches error when buildChallenge returns no seed', async () => { - const { buildChallenge } = await import( - '@freecodecamp/challenge-builder/build' - ); + const { buildChallenge } = + await import('@freecodecamp/challenge-builder/build'); return expectSaga(askSocratesSaga) .withReducer(reducer) @@ -140,9 +139,8 @@ describe('askSocratesSaga', () => { }); it('dispatches complete without userInput when editableContents is empty', async () => { - const { buildChallenge } = await import( - '@freecodecamp/challenge-builder/build' - ); + const { buildChallenge } = + await import('@freecodecamp/challenge-builder/build'); const { getSocratesHint } = await import('../../../utils/ajax'); return expectSaga(askSocratesSaga) @@ -170,9 +168,8 @@ describe('askSocratesSaga', () => { }); it('dispatches complete with hint on successful API response', async () => { - const { buildChallenge } = await import( - '@freecodecamp/challenge-builder/build' - ); + const { buildChallenge } = + await import('@freecodecamp/challenge-builder/build'); const { getSocratesHint } = await import('../../../utils/ajax'); return expectSaga(askSocratesSaga) @@ -200,9 +197,8 @@ describe('askSocratesSaga', () => { }); it('dispatches error with attempts/limit on API error response', async () => { - const { buildChallenge } = await import( - '@freecodecamp/challenge-builder/build' - ); + const { buildChallenge } = + await import('@freecodecamp/challenge-builder/build'); const { getSocratesHint } = await import('../../../utils/ajax'); return expectSaga(askSocratesSaga) @@ -234,9 +230,8 @@ describe('askSocratesSaga', () => { }); it('dispatches generic error when API call throws', async () => { - const { buildChallenge } = await import( - '@freecodecamp/challenge-builder/build' - ); + const { buildChallenge } = + await import('@freecodecamp/challenge-builder/build'); const { getSocratesHint } = await import('../../../utils/ajax'); return expectSaga(askSocratesSaga) diff --git a/curriculum/challenges/.markdownlint.yaml b/curriculum/challenges/.markdownlint.yaml index 6f10c316fd3..17e1682d9cf 100644 --- a/curriculum/challenges/.markdownlint.yaml +++ b/curriculum/challenges/.markdownlint.yaml @@ -1,12 +1,14 @@ -default: true # include all rules, with exceptions below -MD002: false # first heading should not be a top level heading -MD013: false # lines can be any length -MD022: false # headings don't need surrounding by newlines -MD024: false # no duplicate headers -MD025: false # headings are used as markers by the parser -MD031: true # fenced blocks do need surrounding by newlines -MD033: false # inline html is required -MD040: true # fenced code blocks should have a language specified -MD034: false # allow bare-URLs -MD036: false # TODO: **Example** is the main offender, should that be a heading? -whitespace: false # extra whitespace is ignored, so we don't enforce it. +default: true # include all rules, with exceptions below +MD002: false # first heading should not be a top level heading +MD013: false # lines can be any length +MD022: false # headings don't need surrounding by newlines +MD024: false # no duplicate headers +MD025: false # headings are used as markers by the parser +MD031: true # fenced blocks do need surrounding by newlines +MD033: false # inline html is required +MD040: true # fenced code blocks should have a language specified +MD034: false # allow bare-URLs +MD036: false # TODO: **Example** is the main offender, should that be a heading? +MD058: false # allow blanks around tables +MD060: false # disable table column style +whitespace: false # extra whitespace is ignored, so we don't enforce it. diff --git a/curriculum/challenges/english/blocks/zh-a1-learn-numbers-20-to-99/698734483f9b59d7c6815583.md b/curriculum/challenges/english/blocks/zh-a1-learn-numbers-20-to-99/698734483f9b59d7c6815583.md index 7adb485bff4..1b4d21d04d4 100644 --- a/curriculum/challenges/english/blocks/zh-a1-learn-numbers-20-to-99/698734483f9b59d7c6815583.md +++ b/curriculum/challenges/english/blocks/zh-a1-learn-numbers-20-to-99/698734483f9b59d7c6815583.md @@ -8,7 +8,7 @@ lang: zh-CN -### type 24 — Numbers (40–49) +## type 24 — Numbers (40–49) # --description-- diff --git a/curriculum/package.json b/curriculum/package.json index 7173314e7ba..4f07d3dbb18 100644 --- a/curriculum/package.json +++ b/curriculum/package.json @@ -62,9 +62,9 @@ "@freecodecamp/eslint-config": "workspace:*", "@freecodecamp/shared": "workspace:*", "@total-typescript/ts-reset": "0.6.1", - "@types/debug": "4.1.12", - "@types/js-yaml": "4.0.5", - "@types/polka": "0.5.7", + "@types/debug": "4.1.13", + "@types/js-yaml": "4.0.9", + "@types/polka": "0.5.8", "@typescript/vfs-1.6.1": "npm:@typescript/vfs@1.6.4", "@vitest/ui": "4.0.15", "eslint": "9.39.1", @@ -84,6 +84,6 @@ "vitest": "4.0.15" }, "dependencies": { - "@types/node": "24.10.8" + "@types/node": "24.12.2" } } diff --git a/curriculum/src/test/test-challenges.js b/curriculum/src/test/test-challenges.js index 77b1eefff7c..23e2ddaf2c1 100644 --- a/curriculum/src/test/test-challenges.js +++ b/curriculum/src/test/test-challenges.js @@ -34,9 +34,8 @@ vi.mock( const tsvfs = await import('@typescript/vfs-1.6.1'); const ts = await import('typescript-5.9.2'); // use the same TS compiler as the challenge-builder - const tsCompiler = await import( - '@freecodecamp/browser-scripts/ts-compiler' - ); + const tsCompiler = + await import('@freecodecamp/browser-scripts/ts-compiler'); const compiler = new tsCompiler.Compiler(ts, tsvfs); let previousTsconfig; let hasConfiguredCompiler = false; @@ -170,9 +169,8 @@ async function populateTestsForLang({ lang, challenges, meta }) { // We have to dynamically import this because otherwise it will not be mocked. // Presumably this is because we import from_this file in the generated block // test files and that happens before the mock is applied. - const { buildChallenge } = await import( - '@freecodecamp/challenge-builder/build' - ); + const { buildChallenge } = + await import('@freecodecamp/challenge-builder/build'); const validateChallenge = challengeSchemaValidator(); describe(`Language: ${lang}`, function () { diff --git a/package.json b/package.json index 2684855fefc..c63ba83e137 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "@playwright/test": "^1.47.1", "@testing-library/dom": "10.4.1", "@testing-library/jest-dom": "6.9.1", - "@types/lodash": "4.14.202", + "@types/lodash": "4.17.24", "@types/node": "^24.10.8", "debug": "4.4.3", "globals": "^15.14.0", @@ -92,7 +92,7 @@ "lint-staged": "^16.4.0", "lodash": "4.17.21", "npm-run-all2": "5.0.2", - "prettier": "3.2.5", + "prettier": "3.8.2", "stylelint": "16.24.0", "tsx": "4.21.0", "turbo": "^2.8.7", diff --git a/packages/challenge-linter/package.json b/packages/challenge-linter/package.json index 24833dfb769..bcaaee867f8 100644 --- a/packages/challenge-linter/package.json +++ b/packages/challenge-linter/package.json @@ -31,14 +31,17 @@ }, "devDependencies": { "@freecodecamp/eslint-config": "workspace:*", - "@types/js-yaml": "4.0.5", + "@types/js-yaml": "4.0.9", "@types/yargs": "17.0.35", "@vitest/ui": "3.2.4", "eslint": "9.39.1", - "markdownlint": "0.33.0", + "markdownlint": "0.40.0", "prismjs": "1.30.0", "typescript": "5.9.3", "vitest": "3.2.4", "yargs": "17.7.2" + }, + "dependencies": { + "markdown-it": "^14.1.1" } } diff --git a/packages/challenge-linter/src/index.ts b/packages/challenge-linter/src/index.ts index 2366e3d76d8..a2a6a7f9260 100644 --- a/packages/challenge-linter/src/index.ts +++ b/packages/challenge-linter/src/index.ts @@ -7,7 +7,9 @@ interface LintResults { [key: string]: unknown[]; } -const configure = (configPath: string) => { +const configure = ( + configPath: string +): { lint: (files: string[]) => Promise } => { const lintRules = readFileSync(configPath, 'utf8'); const lint = linter(YAML.load(lintRules)); diff --git a/packages/challenge-linter/src/lint.test.js b/packages/challenge-linter/src/lint.test.js index 7b5af882b8b..766e96e6cd3 100644 --- a/packages/challenge-linter/src/lint.test.js +++ b/packages/challenge-linter/src/lint.test.js @@ -4,18 +4,15 @@ import { beforeAll, beforeEach, describe, expect, it, vi } from 'vitest'; import { configure, processLintErrors } from './index.js'; -const badYMLError = { +const badYMLError = expect.objectContaining({ errorContext: '```yml', - errorDetail: `bad indentation of a mapping entry at line 3, column 17: - testString: testString - ^`, - errorRange: null, - fixInfo: null, + errorDetail: expect.stringContaining( + 'bad indentation of a mapping entry at line 3, column 17' + ), lineNumber: 19, ruleDescription: 'YAML code blocks should be valid', - ruleInformation: null, ruleNames: ['yaml-linter'] -}; +}); describe('markdown linter', () => { const good = path.join(__dirname, './fixtures/good.md'); @@ -51,6 +48,6 @@ describe('markdown linter', () => { const errors = processLintErrors(results); expect(errors[0].file).toContain('badYML.md'); - expect(errors[0].errors).toContainEqual(badYMLError); + expect(errors[0].errors).toEqual(expect.arrayContaining([badYMLError])); }); }); diff --git a/packages/challenge-linter/src/linter/fenced-code-block.js b/packages/challenge-linter/src/linter/fenced-code-block.js index 73a2ec5bee9..3e0758a07df 100644 --- a/packages/challenge-linter/src/linter/fenced-code-block.js +++ b/packages/challenge-linter/src/linter/fenced-code-block.js @@ -1,6 +1,7 @@ export const names = ['closed-code-blocks']; export const description = 'Code blocks must have closing triple backticks'; export const tags = ['code']; +export const parser = 'micromark'; function rule(params, onError) { params.parsers.micromark.tokens .filter(token => token.type === 'codeFenced') diff --git a/packages/challenge-linter/src/linter/index.js b/packages/challenge-linter/src/linter/index.js index fb4c8310335..00f7cc2cdde 100644 --- a/packages/challenge-linter/src/linter/index.js +++ b/packages/challenge-linter/src/linter/index.js @@ -1,18 +1,22 @@ -import markdownlint from 'markdownlint'; +import { lint as markdownlint } from 'markdownlint/promise'; import * as lintPrism from './markdown-prism.js'; import * as lintYAML from './markdown-yaml.js'; import * as fencedCodeBlock from './fenced-code-block.js'; +const markdownItFactory = () => + import('markdown-it').then(module => module.default({ html: true })); + export function linter(rules) { const lint = async files => { const options = { files, config: rules, - customRules: [lintYAML, lintPrism, fencedCodeBlock] + customRules: [lintYAML, lintPrism, fencedCodeBlock], + markdownItFactory }; - return await markdownlint.promises.markdownlint(options); + return await markdownlint(options); }; return lint; } diff --git a/packages/challenge-linter/src/linter/markdown-prism.js b/packages/challenge-linter/src/linter/markdown-prism.js index d77c7de8952..3765faadc00 100644 --- a/packages/challenge-linter/src/linter/markdown-prism.js +++ b/packages/challenge-linter/src/linter/markdown-prism.js @@ -4,8 +4,9 @@ export const names = ['prism-langs']; export const description = 'Code block languages should be supported by PrismJS'; export const tags = ['prism']; +export const parser = 'markdownit'; function rule(params, onError) { - params.tokens + params.parsers.markdownit.tokens .filter(param => param.type === 'fence') .forEach(codeBlock => { // whitespace around the language is ignored by the parser, as is case: diff --git a/packages/challenge-linter/src/linter/markdown-yaml.js b/packages/challenge-linter/src/linter/markdown-yaml.js index 22bc3303d33..0589f758647 100644 --- a/packages/challenge-linter/src/linter/markdown-yaml.js +++ b/packages/challenge-linter/src/linter/markdown-yaml.js @@ -3,8 +3,9 @@ import jsYaml from 'js-yaml'; export const names = ['yaml-linter']; export const description = 'YAML code blocks should be valid'; export const tags = ['yaml']; +export const parser = 'markdownit'; function rule(params, onError) { - params.tokens + params.parsers.markdownit.tokens .filter(param => param.type === 'fence') .filter(param => param.info === 'yml' || param.info === 'yaml') // TODO since the parser only looks for yml, should we reject yaml blocks? diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f77dbc1e90b..b704f61dad1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,11 +36,11 @@ importers: specifier: 6.9.1 version: 6.9.1(vitest@4.0.15) '@types/lodash': - specifier: 4.14.202 - version: 4.14.202 + specifier: 4.17.24 + version: 4.17.24 '@types/node': specifier: ^24.10.8 - version: 24.10.8 + version: 24.12.2 debug: specifier: 4.4.3 version: 4.4.3(supports-color@8.1.1) @@ -66,8 +66,8 @@ importers: specifier: 5.0.2 version: 5.0.2 prettier: - specifier: 3.2.5 - version: 3.2.5 + specifier: 3.8.2 + version: 3.8.2 stylelint: specifier: 16.24.0 version: 16.24.0(typescript@5.9.3) @@ -206,7 +206,7 @@ importers: version: 4.17.12 '@types/node': specifier: ^24.10.8 - version: 24.10.8 + version: 24.12.2 '@types/nodemailer': specifier: 6.4.23 version: 6.4.23 @@ -230,7 +230,7 @@ importers: version: 48.11.0(eslint@9.39.1(jiti@2.6.1)) msw: specifier: ^2.12.10 - version: 2.13.2(@types/node@24.10.8)(typescript@5.9.3) + version: 2.13.2(@types/node@24.12.2)(typescript@5.9.3) prisma: specifier: 6.19.3 version: 6.19.3(typescript@5.9.3) @@ -245,7 +245,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.15 - version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@24.10.8)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@24.12.2)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) client: dependencies: @@ -290,7 +290,7 @@ importers: version: link:../packages/challenge-builder '@freecodecamp/ui': specifier: 6.0.0 - version: 6.0.0(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 6.0.0(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@gatsbyjs/reach-router': specifier: 1.3.9 version: 1.3.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -311,7 +311,7 @@ importers: version: 1.4.2 '@reduxjs/toolkit': specifier: 2.8.2 - version: 2.8.2(react-redux@8.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1))(react@18.3.1) + version: 2.8.2(react-redux@8.1.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1))(react@18.3.1) '@stripe/react-stripe-js': specifier: 1.16.5 version: 1.16.5(@stripe/stripe-js@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -464,10 +464,10 @@ importers: version: 7.13.6(algoliasearch@4.27.0)(react@18.3.1) react-monaco-editor: specifier: 0.48.0 - version: 0.48.0(@types/react@18.2.79)(monaco-editor@0.33.0)(react@18.3.1) + version: 0.48.0(@types/react@18.3.28)(monaco-editor@0.33.0)(react@18.3.1) react-redux: specifier: 8.1.3 - version: 8.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1) + version: 8.1.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1) react-reflex: specifier: 4.2.7 version: 4.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -555,7 +555,7 @@ importers: version: 6.9.1(vitest@4.0.15) '@testing-library/react': specifier: 14.3.1 - version: 14.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 14.3.1(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@testing-library/user-event': specifier: 14.6.1 version: 14.6.1(@testing-library/dom@10.4.1) @@ -569,32 +569,32 @@ importers: specifier: 1.3.0 version: 1.3.0 '@types/js-yaml': - specifier: 4.0.5 - version: 4.0.5 + specifier: 4.0.9 + version: 4.0.9 '@types/loadable__component': - specifier: 5.13.8 - version: 5.13.8 + specifier: 5.13.10 + version: 5.13.10 '@types/lodash-es': specifier: ^4.17.6 version: 4.17.12 '@types/prismjs': specifier: ^1.26.0 - version: 1.26.5 + version: 1.26.6 '@types/react': - specifier: 18.2.79 - version: 18.2.79 + specifier: 18.3.28 + version: 18.3.28 '@types/react-dom': - specifier: 18.2.25 - version: 18.2.25 + specifier: 18.3.7 + version: 18.3.7(@types/react@18.3.28) '@types/react-gtm-module': - specifier: 2.0.3 - version: 2.0.3 + specifier: 2.0.4 + version: 2.0.4 '@types/react-helmet': specifier: 6.1.11 version: 6.1.11 '@types/react-redux': - specifier: 7.1.33 - version: 7.1.33 + specifier: 7.1.34 + version: 7.1.34 '@types/react-scroll': specifier: 1.8.10 version: 1.8.10 @@ -605,14 +605,14 @@ importers: specifier: 16.9.12 version: 16.9.12 '@types/react-transition-group': - specifier: 4.4.10 - version: 4.4.10 + specifier: 4.4.12 + version: 4.4.12(@types/react@18.3.28) '@types/redux-actions': specifier: 2.6.5 version: 2.6.5 '@types/sanitize-html': specifier: ^2.8.0 - version: 2.16.0 + version: 2.16.1 '@types/store': specifier: ^2.0.2 version: 2.0.5 @@ -675,7 +675,7 @@ importers: version: 13.0.4 vitest: specifier: ^4.0.15 - version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.5.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@25.6.0)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.6.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) webpack: specifier: 5.106.1 version: 5.106.1(webpack-cli@4.10.0) @@ -683,8 +683,8 @@ importers: curriculum: dependencies: '@types/node': - specifier: 24.10.8 - version: 24.10.8 + specifier: 24.12.2 + version: 24.12.2 devDependencies: '@babel/core': specifier: 7.23.7 @@ -711,14 +711,14 @@ importers: specifier: 0.6.1 version: 0.6.1 '@types/debug': - specifier: 4.1.12 - version: 4.1.12 + specifier: 4.1.13 + version: 4.1.13 '@types/js-yaml': - specifier: 4.0.5 - version: 4.0.5 + specifier: 4.0.9 + version: 4.0.9 '@types/polka': - specifier: 0.5.7 - version: 0.5.7 + specifier: 0.5.8 + version: 0.5.8 '@typescript/vfs-1.6.1': specifier: npm:@typescript/vfs@1.6.4 version: '@typescript/vfs@1.6.4(typescript@5.9.3)' @@ -769,7 +769,7 @@ importers: version: typescript@5.9.2 vitest: specifier: 4.0.15 - version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@16.7.0)(msw@2.13.2(@types/node@24.10.8)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@16.7.0)(msw@2.13.2(@types/node@24.12.2)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) e2e: devDependencies: @@ -824,16 +824,20 @@ importers: version: 9.39.1(jiti@2.6.1) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@25.5.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.5.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.6.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) packages/challenge-linter: + dependencies: + markdown-it: + specifier: ^14.1.1 + version: 14.1.1 devDependencies: '@freecodecamp/eslint-config': specifier: workspace:* version: link:../eslint-config '@types/js-yaml': - specifier: 4.0.5 - version: 4.0.5 + specifier: 4.0.9 + version: 4.0.9 '@types/yargs': specifier: 17.0.35 version: 17.0.35 @@ -844,8 +848,8 @@ importers: specifier: 9.39.1 version: 9.39.1(jiti@2.6.1) markdownlint: - specifier: 0.33.0 - version: 0.33.0 + specifier: 0.40.0 + version: 0.40.0 prismjs: specifier: 1.30.0 version: 1.30.0 @@ -854,7 +858,7 @@ importers: version: 5.9.3 vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@25.5.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.5.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.6.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) yargs: specifier: 17.7.2 version: 17.7.2 @@ -941,7 +945,7 @@ importers: version: 0.16.8(typescript@5.9.3) vitest: specifier: ^4.0.15 - version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.5.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@25.6.0)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.6.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) tools/challenge-helper-scripts: devDependencies: @@ -956,7 +960,7 @@ importers: version: link:../../packages/shared '@inquirer/prompts': specifier: ^7.8.3 - version: 7.10.1(@types/node@25.5.0) + version: 7.10.1(@types/node@25.6.0) '@total-typescript/ts-reset': specifier: ^0.6.1 version: 0.6.1 @@ -973,14 +977,14 @@ importers: specifier: 4.0.3 version: 4.0.3 prettier: - specifier: 3.2.5 - version: 3.2.5 + specifier: 3.8.2 + version: 3.8.2 typescript: specifier: 5.9.3 version: 5.9.3 vitest: specifier: ^4.0.15 - version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.5.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@25.6.0)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.6.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) tools/challenge-parser: dependencies: @@ -1089,7 +1093,7 @@ importers: version: 3.0.4 vitest: specifier: ^4.0.15 - version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.5.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@25.6.0)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.6.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) tools/client-plugins/browser-scripts: dependencies: @@ -4545,8 +4549,8 @@ packages: '@types/css-tree@2.3.11': resolution: {integrity: sha512-aEokibJOI77uIlqoBOkVbaQGC9zII0A+JH1kcTNKW2CwyYWD8KM6qdo+4c77wD3wZOQfJuNWAr9M4hdk+YhDIg==} - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -4599,8 +4603,8 @@ packages: '@types/jquery@3.5.32': resolution: {integrity: sha512-b9Xbf4CkMqS02YH8zACqN1xzdxc3cO735Qe5AbSUFmyOiaWAbcpqh9Wna+Uk0vgACvoQHpWDg2rGdHkYPLmCiQ==} - '@types/js-yaml@4.0.5': - resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==} + '@types/js-yaml@4.0.9': + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -4611,17 +4615,20 @@ packages: '@types/jsonwebtoken@9.0.5': resolution: {integrity: sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==} + '@types/katex@0.16.8': + resolution: {integrity: sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==} + '@types/keyv@3.1.4': resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - '@types/loadable__component@5.13.8': - resolution: {integrity: sha512-0FF/WihuPkR5IFOHiBzC95bSACvgQNUQCuNy1WF8F/lCBBHgS2SxarIk4CTjWM10A72ovpmXZDRcuAXZNS+/kQ==} + '@types/loadable__component@5.13.10': + resolution: {integrity: sha512-2/LjmgG1JcGPj7T3NViq7BB5cvOA0s63gL3Gv+FPULj2L+3ExWfsNQcsFPUIOoGsVUJeZxgNPf320JZDyxjtCQ==} '@types/lodash-es@4.17.12': resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} - '@types/lodash@4.14.202': - resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} + '@types/lodash@4.17.24': + resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==} '@types/mdast@3.0.13': resolution: {integrity: sha512-HjiGiWedR0DVFkeNljpa6Lv4/IZU1+30VY5d747K7lBudFc3R0Ibr6yJ9lN3BE28VnZyDfLF/VB1Ql1ZIbKrmg==} @@ -4638,11 +4645,11 @@ packages: '@types/mysql@2.15.26': resolution: {integrity: sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==} - '@types/node@24.10.8': - resolution: {integrity: sha512-r0bBaXu5Swb05doFYO2kTWHMovJnNVbCsII0fhesM8bNRlLhXIuckley4a2DaD+vOdmm5G+zGkQZAPZsF80+YQ==} + '@types/node@24.12.2': + resolution: {integrity: sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==} - '@types/node@25.5.0': - resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==} + '@types/node@25.6.0': + resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} '@types/nodemailer@6.4.23': resolution: {integrity: sha512-aFV3/NsYFLSx9mbb5gtirBSXJnAlrusoKNuPbxsASWc7vrKLmIrTQRpdcxNcSFL3VW2A2XpeLEavwb2qMi6nlQ==} @@ -4662,11 +4669,11 @@ packages: '@types/pg@8.6.1': resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==} - '@types/polka@0.5.7': - resolution: {integrity: sha512-TH8CDXM8zoskPCNmWabtK7ziGv9Q21s4hMZLVYK5HFEfqmGXBqq/Wgi7jNELWXftZK/1J/9CezYa06x1RKeQ+g==} + '@types/polka@0.5.8': + resolution: {integrity: sha512-lOIyhDZnOr6g3ri0nkwQduSieYumoXHVHMMGD1cVGMQMkT3pGBHnUlOUNim26Czn5fXwlN9Ssgbys/66SKngKw==} - '@types/prismjs@1.26.5': - resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} + '@types/prismjs@1.26.6': + resolution: {integrity: sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==} '@types/prop-types@15.7.8': resolution: {integrity: sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ==} @@ -4680,22 +4687,24 @@ packages: '@types/reach__router@1.3.15': resolution: {integrity: sha512-5WEHKGglRjq/Ae3F8UQxg+GYUIhTUEiyBT9GKPoOLU/vPTn8iZrRbdzxqvarOaGludIejJykHLMdOCdhgWqaxA==} - '@types/react-dom@18.2.25': - resolution: {integrity: sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA==} + '@types/react-dom@18.3.7': + resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==} + peerDependencies: + '@types/react': ^18.0.0 '@types/react-dom@19.1.6': resolution: {integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==} peerDependencies: '@types/react': ^19.0.0 - '@types/react-gtm-module@2.0.3': - resolution: {integrity: sha512-fL2zKdDFN5LckSsVBXEhhm9M4tFTM9oHJfGcfZJzktQkzpOTGtDM8oXIP9d9UBDxO4xLNZhS22dlgRVv6wgK9w==} + '@types/react-gtm-module@2.0.4': + resolution: {integrity: sha512-5wPMWsUE5AI6O0B0K1/zbs0rFHBKu+7NWXQwDXhqvA12ooLD6W1AYiWZqR4UiOd7ixZDV1H5Ys301zEsqyIfNg==} '@types/react-helmet@6.1.11': resolution: {integrity: sha512-0QcdGLddTERotCXo3VFlUSWO3ztraw8nZ6e3zJSgG7apwV5xt+pJUS8ewPBqT4NYB1optGLprNQzFleIY84u/g==} - '@types/react-redux@7.1.33': - resolution: {integrity: sha512-NF8m5AjWCkert+fosDsN3hAlHzpjSiXlVy9EgQEmLoBhaNXbmyeGs/aj5dQzKuF+/q+S7JQagorGDW8pJ28Hmg==} + '@types/react-redux@7.1.34': + resolution: {integrity: sha512-GdFaVjEbYv4Fthm2ZLvj1VSCedV7TqE5y1kNwnjSdBOTXuRSgowux6J8TAct15T3CKBr63UMk+2CO7ilRhyrAQ==} '@types/react-scroll@1.8.10': resolution: {integrity: sha512-RD4Z7grbdNGOKwKnUBKar6zNxqaW3n8m9QSrfvljW+gmkj1GArb8AFBomVr6xMOgHPD3v1uV3BrIf01py57daQ==} @@ -4709,14 +4718,16 @@ packages: '@types/react-test-renderer@16.9.12': resolution: {integrity: sha512-RJ4jeg32v2h1izOZ3gES/zQhQOwi6BEnZW890pmAuf3yVSfDm0wOR42YiWFiuSJJRyRykNaXEzis74+y3Ac9HQ==} - '@types/react-transition-group@4.4.10': - resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} + '@types/react-transition-group@4.4.12': + resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} + peerDependencies: + '@types/react': '*' '@types/react@16.14.56': resolution: {integrity: sha512-MxuHB7dvVm5yOxRr7hJoonLG0JY8YvqZtaQ9Quirp3Oe4FLFjAgxkxsKE6IspdHPpRVZKo2ZoDEravWO81EeYA==} - '@types/react@18.2.79': - resolution: {integrity: sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==} + '@types/react@18.3.28': + resolution: {integrity: sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==} '@types/react@19.1.8': resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==} @@ -4727,8 +4738,8 @@ packages: '@types/responselike@1.0.1': resolution: {integrity: sha512-TiGnitEDxj2X0j+98Eqk5lv/Cij8oHd32bU4D/Yw6AOq7vvTk0gSD2GPj0G/HkvhMoVsdlhYF4yqqlyPBTM6Sg==} - '@types/sanitize-html@2.16.0': - resolution: {integrity: sha512-l6rX1MUXje5ztPT0cAFtUayXF06DqPhRyfVXareEN5gGCFaP/iwsxIyKODr9XDhfxPpN6vXUFNfo5kZMXCxBtw==} + '@types/sanitize-html@2.16.1': + resolution: {integrity: sha512-n9wjs8bCOTyN/ynwD8s/nTcTreIHB1vf31vhLMGqUPNHaweKC4/fAl4Dj+hUlCTKYgm4P3k83fmiFfzkZ6sgMA==} '@types/scheduler@0.16.4': resolution: {integrity: sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==} @@ -6000,6 +6011,9 @@ packages: character-entities-legacy@1.1.4: resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + character-entities@1.2.4: resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} @@ -6009,6 +6023,9 @@ packages: character-reference-invalid@1.1.4: resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} @@ -6187,6 +6204,10 @@ packages: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + comment-parser@1.4.1: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} @@ -6472,8 +6493,8 @@ packages: resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==} engines: {node: '>=18'} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} cwd@0.10.0: resolution: {integrity: sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==} @@ -6765,8 +6786,8 @@ packages: domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} @@ -6890,6 +6911,10 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -8143,6 +8168,9 @@ packages: resolution: {integrity: sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==} engines: {node: '>=0.10'} + htmlparser2@10.1.0: + resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} + htmlparser2@6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} @@ -8370,9 +8398,15 @@ packages: is-alphabetical@1.0.4: resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + is-alphanumerical@1.0.4: resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} @@ -8440,6 +8474,9 @@ packages: is-decimal@1.0.4: resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} @@ -8489,6 +8526,9 @@ packages: is-hexadecimal@1.0.4: resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} @@ -8815,6 +8855,10 @@ packages: jws@4.0.1: resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} + katex@0.16.45: + resolution: {integrity: sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA==} + hasBin: true + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -9093,20 +9137,16 @@ packages: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} engines: {node: '>=0.10.0'} - markdown-it@14.0.0: - resolution: {integrity: sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==} + markdown-it@14.1.1: + resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==} hasBin: true markdown-table@2.0.0: resolution: {integrity: sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==} - markdownlint-micromark@0.1.8: - resolution: {integrity: sha512-1ouYkMRo9/6gou9gObuMDnvZM8jC/ly3QCFQyoSPCS2XV1ZClU0xpKbL1Ar3bWWRT1RnBZkWUEiNKrI2CwiBQA==} - engines: {node: '>=16'} - - markdownlint@0.33.0: - resolution: {integrity: sha512-4lbtT14A3m0LPX1WS/3d1m7Blg+ZwiLq36WvjQqFGsX3Gik99NV+VXp/PW3n+Q62xyPdbvGOCfjPqjW+/SKMig==} - engines: {node: '>=18'} + markdownlint@0.40.0: + resolution: {integrity: sha512-UKybllYNheWac61Ia7T6fzuQNDZimFIpCg2w6hHjgV1Qu0w1TV0LlSgryUGzM0bkKQCBhy2FDhEELB73Kb0kAg==} + engines: {node: '>=20'} matchit@1.1.0: resolution: {integrity: sha512-+nGYoOlfHmxe5BW5tE0EMJppXEwdSf8uBA1GTZC7Q77kbT35+VKLYJMzVNWCHSsga1ps1tPYFtFyvxvKzWVmMA==} @@ -9240,12 +9280,15 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - micromark-core-commonmark@2.0.0: - resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==} + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} micromark-extension-directive@1.4.0: resolution: {integrity: sha512-8uJN4N2hfhxc0I2Mdya+HZ35D0fyBnHn66aVnHawLj0Nd22Poqgqw3N0vTdYOsNwwrshfMLlPDKtLfEeq4lxgw==} + micromark-extension-directive@4.0.0: + resolution: {integrity: sha512-/C2nqVmXXmiseSSuCdItCMho7ybwwop6RrrRPk0KbOHW21JKoCldC+8rFOaundDoRBUWBnJJcxeA/Kvi34WQXg==} + micromark-extension-footnote@0.3.2: resolution: {integrity: sha512-gr/BeIxbIWQoUm02cIfK7mdMZ/fbroRpLsck4kvFtjbzP4yi+OPVbnukTc/zy0i7spC2xYE/dbX1Sur8BEDJsQ==} @@ -9255,12 +9298,21 @@ packages: micromark-extension-gfm-autolink-literal@0.5.7: resolution: {integrity: sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==} + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + micromark-extension-gfm-strikethrough@0.6.5: resolution: {integrity: sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==} micromark-extension-gfm-table@0.4.3: resolution: {integrity: sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==} + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + micromark-extension-gfm-tagfilter@0.3.0: resolution: {integrity: sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==} @@ -9270,6 +9322,9 @@ packages: micromark-extension-gfm@0.3.3: resolution: {integrity: sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==} + micromark-extension-math@3.1.0: + resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} + micromark-factory-destination@2.0.0: resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} @@ -9321,8 +9376,8 @@ packages: micromark-util-symbol@2.0.0: resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} - micromark-util-types@2.0.0: - resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} micromark@2.11.4: resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} @@ -9945,6 +10000,9 @@ packages: parse-entities@2.0.0: resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + parse-filepath@1.0.2: resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} engines: {node: '>=0.8'} @@ -10434,8 +10492,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + prettier@3.8.2: + resolution: {integrity: sha512-8c3mgTe0ASwWAJK+78dpviD+A8EqhndQPUBpNUIPt6+xWlIigCwfN01lWr9MAede4uqXGTEKeQWTvzb3vjia0Q==} engines: {node: '>=14'} hasBin: true @@ -11639,6 +11697,10 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + string-width@8.1.0: + resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==} + engines: {node: '>=20'} + string-width@8.2.0: resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} engines: {node: '>=20'} @@ -12198,8 +12260,8 @@ packages: resolution: {integrity: sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==} hasBin: true - uc.micro@2.0.0: - resolution: {integrity: sha512-DffL94LsNOccVn4hyfRe5rdKa273swqeA5DJpMOeFmEn1wCDc7nAbbB0gXlgBCL7TNzeTv6G7XVWzan7iJtfig==} + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} umd@3.0.3: resolution: {integrity: sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==} @@ -12229,8 +12291,8 @@ packages: undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - undici-types@7.18.2: - resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + undici-types@7.19.2: + resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} unherit@1.1.3: resolution: {integrity: sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==} @@ -15736,13 +15798,13 @@ snapshots: '@freecodecamp/loop-protect@3.0.0': {} - '@freecodecamp/ui@6.0.0(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@freecodecamp/ui@6.0.0(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@fortawesome/fontawesome-svg-core': 7.2.0 '@fortawesome/free-solid-svg-icons': 7.2.0 '@fortawesome/react-fontawesome': 3.3.0(@fortawesome/fontawesome-svg-core@7.2.0)(react@18.3.1) '@headlessui/react': 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-tabs': 1.1.13(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) babel-plugin-prismjs: 2.1.0(prismjs@1.30.0) prismjs: 1.30.0 react: 18.3.1 @@ -16030,152 +16092,152 @@ snapshots: '@inquirer/ansi@1.0.2': {} - '@inquirer/checkbox@4.3.2(@types/node@25.5.0)': + '@inquirer/checkbox@4.3.2(@types/node@25.6.0)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.5.0) + '@inquirer/core': 10.3.2(@types/node@25.6.0) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.5.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.5.0 + '@types/node': 25.6.0 - '@inquirer/confirm@5.1.21(@types/node@24.10.8)': + '@inquirer/confirm@5.1.21(@types/node@24.12.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.8) - '@inquirer/type': 3.0.10(@types/node@24.10.8) + '@inquirer/core': 10.3.2(@types/node@24.12.2) + '@inquirer/type': 3.0.10(@types/node@24.12.2) optionalDependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 - '@inquirer/confirm@5.1.21(@types/node@25.5.0)': + '@inquirer/confirm@5.1.21(@types/node@25.6.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.5.0) - '@inquirer/type': 3.0.10(@types/node@25.5.0) + '@inquirer/core': 10.3.2(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.5.0 + '@types/node': 25.6.0 - '@inquirer/core@10.3.2(@types/node@24.10.8)': + '@inquirer/core@10.3.2(@types/node@24.12.2)': dependencies: '@inquirer/ansi': 1.0.2 '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.10.8) + '@inquirer/type': 3.0.10(@types/node@24.12.2) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 - '@inquirer/core@10.3.2(@types/node@25.5.0)': + '@inquirer/core@10.3.2(@types/node@25.6.0)': dependencies: '@inquirer/ansi': 1.0.2 '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.5.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.5.0 + '@types/node': 25.6.0 - '@inquirer/editor@4.2.23(@types/node@25.5.0)': + '@inquirer/editor@4.2.23(@types/node@25.6.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.5.0) - '@inquirer/external-editor': 1.0.3(@types/node@25.5.0) - '@inquirer/type': 3.0.10(@types/node@25.5.0) + '@inquirer/core': 10.3.2(@types/node@25.6.0) + '@inquirer/external-editor': 1.0.3(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.5.0 + '@types/node': 25.6.0 - '@inquirer/expand@4.0.23(@types/node@25.5.0)': + '@inquirer/expand@4.0.23(@types/node@25.6.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.5.0) - '@inquirer/type': 3.0.10(@types/node@25.5.0) + '@inquirer/core': 10.3.2(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.5.0 + '@types/node': 25.6.0 - '@inquirer/external-editor@1.0.3(@types/node@25.5.0)': + '@inquirer/external-editor@1.0.3(@types/node@25.6.0)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 25.5.0 + '@types/node': 25.6.0 '@inquirer/figures@1.0.15': {} - '@inquirer/input@4.3.1(@types/node@25.5.0)': + '@inquirer/input@4.3.1(@types/node@25.6.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.5.0) - '@inquirer/type': 3.0.10(@types/node@25.5.0) + '@inquirer/core': 10.3.2(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.5.0 + '@types/node': 25.6.0 - '@inquirer/number@3.0.23(@types/node@25.5.0)': + '@inquirer/number@3.0.23(@types/node@25.6.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.5.0) - '@inquirer/type': 3.0.10(@types/node@25.5.0) + '@inquirer/core': 10.3.2(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.5.0 + '@types/node': 25.6.0 - '@inquirer/password@4.0.23(@types/node@25.5.0)': + '@inquirer/password@4.0.23(@types/node@25.6.0)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.5.0) - '@inquirer/type': 3.0.10(@types/node@25.5.0) + '@inquirer/core': 10.3.2(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.5.0 + '@types/node': 25.6.0 - '@inquirer/prompts@7.10.1(@types/node@25.5.0)': + '@inquirer/prompts@7.10.1(@types/node@25.6.0)': dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@25.5.0) - '@inquirer/confirm': 5.1.21(@types/node@25.5.0) - '@inquirer/editor': 4.2.23(@types/node@25.5.0) - '@inquirer/expand': 4.0.23(@types/node@25.5.0) - '@inquirer/input': 4.3.1(@types/node@25.5.0) - '@inquirer/number': 3.0.23(@types/node@25.5.0) - '@inquirer/password': 4.0.23(@types/node@25.5.0) - '@inquirer/rawlist': 4.1.11(@types/node@25.5.0) - '@inquirer/search': 3.2.2(@types/node@25.5.0) - '@inquirer/select': 4.4.2(@types/node@25.5.0) + '@inquirer/checkbox': 4.3.2(@types/node@25.6.0) + '@inquirer/confirm': 5.1.21(@types/node@25.6.0) + '@inquirer/editor': 4.2.23(@types/node@25.6.0) + '@inquirer/expand': 4.0.23(@types/node@25.6.0) + '@inquirer/input': 4.3.1(@types/node@25.6.0) + '@inquirer/number': 3.0.23(@types/node@25.6.0) + '@inquirer/password': 4.0.23(@types/node@25.6.0) + '@inquirer/rawlist': 4.1.11(@types/node@25.6.0) + '@inquirer/search': 3.2.2(@types/node@25.6.0) + '@inquirer/select': 4.4.2(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.5.0 + '@types/node': 25.6.0 - '@inquirer/rawlist@4.1.11(@types/node@25.5.0)': + '@inquirer/rawlist@4.1.11(@types/node@25.6.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.5.0) - '@inquirer/type': 3.0.10(@types/node@25.5.0) + '@inquirer/core': 10.3.2(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.5.0 + '@types/node': 25.6.0 - '@inquirer/search@3.2.2(@types/node@25.5.0)': + '@inquirer/search@3.2.2(@types/node@25.6.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.5.0) + '@inquirer/core': 10.3.2(@types/node@25.6.0) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.5.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.5.0 + '@types/node': 25.6.0 - '@inquirer/select@4.4.2(@types/node@25.5.0)': + '@inquirer/select@4.4.2(@types/node@25.6.0)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.5.0) + '@inquirer/core': 10.3.2(@types/node@25.6.0) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.5.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.5.0 + '@types/node': 25.6.0 - '@inquirer/type@3.0.10(@types/node@24.10.8)': + '@inquirer/type@3.0.10(@types/node@24.12.2)': optionalDependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 - '@inquirer/type@3.0.10(@types/node@25.5.0)': + '@inquirer/type@3.0.10(@types/node@25.6.0)': optionalDependencies: - '@types/node': 25.5.0 + '@types/node': 25.6.0 '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -17020,128 +17082,128 @@ snapshots: '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-collection@1.1.7(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.79)(react@18.3.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.2.79)(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.2.79)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.28)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.28)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.28)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 + '@types/react': 18.3.28 + '@types/react-dom': 18.3.7(@types/react@18.3.28) - '@radix-ui/react-compose-refs@1.1.2(@types/react@18.2.79)(react@18.3.1)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.28)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.2.79 + '@types/react': 18.3.28 - '@radix-ui/react-context@1.1.2(@types/react@18.2.79)(react@18.3.1)': + '@radix-ui/react-context@1.1.2(@types/react@18.3.28)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.2.79 + '@types/react': 18.3.28 - '@radix-ui/react-direction@1.1.1(@types/react@18.2.79)(react@18.3.1)': + '@radix-ui/react-direction@1.1.1(@types/react@18.3.28)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.2.79 + '@types/react': 18.3.28 - '@radix-ui/react-id@1.1.1(@types/react@18.2.79)(react@18.3.1)': + '@radix-ui/react-id@1.1.1(@types/react@18.3.28)(react@18.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.2.79)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.28)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.2.79 + '@types/react': 18.3.28 - '@radix-ui/react-presence@1.1.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.79)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.2.79)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.28)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.28)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 + '@types/react': 18.3.28 + '@types/react-dom': 18.3.7(@types/react@18.3.28) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@18.2.79)(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.28)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 + '@types/react': 18.3.28 + '@types/react-dom': 18.3.7(@types/react@18.3.28) - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.79)(react@18.3.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.2.79)(react@18.3.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.2.79)(react@18.3.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.2.79)(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.2.79)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.79)(react@18.3.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.28)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.28)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.28)(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.28)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.28)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.28)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 + '@types/react': 18.3.28 + '@types/react-dom': 18.3.7(@types/react@18.3.28) - '@radix-ui/react-slot@1.2.3(@types/react@18.2.79)(react@18.3.1)': + '@radix-ui/react-slot@1.2.3(@types/react@18.3.28)(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.79)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.28)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.2.79 + '@types/react': 18.3.28 - '@radix-ui/react-tabs@1.1.13(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-tabs@1.1.13(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@18.2.79)(react@18.3.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.2.79)(react@18.3.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.2.79)(react@18.3.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.79)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.28)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.28)(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.28)(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.28)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 + '@types/react': 18.3.28 + '@types/react-dom': 18.3.7(@types/react@18.3.28) - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.2.79)(react@18.3.1)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.3.28)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.2.79 + '@types/react': 18.3.28 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.2.79)(react@18.3.1)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.3.28)(react@18.3.1)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.2.79)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.2.79)(react@18.3.1) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.28)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.28)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.2.79 + '@types/react': 18.3.28 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@18.2.79)(react@18.3.1)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@18.3.28)(react@18.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.2.79)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.28)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.2.79 + '@types/react': 18.3.28 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.2.79)(react@18.3.1)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.3.28)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.2.79 + '@types/react': 18.3.28 '@react-hook/intersection-observer@3.1.2(react@18.3.1)': dependencies: @@ -17184,7 +17246,7 @@ snapshots: '@redux-saga/types@1.3.1': {} - '@reduxjs/toolkit@2.8.2(react-redux@8.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1))(react@18.3.1)': + '@reduxjs/toolkit@2.8.2(react-redux@8.1.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1))(react@18.3.1)': dependencies: '@standard-schema/spec': 1.1.0 '@standard-schema/utils': 0.3.0 @@ -17194,7 +17256,7 @@ snapshots: reselect: 5.1.1 optionalDependencies: react: 18.3.1 - react-redux: 8.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1) + react-redux: 8.1.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1) '@rolldown/binding-android-arm64@1.0.0-beta.52': optional: true @@ -17820,15 +17882,17 @@ snapshots: dom-accessibility-api: 0.6.3 picocolors: 1.1.1 redent: 3.0.0 - vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@24.10.8)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@24.12.2)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - '@testing-library/react@14.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react@14.3.1(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.29.2 '@testing-library/dom': 9.3.4 - '@types/react-dom': 18.2.25 + '@types/react-dom': 18.3.7(@types/react@18.3.28) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@types/react' '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': dependencies: @@ -17900,13 +17964,13 @@ snapshots: '@types/body-parser@1.19.3': dependencies: '@types/connect': 3.4.38 - '@types/node': 24.10.8 + '@types/node': 24.12.2 '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.2 '@types/keyv': 3.1.4 - '@types/node': 24.10.8 + '@types/node': 24.12.2 '@types/responselike': 1.0.1 '@types/canvas-confetti@1.9.0': {} @@ -17920,17 +17984,17 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 '@types/cookiejar@2.1.2': {} '@types/cors@2.8.18': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 '@types/css-tree@2.3.11': {} - '@types/debug@4.1.12': + '@types/debug@4.1.13': dependencies: '@types/ms': 0.7.32 @@ -17957,7 +18021,7 @@ snapshots: '@types/express-serve-static-core@4.17.37': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 '@types/qs': 6.9.8 '@types/range-parser': 1.2.5 '@types/send': 0.17.2 @@ -17983,7 +18047,7 @@ snapshots: '@types/hoist-non-react-statics@3.3.2': dependencies: - '@types/react': 18.2.79 + '@types/react': 18.3.28 hoist-non-react-statics: 3.3.2 '@types/http-cache-semantics@4.0.2': {} @@ -17992,13 +18056,13 @@ snapshots: '@types/http-proxy@1.17.12': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 '@types/jquery@3.5.32': dependencies: '@types/sizzle': 2.3.4 - '@types/js-yaml@4.0.5': {} + '@types/js-yaml@4.0.9': {} '@types/json-schema@7.0.15': {} @@ -18006,21 +18070,23 @@ snapshots: '@types/jsonwebtoken@9.0.5': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 + + '@types/katex@0.16.8': {} '@types/keyv@3.1.4': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 - '@types/loadable__component@5.13.8': + '@types/loadable__component@5.13.10': dependencies: - '@types/react': 18.2.79 + '@types/react': 18.3.28 '@types/lodash-es@4.17.12': dependencies: - '@types/lodash': 4.14.202 + '@types/lodash': 4.17.24 - '@types/lodash@4.14.202': {} + '@types/lodash@4.17.24': {} '@types/mdast@3.0.13': dependencies: @@ -18034,20 +18100,20 @@ snapshots: '@types/mysql@2.15.26': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 - '@types/node@24.10.8': + '@types/node@24.12.2': dependencies: undici-types: 7.16.0 - '@types/node@25.5.0': + '@types/node@25.6.0': dependencies: - undici-types: 7.18.2 + undici-types: 7.19.2 optional: true '@types/nodemailer@6.4.23': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 '@types/normalize-package-data@2.4.2': {} @@ -18061,18 +18127,18 @@ snapshots: '@types/pg@8.6.1': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 pg-protocol: 1.8.0 pg-types: 2.2.0 - '@types/polka@0.5.7': + '@types/polka@0.5.8': dependencies: '@types/express': 4.17.21 '@types/express-serve-static-core': 4.17.37 - '@types/node': 24.10.8 + '@types/node': 24.12.2 '@types/trouter': 3.1.4 - '@types/prismjs@1.26.5': {} + '@types/prismjs@1.26.6': {} '@types/prop-types@15.7.8': {} @@ -18082,32 +18148,32 @@ snapshots: '@types/reach__router@1.3.15': dependencies: - '@types/react': 18.2.79 + '@types/react': 18.3.28 - '@types/react-dom@18.2.25': + '@types/react-dom@18.3.7(@types/react@18.3.28)': dependencies: - '@types/react': 18.2.79 + '@types/react': 18.3.28 '@types/react-dom@19.1.6(@types/react@19.1.8)': dependencies: '@types/react': 19.1.8 - '@types/react-gtm-module@2.0.3': {} + '@types/react-gtm-module@2.0.4': {} '@types/react-helmet@6.1.11': dependencies: - '@types/react': 18.2.79 + '@types/react': 18.3.28 - '@types/react-redux@7.1.33': + '@types/react-redux@7.1.34': dependencies: '@types/hoist-non-react-statics': 3.3.2 - '@types/react': 18.2.79 + '@types/react': 18.3.28 hoist-non-react-statics: 3.3.2 redux: 4.2.1 '@types/react-scroll@1.8.10': dependencies: - '@types/react': 18.2.79 + '@types/react': 18.3.28 '@types/react-speech-recognition@3.9.6': dependencies: @@ -18115,40 +18181,40 @@ snapshots: '@types/react-spinkit@3.0.10': dependencies: - '@types/react': 18.2.79 + '@types/react': 18.3.28 '@types/react-test-renderer@16.9.12': dependencies: '@types/react': 16.14.56 - '@types/react-transition-group@4.4.10': + '@types/react-transition-group@4.4.12(@types/react@18.3.28)': dependencies: - '@types/react': 18.2.79 + '@types/react': 18.3.28 '@types/react@16.14.56': dependencies: '@types/prop-types': 15.7.8 '@types/scheduler': 0.16.4 - csstype: 3.1.3 + csstype: 3.2.3 - '@types/react@18.2.79': + '@types/react@18.3.28': dependencies: '@types/prop-types': 15.7.8 - csstype: 3.1.3 + csstype: 3.2.3 '@types/react@19.1.8': dependencies: - csstype: 3.1.3 + csstype: 3.2.3 '@types/redux-actions@2.6.5': {} '@types/responselike@1.0.1': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 - '@types/sanitize-html@2.16.0': + '@types/sanitize-html@2.16.1': dependencies: - htmlparser2: 8.0.2 + htmlparser2: 10.1.0 '@types/scheduler@0.16.4': {} @@ -18157,13 +18223,13 @@ snapshots: '@types/send@0.17.2': dependencies: '@types/mime': 1.3.3 - '@types/node': 24.10.8 + '@types/node': 24.12.2 '@types/serve-static@1.15.3': dependencies: '@types/http-errors': 2.0.2 '@types/mime': 3.0.2 - '@types/node': 24.10.8 + '@types/node': 24.12.2 '@types/shimmer@1.2.0': {} @@ -18178,7 +18244,7 @@ snapshots: '@types/superagent@4.1.19': dependencies: '@types/cookiejar': 2.1.2 - '@types/node': 24.10.8 + '@types/node': 24.12.2 '@types/supertest@2.0.16': dependencies: @@ -18186,7 +18252,7 @@ snapshots: '@types/tedious@4.0.14': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 '@types/trouter@3.1.4': {} @@ -18204,7 +18270,7 @@ snapshots: '@types/vfile@3.0.2': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 '@types/unist': 3.0.0 '@types/vfile-message': 2.0.0 @@ -18222,7 +18288,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 optional: true '@types/yoga-layout@1.9.2': {} @@ -18485,7 +18551,7 @@ snapshots: eslint: 9.39.1(jiti@2.6.1) optionalDependencies: typescript: 5.9.3 - vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.5.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@25.6.0)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.6.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color @@ -18506,32 +18572,32 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@3.2.4(msw@2.13.2(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@3.2.4(msw@2.13.2(@types/node@25.6.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - msw: 2.13.2(@types/node@25.5.0)(typescript@5.9.3) - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + msw: 2.13.2(@types/node@25.6.0)(typescript@5.9.3) + vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/mocker@4.0.15(msw@2.13.2(@types/node@24.10.8)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.0.15(msw@2.13.2(@types/node@24.12.2)(typescript@5.9.3))(vite@7.3.1(@types/node@24.12.2)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.0.15 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - msw: 2.13.2(@types/node@24.10.8)(typescript@5.9.3) - vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + msw: 2.13.2(@types/node@24.12.2)(typescript@5.9.3) + vite: 7.3.1(@types/node@24.12.2)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/mocker@4.0.15(msw@2.13.2(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.0.15(msw@2.13.2(@types/node@25.6.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.0.15 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - msw: 2.13.2(@types/node@25.5.0)(typescript@5.9.3) - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + msw: 2.13.2(@types/node@25.6.0)(typescript@5.9.3) + vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) '@vitest/pretty-format@3.2.4': dependencies: @@ -18579,7 +18645,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@25.5.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.5.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: 3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.6.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) '@vitest/ui@4.0.15(vitest@4.0.15)': dependencies: @@ -18590,7 +18656,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@24.10.8)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@24.12.2)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) '@vitest/utils@3.2.4': dependencies: @@ -19759,12 +19825,16 @@ snapshots: character-entities-legacy@1.1.4: {} + character-entities-legacy@3.0.0: {} + character-entities@1.2.4: {} character-entities@2.0.2: {} character-reference-invalid@1.1.4: {} + character-reference-invalid@2.0.1: {} + chardet@0.7.0: {} chardet@2.1.1: {} @@ -19945,6 +20015,8 @@ snapshots: commander@7.2.0: {} + commander@8.3.0: {} + comment-parser@1.4.1: {} common-tags@1.8.2: {} @@ -20294,7 +20366,7 @@ snapshots: rrweb-cssom: 0.8.0 optional: true - csstype@3.1.3: {} + csstype@3.2.3: {} cwd@0.10.0: dependencies: @@ -20545,7 +20617,7 @@ snapshots: dom-helpers@5.2.1: dependencies: '@babel/runtime': 7.29.2 - csstype: 3.1.3 + csstype: 3.2.3 dom-mutator@0.6.0: {} @@ -20583,7 +20655,7 @@ snapshots: domelementtype: 2.3.0 domhandler: 4.3.1 - domutils@3.1.0: + domutils@3.2.2: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 @@ -20687,7 +20759,7 @@ snapshots: engine.io@6.6.5: dependencies: '@types/cors': 2.8.18 - '@types/node': 24.10.8 + '@types/node': 24.12.2 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -20717,6 +20789,8 @@ snapshots: entities@6.0.1: optional: true + entities@7.0.1: {} + env-paths@2.2.1: {} envinfo@7.10.0: {} @@ -22737,6 +22811,13 @@ snapshots: htmlescape@1.1.1: {} + htmlparser2@10.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 7.0.1 + htmlparser2@6.1.0: dependencies: domelementtype: 2.3.0 @@ -22748,7 +22829,7 @@ snapshots: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 entities: 4.5.0 http-cache-semantics@4.1.1: {} @@ -23007,11 +23088,18 @@ snapshots: is-alphabetical@1.0.4: {} + is-alphabetical@2.0.1: {} + is-alphanumerical@1.0.4: dependencies: is-alphabetical: 1.0.4 is-decimal: 1.0.4 + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + is-arguments@1.1.1: dependencies: call-bind: 1.0.8 @@ -23079,6 +23167,8 @@ snapshots: is-decimal@1.0.4: {} + is-decimal@2.0.1: {} + is-docker@2.2.1: {} is-docker@3.0.0: {} @@ -23113,6 +23203,8 @@ snapshots: is-hexadecimal@1.0.4: {} + is-hexadecimal@2.0.1: {} + is-inside-container@1.0.0: dependencies: is-docker: 3.0.0 @@ -23267,13 +23359,13 @@ snapshots: jest-worker@26.6.2: dependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 merge-stream: 2.0.0 supports-color: 7.2.0 jest-worker@27.5.1: dependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -23473,6 +23565,10 @@ snapshots: jwa: 2.0.1 safe-buffer: 5.2.1 + katex@0.16.45: + dependencies: + commander: 8.3.0 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -23523,7 +23619,7 @@ snapshots: linkify-it@5.0.0: dependencies: - uc.micro: 2.0.0 + uc.micro: 2.1.0 lint-staged@16.4.0: dependencies: @@ -23742,25 +23838,32 @@ snapshots: map-cache@0.2.2: {} - markdown-it@14.0.0: + markdown-it@14.1.1: dependencies: argparse: 2.0.1 entities: 4.5.0 linkify-it: 5.0.0 mdurl: 2.0.0 punycode.js: 2.3.1 - uc.micro: 2.0.0 + uc.micro: 2.1.0 markdown-table@2.0.0: dependencies: repeat-string: 1.6.1 - markdownlint-micromark@0.1.8: {} - - markdownlint@0.33.0: + markdownlint@0.40.0: dependencies: - markdown-it: 14.0.0 - markdownlint-micromark: 0.1.8 + micromark: 4.0.2 + micromark-core-commonmark: 2.0.3 + micromark-extension-directive: 4.0.0 + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-math: 3.1.0 + micromark-util-types: 2.0.2 + string-width: 8.1.0 + transitivePeerDependencies: + - supports-color matchit@1.1.0: dependencies: @@ -23953,7 +24056,7 @@ snapshots: methods@1.1.2: {} - micromark-core-commonmark@2.0.0: + micromark-core-commonmark@2.0.3: dependencies: decode-named-character-reference: 1.0.2 devlop: 1.1.0 @@ -23970,7 +24073,7 @@ snapshots: micromark-util-resolve-all: 2.0.0 micromark-util-subtokenize: 2.0.0 micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-types: 2.0.2 micromark-extension-directive@1.4.0: dependencies: @@ -23979,6 +24082,16 @@ snapshots: transitivePeerDependencies: - supports-color + micromark-extension-directive@4.0.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-factory-whitespace: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.2 + parse-entities: 4.0.2 + micromark-extension-footnote@0.3.2: dependencies: micromark: 2.11.4 @@ -23995,6 +24108,24 @@ snapshots: transitivePeerDependencies: - supports-color + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.0.1 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.2 + micromark-extension-gfm-strikethrough@0.6.5: dependencies: micromark: 2.11.4 @@ -24007,6 +24138,14 @@ snapshots: transitivePeerDependencies: - supports-color + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.2 + micromark-extension-gfm-tagfilter@0.3.0: {} micromark-extension-gfm-task-list-item@0.3.3: @@ -24026,42 +24165,52 @@ snapshots: transitivePeerDependencies: - supports-color + micromark-extension-math@3.1.0: + dependencies: + '@types/katex': 0.16.8 + devlop: 1.1.0 + katex: 0.16.45 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.2 + micromark-factory-destination@2.0.0: dependencies: micromark-util-character: 2.0.1 micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-types: 2.0.2 micromark-factory-label@2.0.0: dependencies: devlop: 1.1.0 micromark-util-character: 2.0.1 micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-types: 2.0.2 micromark-factory-space@2.0.0: dependencies: micromark-util-character: 2.0.1 - micromark-util-types: 2.0.0 + micromark-util-types: 2.0.2 micromark-factory-title@2.0.0: dependencies: micromark-factory-space: 2.0.0 micromark-util-character: 2.0.1 micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-types: 2.0.2 micromark-factory-whitespace@2.0.0: dependencies: micromark-factory-space: 2.0.0 micromark-util-character: 2.0.1 micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-types: 2.0.2 micromark-util-character@2.0.1: dependencies: micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-types: 2.0.2 micromark-util-chunked@2.0.0: dependencies: @@ -24071,12 +24220,12 @@ snapshots: dependencies: micromark-util-character: 2.0.1 micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-types: 2.0.2 micromark-util-combine-extensions@2.0.0: dependencies: micromark-util-chunked: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-types: 2.0.2 micromark-util-decode-numeric-character-reference@2.0.0: dependencies: @@ -24092,7 +24241,7 @@ snapshots: micromark-util-resolve-all@2.0.0: dependencies: - micromark-util-types: 2.0.0 + micromark-util-types: 2.0.2 micromark-util-sanitize-uri@2.0.0: dependencies: @@ -24105,11 +24254,11 @@ snapshots: devlop: 1.1.0 micromark-util-chunked: 2.0.0 micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-types: 2.0.2 micromark-util-symbol@2.0.0: {} - micromark-util-types@2.0.0: {} + micromark-util-types@2.0.2: {} micromark@2.11.4: dependencies: @@ -24120,11 +24269,11 @@ snapshots: micromark@4.0.2: dependencies: - '@types/debug': 4.1.12 + '@types/debug': 4.1.13 debug: 4.4.3(supports-color@8.1.1) decode-named-character-reference: 1.0.2 devlop: 1.1.0 - micromark-core-commonmark: 2.0.0 + micromark-core-commonmark: 2.0.3 micromark-factory-space: 2.0.0 micromark-util-character: 2.0.1 micromark-util-chunked: 2.0.0 @@ -24136,7 +24285,7 @@ snapshots: micromark-util-sanitize-uri: 2.0.0 micromark-util-subtokenize: 2.0.0 micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-types: 2.0.2 transitivePeerDependencies: - supports-color @@ -24340,9 +24489,9 @@ snapshots: optionalDependencies: msgpackr-extract: 3.0.2 - msw@2.13.2(@types/node@24.10.8)(typescript@5.9.3): + msw@2.13.2(@types/node@24.12.2)(typescript@5.9.3): dependencies: - '@inquirer/confirm': 5.1.21(@types/node@24.10.8) + '@inquirer/confirm': 5.1.21(@types/node@24.12.2) '@mswjs/interceptors': 0.41.3 '@open-draft/deferred-promise': 2.2.0 '@types/statuses': 2.0.6 @@ -24365,9 +24514,9 @@ snapshots: transitivePeerDependencies: - '@types/node' - msw@2.13.2(@types/node@25.5.0)(typescript@5.9.3): + msw@2.13.2(@types/node@25.6.0)(typescript@5.9.3): dependencies: - '@inquirer/confirm': 5.1.21(@types/node@25.5.0) + '@inquirer/confirm': 5.1.21(@types/node@25.6.0) '@mswjs/interceptors': 0.41.3 '@open-draft/deferred-promise': 2.2.0 '@types/statuses': 2.0.6 @@ -24761,6 +24910,16 @@ snapshots: is-decimal: 1.0.4 is-hexadecimal: 1.0.4 + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.8 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.0.2 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + parse-filepath@1.0.2: dependencies: is-absolute: 1.0.0 @@ -25234,7 +25393,7 @@ snapshots: prelude-ls@1.2.1: {} - prettier@3.2.5: {} + prettier@3.8.2: {} pretty-bytes@5.6.0: {} @@ -25644,14 +25803,14 @@ snapshots: react-dom: 18.3.1(react@18.3.1) resize-observer-polyfill: 1.5.1 - react-monaco-editor@0.48.0(@types/react@18.2.79)(monaco-editor@0.33.0)(react@18.3.1): + react-monaco-editor@0.48.0(@types/react@18.3.28)(monaco-editor@0.33.0)(react@18.3.1): dependencies: - '@types/react': 18.2.79 + '@types/react': 18.3.28 monaco-editor: 0.33.0 prop-types: 15.8.1 react: 18.3.1 - react-redux@8.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1): + react-redux@8.1.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1): dependencies: '@babel/runtime': 7.29.2 '@types/hoist-non-react-statics': 3.3.2 @@ -25661,8 +25820,8 @@ snapshots: react-is: 18.3.1 use-sync-external-store: 1.2.2(react@18.3.1) optionalDependencies: - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 + '@types/react': 18.3.28 + '@types/react-dom': 18.3.7(@types/react@18.3.28) react-dom: 18.3.1(react@18.3.1) redux: 4.2.1 @@ -26776,6 +26935,11 @@ snapshots: get-east-asian-width: 1.5.0 strip-ansi: 7.2.0 + string-width@8.1.0: + dependencies: + get-east-asian-width: 1.5.0 + strip-ansi: 7.2.0 + string-width@8.2.0: dependencies: get-east-asian-width: 1.5.0 @@ -26885,7 +27049,7 @@ snapshots: stripe@16.12.0: dependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 qs: 6.14.1 strnum@1.1.2: @@ -27446,7 +27610,7 @@ snapshots: ua-parser-js@1.0.41: {} - uc.micro@2.0.0: {} + uc.micro@2.1.0: {} umd@3.0.3: {} @@ -27484,7 +27648,7 @@ snapshots: undici-types@7.16.0: {} - undici-types@7.18.2: + undici-types@7.19.2: optional: true unherit@1.1.3: @@ -27765,13 +27929,13 @@ snapshots: unist-util-stringify-position: 2.0.3 vfile-message: 2.0.4 - vite-node@3.2.4(@types/node@25.5.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vite-node@3.2.4(@types/node@25.6.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - '@types/node' - jiti @@ -27786,7 +27950,7 @@ snapshots: - tsx - yaml - vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vite@7.3.1(@types/node@24.12.2)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) @@ -27795,14 +27959,14 @@ snapshots: rollup: 4.54.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.10.8 + '@types/node': 24.12.2 fsevents: 2.3.3 jiti: 2.6.1 terser: 5.46.1 tsx: 4.21.0 yaml: 2.8.3 - vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) @@ -27811,7 +27975,7 @@ snapshots: rollup: 4.54.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 25.5.0 + '@types/node': 25.6.0 fsevents: 2.3.3 jiti: 2.6.1 terser: 5.46.1 @@ -27840,11 +28004,11 @@ snapshots: - debug - typescript - vitest@3.2.4(@types/debug@4.1.12)(@types/node@25.5.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.5.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.6.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(msw@2.13.2(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/mocker': 3.2.4(msw@2.13.2(@types/node@25.6.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -27862,12 +28026,12 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-node: 3.2.4(@types/node@25.5.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite-node: 3.2.4(@types/node@25.6.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: - '@types/debug': 4.1.12 - '@types/node': 25.5.0 + '@types/debug': 4.1.13 + '@types/node': 25.6.0 '@vitest/ui': 3.2.4(vitest@3.2.4) jsdom: 26.1.0 transitivePeerDependencies: @@ -27884,10 +28048,10 @@ snapshots: - tsx - yaml - vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@16.7.0)(msw@2.13.2(@types/node@24.10.8)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@16.7.0)(msw@2.13.2(@types/node@24.12.2)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: '@vitest/expect': 4.0.15 - '@vitest/mocker': 4.0.15(msw@2.13.2(@types/node@24.10.8)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/mocker': 4.0.15(msw@2.13.2(@types/node@24.12.2)(typescript@5.9.3))(vite@7.3.1(@types/node@24.12.2)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 4.0.15 '@vitest/runner': 4.0.15 '@vitest/snapshot': 4.0.15 @@ -27904,11 +28068,11 @@ snapshots: tinyexec: 1.1.1 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.1(@types/node@24.12.2)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/node': 24.10.8 + '@types/node': 24.12.2 '@vitest/ui': 4.0.15(vitest@4.0.15) jsdom: 16.7.0 transitivePeerDependencies: @@ -27924,10 +28088,10 @@ snapshots: - tsx - yaml - vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@24.10.8)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@24.12.2)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: '@vitest/expect': 4.0.15 - '@vitest/mocker': 4.0.15(msw@2.13.2(@types/node@24.10.8)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/mocker': 4.0.15(msw@2.13.2(@types/node@24.12.2)(typescript@5.9.3))(vite@7.3.1(@types/node@24.12.2)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 4.0.15 '@vitest/runner': 4.0.15 '@vitest/snapshot': 4.0.15 @@ -27944,11 +28108,11 @@ snapshots: tinyexec: 1.1.1 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.1(@types/node@24.12.2)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/node': 24.10.8 + '@types/node': 24.12.2 '@vitest/ui': 4.0.15(vitest@4.0.15) jsdom: 26.1.0 transitivePeerDependencies: @@ -27964,10 +28128,10 @@ snapshots: - tsx - yaml - vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.5.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@25.6.0)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.13.2(@types/node@25.6.0)(typescript@5.9.3))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: '@vitest/expect': 4.0.15 - '@vitest/mocker': 4.0.15(msw@2.13.2(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/mocker': 4.0.15(msw@2.13.2(@types/node@25.6.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 4.0.15 '@vitest/runner': 4.0.15 '@vitest/snapshot': 4.0.15 @@ -27984,11 +28148,11 @@ snapshots: tinyexec: 1.1.1 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/node': 25.5.0 + '@types/node': 25.6.0 '@vitest/ui': 4.0.15(vitest@4.0.15) jsdom: 26.1.0 transitivePeerDependencies: diff --git a/tools/challenge-helper-scripts/package.json b/tools/challenge-helper-scripts/package.json index 07ab834b512..50d9242e226 100644 --- a/tools/challenge-helper-scripts/package.json +++ b/tools/challenge-helper-scripts/package.json @@ -40,7 +40,7 @@ "bson": "^7.0.0", "eslint": "^9.39.1", "gray-matter": "4.0.3", - "prettier": "3.2.5", + "prettier": "3.8.2", "typescript": "5.9.3", "vitest": "^4.0.15" }