From 69e0d130fb7b06ebf291068e6ceafa251551cce5 Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Fri, 17 Jul 2026 18:20:48 -0400 Subject: [PATCH 1/9] docs(release-notes): update paths to github --- src/components/page/reference/ReleaseNotes/index.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/page/reference/ReleaseNotes/index.tsx b/src/components/page/reference/ReleaseNotes/index.tsx index c1402d63d1c..491dc8ebf71 100644 --- a/src/components/page/reference/ReleaseNotes/index.tsx +++ b/src/components/page/reference/ReleaseNotes/index.tsx @@ -26,7 +26,7 @@ https://docs.github.com/en/enterprise-cloud@latest/authentication/authenticating return [

Unable to load Releases. Please see all releases{' '} - + on GitHub . @@ -38,7 +38,7 @@ https://docs.github.com/en/enterprise-cloud@latest/authentication/authenticating

A complete release history for Ionic Framework is available{' '} - + on GitHub . Documentation for recent releases can also be found below. @@ -53,7 +53,7 @@ https://docs.github.com/en/enterprise-cloud@latest/authentication/authenticating

- +

{release.version}

@@ -79,7 +79,7 @@ https://docs.github.com/en/enterprise-cloud@latest/authentication/authenticating
To see more releases, visit{' '} - + GitHub . From ead9c1880c8e32b82007c4f7012ba60876793a25 Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Fri, 17 Jul 2026 18:24:02 -0400 Subject: [PATCH 2/9] fix(release-notes): pull in release notes even without a token --- package.json | 2 +- scripts/cli.mjs | 1 + scripts/native.mjs | 2 +- scripts/release-notes.mjs | 44 ++++++++++++++++++++++++++------------- 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index aa56108b5f7..ffe96ca7e44 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "crowdin:sync": "docusaurus write-translations && crowdin upload && crowdin download", "deploy": "docusaurus deploy", "docusaurus": "docusaurus", - "generate-markdown": "node scripts/native.mjs && concurrently \"node scripts/cli.mjs\" \"node scripts/release-notes.mjs\"", + "generate-markdown": "node scripts/native.mjs && node scripts/cli.mjs && node scripts/release-notes.mjs", "lint": "npm run prettier -- --write", "serve": "docusaurus serve", "playground:new": "hygen playground new", diff --git a/scripts/cli.mjs b/scripts/cli.mjs index 6fdebc8d971..6ccd3efa232 100644 --- a/scripts/cli.mjs +++ b/scripts/cli.mjs @@ -15,6 +15,7 @@ const commandToKebab = (str) => const { commands } = cliJSON; commands.map(writePage); + console.log(`šŸ“Ÿ CLI Commands Generated`); })(); function writePage(page) { diff --git a/scripts/native.mjs b/scripts/native.mjs index 631f32c0f19..801bedb430d 100644 --- a/scripts/native.mjs +++ b/scripts/native.mjs @@ -97,7 +97,7 @@ async function getPkgJsonData(pluginId) { async function main() { await Promise.all(pluginApis.map(buildPluginApiDocs)); - console.log(`Plugin API Files Updated šŸŽø`); + console.log(`šŸ”Œ Capacitor Plugins Generated`); } function toTitleCase(str) { diff --git a/scripts/release-notes.mjs b/scripts/release-notes.mjs index a4e82310881..d43468eae29 100644 --- a/scripts/release-notes.mjs +++ b/scripts/release-notes.mjs @@ -15,22 +15,15 @@ const OUTPUT_PATH = resolve(__dirname, '../src/components/page/reference/Release // task: async () => outputJson(OUTPUT_PATH, await getReleases(), { spaces: 2 }) // }; -// Get the GitHub Releases from Ionic +// Get the GitHub Releases from Ionic Framework // ------------------------------------------------------------------------------- -// This requires an environment GITHUB_TOKEN otherwise it may fail -// -// To add a GITHUB_TOKEN, follow the steps to create a personal access token: -// https://docs.github.com/en/enterprise-cloud@latest/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token -// and then authorize it to work with SSO: -// https://docs.github.com/en/enterprise-cloud@latest/authentication/authenticating-with-saml-single-sign-on/authorizing-a-personal-access-token-for-use-with-saml-single-sign-on +// Fetches from the public GitHub API. Unauthenticated requests have a 60 req/hour limit. +// To increase the rate limit, set a GITHUB_TOKEN environment variable. const getReleases = async () => { try { - const request = await fetch(new URL('repos/ionic-team/ionic/releases', 'https://api.github.com'), { - headers: { - Authorization: process.env.GITHUB_TOKEN !== undefined ? `token ${process.env.GITHUB_TOKEN}` : '', - }, - }); - + const url = new URL('repos/ionic-team/ionic-framework/releases', 'https://api.github.com'); + const headers = process.env.GITHUB_TOKEN ? { Authorization: `token ${process.env.GITHUB_TOKEN}` } : {}; + const request = await fetch(url, { headers }); const releases = await request.json(); // Check that the response is an array in case it was @@ -97,8 +90,29 @@ function getVersionType(version) { } async function run() { - const { outputJson } = pkg; - outputJson(OUTPUT_PATH, await getReleases(), { spaces: 2 }); + const { outputJson, readJson } = pkg; + const newReleases = await getReleases(); + + // Successfully fetched new releases, save them + if (newReleases.length > 0) { + outputJson(OUTPUT_PATH, newReleases, { spaces: 2 }); + console.log(`šŸš€ Release Notes Generated`); + return; + } + + // If the fetch failed but we have existing data, keep it + try { + const existingData = await readJson(OUTPUT_PATH); + if (Array.isArray(existingData) && existingData.length > 0) { + console.log(`šŸš€ Release Notes Preserved`); + return; + } + } catch (error) { + console.warn(`āš ļø Could not read existing release notes: ${error.message}`); + } + + // If we have no new data and no cached data, error + throw new Error('Failed to fetch release notes from GitHub and no cached data available'); } run(); From 911c17ce13ffd61191c72611296b0bc178beb44a Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Mon, 20 Jul 2026 14:23:54 -0400 Subject: [PATCH 3/9] fix(release-notes): add better errors and remove cached release notes --- scripts/native.mjs | 3 +- scripts/release-notes.mjs | 122 +++++++++++++++++--------------------- 2 files changed, 56 insertions(+), 69 deletions(-) diff --git a/scripts/native.mjs b/scripts/native.mjs index 801bedb430d..404ceffa197 100644 --- a/scripts/native.mjs +++ b/scripts/native.mjs @@ -1,7 +1,6 @@ import { writeFileSync } from 'fs'; import fetch from 'node-fetch'; -// replace with latest once it's relased const tag = 'latest'; const pluginApis = [ @@ -51,7 +50,7 @@ function createApiPage(pluginId, readme, pkgJson) { /** * Cleanup and transform JSDoc content for compatibility with MDX/Docusaurus: - * + * * - Remove HTML comments (``) which are not valid in MDX and will cause parsing errors. * - Escape `{` characters inside blocks because MDX treats `{}` as JavaScript expressions. Unescaped `{` inside code blocks can cause parsing errors. * - Convert JSDoc-style {@link URL|Text} and {@link URL} to proper Markdown links: diff --git a/scripts/release-notes.mjs b/scripts/release-notes.mjs index d43468eae29..16b1df47fd2 100644 --- a/scripts/release-notes.mjs +++ b/scripts/release-notes.mjs @@ -10,57 +10,59 @@ const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const OUTPUT_PATH = resolve(__dirname, '../src/components/page/reference/ReleaseNotes/release-notes.json'); -// export default { -// title: 'Build Release Notes data', -// task: async () => outputJson(OUTPUT_PATH, await getReleases(), { spaces: 2 }) -// }; - // Get the GitHub Releases from Ionic Framework // ------------------------------------------------------------------------------- -// Fetches from the public GitHub API. Unauthenticated requests have a 60 req/hour limit. -// To increase the rate limit, set a GITHUB_TOKEN environment variable. +// Requires a GITHUB_TOKEN environment variable. +// Refer to CONTRIBUTING.md for setup instructions. const getReleases = async () => { - try { - const url = new URL('repos/ionic-team/ionic-framework/releases', 'https://api.github.com'); - const headers = process.env.GITHUB_TOKEN ? { Authorization: `token ${process.env.GITHUB_TOKEN}` } : {}; - const request = await fetch(url, { headers }); - const releases = await request.json(); - - // Check that the response is an array in case it was - // successful but returned an object - if (Array.isArray(releases)) { - return releases - .filter((release) => { - const releasePattern = /^v(\d+)\.(\d+)\.(\d+)$/; - - // All non-prerelease, non-alpha, non-beta, non-rc release - return releasePattern.test(release.tag_name); - }) - .map((release) => { - const body = renderMarkdown(release.body.replace(/^#.*/, '')).value; - const published_at = parseDate(release.published_at); - const version = release.tag_name.replace('v', ''); - const type = getVersionType(version); - const { name, tag_name } = release; - - return { - body, - name, - published_at, - tag_name, - type, - version, - }; - }) - .sort((a, b) => { - return -compare(a.tag_name, b.tag_name); - }); - } else { - console.error('There was an issue getting releases:', releases); - return []; + if (!process.env.GITHUB_TOKEN) { + throw new Error('GITHUB_TOKEN environment variable is required.'); + } + + const url = new URL('repos/ionic-team/ionic-framework/releases', 'https://api.github.com'); + const headers = { Authorization: `token ${process.env.GITHUB_TOKEN}` }; + const request = await fetch(url, { headers }); + + if (!request.ok) { + const error = await request.json().catch(() => ({})); + let message = `GitHub API returned ${request.status} ${request.statusText}: ${error.message ?? 'Unknown error'}.`; + + if (request.status === 401 && error.message?.includes('Bad credentials')) { + message += ' Check that GITHUB_TOKEN is set and is a valid GitHub Personal Access Token.'; } - } catch (error) { - return []; + + throw new Error(message); + } + + const releases = await request.json(); + + // Check that the response is an array in case it was + // successful but returned an object + if (Array.isArray(releases)) { + return releases + .filter((release) => { + const releasePattern = /^v(\d+)\.(\d+)\.(\d+)$/; + return releasePattern.test(release.tag_name); + }) + .map((release) => { + const body = renderMarkdown(release.body.replace(/^#.*/, '')).value; + const published_at = parseDate(release.published_at); + const version = release.tag_name.replace('v', ''); + const type = getVersionType(version); + const { name, tag_name } = release; + + return { + body, + name, + published_at, + tag_name, + type, + version, + }; + }) + .sort((a, b) => -compare(a.tag_name, b.tag_name)); + } else { + throw new Error('GitHub API returned an unexpected response format.'); } }; @@ -90,29 +92,15 @@ function getVersionType(version) { } async function run() { - const { outputJson, readJson } = pkg; - const newReleases = await getReleases(); - - // Successfully fetched new releases, save them - if (newReleases.length > 0) { - outputJson(OUTPUT_PATH, newReleases, { spaces: 2 }); - console.log(`šŸš€ Release Notes Generated`); - return; - } - - // If the fetch failed but we have existing data, keep it + const { outputJson } = pkg; try { - const existingData = await readJson(OUTPUT_PATH); - if (Array.isArray(existingData) && existingData.length > 0) { - console.log(`šŸš€ Release Notes Preserved`); - return; - } + const releases = await getReleases(); + outputJson(OUTPUT_PATH, releases, { spaces: 2 }); + console.log(`šŸš€ Release Notes Generated`); } catch (error) { - console.warn(`āš ļø Could not read existing release notes: ${error.message}`); + console.error(`\nāŒ Release Notes Failed\n ⇢ ${error.message}\n`); + process.exit(1); } - - // If we have no new data and no cached data, error - throw new Error('Failed to fetch release notes from GitHub and no cached data available'); } run(); From 3908f88f6645ef3dce6f0eee76fb8386ae6fe9aa Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Mon, 20 Jul 2026 14:41:38 -0400 Subject: [PATCH 4/9] docs(contributing): add guide to generate PAT --- CONTRIBUTING.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d398360bf39..576f7eb0ef7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -35,6 +35,42 @@ npm install npm start ``` +#### GitHub Token + +The documentation build requires a GitHub Personal Access Token to fetch Ionic Framework release notes. + +**Local Development:** + +1. Create a [fine-grained Personal Access Token](https://github.com/settings/personal-access-tokens/new) with: + + - **Repository access**: Public repositories (read-only) + - **Expiration**: 366 days (update annually) + +2. Add the token to your shell profile (`~/.zshrc`, `~/.bashrc`, etc.): + + ```sh + export GITHUB_TOKEN=github_pat_... + ``` + +3. Reload your shell or run `source ~/.zshrc` (or equivalent) + +**Vercel (Production):** + +1. Create a [fine-grained Personal Access Token](https://github.com/settings/personal-access-tokens/new) with the same settings as above, but with: + + - **Owner**: ionic-team organization (not your personal account) + +2. Add the token to Vercel project settings: + + - Go to your project on Vercel + - Navigate to **Settings → Environment Variables** + - Add `GITHUB_TOKEN` with the token value + - Select Production and Preview environments + +3. Redeploy the project for the token to take effect + +Without the token, the build will fail with an error message indicating the token is missing. + ### Linting Documentation This repository uses [Prettier](https://prettier.io/), an opinionated code formatter, in order to keep consistent formatting throughout the documentation. Run the following command to automatically fix all formatting, and then push any changes: From e5ec9b8e2ee96efb4a9d431c674a6a05b4d00dae Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Tue, 21 Jul 2026 10:44:42 -0400 Subject: [PATCH 5/9] fix(scripts): only fail the build on CI and Vercel when release notes fails --- package.json | 2 +- scripts/release-notes.mjs | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index ffe96ca7e44..60f08d38c11 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "node": ">=20.0.0" }, "scripts": { - "prebuild": "npm run generate-markdown; scripts/i18n.sh; if [ -n \"$CROWDIN_PERSONAL_TOKEN\" ]; then npm run crowdin:sync; fi", + "prebuild": "npm run generate-markdown && scripts/i18n.sh && if [ -n \"$CROWDIN_PERSONAL_TOKEN\" ]; then npm run crowdin:sync; fi", "build": "npm run build:${VERCEL_ENV:-preview}", "build:preview": "docusaurus build --locale en", "build:production": "docusaurus build", diff --git a/scripts/release-notes.mjs b/scripts/release-notes.mjs index 16b1df47fd2..4677003b907 100644 --- a/scripts/release-notes.mjs +++ b/scripts/release-notes.mjs @@ -45,7 +45,7 @@ const getReleases = async () => { return releasePattern.test(release.tag_name); }) .map((release) => { - const body = renderMarkdown(release.body.replace(/^#.*/, '')).value; + const body = renderMarkdown((release.body ?? '').replace(/^#.*/, '')).value; const published_at = parseDate(release.published_at); const version = release.tag_name.replace('v', ''); const type = getVersionType(version); @@ -98,8 +98,15 @@ async function run() { outputJson(OUTPUT_PATH, releases, { spaces: 2 }); console.log(`šŸš€ Release Notes Generated`); } catch (error) { - console.error(`\nāŒ Release Notes Failed\n ⇢ ${error.message}\n`); - process.exit(1); + // Only fail the build in CI environments and the preview + // or production Vercel environments. + const shouldFail = process.env.CI || ['production', 'preview'].includes(process.env.VERCEL_ENV); + if (shouldFail) { + console.error(`\nāŒ Release Notes Failed\n ⇢ ${error.message}\n`); + process.exit(1); + } + console.warn(`\nāš ļø Release Notes Failed\n ⇢ ${error.message}`); + outputJson(OUTPUT_PATH, [], { spaces: 2 }); } } From d6644cb5a4bb61231e71ca27ab644a51c0323486 Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Tue, 21 Jul 2026 13:20:44 -0400 Subject: [PATCH 6/9] docs(release-notes): link to contributing for release note warnings --- CONTRIBUTING.md | 4 ++-- scripts/release-notes.mjs | 5 +++-- src/components/page/reference/ReleaseNotes/index.tsx | 10 +++------- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 576f7eb0ef7..534db3dd80a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -37,7 +37,7 @@ npm start #### GitHub Token -The documentation build requires a GitHub Personal Access Token to fetch Ionic Framework release notes. +The documentation build requires a GitHub Personal Access Token to fetch Ionic Framework release notes. The build will still work locally without it (release notes will be empty), but it's required for Vercel preview and production builds. **Local Development:** @@ -54,7 +54,7 @@ The documentation build requires a GitHub Personal Access Token to fetch Ionic F 3. Reload your shell or run `source ~/.zshrc` (or equivalent) -**Vercel (Production):** +**Vercel:** 1. Create a [fine-grained Personal Access Token](https://github.com/settings/personal-access-tokens/new) with the same settings as above, but with: diff --git a/scripts/release-notes.mjs b/scripts/release-notes.mjs index 4677003b907..57d7db58e36 100644 --- a/scripts/release-notes.mjs +++ b/scripts/release-notes.mjs @@ -12,8 +12,9 @@ const OUTPUT_PATH = resolve(__dirname, '../src/components/page/reference/Release // Get the GitHub Releases from Ionic Framework // ------------------------------------------------------------------------------- -// Requires a GITHUB_TOKEN environment variable. -// Refer to CONTRIBUTING.md for setup instructions. +// Requires a GITHUB_TOKEN environment variable. Refer to +// https://github.com/ionic-team/ionic-docs/blob/main/CONTRIBUTING.md#github-token +// for setup instructions. const getReleases = async () => { if (!process.env.GITHUB_TOKEN) { throw new Error('GITHUB_TOKEN environment variable is required.'); diff --git a/src/components/page/reference/ReleaseNotes/index.tsx b/src/components/page/reference/ReleaseNotes/index.tsx index 491dc8ebf71..2c46c16cb25 100644 --- a/src/components/page/reference/ReleaseNotes/index.tsx +++ b/src/components/page/reference/ReleaseNotes/index.tsx @@ -15,13 +15,9 @@ interface Release { export default function ReleaseNotes(props: { [key: string]: any }) { if (releases.length === 0) { - console.warn(`Could not load release notes data. Make sure that you have a valid GITHUB_TOKEN. - -Create a personal access token by following the below guide: -https://docs.github.com/en/enterprise-cloud@latest/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token - -and then authorize it to work with SSO: -https://docs.github.com/en/enterprise-cloud@latest/authentication/authenticating-with-saml-single-sign-on/authorizing-a-personal-access-token-for-use-with-saml-single-sign-on`); + console.warn( + `Could not load release notes data. Refer to https://github.com/ionic-team/ionic-docs/blob/main/CONTRIBUTING.md#github-token for setup instructions.` + ); return [

From 95c67b8da51378d396f5bb676e5050024ddc0a03 Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Tue, 21 Jul 2026 13:23:18 -0400 Subject: [PATCH 7/9] fix(release-notes): remove React errors with unique key prop --- src/components/page/reference/ReleaseNotes/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/page/reference/ReleaseNotes/index.tsx b/src/components/page/reference/ReleaseNotes/index.tsx index 2c46c16cb25..85cc53b3acd 100644 --- a/src/components/page/reference/ReleaseNotes/index.tsx +++ b/src/components/page/reference/ReleaseNotes/index.tsx @@ -20,7 +20,7 @@ export default function ReleaseNotes(props: { [key: string]: any }) { ); return [ -

+

Unable to load Releases. Please see all releases{' '} on GitHub @@ -46,7 +46,7 @@ export default function ReleaseNotes(props: { [key: string]: any }) {

{releases.map((release: Release, index) => ( -
+
From 1db377ff765520f8bd586965b2e7b2b699e5b98b Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Tue, 21 Jul 2026 13:24:06 -0400 Subject: [PATCH 8/9] chore(deps): remove unused concurrently --- package-lock.json | 191 ---------------------------------------------- package.json | 1 - 2 files changed, 192 deletions(-) diff --git a/package-lock.json b/package-lock.json index 954dabe144d..5686eef03bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,6 @@ "@stackblitz/sdk": "^1.6.0", "@tippyjs/react": "^4.2.6", "clsx": "^1.1.1", - "concurrently": "^6.2.0", "crowdin": "^3.5.0", "docusaurus-plugin-copy-page-button": "^0.8.2", "docusaurus-plugin-module-alias": "^0.0.2", @@ -6583,50 +6582,6 @@ "node": ">=8" } }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", @@ -6813,41 +6768,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, - "node_modules/concurrently": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", - "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", - "dependencies": { - "chalk": "^4.1.0", - "date-fns": "^2.16.1", - "lodash": "^4.17.21", - "rxjs": "^6.6.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", - "tree-kill": "^1.2.2", - "yargs": "^16.2.0" - }, - "bin": { - "concurrently": "bin/concurrently.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/concurrently/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -7733,21 +7653,6 @@ "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==" }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, "node_modules/debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", @@ -9269,14 +9174,6 @@ "node": ">=6.9.0" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -16851,14 +16748,6 @@ "node": ">=0.10" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -17033,22 +16922,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -17715,11 +17588,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==" - }, "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", @@ -18199,14 +18067,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "bin": { - "tree-kill": "cli.js" - } - }, "node_modules/trim-lines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", @@ -19367,14 +19227,6 @@ "xml-js": "bin/cli.js" } }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -19388,23 +19240,6 @@ "node": ">= 6" } }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", @@ -19414,32 +19249,6 @@ "node": ">=12" } }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 60f08d38c11..3efef989bef 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,6 @@ "@stackblitz/sdk": "^1.6.0", "@tippyjs/react": "^4.2.6", "clsx": "^1.1.1", - "concurrently": "^6.2.0", "crowdin": "^3.5.0", "docusaurus-plugin-copy-page-button": "^0.8.2", "docusaurus-plugin-module-alias": "^0.0.2", From 25f33f8f1c529fd2cdfdc696e09b9be93d08072e Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Tue, 21 Jul 2026 13:27:08 -0400 Subject: [PATCH 9/9] style: lint --- src/components/page/reference/ReleaseNotes/index.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/page/reference/ReleaseNotes/index.tsx b/src/components/page/reference/ReleaseNotes/index.tsx index 85cc53b3acd..eb3d3757c7a 100644 --- a/src/components/page/reference/ReleaseNotes/index.tsx +++ b/src/components/page/reference/ReleaseNotes/index.tsx @@ -46,7 +46,10 @@ export default function ReleaseNotes(props: { [key: string]: any }) {