diff --git a/docusaurus.config.ts b/docusaurus.config.ts index c0dad2d6333..b170140568d 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -1,13 +1,16 @@ import type * as Preset from '@docusaurus/preset-classic'; import type { Config } from '@docusaurus/types'; +import clientModules from './src/plugins/client-modules.ts'; +import codeSplitVideoCss from './src/plugins/code-split-video-css.ts'; import disableFullySpecified from './src/plugins/disable-fully-specified.ts'; +import googleAnalyticsDeferred from './src/plugins/google-analytics-deferred.ts'; import latestAnnouncement from './src/plugins/latest-announcement.ts'; import llmsTxt from './src/plugins/llms-txt.ts'; import ogImage from './src/plugins/og-image.ts'; import reactNavigationVersions from './src/plugins/react-navigation-versions.ts'; import rehypeCodeblockMeta from './src/plugins/rehype-codeblock-meta.ts'; -import rehypeVideoAspectRatio from './src/plugins/rehype-video-aspect-ratio.ts'; +import rehypeMediaAttributes from './src/plugins/rehype-media-attributes.ts'; import remarkNpm2Yarn from './src/plugins/remark-npm2yarn.ts'; import remarkStaticToDynamic from './src/plugins/remark-static-to-dynamic.ts'; import darkTheme from './src/themes/react-navigation-dark'; @@ -20,7 +23,7 @@ const config: Config = { tagline: 'Routing and navigation for your React Native apps', url: process.env.URL || 'https://reactnavigation.org', baseUrl: '/', - favicon: 'img/favicon.ico', + favicon: 'img/spiro.svg', organizationName: 'react-navigation', projectName: 'react-navigation.github.io', onBrokenLinks: 'throw', @@ -44,17 +47,7 @@ const config: Config = { prism: { theme: lightTheme, darkTheme: darkTheme, - additionalLanguages: [ - 'bash', - 'json', - 'java', - 'kotlin', - 'groovy', - 'ruby', - 'swift', - 'objectivec', - 'toml', - ], + additionalLanguages: ['bash', 'java', 'toml'], magicComments: [ { className: 'theme-code-block-highlighted-line', @@ -75,6 +68,8 @@ const config: Config = { logo: { alt: 'React Navigation Logo', src: 'img/spiro.svg', + width: 294, + height: 300, }, items: [ { @@ -139,6 +134,9 @@ const config: Config = { }, } satisfies Preset.ThemeConfig, plugins: [ + codeSplitVideoCss, + clientModules, + googleAnalyticsDeferred, disableFullySpecified, reactNavigationVersions, [llmsTxt, { latestVersion }], @@ -189,7 +187,7 @@ const config: Config = { rehypeCodeblockMeta, { match: { snack: true, lang: true, tabs: true } }, ], - [rehypeVideoAspectRatio, { staticDir: 'static' }], + [rehypeMediaAttributes, { staticDir: 'static' }], ], }, blog: { @@ -202,6 +200,7 @@ const config: Config = { rehypeCodeblockMeta, { match: { snack: true, lang: true, tabs: true } }, ], + [rehypeMediaAttributes, { staticDir: 'static' }], ], }, pages: { @@ -210,34 +209,9 @@ const config: Config = { theme: { customCss: './src/css/custom.css', }, - googleAnalytics: { - trackingID: 'UA-10128745-16', - }, } satisfies Preset.Options, ], ], - headTags: [ - { - tagName: 'link', - attributes: { - rel: 'preconnect', - href: 'https://fonts.googleapis.com', - }, - }, - { - tagName: 'link', - attributes: { - rel: 'preconnect', - href: 'https://fonts.gstatic.com', - crossOrigin: 'true', - }, - }, - ], - scripts: [ - '/js/snack-helpers.js', - '/js/toc-fixes.js', - '/js/video-playback.js', - ], }; export default config; diff --git a/package.json b/package.json index bbe87019697..cfb9de85935 100755 --- a/package.json +++ b/package.json @@ -18,12 +18,12 @@ "fetch-sponsors": "node scripts/fetch-sponsors.js && prettier --write src/data/sponsors.js" }, "dependencies": { - "@docusaurus/core": "3.10.1", - "@docusaurus/faster": "^3.10.1", - "@docusaurus/plugin-client-redirects": "3.10.1", - "@docusaurus/plugin-google-analytics": "3.10.1", - "@docusaurus/preset-classic": "3.10.1", - "@docusaurus/remark-plugin-npm2yarn": "3.10.1", + "@docusaurus/core": "3.10.2", + "@docusaurus/faster": "^3.10.2", + "@docusaurus/plugin-client-redirects": "3.10.2", + "@docusaurus/plugin-google-analytics": "3.10.2", + "@docusaurus/preset-classic": "3.10.2", + "@docusaurus/remark-plugin-npm2yarn": "3.10.2", "@mdx-js/react": "^3.1.1", "@octokit/graphql": "^9.0.3", "@react-navigation/core": "^7.13.5", @@ -40,7 +40,7 @@ }, "devDependencies": { "@babel/types": "^7.28.5", - "@docusaurus/tsconfig": "^3.10.1", + "@docusaurus/tsconfig": "^3.10.2", "@ffprobe-installer/ffprobe": "^2.1.2", "@types/node": "^25.2.3", "@types/react": "^19.2.8", diff --git a/src/client/index.ts b/src/client/index.ts new file mode 100644 index 00000000000..bd326179996 --- /dev/null +++ b/src/client/index.ts @@ -0,0 +1,31 @@ +import type { ClientModule } from '@docusaurus/types'; + +let helpers: + | Promise< + [ + typeof import('./snack-helpers.ts'), + typeof import('./toc-fixes.ts'), + typeof import('./video-playback.ts'), + ] + > + | undefined; + +const loadHelpers = () => { + helpers ??= Promise.all([ + import('./snack-helpers.ts'), + import('./toc-fixes.ts'), + import('./video-playback.ts'), + ]); + + return helpers; +}; + +const clientModule: ClientModule = { + onRouteDidUpdate() { + void loadHelpers().then(([, { syncToc }]) => { + syncToc(); + }); + }, +}; + +export default clientModule; diff --git a/static/js/snack-helpers.js b/src/client/snack-helpers.ts similarity index 83% rename from static/js/snack-helpers.js rename to src/client/snack-helpers.ts index 485dcbe4fb3..62bf07e2d20 100644 --- a/static/js/snack-helpers.js +++ b/src/client/snack-helpers.ts @@ -67,6 +67,18 @@ const DEPS_VERSIONS = { ], }; +type MajorVersion = keyof typeof DEPS_VERSIONS; + +type SnackOptions = { + code: string; + label: string; + templateId: string | null; +}; + +function isMajorVersion(version: number): version is MajorVersion { + return Object.hasOwn(DEPS_VERSIONS, version); +} + function getVersion() { const maybeVersion = window.location.pathname.split('/')[1]; @@ -77,13 +89,17 @@ function getVersion() { return '6.x'; } -function getSnackUrl(options) { +function getSnackUrl(options: SnackOptions) { let currentVersion = getVersion(); let label = options.label || document.title; let code = options.code; let templateId = options.templateId; - const currentMajorVersion = currentVersion.match(/(\d+)\./)[1]; + const currentMajorVersion = Number(currentVersion.match(/(\d+)\./)?.[1]); + + if (!isMajorVersion(currentMajorVersion)) { + throw new Error(`Unsupported React Navigation version: ${currentVersion}`); + } let baseUrl = `https://snack.expo.io?platform=${DEFAULT_PLATFORM}&name=` + @@ -104,14 +120,17 @@ function getSnackUrl(options) { } } -function findNearestCodeBlock(node) { +function findNearestCodeBlock(node: HTMLElement) { let nextElement = node.nextElementSibling; - if (!nextElement && node.parentElement.tagName === 'P') { - nextElement = node.parentElement.nextElementSibling; + const parent = node.parentElement; + + if (!nextElement && parent?.tagName === 'P') { + nextElement = parent.nextElementSibling; } while (nextElement) { if ( + nextElement instanceof HTMLElement && nextElement.tagName === 'DIV' && (nextElement.className.includes('mdxCodeBlock') || nextElement.className.includes('codeBlockContainer')) @@ -127,7 +146,7 @@ let openIcon = ''; function appendSnackLink() { - let samples = document.querySelectorAll('samp'); + let samples = document.querySelectorAll('samp'); if (!samples.length) { return; @@ -151,7 +170,7 @@ function appendSnackLink() { let link = document.createElement('a'); link.className = 'code-block-snack-link'; - link.dataset.snack = true; + link.dataset.snack = 'true'; link.target = '_blank'; if (label) { @@ -188,7 +207,17 @@ function initializeSnackObservers() { appendSnackLink(); const mutationObserver = new MutationObserver((mutations) => { - mutations.forEach(appendSnackLink); + if ( + mutations.some((mutation) => + Array.from(mutation.addedNodes).some( + (node) => + node instanceof Element && + (node.matches('samp') || node.querySelector('samp')) + ) + ) + ) { + appendSnackLink(); + } }); mutationObserver.observe(document.documentElement, { @@ -197,4 +226,6 @@ function initializeSnackObservers() { }); } -document.addEventListener('DOMContentLoaded', initializeSnackObservers); +initializeSnackObservers(); + +export {}; diff --git a/src/client/toc-fixes.ts b/src/client/toc-fixes.ts new file mode 100644 index 00000000000..b1ca7dd5be0 --- /dev/null +++ b/src/client/toc-fixes.ts @@ -0,0 +1,37 @@ +/** + * Docusaurus shows items in hidden tabs in the TOC. + * It's confusing since it doesn't represent the actual page. + * And clicking on those items doesn't do anything. + * This scripts syncs the TOCs with visible headings. + */ +export const syncToc = () => { + const headings = document.querySelectorAll( + 'article :is(h2, h3)' + ); + + // Get all visible headings + const titles = Array.from(headings) + .filter((el) => el.offsetParent) + .map((el) => trim(el.textContent ?? '')); + + const toc = document.querySelectorAll( + '.table-of-contents li > a' + ); + + // Hide TOC items that don't have a corresponding heading + toc.forEach((el) => { + const item = el.parentElement; + + if (!item) { + return; + } + + if (!titles.includes(trim(el.textContent ?? ''))) { + item.style.display = 'none'; + } else { + item.style.display = 'block'; + } + }); +}; + +const trim = (str: string) => str.trim().replace(/[\u200B-\u200D\uFEFF]/g, ''); diff --git a/src/client/video-playback.module.css b/src/client/video-playback.module.css new file mode 100644 index 00000000000..57771b1838e --- /dev/null +++ b/src/client/video-playback.module.css @@ -0,0 +1,53 @@ +.player { + position: relative; + display: inline-block; + border-radius: var(--ifm-global-radius); + + &.paused .control::after { + background-image: url("data:image/svg+xml,"); + } + + &:hover .control, + &.paused .control { + opacity: 1; + } +} + +.control { + display: flex; + align-items: center; + justify-content: center; + position: absolute; + top: 16px; + right: 16px; + width: 42px; + height: 42px; + background: rgba(0, 0, 0, 0.5); + backdrop-filter: blur(8px); + transition: 200ms opacity ease; + opacity: 0; + border-radius: 50%; + border: 0; + padding: 0; + color: inherit; + cursor: pointer; + + &:focus-visible { + opacity: 1; + outline: 2px solid var(--ifm-color-primary); + outline-offset: 2px; + } + + &::after { + content: ''; + height: 24px; + aspect-ratio: 1 / 1; + background-image: url("data:image/svg+xml,"); + } +} + +@media (hover: none), (pointer: coarse) { + .control { + opacity: 1; + } +} diff --git a/src/client/video-playback.ts b/src/client/video-playback.ts new file mode 100644 index 00000000000..f8619e19001 --- /dev/null +++ b/src/client/video-playback.ts @@ -0,0 +1,315 @@ +import styles from './video-playback.module.css'; + +type PlayerController = { + connect(): void; + disconnect(): void; +}; + +const playerControllers = new WeakMap(); +const autoplayCallbacks = new WeakMap< + Element, + (isIntersecting: boolean) => void +>(); + +const autoplayObserver = + 'IntersectionObserver' in window + ? new IntersectionObserver((entries) => { + entries.forEach((entry) => { + autoplayCallbacks.get(entry.target)?.(entry.isIntersecting); + }); + }) + : undefined; + +const reducedMotionQuery = window.matchMedia( + '(prefers-reduced-motion: reduce)' +); + +function revealWhenReady(video: HTMLVideoElement) { + let timer: number | undefined; + + const reveal = () => { + if (timer !== undefined) { + window.clearTimeout(timer); + timer = undefined; + } + + video.removeEventListener('loadeddata', reveal); + video.style.opacity = '1'; + }; + + if (video.readyState >= 2) { + reveal(); + + return reveal; + } + + video.style.opacity = '0'; + video.addEventListener('loadeddata', reveal, { once: true }); + + if (video.readyState >= 2) { + reveal(); + } else { + timer = window.setTimeout(reveal, 1000); + } + + return reveal; +} + +function setupPlayer(video: HTMLVideoElement) { + const parent = video.parentNode; + + if (!parent) { + return; + } + + const container = document.createElement('div'); + const control = document.createElement('button'); + + const mediaLabel = video.dataset.label; + + let manuallyPaused = false; + + const updateControl = () => { + const paused = video.paused || video.ended; + const action = paused ? 'Play' : 'Pause'; + + container.classList.toggle(styles.paused, paused); + + control.setAttribute( + 'aria-label', + mediaLabel ? `${action} ${mediaLabel} video` : `${action} video` + ); + }; + + const play = () => { + video.preload = 'auto'; + void video.play().catch(updateControl); + }; + + parent.insertBefore(container, video); + + control.classList.add(styles.control); + control.dataset.videoPlayerControl = ''; + control.type = 'button'; + + container.classList.add(styles.player); + container.dataset.videoPlayer = ''; + container.appendChild(video); + container.appendChild(control); + + control.addEventListener('click', () => { + if (video.paused) { + manuallyPaused = false; + play(); + } else { + manuallyPaused = true; + video.pause(); + } + }); + + video.addEventListener('play', updateControl); + video.addEventListener('pause', updateControl); + video.addEventListener('ended', updateControl); + + updateControl(); + + video.style.transition = 'opacity 150ms'; + + const reveal = revealWhenReady(video); + const shouldAutoPlay = video.dataset.autoPlay === 'true'; + const featureCard = video.closest('.feature-grid li'); + + let isIntersecting = false; + let isHovered = false; + + const updateAutoplay = () => { + const canAutoPlay = + !reducedMotionQuery.matches || (featureCard !== null && isHovered); + + if (isIntersecting && !manuallyPaused && canAutoPlay) { + play(); + } else if (!video.paused) { + video.pause(); + } + }; + + const handleIntersection = (nextIsIntersecting: boolean) => { + isIntersecting = nextIsIntersecting; + updateAutoplay(); + }; + + const handlePointerEnter = () => { + isHovered = true; + updateAutoplay(); + }; + + const handlePointerLeave = () => { + isHovered = false; + updateAutoplay(); + }; + + const handleReducedMotionChange = () => { + updateAutoplay(); + }; + + let connected = false; + + const controller: PlayerController = { + connect() { + if (video.parentNode !== container) { + const currentParent = video.parentNode; + + if (!currentParent) { + return; + } + + currentParent.insertBefore(container, video); + container.insertBefore(video, control); + } + + if (connected) { + return; + } + + connected = true; + + if (!shouldAutoPlay) { + return; + } + + reducedMotionQuery.addEventListener('change', handleReducedMotionChange); + + if (featureCard) { + isHovered = featureCard.matches(':hover'); + featureCard.addEventListener('pointerenter', handlePointerEnter); + featureCard.addEventListener('pointerleave', handlePointerLeave); + } + + if (autoplayObserver) { + autoplayCallbacks.set(container, handleIntersection); + autoplayObserver.observe(container); + } else { + handleIntersection(true); + } + }, + + disconnect() { + if (!connected) { + return; + } + + connected = false; + + autoplayObserver?.unobserve(container); + autoplayCallbacks.delete(container); + reducedMotionQuery.removeEventListener( + 'change', + handleReducedMotionChange + ); + featureCard?.removeEventListener('pointerenter', handlePointerEnter); + featureCard?.removeEventListener('pointerleave', handlePointerLeave); + + isHovered = false; + + video.pause(); + reveal(); + + if (container.isConnected && !video.isConnected) { + container.remove(); + } + }, + }; + + playerControllers.set(video, controller); + controller.connect(); +} + +function initializeVideoPlayers() { + const setup = (video: HTMLVideoElement) => { + if (!video.hasAttribute('playsinline')) { + return; + } + + const controller = playerControllers.get(video); + + if (controller) { + controller.connect(); + return; + } + + if (visibilityObserver) { + visibilityObserver.observe(video); + } else { + setupPlayer(video); + } + }; + + const scan = (node: Node) => { + if (!(node instanceof Element)) { + return; + } + + if (node instanceof HTMLVideoElement) { + setup(node); + } + + node.querySelectorAll('video').forEach(setup); + }; + + const cleanup = (node: Node) => { + if (!(node instanceof Element)) { + return; + } + + const cleanupVideo = (video: HTMLVideoElement) => { + if (video.isConnected) { + return; + } + + visibilityObserver?.unobserve(video); + playerControllers.get(video)?.disconnect(); + }; + + if (node instanceof HTMLVideoElement) { + cleanupVideo(node); + } + + node.querySelectorAll('video').forEach(cleanupVideo); + }; + + const visibilityObserver = + 'IntersectionObserver' in window + ? new IntersectionObserver( + (entries, observer) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + observer.unobserve(entry.target); + + if (entry.target instanceof HTMLVideoElement) { + setupPlayer(entry.target); + } + } + }); + }, + { rootMargin: '300px' } + ) + : undefined; + + const mutationObserver = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + mutation.addedNodes.forEach(scan); + mutation.removedNodes.forEach(cleanup); + }); + }); + + document.querySelectorAll('video').forEach(setup); + + mutationObserver.observe(document.documentElement, { + childList: true, + subtree: true, + }); +} + +initializeVideoPlayers(); + +export {}; diff --git a/src/components/CopyMarkdownButton/index.tsx b/src/components/CopyMarkdownButton/index.tsx index a38662d3a46..0998d742948 100644 --- a/src/components/CopyMarkdownButton/index.tsx +++ b/src/components/CopyMarkdownButton/index.tsx @@ -34,9 +34,45 @@ export function CopyButton() { return promise; }; - // Preload the .md file on mount so it's ready when the user clicks copy useEffect(() => { - loadMarkdown(); + let idleId: number | undefined; + let timeoutId: ReturnType | undefined; + + const loadWhenIdle = () => { + if (markdownRef.current) { + return; + } + + loadMarkdown(); + }; + + const preloadMarkdown = () => { + if ('requestIdleCallback' in window) { + idleId = window.requestIdleCallback(loadWhenIdle, { + timeout: 3000, + }); + } else { + timeoutId = setTimeout(loadWhenIdle, 1000); + } + }; + + if (document.readyState === 'complete') { + preloadMarkdown(); + } else { + window.addEventListener('load', preloadMarkdown, { once: true }); + } + + return () => { + window.removeEventListener('load', preloadMarkdown); + + if (idleId !== undefined) { + window.cancelIdleCallback(idleId); + } + + if (timeoutId !== undefined) { + clearTimeout(timeoutId); + } + }; }, []); useEffect(() => { @@ -148,6 +184,8 @@ export function CopyButton() { ref={buttonRef} type="button" onClick={onButtonClick} + onFocus={() => markdownRef.current ?? loadMarkdown()} + onMouseEnter={() => markdownRef.current ?? loadMarkdown()} className={styles.button} title="Copy page" aria-expanded={isOpen} diff --git a/src/css/custom.css b/src/css/custom.css index 080d971c203..b613cd02369 100755 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -449,6 +449,10 @@ header { border-top: 1px solid var(--ifm-toc-border-color); } +.footer__copyright-link { + text-decoration: underline; +} + .navbar { padding: 0; background-color: transparent; @@ -503,6 +507,10 @@ header { .navbar__logo { margin-right: 0.75rem; + + & img { + width: auto; + } } @media (min-width: 997px) { @@ -518,7 +526,6 @@ header { .navbar__inner .navbar__brand { position: relative; margin: auto; - left: -1rem; } } @@ -866,8 +873,8 @@ article { } & img, - & video:not(.video-player video), - & .video-player { + & video:not([data-video-player] video), + & [data-video-player] { vertical-align: top; margin: var(--ifm-leading) 0; outline: 1px solid rgba(0, 0, 0, 0.08); @@ -899,17 +906,31 @@ article { } } - & video:not(.video-player video):has(+ video), - & .video-player:has(+ .video-player) { + & video:not([data-video-player] video):has(+ video), + & [data-video-player]:has(+ [data-video-player]) { margin-right: var(--ifm-leading); } - & p ~ video:not(.video-player video), - & p ~ .video-player { + & p ~ video:not([data-video-player] video), + & p ~ [data-video-player] { margin-top: 0; } } +.theme-doc-markdown :is(p, li) > a:not(.button) { + text-decoration: underline; + text-decoration-color: currentColor; + text-decoration-color: color-mix(in srgb, currentColor 50%, transparent); + text-decoration-thickness: 1px; + text-underline-offset: 0.15em; + transition: text-decoration-color 150ms ease; + + &:hover, + &:focus-visible { + text-decoration-color: currentColor; + } +} + @media (max-width: 320px) { article video, article video[data-landscape] { @@ -966,6 +987,16 @@ details[class^='details_'] { } } + & :is(p, li) > a { + text-decoration-color: currentColor; + text-decoration-color: color-mix(in srgb, currentColor 50%, transparent); + + &:hover, + &:focus-visible { + text-decoration-color: currentColor; + } + } + & [class^='collapsibleContent'] { margin: var(--ifm-alert-padding-vertical) calc(var(--ifm-alert-padding-horizontal) / 2); @@ -1086,44 +1117,6 @@ samp { } } -.video-player { - position: relative; - display: inline-block; - border-radius: var(--ifm-global-radius); - - &.paused .video-player-icon::after { - background-image: url("data:image/svg+xml,"); - } - - &:hover .video-player-icon, - &.paused .video-player-icon { - opacity: 1; - } -} - -.video-player-icon { - display: flex; - align-items: center; - justify-content: center; - position: absolute; - top: 16px; - right: 16px; - width: 42px; - height: 42px; - background: rgba(0, 0, 0, 0.5); - backdrop-filter: blur(8px); - transition: 200ms opacity ease; - opacity: 0; - border-radius: 50%; - - &::after { - content: ''; - height: 24px; - aspect-ratio: 1 / 1; - background-image: url("data:image/svg+xml,"); - } -} - .code-block-footer { height: 2.625rem; justify-content: space-between; @@ -1369,25 +1362,31 @@ code { } } - & > .video-player { + & > video, + & > [data-video-player] { display: block; margin: 0; box-shadow: none; outline: none; border-radius: 0 !important; border-bottom: 1px solid var(--ifm-toc-border-color); + } - video { - aspect-ratio: 2 / 1; - width: 100%; - object-fit: cover; - border-radius: 0; - outline: none; - } + & > video, + & > [data-video-player] video { + aspect-ratio: 2 / 1; + width: 100%; + object-fit: cover; + border-radius: 0; + outline: none; + } - .video-player-icon { - display: none; - } + & > video { + box-sizing: content-box; + } + + & > [data-video-player] [data-video-player-control] { + display: none; } & > p { @@ -1409,6 +1408,10 @@ code { } } +.theme-doc-markdown .feature-grid li > p > a { + text-decoration: none; +} + .options-grid ul { list-style: none; padding-left: 0; @@ -1434,7 +1437,7 @@ code { margin: 0; } - & > .video-player { + & > [data-video-player] { margin: 0; border-radius: var(--ifm-global-radius) !important; overflow: hidden; @@ -1527,8 +1530,8 @@ code { margin: 0; } - & > :is(img, video, .video-player), - & > p > :is(img, video, .video-player) { + & > :is(img, video, [data-video-player]), + & > p > :is(img, video, [data-video-player]) { display: block; margin: 0; overflow: hidden; diff --git a/src/pages/home/Features/index.tsx b/src/pages/home/Features/index.tsx index c7073a4f77a..a298514e621 100644 --- a/src/pages/home/Features/index.tsx +++ b/src/pages/home/Features/index.tsx @@ -3,6 +3,8 @@ import styles from './styles.module.css'; const features = [ { image: '/img/home_smile.svg', + width: 83, + height: 47, title: `Easy to Use`, description: ` Start quickly with built-in navigators that deliver a seamless @@ -11,6 +13,8 @@ const features = [ }, { image: '/img/home_devices.svg', + width: 74, + height: 82, title: `Components built for iOS and Android`, description: ` Platform-specific look-and-feel with smooth animations and gestures. @@ -18,6 +22,8 @@ const features = [ }, { image: '/img/home_star.svg', + width: 69, + height: 46, title: `Completely customizable`, description: ` If you know how to write apps using JavaScript you can customize any @@ -26,6 +32,8 @@ const features = [ }, { image: '/img/home_extend.svg', + width: 97, + height: 47, title: `Extensible platform`, description: ` React Navigation is extensible at every layer— you can write your own @@ -40,8 +48,15 @@ export default function Features() {
{features.map((feature) => (
- -
{feature.title}
+ +

{feature.title}

{feature.description}

))} diff --git a/src/pages/home/Footer.tsx b/src/pages/home/Footer.tsx index 452a6cdb804..9804e03f9b1 100644 --- a/src/pages/home/Footer.tsx +++ b/src/pages/home/Footer.tsx @@ -16,7 +16,12 @@ export default function Footer() { {links.map((link, index) => ( {index > 0 && ', '} - + {link.title} diff --git a/src/pages/home/Splash/index.tsx b/src/pages/home/Splash/index.tsx index dce62615e15..e2805d78e57 100644 --- a/src/pages/home/Splash/index.tsx +++ b/src/pages/home/Splash/index.tsx @@ -29,9 +29,9 @@ export default function Splash() {

React Navigation

-

+

Routing and navigation for React Native and Web apps. -

+

{`${sponsor.name} ))} diff --git a/src/plugins/client-modules.ts b/src/plugins/client-modules.ts new file mode 100644 index 00000000000..2ce63f1f587 --- /dev/null +++ b/src/plugins/client-modules.ts @@ -0,0 +1,12 @@ +import { fileURLToPath } from 'url'; +import type { Plugin } from '@docusaurus/types'; + +export default function clientModules(): Plugin { + return { + name: 'client-modules', + + getClientModules() { + return [fileURLToPath(new URL('../client/index.ts', import.meta.url))]; + }, + }; +} diff --git a/src/plugins/code-split-video-css.ts b/src/plugins/code-split-video-css.ts new file mode 100644 index 00000000000..38096852199 --- /dev/null +++ b/src/plugins/code-split-video-css.ts @@ -0,0 +1,27 @@ +import type { Plugin } from '@docusaurus/types'; + +const globalCssExceptVideoPlayer = /^(?!.*video-playback\.module\.css)/; + +export default function codeSplitVideoCss(): Plugin { + return { + name: 'code-split-video-css', + + configureWebpack(_config, isServer) { + if (isServer) { + return {}; + } + + return { + optimization: { + splitChunks: { + cacheGroups: { + styles: { + test: globalCssExceptVideoPlayer, + }, + }, + }, + }, + }; + }, + }; +} diff --git a/src/plugins/google-analytics-client.ts b/src/plugins/google-analytics-client.ts new file mode 100644 index 00000000000..c0f9037ba1a --- /dev/null +++ b/src/plugins/google-analytics-client.ts @@ -0,0 +1,27 @@ +import type { ClientModule } from '@docusaurus/types'; + +declare global { + interface Window { + ga: (...args: string[]) => void; + } +} + +const clientModule: ClientModule = { + onRouteDidUpdate({ location, previousLocation }) { + if ( + previousLocation && + (location.pathname !== previousLocation.pathname || + location.search !== previousLocation.search || + location.hash !== previousLocation.hash) + ) { + window.ga( + 'set', + 'page', + location.pathname + location.search + location.hash + ); + window.ga('send', 'pageview'); + } + }, +}; + +export default clientModule; diff --git a/src/plugins/google-analytics-deferred.ts b/src/plugins/google-analytics-deferred.ts new file mode 100644 index 00000000000..c8100bad672 --- /dev/null +++ b/src/plugins/google-analytics-deferred.ts @@ -0,0 +1,59 @@ +import { fileURLToPath } from 'url'; +import type { Plugin } from '@docusaurus/types'; + +export default function googleAnalyticsDeferred(): Plugin | null { + if (process.env.NODE_ENV !== 'production') { + return null; + } + + return { + name: 'deferred-google-analytics', + + getClientModules() { + return [ + fileURLToPath(new URL('./google-analytics-client.ts', import.meta.url)), + ]; + }, + + injectHtmlTags() { + return { + headTags: [ + { + tagName: 'script', + innerHTML: ` + window.ga = window.ga || function() { + (window.ga.q = window.ga.q || []).push(arguments); + }; + window.ga.l = Date.now(); + window.ga('create', 'UA-10128745-16', 'auto'); + window.ga('send', 'pageview'); + + var loadAnalytics = function() { + if (loadAnalytics.done) { + return; + } + + loadAnalytics.done = true; + clearTimeout(analyticsTimer); + window.removeEventListener('pointerdown', loadAnalytics); + window.removeEventListener('keydown', loadAnalytics); + window.removeEventListener('scroll', loadAnalytics); + + var script = document.createElement('script'); + script.async = true; + script.src = 'https://www.google-analytics.com/analytics.js'; + document.head.appendChild(script); + }; + + window.addEventListener('pointerdown', loadAnalytics, { once: true }); + window.addEventListener('keydown', loadAnalytics, { once: true }); + window.addEventListener('scroll', loadAnalytics, { once: true, passive: true }); + + var analyticsTimer = setTimeout(loadAnalytics, 5000); + `, + }, + ], + }; + }, + }; +} diff --git a/src/plugins/rehype-media-attributes.ts b/src/plugins/rehype-media-attributes.ts new file mode 100644 index 00000000000..1c3095837e1 --- /dev/null +++ b/src/plugins/rehype-media-attributes.ts @@ -0,0 +1,375 @@ +import ffprobe from '@ffprobe-installer/ffprobe'; +import { execFile } from 'child_process'; +import fs from 'fs'; +import path from 'path'; +import type { Node } from 'unist'; +import { visit } from 'unist-util-visit'; +import { promisify } from 'util'; + +const execFileAsync = promisify(execFile); +const mediaDimensionsCache = new Map>(); +const maxEagerVideoBytes = 512 * 1024; + +type MdxJsxAttribute = { + type: 'mdxJsxAttribute'; + name: string; + value?: string | MdxJsxAttributeValueExpression; +}; + +type MdxJsxAttributeValueExpression = { + type: 'mdxJsxAttributeValueExpression'; + data?: { + estree?: { + body?: Array<{ + expression?: { + properties?: unknown[]; + }; + }>; + }; + }; +}; + +type MdxJsxFlowElement = { + type: 'mdxJsxFlowElement'; + name?: string; + attributes?: MdxJsxAttribute[]; + children?: MdxJsxFlowElement[]; +}; + +type VFileLike = { + cwd: string; + dirname: string; +}; + +type MediaDimensions = { + width?: number; + height?: number; +}; + +type StyleEstreeData = { + estree: { + type: 'Program'; + body: Array<{ + type: 'ExpressionStatement'; + expression: { + type: 'ObjectExpression'; + properties: unknown[]; + }; + }>; + }; +}; + +function isAttributeValueExpression( + value: MdxJsxAttribute['value'] +): value is MdxJsxAttributeValueExpression { + return ( + typeof value === 'object' && + value !== null && + 'type' in value && + value.type === 'mdxJsxAttributeValueExpression' + ); +} + +export default function rehypeMediaAttributes({ + staticDir, +}: { + staticDir: string; +}) { + return async (tree: Node, file: VFileLike) => { + const promises: Promise[] = []; + const eagerVideos = new Set(); + + let eagerVideoBytes = 0; + let eagerVideoBudgetExceeded = false; + let foundFeatureGrid = false; + + visit(tree, 'mdxJsxFlowElement', (node: MdxJsxFlowElement) => { + if (foundFeatureGrid || node.name !== 'div') { + return; + } + + const className = node.attributes?.find( + (attribute) => + attribute.type === 'mdxJsxAttribute' && attribute.name === 'className' + )?.value; + + if ( + typeof className !== 'string' || + !className.split(/\s+/).includes('feature-grid') + ) { + return; + } + + foundFeatureGrid = true; + + visit(node, 'mdxJsxFlowElement', (child: MdxJsxFlowElement) => { + if (child.name !== 'video' || eagerVideoBudgetExceeded) { + return; + } + + const mediaSrc = getMediaSource(child); + + if (!mediaSrc || !isLocalMediaSource(mediaSrc)) { + return; + } + + const mediaPath = getMediaPath(mediaSrc, file, staticDir); + + if (!fs.existsSync(mediaPath)) { + return; + } + + const mediaSize = fs.statSync(mediaPath).size; + + if (eagerVideoBytes + mediaSize > maxEagerVideoBytes) { + eagerVideoBudgetExceeded = true; + + return; + } + + eagerVideos.add(child); + eagerVideoBytes += mediaSize; + }); + }); + + visit(tree, 'mdxJsxFlowElement', (node: MdxJsxFlowElement) => { + if (node.name === 'video' || node.name === 'img') { + const mediaSrc = getMediaSource(node); + const isLocalFile = mediaSrc && isLocalMediaSource(mediaSrc); + + if (isLocalFile) { + const mediaPath = getMediaPath(mediaSrc, file, staticDir); + + if (fs.existsSync(mediaPath)) { + const promise = getMediaDimensions(mediaPath).then((dimensions) => { + if (dimensions.width && dimensions.height) { + setAttribute(node, 'width', String(dimensions.width)); + setAttribute(node, 'height', String(dimensions.height)); + + if (node.name === 'video') { + applyAspectRatio(node, dimensions.width, dimensions.height); + } + } + }); + + promises.push(promise); + } else { + throw new Error(`Media file does not exist (got ${mediaPath})`); + } + } + + if (node.name === 'img') { + setAttribute(node, 'loading', 'lazy'); + setAttribute(node, 'decoding', 'async'); + } else { + const autoPlay = node.attributes?.some( + (attribute) => + attribute.type === 'mdxJsxAttribute' && + attribute.name === 'autoPlay' + ); + + node.attributes = node.attributes?.filter( + (attribute) => + attribute.type !== 'mdxJsxAttribute' || + attribute.name !== 'autoPlay' + ); + + setAttribute( + node, + 'preload', + eagerVideos.has(node) ? 'auto' : 'none' + ); + + if (mediaSrc) { + setAttribute(node, 'data-label', getMediaLabel(mediaSrc)); + } + + if (autoPlay) { + setAttribute(node, 'data-auto-play', 'true'); + } + } + } + }); + + await Promise.all(promises); + }; +} + +function getMediaSource(node: MdxJsxFlowElement) { + const src = node.attributes?.find( + (attribute) => + attribute.type === 'mdxJsxAttribute' && attribute.name === 'src' + )?.value; + + if (typeof src === 'string') { + return src; + } + + const source = node.children?.find( + (child) => child.type === 'mdxJsxFlowElement' && child.name === 'source' + ); + + const sourceSrc = source?.attributes?.find( + (attribute) => + attribute.type === 'mdxJsxAttribute' && attribute.name === 'src' + )?.value; + + return typeof sourceSrc === 'string' ? sourceSrc : null; +} + +function isLocalMediaSource(mediaSrc: string) { + return ( + !mediaSrc.startsWith('http://') && + !mediaSrc.startsWith('https://') && + !mediaSrc.startsWith('//') + ); +} + +function getMediaPath(mediaSrc: string, file: VFileLike, staticDir: string) { + return path.join( + mediaSrc.startsWith('/') ? file.cwd : file.dirname, + staticDir, + mediaSrc + ); +} + +function getMediaLabel(mediaSrc: string) { + const filename = path.basename( + mediaSrc.split(/[?#]/)[0], + path.extname(mediaSrc.split(/[?#]/)[0]) + ); + const label = filename.replace(/[-_]+/g, ' '); + + return label.charAt(0).toUpperCase() + label.slice(1); +} + +function setAttribute(node: MdxJsxFlowElement, name: string, value: string) { + const attribute: MdxJsxAttribute = { + type: 'mdxJsxAttribute', + name, + value, + }; + + node.attributes = node.attributes || []; + + const existingIndex = node.attributes.findIndex( + (item) => item.type === 'mdxJsxAttribute' && item.name === name + ); + + if (existingIndex === -1) { + node.attributes.push(attribute); + } else { + node.attributes[existingIndex] = attribute; + } +} + +function applyAspectRatio( + node: MdxJsxFlowElement, + width: number, + height: number +) { + const data: StyleEstreeData = { + estree: { + type: 'Program', + body: [ + { + type: 'ExpressionStatement', + expression: { + type: 'ObjectExpression', + properties: [ + { + type: 'Property', + key: { type: 'Identifier', name: 'aspectRatio' }, + value: { type: 'Literal', value: width / height }, + kind: 'init', + }, + ], + }, + }, + ], + }, + }; + + node.attributes = node.attributes || []; + + let styleAttr = node.attributes?.find( + (attr) => attr.type === 'mdxJsxAttribute' && attr.name === 'style' + ); + + if (styleAttr && isAttributeValueExpression(styleAttr.value)) { + const properties = + styleAttr.value.data?.estree?.body?.[0]?.expression?.properties; + + if (Array.isArray(properties)) { + data.estree.body[0].expression.properties.push(...properties); + } + } + + styleAttr = { + type: 'mdxJsxAttribute', + name: 'style', + value: { + type: 'mdxJsxAttributeValueExpression', + data, + }, + }; + + const existingIndex = node.attributes.findIndex( + (attr) => attr.type === 'mdxJsxAttribute' && attr.name === 'style' + ); + + if (existingIndex !== -1) { + node.attributes[existingIndex] = styleAttr; + } else { + node.attributes.push(styleAttr); + } +} + +async function getMediaDimensions(filePath: string) { + const cached = mediaDimensionsCache.get(filePath); + + if (cached) { + return cached; + } + + const dimensions = probeMediaDimensions(filePath); + + mediaDimensionsCache.set(filePath, dimensions); + + return dimensions; +} + +async function probeMediaDimensions(filePath: string) { + const { stdout } = await execFileAsync(ffprobe.path, [ + '-v', + 'error', + '-of', + 'flat=s=_', + '-select_streams', + 'v:0', + '-show_entries', + 'stream=height,width', + filePath, + ]); + + const lines = stdout.trim().split('\n'); + const dimensions: MediaDimensions = {}; + + for (const line of lines) { + if (line.includes('width')) { + const width = Number(line.split('=')[1]); + + if (Number.isFinite(width) && width > 0) { + dimensions.width = width; + } + } else if (line.includes('height')) { + const height = Number(line.split('=')[1]); + + if (Number.isFinite(height) && height > 0) { + dimensions.height = height; + } + } + } + + return dimensions; +} diff --git a/src/plugins/rehype-video-aspect-ratio.ts b/src/plugins/rehype-video-aspect-ratio.ts deleted file mode 100644 index 3177c615987..00000000000 --- a/src/plugins/rehype-video-aspect-ratio.ts +++ /dev/null @@ -1,241 +0,0 @@ -import ffprobe from '@ffprobe-installer/ffprobe'; -import { exec } from 'child_process'; -import fs from 'fs'; -import path from 'path'; -import { visit } from 'unist-util-visit'; -import { promisify } from 'util'; -import type { Node } from 'unist'; - -const execAsync = promisify(exec); - -type MdxJsxAttribute = { - type: 'mdxJsxAttribute'; - name: string; - value?: string | MdxJsxAttributeValueExpression; -}; - -type MdxJsxAttributeValueExpression = { - type: 'mdxJsxAttributeValueExpression'; - data?: { - estree?: { - body?: Array<{ - expression?: { - properties?: unknown[]; - }; - }>; - }; - }; -}; - -type MdxJsxFlowElement = { - type: 'mdxJsxFlowElement'; - name?: string; - attributes?: MdxJsxAttribute[]; - children?: MdxJsxFlowElement[]; -}; - -type VFileLike = { - cwd: string; - dirname: string; -}; - -type VideoDimensions = { - width?: number; - height?: number; -}; - -type StyleEstreeData = { - estree: { - type: 'Program'; - body: Array<{ - type: 'ExpressionStatement'; - expression: { - type: 'ObjectExpression'; - properties: unknown[]; - }; - }>; - }; -}; - -function isAttributeValueExpression( - value: MdxJsxAttribute['value'] -): value is MdxJsxAttributeValueExpression { - return ( - typeof value === 'object' && - value !== null && - 'type' in value && - value.type === 'mdxJsxAttributeValueExpression' - ); -} - -/** - * Rehype plugin to add aspect ratio preservation to video tags - */ -export default function rehypeVideoAspectRatio({ - staticDir, -}: { - staticDir: string; -}) { - return async (tree: Node, file: VFileLike) => { - const promises: Promise[] = []; - - visit(tree, 'mdxJsxFlowElement', (node: MdxJsxFlowElement) => { - if (node.name === 'video') { - // Find video source - check src attribute or source children - let videoSrc: string | null = null; - - // Look for src in attributes - if (node.attributes) { - const srcAttr = node.attributes.find( - (attr) => attr.type === 'mdxJsxAttribute' && attr.name === 'src' - ); - - if (srcAttr && typeof srcAttr.value === 'string') { - videoSrc = srcAttr.value; - } - } - - // If no src attribute, look for source children - if (!videoSrc && node.children) { - const sourceNode = node.children.find( - (child) => - child.type === 'mdxJsxFlowElement' && child.name === 'source' - ); - - if (sourceNode?.attributes) { - const srcAttr = sourceNode.attributes.find( - (attr) => attr.type === 'mdxJsxAttribute' && attr.name === 'src' - ); - - if (srcAttr && typeof srcAttr.value === 'string') { - videoSrc = srcAttr.value; - } - } - } - - const isLocalFile = - videoSrc && - !videoSrc.startsWith('http://') && - !videoSrc.startsWith('https://') && - !videoSrc.startsWith('//'); - - if (isLocalFile) { - const videoPath = path.join( - videoSrc.startsWith('/') ? file.cwd : file.dirname, - staticDir, - videoSrc - ); - - if (fs.existsSync(videoPath)) { - const promise = getVideoDimensions(videoPath).then((dimensions) => { - if (dimensions.width && dimensions.height) { - applyAspectRatio(node, dimensions.width, dimensions.height); - } - }); - - promises.push(promise); - } else { - throw new Error(`Video file does not exist (got ${videoPath})`); - } - } - } - }); - - await Promise.all(promises); - }; -} - -/** - * Apply aspect ratio styles to a video node - */ -function applyAspectRatio( - node: MdxJsxFlowElement, - width: number, - height: number -) { - const data: StyleEstreeData = { - estree: { - type: 'Program', - body: [ - { - type: 'ExpressionStatement', - expression: { - type: 'ObjectExpression', - properties: [ - { - type: 'Property', - key: { type: 'Identifier', name: 'aspectRatio' }, - value: { type: 'Literal', value: width / height }, - kind: 'init', - }, - ], - }, - }, - ], - }, - }; - - node.attributes = node.attributes || []; - - let styleAttr = node.attributes?.find( - (attr) => attr.type === 'mdxJsxAttribute' && attr.name === 'style' - ); - - if (styleAttr && isAttributeValueExpression(styleAttr.value)) { - const properties = - styleAttr.value.data?.estree?.body?.[0]?.expression?.properties; - - if (Array.isArray(properties)) { - data.estree.body[0].expression.properties.push(...properties); - } - } - - styleAttr = { - type: 'mdxJsxAttribute', - name: 'style', - value: { - type: 'mdxJsxAttributeValueExpression', - data, - }, - }; - - const existingIndex = node.attributes.findIndex( - (attr) => attr.type === 'mdxJsxAttribute' && attr.name === 'style' - ); - - if (existingIndex !== -1) { - node.attributes[existingIndex] = styleAttr; - } else { - node.attributes.push(styleAttr); - } -} - -/** - * Get video dimensions using ffprobe - */ -async function getVideoDimensions(filePath: string) { - const { stdout } = await execAsync( - `${ffprobe.path} -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width "${filePath}"` - ); - - const lines = stdout.trim().split('\n'); - const dimensions: VideoDimensions = {}; - - for (const line of lines) { - if (line.includes('width')) { - const width = Number(line.split('=')[1]); - - if (Number.isFinite(width) && width > 0) { - dimensions.width = width; - } - } else if (line.includes('height')) { - const height = Number(line.split('=')[1]); - - if (Number.isFinite(height) && height > 0) { - dimensions.height = height; - } - } - } - - return dimensions; -} diff --git a/src/plugins/remark-npm2yarn.ts b/src/plugins/remark-npm2yarn.ts index 3d4e13eb38f..1ed248c5ff5 100644 --- a/src/plugins/remark-npm2yarn.ts +++ b/src/plugins/remark-npm2yarn.ts @@ -62,7 +62,7 @@ function isCodeNode(node: MdxNode): node is CodeNode { function createLabelWithIcon( pm: PackageManager ): MdxJsxAttributeValueExpression { - const value = `<>${pm}`; + const value = `<>${pm}`; return { type: 'mdxJsxAttributeValueExpression', @@ -77,7 +77,7 @@ function createValuesAttribute( const value = `[${packageManagers .map( (pm) => - `{ value: '${pm}', label: <>${pm} }` + `{ value: '${pm}', label: <>${pm} }` ) .join(', ')}]`; diff --git a/src/themes/react-navigation-light.ts b/src/themes/react-navigation-light.ts index 01c67108b9d..d3fe31935d6 100644 --- a/src/themes/react-navigation-light.ts +++ b/src/themes/react-navigation-light.ts @@ -9,7 +9,7 @@ const theme: PrismTheme = { { types: ['comment', 'prolog', 'doctype', 'cdata'], style: { - color: 'hsl(212, 9%, 47%)', + color: 'hsl(212, 9%, 45%)', fontStyle: 'italic', }, }, @@ -126,7 +126,7 @@ const theme: PrismTheme = { { types: ['template-string', 'string'], style: { - color: 'hsl(139, 66%, 32%)', + color: 'hsl(139, 66%, 30%)', }, }, ], diff --git a/static/assets/navigators/bottom-tabs/highlights/bottom-accessory.mp4 b/static/assets/navigators/bottom-tabs/highlights/bottom-accessory.mp4 index 7d32f2e248c..2174c30fda1 100644 Binary files a/static/assets/navigators/bottom-tabs/highlights/bottom-accessory.mp4 and b/static/assets/navigators/bottom-tabs/highlights/bottom-accessory.mp4 differ diff --git a/static/assets/navigators/bottom-tabs/highlights/minimize-on-scroll.mp4 b/static/assets/navigators/bottom-tabs/highlights/minimize-on-scroll.mp4 index b6e8bcdbe44..9b8e75f8dcb 100644 Binary files a/static/assets/navigators/bottom-tabs/highlights/minimize-on-scroll.mp4 and b/static/assets/navigators/bottom-tabs/highlights/minimize-on-scroll.mp4 differ diff --git a/static/assets/navigators/bottom-tabs/highlights/search-tab.mp4 b/static/assets/navigators/bottom-tabs/highlights/search-tab.mp4 index 88e9b847984..d31fab31b7d 100644 Binary files a/static/assets/navigators/bottom-tabs/highlights/search-tab.mp4 and b/static/assets/navigators/bottom-tabs/highlights/search-tab.mp4 differ diff --git a/static/assets/navigators/bottom-tabs/highlights/sidebar.mp4 b/static/assets/navigators/bottom-tabs/highlights/sidebar.mp4 index 2695abe317a..77608e2d1b8 100644 Binary files a/static/assets/navigators/bottom-tabs/highlights/sidebar.mp4 and b/static/assets/navigators/bottom-tabs/highlights/sidebar.mp4 differ diff --git a/static/assets/navigators/drawer/highlights/drawer-position.mp4 b/static/assets/navigators/drawer/highlights/drawer-position.mp4 index 29d030fc014..b3fb2495d62 100644 Binary files a/static/assets/navigators/drawer/highlights/drawer-position.mp4 and b/static/assets/navigators/drawer/highlights/drawer-position.mp4 differ diff --git a/static/assets/navigators/drawer/highlights/drawer-types.mp4 b/static/assets/navigators/drawer/highlights/drawer-types.mp4 index 738bb847ad3..3fcb3a4d57a 100644 Binary files a/static/assets/navigators/drawer/highlights/drawer-types.mp4 and b/static/assets/navigators/drawer/highlights/drawer-types.mp4 differ diff --git a/static/assets/navigators/material-top-tabs/highlights/badge.mp4 b/static/assets/navigators/material-top-tabs/highlights/badge.mp4 index 29a70ff8776..5212360091f 100644 Binary files a/static/assets/navigators/material-top-tabs/highlights/badge.mp4 and b/static/assets/navigators/material-top-tabs/highlights/badge.mp4 differ diff --git a/static/assets/navigators/material-top-tabs/highlights/custom-indicator.mp4 b/static/assets/navigators/material-top-tabs/highlights/custom-indicator.mp4 index 21b81a126ad..7a9cfb9e667 100644 Binary files a/static/assets/navigators/material-top-tabs/highlights/custom-indicator.mp4 and b/static/assets/navigators/material-top-tabs/highlights/custom-indicator.mp4 differ diff --git a/static/assets/navigators/material-top-tabs/highlights/custom-tabbar.mp4 b/static/assets/navigators/material-top-tabs/highlights/custom-tabbar.mp4 index fa881d4fffd..318464dca4c 100644 Binary files a/static/assets/navigators/material-top-tabs/highlights/custom-tabbar.mp4 and b/static/assets/navigators/material-top-tabs/highlights/custom-tabbar.mp4 differ diff --git a/static/assets/navigators/material-top-tabs/highlights/primary-tabbar.mp4 b/static/assets/navigators/material-top-tabs/highlights/primary-tabbar.mp4 index 8ec48e3196c..07a4ce4afc2 100644 Binary files a/static/assets/navigators/material-top-tabs/highlights/primary-tabbar.mp4 and b/static/assets/navigators/material-top-tabs/highlights/primary-tabbar.mp4 differ diff --git a/static/assets/navigators/material-top-tabs/highlights/scrollable-tabbar.mp4 b/static/assets/navigators/material-top-tabs/highlights/scrollable-tabbar.mp4 index eaf8cbd18d3..c30dfc594ad 100644 Binary files a/static/assets/navigators/material-top-tabs/highlights/scrollable-tabbar.mp4 and b/static/assets/navigators/material-top-tabs/highlights/scrollable-tabbar.mp4 differ diff --git a/static/assets/navigators/material-top-tabs/highlights/secondary-tabbar.mp4 b/static/assets/navigators/material-top-tabs/highlights/secondary-tabbar.mp4 index 78f854e72de..ddc73fea67c 100644 Binary files a/static/assets/navigators/material-top-tabs/highlights/secondary-tabbar.mp4 and b/static/assets/navigators/material-top-tabs/highlights/secondary-tabbar.mp4 differ diff --git a/static/assets/navigators/material-top-tabs/highlights/tab-icon.mp4 b/static/assets/navigators/material-top-tabs/highlights/tab-icon.mp4 index 4c6d052706e..2ec0ec3dc08 100644 Binary files a/static/assets/navigators/material-top-tabs/highlights/tab-icon.mp4 and b/static/assets/navigators/material-top-tabs/highlights/tab-icon.mp4 differ diff --git a/static/assets/navigators/native-stack/highlights/animation.mp4 b/static/assets/navigators/native-stack/highlights/animation.mp4 index de7a9094af0..e07392d7ac6 100644 Binary files a/static/assets/navigators/native-stack/highlights/animation.mp4 and b/static/assets/navigators/native-stack/highlights/animation.mp4 differ diff --git a/static/assets/navigators/native-stack/highlights/formsheet.mp4 b/static/assets/navigators/native-stack/highlights/formsheet.mp4 index edd72d2aa7f..746b6bfe212 100644 Binary files a/static/assets/navigators/native-stack/highlights/formsheet.mp4 and b/static/assets/navigators/native-stack/highlights/formsheet.mp4 differ diff --git a/static/assets/navigators/native-stack/highlights/header-items.mp4 b/static/assets/navigators/native-stack/highlights/header-items.mp4 index f4c40ace6d3..fb26e675a0d 100644 Binary files a/static/assets/navigators/native-stack/highlights/header-items.mp4 and b/static/assets/navigators/native-stack/highlights/header-items.mp4 differ diff --git a/static/assets/navigators/native-stack/highlights/large-title.mp4 b/static/assets/navigators/native-stack/highlights/large-title.mp4 index 5718b711814..b9221ceb8b7 100644 Binary files a/static/assets/navigators/native-stack/highlights/large-title.mp4 and b/static/assets/navigators/native-stack/highlights/large-title.mp4 differ diff --git a/static/assets/navigators/native-stack/highlights/search-bar.mp4 b/static/assets/navigators/native-stack/highlights/search-bar.mp4 index 995a1e54b98..df631fa2872 100644 Binary files a/static/assets/navigators/native-stack/highlights/search-bar.mp4 and b/static/assets/navigators/native-stack/highlights/search-bar.mp4 differ diff --git a/static/assets/navigators/native-stack/highlights/transparent-modal.mp4 b/static/assets/navigators/native-stack/highlights/transparent-modal.mp4 index 584231910d5..71a5422e818 100644 Binary files a/static/assets/navigators/native-stack/highlights/transparent-modal.mp4 and b/static/assets/navigators/native-stack/highlights/transparent-modal.mp4 differ diff --git a/static/assets/navigators/stack/highlights/animation.mp4 b/static/assets/navigators/stack/highlights/animation.mp4 index be77ef5ce9c..237cffb2c02 100644 Binary files a/static/assets/navigators/stack/highlights/animation.mp4 and b/static/assets/navigators/stack/highlights/animation.mp4 differ diff --git a/static/assets/navigators/stack/highlights/gestures.mp4 b/static/assets/navigators/stack/highlights/gestures.mp4 index a066991fe16..ef08bd81971 100644 Binary files a/static/assets/navigators/stack/highlights/gestures.mp4 and b/static/assets/navigators/stack/highlights/gestures.mp4 differ diff --git a/static/assets/navigators/stack/highlights/header-animation.mp4 b/static/assets/navigators/stack/highlights/header-animation.mp4 index faa29029c61..d585fd60204 100644 Binary files a/static/assets/navigators/stack/highlights/header-animation.mp4 and b/static/assets/navigators/stack/highlights/header-animation.mp4 differ diff --git a/static/assets/navigators/stack/highlights/search-bar.mp4 b/static/assets/navigators/stack/highlights/search-bar.mp4 index d8843c03628..a95e3d3e2d7 100644 Binary files a/static/assets/navigators/stack/highlights/search-bar.mp4 and b/static/assets/navigators/stack/highlights/search-bar.mp4 differ diff --git a/static/js/toc-fixes.js b/static/js/toc-fixes.js deleted file mode 100644 index 957c778ece2..00000000000 --- a/static/js/toc-fixes.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Docusaurus shows items in hidden tabs in the TOC. - * It's confusing since it doesn't represent the actual page. - * And clicking on those items doesn't do anything. - * This scripts syncs the TOCs with visible headings. - */ -const sync = () => { - const headings = document.querySelectorAll('article :is(h2, h3)'); - - // Get all visible headings - const titles = Array.from(headings) - .filter((el) => el.offsetParent) - .map((el) => trim(el.textContent)); - - const toc = document.querySelectorAll('.table-of-contents li > a'); - - // Hide TOC items that don't have a corresponding heading - toc.forEach((el) => { - if (!titles.includes(trim(el.textContent))) { - el.parentElement.style.display = 'none'; - } else { - el.parentElement.style.display = 'block'; - } - }); -}; - -if (window.navigation) { - document.addEventListener('DOMContentLoaded', () => { - // For the first page load, wait till page is loaded - const observer = new MutationObserver(() => { - const article = document.querySelector('article'); - - if (article) { - observer.disconnect(); - sync(); - - // Listen to navigation events to detect tab query param change - window.navigation.addEventListener('navigate', (event) => { - requestAnimationFrame(sync); - }); - } - }); - - observer.observe(document.documentElement, { - childList: true, - subtree: true, - }); - }); -} - -const trim = (str) => str.trim().replace(/[\u200B-\u200D\uFEFF]/g, ''); diff --git a/static/js/video-playback.js b/static/js/video-playback.js deleted file mode 100644 index 87f31d4eeda..00000000000 --- a/static/js/video-playback.js +++ /dev/null @@ -1,82 +0,0 @@ -function setupPlayer(video) { - const container = document.createElement('div'); - const icon = document.createElement('div'); - - const play = () => { - const promise = video.play(); - - container.classList.remove('paused'); - - promise?.catch(() => { - container.classList.add('paused'); - }); - }; - - const pause = () => { - video.pause(); - container.classList.add('paused'); - }; - - video.parentNode.insertBefore(container, video); - - icon.classList.add('video-player-icon'); - - container.classList.add('video-player'); - container.appendChild(video); - container.appendChild(icon); - - container.addEventListener('click', () => { - if (video.paused) { - play(); - } else { - pause(); - } - }); - - container.style.borderRadius = window.getComputedStyle(video).borderRadius; - - video.style.transition = 'opacity 150ms'; - - const show = () => { - video.style.opacity = '1'; - }; - - if (video.readyState >= 2) { - show(); - } else { - video.style.opacity = '0'; - - video.addEventListener('loadeddata', show); - video.addEventListener('canplay', show); - video.addEventListener('canplaythrough', show); - - if (video.readyState >= 2) { - show(); - } - - setTimeout(show, 1000); - } -} - -document.addEventListener('DOMContentLoaded', () => { - const observer = new MutationObserver(() => { - const videos = document.querySelectorAll('video'); - - videos.forEach((video) => { - if (video.dataset.seen) { - return; - } - - video.dataset.seen = true; - - if (video.hasAttribute('playsinline')) { - setupPlayer(video); - } - }); - }); - - observer.observe(document.documentElement, { - childList: true, - subtree: true, - }); -}); diff --git a/versioned_docs/version-7.x/bottom-tab-navigator.md b/versioned_docs/version-7.x/bottom-tab-navigator.md index 707af3892ea..9efb45d3e28 100755 --- a/versioned_docs/version-7.x/bottom-tab-navigator.md +++ b/versioned_docs/version-7.x/bottom-tab-navigator.md @@ -559,7 +559,7 @@ Style object for the component wrapping the screen content. ### Header related options -You can find the list of header related options [here](elements.md#header). These [options](screen-options.md) can be specified under `screenOptions` prop of `Tab.Navigator` or `options` prop of `Tab.Screen`. You don't have to be using `@react-navigation/elements` directly to use these options, they are just documented in that page. +You can find the [list of header-related options in elements documentation](elements.md#header). These [options](screen-options.md) can be specified under `screenOptions` prop of `Tab.Navigator` or `options` prop of `Tab.Screen`. You don't have to be using `@react-navigation/elements` directly to use these options, they are just documented in that page. In addition to those, the following options are also supported in bottom tabs: diff --git a/versioned_docs/version-8.x/bottom-tab-navigator.md b/versioned_docs/version-8.x/bottom-tab-navigator.md index 4327c2bd40c..4ff40d998ba 100755 --- a/versioned_docs/version-8.x/bottom-tab-navigator.md +++ b/versioned_docs/version-8.x/bottom-tab-navigator.md @@ -1164,7 +1164,7 @@ Style object for the component wrapping the screen content. The navigator does not show a header by default. It renders a native stack header if `headerShown` is set to `true` in the screen options explicitly, or if a custom header is provided with the `header` option. -You can find the list of header related options [here](elements.md#header). These [options](screen-options.md) can be specified under `screenOptions` prop of `Tab.Navigator` or `options` prop of `Tab.Screen`. You don't have to be using `@react-navigation/elements` directly to use these options, they are just documented in that page. +You can find the [list of header-related options in elements documentation](elements.md#header). These [options](screen-options.md) can be specified under `screenOptions` prop of `Tab.Navigator` or `options` prop of `Tab.Screen`. You don't have to be using `@react-navigation/elements` directly to use these options, they are just documented in that page. In addition to those, the following options are also supported in bottom tabs: diff --git a/yarn.lock b/yarn.lock index 1bd627bc749..4826eb0e32f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,18 @@ __metadata: version: 8 cacheKey: 10c0 +"@11ty/gray-matter@npm:^1.0.0": + version: 1.0.0 + resolution: "@11ty/gray-matter@npm:1.0.0" + dependencies: + js-yaml: "npm:^4.1.0" + kind-of: "npm:^6.0.3" + section-matter: "npm:^1.0.0" + strip-bom-string: "npm:^1.0.0" + checksum: 734361398905ff53ab5827d870bf83e010567f0b397ee853b67b749f76c2ae4be21eda4f2eb0e3909609cd22962adc377fbbf9ceb7e86cc5dd5cce48bd2bcfb9 + languageName: node + linkType: hard + "@algolia/abtesting@npm:1.12.0": version: 1.12.0 resolution: "@algolia/abtesting@npm:1.12.0" @@ -2176,9 +2188,9 @@ __metadata: languageName: node linkType: hard -"@docusaurus/babel@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/babel@npm:3.10.1" +"@docusaurus/babel@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/babel@npm:3.10.2" dependencies: "@babel/core": "npm:^7.25.9" "@babel/generator": "npm:^7.25.9" @@ -2189,25 +2201,25 @@ __metadata: "@babel/preset-typescript": "npm:^7.25.9" "@babel/runtime": "npm:^7.25.9" "@babel/traverse": "npm:^7.25.9" - "@docusaurus/logger": "npm:3.10.1" - "@docusaurus/utils": "npm:3.10.1" + "@docusaurus/logger": "npm:3.10.2" + "@docusaurus/utils": "npm:3.10.2" babel-plugin-dynamic-import-node: "npm:^2.3.3" fs-extra: "npm:^11.1.1" tslib: "npm:^2.6.0" - checksum: 3f6d2fdd6bc9c3a47683c1517e2afc7bca4b95d7b1817d68e91c1c2eaf944971d925ec03f2de8d88d40f97a0d88a1415cb2b9c64ac335c7cb6e37e6258c6f97a + checksum: 5d6f5938bc3220e8f3664169e77ee0b1f11423a9adfc19409f8e7b3f4264afa8e8cd111f744fe54562278a8b276f6b4b6506f509cfdc3c31cc2ade36a6171dbd languageName: node linkType: hard -"@docusaurus/bundler@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/bundler@npm:3.10.1" +"@docusaurus/bundler@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/bundler@npm:3.10.2" dependencies: "@babel/core": "npm:^7.25.9" - "@docusaurus/babel": "npm:3.10.1" - "@docusaurus/cssnano-preset": "npm:3.10.1" - "@docusaurus/logger": "npm:3.10.1" - "@docusaurus/types": "npm:3.10.1" - "@docusaurus/utils": "npm:3.10.1" + "@docusaurus/babel": "npm:3.10.2" + "@docusaurus/cssnano-preset": "npm:3.10.2" + "@docusaurus/logger": "npm:3.10.2" + "@docusaurus/types": "npm:3.10.2" + "@docusaurus/utils": "npm:3.10.2" babel-loader: "npm:^9.2.1" clean-css: "npm:^5.3.3" copy-webpack-plugin: "npm:^11.0.0" @@ -2231,21 +2243,21 @@ __metadata: peerDependenciesMeta: "@docusaurus/faster": optional: true - checksum: 20655bd64a5716cc3603d9097e7ca3d2526ccd7265ce3e9d23dfc9679faa08752a5604b98ba2b47eea5e183a3c4f0e383300899ae2f3897513493ec97a6beab2 + checksum: 141513e97d317ba2c2e2793dd4abae12b72132cf8e7c61e8f1d8d3521b6c6b162a5c5aa36ab02fbc41bad01bd8a50978133d58c9c420f1e10ec937a6d8b75109 languageName: node linkType: hard -"@docusaurus/core@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/core@npm:3.10.1" +"@docusaurus/core@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/core@npm:3.10.2" dependencies: - "@docusaurus/babel": "npm:3.10.1" - "@docusaurus/bundler": "npm:3.10.1" - "@docusaurus/logger": "npm:3.10.1" - "@docusaurus/mdx-loader": "npm:3.10.1" - "@docusaurus/utils": "npm:3.10.1" - "@docusaurus/utils-common": "npm:3.10.1" - "@docusaurus/utils-validation": "npm:3.10.1" + "@docusaurus/babel": "npm:3.10.2" + "@docusaurus/bundler": "npm:3.10.2" + "@docusaurus/logger": "npm:3.10.2" + "@docusaurus/mdx-loader": "npm:3.10.2" + "@docusaurus/utils": "npm:3.10.2" + "@docusaurus/utils-common": "npm:3.10.2" + "@docusaurus/utils-validation": "npm:3.10.2" boxen: "npm:^6.2.1" chalk: "npm:^4.1.2" chokidar: "npm:^3.5.3" @@ -2253,7 +2265,7 @@ __metadata: combine-promises: "npm:^1.1.0" commander: "npm:^5.1.0" core-js: "npm:^3.31.1" - detect-port: "npm:^1.5.1" + detect-port: "npm:^2.1.0" escape-html: "npm:^1.0.3" eta: "npm:^2.2.0" eval: "npm:^0.1.8" @@ -2291,30 +2303,30 @@ __metadata: optional: true bin: docusaurus: bin/docusaurus.mjs - checksum: 006d9f57357c3196d0c33f7c5d0ce33b9f032358ed070b8ce212186169c356847cf768b3ac95b54433815c0076eda2eb94805a64bf4b2f5e47376556164e5362 + checksum: e788635b2b6705fb6ecb6ba22f09930eed0148f4e27ee5c435742e1228e27ab2aeb539bc623355e0edba2978bffde60ead1eff2464283f3a0d14eaeb108131e4 languageName: node linkType: hard -"@docusaurus/cssnano-preset@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/cssnano-preset@npm:3.10.1" +"@docusaurus/cssnano-preset@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/cssnano-preset@npm:3.10.2" dependencies: cssnano-preset-advanced: "npm:^6.1.2" postcss: "npm:^8.5.4" postcss-sort-media-queries: "npm:^5.2.0" tslib: "npm:^2.6.0" - checksum: 549cf594fd9cfddd2f57bd177896c6bde8cc3821f7f07e7573d55d4c5841d7eb90d38c1b888b81479ffe33f0015b848c031ad4185f54feedf8ae2f1e2269e2ce + checksum: 55d288fbe37abcac181323c59c03bb7c53f0f34531abe1bf35f537e4c926a6b97b8c597fd6044344b16fd5aa40f7a566032576857d0fa7c121651569631936ea languageName: node linkType: hard -"@docusaurus/faster@npm:^3.10.1": - version: 3.10.1 - resolution: "@docusaurus/faster@npm:3.10.1" +"@docusaurus/faster@npm:^3.10.2": + version: 3.10.2 + resolution: "@docusaurus/faster@npm:3.10.2" dependencies: - "@docusaurus/types": "npm:3.10.1" + "@docusaurus/types": "npm:3.10.2" "@rspack/core": "npm:^1.7.10" - "@swc/core": "npm:^1.7.39" - "@swc/html": "npm:^1.13.5" + "@swc/core": "npm:^1.15.40" + "@swc/html": "npm:^1.15.40" browserslist: "npm:^4.24.2" lightningcss: "npm:^1.27.0" semver: "npm:^7.5.4" @@ -2323,27 +2335,27 @@ __metadata: webpack: "npm:^5.95.0" peerDependencies: "@docusaurus/types": "*" - checksum: 98d8ca36cd4bcd775be37109c8cd3117ff8ba62446ec50b2901bca7653fbbf690ec9aa494524a27c17744a1744a3e520804100aba014e7aa5621ef3df4679359 + checksum: 52a8942243839981d5896b7ff117d9ed09584d2a6ae5c2f525b1bc7907b58f3b15d654951ab777e6c33c1d04b6943bbf41589922786b76c9abe1632c265f0ef8 languageName: node linkType: hard -"@docusaurus/logger@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/logger@npm:3.10.1" +"@docusaurus/logger@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/logger@npm:3.10.2" dependencies: chalk: "npm:^4.1.2" tslib: "npm:^2.6.0" - checksum: c78c676de0cf11ba5737abe8d13ebb67c4fdd8019ac8512ee18b34c27fdd5aaf32b703da3596271592be8615094507754791ac16587a24146f3830e1558a24c3 + checksum: 77f4751a9b7dba4b40f61c859f1696c0eb3b180551e73f4af624481e4f17613523ca6d2a9e2595dc9e5a9908a44c1d90f61455d970bbeee47b509cacea76dc7e languageName: node linkType: hard -"@docusaurus/mdx-loader@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/mdx-loader@npm:3.10.1" +"@docusaurus/mdx-loader@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/mdx-loader@npm:3.10.2" dependencies: - "@docusaurus/logger": "npm:3.10.1" - "@docusaurus/utils": "npm:3.10.1" - "@docusaurus/utils-validation": "npm:3.10.1" + "@docusaurus/logger": "npm:3.10.2" + "@docusaurus/utils": "npm:3.10.2" + "@docusaurus/utils-validation": "npm:3.10.2" "@mdx-js/mdx": "npm:^3.0.0" "@slorber/remark-comment": "npm:^1.0.0" escape-html: "npm:^1.0.3" @@ -2368,15 +2380,15 @@ __metadata: peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - checksum: 2764e3e1a6fc4856746aacd627d43a403cbad87d6ec7400d30092197f36c028207cc5d267e0af2ce34df31f0a68bb2f082bbd5d308d14bedc0d874bc95a89c7b + checksum: eb37eebb858319d55d1493724a92dee6325d24f4badb334095d41260b0cb9601c4a9f64d4718616dc4c6829f5c062f91799452c1390c2b019f604ddc1c67a026 languageName: node linkType: hard -"@docusaurus/module-type-aliases@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/module-type-aliases@npm:3.10.1" +"@docusaurus/module-type-aliases@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/module-type-aliases@npm:3.10.2" dependencies: - "@docusaurus/types": "npm:3.10.1" + "@docusaurus/types": "npm:3.10.2" "@types/history": "npm:^4.7.11" "@types/react": "npm:*" "@types/react-router-config": "npm:*" @@ -2386,19 +2398,19 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: 837faf66e24b9b0e2d2d276956f00cf5395a752682396013876935b6b0275b573d4cc3e9667a5110f9077c5943ddd1f47b462217a8418a5e6bdd013de8afd918 + checksum: 3a6a4cc350c48a4e4ba6826976f24e15fc833509533a958252f84b71f7b742d2d65813dde2bb0bc84f44b6918c891997b0fc4174d4b83edb0ef6aeed3330ca13 languageName: node linkType: hard -"@docusaurus/plugin-client-redirects@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/plugin-client-redirects@npm:3.10.1" +"@docusaurus/plugin-client-redirects@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/plugin-client-redirects@npm:3.10.2" dependencies: - "@docusaurus/core": "npm:3.10.1" - "@docusaurus/logger": "npm:3.10.1" - "@docusaurus/utils": "npm:3.10.1" - "@docusaurus/utils-common": "npm:3.10.1" - "@docusaurus/utils-validation": "npm:3.10.1" + "@docusaurus/core": "npm:3.10.2" + "@docusaurus/logger": "npm:3.10.2" + "@docusaurus/utils": "npm:3.10.2" + "@docusaurus/utils-common": "npm:3.10.2" + "@docusaurus/utils-validation": "npm:3.10.2" eta: "npm:^2.2.0" fs-extra: "npm:^11.1.1" lodash: "npm:^4.17.21" @@ -2406,22 +2418,22 @@ __metadata: peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - checksum: 0bcd7387b6ae3132ab76c7715d440bb6b769ab509fa241720a90575b01541eefe3cd47281da812c546db0e31cffc002c4fb8629430fd1191e5d6f27ef2037483 + checksum: ab5ded6b97561047d35edf7fb6bee7e7bd795a38223873c89824e06597e762628d1ce3e72cf2c8c212c5579406a026bbacb3392d9c3b6dccbcace8239cd48801 languageName: node linkType: hard -"@docusaurus/plugin-content-blog@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/plugin-content-blog@npm:3.10.1" +"@docusaurus/plugin-content-blog@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/plugin-content-blog@npm:3.10.2" dependencies: - "@docusaurus/core": "npm:3.10.1" - "@docusaurus/logger": "npm:3.10.1" - "@docusaurus/mdx-loader": "npm:3.10.1" - "@docusaurus/theme-common": "npm:3.10.1" - "@docusaurus/types": "npm:3.10.1" - "@docusaurus/utils": "npm:3.10.1" - "@docusaurus/utils-common": "npm:3.10.1" - "@docusaurus/utils-validation": "npm:3.10.1" + "@docusaurus/core": "npm:3.10.2" + "@docusaurus/logger": "npm:3.10.2" + "@docusaurus/mdx-loader": "npm:3.10.2" + "@docusaurus/theme-common": "npm:3.10.2" + "@docusaurus/types": "npm:3.10.2" + "@docusaurus/utils": "npm:3.10.2" + "@docusaurus/utils-common": "npm:3.10.2" + "@docusaurus/utils-validation": "npm:3.10.2" cheerio: "npm:1.0.0-rc.12" combine-promises: "npm:^1.1.0" feed: "npm:^4.2.2" @@ -2437,23 +2449,23 @@ __metadata: "@docusaurus/plugin-content-docs": "*" react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - checksum: 5c6d912bbcbbc9efa5c81e256f4074e70980c85623f5fd72a344b90bd5f23ed2c03030d8d0cb1ce38bdb2263fdf74ac3e7801a66050184ed11005adc5f49bcb2 + checksum: ef6b0aae35854fdc41e6e10b4e4fad837134e0431aee12324d94b3898db3048dba56316e172f878b97c575a1696242446e29554a6e900c7519eaa5c88b6d46ff languageName: node linkType: hard -"@docusaurus/plugin-content-docs@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/plugin-content-docs@npm:3.10.1" +"@docusaurus/plugin-content-docs@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/plugin-content-docs@npm:3.10.2" dependencies: - "@docusaurus/core": "npm:3.10.1" - "@docusaurus/logger": "npm:3.10.1" - "@docusaurus/mdx-loader": "npm:3.10.1" - "@docusaurus/module-type-aliases": "npm:3.10.1" - "@docusaurus/theme-common": "npm:3.10.1" - "@docusaurus/types": "npm:3.10.1" - "@docusaurus/utils": "npm:3.10.1" - "@docusaurus/utils-common": "npm:3.10.1" - "@docusaurus/utils-validation": "npm:3.10.1" + "@docusaurus/core": "npm:3.10.2" + "@docusaurus/logger": "npm:3.10.2" + "@docusaurus/mdx-loader": "npm:3.10.2" + "@docusaurus/module-type-aliases": "npm:3.10.2" + "@docusaurus/theme-common": "npm:3.10.2" + "@docusaurus/types": "npm:3.10.2" + "@docusaurus/utils": "npm:3.10.2" + "@docusaurus/utils-common": "npm:3.10.2" + "@docusaurus/utils-validation": "npm:3.10.2" "@types/react-router-config": "npm:^5.0.7" combine-promises: "npm:^1.1.0" fs-extra: "npm:^11.1.1" @@ -2466,133 +2478,132 @@ __metadata: peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - checksum: a9d78f6979cc64aef1210f51979f2ed5100ce4a49ba266386e35e9109e4415e66bd9a9448696078f247d204949a29197faa9396bd1f014c88fcdd1aa1e98a3f8 + checksum: 800674266633e204bfddddd7ce0a35cfbe308b0f05191e96be02d4968c2b0c92e677887dd4ddfc3cecbb0ae46e7e1248084c5a00a9db798274faa9531ed17f48 languageName: node linkType: hard -"@docusaurus/plugin-content-pages@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/plugin-content-pages@npm:3.10.1" +"@docusaurus/plugin-content-pages@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/plugin-content-pages@npm:3.10.2" dependencies: - "@docusaurus/core": "npm:3.10.1" - "@docusaurus/mdx-loader": "npm:3.10.1" - "@docusaurus/types": "npm:3.10.1" - "@docusaurus/utils": "npm:3.10.1" - "@docusaurus/utils-validation": "npm:3.10.1" + "@docusaurus/core": "npm:3.10.2" + "@docusaurus/mdx-loader": "npm:3.10.2" + "@docusaurus/types": "npm:3.10.2" + "@docusaurus/utils": "npm:3.10.2" + "@docusaurus/utils-validation": "npm:3.10.2" fs-extra: "npm:^11.1.1" tslib: "npm:^2.6.0" webpack: "npm:^5.88.1" peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - checksum: 00dab7af101b0607746d820c399bc3062279165b1b79009f2c6c8439a627818748da52f43eee0a4a874923707c89c9fce17aab72a7c88d298fa36b6efc0bacc7 + checksum: 68974ebe1446813f37cff5aa77163dfd82b46e62e724b829b7fc1461a33c5e54391699b3adf9ff9696f6d5bd1da50df8c66299ed3a6db3f7c2ca6356e77a6118 languageName: node linkType: hard -"@docusaurus/plugin-css-cascade-layers@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/plugin-css-cascade-layers@npm:3.10.1" +"@docusaurus/plugin-css-cascade-layers@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/plugin-css-cascade-layers@npm:3.10.2" dependencies: - "@docusaurus/core": "npm:3.10.1" - "@docusaurus/types": "npm:3.10.1" - "@docusaurus/utils": "npm:3.10.1" - "@docusaurus/utils-validation": "npm:3.10.1" + "@docusaurus/core": "npm:3.10.2" + "@docusaurus/types": "npm:3.10.2" + "@docusaurus/utils": "npm:3.10.2" + "@docusaurus/utils-validation": "npm:3.10.2" tslib: "npm:^2.6.0" - checksum: fd11a7488029226276bbdbeb1de4035ed425b8d7be0fbad3d5a0aa3a18646064f1930835bfc951837bfc813873548e1a8b23d9f52cb20120e1239a1d93128d79 + checksum: 2c7429b24edc1ef02aaa8e26734a429f117eb053e43b9b8a586be5285a897236560e7e0174277abedf6c364ccd10850dc728d851e48075eca3afbe1ac0ec77e3 languageName: node linkType: hard -"@docusaurus/plugin-debug@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/plugin-debug@npm:3.10.1" +"@docusaurus/plugin-debug@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/plugin-debug@npm:3.10.2" dependencies: - "@docusaurus/core": "npm:3.10.1" - "@docusaurus/types": "npm:3.10.1" - "@docusaurus/utils": "npm:3.10.1" + "@docusaurus/core": "npm:3.10.2" + "@docusaurus/types": "npm:3.10.2" + "@docusaurus/utils": "npm:3.10.2" fs-extra: "npm:^11.1.1" react-json-view-lite: "npm:^2.3.0" tslib: "npm:^2.6.0" peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - checksum: d2978e40e83c1c4fd904dc3bc62ef1b6d52cf28e391e9dacad40712d7b14ce9ad22f0ad710631021066c296d10c364621b2c11a186694d8f5c6e59f35043f99a + checksum: df6acce06f265a65a46986a2d47d60546a13b03b3204c472ff9e48b38cb140c939b6a8249e7aba64c387aa63ffdbd2122194e55f617dc34414303421dbb82554 languageName: node linkType: hard -"@docusaurus/plugin-google-analytics@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/plugin-google-analytics@npm:3.10.1" +"@docusaurus/plugin-google-analytics@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/plugin-google-analytics@npm:3.10.2" dependencies: - "@docusaurus/core": "npm:3.10.1" - "@docusaurus/types": "npm:3.10.1" - "@docusaurus/utils-validation": "npm:3.10.1" + "@docusaurus/core": "npm:3.10.2" + "@docusaurus/types": "npm:3.10.2" + "@docusaurus/utils-validation": "npm:3.10.2" tslib: "npm:^2.6.0" peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - checksum: c9aff3f3467d3e76a1dd8e1518e8a11b0d488b1761f0302a6cc9fdb94635b6e5673b3d993434205dc65cd6eb9677f795157887d508f01ba175c3f5e411aab2e6 + checksum: 0b2f472203e16103ba8cebc3a32caddaecb783bca35162096ae6ad2d5fdcb724fcfce0b79682038394a664a0b38864e63e5e7a8d0d14024939891360e77ff49d languageName: node linkType: hard -"@docusaurus/plugin-google-gtag@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/plugin-google-gtag@npm:3.10.1" +"@docusaurus/plugin-google-gtag@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/plugin-google-gtag@npm:3.10.2" dependencies: - "@docusaurus/core": "npm:3.10.1" - "@docusaurus/types": "npm:3.10.1" - "@docusaurus/utils-validation": "npm:3.10.1" - "@types/gtag.js": "npm:^0.0.20" + "@docusaurus/core": "npm:3.10.2" + "@docusaurus/types": "npm:3.10.2" + "@docusaurus/utils-validation": "npm:3.10.2" tslib: "npm:^2.6.0" peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - checksum: 6792713f813cb06dcc54ece92ac81faed01017a71079726f97adade1fa2b6665626369c788e108dee9c02e0cbfc4cc71a2e87db5d3e43f47944e7b0921bb71db + checksum: 029b9b18e4c588daa0dd0cd79cb8b3682cc8c44a83b28f0179eb45c9717619e104d276df3f0ce7dadea01cdae4a61c8ef3fb993f59be5daa5365df3317ef2be8 languageName: node linkType: hard -"@docusaurus/plugin-google-tag-manager@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/plugin-google-tag-manager@npm:3.10.1" +"@docusaurus/plugin-google-tag-manager@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/plugin-google-tag-manager@npm:3.10.2" dependencies: - "@docusaurus/core": "npm:3.10.1" - "@docusaurus/types": "npm:3.10.1" - "@docusaurus/utils-validation": "npm:3.10.1" + "@docusaurus/core": "npm:3.10.2" + "@docusaurus/types": "npm:3.10.2" + "@docusaurus/utils-validation": "npm:3.10.2" tslib: "npm:^2.6.0" peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - checksum: a1a01de5f876d63fec022d312c711525523ee380af3382e35d1953a577450da36039dfcd1ff7f0af0cd189cc14d268c64276def573bdc70d091db2cad56edf9f + checksum: 1cf911e6b91dd76fe8283d1c16643d1c46435fc03a89b786968b2f93606ae1af58c3cd1208f548e980025c45b4ff5c9b307be71ab56c0102c4c2e8e91f052370 languageName: node linkType: hard -"@docusaurus/plugin-sitemap@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/plugin-sitemap@npm:3.10.1" +"@docusaurus/plugin-sitemap@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/plugin-sitemap@npm:3.10.2" dependencies: - "@docusaurus/core": "npm:3.10.1" - "@docusaurus/logger": "npm:3.10.1" - "@docusaurus/types": "npm:3.10.1" - "@docusaurus/utils": "npm:3.10.1" - "@docusaurus/utils-common": "npm:3.10.1" - "@docusaurus/utils-validation": "npm:3.10.1" + "@docusaurus/core": "npm:3.10.2" + "@docusaurus/logger": "npm:3.10.2" + "@docusaurus/types": "npm:3.10.2" + "@docusaurus/utils": "npm:3.10.2" + "@docusaurus/utils-common": "npm:3.10.2" + "@docusaurus/utils-validation": "npm:3.10.2" fs-extra: "npm:^11.1.1" sitemap: "npm:^7.1.1" tslib: "npm:^2.6.0" peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - checksum: 22c04be000a1577f9a0c169fb67ff0d4deaf618aa2a3839336cfaed667558f1db3ada5bed23ee7245596a307bbddbed62ede8e342120aa8efebe0b9d35f4da75 + checksum: 4d1c28458303ec439ef31ab9f7f23a18e7ee2d355c4331a739a42aae9cf19f5506415ea631d7569580008e0215274c15f4148b84d6cd0c5f8dd208f7f49e7349 languageName: node linkType: hard -"@docusaurus/plugin-svgr@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/plugin-svgr@npm:3.10.1" +"@docusaurus/plugin-svgr@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/plugin-svgr@npm:3.10.2" dependencies: - "@docusaurus/core": "npm:3.10.1" - "@docusaurus/types": "npm:3.10.1" - "@docusaurus/utils": "npm:3.10.1" - "@docusaurus/utils-validation": "npm:3.10.1" + "@docusaurus/core": "npm:3.10.2" + "@docusaurus/types": "npm:3.10.2" + "@docusaurus/utils": "npm:3.10.2" + "@docusaurus/utils-validation": "npm:3.10.2" "@svgr/core": "npm:8.1.0" "@svgr/webpack": "npm:^8.1.0" tslib: "npm:^2.6.0" @@ -2600,66 +2611,66 @@ __metadata: peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - checksum: d866efe42351d1a66febacd6c33753f5ace2056fe86259365408edd354fb67994208a4e2c9939a921c2a20cb11b64fdd3584d34dde8d0329a63a55c9a74c488f - languageName: node - linkType: hard - -"@docusaurus/preset-classic@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/preset-classic@npm:3.10.1" - dependencies: - "@docusaurus/core": "npm:3.10.1" - "@docusaurus/plugin-content-blog": "npm:3.10.1" - "@docusaurus/plugin-content-docs": "npm:3.10.1" - "@docusaurus/plugin-content-pages": "npm:3.10.1" - "@docusaurus/plugin-css-cascade-layers": "npm:3.10.1" - "@docusaurus/plugin-debug": "npm:3.10.1" - "@docusaurus/plugin-google-analytics": "npm:3.10.1" - "@docusaurus/plugin-google-gtag": "npm:3.10.1" - "@docusaurus/plugin-google-tag-manager": "npm:3.10.1" - "@docusaurus/plugin-sitemap": "npm:3.10.1" - "@docusaurus/plugin-svgr": "npm:3.10.1" - "@docusaurus/theme-classic": "npm:3.10.1" - "@docusaurus/theme-common": "npm:3.10.1" - "@docusaurus/theme-search-algolia": "npm:3.10.1" - "@docusaurus/types": "npm:3.10.1" + checksum: 2817f91f641336dab5d6874ee513e288d599a0be4e1a9c59698befcf41f91aeb73b3660198777c09f4470a6ba31c2d57e9fc1cfd482e0067372bb137932c6307 + languageName: node + linkType: hard + +"@docusaurus/preset-classic@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/preset-classic@npm:3.10.2" + dependencies: + "@docusaurus/core": "npm:3.10.2" + "@docusaurus/plugin-content-blog": "npm:3.10.2" + "@docusaurus/plugin-content-docs": "npm:3.10.2" + "@docusaurus/plugin-content-pages": "npm:3.10.2" + "@docusaurus/plugin-css-cascade-layers": "npm:3.10.2" + "@docusaurus/plugin-debug": "npm:3.10.2" + "@docusaurus/plugin-google-analytics": "npm:3.10.2" + "@docusaurus/plugin-google-gtag": "npm:3.10.2" + "@docusaurus/plugin-google-tag-manager": "npm:3.10.2" + "@docusaurus/plugin-sitemap": "npm:3.10.2" + "@docusaurus/plugin-svgr": "npm:3.10.2" + "@docusaurus/theme-classic": "npm:3.10.2" + "@docusaurus/theme-common": "npm:3.10.2" + "@docusaurus/theme-search-algolia": "npm:3.10.2" + "@docusaurus/types": "npm:3.10.2" peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - checksum: 524675229e33f24f678ca104eab1b6328ca31c2572e5cb2a598a330bd990a8d50eb1929aaef9031c37827a22ddaf6bb19484b75ac2a5b0936f6322d951f33559 + checksum: 455b1dea7a9867a69e2634aef4286116c5aef6612e76277ebe82538ee14517ca9a6f2e0421196bd15f7cde6376160fd6284dfe83c03a3c0d1ee00bbc642d4d35 languageName: node linkType: hard -"@docusaurus/remark-plugin-npm2yarn@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/remark-plugin-npm2yarn@npm:3.10.1" +"@docusaurus/remark-plugin-npm2yarn@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/remark-plugin-npm2yarn@npm:3.10.2" dependencies: mdast-util-mdx: "npm:^3.0.0" npm-to-yarn: "npm:^3.0.0" tslib: "npm:^2.6.0" unified: "npm:^11.0.3" unist-util-visit: "npm:^5.0.0" - checksum: 1888080d863bf4818e97a6653f16c5139efb1bf7cef24b00f1a0739a504695a6094d283333353dfeea9254a707b37101651f13ed796348c86633682275139010 - languageName: node - linkType: hard - -"@docusaurus/theme-classic@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/theme-classic@npm:3.10.1" - dependencies: - "@docusaurus/core": "npm:3.10.1" - "@docusaurus/logger": "npm:3.10.1" - "@docusaurus/mdx-loader": "npm:3.10.1" - "@docusaurus/module-type-aliases": "npm:3.10.1" - "@docusaurus/plugin-content-blog": "npm:3.10.1" - "@docusaurus/plugin-content-docs": "npm:3.10.1" - "@docusaurus/plugin-content-pages": "npm:3.10.1" - "@docusaurus/theme-common": "npm:3.10.1" - "@docusaurus/theme-translations": "npm:3.10.1" - "@docusaurus/types": "npm:3.10.1" - "@docusaurus/utils": "npm:3.10.1" - "@docusaurus/utils-common": "npm:3.10.1" - "@docusaurus/utils-validation": "npm:3.10.1" + checksum: 323c32e065caf35b7cdbbba4b6602e5e23f8fc857bdc39cd390eca8865bb807222df39f158269a396e2bc91b73fcb88023d9e56c519e69213673fb496a5fd97b + languageName: node + linkType: hard + +"@docusaurus/theme-classic@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/theme-classic@npm:3.10.2" + dependencies: + "@docusaurus/core": "npm:3.10.2" + "@docusaurus/logger": "npm:3.10.2" + "@docusaurus/mdx-loader": "npm:3.10.2" + "@docusaurus/module-type-aliases": "npm:3.10.2" + "@docusaurus/plugin-content-blog": "npm:3.10.2" + "@docusaurus/plugin-content-docs": "npm:3.10.2" + "@docusaurus/plugin-content-pages": "npm:3.10.2" + "@docusaurus/theme-common": "npm:3.10.2" + "@docusaurus/theme-translations": "npm:3.10.2" + "@docusaurus/types": "npm:3.10.2" + "@docusaurus/utils": "npm:3.10.2" + "@docusaurus/utils-common": "npm:3.10.2" + "@docusaurus/utils-validation": "npm:3.10.2" "@mdx-js/react": "npm:^3.0.0" clsx: "npm:^2.0.0" copy-text-to-clipboard: "npm:^3.2.0" @@ -2676,18 +2687,18 @@ __metadata: peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - checksum: 55be80ca9a1880c0a923c519243233bb52025e4a0ae312907c9df52b8ab3594819da164a71377e6ed5b02eef740496eff006da41462603195c0284b977515ceb + checksum: c9a19f52ddf8323c22f4bd8765fbcf552cf1ac215949dd50df60e2131ff7f942365e8ac5b4f7fa8230e22b73df5400b97f0fa915fba8ad56445b9ff4eb3946cc languageName: node linkType: hard -"@docusaurus/theme-common@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/theme-common@npm:3.10.1" +"@docusaurus/theme-common@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/theme-common@npm:3.10.2" dependencies: - "@docusaurus/mdx-loader": "npm:3.10.1" - "@docusaurus/module-type-aliases": "npm:3.10.1" - "@docusaurus/utils": "npm:3.10.1" - "@docusaurus/utils-common": "npm:3.10.1" + "@docusaurus/mdx-loader": "npm:3.10.2" + "@docusaurus/module-type-aliases": "npm:3.10.2" + "@docusaurus/utils": "npm:3.10.2" + "@docusaurus/utils-common": "npm:3.10.2" "@types/history": "npm:^4.7.11" "@types/react": "npm:*" "@types/react-router-config": "npm:*" @@ -2700,23 +2711,23 @@ __metadata: "@docusaurus/plugin-content-docs": "*" react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - checksum: f66e25b6449e03b5c8812be407e80c1c9ffc87b07395273d009a40761302e6230ab357096de95b47f77aef1d7e4d0363220cca07b7fbdeb9679770e20e0ab7a4 + checksum: 2ec64449ff69beb3c506f3f7de837afe6a38fc904b1d38547415fb32cd3dcac7d868b14b59d6fc14e0eb3d47c2091bd05fecd294455b765a4bc9b2af9cdadf0a languageName: node linkType: hard -"@docusaurus/theme-search-algolia@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/theme-search-algolia@npm:3.10.1" +"@docusaurus/theme-search-algolia@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/theme-search-algolia@npm:3.10.2" dependencies: "@algolia/autocomplete-core": "npm:^1.19.2" "@docsearch/react": "npm:^3.9.0 || ^4.3.2" - "@docusaurus/core": "npm:3.10.1" - "@docusaurus/logger": "npm:3.10.1" - "@docusaurus/plugin-content-docs": "npm:3.10.1" - "@docusaurus/theme-common": "npm:3.10.1" - "@docusaurus/theme-translations": "npm:3.10.1" - "@docusaurus/utils": "npm:3.10.1" - "@docusaurus/utils-validation": "npm:3.10.1" + "@docusaurus/core": "npm:3.10.2" + "@docusaurus/logger": "npm:3.10.2" + "@docusaurus/plugin-content-docs": "npm:3.10.2" + "@docusaurus/theme-common": "npm:3.10.2" + "@docusaurus/theme-translations": "npm:3.10.2" + "@docusaurus/utils": "npm:3.10.2" + "@docusaurus/utils-validation": "npm:3.10.2" algoliasearch: "npm:^5.37.0" algoliasearch-helper: "npm:^3.26.0" clsx: "npm:^2.0.0" @@ -2728,30 +2739,30 @@ __metadata: peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - checksum: dd558ac0c50f2374b8285f463ec23e1996247f4436cd9147fd313689d02d9113214e0368c64fdc8ca106f10b6ef93589814980ea0121cb3583ca87feae4b19c3 + checksum: 2097c7a0e80e251392b6e6c4a6d5d79eb88072dab002df6ce1dff0ec22e0660f0ba8c32e5a57605a51afe4461188ae998a49740cc97df5dcd803bb0853a536ad languageName: node linkType: hard -"@docusaurus/theme-translations@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/theme-translations@npm:3.10.1" +"@docusaurus/theme-translations@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/theme-translations@npm:3.10.2" dependencies: fs-extra: "npm:^11.1.1" tslib: "npm:^2.6.0" - checksum: 2a1c871e883a82c4c5071820dcdc3bbeea5a3571978d022c1d1b820ae8b676ea5dd173b9c17542a032b9a5ec7e06f5d8a3b9de31a1e1f474f527baccfb5f9deb + checksum: f063b75d700f70a4dc5203268962ceef84a5ba873109c5b9de0ffea7cc70ddd8fea74fa3676ffc27f736568d51219a3791486bee9f3ea6c4d925fa60e4300f54 languageName: node linkType: hard -"@docusaurus/tsconfig@npm:^3.10.1": - version: 3.10.1 - resolution: "@docusaurus/tsconfig@npm:3.10.1" - checksum: 557eab379f82cc36e14d956f71b3ba81c71d535244b664a75fd1d2cc5e9c20c400b4ddf1f2b62a2c8c6c0b854d9192da5c651c719a51213cadcda94ca7f587b5 +"@docusaurus/tsconfig@npm:^3.10.2": + version: 3.10.2 + resolution: "@docusaurus/tsconfig@npm:3.10.2" + checksum: f73d11ce6440d8ad3d8a87a87661e39d1d16451db0f16cd15a1856b331608b429e4b35ab1e8d1fae4c4e2b5bb4b8c238bac3900a8f024a68ba942c633c228361 languageName: node linkType: hard -"@docusaurus/types@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/types@npm:3.10.1" +"@docusaurus/types@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/types@npm:3.10.2" dependencies: "@mdx-js/mdx": "npm:^3.0.0" "@types/history": "npm:^4.7.11" @@ -2766,50 +2777,50 @@ __metadata: peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - checksum: 63cc1d92ec775fb0e58f156b4edc7075612943a94d15d4648b60effcbc34c70a1092569d66d552878779b48d5111abe2fc154ba6a3bca2af0383550c9f9a015b + checksum: 29672542109c69c7527a14767f0acbfac6635e650be6da75998f97cda7987deda30f402c04438879492a798975c9484265139f603631a2df0575a49f29a7345d languageName: node linkType: hard -"@docusaurus/utils-common@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/utils-common@npm:3.10.1" +"@docusaurus/utils-common@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/utils-common@npm:3.10.2" dependencies: - "@docusaurus/types": "npm:3.10.1" + "@docusaurus/types": "npm:3.10.2" tslib: "npm:^2.6.0" - checksum: 1dde7a5c538a2cbe9eba46c9a3991a773e2d9d5b9c489cb010f9284c33cba7d494c1300557f850fa6a6e857747ca835b91f6036b02a726e13d296d7a65f8d8db + checksum: 65727f7acf200a2d026475e2f81a78fbe37b757c869f187122a69cfc40b4b1936699d83a2e701c2de856f9c68e7c8f307a3fb56a473bde9c883e865887b9e8c6 languageName: node linkType: hard -"@docusaurus/utils-validation@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/utils-validation@npm:3.10.1" +"@docusaurus/utils-validation@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/utils-validation@npm:3.10.2" dependencies: - "@docusaurus/logger": "npm:3.10.1" - "@docusaurus/utils": "npm:3.10.1" - "@docusaurus/utils-common": "npm:3.10.1" + "@docusaurus/logger": "npm:3.10.2" + "@docusaurus/utils": "npm:3.10.2" + "@docusaurus/utils-common": "npm:3.10.2" fs-extra: "npm:^11.2.0" joi: "npm:^17.9.2" js-yaml: "npm:^4.1.0" lodash: "npm:^4.17.21" tslib: "npm:^2.6.0" - checksum: 6368eb2a879fc1c4a507873689bd0a08257e2bc72a2ba53b3629d633d97d368168720fc504a54f96a0652982fc098f29675076e1fbcaf0244947645131a3d2f9 + checksum: 67deae60e3338acae79928655d68db52bb1691ed467bf66ac9d1ed45a5b95d927af71f68c0d6120e908bea1d5e97562b3c3edbca93ebf07adc02012ec2da8277 languageName: node linkType: hard -"@docusaurus/utils@npm:3.10.1": - version: 3.10.1 - resolution: "@docusaurus/utils@npm:3.10.1" +"@docusaurus/utils@npm:3.10.2": + version: 3.10.2 + resolution: "@docusaurus/utils@npm:3.10.2" dependencies: - "@docusaurus/logger": "npm:3.10.1" - "@docusaurus/types": "npm:3.10.1" - "@docusaurus/utils-common": "npm:3.10.1" + "@11ty/gray-matter": "npm:^1.0.0" + "@docusaurus/logger": "npm:3.10.2" + "@docusaurus/types": "npm:3.10.2" + "@docusaurus/utils-common": "npm:3.10.2" escape-string-regexp: "npm:^4.0.0" execa: "npm:^5.1.1" file-loader: "npm:^6.2.0" fs-extra: "npm:^11.1.1" github-slugger: "npm:^1.5.0" globby: "npm:^11.1.0" - gray-matter: "npm:^4.0.3" jiti: "npm:^1.20.0" js-yaml: "npm:^4.1.0" lodash: "npm:^4.17.21" @@ -2821,7 +2832,7 @@ __metadata: url-loader: "npm:^4.1.1" utility-types: "npm:^3.10.0" webpack: "npm:^5.88.1" - checksum: 97d51da30035ef34eced1dbc937f829309a8165a07a9c66d87c5deec03fb62150cbc70b2763ffdec0286b21f1be53f4011a036e4265cb971a892f0ab12172e0a + checksum: 7d72ab04b8587a001d57efe71f40f8c0ae7e0087a51af791372455368726a8ea1c18473e0af5331aa30ea6a298d386a07417163597e2461a0213e14befb3609a languageName: node linkType: hard @@ -3913,94 +3924,110 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.9.1": - version: 1.9.1 - resolution: "@swc/core-darwin-arm64@npm:1.9.1" +"@swc/core-darwin-arm64@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-darwin-arm64@npm:1.15.47" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.9.1": - version: 1.9.1 - resolution: "@swc/core-darwin-x64@npm:1.9.1" +"@swc/core-darwin-x64@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-darwin-x64@npm:1.15.47" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.9.1": - version: 1.9.1 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.9.1" +"@swc/core-linux-arm-gnueabihf@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.15.47" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.9.1": - version: 1.9.1 - resolution: "@swc/core-linux-arm64-gnu@npm:1.9.1" +"@swc/core-linux-arm64-gnu@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-linux-arm64-gnu@npm:1.15.47" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.9.1": - version: 1.9.1 - resolution: "@swc/core-linux-arm64-musl@npm:1.9.1" +"@swc/core-linux-arm64-musl@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-linux-arm64-musl@npm:1.15.47" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.9.1": - version: 1.9.1 - resolution: "@swc/core-linux-x64-gnu@npm:1.9.1" +"@swc/core-linux-ppc64-gnu@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-linux-ppc64-gnu@npm:1.15.47" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-s390x-gnu@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-linux-s390x-gnu@npm:1.15.47" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-x64-gnu@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-linux-x64-gnu@npm:1.15.47" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.9.1": - version: 1.9.1 - resolution: "@swc/core-linux-x64-musl@npm:1.9.1" +"@swc/core-linux-x64-musl@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-linux-x64-musl@npm:1.15.47" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.9.1": - version: 1.9.1 - resolution: "@swc/core-win32-arm64-msvc@npm:1.9.1" +"@swc/core-win32-arm64-msvc@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-win32-arm64-msvc@npm:1.15.47" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.9.1": - version: 1.9.1 - resolution: "@swc/core-win32-ia32-msvc@npm:1.9.1" +"@swc/core-win32-ia32-msvc@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-win32-ia32-msvc@npm:1.15.47" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.9.1": - version: 1.9.1 - resolution: "@swc/core-win32-x64-msvc@npm:1.9.1" +"@swc/core-win32-x64-msvc@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-win32-x64-msvc@npm:1.15.47" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@swc/core@npm:^1.7.39": - version: 1.9.1 - resolution: "@swc/core@npm:1.9.1" - dependencies: - "@swc/core-darwin-arm64": "npm:1.9.1" - "@swc/core-darwin-x64": "npm:1.9.1" - "@swc/core-linux-arm-gnueabihf": "npm:1.9.1" - "@swc/core-linux-arm64-gnu": "npm:1.9.1" - "@swc/core-linux-arm64-musl": "npm:1.9.1" - "@swc/core-linux-x64-gnu": "npm:1.9.1" - "@swc/core-linux-x64-musl": "npm:1.9.1" - "@swc/core-win32-arm64-msvc": "npm:1.9.1" - "@swc/core-win32-ia32-msvc": "npm:1.9.1" - "@swc/core-win32-x64-msvc": "npm:1.9.1" +"@swc/core@npm:^1.15.40": + version: 1.15.47 + resolution: "@swc/core@npm:1.15.47" + dependencies: + "@swc/core-darwin-arm64": "npm:1.15.47" + "@swc/core-darwin-x64": "npm:1.15.47" + "@swc/core-linux-arm-gnueabihf": "npm:1.15.47" + "@swc/core-linux-arm64-gnu": "npm:1.15.47" + "@swc/core-linux-arm64-musl": "npm:1.15.47" + "@swc/core-linux-ppc64-gnu": "npm:1.15.47" + "@swc/core-linux-s390x-gnu": "npm:1.15.47" + "@swc/core-linux-x64-gnu": "npm:1.15.47" + "@swc/core-linux-x64-musl": "npm:1.15.47" + "@swc/core-win32-arm64-msvc": "npm:1.15.47" + "@swc/core-win32-ia32-msvc": "npm:1.15.47" + "@swc/core-win32-x64-msvc": "npm:1.15.47" "@swc/counter": "npm:^0.1.3" - "@swc/types": "npm:^0.1.14" + "@swc/types": "npm:^0.1.27" peerDependencies: - "@swc/helpers": "*" + "@swc/helpers": ">=0.5.17" dependenciesMeta: "@swc/core-darwin-arm64": optional: true @@ -4012,6 +4039,10 @@ __metadata: optional: true "@swc/core-linux-arm64-musl": optional: true + "@swc/core-linux-ppc64-gnu": + optional: true + "@swc/core-linux-s390x-gnu": + optional: true "@swc/core-linux-x64-gnu": optional: true "@swc/core-linux-x64-musl": @@ -4025,7 +4056,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: 7b9a3da9bdd95216b031739ebe35983e69f17284809a62706c93edfd30ede0732060d944db23007aca9aebbc49859eb5784454c8882ae6fd04eb8bd15ac6a247 + checksum: 34ccbb3ae5db0af520934abfdf2505b8490128b48863d9a2e6db2d8787e2d7415318000c92fd32ebe351b24d93f36f52c58f35b9a98e60a4010b34a1af2c3d5e languageName: node linkType: hard @@ -4036,91 +4067,107 @@ __metadata: languageName: node linkType: hard -"@swc/html-darwin-arm64@npm:1.15.3": - version: 1.15.3 - resolution: "@swc/html-darwin-arm64@npm:1.15.3" +"@swc/html-darwin-arm64@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/html-darwin-arm64@npm:1.15.47" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/html-darwin-x64@npm:1.15.3": - version: 1.15.3 - resolution: "@swc/html-darwin-x64@npm:1.15.3" +"@swc/html-darwin-x64@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/html-darwin-x64@npm:1.15.47" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/html-linux-arm-gnueabihf@npm:1.15.3": - version: 1.15.3 - resolution: "@swc/html-linux-arm-gnueabihf@npm:1.15.3" +"@swc/html-linux-arm-gnueabihf@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/html-linux-arm-gnueabihf@npm:1.15.47" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/html-linux-arm64-gnu@npm:1.15.3": - version: 1.15.3 - resolution: "@swc/html-linux-arm64-gnu@npm:1.15.3" +"@swc/html-linux-arm64-gnu@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/html-linux-arm64-gnu@npm:1.15.47" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/html-linux-arm64-musl@npm:1.15.3": - version: 1.15.3 - resolution: "@swc/html-linux-arm64-musl@npm:1.15.3" +"@swc/html-linux-arm64-musl@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/html-linux-arm64-musl@npm:1.15.47" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/html-linux-x64-gnu@npm:1.15.3": - version: 1.15.3 - resolution: "@swc/html-linux-x64-gnu@npm:1.15.3" +"@swc/html-linux-ppc64-gnu@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/html-linux-ppc64-gnu@npm:1.15.47" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@swc/html-linux-s390x-gnu@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/html-linux-s390x-gnu@npm:1.15.47" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@swc/html-linux-x64-gnu@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/html-linux-x64-gnu@npm:1.15.47" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/html-linux-x64-musl@npm:1.15.3": - version: 1.15.3 - resolution: "@swc/html-linux-x64-musl@npm:1.15.3" +"@swc/html-linux-x64-musl@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/html-linux-x64-musl@npm:1.15.47" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/html-win32-arm64-msvc@npm:1.15.3": - version: 1.15.3 - resolution: "@swc/html-win32-arm64-msvc@npm:1.15.3" +"@swc/html-win32-arm64-msvc@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/html-win32-arm64-msvc@npm:1.15.47" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/html-win32-ia32-msvc@npm:1.15.3": - version: 1.15.3 - resolution: "@swc/html-win32-ia32-msvc@npm:1.15.3" +"@swc/html-win32-ia32-msvc@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/html-win32-ia32-msvc@npm:1.15.47" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/html-win32-x64-msvc@npm:1.15.3": - version: 1.15.3 - resolution: "@swc/html-win32-x64-msvc@npm:1.15.3" +"@swc/html-win32-x64-msvc@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/html-win32-x64-msvc@npm:1.15.47" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@swc/html@npm:^1.13.5": - version: 1.15.3 - resolution: "@swc/html@npm:1.15.3" +"@swc/html@npm:^1.15.40": + version: 1.15.47 + resolution: "@swc/html@npm:1.15.47" dependencies: "@swc/counter": "npm:^0.1.3" - "@swc/html-darwin-arm64": "npm:1.15.3" - "@swc/html-darwin-x64": "npm:1.15.3" - "@swc/html-linux-arm-gnueabihf": "npm:1.15.3" - "@swc/html-linux-arm64-gnu": "npm:1.15.3" - "@swc/html-linux-arm64-musl": "npm:1.15.3" - "@swc/html-linux-x64-gnu": "npm:1.15.3" - "@swc/html-linux-x64-musl": "npm:1.15.3" - "@swc/html-win32-arm64-msvc": "npm:1.15.3" - "@swc/html-win32-ia32-msvc": "npm:1.15.3" - "@swc/html-win32-x64-msvc": "npm:1.15.3" + "@swc/html-darwin-arm64": "npm:1.15.47" + "@swc/html-darwin-x64": "npm:1.15.47" + "@swc/html-linux-arm-gnueabihf": "npm:1.15.47" + "@swc/html-linux-arm64-gnu": "npm:1.15.47" + "@swc/html-linux-arm64-musl": "npm:1.15.47" + "@swc/html-linux-ppc64-gnu": "npm:1.15.47" + "@swc/html-linux-s390x-gnu": "npm:1.15.47" + "@swc/html-linux-x64-gnu": "npm:1.15.47" + "@swc/html-linux-x64-musl": "npm:1.15.47" + "@swc/html-win32-arm64-msvc": "npm:1.15.47" + "@swc/html-win32-ia32-msvc": "npm:1.15.47" + "@swc/html-win32-x64-msvc": "npm:1.15.47" dependenciesMeta: "@swc/html-darwin-arm64": optional: true @@ -4132,6 +4179,10 @@ __metadata: optional: true "@swc/html-linux-arm64-musl": optional: true + "@swc/html-linux-ppc64-gnu": + optional: true + "@swc/html-linux-s390x-gnu": + optional: true "@swc/html-linux-x64-gnu": optional: true "@swc/html-linux-x64-musl": @@ -4142,16 +4193,16 @@ __metadata: optional: true "@swc/html-win32-x64-msvc": optional: true - checksum: 79d1488dc260db238aa3442360acb8e9768e950f3b3e3e8fa8de479e5198fc90237a939aac5deb69dc541bdd404872de2e4c3f9d18611ad95096de5a979434e2 + checksum: 1eec718a85d52db188a84dcd718a1077a9d1319a41a59bb388747c0b9d7a62351b5ab9c9c65141ab58731b3a01593333ab7073d45e5d3350017c4d9236ce93e4 languageName: node linkType: hard -"@swc/types@npm:^0.1.14": - version: 0.1.14 - resolution: "@swc/types@npm:0.1.14" +"@swc/types@npm:^0.1.27": + version: 0.1.27 + resolution: "@swc/types@npm:0.1.27" dependencies: "@swc/counter": "npm:^0.1.3" - checksum: 5ab5a213f25fbb038e8b2fa001a20c64363f81c199319373ed0228f316c046a996758fbaf906ba84d297b35e37727082d27974266db320e534da594716626529 + checksum: 25f1bfa0ac34e9ac60aa7de91778f70906cd77a7abb3eb68c5da8d38d5202286b293300d4bb2792b3bb8840a7f5d5c4627c4ec34d2fae6533bfb3e14a70fd8fb languageName: node linkType: hard @@ -4296,13 +4347,6 @@ __metadata: languageName: node linkType: hard -"@types/gtag.js@npm:^0.0.20": - version: 0.0.20 - resolution: "@types/gtag.js@npm:0.0.20" - checksum: eb878aa3cfab6b98f5e69ef3383e9788aaea6a4d0611c72078678374dcbb4731f533ff2bf479a865536f1626a57887b1198279ff35a65d223fe4f93d9c76dbdd - languageName: node - linkType: hard - "@types/hast@npm:^3.0.0": version: 3.0.3 resolution: "@types/hast@npm:3.0.3" @@ -4459,13 +4503,6 @@ __metadata: languageName: node linkType: hard -"@types/prop-types@npm:*": - version: 15.7.11 - resolution: "@types/prop-types@npm:15.7.11" - checksum: e53423cf9d510515ef8b47ff42f4f1b65a7b7b37c8704e2dbfcb9a60defe0c0e1f3cb1acfdeb466bad44ca938d7c79bffdd51b48ffb659df2432169d0b27a132 - languageName: node - linkType: hard - "@types/qs@npm:*": version: 6.9.10 resolution: "@types/qs@npm:6.9.10" @@ -4521,18 +4558,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*": - version: 18.2.38 - resolution: "@types/react@npm:18.2.38" - dependencies: - "@types/prop-types": "npm:*" - "@types/scheduler": "npm:*" - csstype: "npm:^3.0.2" - checksum: 56edd4756081b677e38ee23ad6d340658c5e2468785cb20968318cec357e1ea7ccf3ecd9534981741192dd1b894200acfaf0f1551b4795c6077668f6afc19345 - languageName: node - linkType: hard - -"@types/react@npm:^19.2.8": +"@types/react@npm:*, @types/react@npm:^19.2.8": version: 19.2.8 resolution: "@types/react@npm:19.2.8" dependencies: @@ -4557,13 +4583,6 @@ __metadata: languageName: node linkType: hard -"@types/scheduler@npm:*": - version: 0.16.8 - resolution: "@types/scheduler@npm:0.16.8" - checksum: f86de504945b8fc41b1f391f847444d542e2e4067cf7e5d9bfeb5d2d2393d3203b1161bc0ef3b1e104d828dabfb60baf06e8d2c27e27ff7e8258e6e618d8c4ec - languageName: node - linkType: hard - "@types/send@npm:*, @types/send@npm:<1": version: 0.17.6 resolution: "@types/send@npm:0.17.6" @@ -4885,10 +4904,10 @@ __metadata: languageName: node linkType: hard -"address@npm:^1.0.1": - version: 1.2.2 - resolution: "address@npm:1.2.2" - checksum: 1c8056b77fb124456997b78ed682ecc19d2fd7ea8bd5850a2aa8c3e3134c913847c57bcae418622efd32ba858fa1e242a40a251ac31da0515664fc0ac03a047d +"address@npm:^2.0.1": + version: 2.0.3 + resolution: "address@npm:2.0.3" + checksum: e95c8d989812a9b1cef5e167328a1dd6fd2c41b02005793b7b4631d32dbf7de30bd17685d2f17fbfb94b67f3c422f9a0399caee3c1fbfa18c8e20dc0c8c77d3b languageName: node linkType: hard @@ -5097,15 +5116,6 @@ __metadata: languageName: node linkType: hard -"argparse@npm:^1.0.7": - version: 1.0.10 - resolution: "argparse@npm:1.0.10" - dependencies: - sprintf-js: "npm:~1.0.2" - checksum: b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de - languageName: node - linkType: hard - "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -6377,13 +6387,6 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^3.0.2": - version: 3.1.2 - resolution: "csstype@npm:3.1.2" - checksum: 32c038af259897c807ac738d9eab16b3d86747c72b09d5c740978e06f067f9b7b1737e1b75e407c7ab1fe1543dc95f20e202b4786aeb1b8d3bdf5d5ce655e6c6 - languageName: node - linkType: hard - "csstype@npm:^3.2.2": version: 3.2.3 resolution: "csstype@npm:3.2.3" @@ -6574,16 +6577,15 @@ __metadata: languageName: node linkType: hard -"detect-port@npm:^1.5.1": - version: 1.5.1 - resolution: "detect-port@npm:1.5.1" +"detect-port@npm:^2.1.0": + version: 2.1.0 + resolution: "detect-port@npm:2.1.0" dependencies: - address: "npm:^1.0.1" - debug: "npm:4" + address: "npm:^2.0.1" bin: - detect: bin/detect-port.js - detect-port: bin/detect-port.js - checksum: f2b204ad3a9f8e8b53fea35fcc97469f31a8e3e786a2f59fbc886397e33b5f130c5f964bf001b9a64d990047c3824f6a439308461ff19801df04ab48a754639e + detect: dist/commonjs/bin/detect-port.js + detect-port: dist/commonjs/bin/detect-port.js + checksum: 06236ff1197ffea038d4a1c0ab60200ece1ac234eb00a507f93e986483c06989b9efd424cc2bbb8e9556c3984ce906e8a663799797e415626eefb26f040bd5d8 languageName: node linkType: hard @@ -6951,7 +6953,7 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0, esprima@npm:~4.0.0": +"esprima@npm:~4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: @@ -7661,18 +7663,6 @@ __metadata: languageName: node linkType: hard -"gray-matter@npm:^4.0.3": - version: 4.0.3 - resolution: "gray-matter@npm:4.0.3" - dependencies: - js-yaml: "npm:^3.13.1" - kind-of: "npm:^6.0.2" - section-matter: "npm:^1.0.0" - strip-bom-string: "npm:^1.0.0" - checksum: e38489906dad4f162ca01e0dcbdbed96d1a53740cef446b9bf76d80bec66fa799af07776a18077aee642346c5e1365ed95e4c91854a12bf40ba0d4fb43a625a6 - languageName: node - linkType: hard - "gzip-size@npm:^6.0.0": version: 6.0.0 resolution: "gzip-size@npm:6.0.0" @@ -8709,18 +8699,6 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.13.1": - version: 3.14.2 - resolution: "js-yaml@npm:3.14.2" - dependencies: - argparse: "npm:^1.0.7" - esprima: "npm:^4.0.0" - bin: - js-yaml: bin/js-yaml.js - checksum: 3261f25912f5dd76605e5993d0a126c2b6c346311885d3c483706cd722efe34f697ea0331f654ce27c00a42b426e524518ec89d65ed02ea47df8ad26dcc8ce69 - languageName: node - linkType: hard - "jsesc@npm:^3.0.2, jsesc@npm:~3.0.2": version: 3.0.2 resolution: "jsesc@npm:3.0.2" @@ -8807,7 +8785,7 @@ __metadata: languageName: node linkType: hard -"kind-of@npm:^6.0.0, kind-of@npm:^6.0.2": +"kind-of@npm:^6.0.0, kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": version: 6.0.3 resolution: "kind-of@npm:6.0.3" checksum: 61cdff9623dabf3568b6445e93e31376bee1cdb93f8ba7033d86022c2a9b1791a1d9510e026e6465ebd701a6dd2f7b0808483ad8838341ac52f003f512e0b4c4 @@ -12247,13 +12225,13 @@ __metadata: resolution: "react-navigation-website@workspace:." dependencies: "@babel/types": "npm:^7.28.5" - "@docusaurus/core": "npm:3.10.1" - "@docusaurus/faster": "npm:^3.10.1" - "@docusaurus/plugin-client-redirects": "npm:3.10.1" - "@docusaurus/plugin-google-analytics": "npm:3.10.1" - "@docusaurus/preset-classic": "npm:3.10.1" - "@docusaurus/remark-plugin-npm2yarn": "npm:3.10.1" - "@docusaurus/tsconfig": "npm:^3.10.1" + "@docusaurus/core": "npm:3.10.2" + "@docusaurus/faster": "npm:^3.10.2" + "@docusaurus/plugin-client-redirects": "npm:3.10.2" + "@docusaurus/plugin-google-analytics": "npm:3.10.2" + "@docusaurus/preset-classic": "npm:3.10.2" + "@docusaurus/remark-plugin-npm2yarn": "npm:3.10.2" + "@docusaurus/tsconfig": "npm:^3.10.2" "@ffprobe-installer/ffprobe": "npm:^2.1.2" "@mdx-js/react": "npm:^3.1.1" "@octokit/graphql": "npm:^9.0.3" @@ -13291,13 +13269,6 @@ __metadata: languageName: node linkType: hard -"sprintf-js@npm:~1.0.2": - version: 1.0.3 - resolution: "sprintf-js@npm:1.0.3" - checksum: ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb - languageName: node - linkType: hard - "srcset@npm:^4.0.0": version: 4.0.0 resolution: "srcset@npm:4.0.0"