UNPKG

@kiwicom/orbit-components

Version:

Orbit-components is a React component library which provides developers with the easiest possible way of building Kiwi.com's products.

144 lines (143 loc) 5.49 kB
"use strict"; "use client"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; exports.__esModule = true; exports.default = exports.AlertButton = void 0; var React = _interopRequireWildcard(require("react")); var _clsx = _interopRequireDefault(require("clsx")); var _InformationCircle = _interopRequireDefault(require("../icons/InformationCircle")); var _AlertCircle = _interopRequireDefault(require("../icons/AlertCircle")); var _AlertOctagon = _interopRequireDefault(require("../icons/AlertOctagon")); var _CheckCircle = _interopRequireDefault(require("../icons/CheckCircle")); var _Close = _interopRequireDefault(require("../icons/Close")); var _ButtonLink = _interopRequireDefault(require("../ButtonLink")); var _consts = require("./consts"); var _tailwind = require("../common/tailwind"); var _twClasses = require("../TextLink/helpers/twClasses"); var _AlertButton = _interopRequireDefault(require("./AlertButton")); exports.AlertButton = _AlertButton.default; const COLORS = { info: "bg-blue-light border border-alert-info", success: "bg-green-light border border-alert-success", warning: "bg-orange-light border border-alert-warning", critical: "bg-red-light border border-alert-critical" }; const ICON_COLOR = { info: "text-blue-normal", success: "text-green-normal", warning: "text-orange-normal", critical: "text-red-normal" }; const StyledIcon = ({ icon, type }) => { // Icon should be boolean and TRUE if (typeof icon === "boolean" && icon) { if (type === _consts.TYPE_OPTIONS.INFO) { return /*#__PURE__*/React.createElement(_InformationCircle.default, { size: "small", ariaHidden: true }); } if (type === _consts.TYPE_OPTIONS.SUCCESS) { return /*#__PURE__*/React.createElement(_CheckCircle.default, { size: "small", ariaHidden: true }); } if (type === _consts.TYPE_OPTIONS.WARNING) { return /*#__PURE__*/React.createElement(_AlertCircle.default, { size: "small", ariaHidden: true }); } if (type === _consts.TYPE_OPTIONS.CRITICAL) { return /*#__PURE__*/React.createElement(_AlertOctagon.default, { size: "small", ariaHidden: true }); } } if ( /*#__PURE__*/React.isValidElement(icon) && typeof icon !== "boolean") { // @ts-expect-error TODO return /*#__PURE__*/React.cloneElement(icon, { size: "small" }); } return /*#__PURE__*/React.createElement(React.Fragment, null, icon); }; const ContentWrapper = ({ type, inlineActions, children }) => { return /*#__PURE__*/React.createElement("div", { className: (0, _clsx.default)("min-h-icon-medium flex items-center", !inlineActions && "w-full", "[&_.orbit-list-item]:text-ink-dark [&_.orbit-text]:text-ink-dark [&_.orbit-heading]:text-ink-dark", ..._twClasses.alertDescendantClasses[type]) }, children); }; const AlertCloseButton = ({ hasChildren, dataTest, onClick, labelClose, icon }) => { return /*#__PURE__*/React.createElement("div", { className: (0, _clsx.default)("end-0", hasChildren && "top-0") }, /*#__PURE__*/React.createElement(_ButtonLink.default, { dataTest: dataTest, onClick: onClick, size: "small", iconLeft: icon, type: "secondary", title: labelClose })); }; const Alert = props => { const { type = _consts.TYPE_OPTIONS.INFO, title, icon, closable, onClose, children, dataTest, id, spaceAfter, suppressed, inlineActions, labelClose } = props; return /*#__PURE__*/React.createElement("div", { className: (0, _clsx.default)("orbit-alert", "rounded-300 text-ink-dark font-base text-normal p-300 relative box-border flex w-full leading-normal", Boolean(inlineActions) && "items-center", suppressed ? "bg-cloud-light" : COLORS[type], spaceAfter && _tailwind.spaceAfterClasses[spaceAfter]), id: id, "data-test": dataTest }, icon && /*#__PURE__*/React.createElement("div", { className: (0, _clsx.default)("me-200 m-0 shrink-0 leading-none", Boolean(inlineActions) && "lm:mt-150 flex items-center self-baseline", ICON_COLOR[type], "tb:me-200 tb:[&_svg]:size-icon-medium") }, /*#__PURE__*/React.createElement(StyledIcon, { type: type, icon: icon })), /*#__PURE__*/React.createElement("div", { className: (0, _clsx.default)("flex flex-1", title && inlineActions ? "flex-row" : "flex-col", !title && "items-center", Boolean(inlineActions) && "justify-between") }, title && /*#__PURE__*/React.createElement("div", { className: (0, _clsx.default)("text-ink-dark min-h-icon-medium flex items-center font-bold", !!children && (inlineActions ? "mb-0" : "mb-100"), Boolean(inlineActions) && "grow basis-0") }, title), children && !inlineActions && /*#__PURE__*/React.createElement(ContentWrapper, { type: type }, children), inlineActions && /*#__PURE__*/React.createElement(ContentWrapper, { type: type, inlineActions: !!inlineActions }, inlineActions)), closable && /*#__PURE__*/React.createElement(AlertCloseButton, { hasChildren: !!children, dataTest: _consts.CLOSE_BUTTON_DATA_TEST, onClick: onClose, labelClose: labelClose, icon: /*#__PURE__*/React.createElement(_Close.default, { size: "small", color: type, ariaHidden: true }) })); }; var _default = exports.default = Alert;