pulls.review 0.3.1 → 0.3.2
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/README.md +1 -1
- package/dist/client/assets/ActionButton-wEgApzce.js +1 -0
- package/dist/client/assets/ActionIconButton-wh9iuTi4.js +1 -0
- package/dist/client/assets/{ChatMessage-Ccffh_8Z.js → ChatMessage-wZOblr2O.js} +23 -23
- package/dist/client/assets/ChatWidget-Dbic6F6V.js +1 -0
- package/dist/client/assets/DisplayFileIcon-DffhOXN6.js +151 -0
- package/dist/client/assets/GithubAvatar-eLlc5vap.js +1 -0
- package/dist/client/assets/LandingHero-Bb_CGwOP.js +1 -0
- package/dist/client/assets/LocalAgentSettings-CWvSCuNr.js +1 -0
- package/dist/client/assets/ModelPicker-CLoBWotf.js +3 -0
- package/dist/client/assets/SelectViewport-Dt28PIGK.js +1 -0
- package/dist/client/assets/_repo_-BIF9MuRW.js +22 -0
- package/dist/client/assets/analyze-B3YV6_zK.js +1 -0
- package/dist/client/assets/{core-messages-ClW97ZVa.js → core-messages-E0LWb5xA.js} +1 -1
- package/dist/client/assets/de-BfUc2exP.js +1 -0
- package/dist/client/assets/{diagnostics-wATZy2jc.js → diagnostics-DundJi2s.js} +1 -1
- package/dist/client/assets/diff-BwixkBTz.js +1 -0
- package/dist/client/assets/{diff-Cx43r-a6.js → diff-Coo81SbJ.js} +3 -3
- package/dist/client/assets/diffs-store-BPvgHGVY.js +1431 -0
- package/dist/client/assets/en-OkC_9BLh.js +1 -0
- package/dist/client/assets/es-DuVRv3jP.js +1 -0
- package/dist/client/assets/fr-BI5_M_ty.js +1 -0
- package/dist/client/assets/glimmer-js-BheR6Tf0.js +1 -0
- package/dist/client/assets/glimmer-ts-B3Q3-uij.js +1 -0
- package/dist/client/assets/handlebars-qjPKy-PP.js +1 -0
- package/dist/client/assets/i18n-DtZTpAlH.js +2 -0
- package/dist/client/assets/id-BU9INgNZ.js +1 -0
- package/dist/client/assets/{index-KDAJXf4E.js → index-Buksdj5x.js} +2 -2
- package/dist/client/assets/{index-De-UtOit.css → index-m8kW8Q0V.css} +1 -1
- package/dist/client/assets/{install-D-S32JY7.js → install-BrSGg9K8.js} +3 -3
- package/dist/client/assets/it-C2TUiK_A.js +1 -0
- package/dist/client/assets/ja-BQDWzjgo.js +1 -0
- package/dist/client/assets/ko-Ca7kDPia.js +1 -0
- package/dist/client/assets/{llm-Le5CPsNn.js → llm-5e9k-gOP.js} +1 -1
- package/dist/client/assets/llm-store-1j45N-6d.js +1 -0
- package/dist/client/assets/local-agents-0SHBuj0A.js +1 -0
- package/dist/client/assets/{pages-ByEfDjFa.js → pages-hDJHVoGR.js} +1 -1
- package/dist/client/assets/pages-local-0BoMyVi4.js +1 -0
- package/dist/client/assets/pages-web-QiNoFNlt.js +21 -0
- package/dist/client/assets/{portalTarget-DQg8GgWm.js → portalTarget-I9JDQCD2.js} +1 -1
- package/dist/client/assets/pt-BR-DcjGEP2y.js +1 -0
- package/dist/client/assets/{rpc-backends-DYtuJyeF.js → rpc-backends-arDnFRtp.js} +1 -1
- package/dist/client/assets/ru-DhCHBcLb.js +1 -0
- package/dist/client/assets/{ruby-CfFGiaYl.js → ruby-CaMjWH7T.js} +1 -1
- package/dist/client/assets/runtime-dom.esm-bundler-DL194Z-s.js +2 -0
- package/dist/client/assets/upload-Bi-0MPhd.js +1 -0
- package/dist/client/assets/useDocumentTitle-DSsMzDvH.js +92 -0
- package/dist/client/assets/useNonce-DujRSGP5.js +1 -0
- package/dist/client/assets/useTypeahead-CV0JPPYe.js +1 -0
- package/dist/client/assets/utils-bzkWQhBP.js +1 -0
- package/dist/client/assets/vue-i18n-B4RRzKT-.js +5 -0
- package/dist/client/assets/zh-CN-DKqrk-nJ.js +1 -0
- package/dist/client/assets/zh-TW-CXhwUL4C.js +1 -0
- package/dist/client/index.html +7 -7
- package/dist/{devframe-DH2vpasJ.mjs → devframe-Z3sgjlMJ.mjs} +153 -6
- package/dist/devframe.mjs +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +2 -2
- package/dist/client/assets/ActionButton-V4dY2wPS.js +0 -1
- package/dist/client/assets/ActionIconButton-4b5xelMn.js +0 -1
- package/dist/client/assets/ChatWidget-BFjNWi3R.js +0 -1
- package/dist/client/assets/DisplayFileIcon-DWj5Zxib.js +0 -151
- package/dist/client/assets/GithubAvatar-DGJrpCsX.js +0 -1
- package/dist/client/assets/LandingHero-DWdx6_8g.js +0 -1
- package/dist/client/assets/LocalAgentSettings-COjAszEL.js +0 -1
- package/dist/client/assets/ModelPicker-CDTiUMZ3.js +0 -3
- package/dist/client/assets/SelectViewport-DF4P4Akh.js +0 -1
- package/dist/client/assets/_repo_-D3lApLQL.js +0 -22
- package/dist/client/assets/analyze-BgWIIbl3.js +0 -1
- package/dist/client/assets/de-BoIOg_UW.js +0 -1
- package/dist/client/assets/diff-CNRGXNmw.js +0 -1
- package/dist/client/assets/diffs-store-D3BzIMVi.js +0 -1431
- package/dist/client/assets/en-CbWYrCM5.js +0 -1
- package/dist/client/assets/es-CqEudTln.js +0 -1
- package/dist/client/assets/fr-qiQQ-4AO.js +0 -1
- package/dist/client/assets/i18n-Cx8anq4V.js +0 -2
- package/dist/client/assets/id-BkDzu8gq.js +0 -1
- package/dist/client/assets/it-tZZZbUKN.js +0 -1
- package/dist/client/assets/ja-kGPK4Fmt.js +0 -1
- package/dist/client/assets/ko-CULiae40.js +0 -1
- package/dist/client/assets/llm-store-CzMnTJNa.js +0 -1
- package/dist/client/assets/local-agents-BQLn-Ppw.js +0 -1
- package/dist/client/assets/pages-local-CVPpEWZ_.js +0 -1
- package/dist/client/assets/pages-web-BLxMupU5.js +0 -21
- package/dist/client/assets/pt-BR-BcwoZLSs.js +0 -1
- package/dist/client/assets/ru-DOordgLF.js +0 -1
- package/dist/client/assets/runtime-dom.esm-bundler-Du_ZCcVN.js +0 -2
- package/dist/client/assets/upload-DRO7bkBV.js +0 -1
- package/dist/client/assets/useDocumentTitle-BQJCa6Lm.js +0 -92
- package/dist/client/assets/useNonce-CwUrgryd.js +0 -1
- package/dist/client/assets/vue-i18n-CGHHpbTP.js +0 -5
- package/dist/client/assets/zh-CN-CmTqGY9s.js +0 -1
- package/dist/client/assets/zh-TW-DKGtbJQy.js +0 -1
|
@@ -18,7 +18,7 @@ import { githubTokenFromEnv } from "@pulls.review/core/env";
|
|
|
18
18
|
import fsDriver from "unstorage/drivers/fs";
|
|
19
19
|
//#region package.json
|
|
20
20
|
var name = "pulls.review";
|
|
21
|
-
var version = "0.3.
|
|
21
|
+
var version = "0.3.2";
|
|
22
22
|
//#endregion
|
|
23
23
|
//#region src/agents/run.ts
|
|
24
24
|
var AgentRunError = class extends Error {
|
|
@@ -476,7 +476,7 @@ const Content = v.variant("type", [
|
|
|
476
476
|
is_error: v.optional(v.boolean())
|
|
477
477
|
})
|
|
478
478
|
]);
|
|
479
|
-
const Line$
|
|
479
|
+
const Line$2 = v.variant("type", [
|
|
480
480
|
v.object({
|
|
481
481
|
type: v.literal("system"),
|
|
482
482
|
subtype: v.string(),
|
|
@@ -507,7 +507,7 @@ function textOf$1(content) {
|
|
|
507
507
|
return (content ?? []).map((part) => typeof part.text === "string" ? part.text : "").join("");
|
|
508
508
|
}
|
|
509
509
|
/** Claude validates the answer itself against the grouping schema, so `final.structured` is already parsed. */
|
|
510
|
-
function args$
|
|
510
|
+
function args$3({ system, model, resume }) {
|
|
511
511
|
const list = [
|
|
512
512
|
"-p",
|
|
513
513
|
"--output-format",
|
|
@@ -573,7 +573,7 @@ const claude = {
|
|
|
573
573
|
async *run(input) {
|
|
574
574
|
let model = input.model ?? "claude";
|
|
575
575
|
const toolNames = /* @__PURE__ */ new Map();
|
|
576
|
-
for await (const item of spawnJsonLines("claude", args$
|
|
576
|
+
for await (const item of spawnJsonLines("claude", args$3(input), {
|
|
577
577
|
cwd: input.cwd,
|
|
578
578
|
signal: input.signal,
|
|
579
579
|
stdin: input.prompt
|
|
@@ -586,7 +586,7 @@ const claude = {
|
|
|
586
586
|
};
|
|
587
587
|
return;
|
|
588
588
|
}
|
|
589
|
-
const parsed = v.safeParse(Line$
|
|
589
|
+
const parsed = v.safeParse(Line$2, item.line);
|
|
590
590
|
if (!parsed.success) continue;
|
|
591
591
|
for (const event of mapLine(parsed.output, model, toolNames)) {
|
|
592
592
|
if (event.kind === "session" && event.model) model = event.model;
|
|
@@ -596,6 +596,152 @@ const claude = {
|
|
|
596
596
|
}
|
|
597
597
|
};
|
|
598
598
|
//#endregion
|
|
599
|
+
//#region src/agents/codex.ts
|
|
600
|
+
const Item = v.variant("type", [
|
|
601
|
+
v.object({
|
|
602
|
+
type: v.literal("agent_message"),
|
|
603
|
+
id: v.string(),
|
|
604
|
+
text: v.string()
|
|
605
|
+
}),
|
|
606
|
+
v.object({
|
|
607
|
+
type: v.literal("reasoning"),
|
|
608
|
+
id: v.string(),
|
|
609
|
+
text: v.string()
|
|
610
|
+
}),
|
|
611
|
+
v.object({
|
|
612
|
+
type: v.literal("command_execution"),
|
|
613
|
+
id: v.string(),
|
|
614
|
+
command: v.string(),
|
|
615
|
+
aggregated_output: v.string(),
|
|
616
|
+
exit_code: v.nullable(v.number()),
|
|
617
|
+
status: v.string()
|
|
618
|
+
})
|
|
619
|
+
]);
|
|
620
|
+
const Line$1 = v.variant("type", [
|
|
621
|
+
v.object({
|
|
622
|
+
type: v.literal("thread.started"),
|
|
623
|
+
thread_id: v.string()
|
|
624
|
+
}),
|
|
625
|
+
v.object({
|
|
626
|
+
type: v.literal("item.started"),
|
|
627
|
+
item: Item
|
|
628
|
+
}),
|
|
629
|
+
v.object({
|
|
630
|
+
type: v.literal("item.completed"),
|
|
631
|
+
item: Item
|
|
632
|
+
}),
|
|
633
|
+
v.object({ type: v.literal("turn.completed") }),
|
|
634
|
+
v.object({
|
|
635
|
+
type: v.literal("turn.failed"),
|
|
636
|
+
error: v.object({ message: v.string() })
|
|
637
|
+
}),
|
|
638
|
+
v.object({
|
|
639
|
+
type: v.literal("error"),
|
|
640
|
+
message: v.string()
|
|
641
|
+
})
|
|
642
|
+
]);
|
|
643
|
+
function args$2({ model, resume }) {
|
|
644
|
+
const list = [
|
|
645
|
+
"exec",
|
|
646
|
+
"--json",
|
|
647
|
+
"--sandbox",
|
|
648
|
+
"read-only",
|
|
649
|
+
"-c",
|
|
650
|
+
"approval_policy=\"never\"",
|
|
651
|
+
"--skip-git-repo-check"
|
|
652
|
+
];
|
|
653
|
+
if (model) list.push("--model", model);
|
|
654
|
+
if (resume) list.push("resume", resume);
|
|
655
|
+
list.push("-");
|
|
656
|
+
return list;
|
|
657
|
+
}
|
|
658
|
+
function itemEvents(line, state) {
|
|
659
|
+
const item = line.item;
|
|
660
|
+
if (item.type !== "command_execution") {
|
|
661
|
+
if (line.type !== "item.completed") return [];
|
|
662
|
+
if (item.type === "agent_message") state.lastText = item.text;
|
|
663
|
+
return [{
|
|
664
|
+
kind: "message",
|
|
665
|
+
message: assistantMessage("codex", state.model, [{
|
|
666
|
+
type: "text",
|
|
667
|
+
text: item.text
|
|
668
|
+
}])
|
|
669
|
+
}];
|
|
670
|
+
}
|
|
671
|
+
const events = [];
|
|
672
|
+
if (!state.commands.has(item.id)) {
|
|
673
|
+
state.commands.add(item.id);
|
|
674
|
+
events.push({
|
|
675
|
+
kind: "message",
|
|
676
|
+
message: assistantMessage("codex", state.model, [toolCall(item.id, "shell", { command: item.command })])
|
|
677
|
+
});
|
|
678
|
+
}
|
|
679
|
+
if (line.type === "item.completed") events.push({
|
|
680
|
+
kind: "message",
|
|
681
|
+
message: toolResultMessage(item.id, "shell", item.aggregated_output, item.status === "failed" || item.exit_code !== null && item.exit_code !== 0)
|
|
682
|
+
});
|
|
683
|
+
return events;
|
|
684
|
+
}
|
|
685
|
+
function lineEvents$1(line, state, model) {
|
|
686
|
+
switch (line.type) {
|
|
687
|
+
case "thread.started": return [{
|
|
688
|
+
kind: "session",
|
|
689
|
+
id: line.thread_id,
|
|
690
|
+
model
|
|
691
|
+
}];
|
|
692
|
+
case "error":
|
|
693
|
+
state.errorText = line.message;
|
|
694
|
+
return [];
|
|
695
|
+
case "turn.failed":
|
|
696
|
+
state.errorText = line.error.message;
|
|
697
|
+
return [{
|
|
698
|
+
kind: "final",
|
|
699
|
+
text: state.errorText,
|
|
700
|
+
isError: true
|
|
701
|
+
}];
|
|
702
|
+
case "turn.completed": return [{
|
|
703
|
+
kind: "final",
|
|
704
|
+
text: state.lastText
|
|
705
|
+
}];
|
|
706
|
+
default: return itemEvents(line, state);
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
/** Codex exec persists threads in its own storage; JSONL carries the thread id, not the model. */
|
|
710
|
+
const codex = {
|
|
711
|
+
name: "codex",
|
|
712
|
+
label: "Codex",
|
|
713
|
+
detect: () => readVersion("codex"),
|
|
714
|
+
models: async () => [],
|
|
715
|
+
async *run(input) {
|
|
716
|
+
const state = {
|
|
717
|
+
model: input.model ?? "default",
|
|
718
|
+
errorText: "",
|
|
719
|
+
commands: /* @__PURE__ */ new Set()
|
|
720
|
+
};
|
|
721
|
+
for await (const event of spawnJsonLines("codex", args$2(input), {
|
|
722
|
+
cwd: input.cwd,
|
|
723
|
+
signal: input.signal,
|
|
724
|
+
stdin: `${input.system}\n\n${input.prompt}`
|
|
725
|
+
})) {
|
|
726
|
+
if ("exit" in event) {
|
|
727
|
+
if (event.exit.code !== 0 && !input.signal.aborted) yield {
|
|
728
|
+
kind: "final",
|
|
729
|
+
text: state.errorText || event.exit.stderr,
|
|
730
|
+
isError: true
|
|
731
|
+
};
|
|
732
|
+
yield {
|
|
733
|
+
kind: "exit",
|
|
734
|
+
...event.exit,
|
|
735
|
+
sessionLost: /no (?:saved )?(?:session|conversation).*found|(?:session|thread|conversation).*not found|failed to (?:load|resume).*session/i.test(`${state.errorText}\n${event.exit.stderr}`)
|
|
736
|
+
};
|
|
737
|
+
return;
|
|
738
|
+
}
|
|
739
|
+
const parsed = v.safeParse(Line$1, event.line);
|
|
740
|
+
if (parsed.success) yield* lineEvents$1(parsed.output, state, input.model);
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
};
|
|
744
|
+
//#endregion
|
|
599
745
|
//#region src/agents/opencode.ts
|
|
600
746
|
/** `opencode run --format json`: one event per line, each a part of the assistant's message. */
|
|
601
747
|
const Part = v.variant("type", [
|
|
@@ -827,7 +973,8 @@ const agents = {
|
|
|
827
973
|
};
|
|
828
974
|
}
|
|
829
975
|
}
|
|
830
|
-
}
|
|
976
|
+
},
|
|
977
|
+
codex
|
|
831
978
|
};
|
|
832
979
|
/** The agent CLIs on `PATH`, with their versions and model catalogs. */
|
|
833
980
|
async function detectAgents() {
|
package/dist/devframe.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as devframe_default } from "./devframe-
|
|
1
|
+
import { t as devframe_default } from "./devframe-Z3sgjlMJ.mjs";
|
|
2
2
|
export { devframe_default as default };
|
package/dist/index.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pulls.review",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.2",
|
|
5
5
|
"description": "Review local git changes - the working tree, a commit or any range - grouped and summarized in the browser.",
|
|
6
6
|
"author": "Anthony Fu <hi@antfu.me>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"node": ">=20"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@pulls.review/core": "^0.3.
|
|
37
|
+
"@pulls.review/core": "^0.3.2",
|
|
38
38
|
"devframe": "^1.2.0",
|
|
39
39
|
"h3": "^2.0.1-rc.32",
|
|
40
40
|
"unstorage": "^1.17.5",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Bt as e,Cr as t,Er as n,G as r,H as i,K as a,W as o,Xt as s,qt as c,tt as l,yn as u}from"./vue-i18n-CGHHpbTP.js";var d=l({__name:`FeedbackSpinner`,props:{size:{default:`1em`}},setup(t){let r=t,o=i(()=>typeof r.size==`number`?`${r.size}px`:r.size);return(t,r)=>(e(),a(`span`,{class:`border-2 border-current border-t-transparent rounded-full inline-block animate-spin`,style:n({width:o.value,height:o.value}),role:`status`,"aria-label":`Loading`},null,4))}}),f=l({__name:`ActionButton`,props:{as:{},to:{},href:{},icon:{},variant:{default:`action`},size:{default:`md`},loading:{type:Boolean},disabled:{type:Boolean}},setup(n){let l=n,f=i(()=>l.as?l.as:l.href!=null||l.to!=null?`a`:`button`),p=i(()=>f.value===`a`),m=i(()=>f.value===`button`),h=i(()=>l.size===`sm`),g=i(()=>l.variant===`primary`?h.value?`btn-primary text-sm`:`btn-primary`:l.variant===`text`?h.value?`btn-text text-sm`:`btn-text`:h.value?`btn-action-sm`:`btn-action`),_=i(()=>l.disabled||l.loading);return(i,l)=>(e(),o(s(f.value),{class:t([g.value,{"pointer-events-none op-mute":_.value&&!m.value}]),href:p.value?n.href??n.to:void 0,to:n.as&&n.to!=null?n.to:void 0,disabled:m.value?_.value:void 0,"aria-disabled":_.value||void 0,"aria-busy":n.loading||void 0},{default:u(()=>[n.loading?(e(),o(d,{key:0,size:`1em`})):n.icon?(e(),a(`span`,{key:1,class:t(n.icon),"aria-hidden":`true`},null,2)):r(``,!0),c(i.$slots,`default`)]),_:3},8,[`class`,`href`,`to`,`disabled`,`aria-disabled`,`aria-busy`]))}});export{d as n,f as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{At as e,Bt as t,Cr as n,Dt as r,G as i,H as a,Hn as o,Ht as s,K as c,Mt as l,Ot as u,Pt as d,W as f,Wn as p,Xt as m,bt as ee,er as h,ft as g,lt as _,mn as v,qt as y,tt as b,xn as x,yn as S}from"./vue-i18n-CGHHpbTP.js";import{i as C}from"./runtime-dom.esm-bundler-Du_ZCcVN.js";import{a as w,c as T,f as te,i as ne,l as E,n as D,t as O}from"./floating-ui.dom-CfpSQvPs.js";var k=[`auto`,`top`,`bottom`,`left`,`right`].reduce((e,t)=>e.concat([t,`${t}-start`,`${t}-end`]),[]),A={targetNodes:{type:Function,required:!0},referenceNode:{type:Function,default:null},popperNode:{type:Function,required:!0},shown:{type:Boolean,default:!1},ariaId:{default:null},delay:{type:[String,Number,Object],default:0},triggers:{type:Array,default:()=>[]},showTriggers:{type:[Array,Function],default:void 0},hideTriggers:{type:[Array,Function],default:void 0},popperShowTriggers:{type:[Array,Function],default:void 0},popperHideTriggers:{type:[Array,Function],default:void 0},autoHide:{type:[Boolean,Function],default:!1},handleResize:{type:Boolean,default:!1},eagerMount:{type:Boolean,default:!1},popperClass:{type:[String,Array,Object],default:void 0},noAutoFocus:{type:Boolean,default:!1},disabled:{type:Boolean,default:void 0},placement:{type:String,validator:e=>k.includes(e),default:void 0},distance:{type:[Number,String],default:void 0},skidding:{type:[Number,String],default:void 0},popperTriggers:{type:Array,default:void 0},container:{type:[String,Object,Boolean],default:void 0},boundary:{type:[String,Object],default:void 0},strategy:{type:String,validator:e=>[`absolute`,`fixed`].includes(e),default:void 0},instantMove:{type:Boolean,default:void 0},preventOverflow:{type:Boolean,default:void 0},overflowPadding:{type:[Number,String],default:void 0},arrowPadding:{type:[Number,String],default:void 0},noArrow:{type:Boolean,default:void 0},flip:{type:Boolean,default:void 0},shift:{type:Boolean,default:void 0},shiftCrossAxis:{type:Boolean,default:void 0},disposeTimeout:{type:Number,default:void 0}},j={show:()=>!0,hide:()=>!0,"update:shown":e=>!0,"apply-show":()=>!0,"apply-hide":()=>!0,"close-directive":()=>!0,"auto-hide":()=>!0,resize:()=>!0},M=Object.freeze({disabled:!1,placement:`bottom`,distance:5,skidding:0,container:`body`,boundary:void 0,instantMove:!1,disposeTimeout:150,popperTriggers:[],strategy:`absolute`,preventOverflow:!0,flip:!0,shift:!0,shiftCrossAxis:!1,overflowPadding:0,arrowPadding:0,noArrow:!1,autoHideOnMousedown:!1});function re(){return _()?.appContext.provides.$_vueAfloatGlobalOptions??{}}function N(e){let t={};if(!e)return t;for(let n in e)e[n]!==void 0&&(t[n]=e[n]);return t}function ie(e,t=re()){return Object.assign({},M,N(t),N(e))}var ae={hover:`mouseenter`,focus:`focus`,click:`click`,touch:`touchstart`,pointer:`pointerdown`},oe={hover:`mouseleave`,focus:`blur`,click:`click`,touch:`touchend`,pointer:`pointerup`};function se(){return new Promise(e=>requestAnimationFrame(()=>{requestAnimationFrame(e)}))}var P=0,F=0,I=0,L=0,R=0;function ce(e){P=I,F=L,I=e.clientX,L=e.clientY}function le(){R++,R===1&&window.addEventListener(`mousemove`,ce,{passive:!0})}function ue(){R--,R===0&&window.removeEventListener(`mousemove`,ce)}function de(e,t){let n=e.getBoundingClientRect();if(I>=n.left&&I<=n.right&&L>=n.top&&L<=n.bottom){let e=t.getBoundingClientRect(),n=I-P,r=L-F,i=e.left+e.width/2-P+(e.top+e.height/2)-F+e.width+e.height,a=P+n*i,o=F+r*i;return z(P,F,a,o,e.left,e.top,e.left,e.bottom)||z(P,F,a,o,e.left,e.top,e.right,e.top)||z(P,F,a,o,e.right,e.top,e.right,e.bottom)||z(P,F,a,o,e.left,e.bottom,e.right,e.bottom)}return!1}function z(e,t,n,r,i,a,o,s){let c=((o-i)*(t-a)-(s-a)*(e-i))/((s-a)*(n-e)-(o-i)*(r-t)),l=((n-e)*(t-a)-(r-t)*(e-i))/((s-a)*(n-e)-(o-i)*(r-t));return c>=0&&c<=1&&l>=0&&l<=1}var fe=typeof window<`u`&&typeof navigator<`u`&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,B=null,V=0;function pe(){return V++,B||=U(),B}function me(){V--,V===0&&B&&(B.dispose(),B=null)}function H(){if(B)for(let e of B.shownPoppers)e.computePosition()}function U(){let e=new Set,t=new Map;function n(){for(let t of e)if(t.options.value.autoHideOnMousedown)return!0;return!1}function r(t,r){if(n())a(t,r);else{let n=t.composedPath();for(let t of e)try{t.mouseDownContains=n.includes(t.popperNode())}catch{}}}function i(e,t){n()||a(e,t)}function a(t,n){let r={},i=t.composedPath(),a=[...e].reverse();for(let e of a)try{let o=Array.from(e.shownChildren).some(e=>{let t=a.find(t=>t.randomId===e);return t&&i.includes(t.popperNode())}),s=e.containsGlobalTarget=e.mouseDownContains||i.includes(e.popperNode())||o;e.pendingHide=!1,requestAnimationFrame(()=>{if(e.pendingHide=!1,!r[e.randomId]&&W(e,s,t)){if(e.handleGlobalClose(t,n),!t.closeAllPopover&&t.closePopover&&s){let t=e.parentPopper;for(;t;)r[t.randomId]=!0,t=t.parentPopper;return}let i=e.parentPopper;for(;i&&W(i,i.containsGlobalTarget,t);)i.handleGlobalClose(t,n),i=i.parentPopper}})}catch{}}let o=e=>r(e,!1),s=e=>i(e,!1),c=e=>r(e,!0),l=e=>i(e,!0);if(fe){let e={passive:!0,capture:!0};document.addEventListener(`touchstart`,c,e),document.addEventListener(`touchend`,l,e)}else window.addEventListener(`mousedown`,o,!0),window.addEventListener(`click`,s,!0);window.addEventListener(`resize`,H);function u(e){let t=e.popperNode().getRootNode();return t instanceof ShadowRoot?t.host:document.body}function d(e){e&&![...t.values()].includes(e)&&e.classList.remove(`vue-afloat--some-open`)}let f={shownPoppers:e,hidingPopper:null,markShown(n){e.add(n);let r=t.get(n),i=u(n);t.set(n,i),d(r),i.classList.add(`vue-afloat--some-open`)},markHidden(n){e.delete(n);let r=t.get(n);t.delete(n),d(r),f.hidingPopper===n&&(f.hidingPopper=null)},dispose(){fe?(document.removeEventListener(`touchstart`,c,{capture:!0}),document.removeEventListener(`touchend`,l,{capture:!0})):(window.removeEventListener(`mousedown`,o,!0),window.removeEventListener(`click`,s,!0)),window.removeEventListener(`resize`,H)}};return f}function W(e,t,n){return n.closeAllPopover||n.closePopover&&t||G(e,n)&&!t}function G(e,t){if(typeof e.autoHide==`function`){let n=e.autoHide(t);return e.lastAutoHide=n,n}return e.autoHide}function he(e,t){let n=[],r={strategy:e.strategy,middleware:n},i=e.boundary;(e.distance||e.skidding)&&n.push(T({mainAxis:e.distance,crossAxis:e.skidding}));let a=e.placement.startsWith(`auto`);return a?n.push(D({alignment:e.placement.split(`-`)[1]??``})):r.placement=e.placement,e.preventOverflow&&(e.shift&&n.push(E({padding:e.overflowPadding,boundary:i,crossAxis:e.shiftCrossAxis})),!a&&e.flip&&n.push(w({padding:e.overflowPadding,boundary:i}))),n.push(O({element:t,padding:e.arrowPadding})),r}var ge=class{entries=[];add(e,t,n){this.entries.push({targetNodes:e,eventType:t,handler:n});for(let r of e)r.addEventListener(t,n,{passive:!0})}addTriggers(e,t,n,r,i){let a=n;r!=null&&(a=typeof r==`function`?r(a):r);for(let n of a){let r=t[n];r&&this.add(e,r,i)}}remove(e){this.entries=this.entries.filter(t=>{if(!e||e===t.eventType){for(let e of t.targetNodes)e.removeEventListener(t.eventType,t.handler);return!1}return!0})}},_e=`__floating-vue__popper`;function ve(t,n){let r=_(),i=re(),c=a(()=>ie(t,i)),f=p(!1),m=p(!1),h=p(!1),g=o({showFrom:!1,showTo:!1,hideFrom:!1,hideTo:!0}),y=o({x:0,y:0,placement:``,strategy:c.value.strategy,arrow:{x:0,y:0,centerOffset:0}}),b=p(!0),x=`popper_${[Math.random(),Date.now()].map(e=>e.toString(36).substring(2,10)).join(`_`)}`,S=new Set,C=!0,w=!1,T=!1,E=!1,D,O,k,A=[],j,M,N=new ge,P=null,F=!1,I=ee(_e,null)?.parentPopper??null,L={randomId:x,options:c,get autoHide(){return t.autoHide},parentPopper:I,lockedChild:null,lockedChildTimer:null,shownChildren:S,pendingHide:!1,mouseDownContains:!1,containsGlobalTarget:!1,get lastAutoHide(){return b.value},set lastAutoHide(e){b.value=e},popperNode:()=>t.popperNode(),hide:V,applyHide:J,computePosition:()=>{G()},handleGlobalClose:Te};s(_e,{parentPopper:L});let R=a(()=>t.ariaId??x),ce=a(()=>t.eagerMount||m.value),z=a(()=>c.value.popperTriggers.includes(`hover`)||Array.isArray(t.popperShowTriggers)&&t.popperShowTriggers.includes(`hover`)),fe=a(()=>({popperId:R.value,isShown:f.value,shouldMountContent:ce.value,skipTransition:h.value,noArrow:c.value.noArrow,autoHide:typeof t.autoHide==`function`?b.value:t.autoHide,show:B,hide:V,handleResize:t.handleResize,onResize:W,classes:{...g,popperClass:t.popperClass},result:y}));function B({skipDelay:e=!1,force:t=!1}={}){I?.lockedChild&&I.lockedChild!==L||(L.pendingHide=!1,(t||!c.value.disabled)&&(I?.lockedChild===L&&(I.lockedChild=null),ve(e),n(`show`),T=!0,requestAnimationFrame(()=>{T=!1})),n(`update:shown`,!0))}function V({skipDelay:e=!1}={}){if(!E){if(S.size>0){L.pendingHide=!0;return}if(z.value&&de(k,j)){I&&(I.lockedChild=L,I.lockedChildTimer&&clearTimeout(I.lockedChildTimer),I.lockedChildTimer=setTimeout(()=>{I.lockedChild===L&&(I.lockedChild.hide({skipDelay:e}),I.lockedChild=null)},1e3));return}I?.lockedChild===L&&(I.lockedChild=null),L.pendingHide=!1,ye(e),n(`hide`),n(`update:shown`,!1)}}function H(){C&&(C=!1,m.value=!1,w=!1,k=t.referenceNode?.()??r.proxy.$el,A=t.targetNodes().filter(e=>e.nodeType===e.ELEMENT_NODE),j=t.popperNode(),M=j.querySelector(`.vue-afloat__arrow-container`),Z(`title`,`data-original-title`),X(),P=pe(),Y(),t.triggers.length&&Ce(),t.shown&&B())}function U(){C||(C=!0,N.remove(),V({skipDelay:!0}),X(),m.value=!1,f.value=!1,$(!1),Z(`data-original-title`,`title`),Y(),P&&=(me(),null))}async function W(){f.value&&(await G(),n(`resize`))}async function G(){if(C)return;let e=he(c.value,M),t=await ne(k,j,e);Object.assign(y,{x:t.x,y:t.y,placement:t.placement,strategy:t.strategy,arrow:t.middlewareData.arrow})}function ve(e=!1){$(!0),E=!1,clearTimeout(D);let t=P?.hidingPopper;if(t&&c.value.instantMove&&t.options.value.instantMove&&t!==I){t.applyHide(!0),q(!0);return}e?q():D=setTimeout(q,K(`show`))}function ye(e=!1){if(S.size>0){L.pendingHide=!0;return}$(!1),E=!0,clearTimeout(D),f.value&&P&&(P.hidingPopper=L),e?J():D=setTimeout(J,K(`hide`))}function K(e){let n=t.delay;return parseInt(n&&n[e]||n||0)}async function q(e=!1){clearTimeout(O),clearTimeout(D),h.value=e,!f.value&&(Se(),await se(),await G(),await be(),N.add([...te(k),...te(j)],`scroll`,()=>{G()}))}async function be(){E||(f.value=!0,Q({"aria-describedby":R.value,"data-popper-shown":``}),P?.markShown(L),n(`apply-show`),g.showFrom=!0,g.showTo=!1,g.hideFrom=!1,g.hideTo=!1,await se(),g.showFrom=!1,g.showTo=!0,t.noAutoFocus||j.focus())}async function J(e=!1){if(S.size>0){L.pendingHide=!0,E=!1;return}if(clearTimeout(D),!f.value)return;h.value=e,P?.markHidden(L),f.value=!1,Q({"aria-describedby":void 0,"data-popper-shown":void 0}),clearTimeout(O);let t=c.value.disposeTimeout;t!==null&&(O=setTimeout(()=>{j&&(X(),m.value=!1)},t)),N.remove(`scroll`),n(`apply-hide`),g.showFrom=!1,g.showTo=!1,g.hideFrom=!0,g.hideTo=!1,await se(),g.hideFrom=!1,g.hideTo=!0}function xe(){t.shown?B():V()}function Se(){if(C)return;let e=c.value.container,t;if(typeof e==`string`){let n=k.getRootNode();t=n instanceof ShadowRoot?e===`body`?n:n.querySelector(e):k.ownerDocument.querySelector(e)}else t=e===!1?A[0].parentNode:e;if(!t)throw Error(`No container for popover: ${e}`);t.appendChild(j),m.value=!0}function Ce(){let e=e=>{(!f.value||E)&&(e.usedByTooltip=!0,!w&&B({event:e}))};N.addTriggers(A,ae,t.triggers,t.showTriggers,e),N.addTriggers([j],ae,c.value.popperTriggers,t.popperShowTriggers,e);let n=e=>{e.usedByTooltip||V({event:e})};N.addTriggers(A,oe,t.triggers,t.hideTriggers,n),N.addTriggers([j],oe,c.value.popperTriggers,t.popperHideTriggers,n)}function we(){C||(N.remove(),Ce(),Y())}function Y(){let e=!C&&z.value;e!==F&&(F=e,e?le():ue())}function Te(e,t){T||(V({event:e}),e.closePopover?n(`close-directive`):n(`auto-hide`),t&&(w=!0,setTimeout(()=>{w=!1},300)))}function X(){j.parentNode&&j.parentNode.removeChild(j)}function Z(e,t){for(let n of A){let r=n.getAttribute(e);r&&(n.removeAttribute(e),n.setAttribute(t,r))}}function Q(e){for(let t of A)for(let n in e){let r=e[n];r==null?t.removeAttribute(n):t.setAttribute(n,r)}}function $(e){let t=I;for(;t;)e?t.shownChildren.add(x):(t.shownChildren.delete(x),t.pendingHide&&t.hide()),t=t.parentPopper}return v(()=>t.shown,xe),v(()=>c.value.disabled,e=>{e?U():H()}),v(()=>c.value.container,async()=>{f.value&&(Se(),P?.markShown(L),await G())}),v(()=>t.triggers,we,{deep:!0}),v(c,()=>G()),d(()=>{H(),X()}),u(xe),l(()=>{V()}),e(U),{show:B,hide:V,dispose:U,onResize:W,slotData:fe}}var ye=b({name:`VPopperRoot`,props:A,emits:j,setup(e,{emit:t,slots:n,expose:r}){let{show:i,hide:a,dispose:o,onResize:s,slotData:c}=ve(e,t);return r({show:i,hide:a,dispose:o,onResize:s}),()=>g(`div`,{ref:`reference`,class:[`vue-afloat`,{"vue-afloat--shown":c.value.isShown}]},n.default?.(c.value))}}),K=b({name:`VPopperContent`,props:{popperId:String,shown:Boolean,mounted:Boolean,skipTransition:Boolean,noArrow:Boolean,autoHide:Boolean,handleResize:Boolean,classes:{type:Object,required:!0},result:{type:Object,required:!0}},emits:[`hide`,`resize`],setup(t,{emit:n,slots:r}){let i=p(),a;d(()=>{t.handleResize&&(a=new ResizeObserver(()=>n(`resize`)),a.observe(i.value))}),e(()=>{a?.disconnect()});function o(e){return e!=null&&!Number.isNaN(e)?`${e}px`:null}return()=>{let{autoHide:e,classes:a,result:s,shown:c}=t,l=s.placement.split(`-`)[0];return g(`div`,{id:t.popperId,ref:`popover`,"data-allow-mismatch":``,class:[`vue-afloat`,`vue-afloat--${l}`,a.popperClass,{"vue-afloat--shown":c,"vue-afloat--hidden":!c,"vue-afloat--show-from":a.showFrom,"vue-afloat--show-to":a.showTo,"vue-afloat--hide-from":a.hideFrom,"vue-afloat--hide-to":a.hideTo,"vue-afloat--skip-transition":t.skipTransition,"vue-afloat--no-arrow":t.noArrow}],style:{position:s.strategy,transform:`translate3d(${Math.round(s.x)}px,${Math.round(s.y)}px,0)`},"aria-hidden":c||e?`false`:`true`,tabindex:e?0:void 0,"data-popper-placement":s.placement,onKeyup:t=>{t.key===`Escape`&&e&&n(`hide`)}},[g(`div`,{class:`vue-afloat__backdrop`,onClick:()=>e&&n(`hide`)}),g(`div`,{class:`vue-afloat__wrapper`},[g(`div`,{ref:i,class:`vue-afloat__inner`},t.mounted?[g(`div`,r.default?.())]:void 0),g(`div`,{ref:`arrow`,class:`vue-afloat__arrow-container`,style:{left:o(s.arrow.x),top:o(s.arrow.y)}},[g(`div`,{class:`vue-afloat__arrow-outer`}),g(`div`,{class:`vue-afloat__arrow-inner`})])])])}}}),q=new Set([`targetNodes`,`popperNode`]);function be(e){let t={};for(let n in A){if(q.has(n))continue;let r=A[n];t[n]=n in e?{...r,default:e[n]}:r}return t}function J(e,t,n={}){return b({name:e,props:be(n),emits:j,setup(e,{emit:n,slots:r,expose:i}){let a,o;function s(){return Array.from(a.$el.children).filter(e=>e!==o.$el)}return i({show:(...e)=>a.show(...e),hide:(...e)=>a.hide(...e),dispose:()=>a.dispose(),onResize:()=>a.onResize()}),()=>g(ye,{ref:e=>{a=e},...e,targetNodes:s,popperNode:()=>o.$el,class:t,onShow:()=>n(`show`),onHide:()=>n(`hide`),"onUpdate:shown":e=>n(`update:shown`,e),onApplyShow:()=>n(`apply-show`),onApplyHide:()=>n(`apply-hide`),onCloseDirective:()=>n(`close-directive`),onAutoHide:()=>n(`auto-hide`),onResize:()=>n(`resize`)},{default:({popperId:e,isShown:n,shouldMountContent:i,skipTransition:a,noArrow:s,autoHide:c,show:l,hide:u,handleResize:d,onResize:f,classes:p,result:m})=>[r.default?.({shown:n,show:l,hide:u}),g(K,{ref:e=>{o=e},class:t,popperId:e,shown:n,mounted:i,skipTransition:a,noArrow:s,autoHide:c,handleResize:d,classes:p,result:m,onHide:u,onResize:f},{default:()=>r.popper?.({shown:n,hide:u})})]})}})}J(`VDropdown`,`vue-afloat-dropdown`,{placement:`bottom`,triggers:()=>[`click`],delay:0,handleResize:!0,autoHide:!0}),J(`VMenu`,`vue-afloat-menu`,{placement:`bottom`,triggers:()=>[`hover`,`focus`],popperTriggers:()=>[`hover`],delay:()=>({show:0,hide:400}),handleResize:!0,autoHide:!0,noArrow:!0}),J(`VTooltip`,`vue-afloat-tooltip`,{placement:`top`,triggers:()=>[`hover`,`focus`,`touch`],hideTriggers:()=>e=>[...e,`click`],delay:()=>({show:200,hide:0})});function xe(){return b({name:`VPopper`,props:A,emits:j,setup(e,{emit:t,slots:n,expose:r}){let{show:i,hide:a,dispose:o,onResize:s,slotData:c}=ve(e,t);return r({show:i,hide:a,dispose:o,onResize:s}),()=>n.default?.(c.value)}})}var Se=xe(),Ce=b({name:`VTooltipDirective`,inheritAttrs:!1,props:{html:{type:Boolean,default:!1},content:{type:[String,Number,Function],default:null},loadingContent:{type:String,default:`...`},targetNodes:{type:Function,required:!0}},setup(e,{attrs:t,expose:n}){let i=p(null),o=a(()=>typeof e.content==`function`),s=a(()=>o.value&&i.value==null),c=a(()=>o.value?s.value?e.loadingContent:i.value:e.content),l,u,d=!1,f=!1,m=0;function ee(t=!1){if(typeof e.content==`function`&&d&&(t||!f&&i.value==null)){i.value=null,f=!0;let t=++m,n=e.content(e);n.then?n.then(e=>h(t,e)):h(t,n)}}function h(e,t){e===m&&(f=!1,i.value=t)}v(()=>e.content,()=>ee(!0),{immediate:!0}),v(c,async()=>{await r(),l.onResize()});function _(){d=!0,ee()}function y(){d=!1}return n({show:(...e)=>l.show(...e),hide:(...e)=>l.hide(...e),dispose:()=>l.dispose(),onResize:()=>l.onResize()}),()=>g(Se,{ref:e=>{l=e},placement:`top`,triggers:[`hover`,`focus`,`touch`],hideTriggers:e=>[...e,`click`],delay:{show:200,hide:0},...t,targetNodes:e.targetNodes,popperNode:()=>u.$el,onApplyShow:_,onApplyHide:y},{default:({popperId:t,isShown:n,shouldMountContent:r,skipTransition:i,noArrow:a,autoHide:o,hide:l,handleResize:d,onResize:f,classes:p,result:m})=>g(K,{ref:e=>{u=e},class:[`vue-afloat-tooltip`,{"vue-afloat--tooltip-loading":s.value}],popperId:t,shown:n,mounted:r,skipTransition:i,noArrow:a,autoHide:o,handleResize:d,classes:p,result:m,onHide:l,onResize:f},{default:()=>e.html?g(`div`,{innerHTML:c.value}):g(`div`,{textContent:c.value})})})}}),we=`vue-afloat--has-tooltip`;function Y(e,t){let n=e.placement;if(!n&&t)for(let e of k)t[e]&&(n=e);return n||=`top`,n}function Te(e,t,n){let r,i=typeof t;return r=i===`string`?{content:t}:t&&i===`object`?t:{content:!1},r.placement=Y(r,n),r.targetNodes=()=>[e],r.referenceNode=()=>e,r}var X,Z,Q=0;function $(){if(X)return;Z=p([]),X=C({name:`VTooltipDirectiveApp`,setup(){return{directives:Z}},render(){return this.directives.map(e=>{let t={...e.options,shown:e.shown||e.options.shown,key:e.id};return g(Ce,t)})},devtools:{hide:!0}});let e=document.createElement(`div`);X.mount(e)}function Ee(e,t,n){$();let r=p(Te(e,t,n)),i=p(!1),a={id:Q++,options:r,shown:i};return Z.value.push(a),e.classList&&e.classList.add(we),e.$_vueAfloat={options:r,item:a,show(){i.value=!0},hide(){i.value=!1}}}function De(e){if(e.$_vueAfloat){let t=Z.value.indexOf(e.$_vueAfloat.item);t!==-1&&Z.value.splice(t,1),delete e.$_vueAfloat,delete e.$_vueAfloatOldShown,delete e.$_vueAfloatMountTarget}e.classList&&e.classList.remove(we)}function Oe(e,{value:t,modifiers:n}){let r=Te(e,t,n);if(!r.content||M.disabled)De(e);else{let i;e.$_vueAfloat?(i=e.$_vueAfloat,i.options.value=r):i=Ee(e,t,n);let a=typeof t==`object`?t.shown:void 0;a!==void 0&&a!==e.$_vueAfloatOldShown&&(e.$_vueAfloatOldShown=a,a?i.show():i.hide())}}var ke={beforeMount:Oe,updated:Oe,beforeUnmount(e){De(e)}},Ae=b({__name:`ActionIconButton`,props:{as:{},to:{},href:{},icon:{},tooltip:{},active:{type:Boolean},disabled:{type:Boolean},label:{},compact:{type:Boolean},activeClass:{}},setup(e){let r=e,o=a(()=>r.as?r.as:r.href!=null||r.to!=null?`a`:`button`),s=a(()=>o.value===`a`),l=a(()=>o.value===`button`),u=a(()=>r.compact?`btn-icon-compact`:`btn-icon`),d=a(()=>r.compact?`w-auto! h-auto! p-[0.25em]`:`w-auto! h-auto! p-[0.5em]`),p=a(()=>r.active?r.activeClass||`color-active bg-active op100`:``);return(r,a)=>x((t(),f(m(o.value),{type:l.value?`button`:void 0,class:n([u.value,d.value,p.value,{"pointer-events-none op-mute":e.disabled&&!l.value}]),href:s.value?e.href??e.to:void 0,to:e.as&&e.to!=null?e.to:void 0,disabled:l.value?e.disabled:void 0,"aria-disabled":e.disabled&&!l.value||void 0,"aria-label":e.label??e.tooltip,"aria-pressed":e.active||void 0},{default:S(()=>[e.icon?(t(),c(`span`,{key:0,class:n(e.icon),"aria-hidden":`true`},null,2)):i(``,!0),y(r.$slots,`default`),y(r.$slots,`badge`)]),_:3},8,[`type`,`class`,`href`,`to`,`disabled`,`aria-disabled`,`aria-label`,`aria-pressed`])),[[h(ke),e.tooltip??``]])}});export{ke as n,Ae as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as e,Bt as t,Dr as n,G as r,H as i,K as a,Kt as o,M as s,Q as c,Tt as l,U as u,W as d,Wn as f,h as p,sn as m,tt as h,un as g,xn as _,yn as v}from"./vue-i18n-CGHHpbTP.js";import{x as y}from"./runtime-dom.esm-bundler-Du_ZCcVN.js";import{t as b}from"./ActionButton-V4dY2wPS.js";import{t as x}from"./ActionIconButton-4b5xelMn.js";import{t as S}from"./ChatMessage-Ccffh_8Z.js";var C={class:`fixed bottom-4 right-4 z-dropdown`},w={key:1,class:`h-140 max-h-[calc(100vh-2rem)] max-w-[calc(100vw-2rem)] w-100 flex flex-col overflow-hidden border border-base rounded-lg bg-base shadow-xl`},T={class:`flex items-center gap-2 border-b border-base px-3 py-2`},E={class:`flex-auto text-sm font-semibold`},D={key:0,class:`flex flex-auto items-center justify-center p-6 text-center text-sm op-mute`},O={key:0,class:`flex items-center gap-1.5 text-xs op-mute`,role:`status`},k={key:0,class:`break-words px-3 pb-2 text-xs text-red-500`},A={class:`flex items-end gap-2 border-t border-base p-2`},j=[`placeholder`,`aria-label`,`disabled`],M=h({__name:`ChatWidget`,props:l({store:{}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:[`update:open`],setup(l){let h=l,M=i(()=>h.store.llm.chat),N=m(l,`open`),P=f(``),F=i(()=>M.value.isStreaming||h.store.llm.isAnalyzing),I=i(()=>M.value.messages.length-1),L=i(()=>{let e=M.value.messages.at(-1);return e?.role===`assistant`&&e.stopReason===`error`}),R=i(()=>{if(!M.value.isStreaming)return!1;let e=M.value.messages.at(-1),t=e?.role===`assistant`?e.content.at(-1):void 0;return!(t?.type===`text`&&t.text.trim())}),z=g(`listEl`),B=g(`contentEl`),V=f(!0);function H(){let e=z.value;e&&(V.value=e.scrollHeight-e.scrollTop-e.clientHeight<40)}p(B,()=>{V.value&&z.value&&(z.value.scrollTop=z.value.scrollHeight)});async function U(){let e=P.value;e.trim()&&!F.value&&(P.value=``,V.value=!0,await M.value.send(e))}function W(e){e.key!==`Enter`||e.shiftKey||e.isComposing||(e.preventDefault(),U())}return(i,l)=>(t(),a(`div`,C,[N.value?(t(),a(`div`,w,[u(`div`,T,[l[7]||=u(`span`,{class:`i-ph:chat-circle-dots-duotone op-mute`,"aria-hidden":`true`},null,-1),u(`span`,E,n(i.$t(`chat.title`)),1),M.value.available?(t(),d(b,{key:0,size:`sm`,variant:`text`,onClick:l[1]||=e=>M.value.clear()},{default:v(()=>[c(n(i.$t(`common.clear`)),1)]),_:1})):r(``,!0),e(x,{compact:``,icon:`i-ph:caret-down`,tooltip:i.$t(`chat.collapse`),onClick:l[2]||=e=>N.value=!1},null,8,[`tooltip`])]),M.value.available?(t(),a(s,{key:1},[u(`div`,{ref_key:`listEl`,ref:z,class:`min-w-0 flex-auto overflow-y-auto overscroll-contain p-3`,onScroll:H},[u(`div`,{ref_key:`contentEl`,ref:B,class:`flex flex-col gap-3`},[(t(!0),a(s,null,o(M.value.messages,(e,n)=>(t(),d(S,{key:n,message:e,retryable:n===I.value&&!M.value.isStreaming,onRetry:l[3]||=e=>M.value.retry()},null,8,[`message`,`retryable`]))),128)),R.value?(t(),a(`div`,O,[l[8]||=u(`span`,{class:`i-ph:spinner-duotone animate-spin`,"aria-hidden":`true`},null,-1),c(` `+n(i.$t(`chat.thinking`)),1)])):r(``,!0)],512)],544),M.value.error&&!L.value?(t(),a(`p`,k,n(M.value.error.message),1)):r(``,!0),u(`div`,A,[_(u(`textarea`,{"onUpdate:modelValue":l[4]||=e=>P.value=e,rows:`2`,placeholder:i.$t(`chat.placeholder`),"aria-label":i.$t(`chat.title`),disabled:F.value,class:`flex-auto resize-none border border-base rounded bg-raised p-2 text-sm outline-none disabled:op-mute focus-visible:ring-2 focus-visible:ring-primary-500/40`,onKeydown:W},null,40,j),[[y,P.value]]),M.value.isStreaming?(t(),d(b,{key:0,size:`sm`,icon:`i-ph:stop-duotone`,onClick:l[5]||=e=>M.value.stop()},{default:v(()=>[c(n(i.$t(`common.stop`)),1)]),_:1})):(t(),d(b,{key:1,size:`sm`,variant:`primary`,icon:`i-ph:paper-plane-right-duotone`,disabled:F.value||!P.value.trim(),onClick:l[6]||=e=>U()},{default:v(()=>[c(n(i.$t(`common.send`)),1)]),_:1},8,[`disabled`]))])],64)):(t(),a(`div`,D,n(i.$t(`chat.reanalyzeToEnable`)),1))])):(t(),d(x,{key:0,icon:`i-ph:chat-circle-dots-duotone`,title:i.$t(`chat.title`),label:i.$t(`chat.title`),class:`border border-base bg-base text-xl shadow-lg`,onClick:l[0]||=e=>N.value=!0},null,8,[`title`,`label`]))]))}});export{M as default};
|