UNPKG

@carbon/react

Version:

React components for the Carbon Design System

74 lines (72 loc) 2.61 kB
/** * Copyright IBM Corp. 2016, 2026 * * This source code is licensed under the Apache-2.0 license found in the * LICENSE file in the root directory of this source tree. */ const require_runtime = require("../_virtual/_rolldown/runtime.js"); const require_setupGetInstanceId = require("../tools/setupGetInstanceId.js"); const require_useIsomorphicEffect = require("./useIsomorphicEffect.js"); const require_useIdPrefix = require("./useIdPrefix.js"); let react = require("react"); react = require_runtime.__toESM(react); //#region src/internal/useId.js /** * Copyright IBM Corp. 2016, 2026 * * This source code is licensed under the Apache-2.0 license found in the * LICENSE file in the root directory of this source tree. */ const _React = { ...react.default }; const instanceId = require_setupGetInstanceId.setupGetInstanceId(); let serverHandoffCompleted = false; const defaultId = "id"; /** * Generate a unique ID for React <=17 with an optional prefix prepended to it. * This is an internal utility, not intended for public usage. * @param {string} [prefix] * @returns {string} */ function useCompatibleId(prefix = defaultId) { const contextPrefix = require_useIdPrefix.useIdPrefix(); const [id, setId] = (0, react.useState)(() => { if (serverHandoffCompleted) return `${contextPrefix ? `${contextPrefix}-` : ``}${prefix}-${instanceId()}`; return null; }); require_useIsomorphicEffect.default(() => { if (id === null) setId(`${contextPrefix ? `${contextPrefix}-` : ``}${prefix}-${instanceId()}`); }, [instanceId]); (0, react.useEffect)(() => { if (serverHandoffCompleted === false) serverHandoffCompleted = true; }, []); return id; } /** * Generate a unique ID for React >=18 with an optional prefix prepended to it. * This is an internal utility, not intended for public usage. * @param {string} [prefix] * @returns {string} */ function useReactId(prefix = defaultId) { const contextPrefix = require_useIdPrefix.useIdPrefix(); return `${contextPrefix ? `${contextPrefix}-` : ``}${prefix}-${_React.useId()}`; } /** * Uses React 18's built-in `useId()` when available, or falls back to a * slightly less performant (requiring a double render) implementation for * earlier React versions. */ const useId = _React.useId ? useReactId : useCompatibleId; /** * Generate a unique id if a given `id` is not provided * This is an internal utility, not intended for public usage. * @param {string|undefined} id * @returns {string} */ function useFallbackId(id) { const fallback = useId(); return id ?? fallback; } //#endregion exports.useFallbackId = useFallbackId; exports.useId = useId;