diff --git a/package.json b/package.json index 35b9f4a..95934eb 100644 --- a/package.json +++ b/package.json @@ -33,12 +33,14 @@ "author": "Elie Rotenberg ", "license": "MIT", "devDependencies": { - "@testing-library/react": "^14.1.2", + "@testing-library/dom": "^10.4.2", + "@testing-library/react": "^16.3.3", "@types/assert": "^1.5.10", "@types/mocha": "^10.0.6", "@types/node": "^20.10.0", - "@types/react": "^18.2.39", - "@types/react-dom": "^18.2.17", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "@types/sinon": "^22.0.0", "@typescript-eslint/eslint-plugin": "^6.13.1", "@typescript-eslint/parser": "^6.13.1", "@vitejs/plugin-react": "^4.2.0", @@ -49,9 +51,8 @@ "koa": "^2.14.2", "node-fetch": "^3.3.2", "prettier": "^3.1.0", - "prop-types": "^15.8.1", - "react": "^18.0.0", - "react-dom": "^18.0.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", "rimraf": "^5.0.5", "sinon": "^17.0.1", "typescript": "^5.3.2", @@ -59,7 +60,6 @@ "vitest": "^0.34.6" }, "peerDependencies": { - "prop-types": "^15.7.2", - "react": "^16.8.2 | ^17.0.0 | ^18.0.0" + "react": "^19.0.0" } } diff --git a/src/prepare.ts b/src/prepare.ts index 82c47e0..df20a7c 100644 --- a/src/prepare.ts +++ b/src/prepare.ts @@ -112,32 +112,29 @@ async function prepareElement( } case ELEMENT_TYPE.DOM_ELEMENT: case ELEMENT_TYPE.FRAGMENT: { - return [(element as ReactElement).props.children, context]; + return [ + (element as ReactElement<{ children?: ReactNode }>).props.children, + context, + ]; } case ELEMENT_TYPE.CONTEXT_PROVIDER: { const providerElement = element as ProviderElement; const _providers: ContextProviderMap = new Map(context._providers); - _providers.set( - providerElement.type._context.Provider, - providerElement.props, - ); + _providers.set(providerElement.type.Provider, providerElement.props); return [providerElement.props.children, { _providers }]; } case ELEMENT_TYPE.CONTEXT_CONSUMER: { const consumerElement = element as ConsumerElement; - const value = getContextValue(context, consumerElement.type); + const value = getContextValue(context, consumerElement.type._context); const consumerFunc = consumerElement.props.children; return [consumerFunc(value), context]; } case ELEMENT_TYPE.FORWARD_REF: { const forwardRefElement = element as ForwardRefElement; + const { ref, ...props } = forwardRefElement.props; const children = await runFunctionComponent( - () => - forwardRefElement.type.render( - forwardRefElement.props, - forwardRefElement.ref, - ), + () => forwardRefElement.type.render(props, ref), dispatcher, context, ); @@ -155,7 +152,7 @@ async function prepareElement( case ELEMENT_TYPE.FUNCTION_COMPONENT: { const functionElement = element as FunctionComponentElement; const children = await runFunctionComponent( - () => functionElement.type(functionElement.props), + () => functionElement.type(functionElement.props) as ReactNode, dispatcher, context, ); diff --git a/src/tests/ReactLifeCycle.spec.jsx b/src/tests/ReactLifeCycle.spec.jsx index f05edc1..ef7d02b 100644 --- a/src/tests/ReactLifeCycle.spec.jsx +++ b/src/tests/ReactLifeCycle.spec.jsx @@ -1,28 +1,25 @@ +import React from 'react'; import { describe, it } from 'vitest'; import assert from 'assert/strict'; -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; +import { Component } from 'react'; import { renderToString } from 'react-dom/server'; import sinon from 'sinon'; describe('React lifecycle methods', () => { class CompositeComponent extends Component { - static propTypes = { - spyForComponentWillMount: PropTypes.func, - spyForComponentWillUnmount: PropTypes.func, - }; - // eslint-disable-next-line react/no-deprecated componentWillMount() { const { spyForComponentWillMount } = this.props; - spyForComponentWillMount(); + spyForComponentWillMount && spyForComponentWillMount(); } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type componentWillUnmount() { const { spyForComponentWillUnmount } = this.props; - spyForComponentWillUnmount(); + spyForComponentWillUnmount && spyForComponentWillUnmount(); } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type render() { return
CompositeComponent
; } diff --git a/src/tests/getElementType.spec.jsx b/src/tests/getElementType.spec.jsx index 66beb4d..4769e74 100644 --- a/src/tests/getElementType.spec.jsx +++ b/src/tests/getElementType.spec.jsx @@ -1,5 +1,3 @@ -/* eslint-disable react/prop-types */ - import { describe, it } from 'vitest'; import React, { createContext, memo } from 'react'; import assert from 'assert/strict'; diff --git a/src/tests/prepare.spec.jsx b/src/tests/prepare.spec.jsx index 36dc295..3742297 100644 --- a/src/tests/prepare.spec.jsx +++ b/src/tests/prepare.spec.jsx @@ -1,4 +1,4 @@ -/* eslint-disable react/prop-types */ +/* eslint-disable react/display-name */ import { describe, it, beforeAll, beforeEach, expect } from 'vitest'; import assert from 'assert/strict'; @@ -21,7 +21,6 @@ import React, { useSyncExternalStore, useTransition, } from 'react'; -import PropTypes from 'prop-types'; import { renderToStaticMarkup } from 'react-dom/server'; import prepare from '../prepare'; import { usePreparedEffect, withPreparedEffect } from '../index'; @@ -30,20 +29,15 @@ describe('prepare', () => { let originalDispatcher; beforeAll(() => { originalDispatcher = - React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED - .ReactCurrentDispatcher.current; + React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE.H; }); beforeEach(() => { - React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher.current = + React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE.H = originalDispatcher; }); it('sets instance properties', async () => { class MessageBox extends React.Component { - static propTypes = { - message: PropTypes.string, - }; - constructor() { super(); } @@ -295,8 +289,6 @@ describe('prepare', () => { )); const Testing = ({ children }) =>
Test {children}
; - Testing.propTypes = { children: PropTypes.node }; - await prepare( @@ -562,19 +554,11 @@ describe('prepare', () => {

); }; - MyContextConsumer.propTypes = { - expectedData: PropTypes.string, - children: PropTypes.node, - }; const AnotherContextConsumer = (props) => { const data = useContext(AnotherContext); assert.equal(data, props.expectedData); return

Another:{data}

; }; - AnotherContextConsumer.propTypes = { - expectedData: PropTypes.string, - }; - const App = () => ( <> @@ -799,11 +783,7 @@ describe('prepare', () => { ); - App.propTypes = { - texts: PropTypes.array, - }; - - await prepare(); + await prepare(); assert( prepareUsingPropsForFirstChild.calledOnce, diff --git a/src/tests/usePreparedEffect.spec.jsx b/src/tests/usePreparedEffect.spec.jsx index 1942094..bc32e30 100644 --- a/src/tests/usePreparedEffect.spec.jsx +++ b/src/tests/usePreparedEffect.spec.jsx @@ -1,4 +1,3 @@ -/* eslint-disable react/prop-types */ import { describe, it, beforeEach } from 'vitest'; import React from 'react'; import assert from 'assert/strict'; diff --git a/src/tests/withPreparedEffect.spec.jsx b/src/tests/withPreparedEffect.spec.jsx index 5bfcb38..267580e 100644 --- a/src/tests/withPreparedEffect.spec.jsx +++ b/src/tests/withPreparedEffect.spec.jsx @@ -2,7 +2,6 @@ import { describe, it, beforeEach } from 'vitest'; import sinon from 'sinon'; import assert from 'assert/strict'; import React, { Component, PureComponent } from 'react'; -import PropTypes from 'prop-types'; import { renderToStaticMarkup } from 'react-dom/server'; import { prepare, withPreparedEffect } from '../index'; @@ -10,28 +9,18 @@ import { render } from '@testing-library/react'; describe('withPreparedEffect', () => { class OriginalCompositeComponent extends Component { - static propTypes = { - text: PropTypes.string, - }; render() { return
{this.props.text}
; } } class OriginalCompositePureComponent extends PureComponent { - static propTypes = { - text: PropTypes.string, - }; render() { return
{this.props.text}
; } } const OriginalArrowComponent = ({ text }) =>
{text}
; - OriginalArrowComponent.propTypes = { - text: PropTypes.string, - }; - let doAsyncSideEffect; let prepareUsingProps; diff --git a/src/types.d.ts b/src/types.d.ts index 9219195..7c5ca1e 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -32,6 +32,7 @@ export type ClassComponentInstance = Omit< 'props' > & { props: P; + refs?: Record; updater?: { enqueueSetState: ( publicInstance: Component, diff --git a/src/utils/dispatcher.ts b/src/utils/dispatcher.ts index 2b60037..e1dbba5 100644 --- a/src/utils/dispatcher.ts +++ b/src/utils/dispatcher.ts @@ -22,7 +22,7 @@ export type Dispatcher = ReactDispatcher & { }; const ReactInternals = (React as ReactWithInternals) - .__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; + .__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; const noOp = (): void => { // do nothing @@ -112,7 +112,7 @@ export const setDispatcherContext = ( }; export const registerDispatcher = (dispatcher: Dispatcher): void => { - ReactInternals.ReactCurrentDispatcher.current = dispatcher; + ReactInternals.H = dispatcher; }; export const popHookPromises = (dispatcher: Dispatcher): Promise[] => { diff --git a/src/utils/getContextValue.ts b/src/utils/getContextValue.ts index 43d34ce..c8d6a85 100644 --- a/src/utils/getContextValue.ts +++ b/src/utils/getContextValue.ts @@ -4,15 +4,13 @@ import { ContextWithInternals } from './reactInternalTypes'; const getContextValue = ( prepareContext: PrepareContext, - elementContext: Context, + context: Context, ): T => { - const parentProvider = prepareContext._providers?.get( - elementContext.Provider, - ); + const parentProvider = prepareContext._providers?.get(context.Provider); return parentProvider ? parentProvider.value - : (elementContext as ContextWithInternals)._currentValue; + : (context as ContextWithInternals)._currentValue; }; export default getContextValue; diff --git a/src/utils/getElementType.ts b/src/utils/getElementType.ts index e81d684..b8b16e8 100644 --- a/src/utils/getElementType.ts +++ b/src/utils/getElementType.ts @@ -34,9 +34,9 @@ export default function getElementType(element: ReactNode): ELEMENT_TYPE { } else if (typeof element.type === 'object') { // Exotic components const type: ExoticComponent = element.type; - if (type.$$typeof.toString() === 'Symbol(react.provider)') { + if (type.$$typeof.toString() === 'Symbol(react.context)') { return ELEMENT_TYPE.CONTEXT_PROVIDER; - } else if (type.$$typeof.toString() === 'Symbol(react.context)') { + } else if (type.$$typeof.toString() === 'Symbol(react.consumer)') { return ELEMENT_TYPE.CONTEXT_CONSUMER; } else if (type.$$typeof.toString() === 'Symbol(react.forward_ref)') { return ELEMENT_TYPE.FORWARD_REF; diff --git a/src/utils/reactInternalTypes.d.ts b/src/utils/reactInternalTypes.d.ts index 80dc395..051f2f3 100644 --- a/src/utils/reactInternalTypes.d.ts +++ b/src/utils/reactInternalTypes.d.ts @@ -8,7 +8,6 @@ import React, { ForwardRefRenderFunction, LazyExoticComponent, MemoExoticComponent, - Provider, ProviderProps, ReactElement, useCallback, @@ -48,10 +47,8 @@ export interface ReactDispatcher { } export type ReactWithInternals = typeof React & { - __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: { - ReactCurrentDispatcher: { - current: ReactDispatcher; - }; + __CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE: { + H: ReactDispatcher | null; }; }; @@ -59,30 +56,28 @@ export interface ContextWithInternals extends Context { _currentValue: T; } -interface ProviderWithInternals extends Provider { - _context: Context; +export interface ConsumerWithInternals extends Consumer { + _context: ContextWithInternals; } export type ProviderElement = ReactElement< ProviderProps, - ProviderWithInternals + ContextWithInternals >; export type ConsumerElement = ReactElement< ConsumerProps, - Context & Consumer + ConsumerWithInternals >; // I couldn't find any exported types in react that matched. // ForwardRefExoticComponent seems completely wrong. export type ForwardRefElement

= ReactElement< - P, + P & { ref: ForwardedRef }, ExoticComponent

& { render: ForwardRefRenderFunction; } -> & { - ref: ForwardedRef; -}; +>; export type MemoElement

= ReactElement< P, diff --git a/yarn.lock b/yarn.lock index d23ee4a..dc250fa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -613,28 +613,26 @@ resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== -"@testing-library/dom@^9.0.0": - version "9.3.3" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.3.tgz#108c23a5b0ef51121c26ae92eb3179416b0434f5" - integrity sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw== +"@testing-library/dom@^10.4.2": + version "10.4.2" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.4.2.tgz#e996827c4e5e1f13589527293b4b3958de2f709f" + integrity sha512-yzr2S9HyAIdhz2/6qHgbs665Q7PKVcDF05vsOlHPxG1mo36gKVesdYVeDLnXgfjJ03CrKRk08knc6+E/9m8v2Q== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" "@types/aria-query" "^5.0.1" - aria-query "5.1.3" - chalk "^4.1.0" + aria-query "5.3.0" dom-accessibility-api "^0.5.9" lz-string "^1.5.0" + picocolors "1.1.1" pretty-format "^27.0.2" -"@testing-library/react@^14.1.2": - version "14.1.2" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.1.2.tgz#a2b9e9ee87721ec9ed2d7cfc51cc04e474537c32" - integrity sha512-z4p7DVBTPjKM5qDZ0t5ZjzkpSNb+fZy1u6bzO7kk8oeGagpPCAtgh4cx1syrfp7a+QWkM021jGqjJaxJJnXAZg== +"@testing-library/react@^16.3.3": + version "16.3.3" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-16.3.3.tgz#426907e7716f37038dab8aa69d8f0459f9ec24b2" + integrity sha512-Uo193NgQbPMz6lrrhtRQQFcMC6Re/ELLFbbuVL30WDlZxlpZf9/lMHTAVxPRLw1q1iu9OJmR1c2BLiENRstdBg== dependencies: "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^9.0.0" - "@types/react-dom" "^18.0.0" "@types/aria-query@^5.0.1": version "5.0.4" @@ -718,53 +716,35 @@ dependencies: undici-types "~5.26.4" -"@types/prop-types@*": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== +"@types/react-dom@^19.0.0": + version "19.3.0" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.3.0.tgz#90294a9266efd928a5266f2110d60d5dba5015d2" + integrity sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q== -"@types/react-dom@^18.0.0": - version "18.0.6" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.6.tgz#36652900024842b74607a17786b6662dd1e103a1" - integrity sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA== +"@types/react@^19.0.0": + version "19.3.0" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.3.0.tgz#3b3ce8d8c1627fb5ccd4dadd57ef445c5a153b77" + integrity sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg== dependencies: - "@types/react" "*" - -"@types/react-dom@^18.2.17": - version "18.2.17" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.17.tgz#375c55fab4ae671bd98448dcfa153268d01d6f64" - integrity sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg== - dependencies: - "@types/react" "*" - -"@types/react@*": - version "18.0.15" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.15.tgz#d355644c26832dc27f3e6cbf0c4f4603fc4ab7fe" - integrity sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/react@^18.2.39": - version "18.2.39" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.39.tgz#744bee99e053ad61fe74eb8b897f3ab5b19a7e25" - integrity sha512-Oiw+ppED6IremMInLV4HXGbfbG6GyziY3kqAwJYOR0PNbkYDmLWQA3a95EhdSmamsvbkJN96ZNN+YD+fGjzSBA== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + csstype "^3.2.2" "@types/semver@^7.5.0": version "7.5.6" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== +"@types/sinon@^22.0.0": + version "22.0.0" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-22.0.0.tgz#396af07c4452efb57950ec260d450acedf025508" + integrity sha512-TDbVpbccc2HfiqHR09Argj3mHV1KMW7sCCKj52fsl8lbRLkEn7fB1966EWhOKWUBcqfBueZuPoA7/OK1CKiy3g== + dependencies: + "@types/sinonjs__fake-timers" "*" + +"@types/sinonjs__fake-timers@*": + version "15.0.1" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-15.0.1.tgz#49f731d9453f52d64dd79f5a5626c1cf1b81bea4" + integrity sha512-Ko2tjWJq8oozHzHV+reuvS5KYIRAokHnGbDwGh/J64LntgpbuylF74ipEL24HCyRjf9FOlBiBHWBR1RlVKsI1w== + "@typescript-eslint/eslint-plugin@^6.13.1": version "6.13.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.13.1.tgz#f98bd887bf95551203c917e734d113bf8d527a0c" @@ -988,12 +968,12 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== +aria-query@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== dependencies: - deep-equal "^2.0.5" + dequal "^2.0.3" array-buffer-byte-length@^1.0.0: version "1.0.0" @@ -1185,7 +1165,7 @@ chalk@^2.0.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0: +chalk@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1282,10 +1262,10 @@ cssstyle@^3.0.0: dependencies: rrweb-cssom "^0.6.0" -csstype@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" - integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== +csstype@^3.2.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" + integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== data-uri-to-buffer@^4.0.0: version "4.0.1" @@ -1319,30 +1299,6 @@ deep-eql@^4.1.3: dependencies: type-detect "^4.0.0" -deep-equal@^2.0.5: - version "2.2.3" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" - integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.5" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.2" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.13" - deep-equal@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" @@ -1399,6 +1355,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + destroy@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -1549,21 +1510,6 @@ es-abstract@^1.22.1: unbox-primitive "^1.0.2" which-typed-array "^1.1.13" -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - es-iterator-helpers@^1.0.12: version "1.0.15" resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40" @@ -2210,7 +2156,7 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" -internal-slot@^1.0.4, internal-slot@^1.0.5: +internal-slot@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== @@ -2219,14 +2165,6 @@ internal-slot@^1.0.4, internal-slot@^1.0.5: hasown "^2.0.0" side-channel "^1.0.4" -is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" @@ -2313,7 +2251,7 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: dependencies: is-extglob "^2.1.1" -is-map@^2.0.1, is-map@^2.0.2: +is-map@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== @@ -2353,7 +2291,7 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-set@^2.0.1, is-set@^2.0.2: +is-set@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== @@ -2597,7 +2535,7 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -2771,14 +2709,6 @@ object-inspect@^1.13.1: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== -object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -2960,6 +2890,11 @@ pathval@^1.1.1: resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== +picocolors@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -3050,13 +2985,12 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -react-dom@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== +react-dom@^19.0.0: + version "19.3.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.3.0.tgz#a0ff19161d7f4e9be5469a07278b0c06e00f9001" + integrity sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q== dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" + scheduler "^0.28.0" react-is@^16.13.1: version "16.13.1" @@ -3078,12 +3012,10 @@ react-refresh@^0.14.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== -react@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" +react@^19.0.0: + version "19.3.0" + resolved "https://registry.yarnpkg.com/react/-/react-19.3.0.tgz#e20aa3a14687075ce863351b5878b0608c3fbfb2" + integrity sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog== reflect.getprototypeof@^1.0.4: version "1.0.4" @@ -3225,12 +3157,10 @@ saxes@^6.0.0: dependencies: xmlchars "^2.2.0" -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" +scheduler@^0.28.0: + version "0.28.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.28.0.tgz#03d3ca348aeaf8b7502f64468f217b27523f9695" + integrity sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw== semver@^6.3.1: version "6.3.1" @@ -3336,14 +3266,16 @@ std-env@^3.3.3: resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.5.0.tgz#83010c9e29bd99bf6f605df87c19012d82d63b97" integrity sha512-JGUEaALvL0Mf6JCfYnJOTcobY+Nc7sG/TemDRBqCA0wEr4DER7zDchaaixTlmOxAjG1uRJmX82EQcxwTQTkqVA== -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: - internal-slot "^1.0.4" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: +string-width@^4.1.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -3421,7 +3353,14 @@ string.prototype.trimstart@^1.0.7: define-properties "^1.2.0" es-abstract "^1.22.1" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==