@blank-utils/llm 0.3.20 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -894,7 +894,7 @@ import { useRef as useRef3, useEffect as useEffect3, useState as useState3, useM
894
894
  // src/react/chat-input.tsx
895
895
  import "react";
896
896
  import { useRef as useRef2, useEffect as useEffect2, useCallback as useCallback2, useState as useState2 } from "react";
897
- import { Square, ImagePlus, X } from "lucide-react";
897
+ import "lucide-react";
898
898
  import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
899
899
  function ChatInput({
900
900
  value,
@@ -1006,7 +1006,7 @@ ${newText}` : newText);
1006
1006
  return /* @__PURE__ */ jsxs2(
1007
1007
  "div",
1008
1008
  {
1009
- className: `relative flex flex-col bg-black border border-white/30 rounded-none focus-within:border-white/60 transition-colors p-3 font-mono ${className}`,
1009
+ className: `relative flex flex-col bg-transparent rounded-none transition-colors p-0 font-mono ${className}`,
1010
1010
  onDragOver: (e) => {
1011
1011
  e.preventDefault();
1012
1012
  setIsDragging(true);
@@ -1014,10 +1014,7 @@ ${newText}` : newText);
1014
1014
  onDragLeave: () => setIsDragging(false),
1015
1015
  onDrop: handleDrop,
1016
1016
  children: [
1017
- isDragging && /* @__PURE__ */ jsxs2("div", { className: "absolute inset-x-0 inset-y-0 bg-black/90 flex flex-col items-center justify-center z-20 border border-dashed border-white/50 rounded-none m-1", children: [
1018
- /* @__PURE__ */ jsx2(ImagePlus, { className: "w-8 h-8 text-white mb-2" }),
1019
- /* @__PURE__ */ jsx2("span", { className: "text-white font-light tracking-widest uppercase text-xs", children: "Drop file to attach" })
1020
- ] }),
1017
+ isDragging && /* @__PURE__ */ jsx2("div", { className: "absolute inset-x-0 inset-y-0 bg-current/90 flex flex-col items-center justify-center z-20 backdrop-blur-sm", children: /* @__PURE__ */ jsx2("span", { className: "text-black dark:text-white font-light tracking-[0.2em] uppercase text-xs", children: "DROP FILE TO ATTACH" }) }),
1021
1018
  /* @__PURE__ */ jsx2(
1022
1019
  "input",
1023
1020
  {
@@ -1029,15 +1026,15 @@ ${newText}` : newText);
1029
1026
  onChange: handleFileSelect
1030
1027
  }
1031
1028
  ),
1032
- images.length > 0 && /* @__PURE__ */ jsx2("div", { className: "flex flex-wrap gap-2 mb-3", children: images.map((img) => /* @__PURE__ */ jsxs2("div", { className: "relative w-16 h-16 overflow-hidden border border-white/30 rounded-none group select-none", children: [
1029
+ images.length > 0 && /* @__PURE__ */ jsx2("div", { className: "flex flex-wrap gap-2 mb-6", children: images.map((img) => /* @__PURE__ */ jsxs2("div", { className: "relative w-16 h-16 overflow-hidden border border-current/20 rounded-none group select-none", children: [
1033
1030
  /* @__PURE__ */ jsx2("img", { src: img.dataUrl, alt: "attachment", className: "w-full h-full object-cover grayscale transition-all group-hover:grayscale-0" }),
1034
1031
  /* @__PURE__ */ jsx2(
1035
1032
  "button",
1036
1033
  {
1037
1034
  type: "button",
1038
- className: "absolute top-0 right-0 w-5 h-5 bg-black/80 text-white border-l border-b border-white/30 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity",
1035
+ className: "absolute top-0 right-0 w-5 h-5 bg-black/80 text-white flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity text-[8px]",
1039
1036
  onClick: () => onImageRemove?.(img.id),
1040
- children: /* @__PURE__ */ jsx2(X, { className: "w-3 h-3" })
1037
+ children: "[X]"
1041
1038
  }
1042
1039
  )
1043
1040
  ] }, img.id)) }),
@@ -1052,43 +1049,40 @@ ${newText}` : newText);
1052
1049
  placeholder,
1053
1050
  disabled: disabled && !isGenerating,
1054
1051
  rows: 1,
1055
- className: "w-full min-h-[24px] max-h-[200px] resize-none border-none outline-none bg-transparent text-white text-sm font-light font-mono leading-relaxed p-0 m-0 placeholder:text-white/30 placeholder:uppercase placeholder:tracking-widest scrollbar-thin scrollbar-thumb-white/20 scrollbar-track-transparent"
1052
+ className: "w-full min-h-[24px] max-h-[200px] resize-none border-none outline-none bg-transparent text-current text-[13px] font-light font-mono leading-relaxed p-0 m-0 placeholder:text-current placeholder:opacity-30 placeholder:uppercase placeholder:tracking-[0.2em] scrollbar-none"
1056
1053
  }
1057
1054
  ),
1058
- /* @__PURE__ */ jsxs2("div", { className: "flex items-center justify-between mt-3 pt-3 border-t border-white/10", children: [
1059
- /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-2", children: [
1060
- modelSelector && /* @__PURE__ */ jsx2("div", { className: "mr-2", children: modelSelector }),
1055
+ /* @__PURE__ */ jsxs2("div", { className: "flex items-center justify-between mt-6", children: [
1056
+ /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-4", children: [
1057
+ modelSelector && /* @__PURE__ */ jsx2("div", { children: modelSelector }),
1061
1058
  /* @__PURE__ */ jsx2(
1062
1059
  "button",
1063
1060
  {
1064
1061
  type: "button",
1065
- className: "flex items-center justify-center w-8 h-8 rounded-none text-white/50 hover:text-white transition-colors",
1062
+ className: "text-[11px] uppercase tracking-[0.2em] text-current opacity-50 hover:opacity-100 transition-opacity font-light",
1066
1063
  onClick: () => fileInputRef.current?.click(),
1067
1064
  title: "Attach image or PDF (Ctrl+V to paste)",
1068
- children: /* @__PURE__ */ jsx2(ImagePlus, { className: "w-4 h-4" })
1065
+ children: "[ FILE ]"
1069
1066
  }
1070
1067
  ),
1071
1068
  actions
1072
1069
  ] }),
1073
- /* @__PURE__ */ jsx2("div", { className: "flex items-center gap-2", children: isGenerating ? /* @__PURE__ */ jsxs2(
1070
+ /* @__PURE__ */ jsx2("div", { className: "flex items-center gap-4", children: isGenerating ? /* @__PURE__ */ jsx2(
1074
1071
  "button",
1075
1072
  {
1076
1073
  type: "button",
1077
- className: "flex items-center justify-center h-8 px-4 rounded-none border border-red-500/50 bg-red-500/10 text-red-500 hover:bg-red-500/20 font-light text-[10px] uppercase tracking-widest transition-colors gap-2 cursor-pointer",
1074
+ className: "text-red-500 hover:opacity-70 font-light text-[11px] uppercase tracking-[0.2em] transition-opacity cursor-pointer",
1078
1075
  onClick: onStop,
1079
- children: [
1080
- /* @__PURE__ */ jsx2(Square, { className: "w-3 h-3 fill-current" }),
1081
- " STOP"
1082
- ]
1076
+ children: "[ STOP ]"
1083
1077
  }
1084
1078
  ) : /* @__PURE__ */ jsx2(
1085
1079
  "button",
1086
1080
  {
1087
1081
  type: "button",
1088
- className: `flex items-center justify-center h-8 px-4 rounded-none border text-[10px] font-light uppercase tracking-widest transition-colors gap-2 ${canSend ? "border-white/30 bg-transparent text-white hover:bg-white hover:text-black cursor-pointer" : "border-white/10 bg-transparent text-white/20 cursor-not-allowed"}`,
1082
+ className: `text-[11px] font-light uppercase tracking-[0.2em] transition-opacity ${canSend ? "text-current opacity-100 hover:opacity-70 cursor-pointer" : "text-current opacity-20 cursor-not-allowed"}`,
1089
1083
  onClick: onSend,
1090
1084
  disabled: !canSend,
1091
- children: "SEND"
1085
+ children: "[ SEND ]"
1092
1086
  }
1093
1087
  ) })
1094
1088
  ] })
@@ -1098,7 +1092,7 @@ ${newText}` : newText);
1098
1092
  }
1099
1093
 
1100
1094
  // src/react/components.tsx
1101
- import { RotateCcw, ChevronDown, AlertCircle } from "lucide-react";
1095
+ import { AlertCircle } from "lucide-react";
1102
1096
  import { clsx } from "clsx";
1103
1097
  import { twMerge } from "tailwind-merge";
1104
1098
  import { Streamdown, parseMarkdownIntoBlocks } from "streamdown";
@@ -1203,26 +1197,27 @@ function ModelSelector({
1203
1197
  return label;
1204
1198
  }, [currentModel]);
1205
1199
  return /* @__PURE__ */ jsxs3("div", { className: "relative font-mono", ref, children: [
1206
- /* @__PURE__ */ jsxs3(
1200
+ /* @__PURE__ */ jsx3(
1207
1201
  "button",
1208
1202
  {
1209
1203
  type: "button",
1210
- className: "flex items-center gap-2 px-3 py-1.5 border border-white/30 bg-transparent text-white hover:bg-white hover:text-black text-xs font-light uppercase tracking-widest transition-colors",
1204
+ className: "flex items-center gap-2 px-0 py-1.5 bg-transparent text-current hover:opacity-70 text-[11px] font-light uppercase tracking-widest transition-opacity",
1211
1205
  onClick: () => setIsOpen(!isOpen),
1212
- children: [
1213
- /* @__PURE__ */ jsx3("span", { children: displayModel }),
1214
- /* @__PURE__ */ jsx3(ChevronDown, { className: "w-4 h-4" })
1215
- ]
1206
+ children: /* @__PURE__ */ jsxs3("span", { children: [
1207
+ "[ ",
1208
+ displayModel,
1209
+ " ]"
1210
+ ] })
1216
1211
  }
1217
1212
  ),
1218
- isOpen && /* @__PURE__ */ jsxs3("div", { className: "absolute top-[calc(100%+8px)] left-0 w-72 max-h-[300px] overflow-y-auto bg-black border border-white/30 z-50 p-2 scrollbar-none", children: [
1219
- /* @__PURE__ */ jsx3("div", { className: "px-3 py-2 text-[10px] font-light text-white/50 uppercase tracking-widest border-b border-white/10 mb-1", children: "WebLLM" }),
1213
+ isOpen && /* @__PURE__ */ jsxs3("div", { className: "absolute top-[calc(100%+8px)] left-0 w-72 max-h-[300px] overflow-y-auto bg-black dark:bg-white border border-white/20 dark:border-black/20 z-50 p-2 scrollbar-none", children: [
1214
+ /* @__PURE__ */ jsx3("div", { className: "px-3 py-2 text-[10px] font-light text-current opacity-50 uppercase tracking-widest border-b border-white/10 dark:border-black/10 mb-1", children: "WebLLM" }),
1220
1215
  Object.entries(WEBLLM_MODELS).map(([key, value]) => /* @__PURE__ */ jsxs3(
1221
1216
  "button",
1222
1217
  {
1223
1218
  className: cn(
1224
- "block w-full text-left px-3 py-2.5 text-xs font-light uppercase tracking-wider truncate transition-colors",
1225
- currentModel === value ? "bg-white text-black" : "text-white hover:bg-white/10"
1219
+ "block w-full text-left px-3 py-2.5 text-[11px] font-light uppercase tracking-widest truncate transition-colors text-current",
1220
+ currentModel === value ? "bg-white text-black dark:bg-black dark:text-white" : "hover:bg-white/10 dark:hover:bg-black/10"
1226
1221
  ),
1227
1222
  onClick: () => {
1228
1223
  onSelect(value);
@@ -1231,18 +1226,18 @@ function ModelSelector({
1231
1226
  children: [
1232
1227
  key,
1233
1228
  " ",
1234
- isVisionModel2(value) && /* @__PURE__ */ jsx3("span", { className: "ml-2 px-1.5 py-0.5 border border-current text-[9px]", children: "VISION" })
1229
+ isVisionModel2(value) && /* @__PURE__ */ jsx3("span", { className: "ml-2 text-[9px] opacity-50", children: "[VISION]" })
1235
1230
  ]
1236
1231
  },
1237
1232
  key
1238
1233
  )),
1239
- /* @__PURE__ */ jsx3("div", { className: "px-3 py-2 text-[10px] font-light text-white/50 uppercase tracking-widest mt-4 border-b border-white/10 mb-1", children: "Transformers.js" }),
1234
+ /* @__PURE__ */ jsx3("div", { className: "px-3 py-2 text-[10px] font-light opacity-50 uppercase tracking-widest mt-4 border-b border-white/10 dark:border-black/10 mb-1", children: "Transformers.js" }),
1240
1235
  Object.entries(TRANSFORMERS_MODELS).map(([key, value]) => /* @__PURE__ */ jsxs3(
1241
1236
  "button",
1242
1237
  {
1243
1238
  className: cn(
1244
- "block w-full text-left px-3 py-2.5 text-xs font-light uppercase tracking-wider truncate transition-colors",
1245
- currentModel === value ? "bg-white text-black" : "text-white hover:bg-white/10"
1239
+ "block w-full text-left px-3 py-2.5 text-[11px] font-light uppercase tracking-widest truncate transition-colors text-current",
1240
+ currentModel === value ? "bg-white text-black dark:bg-black dark:text-white" : "hover:bg-white/10 dark:hover:bg-black/10"
1246
1241
  ),
1247
1242
  onClick: () => {
1248
1243
  onSelect(value);
@@ -1251,7 +1246,7 @@ function ModelSelector({
1251
1246
  children: [
1252
1247
  key,
1253
1248
  " ",
1254
- isVisionModel2(value) && /* @__PURE__ */ jsx3("span", { className: "ml-2 px-1.5 py-0.5 border border-current text-[9px]", children: "VISION" })
1249
+ isVisionModel2(value) && /* @__PURE__ */ jsx3("span", { className: "ml-2 text-[9px] opacity-50", children: "[VISION]" })
1255
1250
  ]
1256
1251
  },
1257
1252
  key
@@ -1394,66 +1389,75 @@ ${systemPrompt}` : systemPrompt;
1394
1389
  setStreamingText("");
1395
1390
  }
1396
1391
  };
1397
- return /* @__PURE__ */ jsxs3("div", { className: cn("flex flex-col bg-black text-white font-mono rounded-none overflow-hidden", className), style: { maxHeight, height: "100%" }, children: [
1398
- showHeader && /* @__PURE__ */ jsxs3("div", { className: "flex items-center justify-between px-6 py-4 bg-black border-b border-white/30", children: [
1399
- onModelChange ? /* @__PURE__ */ jsx3(
1400
- ModelSelector,
1392
+ const [localTheme, setLocalTheme] = useState3(theme || "dark");
1393
+ useEffect3(() => {
1394
+ if (theme) setLocalTheme(theme);
1395
+ }, [theme]);
1396
+ const toggleTheme = () => {
1397
+ setLocalTheme((prev) => prev === "dark" ? "light" : "dark");
1398
+ };
1399
+ return /* @__PURE__ */ jsxs3("div", { className: cn(
1400
+ "flex flex-col font-mono rounded-none overflow-hidden transition-colors duration-300",
1401
+ localTheme === "dark" ? "bg-black text-[#fafafa] dark" : "bg-[#fafafa] text-black",
1402
+ className
1403
+ ), style: { maxHeight, height: "100%" }, children: [
1404
+ showHeader && /* @__PURE__ */ jsxs3("div", { className: "flex items-center justify-between px-6 py-6 bg-transparent border-b border-current/10", children: [
1405
+ /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-6", children: [
1406
+ /* @__PURE__ */ jsx3("span", { className: "text-[11px] font-light tracking-[0.2em] uppercase opacity-70", children: error ? "ERR" : isReady ? "RDY" : isLoading ? "LOD" : "IDL" }),
1407
+ onModelChange ? /* @__PURE__ */ jsx3(
1408
+ ModelSelector,
1409
+ {
1410
+ currentModel: modelId,
1411
+ onSelect: onModelChange
1412
+ }
1413
+ ) : /* @__PURE__ */ jsx3("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsxs3("span", { className: "text-[11px] font-light uppercase tracking-[0.2em]", children: [
1414
+ "[ ",
1415
+ modelId?.split("/").pop(),
1416
+ " ]"
1417
+ ] }) })
1418
+ ] }),
1419
+ /* @__PURE__ */ jsx3("div", { className: "flex items-center gap-6", children: /* @__PURE__ */ jsxs3(
1420
+ "button",
1401
1421
  {
1402
- currentModel: modelId,
1403
- onSelect: onModelChange
1422
+ onClick: toggleTheme,
1423
+ className: "text-[11px] tracking-[0.2em] uppercase font-light opacity-50 hover:opacity-100 transition-opacity",
1424
+ children: [
1425
+ "[ ",
1426
+ localTheme === "dark" ? "LIGHT" : "DARK",
1427
+ " ]"
1428
+ ]
1404
1429
  }
1405
- ) : /* @__PURE__ */ jsxs3("div", { className: "px-3 py-1.5 border border-white/30 flex items-center gap-3", children: [
1406
- /* @__PURE__ */ jsx3("span", { className: "text-xs font-light uppercase tracking-widest text-white", children: modelId?.split("/").pop() }),
1407
- modelId && isVisionModel2(modelId) && /* @__PURE__ */ jsx3("span", { className: "px-1.5 py-0.5 border border-white/30 text-[9px] font-light uppercase tracking-widest text-white bg-transparent", children: "VISION" })
1408
- ] }),
1409
- /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-3", children: [
1410
- /* @__PURE__ */ jsx3("span", { className: "text-[10px] font-light tracking-widest text-white uppercase opacity-70", children: error ? "ERR" : isReady ? "RDY" : isLoading ? "LOD" : "IDL" }),
1411
- /* @__PURE__ */ jsx3("div", { className: cn(
1412
- "w-2 h-2 rounded-none",
1413
- error ? "bg-red-500" : isReady ? "bg-white" : "bg-white/30 animate-pulse"
1414
- ) })
1415
- ] })
1430
+ ) })
1416
1431
  ] }),
1417
- showProgress && isLoading && loadProgress && /* @__PURE__ */ jsxs3("div", { className: "px-6 py-4 border-b border-white/30 bg-black", children: [
1418
- /* @__PURE__ */ jsxs3("div", { className: "flex justify-between items-center mb-2 font-mono uppercase tracking-widest text-[10px]", children: [
1419
- /* @__PURE__ */ jsx3("span", { className: "text-white/70 font-light truncate pr-4", children: loadProgress.status }),
1420
- /* @__PURE__ */ jsxs3("span", { className: "font-light text-white/70", children: [
1432
+ showProgress && isLoading && loadProgress && /* @__PURE__ */ jsxs3("div", { className: "px-6 py-4 border-b border-current/10 bg-transparent", children: [
1433
+ /* @__PURE__ */ jsxs3("div", { className: "flex justify-between items-center mb-2 font-mono uppercase tracking-[0.2em] text-[10px]", children: [
1434
+ /* @__PURE__ */ jsx3("span", { className: "opacity-50 font-light truncate pr-4", children: loadProgress.status }),
1435
+ /* @__PURE__ */ jsxs3("span", { className: "font-light opacity-50", children: [
1421
1436
  Math.round(loadProgress.progress),
1422
1437
  "%"
1423
1438
  ] })
1424
1439
  ] }),
1425
- /* @__PURE__ */ jsx3("div", { className: "h-1 w-full bg-white/10 rounded-none overflow-hidden relative", children: /* @__PURE__ */ jsx3(
1440
+ /* @__PURE__ */ jsx3("div", { className: "h-[1px] w-full bg-current/10 rounded-none overflow-hidden relative", children: /* @__PURE__ */ jsx3(
1426
1441
  "div",
1427
1442
  {
1428
- className: "h-full bg-white transition-all duration-300 ease-out",
1443
+ className: "h-full bg-current transition-all duration-300 ease-out",
1429
1444
  style: { width: `${Math.min(100, loadProgress.progress)}%` }
1430
1445
  }
1431
1446
  ) })
1432
1447
  ] }),
1433
- error && /* @__PURE__ */ jsxs3("div", { className: "flex flex-col sm:flex-row items-start sm:items-center justify-between mx-6 mt-6 p-4 border border-red-500/50 bg-red-500/10 rounded-none gap-4", children: [
1434
- /* @__PURE__ */ jsx3("span", { className: "text-[10px] text-red-500 font-light uppercase tracking-wider", children: error.message }),
1435
- /* @__PURE__ */ jsxs3(
1436
- "button",
1437
- {
1438
- className: "flex items-center gap-2 px-3 py-1.5 bg-transparent text-red-500 border border-red-500/50 hover:bg-red-500/20 transition-colors rounded-none text-[10px] font-light uppercase tracking-widest",
1439
- onClick: reload,
1440
- children: [
1441
- /* @__PURE__ */ jsx3(RotateCcw, { className: "w-3 h-3" }),
1442
- " REBOOT"
1443
- ]
1444
- }
1445
- )
1448
+ error && /* @__PURE__ */ jsxs3("div", { className: "mx-6 mt-6 p-4 border border-red-500/30 text-red-500 bg-transparent flex justify-between items-center text-[10px] tracking-[0.2em] uppercase", children: [
1449
+ /* @__PURE__ */ jsx3("span", { className: "font-light", children: error.message }),
1450
+ /* @__PURE__ */ jsx3("button", { onClick: reload, className: "hover:opacity-70 transition-opacity", children: "[ REBOOT ]" })
1446
1451
  ] }),
1447
- /* @__PURE__ */ jsxs3("div", { className: "flex-1 overflow-y-auto p-6 flex flex-col gap-6 scrollbar-thin scrollbar-thumb-white/20 scrollbar-track-transparent", children: [
1448
- !isLoading && messages.length === 0 && !error && /* @__PURE__ */ jsxs3("div", { className: "flex-1 flex flex-col items-center justify-center text-center mt-12 mb-8 p-8 border border-white/10", children: [
1449
- /* @__PURE__ */ jsx3("div", { className: "w-16 h-16 border border-white/30 mb-6 flex items-center justify-center text-xl font-light bg-transparent text-white/50", children: "//" }),
1450
- /* @__PURE__ */ jsx3("h3", { className: "text-xl font-light uppercase tracking-widest text-white/70 mb-4", children: "SYSTEM READY" }),
1451
- /* @__PURE__ */ jsx3("p", { className: "text-white/40 max-w-sm uppercase text-[10px] leading-relaxed tracking-widest font-light", children: "[ MARKDOWN | MATH | MERMAID ] INITIALIZED. AWAITING INPUT." })
1452
+ /* @__PURE__ */ jsxs3("div", { className: "flex-1 overflow-y-auto p-6 flex flex-col gap-12 scrollbar-none", children: [
1453
+ !isLoading && messages.length === 0 && !error && /* @__PURE__ */ jsxs3("div", { className: "flex-1 flex flex-col items-center justify-center text-center p-8", children: [
1454
+ /* @__PURE__ */ jsx3("h3", { className: "text-sm font-light uppercase tracking-[0.3em] opacity-50 mb-4", children: "SYSTEM READY" }),
1455
+ /* @__PURE__ */ jsx3("p", { className: "opacity-30 max-w-sm uppercase text-[10px] leading-relaxed tracking-[0.2em] font-light", children: "MARKDOWN INTERPRETER ACTIVE. AWAITING INPUT." })
1452
1456
  ] }),
1453
- messages.map((msg, i) => /* @__PURE__ */ jsx3("div", { className: "flex flex-col w-full", children: msg.role === "user" ? /* @__PURE__ */ jsxs3("div", { className: "bg-transparent text-white/50 px-4 py-4 border border-white/10 rounded-none w-full", children: [
1454
- /* @__PURE__ */ jsx3("div", { className: "mb-2 text-[10px] tracking-widest uppercase opacity-50", children: "USER" }),
1455
- msg.images && msg.images.length > 0 && /* @__PURE__ */ jsx3("div", { className: "flex flex-wrap gap-3 mb-4", children: msg.images.map((img) => /* @__PURE__ */ jsx3("img", { src: img.dataUrl, className: "w-24 h-24 object-cover border border-white/30", alt: "attachment" }, img.id)) }),
1456
- /* @__PURE__ */ jsx3("div", { className: "prose prose-base dark:prose-invert max-w-none font-mono", children: /* @__PURE__ */ jsx3(
1457
+ messages.map((msg, i) => /* @__PURE__ */ jsx3("div", { className: "flex flex-col w-full", children: msg.role === "user" ? /* @__PURE__ */ jsxs3("div", { className: "bg-transparent text-current py-2 w-full", children: [
1458
+ /* @__PURE__ */ jsx3("div", { className: "mb-4 text-[10px] tracking-[0.2em] uppercase opacity-30", children: "USER" }),
1459
+ msg.images && msg.images.length > 0 && /* @__PURE__ */ jsx3("div", { className: "flex flex-wrap gap-3 mb-4", children: msg.images.map((img) => /* @__PURE__ */ jsx3("img", { src: img.dataUrl, className: "w-24 h-24 object-cover border border-current/20 grayscale", alt: "attachment" }, img.id)) }),
1460
+ /* @__PURE__ */ jsx3("div", { className: "prose prose-base dark:prose-invert max-w-none font-mono !text-current", children: /* @__PURE__ */ jsx3(
1457
1461
  Streamdown,
1458
1462
  {
1459
1463
  plugins: { code, mermaid, math },
@@ -1466,8 +1470,8 @@ ${systemPrompt}` : systemPrompt;
1466
1470
  children: msg.content
1467
1471
  }
1468
1472
  ) })
1469
- ] }) : /* @__PURE__ */ jsxs3("div", { className: "prose prose-base dark:prose-invert max-w-none px-4 py-4 w-full min-w-0 font-mono border border-white/10 bg-transparent mt-1", children: [
1470
- /* @__PURE__ */ jsx3("div", { className: "mb-2 text-[10px] tracking-widest uppercase opacity-50 text-white", children: "SYSTEM" }),
1473
+ ] }) : /* @__PURE__ */ jsxs3("div", { className: "prose prose-base dark:prose-invert max-w-none py-2 w-full min-w-0 font-mono bg-transparent mt-2 !text-current", children: [
1474
+ /* @__PURE__ */ jsx3("div", { className: "mb-4 text-[10px] tracking-[0.2em] uppercase opacity-30 text-current", children: "SYSTEM" }),
1471
1475
  /* @__PURE__ */ jsx3(
1472
1476
  Streamdown,
1473
1477
  {
@@ -1482,8 +1486,8 @@ ${systemPrompt}` : systemPrompt;
1482
1486
  }
1483
1487
  )
1484
1488
  ] }) }, i)),
1485
- streamingText && /* @__PURE__ */ jsx3("div", { className: "flex flex-col w-full mt-1", children: /* @__PURE__ */ jsxs3("div", { className: "prose prose-base dark:prose-invert max-w-none px-4 py-4 w-full min-w-0 font-mono border border-white/10 bg-transparent", children: [
1486
- /* @__PURE__ */ jsx3("div", { className: "mb-2 text-[10px] tracking-widest uppercase opacity-50 text-white", children: "SYSTEM" }),
1489
+ streamingText && /* @__PURE__ */ jsx3("div", { className: "flex flex-col w-full mt-2", children: /* @__PURE__ */ jsxs3("div", { className: "prose prose-base dark:prose-invert max-w-none py-2 w-full min-w-0 font-mono bg-transparent !text-current", children: [
1490
+ /* @__PURE__ */ jsx3("div", { className: "mb-4 text-[10px] tracking-[0.2em] uppercase opacity-30 text-current animate-pulse", children: "SYSTEM GENERATING" }),
1487
1491
  /* @__PURE__ */ jsx3(
1488
1492
  Streamdown,
1489
1493
  {
@@ -1501,7 +1505,7 @@ ${systemPrompt}` : systemPrompt;
1501
1505
  ] }) }),
1502
1506
  /* @__PURE__ */ jsx3("div", { ref: messagesEndRef, className: "h-4" })
1503
1507
  ] }),
1504
- /* @__PURE__ */ jsx3("div", { className: "p-4 bg-black border-t border-white/30", children: /* @__PURE__ */ jsx3(
1508
+ /* @__PURE__ */ jsx3("div", { className: "p-6 bg-transparent", children: /* @__PURE__ */ jsx3(
1505
1509
  ChatInput,
1506
1510
  {
1507
1511
  value: input,
package/dist/index.css CHANGED
@@ -2214,9 +2214,6 @@ video {
2214
2214
  .m-0 {
2215
2215
  margin: 0px;
2216
2216
  }
2217
- .m-1 {
2218
- margin: 0.25rem;
2219
- }
2220
2217
  .mx-4 {
2221
2218
  margin-left: 1rem;
2222
2219
  margin-right: 1rem;
@@ -2251,9 +2248,6 @@ video {
2251
2248
  .mb-6 {
2252
2249
  margin-bottom: 1.5rem;
2253
2250
  }
2254
- .mb-8 {
2255
- margin-bottom: 2rem;
2256
- }
2257
2251
  .ml-1 {
2258
2252
  margin-left: 0.25rem;
2259
2253
  }
@@ -2263,15 +2257,9 @@ video {
2263
2257
  .ml-6 {
2264
2258
  margin-left: 1.5rem;
2265
2259
  }
2266
- .mr-2 {
2267
- margin-right: 0.5rem;
2268
- }
2269
2260
  .mt-1 {
2270
2261
  margin-top: 0.25rem;
2271
2262
  }
2272
- .mt-12 {
2273
- margin-top: 3rem;
2274
- }
2275
2263
  .mt-2 {
2276
2264
  margin-top: 0.5rem;
2277
2265
  }
@@ -2316,21 +2304,12 @@ video {
2316
2304
  width: 100%;
2317
2305
  height: 100%;
2318
2306
  }
2319
- .h-1 {
2320
- height: 0.25rem;
2321
- }
2322
2307
  .h-16 {
2323
2308
  height: 4rem;
2324
2309
  }
2325
- .h-2 {
2326
- height: 0.5rem;
2327
- }
2328
2310
  .h-24 {
2329
2311
  height: 6rem;
2330
2312
  }
2331
- .h-3 {
2332
- height: 0.75rem;
2333
- }
2334
2313
  .h-4 {
2335
2314
  height: 1rem;
2336
2315
  }
@@ -2340,6 +2319,9 @@ video {
2340
2319
  .h-8 {
2341
2320
  height: 2rem;
2342
2321
  }
2322
+ .h-\[1px\] {
2323
+ height: 1px;
2324
+ }
2343
2325
  .h-\[46px\] {
2344
2326
  height: 46px;
2345
2327
  }
@@ -2367,15 +2349,9 @@ video {
2367
2349
  .w-16 {
2368
2350
  width: 4rem;
2369
2351
  }
2370
- .w-2 {
2371
- width: 0.5rem;
2372
- }
2373
2352
  .w-24 {
2374
2353
  width: 6rem;
2375
2354
  }
2376
- .w-3 {
2377
- width: 0.75rem;
2378
- }
2379
2355
  .w-4 {
2380
2356
  width: 1rem;
2381
2357
  }
@@ -2477,9 +2453,6 @@ video {
2477
2453
  .flex-wrap {
2478
2454
  flex-wrap: wrap;
2479
2455
  }
2480
- .items-start {
2481
- align-items: flex-start;
2482
- }
2483
2456
  .items-center {
2484
2457
  align-items: center;
2485
2458
  }
@@ -2495,6 +2468,9 @@ video {
2495
2468
  .gap-1 {
2496
2469
  gap: 0.25rem;
2497
2470
  }
2471
+ .gap-12 {
2472
+ gap: 3rem;
2473
+ }
2498
2474
  .gap-2 {
2499
2475
  gap: 0.5rem;
2500
2476
  }
@@ -2578,21 +2554,12 @@ video {
2578
2554
  .border-b-2 {
2579
2555
  border-bottom-width: 2px;
2580
2556
  }
2581
- .border-l {
2582
- border-left-width: 1px;
2583
- }
2584
2557
  .border-l-4 {
2585
2558
  border-left-width: 4px;
2586
2559
  }
2587
2560
  .border-r {
2588
2561
  border-right-width: 1px;
2589
2562
  }
2590
- .border-t {
2591
- border-top-width: 1px;
2592
- }
2593
- .border-dashed {
2594
- border-style: dashed;
2595
- }
2596
2563
  .border-none {
2597
2564
  border-style: none;
2598
2565
  }
@@ -2602,17 +2569,21 @@ video {
2602
2569
  .border-red-500\/20 {
2603
2570
  border-color: rgb(239 68 68 / 0.2);
2604
2571
  }
2605
- .border-red-500\/50 {
2606
- border-color: rgb(239 68 68 / 0.5);
2572
+ .border-red-500\/30 {
2573
+ border-color: rgb(239 68 68 / 0.3);
2607
2574
  }
2608
2575
  .border-white\/10 {
2609
2576
  border-color: rgb(255 255 255 / 0.1);
2610
2577
  }
2578
+ .border-white\/20 {
2579
+ border-color: rgb(255 255 255 / 0.2);
2580
+ }
2611
2581
  .border-white\/30 {
2612
2582
  border-color: rgb(255 255 255 / 0.3);
2613
2583
  }
2614
- .border-white\/50 {
2615
- border-color: rgb(255 255 255 / 0.5);
2584
+ .bg-\[\#fafafa\] {
2585
+ --tw-bg-opacity: 1;
2586
+ background-color: rgb(250 250 250 / var(--tw-bg-opacity, 1));
2616
2587
  }
2617
2588
  .bg-\[var\(--sdm-tbg\)\] {
2618
2589
  background-color: var(--sdm-tbg);
@@ -2627,8 +2598,8 @@ video {
2627
2598
  .bg-black\/80 {
2628
2599
  background-color: rgb(0 0 0 / 0.8);
2629
2600
  }
2630
- .bg-black\/90 {
2631
- background-color: rgb(0 0 0 / 0.9);
2601
+ .bg-current {
2602
+ background-color: currentColor;
2632
2603
  }
2633
2604
  .bg-red-100 {
2634
2605
  --tw-bg-opacity: 1;
@@ -2638,10 +2609,6 @@ video {
2638
2609
  --tw-bg-opacity: 1;
2639
2610
  background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));
2640
2611
  }
2641
- .bg-red-500 {
2642
- --tw-bg-opacity: 1;
2643
- background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));
2644
- }
2645
2612
  .bg-red-500\/10 {
2646
2613
  background-color: rgb(239 68 68 / 0.1);
2647
2614
  }
@@ -2655,15 +2622,6 @@ video {
2655
2622
  --tw-bg-opacity: 1;
2656
2623
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
2657
2624
  }
2658
- .bg-white\/10 {
2659
- background-color: rgb(255 255 255 / 0.1);
2660
- }
2661
- .bg-white\/30 {
2662
- background-color: rgb(255 255 255 / 0.3);
2663
- }
2664
- .fill-current {
2665
- fill: currentColor;
2666
- }
2667
2625
  .object-cover {
2668
2626
  -o-object-fit: cover;
2669
2627
  object-fit: cover;
@@ -2692,6 +2650,10 @@ video {
2692
2650
  .p-8 {
2693
2651
  padding: 2rem;
2694
2652
  }
2653
+ .px-0 {
2654
+ padding-left: 0px;
2655
+ padding-right: 0px;
2656
+ }
2695
2657
  .px-1\.5 {
2696
2658
  padding-left: 0.375rem;
2697
2659
  padding-right: 0.375rem;
@@ -2732,6 +2694,10 @@ video {
2732
2694
  padding-top: 1rem;
2733
2695
  padding-bottom: 1rem;
2734
2696
  }
2697
+ .py-6 {
2698
+ padding-top: 1.5rem;
2699
+ padding-bottom: 1.5rem;
2700
+ }
2735
2701
  .pb-2 {
2736
2702
  padding-bottom: 0.5rem;
2737
2703
  }
@@ -2741,9 +2707,6 @@ video {
2741
2707
  .pr-4 {
2742
2708
  padding-right: 1rem;
2743
2709
  }
2744
- .pt-3 {
2745
- padding-top: 0.75rem;
2746
- }
2747
2710
  .text-left {
2748
2711
  text-align: left;
2749
2712
  }
@@ -2782,6 +2745,15 @@ video {
2782
2745
  .text-\[10px\] {
2783
2746
  font-size: 10px;
2784
2747
  }
2748
+ .text-\[11px\] {
2749
+ font-size: 11px;
2750
+ }
2751
+ .text-\[13px\] {
2752
+ font-size: 13px;
2753
+ }
2754
+ .text-\[8px\] {
2755
+ font-size: 8px;
2756
+ }
2785
2757
  .text-\[9px\] {
2786
2758
  font-size: 9px;
2787
2759
  }
@@ -2826,15 +2798,25 @@ video {
2826
2798
  .leading-relaxed {
2827
2799
  line-height: 1.625;
2828
2800
  }
2801
+ .tracking-\[0\.2em\] {
2802
+ letter-spacing: 0.2em;
2803
+ }
2804
+ .tracking-\[0\.3em\] {
2805
+ letter-spacing: 0.3em;
2806
+ }
2829
2807
  .tracking-tight {
2830
2808
  letter-spacing: -0.025em;
2831
2809
  }
2832
- .tracking-wider {
2833
- letter-spacing: 0.05em;
2834
- }
2835
2810
  .tracking-widest {
2836
2811
  letter-spacing: 0.1em;
2837
2812
  }
2813
+ .\!text-current {
2814
+ color: currentColor !important;
2815
+ }
2816
+ .text-\[\#fafafa\] {
2817
+ --tw-text-opacity: 1;
2818
+ color: rgb(250 250 250 / var(--tw-text-opacity, 1));
2819
+ }
2838
2820
  .text-\[var\(--sdm-c\,inherit\)\] {
2839
2821
  color: var(--sdm-c,inherit);
2840
2822
  }
@@ -2842,6 +2824,9 @@ video {
2842
2824
  --tw-text-opacity: 1;
2843
2825
  color: rgb(0 0 0 / var(--tw-text-opacity, 1));
2844
2826
  }
2827
+ .text-current {
2828
+ color: currentColor;
2829
+ }
2845
2830
  .text-red-400\/80 {
2846
2831
  color: rgb(248 113 113 / 0.8);
2847
2832
  }
@@ -2865,21 +2850,12 @@ video {
2865
2850
  --tw-text-opacity: 1;
2866
2851
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
2867
2852
  }
2868
- .text-white\/20 {
2869
- color: rgb(255 255 255 / 0.2);
2870
- }
2871
- .text-white\/40 {
2872
- color: rgb(255 255 255 / 0.4);
2873
- }
2874
2853
  .text-white\/50 {
2875
2854
  color: rgb(255 255 255 / 0.5);
2876
2855
  }
2877
2856
  .text-white\/60 {
2878
2857
  color: rgb(255 255 255 / 0.6);
2879
2858
  }
2880
- .text-white\/70 {
2881
- color: rgb(255 255 255 / 0.7);
2882
- }
2883
2859
  .text-white\/80 {
2884
2860
  color: rgb(255 255 255 / 0.8);
2885
2861
  }
@@ -2889,6 +2865,15 @@ video {
2889
2865
  .opacity-0 {
2890
2866
  opacity: 0;
2891
2867
  }
2868
+ .opacity-100 {
2869
+ opacity: 1;
2870
+ }
2871
+ .opacity-20 {
2872
+ opacity: 0.2;
2873
+ }
2874
+ .opacity-30 {
2875
+ opacity: 0.3;
2876
+ }
2892
2877
  .opacity-50 {
2893
2878
  opacity: 0.5;
2894
2879
  }
@@ -3021,17 +3006,23 @@ video {
3021
3006
  .placeholder\:uppercase::placeholder {
3022
3007
  text-transform: uppercase;
3023
3008
  }
3024
- .placeholder\:tracking-widest::-moz-placeholder {
3025
- letter-spacing: 0.1em;
3009
+ .placeholder\:tracking-\[0\.2em\]::-moz-placeholder {
3010
+ letter-spacing: 0.2em;
3026
3011
  }
3027
- .placeholder\:tracking-widest::placeholder {
3028
- letter-spacing: 0.1em;
3012
+ .placeholder\:tracking-\[0\.2em\]::placeholder {
3013
+ letter-spacing: 0.2em;
3014
+ }
3015
+ .placeholder\:text-current::-moz-placeholder {
3016
+ color: currentColor;
3017
+ }
3018
+ .placeholder\:text-current::placeholder {
3019
+ color: currentColor;
3029
3020
  }
3030
- .placeholder\:text-white\/30::-moz-placeholder {
3031
- color: rgb(255 255 255 / 0.3);
3021
+ .placeholder\:opacity-30::-moz-placeholder {
3022
+ opacity: 0.3;
3032
3023
  }
3033
- .placeholder\:text-white\/30::placeholder {
3034
- color: rgb(255 255 255 / 0.3);
3024
+ .placeholder\:opacity-30::placeholder {
3025
+ opacity: 0.3;
3035
3026
  }
3036
3027
  .before\:mr-4::before {
3037
3028
  content: var(--tw-content);
@@ -3100,12 +3091,6 @@ video {
3100
3091
  --tw-content: var(--streamdown-caret);
3101
3092
  content: var(--tw-content);
3102
3093
  }
3103
- .focus-within\:border-white\/60:focus-within {
3104
- border-color: rgb(255 255 255 / 0.6);
3105
- }
3106
- .hover\:bg-red-500\/20:hover {
3107
- background-color: rgb(239 68 68 / 0.2);
3108
- }
3109
3094
  .hover\:bg-red-500\/30:hover {
3110
3095
  background-color: rgb(239 68 68 / 0.3);
3111
3096
  }
@@ -3123,9 +3108,11 @@ video {
3123
3108
  --tw-text-opacity: 1;
3124
3109
  color: rgb(0 0 0 / var(--tw-text-opacity, 1));
3125
3110
  }
3126
- .hover\:text-white:hover {
3127
- --tw-text-opacity: 1;
3128
- color: rgb(255 255 255 / var(--tw-text-opacity, 1));
3111
+ .hover\:opacity-100:hover {
3112
+ opacity: 1;
3113
+ }
3114
+ .hover\:opacity-70:hover {
3115
+ opacity: 0.7;
3129
3116
  }
3130
3117
  .disabled\:cursor-not-allowed:disabled {
3131
3118
  cursor: not-allowed;
@@ -3153,21 +3140,34 @@ video {
3153
3140
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
3154
3141
  }
3155
3142
  }
3156
- @media (min-width: 640px) {
3157
- .sm\:flex-row {
3158
- flex-direction: row;
3143
+ @media (prefers-color-scheme: dark) {
3144
+ .dark\:border-black\/10 {
3145
+ border-color: rgb(0 0 0 / 0.1);
3159
3146
  }
3160
- .sm\:items-center {
3161
- align-items: center;
3147
+ .dark\:border-black\/20 {
3148
+ border-color: rgb(0 0 0 / 0.2);
3162
3149
  }
3163
- }
3164
- @media (prefers-color-scheme: dark) {
3165
3150
  .dark\:bg-\[var\(--shiki-dark-bg\,var\(--sdm-tbg\)\)\] {
3166
3151
  background-color: var(--shiki-dark-bg,var(--sdm-tbg));
3167
3152
  }
3153
+ .dark\:bg-black {
3154
+ --tw-bg-opacity: 1;
3155
+ background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1));
3156
+ }
3157
+ .dark\:bg-white {
3158
+ --tw-bg-opacity: 1;
3159
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
3160
+ }
3168
3161
  .dark\:text-\[var\(--shiki-dark\,var\(--sdm-c\,inherit\)\)\] {
3169
3162
  color: var(--shiki-dark,var(--sdm-c,inherit));
3170
3163
  }
3164
+ .dark\:text-white {
3165
+ --tw-text-opacity: 1;
3166
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
3167
+ }
3168
+ .dark\:hover\:bg-black\/10:hover {
3169
+ background-color: rgb(0 0 0 / 0.1);
3170
+ }
3171
3171
  }
3172
3172
  .\[\&\:not\(\:first-child\)\]\:mt-4:not(:first-child) {
3173
3173
  margin-top: 1rem;
package/dist/index.js CHANGED
@@ -26,7 +26,7 @@ import {
26
26
  useCompletion,
27
27
  useLLM,
28
28
  useStream
29
- } from "./chunk-7YC6ECAU.js";
29
+ } from "./chunk-PTPT4EPO.js";
30
30
  export {
31
31
  Chat,
32
32
  ChatInput,
@@ -2214,9 +2214,6 @@ video {
2214
2214
  .m-0 {
2215
2215
  margin: 0px;
2216
2216
  }
2217
- .m-1 {
2218
- margin: 0.25rem;
2219
- }
2220
2217
  .mx-4 {
2221
2218
  margin-left: 1rem;
2222
2219
  margin-right: 1rem;
@@ -2251,9 +2248,6 @@ video {
2251
2248
  .mb-6 {
2252
2249
  margin-bottom: 1.5rem;
2253
2250
  }
2254
- .mb-8 {
2255
- margin-bottom: 2rem;
2256
- }
2257
2251
  .ml-1 {
2258
2252
  margin-left: 0.25rem;
2259
2253
  }
@@ -2263,15 +2257,9 @@ video {
2263
2257
  .ml-6 {
2264
2258
  margin-left: 1.5rem;
2265
2259
  }
2266
- .mr-2 {
2267
- margin-right: 0.5rem;
2268
- }
2269
2260
  .mt-1 {
2270
2261
  margin-top: 0.25rem;
2271
2262
  }
2272
- .mt-12 {
2273
- margin-top: 3rem;
2274
- }
2275
2263
  .mt-2 {
2276
2264
  margin-top: 0.5rem;
2277
2265
  }
@@ -2316,21 +2304,12 @@ video {
2316
2304
  width: 100%;
2317
2305
  height: 100%;
2318
2306
  }
2319
- .h-1 {
2320
- height: 0.25rem;
2321
- }
2322
2307
  .h-16 {
2323
2308
  height: 4rem;
2324
2309
  }
2325
- .h-2 {
2326
- height: 0.5rem;
2327
- }
2328
2310
  .h-24 {
2329
2311
  height: 6rem;
2330
2312
  }
2331
- .h-3 {
2332
- height: 0.75rem;
2333
- }
2334
2313
  .h-4 {
2335
2314
  height: 1rem;
2336
2315
  }
@@ -2340,6 +2319,9 @@ video {
2340
2319
  .h-8 {
2341
2320
  height: 2rem;
2342
2321
  }
2322
+ .h-\[1px\] {
2323
+ height: 1px;
2324
+ }
2343
2325
  .h-\[46px\] {
2344
2326
  height: 46px;
2345
2327
  }
@@ -2367,15 +2349,9 @@ video {
2367
2349
  .w-16 {
2368
2350
  width: 4rem;
2369
2351
  }
2370
- .w-2 {
2371
- width: 0.5rem;
2372
- }
2373
2352
  .w-24 {
2374
2353
  width: 6rem;
2375
2354
  }
2376
- .w-3 {
2377
- width: 0.75rem;
2378
- }
2379
2355
  .w-4 {
2380
2356
  width: 1rem;
2381
2357
  }
@@ -2477,9 +2453,6 @@ video {
2477
2453
  .flex-wrap {
2478
2454
  flex-wrap: wrap;
2479
2455
  }
2480
- .items-start {
2481
- align-items: flex-start;
2482
- }
2483
2456
  .items-center {
2484
2457
  align-items: center;
2485
2458
  }
@@ -2495,6 +2468,9 @@ video {
2495
2468
  .gap-1 {
2496
2469
  gap: 0.25rem;
2497
2470
  }
2471
+ .gap-12 {
2472
+ gap: 3rem;
2473
+ }
2498
2474
  .gap-2 {
2499
2475
  gap: 0.5rem;
2500
2476
  }
@@ -2578,21 +2554,12 @@ video {
2578
2554
  .border-b-2 {
2579
2555
  border-bottom-width: 2px;
2580
2556
  }
2581
- .border-l {
2582
- border-left-width: 1px;
2583
- }
2584
2557
  .border-l-4 {
2585
2558
  border-left-width: 4px;
2586
2559
  }
2587
2560
  .border-r {
2588
2561
  border-right-width: 1px;
2589
2562
  }
2590
- .border-t {
2591
- border-top-width: 1px;
2592
- }
2593
- .border-dashed {
2594
- border-style: dashed;
2595
- }
2596
2563
  .border-none {
2597
2564
  border-style: none;
2598
2565
  }
@@ -2602,17 +2569,21 @@ video {
2602
2569
  .border-red-500\/20 {
2603
2570
  border-color: rgb(239 68 68 / 0.2);
2604
2571
  }
2605
- .border-red-500\/50 {
2606
- border-color: rgb(239 68 68 / 0.5);
2572
+ .border-red-500\/30 {
2573
+ border-color: rgb(239 68 68 / 0.3);
2607
2574
  }
2608
2575
  .border-white\/10 {
2609
2576
  border-color: rgb(255 255 255 / 0.1);
2610
2577
  }
2578
+ .border-white\/20 {
2579
+ border-color: rgb(255 255 255 / 0.2);
2580
+ }
2611
2581
  .border-white\/30 {
2612
2582
  border-color: rgb(255 255 255 / 0.3);
2613
2583
  }
2614
- .border-white\/50 {
2615
- border-color: rgb(255 255 255 / 0.5);
2584
+ .bg-\[\#fafafa\] {
2585
+ --tw-bg-opacity: 1;
2586
+ background-color: rgb(250 250 250 / var(--tw-bg-opacity, 1));
2616
2587
  }
2617
2588
  .bg-\[var\(--sdm-tbg\)\] {
2618
2589
  background-color: var(--sdm-tbg);
@@ -2627,8 +2598,8 @@ video {
2627
2598
  .bg-black\/80 {
2628
2599
  background-color: rgb(0 0 0 / 0.8);
2629
2600
  }
2630
- .bg-black\/90 {
2631
- background-color: rgb(0 0 0 / 0.9);
2601
+ .bg-current {
2602
+ background-color: currentColor;
2632
2603
  }
2633
2604
  .bg-red-100 {
2634
2605
  --tw-bg-opacity: 1;
@@ -2638,10 +2609,6 @@ video {
2638
2609
  --tw-bg-opacity: 1;
2639
2610
  background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));
2640
2611
  }
2641
- .bg-red-500 {
2642
- --tw-bg-opacity: 1;
2643
- background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));
2644
- }
2645
2612
  .bg-red-500\/10 {
2646
2613
  background-color: rgb(239 68 68 / 0.1);
2647
2614
  }
@@ -2655,15 +2622,6 @@ video {
2655
2622
  --tw-bg-opacity: 1;
2656
2623
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
2657
2624
  }
2658
- .bg-white\/10 {
2659
- background-color: rgb(255 255 255 / 0.1);
2660
- }
2661
- .bg-white\/30 {
2662
- background-color: rgb(255 255 255 / 0.3);
2663
- }
2664
- .fill-current {
2665
- fill: currentColor;
2666
- }
2667
2625
  .object-cover {
2668
2626
  -o-object-fit: cover;
2669
2627
  object-fit: cover;
@@ -2692,6 +2650,10 @@ video {
2692
2650
  .p-8 {
2693
2651
  padding: 2rem;
2694
2652
  }
2653
+ .px-0 {
2654
+ padding-left: 0px;
2655
+ padding-right: 0px;
2656
+ }
2695
2657
  .px-1\.5 {
2696
2658
  padding-left: 0.375rem;
2697
2659
  padding-right: 0.375rem;
@@ -2732,6 +2694,10 @@ video {
2732
2694
  padding-top: 1rem;
2733
2695
  padding-bottom: 1rem;
2734
2696
  }
2697
+ .py-6 {
2698
+ padding-top: 1.5rem;
2699
+ padding-bottom: 1.5rem;
2700
+ }
2735
2701
  .pb-2 {
2736
2702
  padding-bottom: 0.5rem;
2737
2703
  }
@@ -2741,9 +2707,6 @@ video {
2741
2707
  .pr-4 {
2742
2708
  padding-right: 1rem;
2743
2709
  }
2744
- .pt-3 {
2745
- padding-top: 0.75rem;
2746
- }
2747
2710
  .text-left {
2748
2711
  text-align: left;
2749
2712
  }
@@ -2782,6 +2745,15 @@ video {
2782
2745
  .text-\[10px\] {
2783
2746
  font-size: 10px;
2784
2747
  }
2748
+ .text-\[11px\] {
2749
+ font-size: 11px;
2750
+ }
2751
+ .text-\[13px\] {
2752
+ font-size: 13px;
2753
+ }
2754
+ .text-\[8px\] {
2755
+ font-size: 8px;
2756
+ }
2785
2757
  .text-\[9px\] {
2786
2758
  font-size: 9px;
2787
2759
  }
@@ -2826,15 +2798,25 @@ video {
2826
2798
  .leading-relaxed {
2827
2799
  line-height: 1.625;
2828
2800
  }
2801
+ .tracking-\[0\.2em\] {
2802
+ letter-spacing: 0.2em;
2803
+ }
2804
+ .tracking-\[0\.3em\] {
2805
+ letter-spacing: 0.3em;
2806
+ }
2829
2807
  .tracking-tight {
2830
2808
  letter-spacing: -0.025em;
2831
2809
  }
2832
- .tracking-wider {
2833
- letter-spacing: 0.05em;
2834
- }
2835
2810
  .tracking-widest {
2836
2811
  letter-spacing: 0.1em;
2837
2812
  }
2813
+ .\!text-current {
2814
+ color: currentColor !important;
2815
+ }
2816
+ .text-\[\#fafafa\] {
2817
+ --tw-text-opacity: 1;
2818
+ color: rgb(250 250 250 / var(--tw-text-opacity, 1));
2819
+ }
2838
2820
  .text-\[var\(--sdm-c\,inherit\)\] {
2839
2821
  color: var(--sdm-c,inherit);
2840
2822
  }
@@ -2842,6 +2824,9 @@ video {
2842
2824
  --tw-text-opacity: 1;
2843
2825
  color: rgb(0 0 0 / var(--tw-text-opacity, 1));
2844
2826
  }
2827
+ .text-current {
2828
+ color: currentColor;
2829
+ }
2845
2830
  .text-red-400\/80 {
2846
2831
  color: rgb(248 113 113 / 0.8);
2847
2832
  }
@@ -2865,21 +2850,12 @@ video {
2865
2850
  --tw-text-opacity: 1;
2866
2851
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
2867
2852
  }
2868
- .text-white\/20 {
2869
- color: rgb(255 255 255 / 0.2);
2870
- }
2871
- .text-white\/40 {
2872
- color: rgb(255 255 255 / 0.4);
2873
- }
2874
2853
  .text-white\/50 {
2875
2854
  color: rgb(255 255 255 / 0.5);
2876
2855
  }
2877
2856
  .text-white\/60 {
2878
2857
  color: rgb(255 255 255 / 0.6);
2879
2858
  }
2880
- .text-white\/70 {
2881
- color: rgb(255 255 255 / 0.7);
2882
- }
2883
2859
  .text-white\/80 {
2884
2860
  color: rgb(255 255 255 / 0.8);
2885
2861
  }
@@ -2889,6 +2865,15 @@ video {
2889
2865
  .opacity-0 {
2890
2866
  opacity: 0;
2891
2867
  }
2868
+ .opacity-100 {
2869
+ opacity: 1;
2870
+ }
2871
+ .opacity-20 {
2872
+ opacity: 0.2;
2873
+ }
2874
+ .opacity-30 {
2875
+ opacity: 0.3;
2876
+ }
2892
2877
  .opacity-50 {
2893
2878
  opacity: 0.5;
2894
2879
  }
@@ -3021,17 +3006,23 @@ video {
3021
3006
  .placeholder\:uppercase::placeholder {
3022
3007
  text-transform: uppercase;
3023
3008
  }
3024
- .placeholder\:tracking-widest::-moz-placeholder {
3025
- letter-spacing: 0.1em;
3009
+ .placeholder\:tracking-\[0\.2em\]::-moz-placeholder {
3010
+ letter-spacing: 0.2em;
3026
3011
  }
3027
- .placeholder\:tracking-widest::placeholder {
3028
- letter-spacing: 0.1em;
3012
+ .placeholder\:tracking-\[0\.2em\]::placeholder {
3013
+ letter-spacing: 0.2em;
3014
+ }
3015
+ .placeholder\:text-current::-moz-placeholder {
3016
+ color: currentColor;
3017
+ }
3018
+ .placeholder\:text-current::placeholder {
3019
+ color: currentColor;
3029
3020
  }
3030
- .placeholder\:text-white\/30::-moz-placeholder {
3031
- color: rgb(255 255 255 / 0.3);
3021
+ .placeholder\:opacity-30::-moz-placeholder {
3022
+ opacity: 0.3;
3032
3023
  }
3033
- .placeholder\:text-white\/30::placeholder {
3034
- color: rgb(255 255 255 / 0.3);
3024
+ .placeholder\:opacity-30::placeholder {
3025
+ opacity: 0.3;
3035
3026
  }
3036
3027
  .before\:mr-4::before {
3037
3028
  content: var(--tw-content);
@@ -3100,12 +3091,6 @@ video {
3100
3091
  --tw-content: var(--streamdown-caret);
3101
3092
  content: var(--tw-content);
3102
3093
  }
3103
- .focus-within\:border-white\/60:focus-within {
3104
- border-color: rgb(255 255 255 / 0.6);
3105
- }
3106
- .hover\:bg-red-500\/20:hover {
3107
- background-color: rgb(239 68 68 / 0.2);
3108
- }
3109
3094
  .hover\:bg-red-500\/30:hover {
3110
3095
  background-color: rgb(239 68 68 / 0.3);
3111
3096
  }
@@ -3123,9 +3108,11 @@ video {
3123
3108
  --tw-text-opacity: 1;
3124
3109
  color: rgb(0 0 0 / var(--tw-text-opacity, 1));
3125
3110
  }
3126
- .hover\:text-white:hover {
3127
- --tw-text-opacity: 1;
3128
- color: rgb(255 255 255 / var(--tw-text-opacity, 1));
3111
+ .hover\:opacity-100:hover {
3112
+ opacity: 1;
3113
+ }
3114
+ .hover\:opacity-70:hover {
3115
+ opacity: 0.7;
3129
3116
  }
3130
3117
  .disabled\:cursor-not-allowed:disabled {
3131
3118
  cursor: not-allowed;
@@ -3153,21 +3140,34 @@ video {
3153
3140
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
3154
3141
  }
3155
3142
  }
3156
- @media (min-width: 640px) {
3157
- .sm\:flex-row {
3158
- flex-direction: row;
3143
+ @media (prefers-color-scheme: dark) {
3144
+ .dark\:border-black\/10 {
3145
+ border-color: rgb(0 0 0 / 0.1);
3159
3146
  }
3160
- .sm\:items-center {
3161
- align-items: center;
3147
+ .dark\:border-black\/20 {
3148
+ border-color: rgb(0 0 0 / 0.2);
3162
3149
  }
3163
- }
3164
- @media (prefers-color-scheme: dark) {
3165
3150
  .dark\:bg-\[var\(--shiki-dark-bg\,var\(--sdm-tbg\)\)\] {
3166
3151
  background-color: var(--shiki-dark-bg,var(--sdm-tbg));
3167
3152
  }
3153
+ .dark\:bg-black {
3154
+ --tw-bg-opacity: 1;
3155
+ background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1));
3156
+ }
3157
+ .dark\:bg-white {
3158
+ --tw-bg-opacity: 1;
3159
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
3160
+ }
3168
3161
  .dark\:text-\[var\(--shiki-dark\,var\(--sdm-c\,inherit\)\)\] {
3169
3162
  color: var(--shiki-dark,var(--sdm-c,inherit));
3170
3163
  }
3164
+ .dark\:text-white {
3165
+ --tw-text-opacity: 1;
3166
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
3167
+ }
3168
+ .dark\:hover\:bg-black\/10:hover {
3169
+ background-color: rgb(0 0 0 / 0.1);
3170
+ }
3171
3171
  }
3172
3172
  .\[\&\:not\(\:first-child\)\]\:mt-4:not(:first-child) {
3173
3173
  margin-top: 1rem;
@@ -9,7 +9,7 @@ import {
9
9
  useCompletion,
10
10
  useLLM,
11
11
  useStream
12
- } from "../chunk-7YC6ECAU.js";
12
+ } from "../chunk-PTPT4EPO.js";
13
13
  export {
14
14
  Chat,
15
15
  ChatApp,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blank-utils/llm",
3
- "version": "0.3.20",
3
+ "version": "0.4.0",
4
4
  "description": "Run LLMs directly in your browser with WebGPU acceleration. Supports React hooks and eager background loading.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",