/* Copyright 2026 Marimo. All rights reserved. */ import type { JSX } from "react"; import { z } from "zod"; import { KeyboardHotkeys } from "@/components/shortcuts/renderShortcut"; import { Tooltip } from "@/components/ui/tooltip"; import { cn } from "@/utils/cn"; import { Button } from "../../components/ui/button"; import { renderHTML } from "../core/RenderHTML"; import type { IPlugin, IPluginProps } from "../types"; import { type Intent, zodIntent } from "./common/intent"; interface Data { label: string; kind: Intent; disabled: boolean; fullWidth: boolean; tooltip?: string; keyboardShortcut?: string; } export class ButtonPlugin implements IPlugin { tagName = "marimo-button"; validator = z.object({ label: z.string(), kind: zodIntent, disabled: z.boolean().default(false), fullWidth: z.boolean().default(false), tooltip: z.string().optional(), keyboardShortcut: z.string().optional(), }); render(props: IPluginProps): JSX.Element { const { data: { disabled, kind, label, fullWidth, tooltip, keyboardShortcut }, } = props; // value counts number of times button was clicked const button = ( ); const tooltipContent = keyboardShortcut && !tooltip ? ( ) : ( tooltip ); if (tooltipContent) { return ( {button} ); } return button; } } function kindToButtonVariant(kind: Intent) { switch (kind) { case "neutral": return "secondary"; case "danger": return "destructive"; case "warn": return "warn"; case "success": return "success"; } }