import clsx from "clsx";
import React from "react";
import { CautionIcon } from "./icons/caution";
import { CommandLineIcon } from "./icons/command-line";
import { InfoIcon } from "./icons/info";
import { TipIcon } from "./icons/tip";
import { NoteIcon } from "./icons/note";
import { GithubIcon } from "./icons/github";
type Props = {
type:
| "caution"
| "command-line"
| "sourcecode"
| "info"
| "tip"
| "note"
| "additional"
| "danger"
| "info-tip"
| "simple";
title?: React.ReactNode;
children: React.ReactNode;
};
const icons = {
danger: CautionIcon,
caution: CautionIcon,
"command-line": CommandLineIcon,
sourcecode: GithubIcon,
info: InfoIcon,
tip: TipIcon,
note: NoteIcon,
additional: NoteIcon,
"info-tip": TipIcon,
};
const colorTextClasses = {
caution:
"text-refine-react-light-orange dark:text-refine-react-dark-orange",
info: "text-refine-react-light-purple dark:text-refine-react-dark-purple",
tip: "text-refine-react-light-green-alt dark:text-refine-react-dark-green-alt",
note: "text-refine-react-light-green dark:text-refine-react-dark-green",
"info-tip": "text-refine-blue dark:text-[#6EB3F7]",
danger: "text-refine-red",
"command-line": "text-refine-purple",
sourcecode: "text-refine-pink",
additional: "text-refine-cyan",
simple: "text-gray-700 dark:text-gray-100",
};
const colorWrapperClasses = {
caution:
"bg-refine-react-light-orange bg-opacity-[0.15] dark:bg-refine-react-dark-orange dark:bg-opacity-[0.15] border-l-refine-react-light-orange dark:border-l-refine-dark-orange",
info: "bg-refine-react-light-purple bg-opacity-[0.15] dark:bg-refine-react-dark-purple dark:bg-opacity-[0.15] border-l-refine-react-light-purple dark:border-l-refine-react-dark-purple",
tip: "bg-refine-react-light-green-alt bg-opacity-[0.05] dark:bg-refine-react-dark-green-alt dark:bg-opacity-[0.05] border-l-refine-react-light-green-alt dark:border-l-refine-react-dark-green-alt",
note: "bg-refine-react-light-green-bg dark:bg-refine-react-light-green dark:bg-opacity-[0.2] border-l-refine-react-light-green dark:border-l-refine-react-dark-green",
"info-tip":
"bg-refine-blue/10 dark:bg-[#6EB3F7]/10 bg-opacity-10 dark:bg-opacity-10 border-l-refine-blue",
"command-line": "bg-refine-purple bg-opacity-10 border-l-refine-purple",
danger: "bg-refine-red bg-opacity-10 border-l-refine-red",
sourcecode: "bg-refine-pink bg-opacity-10 border-l-refine-pink",
additional: "bg-refine-cyan bg-opacity-10 border-l-refine-cyan",
simple: "border dark:border-gray-700 border-gray-300",
};
const titles = {
danger: "DANGER",
caution: "CAUTION",
"command-line": "COMMAND LINE",
sourcecode: "SOURCE CODE",
info: "INFORMATION",
tip: "TIP",
note: "NOTE",
additional: "ADDITIONAL INFO",
"info-tip": "INFORMATION",
simple: "Good to know",
};
export const Admonition = ({ type, title, children }: Props) => {
const Icon = icons[type] ?? (() => null);
const clsText = colorTextClasses[type] ?? "tex-inherit";
const clsWrapper = colorWrapperClasses[type] ?? "bg-inherit";
if (type === "simple") {
return (