diff --git a/dotcom-rendering/index.d.ts b/dotcom-rendering/index.d.ts index c52794472a5..aa038a37dbd 100644 --- a/dotcom-rendering/index.d.ts +++ b/dotcom-rendering/index.d.ts @@ -29,91 +29,91 @@ interface PerformanceEntry { renderTime: number; } -declare namespace JSX { - interface IntrinsicElements { - /** Island {@link ./src/components/Island.tsx} */ - 'gu-island': import('./src/components/Island.tsx').GuIsland; - } +declare namespace React { + namespace JSX { + interface IntrinsicElements { + /** Island {@link ./src/components/Island.tsx} */ + 'gu-island': import('./src/components/Island.tsx').GuIsland; + } - interface IntrinsicAttributes { - /** - * **Rendered Components – Ophan** - * - * The Ophan client automatically tracks components on the page - * that have the `data-component` attribute. - * To avoid race conditions, it is best to add this attribute only - * to server-rendered HTML. - * - * Add `data-component="component-name"` to the element you want - * to track. - * - * The page views table will then contain `component-name` when the - * element is present on the page. - */ - 'data-component'?: string; - /** - * **Component Clicks – Ophan** - * - * The Ophan client automatically tracks click interactions - * on components that have the `data-link-name` attribute. - * To avoid race conditions, it is best to add this attribute only - * to server-rendered HTML. - * - * Some elements are not trackable, e.g. `div`, `span`. - * Refer to the Ophan documentation for more information. - * https://github.com/guardian/ophan/blob/0f365862682cd97cc50cf381299e0f4875e2996c/tracker-js/src/click-path-capture.js - * - * Add `data-component="component-name"` to the element you want - * to track. Then `add data-link-name="link-name"` to the anchor for which - * clicks will be tracked. - * - * The page views table will then contain `link-name` when the - * link is clicked. - */ - 'data-link-name'?: string; - /** - * Ignore a DOM element in Chromatic builds with `data-chromatic="ignore"`. - * - * https://www.chromatic.com/docs/ignoring-elements/#ignore-dom-elements - * - * Note that if the dimensions of the ignored element - * change, Chromatic will still capture the incoming changes. - */ - 'data-chromatic'?: 'ignore'; + interface IntrinsicAttributes { + /** + * **Rendered Components – Ophan** + * + * The Ophan client automatically tracks components on the page + * that have the `data-component` attribute. + * To avoid race conditions, it is best to add this attribute only + * to server-rendered HTML. + * + * Add `data-component="component-name"` to the element you want + * to track. + * + * The page views table will then contain `component-name` when the + * element is present on the page. + */ + 'data-component'?: string; + /** + * **Component Clicks – Ophan** + * + * The Ophan client automatically tracks click interactions + * on components that have the `data-link-name` attribute. + * To avoid race conditions, it is best to add this attribute only + * to server-rendered HTML. + * + * Some elements are not trackable, e.g. `div`, `span`. + * Refer to the Ophan documentation for more information. + * https://github.com/guardian/ophan/blob/0f365862682cd97cc50cf381299e0f4875e2996c/tracker-js/src/click-path-capture.js + * + * Add `data-component="component-name"` to the element you want + * to track. Then `add data-link-name="link-name"` to the anchor for which + * clicks will be tracked. + * + * The page views table will then contain `link-name` when the + * link is clicked. + */ + 'data-link-name'?: string; + /** + * Ignore a DOM element in Chromatic builds with `data-chromatic="ignore"`. + * + * https://www.chromatic.com/docs/ignoring-elements/#ignore-dom-elements + * + * Note that if the dimensions of the ignored element + * change, Chromatic will still capture the incoming changes. + */ + 'data-chromatic'?: 'ignore'; - /** - * **Spacefinder Role** - * - * [Spacefinder](https://github.com/guardian/commercial/blob/7866c914573cb6352b4076683b7906b87a70da72/docs/spacefinder/readme.md) - * is a part of the commercial bundle that is used to find positions - * for ad slots within articles. - * - * Spacefinder has rules specified for elements with this data attribute - * that it will use to find positions for ads. - */ - 'data-spacefinder-role'?: - | 'nested' - | 'immersive' - | 'fullWidth' - | 'inline' - | 'richLink' - | 'thumbnail'; + /** + * **Spacefinder Role** + * + * [Spacefinder](https://github.com/guardian/commercial/blob/7866c914573cb6352b4076683b7906b87a70da72/docs/spacefinder/readme.md) + * is a part of the commercial bundle that is used to find positions + * for ad slots within articles. + * + * Spacefinder has rules specified for elements with this data attribute + * that it will use to find positions for ads. + */ + 'data-spacefinder-role'?: + | 'nested' + | 'immersive' + | 'fullWidth' + | 'inline' + | 'richLink' + | 'thumbnail'; - /** - * **Spacefinder Type** - * - * [Spacefinder](https://github.com/guardian/commercial/blob/7866c914573cb6352b4076683b7906b87a70da72/docs/spacefinder/readme.md) - * is a part of the commercial bundle that is used to find positions - * for ad slots within articles. - * - * Spacefinder has rules specified for elements with this data attribute - * that it will use to find positions for ads. - */ - 'data-spacefinder-type'?: import('./src/types/content').FEElement['_type']; + /** + * **Spacefinder Type** + * + * [Spacefinder](https://github.com/guardian/commercial/blob/7866c914573cb6352b4076683b7906b87a70da72/docs/spacefinder/readme.md) + * is a part of the commercial bundle that is used to find positions + * for ad slots within articles. + * + * Spacefinder has rules specified for elements with this data attribute + * that it will use to find positions for ads. + */ + 'data-spacefinder-type'?: import('./src/types/content').FEElement['_type']; + } } -} -declare namespace React { interface CSSProperties { // Allow custom properties to be passed to the style prop [key: `--${string}`]: string | undefined; diff --git a/dotcom-rendering/package.json b/dotcom-rendering/package.json index 0b3508eacd2..e783644adf5 100644 --- a/dotcom-rendering/package.json +++ b/dotcom-rendering/package.json @@ -75,8 +75,8 @@ "@types/lodash.get": "4.4.9", "@types/node": "catalog:", "@types/qs": "6.9.15", - "@types/react": "18.3.1", - "@types/react-dom": "18.3.0", + "@types/react": "19.2.18", + "@types/react-dom": "19.2.4", "@types/react-google-recaptcha": "2.1.9", "@types/react-test-renderer": "18.3.0", "@types/relateurl": "0.2.33", @@ -132,8 +132,8 @@ "postcss-styled-syntax": "0.7.1", "preact": "10.15.1", "preact-render-to-string": "6.0.2", - "react": "18.3.1", - "react-dom": "18.3.1", + "react": "19.2.8", + "react-dom": "19.2.8", "react-google-recaptcha": "3.1.0", "rehype-autolink-headings": "7.1.0", "rehype-slug": "6.0.0", diff --git a/dotcom-rendering/scripts/jest/setup.ts b/dotcom-rendering/scripts/jest/setup.ts index ecac42260c7..aef0484b2d8 100644 --- a/dotcom-rendering/scripts/jest/setup.ts +++ b/dotcom-rendering/scripts/jest/setup.ts @@ -2,7 +2,7 @@ import '@testing-library/jest-dom'; import { ReadableStream } from 'node:stream/web'; import { TextDecoder, TextEncoder } from 'node:util'; -import { MessagePort } from 'node:worker_threads'; +import { MessageChannel, MessagePort } from 'node:worker_threads'; import { isServer } from '../../src/lib/isServer'; import type { Guardian } from '../../src/model/guardian'; @@ -112,6 +112,8 @@ global.TextDecoder = TextDecoder as unknown as typeof global.TextDecoder; global.ReadableStream = ReadableStream as unknown as typeof global.ReadableStream; global.MessagePort = MessagePort as unknown as typeof global.MessagePort; +global.MessageChannel = + MessageChannel as unknown as typeof global.MessageChannel; if (!isServer) { Object.defineProperty(window, 'matchMedia', { diff --git a/dotcom-rendering/src/components/AudioAtom/AudioAtom.tsx b/dotcom-rendering/src/components/AudioAtom/AudioAtom.tsx index 8e20c948467..f0091d8677c 100644 --- a/dotcom-rendering/src/components/AudioAtom/AudioAtom.tsx +++ b/dotcom-rendering/src/components/AudioAtom/AudioAtom.tsx @@ -5,7 +5,7 @@ import { headlineMedium17, textSans15, } from '@guardian/source/foundations'; -import type { MouseEvent } from 'react'; +import type { JSX, MouseEvent } from 'react'; import { useEffect, useRef, useState } from 'react'; import { formatTime } from '../../lib/formatTime'; import { palette } from '../../palette'; diff --git a/dotcom-rendering/src/components/AudioPlayerWeb.island.tsx b/dotcom-rendering/src/components/AudioPlayerWeb.island.tsx index de2946f4545..edae1f32e8f 100644 --- a/dotcom-rendering/src/components/AudioPlayerWeb.island.tsx +++ b/dotcom-rendering/src/components/AudioPlayerWeb.island.tsx @@ -170,7 +170,7 @@ export const AudioPlayerWeb = ({ // ********************* interactions ********************* - const boundingClientRect = useRef(); + const boundingClientRect = useRef(undefined); const playPause = useCallback(() => { if (audioRef.current) { diff --git a/dotcom-rendering/src/components/AuthProviderButtons/AuthProviderButtons.tsx b/dotcom-rendering/src/components/AuthProviderButtons/AuthProviderButtons.tsx index 784a5c0b817..96c85202955 100644 --- a/dotcom-rendering/src/components/AuthProviderButtons/AuthProviderButtons.tsx +++ b/dotcom-rendering/src/components/AuthProviderButtons/AuthProviderButtons.tsx @@ -28,7 +28,7 @@ type AuthProviderButtonsProps = { type AuthProviderButtonProps = { label: string; - icon: React.ReactElement; + icon: React.ReactElement; socialProvider: string; queryParams: QueryParams; onClick?: (provider: AuthButtonProvider) => void; @@ -120,7 +120,7 @@ const authProviderButtonLabel = (label: string) => { return `Sign in with ${capitalisedLabel}`; }; -const socialButtonIcon = (socialProvider: string): React.ReactElement => { +const socialButtonIcon = (socialProvider: string): React.ReactElement => { switch (socialProvider) { case 'google': return ; diff --git a/dotcom-rendering/src/components/Callout/MessageUs.tsx b/dotcom-rendering/src/components/Callout/MessageUs.tsx index 4b731a1602c..cd226674785 100644 --- a/dotcom-rendering/src/components/Callout/MessageUs.tsx +++ b/dotcom-rendering/src/components/Callout/MessageUs.tsx @@ -32,7 +32,9 @@ export const formatContactType = (s: string): string => ? 'WhatsApp' : s.charAt(0).toUpperCase() + s.slice(1); -export const conditionallyRenderContactIcon = (name: string): ReactElement => { +export const conditionallyRenderContactIcon = ( + name: string, +): ReactElement => { switch (name.toLowerCase()) { case 'whatsapp': return ; diff --git a/dotcom-rendering/src/components/Card/components/CardFooter.tsx b/dotcom-rendering/src/components/Card/components/CardFooter.tsx index b8eb34e15df..0b444efbc0d 100644 --- a/dotcom-rendering/src/components/Card/components/CardFooter.tsx +++ b/dotcom-rendering/src/components/Card/components/CardFooter.tsx @@ -5,6 +5,7 @@ import { space, textSansBold12, } from '@guardian/source/foundations'; +import type { JSX } from 'react'; import { type ArticleFormat, ArticleSpecial } from '../../../lib/articleFormat'; import type { ArticleMedia } from '../../../types/mainMedia'; import { CardPill } from '../../CardPill'; diff --git a/dotcom-rendering/src/components/Carousel.island.tsx b/dotcom-rendering/src/components/Carousel.island.tsx index 74f1e8e4696..0cd7e26debd 100644 --- a/dotcom-rendering/src/components/Carousel.island.tsx +++ b/dotcom-rendering/src/components/Carousel.island.tsx @@ -100,8 +100,8 @@ const CarouselColours = ({ children, }: { props: { format: ArticleFormat } | { palette: DCRContainerPalette }; - children: React.ReactElement; -}): React.ReactElement => { + children: React.ReactElement; +}): React.ReactElement => { if ('palette' in props) { return ( diff --git a/dotcom-rendering/src/components/DirectoryPageNav.island.tsx b/dotcom-rendering/src/components/DirectoryPageNav.island.tsx index 350a0c1a78f..0f351ce736f 100644 --- a/dotcom-rendering/src/components/DirectoryPageNav.island.tsx +++ b/dotcom-rendering/src/components/DirectoryPageNav.island.tsx @@ -43,7 +43,7 @@ interface SlimDirectoryPageNavConfig { textHoverColor: PlatformColor; backgroundColor: PlatformColor; borderColor: PlatformColor; - titleIcon?: React.ReactElement; + titleIcon?: React.ReactElement; title: { label: string; id: string }; links: Array<{ label: string; id: string }>; slimNav: true; @@ -54,7 +54,7 @@ interface FullDirectoryPageNavConfig { tagIds: string[]; textColor: PlatformColor; backgroundColor: PlatformColor; - titleIcon?: React.ReactElement; + titleIcon?: React.ReactElement; title: { label: string; id: string }; links: Array<{ label: string; id: string }>; backgroundImages: { diff --git a/dotcom-rendering/src/components/Discussion/PillarButton.tsx b/dotcom-rendering/src/components/Discussion/PillarButton.tsx index 975faf6a7af..6fee9af06ea 100644 --- a/dotcom-rendering/src/components/Discussion/PillarButton.tsx +++ b/dotcom-rendering/src/components/Discussion/PillarButton.tsx @@ -1,6 +1,7 @@ import { css } from '@emotion/react'; import { textSansBold15 } from '@guardian/source/foundations'; import { Button } from '@guardian/source/react-components'; +import type { JSX } from 'react'; import { palette as themePalette } from '../../palette'; type Props = { diff --git a/dotcom-rendering/src/components/EnhancePinnedPost.island.tsx b/dotcom-rendering/src/components/EnhancePinnedPost.island.tsx index 30efd05f6c7..e2f5924220b 100644 --- a/dotcom-rendering/src/components/EnhancePinnedPost.island.tsx +++ b/dotcom-rendering/src/components/EnhancePinnedPost.island.tsx @@ -120,7 +120,7 @@ export const EnhancePinnedPost = () => { const { renderingTarget } = useConfig(); const pinnedPostTiming = - useRef>(); + useRef>(undefined); const checkContentHeight = useCallback(() => { if (!pinnedPostContent) { diff --git a/dotcom-rendering/src/components/EpicContent.apps.tsx b/dotcom-rendering/src/components/EpicContent.apps.tsx index cb240b85d54..74fd4afc01b 100644 --- a/dotcom-rendering/src/components/EpicContent.apps.tsx +++ b/dotcom-rendering/src/components/EpicContent.apps.tsx @@ -21,7 +21,7 @@ export function EpicContent({ body, firstButton, secondButton, -}: EpicProps): React.ReactElement | null { +}: EpicProps): React.ReactElement | null { const [impressionSeen, setImpressionSeenRef] = useIsInView({ debounce: true, }); diff --git a/dotcom-rendering/src/components/ExpandableAtom/Body.tsx b/dotcom-rendering/src/components/ExpandableAtom/Body.tsx index b49e857f90b..4443a518412 100644 --- a/dotcom-rendering/src/components/ExpandableAtom/Body.tsx +++ b/dotcom-rendering/src/components/ExpandableAtom/Body.tsx @@ -5,6 +5,7 @@ import { textSans14, } from '@guardian/source/foundations'; import { SvgInfoRound } from '@guardian/source/react-components'; +import type { JSX } from 'react'; import { palette as themePalette } from '../../palette'; const imageStyling = css` diff --git a/dotcom-rendering/src/components/ExpandableAtom/Container.tsx b/dotcom-rendering/src/components/ExpandableAtom/Container.tsx index 636bca3e582..6627dcd574f 100644 --- a/dotcom-rendering/src/components/ExpandableAtom/Container.tsx +++ b/dotcom-rendering/src/components/ExpandableAtom/Container.tsx @@ -1,5 +1,6 @@ import { css } from '@emotion/react'; import { palette as sourcePalette } from '@guardian/source/foundations'; +import type { JSX } from 'react'; import { palette as themePalette } from '../../palette'; import { Summary } from './Summary'; diff --git a/dotcom-rendering/src/components/ExpandableAtom/Footer.tsx b/dotcom-rendering/src/components/ExpandableAtom/Footer.tsx index f84e4cb5071..bf55cbf083b 100644 --- a/dotcom-rendering/src/components/ExpandableAtom/Footer.tsx +++ b/dotcom-rendering/src/components/ExpandableAtom/Footer.tsx @@ -1,6 +1,6 @@ import { css } from '@emotion/react'; import { textSans14 } from '@guardian/source/foundations'; -import { useState } from 'react'; +import { type JSX, useState } from 'react'; import { palette as themePalette } from '../../palette'; /// LIKE/DISLIKE FEEDBACK FOOTER diff --git a/dotcom-rendering/src/components/ExpandableAtom/Summary.tsx b/dotcom-rendering/src/components/ExpandableAtom/Summary.tsx index 57cb78504c2..46e68f752b2 100644 --- a/dotcom-rendering/src/components/ExpandableAtom/Summary.tsx +++ b/dotcom-rendering/src/components/ExpandableAtom/Summary.tsx @@ -5,7 +5,7 @@ import { textSans15, } from '@guardian/source/foundations'; import { SvgMinus, SvgPlus } from '@guardian/source/react-components'; -import { useState } from 'react'; +import { type JSX, useState } from 'react'; import { palette as themePalette } from '../../palette'; /// SUMMARY ELEMENT diff --git a/dotcom-rendering/src/components/Footer.stories.tsx b/dotcom-rendering/src/components/Footer.stories.tsx index 2f476d705dd..7075c44e86d 100644 --- a/dotcom-rendering/src/components/Footer.stories.tsx +++ b/dotcom-rendering/src/components/Footer.stories.tsx @@ -5,6 +5,7 @@ import { space, textSans34, } from '@guardian/source/foundations'; +import type { JSX } from 'react'; import { Standard } from '../../fixtures/generated/fe-articles/Standard'; import { Pillar } from '../lib/articleFormat'; import { editionList } from '../lib/edition'; diff --git a/dotcom-rendering/src/components/GuideAtom/GuideAtom.stories.tsx b/dotcom-rendering/src/components/GuideAtom/GuideAtom.stories.tsx index 2ef65c52d8b..243e31c6b82 100644 --- a/dotcom-rendering/src/components/GuideAtom/GuideAtom.stories.tsx +++ b/dotcom-rendering/src/components/GuideAtom/GuideAtom.stories.tsx @@ -1,4 +1,5 @@ import { css } from '@emotion/react'; +import type { JSX } from 'react'; import { splitTheme } from '../../../.storybook/decorators/splitThemeDecorator'; import { analysisStoryExpanded, diff --git a/dotcom-rendering/src/components/GuideAtom/GuideAtom.tsx b/dotcom-rendering/src/components/GuideAtom/GuideAtom.tsx index 3108b1fb06d..0c504ded3a4 100644 --- a/dotcom-rendering/src/components/GuideAtom/GuideAtom.tsx +++ b/dotcom-rendering/src/components/GuideAtom/GuideAtom.tsx @@ -1,3 +1,4 @@ +import type { JSX } from 'react'; import { submitComponentEvent } from '../../client/ophan/ophan'; import { useConfig } from '../ConfigContext'; import { Body } from '../ExpandableAtom/Body'; diff --git a/dotcom-rendering/src/components/Island.tsx b/dotcom-rendering/src/components/Island.tsx index 2777c559099..d6721ea2653 100644 --- a/dotcom-rendering/src/components/Island.tsx +++ b/dotcom-rendering/src/components/Island.tsx @@ -1,4 +1,4 @@ -import { useContext } from 'react'; +import { type JSX, useContext } from 'react'; import type { ScheduleOptions, SchedulePriority } from '../lib/scheduler'; import { IslandContext, IslandProvider } from './IslandContext'; diff --git a/dotcom-rendering/src/components/Lazy.tsx b/dotcom-rendering/src/components/Lazy.tsx index e5c347a2394..78185964111 100644 --- a/dotcom-rendering/src/components/Lazy.tsx +++ b/dotcom-rendering/src/components/Lazy.tsx @@ -1,4 +1,5 @@ import { css } from '@emotion/react'; +import type { JSX } from 'react'; import { useIsInView } from '../lib/useIsInView'; type Props = { diff --git a/dotcom-rendering/src/components/ManyNewslettersForm.tsx b/dotcom-rendering/src/components/ManyNewslettersForm.tsx index 6f79b3e6a57..12f268e301e 100644 --- a/dotcom-rendering/src/components/ManyNewslettersForm.tsx +++ b/dotcom-rendering/src/components/ManyNewslettersForm.tsx @@ -28,7 +28,7 @@ export interface FormProps { useReCaptcha?: boolean; captchaSiteKey?: string; visibleRecaptcha?: boolean; - reCaptchaRef?: React.RefObject; + reCaptchaRef?: React.RefObject; handleCaptchaError?: ReactEventHandler; } diff --git a/dotcom-rendering/src/components/Masthead/Masthead.tsx b/dotcom-rendering/src/components/Masthead/Masthead.tsx index e9596b06a13..0d0f91db305 100644 --- a/dotcom-rendering/src/components/Masthead/Masthead.tsx +++ b/dotcom-rendering/src/components/Masthead/Masthead.tsx @@ -9,7 +9,7 @@ import { TopBar } from '../TopBar.island'; type Props = { nav: NavType; - highlights?: ReactElement; + highlights?: ReactElement; editionId: EditionId; idUrl?: string; mmaUrl?: string; diff --git a/dotcom-rendering/src/components/Masthead/Titlepiece/Grid.tsx b/dotcom-rendering/src/components/Masthead/Titlepiece/Grid.tsx index 4a95d702f97..91e582c31e1 100644 --- a/dotcom-rendering/src/components/Masthead/Titlepiece/Grid.tsx +++ b/dotcom-rendering/src/components/Masthead/Titlepiece/Grid.tsx @@ -1,7 +1,7 @@ import type { SerializedStyles } from '@emotion/react'; import { css, jsx } from '@emotion/react'; import { from } from '@guardian/source/foundations'; -import type { CSSProperties, PropsWithChildren } from 'react'; +import type { CSSProperties, JSX, PropsWithChildren } from 'react'; const grid = css` display: grid; diff --git a/dotcom-rendering/src/components/Pill.tsx b/dotcom-rendering/src/components/Pill.tsx index 44d9f90f602..77508cdfc76 100644 --- a/dotcom-rendering/src/components/Pill.tsx +++ b/dotcom-rendering/src/components/Pill.tsx @@ -8,11 +8,11 @@ type Props = { * Main content of pill. This can be a string or an element. eg. * */ - content: string | ReactElement; + content: string | ReactElement; /** Optional prefix displayed before main content with a dividing line */ prefix?: string; /** Optional icon displayed before or after content */ - icon?: ReactElement; + icon?: ReactElement; /** Optional icon position (icon is on the left by default) */ iconSide?: 'left' | 'right'; }; diff --git a/dotcom-rendering/src/components/PodcastMeta.tsx b/dotcom-rendering/src/components/PodcastMeta.tsx index 26300a0d9cc..45717356536 100644 --- a/dotcom-rendering/src/components/PodcastMeta.tsx +++ b/dotcom-rendering/src/components/PodcastMeta.tsx @@ -19,7 +19,7 @@ import { PodcastCoverImage } from './PodcastCoverImage'; type PodcastButtonProps = { label: string; url: string; - icon?: ReactElement; + icon?: ReactElement; }; const SvgSpotify = () => ( diff --git a/dotcom-rendering/src/components/QandaAtom.island.tsx b/dotcom-rendering/src/components/QandaAtom.island.tsx index 3562661518f..b3fb86e0895 100644 --- a/dotcom-rendering/src/components/QandaAtom.island.tsx +++ b/dotcom-rendering/src/components/QandaAtom.island.tsx @@ -1,3 +1,4 @@ +import type { JSX } from 'react'; import { submitComponentEvent } from '../client/ophan/ophan'; import { useConfig } from './ConfigContext'; import { Body } from './ExpandableAtom/Body'; diff --git a/dotcom-rendering/src/components/SelfHostedVideo.island.tsx b/dotcom-rendering/src/components/SelfHostedVideo.island.tsx index 615a6c94c7a..aaab8b0c66b 100644 --- a/dotcom-rendering/src/components/SelfHostedVideo.island.tsx +++ b/dotcom-rendering/src/components/SelfHostedVideo.island.tsx @@ -191,7 +191,7 @@ const getOptimisedPosterImage = ( mainImage: string, aspectRatio: string, isTabletOrAbove: boolean, - measurementRef?: RefObject, + measurementRef?: RefObject, ): string => { // This only runs on the client const resolution = window.devicePixelRatio >= 2 ? 'high' : 'low'; diff --git a/dotcom-rendering/src/components/SelfHostedVideoPlayer.tsx b/dotcom-rendering/src/components/SelfHostedVideoPlayer.tsx index 03c26082f7e..21cca674721 100644 --- a/dotcom-rendering/src/components/SelfHostedVideoPlayer.tsx +++ b/dotcom-rendering/src/components/SelfHostedVideoPlayer.tsx @@ -118,7 +118,7 @@ export type Props = { height?: number; width?: number; aspectRatio: number; - FallbackImageComponent: ReactElement; + FallbackImageComponent: ReactElement; currentTime: number; duration?: number; hasAudio: boolean; diff --git a/dotcom-rendering/src/components/SignInGate/types.ts b/dotcom-rendering/src/components/SignInGate/types.ts index ad269ce62d2..d70f3ae8721 100644 --- a/dotcom-rendering/src/components/SignInGate/types.ts +++ b/dotcom-rendering/src/components/SignInGate/types.ts @@ -1,5 +1,6 @@ import type { CountryCode } from '@guardian/libs'; import { isObject, isOneOf, isString } from '@guardian/libs'; +import type { JSX } from 'react'; import type { EditionId } from '../../lib/edition'; import type { TagType } from '../../types/tag'; import type { QueryParams } from '../AuthProviderButtons/types'; diff --git a/dotcom-rendering/src/components/SlotBodyEnd/BrazeEpic.stories.tsx b/dotcom-rendering/src/components/SlotBodyEnd/BrazeEpic.stories.tsx index fa173729f8e..6a3b53152dd 100644 --- a/dotcom-rendering/src/components/SlotBodyEnd/BrazeEpic.stories.tsx +++ b/dotcom-rendering/src/components/SlotBodyEnd/BrazeEpic.stories.tsx @@ -16,7 +16,7 @@ const fetchEmail: () => Promise = () => // --------------------------------------- export const BrazeEpic_Default_Component = ( args: BrazeMessageProps & { componentName: string }, -): ReactElement => { +): ReactElement => { const [BrazeMessage, setBrazeMessage] = useState(); @@ -95,7 +95,7 @@ BrazeEpic_Default_Component.storyName = 'Default Epic'; // --------------------------------------- export const BrazeEpic_DefaultWithReminder_Component = ( args: BrazeMessageProps & { componentName: string }, -): ReactElement => { +): ReactElement => { const [BrazeMessage, setBrazeMessage] = useState(); @@ -175,7 +175,7 @@ BrazeEpic_DefaultWithReminder_Component.storyName = // --------------------------------------- export const BrazeEpic_SpecialHeader_Component = ( args: BrazeMessageProps & { componentName: string }, -): ReactElement => { +): ReactElement => { const [BrazeMessage, setBrazeMessage] = useState(); @@ -265,7 +265,7 @@ BrazeEpic_SpecialHeader_Component.storyName = 'Epic with special header'; // --------------------------------------- export const BrazeEpicNewsletter_Generic_Component = ( args: BrazeMessageProps & { componentName: string }, -): ReactElement => { +): ReactElement => { const [BrazeMessage, setBrazeMessage] = useState(); @@ -336,7 +336,7 @@ BrazeEpicNewsletter_Generic_Component.storyName = 'Newsletter - Generic'; // --------------------------------------- export const BrazeNewsletterEpic_UK_MorningBriefing_Component = ( args: BrazeMessageProps & { componentName: string }, -): ReactElement => { +): ReactElement => { const [BrazeMessage, setBrazeMessage] = useState(); @@ -403,7 +403,7 @@ BrazeNewsletterEpic_UK_MorningBriefing_Component.storyName = // --------------------------------------- export const BrazeEpicNewsletter_US_FirstThing_Component = ( args: BrazeMessageProps & { componentName: string }, -): ReactElement => { +): ReactElement => { const [BrazeMessage, setBrazeMessage] = useState(); @@ -470,7 +470,7 @@ BrazeEpicNewsletter_US_FirstThing_Component.storyName = // --------------------------------------- export const BrazeEpicNewsletter_AUS_MorningMail_Component = ( args: BrazeMessageProps & { componentName: string }, -): ReactElement => { +): ReactElement => { const [BrazeMessage, setBrazeMessage] = useState(); @@ -537,7 +537,7 @@ BrazeEpicNewsletter_AUS_MorningMail_Component.storyName = // --------------------------------------- export const BrazeEpicNewsletter_AUS_AfteernoonUpdate_Component = ( args: BrazeMessageProps & { componentName: string }, -): ReactElement => { +): ReactElement => { const [BrazeMessage, setBrazeMessage] = useState(); @@ -604,7 +604,7 @@ BrazeEpicNewsletter_AUS_AfteernoonUpdate_Component.storyName = // --------------------------------------- export const BrazeEpicNewsletter_DownToEarth_Component = ( args: BrazeMessageProps & { componentName: string }, -): ReactElement => { +): ReactElement => { const [BrazeMessage, setBrazeMessage] = useState(); @@ -671,7 +671,7 @@ BrazeEpicNewsletter_DownToEarth_Component.storyName = // --------------------------------------- export const BrazeEpicNewsletter_TheGuide_Component = ( args: BrazeMessageProps & { componentName: string }, -): ReactElement => { +): ReactElement => { const [BrazeMessage, setBrazeMessage] = useState(); diff --git a/dotcom-rendering/src/components/StickyBottomBanner/BrazeBanner.stories.tsx b/dotcom-rendering/src/components/StickyBottomBanner/BrazeBanner.stories.tsx index f3930d4d831..b2c129ec1ab 100644 --- a/dotcom-rendering/src/components/StickyBottomBanner/BrazeBanner.stories.tsx +++ b/dotcom-rendering/src/components/StickyBottomBanner/BrazeBanner.stories.tsx @@ -20,7 +20,7 @@ export default { // --------------------------------------- export const BrazeStyleableBannerWithLinkComponent = ( args: BrazeMessageProps & { componentName: string }, -): ReactElement => { +): ReactElement => { const [BrazeMessage, setBrazeMessage] = useState(); @@ -134,7 +134,7 @@ BrazeStyleableBannerWithLinkComponent.storyName = 'StyleableBannerWithLink'; // --------------------------------------- export const BrazeBannerWithLinkComponent = ( args: BrazeMessageProps & { componentName: string }, -): ReactElement => { +): ReactElement => { const [BrazeMessage, setBrazeMessage] = useState(); @@ -206,7 +206,7 @@ BrazeBannerWithLinkComponent.storyName = 'BannerWithLink'; // --------------------------------------- export const BrazeAppBannerComponent = ( args: BrazeMessageProps & { componentName: string }, -): ReactElement => { +): ReactElement => { const [BrazeMessage, setBrazeMessage] = useState(); @@ -270,7 +270,7 @@ BrazeAppBannerComponent.storyName = 'AppBanner'; // --------------------------------------- export const BrazeStyleableBannerNewsletterComponent = ( args: BrazeMessageProps & { componentName: string }, -): ReactElement => { +): ReactElement => { const [BrazeMessage, setBrazeMessage] = useState(); @@ -376,7 +376,7 @@ BrazeStyleableBannerNewsletterComponent.storyName = 'StyleableBannerNewsletter'; // --------------------------------------- export const BrazeBannerNewsletterComponent = ( args: BrazeMessageProps & { componentName: string }, -): ReactElement => { +): ReactElement => { const [BrazeMessage, setBrazeMessage] = useState(); diff --git a/dotcom-rendering/src/components/YoutubeAtom/YoutubeAtom.tsx b/dotcom-rendering/src/components/YoutubeAtom/YoutubeAtom.tsx index 1e7498bd6e2..c4c4f9d1ce6 100644 --- a/dotcom-rendering/src/components/YoutubeAtom/YoutubeAtom.tsx +++ b/dotcom-rendering/src/components/YoutubeAtom/YoutubeAtom.tsx @@ -1,5 +1,5 @@ import type { ConsentState } from '@guardian/consent-manager'; -import { useCallback, useState } from 'react'; +import { type JSX, useCallback, useState } from 'react'; import type { ArticleFormat } from '../../lib/articleFormat'; import { useIsInView } from '../../lib/useIsInView'; import type { AdTargeting } from '../../types/commercial'; diff --git a/dotcom-rendering/src/components/YoutubeAtom/YoutubeAtomPlaceholder.tsx b/dotcom-rendering/src/components/YoutubeAtom/YoutubeAtomPlaceholder.tsx index 92d8e431be9..1fd3270fd18 100644 --- a/dotcom-rendering/src/components/YoutubeAtom/YoutubeAtomPlaceholder.tsx +++ b/dotcom-rendering/src/components/YoutubeAtom/YoutubeAtomPlaceholder.tsx @@ -1,4 +1,5 @@ import { css } from '@emotion/react'; +import type { JSX } from 'react'; /** * The placeholder component is used to render a black rectangle diff --git a/dotcom-rendering/src/components/YoutubeAtom/YoutubeAtomPlayer.tsx b/dotcom-rendering/src/components/YoutubeAtom/YoutubeAtomPlayer.tsx index b234aa101c6..d5bc4ece6b3 100644 --- a/dotcom-rendering/src/components/YoutubeAtom/YoutubeAtomPlayer.tsx +++ b/dotcom-rendering/src/components/YoutubeAtom/YoutubeAtomPlayer.tsx @@ -3,6 +3,7 @@ import { buildImaAdTagUrl } from '@guardian/commercial-core'; import type { ConsentState } from '@guardian/consent-manager'; import { log } from '@guardian/libs'; import { + type JSX, useCallback, useEffect, useLayoutEffect, @@ -411,7 +412,7 @@ export const YoutubeAtomPlayer = ({ * Provides mutable persistent state for the player across renders * Does not cause re-renders on update */ - const player = useRef(); + const player = useRef(undefined); const sendOphanTrackingEvent = useCallback( (event: VideoEventKey) => { for (const eventEmitter of eventEmitters) { @@ -440,7 +441,7 @@ export const YoutubeAtomPlayer = ({ Record) => void> >({}); - const adsManager = useRef(); + const adsManager = useRef(undefined); const id = `youtube-player-${uniqueId}`; diff --git a/dotcom-rendering/src/components/YoutubeAtom/YoutubeAtomSticky.tsx b/dotcom-rendering/src/components/YoutubeAtom/YoutubeAtomSticky.tsx index dade89b397c..2755a683933 100644 --- a/dotcom-rendering/src/components/YoutubeAtom/YoutubeAtomSticky.tsx +++ b/dotcom-rendering/src/components/YoutubeAtom/YoutubeAtomSticky.tsx @@ -7,7 +7,7 @@ import { } from '@guardian/source/foundations'; import { SvgCross } from '@guardian/source/react-components'; import detectMobile from 'is-mobile'; -import { useEffect, useState } from 'react'; +import { type JSX, useEffect, useState } from 'react'; import { submitComponentEvent } from '../../client/ophan/ophan'; import { useConfig } from '../ConfigContext'; import type { VideoEventKey } from './YoutubeAtom'; diff --git a/dotcom-rendering/src/components/marketing/banners/common/BannerWrapper.tsx b/dotcom-rendering/src/components/marketing/banners/common/BannerWrapper.tsx index 8b05fac94d3..ac7fcdab0a2 100644 --- a/dotcom-rendering/src/components/marketing/banners/common/BannerWrapper.tsx +++ b/dotcom-rendering/src/components/marketing/banners/common/BannerWrapper.tsx @@ -18,7 +18,7 @@ import type { Cta, SecondaryCta, } from '@guardian/support-dotcom-components/dist/shared/types'; -import { useEffect } from 'react'; +import { type JSX, useEffect } from 'react'; import { useIsInView } from '../../../../lib/useIsInView'; import type { ReactComponent } from '../../lib/ReactComponent'; import { replaceArticleCount } from '../../lib/replaceArticleCount'; diff --git a/dotcom-rendering/src/components/marketing/banners/common/types.tsx b/dotcom-rendering/src/components/marketing/banners/common/types.tsx index 3a48bd8be1a..5cb045f71ed 100644 --- a/dotcom-rendering/src/components/marketing/banners/common/types.tsx +++ b/dotcom-rendering/src/components/marketing/banners/common/types.tsx @@ -16,6 +16,7 @@ import type { } from '@guardian/support-dotcom-components/dist/shared/types'; import type { ChoiceCardsSettings } from '@guardian/support-dotcom-components/dist/shared/types/props/choiceCards'; import type { Tracking } from '@guardian/support-dotcom-components/dist/shared/types/props/shared'; +import type { JSX } from 'react'; export type BannerId = 'designable-banner' | 'sign-in-prompt-banner'; diff --git a/dotcom-rendering/src/components/marketing/banners/designableBanner/Banner.tsx b/dotcom-rendering/src/components/marketing/banners/designableBanner/Banner.tsx index 65c3b95e43a..1a143770094 100644 --- a/dotcom-rendering/src/components/marketing/banners/designableBanner/Banner.tsx +++ b/dotcom-rendering/src/components/marketing/banners/designableBanner/Banner.tsx @@ -6,7 +6,7 @@ import { space, until, } from '@guardian/source/foundations'; -import { useEffect, useRef } from 'react'; +import { type JSX, useEffect, useRef } from 'react'; import { bannerWrapper, validatedBannerWrapper } from '../common/BannerWrapper'; import type { BannerRenderProps } from '../common/types'; import { BannerArticleCount } from './components/BannerArticleCount'; diff --git a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerArticleCount.tsx b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerArticleCount.tsx index 1c69968eca8..a456e7e3c75 100644 --- a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerArticleCount.tsx +++ b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerArticleCount.tsx @@ -5,6 +5,7 @@ import { headlineBold17, space, } from '@guardian/source/foundations'; +import type { JSX } from 'react'; import type { BannerData } from '../BannerProps'; import { CustomArticleCountCopy } from './CustomArticleCountCopy'; import { DesignableBannerArticleCountOptOut } from './DesignableBannerArticleCountOptOut'; diff --git a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerBody.tsx b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerBody.tsx index 64de7f64a5d..27063f08ef2 100644 --- a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerBody.tsx +++ b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerBody.tsx @@ -1,5 +1,6 @@ import { css } from '@emotion/react'; import { from, space, textSans15 } from '@guardian/source/foundations'; +import type { JSX } from 'react'; import type { BannerData } from '../BannerProps'; import { createBannerBodyCopy } from './BannerText'; diff --git a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerChoiceCards.tsx b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerChoiceCards.tsx index f0582461603..eae8d5049b8 100644 --- a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerChoiceCards.tsx +++ b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerChoiceCards.tsx @@ -10,6 +10,7 @@ import { LinkButton, SvgArrowRightStraight, } from '@guardian/source/react-components'; +import type { JSX } from 'react'; import { enrichSupportUrl, getChoiceCardUrl } from '../../../lib/tracking'; import { ThreeTierChoiceCards } from '../../../shared/ThreeTierChoiceCards'; import type { BannerData } from '../BannerProps'; diff --git a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerCloseButton.tsx b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerCloseButton.tsx index a448f5c96d1..3ecbe5f37fd 100644 --- a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerCloseButton.tsx +++ b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerCloseButton.tsx @@ -6,6 +6,7 @@ import { SvgChevronUpSingle, SvgCross, } from '@guardian/source/react-components'; +import type { JSX } from 'react'; import type { BannerData } from '../BannerProps'; import { buttonStyles, buttonThemes } from '../styles/buttonStyles'; diff --git a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerContent.tsx b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerContent.tsx index 662c985f84f..71bd9b35b49 100644 --- a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerContent.tsx +++ b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerContent.tsx @@ -1,5 +1,6 @@ import { css } from '@emotion/react'; import { from, space } from '@guardian/source/foundations'; +import type { JSX } from 'react'; import type { BannerData } from '../BannerProps'; const phabletContentMaxWidth = '492px'; diff --git a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerCtas.tsx b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerCtas.tsx index 714eb67c9a9..85dc782a9f5 100644 --- a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerCtas.tsx +++ b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerCtas.tsx @@ -1,6 +1,7 @@ import { css } from '@emotion/react'; import { from, space, until } from '@guardian/source/foundations'; import { LinkButton } from '@guardian/source/react-components'; +import type { JSX } from 'react'; import type { BannerData } from '../BannerProps'; import { buttonStyles, buttonThemes } from '../styles/buttonStyles'; diff --git a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerLogo.tsx b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerLogo.tsx index 1428dbec25c..e00b037194e 100644 --- a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerLogo.tsx +++ b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerLogo.tsx @@ -2,6 +2,7 @@ import { css } from '@emotion/react'; import { from, space, until } from '@guardian/source/foundations'; import { SvgGuardianLogo } from '@guardian/source/react-components'; import { hexColourToString } from '@guardian/support-dotcom-components'; +import type { JSX } from 'react'; import type { BannerData } from '../BannerProps'; const styles = { diff --git a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerReminder.tsx b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerReminder.tsx index 72df4e3a76c..7786ae9b83f 100644 --- a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerReminder.tsx +++ b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerReminder.tsx @@ -1,5 +1,6 @@ import { css } from '@emotion/react'; import { space } from '@guardian/source/foundations'; +import type { JSX } from 'react'; import { useContributionsReminderSignup } from '../../../hooks/useContributionsReminderSignup'; import type { BannerData } from '../BannerProps'; import { DesignableBannerReminderSignedOut } from './DesignableBannerReminderSignedOut'; diff --git a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerText.tsx b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerText.tsx index 52790baed99..5bbed510bcc 100644 --- a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerText.tsx +++ b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerText.tsx @@ -5,6 +5,7 @@ */ import type { SerializedStyles } from '@emotion/react'; import { css } from '@emotion/react'; +import type { JSX } from 'react'; type BannerTextStyleableAreas = | 'container' diff --git a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerTicker.tsx b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerTicker.tsx index fa0adb04a6a..41d4f543682 100644 --- a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerTicker.tsx +++ b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerTicker.tsx @@ -1,4 +1,5 @@ import { Ticker } from '@guardian/source-development-kitchen/react-components'; +import type { JSX } from 'react'; import type { BannerData } from '../BannerProps'; import { templateSpacing } from '../styles/templateStyles'; diff --git a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerVisual.tsx b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerVisual.tsx index 5954c648a69..055fd8295db 100644 --- a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerVisual.tsx +++ b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/BannerVisual.tsx @@ -1,6 +1,7 @@ import { css } from '@emotion/react'; import { between, from, space } from '@guardian/source/foundations'; import type { Image as SupportImage } from '@guardian/support-dotcom-components/dist/shared/types'; +import type { JSX } from 'react'; import type { ImageAttrs } from '../../../shared/ResponsiveImage'; import { ResponsiveImage } from '../../../shared/ResponsiveImage'; import type { BannerData } from '../BannerProps'; diff --git a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/CustomArticleCountCopy.tsx b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/CustomArticleCountCopy.tsx index 64fca897732..7540eda6265 100644 --- a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/CustomArticleCountCopy.tsx +++ b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/CustomArticleCountCopy.tsx @@ -10,6 +10,7 @@ import { headlineBold17, space, } from '@guardian/source/foundations'; +import type { JSX } from 'react'; import type { BannerTemplateSettings } from '../settings'; import { DesignableBannerArticleCountOptOut } from './DesignableBannerArticleCountOptOut'; diff --git a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/DesignableBannerReminderSignedOut.tsx b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/DesignableBannerReminderSignedOut.tsx index e2715fa2ffd..1292b2d41a9 100644 --- a/dotcom-rendering/src/components/marketing/banners/designableBanner/components/DesignableBannerReminderSignedOut.tsx +++ b/dotcom-rendering/src/components/marketing/banners/designableBanner/components/DesignableBannerReminderSignedOut.tsx @@ -14,6 +14,7 @@ import { textSansBold17, } from '@guardian/source/foundations'; import { Button, TextInput } from '@guardian/source/react-components'; +import type { JSX } from 'react'; import { useContributionsReminderEmailForm } from '../../../hooks/useContributionsReminderEmailForm'; import { ensureHasPreposition, ReminderStatus } from '../../../lib/reminders'; import type { BannerEnrichedReminderCta } from '../../common/types'; diff --git a/dotcom-rendering/src/components/marketing/epics/ContributionsEpic.tsx b/dotcom-rendering/src/components/marketing/epics/ContributionsEpic.tsx index a14cfff57db..97d30c3ae98 100644 --- a/dotcom-rendering/src/components/marketing/epics/ContributionsEpic.tsx +++ b/dotcom-rendering/src/components/marketing/epics/ContributionsEpic.tsx @@ -20,7 +20,7 @@ import { replaceNonArticleCountPlaceholders, } from '@guardian/support-dotcom-components'; import type { EpicProps } from '@guardian/support-dotcom-components/dist/shared/types'; -import { useEffect } from 'react'; +import { type JSX, useEffect } from 'react'; import { useIsInView } from '../../../lib/useIsInView'; import { useArticleCountOptOut } from '../hooks/useArticleCountOptOut'; import type { ReactComponent } from '../lib/ReactComponent'; diff --git a/dotcom-rendering/src/components/marketing/epics/ContributionsEpicNewsletterSignup.tsx b/dotcom-rendering/src/components/marketing/epics/ContributionsEpicNewsletterSignup.tsx index 3d11fe8228d..66fbc51a9e7 100644 --- a/dotcom-rendering/src/components/marketing/epics/ContributionsEpicNewsletterSignup.tsx +++ b/dotcom-rendering/src/components/marketing/epics/ContributionsEpicNewsletterSignup.tsx @@ -1,6 +1,7 @@ import { css } from '@emotion/react'; import { space } from '@guardian/source/foundations'; import type { Tracking } from '@guardian/support-dotcom-components/dist/shared/types/props/shared'; +import type { JSX } from 'react'; import { NewsletterPrivacyMessage } from '../../NewsletterPrivacyMessage'; import { SecureSignup } from '../../SecureSignup.island'; diff --git a/dotcom-rendering/src/components/marketing/epics/ContributionsLiveblogEpic.tsx b/dotcom-rendering/src/components/marketing/epics/ContributionsLiveblogEpic.tsx index 78af274106e..2d907f7617b 100644 --- a/dotcom-rendering/src/components/marketing/epics/ContributionsLiveblogEpic.tsx +++ b/dotcom-rendering/src/components/marketing/epics/ContributionsLiveblogEpic.tsx @@ -18,7 +18,7 @@ import { replaceNonArticleCountPlaceholders, } from '@guardian/support-dotcom-components'; import type { EpicProps } from '@guardian/support-dotcom-components/dist/shared/types'; -import { useEffect } from 'react'; +import { type JSX, useEffect } from 'react'; import { useIsInView } from '../../../lib/useIsInView'; import type { ReactComponent } from '../lib/ReactComponent'; import { replaceArticleCount } from '../lib/replaceArticleCount'; diff --git a/dotcom-rendering/src/components/marketing/epics/ctas/ContributionsEpicButtons.tsx b/dotcom-rendering/src/components/marketing/epics/ctas/ContributionsEpicButtons.tsx index 6fa6a49fcf6..2ccbd92892a 100644 --- a/dotcom-rendering/src/components/marketing/epics/ctas/ContributionsEpicButtons.tsx +++ b/dotcom-rendering/src/components/marketing/epics/ctas/ContributionsEpicButtons.tsx @@ -14,7 +14,7 @@ import type { Cta, Tracking, } from '@guardian/support-dotcom-components/dist/shared/types/props/shared'; -import { useEffect } from 'react'; +import { type JSX, useEffect } from 'react'; import { useIsInView } from '../../../../lib/useIsInView'; import { hasSetReminder } from '../../lib/reminders'; import { diff --git a/dotcom-rendering/src/components/marketing/epics/ctas/ContributionsEpicCtasContainer.tsx b/dotcom-rendering/src/components/marketing/epics/ctas/ContributionsEpicCtasContainer.tsx index 442aea13fba..46c03ac23a7 100644 --- a/dotcom-rendering/src/components/marketing/epics/ctas/ContributionsEpicCtasContainer.tsx +++ b/dotcom-rendering/src/components/marketing/epics/ctas/ContributionsEpicCtasContainer.tsx @@ -1,7 +1,7 @@ import { from } from '@guardian/source/foundations'; import type { ChoiceCard } from '@guardian/support-dotcom-components/dist/shared/types/props/choiceCards'; import type { EpicProps } from '@guardian/support-dotcom-components/dist/shared/types/props/epic'; -import { useState } from 'react'; +import { type JSX, useState } from 'react'; import { removeMediaRulePrefix, useMatchMedia, diff --git a/dotcom-rendering/src/components/marketing/epics/ctas/EpicButton.tsx b/dotcom-rendering/src/components/marketing/epics/ctas/EpicButton.tsx index 4b9117842e4..91e0918f93e 100644 --- a/dotcom-rendering/src/components/marketing/epics/ctas/EpicButton.tsx +++ b/dotcom-rendering/src/components/marketing/epics/ctas/EpicButton.tsx @@ -45,12 +45,12 @@ type Props = { // Both using the same interface onClickAction: (() => void) | Url; submitComponentEvent?: (event: ComponentEvent) => void; - children: React.ReactElement | string; + children: React.ReactElement | string; priority?: 'primary' | 'secondary'; showArrow?: boolean; isTertiary?: boolean; cssOverrides?: SerializedStyles; - icon?: React.ReactElement; + icon?: React.ReactElement; }; // Overrides for tertiary button diff --git a/dotcom-rendering/src/components/marketing/lib/replaceArticleCount.tsx b/dotcom-rendering/src/components/marketing/lib/replaceArticleCount.tsx index 5ebe11fa98e..a7cf11c672f 100644 --- a/dotcom-rendering/src/components/marketing/lib/replaceArticleCount.tsx +++ b/dotcom-rendering/src/components/marketing/lib/replaceArticleCount.tsx @@ -3,6 +3,7 @@ * This file was migrated from: * https://github.com/guardian/support-dotcom-components/blob/9c3eae7cb0b159db4a1c40679d6b37710b0bb937/packages/modules/src/lib/replaceArticleCount.tsx */ +import type { JSX } from 'react'; import type { ArticleCountOptOutType, OphanTracking, diff --git a/dotcom-rendering/src/components/marketing/shared/ResponsiveImage.tsx b/dotcom-rendering/src/components/marketing/shared/ResponsiveImage.tsx index 5c925fbdeb9..a799de6c4c9 100644 --- a/dotcom-rendering/src/components/marketing/shared/ResponsiveImage.tsx +++ b/dotcom-rendering/src/components/marketing/shared/ResponsiveImage.tsx @@ -21,7 +21,7 @@ type ResponsiveImageProps = { cssOverrides?: SerializedStyles; }; -function createSource(image: ImageAttrs, index: number): ReactElement { +function createSource(image: ImageAttrs, index: number): ReactElement { return ; } diff --git a/dotcom-rendering/src/lib/ArticleRenderer.test.tsx b/dotcom-rendering/src/lib/ArticleRenderer.test.tsx index 6d9e2693691..6108b27a22a 100644 --- a/dotcom-rendering/src/lib/ArticleRenderer.test.tsx +++ b/dotcom-rendering/src/lib/ArticleRenderer.test.tsx @@ -46,7 +46,7 @@ jest.mock('./renderElement', () => ({ * which bypasses the withSignInGateSlot path and keeps tests focused on * augmentedElements logic. */ -const renderWithConfig = (ui: React.ReactElement) => +const renderWithConfig = (ui: React.ReactElement) => render( { - const savedCallback = useRef(); + const savedCallback = useRef(undefined); // Remember the latest callback. useEffect(() => { diff --git a/dotcom-rendering/src/lib/useNewsletterSignupForm.ts b/dotcom-rendering/src/lib/useNewsletterSignupForm.ts index cc48cda4915..ab30d43b129 100644 --- a/dotcom-rendering/src/lib/useNewsletterSignupForm.ts +++ b/dotcom-rendering/src/lib/useNewsletterSignupForm.ts @@ -185,7 +185,7 @@ export type NewsletterSignupFormState = { isValidationError: boolean; /** Ref to pass to the `` widget. */ - recaptchaRef: RefObject; + recaptchaRef: RefObject; /** Site key for the reCAPTCHA widget — `undefined` until resolved. */ captchaSiteKey: string | undefined; /** Pass to `ReactGoogleRecaptcha`'s `onChange` prop. */ diff --git a/dotcom-rendering/src/lib/withSignInGateSlot.tsx b/dotcom-rendering/src/lib/withSignInGateSlot.tsx index 131f2dc864f..6012cec99f1 100644 --- a/dotcom-rendering/src/lib/withSignInGateSlot.tsx +++ b/dotcom-rendering/src/lib/withSignInGateSlot.tsx @@ -1,7 +1,7 @@ // This placeholder div is used by the SignInGate component to insert the sign in gate into the appropriate location within body of an article, // if the SignInGateSelector determines a gate should be rendered. -import React from 'react'; +import React, { type JSX } from 'react'; import type { TagType } from '../types/tag'; import type { EditionId } from './edition'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d83e91a9e2a..5779e913e77 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -307,7 +307,7 @@ importers: version: 11.14.0 '@emotion/react': specifier: 11.14.0 - version: 11.14.0(@types/react@18.3.1)(react@18.3.1) + version: 11.14.0(@types/react@19.2.18)(react@19.2.8) '@emotion/server': specifier: 11.11.0 version: 11.11.0 @@ -316,7 +316,7 @@ importers: version: link:../ab-testing/config '@guardian/braze-components': specifier: 23.0.2 - version: 23.0.2(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@guardian/libs@32.0.0(@guardian/ophan-tracker-js@4.0.2)(tslib@2.6.2)(typescript@6.0.3))(@guardian/source@12.2.1(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1)(tslib@2.6.2)(typescript@6.0.3))(react@18.3.1) + version: 23.0.2(@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8))(@guardian/libs@32.0.0(@guardian/ophan-tracker-js@4.0.2)(tslib@2.6.2)(typescript@6.0.3))(@guardian/source@12.2.1(@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8))(@types/react@19.2.18)(react@19.2.8)(tslib@2.6.2)(typescript@6.0.3))(react@19.2.8) '@guardian/bridget': specifier: 8.13.1 version: 8.13.1 @@ -352,16 +352,16 @@ importers: version: 4.0.2 '@guardian/react-crossword': specifier: 19.0.1 - version: 19.0.1(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@guardian/libs@32.0.0(@guardian/ophan-tracker-js@4.0.2)(tslib@2.6.2)(typescript@6.0.3))(@guardian/source@12.2.1(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1)(tslib@2.6.2)(typescript@6.0.3))(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@6.0.3) + version: 19.0.1(@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8))(@guardian/libs@32.0.0(@guardian/ophan-tracker-js@4.0.2)(tslib@2.6.2)(typescript@6.0.3))(@guardian/source@12.2.1(@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8))(@types/react@19.2.18)(react@19.2.8)(tslib@2.6.2)(typescript@6.0.3))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@6.0.3) '@guardian/shimport': specifier: 1.0.2 version: 1.0.2 '@guardian/source': specifier: 12.2.1 - version: 12.2.1(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1)(tslib@2.6.2)(typescript@6.0.3) + version: 12.2.1(@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8))(@types/react@19.2.18)(react@19.2.8)(tslib@2.6.2)(typescript@6.0.3) '@guardian/source-development-kitchen': specifier: 28.1.0 - version: 28.1.0(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@guardian/libs@32.0.0(@guardian/ophan-tracker-js@4.0.2)(tslib@2.6.2)(typescript@6.0.3))(@guardian/source@12.2.1(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1)(tslib@2.6.2)(typescript@6.0.3))(@types/react@18.3.1)(react@18.3.1)(tslib@2.6.2)(typescript@6.0.3) + version: 28.1.0(@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8))(@guardian/libs@32.0.0(@guardian/ophan-tracker-js@4.0.2)(tslib@2.6.2)(typescript@6.0.3))(@guardian/source@12.2.1(@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8))(@types/react@19.2.18)(react@19.2.8)(tslib@2.6.2)(typescript@6.0.3))(@types/react@19.2.18)(react@19.2.8)(tslib@2.6.2)(typescript@6.0.3) '@guardian/support-dotcom-components': specifier: 11.0.0 version: 11.0.0(@guardian/libs@32.0.0(@guardian/ophan-tracker-js@4.0.2)(tslib@2.6.2)(typescript@6.0.3))(@guardian/ophan-tracker-js@4.0.2)(zod@4.1.12) @@ -376,16 +376,16 @@ importers: version: 10.65.0 '@storybook/addon-a11y': specifier: 10.3.3 - version: 10.3.3(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + version: 10.3.3(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)) '@storybook/addon-docs': specifier: 10.3.3 - version: 10.3.3(@types/react@18.3.1)(esbuild@0.28.1)(rollup@4.62.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@6.4.3(@types/node@24.12.4)(terser@5.49.2)(tsx@4.6.2))(webpack@5.109.2) + version: 10.3.3(@types/react@19.2.18)(esbuild@0.28.1)(rollup@4.62.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(vite@6.4.3(@types/node@24.12.4)(terser@5.49.2)(tsx@4.6.2))(webpack@5.109.2) '@storybook/addon-webpack5-compiler-swc': specifier: 4.0.3 - version: 4.0.3(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(webpack@5.109.2) + version: 4.0.3(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(webpack@5.109.2) '@storybook/react-webpack5': specifier: 10.3.3 - version: 10.3.3(@swc/core@1.15.46)(clean-css@5.3.3)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.25)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@6.0.3)(webpack-cli@7.2.2) + version: 10.3.3(@swc/core@1.15.46)(clean-css@5.3.3)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.25)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(typescript@6.0.3)(webpack-cli@7.2.2) '@svgr/webpack': specifier: 8.1.0 version: 8.1.0(typescript@6.0.3) @@ -409,7 +409,7 @@ importers: version: 7.0.0(@testing-library/dom@10.4.1) '@testing-library/react': specifier: 16.3.2 - version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@testing-library/user-event': specifier: 14.6.1 version: 14.6.1(@testing-library/dom@10.4.1) @@ -456,11 +456,11 @@ importers: specifier: 6.9.15 version: 6.9.15 '@types/react': - specifier: 18.3.1 - version: 18.3.1 + specifier: 19.2.18 + version: 19.2.18 '@types/react-dom': - specifier: 18.3.0 - version: 18.3.0 + specifier: 19.2.4 + version: 19.2.4(@types/react@19.2.18) '@types/react-google-recaptcha': specifier: 2.1.9 version: 2.1.9 @@ -627,14 +627,14 @@ importers: specifier: 6.0.2 version: 6.0.2(preact@10.15.1) react: - specifier: 18.3.1 - version: 18.3.1 + specifier: 19.2.8 + version: 19.2.8 react-dom: - specifier: 18.3.1 - version: 18.3.1(react@18.3.1) + specifier: 19.2.8 + version: 19.2.8(react@19.2.8) react-google-recaptcha: specifier: 3.1.0 - version: 3.1.0(react@18.3.1) + version: 3.1.0(react@19.2.8) rehype-autolink-headings: specifier: 7.1.0 version: 7.1.0 @@ -664,7 +664,7 @@ importers: version: 0.7.4 storybook: specifier: 10.3.3 - version: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) stylelint: specifier: 16.26.1 version: 16.26.1(typescript@6.0.3) @@ -676,7 +676,7 @@ importers: version: 0.2.7(@swc/core@1.15.46)(webpack@5.109.2) swr: specifier: 1.3.0 - version: 1.3.0(react@18.3.1) + version: 1.3.0(react@19.2.8) to-string-loader: specifier: 1.2.0 version: 1.2.0 @@ -4379,17 +4379,16 @@ packages: resolution: {integrity: sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==} deprecated: This is a stub types definition. parse-path provides its own type definitions, so you do not need this installed. - '@types/prop-types@15.7.5': - resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} - '@types/qs@6.9.15': resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - '@types/react-dom@18.3.0': - resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + '@types/react-dom@19.2.4': + resolution: {integrity: sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw==} + peerDependencies: + '@types/react': ^19.2.0 '@types/react-google-recaptcha@2.1.9': resolution: {integrity: sha512-nT31LrBDuoSZJN4QuwtQSF3O89FVHC4jLhM+NtKEmVF5R1e8OY0Jo4//x2Yapn2aNHguwgX5doAq8Zo+Ehd0ug==} @@ -4397,8 +4396,8 @@ packages: '@types/react-test-renderer@18.3.0': resolution: {integrity: sha512-HW4MuEYxfDbOHQsVlY/XtOvNHftCVEPhJF2pQXXwcUiUF+Oyb0usgp48HSgpK5rt8m9KZb22yqOeZm+rrVG8gw==} - '@types/react@18.3.1': - resolution: {integrity: sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==} + '@types/react@19.2.18': + resolution: {integrity: sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==} '@types/relateurl@0.2.33': resolution: {integrity: sha512-bTQCKsVbIdzLqZhLkF5fcJQreE4y1ro4DIyVrlDNSCJRRwHhB8Z+4zXXa8jN6eDvc2HbRsEYgbvrnGvi54EpSw==} @@ -5538,8 +5537,8 @@ packages: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -8167,10 +8166,10 @@ packages: resolution: {integrity: sha512-+NRMYs2DyTP4/tqWz371Oo50JqmWltR1h2gcdgUMAWZJIAvrd0/SqlCfx7tpzpl/s36rzw6qH2MjoNrxtRNYhA==} engines: {node: ^20.9.0 || >=22} - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + react-dom@19.2.8: + resolution: {integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==} peerDependencies: - react: ^18.3.1 + react: ^19.2.8 react-google-recaptcha@3.1.0: resolution: {integrity: sha512-cYW2/DWas8nEKZGD7SCu9BSuVz8iOcOLHChHyi7upUuVhkpkhYG/6N3KDiTQ3XAiZ2UAZkfvYKMfAHOzBOcGEg==} @@ -8186,8 +8185,8 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + react@19.2.8: + resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==} engines: {node: '>=0.10.0'} read-package-up@12.0.0: @@ -8421,8 +8420,8 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} schema-utils@3.3.0: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} @@ -11662,19 +11661,19 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1)': + '@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8)': dependencies: '@babel/runtime': 7.28.4 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.8) '@emotion/utils': 1.4.2 '@emotion/weak-memoize': 0.4.0 hoist-non-react-statics: 3.3.2 - react: 18.3.1 + react: 19.2.8 optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 19.2.18 transitivePeerDependencies: - supports-color @@ -11684,7 +11683,7 @@ snapshots: '@emotion/memoize': 0.9.0 '@emotion/unitless': 0.10.0 '@emotion/utils': 1.4.2 - csstype: 3.1.3 + csstype: 3.2.3 '@emotion/server@11.11.0': dependencies: @@ -11697,9 +11696,9 @@ snapshots: '@emotion/unitless@0.10.0': {} - '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.3.1)': + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.2.8)': dependencies: - react: 18.3.1 + react: 19.2.8 '@emotion/utils@1.4.2': {} @@ -12059,12 +12058,12 @@ snapshots: '@exodus/bytes@1.15.1': {} - '@guardian/braze-components@23.0.2(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@guardian/libs@32.0.0(@guardian/ophan-tracker-js@4.0.2)(tslib@2.6.2)(typescript@6.0.3))(@guardian/source@12.2.1(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1)(tslib@2.6.2)(typescript@6.0.3))(react@18.3.1)': + '@guardian/braze-components@23.0.2(@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8))(@guardian/libs@32.0.0(@guardian/ophan-tracker-js@4.0.2)(tslib@2.6.2)(typescript@6.0.3))(@guardian/source@12.2.1(@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8))(@types/react@19.2.18)(react@19.2.8)(tslib@2.6.2)(typescript@6.0.3))(react@19.2.8)': dependencies: - '@emotion/react': 11.14.0(@types/react@18.3.1)(react@18.3.1) + '@emotion/react': 11.14.0(@types/react@19.2.18)(react@19.2.8) '@guardian/libs': 32.0.0(@guardian/ophan-tracker-js@4.0.2)(tslib@2.6.2)(typescript@6.0.3) - '@guardian/source': 12.2.1(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1)(tslib@2.6.2)(typescript@6.0.3) - react: 18.3.1 + '@guardian/source': 12.2.1(@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8))(@types/react@19.2.18)(react@19.2.8)(tslib@2.6.2)(typescript@6.0.3) + react: 19.2.8 '@guardian/bridget@8.13.1': {} @@ -12162,16 +12161,16 @@ snapshots: prettier: 3.8.3 tslib: 2.6.2 - '@guardian/react-crossword@19.0.1(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@guardian/libs@32.0.0(@guardian/ophan-tracker-js@4.0.2)(tslib@2.6.2)(typescript@6.0.3))(@guardian/source@12.2.1(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1)(tslib@2.6.2)(typescript@6.0.3))(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@6.0.3)': + '@guardian/react-crossword@19.0.1(@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8))(@guardian/libs@32.0.0(@guardian/ophan-tracker-js@4.0.2)(tslib@2.6.2)(typescript@6.0.3))(@guardian/source@12.2.1(@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8))(@types/react@19.2.18)(react@19.2.8)(tslib@2.6.2)(typescript@6.0.3))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@6.0.3)': dependencies: - '@emotion/react': 11.14.0(@types/react@18.3.1)(react@18.3.1) + '@emotion/react': 11.14.0(@types/react@19.2.18)(react@19.2.8) '@guardian/libs': 32.0.0(@guardian/ophan-tracker-js@4.0.2)(tslib@2.6.2)(typescript@6.0.3) - '@guardian/source': 12.2.1(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1)(tslib@2.6.2)(typescript@6.0.3) - react: 18.3.1 + '@guardian/source': 12.2.1(@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8))(@types/react@19.2.18)(react@19.2.8)(tslib@2.6.2)(typescript@6.0.3) + react: 19.2.8 tslib: 2.8.1 - use-local-storage-state: 19.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + use-local-storage-state: 19.5.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 19.2.18 typescript: 6.0.3 transitivePeerDependencies: - react-dom @@ -12180,25 +12179,25 @@ snapshots: dependencies: tslib: 2.8.1 - '@guardian/source-development-kitchen@28.1.0(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@guardian/libs@32.0.0(@guardian/ophan-tracker-js@4.0.2)(tslib@2.6.2)(typescript@6.0.3))(@guardian/source@12.2.1(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1)(tslib@2.6.2)(typescript@6.0.3))(@types/react@18.3.1)(react@18.3.1)(tslib@2.6.2)(typescript@6.0.3)': + '@guardian/source-development-kitchen@28.1.0(@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8))(@guardian/libs@32.0.0(@guardian/ophan-tracker-js@4.0.2)(tslib@2.6.2)(typescript@6.0.3))(@guardian/source@12.2.1(@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8))(@types/react@19.2.18)(react@19.2.8)(tslib@2.6.2)(typescript@6.0.3))(@types/react@19.2.18)(react@19.2.8)(tslib@2.6.2)(typescript@6.0.3)': dependencies: '@guardian/libs': 32.0.0(@guardian/ophan-tracker-js@4.0.2)(tslib@2.6.2)(typescript@6.0.3) - '@guardian/source': 12.2.1(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1)(tslib@2.6.2)(typescript@6.0.3) + '@guardian/source': 12.2.1(@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8))(@types/react@19.2.18)(react@19.2.8)(tslib@2.6.2)(typescript@6.0.3) tslib: 2.6.2 optionalDependencies: - '@emotion/react': 11.14.0(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 - react: 18.3.1 + '@emotion/react': 11.14.0(@types/react@19.2.18)(react@19.2.8) + '@types/react': 19.2.18 + react: 19.2.8 typescript: 6.0.3 - '@guardian/source@12.2.1(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1)(tslib@2.6.2)(typescript@6.0.3)': + '@guardian/source@12.2.1(@emotion/react@11.14.0(@types/react@19.2.18)(react@19.2.8))(@types/react@19.2.18)(react@19.2.8)(tslib@2.6.2)(typescript@6.0.3)': dependencies: mini-svg-data-uri: 1.4.4 tslib: 2.6.2 optionalDependencies: - '@emotion/react': 11.14.0(@types/react@18.3.1)(react@18.3.1) - '@types/react': 18.3.1 - react: 18.3.1 + '@emotion/react': 11.14.0(@types/react@19.2.18)(react@19.2.8) + '@types/react': 19.2.18 + react: 19.2.8 typescript: 6.0.3 '@guardian/support-dotcom-components@11.0.0(@guardian/libs@32.0.0(@guardian/ophan-tracker-js@4.0.2)(tslib@2.6.2)(typescript@6.0.3))(@guardian/ophan-tracker-js@4.0.2)(zod@4.1.12)': @@ -12587,11 +12586,11 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} - '@mdx-js/react@3.1.1(@types/react@18.3.1)(react@18.3.1)': + '@mdx-js/react@3.1.1(@types/react@19.2.18)(react@19.2.8)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.3.1 - react: 18.3.1 + '@types/react': 19.2.18 + react: 19.2.8 '@napi-rs/nice-android-arm-eabi@1.1.1': optional: true @@ -13451,21 +13450,21 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@storybook/addon-a11y@10.3.3(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + '@storybook/addon-a11y@10.3.3(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))': dependencies: '@storybook/global': 5.0.0 axe-core: 4.11.1 - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@storybook/addon-docs@10.3.3(@types/react@18.3.1)(esbuild@0.28.1)(rollup@4.62.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@6.4.3(@types/node@24.12.4)(terser@5.49.2)(tsx@4.6.2))(webpack@5.109.2)': + '@storybook/addon-docs@10.3.3(@types/react@19.2.18)(esbuild@0.28.1)(rollup@4.62.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(vite@6.4.3(@types/node@24.12.4)(terser@5.49.2)(tsx@4.6.2))(webpack@5.109.2)': dependencies: - '@mdx-js/react': 3.1.1(@types/react@18.3.1)(react@18.3.1) - '@storybook/csf-plugin': 10.3.3(esbuild@0.28.1)(rollup@4.62.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@6.4.3(@types/node@24.12.4)(terser@5.49.2)(tsx@4.6.2))(webpack@5.109.2) - '@storybook/icons': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/react-dom-shim': 10.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mdx-js/react': 3.1.1(@types/react@19.2.18)(react@19.2.8) + '@storybook/csf-plugin': 10.3.3(esbuild@0.28.1)(rollup@4.62.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(vite@6.4.3(@types/node@24.12.4)(terser@5.49.2)(tsx@4.6.2))(webpack@5.109.2) + '@storybook/icons': 2.0.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@storybook/react-dom-shim': 10.3.3(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' @@ -13474,18 +13473,18 @@ snapshots: - vite - webpack - '@storybook/addon-webpack5-compiler-swc@4.0.3(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(webpack@5.109.2)': + '@storybook/addon-webpack5-compiler-swc@4.0.3(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(webpack@5.109.2)': dependencies: '@swc/core': 1.15.46 - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) swc-loader: 0.2.7(@swc/core@1.15.46)(webpack@5.109.2) transitivePeerDependencies: - '@swc/helpers' - webpack - '@storybook/builder-webpack5@10.3.3(@swc/core@1.15.46)(clean-css@5.3.3)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.25)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@6.0.3)(webpack-cli@7.2.2)': + '@storybook/builder-webpack5@10.3.3(@swc/core@1.15.46)(clean-css@5.3.3)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.25)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(typescript@6.0.3)(webpack-cli@7.2.2)': dependencies: - '@storybook/core-webpack': 10.3.3(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@storybook/core-webpack': 10.3.3(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)) case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.4.3 css-loader: 7.1.4(webpack@5.109.2) @@ -13493,7 +13492,7 @@ snapshots: fork-ts-checker-webpack-plugin: 9.1.0(typescript@6.0.3)(webpack@5.109.2) html-webpack-plugin: 5.6.6(webpack@5.109.2) magic-string: 0.30.21 - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) style-loader: 4.0.0(webpack@5.109.2) terser-webpack-plugin: 5.4.0(@swc/core@1.15.46)(esbuild@0.28.1)(webpack@5.109.2) ts-dedent: 2.2.0 @@ -13519,14 +13518,14 @@ snapshots: - uglify-js - webpack-cli - '@storybook/core-webpack@10.3.3(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + '@storybook/core-webpack@10.3.3(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))': dependencies: - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) ts-dedent: 2.2.0 - '@storybook/csf-plugin@10.3.3(esbuild@0.28.1)(rollup@4.62.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@6.4.3(@types/node@24.12.4)(terser@5.49.2)(tsx@4.6.2))(webpack@5.109.2)': + '@storybook/csf-plugin@10.3.3(esbuild@0.28.1)(rollup@4.62.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(vite@6.4.3(@types/node@24.12.4)(terser@5.49.2)(tsx@4.6.2))(webpack@5.109.2)': dependencies: - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) unplugin: 2.3.11 optionalDependencies: esbuild: 0.28.1 @@ -13536,23 +13535,23 @@ snapshots: '@storybook/global@5.0.0': {} - '@storybook/icons@2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/icons@2.0.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) - '@storybook/preset-react-webpack@10.3.3(@swc/core@1.15.46)(clean-css@5.3.3)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.25)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@6.0.3)(webpack-cli@7.2.2)': + '@storybook/preset-react-webpack@10.3.3(@swc/core@1.15.46)(clean-css@5.3.3)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.25)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(typescript@6.0.3)(webpack-cli@7.2.2)': dependencies: - '@storybook/core-webpack': 10.3.3(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@storybook/core-webpack': 10.3.3(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)) '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@6.0.3)(webpack@5.109.2) '@types/semver': 7.7.1 magic-string: 0.30.21 - react: 18.3.1 + react: 19.2.8 react-docgen: 7.1.1 - react-dom: 18.3.1(react@18.3.1) + react-dom: 19.2.8(react@19.2.8) resolve: 1.22.12 semver: 7.8.5 - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) tsconfig-paths: 4.2.0 webpack: 5.109.2(@swc/core@1.15.46)(clean-css@5.3.3)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.25)(webpack-cli@7.2.2) optionalDependencies: @@ -13587,20 +13586,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/react-dom-shim@10.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + '@storybook/react-dom-shim@10.3.3(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))': dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@storybook/react-webpack5@10.3.3(@swc/core@1.15.46)(clean-css@5.3.3)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.25)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@6.0.3)(webpack-cli@7.2.2)': + '@storybook/react-webpack5@10.3.3(@swc/core@1.15.46)(clean-css@5.3.3)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.25)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(typescript@6.0.3)(webpack-cli@7.2.2)': dependencies: - '@storybook/builder-webpack5': 10.3.3(@swc/core@1.15.46)(clean-css@5.3.3)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.25)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@6.0.3)(webpack-cli@7.2.2) - '@storybook/preset-react-webpack': 10.3.3(@swc/core@1.15.46)(clean-css@5.3.3)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.25)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@6.0.3)(webpack-cli@7.2.2) - '@storybook/react': 10.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@6.0.3) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/builder-webpack5': 10.3.3(@swc/core@1.15.46)(clean-css@5.3.3)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.25)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(typescript@6.0.3)(webpack-cli@7.2.2) + '@storybook/preset-react-webpack': 10.3.3(@swc/core@1.15.46)(clean-css@5.3.3)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.25)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(typescript@6.0.3)(webpack-cli@7.2.2) + '@storybook/react': 10.3.3(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(typescript@6.0.3) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) optionalDependencies: typescript: 6.0.3 transitivePeerDependencies: @@ -13620,15 +13619,15 @@ snapshots: - uglify-js - webpack-cli - '@storybook/react@10.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@6.0.3)': + '@storybook/react@10.3.3(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(typescript@6.0.3)': dependencies: '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 10.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - react: 18.3.1 + '@storybook/react-dom-shim': 10.3.3(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)) + react: 19.2.8 react-docgen: 8.0.2 react-docgen-typescript: 2.4.0(typescript@6.0.3) - react-dom: 18.3.1(react@18.3.1) - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-dom: 19.2.8(react@19.2.8) + storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) optionalDependencies: typescript: 6.0.3 transitivePeerDependencies: @@ -13904,15 +13903,15 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@babel/runtime': 7.29.7 '@testing-library/dom': 10.4.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) optionalDependencies: - '@types/react': 18.3.1 - '@types/react-dom': 18.3.0 + '@types/react': 19.2.18 + '@types/react-dom': 19.2.4(@types/react@19.2.18) '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': dependencies: @@ -14119,28 +14118,25 @@ snapshots: dependencies: parse-path: 7.1.0 - '@types/prop-types@15.7.5': {} - '@types/qs@6.9.15': {} '@types/range-parser@1.2.7': {} - '@types/react-dom@18.3.0': + '@types/react-dom@19.2.4(@types/react@19.2.18)': dependencies: - '@types/react': 18.3.1 + '@types/react': 19.2.18 '@types/react-google-recaptcha@2.1.9': dependencies: - '@types/react': 18.3.1 + '@types/react': 19.2.18 '@types/react-test-renderer@18.3.0': dependencies: - '@types/react': 18.3.1 + '@types/react': 19.2.18 - '@types/react@18.3.1': + '@types/react@19.2.18': dependencies: - '@types/prop-types': 15.7.5 - csstype: 3.1.3 + csstype: 3.2.3 '@types/relateurl@0.2.33': {} @@ -15381,7 +15377,7 @@ snapshots: dependencies: cssom: 0.3.8 - csstype@3.1.3: {} + csstype@3.2.3: {} damerau-levenshtein@1.0.8: {} @@ -18547,11 +18543,11 @@ snapshots: iconv-lite: 0.7.2 unpipe: 1.0.0 - react-async-script@1.2.0(react@18.3.1): + react-async-script@1.2.0(react@19.2.8): dependencies: hoist-non-react-statics: 3.3.2 prop-types: 15.8.1 - react: 18.3.1 + react: 19.2.8 react-docgen-typescript@2.4.0(typescript@6.0.3): dependencies: @@ -18587,17 +18583,16 @@ snapshots: transitivePeerDependencies: - supports-color - react-dom@18.3.1(react@18.3.1): + react-dom@19.2.8(react@19.2.8): dependencies: - loose-envify: 1.4.0 - react: 18.3.1 - scheduler: 0.23.2 + react: 19.2.8 + scheduler: 0.27.0 - react-google-recaptcha@3.1.0(react@18.3.1): + react-google-recaptcha@3.1.0(react@19.2.8): dependencies: prop-types: 15.8.1 - react: 18.3.1 - react-async-script: 1.2.0(react@18.3.1) + react: 19.2.8 + react-async-script: 1.2.0(react@19.2.8) react-is@16.13.1: {} @@ -18605,9 +18600,7 @@ snapshots: react-is@18.3.1: {} - react@18.3.1: - dependencies: - loose-envify: 1.4.0 + react@19.2.8: {} read-package-up@12.0.0: dependencies: @@ -18957,9 +18950,7 @@ snapshots: dependencies: xmlchars: 2.2.0 - scheduler@0.23.2: - dependencies: - loose-envify: 1.4.0 + scheduler@0.27.0: {} schema-utils@3.3.0: dependencies: @@ -19204,10 +19195,10 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 - storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8): dependencies: '@storybook/global': 5.0.0 - '@storybook/icons': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/icons': 2.0.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@testing-library/jest-dom': 6.9.1 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) '@vitest/expect': 3.2.4 @@ -19216,7 +19207,7 @@ snapshots: open: 10.2.0 recast: 0.23.11 semver: 7.7.4 - use-sync-external-store: 1.6.0(react@18.3.1) + use-sync-external-store: 1.6.0(react@19.2.8) ws: 8.21.0 optionalDependencies: prettier: 3.8.3 @@ -19499,9 +19490,9 @@ snapshots: '@swc/counter': 0.1.3 webpack: 5.109.2(@swc/core@1.15.46)(clean-css@5.3.3)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.25)(webpack-cli@7.2.2) - swr@1.3.0(react@18.3.1): + swr@1.3.0(react@19.2.8): dependencies: - react: 18.3.1 + react: 19.2.8 symbol-tree@3.2.4: {} @@ -19972,14 +19963,14 @@ snapshots: punycode: 1.4.1 qs: 6.14.1 - use-local-storage-state@19.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + use-local-storage-state@19.5.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8): dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) - use-sync-external-store@1.6.0(react@18.3.1): + use-sync-external-store@1.6.0(react@19.2.8): dependencies: - react: 18.3.1 + react: 19.2.8 util-deprecate@1.0.2: {}