assistant.ts

  1import { ColorScheme } from "../theme/colorScheme"
  2import { text, border, background, foreground } from "./components"
  3import editor from "./editor"
  4import { interactive } from "../element"
  5
  6export default function assistant(colorScheme: ColorScheme) {
  7    const layer = colorScheme.highest
  8    return {
  9        container: {
 10            background: editor(colorScheme).background,
 11            padding: { left: 12 },
 12        },
 13        header: {
 14            border: border(layer, "default", { bottom: true, top: true }),
 15            margin: { bottom: 6, top: 6 },
 16            background: editor(colorScheme).background,
 17        },
 18        userSender: {
 19            default: {
 20                ...text(layer, "sans", "default", {
 21                    size: "sm",
 22                    weight: "bold",
 23                }),
 24            },
 25        },
 26        assistantSender: {
 27            default: {
 28                ...text(layer, "sans", "accent", {
 29                    size: "sm",
 30                    weight: "bold",
 31                }),
 32            },
 33        },
 34        systemSender: {
 35            default: {
 36                ...text(layer, "sans", "variant", {
 37                    size: "sm",
 38                    weight: "bold",
 39                }),
 40            },
 41        },
 42        sentAt: {
 43            margin: { top: 2, left: 8 },
 44            ...text(layer, "sans", "default", { size: "2xs" }),
 45        },
 46        modelInfoContainer: {
 47            margin: { right: 16, top: 4 },
 48        },
 49        model: interactive({
 50            base: {
 51                background: background(layer, "on"),
 52                border: border(layer, "on", { overlay: true }),
 53                padding: 4,
 54                cornerRadius: 4,
 55                ...text(layer, "sans", "default", { size: "xs" }),
 56            },
 57            state: {
 58                hovered: {
 59                    background: background(layer, "on", "hovered"),
 60                },
 61            },
 62        }),
 63        remainingTokens: {
 64            background: background(layer, "on"),
 65            border: border(layer, "on", { overlay: true }),
 66            padding: 4,
 67            margin: { left: 4 },
 68            cornerRadius: 4,
 69            ...text(layer, "sans", "positive", { size: "xs" }),
 70        },
 71        noRemainingTokens: {
 72            background: background(layer, "on"),
 73            border: border(layer, "on", { overlay: true }),
 74            padding: 4,
 75            margin: { left: 4 },
 76            cornerRadius: 4,
 77            ...text(layer, "sans", "negative", { size: "xs" }),
 78        },
 79        errorIcon: {
 80            margin: { left: 8 },
 81            color: foreground(layer, "negative"),
 82            width: 12,
 83        },
 84        apiKeyEditor: {
 85            background: background(layer, "on"),
 86            cornerRadius: 6,
 87            text: text(layer, "mono", "on"),
 88            placeholderText: text(layer, "mono", "on", "disabled", {
 89                size: "xs",
 90            }),
 91            selection: colorScheme.players[0],
 92            border: border(layer, "on"),
 93            padding: {
 94                bottom: 4,
 95                left: 8,
 96                right: 8,
 97                top: 4,
 98            },
 99        },
100        apiKeyPrompt: {
101            padding: 10,
102            ...text(layer, "sans", "default", { size: "xs" }),
103        },
104    }
105}