@carbon/react
Version:
React components for the Carbon Design System
132 lines (130 loc) • 4.24 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_usePrefix = require("../../internal/usePrefix.js");
const require_useId = require("../../internal/useId.js");
const require_deprecateValuesWithin = require("../../prop-types/deprecateValuesWithin.js");
const require_mapPopoverAlign = require("../../tools/mapPopoverAlign.js");
const require_Tooltip = require("../Tooltip/Tooltip.js");
const require_ButtonBase = require("../Button/ButtonBase.js");
const require_index = require("../BadgeIndicator/index.js");
let classnames = require("classnames");
classnames = require_runtime.__toESM(classnames);
let react = require("react");
react = require_runtime.__toESM(react);
let prop_types = require("prop-types");
prop_types = require_runtime.__toESM(prop_types);
let react_jsx_runtime = require("react/jsx-runtime");
//#region src/components/IconButton/index.tsx
/**
* 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 IconButtonKinds = [
"primary",
"secondary",
"ghost",
"tertiary"
];
const IconButton = (0, react.forwardRef)(({ align, autoAlign = false, badgeCount, children, className, closeOnActivation = true, defaultOpen = false, disabled, dropShadow = false, enterDelayMs = 100, highContrast = true, kind, label, leaveDelayMs = 100, wrapperClasses, size, isSelected, ...rest }, ref) => {
const prefix = require_usePrefix.usePrefix();
const tooltipClasses = (0, classnames.default)(wrapperClasses, `${prefix}--icon-tooltip`, { [`${prefix}--icon-tooltip--disabled`]: disabled });
if (badgeCount && (kind !== "ghost" || size !== "lg")) console.warn("The prop BadgeCount must be used with hasIconOnly=true, kind='ghost' and size='lg'");
const badgeId = require_useId.useId("badge-indicator");
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Tooltip.Tooltip, {
align,
autoAlign,
closeOnActivation,
className: tooltipClasses,
defaultOpen,
dropShadow,
enterDelayMs,
highContrast,
label,
leaveDelayMs,
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_ButtonBase.default, {
...rest,
disabled,
kind,
ref,
size,
isSelected,
hasIconOnly: true,
className,
"aria-describedby": rest["aria-describedby"] || badgeCount && badgeId,
children: [children, !disabled && badgeCount !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index.default, {
id: badgeId,
count: badgeCount > 0 ? badgeCount : void 0
})]
})
});
});
IconButton.propTypes = {
align: require_deprecateValuesWithin.deprecateValuesWithin(prop_types.default.oneOf([
"top",
"top-left",
"top-right",
"bottom",
"bottom-left",
"bottom-right",
"left",
"left-bottom",
"left-top",
"right",
"right-bottom",
"right-top",
"top-start",
"top-end",
"bottom-start",
"bottom-end",
"left-end",
"left-start",
"right-end",
"right-start"
]), [
"top",
"top-start",
"top-end",
"bottom",
"bottom-start",
"bottom-end",
"left",
"left-start",
"left-end",
"right",
"right-start",
"right-end"
], require_mapPopoverAlign.mapPopoverAlign),
autoAlign: prop_types.default.bool,
badgeCount: prop_types.default.number,
href: prop_types.default.string,
children: prop_types.default.node,
className: prop_types.default.string,
closeOnActivation: prop_types.default.bool,
defaultOpen: prop_types.default.bool,
dropShadow: prop_types.default.bool,
disabled: prop_types.default.bool,
enterDelayMs: prop_types.default.number,
isSelected: prop_types.default.bool,
highContrast: prop_types.default.bool,
kind: prop_types.default.oneOf(IconButtonKinds),
label: prop_types.default.node.isRequired,
leaveDelayMs: prop_types.default.number,
rel: prop_types.default.string,
size: prop_types.default.oneOf([
"sm",
"md",
"lg"
]),
target: prop_types.default.string,
wrapperClasses: prop_types.default.string
};
//#endregion
exports.IconButton = IconButton;
exports.IconButtonKinds = IconButtonKinds;