contentrain 0.4.3 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +112 -34
- package/dist/{activity-CbkxcfDf.mjs → activity-B8j9gfsK.mjs} +3 -3
- package/dist/{branches-D2UWex1N.mjs → branches-CvpFbyrJ.mjs} +3 -3
- package/dist/{cdn-build-BzC2QPNi.mjs → cdn-build-DS9FprWU.mjs} +3 -3
- package/dist/{cdn-init-CsmqJIaQ.mjs → cdn-init-Bm4dpEJn.mjs} +3 -3
- package/dist/{connect-DJo9PSiw.mjs → connect-Bb0BrZsx.mjs} +3 -3
- package/dist/describe-DJ5H9Cxm.mjs +106 -0
- package/dist/describe-format-CUAqB0C4.mjs +50 -0
- package/dist/{diff--halNUpG.mjs → diff-ov1j9bAb.mjs} +67 -59
- package/dist/doctor-MOf_LQEL.mjs +95 -0
- package/dist/{generate-DrUojrk8.mjs → generate-ByscV5SN.mjs} +26 -9
- package/dist/{ide-4ZGiAtYB.mjs → ide-DPDVYiaq.mjs} +6 -8
- package/dist/index.mjs +50 -12
- package/dist/{init-BVlisNcW.mjs → init-540qiNQJ.mjs} +6 -6
- package/dist/{login-DCXkOrQV.mjs → login-xvzL-UvR.mjs} +3 -3
- package/dist/{logout-nPt2UAeQ.mjs → logout-DzspSatR.mjs} +2 -2
- package/dist/mcp-client-DVWTex2i.mjs +44 -0
- package/dist/merge-DdPRttF-.mjs +82 -0
- package/dist/{resolve-context-Cg6JoVZt.mjs → resolve-context-hKVYPniC.mjs} +1 -1
- package/dist/scaffold-iuvrMh78.mjs +115 -0
- package/dist/{serve-CNeFIQ1i.mjs → serve-CxA2pKbp.mjs} +58 -5
- package/dist/serve-ui/assets/{AgentPromptGroup.vue_vue_type_script_setup_true_lang-Ulb-9Tr3.js → AgentPromptGroup.vue_vue_type_script_setup_true_lang-Bftt9tx_.js} +1 -1
- package/dist/serve-ui/assets/AppLayout-B-fbrfMk.js +21 -0
- package/dist/serve-ui/assets/BranchDetailPage-B3PL9PGp.js +17 -0
- package/dist/serve-ui/assets/{BranchesPage-CSwikNkd.js → BranchesPage-4YpE_szf.js} +2 -2
- package/dist/serve-ui/assets/CardContent.vue_vue_type_script_setup_true_lang-D1L2MnBU.js +1 -0
- package/dist/serve-ui/assets/CollapsibleTrigger.vue_vue_type_script_setup_true_lang-B4uDtllm.js +1 -0
- package/dist/serve-ui/assets/{Collection-DTB4xCCE.js → Collection-9URFko-Y.js} +2 -2
- package/dist/serve-ui/assets/ConfigProvider-CwkmRpT5.js +1 -0
- package/dist/serve-ui/assets/{ContentListPage-DF-LjAaS.js → ContentListPage-BMfSfg8x.js} +2 -2
- package/dist/serve-ui/assets/ContentPage-BXUnNJlB.js +1 -0
- package/dist/serve-ui/assets/DashboardPage-1UyYgg5J.js +21 -0
- package/dist/serve-ui/assets/{DialogTitle.vue_vue_type_script_setup_true_lang-2sQAJn_Y.js → DialogTitle.vue_vue_type_script_setup_true_lang-M4LOzTva.js} +1 -1
- package/dist/serve-ui/assets/DoctorPage-WnQ8xYWy.js +1 -0
- package/dist/serve-ui/assets/FormatReferencePage-DoKEaawl.js +1 -0
- package/dist/serve-ui/assets/{Input.vue_vue_type_script_setup_true_lang-BveqfZsR.js → Input.vue_vue_type_script_setup_true_lang-tW0hgReH.js} +2 -2
- package/dist/serve-ui/assets/{ModelDetailPage-_TIV9itx.js → ModelDetailPage-BysqN8IL.js} +3 -3
- package/dist/serve-ui/assets/ModelsPage-DFZrdBIi.js +1 -0
- package/dist/serve-ui/assets/{NormalizePage-Cde8vdk2.js → NormalizePage-4f5Ib_ES.js} +2 -2
- package/dist/serve-ui/assets/{PageHeader.vue_vue_type_script_setup_true_lang-CEnjONvd.js → PageHeader.vue_vue_type_script_setup_true_lang-Bln1czg7.js} +1 -1
- package/dist/serve-ui/assets/Presence-CA3xTrht.js +3 -0
- package/dist/serve-ui/assets/{Separator.vue_vue_type_script_setup_true_lang-1pFZ2PR2.js → Separator.vue_vue_type_script_setup_true_lang-PECBq3nc.js} +1 -1
- package/dist/serve-ui/assets/{StudioHint.vue_vue_type_script_setup_true_lang-C6JN5tPq.js → StudioHint.vue_vue_type_script_setup_true_lang-DYTEoyjw.js} +1 -1
- package/dist/serve-ui/assets/{TrustBadge.vue_vue_type_script_setup_true_lang-KRiTnLVk.js → TrustBadge.vue_vue_type_script_setup_true_lang-BRXWvOYU.js} +2 -2
- package/dist/serve-ui/assets/ValidatePage-BMTpV2KL.js +16 -0
- package/dist/serve-ui/assets/{arrow-down-BAJwpryD.js → arrow-down-IJu6H7Es.js} +1 -1
- package/dist/serve-ui/assets/{arrow-left-DANf_wrK.js → arrow-left-D8ZjVYAI.js} +1 -1
- package/dist/serve-ui/assets/{book-marked-DS8FXgjz.js → book-marked-BNyyZrq3.js} +1 -1
- package/dist/serve-ui/assets/{book-open-DnH5T78M.js → book-open-Dw1fQtSI.js} +1 -1
- package/dist/serve-ui/assets/{box-UJk5SvJJ.js → box-BoGMZDZR.js} +1 -1
- package/dist/serve-ui/assets/{chevron-down-C1nYx5Eu.js → chevron-down-UcXxhyyY.js} +1 -1
- package/dist/serve-ui/assets/{chevron-right-XnJVrezx.js → chevron-right-SpdM5LBc.js} +1 -1
- package/dist/serve-ui/assets/circle-alert-CEwKJpYl.js +6 -0
- package/dist/serve-ui/assets/{content-Ctqretwl.js → content-BQEzysvq.js} +1 -1
- package/dist/serve-ui/assets/{database-Wd_i2bM1.js → database-U6JU8oc9.js} +1 -1
- package/dist/serve-ui/assets/{file-code-ScWZN40B.js → file-code-_sq1QHQo.js} +1 -1
- package/dist/serve-ui/assets/{file-text-J3Wzwieh.js → file-text-BiMGJckO.js} +1 -1
- package/dist/serve-ui/assets/{git-branch-DqEFTZDt.js → git-branch-CdZMOuSP.js} +1 -1
- package/dist/serve-ui/assets/{git-merge-Bmz-MVBm.js → git-merge-D8Y-BwIh.js} +1 -1
- package/dist/serve-ui/assets/{hash-pCwLSzjB.js → hash-CrXakbCy.js} +1 -1
- package/dist/serve-ui/assets/index-DL_dw3XX.js +80 -0
- package/dist/serve-ui/assets/index-KZ2rT4mJ.css +1 -0
- package/dist/serve-ui/assets/{languages-CQqNMim-.js → languages-DvyMGPwy.js} +1 -1
- package/dist/serve-ui/assets/{plus-Cw1OnTR2.js → plus-Ddujj7Qx.js} +1 -1
- package/dist/serve-ui/assets/project-Dg2BVay_.js +1 -0
- package/dist/serve-ui/assets/{scan-search-UJ-_oiOR.js → scan-search-CsPYGmEs.js} +1 -1
- package/dist/serve-ui/assets/{settings-Dnm4yTIj.js → settings-IQvevsKM.js} +1 -1
- package/dist/serve-ui/assets/{shield-check-B67ELGUT.js → shield-check-BmSBU8Ai.js} +1 -1
- package/dist/serve-ui/assets/stethoscope-DgCa_7BL.js +6 -0
- package/dist/serve-ui/assets/{trash-2-B1QgZW1G.js → trash-2-CNTkluuz.js} +1 -1
- package/dist/serve-ui/assets/useDirection-DfPL7a9d.js +1 -0
- package/dist/serve-ui/assets/{useId-CPFWZ4Bo.js → useId-B-RTM02R.js} +1 -1
- package/dist/serve-ui/assets/{useNonce-BffIzuhE.js → useNonce-DR6M3tLq.js} +1 -1
- package/dist/serve-ui/assets/useWatch-D4Y-epQR.js +1 -0
- package/dist/serve-ui/index.html +2 -2
- package/dist/{server-DTdmutjb.mjs → server-B1PSjXbu.mjs} +313 -112
- package/dist/{setup-4mS8RuCy.mjs → setup-BMqKibZt.mjs} +3 -3
- package/dist/{skills-4nhto0AZ.mjs → skills-CZ54F-97.mjs} +3 -3
- package/dist/{status-Cyv-jo1y.mjs → status-BJ6Lu3J4.mjs} +3 -3
- package/dist/{status-CoHgz6HN.mjs → status-Bmjfrk-B.mjs} +24 -11
- package/dist/studio-DPVJ-2oG.mjs +24 -0
- package/dist/{submissions-bIG-MWvv.mjs → submissions-zH_S7JIQ.mjs} +3 -3
- package/dist/{usage-B2xuc2DT.mjs → usage-z6eyT64a.mjs} +3 -3
- package/dist/{validate-B10L7RL7.mjs → validate-BG0X5g09.mjs} +102 -4
- package/dist/{webhooks-Dq3zFLP7.mjs → webhooks-CBG2Bs9P.mjs} +3 -3
- package/dist/{whoami-Ub5RznbU.mjs → whoami-CXVfvo7x.mjs} +2 -2
- package/package.json +7 -6
- package/dist/doctor-DyKjAIKH.mjs +0 -187
- package/dist/serve-ui/assets/AppLayout-C91DN08z.js +0 -21
- package/dist/serve-ui/assets/BranchDetailPage-BokOnhE7.js +0 -17
- package/dist/serve-ui/assets/CollapsibleTrigger.vue_vue_type_script_setup_true_lang-BRzXVXDG.js +0 -1
- package/dist/serve-ui/assets/ConfigProvider-Dvd7YoEV.js +0 -1
- package/dist/serve-ui/assets/ContentPage-BABg8pgn.js +0 -1
- package/dist/serve-ui/assets/DashboardPage-BFLFEJNZ.js +0 -21
- package/dist/serve-ui/assets/ModelsPage-DrQemHQ-.js +0 -1
- package/dist/serve-ui/assets/Presence-BXKCIfUk.js +0 -3
- package/dist/serve-ui/assets/ValidatePage-DRFAySNR.js +0 -21
- package/dist/serve-ui/assets/index-CG5NtNtt.css +0 -1
- package/dist/serve-ui/assets/index-De_z0714.js +0 -1
- package/dist/serve-ui/assets/index-RDdffBTh.js +0 -80
- package/dist/serve-ui/assets/project-BlZcHJw6.js +0 -1
- package/dist/serve-ui/assets/useDirection-B4S5kPsI.js +0 -1
- package/dist/serve-ui/assets/useWatch-B2FLRWr8.js +0 -1
- package/dist/studio-CJUGiIMd.mjs +0 -24
- package/dist/{client-C400qHcL.mjs → client-C9E9D4mb.mjs} +1 -1
- package/dist/{context-An3xrvcP.mjs → context-OskMGy8y.mjs} +1 -1
- package/dist/{demo-DcBt6fw8.mjs → demo-BOUcAoFZ.mjs} +3 -3
- package/dist/{oauth-server-Beppljfz.mjs → oauth-server-smSxDoH5.mjs} +1 -1
- /package/dist/{ui-B5mXontH.mjs → ui-B8l_LC36.mjs} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as resolveProjectRoot } from "./context-
|
|
1
|
+
import { r as resolveProjectRoot } from "./context-OskMGy8y.mjs";
|
|
2
2
|
import { defineCommand } from "citty";
|
|
3
3
|
import { createServer } from "@contentrain/mcp/server";
|
|
4
4
|
import consola from "consola";
|
|
@@ -6,7 +6,7 @@ import consola from "consola";
|
|
|
6
6
|
var serve_default = defineCommand({
|
|
7
7
|
meta: {
|
|
8
8
|
name: "serve",
|
|
9
|
-
description: "Start local content viewer or MCP stdio
|
|
9
|
+
description: "Start the local content viewer or the MCP server (stdio for IDE agents, --mcpHttp for Studio / CI / remote drivers)"
|
|
10
10
|
},
|
|
11
11
|
args: {
|
|
12
12
|
root: {
|
|
@@ -19,6 +19,16 @@ var serve_default = defineCommand({
|
|
|
19
19
|
description: "Use stdio MCP transport for IDE integration (env: CONTENTRAIN_STDIO=true)",
|
|
20
20
|
required: false
|
|
21
21
|
},
|
|
22
|
+
mcpHttp: {
|
|
23
|
+
type: "boolean",
|
|
24
|
+
description: "Use HTTP MCP transport (serves tool calls at POST /mcp)",
|
|
25
|
+
required: false
|
|
26
|
+
},
|
|
27
|
+
authToken: {
|
|
28
|
+
type: "string",
|
|
29
|
+
description: "Bearer token required for HTTP MCP requests (env: CONTENTRAIN_AUTH_TOKEN)",
|
|
30
|
+
required: false
|
|
31
|
+
},
|
|
22
32
|
port: {
|
|
23
33
|
type: "string",
|
|
24
34
|
description: "HTTP server port, default: 3333 (env: CONTENTRAIN_PORT)",
|
|
@@ -44,7 +54,7 @@ var serve_default = defineCommand({
|
|
|
44
54
|
let projectRoot = await resolveProjectRoot(args.root);
|
|
45
55
|
let demoDir;
|
|
46
56
|
if (args.demo) {
|
|
47
|
-
const { createDemoProject, cleanupDemoProject } = await import("./demo-
|
|
57
|
+
const { createDemoProject, cleanupDemoProject } = await import("./demo-BOUcAoFZ.mjs");
|
|
48
58
|
demoDir = await createDemoProject();
|
|
49
59
|
projectRoot = demoDir;
|
|
50
60
|
consola.info(`Demo project created at ${demoDir}`);
|
|
@@ -76,6 +86,50 @@ var serve_default = defineCommand({
|
|
|
76
86
|
}
|
|
77
87
|
const port = Number(args.port) || Number(process.env["CONTENTRAIN_PORT"]) || 3333;
|
|
78
88
|
const host = args.host ?? process.env["CONTENTRAIN_HOST"] ?? "localhost";
|
|
89
|
+
const authToken = args.authToken ?? process.env["CONTENTRAIN_AUTH_TOKEN"];
|
|
90
|
+
if (args.mcpHttp || process.env["CONTENTRAIN_MCP_HTTP"] === "true" || process.env["CONTENTRAIN_MCP_HTTP"] === "1") {
|
|
91
|
+
const { startHttpMcpServer } = await import("@contentrain/mcp/server/http");
|
|
92
|
+
const handle = await startHttpMcpServer({
|
|
93
|
+
projectRoot,
|
|
94
|
+
host,
|
|
95
|
+
port,
|
|
96
|
+
authToken
|
|
97
|
+
});
|
|
98
|
+
consola.box({
|
|
99
|
+
title: "Contentrain MCP (HTTP)",
|
|
100
|
+
message: [
|
|
101
|
+
`Endpoint: ${handle.url}`,
|
|
102
|
+
`Root: ${projectRoot}`,
|
|
103
|
+
authToken ? "Auth: Bearer token required" : "Auth: none (local-only server)",
|
|
104
|
+
"",
|
|
105
|
+
"Press Ctrl+C to stop"
|
|
106
|
+
].join("\n")
|
|
107
|
+
});
|
|
108
|
+
if (host === "0.0.0.0" && !authToken) consola.warn("HTTP MCP server is accessible from the network with no Bearer token. Set --auth-token or CONTENTRAIN_AUTH_TOKEN.");
|
|
109
|
+
process.on("SIGINT", () => {
|
|
110
|
+
handle.close().finally(() => process.exit(0));
|
|
111
|
+
});
|
|
112
|
+
process.on("SIGTERM", () => {
|
|
113
|
+
handle.close().finally(() => process.exit(0));
|
|
114
|
+
});
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (host !== "localhost" && host !== "127.0.0.1" && !authToken) {
|
|
118
|
+
consola.error([
|
|
119
|
+
`Refusing to start serve UI on ${host} without a Bearer token.`,
|
|
120
|
+
"",
|
|
121
|
+
" The serve UI exposes the full .contentrain/ write surface to any",
|
|
122
|
+
" reachable host. Either bind to localhost:",
|
|
123
|
+
"",
|
|
124
|
+
" contentrain serve --host localhost",
|
|
125
|
+
"",
|
|
126
|
+
" Or pass an auth token (coming soon — today, use stdio MCP for remote agents):",
|
|
127
|
+
"",
|
|
128
|
+
" contentrain serve --mcpHttp --host 0.0.0.0 --authToken $(openssl rand -hex 32)"
|
|
129
|
+
].join("\n"));
|
|
130
|
+
process.exitCode = 1;
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
79
133
|
const shouldOpen = args.open !== false && process.env["CONTENTRAIN_NO_OPEN"] !== "true";
|
|
80
134
|
const { join, dirname } = await import("node:path");
|
|
81
135
|
const { existsSync } = await import("node:fs");
|
|
@@ -85,7 +139,7 @@ var serve_default = defineCommand({
|
|
|
85
139
|
consola.warn("Serve UI not found. Running in API-only mode.");
|
|
86
140
|
consola.info("UI will be available after building: cd packages/cli/src/serve-ui && pnpm build");
|
|
87
141
|
}
|
|
88
|
-
const { createServeApp } = await import("./server-
|
|
142
|
+
const { createServeApp } = await import("./server-B1PSjXbu.mjs");
|
|
89
143
|
const { app, handleUpgrade } = await createServeApp({
|
|
90
144
|
projectRoot,
|
|
91
145
|
port,
|
|
@@ -123,7 +177,6 @@ var serve_default = defineCommand({
|
|
|
123
177
|
exec(`${process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open"} ${url}`);
|
|
124
178
|
});
|
|
125
179
|
});
|
|
126
|
-
if (host === "0.0.0.0") consola.warn("Server is accessible from the network. No authentication is configured.");
|
|
127
180
|
}
|
|
128
181
|
});
|
|
129
182
|
//#endregion
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as i,a as p,o as t,p as o,q as s,j as u,u as a,B as n,g as m,b as l,r as x,
|
|
1
|
+
import{c as i,a as p,o as t,p as o,q as s,j as u,u as a,B as n,g as m,b as l,r as x,G as d,f as g}from"./index-DL_dw3XX.js";/**
|
|
2
2
|
* @license lucide-vue-next v0.474.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import{c as K,d as Le,r as w,w as G,a as E,t as se,o as f,b as y,e as g,f as k,n as J,u as t,m as $,g as B,h as C,i as N,j as S,k as X,l as Y,p as L,q as m,s as O,F as Z,v as Q,x as ne,R as he,y as z,z as H,A as be,B as A,C as me,D as pe,E as Pe,G as le}from"./index-DL_dw3XX.js";import{P as W,d as j,_ as ae,r as ge,u as _e}from"./useWatch-D4Y-epQR.js";import{u as Re,S as Te,_ as De}from"./Input.vue_vue_type_script_setup_true_lang-tW0hgReH.js";import{u as ee}from"./project-Dg2BVay_.js";import{B as ye}from"./box-BoGMZDZR.js";import{F as Se}from"./file-text-BiMGJckO.js";import{S as xe}from"./shield-check-BmSBU8Ai.js";import{G as we}from"./git-branch-CdZMOuSP.js";import{S as Ie}from"./scan-search-CsPYGmEs.js";import{S as ze}from"./stethoscope-DgCa_7BL.js";import{F as He}from"./file-code-_sq1QHQo.js";import{B as Oe}from"./book-open-Dw1fQtSI.js";import{u as R,c as ie,a as q,P as te,b as ce,d as Ce,w as Be}from"./Presence-CA3xTrht.js";import{u as Ne}from"./useDirection-DfPL7a9d.js";import{c as Me,u as Ve}from"./useNonce-DR6M3tLq.js";import"./ConfigProvider-CwkmRpT5.js";/**
|
|
2
|
+
* @license lucide-vue-next v0.474.0 - ISC
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the ISC license.
|
|
5
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/const We=K("GithubIcon",[["path",{d:"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4",key:"tonef"}],["path",{d:"M9 18c-4.51 2-5-2-7-2",key:"9comsn"}]]);/**
|
|
7
|
+
* @license lucide-vue-next v0.474.0 - ISC
|
|
8
|
+
*
|
|
9
|
+
* This source code is licensed under the ISC license.
|
|
10
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
+
*/const ke=K("LayoutDashboardIcon",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]);/**
|
|
12
|
+
* @license lucide-vue-next v0.474.0 - ISC
|
|
13
|
+
*
|
|
14
|
+
* This source code is licensed under the ISC license.
|
|
15
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
+
*/const qe=K("MoonIcon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/**
|
|
17
|
+
* @license lucide-vue-next v0.474.0 - ISC
|
|
18
|
+
*
|
|
19
|
+
* This source code is licensed under the ISC license.
|
|
20
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
21
|
+
*/const Xe=K("SunIcon",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]),Ye="/icon-color.svg",je="/logo/color-icon-black-text.svg",Fe="/logo/color-icon-white-text.svg",Ue=Le("ui",()=>{const d=Re({attribute:"class"}),e=w(!1),l=w(JSON.parse(localStorage.getItem("cr-dismissed-hints")??"{}"));function n(){d.value=d.value==="dark"?"light":"dark"}function r(a){l.value[a]=Date.now(),localStorage.setItem("cr-dismissed-hints",JSON.stringify(l.value))}function i(a){const o=l.value[a];if(!o)return!1;const s=10080*60*1e3;return Date.now()-o<s}return G(e,a=>{localStorage.setItem("cr-sidebar-collapsed",String(a))}),localStorage.getItem("cr-sidebar-collapsed")==="true"&&(e.value=!0),{colorMode:d,sidebarCollapsed:e,toggleTheme:n,dismissHint:r,isHintDismissed:i}}),[T,Ge]=ie("ScrollAreaRoot");var Ke=E({__name:"ScrollAreaRoot",props:{type:{type:String,required:!1,default:"hover"},dir:{type:String,required:!1},scrollHideDelay:{type:Number,required:!1,default:600},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(d,{expose:e}){const l=d,n=w(0),r=w(0),i=w(),c=w(),a=w(),o=w(),s=w(!1),u=w(!1),{type:h,dir:v,scrollHideDelay:x}=se(l),P=Ne(v);function D(){var b;(b=i.value)==null||b.scrollTo({top:0})}function I(){var b;(b=i.value)==null||b.scrollTo({top:0,left:0})}e({viewport:i,scrollTop:D,scrollTopLeft:I});const{forwardRef:p,currentElement:_}=R();return Ge({type:h,dir:P,scrollHideDelay:x,scrollArea:_,viewport:i,onViewportChange:b=>{i.value=b||void 0},content:c,onContentChange:b=>{c.value=b},scrollbarX:a,scrollbarXEnabled:s,scrollbarY:o,scrollbarYEnabled:u,onScrollbarXChange:b=>{a.value=b||void 0},onScrollbarYChange:b=>{o.value=b||void 0},onScrollbarXEnabledChange:b=>{s.value=b},onScrollbarYEnabledChange:b=>{u.value=b},onCornerWidthChange:b=>{n.value=b},onCornerHeightChange:b=>{r.value=b}}),(b,M)=>(f(),y(t(W),{ref:t(p),"as-child":l.asChild,as:b.as,dir:t(P),style:J({position:"relative","--reka-scroll-area-corner-width":`${n.value}px`,"--reka-scroll-area-corner-height":`${r.value}px`})},{default:g(()=>[k(b.$slots,"default")]),_:3},8,["as-child","as","dir","style"]))}}),Je=Ke,Ze=E({__name:"ScrollAreaCornerImpl",setup(d){const e=T(),l=w(0),n=w(0),r=C(()=>!!l.value&&!!n.value);function i(){var o;const a=((o=e.scrollbarX.value)==null?void 0:o.offsetHeight)||0;e.onCornerHeightChange(a),n.value=a}function c(){var o;const a=((o=e.scrollbarY.value)==null?void 0:o.offsetWidth)||0;e.onCornerWidthChange(a),l.value=a}return q(e.scrollbarX.value,i),q(e.scrollbarY.value,c),G(()=>e.scrollbarX.value,i),G(()=>e.scrollbarY.value,c),(a,o)=>{var s;return r.value?(f(),y(t(W),$({key:0,style:{width:`${l.value}px`,height:`${n.value}px`,position:"absolute",right:t(e).dir.value==="ltr"?0:void 0,left:t(e).dir.value==="rtl"?0:void 0,bottom:0}},(s=a.$parent)==null?void 0:s.$props),{default:g(()=>[k(a.$slots,"default")]),_:3},16,["style"])):B("v-if",!0)}}}),Qe=Ze,et=E({__name:"ScrollAreaCorner",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(d){const e=d,{forwardRef:l}=R(),n=T(),r=C(()=>!!n.scrollbarX.value&&!!n.scrollbarY.value),i=C(()=>n.type.value!=="scroll"&&r.value);return(c,a)=>i.value?(f(),y(Qe,$({key:0},e,{ref:t(l)}),{default:g(()=>[k(c.$slots,"default")]),_:3},16)):B("v-if",!0)}}),tt=et;function Ee(d,e){return l=>{if(d[0]===d[1]||e[0]===e[1])return e[0];const n=(e[1]-e[0])/(d[1]-d[0]);return e[0]+n*(l-d[0])}}function oe(d){const e=Ae(d.viewport,d.content),l=d.scrollbar.paddingStart+d.scrollbar.paddingEnd,n=(d.scrollbar.size-l)*e;return Math.max(n,18)}function Ae(d,e){const l=d/e;return Number.isNaN(l)?0:l}function ot(d,e=()=>{}){let l={left:d.scrollLeft,top:d.scrollTop},n=0;return(function r(){const i={left:d.scrollLeft,top:d.scrollTop},c=l.left!==i.left,a=l.top!==i.top;(c||a)&&e(),l=i,n=window.requestAnimationFrame(r)})(),()=>window.cancelAnimationFrame(n)}function fe(d,e,l="ltr"){const n=oe(e),r=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,i=e.scrollbar.size-r,c=e.content-e.viewport,a=i-n,o=l==="ltr"?[0,c]:[c*-1,0],s=Me(d,o[0],o[1]);return Ee([0,c],[0,a])(s)}function U(d){return d?Number.parseInt(d,10):0}function rt(d,e,l,n="ltr"){const r=oe(l),i=r/2,c=e||i,a=r-c,o=l.scrollbar.paddingStart+c,s=l.scrollbar.size-l.scrollbar.paddingEnd-a,u=l.content-l.viewport,h=n==="ltr"?[0,u]:[u*-1,0];return Ee([o,s],h)(d)}function ve(d,e){return d>0&&d<e}var lt=E({__name:"ScrollAreaScrollbarX",setup(d){const e=T(),l=re(),{forwardRef:n,currentElement:r}=R();N(()=>{r.value&&e.onScrollbarXChange(r.value)});const i=C(()=>l.sizes.value);return(c,a)=>(f(),y($e,{ref:t(n),"is-horizontal":!0,"data-orientation":"horizontal",style:J({bottom:0,left:t(e).dir.value==="rtl"?"var(--reka-scroll-area-corner-width)":0,right:t(e).dir.value==="ltr"?"var(--reka-scroll-area-corner-width)":0,"--reka-scroll-area-thumb-width":i.value?`${t(oe)(i.value)}px`:void 0}),onOnDragScroll:a[0]||(a[0]=o=>t(l).onDragScroll(o.x))},{default:g(()=>[k(c.$slots,"default")]),_:3},8,["style"]))}}),at=lt,st=E({__name:"ScrollAreaScrollbarY",setup(d){const e=T(),l=re(),{forwardRef:n,currentElement:r}=R();N(()=>{r.value&&e.onScrollbarYChange(r.value)});const i=C(()=>l.sizes.value);return(c,a)=>(f(),y($e,{ref:t(n),"is-horizontal":!1,"data-orientation":"vertical",style:J({top:0,right:t(e).dir.value==="ltr"?0:void 0,left:t(e).dir.value==="rtl"?0:void 0,bottom:"var(--reka-scroll-area-corner-height)","--reka-scroll-area-thumb-height":i.value?`${t(oe)(i.value)}px`:void 0}),onOnDragScroll:a[0]||(a[0]=o=>t(l).onDragScroll(o.y))},{default:g(()=>[k(c.$slots,"default")]),_:3},8,["style"]))}}),nt=st,it=E({__name:"ScrollAreaScrollbarAuto",props:{forceMount:{type:Boolean,required:!1}},setup(d){const e=T(),l=F(),{forwardRef:n}=R(),r=w(!1),i=ce(()=>{if(e.viewport.value){const c=e.viewport.value.offsetWidth<e.viewport.value.scrollWidth,a=e.viewport.value.offsetHeight<e.viewport.value.scrollHeight;r.value=l.isHorizontal.value?c:a}},10);return N(()=>i()),q(e.viewport,i),q(e.content,i),(c,a)=>(f(),y(t(te),{present:c.forceMount||r.value},{default:g(()=>[S(de,$(c.$attrs,{ref:t(n),"data-state":r.value?"visible":"hidden"}),{default:g(()=>[k(c.$slots,"default")]),_:3},16,["data-state"])]),_:3},8,["present"]))}}),ue=it,ct=E({inheritAttrs:!1,__name:"ScrollAreaScrollbarGlimpse",props:{forceMount:{type:Boolean,required:!1}},setup(d){const e=T(),l=F(),{forwardRef:n}=R(),{state:r,dispatch:i}=Ce("hidden",{hidden:{POINTER_ENTER:"glimpse",SCROLL:"scrolling"},glimpse:{HIDE:"hidden",POINTER_LEAVE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"glimpse"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}}),c=C(()=>r.value!=="hidden");function a(){i("POINTER_ENTER")}function o(){i("POINTER_LEAVE")}const s=ce(()=>i("SCROLL_END"),100);return X(u=>{if(r.value==="glimpse"){const h=window.setTimeout(()=>i("HIDE"),e.scrollHideDelay.value);u(()=>{window.clearTimeout(h)})}}),X(u=>{if(r.value==="idle"){const h=window.setTimeout(()=>i("HIDE"),e.scrollHideDelay.value);u(()=>{window.clearTimeout(h)})}}),X(u=>{const h=e.viewport.value,v=l.isHorizontal.value?"scrollLeft":"scrollTop";if(h){let x=h[v];const P=()=>{const D=h[v];x!==D&&(i("SCROLL"),s()),x=D};h.addEventListener("scroll",P),u(()=>{h.removeEventListener("scroll",P)})}}),N(()=>{const u=e.scrollArea.value;u&&(u.addEventListener("pointerenter",a),u.addEventListener("pointerleave",o))}),Y(()=>{const u=e.scrollArea.value;u&&(u.removeEventListener("pointerenter",a),u.removeEventListener("pointerleave",o))}),(u,h)=>(f(),y(t(te),{present:u.forceMount||c.value},{default:g(()=>[S(ue,$(u.$attrs,{ref:t(n),"data-state":c.value?"visible":"hidden"}),{default:g(()=>[k(u.$slots,"default")]),_:3},16,["data-state"])]),_:3},8,["present"]))}}),ut=ct,dt=E({inheritAttrs:!1,__name:"ScrollAreaScrollbarHover",props:{forceMount:{type:Boolean,required:!1}},setup(d){const e=T(),{forwardRef:l}=R();let n;const r=w(!1);function i(){window.clearTimeout(n),r.value=!0}function c(){n=window.setTimeout(()=>{r.value=!1},e.scrollHideDelay.value)}return N(()=>{const a=e.scrollArea.value;a&&(a.addEventListener("pointerenter",i),a.addEventListener("pointerleave",c))}),Y(()=>{const a=e.scrollArea.value;a&&(window.clearTimeout(n),a.removeEventListener("pointerenter",i),a.removeEventListener("pointerleave",c))}),(a,o)=>(f(),y(t(te),{present:a.forceMount||r.value},{default:g(()=>[S(ue,$(a.$attrs,{ref:t(l),"data-state":r.value?"visible":"hidden"}),{default:g(()=>[k(a.$slots,"default")]),_:3},16,["data-state"])]),_:3},8,["present"]))}}),pt=dt,ft=E({__name:"ScrollAreaScrollbarScroll",props:{forceMount:{type:Boolean,required:!1}},setup(d){const e=T(),l=F(),{forwardRef:n}=R(),{state:r,dispatch:i}=Ce("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}}),c=C(()=>r.value!=="hidden");X(o=>{if(r.value==="idle"){const s=window.setTimeout(()=>i("HIDE"),e.scrollHideDelay.value);o(()=>{window.clearTimeout(s)})}});const a=ce(()=>i("SCROLL_END"),100);return X(o=>{const s=e.viewport.value,u=l.isHorizontal.value?"scrollLeft":"scrollTop";if(s){let h=s[u];const v=()=>{const x=s[u];h!==x&&(i("SCROLL"),a()),h=x};s.addEventListener("scroll",v),o(()=>{s.removeEventListener("scroll",v)})}}),(o,s)=>(f(),y(t(te),{present:o.forceMount||c.value},{default:g(()=>[S(de,$(o.$attrs,{ref:t(n),"data-state":c.value?"visible":"hidden"}),{default:g(()=>[k(o.$slots,"default")]),_:3},16,["data-state"])]),_:3},8,["present"]))}}),vt=ft;const[F,ht]=ie("ScrollAreaScrollbar");var bt=E({inheritAttrs:!1,__name:"ScrollAreaScrollbar",props:{orientation:{type:String,required:!1,default:"vertical"},forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"div"}},setup(d){const e=d,{forwardRef:l}=R(),n=T(),r=C(()=>e.orientation==="horizontal");G(r,()=>{r.value?n.onScrollbarXEnabledChange(!0):n.onScrollbarYEnabledChange(!0)},{immediate:!0}),Y(()=>{n.onScrollbarXEnabledChange(!1),n.onScrollbarYEnabledChange(!1)});const{orientation:i,forceMount:c,asChild:a,as:o}=se(e);return ht({orientation:i,forceMount:c,isHorizontal:r,as:o,asChild:a}),(s,u)=>t(n).type.value==="hover"?(f(),y(pt,$({key:0},s.$attrs,{ref:t(l),"force-mount":t(c)}),{default:g(()=>[k(s.$slots,"default")]),_:3},16,["force-mount"])):t(n).type.value==="scroll"?(f(),y(vt,$({key:1},s.$attrs,{ref:t(l),"force-mount":t(c)}),{default:g(()=>[k(s.$slots,"default")]),_:3},16,["force-mount"])):t(n).type.value==="glimpse"?(f(),y(ut,$({key:2},s.$attrs,{ref:t(l),"force-mount":t(c)}),{default:g(()=>[k(s.$slots,"default")]),_:3},16,["force-mount"])):t(n).type.value==="auto"?(f(),y(ue,$({key:3},s.$attrs,{ref:t(l),"force-mount":t(c)}),{default:g(()=>[k(s.$slots,"default")]),_:3},16,["force-mount"])):t(n).type.value==="always"?(f(),y(de,$({key:4},s.$attrs,{ref:t(l),"data-state":"visible"}),{default:g(()=>[k(s.$slots,"default")]),_:3},16)):B("v-if",!0)}}),mt=bt;const[re,gt]=ie("ScrollAreaScrollbarVisible");var _t=E({__name:"ScrollAreaScrollbarVisible",setup(d){const e=T(),l=F(),{forwardRef:n}=R(),r=w({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),i=C(()=>{const p=Ae(r.value.viewport,r.value.content);return p>0&&p<1}),c=w(),a=w(0);function o(p,_){if(x.value){const b=e.viewport.value.scrollLeft+p.deltaY;e.viewport.value.scrollLeft=b,ve(b,_)&&p.preventDefault()}else{const b=e.viewport.value.scrollTop+p.deltaY;e.viewport.value.scrollTop=b,ve(b,_)&&p.preventDefault()}}function s(p,_){x.value?a.value=_.x:a.value=_.y}function u(p){a.value=0}function h(p){r.value=p}function v(p,_){return rt(p,a.value,r.value,_)}const x=C(()=>l.isHorizontal.value);function P(p){x.value?e.viewport.value.scrollLeft=v(p,e.dir.value):e.viewport.value.scrollTop=v(p)}function D(){if(x.value){if(e.viewport.value&&c.value){const p=e.viewport.value.scrollLeft,_=fe(p,r.value,e.dir.value);c.value.style.transform=`translate3d(${_}px, 0, 0)`}}else if(e.viewport.value&&c.value){const p=e.viewport.value.scrollTop,_=fe(p,r.value);c.value.style.transform=`translate3d(0, ${_}px, 0)`}}function I(p){c.value=p}return gt({sizes:r,hasThumb:i,handleWheelScroll:o,handleThumbDown:s,handleThumbUp:u,handleSizeChange:h,onThumbPositionChange:D,onThumbChange:I,onDragScroll:P}),(p,_)=>x.value?(f(),y(at,$({key:0},p.$attrs,{ref:t(n)}),{default:g(()=>[k(p.$slots,"default")]),_:3},16)):(f(),y(nt,$({key:1},p.$attrs,{ref:t(n)}),{default:g(()=>[k(p.$slots,"default")]),_:3},16))}}),de=_t,yt=E({__name:"ScrollAreaScrollbarImpl",props:{isHorizontal:{type:Boolean,required:!0}},emits:["onDragScroll","onWheelScroll","onThumbPointerDown"],setup(d,{emit:e}){const l=d,n=e,r=T(),i=re(),c=F(),{forwardRef:a,currentElement:o}=R(),s=w(""),u=w();function h(p){var _,b;if(u.value){const M=p.clientX-((_=u.value)==null?void 0:_.left),V=p.clientY-((b=u.value)==null?void 0:b.top);n("onDragScroll",{x:M,y:V})}}function v(p){p.button===0&&(p.target.setPointerCapture(p.pointerId),u.value=o.value.getBoundingClientRect(),s.value=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",r.viewport&&(r.viewport.value.style.scrollBehavior="auto"),h(p))}function x(p){h(p)}function P(p){const _=p.target;_.hasPointerCapture(p.pointerId)&&_.releasePointerCapture(p.pointerId),document.body.style.webkitUserSelect=s.value,r.viewport&&(r.viewport.value.style.scrollBehavior=""),u.value=void 0}function D(p){var V;const _=p.target,b=(V=o.value)==null?void 0:V.contains(_),M=i.sizes.value.content-i.sizes.value.viewport;b&&i.handleWheelScroll(p,M)}N(()=>{document.addEventListener("wheel",D,{passive:!1})}),Y(()=>{document.removeEventListener("wheel",D)});function I(){var p,_,b,M,V;o.value&&(l.isHorizontal?i.handleSizeChange({content:((p=r.viewport.value)==null?void 0:p.scrollWidth)??0,viewport:((_=r.viewport.value)==null?void 0:_.offsetWidth)??0,scrollbar:{size:o.value.clientWidth??0,paddingStart:U(getComputedStyle(o.value).paddingLeft),paddingEnd:U(getComputedStyle(o.value).paddingRight)}}):i.handleSizeChange({content:((b=r.viewport.value)==null?void 0:b.scrollHeight)??0,viewport:((M=r.viewport.value)==null?void 0:M.offsetHeight)??0,scrollbar:{size:((V=o.value)==null?void 0:V.clientHeight)??0,paddingStart:U(getComputedStyle(o.value).paddingTop),paddingEnd:U(getComputedStyle(o.value).paddingBottom)}}),i.onThumbPositionChange())}return q(o,I),q(r.content,I),(p,_)=>(f(),y(t(W),{ref:t(a),style:{position:"absolute"},"data-scrollbarimpl":"",as:t(c).as.value,"as-child":t(c).asChild.value,onPointerdown:v,onPointermove:x,onPointerup:P},{default:g(()=>[k(p.$slots,"default")]),_:3},8,["as","as-child"]))}}),$e=yt,St=E({__name:"ScrollAreaThumb",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(d){const e=d,l=T(),n=re();function r(v){const P=v.target.getBoundingClientRect(),D=v.clientX-P.left,I=v.clientY-P.top;n.handleThumbDown(v,{x:D,y:I})}function i(v){n.handleThumbUp(v)}const{forwardRef:c,currentElement:a}=R(),o=w(),s=C(()=>l.viewport.value);function u(){if(!o.value){const v=ot(s.value,n.onThumbPositionChange);o.value=v,n.onThumbPositionChange()}}const h=C(()=>n.sizes.value);return Be(h,()=>{n.onThumbChange(a.value),s.value&&(n.onThumbPositionChange(),s.value.addEventListener("scroll",u))}),Y(()=>{var v;s.value.removeEventListener("scroll",u),(v=l.viewport.value)==null||v.removeEventListener("scroll",u)}),(v,x)=>(f(),y(t(W),{ref:t(c),"data-state":t(n).hasThumb?"visible":"hidden",style:{width:"var(--reka-scroll-area-thumb-width)",height:"var(--reka-scroll-area-thumb-height)"},"as-child":e.asChild,as:v.as,onPointerdown:r,onPointerup:i},{default:g(()=>[k(v.$slots,"default")]),_:3},8,["data-state","as-child","as"]))}}),xt=St,wt=E({inheritAttrs:!1,__name:"ScrollAreaViewport",props:{nonce:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(d,{expose:e}){const l=d,{nonce:n}=se(l),r=Ve(n),i=T(),c=w();N(()=>{i.onViewportChange(c.value),i.onContentChange(o.value)}),e({viewportElement:c});const{forwardRef:a,currentElement:o}=R();return(s,u)=>(f(),L(Z,null,[m("div",$({ref_key:"viewportElement",ref:c,"data-reka-scroll-area-viewport":"",style:{overflowX:t(i).scrollbarXEnabled.value?"scroll":"hidden",overflowY:t(i).scrollbarYEnabled.value?"scroll":"hidden"}},s.$attrs,{tabindex:0}),[S(t(W),{ref:t(a),style:J({minWidth:t(i).scrollbarXEnabled.value?"fit-content":void 0}),"as-child":l.asChild,as:s.as},{default:g(()=>[k(s.$slots,"default")]),_:3},8,["style","as-child","as"])],16),S(t(W),{as:"style",nonce:t(r)},{default:g(()=>u[0]||(u[0]=[O(" /* Hide scrollbars cross-browser and enable momentum scroll for touch devices */ [data-reka-scroll-area-viewport] { scrollbar-width:none; -ms-overflow-style:none; -webkit-overflow-scrolling:touch; } [data-reka-scroll-area-viewport]::-webkit-scrollbar { display:none; } ")])),_:1,__:[0]},8,["nonce"])],64))}}),Ct=wt;const kt={class:"group flex h-screen w-18 min-w-18 flex-col overflow-hidden border-r border-border bg-card transition-all duration-200 ease-in-out hover:w-55 hover:min-w-55 xl:w-55 xl:min-w-55"},Et={class:"flex flex-1 flex-col gap-1 px-3 pt-4"},At={class:"truncate opacity-0 transition-opacity duration-200 group-hover:opacity-100 xl:opacity-100"},$t={class:"flex flex-col gap-1 px-3 mt-auto"},Lt={class:"flex items-center gap-3 px-3 pb-4"},Pt={class:"truncate opacity-0 transition-opacity duration-200 group-hover:opacity-100 xl:opacity-100"},Rt=E({__name:"PrimarySidebar",setup(d){const e=Q(),l=Ue(),n=ee(),r=j("serve-ui-texts").locale("en").get(),i=[{icon:ke,label:"Dashboard",to:"/",exact:!0},{icon:ye,label:"Models",to:"/models"},{icon:Se,label:"Content",to:"/content"},{icon:xe,label:"Validate",to:"/validate"},{icon:we,label:"Branches",to:"/branches"},{icon:Ie,label:"Normalize",to:"/normalize"},{icon:ze,label:r["primary-nav.doctor"],to:"/doctor"},{icon:He,label:r["primary-nav.format"],to:"/format"}];function c(s){return s.exact?e.path===s.to:e.path.startsWith(s.to)}const a=C(()=>{var s,u;return((u=(s=n.status)==null?void 0:s.branches)==null?void 0:u.unmerged)??0}),o=C(()=>{var u;const s=(u=n.status)==null?void 0:u.validation;return s?s.errors+s.warnings:0});return(s,u)=>(f(),L("aside",kt,[u[3]||(u[3]=m("div",{class:"flex h-14 items-center px-4 shrink-0"},[m("img",{src:Ye,alt:"Contentrain",class:"size-8 shrink-0 block group-hover:hidden xl:hidden"}),m("img",{src:je,alt:"Contentrain",class:"h-7 shrink-0 hidden group-hover:block xl:block dark:hidden"}),m("img",{src:Fe,alt:"Contentrain",class:"h-7 shrink-0 hidden dark:group-hover:block dark:xl:block"})],-1)),m("nav",Et,[(f(),L(Z,null,ne(i,h=>S(t(he),{key:h.to,to:h.to,class:z(t(H)("flex items-center gap-3 rounded-lg px-3 py-2.5 text-sm transition-all duration-150",c(h)?"bg-background text-primary font-medium shadow-sm border border-border":"text-muted-foreground hover:bg-background/60 hover:text-foreground"))},{default:g(()=>[(f(),y(be(h.icon),{class:"size-5 shrink-0"})),m("span",At,A(h.label),1),h.to==="/branches"&&a.value>0?(f(),y(t(ae),{key:0,variant:"secondary",class:"ml-auto text-[10px] h-5 px-1.5 opacity-0 group-hover:opacity-100 xl:opacity-100 transition-opacity"},{default:g(()=>[O(A(a.value),1)]),_:1})):B("",!0),h.to==="/validate"&&o.value>0?(f(),y(t(ae),{key:1,class:"ml-auto text-[10px] h-5 px-1.5 bg-status-error/10 text-status-error border-0 opacity-0 group-hover:opacity-100 xl:opacity-100 transition-opacity"},{default:g(()=>[O(A(o.value),1)]),_:1})):B("",!0)]),_:2},1032,["to","class"])),64))]),m("div",$t,[m("a",{href:"https://ai.contentrain.io",target:"_blank",rel:"noopener",class:z(t(H)("flex items-center gap-3 rounded-lg px-3 py-2 text-sm transition-all duration-150","text-muted-foreground hover:bg-background/60 hover:text-foreground"))},[S(t(Oe),{class:"size-5 shrink-0"}),u[1]||(u[1]=m("span",{class:"truncate opacity-0 transition-opacity duration-200 group-hover:opacity-100 xl:opacity-100"}," Docs ",-1))],2),m("a",{href:"https://github.com/Contentrain/ai",target:"_blank",rel:"noopener",class:z(t(H)("flex items-center gap-3 rounded-lg px-3 py-2 text-sm transition-all duration-150","text-muted-foreground hover:bg-background/60 hover:text-foreground"))},[S(t(We),{class:"size-5 shrink-0"}),u[2]||(u[2]=m("span",{class:"truncate opacity-0 transition-opacity duration-200 group-hover:opacity-100 xl:opacity-100"}," GitHub ",-1))],2)]),m("div",Lt,[m("button",{class:z(t(H)("flex items-center gap-3 rounded-lg px-3 py-2.5 text-sm w-full transition-all duration-150","text-muted-foreground hover:bg-background/60 hover:text-foreground")),onClick:u[0]||(u[0]=h=>t(l).toggleTheme())},[t(l).colorMode==="dark"?(f(),y(t(Xe),{key:0,class:"size-5 shrink-0"})):(f(),y(t(qe),{key:1,class:"size-5 shrink-0"})),m("span",Pt,A(t(l).colorMode==="dark"?"Light mode":"Dark mode"),1)],2)])]))}}),Tt=E({__name:"ScrollBar",props:{orientation:{default:"vertical"},forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(d){const e=d,l=ge(e,"class");return(n,r)=>(f(),y(t(mt),$({"data-slot":"scroll-area-scrollbar"},t(l),{class:t(H)("flex touch-none p-px transition-colors select-none",d.orientation==="vertical"&&"h-full w-2.5 border-l border-l-transparent",d.orientation==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",e.class)}),{default:g(()=>[S(t(xt),{"data-slot":"scroll-area-thumb",class:"bg-border relative flex-1 rounded-full"})]),_:1},16,["class"]))}}),Dt=E({__name:"ScrollArea",props:{type:{},dir:{},scrollHideDelay:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(d){const e=d,l=ge(e,"class");return(n,r)=>(f(),y(t(Je),$({"data-slot":"scroll-area"},t(l),{class:t(H)("relative",e.class)}),{default:g(()=>[S(t(Ct),{"data-slot":"scroll-area-viewport",class:"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1"},{default:g(()=>[k(n.$slots,"default")]),_:3}),S(Tt),S(t(tt))]),_:3},16,["class"]))}}),It={class:"flex h-full"},zt={class:"hidden w-55 shrink-0 flex-col border-r border-border sidebar-gradient lg:flex"},Ht={class:"p-3"},Ot={class:"relative"},Bt=["onClick"],Nt={class:"truncate flex-1"},Mt={key:0,class:"px-3 py-6 text-center text-xs text-muted-foreground"},Vt={class:"flex-1 min-w-0 overflow-y-auto custom-scrollbar"},Wt=E({__name:"SubSidebarLayout",props:{basePath:{},paramKey:{}},setup(d){const e=j("serve-ui-texts").locale("en").get(),l=d,n=Q(),r=me(),i=ee(),c=w(""),a=C(()=>{var v;const u=((v=i.status)==null?void 0:v.models)??[];if(!c.value)return u;const h=c.value.toLowerCase();return u.filter(x=>x.id.toLowerCase().includes(h)||x.domain.toLowerCase().includes(h))}),o=C(()=>n.params[l.paramKey]),s={collection:"bg-primary/10 text-primary",singleton:"bg-status-info/10 text-status-info",document:"bg-status-success/10 text-status-success",dictionary:"bg-status-warning/10 text-status-warning"};return(u,h)=>(f(),L("div",It,[m("aside",zt,[m("div",Ht,[m("div",Ot,[S(t(Te),{class:"absolute left-2.5 top-2.5 size-3.5 text-muted-foreground"}),S(t(De),{modelValue:c.value,"onUpdate:modelValue":h[0]||(h[0]=v=>c.value=v),placeholder:t(e)["sub-sidebar-layout.search"],class:"h-8 bg-background pl-8 text-xs"},null,8,["modelValue","placeholder"])])]),S(t(Dt),{class:"flex-1 px-1.5"},{default:g(()=>[(f(!0),L(Z,null,ne(a.value,v=>{var x;return f(),L("button",{key:v.id,class:z(t(H)("flex w-full items-center gap-2 rounded-md px-3 py-2 text-left text-sm transition-colors",o.value===v.id?"bg-background font-medium text-primary shadow-sm border border-border":"text-muted-foreground hover:bg-background/60 hover:text-foreground")),onClick:P=>t(r).push(`${d.basePath}/${v.id}`)},[m("span",{class:z(t(H)("size-1.5 rounded-full shrink-0",((x=s[v.kind])==null?void 0:x.split(" ")[0])??"bg-muted"))},null,2),m("span",Nt,A(v.id),1),S(t(ae),{variant:"secondary",class:"text-[10px] shrink-0 h-4 px-1"},{default:g(()=>[O(A(v.kind==="singleton"?"1":v.fields),1)]),_:2},1024)],10,Bt)}),128)),a.value.length===0?(f(),L("div",Mt,A(t(e)["sub-sidebar-layout.no-models-found"]),1)):B("",!0)]),_:1})]),m("div",Vt,[k(u.$slots,"default")])]))}}),qt={class:"flex items-center gap-4 border-t border-border bg-background px-6 py-1.5 text-xs text-muted-foreground"},Xt={class:"flex items-center gap-1.5"},Yt={key:0,class:"ml-auto"},jt=E({__name:"StatusBar",setup(d){const e=j("serve-ui-texts").locale("en").get(),l=ee(),{connected:n,lastUpdate:r}=_e(),i=C(()=>{var o;return((o=l.status)==null?void 0:o.models.length)??0}),c=C(()=>{var o,s;return((s=(o=l.status)==null?void 0:o.config)==null?void 0:s.locales.supported.length)??0}),a=C(()=>{if(!r.value)return"";const o=Date.now()-r.value.getTime();return o<5e3?"just now":o<6e4?`${Math.floor(o/1e3)}s ago`:o<36e5?`${Math.floor(o/6e4)}m ago`:r.value.toLocaleTimeString()});return(o,s)=>(f(),L("footer",qt,[m("span",Xt,[m("span",{class:z(["size-1.5 rounded-full",t(n)?"bg-status-success":"bg-status-error"])},null,2),O(" "+A(t(n)?"watching":"disconnected"),1)]),s[0]||(s[0]=m("span",{class:"h-3 w-px bg-border"},null,-1)),m("span",null,A(i.value)+" "+A(t(e)["status-bar.models"]),1),s[1]||(s[1]=m("span",{class:"h-3 w-px bg-border"},null,-1)),m("span",null,A(c.value)+" "+A(t(e)["status-bar.locales"]),1),a.value?(f(),L("span",Yt,A(a.value),1)):B("",!0)]))}}),Ft={class:"fixed bottom-0 left-0 right-0 z-50 border-t border-border bg-background"},Ut={class:"flex items-center justify-around py-2"},Gt=E({__name:"MobileNav",setup(d){const e=j("serve-ui-texts").locale("en").get(),l=Q(),n=[{icon:ke,label:e["mobile-nav.dash"],to:"/",exact:!0},{icon:ye,label:e["mobile-nav.models"],to:"/models"},{icon:Se,label:e["mobile-nav.content"],to:"/content"},{icon:xe,label:e["mobile-nav.valid"],to:"/validate"},{icon:we,label:e["mobile-nav.branch"],to:"/branches"}];function r(i){return i.exact?l.path===i.to:l.path.startsWith(i.to)}return(i,c)=>(f(),L("nav",Ft,[m("div",Ut,[(f(),L(Z,null,ne(n,a=>S(t(he),{key:a.to,to:a.to,class:z(t(H)("flex flex-col items-center gap-0.5 px-3 py-1 text-[10px]",r(a)?"text-primary":"text-muted-foreground"))},{default:g(()=>[(f(),y(be(a.icon),{class:"size-5"})),O(" "+A(a.label),1)]),_:2},1032,["to","class"])),64))])]))}}),Kt={class:"flex h-screen max-h-screen w-full max-w-480 mx-auto"},Jt={class:"flex flex-1 flex-col min-w-0"},Zt={key:1,class:"px-4 py-2 text-sm font-medium border-b flex items-center justify-between gap-4 bg-destructive text-destructive-foreground border-destructive/50"},Qt={class:"opacity-80 ml-1 text-xs"},eo={class:"flex-1 overflow-hidden pb-16 md:pb-0"},to={key:1,class:"h-full overflow-y-auto custom-scrollbar"},_o=E({__name:"AppLayout",setup(d){const e=j("serve-ui-texts").locale("en").get(),l=Q(),n=me(),r=ee(),i=C(()=>l.meta.subSidebar===!0),c=C(()=>l.meta.basePath??""),a=C(()=>l.meta.paramKey??"");return _e(o=>{if((o.type==="config:changed"||o.type==="model:changed"||o.type==="context:changed")&&(r.fetchStatus(),r.fetchCapabilities()),(o.type==="branch:created"||o.type==="branch:merged"||o.type==="branch:rejected")&&r.fetchCapabilities(),o.type==="sync:warning"&&o.branch){const s=o.branch,u=o.skippedCount??0;le.warning(`${u} file(s) skipped during sync`,{description:`Uncommitted local changes blocked the selective sync for ${s}.`,action:{label:"View details",onClick:()=>n.push(`/branches/${s}`)}})}if(o.type==="branch:merge-conflict"&&o.branch&&le.error(`Merge conflict on ${o.branch}`,{description:o.message??"Merge failed — resolve manually and retry."}),o.type==="meta:changed"&&o.modelId){const s=o.entryId?`${o.modelId}/${o.entryId}`:o.modelId;le.message(e["layout.meta-changed-title"],{description:`${s}${o.locale?` (${o.locale})`:""}`})}o.type==="file-watch:error"&&r.setFileWatchError(o.message??"File watcher stopped unexpectedly.",o.timestamp??new Date().toISOString())}),N(()=>{r.fetchStatus(),r.fetchCapabilities()}),(o,s)=>{const u=Pe("RouterLink");return f(),L("div",Kt,[S(Rt,{class:"hidden md:flex"}),m("div",Jt,[t(r).branchHealthAlarm?(f(),L("div",{key:0,class:z(["px-4 py-2 text-sm font-medium border-b flex items-center justify-between gap-4",t(r).branchHealthAlarm.level==="blocked"?"bg-destructive text-destructive-foreground border-destructive/50":"bg-amber-50 text-amber-900 border-amber-200 dark:bg-amber-950 dark:text-amber-100 dark:border-amber-900"])},[m("span",null,[m("strong",null,A(t(r).branchHealthAlarm.level==="blocked"?"Blocked:":"Warning:"),1),O(" "+A(t(r).branchHealthAlarm.message),1)]),S(u,{to:"/branches",class:"underline"},{default:g(()=>[...s[1]||(s[1]=[O("Review branches",-1)])]),_:1})],2)):B("",!0),t(r).fileWatchError?(f(),L("div",Zt,[m("span",null,[m("strong",null,A(t(e)["layout.watcher-paused-label"]),1),O(" "+A(t(r).fileWatchError.message)+" ",1),m("span",Qt,"("+A(t(e)["layout.watcher-restart-hint"])+")",1)]),m("button",{class:"underline hover:no-underline shrink-0",onClick:s[0]||(s[0]=h=>t(r).dismissFileWatchError())},A(t(e)["layout.dismiss"]),1)])):B("",!0),m("main",eo,[i.value?(f(),y(Wt,{key:0,"base-path":c.value,"param-key":a.value},{default:g(()=>[S(t(pe))]),_:1},8,["base-path","param-key"])):(f(),L("div",to,[S(t(pe))]))]),S(jt,{class:"hidden md:flex"})]),S(Gt,{class:"md:hidden"})])}}});export{_o as default};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import{c as X,a as j,o as a,b as m,e as o,f as T,m as O,u as e,i as ie,z as Z,p as c,y as L,j as t,s as u,g as v,G as q,q as i,B as s,S as xe,Z as be,F as z,x as N,L as G,h as C,r as F,X as J,C as ye,v as ke}from"./index-DL_dw3XX.js";import{u as we}from"./content-BQEzysvq.js";import{u as ze}from"./project-Dg2BVay_.js";import{a as $,_ as Ce}from"./PageHeader.vue_vue_type_script_setup_true_lang-Bln1czg7.js";import{_ as $e,C as Be,a as V}from"./AgentPromptGroup.vue_vue_type_script_setup_true_lang-Bftt9tx_.js";import{P as ce,r as De,d as Fe,_ as je,j as Pe}from"./useWatch-D4Y-epQR.js";import{_ as Ie}from"./TrustBadge.vue_vue_type_script_setup_true_lang-BRXWvOYU.js";import{_ as K,a as Me,b as qe,c as Te}from"./CollapsibleTrigger.vue_vue_type_script_setup_true_lang-B4uDtllm.js";import{_ as Ae}from"./CardContent.vue_vue_type_script_setup_true_lang-D1L2MnBU.js";import{_ as Re}from"./Separator.vue_vue_type_script_setup_true_lang-PECBq3nc.js";import{i as ue,D as Se,_ as Q,b as Y,c as ee,d as te}from"./DialogTitle.vue_vue_type_script_setup_true_lang-M4LOzTva.js";import{b as We,u as Ne}from"./useId-B-RTM02R.js";import{u as de}from"./Presence-CA3xTrht.js";import{A as Le}from"./arrow-left-D8ZjVYAI.js";import{G as se}from"./git-merge-D8Y-BwIh.js";import{G as ae}from"./git-branch-CdZMOuSP.js";import{P as Oe,M as Ge}from"./plus-Ddujj7Qx.js";import{F as Ve}from"./file-text-BiMGJckO.js";import"./shield-check-BmSBU8Ai.js";import"./getActiveElement-FUKBWQwh.js";import"./ConfigProvider-CwkmRpT5.js";/**
|
|
2
|
+
* @license lucide-vue-next v0.474.0 - ISC
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the ISC license.
|
|
5
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/const E=X("CircleCheckBigIcon",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]);/**
|
|
7
|
+
* @license lucide-vue-next v0.474.0 - ISC
|
|
8
|
+
*
|
|
9
|
+
* This source code is licensed under the ISC license.
|
|
10
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
+
*/const re=X("CircleXIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);/**
|
|
12
|
+
* @license lucide-vue-next v0.474.0 - ISC
|
|
13
|
+
*
|
|
14
|
+
* This source code is licensed under the ISC license.
|
|
15
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
+
*/const U=X("FileIcon",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}]]);var Ee=j({__name:"DialogDescription",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"p"}},setup(x){const _=x;de();const p=ue();return(h,D)=>(a(),m(e(ce),O(_,{id:e(p).descriptionId}),{default:o(()=>[T(h.$slots,"default")]),_:3},16,["id"]))}}),Ue=Ee,Xe=j({__name:"DialogTrigger",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(x){const _=x,p=ue(),{forwardRef:h,currentElement:D}=de();return p.contentId||(p.contentId=We(void 0,"reka-dialog-content")),ie(()=>{p.triggerElement.value=D.value}),(P,n)=>(a(),m(e(ce),O(_,{ref:e(h),type:P.as==="button"?"button":void 0,"aria-haspopup":"dialog","aria-expanded":e(p).open.value||!1,"aria-controls":e(p).open.value?e(p).contentId:void 0,"data-state":e(p).open.value?"open":"closed",onClick:e(p).onOpenToggle}),{default:o(()=>[T(P.$slots,"default")]),_:3},16,["type","aria-expanded","aria-controls","data-state","onClick"]))}}),Ze=Xe;const le=j({__name:"DialogDescription",props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(x){const _=x,p=De(_,"class"),h=Ne(p);return(D,P)=>(a(),m(e(Ue),O({"data-slot":"dialog-description"},e(h),{class:e(Z)("text-muted-foreground text-sm",_.class)}),{default:o(()=>[T(D.$slots,"default")]),_:3},16,["class"]))}}),ne=j({__name:"DialogFooter",props:{class:{type:[Boolean,null,String,Object,Array]},showCloseButton:{type:Boolean,default:!1}},setup(x){const _=x;return(p,h)=>(a(),c("div",{"data-slot":"dialog-footer",class:L(e(Z)("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",_.class))},[T(p.$slots,"default"),x.showCloseButton?(a(),m(e(Se),{key:0,"as-child":""},{default:o(()=>[t(e($),{variant:"outline"},{default:o(()=>[...h[0]||(h[0]=[u(" Close ",-1)])]),_:1})]),_:1})):v("",!0)],2))}}),oe=j({__name:"DialogTrigger",props:{asChild:{type:Boolean},as:{}},setup(x){const _=x;return(p,h)=>(a(),m(e(Ze),O({"data-slot":"dialog-trigger"},_),{default:o(()=>[T(p.$slots,"default")]),_:3},16))}}),He="/merge-2.svg",Je={class:"rounded bg-muted px-1.5 py-0.5 font-mono text-xs"},Ke={class:"rounded bg-muted px-1.5 py-0.5 font-mono text-xs"},Qe={class:"rounded bg-muted px-1.5 py-0.5 font-mono text-xs"},Ye={class:"px-6 py-6 space-y-4"},et={class:"text-sm"},tt={class:"flex items-start gap-3"},st={class:"flex-1 space-y-2 min-w-0"},at={class:"text-sm font-medium"},rt={class:"text-xs text-muted-foreground"},lt={key:0,class:"text-xs text-muted-foreground"},nt={key:1,class:"space-y-1 mt-1"},ot={class:"text-xs font-medium flex items-center gap-2"},it={class:"space-y-1 font-mono text-xs"},ct={key:2,class:"text-xs text-muted-foreground italic"},ut={key:2,class:"rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-900 dark:bg-amber-950"},dt={class:"flex items-start gap-3"},pt={class:"flex-1 space-y-2"},ft={class:"text-sm font-medium text-amber-900 dark:text-amber-100"},mt={class:"mt-2 space-y-1 font-mono text-xs text-amber-900/80 dark:text-amber-100/80"},ht={key:3,class:"flex justify-center py-12"},vt={class:"flex items-center gap-4 flex-wrap"},_t={class:"flex items-center gap-2"},gt={class:"text-xs font-mono bg-muted px-2 py-1 rounded"},xt={class:"flex items-center gap-2"},bt={class:"text-xs font-mono bg-primary/10 text-primary px-2 py-1 rounded"},yt={class:"ml-auto flex items-center gap-3 text-xs text-muted-foreground"},kt={class:"flex items-center gap-1"},wt={class:"flex items-center gap-1 text-status-success"},zt={class:"flex items-center gap-1 text-status-error"},Ct={key:0,class:"rounded-lg border border-border bg-muted/30 p-4 font-mono text-xs text-muted-foreground overflow-x-auto whitespace-pre-wrap"},$t={key:1,class:"space-y-3"},Bt={class:"font-mono text-xs text-foreground flex-1 truncate"},Dt={class:"flex items-center gap-2 text-xs shrink-0"},Ft={key:0,class:"text-status-success font-mono"},jt={key:1,class:"text-status-error font-mono"},Pt={class:"max-h-96 overflow-auto custom-scrollbar"},It={class:"p-0 m-0"},Mt={class:"block text-xs leading-5"},qt={key:2,class:"flex flex-col items-center py-12 text-center"},Tt={class:"text-sm text-muted-foreground"},as=j({__name:"BranchDetailPage",setup(x){const _=ke(),p=ye(),h=we(),D=ze(),P=Pe(),n=Fe("serve-ui-texts").locale("en").get(),y=C(()=>decodeURIComponent(_.params.branchName)),b=C(()=>h.branchDiff),k=F(!1),w=F(null),A=F(!1),R=F(!1),B=F(null);async function pe(){try{const g=encodeURIComponent(y.value),r=await P.get(`/branches/${g}/sync-status`);B.value=r.warning}catch{B.value=null}}const d=F(null);async function fe(){d.value=await D.fetchMergePreview(y.value)}const S=C(()=>{const r=y.value.replace("contentrain/","").split("/");return{scope:r[0]??"unknown",target:r.length>2?r.slice(1,-1).join("/"):r[1]??"",timestamp:r.length>2?r[r.length-1]??"":""}}),I=C(()=>{var W;if(!((W=b.value)!=null&&W.diff))return[];const g=b.value.diff,r=[];let l=null;for(const f of g.split(`
|
|
17
|
+
`))if(f.startsWith("diff --git")){l&&r.push(l);const M=f.match(/b\/(.+)$/);l={path:(M==null?void 0:M[1])??"unknown",additions:0,deletions:0,lines:[]},l.lines.push({text:f,type:"header"})}else l&&(f.startsWith("+++")||f.startsWith("---")||f.startsWith("index ")?l.lines.push({text:f,type:"header"}):f.startsWith("@@")?l.lines.push({text:f,type:"hunk"}):f.startsWith("+")?(l.additions++,l.lines.push({text:f,type:"add"})):f.startsWith("-")?(l.deletions++,l.lines.push({text:f,type:"remove"})):l.lines.push({text:f,type:"context"}));return l&&r.push(l),r}),me=C(()=>I.value.reduce((g,r)=>g+r.additions,0)),he=C(()=>I.value.reduce((g,r)=>g+r.deletions,0)),ve=C(()=>y.value.includes("normalize")),H=C(()=>{var r;if(!((r=b.value)!=null&&r.stat))return 0;const g=b.value.stat.match(/(\d+)\s+files?\s+changed/);return g?Number.parseInt(g[1],10):I.value.length});async function _e(){k.value=!0,w.value=null,A.value=!1;try{await h.approveBranch(y.value),w.value={type:"success",message:n["branch-detail.branch-merged-successfully"]},q.success(n["branch-detail.branch-merged-successfully"]),setTimeout(()=>p.push("/branches"),1500)}catch{w.value={type:"error",message:n["branch-detail.failed-to-merge-branch"]},q.error(n["branch-detail.failed-to-merge-branch"])}finally{k.value=!1}}async function ge(){k.value=!0,w.value=null,R.value=!1;try{await h.rejectBranch(y.value),w.value={type:"success",message:n["branch-detail.branch-rejected-and-deleted"]},q.success(n["branch-detail.branch-rejected-and-deleted"]),setTimeout(()=>p.push("/branches"),1500)}catch{w.value={type:"error",message:n["branch-detail.failed-to-delete-branch"]},q.error(n["branch-detail.failed-to-delete-branch"])}finally{k.value=!1}}return ie(async()=>{try{await h.fetchBranchDiff(y.value)}catch{q.error("Failed to load branch data.")}pe(),fe()}),(g,r)=>(a(),c("div",null,[t(Ce,{title:S.value.target||S.value.scope,description:e(n)["branch-detail.branch-review-and-diff"]},{actions:o(()=>[t(e($),{variant:"ghost",size:"sm",onClick:r[0]||(r[0]=l=>e(p).push("/branches"))},{default:o(()=>[t(e(Le),{class:"mr-1.5 size-4"}),u(" "+s(e(n)["branch-detail.back"]),1)]),_:1}),t(e(Q),{open:A.value,"onUpdate:open":r[2]||(r[2]=l=>A.value=l)},{default:o(()=>[t(e(oe),{"as-child":""},{default:o(()=>[t(e($),{variant:"default",size:"sm",disabled:k.value||!b.value},{default:o(()=>[t(e(se),{class:"mr-1.5 size-4"}),u(" "+s(e(n)["branch-detail.approve-merge"]),1)]),_:1},8,["disabled"])]),_:1}),t(e(Y),null,{default:o(()=>[t(e(ee),null,{default:o(()=>[t(e(te),null,{default:o(()=>[u(s(e(n)["branch-detail.confirm-merge"]),1)]),_:1}),t(e(le),null,{default:o(()=>{var l;return[u(s(e(n)["branch-detail.this-will-merge"])+" ",1),i("code",Je,s(y.value),1),u(" "+s(e(n)["branch-detail.into"])+" ",1),i("code",Ke,s(((l=b.value)==null?void 0:l.base)??"main"),1),u(" "+s(e(n)["branch-detail.and-delete-the-source"]),1)]}),_:1})]),_:1}),t(e(ne),null,{default:o(()=>[t(e($),{variant:"outline",size:"sm",onClick:r[1]||(r[1]=l=>A.value=!1)},{default:o(()=>[u(s(e(n)["branch-detail.cancel"]),1)]),_:1}),t(e($),{variant:"default",size:"sm",disabled:k.value,onClick:_e},{default:o(()=>[k.value?(a(),m(e(G),{key:0,class:"mr-1.5 size-4 animate-spin"})):(a(),m(e(Be),{key:1,class:"mr-1.5 size-4"})),u(" "+s(e(n)["branch-detail.merge"]),1)]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"]),t(e(Q),{open:R.value,"onUpdate:open":r[4]||(r[4]=l=>R.value=l)},{default:o(()=>[t(e(oe),{"as-child":""},{default:o(()=>[t(e($),{variant:"destructive",size:"sm",disabled:k.value||!b.value},{default:o(()=>[t(e(J),{class:"mr-1.5 size-4"}),u(" "+s(e(n)["branch-detail.reject"]),1)]),_:1},8,["disabled"])]),_:1}),t(e(Y),null,{default:o(()=>[t(e(ee),null,{default:o(()=>[t(e(te),null,{default:o(()=>[u(s(e(n)["branch-detail.confirm-rejection"]),1)]),_:1}),t(e(le),null,{default:o(()=>[u(s(e(n)["branch-detail.this-will-permanently-delete"])+" ",1),i("code",Qe,s(y.value),1),r[5]||(r[5]=u(". All changes in this branch will be lost. ",-1))]),_:1})]),_:1}),t(e(ne),null,{default:o(()=>[t(e($),{variant:"outline",size:"sm",onClick:r[3]||(r[3]=l=>R.value=!1)},{default:o(()=>[u(s(e(n)["branch-detail.cancel"]),1)]),_:1}),t(e($),{variant:"destructive",size:"sm",disabled:k.value,onClick:ge},{default:o(()=>[k.value?(a(),m(e(G),{key:0,class:"mr-1.5 size-4 animate-spin"})):(a(),m(e(J),{key:1,class:"mr-1.5 size-4"})),u(" "+s(e(n)["branch-detail.delete-branch"]),1)]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"])]),_:1},8,["title","description"]),i("div",Ye,[w.value?(a(),c("div",{key:0,class:L(e(Z)("flex items-center gap-3 rounded-lg border p-4",w.value.type==="success"?"border-status-success/30 bg-status-success/5":"border-status-error/30 bg-status-error/5"))},[w.value.type==="success"?(a(),m(e(E),{key:0,class:"size-5 text-status-success shrink-0"})):(a(),m(e(re),{key:1,class:"size-5 text-status-error shrink-0"})),i("span",et,s(w.value.message),1)],2)):v("",!0),d.value?(a(),c("div",{key:1,class:L(["rounded-lg border p-4",d.value.alreadyMerged?"border-status-info/30 bg-status-info/5":d.value.conflicts&&d.value.conflicts.length>0?"border-status-error/30 bg-status-error/5":d.value.canFastForward?"border-status-success/30 bg-status-success/5":"border-status-warning/30 bg-status-warning/5"])},[i("div",tt,[d.value.alreadyMerged?(a(),m(e(E),{key:0,class:"size-5 shrink-0 text-status-info"})):d.value.canFastForward&&(!d.value.conflicts||d.value.conflicts.length===0)?(a(),m(e(E),{key:1,class:"size-5 shrink-0 text-status-success"})):d.value.conflicts&&d.value.conflicts.length>0?(a(),m(e(xe),{key:2,class:"size-5 shrink-0 text-status-error"})):(a(),m(e(be),{key:3,class:"size-5 shrink-0 text-status-warning"})),i("div",st,[i("p",at,s(e(n)["branch-detail.preview-title"]),1),i("p",rt,[d.value.alreadyMerged?(a(),c(z,{key:0},[u(s(e(n)["branch-detail.preview-already-merged"]),1)],64)):d.value.canFastForward&&(!d.value.conflicts||d.value.conflicts.length===0)?(a(),c(z,{key:1},[u(s(e(n)["branch-detail.preview-ff-clean"]),1)],64)):(a(),c(z,{key:2},[u(s(e(n)["branch-detail.preview-requires-3way"]),1)],64))]),!d.value.alreadyMerged&&d.value.filesChanged>0?(a(),c("p",lt,s(d.value.filesChanged)+" "+s(e(n)["branch-detail.preview-files-changed-suffix"]),1)):v("",!0),d.value.conflicts&&d.value.conflicts.length>0?(a(),c("div",nt,[i("p",ot,[u(s(e(n)["branch-detail.preview-conflicts-heading"])+" ",1),t(e(je),{variant:"outline",class:"text-[10px] border-status-error/50 text-status-error"},{default:o(()=>[u(s(d.value.conflicts.length),1)]),_:1})]),i("ul",it,[(a(!0),c(z,null,N(d.value.conflicts,l=>(a(),c("li",{key:l,class:"flex items-center gap-1.5"},[t(e(U),{class:"size-3 shrink-0 text-status-error"}),u(" "+s(l),1)]))),128))])])):v("",!0),d.value.conflicts===null?(a(),c("p",ct,s(e(n)["branch-detail.preview-check-unavailable"]),1)):v("",!0)])])],2)):v("",!0),B.value&&B.value.skipped.length>0?(a(),c("div",ut,[i("div",dt,[t(e(re),{class:"size-5 shrink-0 text-amber-600 dark:text-amber-400"}),i("div",pt,[i("p",ft,s(B.value.skipped.length)+" file"+s(B.value.skipped.length===1?"":"s")+" skipped during selective sync ",1),r[6]||(r[6]=i("p",{class:"text-xs text-amber-800 dark:text-amber-200"}," The merge landed in git, but the developer's working tree has uncommitted changes that would have been overwritten. Review and commit or discard these files, then run the sync again manually if needed. ",-1)),i("ul",mt,[(a(!0),c(z,null,N(B.value.skipped,l=>(a(),c("li",{key:l,class:"flex items-center gap-1.5"},[t(e(U),{class:"size-3 shrink-0"}),u(" "+s(l),1)]))),128))])])])])):v("",!0),e(h).loading?(a(),c("div",ht,[t(e(G),{class:"size-6 animate-spin text-primary"})])):b.value?(a(),c(z,{key:4},[t(e(K),null,{default:o(()=>[t(e(Ae),{class:"p-4"},{default:o(()=>[i("div",vt,[i("div",_t,[t(e(ae),{class:"size-4 text-muted-foreground"}),i("code",gt,s(b.value.base),1)]),t(e(se),{class:"size-4 text-primary"}),i("div",xt,[t(e(ae),{class:"size-4 text-primary"}),i("code",bt,s(y.value.replace("contentrain/","")),1)]),i("div",yt,[t(e(Ie),{status:S.value.scope==="normalize"?"pending":"partial",reason:S.value.scope==="normalize"?"Review required":void 0},null,8,["status","reason"]),i("span",kt,[t(e(U),{class:"size-3"}),u(" "+s(H.value)+" "+s(e(n)["branch-detail.file"])+s(H.value!==1?"s":""),1)]),i("span",wt,[t(e(Oe),{class:"size-3"}),u(" "+s(me.value),1)]),i("span",zt,[t(e(Ge),{class:"size-3"}),u(" "+s(he.value),1)])])])]),_:1})]),_:1}),b.value.stat?(a(),c("pre",Ct,s(b.value.stat),1)):v("",!0),I.value.length>0?(a(),c("div",$t,[(a(!0),c(z,null,N(I.value,(l,W)=>(a(),m(e(Te),{key:W,"default-open":!0},{default:o(()=>[t(e(K),{class:"overflow-hidden"},{default:o(()=>[t(e(Me),{class:"flex w-full items-center gap-3 p-3 hover:bg-muted/50 transition-colors text-left"},{default:o(()=>[t(e(Ve),{class:"size-4 text-muted-foreground shrink-0"}),i("span",Bt,s(l.path),1),i("div",Dt,[l.additions>0?(a(),c("span",Ft,"+"+s(l.additions),1)):v("",!0),l.deletions>0?(a(),c("span",jt,"-"+s(l.deletions),1)):v("",!0)])]),_:2},1024),t(e(qe),null,{default:o(()=>[t(e(Re)),i("div",Pt,[i("pre",It,[i("code",Mt,[(a(!0),c(z,null,N(l.lines,(f,M)=>(a(),c(z,{key:M},[f.type!=="header"?(a(),c("span",{key:0,class:L([{"bg-status-success/10 text-status-success":f.type==="add","bg-status-error/10 text-status-error":f.type==="remove","bg-primary/5 text-primary font-medium":f.type==="hunk","text-muted-foreground":f.type==="context"},"block px-4 font-mono"])},s(f.text),3)):v("",!0)],64))),128))])])])]),_:2},1024)]),_:2},1024)]),_:2},1024))),128)),t($e,{title:e(n)["branch-detail.ask-your-agent"],class:"mt-4"},{default:o(()=>[t(V,{prompt:e(n)["branch-detail.review-the-changes-on"]},null,8,["prompt"]),t(V,{prompt:e(n)["branch-detail.check-the-content-quality"]},null,8,["prompt"]),ve.value?(a(),m(V,{key:0,prompt:e(n)["branch-detail.continue-with-phase-2"]},null,8,["prompt"])):v("",!0)]),_:1},8,["title"])])):(a(),c("div",qt,[r[7]||(r[7]=i("img",{src:He,alt:"",class:"empty-illustration mb-4"},null,-1)),i("p",Tt,s(e(n)["branch-detail.no-diff-available-for"]),1)]))],64)):v("",!0)])]))}});export{as as default};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{c as he,a as I,t as J,o as d,b as C,e as c,j as p,u as e,f as k,r as $,i as
|
|
1
|
+
import{c as he,a as I,t as J,o as d,b as C,e as c,j as p,u as e,f as k,r as $,i as Q,l as _e,h as T,M as ye,V as xe,N as we,n as Ce,g as Y,Q as Se,I as Te,m as O,z as F,J as Ie,K as ke,p as S,q as m,G as Be,L as K,s as R,B as w,F as N,x as U,y as z,A as X,C as Fe}from"./index-DL_dw3XX.js";import{u as qe}from"./content-BQEzysvq.js";import{P as V,r as D,d as Re,u as $e,_ as G}from"./useWatch-D4Y-epQR.js";import{_ as Ve,a as Z}from"./PageHeader.vue_vue_type_script_setup_true_lang-Bln1czg7.js";import{_ as Ae}from"./StudioHint.vue_vue_type_script_setup_true_lang-DYTEoyjw.js";import{_ as ee,a as E}from"./AgentPromptGroup.vue_vue_type_script_setup_true_lang-Bftt9tx_.js";import{b as le,a as Me,u as ze}from"./useId-B-RTM02R.js";import{f as ie,c as ue,u as L,P as Pe}from"./Presence-CA3xTrht.js";import{u as de}from"./useDirection-DfPL7a9d.js";import{u as ce,R as Ee}from"./Collection-9URFko-Y.js";import{g as te}from"./getActiveElement-FUKBWQwh.js";import{G as H}from"./git-branch-CdZMOuSP.js";import{C as Oe}from"./chevron-right-SpdM5LBc.js";import{S as De}from"./shield-check-BmSBU8Ai.js";import{S as Le}from"./scan-search-CsPYGmEs.js";import{D as je}from"./database-U6JU8oc9.js";import{F as ae}from"./file-text-BiMGJckO.js";import{S as se}from"./settings-IQvevsKM.js";import{L as Ke,T as Ne}from"./trash-2-CNTkluuz.js";import{G as Ue}from"./git-merge-D8Y-BwIh.js";import{B as Ge}from"./box-BoGMZDZR.js";import"./ConfigProvider-CwkmRpT5.js";/**
|
|
2
2
|
* @license lucide-vue-next v0.474.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
5
5
|
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const oe=he("HistoryIcon",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]),Ge="rovingFocusGroup.onEntryFocus",Ye={bubbles:!1,cancelable:!0},Je={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function We(r,t){return t!=="rtl"?r:r==="ArrowLeft"?"ArrowRight":r==="ArrowRight"?"ArrowLeft":r}function Qe(r,t,o){const a=We(r.key,o);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(a))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(a)))return Je[a]}function pe(r,t=!1){const o=te();for(const a of r)if(a===o||(a.focus({preventScroll:t}),te()!==o))return}function Xe(r,t){return r.map((o,a)=>r[(t+a)%r.length])}const[Ze,et]=ue("RovingFocusGroup");var tt=I({__name:"RovingFocusGroup",props:{orientation:{type:String,required:!1,default:void 0},dir:{type:String,required:!1},loop:{type:Boolean,required:!1,default:!1},currentTabStopId:{type:[String,null],required:!1},defaultCurrentTabStopId:{type:String,required:!1},preventScrollOnEntryFocus:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["entryFocus","update:currentTabStopId"],setup(r,{expose:t,emit:o}){const a=r,s=o,{loop:h,orientation:_,dir:g}=J(a),b=de(g),l=ie(a,"currentTabStopId",s,{defaultValue:a.defaultCurrentTabStopId,passive:a.currentTabStopId===void 0}),i=$(!1),u=$(!1),x=$(0),{getItems:P,CollectionSlot:q}=ce({isProvider:!0});function j(f){const v=!u.value;if(f.currentTarget&&f.target===f.currentTarget&&v&&!i.value){const n=new CustomEvent(Ge,Ye);if(f.currentTarget.dispatchEvent(n),s("entryFocus",n),!n.defaultPrevented){const y=P().map(B=>B.ref).filter(B=>B.dataset.disabled!==""),M=y.find(B=>B.getAttribute("data-active")===""),ge=y.find(B=>B.getAttribute("data-highlighted")===""),ve=y.find(B=>B.id===l.value),be=[M,ge,ve,...y].filter(Boolean);pe(be,a.preventScrollOnEntryFocus)}}u.value=!1}function V(){setTimeout(()=>{u.value=!1},1)}return t({getItems:P}),et({loop:h,dir:b,orientation:_,currentTabStopId:l,onItemFocus:f=>{l.value=f},onItemShiftTab:()=>{i.value=!0},onFocusableItemAdd:()=>{x.value++},onFocusableItemRemove:()=>{x.value--}}),(f,v)=>(d(),C(e(q),null,{default:c(()=>[p(e(A),{tabindex:i.value||x.value===0?-1:0,"data-orientation":e(_),as:f.as,"as-child":f.asChild,dir:e(b),style:{outline:"none"},onMousedown:v[0]||(v[0]=n=>u.value=!0),onMouseup:V,onFocus:j,onBlur:v[1]||(v[1]=n=>i.value=!1)},{default:c(()=>[k(f.$slots,"default")]),_:3},8,["tabindex","data-orientation","as","as-child","dir"])]),_:3}))}}),at=tt,st=I({__name:"RovingFocusItem",props:{tabStopId:{type:String,required:!1},focusable:{type:Boolean,required:!1,default:!0},active:{type:Boolean,required:!1},allowShiftKey:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(r){const t=r,o=Ze(),a=le(),s=T(()=>t.tabStopId||a),h=T(()=>o.currentTabStopId.value===s.value),{getItems:_,CollectionItem:g}=ce();W(()=>{t.focusable&&o.onFocusableItemAdd()}),_e(()=>{t.focusable&&o.onFocusableItemRemove()});function b(l){if(l.key==="Tab"&&l.shiftKey){o.onItemShiftTab();return}if(l.target!==l.currentTarget)return;const i=Qe(l,o.orientation.value,o.dir.value);if(i!==void 0){if(l.metaKey||l.ctrlKey||l.altKey||!t.allowShiftKey&&l.shiftKey)return;l.preventDefault();let u=[..._().map(x=>x.ref).filter(x=>x.dataset.disabled!=="")];if(i==="last")u.reverse();else if(i==="prev"||i==="next"){i==="prev"&&u.reverse();const x=u.indexOf(l.currentTarget);u=o.loop.value?Xe(u,x+1):u.slice(x+1)}ye(()=>pe(u))}}return(l,i)=>(d(),C(e(g),null,{default:c(()=>[p(e(A),{tabindex:h.value?0:-1,"data-orientation":e(o).orientation.value,"data-active":l.active?"":void 0,"data-disabled":l.focusable?void 0:"",as:l.as,"as-child":l.asChild,onMousedown:i[0]||(i[0]=u=>{l.focusable?e(o).onItemFocus(s.value):u.preventDefault()}),onFocus:i[1]||(i[1]=u=>e(o).onItemFocus(s.value)),onKeydown:b},{default:c(()=>[k(l.$slots,"default")]),_:3},8,["tabindex","data-orientation","data-active","data-disabled","as","as-child"])]),_:3}))}}),ot=st;const[Q,rt]=ue("TabsRoot");var nt=I({__name:"TabsRoot",props:{defaultValue:{type:null,required:!1},orientation:{type:String,required:!1,default:"horizontal"},dir:{type:String,required:!1},activationMode:{type:String,required:!1,default:"automatic"},modelValue:{type:null,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["update:modelValue"],setup(r,{emit:t}){const o=r,a=t,{orientation:s,unmountOnHide:h,dir:_}=J(o),g=de(_);L();const b=ie(o,"modelValue",a,{defaultValue:o.defaultValue,passive:o.modelValue===void 0}),l=$(),i=xe(new Set);return rt({modelValue:b,changeModelValue:u=>{b.value=u},orientation:s,dir:g,unmountOnHide:h,activationMode:o.activationMode,baseId:le(void 0,"reka-tabs"),tabsList:l,contentIds:i,registerContent:u=>{i.value=new Set([...i.value,u])},unregisterContent:u=>{const x=new Set(i.value);x.delete(u),i.value=x}}),(u,x)=>(d(),C(e(A),{dir:e(g),"data-orientation":e(s),"as-child":u.asChild,as:u.as},{default:c(()=>[k(u.$slots,"default",{modelValue:e(b)})]),_:3},8,["dir","data-orientation","as-child","as"]))}}),lt=nt;function fe(r,t){return`${r}-trigger-${t}`}function me(r,t){return`${r}-content-${t}`}var it=I({__name:"TabsContent",props:{value:{type:[String,Number],required:!0},forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(r){const t=r,{forwardRef:o}=L(),a=Q(),s=T(()=>fe(a.baseId,t.value)),h=T(()=>me(a.baseId,t.value)),_=T(()=>t.value===a.modelValue.value),g=$(_.value);return W(()=>{a.registerContent(t.value),requestAnimationFrame(()=>{g.value=!1})}),we(()=>{a.unregisterContent(t.value)}),(b,l)=>(d(),C(e(Pe),{present:b.forceMount||_.value,"force-mount":""},{default:c(({present:i})=>[p(e(A),{id:h.value,ref:e(o),"as-child":b.asChild,as:b.as,role:"tabpanel","data-state":_.value?"active":"inactive","data-orientation":e(a).orientation.value,"aria-labelledby":s.value,hidden:!i,tabindex:"0",style:Ce({animationDuration:g.value?"0s":void 0})},{default:c(()=>[!e(a).unmountOnHide.value||i?k(b.$slots,"default",{key:0}):Y("v-if",!0)]),_:2},1032,["id","as-child","as","data-state","data-orientation","aria-labelledby","hidden","style"])]),_:3},8,["present"]))}}),ut=it,dt=I({__name:"TabsList",props:{loop:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(r){const t=r,{loop:o}=J(t),{forwardRef:a,currentElement:s}=L(),h=Q();return h.tabsList=s,(_,g)=>(d(),C(e(at),{"as-child":"",orientation:e(h).orientation.value,dir:e(h).dir.value,loop:e(o)},{default:c(()=>[p(e(A),{ref:e(a),role:"tablist","as-child":_.asChild,as:_.as,"aria-orientation":e(h).orientation.value},{default:c(()=>[k(_.$slots,"default")]),_:3},8,["as-child","as","aria-orientation"])]),_:3},8,["orientation","dir","loop"]))}}),ct=dt,pt=I({__name:"TabsTrigger",props:{value:{type:[String,Number],required:!0},disabled:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const t=r,{forwardRef:o}=L(),a=Q(),s=T(()=>fe(a.baseId,t.value)),h=T(()=>a.contentIds.value.has(t.value)?me(a.baseId,t.value):void 0),_=T(()=>t.value===a.modelValue.value);return(g,b)=>(d(),C(e(ot),{"as-child":"",focusable:!g.disabled,active:_.value},{default:c(()=>[p(e(A),{id:s.value,ref:e(o),role:"tab",type:g.as==="button"?"button":void 0,as:g.as,"as-child":g.asChild,"aria-selected":_.value?"true":"false","aria-controls":h.value,"data-state":_.value?"active":"inactive",disabled:g.disabled,"data-disabled":g.disabled?"":void 0,"data-orientation":e(a).orientation.value,onMousedown:b[0]||(b[0]=Te(l=>{!g.disabled&&l.ctrlKey===!1?e(a).changeModelValue(g.value):l.preventDefault()},["left"])),onKeydown:b[1]||(b[1]=Se(l=>e(a).changeModelValue(g.value),["enter","space"])),onFocus:b[2]||(b[2]=()=>{const l=e(a).activationMode!=="manual";!_.value&&!g.disabled&&l&&e(a).changeModelValue(g.value)})},{default:c(()=>[k(g.$slots,"default")]),_:3},8,["id","type","as","as-child","aria-selected","aria-controls","data-state","disabled","data-disabled","data-orientation"])]),_:3},8,["focusable","active"]))}}),ft=pt;const mt="/merge-1.svg",gt=I({__name:"Tabs",props:{defaultValue:{},orientation:{},dir:{},activationMode:{},modelValue:{},unmountOnHide:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},emits:["update:modelValue"],setup(r,{emit:t}){const o=r,a=t,s=D(o,"class"),h=Me(s,a);return(_,g)=>(d(),C(e(lt),O({"data-slot":"tabs"},e(h),{class:e(F)("flex flex-col gap-2",o.class)}),{default:c(b=>[k(_.$slots,"default",Ie(ke(b)))]),_:3},16,["class"]))}}),re=I({__name:"TabsContent",props:{value:{},forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(r){const t=r,o=D(t,"class");return(a,s)=>(d(),C(e(ut),O({"data-slot":"tabs-content",class:e(F)("flex-1 outline-none",t.class)},e(o)),{default:c(()=>[k(a.$slots,"default")]),_:3},16,["class"]))}}),vt=I({__name:"TabsList",props:{loop:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(r){const t=r,o=D(t,"class");return(a,s)=>(d(),C(e(ct),O({"data-slot":"tabs-list"},e(o),{class:e(F)("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",t.class)}),{default:c(()=>[k(a.$slots,"default")]),_:3},16,["class"]))}}),ne=I({__name:"TabsTrigger",props:{value:{},disabled:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(r){const t=r,o=D(t,"class"),a=ze(o);return(s,h)=>(d(),C(e(ft),O({"data-slot":"tabs-trigger",class:e(F)("data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t.class)},e(a)),{default:c(()=>[k(s.$slots,"default")]),_:3},16,["class"]))}}),bt={class:"px-6 py-6"},ht={key:0,class:"flex justify-center py-12"},_t={key:1,class:"flex flex-col items-center py-16 text-center"},yt={class:"text-lg font-semibold"},xt={class:"mt-2 max-w-sm text-sm text-muted-foreground"},wt={key:2,class:"space-y-2"},Ct={class:"flex-1 min-w-0"},St={class:"flex items-center gap-2 flex-wrap"},Tt={class:"font-mono text-sm font-medium text-foreground truncate"},It={class:"font-mono text-xs text-muted-foreground truncate"},kt={key:0,class:"flex justify-center py-12"},Bt={key:1,class:"flex flex-col items-center py-16 text-center"},Ft={class:"text-lg font-semibold"},qt={class:"mt-2 text-sm text-muted-foreground"},Rt={key:2,class:"space-y-8"},$t={class:"sticky top-0 z-10 mb-3 flex items-center gap-2 bg-background/95 backdrop-blur py-1"},At={class:"shrink-0 text-xs font-medium text-muted-foreground"},Vt={class:"relative ml-5 border-l-2 border-border pl-6 space-y-4"},Mt={class:"rounded-lg border border-border bg-card p-3"},zt={class:"flex items-start gap-2"},Pt={class:"flex-1 min-w-0"},Et={class:"flex items-center gap-2 flex-wrap"},Ot={key:0,class:"font-mono text-xs font-medium text-foreground truncate"},Dt={class:"mt-1 text-xs text-muted-foreground truncate"},Lt={class:"flex flex-col items-end gap-0.5 shrink-0"},jt={class:"text-[10px] text-muted-foreground"},Kt={class:"font-mono text-[10px] text-muted-foreground/50"},Ut={class:"mt-1.5 flex items-center gap-2 text-[10px] text-muted-foreground"},ma=I({__name:"BranchesPage",setup(r){const t=qe(),o=Fe(),a=$("pending"),s=Re("serve-ui-texts").locale("en").get(),h=T(()=>t.branches);function _(f){const n=f.name.replace("contentrain/","").split("/");return{name:f.name,scope:n[0]??"unknown",target:n.length>2?n.slice(1,-1).join("/"):n[1]??"",timestamp:n.length>2?n[n.length-1]??"":"",current:f.current}}const g=T(()=>h.value.map(_)),b={content:{icon:ae,color:"text-primary",bg:"bg-primary/10",label:s["branches.content"]},model:{icon:je,color:"text-status-info",bg:"bg-status-info/10",label:s["branches.model"]},normalize:{icon:Le,color:"text-status-warning",bg:"bg-status-warning/10",label:s["branches.normalize"]},validate:{icon:De,color:"text-status-success",bg:"bg-status-success/10",label:s["branches.validate"]}},l={icon:G,color:"text-muted-foreground",bg:"bg-muted",label:s["branches.branch"]};function i(f){return b[f]??l}const u=T(()=>t.history),x={model_create:{icon:Ne,color:"text-status-info",bg:"bg-status-info/10",label:s["branches.model-created"]},model_update:{icon:se,color:"text-status-info",bg:"bg-status-info/10",label:s["branches.model-updated"]},content_save:{icon:ae,color:"text-primary",bg:"bg-primary/10",label:s["branches.content-saved"]},delete:{icon:Ue,color:"text-status-error",bg:"bg-status-error/10",label:s["branches.deleted"]},merge:{icon:He,color:"text-status-success",bg:"bg-status-success/10",label:s["branches.merged"]},context_update:{icon:Ke,color:"text-muted-foreground",bg:"bg-muted",label:"Context"},operation:{icon:se,color:"text-muted-foreground",bg:"bg-muted",label:s["branches.operation"]}},P={icon:G,color:"text-muted-foreground",bg:"bg-muted",label:"Other"};function q(f){return x[f]??P}const j=T(()=>{const f=[];let v="";for(const n of u.value){const M=new Date(n.date).toLocaleDateString("en-US",{month:"long",day:"numeric",year:"numeric"});M!==v&&(v=M,f.push({date:M,entries:[]})),f[f.length-1].entries.push(n)}return f});async function V(){try{await Promise.all([t.fetchBranches(),t.fetchHistory()])}catch{Be.error("Failed to load branches or history")}}return W(()=>{V()}),$e(f=>{(f.type==="branch:created"||f.type==="branch:merged")&&V()}),(f,v)=>(d(),S("div",null,[p(Ae,{title:e(s)["branches.branches-history"],description:e(s)["branches.review-pending-changes-and"]},{actions:c(()=>[p(e(Z),{variant:"outline",size:"sm",disabled:e(t).loading,onClick:v[0]||(v[0]=n=>V())},{default:c(()=>[e(t).loading?(d(),C(e(K),{key:0,class:"size-4 animate-spin"})):(d(),C(e(Ee),{key:1,class:"size-4"})),R(" "+w(e(s)["branches.refresh"]),1)]),_:1},8,["disabled"])]),_:1},8,["title","description"]),m("div",bt,[p(e(gt),{modelValue:a.value,"onUpdate:modelValue":v[1]||(v[1]=n=>a.value=n),class:"w-full"},{default:c(()=>[p(e(vt),{class:"mb-6"},{default:c(()=>[p(e(ne),{value:"pending",class:"gap-1.5"},{default:c(()=>[p(e(G),{class:"size-3.5"}),v[2]||(v[2]=R(" Pending ",-1)),h.value.length>0?(d(),C(e(N),{key:0,variant:"secondary",class:"ml-1 h-5 px-1.5 text-[10px]"},{default:c(()=>[R(w(h.value.length),1)]),_:1})):Y("",!0)]),_:1}),p(e(ne),{value:"history",class:"gap-1.5"},{default:c(()=>[p(e(oe),{class:"size-3.5"}),v[3]||(v[3]=R(" History ",-1))]),_:1})]),_:1}),p(e(re),{value:"pending"},{default:c(()=>[e(t).loading&&h.value.length===0?(d(),S("div",ht,[p(e(K),{class:"size-6 animate-spin text-primary"})])):h.value.length===0?(d(),S("div",_t,[v[4]||(v[4]=m("img",{src:mt,alt:"",class:"empty-illustration mb-6"},null,-1)),m("h2",yt,w(e(s)["branches.no-pending-branches"]),1),m("p",xt,w(e(s)["branches.aigenerated-changes-from-your"]),1),p(ee,{title:e(s)["branches.try-asking-your-ai"],class:"mt-6 w-full max-w-md"},{default:c(()=>[p(E,{prompt:e(s)["branches.create-a-new-content"]},null,8,["prompt"]),p(E,{prompt:e(s)["branches.normalize-my-project-extract"]},null,8,["prompt"]),p(E,{prompt:e(s)["branches.add-sample-content-to"]},null,8,["prompt"])]),_:1},8,["title"])])):(d(),S("div",wt,[(d(!0),S(U,null,H(g.value,n=>(d(),C(e(Z),{key:n.name,variant:"ghost",class:"group flex w-full h-auto items-center gap-4 rounded-xl border border-border bg-card p-4 text-left transition-all hover:border-primary/30 hover:shadow-sm",onClick:y=>e(o).push(`/branches/${encodeURIComponent(n.name)}`)},{default:c(()=>[m("div",{class:z(e(F)("flex size-10 items-center justify-center rounded-lg",i(n.scope).bg))},[(d(),C(X(i(n.scope).icon),{class:z(e(F)("size-5",i(n.scope).color))},null,8,["class"]))],2),m("div",Ct,[m("div",St,[m("span",Tt,w(n.target||n.scope),1)]),m("span",It,w(n.name),1)]),p(e(N),{class:z([e(F)(i(n.scope).bg,i(n.scope).color),"text-[10px] uppercase shrink-0"])},{default:c(()=>[R(w(i(n.scope).label),1)]),_:2},1032,["class"]),p(e(Oe),{class:"size-4 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity shrink-0"})]),_:2},1032,["onClick"]))),128))]))]),_:1}),p(e(re),{value:"history"},{default:c(()=>[e(t).loading&&u.value.length===0?(d(),S("div",kt,[p(e(K),{class:"size-6 animate-spin text-primary"})])):u.value.length===0?(d(),S("div",Bt,[p(e(oe),{class:"mb-4 size-12 text-muted-foreground/30"}),m("h2",Ft,w(e(s)["branches.no-history-yet"]),1),m("p",qt,w(e(s)["branches.contentrain-operations-will-appear"]),1),p(ee,{title:e(s)["branches.get-started"],class:"mt-6 w-full max-w-md"},{default:c(()=>[p(E,{prompt:e(s)["branches.initialize-my-contentrain-project"]},null,8,["prompt"])]),_:1},8,["title"])])):(d(),S("div",Rt,[(d(!0),S(U,null,H(j.value,n=>(d(),S("section",{key:n.date},[m("div",$t,[v[5]||(v[5]=m("div",{class:"h-px flex-1 bg-border"},null,-1)),m("span",At,w(n.date),1),v[6]||(v[6]=m("div",{class:"h-px flex-1 bg-border"},null,-1))]),m("div",Vt,[(d(!0),S(U,null,H(n.entries,y=>(d(),S("div",{key:y.hash,class:"relative"},[m("div",{class:z(e(F)("absolute -left-7.75 flex size-5 items-center justify-center rounded-full border-2 border-background",q(y.type).bg))},[(d(),C(X(q(y.type).icon),{class:z(e(F)("size-2.5",q(y.type).color))},null,8,["class"]))],2),m("div",Mt,[m("div",zt,[m("div",Pt,[m("div",Et,[p(e(N),{variant:"secondary",class:"text-[10px]"},{default:c(()=>[R(w(q(y.type).label),1)]),_:2},1024),y.target?(d(),S("span",Ot,w(y.target),1)):Y("",!0)]),m("p",Dt,w(y.message),1)]),m("div",Lt,[m("span",jt,w(y.relativeDate),1),m("span",Kt,w(y.hash),1)])]),m("div",Ut,[m("span",null,"by "+w(y.author),1)])])]))),128))])]))),128))]))]),_:1})]),_:1},8,["modelValue"]),p(Ve,{message:e(s)["branches.share-branch-reviews-with"],class:"mt-6"},null,8,["message"])])]))}});export{ma as default};
|
|
6
|
+
*/const oe=he("HistoryIcon",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]),He="rovingFocusGroup.onEntryFocus",Ye={bubbles:!1,cancelable:!0},Je={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function Qe(r,t){return t!=="rtl"?r:r==="ArrowLeft"?"ArrowRight":r==="ArrowRight"?"ArrowLeft":r}function We(r,t,o){const a=Qe(r.key,o);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(a))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(a)))return Je[a]}function pe(r,t=!1){const o=te();for(const a of r)if(a===o||(a.focus({preventScroll:t}),te()!==o))return}function Xe(r,t){return r.map((o,a)=>r[(t+a)%r.length])}const[Ze,et]=ue("RovingFocusGroup");var tt=I({__name:"RovingFocusGroup",props:{orientation:{type:String,required:!1,default:void 0},dir:{type:String,required:!1},loop:{type:Boolean,required:!1,default:!1},currentTabStopId:{type:[String,null],required:!1},defaultCurrentTabStopId:{type:String,required:!1},preventScrollOnEntryFocus:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["entryFocus","update:currentTabStopId"],setup(r,{expose:t,emit:o}){const a=r,s=o,{loop:h,orientation:_,dir:g}=J(a),b=de(g),l=ie(a,"currentTabStopId",s,{defaultValue:a.defaultCurrentTabStopId,passive:a.currentTabStopId===void 0}),i=$(!1),u=$(!1),x=$(0),{getItems:P,CollectionSlot:q}=ce({isProvider:!0});function j(f){const v=!u.value;if(f.currentTarget&&f.target===f.currentTarget&&v&&!i.value){const n=new CustomEvent(He,Ye);if(f.currentTarget.dispatchEvent(n),s("entryFocus",n),!n.defaultPrevented){const y=P().map(B=>B.ref).filter(B=>B.dataset.disabled!==""),M=y.find(B=>B.getAttribute("data-active")===""),ge=y.find(B=>B.getAttribute("data-highlighted")===""),ve=y.find(B=>B.id===l.value),be=[M,ge,ve,...y].filter(Boolean);pe(be,a.preventScrollOnEntryFocus)}}u.value=!1}function A(){setTimeout(()=>{u.value=!1},1)}return t({getItems:P}),et({loop:h,dir:b,orientation:_,currentTabStopId:l,onItemFocus:f=>{l.value=f},onItemShiftTab:()=>{i.value=!0},onFocusableItemAdd:()=>{x.value++},onFocusableItemRemove:()=>{x.value--}}),(f,v)=>(d(),C(e(q),null,{default:c(()=>[p(e(V),{tabindex:i.value||x.value===0?-1:0,"data-orientation":e(_),as:f.as,"as-child":f.asChild,dir:e(b),style:{outline:"none"},onMousedown:v[0]||(v[0]=n=>u.value=!0),onMouseup:A,onFocus:j,onBlur:v[1]||(v[1]=n=>i.value=!1)},{default:c(()=>[k(f.$slots,"default")]),_:3},8,["tabindex","data-orientation","as","as-child","dir"])]),_:3}))}}),at=tt,st=I({__name:"RovingFocusItem",props:{tabStopId:{type:String,required:!1},focusable:{type:Boolean,required:!1,default:!0},active:{type:Boolean,required:!1},allowShiftKey:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(r){const t=r,o=Ze(),a=le(),s=T(()=>t.tabStopId||a),h=T(()=>o.currentTabStopId.value===s.value),{getItems:_,CollectionItem:g}=ce();Q(()=>{t.focusable&&o.onFocusableItemAdd()}),_e(()=>{t.focusable&&o.onFocusableItemRemove()});function b(l){if(l.key==="Tab"&&l.shiftKey){o.onItemShiftTab();return}if(l.target!==l.currentTarget)return;const i=We(l,o.orientation.value,o.dir.value);if(i!==void 0){if(l.metaKey||l.ctrlKey||l.altKey||!t.allowShiftKey&&l.shiftKey)return;l.preventDefault();let u=[..._().map(x=>x.ref).filter(x=>x.dataset.disabled!=="")];if(i==="last")u.reverse();else if(i==="prev"||i==="next"){i==="prev"&&u.reverse();const x=u.indexOf(l.currentTarget);u=o.loop.value?Xe(u,x+1):u.slice(x+1)}ye(()=>pe(u))}}return(l,i)=>(d(),C(e(g),null,{default:c(()=>[p(e(V),{tabindex:h.value?0:-1,"data-orientation":e(o).orientation.value,"data-active":l.active?"":void 0,"data-disabled":l.focusable?void 0:"",as:l.as,"as-child":l.asChild,onMousedown:i[0]||(i[0]=u=>{l.focusable?e(o).onItemFocus(s.value):u.preventDefault()}),onFocus:i[1]||(i[1]=u=>e(o).onItemFocus(s.value)),onKeydown:b},{default:c(()=>[k(l.$slots,"default")]),_:3},8,["tabindex","data-orientation","data-active","data-disabled","as","as-child"])]),_:3}))}}),ot=st;const[W,rt]=ue("TabsRoot");var nt=I({__name:"TabsRoot",props:{defaultValue:{type:null,required:!1},orientation:{type:String,required:!1,default:"horizontal"},dir:{type:String,required:!1},activationMode:{type:String,required:!1,default:"automatic"},modelValue:{type:null,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["update:modelValue"],setup(r,{emit:t}){const o=r,a=t,{orientation:s,unmountOnHide:h,dir:_}=J(o),g=de(_);L();const b=ie(o,"modelValue",a,{defaultValue:o.defaultValue,passive:o.modelValue===void 0}),l=$(),i=xe(new Set);return rt({modelValue:b,changeModelValue:u=>{b.value=u},orientation:s,dir:g,unmountOnHide:h,activationMode:o.activationMode,baseId:le(void 0,"reka-tabs"),tabsList:l,contentIds:i,registerContent:u=>{i.value=new Set([...i.value,u])},unregisterContent:u=>{const x=new Set(i.value);x.delete(u),i.value=x}}),(u,x)=>(d(),C(e(V),{dir:e(g),"data-orientation":e(s),"as-child":u.asChild,as:u.as},{default:c(()=>[k(u.$slots,"default",{modelValue:e(b)})]),_:3},8,["dir","data-orientation","as-child","as"]))}}),lt=nt;function fe(r,t){return`${r}-trigger-${t}`}function me(r,t){return`${r}-content-${t}`}var it=I({__name:"TabsContent",props:{value:{type:[String,Number],required:!0},forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(r){const t=r,{forwardRef:o}=L(),a=W(),s=T(()=>fe(a.baseId,t.value)),h=T(()=>me(a.baseId,t.value)),_=T(()=>t.value===a.modelValue.value),g=$(_.value);return Q(()=>{a.registerContent(t.value),requestAnimationFrame(()=>{g.value=!1})}),we(()=>{a.unregisterContent(t.value)}),(b,l)=>(d(),C(e(Pe),{present:b.forceMount||_.value,"force-mount":""},{default:c(({present:i})=>[p(e(V),{id:h.value,ref:e(o),"as-child":b.asChild,as:b.as,role:"tabpanel","data-state":_.value?"active":"inactive","data-orientation":e(a).orientation.value,"aria-labelledby":s.value,hidden:!i,tabindex:"0",style:Ce({animationDuration:g.value?"0s":void 0})},{default:c(()=>[!e(a).unmountOnHide.value||i?k(b.$slots,"default",{key:0}):Y("v-if",!0)]),_:2},1032,["id","as-child","as","data-state","data-orientation","aria-labelledby","hidden","style"])]),_:3},8,["present"]))}}),ut=it,dt=I({__name:"TabsList",props:{loop:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(r){const t=r,{loop:o}=J(t),{forwardRef:a,currentElement:s}=L(),h=W();return h.tabsList=s,(_,g)=>(d(),C(e(at),{"as-child":"",orientation:e(h).orientation.value,dir:e(h).dir.value,loop:e(o)},{default:c(()=>[p(e(V),{ref:e(a),role:"tablist","as-child":_.asChild,as:_.as,"aria-orientation":e(h).orientation.value},{default:c(()=>[k(_.$slots,"default")]),_:3},8,["as-child","as","aria-orientation"])]),_:3},8,["orientation","dir","loop"]))}}),ct=dt,pt=I({__name:"TabsTrigger",props:{value:{type:[String,Number],required:!0},disabled:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const t=r,{forwardRef:o}=L(),a=W(),s=T(()=>fe(a.baseId,t.value)),h=T(()=>a.contentIds.value.has(t.value)?me(a.baseId,t.value):void 0),_=T(()=>t.value===a.modelValue.value);return(g,b)=>(d(),C(e(ot),{"as-child":"",focusable:!g.disabled,active:_.value},{default:c(()=>[p(e(V),{id:s.value,ref:e(o),role:"tab",type:g.as==="button"?"button":void 0,as:g.as,"as-child":g.asChild,"aria-selected":_.value?"true":"false","aria-controls":h.value,"data-state":_.value?"active":"inactive",disabled:g.disabled,"data-disabled":g.disabled?"":void 0,"data-orientation":e(a).orientation.value,onMousedown:b[0]||(b[0]=Te(l=>{!g.disabled&&l.ctrlKey===!1?e(a).changeModelValue(g.value):l.preventDefault()},["left"])),onKeydown:b[1]||(b[1]=Se(l=>e(a).changeModelValue(g.value),["enter","space"])),onFocus:b[2]||(b[2]=()=>{const l=e(a).activationMode!=="manual";!_.value&&!g.disabled&&l&&e(a).changeModelValue(g.value)})},{default:c(()=>[k(g.$slots,"default")]),_:3},8,["id","type","as","as-child","aria-selected","aria-controls","data-state","disabled","data-disabled","data-orientation"])]),_:3},8,["focusable","active"]))}}),ft=pt;const mt="/merge-1.svg",gt=I({__name:"Tabs",props:{defaultValue:{},orientation:{},dir:{},activationMode:{},modelValue:{},unmountOnHide:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},emits:["update:modelValue"],setup(r,{emit:t}){const o=r,a=t,s=D(o,"class"),h=Me(s,a);return(_,g)=>(d(),C(e(lt),O({"data-slot":"tabs"},e(h),{class:e(F)("flex flex-col gap-2",o.class)}),{default:c(b=>[k(_.$slots,"default",Ie(ke(b)))]),_:3},16,["class"]))}}),re=I({__name:"TabsContent",props:{value:{},forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(r){const t=r,o=D(t,"class");return(a,s)=>(d(),C(e(ut),O({"data-slot":"tabs-content",class:e(F)("flex-1 outline-none",t.class)},e(o)),{default:c(()=>[k(a.$slots,"default")]),_:3},16,["class"]))}}),vt=I({__name:"TabsList",props:{loop:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(r){const t=r,o=D(t,"class");return(a,s)=>(d(),C(e(ct),O({"data-slot":"tabs-list"},e(o),{class:e(F)("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",t.class)}),{default:c(()=>[k(a.$slots,"default")]),_:3},16,["class"]))}}),ne=I({__name:"TabsTrigger",props:{value:{},disabled:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(r){const t=r,o=D(t,"class"),a=ze(o);return(s,h)=>(d(),C(e(ft),O({"data-slot":"tabs-trigger",class:e(F)("data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t.class)},e(a)),{default:c(()=>[k(s.$slots,"default")]),_:3},16,["class"]))}}),bt={class:"px-6 py-6"},ht={key:0,class:"flex justify-center py-12"},_t={key:1,class:"flex flex-col items-center py-16 text-center"},yt={class:"text-lg font-semibold"},xt={class:"mt-2 max-w-sm text-sm text-muted-foreground"},wt={key:2,class:"space-y-2"},Ct={class:"flex-1 min-w-0"},St={class:"flex items-center gap-2 flex-wrap"},Tt={class:"font-mono text-sm font-medium text-foreground truncate"},It={class:"font-mono text-xs text-muted-foreground truncate"},kt={key:0,class:"flex justify-center py-12"},Bt={key:1,class:"flex flex-col items-center py-16 text-center"},Ft={class:"text-lg font-semibold"},qt={class:"mt-2 text-sm text-muted-foreground"},Rt={key:2,class:"space-y-8"},$t={class:"sticky top-0 z-10 mb-3 flex items-center gap-2 bg-background/95 backdrop-blur py-1"},Vt={class:"shrink-0 text-xs font-medium text-muted-foreground"},At={class:"relative ml-5 border-l-2 border-border pl-6 space-y-4"},Mt={class:"rounded-lg border border-border bg-card p-3"},zt={class:"flex items-start gap-2"},Pt={class:"flex-1 min-w-0"},Et={class:"flex items-center gap-2 flex-wrap"},Ot={key:0,class:"font-mono text-xs font-medium text-foreground truncate"},Dt={class:"mt-1 text-xs text-muted-foreground truncate"},Lt={class:"flex flex-col items-end gap-0.5 shrink-0"},jt={class:"text-[10px] text-muted-foreground"},Kt={class:"font-mono text-[10px] text-muted-foreground/50"},Nt={class:"mt-1.5 flex items-center gap-2 text-[10px] text-muted-foreground"},fa=I({__name:"BranchesPage",setup(r){const t=qe(),o=Fe(),a=$("pending"),s=Re("serve-ui-texts").locale("en").get(),h=T(()=>t.branches);function _(f){const n=f.name.replace("contentrain/","").split("/");return{name:f.name,scope:n[0]??"unknown",target:n.length>2?n.slice(1,-1).join("/"):n[1]??"",timestamp:n.length>2?n[n.length-1]??"":"",current:f.current}}const g=T(()=>h.value.map(_)),b={content:{icon:ae,color:"text-primary",bg:"bg-primary/10",label:s["branches.content"]},model:{icon:je,color:"text-status-info",bg:"bg-status-info/10",label:s["branches.model"]},normalize:{icon:Le,color:"text-status-warning",bg:"bg-status-warning/10",label:s["branches.normalize"]},validate:{icon:De,color:"text-status-success",bg:"bg-status-success/10",label:s["branches.validate"]}},l={icon:H,color:"text-muted-foreground",bg:"bg-muted",label:s["branches.branch"]};function i(f){return b[f]??l}const u=T(()=>t.history),x={model_create:{icon:Ge,color:"text-status-info",bg:"bg-status-info/10",label:s["branches.model-created"]},model_update:{icon:se,color:"text-status-info",bg:"bg-status-info/10",label:s["branches.model-updated"]},content_save:{icon:ae,color:"text-primary",bg:"bg-primary/10",label:s["branches.content-saved"]},delete:{icon:Ne,color:"text-status-error",bg:"bg-status-error/10",label:s["branches.deleted"]},merge:{icon:Ue,color:"text-status-success",bg:"bg-status-success/10",label:s["branches.merged"]},context_update:{icon:Ke,color:"text-muted-foreground",bg:"bg-muted",label:"Context"},operation:{icon:se,color:"text-muted-foreground",bg:"bg-muted",label:s["branches.operation"]}},P={icon:H,color:"text-muted-foreground",bg:"bg-muted",label:"Other"};function q(f){return x[f]??P}const j=T(()=>{const f=[];let v="";for(const n of u.value){const M=new Date(n.date).toLocaleDateString("en-US",{month:"long",day:"numeric",year:"numeric"});M!==v&&(v=M,f.push({date:M,entries:[]})),f[f.length-1].entries.push(n)}return f});async function A(){try{await Promise.all([t.fetchBranches(),t.fetchHistory()])}catch{Be.error("Failed to load branches or history")}}return Q(()=>{A()}),$e(f=>{(f.type==="branch:created"||f.type==="branch:merged")&&A()}),(f,v)=>(d(),S("div",null,[p(Ve,{title:e(s)["branches.branches-history"],description:e(s)["branches.review-pending-changes-and"]},{actions:c(()=>[p(e(Z),{variant:"outline",size:"sm",disabled:e(t).loading,onClick:v[0]||(v[0]=n=>A())},{default:c(()=>[e(t).loading?(d(),C(e(K),{key:0,class:"size-4 animate-spin"})):(d(),C(e(Ee),{key:1,class:"size-4"})),R(" "+w(e(s)["branches.refresh"]),1)]),_:1},8,["disabled"])]),_:1},8,["title","description"]),m("div",bt,[p(e(gt),{modelValue:a.value,"onUpdate:modelValue":v[1]||(v[1]=n=>a.value=n),class:"w-full"},{default:c(()=>[p(e(vt),{class:"mb-6"},{default:c(()=>[p(e(ne),{value:"pending",class:"gap-1.5"},{default:c(()=>[p(e(H),{class:"size-3.5"}),v[2]||(v[2]=R(" Pending ",-1)),h.value.length>0?(d(),C(e(G),{key:0,variant:"secondary",class:"ml-1 h-5 px-1.5 text-[10px]"},{default:c(()=>[R(w(h.value.length),1)]),_:1})):Y("",!0)]),_:1}),p(e(ne),{value:"history",class:"gap-1.5"},{default:c(()=>[p(e(oe),{class:"size-3.5"}),v[3]||(v[3]=R(" History ",-1))]),_:1})]),_:1}),p(e(re),{value:"pending"},{default:c(()=>[e(t).loading&&h.value.length===0?(d(),S("div",ht,[p(e(K),{class:"size-6 animate-spin text-primary"})])):h.value.length===0?(d(),S("div",_t,[v[4]||(v[4]=m("img",{src:mt,alt:"",class:"empty-illustration mb-6"},null,-1)),m("h2",yt,w(e(s)["branches.no-pending-branches"]),1),m("p",xt,w(e(s)["branches.aigenerated-changes-from-your"]),1),p(ee,{title:e(s)["branches.try-asking-your-ai"],class:"mt-6 w-full max-w-md"},{default:c(()=>[p(E,{prompt:e(s)["branches.create-a-new-content"]},null,8,["prompt"]),p(E,{prompt:e(s)["branches.normalize-my-project-extract"]},null,8,["prompt"]),p(E,{prompt:e(s)["branches.add-sample-content-to"]},null,8,["prompt"])]),_:1},8,["title"])])):(d(),S("div",wt,[(d(!0),S(N,null,U(g.value,n=>(d(),C(e(Z),{key:n.name,variant:"ghost",class:"group flex w-full h-auto items-center gap-4 rounded-xl border border-border bg-card p-4 text-left transition-all hover:border-primary/30 hover:shadow-sm",onClick:y=>e(o).push(`/branches/${encodeURIComponent(n.name)}`)},{default:c(()=>[m("div",{class:z(e(F)("flex size-10 items-center justify-center rounded-lg",i(n.scope).bg))},[(d(),C(X(i(n.scope).icon),{class:z(e(F)("size-5",i(n.scope).color))},null,8,["class"]))],2),m("div",Ct,[m("div",St,[m("span",Tt,w(n.target||n.scope),1)]),m("span",It,w(n.name),1)]),p(e(G),{class:z([e(F)(i(n.scope).bg,i(n.scope).color),"text-[10px] uppercase shrink-0"])},{default:c(()=>[R(w(i(n.scope).label),1)]),_:2},1032,["class"]),p(e(Oe),{class:"size-4 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity shrink-0"})]),_:2},1032,["onClick"]))),128))]))]),_:1}),p(e(re),{value:"history"},{default:c(()=>[e(t).loading&&u.value.length===0?(d(),S("div",kt,[p(e(K),{class:"size-6 animate-spin text-primary"})])):u.value.length===0?(d(),S("div",Bt,[p(e(oe),{class:"mb-4 size-12 text-muted-foreground/30"}),m("h2",Ft,w(e(s)["branches.no-history-yet"]),1),m("p",qt,w(e(s)["branches.contentrain-operations-will-appear"]),1),p(ee,{title:e(s)["branches.get-started"],class:"mt-6 w-full max-w-md"},{default:c(()=>[p(E,{prompt:e(s)["branches.initialize-my-contentrain-project"]},null,8,["prompt"])]),_:1},8,["title"])])):(d(),S("div",Rt,[(d(!0),S(N,null,U(j.value,n=>(d(),S("section",{key:n.date},[m("div",$t,[v[5]||(v[5]=m("div",{class:"h-px flex-1 bg-border"},null,-1)),m("span",Vt,w(n.date),1),v[6]||(v[6]=m("div",{class:"h-px flex-1 bg-border"},null,-1))]),m("div",At,[(d(!0),S(N,null,U(n.entries,y=>(d(),S("div",{key:y.hash,class:"relative"},[m("div",{class:z(e(F)("absolute -left-7.75 flex size-5 items-center justify-center rounded-full border-2 border-background",q(y.type).bg))},[(d(),C(X(q(y.type).icon),{class:z(e(F)("size-2.5",q(y.type).color))},null,8,["class"]))],2),m("div",Mt,[m("div",zt,[m("div",Pt,[m("div",Et,[p(e(G),{variant:"secondary",class:"text-[10px]"},{default:c(()=>[R(w(q(y.type).label),1)]),_:2},1024),y.target?(d(),S("span",Ot,w(y.target),1)):Y("",!0)]),m("p",Dt,w(y.message),1)]),m("div",Lt,[m("span",jt,w(y.relativeDate),1),m("span",Kt,w(y.hash),1)])]),m("div",Nt,[m("span",null,"by "+w(y.author),1)])])]))),128))])]))),128))]))]),_:1})]),_:1},8,["modelValue"]),p(Ae,{message:e(s)["branches.share-branch-reviews-with"],class:"mt-6"},null,8,["message"])])]))}});export{fa as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as n,o as t,p as o,y as r,u as c,z as l,f as p}from"./index-DL_dw3XX.js";const u=n({__name:"CardContent",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(a){const s=a;return(e,d)=>(t(),o("div",{"data-slot":"card-content",class:r(c(l)("px-6",s.class))},[p(e.$slots,"default")],2))}});export{u as _};
|
package/dist/serve-ui/assets/CollapsibleTrigger.vue_vue_type_script_setup_true_lang-B4uDtllm.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as u,t as P,o as p,b as m,e as d,f as c,u as e,r as _,w as T,i as M,j as N,m as y,g as A,h as w,M as F,p as D,y as E,z as H,J as I,K as V}from"./index-DL_dw3XX.js";import{b as j,a as z}from"./useId-B-RTM02R.js";import{f as S,u as B,c as J,k as K,P as L}from"./Presence-CA3xTrht.js";import{P as k}from"./useWatch-D4Y-epQR.js";const[R,G]=J("CollapsibleRoot");var Q=u({__name:"CollapsibleRoot",props:{defaultOpen:{type:Boolean,required:!1,default:!1},open:{type:Boolean,required:!1,default:void 0},disabled:{type:Boolean,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["update:open"],setup(l,{expose:r,emit:a}){const s=l,n=S(s,"open",a,{defaultValue:s.defaultOpen,passive:s.open===void 0}),{disabled:i,unmountOnHide:f}=P(s);return G({contentId:"",disabled:i,open:n,unmountOnHide:f,onOpenToggle:()=>{i.value||(n.value=!n.value)}}),r({open:n}),B(),(v,h)=>(p(),m(e(k),{as:v.as,"as-child":s.asChild,"data-state":e(n)?"open":"closed","data-disabled":e(i)?"":void 0},{default:d(()=>[c(v.$slots,"default",{open:e(n)})]),_:3},8,["as","as-child","data-state","data-disabled"]))}}),U=Q,W=u({inheritAttrs:!1,__name:"CollapsibleContent",props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["contentFound"],setup(l,{emit:r}){const a=l,s=r,o=R();o.contentId||(o.contentId=j(void 0,"reka-collapsible-content"));const n=_(),{forwardRef:i,currentElement:f}=B(),v=_(0),h=_(0),q=w(()=>o.open.value),C=_(q.value),b=_();T(()=>{var t;return[q.value,(t=n.value)==null?void 0:t.present]},async()=>{await F();const t=f.value;if(!t)return;b.value=b.value||{transitionDuration:t.style.transitionDuration,animationName:t.style.animationName},t.style.transitionDuration="0s",t.style.animationName="none";const g=t.getBoundingClientRect();h.value=g.height,v.value=g.width,C.value||(t.style.transitionDuration=b.value.transitionDuration,t.style.animationName=b.value.animationName)},{immediate:!0});const x=w(()=>C.value&&o.open.value);return M(()=>{requestAnimationFrame(()=>{C.value=!1})}),K(f,"beforematch",t=>{requestAnimationFrame(()=>{o.onOpenToggle(),s("contentFound")})}),(t,g)=>(p(),m(e(L),{ref_key:"presentRef",ref:n,present:t.forceMount||e(o).open.value,"force-mount":!0},{default:d(({present:O})=>{var $;return[N(e(k),y(t.$attrs,{id:e(o).contentId,ref:e(i),"as-child":a.asChild,as:t.as,hidden:O?void 0:e(o).unmountOnHide.value?"":"until-found","data-state":x.value?void 0:e(o).open.value?"open":"closed","data-disabled":($=e(o).disabled)!=null&&$.value?"":void 0,style:{"--reka-collapsible-content-height":`${h.value}px`,"--reka-collapsible-content-width":`${v.value}px`}}),{default:d(()=>[!e(o).unmountOnHide.value||O?c(t.$slots,"default",{key:0}):A("v-if",!0)]),_:2},1040,["id","as-child","as","hidden","data-state","data-disabled","style"])]}),_:3},8,["present"]))}}),X=W,Y=u({__name:"CollapsibleTrigger",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(l){const r=l;B();const a=R();return(s,o)=>{var n,i;return p(),m(e(k),{type:s.as==="button"?"button":void 0,as:s.as,"as-child":r.asChild,"aria-controls":e(a).contentId,"aria-expanded":e(a).open.value,"data-state":e(a).open.value?"open":"closed","data-disabled":(n=e(a).disabled)!=null&&n.value?"":void 0,disabled:(i=e(a).disabled)==null?void 0:i.value,onClick:e(a).onOpenToggle},{default:d(()=>[c(s.$slots,"default")]),_:3},8,["type","as","as-child","aria-controls","aria-expanded","data-state","data-disabled","disabled","onClick"])}}}),Z=Y;const se=u({__name:"Card",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(l){const r=l;return(a,s)=>(p(),D("div",{"data-slot":"card",class:E(e(H)("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",r.class))},[c(a.$slots,"default")],2))}}),ne=u({__name:"Collapsible",props:{defaultOpen:{type:Boolean},open:{type:Boolean},disabled:{type:Boolean},unmountOnHide:{type:Boolean},asChild:{type:Boolean},as:{}},emits:["update:open"],setup(l,{emit:r}){const o=z(l,r);return(n,i)=>(p(),m(e(U),y({"data-slot":"collapsible"},e(o)),{default:d(f=>[c(n.$slots,"default",I(V(f)))]),_:3},16))}}),le=u({__name:"CollapsibleContent",props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{}},setup(l){const r=l;return(a,s)=>(p(),m(e(X),y({"data-slot":"collapsible-content"},r),{default:d(()=>[c(a.$slots,"default")]),_:3},16))}}),re=u({__name:"CollapsibleTrigger",props:{asChild:{type:Boolean},as:{}},setup(l){const r=l;return(a,s)=>(p(),m(e(Z),y({"data-slot":"collapsible-trigger"},r),{default:d(()=>[c(a.$slots,"default")]),_:3},16))}});export{se as _,re as a,le as b,ne as c};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{c as I,h as f,r as v,
|
|
1
|
+
import{c as I,h as f,r as v,_ as w,a as d,k as S,$ as p,w as x,a0 as $,a1 as T}from"./index-DL_dw3XX.js";import{S as h}from"./useWatch-D4Y-epQR.js";import{e as _}from"./Presence-CA3xTrht.js";/**
|
|
2
2
|
* @license lucide-vue-next v0.474.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
5
5
|
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const b=I("RefreshCwIcon",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);function M(){const n=v(),u=f(()=>{var s,
|
|
6
|
+
*/const b=I("RefreshCwIcon",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);function M(){const n=v(),u=f(()=>{var s,l;return["#text","#comment"].includes((s=n.value)==null?void 0:s.$el.nodeName)?(l=n.value)==null?void 0:l.$el.nextElementSibling:_(n)});return{primitiveElement:n,currentElement:u}}const y="data-reka-collection-item";function g(n={}){const{key:u="",isProvider:s=!1}=n,l=`${u}CollectionProvider`;let e;if(s){const r=v(new Map);e={collectionRef:v(),itemMap:r},T(l,e)}else e=w(l);const E=(r=!1)=>{const o=e.collectionRef.value;if(!o)return[];const a=Array.from(o.querySelectorAll(`[${y}]`)),t=Array.from(e.itemMap.value.values()).sort((i,m)=>a.indexOf(i.ref)-a.indexOf(m.ref));return r?t:t.filter(i=>i.ref.dataset.disabled!=="")},k=d({name:"CollectionSlot",inheritAttrs:!1,setup(r,{slots:o,attrs:a}){const{primitiveElement:c,currentElement:t}=M();return x(t,()=>{e.collectionRef.value=t.value}),()=>p(h,{ref:c,...a},o)}}),A=d({name:"CollectionItem",inheritAttrs:!1,props:{value:{validator:()=>!0}},setup(r,{slots:o,attrs:a}){const{primitiveElement:c,currentElement:t}=M();return S(i=>{if(t.value){const m=$(t.value);e.itemMap.value.set(m,{ref:t.value,value:r.value}),i(()=>e.itemMap.value.delete(m))}}),()=>p(h,{...a,[y]:"",ref:c},o)}}),C=f(()=>Array.from(e.itemMap.value.values())),R=f(()=>e.itemMap.value.size);return{getItems:E,reactiveItems:C,itemMapSize:R,CollectionSlot:k,CollectionItem:A}}export{b as R,g as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as o}from"./Presence-CA3xTrht.js";const[e]=o("ConfigProvider");export{e as i};
|