@mijn-ui/react-alert
Version:
A component for displaying critical information or notifications.
85 lines (83 loc) • 2.15 kB
JavaScript
"use client";
// src/alert.tsx
import { createTVUnstyledSlots } from "@mijn-ui/react-core";
import { useTVUnstyled } from "@mijn-ui/react-hooks";
import {
alertStyles,
cn
} from "@mijn-ui/react-theme";
import { createContext } from "@mijn-ui/react-utilities";
import { jsx } from "react/jsx-runtime";
var [AlertProvider, useAlertContext] = createContext({
name: "AlertContext",
strict: true,
errorMessage: "useAlertContext: `context` is undefined. Seems you forgot to wrap component within <Alert />"
});
var useAlertStyles = (unstyledOverride) => {
const context = useAlertContext();
const unstyledSlots = useTVUnstyled(context, unstyledOverride);
return { ...unstyledSlots, classNames: context.classNames };
};
var Alert = ({
variant,
color,
unstyled = false,
className,
classNames,
...props
}) => {
const styles = alertStyles({ variant, color });
const { base } = createTVUnstyledSlots({ base: styles.base }, unstyled);
return /* @__PURE__ */ jsx(AlertProvider, { value: { styles, unstyled, classNames }, children: /* @__PURE__ */ jsx(
"div",
{
className: base({ className: cn(classNames?.base, className) }),
...props
}
) });
};
var AlertIcon = ({ unstyled, className, ...props }) => {
const { iconWrapper, classNames } = useAlertStyles(unstyled);
return /* @__PURE__ */ jsx(
"span",
{
className: iconWrapper({
className: cn(classNames?.iconWrapper, className)
}),
...props
}
);
};
var AlertTitle = ({ unstyled, className, ...props }) => {
const { title, classNames } = useAlertStyles(unstyled);
return /* @__PURE__ */ jsx(
"h5",
{
className: title({ className: cn(classNames?.title, className) }),
...props
}
);
};
var AlertDescription = ({
unstyled,
className,
...props
}) => {
const { description, classNames } = useAlertStyles(unstyled);
return /* @__PURE__ */ jsx(
"p",
{
className: description({
className: cn(classNames?.description, className)
}),
...props
}
);
};
export {
Alert,
AlertDescription,
AlertIcon,
AlertTitle,
useAlertStyles
};