@carbon/react
Version:
React components for the Carbon Design System
74 lines (72 loc) • 2.61 kB
JavaScript
/**
* 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;