@gendive/chatllm 0.21.4 → 0.21.5
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.
- package/dist/react/index.d.mts +29 -2
- package/dist/react/index.d.ts +29 -2
- package/dist/react/index.js +1272 -758
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +1265 -752
- package/dist/react/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/react/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/react/ChatUI.tsx
|
|
2
|
-
import
|
|
2
|
+
import React17 from "react";
|
|
3
3
|
|
|
4
4
|
// src/react/hooks/useChatUI.ts
|
|
5
5
|
import { useState as useState6, useRef as useRef5, useCallback as useCallback6, useEffect as useEffect4, useMemo as useMemo3 } from "react";
|
|
@@ -1992,6 +1992,58 @@ var parseChecklistFromContent = (content) => {
|
|
|
1992
1992
|
};
|
|
1993
1993
|
};
|
|
1994
1994
|
|
|
1995
|
+
// src/react/utils/artifactParser.ts
|
|
1996
|
+
var ARTIFACT_LANGUAGE_VALUES = ["html", "svg", "mermaid"];
|
|
1997
|
+
var parseArtifactTags = (content) => {
|
|
1998
|
+
const artifactRegex = /<artifact(?:\s+title=["']([^"']*)["'])?(?:\s+language=["']([^"']*)["'])?(?:\s+title=["']([^"']*)["'])?>([\s\S]*?)<\/artifact>/gi;
|
|
1999
|
+
const artifacts = [];
|
|
2000
|
+
let cleanContent = content;
|
|
2001
|
+
let match;
|
|
2002
|
+
while ((match = artifactRegex.exec(content)) !== null) {
|
|
2003
|
+
const title = match[1] || match[3] || void 0;
|
|
2004
|
+
const rawLanguage = (match[2] || "html").toLowerCase();
|
|
2005
|
+
const language = ARTIFACT_LANGUAGE_VALUES.includes(
|
|
2006
|
+
rawLanguage
|
|
2007
|
+
) ? rawLanguage : "html";
|
|
2008
|
+
const code = match[4].trim();
|
|
2009
|
+
if (code) {
|
|
2010
|
+
artifacts.push({ type: "artifact", title, language, code });
|
|
2011
|
+
}
|
|
2012
|
+
cleanContent = cleanContent.replace(match[0], "");
|
|
2013
|
+
}
|
|
2014
|
+
return { artifacts, cleanContent };
|
|
2015
|
+
};
|
|
2016
|
+
var parseCodeBlockArtifacts = (content) => {
|
|
2017
|
+
const codeBlockRegex = /```(mermaid|svg)\s*\n([\s\S]*?)```/gi;
|
|
2018
|
+
const artifacts = [];
|
|
2019
|
+
let cleanContent = content;
|
|
2020
|
+
let match;
|
|
2021
|
+
while ((match = codeBlockRegex.exec(content)) !== null) {
|
|
2022
|
+
const rawLanguage = match[1].toLowerCase();
|
|
2023
|
+
const language = ARTIFACT_LANGUAGE_VALUES.includes(
|
|
2024
|
+
rawLanguage
|
|
2025
|
+
) ? rawLanguage : "html";
|
|
2026
|
+
const code = match[2].trim();
|
|
2027
|
+
if (code) {
|
|
2028
|
+
artifacts.push({ type: "artifact", language, code });
|
|
2029
|
+
}
|
|
2030
|
+
cleanContent = cleanContent.replace(match[0], "");
|
|
2031
|
+
}
|
|
2032
|
+
return { artifacts, cleanContent };
|
|
2033
|
+
};
|
|
2034
|
+
var parseArtifactsFromContent = (content) => {
|
|
2035
|
+
const tagResult = parseArtifactTags(content);
|
|
2036
|
+
const codeBlockResult = parseCodeBlockArtifacts(tagResult.cleanContent);
|
|
2037
|
+
const allArtifacts = [...tagResult.artifacts, ...codeBlockResult.artifacts];
|
|
2038
|
+
const cleanContent = codeBlockResult.cleanContent.replace(/\n{3,}/g, "\n\n").trim();
|
|
2039
|
+
return { artifacts: allArtifacts, cleanContent };
|
|
2040
|
+
};
|
|
2041
|
+
var hasArtifactTag = (content) => {
|
|
2042
|
+
if (/<artifact[\s>]/i.test(content) && /<\/artifact>/i.test(content)) return true;
|
|
2043
|
+
if (/```(?:mermaid|svg)\s*\n[\s\S]*?```/i.test(content)) return true;
|
|
2044
|
+
return false;
|
|
2045
|
+
};
|
|
2046
|
+
|
|
1995
2047
|
// src/react/utils/contextRefParser.ts
|
|
1996
2048
|
var parseContextRefs = (content) => {
|
|
1997
2049
|
const refRegex = /<ref_context\s+id=["']([^"']+)["']\s*\/>/gi;
|
|
@@ -2693,6 +2745,47 @@ ${projectMemoryContext}`);
|
|
|
2693
2745
|
const shouldIncludePoll = promptControl.includePoll !== false;
|
|
2694
2746
|
const shouldIncludeChecklist = promptControl.includeChecklist !== false;
|
|
2695
2747
|
const shouldIncludeCapabilityGuide = promptControl.includeCapabilityGuide !== false;
|
|
2748
|
+
parts.push(`
|
|
2749
|
+
## \uC2DC\uAC01\uD654 \uAE30\uB2A5
|
|
2750
|
+
|
|
2751
|
+
\uB370\uC774\uD130, \uD504\uB85C\uC138\uC2A4, \uAD6C\uC870\uB97C \uC124\uBA85\uD560 \uB54C \uC2DC\uAC01\uC801 \uD45C\uD604\uC774 \uB354 \uD6A8\uACFC\uC801\uC774\uBA74 \uC790\uB3D9\uC73C\uB85C \uC2DC\uAC01\uD654\uB97C \uC0DD\uC131\uD558\uC138\uC694.
|
|
2752
|
+
**\uC911\uC694: \uC808\uB300 ASCII art\uB098 \uC77C\uBC18 \uD14D\uC2A4\uD2B8 \uB2E4\uC774\uC5B4\uADF8\uB7A8\uC744 \uC0AC\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694.**
|
|
2753
|
+
|
|
2754
|
+
**\uD615\uC2DD:**
|
|
2755
|
+
- mermaid, svg \u2192 \uB9C8\uD06C\uB2E4\uC6B4 \uCF54\uB4DC\uBE14\uB85D(\`\`\`mermaid, \`\`\`svg) \uC0AC\uC6A9
|
|
2756
|
+
- html (\uCC28\uD2B8/\uC778\uD130\uB799\uD2F0\uBE0C) \u2192 \uBC18\uB4DC\uC2DC <artifact> \uD0DC\uADF8 \uC0AC\uC6A9
|
|
2757
|
+
|
|
2758
|
+
**\uC0AC\uC6A9 \uC2DC\uC810 (\uC790\uB3D9 \uD310\uB2E8):**
|
|
2759
|
+
- \uD504\uB85C\uC138\uC2A4/\uD750\uB984 \uC124\uBA85 \u2192 mermaid \uD50C\uB85C\uCC28\uD2B8
|
|
2760
|
+
- \uC2DC\uC2A4\uD15C \uAD6C\uC870/\uAD00\uACC4 \uC124\uBA85 \u2192 mermaid \uB2E4\uC774\uC5B4\uADF8\uB7A8
|
|
2761
|
+
- \uB370\uC774\uD130 \uBE44\uAD50/\uCD94\uC774 \u2192 html (Chart.js CDN \uC0AC\uC6A9, <artifact> \uD0DC\uADF8)
|
|
2762
|
+
- \uC544\uC774\uCF58/\uB85C\uACE0/\uC77C\uB7EC\uC2A4\uD2B8 \u2192 svg
|
|
2763
|
+
|
|
2764
|
+
**mermaid \uC608\uC2DC:**
|
|
2765
|
+
\`\`\`mermaid
|
|
2766
|
+
graph TD
|
|
2767
|
+
A[\uC2DC\uC791] --> B{\uC870\uAC74}
|
|
2768
|
+
B -->|Yes| C[\uCC98\uB9AC]
|
|
2769
|
+
B -->|No| D[\uC885\uB8CC]
|
|
2770
|
+
\`\`\`
|
|
2771
|
+
|
|
2772
|
+
**html \uCC28\uD2B8 \uC608\uC2DC (<artifact> \uD0DC\uADF8 \uD544\uC218):**
|
|
2773
|
+
<artifact title="\uB9E4\uCD9C \uBE44\uAD50" language="html">
|
|
2774
|
+
<canvas id="chart" width="400" height="200"></canvas>
|
|
2775
|
+
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
|
2776
|
+
<script>
|
|
2777
|
+
new Chart(document.getElementById('chart'), {
|
|
2778
|
+
type: 'bar',
|
|
2779
|
+
data: { labels: ['A','B','C'], datasets: [{ label: '\uB9E4\uCD9C', data: [10,20,30] }] }
|
|
2780
|
+
});
|
|
2781
|
+
</script>
|
|
2782
|
+
</artifact>
|
|
2783
|
+
|
|
2784
|
+
**\uADDC\uCE59:**
|
|
2785
|
+
- html \uC2DC\uAC01\uD654\uB294 \uBC18\uB4DC\uC2DC <artifact language="html"> \uD0DC\uADF8\uB85C \uAC10\uC2F8\uC57C \uD568 (\`\`\`html \uCF54\uB4DC\uBE14\uB85D \uC0AC\uC6A9 \uAE08\uC9C0)
|
|
2786
|
+
- \uC0AC\uC6A9\uC790\uAC00 \uC2DC\uAC01\uD654\uB97C \uC694\uCCAD\uD558\uC9C0 \uC54A\uC544\uB3C4 \uC801\uC808\uD558\uBA74 \uC790\uB3D9\uC73C\uB85C \uD3EC\uD568
|
|
2787
|
+
- \uC2DC\uAC01\uD654 \uC55E\uB4A4\uC5D0 \uAC04\uACB0\uD55C \uD14D\uC2A4\uD2B8 \uC124\uBA85 \uD3EC\uD568
|
|
2788
|
+
- mermaid \uBB38\uBC95 \uC624\uB958 \uC8FC\uC758 (\uD2B9\uD788 \uAD04\uD638, \uB530\uC634\uD45C \uC774\uC2A4\uCF00\uC774\uD504)`);
|
|
2696
2789
|
if (shouldIncludeSkills) {
|
|
2697
2790
|
const skillsPrompt = buildSkillsPrompt();
|
|
2698
2791
|
if (skillsPrompt) {
|
|
@@ -4516,6 +4609,28 @@ ${stepSummary}
|
|
|
4516
4609
|
} else {
|
|
4517
4610
|
skipNextChecklistParsingRef.current = false;
|
|
4518
4611
|
}
|
|
4612
|
+
if (hasArtifactTag(accumulatedContent)) {
|
|
4613
|
+
setSessions(
|
|
4614
|
+
(prev) => prev.map((s) => {
|
|
4615
|
+
if (s.id !== capturedSessionId) return s;
|
|
4616
|
+
return {
|
|
4617
|
+
...s,
|
|
4618
|
+
messages: s.messages.map((m) => {
|
|
4619
|
+
if (m.id !== assistantMessageId) return m;
|
|
4620
|
+
const { artifacts, cleanContent } = parseArtifactsFromContent(m.content);
|
|
4621
|
+
if (artifacts.length === 0) return m;
|
|
4622
|
+
const existingParts = m.contentParts || [];
|
|
4623
|
+
const textPart = cleanContent.trim() ? [{ type: "text", content: cleanContent }] : [];
|
|
4624
|
+
return {
|
|
4625
|
+
...m,
|
|
4626
|
+
content: cleanContent,
|
|
4627
|
+
contentParts: [...textPart, ...existingParts.filter((p) => p.type !== "text" && p.type !== "artifact"), ...artifacts]
|
|
4628
|
+
};
|
|
4629
|
+
})
|
|
4630
|
+
};
|
|
4631
|
+
})
|
|
4632
|
+
);
|
|
4633
|
+
}
|
|
4519
4634
|
setSessions(
|
|
4520
4635
|
(prev) => prev.map((s) => {
|
|
4521
4636
|
if (s.id !== capturedSessionId) return s;
|
|
@@ -5801,6 +5916,7 @@ var UNCLOSED_THINKING_TAG_REGEX = /<thinking>(?![\s\S]*?<\/thinking>)/gi;
|
|
|
5801
5916
|
var UNCLOSED_POLL_TAG_REGEX = /<poll[^>]*>(?![\s\S]*?<\/poll>)[\s\S]*$/gi;
|
|
5802
5917
|
var UNCLOSED_SKILL_TAG_REGEX = /<skill_use[^>]*>(?![\s\S]*?<\/skill_use>)[\s\S]*$/gi;
|
|
5803
5918
|
var UNCLOSED_CHECKLIST_TAG_REGEX = /<checklist>(?![\s\S]*?<\/checklist>)[\s\S]*$/gi;
|
|
5919
|
+
var UNCLOSED_ARTIFACT_TAG_REGEX = /<artifact[^>]*>(?![\s\S]*?<\/artifact>)[\s\S]*$/gi;
|
|
5804
5920
|
var INLINE_CODE_REGEX = /`([^`]+)`/g;
|
|
5805
5921
|
var BOLD_REGEX = /\*\*([^*]+)\*\*/g;
|
|
5806
5922
|
var ITALIC_REGEX = /(?<!\*)\*([^*]+)\*(?!\*)/g;
|
|
@@ -6713,6 +6829,9 @@ var MarkdownRenderer = ({
|
|
|
6713
6829
|
processedContent = processedContent.replace(/<checklist>[\s\S]*?<\/checklist>/gi, "");
|
|
6714
6830
|
processedContent = processedContent.replace(UNCLOSED_CHECKLIST_TAG_REGEX, "");
|
|
6715
6831
|
UNCLOSED_CHECKLIST_TAG_REGEX.lastIndex = 0;
|
|
6832
|
+
processedContent = processedContent.replace(/<artifact[^>]*>[\s\S]*?<\/artifact>/gi, "");
|
|
6833
|
+
processedContent = processedContent.replace(UNCLOSED_ARTIFACT_TAG_REGEX, "");
|
|
6834
|
+
UNCLOSED_ARTIFACT_TAG_REGEX.lastIndex = 0;
|
|
6716
6835
|
const codeBlocks = [];
|
|
6717
6836
|
processedContent = processedContent.replace(CODE_BLOCK_REGEX, (match, lang, code) => {
|
|
6718
6837
|
if (lang === "markdown" || lang === "md") {
|
|
@@ -8715,10 +8834,10 @@ var iconButtonStyle = {
|
|
|
8715
8834
|
};
|
|
8716
8835
|
|
|
8717
8836
|
// src/react/components/MessageList.tsx
|
|
8718
|
-
import
|
|
8837
|
+
import React14, { useRef as useRef10, useEffect as useEffect10, useCallback as useCallback10, useState as useState18 } from "react";
|
|
8719
8838
|
|
|
8720
8839
|
// src/react/components/MessageBubble.tsx
|
|
8721
|
-
import { useState as
|
|
8840
|
+
import { useState as useState17 } from "react";
|
|
8722
8841
|
|
|
8723
8842
|
// src/react/components/DeepResearchProgressUI.tsx
|
|
8724
8843
|
import React7 from "react";
|
|
@@ -9928,8 +10047,324 @@ var ToolStatusCard = ({
|
|
|
9928
10047
|
] });
|
|
9929
10048
|
};
|
|
9930
10049
|
|
|
9931
|
-
// src/react/components/
|
|
10050
|
+
// src/react/components/ArtifactCard.tsx
|
|
10051
|
+
import { useRef as useRef9, useEffect as useEffect9, useState as useState15, useCallback as useCallback8 } from "react";
|
|
9932
10052
|
import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
10053
|
+
var getThemeStyles = () => {
|
|
10054
|
+
const root = document.documentElement;
|
|
10055
|
+
const style = getComputedStyle(root);
|
|
10056
|
+
const vars = [
|
|
10057
|
+
"--chatllm-primary",
|
|
10058
|
+
"--chatllm-text",
|
|
10059
|
+
"--chatllm-text-muted",
|
|
10060
|
+
"--chatllm-bg",
|
|
10061
|
+
"--chatllm-bg-secondary",
|
|
10062
|
+
"--chatllm-border"
|
|
10063
|
+
];
|
|
10064
|
+
const cssVars = vars.map((v) => {
|
|
10065
|
+
const val = style.getPropertyValue(v).trim();
|
|
10066
|
+
return val ? `${v}: ${val};` : "";
|
|
10067
|
+
}).filter(Boolean).join("\n ");
|
|
10068
|
+
return `
|
|
10069
|
+
<style>
|
|
10070
|
+
:root { ${cssVars} }
|
|
10071
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
10072
|
+
body {
|
|
10073
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
10074
|
+
color: var(--chatllm-text, #1e293b);
|
|
10075
|
+
background: transparent;
|
|
10076
|
+
overflow: hidden;
|
|
10077
|
+
}
|
|
10078
|
+
</style>`;
|
|
10079
|
+
};
|
|
10080
|
+
var getAutoResizeScript = (id) => `
|
|
10081
|
+
<script>
|
|
10082
|
+
const ro = new ResizeObserver(() => {
|
|
10083
|
+
const h = document.documentElement.scrollHeight;
|
|
10084
|
+
window.parent.postMessage({ type: 'artifact-resize', id: '${id}', height: h }, '*');
|
|
10085
|
+
});
|
|
10086
|
+
ro.observe(document.body);
|
|
10087
|
+
window.addEventListener('load', () => {
|
|
10088
|
+
window.parent.postMessage({ type: 'artifact-resize', id: '${id}', height: document.documentElement.scrollHeight }, '*');
|
|
10089
|
+
});
|
|
10090
|
+
</script>`;
|
|
10091
|
+
var HtmlArtifact = ({ code }) => {
|
|
10092
|
+
const iframeRef = useRef9(null);
|
|
10093
|
+
const [height, setHeight] = useState15(200);
|
|
10094
|
+
const artifactId = useRef9(`artifact-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`);
|
|
10095
|
+
useEffect9(() => {
|
|
10096
|
+
const id = artifactId.current;
|
|
10097
|
+
const handleMessage = (e) => {
|
|
10098
|
+
if (e.data?.type === "artifact-resize" && e.data.id === id && typeof e.data.height === "number") {
|
|
10099
|
+
setHeight(Math.min(e.data.height + 2, 600));
|
|
10100
|
+
}
|
|
10101
|
+
};
|
|
10102
|
+
window.addEventListener("message", handleMessage);
|
|
10103
|
+
return () => window.removeEventListener("message", handleMessage);
|
|
10104
|
+
}, []);
|
|
10105
|
+
const srcdoc = `<!DOCTYPE html><html><head><meta charset="utf-8">${getThemeStyles()}</head><body>${code}${getAutoResizeScript(artifactId.current)}</body></html>`;
|
|
10106
|
+
return /* @__PURE__ */ jsx14(
|
|
10107
|
+
"iframe",
|
|
10108
|
+
{
|
|
10109
|
+
ref: iframeRef,
|
|
10110
|
+
sandbox: "allow-scripts",
|
|
10111
|
+
srcDoc: srcdoc,
|
|
10112
|
+
title: "artifact",
|
|
10113
|
+
style: {
|
|
10114
|
+
width: "100%",
|
|
10115
|
+
height: `${height}px`,
|
|
10116
|
+
border: "none",
|
|
10117
|
+
display: "block",
|
|
10118
|
+
transition: "height 0.3s ease"
|
|
10119
|
+
}
|
|
10120
|
+
}
|
|
10121
|
+
);
|
|
10122
|
+
};
|
|
10123
|
+
var sanitizeSvg = (svg) => {
|
|
10124
|
+
return svg.replace(/<script[\s\S]*?<\/script>/gi, "").replace(/<script[^>]*\/>/gi, "").replace(/\bon\w+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]*)/gi, "").replace(/href\s*=\s*(?:"javascript:[^"]*"|'javascript:[^']*')/gi, "");
|
|
10125
|
+
};
|
|
10126
|
+
var SvgArtifact = ({ code }) => {
|
|
10127
|
+
return /* @__PURE__ */ jsx14(
|
|
10128
|
+
"div",
|
|
10129
|
+
{
|
|
10130
|
+
dangerouslySetInnerHTML: { __html: sanitizeSvg(code) },
|
|
10131
|
+
style: {
|
|
10132
|
+
width: "100%",
|
|
10133
|
+
display: "flex",
|
|
10134
|
+
justifyContent: "center",
|
|
10135
|
+
overflow: "hidden"
|
|
10136
|
+
}
|
|
10137
|
+
}
|
|
10138
|
+
);
|
|
10139
|
+
};
|
|
10140
|
+
var MermaidArtifact = ({ code }) => {
|
|
10141
|
+
const containerRef = useRef9(null);
|
|
10142
|
+
const [svgHtml, setSvgHtml] = useState15(null);
|
|
10143
|
+
const [error, setError] = useState15(null);
|
|
10144
|
+
const renderMermaid = useCallback8(async () => {
|
|
10145
|
+
try {
|
|
10146
|
+
let mermaid;
|
|
10147
|
+
try {
|
|
10148
|
+
mermaid = (await Function('return import("mermaid")')()).default;
|
|
10149
|
+
} catch {
|
|
10150
|
+
mermaid = (await Function('return import("https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs")')()).default;
|
|
10151
|
+
}
|
|
10152
|
+
mermaid.initialize({ startOnLoad: false, theme: "neutral" });
|
|
10153
|
+
const id = `mermaid-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;
|
|
10154
|
+
const { svg } = await mermaid.render(id, code.trim());
|
|
10155
|
+
setSvgHtml(svg);
|
|
10156
|
+
} catch (e) {
|
|
10157
|
+
setError(e instanceof Error ? e.message : "Mermaid \uB80C\uB354\uB9C1 \uC2E4\uD328");
|
|
10158
|
+
}
|
|
10159
|
+
}, [code]);
|
|
10160
|
+
useEffect9(() => {
|
|
10161
|
+
renderMermaid();
|
|
10162
|
+
}, [renderMermaid]);
|
|
10163
|
+
if (error) {
|
|
10164
|
+
return /* @__PURE__ */ jsx14(
|
|
10165
|
+
"div",
|
|
10166
|
+
{
|
|
10167
|
+
style: {
|
|
10168
|
+
padding: "12px",
|
|
10169
|
+
fontSize: "13px",
|
|
10170
|
+
color: "var(--chatllm-error, #ef4444)",
|
|
10171
|
+
backgroundColor: "var(--chatllm-error-bg, #fef2f2)",
|
|
10172
|
+
borderRadius: "6px"
|
|
10173
|
+
},
|
|
10174
|
+
children: error
|
|
10175
|
+
}
|
|
10176
|
+
);
|
|
10177
|
+
}
|
|
10178
|
+
if (!svgHtml) {
|
|
10179
|
+
return /* @__PURE__ */ jsx14(
|
|
10180
|
+
"div",
|
|
10181
|
+
{
|
|
10182
|
+
style: {
|
|
10183
|
+
padding: "24px",
|
|
10184
|
+
display: "flex",
|
|
10185
|
+
alignItems: "center",
|
|
10186
|
+
justifyContent: "center"
|
|
10187
|
+
},
|
|
10188
|
+
children: /* @__PURE__ */ jsx14(IconSvg, { name: "loader-4-line", size: 20, color: "var(--chatllm-text-muted, #94a3b8)" })
|
|
10189
|
+
}
|
|
10190
|
+
);
|
|
10191
|
+
}
|
|
10192
|
+
return /* @__PURE__ */ jsx14(
|
|
10193
|
+
"div",
|
|
10194
|
+
{
|
|
10195
|
+
ref: containerRef,
|
|
10196
|
+
dangerouslySetInnerHTML: { __html: svgHtml },
|
|
10197
|
+
style: {
|
|
10198
|
+
width: "100%",
|
|
10199
|
+
display: "flex",
|
|
10200
|
+
justifyContent: "center",
|
|
10201
|
+
overflow: "auto"
|
|
10202
|
+
}
|
|
10203
|
+
}
|
|
10204
|
+
);
|
|
10205
|
+
};
|
|
10206
|
+
var ArtifactActions = ({ code, language }) => {
|
|
10207
|
+
const [showCode, setShowCode] = useState15(false);
|
|
10208
|
+
const [copied, setCopied] = useState15(false);
|
|
10209
|
+
const handleCopy = async () => {
|
|
10210
|
+
try {
|
|
10211
|
+
await navigator.clipboard.writeText(code);
|
|
10212
|
+
setCopied(true);
|
|
10213
|
+
setTimeout(() => setCopied(false), 2e3);
|
|
10214
|
+
} catch {
|
|
10215
|
+
}
|
|
10216
|
+
};
|
|
10217
|
+
const langLabel = language === "mermaid" ? "Mermaid" : language === "svg" ? "SVG" : "HTML";
|
|
10218
|
+
return /* @__PURE__ */ jsxs13("div", { children: [
|
|
10219
|
+
/* @__PURE__ */ jsxs13(
|
|
10220
|
+
"div",
|
|
10221
|
+
{
|
|
10222
|
+
style: {
|
|
10223
|
+
display: "flex",
|
|
10224
|
+
alignItems: "center",
|
|
10225
|
+
gap: "4px",
|
|
10226
|
+
padding: "6px 12px",
|
|
10227
|
+
borderTop: "1px solid var(--chatllm-border, #e5e7eb)",
|
|
10228
|
+
backgroundColor: "var(--chatllm-bg-secondary, #f9fafb)"
|
|
10229
|
+
},
|
|
10230
|
+
children: [
|
|
10231
|
+
/* @__PURE__ */ jsxs13(
|
|
10232
|
+
"button",
|
|
10233
|
+
{
|
|
10234
|
+
onClick: () => setShowCode(!showCode),
|
|
10235
|
+
style: {
|
|
10236
|
+
display: "flex",
|
|
10237
|
+
alignItems: "center",
|
|
10238
|
+
gap: "4px",
|
|
10239
|
+
padding: "4px 8px",
|
|
10240
|
+
fontSize: "12px",
|
|
10241
|
+
color: "var(--chatllm-text-muted, #64748b)",
|
|
10242
|
+
backgroundColor: showCode ? "var(--chatllm-bg-tertiary, #ededed)" : "transparent",
|
|
10243
|
+
border: "none",
|
|
10244
|
+
borderRadius: "4px",
|
|
10245
|
+
cursor: "pointer"
|
|
10246
|
+
},
|
|
10247
|
+
children: [
|
|
10248
|
+
/* @__PURE__ */ jsx14(IconSvg, { name: "code-s-slash-line", size: 12, color: "var(--chatllm-text-muted, #64748b)" }),
|
|
10249
|
+
langLabel,
|
|
10250
|
+
" \uCF54\uB4DC"
|
|
10251
|
+
]
|
|
10252
|
+
}
|
|
10253
|
+
),
|
|
10254
|
+
/* @__PURE__ */ jsxs13(
|
|
10255
|
+
"button",
|
|
10256
|
+
{
|
|
10257
|
+
onClick: handleCopy,
|
|
10258
|
+
style: {
|
|
10259
|
+
display: "flex",
|
|
10260
|
+
alignItems: "center",
|
|
10261
|
+
gap: "4px",
|
|
10262
|
+
padding: "4px 8px",
|
|
10263
|
+
fontSize: "12px",
|
|
10264
|
+
color: copied ? "var(--chatllm-success, #22c55e)" : "var(--chatllm-text-muted, #64748b)",
|
|
10265
|
+
backgroundColor: "transparent",
|
|
10266
|
+
border: "none",
|
|
10267
|
+
borderRadius: "4px",
|
|
10268
|
+
cursor: "pointer"
|
|
10269
|
+
},
|
|
10270
|
+
children: [
|
|
10271
|
+
/* @__PURE__ */ jsx14(
|
|
10272
|
+
IconSvg,
|
|
10273
|
+
{
|
|
10274
|
+
name: copied ? "check-line" : "file-copy-line",
|
|
10275
|
+
size: 12,
|
|
10276
|
+
color: copied ? "var(--chatllm-success, #22c55e)" : "var(--chatllm-text-muted, #64748b)"
|
|
10277
|
+
}
|
|
10278
|
+
),
|
|
10279
|
+
copied ? "\uBCF5\uC0AC\uB428" : "\uBCF5\uC0AC"
|
|
10280
|
+
]
|
|
10281
|
+
}
|
|
10282
|
+
)
|
|
10283
|
+
]
|
|
10284
|
+
}
|
|
10285
|
+
),
|
|
10286
|
+
showCode && /* @__PURE__ */ jsx14(
|
|
10287
|
+
"div",
|
|
10288
|
+
{
|
|
10289
|
+
style: {
|
|
10290
|
+
maxHeight: "300px",
|
|
10291
|
+
overflow: "auto",
|
|
10292
|
+
borderTop: "1px solid var(--chatllm-border, #e5e7eb)"
|
|
10293
|
+
},
|
|
10294
|
+
children: /* @__PURE__ */ jsx14(
|
|
10295
|
+
"pre",
|
|
10296
|
+
{
|
|
10297
|
+
style: {
|
|
10298
|
+
margin: 0,
|
|
10299
|
+
padding: "12px",
|
|
10300
|
+
fontSize: "12px",
|
|
10301
|
+
lineHeight: 1.5,
|
|
10302
|
+
fontFamily: "'Fira Code', 'Consolas', monospace",
|
|
10303
|
+
color: "var(--chatllm-text, #1e293b)",
|
|
10304
|
+
backgroundColor: "var(--chatllm-bg-secondary, #f9fafb)",
|
|
10305
|
+
whiteSpace: "pre-wrap",
|
|
10306
|
+
wordBreak: "break-all"
|
|
10307
|
+
},
|
|
10308
|
+
children: code
|
|
10309
|
+
}
|
|
10310
|
+
)
|
|
10311
|
+
}
|
|
10312
|
+
)
|
|
10313
|
+
] });
|
|
10314
|
+
};
|
|
10315
|
+
var ArtifactCard = ({ part, index = 0 }) => {
|
|
10316
|
+
return /* @__PURE__ */ jsxs13(
|
|
10317
|
+
"div",
|
|
10318
|
+
{
|
|
10319
|
+
className: "chatllm-artifact-card",
|
|
10320
|
+
style: {
|
|
10321
|
+
borderRadius: "8px",
|
|
10322
|
+
border: "1px solid var(--chatllm-border, #e5e7eb)",
|
|
10323
|
+
overflow: "hidden",
|
|
10324
|
+
backgroundColor: "var(--chatllm-bg, #ffffff)",
|
|
10325
|
+
animationDelay: `${index * 300}ms`
|
|
10326
|
+
},
|
|
10327
|
+
children: [
|
|
10328
|
+
part.title && /* @__PURE__ */ jsxs13(
|
|
10329
|
+
"div",
|
|
10330
|
+
{
|
|
10331
|
+
style: {
|
|
10332
|
+
padding: "8px 12px",
|
|
10333
|
+
fontSize: "13px",
|
|
10334
|
+
fontWeight: 600,
|
|
10335
|
+
color: "var(--chatllm-text, #1e293b)",
|
|
10336
|
+
backgroundColor: "var(--chatllm-bg-secondary, #f9fafb)",
|
|
10337
|
+
borderBottom: "1px solid var(--chatllm-border, #e5e7eb)",
|
|
10338
|
+
display: "flex",
|
|
10339
|
+
alignItems: "center",
|
|
10340
|
+
gap: "6px"
|
|
10341
|
+
},
|
|
10342
|
+
children: [
|
|
10343
|
+
/* @__PURE__ */ jsx14(
|
|
10344
|
+
IconSvg,
|
|
10345
|
+
{
|
|
10346
|
+
name: "code-s-slash-line",
|
|
10347
|
+
size: 14,
|
|
10348
|
+
color: "var(--chatllm-text-muted, #64748b)"
|
|
10349
|
+
}
|
|
10350
|
+
),
|
|
10351
|
+
part.title
|
|
10352
|
+
]
|
|
10353
|
+
}
|
|
10354
|
+
),
|
|
10355
|
+
/* @__PURE__ */ jsxs13("div", { style: { padding: part.language === "html" ? 0 : "12px" }, children: [
|
|
10356
|
+
part.language === "html" && /* @__PURE__ */ jsx14(HtmlArtifact, { code: part.code }),
|
|
10357
|
+
part.language === "svg" && /* @__PURE__ */ jsx14(SvgArtifact, { code: part.code }),
|
|
10358
|
+
part.language === "mermaid" && /* @__PURE__ */ jsx14(MermaidArtifact, { code: part.code })
|
|
10359
|
+
] }),
|
|
10360
|
+
/* @__PURE__ */ jsx14(ArtifactActions, { code: part.code, language: part.language })
|
|
10361
|
+
]
|
|
10362
|
+
}
|
|
10363
|
+
);
|
|
10364
|
+
};
|
|
10365
|
+
|
|
10366
|
+
// src/react/components/ContentPartRenderer.tsx
|
|
10367
|
+
import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
9933
10368
|
var ContentPartRenderer = ({
|
|
9934
10369
|
parts,
|
|
9935
10370
|
onChoiceClick,
|
|
@@ -9944,10 +10379,11 @@ var ContentPartRenderer = ({
|
|
|
9944
10379
|
collectedSources.push(...part.results);
|
|
9945
10380
|
}
|
|
9946
10381
|
}
|
|
9947
|
-
|
|
10382
|
+
let artifactIndex = 0;
|
|
10383
|
+
return /* @__PURE__ */ jsx15("div", { style: { display: "flex", flexDirection: "column", gap: "8px" }, children: parts.map((part, idx) => {
|
|
9948
10384
|
switch (part.type) {
|
|
9949
10385
|
case "text":
|
|
9950
|
-
return /* @__PURE__ */
|
|
10386
|
+
return /* @__PURE__ */ jsx15(
|
|
9951
10387
|
MarkdownRenderer,
|
|
9952
10388
|
{
|
|
9953
10389
|
content: part.content,
|
|
@@ -9959,11 +10395,11 @@ var ContentPartRenderer = ({
|
|
|
9959
10395
|
idx
|
|
9960
10396
|
);
|
|
9961
10397
|
case "image":
|
|
9962
|
-
return /* @__PURE__ */
|
|
10398
|
+
return /* @__PURE__ */ jsx15(ImageContentCard, { part }, idx);
|
|
9963
10399
|
case "file":
|
|
9964
|
-
return /* @__PURE__ */
|
|
10400
|
+
return /* @__PURE__ */ jsx15(FileContentCard, { part }, idx);
|
|
9965
10401
|
case "search_result":
|
|
9966
|
-
return /* @__PURE__ */
|
|
10402
|
+
return /* @__PURE__ */ jsx15("div", { style: { display: "flex", flexWrap: "wrap", gap: "6px" }, children: part.results.map((source, si) => /* @__PURE__ */ jsx15(
|
|
9967
10403
|
LinkChip,
|
|
9968
10404
|
{
|
|
9969
10405
|
text: source.title,
|
|
@@ -9974,7 +10410,7 @@ var ContentPartRenderer = ({
|
|
|
9974
10410
|
si
|
|
9975
10411
|
)) }, idx);
|
|
9976
10412
|
case "tool_loading":
|
|
9977
|
-
return /* @__PURE__ */
|
|
10413
|
+
return /* @__PURE__ */ jsx15(
|
|
9978
10414
|
ToolStatusCard,
|
|
9979
10415
|
{
|
|
9980
10416
|
toolName: part.toolName,
|
|
@@ -9986,8 +10422,8 @@ var ContentPartRenderer = ({
|
|
|
9986
10422
|
case "tool_result": {
|
|
9987
10423
|
const { result } = part;
|
|
9988
10424
|
const effectiveType = result.type !== "text" ? result.type : result.metadata?.type || result.metadata?.resultType || result.type;
|
|
9989
|
-
return /* @__PURE__ */
|
|
9990
|
-
/* @__PURE__ */
|
|
10425
|
+
return /* @__PURE__ */ jsxs14("div", { style: { display: "flex", flexDirection: "column", gap: "6px" }, children: [
|
|
10426
|
+
/* @__PURE__ */ jsx15(
|
|
9991
10427
|
ToolStatusCard,
|
|
9992
10428
|
{
|
|
9993
10429
|
toolName: part.toolName,
|
|
@@ -9998,13 +10434,13 @@ var ContentPartRenderer = ({
|
|
|
9998
10434
|
errorMessage: effectiveType === "error" ? result.content : void 0
|
|
9999
10435
|
}
|
|
10000
10436
|
),
|
|
10001
|
-
effectiveType === "image" && /* @__PURE__ */
|
|
10437
|
+
effectiveType === "image" && /* @__PURE__ */ jsx15(
|
|
10002
10438
|
ImageContentCard,
|
|
10003
10439
|
{
|
|
10004
10440
|
part: { type: "image", url: result.content, alt: result.metadata?.alt }
|
|
10005
10441
|
}
|
|
10006
10442
|
),
|
|
10007
|
-
effectiveType === "file" && /* @__PURE__ */
|
|
10443
|
+
effectiveType === "file" && /* @__PURE__ */ jsx15(
|
|
10008
10444
|
FileContentCard,
|
|
10009
10445
|
{
|
|
10010
10446
|
part: {
|
|
@@ -10017,8 +10453,10 @@ var ContentPartRenderer = ({
|
|
|
10017
10453
|
)
|
|
10018
10454
|
] }, idx);
|
|
10019
10455
|
}
|
|
10456
|
+
case "artifact":
|
|
10457
|
+
return /* @__PURE__ */ jsx15(ArtifactCard, { part, index: artifactIndex++ }, idx);
|
|
10020
10458
|
case "error":
|
|
10021
|
-
return /* @__PURE__ */
|
|
10459
|
+
return /* @__PURE__ */ jsxs14(
|
|
10022
10460
|
"div",
|
|
10023
10461
|
{
|
|
10024
10462
|
style: {
|
|
@@ -10033,7 +10471,7 @@ var ContentPartRenderer = ({
|
|
|
10033
10471
|
gap: "8px"
|
|
10034
10472
|
},
|
|
10035
10473
|
children: [
|
|
10036
|
-
/* @__PURE__ */
|
|
10474
|
+
/* @__PURE__ */ jsx15(IconSvg, { name: "error-warning-line", size: 16, color: "var(--chatllm-error, #ef4444)" }),
|
|
10037
10475
|
part.message
|
|
10038
10476
|
]
|
|
10039
10477
|
},
|
|
@@ -10046,8 +10484,8 @@ var ContentPartRenderer = ({
|
|
|
10046
10484
|
};
|
|
10047
10485
|
|
|
10048
10486
|
// src/react/components/ChecklistCard.tsx
|
|
10049
|
-
import { useState as
|
|
10050
|
-
import { jsx as
|
|
10487
|
+
import { useState as useState16, useMemo as useMemo5 } from "react";
|
|
10488
|
+
import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
10051
10489
|
var ChecklistCard = ({
|
|
10052
10490
|
items,
|
|
10053
10491
|
completed,
|
|
@@ -10056,7 +10494,7 @@ var ChecklistCard = ({
|
|
|
10056
10494
|
onSkipStep,
|
|
10057
10495
|
onStart
|
|
10058
10496
|
}) => {
|
|
10059
|
-
const [expandedItems, setExpandedItems] =
|
|
10497
|
+
const [expandedItems, setExpandedItems] = useState16(/* @__PURE__ */ new Set());
|
|
10060
10498
|
const { doneCount, isRunning, hasError, isWaiting } = useMemo5(() => {
|
|
10061
10499
|
const done = items.filter((it) => it.status === "done").length;
|
|
10062
10500
|
const running = items.some((it) => it.status === "in_progress");
|
|
@@ -10079,7 +10517,7 @@ var ChecklistCard = ({
|
|
|
10079
10517
|
const renderStatusIcon = (item) => {
|
|
10080
10518
|
switch (item.status) {
|
|
10081
10519
|
case "done":
|
|
10082
|
-
return /* @__PURE__ */
|
|
10520
|
+
return /* @__PURE__ */ jsx16(
|
|
10083
10521
|
"div",
|
|
10084
10522
|
{
|
|
10085
10523
|
style: {
|
|
@@ -10092,11 +10530,11 @@ var ChecklistCard = ({
|
|
|
10092
10530
|
justifyContent: "center",
|
|
10093
10531
|
flexShrink: 0
|
|
10094
10532
|
},
|
|
10095
|
-
children: /* @__PURE__ */
|
|
10533
|
+
children: /* @__PURE__ */ jsx16(IconSvg, { name: "check-line", size: 13, color: "#fff" })
|
|
10096
10534
|
}
|
|
10097
10535
|
);
|
|
10098
10536
|
case "in_progress":
|
|
10099
|
-
return /* @__PURE__ */
|
|
10537
|
+
return /* @__PURE__ */ jsx16(
|
|
10100
10538
|
"div",
|
|
10101
10539
|
{
|
|
10102
10540
|
style: {
|
|
@@ -10110,11 +10548,11 @@ var ChecklistCard = ({
|
|
|
10110
10548
|
flexShrink: 0,
|
|
10111
10549
|
animation: "chatllm-checklist-pulse 1.5s ease-in-out infinite"
|
|
10112
10550
|
},
|
|
10113
|
-
children: /* @__PURE__ */
|
|
10551
|
+
children: /* @__PURE__ */ jsx16("div", { style: { width: "6px", height: "6px", borderRadius: "50%", backgroundColor: "#fff" } })
|
|
10114
10552
|
}
|
|
10115
10553
|
);
|
|
10116
10554
|
case "error":
|
|
10117
|
-
return /* @__PURE__ */
|
|
10555
|
+
return /* @__PURE__ */ jsx16(
|
|
10118
10556
|
"div",
|
|
10119
10557
|
{
|
|
10120
10558
|
style: {
|
|
@@ -10127,11 +10565,11 @@ var ChecklistCard = ({
|
|
|
10127
10565
|
justifyContent: "center",
|
|
10128
10566
|
flexShrink: 0
|
|
10129
10567
|
},
|
|
10130
|
-
children: /* @__PURE__ */
|
|
10568
|
+
children: /* @__PURE__ */ jsx16(IconSvg, { name: "close-line", size: 13, color: "#fff" })
|
|
10131
10569
|
}
|
|
10132
10570
|
);
|
|
10133
10571
|
default:
|
|
10134
|
-
return /* @__PURE__ */
|
|
10572
|
+
return /* @__PURE__ */ jsx16(
|
|
10135
10573
|
"div",
|
|
10136
10574
|
{
|
|
10137
10575
|
style: {
|
|
@@ -10149,7 +10587,7 @@ var ChecklistCard = ({
|
|
|
10149
10587
|
const headerText = completed ? "\uBAA8\uB4E0 \uB2E8\uACC4 \uC644\uB8CC" : hasError ? "\uC791\uC5C5 \uC911\uB2E8\uB428" : isRunning ? `\uC791\uC5C5 \uC9C4\uD589 \uC911 \xB7 ${doneCount}/${items.length}` : `\uB300\uAE30 \uC911 \xB7 ${doneCount}/${items.length}`;
|
|
10150
10588
|
const headerColor = completed ? "var(--chatllm-success, #22c55e)" : hasError ? "var(--chatllm-error, #ef4444)" : "var(--chatllm-primary, #3584FA)";
|
|
10151
10589
|
const progressBarColor = completed ? "var(--chatllm-success, #22c55e)" : "var(--chatllm-primary, #3584FA)";
|
|
10152
|
-
return /* @__PURE__ */
|
|
10590
|
+
return /* @__PURE__ */ jsxs15(
|
|
10153
10591
|
"div",
|
|
10154
10592
|
{
|
|
10155
10593
|
style: {
|
|
@@ -10160,9 +10598,9 @@ var ChecklistCard = ({
|
|
|
10160
10598
|
marginTop: "8px"
|
|
10161
10599
|
},
|
|
10162
10600
|
children: [
|
|
10163
|
-
/* @__PURE__ */
|
|
10164
|
-
/* @__PURE__ */
|
|
10165
|
-
/* @__PURE__ */
|
|
10601
|
+
/* @__PURE__ */ jsxs15("div", { style: { padding: "14px 16px 10px" }, children: [
|
|
10602
|
+
/* @__PURE__ */ jsxs15("div", { style: { display: "flex", alignItems: "center", gap: "8px", marginBottom: "8px" }, children: [
|
|
10603
|
+
/* @__PURE__ */ jsx16(
|
|
10166
10604
|
IconSvg,
|
|
10167
10605
|
{
|
|
10168
10606
|
name: completed ? "checkbox-circle-line" : "list-check",
|
|
@@ -10170,9 +10608,9 @@ var ChecklistCard = ({
|
|
|
10170
10608
|
color: headerColor
|
|
10171
10609
|
}
|
|
10172
10610
|
),
|
|
10173
|
-
/* @__PURE__ */
|
|
10611
|
+
/* @__PURE__ */ jsx16("span", { style: { fontSize: "13px", fontWeight: 600, color: headerColor }, children: headerText })
|
|
10174
10612
|
] }),
|
|
10175
|
-
/* @__PURE__ */
|
|
10613
|
+
/* @__PURE__ */ jsx16(
|
|
10176
10614
|
"div",
|
|
10177
10615
|
{
|
|
10178
10616
|
style: {
|
|
@@ -10181,7 +10619,7 @@ var ChecklistCard = ({
|
|
|
10181
10619
|
borderRadius: "2px",
|
|
10182
10620
|
overflow: "hidden"
|
|
10183
10621
|
},
|
|
10184
|
-
children: /* @__PURE__ */
|
|
10622
|
+
children: /* @__PURE__ */ jsx16(
|
|
10185
10623
|
"div",
|
|
10186
10624
|
{
|
|
10187
10625
|
style: {
|
|
@@ -10196,12 +10634,12 @@ var ChecklistCard = ({
|
|
|
10196
10634
|
}
|
|
10197
10635
|
)
|
|
10198
10636
|
] }),
|
|
10199
|
-
/* @__PURE__ */
|
|
10637
|
+
/* @__PURE__ */ jsx16("div", { children: items.map((item, idx) => {
|
|
10200
10638
|
const isExpanded = expandedItems.has(item.id);
|
|
10201
10639
|
const canExpand = item.status === "done" && item.result && item.result !== "(\uAC74\uB108\uB700)";
|
|
10202
10640
|
const isStopped = !isRunning && !completed;
|
|
10203
|
-
return /* @__PURE__ */
|
|
10204
|
-
/* @__PURE__ */
|
|
10641
|
+
return /* @__PURE__ */ jsxs15("div", { children: [
|
|
10642
|
+
/* @__PURE__ */ jsxs15(
|
|
10205
10643
|
"div",
|
|
10206
10644
|
{
|
|
10207
10645
|
onClick: () => canExpand && toggleExpanded(item.id),
|
|
@@ -10218,7 +10656,7 @@ var ChecklistCard = ({
|
|
|
10218
10656
|
},
|
|
10219
10657
|
children: [
|
|
10220
10658
|
renderStatusIcon(item),
|
|
10221
|
-
/* @__PURE__ */
|
|
10659
|
+
/* @__PURE__ */ jsxs15(
|
|
10222
10660
|
"span",
|
|
10223
10661
|
{
|
|
10224
10662
|
style: {
|
|
@@ -10234,7 +10672,7 @@ var ChecklistCard = ({
|
|
|
10234
10672
|
]
|
|
10235
10673
|
}
|
|
10236
10674
|
),
|
|
10237
|
-
item.status === "error" && onRetryStep && /* @__PURE__ */
|
|
10675
|
+
item.status === "error" && onRetryStep && /* @__PURE__ */ jsx16(
|
|
10238
10676
|
"button",
|
|
10239
10677
|
{
|
|
10240
10678
|
onClick: (e) => {
|
|
@@ -10254,7 +10692,7 @@ var ChecklistCard = ({
|
|
|
10254
10692
|
children: "\uC7AC\uC2DC\uB3C4"
|
|
10255
10693
|
}
|
|
10256
10694
|
),
|
|
10257
|
-
item.status === "pending" && isStopped && hasError && onSkipStep && /* @__PURE__ */
|
|
10695
|
+
item.status === "pending" && isStopped && hasError && onSkipStep && /* @__PURE__ */ jsx16(
|
|
10258
10696
|
"button",
|
|
10259
10697
|
{
|
|
10260
10698
|
onClick: (e) => {
|
|
@@ -10274,7 +10712,7 @@ var ChecklistCard = ({
|
|
|
10274
10712
|
children: "\uAC74\uB108\uB6F0\uAE30"
|
|
10275
10713
|
}
|
|
10276
10714
|
),
|
|
10277
|
-
canExpand && /* @__PURE__ */
|
|
10715
|
+
canExpand && /* @__PURE__ */ jsx16(
|
|
10278
10716
|
IconSvg,
|
|
10279
10717
|
{
|
|
10280
10718
|
name: isExpanded ? "arrow-up-s-line" : "arrow-down-s-line",
|
|
@@ -10282,11 +10720,11 @@ var ChecklistCard = ({
|
|
|
10282
10720
|
color: "var(--chatllm-text-muted, #94a3b8)"
|
|
10283
10721
|
}
|
|
10284
10722
|
),
|
|
10285
|
-
item.result === "(\uAC74\uB108\uB700)" && /* @__PURE__ */
|
|
10723
|
+
item.result === "(\uAC74\uB108\uB700)" && /* @__PURE__ */ jsx16("span", { style: { fontSize: "11px", color: "var(--chatllm-text-muted, #94a3b8)" }, children: "\uAC74\uB108\uB700" })
|
|
10286
10724
|
]
|
|
10287
10725
|
}
|
|
10288
10726
|
),
|
|
10289
|
-
canExpand && isExpanded && /* @__PURE__ */
|
|
10727
|
+
canExpand && isExpanded && /* @__PURE__ */ jsxs15(
|
|
10290
10728
|
"div",
|
|
10291
10729
|
{
|
|
10292
10730
|
className: "chatllm-scrollbar",
|
|
@@ -10302,7 +10740,7 @@ var ChecklistCard = ({
|
|
|
10302
10740
|
color: "var(--chatllm-text-secondary, #475569)"
|
|
10303
10741
|
},
|
|
10304
10742
|
children: [
|
|
10305
|
-
item.imageUrl && /* @__PURE__ */
|
|
10743
|
+
item.imageUrl && /* @__PURE__ */ jsx16(
|
|
10306
10744
|
"img",
|
|
10307
10745
|
{
|
|
10308
10746
|
src: item.imageUrl,
|
|
@@ -10314,13 +10752,13 @@ var ChecklistCard = ({
|
|
|
10314
10752
|
}
|
|
10315
10753
|
}
|
|
10316
10754
|
),
|
|
10317
|
-
item.result && /* @__PURE__ */
|
|
10755
|
+
item.result && /* @__PURE__ */ jsx16(MarkdownRenderer, { content: item.result })
|
|
10318
10756
|
]
|
|
10319
10757
|
}
|
|
10320
10758
|
)
|
|
10321
10759
|
] }, item.id);
|
|
10322
10760
|
}) }),
|
|
10323
|
-
/* @__PURE__ */
|
|
10761
|
+
/* @__PURE__ */ jsxs15(
|
|
10324
10762
|
"div",
|
|
10325
10763
|
{
|
|
10326
10764
|
style: {
|
|
@@ -10331,13 +10769,13 @@ var ChecklistCard = ({
|
|
|
10331
10769
|
borderTop: "1px solid var(--chatllm-border, #e5e7eb)"
|
|
10332
10770
|
},
|
|
10333
10771
|
children: [
|
|
10334
|
-
/* @__PURE__ */
|
|
10772
|
+
/* @__PURE__ */ jsxs15("span", { style: { fontSize: "12px", color: "var(--chatllm-text-muted, #94a3b8)" }, children: [
|
|
10335
10773
|
doneCount,
|
|
10336
10774
|
"/",
|
|
10337
10775
|
items.length,
|
|
10338
10776
|
" \uC644\uB8CC"
|
|
10339
10777
|
] }),
|
|
10340
|
-
isWaiting && !completed && onStart && /* @__PURE__ */
|
|
10778
|
+
isWaiting && !completed && onStart && /* @__PURE__ */ jsx16(
|
|
10341
10779
|
"button",
|
|
10342
10780
|
{
|
|
10343
10781
|
onClick: onStart,
|
|
@@ -10355,7 +10793,7 @@ var ChecklistCard = ({
|
|
|
10355
10793
|
children: "\uC2E4\uD589"
|
|
10356
10794
|
}
|
|
10357
10795
|
),
|
|
10358
|
-
isRunning && onAbort && /* @__PURE__ */
|
|
10796
|
+
isRunning && onAbort && /* @__PURE__ */ jsx16(
|
|
10359
10797
|
"button",
|
|
10360
10798
|
{
|
|
10361
10799
|
onClick: onAbort,
|
|
@@ -10394,7 +10832,7 @@ var ChecklistMiniIndicator = ({
|
|
|
10394
10832
|
const statusText = completed ? "\uBAA8\uB4E0 \uB2E8\uACC4 \uC644\uB8CC" : hasError ? "\uC791\uC5C5 \uC911\uB2E8\uB428" : isRunning ? `\uC791\uC5C5 \uC9C4\uD589 \uC911 \xB7 ${doneCount}/${items.length}` : `\uB300\uAE30 \uC911 \xB7 ${items.length}\uB2E8\uACC4`;
|
|
10395
10833
|
const statusColor = completed ? "var(--chatllm-success, #22c55e)" : hasError ? "var(--chatllm-error, #ef4444)" : "var(--chatllm-primary, #3584FA)";
|
|
10396
10834
|
const barColor = completed ? "var(--chatllm-success, #22c55e)" : "var(--chatllm-primary, #3584FA)";
|
|
10397
|
-
return /* @__PURE__ */
|
|
10835
|
+
return /* @__PURE__ */ jsxs15(
|
|
10398
10836
|
"div",
|
|
10399
10837
|
{
|
|
10400
10838
|
style: {
|
|
@@ -10405,13 +10843,13 @@ var ChecklistMiniIndicator = ({
|
|
|
10405
10843
|
} : {}
|
|
10406
10844
|
},
|
|
10407
10845
|
children: [
|
|
10408
|
-
isWaiting && onStart && /* @__PURE__ */
|
|
10846
|
+
isWaiting && onStart && /* @__PURE__ */ jsx16("style", { children: `
|
|
10409
10847
|
@keyframes chatllm-checklist-pending-pulse {
|
|
10410
10848
|
0%, 100% { box-shadow: 0 0 0 0 rgba(53, 132, 250, 0.15); }
|
|
10411
10849
|
50% { box-shadow: 0 0 0 4px rgba(53, 132, 250, 0.15); }
|
|
10412
10850
|
}
|
|
10413
10851
|
` }),
|
|
10414
|
-
/* @__PURE__ */
|
|
10852
|
+
/* @__PURE__ */ jsxs15(
|
|
10415
10853
|
"div",
|
|
10416
10854
|
{
|
|
10417
10855
|
onClick: isWaiting ? void 0 : onClick,
|
|
@@ -10427,7 +10865,7 @@ var ChecklistMiniIndicator = ({
|
|
|
10427
10865
|
transition: "border-color 0.15s ease, background-color 0.15s ease"
|
|
10428
10866
|
},
|
|
10429
10867
|
children: [
|
|
10430
|
-
/* @__PURE__ */
|
|
10868
|
+
/* @__PURE__ */ jsx16(
|
|
10431
10869
|
IconSvg,
|
|
10432
10870
|
{
|
|
10433
10871
|
name: completed ? "checkbox-circle-line" : "list-check",
|
|
@@ -10435,7 +10873,7 @@ var ChecklistMiniIndicator = ({
|
|
|
10435
10873
|
color: statusColor
|
|
10436
10874
|
}
|
|
10437
10875
|
),
|
|
10438
|
-
/* @__PURE__ */
|
|
10876
|
+
/* @__PURE__ */ jsx16(
|
|
10439
10877
|
"span",
|
|
10440
10878
|
{
|
|
10441
10879
|
style: {
|
|
@@ -10447,7 +10885,7 @@ var ChecklistMiniIndicator = ({
|
|
|
10447
10885
|
children: statusText
|
|
10448
10886
|
}
|
|
10449
10887
|
),
|
|
10450
|
-
!isWaiting && /* @__PURE__ */
|
|
10888
|
+
!isWaiting && /* @__PURE__ */ jsx16(
|
|
10451
10889
|
"div",
|
|
10452
10890
|
{
|
|
10453
10891
|
style: {
|
|
@@ -10458,7 +10896,7 @@ var ChecklistMiniIndicator = ({
|
|
|
10458
10896
|
overflow: "hidden",
|
|
10459
10897
|
minWidth: "60px"
|
|
10460
10898
|
},
|
|
10461
|
-
children: /* @__PURE__ */
|
|
10899
|
+
children: /* @__PURE__ */ jsx16(
|
|
10462
10900
|
"div",
|
|
10463
10901
|
{
|
|
10464
10902
|
style: {
|
|
@@ -10472,8 +10910,8 @@ var ChecklistMiniIndicator = ({
|
|
|
10472
10910
|
)
|
|
10473
10911
|
}
|
|
10474
10912
|
),
|
|
10475
|
-
isWaiting && onStart && /* @__PURE__ */
|
|
10476
|
-
/* @__PURE__ */
|
|
10913
|
+
isWaiting && onStart && /* @__PURE__ */ jsxs15("div", { style: { display: "flex", gap: "6px", marginLeft: "auto" }, children: [
|
|
10914
|
+
/* @__PURE__ */ jsx16(
|
|
10477
10915
|
"span",
|
|
10478
10916
|
{
|
|
10479
10917
|
style: {
|
|
@@ -10485,7 +10923,7 @@ var ChecklistMiniIndicator = ({
|
|
|
10485
10923
|
children: "\uC218\uC815\uD558\uB824\uBA74 \uBA54\uC2DC\uC9C0\uB97C \uBCF4\uB0B4\uC138\uC694"
|
|
10486
10924
|
}
|
|
10487
10925
|
),
|
|
10488
|
-
/* @__PURE__ */
|
|
10926
|
+
/* @__PURE__ */ jsx16(
|
|
10489
10927
|
"button",
|
|
10490
10928
|
{
|
|
10491
10929
|
onClick: (e) => {
|
|
@@ -10508,7 +10946,7 @@ var ChecklistMiniIndicator = ({
|
|
|
10508
10946
|
}
|
|
10509
10947
|
)
|
|
10510
10948
|
] }),
|
|
10511
|
-
!isWaiting && onClick && /* @__PURE__ */
|
|
10949
|
+
!isWaiting && onClick && /* @__PURE__ */ jsx16(
|
|
10512
10950
|
IconSvg,
|
|
10513
10951
|
{
|
|
10514
10952
|
name: "arrow-right-line",
|
|
@@ -10525,7 +10963,7 @@ var ChecklistMiniIndicator = ({
|
|
|
10525
10963
|
};
|
|
10526
10964
|
|
|
10527
10965
|
// src/react/components/MessageBubble.tsx
|
|
10528
|
-
import { jsx as
|
|
10966
|
+
import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
10529
10967
|
var MessageBubble = ({
|
|
10530
10968
|
message,
|
|
10531
10969
|
isLoading,
|
|
@@ -10554,9 +10992,9 @@ var MessageBubble = ({
|
|
|
10554
10992
|
onToggleChecklistPanel,
|
|
10555
10993
|
onChecklistStart
|
|
10556
10994
|
}) => {
|
|
10557
|
-
const [showActions, setShowActions] =
|
|
10558
|
-
const [showModelMenu, setShowModelMenu] =
|
|
10559
|
-
const [stepExpanded, setStepExpanded] =
|
|
10995
|
+
const [showActions, setShowActions] = useState17(false);
|
|
10996
|
+
const [showModelMenu, setShowModelMenu] = useState17(false);
|
|
10997
|
+
const [stepExpanded, setStepExpanded] = useState17(false);
|
|
10560
10998
|
const isUser = message.role === "user";
|
|
10561
10999
|
const isAssistant = message.role === "assistant";
|
|
10562
11000
|
const relevantAlternatives = isUser ? alternatives : message.alternatives;
|
|
@@ -10568,14 +11006,14 @@ var MessageBubble = ({
|
|
|
10568
11006
|
const displaySources = isAssistant && relevantAlternatives && relevantAlternatives.length > 0 && relevantActiveIndex > 0 ? relevantAlternatives[relevantActiveIndex - 1]?.sources : message.sources;
|
|
10569
11007
|
if (isAssistant && message.checklistStepInfo) {
|
|
10570
11008
|
const { step, total, title } = message.checklistStepInfo;
|
|
10571
|
-
return /* @__PURE__ */
|
|
11009
|
+
return /* @__PURE__ */ jsxs16(
|
|
10572
11010
|
"div",
|
|
10573
11011
|
{
|
|
10574
11012
|
style: {
|
|
10575
11013
|
padding: "2px 24px"
|
|
10576
11014
|
},
|
|
10577
11015
|
children: [
|
|
10578
|
-
/* @__PURE__ */
|
|
11016
|
+
/* @__PURE__ */ jsxs16(
|
|
10579
11017
|
"div",
|
|
10580
11018
|
{
|
|
10581
11019
|
onClick: () => setStepExpanded(!stepExpanded),
|
|
@@ -10592,7 +11030,7 @@ var MessageBubble = ({
|
|
|
10592
11030
|
marginLeft: "44px"
|
|
10593
11031
|
},
|
|
10594
11032
|
children: [
|
|
10595
|
-
/* @__PURE__ */
|
|
11033
|
+
/* @__PURE__ */ jsx17(
|
|
10596
11034
|
IconSvg,
|
|
10597
11035
|
{
|
|
10598
11036
|
name: "checkbox-circle-line",
|
|
@@ -10600,7 +11038,7 @@ var MessageBubble = ({
|
|
|
10600
11038
|
color: "var(--chatllm-success, #22c55e)"
|
|
10601
11039
|
}
|
|
10602
11040
|
),
|
|
10603
|
-
/* @__PURE__ */
|
|
11041
|
+
/* @__PURE__ */ jsxs16("span", { style: {
|
|
10604
11042
|
flex: 1,
|
|
10605
11043
|
fontSize: "13px",
|
|
10606
11044
|
color: "var(--chatllm-text-secondary, #475569)"
|
|
@@ -10611,7 +11049,7 @@ var MessageBubble = ({
|
|
|
10611
11049
|
"\uB2E8\uACC4: ",
|
|
10612
11050
|
title
|
|
10613
11051
|
] }),
|
|
10614
|
-
/* @__PURE__ */
|
|
11052
|
+
/* @__PURE__ */ jsx17(
|
|
10615
11053
|
IconSvg,
|
|
10616
11054
|
{
|
|
10617
11055
|
name: stepExpanded ? "arrow-up-s-line" : "arrow-down-s-line",
|
|
@@ -10622,7 +11060,7 @@ var MessageBubble = ({
|
|
|
10622
11060
|
]
|
|
10623
11061
|
}
|
|
10624
11062
|
),
|
|
10625
|
-
stepExpanded && /* @__PURE__ */
|
|
11063
|
+
stepExpanded && /* @__PURE__ */ jsx17(
|
|
10626
11064
|
"div",
|
|
10627
11065
|
{
|
|
10628
11066
|
className: "chatllm-sheet",
|
|
@@ -10632,7 +11070,7 @@ var MessageBubble = ({
|
|
|
10632
11070
|
marginLeft: "44px",
|
|
10633
11071
|
maxWidth: "calc(100% - 44px)"
|
|
10634
11072
|
},
|
|
10635
|
-
children: /* @__PURE__ */
|
|
11073
|
+
children: /* @__PURE__ */ jsx17("div", { style: { flex: 1 }, children: /* @__PURE__ */ jsx17(MarkdownRenderer, { content: displayContent }) })
|
|
10636
11074
|
}
|
|
10637
11075
|
)
|
|
10638
11076
|
]
|
|
@@ -10640,7 +11078,7 @@ var MessageBubble = ({
|
|
|
10640
11078
|
);
|
|
10641
11079
|
}
|
|
10642
11080
|
if (isUser) {
|
|
10643
|
-
return /* @__PURE__ */
|
|
11081
|
+
return /* @__PURE__ */ jsxs16(
|
|
10644
11082
|
"div",
|
|
10645
11083
|
{
|
|
10646
11084
|
className: "chatllm-message chatllm-message--user",
|
|
@@ -10653,7 +11091,7 @@ var MessageBubble = ({
|
|
|
10653
11091
|
onMouseEnter: () => setShowActions(true),
|
|
10654
11092
|
onMouseLeave: () => setShowActions(false),
|
|
10655
11093
|
children: [
|
|
10656
|
-
/* @__PURE__ */
|
|
11094
|
+
/* @__PURE__ */ jsx17(
|
|
10657
11095
|
"div",
|
|
10658
11096
|
{
|
|
10659
11097
|
style: {
|
|
@@ -10663,9 +11101,9 @@ var MessageBubble = ({
|
|
|
10663
11101
|
borderRadius: "16px",
|
|
10664
11102
|
borderTopRightRadius: "4px"
|
|
10665
11103
|
},
|
|
10666
|
-
children: message.contentParts?.length ? /* @__PURE__ */
|
|
11104
|
+
children: message.contentParts?.length ? /* @__PURE__ */ jsx17("div", { style: { display: "flex", flexDirection: "column", gap: "8px" }, children: message.contentParts.map((part, idx) => {
|
|
10667
11105
|
if (part.type === "text") {
|
|
10668
|
-
return /* @__PURE__ */
|
|
11106
|
+
return /* @__PURE__ */ jsx17(
|
|
10669
11107
|
"div",
|
|
10670
11108
|
{
|
|
10671
11109
|
style: {
|
|
@@ -10680,7 +11118,7 @@ var MessageBubble = ({
|
|
|
10680
11118
|
);
|
|
10681
11119
|
}
|
|
10682
11120
|
if (part.type === "image") {
|
|
10683
|
-
return /* @__PURE__ */
|
|
11121
|
+
return /* @__PURE__ */ jsx17(
|
|
10684
11122
|
"img",
|
|
10685
11123
|
{
|
|
10686
11124
|
src: part.url,
|
|
@@ -10696,7 +11134,7 @@ var MessageBubble = ({
|
|
|
10696
11134
|
);
|
|
10697
11135
|
}
|
|
10698
11136
|
if (part.type === "file") {
|
|
10699
|
-
return /* @__PURE__ */
|
|
11137
|
+
return /* @__PURE__ */ jsxs16(
|
|
10700
11138
|
"div",
|
|
10701
11139
|
{
|
|
10702
11140
|
style: {
|
|
@@ -10710,15 +11148,15 @@ var MessageBubble = ({
|
|
|
10710
11148
|
color: "var(--chatllm-text)"
|
|
10711
11149
|
},
|
|
10712
11150
|
children: [
|
|
10713
|
-
/* @__PURE__ */
|
|
10714
|
-
/* @__PURE__ */
|
|
11151
|
+
/* @__PURE__ */ jsx17(IconSvg, { name: "file-text-line", size: 16, color: "var(--chatllm-text-muted)" }),
|
|
11152
|
+
/* @__PURE__ */ jsx17("span", { style: { overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: part.name })
|
|
10715
11153
|
]
|
|
10716
11154
|
},
|
|
10717
11155
|
idx
|
|
10718
11156
|
);
|
|
10719
11157
|
}
|
|
10720
11158
|
return null;
|
|
10721
|
-
}) }) : /* @__PURE__ */
|
|
11159
|
+
}) }) : /* @__PURE__ */ jsx17(
|
|
10722
11160
|
"div",
|
|
10723
11161
|
{
|
|
10724
11162
|
style: {
|
|
@@ -10732,7 +11170,7 @@ var MessageBubble = ({
|
|
|
10732
11170
|
)
|
|
10733
11171
|
}
|
|
10734
11172
|
),
|
|
10735
|
-
!isLoading && /* @__PURE__ */
|
|
11173
|
+
!isLoading && /* @__PURE__ */ jsxs16(
|
|
10736
11174
|
"div",
|
|
10737
11175
|
{
|
|
10738
11176
|
style: {
|
|
@@ -10744,7 +11182,7 @@ var MessageBubble = ({
|
|
|
10744
11182
|
transition: "opacity 0.15s ease"
|
|
10745
11183
|
},
|
|
10746
11184
|
children: [
|
|
10747
|
-
/* @__PURE__ */
|
|
11185
|
+
/* @__PURE__ */ jsx17("button", { onClick: onCopy, style: actionButtonSmallStyle, title: "\uBCF5\uC0AC", children: /* @__PURE__ */ jsx17(
|
|
10748
11186
|
IconSvg,
|
|
10749
11187
|
{
|
|
10750
11188
|
name: isCopied ? "check-line" : "file-copy-line",
|
|
@@ -10752,7 +11190,7 @@ var MessageBubble = ({
|
|
|
10752
11190
|
color: isCopied ? "var(--chatllm-success)" : "var(--chatllm-text-muted)"
|
|
10753
11191
|
}
|
|
10754
11192
|
) }),
|
|
10755
|
-
/* @__PURE__ */
|
|
11193
|
+
/* @__PURE__ */ jsx17("button", { onClick: onEdit, style: actionButtonSmallStyle, title: "\uC218\uC815", children: /* @__PURE__ */ jsx17(IconSvg, { name: "edit-line", size: 12, color: "var(--chatllm-text-muted)" }) })
|
|
10756
11194
|
]
|
|
10757
11195
|
}
|
|
10758
11196
|
)
|
|
@@ -10760,7 +11198,7 @@ var MessageBubble = ({
|
|
|
10760
11198
|
}
|
|
10761
11199
|
);
|
|
10762
11200
|
}
|
|
10763
|
-
return /* @__PURE__ */
|
|
11201
|
+
return /* @__PURE__ */ jsxs16(
|
|
10764
11202
|
"div",
|
|
10765
11203
|
{
|
|
10766
11204
|
className: "chatllm-message chatllm-message--assistant",
|
|
@@ -10773,7 +11211,7 @@ var MessageBubble = ({
|
|
|
10773
11211
|
onMouseEnter: () => setShowActions(true),
|
|
10774
11212
|
onMouseLeave: () => setShowActions(false),
|
|
10775
11213
|
children: [
|
|
10776
|
-
/* @__PURE__ */
|
|
11214
|
+
/* @__PURE__ */ jsxs16(
|
|
10777
11215
|
"div",
|
|
10778
11216
|
{
|
|
10779
11217
|
className: "chatllm-sheet",
|
|
@@ -10784,7 +11222,7 @@ var MessageBubble = ({
|
|
|
10784
11222
|
gap: "12px"
|
|
10785
11223
|
},
|
|
10786
11224
|
children: [
|
|
10787
|
-
/* @__PURE__ */
|
|
11225
|
+
/* @__PURE__ */ jsx17("div", { style: { flexShrink: 0 }, children: assistantIcon || /* @__PURE__ */ jsx17(
|
|
10788
11226
|
"div",
|
|
10789
11227
|
{
|
|
10790
11228
|
style: {
|
|
@@ -10797,11 +11235,11 @@ var MessageBubble = ({
|
|
|
10797
11235
|
justifyContent: "center",
|
|
10798
11236
|
color: "var(--chatllm-primary)"
|
|
10799
11237
|
},
|
|
10800
|
-
children: /* @__PURE__ */
|
|
11238
|
+
children: /* @__PURE__ */ jsx17(IconSvg, { name: "magic-line", size: 20 })
|
|
10801
11239
|
}
|
|
10802
11240
|
) }),
|
|
10803
|
-
/* @__PURE__ */
|
|
10804
|
-
displayModel && /* @__PURE__ */
|
|
11241
|
+
/* @__PURE__ */ jsxs16("div", { style: { flex: 1, minWidth: 0 }, children: [
|
|
11242
|
+
displayModel && /* @__PURE__ */ jsx17(
|
|
10805
11243
|
"div",
|
|
10806
11244
|
{
|
|
10807
11245
|
style: {
|
|
@@ -10810,7 +11248,7 @@ var MessageBubble = ({
|
|
|
10810
11248
|
gap: "8px",
|
|
10811
11249
|
marginBottom: "8px"
|
|
10812
11250
|
},
|
|
10813
|
-
children: /* @__PURE__ */
|
|
11251
|
+
children: /* @__PURE__ */ jsx17(
|
|
10814
11252
|
"span",
|
|
10815
11253
|
{
|
|
10816
11254
|
style: {
|
|
@@ -10825,9 +11263,9 @@ var MessageBubble = ({
|
|
|
10825
11263
|
)
|
|
10826
11264
|
}
|
|
10827
11265
|
),
|
|
10828
|
-
message.isDeepResearch && message.researchProgress && message.researchProgress.phase !== "done" && /* @__PURE__ */
|
|
10829
|
-
message.skillExecution && message.skillExecution.status !== "done" && (message.skillExecution.progress?.subAgents ? /* @__PURE__ */
|
|
10830
|
-
message.isDeepResearch && displayContent && /* @__PURE__ */
|
|
11266
|
+
message.isDeepResearch && message.researchProgress && message.researchProgress.phase !== "done" && /* @__PURE__ */ jsx17(DeepResearchProgressUI, { progress: message.researchProgress }),
|
|
11267
|
+
message.skillExecution && message.skillExecution.status !== "done" && (message.skillExecution.progress?.subAgents ? /* @__PURE__ */ jsx17(DeepResearchProgressUI, { progress: message.skillExecution.progress }) : /* @__PURE__ */ jsx17(SkillProgressUI, { execution: message.skillExecution })),
|
|
11268
|
+
message.isDeepResearch && displayContent && /* @__PURE__ */ jsxs16(
|
|
10831
11269
|
"div",
|
|
10832
11270
|
{
|
|
10833
11271
|
className: "chatllm-deep-research__header",
|
|
@@ -10840,8 +11278,8 @@ var MessageBubble = ({
|
|
|
10840
11278
|
borderBottom: "1px solid var(--chatllm-border-light)"
|
|
10841
11279
|
},
|
|
10842
11280
|
children: [
|
|
10843
|
-
/* @__PURE__ */
|
|
10844
|
-
/* @__PURE__ */
|
|
11281
|
+
/* @__PURE__ */ jsx17(IconSvg, { name: "search-eye-line", size: 18, color: "var(--chatllm-primary)" }),
|
|
11282
|
+
/* @__PURE__ */ jsx17(
|
|
10845
11283
|
"span",
|
|
10846
11284
|
{
|
|
10847
11285
|
style: {
|
|
@@ -10852,7 +11290,7 @@ var MessageBubble = ({
|
|
|
10852
11290
|
children: "\uC2EC\uCE35\uC5F0\uAD6C"
|
|
10853
11291
|
}
|
|
10854
11292
|
),
|
|
10855
|
-
displaySources && displaySources.length > 0 && /* @__PURE__ */
|
|
11293
|
+
displaySources && displaySources.length > 0 && /* @__PURE__ */ jsxs16(
|
|
10856
11294
|
"span",
|
|
10857
11295
|
{
|
|
10858
11296
|
className: "chatllm-deep-research__source-count",
|
|
@@ -10874,7 +11312,7 @@ var MessageBubble = ({
|
|
|
10874
11312
|
]
|
|
10875
11313
|
}
|
|
10876
11314
|
),
|
|
10877
|
-
!!message.contentParts?.length && /* @__PURE__ */
|
|
11315
|
+
!!message.contentParts?.length && /* @__PURE__ */ jsx17("div", { style: { wordBreak: "break-word" }, children: /* @__PURE__ */ jsx17(
|
|
10878
11316
|
ContentPartRenderer,
|
|
10879
11317
|
{
|
|
10880
11318
|
parts: message.contentParts,
|
|
@@ -10885,13 +11323,13 @@ var MessageBubble = ({
|
|
|
10885
11323
|
) }),
|
|
10886
11324
|
isLoading && !displayContent && !message.isDeepResearch && (message.contentParts?.length ? (
|
|
10887
11325
|
/* contentParts 있을 때: 간소화된 AI 응답 대기 표시 */
|
|
10888
|
-
/* @__PURE__ */
|
|
10889
|
-
/* @__PURE__ */
|
|
10890
|
-
/* @__PURE__ */
|
|
10891
|
-
/* @__PURE__ */
|
|
10892
|
-
/* @__PURE__ */
|
|
11326
|
+
/* @__PURE__ */ jsxs16("div", { style: { display: "flex", alignItems: "center", gap: "8px", marginTop: "4px" }, children: [
|
|
11327
|
+
/* @__PURE__ */ jsxs16("div", { style: { display: "flex", gap: "4px", alignItems: "center" }, children: [
|
|
11328
|
+
/* @__PURE__ */ jsx17("span", { className: "chatllm-dot-bounce", style: dotStyle }),
|
|
11329
|
+
/* @__PURE__ */ jsx17("span", { className: "chatllm-dot-bounce", style: dotStyle }),
|
|
11330
|
+
/* @__PURE__ */ jsx17("span", { className: "chatllm-dot-bounce", style: dotStyle })
|
|
10893
11331
|
] }),
|
|
10894
|
-
/* @__PURE__ */
|
|
11332
|
+
/* @__PURE__ */ jsx17(
|
|
10895
11333
|
"span",
|
|
10896
11334
|
{
|
|
10897
11335
|
style: {
|
|
@@ -10906,14 +11344,14 @@ var MessageBubble = ({
|
|
|
10906
11344
|
] })
|
|
10907
11345
|
) : (
|
|
10908
11346
|
/* contentParts 없을 때: 풀 스켈레톤 */
|
|
10909
|
-
/* @__PURE__ */
|
|
10910
|
-
/* @__PURE__ */
|
|
10911
|
-
/* @__PURE__ */
|
|
10912
|
-
/* @__PURE__ */
|
|
10913
|
-
/* @__PURE__ */
|
|
10914
|
-
/* @__PURE__ */
|
|
11347
|
+
/* @__PURE__ */ jsxs16("div", { style: { display: "flex", flexDirection: "column", gap: "16px" }, children: [
|
|
11348
|
+
/* @__PURE__ */ jsxs16("div", { style: { display: "flex", alignItems: "center", gap: "12px" }, children: [
|
|
11349
|
+
/* @__PURE__ */ jsxs16("div", { style: { display: "flex", gap: "4px", alignItems: "center" }, children: [
|
|
11350
|
+
/* @__PURE__ */ jsx17("span", { className: "chatllm-dot-bounce", style: dotStyle }),
|
|
11351
|
+
/* @__PURE__ */ jsx17("span", { className: "chatllm-dot-bounce", style: dotStyle }),
|
|
11352
|
+
/* @__PURE__ */ jsx17("span", { className: "chatllm-dot-bounce", style: dotStyle })
|
|
10915
11353
|
] }),
|
|
10916
|
-
/* @__PURE__ */
|
|
11354
|
+
/* @__PURE__ */ jsx17(
|
|
10917
11355
|
"span",
|
|
10918
11356
|
{
|
|
10919
11357
|
style: {
|
|
@@ -10926,17 +11364,17 @@ var MessageBubble = ({
|
|
|
10926
11364
|
}
|
|
10927
11365
|
)
|
|
10928
11366
|
] }),
|
|
10929
|
-
/* @__PURE__ */
|
|
10930
|
-
/* @__PURE__ */
|
|
10931
|
-
/* @__PURE__ */
|
|
10932
|
-
/* @__PURE__ */
|
|
10933
|
-
/* @__PURE__ */
|
|
10934
|
-
/* @__PURE__ */
|
|
11367
|
+
/* @__PURE__ */ jsxs16("div", { className: "chatllm-skeleton-pulse", style: { display: "flex", flexDirection: "column", gap: "12px" }, children: [
|
|
11368
|
+
/* @__PURE__ */ jsx17("div", { style: { height: "32px", width: "75%", backgroundColor: "var(--chatllm-bg-tertiary)", borderRadius: "8px" } }),
|
|
11369
|
+
/* @__PURE__ */ jsxs16("div", { style: { display: "flex", flexDirection: "column", gap: "8px" }, children: [
|
|
11370
|
+
/* @__PURE__ */ jsx17("div", { style: { height: "16px", width: "100%", backgroundColor: "var(--chatllm-bg-secondary)", borderRadius: "4px" } }),
|
|
11371
|
+
/* @__PURE__ */ jsx17("div", { style: { height: "16px", width: "85%", backgroundColor: "var(--chatllm-bg-secondary)", borderRadius: "4px" } }),
|
|
11372
|
+
/* @__PURE__ */ jsx17("div", { style: { height: "16px", width: "65%", backgroundColor: "var(--chatllm-bg-secondary)", borderRadius: "4px" } })
|
|
10935
11373
|
] })
|
|
10936
11374
|
] })
|
|
10937
11375
|
] })
|
|
10938
11376
|
)),
|
|
10939
|
-
displayContent ? /* @__PURE__ */
|
|
11377
|
+
displayContent ? /* @__PURE__ */ jsx17("div", { className: isLoading ? "chatllm-streaming-content" : "", style: { wordBreak: "break-word" }, children: /* @__PURE__ */ jsx17(
|
|
10940
11378
|
MarkdownRenderer,
|
|
10941
11379
|
{
|
|
10942
11380
|
content: displayContent,
|
|
@@ -10945,7 +11383,30 @@ var MessageBubble = ({
|
|
|
10945
11383
|
thinkingDefaultOpen
|
|
10946
11384
|
}
|
|
10947
11385
|
) }) : null,
|
|
10948
|
-
message.
|
|
11386
|
+
isLoading && message.content && /<artifact[^>]*>(?![\s\S]*?<\/artifact>)/i.test(message.content) && /* @__PURE__ */ jsxs16(
|
|
11387
|
+
"div",
|
|
11388
|
+
{
|
|
11389
|
+
className: "chatllm-artifact-loading",
|
|
11390
|
+
style: {
|
|
11391
|
+
display: "flex",
|
|
11392
|
+
alignItems: "center",
|
|
11393
|
+
gap: "10px",
|
|
11394
|
+
padding: "14px 16px",
|
|
11395
|
+
marginTop: "8px",
|
|
11396
|
+
borderRadius: "8px",
|
|
11397
|
+
border: "1px solid var(--chatllm-border, #e5e7eb)",
|
|
11398
|
+
backgroundColor: "var(--chatllm-bg-secondary, #f9fafb)"
|
|
11399
|
+
},
|
|
11400
|
+
children: [
|
|
11401
|
+
/* @__PURE__ */ jsx17(IconSvg, { name: "loader-4-line", size: 18, color: "var(--chatllm-primary, #6366f1)" }),
|
|
11402
|
+
/* @__PURE__ */ jsx17("span", { style: {
|
|
11403
|
+
fontSize: "13px",
|
|
11404
|
+
color: "var(--chatllm-text-muted, #64748b)"
|
|
11405
|
+
}, children: "\uC2DC\uAC01\uD654 \uC0DD\uC131 \uC911..." })
|
|
11406
|
+
]
|
|
11407
|
+
}
|
|
11408
|
+
),
|
|
11409
|
+
message.pollBlock && message.pollBlock.questions.length > 0 && /* @__PURE__ */ jsx17(
|
|
10949
11410
|
PollCard,
|
|
10950
11411
|
{
|
|
10951
11412
|
questions: message.pollBlock.questions,
|
|
@@ -10957,7 +11418,7 @@ var MessageBubble = ({
|
|
|
10957
11418
|
}
|
|
10958
11419
|
}
|
|
10959
11420
|
),
|
|
10960
|
-
message.checklistBlock && message.checklistBlock.items.length > 0 && /* @__PURE__ */
|
|
11421
|
+
message.checklistBlock && message.checklistBlock.items.length > 0 && /* @__PURE__ */ jsx17(
|
|
10961
11422
|
ChecklistMiniIndicator,
|
|
10962
11423
|
{
|
|
10963
11424
|
items: message.checklistBlock.items,
|
|
@@ -10966,7 +11427,7 @@ var MessageBubble = ({
|
|
|
10966
11427
|
onStart: onChecklistStart
|
|
10967
11428
|
}
|
|
10968
11429
|
),
|
|
10969
|
-
!isLoading && !displayContent && !message.pollBlock && !message.checklistBlock && !message.contentParts?.length && /* @__PURE__ */
|
|
11430
|
+
!isLoading && !displayContent && !message.pollBlock && !message.checklistBlock && !message.contentParts?.length && /* @__PURE__ */ jsx17(
|
|
10970
11431
|
"div",
|
|
10971
11432
|
{
|
|
10972
11433
|
style: {
|
|
@@ -10979,7 +11440,7 @@ var MessageBubble = ({
|
|
|
10979
11440
|
children: "\uC751\uB2F5\uC744 \uC0DD\uC131\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694."
|
|
10980
11441
|
}
|
|
10981
11442
|
),
|
|
10982
|
-
displaySources && displaySources.length > 0 && /* @__PURE__ */
|
|
11443
|
+
displaySources && displaySources.length > 0 && /* @__PURE__ */ jsxs16(
|
|
10983
11444
|
"div",
|
|
10984
11445
|
{
|
|
10985
11446
|
style: {
|
|
@@ -10991,7 +11452,7 @@ var MessageBubble = ({
|
|
|
10991
11452
|
borderTop: "1px solid var(--chatllm-border-light)"
|
|
10992
11453
|
},
|
|
10993
11454
|
children: [
|
|
10994
|
-
/* @__PURE__ */
|
|
11455
|
+
/* @__PURE__ */ jsx17(
|
|
10995
11456
|
"span",
|
|
10996
11457
|
{
|
|
10997
11458
|
style: {
|
|
@@ -11003,7 +11464,7 @@ var MessageBubble = ({
|
|
|
11003
11464
|
children: "\uCD9C\uCC98:"
|
|
11004
11465
|
}
|
|
11005
11466
|
),
|
|
11006
|
-
displaySources.map((source, index) => /* @__PURE__ */
|
|
11467
|
+
displaySources.map((source, index) => /* @__PURE__ */ jsx17(
|
|
11007
11468
|
LinkChip,
|
|
11008
11469
|
{
|
|
11009
11470
|
text: source.title,
|
|
@@ -11016,7 +11477,7 @@ var MessageBubble = ({
|
|
|
11016
11477
|
]
|
|
11017
11478
|
}
|
|
11018
11479
|
),
|
|
11019
|
-
relevantAlternatives && relevantAlternatives.length > 0 && /* @__PURE__ */
|
|
11480
|
+
relevantAlternatives && relevantAlternatives.length > 0 && /* @__PURE__ */ jsxs16(
|
|
11020
11481
|
"div",
|
|
11021
11482
|
{
|
|
11022
11483
|
style: {
|
|
@@ -11030,8 +11491,8 @@ var MessageBubble = ({
|
|
|
11030
11491
|
fontSize: "12px"
|
|
11031
11492
|
},
|
|
11032
11493
|
children: [
|
|
11033
|
-
/* @__PURE__ */
|
|
11034
|
-
/* @__PURE__ */
|
|
11494
|
+
/* @__PURE__ */ jsx17("span", { style: { color: "var(--chatllm-text-muted)", marginRight: "4px" }, children: displayModel || "\uBAA8\uB378" }),
|
|
11495
|
+
/* @__PURE__ */ jsx17(
|
|
11035
11496
|
"button",
|
|
11036
11497
|
{
|
|
11037
11498
|
onClick: () => onAlternativeChange?.(Math.max(0, relevantActiveIndex - 1)),
|
|
@@ -11041,15 +11502,15 @@ var MessageBubble = ({
|
|
|
11041
11502
|
opacity: relevantActiveIndex === 0 ? 0.5 : 1,
|
|
11042
11503
|
cursor: relevantActiveIndex === 0 ? "not-allowed" : "pointer"
|
|
11043
11504
|
},
|
|
11044
|
-
children: /* @__PURE__ */
|
|
11505
|
+
children: /* @__PURE__ */ jsx17(IconSvg, { name: "arrow-left-line", size: 12 })
|
|
11045
11506
|
}
|
|
11046
11507
|
),
|
|
11047
|
-
/* @__PURE__ */
|
|
11508
|
+
/* @__PURE__ */ jsxs16("span", { style: { color: "var(--chatllm-text-secondary)" }, children: [
|
|
11048
11509
|
relevantActiveIndex + 1,
|
|
11049
11510
|
" / ",
|
|
11050
11511
|
relevantAlternatives.length + 1
|
|
11051
11512
|
] }),
|
|
11052
|
-
/* @__PURE__ */
|
|
11513
|
+
/* @__PURE__ */ jsx17(
|
|
11053
11514
|
"button",
|
|
11054
11515
|
{
|
|
11055
11516
|
onClick: () => onAlternativeChange?.(Math.min(relevantAlternatives.length, relevantActiveIndex + 1)),
|
|
@@ -11059,13 +11520,13 @@ var MessageBubble = ({
|
|
|
11059
11520
|
opacity: relevantActiveIndex === relevantAlternatives.length ? 0.5 : 1,
|
|
11060
11521
|
cursor: relevantActiveIndex === relevantAlternatives.length ? "not-allowed" : "pointer"
|
|
11061
11522
|
},
|
|
11062
|
-
children: /* @__PURE__ */
|
|
11523
|
+
children: /* @__PURE__ */ jsx17(IconSvg, { name: "arrow-right-line", size: 12 })
|
|
11063
11524
|
}
|
|
11064
11525
|
)
|
|
11065
11526
|
]
|
|
11066
11527
|
}
|
|
11067
11528
|
),
|
|
11068
|
-
isLoadingAlternative && /* @__PURE__ */
|
|
11529
|
+
isLoadingAlternative && /* @__PURE__ */ jsxs16(
|
|
11069
11530
|
"div",
|
|
11070
11531
|
{
|
|
11071
11532
|
style: {
|
|
@@ -11080,12 +11541,12 @@ var MessageBubble = ({
|
|
|
11080
11541
|
color: "var(--chatllm-primary, #3584FA)"
|
|
11081
11542
|
},
|
|
11082
11543
|
children: [
|
|
11083
|
-
/* @__PURE__ */
|
|
11084
|
-
/* @__PURE__ */
|
|
11085
|
-
/* @__PURE__ */
|
|
11086
|
-
/* @__PURE__ */
|
|
11544
|
+
/* @__PURE__ */ jsxs16("div", { style: { display: "flex", gap: "4px", alignItems: "center" }, children: [
|
|
11545
|
+
/* @__PURE__ */ jsx17("span", { className: "chatllm-dot-bounce", style: dotStyle }),
|
|
11546
|
+
/* @__PURE__ */ jsx17("span", { className: "chatllm-dot-bounce", style: dotStyle }),
|
|
11547
|
+
/* @__PURE__ */ jsx17("span", { className: "chatllm-dot-bounce", style: dotStyle })
|
|
11087
11548
|
] }),
|
|
11088
|
-
/* @__PURE__ */
|
|
11549
|
+
/* @__PURE__ */ jsx17("span", { style: { fontWeight: 500 }, children: "\uB2E4\uB978 \uBAA8\uB378 \uC751\uB2F5 \uC0DD\uC131 \uC911..." })
|
|
11089
11550
|
]
|
|
11090
11551
|
}
|
|
11091
11552
|
)
|
|
@@ -11093,7 +11554,7 @@ var MessageBubble = ({
|
|
|
11093
11554
|
]
|
|
11094
11555
|
}
|
|
11095
11556
|
),
|
|
11096
|
-
!isLoading && /* @__PURE__ */
|
|
11557
|
+
!isLoading && /* @__PURE__ */ jsxs16(
|
|
11097
11558
|
"div",
|
|
11098
11559
|
{
|
|
11099
11560
|
style: {
|
|
@@ -11106,7 +11567,7 @@ var MessageBubble = ({
|
|
|
11106
11567
|
transition: "opacity 0.15s ease"
|
|
11107
11568
|
},
|
|
11108
11569
|
children: [
|
|
11109
|
-
/* @__PURE__ */
|
|
11570
|
+
/* @__PURE__ */ jsx17("button", { onClick: onCopy, style: actionButtonSmallStyle, title: "\uBCF5\uC0AC", children: /* @__PURE__ */ jsx17(
|
|
11110
11571
|
IconSvg,
|
|
11111
11572
|
{
|
|
11112
11573
|
name: isCopied ? "check-line" : "file-copy-line",
|
|
@@ -11114,19 +11575,19 @@ var MessageBubble = ({
|
|
|
11114
11575
|
color: isCopied ? "var(--chatllm-success)" : "var(--chatllm-text-muted)"
|
|
11115
11576
|
}
|
|
11116
11577
|
) }),
|
|
11117
|
-
onExport && /* @__PURE__ */
|
|
11118
|
-
onRegenerate && /* @__PURE__ */
|
|
11119
|
-
onAskOtherModel && otherModels.length > 0 && /* @__PURE__ */
|
|
11120
|
-
/* @__PURE__ */
|
|
11578
|
+
onExport && /* @__PURE__ */ jsx17("button", { onClick: () => onExport("markdown"), style: actionButtonSmallStyle, title: "MD \uB2E4\uC6B4\uB85C\uB4DC", children: /* @__PURE__ */ jsx17(IconSvg, { name: "download-line", size: 12, color: "var(--chatllm-text-muted)" }) }),
|
|
11579
|
+
onRegenerate && /* @__PURE__ */ jsx17("button", { onClick: onRegenerate, style: actionButtonSmallStyle, title: "\uB2E4\uC2DC \uC0DD\uC131", children: /* @__PURE__ */ jsx17(IconSvg, { name: "refresh-line", size: 12, color: "var(--chatllm-text-muted)" }) }),
|
|
11580
|
+
onAskOtherModel && otherModels.length > 0 && /* @__PURE__ */ jsxs16("div", { style: { position: "relative" }, children: [
|
|
11581
|
+
/* @__PURE__ */ jsx17(
|
|
11121
11582
|
"button",
|
|
11122
11583
|
{
|
|
11123
11584
|
onClick: () => setShowModelMenu(!showModelMenu),
|
|
11124
11585
|
style: actionButtonSmallStyle,
|
|
11125
11586
|
title: "\uB2E4\uB978 \uBAA8\uB378\uC5D0\uAC8C \uC9C8\uBB38",
|
|
11126
|
-
children: /* @__PURE__ */
|
|
11587
|
+
children: /* @__PURE__ */ jsx17(IconSvg, { name: "robot-line", size: 12, color: "var(--chatllm-text-muted)" })
|
|
11127
11588
|
}
|
|
11128
11589
|
),
|
|
11129
|
-
showModelMenu && /* @__PURE__ */
|
|
11590
|
+
showModelMenu && /* @__PURE__ */ jsx17(
|
|
11130
11591
|
ModelMenu,
|
|
11131
11592
|
{
|
|
11132
11593
|
models: otherModels,
|
|
@@ -11145,7 +11606,7 @@ var MessageBubble = ({
|
|
|
11145
11606
|
}
|
|
11146
11607
|
);
|
|
11147
11608
|
};
|
|
11148
|
-
var ModelMenu = ({ models, onSelect, onClose }) => /* @__PURE__ */
|
|
11609
|
+
var ModelMenu = ({ models, onSelect, onClose }) => /* @__PURE__ */ jsxs16(
|
|
11149
11610
|
"div",
|
|
11150
11611
|
{
|
|
11151
11612
|
style: {
|
|
@@ -11163,7 +11624,7 @@ var ModelMenu = ({ models, onSelect, onClose }) => /* @__PURE__ */ jsxs15(
|
|
|
11163
11624
|
},
|
|
11164
11625
|
onMouseLeave: onClose,
|
|
11165
11626
|
children: [
|
|
11166
|
-
/* @__PURE__ */
|
|
11627
|
+
/* @__PURE__ */ jsx17(
|
|
11167
11628
|
"div",
|
|
11168
11629
|
{
|
|
11169
11630
|
style: {
|
|
@@ -11178,7 +11639,7 @@ var ModelMenu = ({ models, onSelect, onClose }) => /* @__PURE__ */ jsxs15(
|
|
|
11178
11639
|
children: "\uB2E4\uB978 \uBAA8\uB378\uC5D0\uAC8C \uC9C8\uBB38"
|
|
11179
11640
|
}
|
|
11180
11641
|
),
|
|
11181
|
-
models.map((model) => /* @__PURE__ */
|
|
11642
|
+
models.map((model) => /* @__PURE__ */ jsxs16(
|
|
11182
11643
|
"button",
|
|
11183
11644
|
{
|
|
11184
11645
|
onClick: () => onSelect(model.id),
|
|
@@ -11203,9 +11664,9 @@ var ModelMenu = ({ models, onSelect, onClose }) => /* @__PURE__ */ jsxs15(
|
|
|
11203
11664
|
e.currentTarget.style.backgroundColor = "transparent";
|
|
11204
11665
|
},
|
|
11205
11666
|
children: [
|
|
11206
|
-
/* @__PURE__ */
|
|
11207
|
-
/* @__PURE__ */
|
|
11208
|
-
model.provider && /* @__PURE__ */
|
|
11667
|
+
/* @__PURE__ */ jsx17(IconSvg, { name: "robot-line", size: 16, color: "var(--chatllm-primary)" }),
|
|
11668
|
+
/* @__PURE__ */ jsx17("span", { style: { flex: 1, fontWeight: 500 }, children: model.name }),
|
|
11669
|
+
model.provider && /* @__PURE__ */ jsx17(
|
|
11209
11670
|
"span",
|
|
11210
11671
|
{
|
|
11211
11672
|
style: {
|
|
@@ -11254,7 +11715,7 @@ var navButtonStyle = {
|
|
|
11254
11715
|
};
|
|
11255
11716
|
|
|
11256
11717
|
// src/react/components/MessageList.tsx
|
|
11257
|
-
import { jsx as
|
|
11718
|
+
import { jsx as jsx18, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
11258
11719
|
var MessageList = ({
|
|
11259
11720
|
messages,
|
|
11260
11721
|
isLoading,
|
|
@@ -11284,14 +11745,14 @@ var MessageList = ({
|
|
|
11284
11745
|
onExport,
|
|
11285
11746
|
onToggleChecklistPanel
|
|
11286
11747
|
}) => {
|
|
11287
|
-
const messagesEndRef =
|
|
11288
|
-
const containerRef =
|
|
11289
|
-
const [selectedText, setSelectedText] =
|
|
11290
|
-
const [selectionPosition, setSelectionPosition] =
|
|
11291
|
-
const [showScrollButton, setShowScrollButton] =
|
|
11292
|
-
const userScrollLockRef =
|
|
11748
|
+
const messagesEndRef = useRef10(null);
|
|
11749
|
+
const containerRef = useRef10(null);
|
|
11750
|
+
const [selectedText, setSelectedText] = useState18("");
|
|
11751
|
+
const [selectionPosition, setSelectionPosition] = useState18(null);
|
|
11752
|
+
const [showScrollButton, setShowScrollButton] = useState18(false);
|
|
11753
|
+
const userScrollLockRef = useRef10(false);
|
|
11293
11754
|
const SCROLL_THRESHOLD = 100;
|
|
11294
|
-
|
|
11755
|
+
useEffect10(() => {
|
|
11295
11756
|
const container = containerRef.current;
|
|
11296
11757
|
if (!container) return;
|
|
11297
11758
|
const handleWheel = (e) => {
|
|
@@ -11328,7 +11789,7 @@ var MessageList = ({
|
|
|
11328
11789
|
container.removeEventListener("touchmove", handleTouchMove);
|
|
11329
11790
|
};
|
|
11330
11791
|
}, []);
|
|
11331
|
-
const handleScroll =
|
|
11792
|
+
const handleScroll = useCallback10(() => {
|
|
11332
11793
|
if (!containerRef.current) return;
|
|
11333
11794
|
const { scrollTop, scrollHeight, clientHeight } = containerRef.current;
|
|
11334
11795
|
const distanceFromBottom = scrollHeight - scrollTop - clientHeight;
|
|
@@ -11337,14 +11798,14 @@ var MessageList = ({
|
|
|
11337
11798
|
setShowScrollButton(false);
|
|
11338
11799
|
}
|
|
11339
11800
|
}, []);
|
|
11340
|
-
|
|
11801
|
+
useEffect10(() => {
|
|
11341
11802
|
if (userScrollLockRef.current) return;
|
|
11342
11803
|
containerRef.current?.scrollTo({
|
|
11343
11804
|
top: containerRef.current.scrollHeight,
|
|
11344
11805
|
behavior: "smooth"
|
|
11345
11806
|
});
|
|
11346
11807
|
}, [messages]);
|
|
11347
|
-
const scrollToBottom =
|
|
11808
|
+
const scrollToBottom = useCallback10(() => {
|
|
11348
11809
|
userScrollLockRef.current = false;
|
|
11349
11810
|
setShowScrollButton(false);
|
|
11350
11811
|
containerRef.current?.scrollTo({
|
|
@@ -11352,7 +11813,7 @@ var MessageList = ({
|
|
|
11352
11813
|
behavior: "smooth"
|
|
11353
11814
|
});
|
|
11354
11815
|
}, []);
|
|
11355
|
-
const handleMouseUp =
|
|
11816
|
+
const handleMouseUp = useCallback10(() => {
|
|
11356
11817
|
const selection = typeof window !== "undefined" ? window.getSelection() : null;
|
|
11357
11818
|
const text = selection?.toString().trim();
|
|
11358
11819
|
if (text && text.length > 0) {
|
|
@@ -11386,7 +11847,7 @@ var MessageList = ({
|
|
|
11386
11847
|
}
|
|
11387
11848
|
}
|
|
11388
11849
|
};
|
|
11389
|
-
return /* @__PURE__ */
|
|
11850
|
+
return /* @__PURE__ */ jsxs17(
|
|
11390
11851
|
"div",
|
|
11391
11852
|
{
|
|
11392
11853
|
ref: containerRef,
|
|
@@ -11401,7 +11862,7 @@ var MessageList = ({
|
|
|
11401
11862
|
onScroll: handleScroll,
|
|
11402
11863
|
onMouseUp: handleMouseUp,
|
|
11403
11864
|
children: [
|
|
11404
|
-
/* @__PURE__ */
|
|
11865
|
+
/* @__PURE__ */ jsxs17(
|
|
11405
11866
|
"div",
|
|
11406
11867
|
{
|
|
11407
11868
|
style: {
|
|
@@ -11416,7 +11877,7 @@ var MessageList = ({
|
|
|
11416
11877
|
const nextAssistant = message.role === "user" && index + 1 < messages.length ? messages[index + 1] : null;
|
|
11417
11878
|
const assistantForAlts = nextAssistant?.role === "assistant" ? nextAssistant : null;
|
|
11418
11879
|
const activeAltIndex = assistantForAlts ? activeAlternatives[assistantForAlts.id] ?? 0 : 0;
|
|
11419
|
-
const bubbleElement = /* @__PURE__ */
|
|
11880
|
+
const bubbleElement = /* @__PURE__ */ jsx18(
|
|
11420
11881
|
MessageBubble,
|
|
11421
11882
|
{
|
|
11422
11883
|
message,
|
|
@@ -11453,13 +11914,13 @@ var MessageList = ({
|
|
|
11453
11914
|
},
|
|
11454
11915
|
message.id
|
|
11455
11916
|
);
|
|
11456
|
-
return renderMessage ? /* @__PURE__ */
|
|
11917
|
+
return renderMessage ? /* @__PURE__ */ jsx18(React14.Fragment, { children: renderMessage(message, bubbleElement) }, message.id) : bubbleElement;
|
|
11457
11918
|
}),
|
|
11458
|
-
/* @__PURE__ */
|
|
11919
|
+
/* @__PURE__ */ jsx18("div", { ref: messagesEndRef })
|
|
11459
11920
|
]
|
|
11460
11921
|
}
|
|
11461
11922
|
),
|
|
11462
|
-
showScrollButton && /* @__PURE__ */
|
|
11923
|
+
showScrollButton && /* @__PURE__ */ jsx18(
|
|
11463
11924
|
"button",
|
|
11464
11925
|
{
|
|
11465
11926
|
onClick: scrollToBottom,
|
|
@@ -11482,10 +11943,10 @@ var MessageList = ({
|
|
|
11482
11943
|
zIndex: 10,
|
|
11483
11944
|
transition: "opacity 0.2s"
|
|
11484
11945
|
},
|
|
11485
|
-
children: /* @__PURE__ */
|
|
11946
|
+
children: /* @__PURE__ */ jsx18(IconSvg, { name: "arrow-down-s-line", size: 24, color: "var(--chatllm-text-secondary)" })
|
|
11486
11947
|
}
|
|
11487
11948
|
),
|
|
11488
|
-
selectionPosition && /* @__PURE__ */
|
|
11949
|
+
selectionPosition && /* @__PURE__ */ jsxs17(
|
|
11489
11950
|
"div",
|
|
11490
11951
|
{
|
|
11491
11952
|
style: {
|
|
@@ -11497,7 +11958,7 @@ var MessageList = ({
|
|
|
11497
11958
|
pointerEvents: "auto"
|
|
11498
11959
|
},
|
|
11499
11960
|
children: [
|
|
11500
|
-
/* @__PURE__ */
|
|
11961
|
+
/* @__PURE__ */ jsxs17(
|
|
11501
11962
|
"button",
|
|
11502
11963
|
{
|
|
11503
11964
|
onClick: handleQuote,
|
|
@@ -11517,12 +11978,12 @@ var MessageList = ({
|
|
|
11517
11978
|
whiteSpace: "nowrap"
|
|
11518
11979
|
},
|
|
11519
11980
|
children: [
|
|
11520
|
-
/* @__PURE__ */
|
|
11981
|
+
/* @__PURE__ */ jsx18(IconSvg, { name: "double-quotes-l", size: 16, color: "#ffffff" }),
|
|
11521
11982
|
"\uC778\uC6A9\uD558\uAE30"
|
|
11522
11983
|
]
|
|
11523
11984
|
}
|
|
11524
11985
|
),
|
|
11525
|
-
/* @__PURE__ */
|
|
11986
|
+
/* @__PURE__ */ jsx18(
|
|
11526
11987
|
"div",
|
|
11527
11988
|
{
|
|
11528
11989
|
style: {
|
|
@@ -11547,8 +12008,8 @@ var MessageList = ({
|
|
|
11547
12008
|
};
|
|
11548
12009
|
|
|
11549
12010
|
// src/react/components/SettingsModal.tsx
|
|
11550
|
-
import { useState as
|
|
11551
|
-
import { jsx as
|
|
12011
|
+
import { useState as useState19, useEffect as useEffect11 } from "react";
|
|
12012
|
+
import { jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
11552
12013
|
var DEFAULT_IMPORT_MEMORY_PROMPT = `Export all of my stored memories and any context you've learned about me from past conversations. Preserve my words verbatim where possible, especially for instructions and preferences.
|
|
11553
12014
|
|
|
11554
12015
|
## Categories (output in this order):
|
|
@@ -11612,9 +12073,9 @@ var SettingsModal = ({
|
|
|
11612
12073
|
onImportMemory,
|
|
11613
12074
|
importMemoryPrompt
|
|
11614
12075
|
}) => {
|
|
11615
|
-
const [activeTab, setActiveTab] =
|
|
11616
|
-
const [localApiKey, setLocalApiKey] =
|
|
11617
|
-
|
|
12076
|
+
const [activeTab, setActiveTab] = useState19("general");
|
|
12077
|
+
const [localApiKey, setLocalApiKey] = useState19(apiKey);
|
|
12078
|
+
useEffect11(() => {
|
|
11618
12079
|
setLocalApiKey(apiKey);
|
|
11619
12080
|
}, [apiKey]);
|
|
11620
12081
|
if (!isOpen) return null;
|
|
@@ -11640,7 +12101,7 @@ var SettingsModal = ({
|
|
|
11640
12101
|
setLocalApiKey(value);
|
|
11641
12102
|
onApiKeyChange?.(value);
|
|
11642
12103
|
};
|
|
11643
|
-
return /* @__PURE__ */
|
|
12104
|
+
return /* @__PURE__ */ jsx19(
|
|
11644
12105
|
"div",
|
|
11645
12106
|
{
|
|
11646
12107
|
className: "chatllm-settings-overlay",
|
|
@@ -11654,7 +12115,7 @@ var SettingsModal = ({
|
|
|
11654
12115
|
zIndex: 1e3
|
|
11655
12116
|
},
|
|
11656
12117
|
onClick: onClose,
|
|
11657
|
-
children: /* @__PURE__ */
|
|
12118
|
+
children: /* @__PURE__ */ jsxs18(
|
|
11658
12119
|
"div",
|
|
11659
12120
|
{
|
|
11660
12121
|
className: "chatllm-settings-modal",
|
|
@@ -11672,7 +12133,7 @@ var SettingsModal = ({
|
|
|
11672
12133
|
},
|
|
11673
12134
|
onClick: (e) => e.stopPropagation(),
|
|
11674
12135
|
children: [
|
|
11675
|
-
/* @__PURE__ */
|
|
12136
|
+
/* @__PURE__ */ jsxs18(
|
|
11676
12137
|
"div",
|
|
11677
12138
|
{
|
|
11678
12139
|
style: {
|
|
@@ -11683,7 +12144,7 @@ var SettingsModal = ({
|
|
|
11683
12144
|
flexDirection: "column"
|
|
11684
12145
|
},
|
|
11685
12146
|
children: [
|
|
11686
|
-
/* @__PURE__ */
|
|
12147
|
+
/* @__PURE__ */ jsx19("div", { style: { padding: "16px", borderBottom: "1px solid var(--chatllm-border, #e5e7eb)" }, children: /* @__PURE__ */ jsx19(
|
|
11687
12148
|
"button",
|
|
11688
12149
|
{
|
|
11689
12150
|
onClick: onClose,
|
|
@@ -11697,11 +12158,11 @@ var SettingsModal = ({
|
|
|
11697
12158
|
alignItems: "center",
|
|
11698
12159
|
justifyContent: "center"
|
|
11699
12160
|
},
|
|
11700
|
-
children: /* @__PURE__ */
|
|
12161
|
+
children: /* @__PURE__ */ jsx19(IconSvg, { name: "close-line", size: 20, color: "var(--chatllm-text-muted, #6b7280)" })
|
|
11701
12162
|
}
|
|
11702
12163
|
) }),
|
|
11703
|
-
/* @__PURE__ */
|
|
11704
|
-
/* @__PURE__ */
|
|
12164
|
+
/* @__PURE__ */ jsxs18("nav", { style: { flex: 1, padding: "8px" }, children: [
|
|
12165
|
+
/* @__PURE__ */ jsx19(
|
|
11705
12166
|
TabButton,
|
|
11706
12167
|
{
|
|
11707
12168
|
active: activeTab === "general",
|
|
@@ -11710,7 +12171,7 @@ var SettingsModal = ({
|
|
|
11710
12171
|
label: "\uC77C\uBC18"
|
|
11711
12172
|
}
|
|
11712
12173
|
),
|
|
11713
|
-
/* @__PURE__ */
|
|
12174
|
+
/* @__PURE__ */ jsx19(
|
|
11714
12175
|
TabButton,
|
|
11715
12176
|
{
|
|
11716
12177
|
active: activeTab === "personalization",
|
|
@@ -11719,7 +12180,7 @@ var SettingsModal = ({
|
|
|
11719
12180
|
label: "\uAC1C\uC778 \uB9DE\uCDA4 \uC124\uC815"
|
|
11720
12181
|
}
|
|
11721
12182
|
),
|
|
11722
|
-
showMemoryTab && /* @__PURE__ */
|
|
12183
|
+
showMemoryTab && /* @__PURE__ */ jsx19(
|
|
11723
12184
|
TabButton,
|
|
11724
12185
|
{
|
|
11725
12186
|
active: activeTab === "memory",
|
|
@@ -11728,7 +12189,7 @@ var SettingsModal = ({
|
|
|
11728
12189
|
label: "AI \uBA54\uBAA8\uB9AC"
|
|
11729
12190
|
}
|
|
11730
12191
|
),
|
|
11731
|
-
showMemoryTab && enableProjects && /* @__PURE__ */
|
|
12192
|
+
showMemoryTab && enableProjects && /* @__PURE__ */ jsx19(
|
|
11732
12193
|
TabButton,
|
|
11733
12194
|
{
|
|
11734
12195
|
active: activeTab === "project-memory",
|
|
@@ -11737,7 +12198,7 @@ var SettingsModal = ({
|
|
|
11737
12198
|
label: "\uD504\uB85C\uC81D\uD2B8 \uBA54\uBAA8\uB9AC"
|
|
11738
12199
|
}
|
|
11739
12200
|
),
|
|
11740
|
-
/* @__PURE__ */
|
|
12201
|
+
/* @__PURE__ */ jsx19(
|
|
11741
12202
|
TabButton,
|
|
11742
12203
|
{
|
|
11743
12204
|
active: activeTab === "data",
|
|
@@ -11750,24 +12211,24 @@ var SettingsModal = ({
|
|
|
11750
12211
|
]
|
|
11751
12212
|
}
|
|
11752
12213
|
),
|
|
11753
|
-
/* @__PURE__ */
|
|
11754
|
-
activeTab === "general" && /* @__PURE__ */
|
|
11755
|
-
/* @__PURE__ */
|
|
11756
|
-
/* @__PURE__ */
|
|
12214
|
+
/* @__PURE__ */ jsxs18("div", { style: { flex: 1, overflow: "auto", padding: "24px" }, children: [
|
|
12215
|
+
activeTab === "general" && /* @__PURE__ */ jsxs18("div", { children: [
|
|
12216
|
+
/* @__PURE__ */ jsx19("h2", { style: { fontSize: "20px", fontWeight: 600, marginBottom: "24px", color: "var(--chatllm-text, #1f2937)" }, children: "\uC77C\uBC18" }),
|
|
12217
|
+
/* @__PURE__ */ jsx19(SettingRow, { label: "\uC5B8\uC5B4", children: /* @__PURE__ */ jsxs18(
|
|
11757
12218
|
"select",
|
|
11758
12219
|
{
|
|
11759
12220
|
value: personalization.language,
|
|
11760
12221
|
onChange: (e) => onPersonalizationChange({ ...personalization, language: e.target.value }),
|
|
11761
12222
|
style: selectStyle,
|
|
11762
12223
|
children: [
|
|
11763
|
-
/* @__PURE__ */
|
|
11764
|
-
/* @__PURE__ */
|
|
11765
|
-
/* @__PURE__ */
|
|
11766
|
-
/* @__PURE__ */
|
|
12224
|
+
/* @__PURE__ */ jsx19("option", { value: "auto", children: "\uC790\uB3D9 \uD0D0\uC9C0" }),
|
|
12225
|
+
/* @__PURE__ */ jsx19("option", { value: "ko", children: "\uD55C\uAD6D\uC5B4" }),
|
|
12226
|
+
/* @__PURE__ */ jsx19("option", { value: "en", children: "English" }),
|
|
12227
|
+
/* @__PURE__ */ jsx19("option", { value: "ja", children: "\u65E5\u672C\u8A9E" })
|
|
11767
12228
|
]
|
|
11768
12229
|
}
|
|
11769
12230
|
) }),
|
|
11770
|
-
/* @__PURE__ */
|
|
12231
|
+
/* @__PURE__ */ jsx19(SettingRow, { label: "\uAE30\uBCF8\uAC12\uC73C\uB85C \uCD08\uAE30\uD654", description: "\uBAA8\uB4E0 \uC124\uC815\uC744 \uCD08\uAE30 \uC0C1\uD0DC\uB85C \uB418\uB3CC\uB9BD\uB2C8\uB2E4", children: /* @__PURE__ */ jsx19(
|
|
11771
12232
|
"button",
|
|
11772
12233
|
{
|
|
11773
12234
|
onClick: () => onPersonalizationChange(DEFAULT_PERSONALIZATION2),
|
|
@@ -11775,11 +12236,11 @@ var SettingsModal = ({
|
|
|
11775
12236
|
children: "\uCD08\uAE30\uD654"
|
|
11776
12237
|
}
|
|
11777
12238
|
) }),
|
|
11778
|
-
onApiKeyChange && /* @__PURE__ */
|
|
11779
|
-
/* @__PURE__ */
|
|
11780
|
-
/* @__PURE__ */
|
|
11781
|
-
/* @__PURE__ */
|
|
11782
|
-
/* @__PURE__ */
|
|
12239
|
+
onApiKeyChange && /* @__PURE__ */ jsxs18("div", { style: { marginTop: "32px", paddingTop: "24px", borderTop: "1px solid var(--chatllm-border, #e5e7eb)" }, children: [
|
|
12240
|
+
/* @__PURE__ */ jsx19("h3", { style: { fontSize: "16px", fontWeight: 500, marginBottom: "16px", color: "var(--chatllm-text, #1f2937)" }, children: "API \uC124\uC815" }),
|
|
12241
|
+
/* @__PURE__ */ jsxs18("div", { children: [
|
|
12242
|
+
/* @__PURE__ */ jsx19("label", { style: { display: "block", fontSize: "14px", marginBottom: "8px", color: "var(--chatllm-text, #374151)" }, children: apiKeyLabel }),
|
|
12243
|
+
/* @__PURE__ */ jsx19(
|
|
11783
12244
|
"input",
|
|
11784
12245
|
{
|
|
11785
12246
|
type: "password",
|
|
@@ -11789,18 +12250,18 @@ var SettingsModal = ({
|
|
|
11789
12250
|
style: inputStyle
|
|
11790
12251
|
}
|
|
11791
12252
|
),
|
|
11792
|
-
/* @__PURE__ */
|
|
12253
|
+
/* @__PURE__ */ jsx19("p", { style: { fontSize: "12px", color: "var(--chatllm-text-muted, #9ca3af)", marginTop: "4px" }, children: apiKeyDescription })
|
|
11793
12254
|
] })
|
|
11794
12255
|
] })
|
|
11795
12256
|
] }),
|
|
11796
|
-
activeTab === "personalization" && /* @__PURE__ */
|
|
11797
|
-
/* @__PURE__ */
|
|
11798
|
-
/* @__PURE__ */
|
|
11799
|
-
/* @__PURE__ */
|
|
11800
|
-
/* @__PURE__ */
|
|
11801
|
-
/* @__PURE__ */
|
|
11802
|
-
/* @__PURE__ */
|
|
11803
|
-
/* @__PURE__ */
|
|
12257
|
+
activeTab === "personalization" && /* @__PURE__ */ jsxs18("div", { children: [
|
|
12258
|
+
/* @__PURE__ */ jsx19("h2", { style: { fontSize: "20px", fontWeight: 600, marginBottom: "24px", color: "var(--chatllm-text, #1f2937)" }, children: "\uAC1C\uC778 \uB9DE\uCDA4 \uC124\uC815" }),
|
|
12259
|
+
/* @__PURE__ */ jsxs18("section", { style: { marginBottom: "32px" }, children: [
|
|
12260
|
+
/* @__PURE__ */ jsx19("h3", { style: { fontSize: "14px", fontWeight: 500, color: "var(--chatllm-text-muted, #6b7280)", marginBottom: "16px" }, children: "\uC0AC\uC6A9\uC790 \uD504\uB85C\uD544" }),
|
|
12261
|
+
/* @__PURE__ */ jsxs18("div", { style: { display: "flex", flexDirection: "column", gap: "12px" }, children: [
|
|
12262
|
+
/* @__PURE__ */ jsxs18("div", { children: [
|
|
12263
|
+
/* @__PURE__ */ jsx19("label", { style: labelStyle, children: "\uB2C9\uB124\uC784" }),
|
|
12264
|
+
/* @__PURE__ */ jsx19(
|
|
11804
12265
|
"input",
|
|
11805
12266
|
{
|
|
11806
12267
|
type: "text",
|
|
@@ -11811,9 +12272,9 @@ var SettingsModal = ({
|
|
|
11811
12272
|
}
|
|
11812
12273
|
)
|
|
11813
12274
|
] }),
|
|
11814
|
-
/* @__PURE__ */
|
|
11815
|
-
/* @__PURE__ */
|
|
11816
|
-
/* @__PURE__ */
|
|
12275
|
+
/* @__PURE__ */ jsxs18("div", { children: [
|
|
12276
|
+
/* @__PURE__ */ jsx19("label", { style: labelStyle, children: "\uC9C1\uC5C5" }),
|
|
12277
|
+
/* @__PURE__ */ jsx19(
|
|
11817
12278
|
"input",
|
|
11818
12279
|
{
|
|
11819
12280
|
type: "text",
|
|
@@ -11824,9 +12285,9 @@ var SettingsModal = ({
|
|
|
11824
12285
|
}
|
|
11825
12286
|
)
|
|
11826
12287
|
] }),
|
|
11827
|
-
/* @__PURE__ */
|
|
11828
|
-
/* @__PURE__ */
|
|
11829
|
-
/* @__PURE__ */
|
|
12288
|
+
/* @__PURE__ */ jsxs18("div", { children: [
|
|
12289
|
+
/* @__PURE__ */ jsx19("label", { style: labelStyle, children: "\uCD94\uAC00 \uC815\uBCF4" }),
|
|
12290
|
+
/* @__PURE__ */ jsx19(
|
|
11830
12291
|
"textarea",
|
|
11831
12292
|
{
|
|
11832
12293
|
value: personalization.userProfile.additionalInfo || "",
|
|
@@ -11839,62 +12300,62 @@ var SettingsModal = ({
|
|
|
11839
12300
|
] })
|
|
11840
12301
|
] })
|
|
11841
12302
|
] }),
|
|
11842
|
-
/* @__PURE__ */
|
|
11843
|
-
/* @__PURE__ */
|
|
11844
|
-
/* @__PURE__ */
|
|
12303
|
+
/* @__PURE__ */ jsxs18("section", { children: [
|
|
12304
|
+
/* @__PURE__ */ jsx19("h3", { style: { fontSize: "14px", fontWeight: 500, color: "var(--chatllm-text-muted, #6b7280)", marginBottom: "16px" }, children: "\uC751\uB2F5 \uC2A4\uD0C0\uC77C" }),
|
|
12305
|
+
/* @__PURE__ */ jsx19(SettingRow, { label: "\uB530\uB73B\uD568", children: /* @__PURE__ */ jsxs18(
|
|
11845
12306
|
"select",
|
|
11846
12307
|
{
|
|
11847
12308
|
value: personalization.responseStyle.warmth,
|
|
11848
12309
|
onChange: (e) => updateResponseStyle("warmth", e.target.value),
|
|
11849
12310
|
style: selectStyle,
|
|
11850
12311
|
children: [
|
|
11851
|
-
/* @__PURE__ */
|
|
11852
|
-
/* @__PURE__ */
|
|
11853
|
-
/* @__PURE__ */
|
|
12312
|
+
/* @__PURE__ */ jsx19("option", { value: "high", children: "\uB192\uC74C - \uCE5C\uADFC\uD558\uACE0 \uB530\uB73B\uD558\uAC8C" }),
|
|
12313
|
+
/* @__PURE__ */ jsx19("option", { value: "medium", children: "\uAE30\uBCF8\uAC12" }),
|
|
12314
|
+
/* @__PURE__ */ jsx19("option", { value: "low", children: "\uB0AE\uC74C - \uAC04\uACB0\uD558\uACE0 \uC0AC\uBB34\uC801\uC73C\uB85C" })
|
|
11854
12315
|
]
|
|
11855
12316
|
}
|
|
11856
12317
|
) }),
|
|
11857
|
-
/* @__PURE__ */
|
|
12318
|
+
/* @__PURE__ */ jsx19(SettingRow, { label: "\uC5F4\uC815\uC801", children: /* @__PURE__ */ jsxs18(
|
|
11858
12319
|
"select",
|
|
11859
12320
|
{
|
|
11860
12321
|
value: personalization.responseStyle.enthusiasm,
|
|
11861
12322
|
onChange: (e) => updateResponseStyle("enthusiasm", e.target.value),
|
|
11862
12323
|
style: selectStyle,
|
|
11863
12324
|
children: [
|
|
11864
|
-
/* @__PURE__ */
|
|
11865
|
-
/* @__PURE__ */
|
|
11866
|
-
/* @__PURE__ */
|
|
12325
|
+
/* @__PURE__ */ jsx19("option", { value: "high", children: "\uB192\uC74C - \uC801\uADF9\uC801\uC774\uACE0 \uD65C\uBC1C\uD558\uAC8C" }),
|
|
12326
|
+
/* @__PURE__ */ jsx19("option", { value: "medium", children: "\uAE30\uBCF8\uAC12" }),
|
|
12327
|
+
/* @__PURE__ */ jsx19("option", { value: "low", children: "\uB0AE\uC74C - \uCC28\uBD84\uD558\uACE0 \uC808\uC81C\uC788\uAC8C" })
|
|
11867
12328
|
]
|
|
11868
12329
|
}
|
|
11869
12330
|
) }),
|
|
11870
|
-
/* @__PURE__ */
|
|
12331
|
+
/* @__PURE__ */ jsx19(SettingRow, { label: "\uC774\uBAA8\uC9C0 \uC0AC\uC6A9", children: /* @__PURE__ */ jsxs18(
|
|
11871
12332
|
"select",
|
|
11872
12333
|
{
|
|
11873
12334
|
value: personalization.responseStyle.emojiUsage,
|
|
11874
12335
|
onChange: (e) => updateResponseStyle("emojiUsage", e.target.value),
|
|
11875
12336
|
style: selectStyle,
|
|
11876
12337
|
children: [
|
|
11877
|
-
/* @__PURE__ */
|
|
11878
|
-
/* @__PURE__ */
|
|
11879
|
-
/* @__PURE__ */
|
|
12338
|
+
/* @__PURE__ */ jsx19("option", { value: "high", children: "\uB192\uC74C - \uC790\uC8FC \uC0AC\uC6A9" }),
|
|
12339
|
+
/* @__PURE__ */ jsx19("option", { value: "medium", children: "\uAE30\uBCF8\uAC12" }),
|
|
12340
|
+
/* @__PURE__ */ jsx19("option", { value: "low", children: "\uB0AE\uC74C - \uAC70\uC758 \uC0AC\uC6A9 \uC548 \uD568" })
|
|
11880
12341
|
]
|
|
11881
12342
|
}
|
|
11882
12343
|
) }),
|
|
11883
|
-
/* @__PURE__ */
|
|
12344
|
+
/* @__PURE__ */ jsx19(SettingRow, { label: "\uC751\uB2F5 \uAE38\uC774", children: /* @__PURE__ */ jsxs18(
|
|
11884
12345
|
"select",
|
|
11885
12346
|
{
|
|
11886
12347
|
value: personalization.responseStyle.verbosity,
|
|
11887
12348
|
onChange: (e) => updateResponseStyle("verbosity", e.target.value),
|
|
11888
12349
|
style: selectStyle,
|
|
11889
12350
|
children: [
|
|
11890
|
-
/* @__PURE__ */
|
|
11891
|
-
/* @__PURE__ */
|
|
11892
|
-
/* @__PURE__ */
|
|
12351
|
+
/* @__PURE__ */ jsx19("option", { value: "detailed", children: "\uC0C1\uC138 - \uC790\uC138\uD558\uAC8C \uC124\uBA85" }),
|
|
12352
|
+
/* @__PURE__ */ jsx19("option", { value: "balanced", children: "\uAE30\uBCF8\uAC12" }),
|
|
12353
|
+
/* @__PURE__ */ jsx19("option", { value: "concise", children: "\uAC04\uACB0 - \uD575\uC2EC\uB9CC \uC694\uC57D" })
|
|
11893
12354
|
]
|
|
11894
12355
|
}
|
|
11895
12356
|
) })
|
|
11896
12357
|
] }),
|
|
11897
|
-
onSave && /* @__PURE__ */
|
|
12358
|
+
onSave && /* @__PURE__ */ jsx19("div", { style: { marginTop: "24px", display: "flex", justifyContent: "flex-end" }, children: /* @__PURE__ */ jsx19(
|
|
11898
12359
|
"button",
|
|
11899
12360
|
{
|
|
11900
12361
|
onClick: onSave,
|
|
@@ -11915,7 +12376,7 @@ var SettingsModal = ({
|
|
|
11915
12376
|
}
|
|
11916
12377
|
) })
|
|
11917
12378
|
] }),
|
|
11918
|
-
activeTab === "memory" && showMemoryTab && /* @__PURE__ */
|
|
12379
|
+
activeTab === "memory" && showMemoryTab && /* @__PURE__ */ jsx19(
|
|
11919
12380
|
MemoryTabContent,
|
|
11920
12381
|
{
|
|
11921
12382
|
items: memoryItems,
|
|
@@ -11926,7 +12387,7 @@ var SettingsModal = ({
|
|
|
11926
12387
|
importMemoryPrompt
|
|
11927
12388
|
}
|
|
11928
12389
|
),
|
|
11929
|
-
activeTab === "project-memory" && showMemoryTab && enableProjects && /* @__PURE__ */
|
|
12390
|
+
activeTab === "project-memory" && showMemoryTab && enableProjects && /* @__PURE__ */ jsx19(
|
|
11930
12391
|
MemoryTabContent,
|
|
11931
12392
|
{
|
|
11932
12393
|
items: projectMemoryItems,
|
|
@@ -11937,9 +12398,9 @@ var SettingsModal = ({
|
|
|
11937
12398
|
emptyDescription: "\uB300\uD654\uAC00 \uC9C4\uD589\uB418\uBA74 AI\uAC00 \uD504\uB85C\uC81D\uD2B8 \uB9E5\uB77D\uC744 \uC790\uB3D9\uC73C\uB85C \uD559\uC2B5\uD569\uB2C8\uB2E4"
|
|
11938
12399
|
}
|
|
11939
12400
|
),
|
|
11940
|
-
activeTab === "data" && /* @__PURE__ */
|
|
11941
|
-
/* @__PURE__ */
|
|
11942
|
-
/* @__PURE__ */
|
|
12401
|
+
activeTab === "data" && /* @__PURE__ */ jsxs18("div", { children: [
|
|
12402
|
+
/* @__PURE__ */ jsx19("h2", { style: { fontSize: "20px", fontWeight: 600, marginBottom: "24px", color: "var(--chatllm-text, #1f2937)" }, children: "\uB370\uC774\uD130 \uC81C\uC5B4" }),
|
|
12403
|
+
/* @__PURE__ */ jsx19(SettingRow, { label: "\uBA54\uBAA8\uB9AC \uC0AC\uC6A9", description: "\uB300\uD654 \uCEE8\uD14D\uC2A4\uD2B8\uB97C \uAE30\uC5B5\uD569\uB2C8\uB2E4", children: /* @__PURE__ */ jsx19(
|
|
11943
12404
|
"button",
|
|
11944
12405
|
{
|
|
11945
12406
|
onClick: () => onPersonalizationChange({ ...personalization, useMemory: !personalization.useMemory }),
|
|
@@ -11953,7 +12414,7 @@ var SettingsModal = ({
|
|
|
11953
12414
|
position: "relative",
|
|
11954
12415
|
transition: "background-color 0.2s"
|
|
11955
12416
|
},
|
|
11956
|
-
children: /* @__PURE__ */
|
|
12417
|
+
children: /* @__PURE__ */ jsx19(
|
|
11957
12418
|
"div",
|
|
11958
12419
|
{
|
|
11959
12420
|
style: {
|
|
@@ -11971,7 +12432,7 @@ var SettingsModal = ({
|
|
|
11971
12432
|
)
|
|
11972
12433
|
}
|
|
11973
12434
|
) }),
|
|
11974
|
-
onClearAllData && /* @__PURE__ */
|
|
12435
|
+
onClearAllData && /* @__PURE__ */ jsx19(SettingRow, { label: "\uB300\uD654 \uAE30\uB85D \uC0AD\uC81C", description: "\uBAA8\uB4E0 \uB300\uD654 \uAE30\uB85D\uC744 \uC0AD\uC81C\uD569\uB2C8\uB2E4", children: /* @__PURE__ */ jsx19(
|
|
11975
12436
|
"button",
|
|
11976
12437
|
{
|
|
11977
12438
|
onClick: () => {
|
|
@@ -11991,7 +12452,7 @@ var SettingsModal = ({
|
|
|
11991
12452
|
}
|
|
11992
12453
|
);
|
|
11993
12454
|
};
|
|
11994
|
-
var TabButton = ({ active, onClick, icon, label }) => /* @__PURE__ */
|
|
12455
|
+
var TabButton = ({ active, onClick, icon, label }) => /* @__PURE__ */ jsxs18(
|
|
11995
12456
|
"button",
|
|
11996
12457
|
{
|
|
11997
12458
|
onClick,
|
|
@@ -12012,12 +12473,12 @@ var TabButton = ({ active, onClick, icon, label }) => /* @__PURE__ */ jsxs17(
|
|
|
12012
12473
|
marginBottom: "4px"
|
|
12013
12474
|
},
|
|
12014
12475
|
children: [
|
|
12015
|
-
/* @__PURE__ */
|
|
12476
|
+
/* @__PURE__ */ jsx19(IconSvg, { name: icon, size: 20 }),
|
|
12016
12477
|
label
|
|
12017
12478
|
]
|
|
12018
12479
|
}
|
|
12019
12480
|
);
|
|
12020
|
-
var SettingRow = ({ label, description, children }) => /* @__PURE__ */
|
|
12481
|
+
var SettingRow = ({ label, description, children }) => /* @__PURE__ */ jsxs18(
|
|
12021
12482
|
"div",
|
|
12022
12483
|
{
|
|
12023
12484
|
style: {
|
|
@@ -12028,9 +12489,9 @@ var SettingRow = ({ label, description, children }) => /* @__PURE__ */ jsxs17(
|
|
|
12028
12489
|
borderBottom: "1px solid var(--chatllm-border-light, #f3f4f6)"
|
|
12029
12490
|
},
|
|
12030
12491
|
children: [
|
|
12031
|
-
/* @__PURE__ */
|
|
12032
|
-
/* @__PURE__ */
|
|
12033
|
-
description && /* @__PURE__ */
|
|
12492
|
+
/* @__PURE__ */ jsxs18("div", { children: [
|
|
12493
|
+
/* @__PURE__ */ jsx19("span", { style: { fontSize: "14px", color: "var(--chatllm-text, #374151)" }, children: label }),
|
|
12494
|
+
description && /* @__PURE__ */ jsx19("p", { style: { fontSize: "12px", color: "var(--chatllm-text-muted, #9ca3af)", marginTop: "2px" }, children: description })
|
|
12034
12495
|
] }),
|
|
12035
12496
|
children
|
|
12036
12497
|
]
|
|
@@ -12090,11 +12551,11 @@ var memoryCategoryColors = {
|
|
|
12090
12551
|
preference: "#8b5cf6"
|
|
12091
12552
|
};
|
|
12092
12553
|
var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "AI \uBA54\uBAA8\uB9AC", emptyMessage = "\uC800\uC7A5\uB41C \uBA54\uBAA8\uB9AC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", emptyDescription = "\uB300\uD654\uAC00 \uC9C4\uD589\uB418\uBA74 AI\uAC00 \uC790\uB3D9\uC73C\uB85C \uC815\uBCF4\uB97C \uD559\uC2B5\uD569\uB2C8\uB2E4", onImportMemory, importMemoryPrompt }) => {
|
|
12093
|
-
const [activeFilter, setActiveFilter] =
|
|
12094
|
-
const [expandedId, setExpandedId] =
|
|
12095
|
-
const [importModalOpen, setImportModalOpen] =
|
|
12096
|
-
const [importText, setImportText] =
|
|
12097
|
-
const [promptCopied, setPromptCopied] =
|
|
12554
|
+
const [activeFilter, setActiveFilter] = useState19("all");
|
|
12555
|
+
const [expandedId, setExpandedId] = useState19(null);
|
|
12556
|
+
const [importModalOpen, setImportModalOpen] = useState19(false);
|
|
12557
|
+
const [importText, setImportText] = useState19("");
|
|
12558
|
+
const [promptCopied, setPromptCopied] = useState19(false);
|
|
12098
12559
|
const filteredItems = activeFilter === "all" ? items : items.filter((item) => item.category === activeFilter);
|
|
12099
12560
|
const formatDate = (timestamp) => {
|
|
12100
12561
|
const date = new Date(timestamp);
|
|
@@ -12105,11 +12566,11 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12105
12566
|
minute: "2-digit"
|
|
12106
12567
|
});
|
|
12107
12568
|
};
|
|
12108
|
-
return /* @__PURE__ */
|
|
12109
|
-
/* @__PURE__ */
|
|
12110
|
-
/* @__PURE__ */
|
|
12111
|
-
/* @__PURE__ */
|
|
12112
|
-
onImportMemory && /* @__PURE__ */
|
|
12569
|
+
return /* @__PURE__ */ jsxs18("div", { children: [
|
|
12570
|
+
/* @__PURE__ */ jsxs18("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", marginBottom: "24px" }, children: [
|
|
12571
|
+
/* @__PURE__ */ jsx19("h2", { style: { fontSize: "20px", fontWeight: 600, color: "var(--chatllm-text, #1f2937)", margin: 0 }, children: title }),
|
|
12572
|
+
/* @__PURE__ */ jsxs18("div", { style: { display: "flex", alignItems: "center", gap: "12px" }, children: [
|
|
12573
|
+
onImportMemory && /* @__PURE__ */ jsxs18(
|
|
12113
12574
|
"button",
|
|
12114
12575
|
{
|
|
12115
12576
|
onClick: () => setImportModalOpen(true),
|
|
@@ -12130,18 +12591,18 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12130
12591
|
onMouseEnter: (e) => e.currentTarget.style.opacity = "0.85",
|
|
12131
12592
|
onMouseLeave: (e) => e.currentTarget.style.opacity = "1",
|
|
12132
12593
|
children: [
|
|
12133
|
-
/* @__PURE__ */
|
|
12594
|
+
/* @__PURE__ */ jsx19(IconSvg, { name: "download-line", size: 14, color: "var(--chatllm-primary, #3584FA)" }),
|
|
12134
12595
|
"\uAC00\uC838\uC624\uAE30"
|
|
12135
12596
|
]
|
|
12136
12597
|
}
|
|
12137
12598
|
),
|
|
12138
|
-
/* @__PURE__ */
|
|
12599
|
+
/* @__PURE__ */ jsxs18("span", { style: { fontSize: "13px", color: "var(--chatllm-text-muted, #9ca3af)" }, children: [
|
|
12139
12600
|
items.length,
|
|
12140
12601
|
"\uAC1C \uD56D\uBAA9"
|
|
12141
12602
|
] })
|
|
12142
12603
|
] })
|
|
12143
12604
|
] }),
|
|
12144
|
-
/* @__PURE__ */
|
|
12605
|
+
/* @__PURE__ */ jsx19("div", { style: { display: "flex", gap: "6px", marginBottom: "20px", flexWrap: "wrap" }, children: ["all", "fact", "skill", "preference"].map((tab) => /* @__PURE__ */ jsx19(
|
|
12145
12606
|
"button",
|
|
12146
12607
|
{
|
|
12147
12608
|
onClick: () => setActiveFilter(tab),
|
|
@@ -12159,7 +12620,7 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12159
12620
|
},
|
|
12160
12621
|
tab
|
|
12161
12622
|
)) }),
|
|
12162
|
-
contextSummary && activeFilter === "all" && /* @__PURE__ */
|
|
12623
|
+
contextSummary && activeFilter === "all" && /* @__PURE__ */ jsxs18(
|
|
12163
12624
|
"div",
|
|
12164
12625
|
{
|
|
12165
12626
|
style: {
|
|
@@ -12170,19 +12631,19 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12170
12631
|
borderLeft: "3px solid var(--chatllm-primary, #3584FA)"
|
|
12171
12632
|
},
|
|
12172
12633
|
children: [
|
|
12173
|
-
/* @__PURE__ */
|
|
12174
|
-
/* @__PURE__ */
|
|
12175
|
-
/* @__PURE__ */
|
|
12634
|
+
/* @__PURE__ */ jsxs18("div", { style: { display: "flex", alignItems: "center", gap: "6px", marginBottom: "8px" }, children: [
|
|
12635
|
+
/* @__PURE__ */ jsx19(IconSvg, { name: "file-text-line", size: 14, color: "var(--chatllm-primary, #3584FA)" }),
|
|
12636
|
+
/* @__PURE__ */ jsx19("span", { style: { fontSize: "12px", fontWeight: 500, color: "var(--chatllm-primary, #3584FA)" }, children: "\uB300\uD654 \uC694\uC57D" })
|
|
12176
12637
|
] }),
|
|
12177
|
-
/* @__PURE__ */
|
|
12638
|
+
/* @__PURE__ */ jsx19("p", { style: { fontSize: "13px", lineHeight: "1.6", color: "var(--chatllm-text, #374151)", margin: 0 }, children: contextSummary })
|
|
12178
12639
|
]
|
|
12179
12640
|
}
|
|
12180
12641
|
),
|
|
12181
|
-
filteredItems.length === 0 ? /* @__PURE__ */
|
|
12182
|
-
/* @__PURE__ */
|
|
12183
|
-
/* @__PURE__ */
|
|
12184
|
-
/* @__PURE__ */
|
|
12185
|
-
] }) : /* @__PURE__ */
|
|
12642
|
+
filteredItems.length === 0 ? /* @__PURE__ */ jsxs18("div", { style: { padding: "40px 16px", textAlign: "center" }, children: [
|
|
12643
|
+
/* @__PURE__ */ jsx19(IconSvg, { name: "robot-line", size: 40, color: "var(--chatllm-text-muted, #d1d5db)" }),
|
|
12644
|
+
/* @__PURE__ */ jsx19("p", { style: { fontSize: "14px", color: "var(--chatllm-text-muted, #9ca3af)", marginTop: "12px" }, children: emptyMessage }),
|
|
12645
|
+
/* @__PURE__ */ jsx19("p", { style: { fontSize: "12px", color: "var(--chatllm-text-muted, #d1d5db)", marginTop: "4px" }, children: emptyDescription })
|
|
12646
|
+
] }) : /* @__PURE__ */ jsx19("div", { style: { display: "flex", flexDirection: "column", gap: "8px" }, children: filteredItems.map((item) => /* @__PURE__ */ jsxs18(
|
|
12186
12647
|
"div",
|
|
12187
12648
|
{
|
|
12188
12649
|
style: {
|
|
@@ -12195,10 +12656,10 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12195
12656
|
},
|
|
12196
12657
|
onClick: () => setExpandedId(expandedId === item.id ? null : item.id),
|
|
12197
12658
|
children: [
|
|
12198
|
-
/* @__PURE__ */
|
|
12199
|
-
/* @__PURE__ */
|
|
12200
|
-
/* @__PURE__ */
|
|
12201
|
-
item.category && /* @__PURE__ */
|
|
12659
|
+
/* @__PURE__ */ jsxs18("div", { style: { display: "flex", alignItems: "flex-start", justifyContent: "space-between" }, children: [
|
|
12660
|
+
/* @__PURE__ */ jsxs18("div", { style: { flex: 1, minWidth: 0 }, children: [
|
|
12661
|
+
/* @__PURE__ */ jsxs18("div", { style: { display: "flex", alignItems: "center", gap: "8px", marginBottom: "4px" }, children: [
|
|
12662
|
+
item.category && /* @__PURE__ */ jsx19(
|
|
12202
12663
|
"span",
|
|
12203
12664
|
{
|
|
12204
12665
|
style: {
|
|
@@ -12212,12 +12673,12 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12212
12673
|
children: memoryCategoryLabels[item.category]
|
|
12213
12674
|
}
|
|
12214
12675
|
),
|
|
12215
|
-
/* @__PURE__ */
|
|
12676
|
+
/* @__PURE__ */ jsx19("span", { style: { fontSize: "11px", color: "var(--chatllm-text-muted, #9ca3af)" }, children: formatDate(item.timestamp) })
|
|
12216
12677
|
] }),
|
|
12217
|
-
/* @__PURE__ */
|
|
12678
|
+
/* @__PURE__ */ jsx19("div", { style: { fontSize: "13px", fontWeight: 500, color: "var(--chatllm-text, #1f2937)" }, children: item.key })
|
|
12218
12679
|
] }),
|
|
12219
|
-
/* @__PURE__ */
|
|
12220
|
-
onDelete && /* @__PURE__ */
|
|
12680
|
+
/* @__PURE__ */ jsxs18("div", { style: { display: "flex", alignItems: "center", gap: "4px" }, children: [
|
|
12681
|
+
onDelete && /* @__PURE__ */ jsx19(
|
|
12221
12682
|
"button",
|
|
12222
12683
|
{
|
|
12223
12684
|
onClick: (e) => {
|
|
@@ -12233,10 +12694,10 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12233
12694
|
opacity: 0.5
|
|
12234
12695
|
},
|
|
12235
12696
|
"aria-label": "\uBA54\uBAA8\uB9AC \uC0AD\uC81C",
|
|
12236
|
-
children: /* @__PURE__ */
|
|
12697
|
+
children: /* @__PURE__ */ jsx19(IconSvg, { name: "delete-bin-line", size: 14, color: "var(--chatllm-text-muted, #9ca3af)" })
|
|
12237
12698
|
}
|
|
12238
12699
|
),
|
|
12239
|
-
/* @__PURE__ */
|
|
12700
|
+
/* @__PURE__ */ jsx19(
|
|
12240
12701
|
IconSvg,
|
|
12241
12702
|
{
|
|
12242
12703
|
name: expandedId === item.id ? "arrow-up-s-line" : "arrow-down-s-line",
|
|
@@ -12246,7 +12707,7 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12246
12707
|
)
|
|
12247
12708
|
] })
|
|
12248
12709
|
] }),
|
|
12249
|
-
expandedId === item.id && /* @__PURE__ */
|
|
12710
|
+
expandedId === item.id && /* @__PURE__ */ jsx19(
|
|
12250
12711
|
"div",
|
|
12251
12712
|
{
|
|
12252
12713
|
style: {
|
|
@@ -12254,7 +12715,7 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12254
12715
|
paddingTop: "12px",
|
|
12255
12716
|
borderTop: "1px solid var(--chatllm-border-light, #f3f4f6)"
|
|
12256
12717
|
},
|
|
12257
|
-
children: /* @__PURE__ */
|
|
12718
|
+
children: /* @__PURE__ */ jsx19(
|
|
12258
12719
|
"p",
|
|
12259
12720
|
{
|
|
12260
12721
|
style: {
|
|
@@ -12273,7 +12734,7 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12273
12734
|
},
|
|
12274
12735
|
item.id
|
|
12275
12736
|
)) }),
|
|
12276
|
-
onClearAll && items.length > 0 && /* @__PURE__ */
|
|
12737
|
+
onClearAll && items.length > 0 && /* @__PURE__ */ jsx19("div", { style: { marginTop: "24px", paddingTop: "16px", borderTop: "1px solid var(--chatllm-border, #e5e7eb)" }, children: /* @__PURE__ */ jsx19(
|
|
12277
12738
|
"button",
|
|
12278
12739
|
{
|
|
12279
12740
|
onClick: () => {
|
|
@@ -12285,7 +12746,7 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12285
12746
|
children: "\uC804\uCCB4 \uBA54\uBAA8\uB9AC \uC0AD\uC81C"
|
|
12286
12747
|
}
|
|
12287
12748
|
) }),
|
|
12288
|
-
importModalOpen && onImportMemory && /* @__PURE__ */
|
|
12749
|
+
importModalOpen && onImportMemory && /* @__PURE__ */ jsx19(
|
|
12289
12750
|
"div",
|
|
12290
12751
|
{
|
|
12291
12752
|
style: {
|
|
@@ -12301,7 +12762,7 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12301
12762
|
zIndex: 1100
|
|
12302
12763
|
},
|
|
12303
12764
|
onClick: () => setImportModalOpen(false),
|
|
12304
|
-
children: /* @__PURE__ */
|
|
12765
|
+
children: /* @__PURE__ */ jsxs18(
|
|
12305
12766
|
"div",
|
|
12306
12767
|
{
|
|
12307
12768
|
style: {
|
|
@@ -12314,7 +12775,7 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12314
12775
|
},
|
|
12315
12776
|
onClick: (e) => e.stopPropagation(),
|
|
12316
12777
|
children: [
|
|
12317
|
-
/* @__PURE__ */
|
|
12778
|
+
/* @__PURE__ */ jsxs18(
|
|
12318
12779
|
"div",
|
|
12319
12780
|
{
|
|
12320
12781
|
style: {
|
|
@@ -12324,8 +12785,8 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12324
12785
|
padding: "20px 24px 16px"
|
|
12325
12786
|
},
|
|
12326
12787
|
children: [
|
|
12327
|
-
/* @__PURE__ */
|
|
12328
|
-
/* @__PURE__ */
|
|
12788
|
+
/* @__PURE__ */ jsx19("h3", { style: { fontSize: "18px", fontWeight: 700, color: "var(--chatllm-text, #ffffff)", margin: 0 }, children: "Claude\uB85C \uBA54\uBAA8\uB9AC \uAC00\uC838\uC624\uAE30" }),
|
|
12789
|
+
/* @__PURE__ */ jsx19(
|
|
12329
12790
|
"button",
|
|
12330
12791
|
{
|
|
12331
12792
|
onClick: () => {
|
|
@@ -12340,16 +12801,16 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12340
12801
|
borderRadius: "6px",
|
|
12341
12802
|
cursor: "pointer"
|
|
12342
12803
|
},
|
|
12343
|
-
children: /* @__PURE__ */
|
|
12804
|
+
children: /* @__PURE__ */ jsx19(IconSvg, { name: "close-line", size: 20, color: "var(--chatllm-text-muted, #9ca3af)" })
|
|
12344
12805
|
}
|
|
12345
12806
|
)
|
|
12346
12807
|
]
|
|
12347
12808
|
}
|
|
12348
12809
|
),
|
|
12349
|
-
/* @__PURE__ */
|
|
12350
|
-
/* @__PURE__ */
|
|
12351
|
-
/* @__PURE__ */
|
|
12352
|
-
/* @__PURE__ */
|
|
12810
|
+
/* @__PURE__ */ jsxs18("div", { style: { padding: "0 24px 24px" }, children: [
|
|
12811
|
+
/* @__PURE__ */ jsxs18("div", { style: { marginBottom: "24px" }, children: [
|
|
12812
|
+
/* @__PURE__ */ jsxs18("div", { style: { display: "flex", alignItems: "center", gap: "10px", marginBottom: "12px" }, children: [
|
|
12813
|
+
/* @__PURE__ */ jsx19(
|
|
12353
12814
|
"div",
|
|
12354
12815
|
{
|
|
12355
12816
|
style: {
|
|
@@ -12368,9 +12829,9 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12368
12829
|
children: "1"
|
|
12369
12830
|
}
|
|
12370
12831
|
),
|
|
12371
|
-
/* @__PURE__ */
|
|
12832
|
+
/* @__PURE__ */ jsx19("span", { style: { fontSize: "14px", fontWeight: 500, color: "var(--chatllm-text, #ffffff)" }, children: "\uB2E4\uB978 AI \uC81C\uACF5\uC5C5\uCCB4\uC758 \uCC44\uD305\uC5D0 \uC774 \uD504\uB86C\uD504\uD2B8\uB97C \uBCF5\uC0AC\uD558\uC138\uC694" })
|
|
12372
12833
|
] }),
|
|
12373
|
-
/* @__PURE__ */
|
|
12834
|
+
/* @__PURE__ */ jsxs18(
|
|
12374
12835
|
"div",
|
|
12375
12836
|
{
|
|
12376
12837
|
style: {
|
|
@@ -12383,7 +12844,7 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12383
12844
|
overflow: "auto"
|
|
12384
12845
|
},
|
|
12385
12846
|
children: [
|
|
12386
|
-
/* @__PURE__ */
|
|
12847
|
+
/* @__PURE__ */ jsx19(
|
|
12387
12848
|
"p",
|
|
12388
12849
|
{
|
|
12389
12850
|
style: {
|
|
@@ -12396,7 +12857,7 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12396
12857
|
children: importMemoryPrompt || DEFAULT_IMPORT_MEMORY_PROMPT
|
|
12397
12858
|
}
|
|
12398
12859
|
),
|
|
12399
|
-
/* @__PURE__ */
|
|
12860
|
+
/* @__PURE__ */ jsxs18(
|
|
12400
12861
|
"button",
|
|
12401
12862
|
{
|
|
12402
12863
|
onClick: () => {
|
|
@@ -12421,7 +12882,7 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12421
12882
|
color: "var(--chatllm-text, #ffffff)"
|
|
12422
12883
|
},
|
|
12423
12884
|
children: [
|
|
12424
|
-
/* @__PURE__ */
|
|
12885
|
+
/* @__PURE__ */ jsx19(IconSvg, { name: promptCopied ? "check-line" : "file-copy-line", size: 14, color: "var(--chatllm-text, #ffffff)" }),
|
|
12425
12886
|
promptCopied ? "\uBCF5\uC0AC\uB428" : "\uBCF5\uC0AC"
|
|
12426
12887
|
]
|
|
12427
12888
|
}
|
|
@@ -12430,9 +12891,9 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12430
12891
|
}
|
|
12431
12892
|
)
|
|
12432
12893
|
] }),
|
|
12433
|
-
/* @__PURE__ */
|
|
12434
|
-
/* @__PURE__ */
|
|
12435
|
-
/* @__PURE__ */
|
|
12894
|
+
/* @__PURE__ */ jsxs18("div", { children: [
|
|
12895
|
+
/* @__PURE__ */ jsxs18("div", { style: { display: "flex", alignItems: "center", gap: "10px", marginBottom: "12px" }, children: [
|
|
12896
|
+
/* @__PURE__ */ jsx19(
|
|
12436
12897
|
"div",
|
|
12437
12898
|
{
|
|
12438
12899
|
style: {
|
|
@@ -12451,9 +12912,9 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12451
12912
|
children: "2"
|
|
12452
12913
|
}
|
|
12453
12914
|
),
|
|
12454
|
-
/* @__PURE__ */
|
|
12915
|
+
/* @__PURE__ */ jsx19("span", { style: { fontSize: "14px", fontWeight: 500, color: "var(--chatllm-text, #ffffff)" }, children: "\uC544\uB798\uC5D0 \uACB0\uACFC\uB97C \uBD99\uC5EC\uB123\uC5B4 Claude\uC758 \uBA54\uBAA8\uB9AC\uC5D0 \uCD94\uAC00\uD558\uC138\uC694" })
|
|
12455
12916
|
] }),
|
|
12456
|
-
/* @__PURE__ */
|
|
12917
|
+
/* @__PURE__ */ jsx19(
|
|
12457
12918
|
"textarea",
|
|
12458
12919
|
{
|
|
12459
12920
|
value: importText,
|
|
@@ -12480,7 +12941,7 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12480
12941
|
)
|
|
12481
12942
|
] })
|
|
12482
12943
|
] }),
|
|
12483
|
-
/* @__PURE__ */
|
|
12944
|
+
/* @__PURE__ */ jsxs18(
|
|
12484
12945
|
"div",
|
|
12485
12946
|
{
|
|
12486
12947
|
style: {
|
|
@@ -12490,7 +12951,7 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12490
12951
|
padding: "0 24px 20px"
|
|
12491
12952
|
},
|
|
12492
12953
|
children: [
|
|
12493
|
-
/* @__PURE__ */
|
|
12954
|
+
/* @__PURE__ */ jsx19(
|
|
12494
12955
|
"button",
|
|
12495
12956
|
{
|
|
12496
12957
|
onClick: () => {
|
|
@@ -12511,7 +12972,7 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12511
12972
|
children: "\uCDE8\uC18C"
|
|
12512
12973
|
}
|
|
12513
12974
|
),
|
|
12514
|
-
/* @__PURE__ */
|
|
12975
|
+
/* @__PURE__ */ jsx19(
|
|
12515
12976
|
"button",
|
|
12516
12977
|
{
|
|
12517
12978
|
onClick: () => {
|
|
@@ -12551,8 +13012,8 @@ var MemoryTabContent = ({ items, contextSummary, onDelete, onClearAll, title = "
|
|
|
12551
13012
|
};
|
|
12552
13013
|
|
|
12553
13014
|
// src/react/components/ProjectSettingsModal.tsx
|
|
12554
|
-
import { useState as
|
|
12555
|
-
import { jsx as
|
|
13015
|
+
import { useState as useState20, useEffect as useEffect12 } from "react";
|
|
13016
|
+
import { jsx as jsx20, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
12556
13017
|
var COLOR_PRESETS = [
|
|
12557
13018
|
"#3584FA",
|
|
12558
13019
|
"#7c3aed",
|
|
@@ -12572,12 +13033,12 @@ var ProjectSettingsModal = ({
|
|
|
12572
13033
|
onDeleteFile,
|
|
12573
13034
|
onDeleteProject
|
|
12574
13035
|
}) => {
|
|
12575
|
-
const [activeTab, setActiveTab] =
|
|
12576
|
-
const [title, setTitle] =
|
|
12577
|
-
const [description, setDescription] =
|
|
12578
|
-
const [instructions, setInstructions] =
|
|
12579
|
-
const [color, setColor] =
|
|
12580
|
-
|
|
13036
|
+
const [activeTab, setActiveTab] = useState20("general");
|
|
13037
|
+
const [title, setTitle] = useState20("");
|
|
13038
|
+
const [description, setDescription] = useState20("");
|
|
13039
|
+
const [instructions, setInstructions] = useState20("");
|
|
13040
|
+
const [color, setColor] = useState20("#3584FA");
|
|
13041
|
+
useEffect12(() => {
|
|
12581
13042
|
if (project) {
|
|
12582
13043
|
setTitle(project.title);
|
|
12583
13044
|
setDescription(project.description || "");
|
|
@@ -12633,7 +13094,7 @@ var ProjectSettingsModal = ({
|
|
|
12633
13094
|
cursor: "pointer",
|
|
12634
13095
|
fontFamily: "inherit"
|
|
12635
13096
|
});
|
|
12636
|
-
return /* @__PURE__ */
|
|
13097
|
+
return /* @__PURE__ */ jsx20(
|
|
12637
13098
|
"div",
|
|
12638
13099
|
{
|
|
12639
13100
|
style: {
|
|
@@ -12648,7 +13109,7 @@ var ProjectSettingsModal = ({
|
|
|
12648
13109
|
onClick: (e) => {
|
|
12649
13110
|
if (e.target === e.currentTarget) onClose();
|
|
12650
13111
|
},
|
|
12651
|
-
children: /* @__PURE__ */
|
|
13112
|
+
children: /* @__PURE__ */ jsxs19(
|
|
12652
13113
|
"div",
|
|
12653
13114
|
{
|
|
12654
13115
|
style: {
|
|
@@ -12662,7 +13123,7 @@ var ProjectSettingsModal = ({
|
|
|
12662
13123
|
overflow: "hidden"
|
|
12663
13124
|
},
|
|
12664
13125
|
children: [
|
|
12665
|
-
/* @__PURE__ */
|
|
13126
|
+
/* @__PURE__ */ jsxs19(
|
|
12666
13127
|
"div",
|
|
12667
13128
|
{
|
|
12668
13129
|
style: {
|
|
@@ -12672,8 +13133,8 @@ var ProjectSettingsModal = ({
|
|
|
12672
13133
|
padding: "20px 24px 0"
|
|
12673
13134
|
},
|
|
12674
13135
|
children: [
|
|
12675
|
-
/* @__PURE__ */
|
|
12676
|
-
/* @__PURE__ */
|
|
13136
|
+
/* @__PURE__ */ jsx20("h2", { style: { fontSize: "16px", fontWeight: 600, margin: 0, color: "var(--chatllm-text, #1a1a1a)" }, children: "\uD504\uB85C\uC81D\uD2B8 \uC124\uC815" }),
|
|
13137
|
+
/* @__PURE__ */ jsx20(
|
|
12677
13138
|
"button",
|
|
12678
13139
|
{
|
|
12679
13140
|
onClick: onClose,
|
|
@@ -12686,13 +13147,13 @@ var ProjectSettingsModal = ({
|
|
|
12686
13147
|
alignItems: "center"
|
|
12687
13148
|
},
|
|
12688
13149
|
"aria-label": "\uB2EB\uAE30",
|
|
12689
|
-
children: /* @__PURE__ */
|
|
13150
|
+
children: /* @__PURE__ */ jsx20(IconSvg, { name: "close-line", size: 20, color: "var(--chatllm-text-muted, #999)" })
|
|
12690
13151
|
}
|
|
12691
13152
|
)
|
|
12692
13153
|
]
|
|
12693
13154
|
}
|
|
12694
13155
|
),
|
|
12695
|
-
/* @__PURE__ */
|
|
13156
|
+
/* @__PURE__ */ jsxs19(
|
|
12696
13157
|
"div",
|
|
12697
13158
|
{
|
|
12698
13159
|
style: {
|
|
@@ -12702,9 +13163,9 @@ var ProjectSettingsModal = ({
|
|
|
12702
13163
|
borderBottom: "1px solid var(--chatllm-border, #e0e0e0)"
|
|
12703
13164
|
},
|
|
12704
13165
|
children: [
|
|
12705
|
-
/* @__PURE__ */
|
|
12706
|
-
/* @__PURE__ */
|
|
12707
|
-
/* @__PURE__ */
|
|
13166
|
+
/* @__PURE__ */ jsx20("button", { onClick: () => setActiveTab("general"), style: tabStyle("general"), children: "\uC77C\uBC18" }),
|
|
13167
|
+
/* @__PURE__ */ jsx20("button", { onClick: () => setActiveTab("instructions"), style: tabStyle("instructions"), children: "\uC9C0\uCE68" }),
|
|
13168
|
+
/* @__PURE__ */ jsxs19("button", { onClick: () => setActiveTab("files"), style: tabStyle("files"), children: [
|
|
12708
13169
|
"\uD30C\uC77C (",
|
|
12709
13170
|
project.files.length,
|
|
12710
13171
|
")"
|
|
@@ -12712,11 +13173,11 @@ var ProjectSettingsModal = ({
|
|
|
12712
13173
|
]
|
|
12713
13174
|
}
|
|
12714
13175
|
),
|
|
12715
|
-
/* @__PURE__ */
|
|
12716
|
-
activeTab === "general" && /* @__PURE__ */
|
|
12717
|
-
/* @__PURE__ */
|
|
12718
|
-
/* @__PURE__ */
|
|
12719
|
-
/* @__PURE__ */
|
|
13176
|
+
/* @__PURE__ */ jsxs19("div", { style: { padding: "24px", overflowY: "auto", flex: 1 }, children: [
|
|
13177
|
+
activeTab === "general" && /* @__PURE__ */ jsxs19("div", { style: { display: "flex", flexDirection: "column", gap: "16px" }, children: [
|
|
13178
|
+
/* @__PURE__ */ jsxs19("div", { children: [
|
|
13179
|
+
/* @__PURE__ */ jsx20("label", { style: { display: "block", fontSize: "13px", fontWeight: 500, marginBottom: "6px", color: "var(--chatllm-text, #1a1a1a)" }, children: "\uD504\uB85C\uC81D\uD2B8 \uC774\uB984" }),
|
|
13180
|
+
/* @__PURE__ */ jsx20(
|
|
12720
13181
|
"input",
|
|
12721
13182
|
{
|
|
12722
13183
|
type: "text",
|
|
@@ -12738,9 +13199,9 @@ var ProjectSettingsModal = ({
|
|
|
12738
13199
|
}
|
|
12739
13200
|
)
|
|
12740
13201
|
] }),
|
|
12741
|
-
/* @__PURE__ */
|
|
12742
|
-
/* @__PURE__ */
|
|
12743
|
-
/* @__PURE__ */
|
|
13202
|
+
/* @__PURE__ */ jsxs19("div", { children: [
|
|
13203
|
+
/* @__PURE__ */ jsx20("label", { style: { display: "block", fontSize: "13px", fontWeight: 500, marginBottom: "6px", color: "var(--chatllm-text, #1a1a1a)" }, children: "\uC124\uBA85" }),
|
|
13204
|
+
/* @__PURE__ */ jsx20(
|
|
12744
13205
|
"textarea",
|
|
12745
13206
|
{
|
|
12746
13207
|
value: description,
|
|
@@ -12761,9 +13222,9 @@ var ProjectSettingsModal = ({
|
|
|
12761
13222
|
}
|
|
12762
13223
|
)
|
|
12763
13224
|
] }),
|
|
12764
|
-
/* @__PURE__ */
|
|
12765
|
-
/* @__PURE__ */
|
|
12766
|
-
/* @__PURE__ */
|
|
13225
|
+
/* @__PURE__ */ jsxs19("div", { children: [
|
|
13226
|
+
/* @__PURE__ */ jsx20("label", { style: { display: "block", fontSize: "13px", fontWeight: 500, marginBottom: "6px", color: "var(--chatllm-text, #1a1a1a)" }, children: "\uC0C9\uC0C1" }),
|
|
13227
|
+
/* @__PURE__ */ jsx20("div", { style: { display: "flex", gap: "8px", flexWrap: "wrap" }, children: COLOR_PRESETS.map((c) => /* @__PURE__ */ jsx20(
|
|
12767
13228
|
"button",
|
|
12768
13229
|
{
|
|
12769
13230
|
onClick: () => setColor(c),
|
|
@@ -12781,8 +13242,8 @@ var ProjectSettingsModal = ({
|
|
|
12781
13242
|
c
|
|
12782
13243
|
)) })
|
|
12783
13244
|
] }),
|
|
12784
|
-
/* @__PURE__ */
|
|
12785
|
-
!isDefaultProject && onDeleteProject && /* @__PURE__ */
|
|
13245
|
+
/* @__PURE__ */ jsxs19("div", { style: { display: "flex", gap: "8px", justifyContent: "flex-end", marginTop: "8px" }, children: [
|
|
13246
|
+
!isDefaultProject && onDeleteProject && /* @__PURE__ */ jsx20(
|
|
12786
13247
|
"button",
|
|
12787
13248
|
{
|
|
12788
13249
|
onClick: () => {
|
|
@@ -12805,7 +13266,7 @@ var ProjectSettingsModal = ({
|
|
|
12805
13266
|
children: "\uD504\uB85C\uC81D\uD2B8 \uC0AD\uC81C"
|
|
12806
13267
|
}
|
|
12807
13268
|
),
|
|
12808
|
-
/* @__PURE__ */
|
|
13269
|
+
/* @__PURE__ */ jsx20(
|
|
12809
13270
|
"button",
|
|
12810
13271
|
{
|
|
12811
13272
|
onClick: handleSaveGeneral,
|
|
@@ -12825,9 +13286,9 @@ var ProjectSettingsModal = ({
|
|
|
12825
13286
|
)
|
|
12826
13287
|
] })
|
|
12827
13288
|
] }),
|
|
12828
|
-
activeTab === "instructions" && /* @__PURE__ */
|
|
12829
|
-
/* @__PURE__ */
|
|
12830
|
-
/* @__PURE__ */
|
|
13289
|
+
activeTab === "instructions" && /* @__PURE__ */ jsxs19("div", { style: { display: "flex", flexDirection: "column", gap: "12px" }, children: [
|
|
13290
|
+
/* @__PURE__ */ jsx20("p", { style: { fontSize: "13px", color: "var(--chatllm-text-muted, #999)", margin: 0 }, children: "\uC774 \uD504\uB85C\uC81D\uD2B8\uC758 \uBAA8\uB4E0 \uB300\uD654\uC5D0\uC11C AI\uAC00 \uB530\uB77C\uC57C \uD560 \uC9C0\uCE68\uC744 \uC785\uB825\uD558\uC138\uC694." }),
|
|
13291
|
+
/* @__PURE__ */ jsx20(
|
|
12831
13292
|
"textarea",
|
|
12832
13293
|
{
|
|
12833
13294
|
value: instructions,
|
|
@@ -12848,7 +13309,7 @@ var ProjectSettingsModal = ({
|
|
|
12848
13309
|
}
|
|
12849
13310
|
}
|
|
12850
13311
|
),
|
|
12851
|
-
/* @__PURE__ */
|
|
13312
|
+
/* @__PURE__ */ jsx20("div", { style: { display: "flex", justifyContent: "flex-end" }, children: /* @__PURE__ */ jsx20(
|
|
12852
13313
|
"button",
|
|
12853
13314
|
{
|
|
12854
13315
|
onClick: handleSaveInstructions,
|
|
@@ -12867,10 +13328,10 @@ var ProjectSettingsModal = ({
|
|
|
12867
13328
|
}
|
|
12868
13329
|
) })
|
|
12869
13330
|
] }),
|
|
12870
|
-
activeTab === "files" && /* @__PURE__ */
|
|
12871
|
-
/* @__PURE__ */
|
|
12872
|
-
/* @__PURE__ */
|
|
12873
|
-
/* @__PURE__ */
|
|
13331
|
+
activeTab === "files" && /* @__PURE__ */ jsxs19("div", { style: { display: "flex", flexDirection: "column", gap: "12px" }, children: [
|
|
13332
|
+
/* @__PURE__ */ jsxs19("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [
|
|
13333
|
+
/* @__PURE__ */ jsx20("p", { style: { fontSize: "13px", color: "var(--chatllm-text-muted, #999)", margin: 0 }, children: "\uD504\uB85C\uC81D\uD2B8 \uCEE8\uD14D\uC2A4\uD2B8\uB85C \uC0AC\uC6A9\uD560 \uD30C\uC77C\uC744 \uAD00\uB9AC\uD569\uB2C8\uB2E4." }),
|
|
13334
|
+
/* @__PURE__ */ jsxs19(
|
|
12874
13335
|
"button",
|
|
12875
13336
|
{
|
|
12876
13337
|
onClick: handleFileUpload,
|
|
@@ -12888,13 +13349,13 @@ var ProjectSettingsModal = ({
|
|
|
12888
13349
|
color: "var(--chatllm-text, #1a1a1a)"
|
|
12889
13350
|
},
|
|
12890
13351
|
children: [
|
|
12891
|
-
/* @__PURE__ */
|
|
13352
|
+
/* @__PURE__ */ jsx20(IconSvg, { name: "upload-line", size: 14 }),
|
|
12892
13353
|
"\uC5C5\uB85C\uB4DC"
|
|
12893
13354
|
]
|
|
12894
13355
|
}
|
|
12895
13356
|
)
|
|
12896
13357
|
] }),
|
|
12897
|
-
project.files.length === 0 ? /* @__PURE__ */
|
|
13358
|
+
project.files.length === 0 ? /* @__PURE__ */ jsx20(
|
|
12898
13359
|
"div",
|
|
12899
13360
|
{
|
|
12900
13361
|
style: {
|
|
@@ -12907,7 +13368,7 @@ var ProjectSettingsModal = ({
|
|
|
12907
13368
|
},
|
|
12908
13369
|
children: "\uC544\uC9C1 \uD30C\uC77C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4"
|
|
12909
13370
|
}
|
|
12910
|
-
) : /* @__PURE__ */
|
|
13371
|
+
) : /* @__PURE__ */ jsx20("div", { style: { display: "flex", flexDirection: "column", gap: "6px" }, children: project.files.map((file) => /* @__PURE__ */ jsxs19(
|
|
12911
13372
|
"div",
|
|
12912
13373
|
{
|
|
12913
13374
|
style: {
|
|
@@ -12919,10 +13380,10 @@ var ProjectSettingsModal = ({
|
|
|
12919
13380
|
borderRadius: "6px"
|
|
12920
13381
|
},
|
|
12921
13382
|
children: [
|
|
12922
|
-
/* @__PURE__ */
|
|
12923
|
-
/* @__PURE__ */
|
|
12924
|
-
/* @__PURE__ */
|
|
12925
|
-
/* @__PURE__ */
|
|
13383
|
+
/* @__PURE__ */ jsxs19("div", { style: { display: "flex", alignItems: "center", gap: "10px", overflow: "hidden" }, children: [
|
|
13384
|
+
/* @__PURE__ */ jsx20(IconSvg, { name: getFileIcon2(file.type), size: 18, color: "var(--chatllm-text-muted, #999)" }),
|
|
13385
|
+
/* @__PURE__ */ jsxs19("div", { style: { overflow: "hidden" }, children: [
|
|
13386
|
+
/* @__PURE__ */ jsx20(
|
|
12926
13387
|
"div",
|
|
12927
13388
|
{
|
|
12928
13389
|
style: {
|
|
@@ -12936,13 +13397,13 @@ var ProjectSettingsModal = ({
|
|
|
12936
13397
|
children: file.name
|
|
12937
13398
|
}
|
|
12938
13399
|
),
|
|
12939
|
-
/* @__PURE__ */
|
|
13400
|
+
/* @__PURE__ */ jsxs19("div", { style: { fontSize: "11px", color: "var(--chatllm-text-muted, #999)" }, children: [
|
|
12940
13401
|
file.type,
|
|
12941
13402
|
formatSize(file.size) ? ` \xB7 ${formatSize(file.size)}` : ""
|
|
12942
13403
|
] })
|
|
12943
13404
|
] })
|
|
12944
13405
|
] }),
|
|
12945
|
-
/* @__PURE__ */
|
|
13406
|
+
/* @__PURE__ */ jsx20(
|
|
12946
13407
|
"button",
|
|
12947
13408
|
{
|
|
12948
13409
|
onClick: () => onDeleteFile(project.id, file.id),
|
|
@@ -12963,7 +13424,7 @@ var ProjectSettingsModal = ({
|
|
|
12963
13424
|
e.currentTarget.style.opacity = "0.5";
|
|
12964
13425
|
},
|
|
12965
13426
|
"aria-label": `${file.name} \uC0AD\uC81C`,
|
|
12966
|
-
children: /* @__PURE__ */
|
|
13427
|
+
children: /* @__PURE__ */ jsx20(IconSvg, { name: "delete-bin-line", size: 16, color: "#dc2626" })
|
|
12967
13428
|
}
|
|
12968
13429
|
)
|
|
12969
13430
|
]
|
|
@@ -12980,14 +13441,14 @@ var ProjectSettingsModal = ({
|
|
|
12980
13441
|
};
|
|
12981
13442
|
|
|
12982
13443
|
// src/react/components/DisclaimerModal.tsx
|
|
12983
|
-
import { jsx as
|
|
13444
|
+
import { jsx as jsx21, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
12984
13445
|
var highlightStyle = {
|
|
12985
13446
|
color: "var(--chatllm-text, #1e293b)",
|
|
12986
13447
|
fontWeight: 600
|
|
12987
13448
|
};
|
|
12988
13449
|
var DisclaimerModal = ({ isOpen, onClose }) => {
|
|
12989
13450
|
if (!isOpen) return null;
|
|
12990
|
-
return /* @__PURE__ */
|
|
13451
|
+
return /* @__PURE__ */ jsx21(
|
|
12991
13452
|
"div",
|
|
12992
13453
|
{
|
|
12993
13454
|
className: "chatllm-disclaimer-overlay",
|
|
@@ -13001,7 +13462,7 @@ var DisclaimerModal = ({ isOpen, onClose }) => {
|
|
|
13001
13462
|
zIndex: 1e3
|
|
13002
13463
|
},
|
|
13003
13464
|
onClick: onClose,
|
|
13004
|
-
children: /* @__PURE__ */
|
|
13465
|
+
children: /* @__PURE__ */ jsxs20(
|
|
13005
13466
|
"div",
|
|
13006
13467
|
{
|
|
13007
13468
|
className: "chatllm-disclaimer-modal",
|
|
@@ -13019,7 +13480,7 @@ var DisclaimerModal = ({ isOpen, onClose }) => {
|
|
|
13019
13480
|
},
|
|
13020
13481
|
onClick: (e) => e.stopPropagation(),
|
|
13021
13482
|
children: [
|
|
13022
|
-
/* @__PURE__ */
|
|
13483
|
+
/* @__PURE__ */ jsxs20(
|
|
13023
13484
|
"div",
|
|
13024
13485
|
{
|
|
13025
13486
|
style: {
|
|
@@ -13030,9 +13491,9 @@ var DisclaimerModal = ({ isOpen, onClose }) => {
|
|
|
13030
13491
|
borderBottom: "1px solid var(--chatllm-border, #e5e7eb)"
|
|
13031
13492
|
},
|
|
13032
13493
|
children: [
|
|
13033
|
-
/* @__PURE__ */
|
|
13034
|
-
/* @__PURE__ */
|
|
13035
|
-
/* @__PURE__ */
|
|
13494
|
+
/* @__PURE__ */ jsxs20("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [
|
|
13495
|
+
/* @__PURE__ */ jsx21(IconSvg, { name: "error-warning-line", size: 20, color: "var(--chatllm-primary, #3584FA)" }),
|
|
13496
|
+
/* @__PURE__ */ jsx21(
|
|
13036
13497
|
"h2",
|
|
13037
13498
|
{
|
|
13038
13499
|
style: {
|
|
@@ -13045,7 +13506,7 @@ var DisclaimerModal = ({ isOpen, onClose }) => {
|
|
|
13045
13506
|
}
|
|
13046
13507
|
)
|
|
13047
13508
|
] }),
|
|
13048
|
-
/* @__PURE__ */
|
|
13509
|
+
/* @__PURE__ */ jsx21(
|
|
13049
13510
|
"button",
|
|
13050
13511
|
{
|
|
13051
13512
|
onClick: onClose,
|
|
@@ -13060,13 +13521,13 @@ var DisclaimerModal = ({ isOpen, onClose }) => {
|
|
|
13060
13521
|
alignItems: "center",
|
|
13061
13522
|
justifyContent: "center"
|
|
13062
13523
|
},
|
|
13063
|
-
children: /* @__PURE__ */
|
|
13524
|
+
children: /* @__PURE__ */ jsx21(IconSvg, { name: "close-line", size: 20, color: "var(--chatllm-text-muted, #64748b)" })
|
|
13064
13525
|
}
|
|
13065
13526
|
)
|
|
13066
13527
|
]
|
|
13067
13528
|
}
|
|
13068
13529
|
),
|
|
13069
|
-
/* @__PURE__ */
|
|
13530
|
+
/* @__PURE__ */ jsxs20(
|
|
13070
13531
|
"div",
|
|
13071
13532
|
{
|
|
13072
13533
|
className: "chatllm-scrollbar",
|
|
@@ -13078,12 +13539,12 @@ var DisclaimerModal = ({ isOpen, onClose }) => {
|
|
|
13078
13539
|
color: "var(--chatllm-text-secondary, #475569)"
|
|
13079
13540
|
},
|
|
13080
13541
|
children: [
|
|
13081
|
-
/* @__PURE__ */
|
|
13542
|
+
/* @__PURE__ */ jsxs20("p", { style: { margin: "0 0 16px" }, children: [
|
|
13082
13543
|
"\uC800\uB294 \uC5EC\uB7EC\uBD84\uC758 \uC9C8\uBB38\uC5D0 ",
|
|
13083
|
-
/* @__PURE__ */
|
|
13544
|
+
/* @__PURE__ */ jsx21("span", { style: highlightStyle, children: "\uCD5C\uC120\uC758 \uB2F5\uBCC0\uC744 \uB4DC\uB9AC\uAE30 \uC704\uD574 \uD56D\uC0C1 \uB178\uB825" }),
|
|
13084
13545
|
"\uD558\uACE0 \uC788\uC5B4\uC694. \uD558\uC9C0\uB9CC \uC194\uC9C1\uD558\uAC8C \uB9D0\uC500\uB4DC\uB9AC\uBA74, \uC800\uB3C4 \uB54C\uB54C\uB85C \uC2E4\uC218\uB97C \uD558\uAC70\uB098 \uC815\uD655\uD558\uC9C0 \uC54A\uC740 \uB2F5\uBCC0\uC744 \uB4DC\uB9B4 \uC218 \uC788\uC2B5\uB2C8\uB2E4."
|
|
13085
13546
|
] }),
|
|
13086
|
-
/* @__PURE__ */
|
|
13547
|
+
/* @__PURE__ */ jsxs20(
|
|
13087
13548
|
"div",
|
|
13088
13549
|
{
|
|
13089
13550
|
style: {
|
|
@@ -13096,33 +13557,33 @@ var DisclaimerModal = ({ isOpen, onClose }) => {
|
|
|
13096
13557
|
lineHeight: 1.7
|
|
13097
13558
|
},
|
|
13098
13559
|
children: [
|
|
13099
|
-
/* @__PURE__ */
|
|
13100
|
-
/* @__PURE__ */
|
|
13101
|
-
/* @__PURE__ */
|
|
13102
|
-
/* @__PURE__ */
|
|
13103
|
-
/* @__PURE__ */
|
|
13560
|
+
/* @__PURE__ */ jsx21("p", { style: { margin: "0 0 8px", fontWeight: 600, color: "var(--chatllm-text, #1e293b)" }, children: "\uC81C\uAC00 \uC774\uB7F0 \uC2E4\uC218\uB97C \uD560 \uC218 \uC788\uC5B4\uC694" }),
|
|
13561
|
+
/* @__PURE__ */ jsxs20("ul", { style: { margin: 0, paddingLeft: "18px", display: "flex", flexDirection: "column", gap: "4px" }, children: [
|
|
13562
|
+
/* @__PURE__ */ jsx21("li", { children: "\uCD5C\uC2E0 \uC815\uBCF4\uB97C \uBC18\uC601\uD558\uC9C0 \uBABB\uD55C \uB2F5\uBCC0\uC744 \uB4DC\uB9AC\uB294 \uACBD\uC6B0" }),
|
|
13563
|
+
/* @__PURE__ */ jsx21("li", { children: "\uADF8\uB7F4\uB4EF\uD558\uAC8C \uB4E4\uB9AC\uC9C0\uB9CC \uC2E4\uC81C\uB85C\uB294 \uC815\uD655\uD558\uC9C0 \uC54A\uC740 \uB0B4\uC6A9" }),
|
|
13564
|
+
/* @__PURE__ */ jsx21("li", { children: "\uC2E4\uC81C\uB85C \uC874\uC7AC\uD558\uC9C0 \uC54A\uB294 \uCD9C\uCC98\uB098 \uC778\uC6A9\uC744 \uB9CC\uB4E4\uC5B4\uB0B4\uB294 \uACBD\uC6B0" })
|
|
13104
13565
|
] })
|
|
13105
13566
|
]
|
|
13106
13567
|
}
|
|
13107
13568
|
),
|
|
13108
|
-
/* @__PURE__ */
|
|
13569
|
+
/* @__PURE__ */ jsxs20("p", { style: { margin: "0 0 16px" }, children: [
|
|
13109
13570
|
"\uC774\uB7F0 \uD604\uC0C1\uC744 ",
|
|
13110
|
-
/* @__PURE__ */
|
|
13571
|
+
/* @__PURE__ */ jsx21("span", { style: highlightStyle, children: "'\uD658\uAC01(Hallucination)'" }),
|
|
13111
13572
|
"\uC774\uB77C\uACE0 \uBD80\uB974\uB294\uB370\uC694, \uC544\uC9C1\uC740 \uC800\uC640 \uAC19\uC740 AI\uAC00 \uAC00\uC9C4 \uADFC\uBCF8\uC801\uC778 \uD55C\uACC4\uC608\uC694. \uC81C \uB2F5\uBCC0\uC774 \uC544\uBB34\uB9AC \uC790\uC5F0\uC2A4\uB7EC\uC6CC \uBCF4\uC5EC\uB3C4, ",
|
|
13112
|
-
/* @__PURE__ */
|
|
13573
|
+
/* @__PURE__ */ jsx21("span", { style: highlightStyle, children: "\uD55C \uBC88 \uB354 \uD655\uC778" }),
|
|
13113
13574
|
"\uD574 \uC8FC\uC2DC\uBA74 \uAC10\uC0AC\uD558\uACA0\uC2B5\uB2C8\uB2E4."
|
|
13114
13575
|
] }),
|
|
13115
|
-
/* @__PURE__ */
|
|
13116
|
-
/* @__PURE__ */
|
|
13576
|
+
/* @__PURE__ */ jsxs20("p", { style: { margin: "0 0 16px" }, children: [
|
|
13577
|
+
/* @__PURE__ */ jsx21("span", { style: highlightStyle, children: "\uC81C \uB2F5\uBCC0\uC740 \uCC38\uACE0 \uC790\uB8CC" }),
|
|
13117
13578
|
"\uB85C \uD65C\uC6A9\uD574 \uC8FC\uC2DC\uACE0, \uC911\uC694\uD55C \uD310\uB2E8\uC744 \uB0B4\uB9AC\uC2E4 \uB54C\uB294 \uAF2D \uCD94\uAC00\uB85C \uD655\uC778\uD574 \uC8FC\uC138\uC694. \uC800\uB3C4 \uB354 \uC815\uD655\uD55C \uB2F5\uBCC0\uC744 \uB4DC\uB9AC\uAE30 \uC704\uD574 \uACC4\uC18D \uBC1C\uC804\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4."
|
|
13118
13579
|
] }),
|
|
13119
|
-
/* @__PURE__ */
|
|
13580
|
+
/* @__PURE__ */ jsxs20("p", { style: { margin: "0 0 16px" }, children: [
|
|
13120
13581
|
"\uC81C\uAC00 \uC6F9 \uAC80\uC0C9 \uACB0\uACFC\uB97C \uC54C\uB824\uB4DC\uB9B4 \uB54C\uB3C4,",
|
|
13121
13582
|
" ",
|
|
13122
|
-
/* @__PURE__ */
|
|
13583
|
+
/* @__PURE__ */ jsx21("span", { style: highlightStyle, children: "\uC6D0\uBCF8 \uCD9C\uCC98\uB97C \uC9C1\uC811 \uD655\uC778" }),
|
|
13123
13584
|
"\uD574 \uBCF4\uC2DC\uB294 \uAC78 \uCD94\uCC9C\uB4DC\uB824\uC694. \uC694\uC57D \uACFC\uC815\uC5D0\uC11C \uB193\uCE60 \uC218 \uC788\uB294 \uC911\uC694\uD55C \uB9E5\uB77D\uC774 \uC6D0\uBCF8\uC5D0 \uB2F4\uACA8 \uC788\uC744 \uC218 \uC788\uAC70\uB4E0\uC694."
|
|
13124
13585
|
] }),
|
|
13125
|
-
/* @__PURE__ */
|
|
13586
|
+
/* @__PURE__ */ jsx21(
|
|
13126
13587
|
"div",
|
|
13127
13588
|
{
|
|
13128
13589
|
style: {
|
|
@@ -13133,10 +13594,10 @@ var DisclaimerModal = ({ isOpen, onClose }) => {
|
|
|
13133
13594
|
lineHeight: 1.7,
|
|
13134
13595
|
textAlign: "center"
|
|
13135
13596
|
},
|
|
13136
|
-
children: /* @__PURE__ */
|
|
13597
|
+
children: /* @__PURE__ */ jsxs20("p", { style: { margin: 0 }, children: [
|
|
13137
13598
|
"\uC800\uC5D0 \uB300\uD55C \uC758\uACAC\uC774\uB098 \uAC1C\uC120 \uC81C\uC548\uC774 \uC788\uC73C\uC2DC\uB2E4\uBA74",
|
|
13138
13599
|
" ",
|
|
13139
|
-
/* @__PURE__ */
|
|
13600
|
+
/* @__PURE__ */ jsx21(
|
|
13140
13601
|
"a",
|
|
13141
13602
|
{
|
|
13142
13603
|
href: "mailto:info@gendive.ai",
|
|
@@ -13149,7 +13610,7 @@ var DisclaimerModal = ({ isOpen, onClose }) => {
|
|
|
13149
13610
|
}
|
|
13150
13611
|
),
|
|
13151
13612
|
"\uB85C \uC54C\uB824\uC8FC\uC138\uC694.",
|
|
13152
|
-
/* @__PURE__ */
|
|
13613
|
+
/* @__PURE__ */ jsx21("br", {}),
|
|
13153
13614
|
"\uC5EC\uB7EC\uBD84\uC758 \uD53C\uB4DC\uBC31 \uD558\uB098\uD558\uB098\uAC00 \uC81C\uAC00 \uC131\uC7A5\uD558\uB294 \uB370 \uD070 \uD798\uC774 \uB429\uB2C8\uB2E4."
|
|
13154
13615
|
] })
|
|
13155
13616
|
}
|
|
@@ -13165,7 +13626,7 @@ var DisclaimerModal = ({ isOpen, onClose }) => {
|
|
|
13165
13626
|
};
|
|
13166
13627
|
|
|
13167
13628
|
// src/react/components/ChecklistPanel.tsx
|
|
13168
|
-
import { Fragment as Fragment8, jsx as
|
|
13629
|
+
import { Fragment as Fragment8, jsx as jsx22, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
13169
13630
|
var ChecklistPanel = ({
|
|
13170
13631
|
message,
|
|
13171
13632
|
isOpen,
|
|
@@ -13179,8 +13640,8 @@ var ChecklistPanel = ({
|
|
|
13179
13640
|
}) => {
|
|
13180
13641
|
const block = message?.checklistBlock;
|
|
13181
13642
|
if (isMobileOverlay) {
|
|
13182
|
-
return /* @__PURE__ */
|
|
13183
|
-
/* @__PURE__ */
|
|
13643
|
+
return /* @__PURE__ */ jsxs21(Fragment8, { children: [
|
|
13644
|
+
/* @__PURE__ */ jsx22(
|
|
13184
13645
|
"div",
|
|
13185
13646
|
{
|
|
13186
13647
|
onClick: onClose,
|
|
@@ -13195,7 +13656,7 @@ var ChecklistPanel = ({
|
|
|
13195
13656
|
}
|
|
13196
13657
|
}
|
|
13197
13658
|
),
|
|
13198
|
-
/* @__PURE__ */
|
|
13659
|
+
/* @__PURE__ */ jsx22(
|
|
13199
13660
|
"aside",
|
|
13200
13661
|
{
|
|
13201
13662
|
style: {
|
|
@@ -13218,7 +13679,7 @@ var ChecklistPanel = ({
|
|
|
13218
13679
|
)
|
|
13219
13680
|
] });
|
|
13220
13681
|
}
|
|
13221
|
-
return /* @__PURE__ */
|
|
13682
|
+
return /* @__PURE__ */ jsx22(
|
|
13222
13683
|
"aside",
|
|
13223
13684
|
{
|
|
13224
13685
|
style: {
|
|
@@ -13236,8 +13697,8 @@ var ChecklistPanel = ({
|
|
|
13236
13697
|
}
|
|
13237
13698
|
);
|
|
13238
13699
|
function renderPanelContent() {
|
|
13239
|
-
return /* @__PURE__ */
|
|
13240
|
-
/* @__PURE__ */
|
|
13700
|
+
return /* @__PURE__ */ jsxs21(Fragment8, { children: [
|
|
13701
|
+
/* @__PURE__ */ jsxs21(
|
|
13241
13702
|
"div",
|
|
13242
13703
|
{
|
|
13243
13704
|
style: {
|
|
@@ -13249,9 +13710,9 @@ var ChecklistPanel = ({
|
|
|
13249
13710
|
flexShrink: 0
|
|
13250
13711
|
},
|
|
13251
13712
|
children: [
|
|
13252
|
-
/* @__PURE__ */
|
|
13253
|
-
/* @__PURE__ */
|
|
13254
|
-
/* @__PURE__ */
|
|
13713
|
+
/* @__PURE__ */ jsxs21("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [
|
|
13714
|
+
/* @__PURE__ */ jsx22(IconSvg, { name: "list-check", size: 18, color: "var(--chatllm-primary, #3584FA)" }),
|
|
13715
|
+
/* @__PURE__ */ jsx22(
|
|
13255
13716
|
"span",
|
|
13256
13717
|
{
|
|
13257
13718
|
style: {
|
|
@@ -13263,7 +13724,7 @@ var ChecklistPanel = ({
|
|
|
13263
13724
|
}
|
|
13264
13725
|
)
|
|
13265
13726
|
] }),
|
|
13266
|
-
/* @__PURE__ */
|
|
13727
|
+
/* @__PURE__ */ jsx22(
|
|
13267
13728
|
"button",
|
|
13268
13729
|
{
|
|
13269
13730
|
onClick: onClose,
|
|
@@ -13281,13 +13742,13 @@ var ChecklistPanel = ({
|
|
|
13281
13742
|
color: "var(--chatllm-text-muted, #94a3b8)",
|
|
13282
13743
|
transition: "background-color 0.15s ease"
|
|
13283
13744
|
},
|
|
13284
|
-
children: /* @__PURE__ */
|
|
13745
|
+
children: /* @__PURE__ */ jsx22(IconSvg, { name: "close-line", size: 18, color: "currentColor" })
|
|
13285
13746
|
}
|
|
13286
13747
|
)
|
|
13287
13748
|
]
|
|
13288
13749
|
}
|
|
13289
13750
|
),
|
|
13290
|
-
/* @__PURE__ */
|
|
13751
|
+
/* @__PURE__ */ jsx22(
|
|
13291
13752
|
"div",
|
|
13292
13753
|
{
|
|
13293
13754
|
className: "chatllm-scrollbar",
|
|
@@ -13296,7 +13757,7 @@ var ChecklistPanel = ({
|
|
|
13296
13757
|
overflowY: "auto",
|
|
13297
13758
|
padding: "16px"
|
|
13298
13759
|
},
|
|
13299
|
-
children: block && block.items.length > 0 ? /* @__PURE__ */
|
|
13760
|
+
children: block && block.items.length > 0 ? /* @__PURE__ */ jsx22(
|
|
13300
13761
|
ChecklistCard,
|
|
13301
13762
|
{
|
|
13302
13763
|
items: block.items,
|
|
@@ -13307,7 +13768,7 @@ var ChecklistPanel = ({
|
|
|
13307
13768
|
onSkipStep: onSkip,
|
|
13308
13769
|
onStart
|
|
13309
13770
|
}
|
|
13310
|
-
) : /* @__PURE__ */
|
|
13771
|
+
) : /* @__PURE__ */ jsx22(
|
|
13311
13772
|
"div",
|
|
13312
13773
|
{
|
|
13313
13774
|
style: {
|
|
@@ -13384,6 +13845,57 @@ var injectBaseStyles = () => {
|
|
|
13384
13845
|
to { opacity: 1; }
|
|
13385
13846
|
}
|
|
13386
13847
|
|
|
13848
|
+
@keyframes chatllm-stream-fadein {
|
|
13849
|
+
from { opacity: 0; transform: translateY(4px); }
|
|
13850
|
+
to { opacity: 1; transform: translateY(0); }
|
|
13851
|
+
}
|
|
13852
|
+
|
|
13853
|
+
.chatllm-message--assistant .chatllm-sheet {
|
|
13854
|
+
animation: chatllm-stream-fadein 0.3s ease-out;
|
|
13855
|
+
}
|
|
13856
|
+
|
|
13857
|
+
/* \uC2A4\uD2B8\uB9AC\uBC0D \uD14D\uC2A4\uD2B8 \uBD80\uB4DC\uB7EC\uC6B4 \uB192\uC774 \uC804\uD658 */
|
|
13858
|
+
.chatllm-message--assistant .chatllm-sheet > div {
|
|
13859
|
+
transition: height 0.15s ease-out;
|
|
13860
|
+
}
|
|
13861
|
+
|
|
13862
|
+
/* \uC2A4\uD2B8\uB9AC\uBC0D \uC911 \uB9C8\uC9C0\uB9C9 \uB2E8\uC5B4 \uD398\uC774\uB4DC\uC778 \uD6A8\uACFC */
|
|
13863
|
+
@keyframes chatllm-word-fadein {
|
|
13864
|
+
from { opacity: 0.3; }
|
|
13865
|
+
to { opacity: 1; }
|
|
13866
|
+
}
|
|
13867
|
+
|
|
13868
|
+
.chatllm-streaming-content p:last-child,
|
|
13869
|
+
.chatllm-streaming-content li:last-child,
|
|
13870
|
+
.chatllm-streaming-content h1:last-child,
|
|
13871
|
+
.chatllm-streaming-content h2:last-child,
|
|
13872
|
+
.chatllm-streaming-content h3:last-child {
|
|
13873
|
+
animation: chatllm-word-fadein 0.2s ease-out;
|
|
13874
|
+
}
|
|
13875
|
+
|
|
13876
|
+
@keyframes chatllm-artifact-enter {
|
|
13877
|
+
from {
|
|
13878
|
+
opacity: 0;
|
|
13879
|
+
transform: translateY(12px) scale(0.97);
|
|
13880
|
+
}
|
|
13881
|
+
to {
|
|
13882
|
+
opacity: 1;
|
|
13883
|
+
transform: translateY(0) scale(1);
|
|
13884
|
+
}
|
|
13885
|
+
}
|
|
13886
|
+
|
|
13887
|
+
.chatllm-artifact-card {
|
|
13888
|
+
animation: chatllm-artifact-enter 0.5s cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
13889
|
+
}
|
|
13890
|
+
|
|
13891
|
+
/** @Todo vibecode - artifact \uC0DD\uC131 \uC911 \uB85C\uB529 \uC778\uB514\uCF00\uC774\uD130 \uC2A4\uD540 + \uD398\uC774\uB4DC\uC778 */
|
|
13892
|
+
.chatllm-artifact-loading {
|
|
13893
|
+
animation: chatllm-stream-fadein 0.3s ease both;
|
|
13894
|
+
}
|
|
13895
|
+
.chatllm-artifact-loading svg {
|
|
13896
|
+
animation: chatllm-spin 1s linear infinite;
|
|
13897
|
+
}
|
|
13898
|
+
|
|
13387
13899
|
.chatllm-root {
|
|
13388
13900
|
--chatllm-primary: #3584FA;
|
|
13389
13901
|
--chatllm-primary-hover: #2D70D5;
|
|
@@ -13885,7 +14397,7 @@ var injectFloatingStyles = () => {
|
|
|
13885
14397
|
};
|
|
13886
14398
|
|
|
13887
14399
|
// src/react/ChatUI.tsx
|
|
13888
|
-
import { Fragment as Fragment9, jsx as
|
|
14400
|
+
import { Fragment as Fragment9, jsx as jsx23, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
13889
14401
|
var DEFAULT_ACTIONS = [];
|
|
13890
14402
|
var DEFAULT_TEMPLATES = [];
|
|
13891
14403
|
var DEFAULT_MODELS = [
|
|
@@ -13991,28 +14503,28 @@ var ChatUIView = ({
|
|
|
13991
14503
|
handleChecklistSkip,
|
|
13992
14504
|
activeChecklistMessage
|
|
13993
14505
|
} = state;
|
|
13994
|
-
const [disclaimerOpen, setDisclaimerOpen] =
|
|
13995
|
-
const [isMobile, setIsMobile] =
|
|
13996
|
-
|
|
14506
|
+
const [disclaimerOpen, setDisclaimerOpen] = React17.useState(false);
|
|
14507
|
+
const [isMobile, setIsMobile] = React17.useState(false);
|
|
14508
|
+
React17.useEffect(() => {
|
|
13997
14509
|
if (typeof window === "undefined") return;
|
|
13998
14510
|
const check = () => setIsMobile(window.innerWidth < 768);
|
|
13999
14511
|
check();
|
|
14000
14512
|
window.addEventListener("resize", check);
|
|
14001
14513
|
return () => window.removeEventListener("resize", check);
|
|
14002
14514
|
}, []);
|
|
14003
|
-
const [checklistPanelDismissed, setChecklistPanelDismissed] =
|
|
14515
|
+
const [checklistPanelDismissed, setChecklistPanelDismissed] = React17.useState(false);
|
|
14004
14516
|
const isChecklistPanelOpen = !!activeChecklistMessage && !checklistPanelDismissed;
|
|
14005
|
-
const prevChecklistIdRef =
|
|
14006
|
-
|
|
14517
|
+
const prevChecklistIdRef = React17.useRef(void 0);
|
|
14518
|
+
React17.useEffect(() => {
|
|
14007
14519
|
const currentId = activeChecklistMessage?.checklistBlock?.id;
|
|
14008
14520
|
if (currentId && currentId !== prevChecklistIdRef.current && !activeChecklistMessage?.checklistBlock?.completed) {
|
|
14009
14521
|
setChecklistPanelDismissed(false);
|
|
14010
14522
|
}
|
|
14011
14523
|
prevChecklistIdRef.current = currentId;
|
|
14012
14524
|
}, [activeChecklistMessage?.checklistBlock?.id, activeChecklistMessage?.checklistBlock?.completed]);
|
|
14013
|
-
const [welcomeExiting, setWelcomeExiting] =
|
|
14014
|
-
const prevMessageCountRef =
|
|
14015
|
-
|
|
14525
|
+
const [welcomeExiting, setWelcomeExiting] = React17.useState(false);
|
|
14526
|
+
const prevMessageCountRef = React17.useRef(messages.length);
|
|
14527
|
+
React17.useEffect(() => {
|
|
14016
14528
|
let timer;
|
|
14017
14529
|
if (prevMessageCountRef.current === 0 && messages.length > 0) {
|
|
14018
14530
|
setWelcomeExiting(true);
|
|
@@ -14036,7 +14548,7 @@ var ChatUIView = ({
|
|
|
14036
14548
|
const handleChoiceClick = (choice) => {
|
|
14037
14549
|
setInput(choice.text);
|
|
14038
14550
|
};
|
|
14039
|
-
const memoryItems =
|
|
14551
|
+
const memoryItems = React17.useMemo(() => {
|
|
14040
14552
|
if (!globalMemory?.state.entries) return [];
|
|
14041
14553
|
const items = [];
|
|
14042
14554
|
for (const [key, entry] of globalMemory.state.entries) {
|
|
@@ -14050,7 +14562,7 @@ var ChatUIView = ({
|
|
|
14050
14562
|
}
|
|
14051
14563
|
return items;
|
|
14052
14564
|
}, [globalMemory?.state.entries]);
|
|
14053
|
-
const projectMemoryItems =
|
|
14565
|
+
const projectMemoryItems = React17.useMemo(() => {
|
|
14054
14566
|
if (!projectMemory?.state.entries) return [];
|
|
14055
14567
|
const items = [];
|
|
14056
14568
|
for (const [key, entry] of projectMemory.state.entries) {
|
|
@@ -14065,7 +14577,7 @@ var ChatUIView = ({
|
|
|
14065
14577
|
return items;
|
|
14066
14578
|
}, [projectMemory?.state.entries]);
|
|
14067
14579
|
const themeClass = theme?.mode === "dark" ? "chatllm-dark" : "";
|
|
14068
|
-
return /* @__PURE__ */
|
|
14580
|
+
return /* @__PURE__ */ jsxs22(
|
|
14069
14581
|
"div",
|
|
14070
14582
|
{
|
|
14071
14583
|
className: `chatllm-root ${themeClass} ${className}`,
|
|
@@ -14078,7 +14590,7 @@ var ChatUIView = ({
|
|
|
14078
14590
|
position: "relative"
|
|
14079
14591
|
},
|
|
14080
14592
|
children: [
|
|
14081
|
-
showSidebar && /* @__PURE__ */
|
|
14593
|
+
showSidebar && /* @__PURE__ */ jsx23(
|
|
14082
14594
|
ChatSidebar,
|
|
14083
14595
|
{
|
|
14084
14596
|
sessions,
|
|
@@ -14110,7 +14622,7 @@ var ChatUIView = ({
|
|
|
14110
14622
|
isLoading: isSessionsLoading
|
|
14111
14623
|
}
|
|
14112
14624
|
),
|
|
14113
|
-
/* @__PURE__ */
|
|
14625
|
+
/* @__PURE__ */ jsxs22(
|
|
14114
14626
|
"main",
|
|
14115
14627
|
{
|
|
14116
14628
|
style: {
|
|
@@ -14122,7 +14634,7 @@ var ChatUIView = ({
|
|
|
14122
14634
|
minWidth: 0
|
|
14123
14635
|
},
|
|
14124
14636
|
children: [
|
|
14125
|
-
/* @__PURE__ */
|
|
14637
|
+
/* @__PURE__ */ jsx23(
|
|
14126
14638
|
ChatHeader,
|
|
14127
14639
|
{
|
|
14128
14640
|
title: currentSession?.title || "\uC0C8 \uB300\uD654",
|
|
@@ -14137,7 +14649,7 @@ var ChatUIView = ({
|
|
|
14137
14649
|
renderHeaderExtra
|
|
14138
14650
|
}
|
|
14139
14651
|
),
|
|
14140
|
-
(messages.length === 0 || welcomeExiting) && /* @__PURE__ */
|
|
14652
|
+
(messages.length === 0 || welcomeExiting) && /* @__PURE__ */ jsxs22(
|
|
14141
14653
|
"div",
|
|
14142
14654
|
{
|
|
14143
14655
|
style: {
|
|
@@ -14152,7 +14664,7 @@ var ChatUIView = ({
|
|
|
14152
14664
|
pointerEvents: welcomeExiting ? "none" : "auto"
|
|
14153
14665
|
},
|
|
14154
14666
|
children: [
|
|
14155
|
-
/* @__PURE__ */
|
|
14667
|
+
/* @__PURE__ */ jsx23(
|
|
14156
14668
|
"h1",
|
|
14157
14669
|
{
|
|
14158
14670
|
style: {
|
|
@@ -14166,7 +14678,7 @@ var ChatUIView = ({
|
|
|
14166
14678
|
children: greeting ? `${greeting} \u273A` : "\u273A \uBB34\uC5C7\uC744 \uC0DD\uAC01\uD574 \uBCFC\uAE4C\uC694?"
|
|
14167
14679
|
}
|
|
14168
14680
|
),
|
|
14169
|
-
/* @__PURE__ */
|
|
14681
|
+
/* @__PURE__ */ jsx23("div", { style: { width: "100%", maxWidth: "680px" }, children: /* @__PURE__ */ jsx23(
|
|
14170
14682
|
ChatInput,
|
|
14171
14683
|
{
|
|
14172
14684
|
value: input,
|
|
@@ -14194,7 +14706,7 @@ var ChatUIView = ({
|
|
|
14194
14706
|
inline: true
|
|
14195
14707
|
}
|
|
14196
14708
|
) }),
|
|
14197
|
-
suggestedPrompts && suggestedPrompts.length > 0 && /* @__PURE__ */
|
|
14709
|
+
suggestedPrompts && suggestedPrompts.length > 0 && /* @__PURE__ */ jsx23(
|
|
14198
14710
|
"div",
|
|
14199
14711
|
{
|
|
14200
14712
|
style: {
|
|
@@ -14204,7 +14716,7 @@ var ChatUIView = ({
|
|
|
14204
14716
|
justifyContent: "center",
|
|
14205
14717
|
maxWidth: "680px"
|
|
14206
14718
|
},
|
|
14207
|
-
children: suggestedPrompts.map((sp) => /* @__PURE__ */
|
|
14719
|
+
children: suggestedPrompts.map((sp) => /* @__PURE__ */ jsxs22(
|
|
14208
14720
|
"button",
|
|
14209
14721
|
{
|
|
14210
14722
|
onClick: () => setInput(sp.prompt),
|
|
@@ -14223,7 +14735,7 @@ var ChatUIView = ({
|
|
|
14223
14735
|
transition: "all 0.2s"
|
|
14224
14736
|
},
|
|
14225
14737
|
children: [
|
|
14226
|
-
sp.icon && /* @__PURE__ */
|
|
14738
|
+
sp.icon && /* @__PURE__ */ jsx23(IconSvg, { name: sp.icon, size: 16, color: "var(--chatllm-text-muted)" }),
|
|
14227
14739
|
sp.label
|
|
14228
14740
|
]
|
|
14229
14741
|
},
|
|
@@ -14234,8 +14746,8 @@ var ChatUIView = ({
|
|
|
14234
14746
|
]
|
|
14235
14747
|
}
|
|
14236
14748
|
),
|
|
14237
|
-
messages.length > 0 && /* @__PURE__ */
|
|
14238
|
-
/* @__PURE__ */
|
|
14749
|
+
messages.length > 0 && /* @__PURE__ */ jsxs22(Fragment9, { children: [
|
|
14750
|
+
/* @__PURE__ */ jsx23(
|
|
14239
14751
|
MessageList,
|
|
14240
14752
|
{
|
|
14241
14753
|
messages,
|
|
@@ -14265,7 +14777,7 @@ var ChatUIView = ({
|
|
|
14265
14777
|
onToggleChecklistPanel: () => setChecklistPanelDismissed(false)
|
|
14266
14778
|
}
|
|
14267
14779
|
),
|
|
14268
|
-
/* @__PURE__ */
|
|
14780
|
+
/* @__PURE__ */ jsx23(
|
|
14269
14781
|
ChatInput,
|
|
14270
14782
|
{
|
|
14271
14783
|
value: input,
|
|
@@ -14296,7 +14808,7 @@ var ChatUIView = ({
|
|
|
14296
14808
|
]
|
|
14297
14809
|
}
|
|
14298
14810
|
),
|
|
14299
|
-
/* @__PURE__ */
|
|
14811
|
+
/* @__PURE__ */ jsx23(
|
|
14300
14812
|
ChecklistPanel,
|
|
14301
14813
|
{
|
|
14302
14814
|
message: activeChecklistMessage,
|
|
@@ -14309,7 +14821,7 @@ var ChatUIView = ({
|
|
|
14309
14821
|
isMobileOverlay: isMobile
|
|
14310
14822
|
}
|
|
14311
14823
|
),
|
|
14312
|
-
showSettings && /* @__PURE__ */
|
|
14824
|
+
showSettings && /* @__PURE__ */ jsx23(
|
|
14313
14825
|
SettingsModal,
|
|
14314
14826
|
{
|
|
14315
14827
|
isOpen: settingsOpen,
|
|
@@ -14338,7 +14850,7 @@ var ChatUIView = ({
|
|
|
14338
14850
|
importMemoryPrompt
|
|
14339
14851
|
}
|
|
14340
14852
|
),
|
|
14341
|
-
/* @__PURE__ */
|
|
14853
|
+
/* @__PURE__ */ jsx23(
|
|
14342
14854
|
ProjectSettingsModal,
|
|
14343
14855
|
{
|
|
14344
14856
|
isOpen: projectSettingsOpen,
|
|
@@ -14350,7 +14862,7 @@ var ChatUIView = ({
|
|
|
14350
14862
|
onDeleteProject: deleteProject
|
|
14351
14863
|
}
|
|
14352
14864
|
),
|
|
14353
|
-
/* @__PURE__ */
|
|
14865
|
+
/* @__PURE__ */ jsx23(DisclaimerModal, { isOpen: disclaimerOpen, onClose: () => setDisclaimerOpen(false) })
|
|
14354
14866
|
]
|
|
14355
14867
|
}
|
|
14356
14868
|
);
|
|
@@ -14475,7 +14987,7 @@ var ChatUIWithHook = ({
|
|
|
14475
14987
|
onUploadImage
|
|
14476
14988
|
};
|
|
14477
14989
|
const state = useChatUI(hookOptions);
|
|
14478
|
-
return /* @__PURE__ */
|
|
14990
|
+
return /* @__PURE__ */ jsx23(
|
|
14479
14991
|
ChatUIView,
|
|
14480
14992
|
{
|
|
14481
14993
|
state,
|
|
@@ -14532,7 +15044,7 @@ var ChatUI = (props) => {
|
|
|
14532
15044
|
onImportMemory,
|
|
14533
15045
|
importMemoryPrompt
|
|
14534
15046
|
} = props;
|
|
14535
|
-
return /* @__PURE__ */
|
|
15047
|
+
return /* @__PURE__ */ jsx23(
|
|
14536
15048
|
ChatUIView,
|
|
14537
15049
|
{
|
|
14538
15050
|
state: props.chatState,
|
|
@@ -14562,17 +15074,17 @@ var ChatUI = (props) => {
|
|
|
14562
15074
|
}
|
|
14563
15075
|
);
|
|
14564
15076
|
}
|
|
14565
|
-
return /* @__PURE__ */
|
|
15077
|
+
return /* @__PURE__ */ jsx23(ChatUIWithHook, { ...props });
|
|
14566
15078
|
};
|
|
14567
15079
|
|
|
14568
15080
|
// src/react/ChatFloatingWidget.tsx
|
|
14569
|
-
import { useState as
|
|
15081
|
+
import { useState as useState28, useRef as useRef17, useEffect as useEffect19, useMemo as useMemo7, useCallback as useCallback15 } from "react";
|
|
14570
15082
|
|
|
14571
15083
|
// src/react/hooks/useFloatingWidget.ts
|
|
14572
|
-
import { useState as
|
|
15084
|
+
import { useState as useState22, useCallback as useCallback12, useEffect as useEffect14, useRef as useRef12 } from "react";
|
|
14573
15085
|
|
|
14574
15086
|
// src/react/hooks/useDragResize.ts
|
|
14575
|
-
import { useState as
|
|
15087
|
+
import { useState as useState21, useRef as useRef11, useCallback as useCallback11, useEffect as useEffect13, useMemo as useMemo6 } from "react";
|
|
14576
15088
|
var DRAG_THRESHOLD = 5;
|
|
14577
15089
|
var FAB_SIZE = 56;
|
|
14578
15090
|
var EDGE_MARGIN = 24;
|
|
@@ -14640,8 +15152,8 @@ var useDragResize = (options) => {
|
|
|
14640
15152
|
maxWidth = DEFAULT_MAX_WIDTH,
|
|
14641
15153
|
minHeight = DEFAULT_MIN_HEIGHT
|
|
14642
15154
|
} = options;
|
|
14643
|
-
const [isMobile, setIsMobile] =
|
|
14644
|
-
|
|
15155
|
+
const [isMobile, setIsMobile] = useState21(false);
|
|
15156
|
+
useEffect13(() => {
|
|
14645
15157
|
if (typeof window === "undefined") return;
|
|
14646
15158
|
const mql = window.matchMedia("(max-width: 767px)");
|
|
14647
15159
|
setIsMobile(mql.matches);
|
|
@@ -14656,19 +15168,19 @@ var useDragResize = (options) => {
|
|
|
14656
15168
|
panelWidth: initialWidth,
|
|
14657
15169
|
panelHeight: initialHeight
|
|
14658
15170
|
});
|
|
14659
|
-
const [fabPos, setFabPos] =
|
|
14660
|
-
const [panelSize, setPanelSize] =
|
|
14661
|
-
const [isDragging, setIsDragging] =
|
|
14662
|
-
const [isResizing, setIsResizing] =
|
|
14663
|
-
const [isDizzy, setIsDizzy] =
|
|
14664
|
-
const [viewport, setViewport] =
|
|
15171
|
+
const [fabPos, setFabPos] = useState21({ x: persisted.fabX, y: persisted.fabY });
|
|
15172
|
+
const [panelSize, setPanelSize] = useState21({ width: persisted.panelWidth, height: persisted.panelHeight });
|
|
15173
|
+
const [isDragging, setIsDragging] = useState21(false);
|
|
15174
|
+
const [isResizing, setIsResizing] = useState21(false);
|
|
15175
|
+
const [isDizzy, setIsDizzy] = useState21(false);
|
|
15176
|
+
const [viewport, setViewport] = useState21(() => ({
|
|
14665
15177
|
width: typeof window !== "undefined" ? window.innerWidth : 1024,
|
|
14666
15178
|
height: typeof window !== "undefined" ? window.innerHeight : 768
|
|
14667
15179
|
}));
|
|
14668
15180
|
const vw = viewport.width;
|
|
14669
15181
|
const vh = viewport.height;
|
|
14670
|
-
const initializedRef =
|
|
14671
|
-
|
|
15182
|
+
const initializedRef = useRef11(false);
|
|
15183
|
+
useEffect13(() => {
|
|
14672
15184
|
if (initializedRef.current || typeof window === "undefined") return;
|
|
14673
15185
|
initializedRef.current = true;
|
|
14674
15186
|
const correctFab = getInitialFabPosition(initialPosition);
|
|
@@ -14681,39 +15193,39 @@ var useDragResize = (options) => {
|
|
|
14681
15193
|
setFabPos({ x: loaded.fabX, y: loaded.fabY });
|
|
14682
15194
|
setPanelSize({ width: loaded.panelWidth, height: loaded.panelHeight });
|
|
14683
15195
|
}, [initialPosition, storageKey, initialWidth, initialHeight]);
|
|
14684
|
-
const dragStartRef =
|
|
14685
|
-
const isDraggingRef =
|
|
14686
|
-
const wasDragRef =
|
|
14687
|
-
const dragDeltaRef =
|
|
14688
|
-
const fabElRef =
|
|
14689
|
-
const dragCleanupRef =
|
|
14690
|
-
const snapTimerRef =
|
|
14691
|
-
const prevDragRef =
|
|
14692
|
-
const shakeScoreRef =
|
|
14693
|
-
const prevVelocityRef =
|
|
14694
|
-
const isDizzyRef =
|
|
14695
|
-
const dizzyTimerRef =
|
|
14696
|
-
const lastVelocityRef =
|
|
14697
|
-
const dragRafRef =
|
|
14698
|
-
const animCleanupRef =
|
|
14699
|
-
const snapEnabledRef =
|
|
14700
|
-
const storageKeyRef =
|
|
14701
|
-
const panelSizeRef =
|
|
14702
|
-
const fabPosRef =
|
|
14703
|
-
|
|
15196
|
+
const dragStartRef = useRef11(null);
|
|
15197
|
+
const isDraggingRef = useRef11(false);
|
|
15198
|
+
const wasDragRef = useRef11(false);
|
|
15199
|
+
const dragDeltaRef = useRef11({ dx: 0, dy: 0 });
|
|
15200
|
+
const fabElRef = useRef11(null);
|
|
15201
|
+
const dragCleanupRef = useRef11(null);
|
|
15202
|
+
const snapTimerRef = useRef11(null);
|
|
15203
|
+
const prevDragRef = useRef11(null);
|
|
15204
|
+
const shakeScoreRef = useRef11(0);
|
|
15205
|
+
const prevVelocityRef = useRef11(null);
|
|
15206
|
+
const isDizzyRef = useRef11(false);
|
|
15207
|
+
const dizzyTimerRef = useRef11(null);
|
|
15208
|
+
const lastVelocityRef = useRef11({ vx: 0, vy: 0, speed: 0 });
|
|
15209
|
+
const dragRafRef = useRef11(null);
|
|
15210
|
+
const animCleanupRef = useRef11(null);
|
|
15211
|
+
const snapEnabledRef = useRef11(snapEnabled);
|
|
15212
|
+
const storageKeyRef = useRef11(storageKey);
|
|
15213
|
+
const panelSizeRef = useRef11(panelSize);
|
|
15214
|
+
const fabPosRef = useRef11(fabPos);
|
|
15215
|
+
useEffect13(() => {
|
|
14704
15216
|
snapEnabledRef.current = snapEnabled;
|
|
14705
15217
|
}, [snapEnabled]);
|
|
14706
|
-
|
|
15218
|
+
useEffect13(() => {
|
|
14707
15219
|
storageKeyRef.current = storageKey;
|
|
14708
15220
|
}, [storageKey]);
|
|
14709
|
-
|
|
15221
|
+
useEffect13(() => {
|
|
14710
15222
|
panelSizeRef.current = panelSize;
|
|
14711
15223
|
}, [panelSize]);
|
|
14712
|
-
|
|
15224
|
+
useEffect13(() => {
|
|
14713
15225
|
fabPosRef.current = fabPos;
|
|
14714
15226
|
}, [fabPos]);
|
|
14715
|
-
const resizeStartRef =
|
|
14716
|
-
|
|
15227
|
+
const resizeStartRef = useRef11(null);
|
|
15228
|
+
useEffect13(() => {
|
|
14717
15229
|
return () => {
|
|
14718
15230
|
dragCleanupRef.current?.();
|
|
14719
15231
|
if (snapTimerRef.current) clearTimeout(snapTimerRef.current);
|
|
@@ -14721,7 +15233,7 @@ var useDragResize = (options) => {
|
|
|
14721
15233
|
if (dragRafRef.current) cancelAnimationFrame(dragRafRef.current);
|
|
14722
15234
|
};
|
|
14723
15235
|
}, []);
|
|
14724
|
-
const handleFabPointerDown =
|
|
15236
|
+
const handleFabPointerDown = useCallback11((e) => {
|
|
14725
15237
|
if (disabled || isMobile) return;
|
|
14726
15238
|
dragCleanupRef.current?.();
|
|
14727
15239
|
const el = e.currentTarget;
|
|
@@ -14934,7 +15446,7 @@ var useDragResize = (options) => {
|
|
|
14934
15446
|
borderRadius: "var(--floating-panel-radius, 16px)"
|
|
14935
15447
|
};
|
|
14936
15448
|
}, [isMobile, disabled, fabPos.x, fabPos.y, panelSize.width, panelSize.height, vw, vh, panelDirection, minHeight]);
|
|
14937
|
-
const handleResizePointerDown =
|
|
15449
|
+
const handleResizePointerDown = useCallback11((edge, e) => {
|
|
14938
15450
|
if (disabled || isMobile) return;
|
|
14939
15451
|
e.preventDefault();
|
|
14940
15452
|
e.stopPropagation();
|
|
@@ -14950,7 +15462,7 @@ var useDragResize = (options) => {
|
|
|
14950
15462
|
};
|
|
14951
15463
|
setIsResizing(true);
|
|
14952
15464
|
}, [disabled, isMobile]);
|
|
14953
|
-
const handleResizePointerMove =
|
|
15465
|
+
const handleResizePointerMove = useCallback11((e) => {
|
|
14954
15466
|
if (!resizeStartRef.current) return;
|
|
14955
15467
|
const { startX, startY, width, height, edge, fabY } = resizeStartRef.current;
|
|
14956
15468
|
const dx = e.clientX - startX;
|
|
@@ -14974,7 +15486,7 @@ var useDragResize = (options) => {
|
|
|
14974
15486
|
newHeight = Math.max(minHeight, Math.min(maxH, newHeight));
|
|
14975
15487
|
setPanelSize({ width: newWidth, height: newHeight });
|
|
14976
15488
|
}, [minWidth, maxWidth, minHeight]);
|
|
14977
|
-
const handleResizePointerUp =
|
|
15489
|
+
const handleResizePointerUp = useCallback11((e) => {
|
|
14978
15490
|
if (!resizeStartRef.current) return;
|
|
14979
15491
|
e.currentTarget.releasePointerCapture(e.pointerId);
|
|
14980
15492
|
resizeStartRef.current = null;
|
|
@@ -14983,7 +15495,7 @@ var useDragResize = (options) => {
|
|
|
14983
15495
|
const fp = fabPosRef.current;
|
|
14984
15496
|
persistState(storageKeyRef.current, { fabX: fp.x, fabY: fp.y, panelWidth: ps.width, panelHeight: ps.height });
|
|
14985
15497
|
}, []);
|
|
14986
|
-
|
|
15498
|
+
useEffect13(() => {
|
|
14987
15499
|
if (typeof window === "undefined") return;
|
|
14988
15500
|
const handleResize = () => {
|
|
14989
15501
|
const newVw = window.innerWidth;
|
|
@@ -15041,9 +15553,9 @@ var useFloatingWidget = (options) => {
|
|
|
15041
15553
|
maxWidth,
|
|
15042
15554
|
minHeight
|
|
15043
15555
|
} = options || {};
|
|
15044
|
-
const [isOpen, setIsOpen] =
|
|
15045
|
-
const [activeTab, setActiveTab] =
|
|
15046
|
-
const panelRef =
|
|
15556
|
+
const [isOpen, setIsOpen] = useState22(defaultOpen);
|
|
15557
|
+
const [activeTab, setActiveTab] = useState22(defaultTab);
|
|
15558
|
+
const panelRef = useRef12(null);
|
|
15047
15559
|
const dragResize = useDragResize({
|
|
15048
15560
|
initialPosition: position,
|
|
15049
15561
|
initialWidth: width,
|
|
@@ -15055,27 +15567,27 @@ var useFloatingWidget = (options) => {
|
|
|
15055
15567
|
maxWidth,
|
|
15056
15568
|
minHeight
|
|
15057
15569
|
});
|
|
15058
|
-
const onOpenRef =
|
|
15059
|
-
const onCloseRef =
|
|
15060
|
-
const onTabChangeRef =
|
|
15061
|
-
|
|
15570
|
+
const onOpenRef = useRef12(onOpen);
|
|
15571
|
+
const onCloseRef = useRef12(onClose);
|
|
15572
|
+
const onTabChangeRef = useRef12(onTabChange);
|
|
15573
|
+
useEffect14(() => {
|
|
15062
15574
|
onOpenRef.current = onOpen;
|
|
15063
15575
|
}, [onOpen]);
|
|
15064
|
-
|
|
15576
|
+
useEffect14(() => {
|
|
15065
15577
|
onCloseRef.current = onClose;
|
|
15066
15578
|
}, [onClose]);
|
|
15067
|
-
|
|
15579
|
+
useEffect14(() => {
|
|
15068
15580
|
onTabChangeRef.current = onTabChange;
|
|
15069
15581
|
}, [onTabChange]);
|
|
15070
|
-
const open =
|
|
15582
|
+
const open = useCallback12(() => {
|
|
15071
15583
|
setIsOpen(true);
|
|
15072
15584
|
onOpenRef.current?.();
|
|
15073
15585
|
}, []);
|
|
15074
|
-
const close =
|
|
15586
|
+
const close = useCallback12(() => {
|
|
15075
15587
|
setIsOpen(false);
|
|
15076
15588
|
onCloseRef.current?.();
|
|
15077
15589
|
}, []);
|
|
15078
|
-
const toggle =
|
|
15590
|
+
const toggle = useCallback12(() => {
|
|
15079
15591
|
setIsOpen((prev) => {
|
|
15080
15592
|
const next = !prev;
|
|
15081
15593
|
if (next) onOpenRef.current?.();
|
|
@@ -15083,15 +15595,15 @@ var useFloatingWidget = (options) => {
|
|
|
15083
15595
|
return next;
|
|
15084
15596
|
});
|
|
15085
15597
|
}, []);
|
|
15086
|
-
const setTab =
|
|
15598
|
+
const setTab = useCallback12((tabKey) => {
|
|
15087
15599
|
setActiveTab(tabKey);
|
|
15088
15600
|
onTabChangeRef.current?.(tabKey);
|
|
15089
15601
|
}, []);
|
|
15090
|
-
const handleFabInteraction =
|
|
15602
|
+
const handleFabInteraction = useCallback12(() => {
|
|
15091
15603
|
if (dragResize.isDragging) return;
|
|
15092
15604
|
toggle();
|
|
15093
15605
|
}, [dragResize.isDragging, toggle]);
|
|
15094
|
-
|
|
15606
|
+
useEffect14(() => {
|
|
15095
15607
|
if (!isOpen) return;
|
|
15096
15608
|
const handleKeyDown = (e) => {
|
|
15097
15609
|
if (e.key === "Escape") {
|
|
@@ -15101,7 +15613,7 @@ var useFloatingWidget = (options) => {
|
|
|
15101
15613
|
document.addEventListener("keydown", handleKeyDown);
|
|
15102
15614
|
return () => document.removeEventListener("keydown", handleKeyDown);
|
|
15103
15615
|
}, [isOpen, close]);
|
|
15104
|
-
|
|
15616
|
+
useEffect14(() => {
|
|
15105
15617
|
if (!isOpen) return;
|
|
15106
15618
|
const handleClickOutside = (e) => {
|
|
15107
15619
|
if (dragResize.isDragging || dragResize.isResizing) return;
|
|
@@ -15117,11 +15629,11 @@ var useFloatingWidget = (options) => {
|
|
|
15117
15629
|
};
|
|
15118
15630
|
|
|
15119
15631
|
// src/react/components/floating/FloatingFab.tsx
|
|
15120
|
-
import { useRef as
|
|
15632
|
+
import { useRef as useRef14, useState as useState24, useEffect as useEffect16 } from "react";
|
|
15121
15633
|
|
|
15122
15634
|
// src/react/components/floating/DevDiveCharacter.tsx
|
|
15123
|
-
import { useState as
|
|
15124
|
-
import { Fragment as Fragment10, jsx as
|
|
15635
|
+
import { useState as useState23, useEffect as useEffect15, useRef as useRef13, useCallback as useCallback13 } from "react";
|
|
15636
|
+
import { Fragment as Fragment10, jsx as jsx24, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
15125
15637
|
var THEMES = {
|
|
15126
15638
|
dark: { body: "#2ecc71", stroke: "#27ae60", highlight: "#3ddc84", face: "#1a1a2e", eyeLight: "#fff" },
|
|
15127
15639
|
light: { body: "#1a1a2e", stroke: "#12122a", highlight: "#2a2a3e", face: "#2ecc71", eyeLight: "#fff" }
|
|
@@ -15141,32 +15653,32 @@ var DevDiveFabCharacter = ({
|
|
|
15141
15653
|
isComplete = false
|
|
15142
15654
|
}) => {
|
|
15143
15655
|
const c = THEMES[theme];
|
|
15144
|
-
const [eyeOffset, setEyeOffset] =
|
|
15145
|
-
const [isBlinking, setIsBlinking] =
|
|
15146
|
-
const [isHappy, setIsHappy] =
|
|
15147
|
-
const [isPressed, setIsPressed] =
|
|
15148
|
-
const [mouthOpen, setMouthOpen] =
|
|
15149
|
-
const [isSleepy, setIsSleepy] =
|
|
15150
|
-
const [isSurprised, setIsSurprised] =
|
|
15151
|
-
const [isWinking, setIsWinking] =
|
|
15152
|
-
const [isCatMouth, setIsCatMouth] =
|
|
15153
|
-
const [isEntering, setIsEntering] =
|
|
15154
|
-
const svgRef =
|
|
15155
|
-
const cleanupRef =
|
|
15156
|
-
const lastActivityRef =
|
|
15157
|
-
const isSleepyRef =
|
|
15158
|
-
const markActivity =
|
|
15656
|
+
const [eyeOffset, setEyeOffset] = useState23({ x: 0, y: 0 });
|
|
15657
|
+
const [isBlinking, setIsBlinking] = useState23(false);
|
|
15658
|
+
const [isHappy, setIsHappy] = useState23(false);
|
|
15659
|
+
const [isPressed, setIsPressed] = useState23(false);
|
|
15660
|
+
const [mouthOpen, setMouthOpen] = useState23(false);
|
|
15661
|
+
const [isSleepy, setIsSleepy] = useState23(false);
|
|
15662
|
+
const [isSurprised, setIsSurprised] = useState23(false);
|
|
15663
|
+
const [isWinking, setIsWinking] = useState23(false);
|
|
15664
|
+
const [isCatMouth, setIsCatMouth] = useState23(false);
|
|
15665
|
+
const [isEntering, setIsEntering] = useState23(true);
|
|
15666
|
+
const svgRef = useRef13(null);
|
|
15667
|
+
const cleanupRef = useRef13(null);
|
|
15668
|
+
const lastActivityRef = useRef13(Date.now());
|
|
15669
|
+
const isSleepyRef = useRef13(false);
|
|
15670
|
+
const markActivity = useCallback13(() => {
|
|
15159
15671
|
lastActivityRef.current = Date.now();
|
|
15160
15672
|
if (isSleepyRef.current) {
|
|
15161
15673
|
isSleepyRef.current = false;
|
|
15162
15674
|
setIsSleepy(false);
|
|
15163
15675
|
}
|
|
15164
15676
|
}, []);
|
|
15165
|
-
|
|
15677
|
+
useEffect15(() => {
|
|
15166
15678
|
const t = setTimeout(() => setIsEntering(false), 600);
|
|
15167
15679
|
return () => clearTimeout(t);
|
|
15168
15680
|
}, []);
|
|
15169
|
-
|
|
15681
|
+
useEffect15(() => {
|
|
15170
15682
|
let timer;
|
|
15171
15683
|
let blinkTimer;
|
|
15172
15684
|
const scheduleBlink = () => {
|
|
@@ -15182,7 +15694,7 @@ var DevDiveFabCharacter = ({
|
|
|
15182
15694
|
clearTimeout(blinkTimer);
|
|
15183
15695
|
};
|
|
15184
15696
|
}, []);
|
|
15185
|
-
|
|
15697
|
+
useEffect15(() => {
|
|
15186
15698
|
if (!isTalking) {
|
|
15187
15699
|
setMouthOpen(false);
|
|
15188
15700
|
return;
|
|
@@ -15195,7 +15707,7 @@ var DevDiveFabCharacter = ({
|
|
|
15195
15707
|
toggle();
|
|
15196
15708
|
return () => clearTimeout(timer);
|
|
15197
15709
|
}, [isTalking]);
|
|
15198
|
-
|
|
15710
|
+
useEffect15(() => {
|
|
15199
15711
|
if (typeof window === "undefined") return;
|
|
15200
15712
|
let rafId = 0;
|
|
15201
15713
|
const onMouseMove = (e) => {
|
|
@@ -15219,7 +15731,7 @@ var DevDiveFabCharacter = ({
|
|
|
15219
15731
|
cancelAnimationFrame(rafId);
|
|
15220
15732
|
};
|
|
15221
15733
|
}, []);
|
|
15222
|
-
|
|
15734
|
+
useEffect15(() => {
|
|
15223
15735
|
let upTimer;
|
|
15224
15736
|
let surpriseTimer;
|
|
15225
15737
|
const rafId = requestAnimationFrame(() => {
|
|
@@ -15262,10 +15774,10 @@ var DevDiveFabCharacter = ({
|
|
|
15262
15774
|
cleanupRef.current?.();
|
|
15263
15775
|
};
|
|
15264
15776
|
}, [markActivity]);
|
|
15265
|
-
|
|
15777
|
+
useEffect15(() => {
|
|
15266
15778
|
markActivity();
|
|
15267
15779
|
}, [isOpen, isTalking, markActivity]);
|
|
15268
|
-
|
|
15780
|
+
useEffect15(() => {
|
|
15269
15781
|
if (isOpen || isTalking || isDizzy) return;
|
|
15270
15782
|
const check = setInterval(() => {
|
|
15271
15783
|
if (Date.now() - lastActivityRef.current > IDLE_TIMEOUT_MS && !isSleepyRef.current) {
|
|
@@ -15275,8 +15787,8 @@ var DevDiveFabCharacter = ({
|
|
|
15275
15787
|
}, 5e3);
|
|
15276
15788
|
return () => clearInterval(check);
|
|
15277
15789
|
}, [isOpen, isTalking, isDizzy]);
|
|
15278
|
-
const prevCompleteRef =
|
|
15279
|
-
|
|
15790
|
+
const prevCompleteRef = useRef13(false);
|
|
15791
|
+
useEffect15(() => {
|
|
15280
15792
|
const wasComplete = prevCompleteRef.current;
|
|
15281
15793
|
prevCompleteRef.current = isComplete;
|
|
15282
15794
|
if (wasComplete || !isComplete) return;
|
|
@@ -15284,7 +15796,7 @@ var DevDiveFabCharacter = ({
|
|
|
15284
15796
|
const t = setTimeout(() => setIsWinking(false), WINK_DURATION_MS);
|
|
15285
15797
|
return () => clearTimeout(t);
|
|
15286
15798
|
}, [isComplete]);
|
|
15287
|
-
|
|
15799
|
+
useEffect15(() => {
|
|
15288
15800
|
if (isOpen || isTalking || isDizzy || isError || isSleepy) {
|
|
15289
15801
|
setIsCatMouth(false);
|
|
15290
15802
|
return;
|
|
@@ -15309,62 +15821,62 @@ var DevDiveFabCharacter = ({
|
|
|
15309
15821
|
clearTimeout(hideT);
|
|
15310
15822
|
};
|
|
15311
15823
|
}, [isOpen, isTalking, isDizzy, isError, isSleepy]);
|
|
15312
|
-
const renderNormalEyes = (r) => /* @__PURE__ */
|
|
15313
|
-
/* @__PURE__ */
|
|
15314
|
-
/* @__PURE__ */
|
|
15315
|
-
/* @__PURE__ */
|
|
15316
|
-
/* @__PURE__ */
|
|
15824
|
+
const renderNormalEyes = (r) => /* @__PURE__ */ jsxs23(Fragment10, { children: [
|
|
15825
|
+
/* @__PURE__ */ jsx24("circle", { cx: "87", cy: "106", r, fill: c.face, style: { transition: "fill 0.4s ease" } }),
|
|
15826
|
+
/* @__PURE__ */ jsx24("circle", { cx: "133", cy: "106", r, fill: c.face, style: { transition: "fill 0.4s ease" } }),
|
|
15827
|
+
/* @__PURE__ */ jsx24("circle", { cx: "90", cy: "102", r: "2.5", fill: c.eyeLight, opacity: "0.9" }),
|
|
15828
|
+
/* @__PURE__ */ jsx24("circle", { cx: "136", cy: "102", r: "2.5", fill: c.eyeLight, opacity: "0.9" })
|
|
15317
15829
|
] });
|
|
15318
15830
|
const renderEyes = () => {
|
|
15319
|
-
if (isDizzy) return /* @__PURE__ */
|
|
15320
|
-
/* @__PURE__ */
|
|
15321
|
-
/* @__PURE__ */
|
|
15322
|
-
/* @__PURE__ */
|
|
15831
|
+
if (isDizzy) return /* @__PURE__ */ jsxs23(Fragment10, { children: [
|
|
15832
|
+
/* @__PURE__ */ jsxs23("g", { children: [
|
|
15833
|
+
/* @__PURE__ */ jsx24("line", { x1: "81", y1: "100", x2: "93", y2: "112", stroke: c.face, strokeWidth: "3", strokeLinecap: "round" }),
|
|
15834
|
+
/* @__PURE__ */ jsx24("line", { x1: "93", y1: "100", x2: "81", y2: "112", stroke: c.face, strokeWidth: "3", strokeLinecap: "round" })
|
|
15323
15835
|
] }),
|
|
15324
|
-
/* @__PURE__ */
|
|
15325
|
-
/* @__PURE__ */
|
|
15326
|
-
/* @__PURE__ */
|
|
15836
|
+
/* @__PURE__ */ jsxs23("g", { children: [
|
|
15837
|
+
/* @__PURE__ */ jsx24("line", { x1: "127", y1: "100", x2: "139", y2: "112", stroke: c.face, strokeWidth: "3", strokeLinecap: "round" }),
|
|
15838
|
+
/* @__PURE__ */ jsx24("line", { x1: "139", y1: "100", x2: "127", y2: "112", stroke: c.face, strokeWidth: "3", strokeLinecap: "round" })
|
|
15327
15839
|
] })
|
|
15328
15840
|
] });
|
|
15329
|
-
if (isSleepy) return /* @__PURE__ */
|
|
15330
|
-
/* @__PURE__ */
|
|
15331
|
-
/* @__PURE__ */
|
|
15841
|
+
if (isSleepy) return /* @__PURE__ */ jsxs23(Fragment10, { children: [
|
|
15842
|
+
/* @__PURE__ */ jsx24("path", { d: "M80 108 Q87 102 94 108", fill: "none", stroke: c.face, strokeWidth: "3.5", strokeLinecap: "round" }),
|
|
15843
|
+
/* @__PURE__ */ jsx24("path", { d: "M126 108 Q133 102 140 108", fill: "none", stroke: c.face, strokeWidth: "3.5", strokeLinecap: "round" })
|
|
15332
15844
|
] });
|
|
15333
|
-
if (isSurprised) return /* @__PURE__ */
|
|
15334
|
-
/* @__PURE__ */
|
|
15335
|
-
/* @__PURE__ */
|
|
15336
|
-
/* @__PURE__ */
|
|
15337
|
-
/* @__PURE__ */
|
|
15845
|
+
if (isSurprised) return /* @__PURE__ */ jsxs23(Fragment10, { children: [
|
|
15846
|
+
/* @__PURE__ */ jsx24("circle", { cx: "87", cy: "106", r: "12", fill: c.face }),
|
|
15847
|
+
/* @__PURE__ */ jsx24("circle", { cx: "133", cy: "106", r: "12", fill: c.face }),
|
|
15848
|
+
/* @__PURE__ */ jsx24("circle", { cx: "91", cy: "100", r: "3.5", fill: c.eyeLight }),
|
|
15849
|
+
/* @__PURE__ */ jsx24("circle", { cx: "137", cy: "100", r: "3.5", fill: c.eyeLight })
|
|
15338
15850
|
] });
|
|
15339
|
-
if (isWinking) return /* @__PURE__ */
|
|
15340
|
-
/* @__PURE__ */
|
|
15341
|
-
/* @__PURE__ */
|
|
15342
|
-
/* @__PURE__ */
|
|
15851
|
+
if (isWinking) return /* @__PURE__ */ jsxs23(Fragment10, { children: [
|
|
15852
|
+
/* @__PURE__ */ jsx24("circle", { cx: "87", cy: "106", r: "8", fill: c.face }),
|
|
15853
|
+
/* @__PURE__ */ jsx24("circle", { cx: "90", cy: "102", r: "2.5", fill: c.eyeLight, opacity: "0.9" }),
|
|
15854
|
+
/* @__PURE__ */ jsx24("line", { x1: "126", y1: "108", x2: "140", y2: "108", stroke: c.face, strokeWidth: "3.5", strokeLinecap: "round" })
|
|
15343
15855
|
] });
|
|
15344
|
-
if (isError) return /* @__PURE__ */
|
|
15856
|
+
if (isError) return /* @__PURE__ */ jsxs23(Fragment10, { children: [
|
|
15345
15857
|
renderNormalEyes(8),
|
|
15346
|
-
/* @__PURE__ */
|
|
15347
|
-
/* @__PURE__ */
|
|
15858
|
+
/* @__PURE__ */ jsx24("line", { x1: "79", y1: "90", x2: "95", y2: "95", stroke: c.face, strokeWidth: "2.5", strokeLinecap: "round" }),
|
|
15859
|
+
/* @__PURE__ */ jsx24("line", { x1: "141", y1: "90", x2: "125", y2: "95", stroke: c.face, strokeWidth: "2.5", strokeLinecap: "round" })
|
|
15348
15860
|
] });
|
|
15349
|
-
if (isBlinking) return /* @__PURE__ */
|
|
15350
|
-
/* @__PURE__ */
|
|
15351
|
-
/* @__PURE__ */
|
|
15861
|
+
if (isBlinking) return /* @__PURE__ */ jsxs23(Fragment10, { children: [
|
|
15862
|
+
/* @__PURE__ */ jsx24("line", { x1: "80", y1: "108", x2: "94", y2: "108", stroke: c.face, strokeWidth: "3.5", strokeLinecap: "round" }),
|
|
15863
|
+
/* @__PURE__ */ jsx24("line", { x1: "126", y1: "108", x2: "140", y2: "108", stroke: c.face, strokeWidth: "3.5", strokeLinecap: "round" })
|
|
15352
15864
|
] });
|
|
15353
15865
|
return renderNormalEyes(isHappy ? 10 : 8);
|
|
15354
15866
|
};
|
|
15355
15867
|
const renderMouth = () => {
|
|
15356
|
-
if (isDizzy) return /* @__PURE__ */
|
|
15357
|
-
if (isSurprised) return /* @__PURE__ */
|
|
15358
|
-
if (isSleepy) return /* @__PURE__ */
|
|
15359
|
-
if (isError) return /* @__PURE__ */
|
|
15360
|
-
if (mouthOpen) return /* @__PURE__ */
|
|
15361
|
-
if (isCatMouth) return /* @__PURE__ */
|
|
15362
|
-
if (isPressed) return /* @__PURE__ */
|
|
15363
|
-
if (isHappy) return /* @__PURE__ */
|
|
15364
|
-
return /* @__PURE__ */
|
|
15868
|
+
if (isDizzy) return /* @__PURE__ */ jsx24("path", { d: "M98 130 Q102 125 106 130 Q110 135 114 130 Q118 125 122 130", fill: "none", stroke: c.face, strokeWidth: "3", strokeLinecap: "round" });
|
|
15869
|
+
if (isSurprised) return /* @__PURE__ */ jsx24("circle", { cx: "110", cy: "133", r: "7", fill: c.face });
|
|
15870
|
+
if (isSleepy) return /* @__PURE__ */ jsx24("ellipse", { cx: "110", cy: "131", rx: "4", ry: "3", fill: c.face });
|
|
15871
|
+
if (isError) return /* @__PURE__ */ jsx24("path", { d: "M103 130 Q110 135 117 130", fill: "none", stroke: c.face, strokeWidth: "2.5", strokeLinecap: "round" });
|
|
15872
|
+
if (mouthOpen) return /* @__PURE__ */ jsx24("ellipse", { cx: "110", cy: "131", rx: "6", ry: "5", fill: c.face });
|
|
15873
|
+
if (isCatMouth) return /* @__PURE__ */ jsx24("path", { d: "M100 130 Q105 137 110 128 Q115 137 120 130", fill: "none", stroke: c.face, strokeWidth: "3", strokeLinecap: "round" });
|
|
15874
|
+
if (isPressed) return /* @__PURE__ */ jsx24("ellipse", { cx: "110", cy: "132", rx: "6", ry: "6", fill: c.face, style: { transition: "fill 0.4s ease" } });
|
|
15875
|
+
if (isHappy) return /* @__PURE__ */ jsx24("path", { d: "M101 128 Q110 138 119 128", fill: "none", stroke: c.face, strokeWidth: "4", strokeLinecap: "round", style: { transition: "stroke 0.4s ease" } });
|
|
15876
|
+
return /* @__PURE__ */ jsx24("path", { d: "M103 128 Q110 134 117 128", fill: "none", stroke: c.face, strokeWidth: "3.5", strokeLinecap: "round", style: { transition: "stroke 0.4s ease" } });
|
|
15365
15877
|
};
|
|
15366
15878
|
const shouldFloat = !isEntering && !isOpen && !isSurprised && !isDizzy;
|
|
15367
|
-
return /* @__PURE__ */
|
|
15879
|
+
return /* @__PURE__ */ jsxs23(
|
|
15368
15880
|
"svg",
|
|
15369
15881
|
{
|
|
15370
15882
|
ref: svgRef,
|
|
@@ -15374,7 +15886,7 @@ var DevDiveFabCharacter = ({
|
|
|
15374
15886
|
className: `${isEntering ? "chatllm-character-entrance" : ""} ${shouldFloat ? "chatllm-character-float" : ""}`,
|
|
15375
15887
|
style: { overflow: "visible", pointerEvents: "none" },
|
|
15376
15888
|
children: [
|
|
15377
|
-
/* @__PURE__ */
|
|
15889
|
+
/* @__PURE__ */ jsx24(
|
|
15378
15890
|
"path",
|
|
15379
15891
|
{
|
|
15380
15892
|
d: BODY_PATH,
|
|
@@ -15386,21 +15898,21 @@ var DevDiveFabCharacter = ({
|
|
|
15386
15898
|
),
|
|
15387
15899
|
isOpen && isHappy ? (
|
|
15388
15900
|
/* @Todo vibecode - 열림+호버 시에만 X 표시 (평소엔 얼굴 유지) */
|
|
15389
|
-
/* @__PURE__ */
|
|
15390
|
-
/* @__PURE__ */
|
|
15391
|
-
/* @__PURE__ */
|
|
15901
|
+
/* @__PURE__ */ jsxs23("g", { style: { transition: "transform 0.3s ease", transform: "rotate(90deg)", transformOrigin: "110px 115px" }, children: [
|
|
15902
|
+
/* @__PURE__ */ jsx24("line", { x1: "95", y1: "100", x2: "125", y2: "130", stroke: c.face, strokeWidth: "5", strokeLinecap: "round" }),
|
|
15903
|
+
/* @__PURE__ */ jsx24("line", { x1: "125", y1: "100", x2: "95", y2: "130", stroke: c.face, strokeWidth: "5", strokeLinecap: "round" })
|
|
15392
15904
|
] })
|
|
15393
15905
|
) : (
|
|
15394
15906
|
/* 눈 + 입 — 마우스 추적 (isDizzy/isSleepy 시 추적 비활성) */
|
|
15395
|
-
/* @__PURE__ */
|
|
15907
|
+
/* @__PURE__ */ jsxs23("g", { transform: isDizzy || isSleepy ? "" : `translate(${eyeOffset.x}, ${eyeOffset.y})`, children: [
|
|
15396
15908
|
renderEyes(),
|
|
15397
15909
|
renderMouth(),
|
|
15398
|
-
isSleepy && /* @__PURE__ */
|
|
15399
|
-
/* @__PURE__ */
|
|
15400
|
-
/* @__PURE__ */
|
|
15401
|
-
/* @__PURE__ */
|
|
15910
|
+
isSleepy && /* @__PURE__ */ jsxs23("g", { children: [
|
|
15911
|
+
/* @__PURE__ */ jsx24("text", { x: "152", y: "88", fontSize: "14", fill: c.face, opacity: "0.7", className: "chatllm-zzz chatllm-zzz-1", fontFamily: "sans-serif", fontWeight: "bold", children: "z" }),
|
|
15912
|
+
/* @__PURE__ */ jsx24("text", { x: "160", y: "76", fontSize: "11", fill: c.face, opacity: "0.5", className: "chatllm-zzz chatllm-zzz-2", fontFamily: "sans-serif", fontWeight: "bold", children: "z" }),
|
|
15913
|
+
/* @__PURE__ */ jsx24("text", { x: "166", y: "66", fontSize: "9", fill: c.face, opacity: "0.3", className: "chatllm-zzz chatllm-zzz-3", fontFamily: "sans-serif", fontWeight: "bold", children: "z" })
|
|
15402
15914
|
] }),
|
|
15403
|
-
isError && /* @__PURE__ */
|
|
15915
|
+
isError && /* @__PURE__ */ jsx24(
|
|
15404
15916
|
"path",
|
|
15405
15917
|
{
|
|
15406
15918
|
d: "M158 80 Q161 88 158 94 Q155 88 158 80Z",
|
|
@@ -15416,7 +15928,7 @@ var DevDiveFabCharacter = ({
|
|
|
15416
15928
|
};
|
|
15417
15929
|
var DevDiveAvatar = ({ size = 32, theme = "light" }) => {
|
|
15418
15930
|
const c = THEMES[theme];
|
|
15419
|
-
return /* @__PURE__ */
|
|
15931
|
+
return /* @__PURE__ */ jsxs23(
|
|
15420
15932
|
"svg",
|
|
15421
15933
|
{
|
|
15422
15934
|
width: size,
|
|
@@ -15424,7 +15936,7 @@ var DevDiveAvatar = ({ size = 32, theme = "light" }) => {
|
|
|
15424
15936
|
viewBox: "30 45 160 140",
|
|
15425
15937
|
style: { display: "block" },
|
|
15426
15938
|
children: [
|
|
15427
|
-
/* @__PURE__ */
|
|
15939
|
+
/* @__PURE__ */ jsx24(
|
|
15428
15940
|
"path",
|
|
15429
15941
|
{
|
|
15430
15942
|
d: BODY_PATH,
|
|
@@ -15433,7 +15945,7 @@ var DevDiveAvatar = ({ size = 32, theme = "light" }) => {
|
|
|
15433
15945
|
strokeWidth: "5"
|
|
15434
15946
|
}
|
|
15435
15947
|
),
|
|
15436
|
-
/* @__PURE__ */
|
|
15948
|
+
/* @__PURE__ */ jsx24(
|
|
15437
15949
|
"path",
|
|
15438
15950
|
{
|
|
15439
15951
|
d: "M170 72 C176 86, 178 102, 175 120",
|
|
@@ -15443,18 +15955,18 @@ var DevDiveAvatar = ({ size = 32, theme = "light" }) => {
|
|
|
15443
15955
|
strokeLinecap: "round"
|
|
15444
15956
|
}
|
|
15445
15957
|
),
|
|
15446
|
-
/* @__PURE__ */
|
|
15447
|
-
/* @__PURE__ */
|
|
15448
|
-
/* @__PURE__ */
|
|
15449
|
-
/* @__PURE__ */
|
|
15450
|
-
/* @__PURE__ */
|
|
15958
|
+
/* @__PURE__ */ jsx24("circle", { cx: "87", cy: "106", r: "7.5", fill: c.face }),
|
|
15959
|
+
/* @__PURE__ */ jsx24("circle", { cx: "133", cy: "106", r: "7.5", fill: c.face }),
|
|
15960
|
+
/* @__PURE__ */ jsx24("circle", { cx: "90", cy: "102", r: "2", fill: c.eyeLight, opacity: "0.85" }),
|
|
15961
|
+
/* @__PURE__ */ jsx24("circle", { cx: "136", cy: "102", r: "2", fill: c.eyeLight, opacity: "0.85" }),
|
|
15962
|
+
/* @__PURE__ */ jsx24("path", { d: "M104 127 Q110 132 116 127", fill: "none", stroke: c.face, strokeWidth: "3", strokeLinecap: "round" })
|
|
15451
15963
|
]
|
|
15452
15964
|
}
|
|
15453
15965
|
);
|
|
15454
15966
|
};
|
|
15455
15967
|
|
|
15456
15968
|
// src/react/components/floating/FloatingFab.tsx
|
|
15457
|
-
import { jsx as
|
|
15969
|
+
import { jsx as jsx25, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
15458
15970
|
var FloatingFab = ({
|
|
15459
15971
|
onClick,
|
|
15460
15972
|
isOpen,
|
|
@@ -15476,12 +15988,12 @@ var FloatingFab = ({
|
|
|
15476
15988
|
}) => {
|
|
15477
15989
|
const isRight = position.includes("right");
|
|
15478
15990
|
const isBottom = position.includes("bottom");
|
|
15479
|
-
const fabRef =
|
|
15991
|
+
const fabRef = useRef14(null);
|
|
15480
15992
|
const isCharacterMode = !icon;
|
|
15481
|
-
const [bubbleOnRight, setBubbleOnRight] =
|
|
15993
|
+
const [bubbleOnRight, setBubbleOnRight] = useState24(!isRight);
|
|
15482
15994
|
const posLeft = positionStyle?.left;
|
|
15483
15995
|
const posTop = positionStyle?.top;
|
|
15484
|
-
|
|
15996
|
+
useEffect16(() => {
|
|
15485
15997
|
if (!fabRef.current || typeof window === "undefined") {
|
|
15486
15998
|
setBubbleOnRight(!isRight);
|
|
15487
15999
|
return;
|
|
@@ -15489,14 +16001,14 @@ var FloatingFab = ({
|
|
|
15489
16001
|
const rect = fabRef.current.getBoundingClientRect();
|
|
15490
16002
|
setBubbleOnRight(rect.left + rect.width / 2 < window.innerWidth / 2);
|
|
15491
16003
|
}, [isRight, posLeft, posTop]);
|
|
15492
|
-
const [bubbleText, setBubbleText] =
|
|
15493
|
-
const [bubbleExiting, setBubbleExiting] =
|
|
15494
|
-
const bubbleTextRef =
|
|
16004
|
+
const [bubbleText, setBubbleText] = useState24(null);
|
|
16005
|
+
const [bubbleExiting, setBubbleExiting] = useState24(false);
|
|
16006
|
+
const bubbleTextRef = useRef14(bubbleText);
|
|
15495
16007
|
bubbleTextRef.current = bubbleText;
|
|
15496
|
-
const [displayText, setDisplayText] =
|
|
15497
|
-
const [isTyping, setIsTyping] =
|
|
15498
|
-
const typingTimerRef =
|
|
15499
|
-
|
|
16008
|
+
const [displayText, setDisplayText] = useState24(null);
|
|
16009
|
+
const [isTyping, setIsTyping] = useState24(false);
|
|
16010
|
+
const typingTimerRef = useRef14(null);
|
|
16011
|
+
useEffect16(() => {
|
|
15500
16012
|
if (notification) {
|
|
15501
16013
|
setBubbleText(notification);
|
|
15502
16014
|
setBubbleExiting(false);
|
|
@@ -15532,9 +16044,9 @@ var FloatingFab = ({
|
|
|
15532
16044
|
}, 300);
|
|
15533
16045
|
return () => clearTimeout(timer);
|
|
15534
16046
|
}, [notification]);
|
|
15535
|
-
const notifContentRef =
|
|
15536
|
-
const [needsMarquee, setNeedsMarquee] =
|
|
15537
|
-
|
|
16047
|
+
const notifContentRef = useRef14(null);
|
|
16048
|
+
const [needsMarquee, setNeedsMarquee] = useState24(false);
|
|
16049
|
+
useEffect16(() => {
|
|
15538
16050
|
if (isTyping || !notification) {
|
|
15539
16051
|
setNeedsMarquee(false);
|
|
15540
16052
|
return;
|
|
@@ -15556,7 +16068,7 @@ var FloatingFab = ({
|
|
|
15556
16068
|
...isBottom ? { bottom: 28 } : { top: 28 },
|
|
15557
16069
|
...isRight ? { right: 28 } : { left: 28 }
|
|
15558
16070
|
};
|
|
15559
|
-
return /* @__PURE__ */
|
|
16071
|
+
return /* @__PURE__ */ jsxs24(
|
|
15560
16072
|
"button",
|
|
15561
16073
|
{
|
|
15562
16074
|
ref: fabRef,
|
|
@@ -15591,7 +16103,7 @@ var FloatingFab = ({
|
|
|
15591
16103
|
...fabStyle
|
|
15592
16104
|
},
|
|
15593
16105
|
children: [
|
|
15594
|
-
/* @__PURE__ */
|
|
16106
|
+
/* @__PURE__ */ jsx25(
|
|
15595
16107
|
"span",
|
|
15596
16108
|
{
|
|
15597
16109
|
style: {
|
|
@@ -15605,10 +16117,10 @@ var FloatingFab = ({
|
|
|
15605
16117
|
transition: "transform 0.3s ease",
|
|
15606
16118
|
transform: !isCharacterMode && isOpen ? "rotate(90deg)" : "rotate(0deg)"
|
|
15607
16119
|
},
|
|
15608
|
-
children: isCharacterMode ? /* @__PURE__ */
|
|
16120
|
+
children: isCharacterMode ? /* @__PURE__ */ jsx25(DevDiveFabCharacter, { theme: theme?.mode === "dark" ? "dark" : "light", isTalking, isOpen, isDizzy, isError, isComplete }) : isOpen ? /* @__PURE__ */ jsx25(IconSvg, { name: "close-line", size: 24, color: "#fff" }) : icon || /* @__PURE__ */ jsx25(IconSvg, { name: "chat-1-line", size: 24, color: "#fff" })
|
|
15609
16121
|
}
|
|
15610
16122
|
),
|
|
15611
|
-
!!badge && badge > 0 && !isOpen && /* @__PURE__ */
|
|
16123
|
+
!!badge && badge > 0 && !isOpen && /* @__PURE__ */ jsx25(
|
|
15612
16124
|
"span",
|
|
15613
16125
|
{
|
|
15614
16126
|
style: {
|
|
@@ -15632,7 +16144,7 @@ var FloatingFab = ({
|
|
|
15632
16144
|
children: badge > 99 ? "99+" : badge
|
|
15633
16145
|
}
|
|
15634
16146
|
),
|
|
15635
|
-
bubbleText && /* @__PURE__ */
|
|
16147
|
+
bubbleText && /* @__PURE__ */ jsx25(
|
|
15636
16148
|
"div",
|
|
15637
16149
|
{
|
|
15638
16150
|
className: [
|
|
@@ -15650,19 +16162,19 @@ var FloatingFab = ({
|
|
|
15650
16162
|
opacity: !isOpen && !isDragging && !bubbleExiting ? 1 : 0,
|
|
15651
16163
|
transition: "opacity 0.2s ease"
|
|
15652
16164
|
},
|
|
15653
|
-
children: /* @__PURE__ */
|
|
16165
|
+
children: /* @__PURE__ */ jsx25(
|
|
15654
16166
|
"div",
|
|
15655
16167
|
{
|
|
15656
16168
|
ref: notifContentRef,
|
|
15657
16169
|
className: `chatllm-fab-notification__content${needsMarquee ? " chatllm-fab-notification__content--scrolling" : ""}`,
|
|
15658
|
-
children: /* @__PURE__ */
|
|
16170
|
+
children: /* @__PURE__ */ jsxs24(
|
|
15659
16171
|
"div",
|
|
15660
16172
|
{
|
|
15661
16173
|
className: "chatllm-fab-notification__track",
|
|
15662
16174
|
style: needsMarquee ? { animationDuration: `${Math.max(6, bubbleText.length * 0.3)}s` } : void 0,
|
|
15663
16175
|
children: [
|
|
15664
|
-
/* @__PURE__ */
|
|
15665
|
-
needsMarquee && /* @__PURE__ */
|
|
16176
|
+
/* @__PURE__ */ jsx25("span", { children: displayText ?? bubbleText }),
|
|
16177
|
+
needsMarquee && /* @__PURE__ */ jsx25("span", { "aria-hidden": "true", children: bubbleText })
|
|
15666
16178
|
]
|
|
15667
16179
|
}
|
|
15668
16180
|
)
|
|
@@ -15676,8 +16188,8 @@ var FloatingFab = ({
|
|
|
15676
16188
|
};
|
|
15677
16189
|
|
|
15678
16190
|
// src/react/components/floating/FloatingPanel.tsx
|
|
15679
|
-
import { useState as
|
|
15680
|
-
import { jsxs as
|
|
16191
|
+
import { useState as useState25, useEffect as useEffect17, useRef as useRef15 } from "react";
|
|
16192
|
+
import { jsxs as jsxs25 } from "react/jsx-runtime";
|
|
15681
16193
|
var FloatingPanel = ({
|
|
15682
16194
|
isOpen,
|
|
15683
16195
|
width,
|
|
@@ -15694,8 +16206,8 @@ var FloatingPanel = ({
|
|
|
15694
16206
|
}) => {
|
|
15695
16207
|
const isRight = position.includes("right");
|
|
15696
16208
|
const themeClass = theme?.mode === "dark" ? "chatllm-dark" : "";
|
|
15697
|
-
const [isMobile, setIsMobile] =
|
|
15698
|
-
|
|
16209
|
+
const [isMobile, setIsMobile] = useState25(false);
|
|
16210
|
+
useEffect17(() => {
|
|
15699
16211
|
if (typeof window === "undefined") return;
|
|
15700
16212
|
const mql = window.matchMedia("(max-width: 767px)");
|
|
15701
16213
|
setIsMobile(mql.matches);
|
|
@@ -15703,10 +16215,10 @@ var FloatingPanel = ({
|
|
|
15703
16215
|
mql.addEventListener("change", handler);
|
|
15704
16216
|
return () => mql.removeEventListener("change", handler);
|
|
15705
16217
|
}, []);
|
|
15706
|
-
const [shouldRender, setShouldRender] =
|
|
15707
|
-
const [isVisible, setIsVisible] =
|
|
15708
|
-
const rafRef =
|
|
15709
|
-
|
|
16218
|
+
const [shouldRender, setShouldRender] = useState25(isOpen);
|
|
16219
|
+
const [isVisible, setIsVisible] = useState25(isOpen);
|
|
16220
|
+
const rafRef = useRef15(0);
|
|
16221
|
+
useEffect17(() => {
|
|
15710
16222
|
if (isOpen) {
|
|
15711
16223
|
setShouldRender(true);
|
|
15712
16224
|
rafRef.current = requestAnimationFrame(() => {
|
|
@@ -15721,7 +16233,7 @@ var FloatingPanel = ({
|
|
|
15721
16233
|
}
|
|
15722
16234
|
return () => cancelAnimationFrame(rafRef.current);
|
|
15723
16235
|
}, [isOpen]);
|
|
15724
|
-
|
|
16236
|
+
useEffect17(() => {
|
|
15725
16237
|
if (!isOpen || !isMobile) return;
|
|
15726
16238
|
const prev = document.body.style.overflow;
|
|
15727
16239
|
document.body.style.overflow = "hidden";
|
|
@@ -15746,7 +16258,7 @@ var FloatingPanel = ({
|
|
|
15746
16258
|
};
|
|
15747
16259
|
const computedPosition = isMobile ? mobilePosition : positionStyle || defaultDesktopPosition;
|
|
15748
16260
|
const transition = "opacity 0.25s ease, transform 0.25s ease";
|
|
15749
|
-
return /* @__PURE__ */
|
|
16261
|
+
return /* @__PURE__ */ jsxs25(
|
|
15750
16262
|
"div",
|
|
15751
16263
|
{
|
|
15752
16264
|
ref: panelRef,
|
|
@@ -15776,14 +16288,14 @@ var FloatingPanel = ({
|
|
|
15776
16288
|
};
|
|
15777
16289
|
|
|
15778
16290
|
// src/react/components/floating/FloatingTabBar.tsx
|
|
15779
|
-
import { jsx as
|
|
16291
|
+
import { jsx as jsx26, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
15780
16292
|
var FloatingTabBar = ({
|
|
15781
16293
|
tabs,
|
|
15782
16294
|
activeTab,
|
|
15783
16295
|
onTabChange
|
|
15784
16296
|
}) => {
|
|
15785
16297
|
if (tabs.length <= 1) return null;
|
|
15786
|
-
return /* @__PURE__ */
|
|
16298
|
+
return /* @__PURE__ */ jsx26(
|
|
15787
16299
|
"div",
|
|
15788
16300
|
{
|
|
15789
16301
|
role: "tablist",
|
|
@@ -15796,7 +16308,7 @@ var FloatingTabBar = ({
|
|
|
15796
16308
|
},
|
|
15797
16309
|
children: tabs.map((tab) => {
|
|
15798
16310
|
const isActive = tab.key === activeTab;
|
|
15799
|
-
return /* @__PURE__ */
|
|
16311
|
+
return /* @__PURE__ */ jsxs26(
|
|
15800
16312
|
"button",
|
|
15801
16313
|
{
|
|
15802
16314
|
onClick: () => onTabChange(tab.key),
|
|
@@ -15821,7 +16333,7 @@ var FloatingTabBar = ({
|
|
|
15821
16333
|
transition: "color 0.15s ease"
|
|
15822
16334
|
},
|
|
15823
16335
|
children: [
|
|
15824
|
-
tab.icon && /* @__PURE__ */
|
|
16336
|
+
tab.icon && /* @__PURE__ */ jsxs26(
|
|
15825
16337
|
"span",
|
|
15826
16338
|
{
|
|
15827
16339
|
style: {
|
|
@@ -15831,7 +16343,7 @@ var FloatingTabBar = ({
|
|
|
15831
16343
|
},
|
|
15832
16344
|
children: [
|
|
15833
16345
|
tab.icon,
|
|
15834
|
-
!!tab.badge && tab.badge > 0 && /* @__PURE__ */
|
|
16346
|
+
!!tab.badge && tab.badge > 0 && /* @__PURE__ */ jsx26(
|
|
15835
16347
|
"span",
|
|
15836
16348
|
{
|
|
15837
16349
|
style: {
|
|
@@ -15857,8 +16369,8 @@ var FloatingTabBar = ({
|
|
|
15857
16369
|
]
|
|
15858
16370
|
}
|
|
15859
16371
|
),
|
|
15860
|
-
/* @__PURE__ */
|
|
15861
|
-
isActive && /* @__PURE__ */
|
|
16372
|
+
/* @__PURE__ */ jsx26("span", { children: tab.label }),
|
|
16373
|
+
isActive && /* @__PURE__ */ jsx26(
|
|
15862
16374
|
"span",
|
|
15863
16375
|
{
|
|
15864
16376
|
style: {
|
|
@@ -15882,11 +16394,11 @@ var FloatingTabBar = ({
|
|
|
15882
16394
|
};
|
|
15883
16395
|
|
|
15884
16396
|
// src/react/components/floating/CompactChatView.tsx
|
|
15885
|
-
import { useState as
|
|
16397
|
+
import { useState as useState27, useCallback as useCallback14 } from "react";
|
|
15886
16398
|
|
|
15887
16399
|
// src/react/components/floating/CompactSessionMenu.tsx
|
|
15888
|
-
import { useState as
|
|
15889
|
-
import { jsx as
|
|
16400
|
+
import { useState as useState26, useRef as useRef16, useEffect as useEffect18 } from "react";
|
|
16401
|
+
import { jsx as jsx27, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
15890
16402
|
var CompactSessionMenu = ({
|
|
15891
16403
|
sessions,
|
|
15892
16404
|
currentSessionId,
|
|
@@ -15897,13 +16409,13 @@ var CompactSessionMenu = ({
|
|
|
15897
16409
|
onClose,
|
|
15898
16410
|
isLoading = false
|
|
15899
16411
|
}) => {
|
|
15900
|
-
const menuRef =
|
|
15901
|
-
const inputRef =
|
|
15902
|
-
const onCloseRef =
|
|
16412
|
+
const menuRef = useRef16(null);
|
|
16413
|
+
const inputRef = useRef16(null);
|
|
16414
|
+
const onCloseRef = useRef16(onClose);
|
|
15903
16415
|
onCloseRef.current = onClose;
|
|
15904
|
-
const [editingId, setEditingId] =
|
|
15905
|
-
const [editingTitle, setEditingTitle] =
|
|
15906
|
-
|
|
16416
|
+
const [editingId, setEditingId] = useState26(null);
|
|
16417
|
+
const [editingTitle, setEditingTitle] = useState26("");
|
|
16418
|
+
useEffect18(() => {
|
|
15907
16419
|
const handleMouseDown = (e) => {
|
|
15908
16420
|
if (menuRef.current && !menuRef.current.contains(e.target)) {
|
|
15909
16421
|
onCloseRef.current();
|
|
@@ -15912,7 +16424,7 @@ var CompactSessionMenu = ({
|
|
|
15912
16424
|
document.addEventListener("mousedown", handleMouseDown);
|
|
15913
16425
|
return () => document.removeEventListener("mousedown", handleMouseDown);
|
|
15914
16426
|
}, []);
|
|
15915
|
-
|
|
16427
|
+
useEffect18(() => {
|
|
15916
16428
|
if (editingId && inputRef.current) {
|
|
15917
16429
|
inputRef.current.focus();
|
|
15918
16430
|
inputRef.current.select();
|
|
@@ -15946,7 +16458,7 @@ var CompactSessionMenu = ({
|
|
|
15946
16458
|
const handleNew = () => {
|
|
15947
16459
|
onNew();
|
|
15948
16460
|
};
|
|
15949
|
-
return /* @__PURE__ */
|
|
16461
|
+
return /* @__PURE__ */ jsxs27(
|
|
15950
16462
|
"div",
|
|
15951
16463
|
{
|
|
15952
16464
|
ref: menuRef,
|
|
@@ -15964,7 +16476,7 @@ var CompactSessionMenu = ({
|
|
|
15964
16476
|
flexDirection: "column"
|
|
15965
16477
|
},
|
|
15966
16478
|
children: [
|
|
15967
|
-
/* @__PURE__ */
|
|
16479
|
+
/* @__PURE__ */ jsxs27(
|
|
15968
16480
|
"button",
|
|
15969
16481
|
{
|
|
15970
16482
|
onClick: handleNew,
|
|
@@ -15984,12 +16496,12 @@ var CompactSessionMenu = ({
|
|
|
15984
16496
|
flexShrink: 0
|
|
15985
16497
|
},
|
|
15986
16498
|
children: [
|
|
15987
|
-
/* @__PURE__ */
|
|
16499
|
+
/* @__PURE__ */ jsx27(IconSvg, { name: "add-line", size: 16, color: "var(--chatllm-primary, #3584FA)" }),
|
|
15988
16500
|
"\uC0C8 \uB300\uD654"
|
|
15989
16501
|
]
|
|
15990
16502
|
}
|
|
15991
16503
|
),
|
|
15992
|
-
/* @__PURE__ */
|
|
16504
|
+
/* @__PURE__ */ jsx27(
|
|
15993
16505
|
"div",
|
|
15994
16506
|
{
|
|
15995
16507
|
className: "chatllm-scrollbar",
|
|
@@ -16000,7 +16512,7 @@ var CompactSessionMenu = ({
|
|
|
16000
16512
|
},
|
|
16001
16513
|
children: isLoading ? (
|
|
16002
16514
|
/** @Todo vibecode - 로딩 스켈레톤 (2개) */
|
|
16003
|
-
/* @__PURE__ */
|
|
16515
|
+
/* @__PURE__ */ jsx27("div", { style: { padding: "8px" }, children: [1, 2].map((i) => /* @__PURE__ */ jsx27(
|
|
16004
16516
|
"div",
|
|
16005
16517
|
{
|
|
16006
16518
|
className: "chatllm-skeleton-pulse",
|
|
@@ -16016,7 +16528,7 @@ var CompactSessionMenu = ({
|
|
|
16016
16528
|
)) })
|
|
16017
16529
|
) : sessions.length === 0 ? (
|
|
16018
16530
|
/** @Todo vibecode - 빈 상태 */
|
|
16019
|
-
/* @__PURE__ */
|
|
16531
|
+
/* @__PURE__ */ jsx27(
|
|
16020
16532
|
"div",
|
|
16021
16533
|
{
|
|
16022
16534
|
style: {
|
|
@@ -16028,9 +16540,9 @@ var CompactSessionMenu = ({
|
|
|
16028
16540
|
children: "\uB300\uD654 \uB0B4\uC5ED\uC774 \uC5C6\uC2B5\uB2C8\uB2E4"
|
|
16029
16541
|
}
|
|
16030
16542
|
)
|
|
16031
|
-
) : /* @__PURE__ */
|
|
16543
|
+
) : /* @__PURE__ */ jsx27("div", { style: { padding: "4px" }, children: sessions.map((session) => {
|
|
16032
16544
|
const isSelected = session.id === currentSessionId;
|
|
16033
|
-
return /* @__PURE__ */
|
|
16545
|
+
return /* @__PURE__ */ jsxs27(
|
|
16034
16546
|
"div",
|
|
16035
16547
|
{
|
|
16036
16548
|
onClick: () => handleSelect(session.id),
|
|
@@ -16055,7 +16567,7 @@ var CompactSessionMenu = ({
|
|
|
16055
16567
|
}
|
|
16056
16568
|
},
|
|
16057
16569
|
children: [
|
|
16058
|
-
/* @__PURE__ */
|
|
16570
|
+
/* @__PURE__ */ jsx27(
|
|
16059
16571
|
IconSvg,
|
|
16060
16572
|
{
|
|
16061
16573
|
name: "chat-1-line",
|
|
@@ -16063,7 +16575,7 @@ var CompactSessionMenu = ({
|
|
|
16063
16575
|
color: "var(--chatllm-text-muted, #94a3b8)"
|
|
16064
16576
|
}
|
|
16065
16577
|
),
|
|
16066
|
-
/* @__PURE__ */
|
|
16578
|
+
/* @__PURE__ */ jsx27("div", { style: { flex: 1, minWidth: 0 }, children: editingId === session.id ? /* @__PURE__ */ jsx27(
|
|
16067
16579
|
"input",
|
|
16068
16580
|
{
|
|
16069
16581
|
ref: inputRef,
|
|
@@ -16087,7 +16599,7 @@ var CompactSessionMenu = ({
|
|
|
16087
16599
|
fontFamily: "inherit"
|
|
16088
16600
|
}
|
|
16089
16601
|
}
|
|
16090
|
-
) : /* @__PURE__ */
|
|
16602
|
+
) : /* @__PURE__ */ jsx27(
|
|
16091
16603
|
"p",
|
|
16092
16604
|
{
|
|
16093
16605
|
style: {
|
|
@@ -16099,10 +16611,10 @@ var CompactSessionMenu = ({
|
|
|
16099
16611
|
whiteSpace: "nowrap",
|
|
16100
16612
|
margin: 0
|
|
16101
16613
|
},
|
|
16102
|
-
children: /* @__PURE__ */
|
|
16614
|
+
children: /* @__PURE__ */ jsx27(MarkdownRenderer, { content: session.title, inline: true })
|
|
16103
16615
|
}
|
|
16104
16616
|
) }),
|
|
16105
|
-
isSelected && editingId !== session.id && /* @__PURE__ */
|
|
16617
|
+
isSelected && editingId !== session.id && /* @__PURE__ */ jsxs27(
|
|
16106
16618
|
"div",
|
|
16107
16619
|
{
|
|
16108
16620
|
style: {
|
|
@@ -16111,7 +16623,7 @@ var CompactSessionMenu = ({
|
|
|
16111
16623
|
flexShrink: 0
|
|
16112
16624
|
},
|
|
16113
16625
|
children: [
|
|
16114
|
-
onRename && /* @__PURE__ */
|
|
16626
|
+
onRename && /* @__PURE__ */ jsx27(
|
|
16115
16627
|
"button",
|
|
16116
16628
|
{
|
|
16117
16629
|
onClick: (e) => handleStartEdit(session, e),
|
|
@@ -16126,10 +16638,10 @@ var CompactSessionMenu = ({
|
|
|
16126
16638
|
display: "flex",
|
|
16127
16639
|
alignItems: "center"
|
|
16128
16640
|
},
|
|
16129
|
-
children: /* @__PURE__ */
|
|
16641
|
+
children: /* @__PURE__ */ jsx27(IconSvg, { name: "pencil-line", size: 12 })
|
|
16130
16642
|
}
|
|
16131
16643
|
),
|
|
16132
|
-
/* @__PURE__ */
|
|
16644
|
+
/* @__PURE__ */ jsx27(
|
|
16133
16645
|
"button",
|
|
16134
16646
|
{
|
|
16135
16647
|
onClick: (e) => {
|
|
@@ -16147,7 +16659,7 @@ var CompactSessionMenu = ({
|
|
|
16147
16659
|
display: "flex",
|
|
16148
16660
|
alignItems: "center"
|
|
16149
16661
|
},
|
|
16150
|
-
children: /* @__PURE__ */
|
|
16662
|
+
children: /* @__PURE__ */ jsx27(IconSvg, { name: "delete-bin-line", size: 12 })
|
|
16151
16663
|
}
|
|
16152
16664
|
)
|
|
16153
16665
|
]
|
|
@@ -16166,7 +16678,7 @@ var CompactSessionMenu = ({
|
|
|
16166
16678
|
};
|
|
16167
16679
|
|
|
16168
16680
|
// src/react/components/floating/CompactChatView.tsx
|
|
16169
|
-
import { jsx as
|
|
16681
|
+
import { jsx as jsx28, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
16170
16682
|
var CompactChatView = ({
|
|
16171
16683
|
chatState,
|
|
16172
16684
|
actions = [],
|
|
@@ -16227,20 +16739,20 @@ var CompactChatView = ({
|
|
|
16227
16739
|
const handleChoiceClick = (choice) => {
|
|
16228
16740
|
setInput(choice.text);
|
|
16229
16741
|
};
|
|
16230
|
-
const [showSessionMenu, setShowSessionMenu] =
|
|
16231
|
-
const handleSessionSelect =
|
|
16742
|
+
const [showSessionMenu, setShowSessionMenu] = useState27(false);
|
|
16743
|
+
const handleSessionSelect = useCallback14((id) => {
|
|
16232
16744
|
selectSession(id);
|
|
16233
16745
|
setShowSessionMenu(false);
|
|
16234
16746
|
}, [selectSession]);
|
|
16235
|
-
const handleNewSession =
|
|
16747
|
+
const handleNewSession = useCallback14(() => {
|
|
16236
16748
|
newSession();
|
|
16237
16749
|
setShowSessionMenu(false);
|
|
16238
16750
|
}, [newSession]);
|
|
16239
|
-
const handleCloseMenu =
|
|
16751
|
+
const handleCloseMenu = useCallback14(() => {
|
|
16240
16752
|
setShowSessionMenu(false);
|
|
16241
16753
|
}, []);
|
|
16242
16754
|
const greeting = personalization?.userProfile?.nickname ? `${personalization.userProfile.nickname}\uB2D8, \uBB34\uC5C7\uC774\uB4E0 \uBB3C\uC5B4\uBCF4\uC138\uC694` : "\uBB34\uC5C7\uC774\uB4E0 \uBB3C\uC5B4\uBCF4\uC138\uC694";
|
|
16243
|
-
return /* @__PURE__ */
|
|
16755
|
+
return /* @__PURE__ */ jsxs28(
|
|
16244
16756
|
"div",
|
|
16245
16757
|
{
|
|
16246
16758
|
style: {
|
|
@@ -16251,7 +16763,7 @@ var CompactChatView = ({
|
|
|
16251
16763
|
overflow: "hidden"
|
|
16252
16764
|
},
|
|
16253
16765
|
children: [
|
|
16254
|
-
/* @__PURE__ */
|
|
16766
|
+
/* @__PURE__ */ jsxs28(
|
|
16255
16767
|
"div",
|
|
16256
16768
|
{
|
|
16257
16769
|
style: {
|
|
@@ -16266,7 +16778,7 @@ var CompactChatView = ({
|
|
|
16266
16778
|
height: 44
|
|
16267
16779
|
},
|
|
16268
16780
|
children: [
|
|
16269
|
-
/* @__PURE__ */
|
|
16781
|
+
/* @__PURE__ */ jsxs28(
|
|
16270
16782
|
"button",
|
|
16271
16783
|
{
|
|
16272
16784
|
onClick: () => setShowSessionMenu((prev) => !prev),
|
|
@@ -16283,7 +16795,7 @@ var CompactChatView = ({
|
|
|
16283
16795
|
fontFamily: "inherit"
|
|
16284
16796
|
},
|
|
16285
16797
|
children: [
|
|
16286
|
-
/* @__PURE__ */
|
|
16798
|
+
/* @__PURE__ */ jsx28(
|
|
16287
16799
|
"span",
|
|
16288
16800
|
{
|
|
16289
16801
|
style: {
|
|
@@ -16294,10 +16806,10 @@ var CompactChatView = ({
|
|
|
16294
16806
|
textOverflow: "ellipsis",
|
|
16295
16807
|
whiteSpace: "nowrap"
|
|
16296
16808
|
},
|
|
16297
|
-
children: /* @__PURE__ */
|
|
16809
|
+
children: /* @__PURE__ */ jsx28(MarkdownRenderer, { content: currentSession?.title || "AI \uCC44\uD305", inline: true })
|
|
16298
16810
|
}
|
|
16299
16811
|
),
|
|
16300
|
-
/* @__PURE__ */
|
|
16812
|
+
/* @__PURE__ */ jsx28(
|
|
16301
16813
|
IconSvg,
|
|
16302
16814
|
{
|
|
16303
16815
|
name: "arrow-down-s-line",
|
|
@@ -16309,7 +16821,7 @@ var CompactChatView = ({
|
|
|
16309
16821
|
}
|
|
16310
16822
|
),
|
|
16311
16823
|
renderHeaderExtra?.(),
|
|
16312
|
-
fullScreenPath && /* @__PURE__ */
|
|
16824
|
+
fullScreenPath && /* @__PURE__ */ jsxs28(
|
|
16313
16825
|
"a",
|
|
16314
16826
|
{
|
|
16315
16827
|
href: fullScreenPath,
|
|
@@ -16324,12 +16836,12 @@ var CompactChatView = ({
|
|
|
16324
16836
|
marginLeft: 8
|
|
16325
16837
|
},
|
|
16326
16838
|
children: [
|
|
16327
|
-
/* @__PURE__ */
|
|
16839
|
+
/* @__PURE__ */ jsx28(IconSvg, { name: "arrow-right-line", size: 14, color: "var(--chatllm-text-muted, #94a3b8)" }),
|
|
16328
16840
|
"\uC804\uCCB4 \uD654\uBA74"
|
|
16329
16841
|
]
|
|
16330
16842
|
}
|
|
16331
16843
|
),
|
|
16332
|
-
showSessionMenu && /* @__PURE__ */
|
|
16844
|
+
showSessionMenu && /* @__PURE__ */ jsx28(
|
|
16333
16845
|
CompactSessionMenu,
|
|
16334
16846
|
{
|
|
16335
16847
|
sessions,
|
|
@@ -16345,7 +16857,7 @@ var CompactChatView = ({
|
|
|
16345
16857
|
]
|
|
16346
16858
|
}
|
|
16347
16859
|
),
|
|
16348
|
-
/* @__PURE__ */
|
|
16860
|
+
/* @__PURE__ */ jsx28("div", { style: { flex: 1, minHeight: 0, display: "flex", flexDirection: "column", overflow: "hidden" }, children: messages.length === 0 ? /* @__PURE__ */ jsxs28(
|
|
16349
16861
|
"div",
|
|
16350
16862
|
{
|
|
16351
16863
|
style: {
|
|
@@ -16358,7 +16870,7 @@ var CompactChatView = ({
|
|
|
16358
16870
|
gap: "12px"
|
|
16359
16871
|
},
|
|
16360
16872
|
children: [
|
|
16361
|
-
/* @__PURE__ */
|
|
16873
|
+
/* @__PURE__ */ jsx28(
|
|
16362
16874
|
"p",
|
|
16363
16875
|
{
|
|
16364
16876
|
style: {
|
|
@@ -16371,7 +16883,7 @@ var CompactChatView = ({
|
|
|
16371
16883
|
children: greeting
|
|
16372
16884
|
}
|
|
16373
16885
|
),
|
|
16374
|
-
suggestedPrompts && suggestedPrompts.length > 0 && /* @__PURE__ */
|
|
16886
|
+
suggestedPrompts && suggestedPrompts.length > 0 && /* @__PURE__ */ jsx28(
|
|
16375
16887
|
"div",
|
|
16376
16888
|
{
|
|
16377
16889
|
style: {
|
|
@@ -16381,7 +16893,7 @@ var CompactChatView = ({
|
|
|
16381
16893
|
justifyContent: "center",
|
|
16382
16894
|
maxWidth: "100%"
|
|
16383
16895
|
},
|
|
16384
|
-
children: suggestedPrompts.slice(0, 4).map((sp) => /* @__PURE__ */
|
|
16896
|
+
children: suggestedPrompts.slice(0, 4).map((sp) => /* @__PURE__ */ jsxs28(
|
|
16385
16897
|
"button",
|
|
16386
16898
|
{
|
|
16387
16899
|
onClick: () => setInput(sp.prompt),
|
|
@@ -16401,7 +16913,7 @@ var CompactChatView = ({
|
|
|
16401
16913
|
whiteSpace: "nowrap"
|
|
16402
16914
|
},
|
|
16403
16915
|
children: [
|
|
16404
|
-
sp.icon && /* @__PURE__ */
|
|
16916
|
+
sp.icon && /* @__PURE__ */ jsx28(IconSvg, { name: sp.icon, size: 14, color: "var(--chatllm-text-muted)" }),
|
|
16405
16917
|
sp.label
|
|
16406
16918
|
]
|
|
16407
16919
|
},
|
|
@@ -16411,7 +16923,7 @@ var CompactChatView = ({
|
|
|
16411
16923
|
)
|
|
16412
16924
|
]
|
|
16413
16925
|
}
|
|
16414
|
-
) : /* @__PURE__ */
|
|
16926
|
+
) : /* @__PURE__ */ jsx28(
|
|
16415
16927
|
MessageList,
|
|
16416
16928
|
{
|
|
16417
16929
|
messages,
|
|
@@ -16436,11 +16948,11 @@ var CompactChatView = ({
|
|
|
16436
16948
|
onChecklistSkip: handleChecklistSkip,
|
|
16437
16949
|
activeSkillExecution,
|
|
16438
16950
|
compact: true,
|
|
16439
|
-
assistantIcon: /* @__PURE__ */
|
|
16951
|
+
assistantIcon: /* @__PURE__ */ jsx28(DevDiveAvatar, { size: 32 }),
|
|
16440
16952
|
renderMessage
|
|
16441
16953
|
}
|
|
16442
16954
|
) }),
|
|
16443
|
-
/* @__PURE__ */
|
|
16955
|
+
/* @__PURE__ */ jsx28("div", { style: { flex: "none", padding: "0 8px 8px 8px" }, children: /* @__PURE__ */ jsx28(
|
|
16444
16956
|
ChatInput,
|
|
16445
16957
|
{
|
|
16446
16958
|
value: input,
|
|
@@ -16473,7 +16985,7 @@ var CompactChatView = ({
|
|
|
16473
16985
|
};
|
|
16474
16986
|
|
|
16475
16987
|
// src/react/components/floating/ResizeHandles.tsx
|
|
16476
|
-
import { Fragment as Fragment11, jsx as
|
|
16988
|
+
import { Fragment as Fragment11, jsx as jsx29 } from "react/jsx-runtime";
|
|
16477
16989
|
var HANDLES = [
|
|
16478
16990
|
{ edge: "top", className: "chatllm-resize-handle chatllm-resize-handle--top" },
|
|
16479
16991
|
{ edge: "left", className: "chatllm-resize-handle chatllm-resize-handle--left" },
|
|
@@ -16486,7 +16998,7 @@ var ResizeHandles = ({
|
|
|
16486
16998
|
onPointerMove,
|
|
16487
16999
|
onPointerUp
|
|
16488
17000
|
}) => {
|
|
16489
|
-
return /* @__PURE__ */
|
|
17001
|
+
return /* @__PURE__ */ jsx29(Fragment11, { children: HANDLES.map(({ edge, className }) => /* @__PURE__ */ jsx29(
|
|
16490
17002
|
"div",
|
|
16491
17003
|
{
|
|
16492
17004
|
className,
|
|
@@ -16499,7 +17011,7 @@ var ResizeHandles = ({
|
|
|
16499
17011
|
};
|
|
16500
17012
|
|
|
16501
17013
|
// src/react/ChatFloatingWidget.tsx
|
|
16502
|
-
import { jsx as
|
|
17014
|
+
import { jsx as jsx30, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
16503
17015
|
injectBaseStyles();
|
|
16504
17016
|
injectFloatingStyles();
|
|
16505
17017
|
var ChatFloatingWidget = ({
|
|
@@ -16560,7 +17072,7 @@ var ChatFloatingWidget = ({
|
|
|
16560
17072
|
if (!notification) return null;
|
|
16561
17073
|
return typeof notification === "string" ? { text: notification } : notification;
|
|
16562
17074
|
}, [notification]);
|
|
16563
|
-
const handleFabClick =
|
|
17075
|
+
const handleFabClick = useCallback15(() => {
|
|
16564
17076
|
if (notifObj?.onClick) {
|
|
16565
17077
|
notifObj.onClick();
|
|
16566
17078
|
if (!isOpen) handleFabInteraction();
|
|
@@ -16578,7 +17090,7 @@ var ChatFloatingWidget = ({
|
|
|
16578
17090
|
const chatTab = {
|
|
16579
17091
|
key: "chat",
|
|
16580
17092
|
label: "\uCC44\uD305",
|
|
16581
|
-
icon: /* @__PURE__ */
|
|
17093
|
+
icon: /* @__PURE__ */ jsx30(IconSvg, { name: "chat-1-line", size: 16 })
|
|
16582
17094
|
};
|
|
16583
17095
|
const customTabs = tabs.map((t) => ({
|
|
16584
17096
|
key: t.key,
|
|
@@ -16588,9 +17100,9 @@ var ChatFloatingWidget = ({
|
|
|
16588
17100
|
}));
|
|
16589
17101
|
return [chatTab, ...customTabs];
|
|
16590
17102
|
}, [tabs]);
|
|
16591
|
-
const [unreadBadge, setUnreadBadge] =
|
|
16592
|
-
const seenMessageIdsRef =
|
|
16593
|
-
|
|
17103
|
+
const [unreadBadge, setUnreadBadge] = useState28(0);
|
|
17104
|
+
const seenMessageIdsRef = useRef17(new Set(chatState.messages.map((m) => m.id)));
|
|
17105
|
+
useEffect19(() => {
|
|
16594
17106
|
if (!isOpen) {
|
|
16595
17107
|
const newAssistant = chatState.messages.filter(
|
|
16596
17108
|
(m) => m.role === "assistant" && !seenMessageIdsRef.current.has(m.id)
|
|
@@ -16603,16 +17115,16 @@ var ChatFloatingWidget = ({
|
|
|
16603
17115
|
seenMessageIdsRef.current.add(m.id);
|
|
16604
17116
|
}
|
|
16605
17117
|
}, [chatState.messages, isOpen]);
|
|
16606
|
-
|
|
17118
|
+
useEffect19(() => {
|
|
16607
17119
|
if (isOpen) setUnreadBadge(0);
|
|
16608
17120
|
}, [isOpen]);
|
|
16609
17121
|
const totalBadge = useMemo7(() => {
|
|
16610
17122
|
return tabs.reduce((sum, t) => sum + (t.badge || 0), 0) + unreadBadge;
|
|
16611
17123
|
}, [tabs, unreadBadge]);
|
|
16612
17124
|
const isTalking = useMemo7(() => !!notification || chatState.isLoading, [notification, chatState.isLoading]);
|
|
16613
|
-
const prevLoadingRef =
|
|
16614
|
-
const [isComplete, setIsComplete] =
|
|
16615
|
-
|
|
17125
|
+
const prevLoadingRef = useRef17(chatState.isLoading);
|
|
17126
|
+
const [isComplete, setIsComplete] = useState28(false);
|
|
17127
|
+
useEffect19(() => {
|
|
16616
17128
|
const wasLoading = prevLoadingRef.current;
|
|
16617
17129
|
prevLoadingRef.current = chatState.isLoading;
|
|
16618
17130
|
if (!wasLoading || chatState.isLoading || chatState.messages.length === 0) return;
|
|
@@ -16620,8 +17132,8 @@ var ChatFloatingWidget = ({
|
|
|
16620
17132
|
const t = setTimeout(() => setIsComplete(false), 100);
|
|
16621
17133
|
return () => clearTimeout(t);
|
|
16622
17134
|
}, [chatState.isLoading, chatState.messages.length]);
|
|
16623
|
-
return /* @__PURE__ */
|
|
16624
|
-
/* @__PURE__ */
|
|
17135
|
+
return /* @__PURE__ */ jsxs29("div", { className: `chatllm-floating-widget ${className}`, children: [
|
|
17136
|
+
/* @__PURE__ */ jsx30(
|
|
16625
17137
|
FloatingFab,
|
|
16626
17138
|
{
|
|
16627
17139
|
onClick: handleFabClick,
|
|
@@ -16642,7 +17154,7 @@ var ChatFloatingWidget = ({
|
|
|
16642
17154
|
isComplete
|
|
16643
17155
|
}
|
|
16644
17156
|
),
|
|
16645
|
-
/* @__PURE__ */
|
|
17157
|
+
/* @__PURE__ */ jsxs29(
|
|
16646
17158
|
FloatingPanel,
|
|
16647
17159
|
{
|
|
16648
17160
|
isOpen,
|
|
@@ -16654,7 +17166,7 @@ var ChatFloatingWidget = ({
|
|
|
16654
17166
|
panelRef,
|
|
16655
17167
|
positionStyle: dragResize.panelPositionStyle,
|
|
16656
17168
|
isResizing: dragResize.isResizing,
|
|
16657
|
-
resizeHandles: !dragResize.isMobile && !disableDragResize ? /* @__PURE__ */
|
|
17169
|
+
resizeHandles: !dragResize.isMobile && !disableDragResize ? /* @__PURE__ */ jsx30(
|
|
16658
17170
|
ResizeHandles,
|
|
16659
17171
|
{
|
|
16660
17172
|
onPointerDown: dragResize.resizeHandlers.onPointerDown,
|
|
@@ -16663,7 +17175,7 @@ var ChatFloatingWidget = ({
|
|
|
16663
17175
|
}
|
|
16664
17176
|
) : null,
|
|
16665
17177
|
children: [
|
|
16666
|
-
/* @__PURE__ */
|
|
17178
|
+
/* @__PURE__ */ jsx30(
|
|
16667
17179
|
FloatingTabBar,
|
|
16668
17180
|
{
|
|
16669
17181
|
tabs: allTabs,
|
|
@@ -16671,8 +17183,8 @@ var ChatFloatingWidget = ({
|
|
|
16671
17183
|
onTabChange: setTab
|
|
16672
17184
|
}
|
|
16673
17185
|
),
|
|
16674
|
-
/* @__PURE__ */
|
|
16675
|
-
/* @__PURE__ */
|
|
17186
|
+
/* @__PURE__ */ jsxs29("div", { style: { flex: 1, position: "relative", overflow: "hidden", minHeight: 0 }, children: [
|
|
17187
|
+
/* @__PURE__ */ jsx30(
|
|
16676
17188
|
"div",
|
|
16677
17189
|
{
|
|
16678
17190
|
style: {
|
|
@@ -16686,7 +17198,7 @@ var ChatFloatingWidget = ({
|
|
|
16686
17198
|
bottom: 0,
|
|
16687
17199
|
overflow: "hidden"
|
|
16688
17200
|
},
|
|
16689
|
-
children: /* @__PURE__ */
|
|
17201
|
+
children: /* @__PURE__ */ jsx30(
|
|
16690
17202
|
CompactChatView,
|
|
16691
17203
|
{
|
|
16692
17204
|
chatState,
|
|
@@ -16702,7 +17214,7 @@ var ChatFloatingWidget = ({
|
|
|
16702
17214
|
)
|
|
16703
17215
|
}
|
|
16704
17216
|
),
|
|
16705
|
-
tabs.map((tab) => /* @__PURE__ */
|
|
17217
|
+
tabs.map((tab) => /* @__PURE__ */ jsx30(
|
|
16706
17218
|
"div",
|
|
16707
17219
|
{
|
|
16708
17220
|
style: {
|
|
@@ -16728,7 +17240,7 @@ var ChatFloatingWidget = ({
|
|
|
16728
17240
|
};
|
|
16729
17241
|
|
|
16730
17242
|
// src/react/hooks/useDeepResearch.ts
|
|
16731
|
-
import { useState as
|
|
17243
|
+
import { useState as useState29, useCallback as useCallback16, useRef as useRef18 } from "react";
|
|
16732
17244
|
var REPORT_GENERATION_PROMPT2 = `\uB2F9\uC2E0\uC740 \uB9AC\uC11C\uCE58 \uBCF4\uACE0\uC11C \uC791\uC131 \uC804\uBB38\uAC00\uC785\uB2C8\uB2E4.
|
|
16733
17245
|
|
|
16734
17246
|
<collected_sources>
|
|
@@ -16779,10 +17291,10 @@ var QUERY_ANALYSIS_PROMPT2 = `\uC0AC\uC6A9\uC790 \uC9C8\uBB38\uC744 \uBD84\uC11D
|
|
|
16779
17291
|
- JSON \uC678 \uB2E4\uB978 \uD14D\uC2A4\uD2B8 \uCD9C\uB825 \uAE08\uC9C0`;
|
|
16780
17292
|
var useDeepResearch = (options) => {
|
|
16781
17293
|
const { onWebSearch, onExtractContent, apiEndpoint, apiKey, model, provider } = options;
|
|
16782
|
-
const [isResearching, setIsResearching] =
|
|
16783
|
-
const [progress, setProgress] =
|
|
16784
|
-
const abortControllerRef =
|
|
16785
|
-
const callLLM2 =
|
|
17294
|
+
const [isResearching, setIsResearching] = useState29(false);
|
|
17295
|
+
const [progress, setProgress] = useState29(null);
|
|
17296
|
+
const abortControllerRef = useRef18(null);
|
|
17297
|
+
const callLLM2 = useCallback16(
|
|
16786
17298
|
async (prompt, stream = false) => {
|
|
16787
17299
|
const response = await fetch(apiEndpoint, {
|
|
16788
17300
|
method: "POST",
|
|
@@ -16809,7 +17321,7 @@ var useDeepResearch = (options) => {
|
|
|
16809
17321
|
},
|
|
16810
17322
|
[apiEndpoint, apiKey, model, provider]
|
|
16811
17323
|
);
|
|
16812
|
-
const analyzeQuery2 =
|
|
17324
|
+
const analyzeQuery2 = useCallback16(
|
|
16813
17325
|
async (query) => {
|
|
16814
17326
|
const prompt = QUERY_ANALYSIS_PROMPT2.replace("{question}", query);
|
|
16815
17327
|
const response = await callLLM2(prompt);
|
|
@@ -16828,7 +17340,7 @@ var useDeepResearch = (options) => {
|
|
|
16828
17340
|
},
|
|
16829
17341
|
[callLLM2]
|
|
16830
17342
|
);
|
|
16831
|
-
const runSubAgent2 =
|
|
17343
|
+
const runSubAgent2 = useCallback16(
|
|
16832
17344
|
async (topic, queries, agentId, updateProgress) => {
|
|
16833
17345
|
updateProgress({ status: "searching", searchCount: 0, resultsCount: 0 });
|
|
16834
17346
|
const allResults = [];
|
|
@@ -16867,7 +17379,7 @@ var useDeepResearch = (options) => {
|
|
|
16867
17379
|
},
|
|
16868
17380
|
[onWebSearch, onExtractContent]
|
|
16869
17381
|
);
|
|
16870
|
-
const generateReport2 =
|
|
17382
|
+
const generateReport2 = useCallback16(
|
|
16871
17383
|
async (query, results, onStreamContent) => {
|
|
16872
17384
|
const allSources = [];
|
|
16873
17385
|
const sourcesForPrompt = [];
|
|
@@ -16925,7 +17437,7 @@ var useDeepResearch = (options) => {
|
|
|
16925
17437
|
},
|
|
16926
17438
|
[callLLM2]
|
|
16927
17439
|
);
|
|
16928
|
-
const runDeepResearch =
|
|
17440
|
+
const runDeepResearch = useCallback16(
|
|
16929
17441
|
async (query, onStreamContent) => {
|
|
16930
17442
|
abortControllerRef.current = new AbortController();
|
|
16931
17443
|
setIsResearching(true);
|
|
@@ -17028,7 +17540,7 @@ var useDeepResearch = (options) => {
|
|
|
17028
17540
|
},
|
|
17029
17541
|
[analyzeQuery2, runSubAgent2, generateReport2]
|
|
17030
17542
|
);
|
|
17031
|
-
const stopResearch =
|
|
17543
|
+
const stopResearch = useCallback16(() => {
|
|
17032
17544
|
abortControllerRef.current?.abort();
|
|
17033
17545
|
setIsResearching(false);
|
|
17034
17546
|
setProgress(null);
|
|
@@ -17042,7 +17554,7 @@ var useDeepResearch = (options) => {
|
|
|
17042
17554
|
};
|
|
17043
17555
|
|
|
17044
17556
|
// src/react/components/EmptyState.tsx
|
|
17045
|
-
import { jsx as
|
|
17557
|
+
import { jsx as jsx31, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
17046
17558
|
var EmptyState = ({
|
|
17047
17559
|
greeting,
|
|
17048
17560
|
templates = [],
|
|
@@ -17060,7 +17572,7 @@ var EmptyState = ({
|
|
|
17060
17572
|
return iconMap[icon] || "sparkling-line";
|
|
17061
17573
|
};
|
|
17062
17574
|
const hasContent = actions.length > 0 || templates.length > 0;
|
|
17063
|
-
return /* @__PURE__ */
|
|
17575
|
+
return /* @__PURE__ */ jsxs30(
|
|
17064
17576
|
"div",
|
|
17065
17577
|
{
|
|
17066
17578
|
className: "chatllm-empty-state",
|
|
@@ -17075,7 +17587,7 @@ var EmptyState = ({
|
|
|
17075
17587
|
textAlign: "center"
|
|
17076
17588
|
},
|
|
17077
17589
|
children: [
|
|
17078
|
-
/* @__PURE__ */
|
|
17590
|
+
/* @__PURE__ */ jsx31(
|
|
17079
17591
|
"div",
|
|
17080
17592
|
{
|
|
17081
17593
|
className: "chatllm-sheet",
|
|
@@ -17089,10 +17601,10 @@ var EmptyState = ({
|
|
|
17089
17601
|
marginBottom: "32px",
|
|
17090
17602
|
color: "var(--chatllm-primary)"
|
|
17091
17603
|
},
|
|
17092
|
-
children: /* @__PURE__ */
|
|
17604
|
+
children: /* @__PURE__ */ jsx31(IconSvg, { name: "chat-1-line", size: 40 })
|
|
17093
17605
|
}
|
|
17094
17606
|
),
|
|
17095
|
-
/* @__PURE__ */
|
|
17607
|
+
/* @__PURE__ */ jsx31(
|
|
17096
17608
|
"h1",
|
|
17097
17609
|
{
|
|
17098
17610
|
style: {
|
|
@@ -17105,7 +17617,7 @@ var EmptyState = ({
|
|
|
17105
17617
|
children: "How can I help you today?"
|
|
17106
17618
|
}
|
|
17107
17619
|
),
|
|
17108
|
-
(actions.length > 0 || templates.length > 0) && /* @__PURE__ */
|
|
17620
|
+
(actions.length > 0 || templates.length > 0) && /* @__PURE__ */ jsxs30(
|
|
17109
17621
|
"div",
|
|
17110
17622
|
{
|
|
17111
17623
|
style: {
|
|
@@ -17117,7 +17629,7 @@ var EmptyState = ({
|
|
|
17117
17629
|
marginBottom: "48px"
|
|
17118
17630
|
},
|
|
17119
17631
|
children: [
|
|
17120
|
-
actions.map((action) => /* @__PURE__ */
|
|
17632
|
+
actions.map((action) => /* @__PURE__ */ jsxs30(
|
|
17121
17633
|
"button",
|
|
17122
17634
|
{
|
|
17123
17635
|
onClick: () => onActionSelect?.(action),
|
|
@@ -17131,7 +17643,7 @@ var EmptyState = ({
|
|
|
17131
17643
|
fontWeight: 500
|
|
17132
17644
|
},
|
|
17133
17645
|
children: [
|
|
17134
|
-
/* @__PURE__ */
|
|
17646
|
+
/* @__PURE__ */ jsx31(
|
|
17135
17647
|
IconSvg,
|
|
17136
17648
|
{
|
|
17137
17649
|
name: getActionIcon(action.icon),
|
|
@@ -17144,7 +17656,7 @@ var EmptyState = ({
|
|
|
17144
17656
|
},
|
|
17145
17657
|
action.id
|
|
17146
17658
|
)),
|
|
17147
|
-
templates.slice(0, 4).map((template) => /* @__PURE__ */
|
|
17659
|
+
templates.slice(0, 4).map((template) => /* @__PURE__ */ jsxs30(
|
|
17148
17660
|
"button",
|
|
17149
17661
|
{
|
|
17150
17662
|
onClick: () => onTemplateClick(template),
|
|
@@ -17158,7 +17670,7 @@ var EmptyState = ({
|
|
|
17158
17670
|
fontWeight: 500
|
|
17159
17671
|
},
|
|
17160
17672
|
children: [
|
|
17161
|
-
/* @__PURE__ */
|
|
17673
|
+
/* @__PURE__ */ jsx31(
|
|
17162
17674
|
IconSvg,
|
|
17163
17675
|
{
|
|
17164
17676
|
name: "sparkling-line",
|
|
@@ -17180,8 +17692,8 @@ var EmptyState = ({
|
|
|
17180
17692
|
};
|
|
17181
17693
|
|
|
17182
17694
|
// src/react/components/MemoryPanel.tsx
|
|
17183
|
-
import { useState as
|
|
17184
|
-
import { jsx as
|
|
17695
|
+
import { useState as useState30 } from "react";
|
|
17696
|
+
import { jsx as jsx32, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
17185
17697
|
var categoryLabels = {
|
|
17186
17698
|
fact: "\uC0AC\uC6A9\uC790 \uC815\uBCF4",
|
|
17187
17699
|
skill: "\uC804\uBB38 \uBD84\uC57C/\uAE30\uC220",
|
|
@@ -17200,8 +17712,8 @@ var MemoryPanel = ({
|
|
|
17200
17712
|
isOpen,
|
|
17201
17713
|
onToggle
|
|
17202
17714
|
}) => {
|
|
17203
|
-
const [expandedId, setExpandedId] =
|
|
17204
|
-
const [activeTab, setActiveTab] =
|
|
17715
|
+
const [expandedId, setExpandedId] = useState30(null);
|
|
17716
|
+
const [activeTab, setActiveTab] = useState30("all");
|
|
17205
17717
|
const filteredItems = activeTab === "all" ? items : items.filter((item) => item.category === activeTab);
|
|
17206
17718
|
const formatDate = (timestamp) => {
|
|
17207
17719
|
const date = new Date(timestamp);
|
|
@@ -17213,7 +17725,7 @@ var MemoryPanel = ({
|
|
|
17213
17725
|
});
|
|
17214
17726
|
};
|
|
17215
17727
|
if (!isOpen) {
|
|
17216
|
-
return /* @__PURE__ */
|
|
17728
|
+
return /* @__PURE__ */ jsx32(
|
|
17217
17729
|
"button",
|
|
17218
17730
|
{
|
|
17219
17731
|
onClick: onToggle,
|
|
@@ -17233,11 +17745,11 @@ var MemoryPanel = ({
|
|
|
17233
17745
|
justifyContent: "center",
|
|
17234
17746
|
zIndex: 100
|
|
17235
17747
|
},
|
|
17236
|
-
children: /* @__PURE__ */
|
|
17748
|
+
children: /* @__PURE__ */ jsx32(IconSvg, { name: "robot-line", size: 24, color: "#ffffff" })
|
|
17237
17749
|
}
|
|
17238
17750
|
);
|
|
17239
17751
|
}
|
|
17240
|
-
return /* @__PURE__ */
|
|
17752
|
+
return /* @__PURE__ */ jsxs31(
|
|
17241
17753
|
"div",
|
|
17242
17754
|
{
|
|
17243
17755
|
className: "chatllm-memory-panel",
|
|
@@ -17257,7 +17769,7 @@ var MemoryPanel = ({
|
|
|
17257
17769
|
zIndex: 100
|
|
17258
17770
|
},
|
|
17259
17771
|
children: [
|
|
17260
|
-
/* @__PURE__ */
|
|
17772
|
+
/* @__PURE__ */ jsxs31(
|
|
17261
17773
|
"div",
|
|
17262
17774
|
{
|
|
17263
17775
|
style: {
|
|
@@ -17268,8 +17780,8 @@ var MemoryPanel = ({
|
|
|
17268
17780
|
borderBottom: "1px solid var(--chatllm-border, #e5e7eb)"
|
|
17269
17781
|
},
|
|
17270
17782
|
children: [
|
|
17271
|
-
/* @__PURE__ */
|
|
17272
|
-
/* @__PURE__ */
|
|
17783
|
+
/* @__PURE__ */ jsxs31("div", { style: { display: "flex", alignItems: "center", gap: "10px" }, children: [
|
|
17784
|
+
/* @__PURE__ */ jsx32(
|
|
17273
17785
|
"div",
|
|
17274
17786
|
{
|
|
17275
17787
|
style: {
|
|
@@ -17281,19 +17793,19 @@ var MemoryPanel = ({
|
|
|
17281
17793
|
alignItems: "center",
|
|
17282
17794
|
justifyContent: "center"
|
|
17283
17795
|
},
|
|
17284
|
-
children: /* @__PURE__ */
|
|
17796
|
+
children: /* @__PURE__ */ jsx32(IconSvg, { name: "robot-line", size: 18, color: "var(--chatllm-primary, #3584FA)" })
|
|
17285
17797
|
}
|
|
17286
17798
|
),
|
|
17287
|
-
/* @__PURE__ */
|
|
17288
|
-
/* @__PURE__ */
|
|
17289
|
-
/* @__PURE__ */
|
|
17799
|
+
/* @__PURE__ */ jsxs31("div", { children: [
|
|
17800
|
+
/* @__PURE__ */ jsx32("div", { style: { fontSize: "15px", fontWeight: 600, color: "var(--chatllm-text, #1f2937)" }, children: "AI \uBA54\uBAA8\uB9AC" }),
|
|
17801
|
+
/* @__PURE__ */ jsxs31("div", { style: { fontSize: "12px", color: "var(--chatllm-text-muted, #9ca3af)" }, children: [
|
|
17290
17802
|
items.length,
|
|
17291
17803
|
"\uAC1C \uD56D\uBAA9"
|
|
17292
17804
|
] })
|
|
17293
17805
|
] })
|
|
17294
17806
|
] }),
|
|
17295
|
-
/* @__PURE__ */
|
|
17296
|
-
onClearAll && items.length > 0 && /* @__PURE__ */
|
|
17807
|
+
/* @__PURE__ */ jsxs31("div", { style: { display: "flex", gap: "4px" }, children: [
|
|
17808
|
+
onClearAll && items.length > 0 && /* @__PURE__ */ jsx32(
|
|
17297
17809
|
"button",
|
|
17298
17810
|
{
|
|
17299
17811
|
onClick: onClearAll,
|
|
@@ -17305,10 +17817,10 @@ var MemoryPanel = ({
|
|
|
17305
17817
|
cursor: "pointer"
|
|
17306
17818
|
},
|
|
17307
17819
|
title: "\uC804\uCCB4 \uC0AD\uC81C",
|
|
17308
|
-
children: /* @__PURE__ */
|
|
17820
|
+
children: /* @__PURE__ */ jsx32(IconSvg, { name: "delete-bin-line", size: 18, color: "var(--chatllm-text-muted, #9ca3af)" })
|
|
17309
17821
|
}
|
|
17310
17822
|
),
|
|
17311
|
-
/* @__PURE__ */
|
|
17823
|
+
/* @__PURE__ */ jsx32(
|
|
17312
17824
|
"button",
|
|
17313
17825
|
{
|
|
17314
17826
|
onClick: onToggle,
|
|
@@ -17319,14 +17831,14 @@ var MemoryPanel = ({
|
|
|
17319
17831
|
borderRadius: "8px",
|
|
17320
17832
|
cursor: "pointer"
|
|
17321
17833
|
},
|
|
17322
|
-
children: /* @__PURE__ */
|
|
17834
|
+
children: /* @__PURE__ */ jsx32(IconSvg, { name: "close-line", size: 18, color: "var(--chatllm-text-muted, #9ca3af)" })
|
|
17323
17835
|
}
|
|
17324
17836
|
)
|
|
17325
17837
|
] })
|
|
17326
17838
|
]
|
|
17327
17839
|
}
|
|
17328
17840
|
),
|
|
17329
|
-
/* @__PURE__ */
|
|
17841
|
+
/* @__PURE__ */ jsx32(
|
|
17330
17842
|
"div",
|
|
17331
17843
|
{
|
|
17332
17844
|
style: {
|
|
@@ -17336,7 +17848,7 @@ var MemoryPanel = ({
|
|
|
17336
17848
|
borderBottom: "1px solid var(--chatllm-border-light, #f3f4f6)",
|
|
17337
17849
|
overflowX: "auto"
|
|
17338
17850
|
},
|
|
17339
|
-
children: ["all", "fact", "skill", "preference"].map((tab) => /* @__PURE__ */
|
|
17851
|
+
children: ["all", "fact", "skill", "preference"].map((tab) => /* @__PURE__ */ jsx32(
|
|
17340
17852
|
"button",
|
|
17341
17853
|
{
|
|
17342
17854
|
onClick: () => setActiveTab(tab),
|
|
@@ -17357,8 +17869,8 @@ var MemoryPanel = ({
|
|
|
17357
17869
|
))
|
|
17358
17870
|
}
|
|
17359
17871
|
),
|
|
17360
|
-
/* @__PURE__ */
|
|
17361
|
-
contextSummary && activeTab === "all" && /* @__PURE__ */
|
|
17872
|
+
/* @__PURE__ */ jsxs31("div", { style: { flex: 1, overflow: "auto", padding: "12px" }, children: [
|
|
17873
|
+
contextSummary && activeTab === "all" && /* @__PURE__ */ jsxs31(
|
|
17362
17874
|
"div",
|
|
17363
17875
|
{
|
|
17364
17876
|
style: {
|
|
@@ -17369,7 +17881,7 @@ var MemoryPanel = ({
|
|
|
17369
17881
|
borderLeft: "3px solid var(--chatllm-primary, #3584FA)"
|
|
17370
17882
|
},
|
|
17371
17883
|
children: [
|
|
17372
|
-
/* @__PURE__ */
|
|
17884
|
+
/* @__PURE__ */ jsxs31(
|
|
17373
17885
|
"div",
|
|
17374
17886
|
{
|
|
17375
17887
|
style: {
|
|
@@ -17379,12 +17891,12 @@ var MemoryPanel = ({
|
|
|
17379
17891
|
marginBottom: "8px"
|
|
17380
17892
|
},
|
|
17381
17893
|
children: [
|
|
17382
|
-
/* @__PURE__ */
|
|
17383
|
-
/* @__PURE__ */
|
|
17894
|
+
/* @__PURE__ */ jsx32(IconSvg, { name: "file-text-line", size: 14, color: "var(--chatllm-primary, #3584FA)" }),
|
|
17895
|
+
/* @__PURE__ */ jsx32("span", { style: { fontSize: "12px", fontWeight: 500, color: "var(--chatllm-primary, #3584FA)" }, children: "\uB300\uD654 \uC694\uC57D" })
|
|
17384
17896
|
]
|
|
17385
17897
|
}
|
|
17386
17898
|
),
|
|
17387
|
-
/* @__PURE__ */
|
|
17899
|
+
/* @__PURE__ */ jsx32(
|
|
17388
17900
|
"p",
|
|
17389
17901
|
{
|
|
17390
17902
|
style: {
|
|
@@ -17399,7 +17911,7 @@ var MemoryPanel = ({
|
|
|
17399
17911
|
]
|
|
17400
17912
|
}
|
|
17401
17913
|
),
|
|
17402
|
-
filteredItems.length === 0 ? /* @__PURE__ */
|
|
17914
|
+
filteredItems.length === 0 ? /* @__PURE__ */ jsxs31(
|
|
17403
17915
|
"div",
|
|
17404
17916
|
{
|
|
17405
17917
|
style: {
|
|
@@ -17408,11 +17920,11 @@ var MemoryPanel = ({
|
|
|
17408
17920
|
color: "var(--chatllm-text-muted, #9ca3af)"
|
|
17409
17921
|
},
|
|
17410
17922
|
children: [
|
|
17411
|
-
/* @__PURE__ */
|
|
17412
|
-
/* @__PURE__ */
|
|
17923
|
+
/* @__PURE__ */ jsx32(IconSvg, { name: "robot-line", size: 32, color: "var(--chatllm-text-muted, #d1d5db)" }),
|
|
17924
|
+
/* @__PURE__ */ jsx32("p", { style: { fontSize: "14px", marginTop: "12px" }, children: "\uC800\uC7A5\uB41C \uBA54\uBAA8\uB9AC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4" })
|
|
17413
17925
|
]
|
|
17414
17926
|
}
|
|
17415
|
-
) : /* @__PURE__ */
|
|
17927
|
+
) : /* @__PURE__ */ jsx32("div", { style: { display: "flex", flexDirection: "column", gap: "8px" }, children: filteredItems.map((item) => /* @__PURE__ */ jsxs31(
|
|
17416
17928
|
"div",
|
|
17417
17929
|
{
|
|
17418
17930
|
style: {
|
|
@@ -17425,10 +17937,10 @@ var MemoryPanel = ({
|
|
|
17425
17937
|
},
|
|
17426
17938
|
onClick: () => setExpandedId(expandedId === item.id ? null : item.id),
|
|
17427
17939
|
children: [
|
|
17428
|
-
/* @__PURE__ */
|
|
17429
|
-
/* @__PURE__ */
|
|
17430
|
-
/* @__PURE__ */
|
|
17431
|
-
item.category && /* @__PURE__ */
|
|
17940
|
+
/* @__PURE__ */ jsxs31("div", { style: { display: "flex", alignItems: "flex-start", justifyContent: "space-between" }, children: [
|
|
17941
|
+
/* @__PURE__ */ jsxs31("div", { style: { flex: 1, minWidth: 0 }, children: [
|
|
17942
|
+
/* @__PURE__ */ jsxs31("div", { style: { display: "flex", alignItems: "center", gap: "8px", marginBottom: "4px" }, children: [
|
|
17943
|
+
item.category && /* @__PURE__ */ jsx32(
|
|
17432
17944
|
"span",
|
|
17433
17945
|
{
|
|
17434
17946
|
style: {
|
|
@@ -17442,9 +17954,9 @@ var MemoryPanel = ({
|
|
|
17442
17954
|
children: categoryLabels[item.category]
|
|
17443
17955
|
}
|
|
17444
17956
|
),
|
|
17445
|
-
/* @__PURE__ */
|
|
17957
|
+
/* @__PURE__ */ jsx32("span", { style: { fontSize: "11px", color: "var(--chatllm-text-muted, #9ca3af)" }, children: formatDate(item.timestamp) })
|
|
17446
17958
|
] }),
|
|
17447
|
-
/* @__PURE__ */
|
|
17959
|
+
/* @__PURE__ */ jsx32(
|
|
17448
17960
|
"div",
|
|
17449
17961
|
{
|
|
17450
17962
|
style: {
|
|
@@ -17456,8 +17968,8 @@ var MemoryPanel = ({
|
|
|
17456
17968
|
}
|
|
17457
17969
|
)
|
|
17458
17970
|
] }),
|
|
17459
|
-
/* @__PURE__ */
|
|
17460
|
-
onDelete && /* @__PURE__ */
|
|
17971
|
+
/* @__PURE__ */ jsxs31("div", { style: { display: "flex", alignItems: "center", gap: "4px" }, children: [
|
|
17972
|
+
onDelete && /* @__PURE__ */ jsx32(
|
|
17461
17973
|
"button",
|
|
17462
17974
|
{
|
|
17463
17975
|
onClick: (e) => {
|
|
@@ -17472,10 +17984,10 @@ var MemoryPanel = ({
|
|
|
17472
17984
|
cursor: "pointer",
|
|
17473
17985
|
opacity: 0.5
|
|
17474
17986
|
},
|
|
17475
|
-
children: /* @__PURE__ */
|
|
17987
|
+
children: /* @__PURE__ */ jsx32(IconSvg, { name: "delete-bin-line", size: 14, color: "var(--chatllm-text-muted, #9ca3af)" })
|
|
17476
17988
|
}
|
|
17477
17989
|
),
|
|
17478
|
-
/* @__PURE__ */
|
|
17990
|
+
/* @__PURE__ */ jsx32(
|
|
17479
17991
|
IconSvg,
|
|
17480
17992
|
{
|
|
17481
17993
|
name: expandedId === item.id ? "arrow-up-s-line" : "arrow-down-s-line",
|
|
@@ -17485,7 +17997,7 @@ var MemoryPanel = ({
|
|
|
17485
17997
|
)
|
|
17486
17998
|
] })
|
|
17487
17999
|
] }),
|
|
17488
|
-
expandedId === item.id && /* @__PURE__ */
|
|
18000
|
+
expandedId === item.id && /* @__PURE__ */ jsx32(
|
|
17489
18001
|
"div",
|
|
17490
18002
|
{
|
|
17491
18003
|
style: {
|
|
@@ -17493,7 +18005,7 @@ var MemoryPanel = ({
|
|
|
17493
18005
|
paddingTop: "12px",
|
|
17494
18006
|
borderTop: "1px solid var(--chatllm-border-light, #f3f4f6)"
|
|
17495
18007
|
},
|
|
17496
|
-
children: /* @__PURE__ */
|
|
18008
|
+
children: /* @__PURE__ */ jsx32(
|
|
17497
18009
|
"p",
|
|
17498
18010
|
{
|
|
17499
18011
|
style: {
|
|
@@ -17518,6 +18030,7 @@ var MemoryPanel = ({
|
|
|
17518
18030
|
);
|
|
17519
18031
|
};
|
|
17520
18032
|
export {
|
|
18033
|
+
ArtifactCard,
|
|
17521
18034
|
ChatFloatingWidget,
|
|
17522
18035
|
ChatHeader,
|
|
17523
18036
|
ChatInput,
|