@fremtind/jkl-message-react
Version:
Jøkul react message components
134 lines (133 loc) • 4.58 kB
JavaScript
var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
var __objRest = (source, exclude) => {
var target = {};
for (var prop in source)
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
target[prop] = source[prop];
if (source != null && __getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(source)) {
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
target[prop] = source[prop];
}
return target;
};
import {
ErrorIcon,
InfoIcon,
SuccessIcon,
WarningIcon
} from "@fremtind/jkl-icons-react";
import { useId } from "@fremtind/jkl-react-hooks";
import cn from "classnames";
import React, { forwardRef } from "react";
import { DismissButton } from "./DismissButton";
const getIcon = (messageType) => {
switch (messageType) {
case "error":
return /* @__PURE__ */ React.createElement(ErrorIcon, { className: "jkl-message__icon" });
case "info":
return /* @__PURE__ */ React.createElement(InfoIcon, { className: "jkl-message__icon" });
case "success":
return /* @__PURE__ */ React.createElement(SuccessIcon, { className: "jkl-message__icon" });
case "warning":
return /* @__PURE__ */ React.createElement(WarningIcon, { className: "jkl-message__icon" });
default:
return null;
}
};
function messageFactory(messageType) {
const Message = forwardRef((props, ref) => {
const _a = props, {
id,
title,
fullWidth,
density,
className = "",
dismissed,
dismissAction,
children,
role
} = _a, rest = __objRest(_a, [
"id",
"title",
"fullWidth",
"density",
"className",
"dismissed",
"dismissAction",
"children",
"role"
]);
const boxId = useId(id || "jkl-message", { generateSuffix: !id });
const hasStringChild = React.Children.map(
children,
(child) => typeof child === "string"
);
const newChildren = (hasStringChild == null ? void 0 : hasStringChild[0]) ? /* @__PURE__ */ React.createElement("p", null, children) : children;
return /* @__PURE__ */ React.createElement(
"div",
__spreadProps(__spreadValues({}, rest), {
id,
ref,
className: cn(
"jkl-message",
"jkl-message--" + messageType,
className,
{
"jkl-message--full": fullWidth,
"jkl-message--dismissed": dismissed
}
),
role,
"data-density": density
}),
getIcon(messageType),
/* @__PURE__ */ React.createElement("div", { className: "jkl-message__content", "data-theme": "light" }, title && /* @__PURE__ */ React.createElement("p", { className: "jkl-message__title" }, title), /* @__PURE__ */ React.createElement("div", { className: "jkl-message__message" }, newChildren)),
(dismissAction == null ? void 0 : dismissAction.handleDismiss) && /* @__PURE__ */ React.createElement(
DismissButton,
{
"data-theme": "light",
"aria-controls": boxId,
className: "jkl-message__dismiss-button",
label: dismissAction.buttonTitle || "Lukk",
onClick: dismissAction.handleDismiss
}
)
);
});
Message.displayName = "Message";
return Message;
}
const InfoMessage = messageFactory("info");
InfoMessage.displayName = "InfoMessage";
const ErrorMessage = messageFactory("error");
ErrorMessage.displayName = "ErrorMessage";
const WarningMessage = messageFactory("warning");
WarningMessage.displayName = "WarningMessage";
const SuccessMessage = messageFactory("success");
SuccessMessage.displayName = "SuccessMessage";
export {
ErrorMessage,
InfoMessage,
SuccessMessage,
WarningMessage
};
//# sourceMappingURL=Message.js.map