@blank-utils/llm 0.3.18 → 0.3.20

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 { Send, Square, ImagePlus, X } from "lucide-react";
897
+ import { Square, ImagePlus, X } from "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-[#fafafa] dark:bg-black border-2 border-black dark:border-white rounded-none focus-within:ring-0 focus-within:border-black dark:focus-within:border-white transition-none p-4 font-mono ${className}`,
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}`,
1010
1010
  onDragOver: (e) => {
1011
1011
  e.preventDefault();
1012
1012
  setIsDragging(true);
@@ -1014,9 +1014,9 @@ ${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-[#fafafa]/90 dark:bg-black/90 flex flex-col items-center justify-center z-20 border-4 border-dashed border-black dark:border-white rounded-none mx-2 my-2", children: [
1018
- /* @__PURE__ */ jsx2(ImagePlus, { className: "w-10 h-10 text-black dark:text-white mb-4" }),
1019
- /* @__PURE__ */ jsx2("span", { className: "text-black dark:text-white font-bold tracking-widest uppercase text-lg", children: "Drop file to attach" })
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
1020
  ] }),
1021
1021
  /* @__PURE__ */ jsx2(
1022
1022
  "input",
@@ -1029,15 +1029,15 @@ ${newText}` : newText);
1029
1029
  onChange: handleFileSelect
1030
1030
  }
1031
1031
  ),
1032
- images.length > 0 && /* @__PURE__ */ jsx2("div", { className: "flex flex-wrap gap-3 mb-4 px-2 mt-2", children: images.map((img) => /* @__PURE__ */ jsxs2("div", { className: "relative w-20 h-20 overflow-hidden border-2 border-black dark:border-white rounded-none group select-none", children: [
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: [
1033
1033
  /* @__PURE__ */ jsx2("img", { src: img.dataUrl, alt: "attachment", className: "w-full h-full object-cover grayscale transition-all group-hover:grayscale-0" }),
1034
1034
  /* @__PURE__ */ jsx2(
1035
1035
  "button",
1036
1036
  {
1037
1037
  type: "button",
1038
- className: "absolute top-0 right-0 w-6 h-6 bg-black text-white dark:bg-white dark:text-black border-l-2 border-b-2 border-black dark:border-white rounded-none flex items-center justify-center opacity-0 group-hover:opacity-100 transition-none",
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",
1039
1039
  onClick: () => onImageRemove?.(img.id),
1040
- children: /* @__PURE__ */ jsx2(X, { className: "w-4 h-4" })
1040
+ children: /* @__PURE__ */ jsx2(X, { className: "w-3 h-3" })
1041
1041
  }
1042
1042
  )
1043
1043
  ] }, img.id)) }),
@@ -1052,46 +1052,43 @@ ${newText}` : newText);
1052
1052
  placeholder,
1053
1053
  disabled: disabled && !isGenerating,
1054
1054
  rows: 1,
1055
- className: "w-full min-h-[24px] max-h-[200px] resize-none border-none outline-none bg-transparent text-black dark:text-white text-base font-mono leading-relaxed px-2 py-1 m-0 placeholder:text-black/30 dark:placeholder:text-white/30 placeholder:uppercase placeholder:tracking-widest scrollbar-thin scrollbar-thumb-black dark:scrollbar-thumb-white scrollbar-track-transparent"
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"
1056
1056
  }
1057
1057
  ),
1058
- /* @__PURE__ */ jsxs2("div", { className: "flex items-end justify-between mt-6 px-2", children: [
1059
- /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-3", children: [
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
1060
  modelSelector && /* @__PURE__ */ jsx2("div", { className: "mr-2", children: modelSelector }),
1061
1061
  /* @__PURE__ */ jsx2(
1062
1062
  "button",
1063
1063
  {
1064
1064
  type: "button",
1065
- className: "flex items-center justify-center w-10 h-10 border-2 border-black dark:border-white rounded-none text-black dark:text-white hover:bg-black hover:text-white dark:hover:bg-white dark:hover:text-black transition-colors",
1065
+ className: "flex items-center justify-center w-8 h-8 rounded-none text-white/50 hover:text-white transition-colors",
1066
1066
  onClick: () => fileInputRef.current?.click(),
1067
1067
  title: "Attach image or PDF (Ctrl+V to paste)",
1068
- children: /* @__PURE__ */ jsx2(ImagePlus, { className: "w-5 h-5" })
1068
+ children: /* @__PURE__ */ jsx2(ImagePlus, { className: "w-4 h-4" })
1069
1069
  }
1070
1070
  ),
1071
1071
  actions
1072
1072
  ] }),
1073
- /* @__PURE__ */ jsx2("div", { className: "flex items-center gap-3", children: isGenerating ? /* @__PURE__ */ jsxs2(
1073
+ /* @__PURE__ */ jsx2("div", { className: "flex items-center gap-2", children: isGenerating ? /* @__PURE__ */ jsxs2(
1074
1074
  "button",
1075
1075
  {
1076
1076
  type: "button",
1077
- className: "flex items-center justify-center h-10 px-6 rounded-none border-2 border-red-500 bg-red-50 dark:bg-red-950/20 text-red-600 dark:text-red-400 hover:bg-red-500 hover:text-white font-bold uppercase tracking-widest transition-colors gap-2 cursor-pointer shadow-none",
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",
1078
1078
  onClick: onStop,
1079
1079
  children: [
1080
- /* @__PURE__ */ jsx2(Square, { className: "w-4 h-4 fill-current" }),
1080
+ /* @__PURE__ */ jsx2(Square, { className: "w-3 h-3 fill-current" }),
1081
1081
  " STOP"
1082
1082
  ]
1083
1083
  }
1084
- ) : /* @__PURE__ */ jsxs2(
1084
+ ) : /* @__PURE__ */ jsx2(
1085
1085
  "button",
1086
1086
  {
1087
1087
  type: "button",
1088
- className: `flex items-center justify-center h-10 px-6 rounded-none border-2 font-bold uppercase tracking-widest transition-none gap-2 ${canSend ? "border-black dark:border-white bg-black dark:bg-white text-[#fafafa] dark:text-black hover:bg-transparent hover:text-black dark:hover:bg-transparent dark:hover:text-white cursor-pointer" : "border-black/20 dark:border-white/20 bg-transparent text-black/20 dark:text-white/20 cursor-not-allowed"}`,
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"}`,
1089
1089
  onClick: onSend,
1090
1090
  disabled: !canSend,
1091
- children: [
1092
- "SEND ",
1093
- /* @__PURE__ */ jsx2(Send, { className: "w-4 h-4" })
1094
- ]
1091
+ children: "SEND"
1095
1092
  }
1096
1093
  ) })
1097
1094
  ] })
@@ -1166,20 +1163,20 @@ function isVisionModel2(modelId) {
1166
1163
  return lower.includes("vl") || lower.includes("vision") || lower.includes("moondream");
1167
1164
  }
1168
1165
  var markdownComponents = {
1169
- h1: ({ children }) => /* @__PURE__ */ jsx3("h1", { className: "text-3xl font-bold uppercase tracking-tight mt-8 mb-4 text-black dark:text-white border-b-2 border-black dark:border-white pb-2", children }),
1170
- h2: ({ children }) => /* @__PURE__ */ jsx3("h2", { className: "text-2xl font-bold uppercase tracking-tight mt-8 mb-4 text-black dark:text-white border-b-2 border-black dark:border-white pb-2", children }),
1171
- h3: ({ children }) => /* @__PURE__ */ jsx3("h3", { className: "text-xl font-bold uppercase tracking-tight mt-6 mb-3 text-black dark:text-white", children }),
1172
- h4: ({ children }) => /* @__PURE__ */ jsx3("h4", { className: "text-lg font-bold uppercase tracking-tight mt-4 mb-2 text-black dark:text-white", children }),
1173
- p: ({ children }) => /* @__PURE__ */ jsx3("p", { className: "leading-relaxed [&:not(:first-child)]:mt-5 text-black dark:text-white text-base font-mono", children }),
1174
- ul: ({ children }) => /* @__PURE__ */ jsx3("ul", { className: "my-5 ml-6 list-square [&>li]:mt-2 text-black dark:text-white font-mono", children }),
1175
- ol: ({ children }) => /* @__PURE__ */ jsx3("ol", { className: "my-5 ml-6 list-decimal [&>li]:mt-2 text-black dark:text-white font-mono", children }),
1166
+ h1: ({ children }) => /* @__PURE__ */ jsx3("h1", { className: "text-2xl font-light uppercase tracking-tight mt-6 mb-4 text-white border-b border-white/30 pb-2", children }),
1167
+ h2: ({ children }) => /* @__PURE__ */ jsx3("h2", { className: "text-xl font-light uppercase tracking-tight mt-6 mb-4 text-white border-b border-white/30 pb-2", children }),
1168
+ h3: ({ children }) => /* @__PURE__ */ jsx3("h3", { className: "text-lg font-light uppercase tracking-tight mt-4 mb-3 text-white", children }),
1169
+ h4: ({ children }) => /* @__PURE__ */ jsx3("h4", { className: "text-base font-light uppercase tracking-tight mt-4 mb-2 text-white", children }),
1170
+ p: ({ children }) => /* @__PURE__ */ jsx3("p", { className: "leading-relaxed [&:not(:first-child)]:mt-4 text-white/80 text-sm font-light font-mono", children }),
1171
+ ul: ({ children }) => /* @__PURE__ */ jsx3("ul", { className: "my-4 ml-6 list-square [&>li]:mt-2 text-white/80 font-mono text-sm font-light", children }),
1172
+ ol: ({ children }) => /* @__PURE__ */ jsx3("ol", { className: "my-4 ml-6 list-decimal [&>li]:mt-2 text-white/80 font-mono text-sm font-light", children }),
1176
1173
  li: ({ children }) => /* @__PURE__ */ jsx3("li", { children }),
1177
- blockquote: ({ children }) => /* @__PURE__ */ jsx3("blockquote", { className: "mt-5 border-l-4 border-black dark:border-white pl-4 italic text-black dark:text-white font-mono", children }),
1178
- a: ({ href, children }) => /* @__PURE__ */ jsx3("a", { href, className: "font-bold underline text-black dark:text-white hover:bg-black hover:text-white dark:hover:bg-white dark:hover:text-black transition-colors", target: "_blank", rel: "noopener noreferrer", children }),
1179
- table: ({ children }) => /* @__PURE__ */ jsx3("div", { className: "my-5 w-full overflow-y-auto border-2 border-black dark:border-white", children: /* @__PURE__ */ jsx3("table", { className: "w-full text-base font-mono", children }) }),
1180
- tr: ({ children }) => /* @__PURE__ */ jsx3("tr", { className: "m-0 border-b-2 border-black dark:border-white p-0 even:bg-black/5 dark:even:bg-white/5", children }),
1181
- th: ({ children }) => /* @__PURE__ */ jsx3("th", { className: "border-r-2 last:border-r-0 border-black dark:border-white bg-black dark:bg-white text-white dark:text-black px-4 py-2 font-bold uppercase text-left", children }),
1182
- td: ({ children }) => /* @__PURE__ */ jsx3("td", { className: "border-r-2 last:border-r-0 border-black dark:border-white px-4 py-2 text-left text-black dark:text-white", children })
1174
+ blockquote: ({ children }) => /* @__PURE__ */ jsx3("blockquote", { className: "mt-4 border border-white/30 p-4 italic text-white/60 font-mono text-sm font-light bg-transparent", children }),
1175
+ a: ({ href, children }) => /* @__PURE__ */ jsx3("a", { href, className: "underline text-white hover:bg-white hover:text-black transition-colors", target: "_blank", rel: "noopener noreferrer", children }),
1176
+ table: ({ children }) => /* @__PURE__ */ jsx3("div", { className: "my-4 w-full overflow-y-auto border border-white/30", children: /* @__PURE__ */ jsx3("table", { className: "w-full text-sm font-mono font-light text-white", children }) }),
1177
+ tr: ({ children }) => /* @__PURE__ */ jsx3("tr", { className: "m-0 border-b border-white/30 p-0 hover:bg-white/5", children }),
1178
+ th: ({ children }) => /* @__PURE__ */ jsx3("th", { className: "border-r border-white/30 last:border-r-0 text-white/50 px-4 py-2 font-light uppercase text-left", children }),
1179
+ td: ({ children }) => /* @__PURE__ */ jsx3("td", { className: "border-r border-white/30 last:border-r-0 px-4 py-2 text-left text-white/80", children })
1183
1180
  };
1184
1181
  function ModelSelector({
1185
1182
  currentModel,
@@ -1210,7 +1207,7 @@ function ModelSelector({
1210
1207
  "button",
1211
1208
  {
1212
1209
  type: "button",
1213
- className: "flex items-center gap-2 px-3 py-1.5 border-2 border-black dark:border-white bg-transparent text-black dark:text-white hover:bg-black hover:text-white dark:hover:bg-white dark:hover:text-black text-xs font-bold uppercase tracking-widest transition-colors",
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",
1214
1211
  onClick: () => setIsOpen(!isOpen),
1215
1212
  children: [
1216
1213
  /* @__PURE__ */ jsx3("span", { children: displayModel }),
@@ -1218,14 +1215,14 @@ function ModelSelector({
1218
1215
  ]
1219
1216
  }
1220
1217
  ),
1221
- isOpen && /* @__PURE__ */ jsxs3("div", { className: "absolute top-[calc(100%+8px)] left-0 w-72 max-h-[300px] overflow-y-auto bg-[#fafafa] dark:bg-black border-2 border-black dark:border-white z-50 p-2 scrollbar-none", children: [
1222
- /* @__PURE__ */ jsx3("div", { className: "px-3 py-2 text-[10px] font-bold text-black/50 dark:text-white/50 uppercase tracking-widest border-b-2 border-black/10 dark:border-white/10 mb-1", children: "WebLLM" }),
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" }),
1223
1220
  Object.entries(WEBLLM_MODELS).map(([key, value]) => /* @__PURE__ */ jsxs3(
1224
1221
  "button",
1225
1222
  {
1226
1223
  className: cn(
1227
- "block w-full text-left px-3 py-2.5 text-xs font-bold uppercase tracking-wider truncate transition-colors",
1228
- currentModel === value ? "bg-black text-white dark:bg-white dark:text-black" : "text-black dark:text-white hover:bg-black/10 dark:hover:bg-white/10"
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"
1229
1226
  ),
1230
1227
  onClick: () => {
1231
1228
  onSelect(value);
@@ -1239,13 +1236,13 @@ function ModelSelector({
1239
1236
  },
1240
1237
  key
1241
1238
  )),
1242
- /* @__PURE__ */ jsx3("div", { className: "px-3 py-2 text-[10px] font-bold text-black/50 dark:text-white/50 uppercase tracking-widest mt-4 border-b-2 border-black/10 dark:border-white/10 mb-1", children: "Transformers.js" }),
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" }),
1243
1240
  Object.entries(TRANSFORMERS_MODELS).map(([key, value]) => /* @__PURE__ */ jsxs3(
1244
1241
  "button",
1245
1242
  {
1246
1243
  className: cn(
1247
- "block w-full text-left px-3 py-2.5 text-xs font-bold uppercase tracking-wider truncate transition-colors",
1248
- currentModel === value ? "bg-black text-white dark:bg-white dark:text-black" : "text-black dark:text-white hover:bg-black/10 dark:hover:bg-white/10"
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"
1249
1246
  ),
1250
1247
  onClick: () => {
1251
1248
  onSelect(value);
@@ -1397,64 +1394,65 @@ ${systemPrompt}` : systemPrompt;
1397
1394
  setStreamingText("");
1398
1395
  }
1399
1396
  };
1400
- return /* @__PURE__ */ jsxs3("div", { className: cn("flex flex-col bg-[#fafafa] dark:bg-black border-2 border-black dark:border-white font-mono rounded-none overflow-hidden", className), style: { maxHeight, height: "100%" }, children: [
1401
- showHeader && /* @__PURE__ */ jsxs3("div", { className: "flex items-center justify-between px-6 py-5 border-b-2 border-black dark:border-white bg-[#fafafa] dark:bg-black", children: [
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: [
1402
1399
  onModelChange ? /* @__PURE__ */ jsx3(
1403
1400
  ModelSelector,
1404
1401
  {
1405
1402
  currentModel: modelId,
1406
1403
  onSelect: onModelChange
1407
1404
  }
1408
- ) : /* @__PURE__ */ jsxs3("div", { className: "px-4 py-1.5 border-2 border-black dark:border-white flex items-center gap-3", children: [
1409
- /* @__PURE__ */ jsx3("span", { className: "text-sm font-bold uppercase tracking-widest text-black dark:text-white", children: modelId?.split("/").pop() }),
1410
- modelId && isVisionModel2(modelId) && /* @__PURE__ */ jsx3("span", { className: "px-2 py-0.5 border border-black dark:border-white text-[10px] font-bold uppercase tracking-widest text-black dark:text-white bg-transparent", children: "VISION" })
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" })
1411
1408
  ] }),
1412
1409
  /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-3", children: [
1413
- /* @__PURE__ */ jsx3("span", { className: "text-xs font-bold tracking-widest text-black dark:text-white uppercase", children: error ? "ERR" : isReady ? "RDY" : isLoading ? "LOD" : "IDL" }),
1410
+ /* @__PURE__ */ jsx3("span", { className: "text-[10px] font-light tracking-widest text-white uppercase opacity-70", children: error ? "ERR" : isReady ? "RDY" : isLoading ? "LOD" : "IDL" }),
1414
1411
  /* @__PURE__ */ jsx3("div", { className: cn(
1415
- "w-3 h-3 border border-black dark:border-white rounded-none",
1416
- error ? "bg-red-500" : isReady ? "bg-black dark:bg-white" : "bg-transparent animate-pulse"
1412
+ "w-2 h-2 rounded-none",
1413
+ error ? "bg-red-500" : isReady ? "bg-white" : "bg-white/30 animate-pulse"
1417
1414
  ) })
1418
1415
  ] })
1419
1416
  ] }),
1420
- showProgress && isLoading && loadProgress && /* @__PURE__ */ jsxs3("div", { className: "px-6 py-4 border-b-2 border-black dark:border-white bg-[#fafafa] dark:bg-black", children: [
1421
- /* @__PURE__ */ jsxs3("div", { className: "flex justify-between items-center mb-2 font-mono uppercase tracking-widest text-xs", children: [
1422
- /* @__PURE__ */ jsx3("span", { className: "text-black dark:text-white font-bold truncate pr-4", children: loadProgress.status }),
1423
- /* @__PURE__ */ jsxs3("span", { className: "font-bold text-black dark:text-white", children: [
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: [
1424
1421
  Math.round(loadProgress.progress),
1425
1422
  "%"
1426
1423
  ] })
1427
1424
  ] }),
1428
- /* @__PURE__ */ jsx3("div", { className: "h-4 w-full border-2 border-black dark:border-white bg-transparent rounded-none overflow-hidden relative", children: /* @__PURE__ */ jsx3(
1425
+ /* @__PURE__ */ jsx3("div", { className: "h-1 w-full bg-white/10 rounded-none overflow-hidden relative", children: /* @__PURE__ */ jsx3(
1429
1426
  "div",
1430
1427
  {
1431
- className: "h-full bg-black dark:bg-white transition-all duration-300 ease-out",
1428
+ className: "h-full bg-white transition-all duration-300 ease-out",
1432
1429
  style: { width: `${Math.min(100, loadProgress.progress)}%` }
1433
1430
  }
1434
1431
  ) })
1435
1432
  ] }),
1436
- 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-2 border-red-500 bg-red-50 dark:bg-red-950/20 rounded-none gap-4", children: [
1437
- /* @__PURE__ */ jsx3("span", { className: "text-sm text-red-600 dark:text-red-400 font-bold uppercase tracking-wider", children: error.message }),
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 }),
1438
1435
  /* @__PURE__ */ jsxs3(
1439
1436
  "button",
1440
1437
  {
1441
- className: "flex items-center gap-2 px-4 py-2 bg-red-500 text-white border-2 border-red-500 hover:bg-transparent hover:text-red-600 dark:hover:text-red-400 transition-colors rounded-none text-xs font-bold uppercase tracking-widest",
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",
1442
1439
  onClick: reload,
1443
1440
  children: [
1444
- /* @__PURE__ */ jsx3(RotateCcw, { className: "w-4 h-4" }),
1441
+ /* @__PURE__ */ jsx3(RotateCcw, { className: "w-3 h-3" }),
1445
1442
  " REBOOT"
1446
1443
  ]
1447
1444
  }
1448
1445
  )
1449
1446
  ] }),
1450
- /* @__PURE__ */ jsxs3("div", { className: "flex-1 overflow-y-auto p-6 flex flex-col gap-8 scrollbar-thin scrollbar-thumb-black dark:scrollbar-thumb-white scrollbar-track-transparent", children: [
1451
- !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-2 border-black dark:border-white", children: [
1452
- /* @__PURE__ */ jsx3("div", { className: "w-20 h-20 border-4 border-black dark:border-white mb-6 flex items-center justify-center text-3xl font-black bg-black text-white dark:bg-white dark:text-black", children: "//" }),
1453
- /* @__PURE__ */ jsx3("h3", { className: "text-3xl font-black uppercase tracking-widest text-black dark:text-white mb-4", children: "SYSTEM READY" }),
1454
- /* @__PURE__ */ jsx3("p", { className: "text-black/70 dark:text-white/70 max-w-sm uppercase text-sm leading-relaxed tracking-wider font-bold", children: "[ MARKDOWN | MATH | MERMAID ] INITIALIZED. AWAITING INPUT." })
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." })
1455
1452
  ] }),
1456
- messages.map((msg, i) => /* @__PURE__ */ jsx3("div", { className: cn("flex flex-col max-w-[90%]", msg.role === "user" ? "self-end" : "self-start w-full"), children: msg.role === "user" ? /* @__PURE__ */ jsxs3("div", { className: "bg-black text-[#fafafa] dark:bg-white dark:text-black px-6 py-5 border-2 border-black dark:border-white rounded-none", children: [
1457
- 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-32 h-32 object-cover border-2 border-current shadow-none", alt: "attachment" }, img.id)) }),
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)) }),
1458
1456
  /* @__PURE__ */ jsx3("div", { className: "prose prose-base dark:prose-invert max-w-none font-mono", children: /* @__PURE__ */ jsx3(
1459
1457
  Streamdown,
1460
1458
  {
@@ -1468,36 +1466,42 @@ ${systemPrompt}` : systemPrompt;
1468
1466
  children: msg.content
1469
1467
  }
1470
1468
  ) })
1471
- ] }) : /* @__PURE__ */ jsx3("div", { className: "prose prose-base dark:prose-invert max-w-none p-6 w-full min-w-0 font-mono border-2 border-black dark:border-white bg-[#fafafa] dark:bg-black", children: /* @__PURE__ */ jsx3(
1472
- Streamdown,
1473
- {
1474
- plugins: { code, mermaid, math },
1475
- components: markdownComponents,
1476
- animated: true,
1477
- isAnimating: false,
1478
- mermaid: mermaidOptions,
1479
- controls: streamdownControls,
1480
- parseMarkdownIntoBlocksFn: sanitizeMarkdownLanguageBlocks,
1481
- children: msg.content
1482
- }
1483
- ) }) }, i)),
1484
- streamingText && /* @__PURE__ */ jsx3("div", { className: "flex flex-col self-start w-full max-w-[90%]", children: /* @__PURE__ */ jsx3("div", { className: "prose prose-base dark:prose-invert max-w-none p-6 w-full min-w-0 font-mono border-2 border-black dark:border-white bg-[#fafafa] dark:bg-black", children: /* @__PURE__ */ jsx3(
1485
- Streamdown,
1486
- {
1487
- plugins: { code, mermaid, math },
1488
- components: markdownComponents,
1489
- animated: true,
1490
- isAnimating: isGenerating,
1491
- mermaid: mermaidOptions,
1492
- controls: streamdownControls,
1493
- parseMarkdownIntoBlocksFn: sanitizeMarkdownLanguageBlocks,
1494
- caret: "block",
1495
- children: streamingText
1496
- }
1497
- ) }) }),
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" }),
1471
+ /* @__PURE__ */ jsx3(
1472
+ Streamdown,
1473
+ {
1474
+ plugins: { code, mermaid, math },
1475
+ components: markdownComponents,
1476
+ animated: true,
1477
+ isAnimating: false,
1478
+ mermaid: mermaidOptions,
1479
+ controls: streamdownControls,
1480
+ parseMarkdownIntoBlocksFn: sanitizeMarkdownLanguageBlocks,
1481
+ children: msg.content
1482
+ }
1483
+ )
1484
+ ] }) }, 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" }),
1487
+ /* @__PURE__ */ jsx3(
1488
+ Streamdown,
1489
+ {
1490
+ plugins: { code, mermaid, math },
1491
+ components: markdownComponents,
1492
+ animated: true,
1493
+ isAnimating: isGenerating,
1494
+ mermaid: mermaidOptions,
1495
+ controls: streamdownControls,
1496
+ parseMarkdownIntoBlocksFn: sanitizeMarkdownLanguageBlocks,
1497
+ caret: "block",
1498
+ children: streamingText
1499
+ }
1500
+ )
1501
+ ] }) }),
1498
1502
  /* @__PURE__ */ jsx3("div", { ref: messagesEndRef, className: "h-4" })
1499
1503
  ] }),
1500
- /* @__PURE__ */ jsx3("div", { className: "p-6 bg-[#fafafa] dark:bg-black border-t-2 border-black dark:border-white", children: /* @__PURE__ */ jsx3(
1504
+ /* @__PURE__ */ jsx3("div", { className: "p-4 bg-black border-t border-white/30", children: /* @__PURE__ */ jsx3(
1501
1505
  ChatInput,
1502
1506
  {
1503
1507
  value: input,
@@ -1506,7 +1510,7 @@ ${systemPrompt}` : systemPrompt;
1506
1510
  onStop: handleStop,
1507
1511
  disabled: !isReady && !isLoading,
1508
1512
  isGenerating,
1509
- placeholder: isLoading ? "Model is loading..." : placeholder,
1513
+ placeholder: isLoading ? "MODEL IS LOADING..." : "MESSAGE...",
1510
1514
  actions: inputActions,
1511
1515
  images,
1512
1516
  onImageAdd: (img) => setImages((prev) => [...prev, img]),