/* Copyright 2026 Marimo. All rights reserved. */
import type { OutputMessage } from "@/core/kernel/messages";
import { cn } from "@/utils/cn";
import { OutputRenderer } from "../editor/Output";
interface MimeCellProps {
value: MimeValue;
}
interface MimeValue {
mimetype: string;
data: string;
}
export const MimeCell = ({ value }: MimeCellProps) => {
const message = {
channel: "output",
data: value.data,
mimetype: value.mimetype,
timestamp: 0,
} as OutputMessage;
return (
);
};
export function isMimeValue(value: unknown): value is MimeValue {
return (
typeof value === "object" &&
value !== null &&
"mimetype" in value &&
"data" in value
);
}
export function getMimeValues(value: unknown): MimeValue[] | undefined {
if (isMimeValue(value)) {
return [value];
}
const hasSerializedMimeBundle =
typeof value === "object" &&
value !== null &&
("_serialized_mime_bundle" in value || "serialized_mime_bundle" in value);
if (hasSerializedMimeBundle) {
const obj = value as Record;
const serializedMimeBundle =
obj._serialized_mime_bundle || obj.serialized_mime_bundle;
if (isMimeValue(serializedMimeBundle)) {
return [serializedMimeBundle];
}
}
// can also be a list of mime values
// only return if all values are mime values
// TODO: Maybe support mixed mime values and non-mime values
if (Array.isArray(value)) {
const allMimeType = value.every(isMimeValue);
if (allMimeType) {
return value.map((v) => v);
}
}
}