@react-aria/ssr
Advanced tools
| export { SSRProvider, useIsSSR } from 'react-aria/SSRProvider'; | ||
| export { useSSRSafeId } from 'react-aria/private/ssr/SSRProvider'; | ||
| export type { SSRProviderProps } from 'react-aria/SSRProvider'; |
+4
-2
@@ -1,2 +0,3 @@ | ||
| import {SSRProvider as $b5e257d569688ac6$export$9f8ac96af4b1b2ae, useIsSSR as $b5e257d569688ac6$export$535bd6ca7f90a273, useSSRSafeId as $b5e257d569688ac6$export$619500959fc48b26} from "./SSRProvider.mjs"; | ||
| import {SSRProvider as $f00dc27212b61f45$re_export$SSRProvider, useIsSSR as $f00dc27212b61f45$re_export$useIsSSR} from "react-aria/SSRProvider"; | ||
| import {useSSRSafeId as $f00dc27212b61f45$re_export$useSSRSafeId} from "react-aria/private/ssr/SSRProvider"; | ||
@@ -16,3 +17,4 @@ /* | ||
| export {$b5e257d569688ac6$export$9f8ac96af4b1b2ae as SSRProvider, $b5e257d569688ac6$export$619500959fc48b26 as useSSRSafeId, $b5e257d569688ac6$export$535bd6ca7f90a273 as useIsSSR}; | ||
| export {$f00dc27212b61f45$re_export$SSRProvider as SSRProvider, $f00dc27212b61f45$re_export$useIsSSR as useIsSSR, $f00dc27212b61f45$re_export$useSSRSafeId as useSSRSafeId}; | ||
| //# sourceMappingURL=module.js.map |
+6
-4
@@ -1,2 +0,3 @@ | ||
| var $97d95f6660b1bb14$exports = require("./SSRProvider.main.js"); | ||
| var $ekC4D$reactariaSSRProvider = require("react-aria/SSRProvider"); | ||
| var $ekC4D$reactariaprivatessrSSRProvider = require("react-aria/private/ssr/SSRProvider"); | ||
@@ -8,5 +9,5 @@ | ||
| $parcel$export(module.exports, "SSRProvider", () => $97d95f6660b1bb14$exports.SSRProvider); | ||
| $parcel$export(module.exports, "useSSRSafeId", () => $97d95f6660b1bb14$exports.useSSRSafeId); | ||
| $parcel$export(module.exports, "useIsSSR", () => $97d95f6660b1bb14$exports.useIsSSR); | ||
| $parcel$export(module.exports, "SSRProvider", function () { return $ekC4D$reactariaSSRProvider.SSRProvider; }); | ||
| $parcel$export(module.exports, "useIsSSR", function () { return $ekC4D$reactariaSSRProvider.useIsSSR; }); | ||
| $parcel$export(module.exports, "useSSRSafeId", function () { return $ekC4D$reactariaprivatessrSSRProvider.useSSRSafeId; }); | ||
| /* | ||
@@ -25,2 +26,3 @@ * Copyright 2020 Adobe. All rights reserved. | ||
| //# sourceMappingURL=main.js.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"mappings":";;;;;;;;;;AAAA;;;;;;;;;;CAUC","sources":["packages/@react-aria/ssr/src/index.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nexport {SSRProvider, useSSRSafeId, useIsSSR} from './SSRProvider';\nexport type {SSRProviderProps} from './SSRProvider';\n"],"names":[],"version":3,"file":"main.js.map","sourceRoot":"../../../../"} | ||
| {"mappings":";;;;;;;;;;;AAAA;;;;;;;;;;CAUC","sources":["packages/@react-aria/ssr/src/index.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nexport {SSRProvider, useIsSSR} from 'react-aria/SSRProvider';\n\nexport {useSSRSafeId} from 'react-aria/private/ssr/SSRProvider';\nexport type {SSRProviderProps} from 'react-aria/SSRProvider';\n"],"names":[],"version":3,"file":"main.js.map"} |
+4
-2
@@ -1,2 +0,3 @@ | ||
| import {SSRProvider as $b5e257d569688ac6$export$9f8ac96af4b1b2ae, useIsSSR as $b5e257d569688ac6$export$535bd6ca7f90a273, useSSRSafeId as $b5e257d569688ac6$export$619500959fc48b26} from "./SSRProvider.module.js"; | ||
| import {SSRProvider as $f00dc27212b61f45$re_export$SSRProvider, useIsSSR as $f00dc27212b61f45$re_export$useIsSSR} from "react-aria/SSRProvider"; | ||
| import {useSSRSafeId as $f00dc27212b61f45$re_export$useSSRSafeId} from "react-aria/private/ssr/SSRProvider"; | ||
@@ -16,3 +17,4 @@ /* | ||
| export {$b5e257d569688ac6$export$9f8ac96af4b1b2ae as SSRProvider, $b5e257d569688ac6$export$619500959fc48b26 as useSSRSafeId, $b5e257d569688ac6$export$535bd6ca7f90a273 as useIsSSR}; | ||
| export {$f00dc27212b61f45$re_export$SSRProvider as SSRProvider, $f00dc27212b61f45$re_export$useIsSSR as useIsSSR, $f00dc27212b61f45$re_export$useSSRSafeId as useSSRSafeId}; | ||
| //# sourceMappingURL=module.js.map |
@@ -1,1 +0,1 @@ | ||
| {"mappings":";;AAAA;;;;;;;;;;CAUC","sources":["packages/@react-aria/ssr/src/index.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nexport {SSRProvider, useSSRSafeId, useIsSSR} from './SSRProvider';\nexport type {SSRProviderProps} from './SSRProvider';\n"],"names":[],"version":3,"file":"module.js.map","sourceRoot":"../../../../"} | ||
| {"mappings":";;;AAAA;;;;;;;;;;CAUC","sources":["packages/@react-aria/ssr/src/index.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nexport {SSRProvider, useIsSSR} from 'react-aria/SSRProvider';\n\nexport {useSSRSafeId} from 'react-aria/private/ssr/SSRProvider';\nexport type {SSRProviderProps} from 'react-aria/SSRProvider';\n"],"names":[],"version":3,"file":"module.js.map"} |
+15
-18
| { | ||
| "name": "@react-aria/ssr", | ||
| "version": "3.9.10", | ||
| "version": "3.10.0", | ||
| "description": "Spectrum UI components in React", | ||
@@ -9,11 +9,11 @@ "license": "Apache-2.0", | ||
| "exports": { | ||
| "source": "./src/index.ts", | ||
| "types": [ | ||
| "./dist/types.d.ts", | ||
| "./src/index.ts" | ||
| ], | ||
| "import": "./dist/import.mjs", | ||
| "require": "./dist/main.js" | ||
| ".": { | ||
| "source": "./src/index.ts", | ||
| "types": "./dist/types/src/index.d.ts", | ||
| "import": "./dist/import.mjs", | ||
| "require": "./dist/main.js" | ||
| }, | ||
| "./package.json": "./package.json" | ||
| }, | ||
| "types": "dist/types.d.ts", | ||
| "types": "dist/types/src/index.d.ts", | ||
| "source": "src/index.ts", | ||
@@ -30,6 +30,8 @@ "files": [ | ||
| "dependencies": { | ||
| "@swc/helpers": "^0.5.0" | ||
| "@swc/helpers": "^0.5.0", | ||
| "react-aria": "3.48.0" | ||
| }, | ||
| "peerDependencies": { | ||
| "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" | ||
| "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", | ||
| "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" | ||
| }, | ||
@@ -43,10 +45,5 @@ "publishConfig": { | ||
| "targets": { | ||
| "main": { | ||
| "context": "node" | ||
| }, | ||
| "module": { | ||
| "context": "node" | ||
| } | ||
| "types": false | ||
| }, | ||
| "gitHead": "8b9348ff255e018b2dd9b27e2a45507cadfa1d35" | ||
| "gitHead": "a6999bdf494a2e9c0381a5881908328bdd22ddae" | ||
| } |
+4
-2
@@ -12,3 +12,5 @@ /* | ||
| */ | ||
| export {SSRProvider, useSSRSafeId, useIsSSR} from './SSRProvider'; | ||
| export type {SSRProviderProps} from './SSRProvider'; | ||
| export {SSRProvider, useIsSSR} from 'react-aria/SSRProvider'; | ||
| export {useSSRSafeId} from 'react-aria/private/ssr/SSRProvider'; | ||
| export type {SSRProviderProps} from 'react-aria/SSRProvider'; |
| var $14Xyt$react = require("react"); | ||
| function $parcel$interopDefault(a) { | ||
| return a && a.__esModule ? a.default : a; | ||
| } | ||
| function $parcel$export(e, n, v, s) { | ||
| Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); | ||
| } | ||
| $parcel$export(module.exports, "SSRProvider", () => $97d95f6660b1bb14$export$9f8ac96af4b1b2ae); | ||
| $parcel$export(module.exports, "useIsSSR", () => $97d95f6660b1bb14$export$535bd6ca7f90a273); | ||
| $parcel$export(module.exports, "useSSRSafeId", () => $97d95f6660b1bb14$export$619500959fc48b26); | ||
| /* | ||
| * Copyright 2020 Adobe. All rights reserved. | ||
| * This file is licensed to you under the Apache License, Version 2.0 (the "License"); | ||
| * you may not use this file except in compliance with the License. You may obtain a copy | ||
| * of the License at http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software distributed under | ||
| * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS | ||
| * OF ANY KIND, either express or implied. See the License for the specific language | ||
| * governing permissions and limitations under the License. | ||
| */ // We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is | ||
| // guarded by a check that it only runs on the client side. | ||
| // eslint-disable-next-line rulesdir/useLayoutEffectRule | ||
| // Default context value to use in case there is no SSRProvider. This is fine for | ||
| // client-only apps. In order to support multiple copies of React Aria potentially | ||
| // being on the page at once, the prefix is set to a random number. SSRProvider | ||
| // will reset this to zero for consistency between server and client, so in the | ||
| // SSR case multiple copies of React Aria is not supported. | ||
| const $97d95f6660b1bb14$var$defaultContext = { | ||
| prefix: String(Math.round(Math.random() * 10000000000)), | ||
| current: 0 | ||
| }; | ||
| const $97d95f6660b1bb14$var$SSRContext = /*#__PURE__*/ (0, ($parcel$interopDefault($14Xyt$react))).createContext($97d95f6660b1bb14$var$defaultContext); | ||
| const $97d95f6660b1bb14$var$IsSSRContext = /*#__PURE__*/ (0, ($parcel$interopDefault($14Xyt$react))).createContext(false); | ||
| // This is only used in React < 18. | ||
| function $97d95f6660b1bb14$var$LegacySSRProvider(props) { | ||
| let cur = (0, $14Xyt$react.useContext)($97d95f6660b1bb14$var$SSRContext); | ||
| let counter = $97d95f6660b1bb14$var$useCounter(cur === $97d95f6660b1bb14$var$defaultContext); | ||
| let [isSSR, setIsSSR] = (0, $14Xyt$react.useState)(true); | ||
| let value = (0, $14Xyt$react.useMemo)(()=>({ | ||
| // If this is the first SSRProvider, start with an empty string prefix, otherwise | ||
| // append and increment the counter. | ||
| prefix: cur === $97d95f6660b1bb14$var$defaultContext ? '' : `${cur.prefix}-${counter}`, | ||
| current: 0 | ||
| }), [ | ||
| cur, | ||
| counter | ||
| ]); | ||
| // If on the client, and the component was initially server rendered, | ||
| // then schedule a layout effect to update the component after hydration. | ||
| if (typeof document !== 'undefined') // This if statement technically breaks the rules of hooks, but is safe | ||
| // because the condition never changes after mounting. | ||
| // eslint-disable-next-line react-hooks/rules-of-hooks | ||
| (0, $14Xyt$react.useLayoutEffect)(()=>{ | ||
| setIsSSR(false); | ||
| }, []); | ||
| return /*#__PURE__*/ (0, ($parcel$interopDefault($14Xyt$react))).createElement($97d95f6660b1bb14$var$SSRContext.Provider, { | ||
| value: value | ||
| }, /*#__PURE__*/ (0, ($parcel$interopDefault($14Xyt$react))).createElement($97d95f6660b1bb14$var$IsSSRContext.Provider, { | ||
| value: isSSR | ||
| }, props.children)); | ||
| } | ||
| let $97d95f6660b1bb14$var$warnedAboutSSRProvider = false; | ||
| function $97d95f6660b1bb14$export$9f8ac96af4b1b2ae(props) { | ||
| if (typeof (0, ($parcel$interopDefault($14Xyt$react)))['useId'] === 'function') { | ||
| if (process.env.NODE_ENV !== 'test' && process.env.NODE_ENV !== 'production' && !$97d95f6660b1bb14$var$warnedAboutSSRProvider) { | ||
| console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.'); | ||
| $97d95f6660b1bb14$var$warnedAboutSSRProvider = true; | ||
| } | ||
| return /*#__PURE__*/ (0, ($parcel$interopDefault($14Xyt$react))).createElement((0, ($parcel$interopDefault($14Xyt$react))).Fragment, null, props.children); | ||
| } | ||
| return /*#__PURE__*/ (0, ($parcel$interopDefault($14Xyt$react))).createElement($97d95f6660b1bb14$var$LegacySSRProvider, props); | ||
| } | ||
| let $97d95f6660b1bb14$var$canUseDOM = Boolean(typeof window !== 'undefined' && window.document && window.document.createElement); | ||
| let $97d95f6660b1bb14$var$componentIds = new WeakMap(); | ||
| function $97d95f6660b1bb14$var$useCounter(isDisabled = false) { | ||
| let ctx = (0, $14Xyt$react.useContext)($97d95f6660b1bb14$var$SSRContext); | ||
| let ref = (0, $14Xyt$react.useRef)(null); | ||
| // eslint-disable-next-line rulesdir/pure-render | ||
| if (ref.current === null && !isDisabled) { | ||
| var _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner, _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; | ||
| // In strict mode, React renders components twice, and the ref will be reset to null on the second render. | ||
| // This means our id counter will be incremented twice instead of once. This is a problem because on the | ||
| // server, components are only rendered once and so ids generated on the server won't match the client. | ||
| // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this | ||
| // we need to use some React internals to access the underlying Fiber instance, which is stable between renders. | ||
| // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development. | ||
| // To ensure that we only increment the global counter once, we store the starting id for this component in | ||
| // a weak map associated with the Fiber. On the second render, we reset the global counter to this value. | ||
| // Since React runs the second render immediately after the first, this is safe. | ||
| // @ts-ignore | ||
| let currentOwner = (_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = (0, ($parcel$interopDefault($14Xyt$react))).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED === void 0 ? void 0 : (_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner = _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner) === null || _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner === void 0 ? void 0 : _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner.current; | ||
| if (currentOwner) { | ||
| let prevComponentValue = $97d95f6660b1bb14$var$componentIds.get(currentOwner); | ||
| if (prevComponentValue == null) // On the first render, and first call to useId, store the id and state in our weak map. | ||
| $97d95f6660b1bb14$var$componentIds.set(currentOwner, { | ||
| id: ctx.current, | ||
| state: currentOwner.memoizedState | ||
| }); | ||
| else if (currentOwner.memoizedState !== prevComponentValue.state) { | ||
| // On the second render, the memoizedState gets reset by React. | ||
| // Reset the counter, and remove from the weak map so we don't | ||
| // do this for subsequent useId calls. | ||
| ctx.current = prevComponentValue.id; | ||
| $97d95f6660b1bb14$var$componentIds.delete(currentOwner); | ||
| } | ||
| } | ||
| // eslint-disable-next-line rulesdir/pure-render | ||
| ref.current = ++ctx.current; | ||
| } | ||
| // eslint-disable-next-line rulesdir/pure-render | ||
| return ref.current; | ||
| } | ||
| function $97d95f6660b1bb14$var$useLegacySSRSafeId(defaultId) { | ||
| let ctx = (0, $14Xyt$react.useContext)($97d95f6660b1bb14$var$SSRContext); | ||
| // If we are rendering in a non-DOM environment, and there's no SSRProvider, | ||
| // provide a warning to hint to the developer to add one. | ||
| if (ctx === $97d95f6660b1bb14$var$defaultContext && !$97d95f6660b1bb14$var$canUseDOM && process.env.NODE_ENV !== 'production') console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.'); | ||
| let counter = $97d95f6660b1bb14$var$useCounter(!!defaultId); | ||
| let prefix = ctx === $97d95f6660b1bb14$var$defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`; | ||
| return defaultId || `${prefix}-${counter}`; | ||
| } | ||
| function $97d95f6660b1bb14$var$useModernSSRSafeId(defaultId) { | ||
| let id = (0, ($parcel$interopDefault($14Xyt$react))).useId(); | ||
| let [didSSR] = (0, $14Xyt$react.useState)($97d95f6660b1bb14$export$535bd6ca7f90a273()); | ||
| let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${$97d95f6660b1bb14$var$defaultContext.prefix}`; | ||
| return defaultId || `${prefix}-${id}`; | ||
| } | ||
| const $97d95f6660b1bb14$export$619500959fc48b26 = typeof (0, ($parcel$interopDefault($14Xyt$react)))['useId'] === 'function' ? $97d95f6660b1bb14$var$useModernSSRSafeId : $97d95f6660b1bb14$var$useLegacySSRSafeId; | ||
| function $97d95f6660b1bb14$var$getSnapshot() { | ||
| return false; | ||
| } | ||
| function $97d95f6660b1bb14$var$getServerSnapshot() { | ||
| return true; | ||
| } | ||
| // eslint-disable-next-line @typescript-eslint/no-unused-vars | ||
| function $97d95f6660b1bb14$var$subscribe(onStoreChange) { | ||
| // noop | ||
| return ()=>{}; | ||
| } | ||
| function $97d95f6660b1bb14$export$535bd6ca7f90a273() { | ||
| // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating. | ||
| if (typeof (0, ($parcel$interopDefault($14Xyt$react)))['useSyncExternalStore'] === 'function') return (0, ($parcel$interopDefault($14Xyt$react)))['useSyncExternalStore']($97d95f6660b1bb14$var$subscribe, $97d95f6660b1bb14$var$getSnapshot, $97d95f6660b1bb14$var$getServerSnapshot); | ||
| // eslint-disable-next-line react-hooks/rules-of-hooks | ||
| return (0, $14Xyt$react.useContext)($97d95f6660b1bb14$var$IsSSRContext); | ||
| } | ||
| //# sourceMappingURL=SSRProvider.main.js.map |
| {"mappings":"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","sources":["packages/@react-aria/ssr/src/SSRProvider.tsx"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is\n// guarded by a check that it only runs on the client side.\n// eslint-disable-next-line rulesdir/useLayoutEffectRule\nimport React, {JSX, ReactNode, useContext, useLayoutEffect, useMemo, useRef, useState} from 'react';\n\n// To support SSR, the auto incrementing id counter is stored in a context. This allows\n// it to be reset on every request to ensure the client and server are consistent.\n// There is also a prefix string that is used to support async loading components\n// Each async boundary must be wrapped in an SSR provider, which appends to the prefix\n// and resets the current id counter. This ensures that async loaded components have\n// consistent ids regardless of the loading order.\ninterface SSRContextValue {\n prefix: string,\n current: number\n}\n\n// Default context value to use in case there is no SSRProvider. This is fine for\n// client-only apps. In order to support multiple copies of React Aria potentially\n// being on the page at once, the prefix is set to a random number. SSRProvider\n// will reset this to zero for consistency between server and client, so in the\n// SSR case multiple copies of React Aria is not supported.\nconst defaultContext: SSRContextValue = {\n prefix: String(Math.round(Math.random() * 10000000000)),\n current: 0\n};\n\nconst SSRContext = React.createContext<SSRContextValue>(defaultContext);\nconst IsSSRContext = React.createContext(false);\n\nexport interface SSRProviderProps {\n /** Your application here. */\n children: ReactNode\n}\n\n// This is only used in React < 18.\nfunction LegacySSRProvider(props: SSRProviderProps): JSX.Element {\n let cur = useContext(SSRContext);\n let counter = useCounter(cur === defaultContext);\n let [isSSR, setIsSSR] = useState(true);\n let value: SSRContextValue = useMemo(() => ({\n // If this is the first SSRProvider, start with an empty string prefix, otherwise\n // append and increment the counter.\n prefix: cur === defaultContext ? '' : `${cur.prefix}-${counter}`,\n current: 0\n }), [cur, counter]);\n\n // If on the client, and the component was initially server rendered,\n // then schedule a layout effect to update the component after hydration.\n if (typeof document !== 'undefined') {\n // This if statement technically breaks the rules of hooks, but is safe\n // because the condition never changes after mounting.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useLayoutEffect(() => {\n setIsSSR(false);\n }, []);\n }\n\n return (\n <SSRContext.Provider value={value}>\n <IsSSRContext.Provider value={isSSR}>\n {props.children}\n </IsSSRContext.Provider>\n </SSRContext.Provider>\n );\n}\n\nlet warnedAboutSSRProvider = false;\n\n/**\n * When using SSR with React Aria in React 16 or 17, applications must be wrapped in an SSRProvider.\n * This ensures that auto generated ids are consistent between the client and server.\n */\nexport function SSRProvider(props: SSRProviderProps): JSX.Element {\n if (typeof React['useId'] === 'function') {\n if (process.env.NODE_ENV !== 'test' && process.env.NODE_ENV !== 'production' && !warnedAboutSSRProvider) {\n console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.');\n warnedAboutSSRProvider = true;\n }\n return <>{props.children}</>;\n }\n return <LegacySSRProvider {...props} />;\n}\n\nlet canUseDOM = Boolean(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\nlet componentIds = new WeakMap();\n\nfunction useCounter(isDisabled = false) {\n let ctx = useContext(SSRContext);\n let ref = useRef<number | null>(null);\n // eslint-disable-next-line rulesdir/pure-render\n if (ref.current === null && !isDisabled) {\n // In strict mode, React renders components twice, and the ref will be reset to null on the second render.\n // This means our id counter will be incremented twice instead of once. This is a problem because on the\n // server, components are only rendered once and so ids generated on the server won't match the client.\n // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this\n // we need to use some React internals to access the underlying Fiber instance, which is stable between renders.\n // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development.\n // To ensure that we only increment the global counter once, we store the starting id for this component in\n // a weak map associated with the Fiber. On the second render, we reset the global counter to this value.\n // Since React runs the second render immediately after the first, this is safe.\n // @ts-ignore\n let currentOwner = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?.ReactCurrentOwner?.current;\n if (currentOwner) {\n let prevComponentValue = componentIds.get(currentOwner);\n if (prevComponentValue == null) {\n // On the first render, and first call to useId, store the id and state in our weak map.\n componentIds.set(currentOwner, {\n id: ctx.current,\n state: currentOwner.memoizedState\n });\n } else if (currentOwner.memoizedState !== prevComponentValue.state) {\n // On the second render, the memoizedState gets reset by React.\n // Reset the counter, and remove from the weak map so we don't\n // do this for subsequent useId calls.\n ctx.current = prevComponentValue.id;\n componentIds.delete(currentOwner);\n }\n }\n\n // eslint-disable-next-line rulesdir/pure-render\n ref.current = ++ctx.current;\n }\n\n // eslint-disable-next-line rulesdir/pure-render\n return ref.current;\n}\n\nfunction useLegacySSRSafeId(defaultId?: string): string {\n let ctx = useContext(SSRContext);\n\n // If we are rendering in a non-DOM environment, and there's no SSRProvider,\n // provide a warning to hint to the developer to add one.\n if (ctx === defaultContext && !canUseDOM && process.env.NODE_ENV !== 'production') {\n console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.');\n }\n\n let counter = useCounter(!!defaultId);\n let prefix = ctx === defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`;\n return defaultId || `${prefix}-${counter}`;\n}\n\nfunction useModernSSRSafeId(defaultId?: string): string {\n let id = React.useId();\n let [didSSR] = useState(useIsSSR());\n let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${defaultContext.prefix}`;\n return defaultId || `${prefix}-${id}`;\n}\n\n// Use React.useId in React 18 if available, otherwise fall back to our old implementation.\n/** @private */\nexport const useSSRSafeId: typeof useModernSSRSafeId | typeof useLegacySSRSafeId = typeof React['useId'] === 'function' ? useModernSSRSafeId : useLegacySSRSafeId;\n\nfunction getSnapshot() {\n return false;\n}\n\nfunction getServerSnapshot() {\n return true;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction subscribe(onStoreChange: () => void): () => void {\n // noop\n return () => {};\n}\n\n/**\n * Returns whether the component is currently being server side rendered or\n * hydrated on the client. Can be used to delay browser-specific rendering\n * until after hydration.\n */\nexport function useIsSSR(): boolean {\n // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating.\n if (typeof React['useSyncExternalStore'] === 'function') {\n return React['useSyncExternalStore'](subscribe, getSnapshot, getServerSnapshot);\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useContext(IsSSRContext);\n}\n"],"names":[],"version":3,"file":"SSRProvider.main.js.map","sourceRoot":"../../../../"} |
| import $670gB$react, {useContext as $670gB$useContext, useState as $670gB$useState, useMemo as $670gB$useMemo, useLayoutEffect as $670gB$useLayoutEffect, useRef as $670gB$useRef} from "react"; | ||
| /* | ||
| * Copyright 2020 Adobe. All rights reserved. | ||
| * This file is licensed to you under the Apache License, Version 2.0 (the "License"); | ||
| * you may not use this file except in compliance with the License. You may obtain a copy | ||
| * of the License at http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software distributed under | ||
| * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS | ||
| * OF ANY KIND, either express or implied. See the License for the specific language | ||
| * governing permissions and limitations under the License. | ||
| */ // We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is | ||
| // guarded by a check that it only runs on the client side. | ||
| // eslint-disable-next-line rulesdir/useLayoutEffectRule | ||
| // Default context value to use in case there is no SSRProvider. This is fine for | ||
| // client-only apps. In order to support multiple copies of React Aria potentially | ||
| // being on the page at once, the prefix is set to a random number. SSRProvider | ||
| // will reset this to zero for consistency between server and client, so in the | ||
| // SSR case multiple copies of React Aria is not supported. | ||
| const $b5e257d569688ac6$var$defaultContext = { | ||
| prefix: String(Math.round(Math.random() * 10000000000)), | ||
| current: 0 | ||
| }; | ||
| const $b5e257d569688ac6$var$SSRContext = /*#__PURE__*/ (0, $670gB$react).createContext($b5e257d569688ac6$var$defaultContext); | ||
| const $b5e257d569688ac6$var$IsSSRContext = /*#__PURE__*/ (0, $670gB$react).createContext(false); | ||
| // This is only used in React < 18. | ||
| function $b5e257d569688ac6$var$LegacySSRProvider(props) { | ||
| let cur = (0, $670gB$useContext)($b5e257d569688ac6$var$SSRContext); | ||
| let counter = $b5e257d569688ac6$var$useCounter(cur === $b5e257d569688ac6$var$defaultContext); | ||
| let [isSSR, setIsSSR] = (0, $670gB$useState)(true); | ||
| let value = (0, $670gB$useMemo)(()=>({ | ||
| // If this is the first SSRProvider, start with an empty string prefix, otherwise | ||
| // append and increment the counter. | ||
| prefix: cur === $b5e257d569688ac6$var$defaultContext ? '' : `${cur.prefix}-${counter}`, | ||
| current: 0 | ||
| }), [ | ||
| cur, | ||
| counter | ||
| ]); | ||
| // If on the client, and the component was initially server rendered, | ||
| // then schedule a layout effect to update the component after hydration. | ||
| if (typeof document !== 'undefined') // This if statement technically breaks the rules of hooks, but is safe | ||
| // because the condition never changes after mounting. | ||
| // eslint-disable-next-line react-hooks/rules-of-hooks | ||
| (0, $670gB$useLayoutEffect)(()=>{ | ||
| setIsSSR(false); | ||
| }, []); | ||
| return /*#__PURE__*/ (0, $670gB$react).createElement($b5e257d569688ac6$var$SSRContext.Provider, { | ||
| value: value | ||
| }, /*#__PURE__*/ (0, $670gB$react).createElement($b5e257d569688ac6$var$IsSSRContext.Provider, { | ||
| value: isSSR | ||
| }, props.children)); | ||
| } | ||
| let $b5e257d569688ac6$var$warnedAboutSSRProvider = false; | ||
| function $b5e257d569688ac6$export$9f8ac96af4b1b2ae(props) { | ||
| if (typeof (0, $670gB$react)['useId'] === 'function') { | ||
| if (process.env.NODE_ENV !== 'test' && process.env.NODE_ENV !== 'production' && !$b5e257d569688ac6$var$warnedAboutSSRProvider) { | ||
| console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.'); | ||
| $b5e257d569688ac6$var$warnedAboutSSRProvider = true; | ||
| } | ||
| return /*#__PURE__*/ (0, $670gB$react).createElement((0, $670gB$react).Fragment, null, props.children); | ||
| } | ||
| return /*#__PURE__*/ (0, $670gB$react).createElement($b5e257d569688ac6$var$LegacySSRProvider, props); | ||
| } | ||
| let $b5e257d569688ac6$var$canUseDOM = Boolean(typeof window !== 'undefined' && window.document && window.document.createElement); | ||
| let $b5e257d569688ac6$var$componentIds = new WeakMap(); | ||
| function $b5e257d569688ac6$var$useCounter(isDisabled = false) { | ||
| let ctx = (0, $670gB$useContext)($b5e257d569688ac6$var$SSRContext); | ||
| let ref = (0, $670gB$useRef)(null); | ||
| // eslint-disable-next-line rulesdir/pure-render | ||
| if (ref.current === null && !isDisabled) { | ||
| var _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner, _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; | ||
| // In strict mode, React renders components twice, and the ref will be reset to null on the second render. | ||
| // This means our id counter will be incremented twice instead of once. This is a problem because on the | ||
| // server, components are only rendered once and so ids generated on the server won't match the client. | ||
| // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this | ||
| // we need to use some React internals to access the underlying Fiber instance, which is stable between renders. | ||
| // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development. | ||
| // To ensure that we only increment the global counter once, we store the starting id for this component in | ||
| // a weak map associated with the Fiber. On the second render, we reset the global counter to this value. | ||
| // Since React runs the second render immediately after the first, this is safe. | ||
| // @ts-ignore | ||
| let currentOwner = (_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = (0, $670gB$react).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED === void 0 ? void 0 : (_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner = _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner) === null || _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner === void 0 ? void 0 : _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner.current; | ||
| if (currentOwner) { | ||
| let prevComponentValue = $b5e257d569688ac6$var$componentIds.get(currentOwner); | ||
| if (prevComponentValue == null) // On the first render, and first call to useId, store the id and state in our weak map. | ||
| $b5e257d569688ac6$var$componentIds.set(currentOwner, { | ||
| id: ctx.current, | ||
| state: currentOwner.memoizedState | ||
| }); | ||
| else if (currentOwner.memoizedState !== prevComponentValue.state) { | ||
| // On the second render, the memoizedState gets reset by React. | ||
| // Reset the counter, and remove from the weak map so we don't | ||
| // do this for subsequent useId calls. | ||
| ctx.current = prevComponentValue.id; | ||
| $b5e257d569688ac6$var$componentIds.delete(currentOwner); | ||
| } | ||
| } | ||
| // eslint-disable-next-line rulesdir/pure-render | ||
| ref.current = ++ctx.current; | ||
| } | ||
| // eslint-disable-next-line rulesdir/pure-render | ||
| return ref.current; | ||
| } | ||
| function $b5e257d569688ac6$var$useLegacySSRSafeId(defaultId) { | ||
| let ctx = (0, $670gB$useContext)($b5e257d569688ac6$var$SSRContext); | ||
| // If we are rendering in a non-DOM environment, and there's no SSRProvider, | ||
| // provide a warning to hint to the developer to add one. | ||
| if (ctx === $b5e257d569688ac6$var$defaultContext && !$b5e257d569688ac6$var$canUseDOM && process.env.NODE_ENV !== 'production') console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.'); | ||
| let counter = $b5e257d569688ac6$var$useCounter(!!defaultId); | ||
| let prefix = ctx === $b5e257d569688ac6$var$defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`; | ||
| return defaultId || `${prefix}-${counter}`; | ||
| } | ||
| function $b5e257d569688ac6$var$useModernSSRSafeId(defaultId) { | ||
| let id = (0, $670gB$react).useId(); | ||
| let [didSSR] = (0, $670gB$useState)($b5e257d569688ac6$export$535bd6ca7f90a273()); | ||
| let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${$b5e257d569688ac6$var$defaultContext.prefix}`; | ||
| return defaultId || `${prefix}-${id}`; | ||
| } | ||
| const $b5e257d569688ac6$export$619500959fc48b26 = typeof (0, $670gB$react)['useId'] === 'function' ? $b5e257d569688ac6$var$useModernSSRSafeId : $b5e257d569688ac6$var$useLegacySSRSafeId; | ||
| function $b5e257d569688ac6$var$getSnapshot() { | ||
| return false; | ||
| } | ||
| function $b5e257d569688ac6$var$getServerSnapshot() { | ||
| return true; | ||
| } | ||
| // eslint-disable-next-line @typescript-eslint/no-unused-vars | ||
| function $b5e257d569688ac6$var$subscribe(onStoreChange) { | ||
| // noop | ||
| return ()=>{}; | ||
| } | ||
| function $b5e257d569688ac6$export$535bd6ca7f90a273() { | ||
| // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating. | ||
| if (typeof (0, $670gB$react)['useSyncExternalStore'] === 'function') return (0, $670gB$react)['useSyncExternalStore']($b5e257d569688ac6$var$subscribe, $b5e257d569688ac6$var$getSnapshot, $b5e257d569688ac6$var$getServerSnapshot); | ||
| // eslint-disable-next-line react-hooks/rules-of-hooks | ||
| return (0, $670gB$useContext)($b5e257d569688ac6$var$IsSSRContext); | ||
| } | ||
| export {$b5e257d569688ac6$export$9f8ac96af4b1b2ae as SSRProvider, $b5e257d569688ac6$export$535bd6ca7f90a273 as useIsSSR, $b5e257d569688ac6$export$619500959fc48b26 as useSSRSafeId}; | ||
| //# sourceMappingURL=SSRProvider.module.js.map |
| import $670gB$react, {useContext as $670gB$useContext, useState as $670gB$useState, useMemo as $670gB$useMemo, useLayoutEffect as $670gB$useLayoutEffect, useRef as $670gB$useRef} from "react"; | ||
| /* | ||
| * Copyright 2020 Adobe. All rights reserved. | ||
| * This file is licensed to you under the Apache License, Version 2.0 (the "License"); | ||
| * you may not use this file except in compliance with the License. You may obtain a copy | ||
| * of the License at http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software distributed under | ||
| * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS | ||
| * OF ANY KIND, either express or implied. See the License for the specific language | ||
| * governing permissions and limitations under the License. | ||
| */ // We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is | ||
| // guarded by a check that it only runs on the client side. | ||
| // eslint-disable-next-line rulesdir/useLayoutEffectRule | ||
| // Default context value to use in case there is no SSRProvider. This is fine for | ||
| // client-only apps. In order to support multiple copies of React Aria potentially | ||
| // being on the page at once, the prefix is set to a random number. SSRProvider | ||
| // will reset this to zero for consistency between server and client, so in the | ||
| // SSR case multiple copies of React Aria is not supported. | ||
| const $b5e257d569688ac6$var$defaultContext = { | ||
| prefix: String(Math.round(Math.random() * 10000000000)), | ||
| current: 0 | ||
| }; | ||
| const $b5e257d569688ac6$var$SSRContext = /*#__PURE__*/ (0, $670gB$react).createContext($b5e257d569688ac6$var$defaultContext); | ||
| const $b5e257d569688ac6$var$IsSSRContext = /*#__PURE__*/ (0, $670gB$react).createContext(false); | ||
| // This is only used in React < 18. | ||
| function $b5e257d569688ac6$var$LegacySSRProvider(props) { | ||
| let cur = (0, $670gB$useContext)($b5e257d569688ac6$var$SSRContext); | ||
| let counter = $b5e257d569688ac6$var$useCounter(cur === $b5e257d569688ac6$var$defaultContext); | ||
| let [isSSR, setIsSSR] = (0, $670gB$useState)(true); | ||
| let value = (0, $670gB$useMemo)(()=>({ | ||
| // If this is the first SSRProvider, start with an empty string prefix, otherwise | ||
| // append and increment the counter. | ||
| prefix: cur === $b5e257d569688ac6$var$defaultContext ? '' : `${cur.prefix}-${counter}`, | ||
| current: 0 | ||
| }), [ | ||
| cur, | ||
| counter | ||
| ]); | ||
| // If on the client, and the component was initially server rendered, | ||
| // then schedule a layout effect to update the component after hydration. | ||
| if (typeof document !== 'undefined') // This if statement technically breaks the rules of hooks, but is safe | ||
| // because the condition never changes after mounting. | ||
| // eslint-disable-next-line react-hooks/rules-of-hooks | ||
| (0, $670gB$useLayoutEffect)(()=>{ | ||
| setIsSSR(false); | ||
| }, []); | ||
| return /*#__PURE__*/ (0, $670gB$react).createElement($b5e257d569688ac6$var$SSRContext.Provider, { | ||
| value: value | ||
| }, /*#__PURE__*/ (0, $670gB$react).createElement($b5e257d569688ac6$var$IsSSRContext.Provider, { | ||
| value: isSSR | ||
| }, props.children)); | ||
| } | ||
| let $b5e257d569688ac6$var$warnedAboutSSRProvider = false; | ||
| function $b5e257d569688ac6$export$9f8ac96af4b1b2ae(props) { | ||
| if (typeof (0, $670gB$react)['useId'] === 'function') { | ||
| if (process.env.NODE_ENV !== 'test' && process.env.NODE_ENV !== 'production' && !$b5e257d569688ac6$var$warnedAboutSSRProvider) { | ||
| console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.'); | ||
| $b5e257d569688ac6$var$warnedAboutSSRProvider = true; | ||
| } | ||
| return /*#__PURE__*/ (0, $670gB$react).createElement((0, $670gB$react).Fragment, null, props.children); | ||
| } | ||
| return /*#__PURE__*/ (0, $670gB$react).createElement($b5e257d569688ac6$var$LegacySSRProvider, props); | ||
| } | ||
| let $b5e257d569688ac6$var$canUseDOM = Boolean(typeof window !== 'undefined' && window.document && window.document.createElement); | ||
| let $b5e257d569688ac6$var$componentIds = new WeakMap(); | ||
| function $b5e257d569688ac6$var$useCounter(isDisabled = false) { | ||
| let ctx = (0, $670gB$useContext)($b5e257d569688ac6$var$SSRContext); | ||
| let ref = (0, $670gB$useRef)(null); | ||
| // eslint-disable-next-line rulesdir/pure-render | ||
| if (ref.current === null && !isDisabled) { | ||
| var _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner, _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; | ||
| // In strict mode, React renders components twice, and the ref will be reset to null on the second render. | ||
| // This means our id counter will be incremented twice instead of once. This is a problem because on the | ||
| // server, components are only rendered once and so ids generated on the server won't match the client. | ||
| // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this | ||
| // we need to use some React internals to access the underlying Fiber instance, which is stable between renders. | ||
| // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development. | ||
| // To ensure that we only increment the global counter once, we store the starting id for this component in | ||
| // a weak map associated with the Fiber. On the second render, we reset the global counter to this value. | ||
| // Since React runs the second render immediately after the first, this is safe. | ||
| // @ts-ignore | ||
| let currentOwner = (_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = (0, $670gB$react).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED === void 0 ? void 0 : (_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner = _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner) === null || _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner === void 0 ? void 0 : _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner.current; | ||
| if (currentOwner) { | ||
| let prevComponentValue = $b5e257d569688ac6$var$componentIds.get(currentOwner); | ||
| if (prevComponentValue == null) // On the first render, and first call to useId, store the id and state in our weak map. | ||
| $b5e257d569688ac6$var$componentIds.set(currentOwner, { | ||
| id: ctx.current, | ||
| state: currentOwner.memoizedState | ||
| }); | ||
| else if (currentOwner.memoizedState !== prevComponentValue.state) { | ||
| // On the second render, the memoizedState gets reset by React. | ||
| // Reset the counter, and remove from the weak map so we don't | ||
| // do this for subsequent useId calls. | ||
| ctx.current = prevComponentValue.id; | ||
| $b5e257d569688ac6$var$componentIds.delete(currentOwner); | ||
| } | ||
| } | ||
| // eslint-disable-next-line rulesdir/pure-render | ||
| ref.current = ++ctx.current; | ||
| } | ||
| // eslint-disable-next-line rulesdir/pure-render | ||
| return ref.current; | ||
| } | ||
| function $b5e257d569688ac6$var$useLegacySSRSafeId(defaultId) { | ||
| let ctx = (0, $670gB$useContext)($b5e257d569688ac6$var$SSRContext); | ||
| // If we are rendering in a non-DOM environment, and there's no SSRProvider, | ||
| // provide a warning to hint to the developer to add one. | ||
| if (ctx === $b5e257d569688ac6$var$defaultContext && !$b5e257d569688ac6$var$canUseDOM && process.env.NODE_ENV !== 'production') console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.'); | ||
| let counter = $b5e257d569688ac6$var$useCounter(!!defaultId); | ||
| let prefix = ctx === $b5e257d569688ac6$var$defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`; | ||
| return defaultId || `${prefix}-${counter}`; | ||
| } | ||
| function $b5e257d569688ac6$var$useModernSSRSafeId(defaultId) { | ||
| let id = (0, $670gB$react).useId(); | ||
| let [didSSR] = (0, $670gB$useState)($b5e257d569688ac6$export$535bd6ca7f90a273()); | ||
| let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${$b5e257d569688ac6$var$defaultContext.prefix}`; | ||
| return defaultId || `${prefix}-${id}`; | ||
| } | ||
| const $b5e257d569688ac6$export$619500959fc48b26 = typeof (0, $670gB$react)['useId'] === 'function' ? $b5e257d569688ac6$var$useModernSSRSafeId : $b5e257d569688ac6$var$useLegacySSRSafeId; | ||
| function $b5e257d569688ac6$var$getSnapshot() { | ||
| return false; | ||
| } | ||
| function $b5e257d569688ac6$var$getServerSnapshot() { | ||
| return true; | ||
| } | ||
| // eslint-disable-next-line @typescript-eslint/no-unused-vars | ||
| function $b5e257d569688ac6$var$subscribe(onStoreChange) { | ||
| // noop | ||
| return ()=>{}; | ||
| } | ||
| function $b5e257d569688ac6$export$535bd6ca7f90a273() { | ||
| // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating. | ||
| if (typeof (0, $670gB$react)['useSyncExternalStore'] === 'function') return (0, $670gB$react)['useSyncExternalStore']($b5e257d569688ac6$var$subscribe, $b5e257d569688ac6$var$getSnapshot, $b5e257d569688ac6$var$getServerSnapshot); | ||
| // eslint-disable-next-line react-hooks/rules-of-hooks | ||
| return (0, $670gB$useContext)($b5e257d569688ac6$var$IsSSRContext); | ||
| } | ||
| export {$b5e257d569688ac6$export$9f8ac96af4b1b2ae as SSRProvider, $b5e257d569688ac6$export$535bd6ca7f90a273 as useIsSSR, $b5e257d569688ac6$export$619500959fc48b26 as useSSRSafeId}; | ||
| //# sourceMappingURL=SSRProvider.module.js.map |
| {"mappings":";;AAAA;;;;;;;;;;CAUC,GAED,0FAA0F;AAC1F,2DAA2D;AAC3D,wDAAwD;;AAcxD,iFAAiF;AACjF,kFAAkF;AAClF,+EAA+E;AAC/E,+EAA+E;AAC/E,2DAA2D;AAC3D,MAAM,uCAAkC;IACtC,QAAQ,OAAO,KAAK,KAAK,CAAC,KAAK,MAAM,KAAK;IAC1C,SAAS;AACX;AAEA,MAAM,iDAAa,CAAA,GAAA,YAAI,EAAE,aAAa,CAAkB;AACxD,MAAM,mDAAe,CAAA,GAAA,YAAI,EAAE,aAAa,CAAC;AAOzC,mCAAmC;AACnC,SAAS,wCAAkB,KAAuB;IAChD,IAAI,MAAM,CAAA,GAAA,iBAAS,EAAE;IACrB,IAAI,UAAU,iCAAW,QAAQ;IACjC,IAAI,CAAC,OAAO,SAAS,GAAG,CAAA,GAAA,eAAO,EAAE;IACjC,IAAI,QAAyB,CAAA,GAAA,cAAM,EAAE,IAAO,CAAA;YAC1C,iFAAiF;YACjF,oCAAoC;YACpC,QAAQ,QAAQ,uCAAiB,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,SAAS;YAChE,SAAS;QACX,CAAA,GAAI;QAAC;QAAK;KAAQ;IAElB,qEAAqE;IACrE,yEAAyE;IACzE,IAAI,OAAO,aAAa,aACtB,uEAAuE;IACvE,sDAAsD;IACtD,sDAAsD;IACtD,CAAA,GAAA,sBAAc,EAAE;QACd,SAAS;IACX,GAAG,EAAE;IAGP,qBACE,gCAAC,iCAAW,QAAQ;QAAC,OAAO;qBAC1B,gCAAC,mCAAa,QAAQ;QAAC,OAAO;OAC3B,MAAM,QAAQ;AAIvB;AAEA,IAAI,+CAAyB;AAMtB,SAAS,0CAAY,KAAuB;IACjD,IAAI,OAAO,CAAA,GAAA,YAAI,CAAC,CAAC,QAAQ,KAAK,YAAY;QACxC,IAAI,QAAQ,GAAG,CAAC,QAAQ,KAAK,UAAU,QAAQ,GAAG,CAAC,QAAQ,KAAK,gBAAgB,CAAC,8CAAwB;YACvG,QAAQ,IAAI,CAAC;YACb,+CAAyB;QAC3B;QACA,qBAAO,kEAAG,MAAM,QAAQ;IAC1B;IACA,qBAAO,gCAAC,yCAAsB;AAChC;AAEA,IAAI,kCAAY,QACd,OAAO,WAAW,eAClB,OAAO,QAAQ,IACf,OAAO,QAAQ,CAAC,aAAa;AAG/B,IAAI,qCAAe,IAAI;AAEvB,SAAS,iCAAW,aAAa,KAAK;IACpC,IAAI,MAAM,CAAA,GAAA,iBAAS,EAAE;IACrB,IAAI,MAAM,CAAA,GAAA,aAAK,EAAiB;IAChC,gDAAgD;IAChD,IAAI,IAAI,OAAO,KAAK,QAAQ,CAAC,YAAY;YAWpB,6EAAA;QAVnB,0GAA0G;QAC1G,wGAAwG;QACxG,uGAAuG;QACvG,+GAA+G;QAC/G,gHAAgH;QAChH,uHAAuH;QACvH,2GAA2G;QAC3G,yGAAyG;QACzG,gFAAgF;QAChF,aAAa;QACb,IAAI,gBAAe,4DAAA,CAAA,GAAA,YAAI,EAAE,kDAAkD,cAAxD,iFAAA,8EAAA,0DAA0D,iBAAiB,cAA3E,kGAAA,4EAA6E,OAAO;QACvG,IAAI,cAAc;YAChB,IAAI,qBAAqB,mCAAa,GAAG,CAAC;YAC1C,IAAI,sBAAsB,MACxB,wFAAwF;YACxF,mCAAa,GAAG,CAAC,cAAc;gBAC7B,IAAI,IAAI,OAAO;gBACf,OAAO,aAAa,aAAa;YACnC;iBACK,IAAI,aAAa,aAAa,KAAK,mBAAmB,KAAK,EAAE;gBAClE,+DAA+D;gBAC/D,8DAA8D;gBAC9D,sCAAsC;gBACtC,IAAI,OAAO,GAAG,mBAAmB,EAAE;gBACnC,mCAAa,MAAM,CAAC;YACtB;QACF;QAEA,gDAAgD;QAChD,IAAI,OAAO,GAAG,EAAE,IAAI,OAAO;IAC7B;IAEA,gDAAgD;IAChD,OAAO,IAAI,OAAO;AACpB;AAEA,SAAS,yCAAmB,SAAkB;IAC5C,IAAI,MAAM,CAAA,GAAA,iBAAS,EAAE;IAErB,4EAA4E;IAC5E,yDAAyD;IACzD,IAAI,QAAQ,wCAAkB,CAAC,mCAAa,QAAQ,GAAG,CAAC,QAAQ,KAAK,cACnE,QAAQ,IAAI,CAAC;IAGf,IAAI,UAAU,iCAAW,CAAC,CAAC;IAC3B,IAAI,SAAS,QAAQ,wCAAkB,QAAQ,GAAG,CAAC,QAAQ,KAAK,SAAS,eAAe,CAAC,UAAU,EAAE,IAAI,MAAM,EAAE;IACjH,OAAO,aAAa,GAAG,OAAO,CAAC,EAAE,SAAS;AAC5C;AAEA,SAAS,yCAAmB,SAAkB;IAC5C,IAAI,KAAK,CAAA,GAAA,YAAI,EAAE,KAAK;IACpB,IAAI,CAAC,OAAO,GAAG,CAAA,GAAA,eAAO,EAAE;IACxB,IAAI,SAAS,UAAU,QAAQ,GAAG,CAAC,QAAQ,KAAK,SAAS,eAAe,CAAC,UAAU,EAAE,qCAAe,MAAM,EAAE;IAC5G,OAAO,aAAa,GAAG,OAAO,CAAC,EAAE,IAAI;AACvC;AAIO,MAAM,4CAAsE,OAAO,CAAA,GAAA,YAAI,CAAC,CAAC,QAAQ,KAAK,aAAa,2CAAqB;AAE/I,SAAS;IACP,OAAO;AACT;AAEA,SAAS;IACP,OAAO;AACT;AAEA,6DAA6D;AAC7D,SAAS,gCAAU,aAAyB;IAC1C,OAAO;IACP,OAAO,KAAO;AAChB;AAOO,SAAS;IACd,iGAAiG;IACjG,IAAI,OAAO,CAAA,GAAA,YAAI,CAAC,CAAC,uBAAuB,KAAK,YAC3C,OAAO,CAAA,GAAA,YAAI,CAAC,CAAC,uBAAuB,CAAC,iCAAW,mCAAa;IAG/D,sDAAsD;IACtD,OAAO,CAAA,GAAA,iBAAS,EAAE;AACpB","sources":["packages/@react-aria/ssr/src/SSRProvider.tsx"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is\n// guarded by a check that it only runs on the client side.\n// eslint-disable-next-line rulesdir/useLayoutEffectRule\nimport React, {JSX, ReactNode, useContext, useLayoutEffect, useMemo, useRef, useState} from 'react';\n\n// To support SSR, the auto incrementing id counter is stored in a context. This allows\n// it to be reset on every request to ensure the client and server are consistent.\n// There is also a prefix string that is used to support async loading components\n// Each async boundary must be wrapped in an SSR provider, which appends to the prefix\n// and resets the current id counter. This ensures that async loaded components have\n// consistent ids regardless of the loading order.\ninterface SSRContextValue {\n prefix: string,\n current: number\n}\n\n// Default context value to use in case there is no SSRProvider. This is fine for\n// client-only apps. In order to support multiple copies of React Aria potentially\n// being on the page at once, the prefix is set to a random number. SSRProvider\n// will reset this to zero for consistency between server and client, so in the\n// SSR case multiple copies of React Aria is not supported.\nconst defaultContext: SSRContextValue = {\n prefix: String(Math.round(Math.random() * 10000000000)),\n current: 0\n};\n\nconst SSRContext = React.createContext<SSRContextValue>(defaultContext);\nconst IsSSRContext = React.createContext(false);\n\nexport interface SSRProviderProps {\n /** Your application here. */\n children: ReactNode\n}\n\n// This is only used in React < 18.\nfunction LegacySSRProvider(props: SSRProviderProps): JSX.Element {\n let cur = useContext(SSRContext);\n let counter = useCounter(cur === defaultContext);\n let [isSSR, setIsSSR] = useState(true);\n let value: SSRContextValue = useMemo(() => ({\n // If this is the first SSRProvider, start with an empty string prefix, otherwise\n // append and increment the counter.\n prefix: cur === defaultContext ? '' : `${cur.prefix}-${counter}`,\n current: 0\n }), [cur, counter]);\n\n // If on the client, and the component was initially server rendered,\n // then schedule a layout effect to update the component after hydration.\n if (typeof document !== 'undefined') {\n // This if statement technically breaks the rules of hooks, but is safe\n // because the condition never changes after mounting.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useLayoutEffect(() => {\n setIsSSR(false);\n }, []);\n }\n\n return (\n <SSRContext.Provider value={value}>\n <IsSSRContext.Provider value={isSSR}>\n {props.children}\n </IsSSRContext.Provider>\n </SSRContext.Provider>\n );\n}\n\nlet warnedAboutSSRProvider = false;\n\n/**\n * When using SSR with React Aria in React 16 or 17, applications must be wrapped in an SSRProvider.\n * This ensures that auto generated ids are consistent between the client and server.\n */\nexport function SSRProvider(props: SSRProviderProps): JSX.Element {\n if (typeof React['useId'] === 'function') {\n if (process.env.NODE_ENV !== 'test' && process.env.NODE_ENV !== 'production' && !warnedAboutSSRProvider) {\n console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.');\n warnedAboutSSRProvider = true;\n }\n return <>{props.children}</>;\n }\n return <LegacySSRProvider {...props} />;\n}\n\nlet canUseDOM = Boolean(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\nlet componentIds = new WeakMap();\n\nfunction useCounter(isDisabled = false) {\n let ctx = useContext(SSRContext);\n let ref = useRef<number | null>(null);\n // eslint-disable-next-line rulesdir/pure-render\n if (ref.current === null && !isDisabled) {\n // In strict mode, React renders components twice, and the ref will be reset to null on the second render.\n // This means our id counter will be incremented twice instead of once. This is a problem because on the\n // server, components are only rendered once and so ids generated on the server won't match the client.\n // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this\n // we need to use some React internals to access the underlying Fiber instance, which is stable between renders.\n // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development.\n // To ensure that we only increment the global counter once, we store the starting id for this component in\n // a weak map associated with the Fiber. On the second render, we reset the global counter to this value.\n // Since React runs the second render immediately after the first, this is safe.\n // @ts-ignore\n let currentOwner = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?.ReactCurrentOwner?.current;\n if (currentOwner) {\n let prevComponentValue = componentIds.get(currentOwner);\n if (prevComponentValue == null) {\n // On the first render, and first call to useId, store the id and state in our weak map.\n componentIds.set(currentOwner, {\n id: ctx.current,\n state: currentOwner.memoizedState\n });\n } else if (currentOwner.memoizedState !== prevComponentValue.state) {\n // On the second render, the memoizedState gets reset by React.\n // Reset the counter, and remove from the weak map so we don't\n // do this for subsequent useId calls.\n ctx.current = prevComponentValue.id;\n componentIds.delete(currentOwner);\n }\n }\n\n // eslint-disable-next-line rulesdir/pure-render\n ref.current = ++ctx.current;\n }\n\n // eslint-disable-next-line rulesdir/pure-render\n return ref.current;\n}\n\nfunction useLegacySSRSafeId(defaultId?: string): string {\n let ctx = useContext(SSRContext);\n\n // If we are rendering in a non-DOM environment, and there's no SSRProvider,\n // provide a warning to hint to the developer to add one.\n if (ctx === defaultContext && !canUseDOM && process.env.NODE_ENV !== 'production') {\n console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.');\n }\n\n let counter = useCounter(!!defaultId);\n let prefix = ctx === defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`;\n return defaultId || `${prefix}-${counter}`;\n}\n\nfunction useModernSSRSafeId(defaultId?: string): string {\n let id = React.useId();\n let [didSSR] = useState(useIsSSR());\n let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${defaultContext.prefix}`;\n return defaultId || `${prefix}-${id}`;\n}\n\n// Use React.useId in React 18 if available, otherwise fall back to our old implementation.\n/** @private */\nexport const useSSRSafeId: typeof useModernSSRSafeId | typeof useLegacySSRSafeId = typeof React['useId'] === 'function' ? useModernSSRSafeId : useLegacySSRSafeId;\n\nfunction getSnapshot() {\n return false;\n}\n\nfunction getServerSnapshot() {\n return true;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction subscribe(onStoreChange: () => void): () => void {\n // noop\n return () => {};\n}\n\n/**\n * Returns whether the component is currently being server side rendered or\n * hydrated on the client. Can be used to delay browser-specific rendering\n * until after hydration.\n */\nexport function useIsSSR(): boolean {\n // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating.\n if (typeof React['useSyncExternalStore'] === 'function') {\n return React['useSyncExternalStore'](subscribe, getSnapshot, getServerSnapshot);\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useContext(IsSSRContext);\n}\n"],"names":[],"version":3,"file":"SSRProvider.module.js.map","sourceRoot":"../../../../"} |
| import { JSX, ReactNode } from "react"; | ||
| export interface SSRProviderProps { | ||
| /** Your application here. */ | ||
| children: ReactNode; | ||
| } | ||
| /** | ||
| * When using SSR with React Aria in React 16 or 17, applications must be wrapped in an SSRProvider. | ||
| * This ensures that auto generated ids are consistent between the client and server. | ||
| */ | ||
| export function SSRProvider(props: SSRProviderProps): JSX.Element; | ||
| declare function useLegacySSRSafeId(defaultId?: string): string; | ||
| declare function useModernSSRSafeId(defaultId?: string): string; | ||
| /** @private */ | ||
| export const useSSRSafeId: typeof useModernSSRSafeId | typeof useLegacySSRSafeId; | ||
| /** | ||
| * Returns whether the component is currently being server side rendered or | ||
| * hydrated on the client. Can be used to delay browser-specific rendering | ||
| * until after hydration. | ||
| */ | ||
| export function useIsSSR(): boolean; | ||
| //# sourceMappingURL=types.d.ts.map |
| {"mappings":";AAyCA;IACE,6BAA6B;IAC7B,QAAQ,EAAE,SAAS,CAAA;CACpB;AAoCD;;;GAGG;AACH,4BAA4B,KAAK,EAAE,gBAAgB,GAAG,IAAI,OAAO,CAShE;AAmDD,oCAA4B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAYtD;AAED,oCAA4B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAKtD;AAGD,eAAe;AACf,OAAO,MAAM,cAAc,yBAAyB,GAAG,yBAA0G,CAAC;AAgBlK;;;;GAIG;AACH,4BAA4B,OAAO,CAQlC","sources":["packages/@react-aria/ssr/src/packages/@react-aria/ssr/src/SSRProvider.tsx","packages/@react-aria/ssr/src/packages/@react-aria/ssr/src/index.ts","packages/@react-aria/ssr/src/index.ts"],"sourcesContent":[null,null,"/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nexport {SSRProvider, useSSRSafeId, useIsSSR} from './SSRProvider';\nexport type {SSRProviderProps} from './SSRProvider';\n"],"names":[],"version":3,"file":"types.d.ts.map"} |
| /* | ||
| * Copyright 2020 Adobe. All rights reserved. | ||
| * This file is licensed to you under the Apache License, Version 2.0 (the "License"); | ||
| * you may not use this file except in compliance with the License. You may obtain a copy | ||
| * of the License at http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software distributed under | ||
| * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS | ||
| * OF ANY KIND, either express or implied. See the License for the specific language | ||
| * governing permissions and limitations under the License. | ||
| */ | ||
| // We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is | ||
| // guarded by a check that it only runs on the client side. | ||
| // eslint-disable-next-line rulesdir/useLayoutEffectRule | ||
| import React, {JSX, ReactNode, useContext, useLayoutEffect, useMemo, useRef, useState} from 'react'; | ||
| // To support SSR, the auto incrementing id counter is stored in a context. This allows | ||
| // it to be reset on every request to ensure the client and server are consistent. | ||
| // There is also a prefix string that is used to support async loading components | ||
| // Each async boundary must be wrapped in an SSR provider, which appends to the prefix | ||
| // and resets the current id counter. This ensures that async loaded components have | ||
| // consistent ids regardless of the loading order. | ||
| interface SSRContextValue { | ||
| prefix: string, | ||
| current: number | ||
| } | ||
| // Default context value to use in case there is no SSRProvider. This is fine for | ||
| // client-only apps. In order to support multiple copies of React Aria potentially | ||
| // being on the page at once, the prefix is set to a random number. SSRProvider | ||
| // will reset this to zero for consistency between server and client, so in the | ||
| // SSR case multiple copies of React Aria is not supported. | ||
| const defaultContext: SSRContextValue = { | ||
| prefix: String(Math.round(Math.random() * 10000000000)), | ||
| current: 0 | ||
| }; | ||
| const SSRContext = React.createContext<SSRContextValue>(defaultContext); | ||
| const IsSSRContext = React.createContext(false); | ||
| export interface SSRProviderProps { | ||
| /** Your application here. */ | ||
| children: ReactNode | ||
| } | ||
| // This is only used in React < 18. | ||
| function LegacySSRProvider(props: SSRProviderProps): JSX.Element { | ||
| let cur = useContext(SSRContext); | ||
| let counter = useCounter(cur === defaultContext); | ||
| let [isSSR, setIsSSR] = useState(true); | ||
| let value: SSRContextValue = useMemo(() => ({ | ||
| // If this is the first SSRProvider, start with an empty string prefix, otherwise | ||
| // append and increment the counter. | ||
| prefix: cur === defaultContext ? '' : `${cur.prefix}-${counter}`, | ||
| current: 0 | ||
| }), [cur, counter]); | ||
| // If on the client, and the component was initially server rendered, | ||
| // then schedule a layout effect to update the component after hydration. | ||
| if (typeof document !== 'undefined') { | ||
| // This if statement technically breaks the rules of hooks, but is safe | ||
| // because the condition never changes after mounting. | ||
| // eslint-disable-next-line react-hooks/rules-of-hooks | ||
| useLayoutEffect(() => { | ||
| setIsSSR(false); | ||
| }, []); | ||
| } | ||
| return ( | ||
| <SSRContext.Provider value={value}> | ||
| <IsSSRContext.Provider value={isSSR}> | ||
| {props.children} | ||
| </IsSSRContext.Provider> | ||
| </SSRContext.Provider> | ||
| ); | ||
| } | ||
| let warnedAboutSSRProvider = false; | ||
| /** | ||
| * When using SSR with React Aria in React 16 or 17, applications must be wrapped in an SSRProvider. | ||
| * This ensures that auto generated ids are consistent between the client and server. | ||
| */ | ||
| export function SSRProvider(props: SSRProviderProps): JSX.Element { | ||
| if (typeof React['useId'] === 'function') { | ||
| if (process.env.NODE_ENV !== 'test' && process.env.NODE_ENV !== 'production' && !warnedAboutSSRProvider) { | ||
| console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.'); | ||
| warnedAboutSSRProvider = true; | ||
| } | ||
| return <>{props.children}</>; | ||
| } | ||
| return <LegacySSRProvider {...props} />; | ||
| } | ||
| let canUseDOM = Boolean( | ||
| typeof window !== 'undefined' && | ||
| window.document && | ||
| window.document.createElement | ||
| ); | ||
| let componentIds = new WeakMap(); | ||
| function useCounter(isDisabled = false) { | ||
| let ctx = useContext(SSRContext); | ||
| let ref = useRef<number | null>(null); | ||
| // eslint-disable-next-line rulesdir/pure-render | ||
| if (ref.current === null && !isDisabled) { | ||
| // In strict mode, React renders components twice, and the ref will be reset to null on the second render. | ||
| // This means our id counter will be incremented twice instead of once. This is a problem because on the | ||
| // server, components are only rendered once and so ids generated on the server won't match the client. | ||
| // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this | ||
| // we need to use some React internals to access the underlying Fiber instance, which is stable between renders. | ||
| // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development. | ||
| // To ensure that we only increment the global counter once, we store the starting id for this component in | ||
| // a weak map associated with the Fiber. On the second render, we reset the global counter to this value. | ||
| // Since React runs the second render immediately after the first, this is safe. | ||
| // @ts-ignore | ||
| let currentOwner = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?.ReactCurrentOwner?.current; | ||
| if (currentOwner) { | ||
| let prevComponentValue = componentIds.get(currentOwner); | ||
| if (prevComponentValue == null) { | ||
| // On the first render, and first call to useId, store the id and state in our weak map. | ||
| componentIds.set(currentOwner, { | ||
| id: ctx.current, | ||
| state: currentOwner.memoizedState | ||
| }); | ||
| } else if (currentOwner.memoizedState !== prevComponentValue.state) { | ||
| // On the second render, the memoizedState gets reset by React. | ||
| // Reset the counter, and remove from the weak map so we don't | ||
| // do this for subsequent useId calls. | ||
| ctx.current = prevComponentValue.id; | ||
| componentIds.delete(currentOwner); | ||
| } | ||
| } | ||
| // eslint-disable-next-line rulesdir/pure-render | ||
| ref.current = ++ctx.current; | ||
| } | ||
| // eslint-disable-next-line rulesdir/pure-render | ||
| return ref.current; | ||
| } | ||
| function useLegacySSRSafeId(defaultId?: string): string { | ||
| let ctx = useContext(SSRContext); | ||
| // If we are rendering in a non-DOM environment, and there's no SSRProvider, | ||
| // provide a warning to hint to the developer to add one. | ||
| if (ctx === defaultContext && !canUseDOM && process.env.NODE_ENV !== 'production') { | ||
| console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.'); | ||
| } | ||
| let counter = useCounter(!!defaultId); | ||
| let prefix = ctx === defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`; | ||
| return defaultId || `${prefix}-${counter}`; | ||
| } | ||
| function useModernSSRSafeId(defaultId?: string): string { | ||
| let id = React.useId(); | ||
| let [didSSR] = useState(useIsSSR()); | ||
| let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${defaultContext.prefix}`; | ||
| return defaultId || `${prefix}-${id}`; | ||
| } | ||
| // Use React.useId in React 18 if available, otherwise fall back to our old implementation. | ||
| /** @private */ | ||
| export const useSSRSafeId: typeof useModernSSRSafeId | typeof useLegacySSRSafeId = typeof React['useId'] === 'function' ? useModernSSRSafeId : useLegacySSRSafeId; | ||
| function getSnapshot() { | ||
| return false; | ||
| } | ||
| function getServerSnapshot() { | ||
| return true; | ||
| } | ||
| // eslint-disable-next-line @typescript-eslint/no-unused-vars | ||
| function subscribe(onStoreChange: () => void): () => void { | ||
| // noop | ||
| return () => {}; | ||
| } | ||
| /** | ||
| * Returns whether the component is currently being server side rendered or | ||
| * hydrated on the client. Can be used to delay browser-specific rendering | ||
| * until after hydration. | ||
| */ | ||
| export function useIsSSR(): boolean { | ||
| // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating. | ||
| if (typeof React['useSyncExternalStore'] === 'function') { | ||
| return React['useSyncExternalStore'](subscribe, getSnapshot, getServerSnapshot); | ||
| } | ||
| // eslint-disable-next-line react-hooks/rules-of-hooks | ||
| return useContext(IsSSRContext); | ||
| } |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
0
-100%18990
-76.9%4
100%10
-41.18%67
-90.22%1
Infinity%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added