@phenx-inc/ctlsurf 0.9.0 → 0.11.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/out/headless/index.mjs +196 -2
- package/out/headless/index.mjs.map +4 -4
- package/out/main/index.js +326 -24
- package/out/preload/index.js +7 -0
- package/out/renderer/assets/{cssMode-BdYp0fp9.js → cssMode-Bmzy9hKX.js} +3 -3
- package/out/renderer/assets/{freemarker2-Cya-9zr-.js → freemarker2-CDAsExTa.js} +1 -1
- package/out/renderer/assets/{handlebars-EJs9W5Ub.js → handlebars-CvpBYG1L.js} +1 -1
- package/out/renderer/assets/{html-Ex4qy2lh.js → html-CNhEQqr8.js} +1 -1
- package/out/renderer/assets/{htmlMode-CCm0aJ6C.js → htmlMode-DD7YPgga.js} +3 -3
- package/out/renderer/assets/{index-Cj7K9-Ba.js → index-BDlCPzCG.js} +153 -146
- package/out/renderer/assets/{index-nvsNYP5c.css → index-CGHeDwZa.css} +23 -46
- package/out/renderer/assets/{javascript-B2niCouI.js → javascript-CsGLsswK.js} +2 -2
- package/out/renderer/assets/{jsonMode-BgCUHaFo.js → jsonMode-CTuGgRvC.js} +3 -3
- package/out/renderer/assets/{liquid-DOQmSo4G.js → liquid-BrrN4uul.js} +1 -1
- package/out/renderer/assets/{lspLanguageFeatures-8SIcRAMh.js → lspLanguageFeatures-Bhdn2Eqy.js} +1 -1
- package/out/renderer/assets/{mdx-DuKdGNKE.js → mdx-DJo-gax4.js} +1 -1
- package/out/renderer/assets/{python-BUa4XFG-.js → python-DYHeg5b2.js} +1 -1
- package/out/renderer/assets/{razor-BUw8jho0.js → razor-Cqcks14K.js} +1 -1
- package/out/renderer/assets/{tsMode-8FLRnobw.js → tsMode-YTLgCayh.js} +1 -1
- package/out/renderer/assets/{typescript-rdwAjCi4.js → typescript-oxBn_Vcw.js} +1 -1
- package/out/renderer/assets/{xml-HOzT59Qg.js → xml-BEqGMCTc.js} +1 -1
- package/out/renderer/assets/{yaml-B81JfLsW.js → yaml-BGSrk5HC.js} +1 -1
- package/out/renderer/index.html +2 -2
- package/package.json +1 -1
- package/src/main/agentState.ts +329 -0
- package/src/main/index.ts +135 -20
- package/src/main/orchestrator.ts +21 -1
- package/src/preload/index.ts +8 -0
- package/src/renderer/App.tsx +32 -9
- package/src/renderer/components/TicketPanel.tsx +20 -25
- package/src/renderer/styles.css +23 -46
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./cssMode-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./cssMode-Bmzy9hKX.js","./lspLanguageFeatures-Bhdn2Eqy.js","./htmlMode-DD7YPgga.js","./jsonMode-CTuGgRvC.js","./javascript-CsGLsswK.js","./typescript-oxBn_Vcw.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
function getDefaultExportFromCjs(x) {
|
|
3
3
|
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
|
|
4
4
|
}
|
|
@@ -207841,7 +207841,7 @@ const lessDefaults = new LanguageServiceDefaultsImpl$3(
|
|
|
207841
207841
|
modeConfigurationDefault$2
|
|
207842
207842
|
);
|
|
207843
207843
|
function getMode$3() {
|
|
207844
|
-
return __vitePreload(() => import("./cssMode-
|
|
207844
|
+
return __vitePreload(() => import("./cssMode-Bmzy9hKX.js"), true ? __vite__mapDeps([0,1]) : void 0, import.meta.url);
|
|
207845
207845
|
}
|
|
207846
207846
|
languages.onLanguage("less", () => {
|
|
207847
207847
|
getMode$3().then((mode2) => mode2.setupMode(lessDefaults));
|
|
@@ -207946,7 +207946,7 @@ const razorLanguageService = registerHTMLLanguageService(
|
|
|
207946
207946
|
);
|
|
207947
207947
|
const razorDefaults = razorLanguageService.defaults;
|
|
207948
207948
|
function getMode$2() {
|
|
207949
|
-
return __vitePreload(() => import("./htmlMode-
|
|
207949
|
+
return __vitePreload(() => import("./htmlMode-DD7YPgga.js"), true ? __vite__mapDeps([2,1]) : void 0, import.meta.url);
|
|
207950
207950
|
}
|
|
207951
207951
|
function registerHTMLLanguageService(languageId, options = optionsDefault, modeConfiguration = getConfigurationDefault(languageId)) {
|
|
207952
207952
|
const defaults = new LanguageServiceDefaultsImpl$2(languageId, options, modeConfiguration);
|
|
@@ -208030,7 +208030,7 @@ const jsonDefaults = new LanguageServiceDefaultsImpl$1(
|
|
|
208030
208030
|
);
|
|
208031
208031
|
const getWorker$1 = () => getMode$1().then((mode2) => mode2.getWorker());
|
|
208032
208032
|
function getMode$1() {
|
|
208033
|
-
return __vitePreload(() => import("./jsonMode-
|
|
208033
|
+
return __vitePreload(() => import("./jsonMode-CTuGgRvC.js"), true ? __vite__mapDeps([3,1]) : void 0, import.meta.url);
|
|
208034
208034
|
}
|
|
208035
208035
|
languages.register({
|
|
208036
208036
|
id: "json",
|
|
@@ -208276,7 +208276,7 @@ const getJavaScriptWorker = () => {
|
|
|
208276
208276
|
return getMode().then((mode) => mode.getJavaScriptWorker());
|
|
208277
208277
|
};
|
|
208278
208278
|
function getMode() {
|
|
208279
|
-
return __vitePreload(() => import("./tsMode-
|
|
208279
|
+
return __vitePreload(() => import("./tsMode-YTLgCayh.js"), true ? [] : void 0, import.meta.url);
|
|
208280
208280
|
}
|
|
208281
208281
|
languages.onLanguage("typescript", () => {
|
|
208282
208282
|
return getMode().then((mode) => mode.setupTypeScript(typescriptDefaults));
|
|
@@ -208471,49 +208471,49 @@ registerLanguage({
|
|
|
208471
208471
|
extensions: [".ftl", ".ftlh", ".ftlx"],
|
|
208472
208472
|
aliases: ["FreeMarker2", "Apache FreeMarker2"],
|
|
208473
208473
|
loader: () => {
|
|
208474
|
-
return __vitePreload(() => import("./freemarker2-
|
|
208474
|
+
return __vitePreload(() => import("./freemarker2-CDAsExTa.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationDollar);
|
|
208475
208475
|
}
|
|
208476
208476
|
});
|
|
208477
208477
|
registerLanguage({
|
|
208478
208478
|
id: "freemarker2.tag-angle.interpolation-dollar",
|
|
208479
208479
|
aliases: ["FreeMarker2 (Angle/Dollar)", "Apache FreeMarker2 (Angle/Dollar)"],
|
|
208480
208480
|
loader: () => {
|
|
208481
|
-
return __vitePreload(() => import("./freemarker2-
|
|
208481
|
+
return __vitePreload(() => import("./freemarker2-CDAsExTa.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAngleInterpolationDollar);
|
|
208482
208482
|
}
|
|
208483
208483
|
});
|
|
208484
208484
|
registerLanguage({
|
|
208485
208485
|
id: "freemarker2.tag-bracket.interpolation-dollar",
|
|
208486
208486
|
aliases: ["FreeMarker2 (Bracket/Dollar)", "Apache FreeMarker2 (Bracket/Dollar)"],
|
|
208487
208487
|
loader: () => {
|
|
208488
|
-
return __vitePreload(() => import("./freemarker2-
|
|
208488
|
+
return __vitePreload(() => import("./freemarker2-CDAsExTa.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagBracketInterpolationDollar);
|
|
208489
208489
|
}
|
|
208490
208490
|
});
|
|
208491
208491
|
registerLanguage({
|
|
208492
208492
|
id: "freemarker2.tag-angle.interpolation-bracket",
|
|
208493
208493
|
aliases: ["FreeMarker2 (Angle/Bracket)", "Apache FreeMarker2 (Angle/Bracket)"],
|
|
208494
208494
|
loader: () => {
|
|
208495
|
-
return __vitePreload(() => import("./freemarker2-
|
|
208495
|
+
return __vitePreload(() => import("./freemarker2-CDAsExTa.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAngleInterpolationBracket);
|
|
208496
208496
|
}
|
|
208497
208497
|
});
|
|
208498
208498
|
registerLanguage({
|
|
208499
208499
|
id: "freemarker2.tag-bracket.interpolation-bracket",
|
|
208500
208500
|
aliases: ["FreeMarker2 (Bracket/Bracket)", "Apache FreeMarker2 (Bracket/Bracket)"],
|
|
208501
208501
|
loader: () => {
|
|
208502
|
-
return __vitePreload(() => import("./freemarker2-
|
|
208502
|
+
return __vitePreload(() => import("./freemarker2-CDAsExTa.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagBracketInterpolationBracket);
|
|
208503
208503
|
}
|
|
208504
208504
|
});
|
|
208505
208505
|
registerLanguage({
|
|
208506
208506
|
id: "freemarker2.tag-auto.interpolation-dollar",
|
|
208507
208507
|
aliases: ["FreeMarker2 (Auto/Dollar)", "Apache FreeMarker2 (Auto/Dollar)"],
|
|
208508
208508
|
loader: () => {
|
|
208509
|
-
return __vitePreload(() => import("./freemarker2-
|
|
208509
|
+
return __vitePreload(() => import("./freemarker2-CDAsExTa.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationDollar);
|
|
208510
208510
|
}
|
|
208511
208511
|
});
|
|
208512
208512
|
registerLanguage({
|
|
208513
208513
|
id: "freemarker2.tag-auto.interpolation-bracket",
|
|
208514
208514
|
aliases: ["FreeMarker2 (Auto/Bracket)", "Apache FreeMarker2 (Auto/Bracket)"],
|
|
208515
208515
|
loader: () => {
|
|
208516
|
-
return __vitePreload(() => import("./freemarker2-
|
|
208516
|
+
return __vitePreload(() => import("./freemarker2-CDAsExTa.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationBracket);
|
|
208517
208517
|
}
|
|
208518
208518
|
});
|
|
208519
208519
|
registerLanguage({
|
|
@@ -208534,7 +208534,7 @@ registerLanguage({
|
|
|
208534
208534
|
extensions: [".handlebars", ".hbs"],
|
|
208535
208535
|
aliases: ["Handlebars", "handlebars", "hbs"],
|
|
208536
208536
|
mimetypes: ["text/x-handlebars-template"],
|
|
208537
|
-
loader: () => __vitePreload(() => import("./handlebars-
|
|
208537
|
+
loader: () => __vitePreload(() => import("./handlebars-CvpBYG1L.js"), true ? [] : void 0, import.meta.url)
|
|
208538
208538
|
});
|
|
208539
208539
|
registerLanguage({
|
|
208540
208540
|
id: "hcl",
|
|
@@ -208547,7 +208547,7 @@ registerLanguage({
|
|
|
208547
208547
|
extensions: [".html", ".htm", ".shtml", ".xhtml", ".mdoc", ".jsp", ".asp", ".aspx", ".jshtm"],
|
|
208548
208548
|
aliases: ["HTML", "htm", "html", "xhtml"],
|
|
208549
208549
|
mimetypes: ["text/html", "text/x-jshtm", "text/template", "text/ng-template"],
|
|
208550
|
-
loader: () => __vitePreload(() => import("./html-
|
|
208550
|
+
loader: () => __vitePreload(() => import("./html-CNhEQqr8.js"), true ? [] : void 0, import.meta.url)
|
|
208551
208551
|
});
|
|
208552
208552
|
registerLanguage({
|
|
208553
208553
|
id: "ini",
|
|
@@ -208570,7 +208570,7 @@ registerLanguage({
|
|
|
208570
208570
|
filenames: ["jakefile"],
|
|
208571
208571
|
aliases: ["JavaScript", "javascript", "js"],
|
|
208572
208572
|
mimetypes: ["text/javascript"],
|
|
208573
|
-
loader: () => __vitePreload(() => import("./javascript-
|
|
208573
|
+
loader: () => __vitePreload(() => import("./javascript-CsGLsswK.js"), true ? __vite__mapDeps([4,5]) : void 0, import.meta.url)
|
|
208574
208574
|
});
|
|
208575
208575
|
registerLanguage({
|
|
208576
208576
|
id: "julia",
|
|
@@ -208609,7 +208609,7 @@ registerLanguage({
|
|
|
208609
208609
|
extensions: [".liquid", ".html.liquid"],
|
|
208610
208610
|
aliases: ["Liquid", "liquid"],
|
|
208611
208611
|
mimetypes: ["application/liquid"],
|
|
208612
|
-
loader: () => __vitePreload(() => import("./liquid-
|
|
208612
|
+
loader: () => __vitePreload(() => import("./liquid-BrrN4uul.js"), true ? [] : void 0, import.meta.url)
|
|
208613
208613
|
});
|
|
208614
208614
|
registerLanguage({
|
|
208615
208615
|
id: "m3",
|
|
@@ -208627,7 +208627,7 @@ registerLanguage({
|
|
|
208627
208627
|
id: "mdx",
|
|
208628
208628
|
extensions: [".mdx"],
|
|
208629
208629
|
aliases: ["MDX", "mdx"],
|
|
208630
|
-
loader: () => __vitePreload(() => import("./mdx-
|
|
208630
|
+
loader: () => __vitePreload(() => import("./mdx-DJo-gax4.js"), true ? [] : void 0, import.meta.url)
|
|
208631
208631
|
});
|
|
208632
208632
|
registerLanguage({
|
|
208633
208633
|
id: "mips",
|
|
@@ -208726,7 +208726,7 @@ registerLanguage({
|
|
|
208726
208726
|
extensions: [".py", ".rpy", ".pyw", ".cpy", ".gyp", ".gypi"],
|
|
208727
208727
|
aliases: ["Python", "py"],
|
|
208728
208728
|
firstLine: "^#!/.*\\bpython[0-9.-]*\\b",
|
|
208729
|
-
loader: () => __vitePreload(() => import("./python-
|
|
208729
|
+
loader: () => __vitePreload(() => import("./python-DYHeg5b2.js"), true ? [] : void 0, import.meta.url)
|
|
208730
208730
|
});
|
|
208731
208731
|
registerLanguage({
|
|
208732
208732
|
id: "qsharp",
|
|
@@ -208745,7 +208745,7 @@ registerLanguage({
|
|
|
208745
208745
|
extensions: [".cshtml"],
|
|
208746
208746
|
aliases: ["Razor", "razor"],
|
|
208747
208747
|
mimetypes: ["text/x-cshtml"],
|
|
208748
|
-
loader: () => __vitePreload(() => import("./razor-
|
|
208748
|
+
loader: () => __vitePreload(() => import("./razor-Cqcks14K.js"), true ? [] : void 0, import.meta.url)
|
|
208749
208749
|
});
|
|
208750
208750
|
registerLanguage({
|
|
208751
208751
|
id: "redis",
|
|
@@ -208878,7 +208878,7 @@ registerLanguage({
|
|
|
208878
208878
|
aliases: ["TypeScript", "ts", "typescript"],
|
|
208879
208879
|
mimetypes: ["text/typescript"],
|
|
208880
208880
|
loader: () => {
|
|
208881
|
-
return __vitePreload(() => import("./typescript-
|
|
208881
|
+
return __vitePreload(() => import("./typescript-oxBn_Vcw.js"), true ? [] : void 0, import.meta.url);
|
|
208882
208882
|
}
|
|
208883
208883
|
});
|
|
208884
208884
|
registerLanguage({
|
|
@@ -208923,14 +208923,14 @@ registerLanguage({
|
|
|
208923
208923
|
firstLine: "(\\<\\?xml.*)|(\\<svg)|(\\<\\!doctype\\s+svg)",
|
|
208924
208924
|
aliases: ["XML", "xml"],
|
|
208925
208925
|
mimetypes: ["text/xml", "application/xml", "application/xaml+xml", "application/xml-dtd"],
|
|
208926
|
-
loader: () => __vitePreload(() => import("./xml-
|
|
208926
|
+
loader: () => __vitePreload(() => import("./xml-BEqGMCTc.js"), true ? [] : void 0, import.meta.url)
|
|
208927
208927
|
});
|
|
208928
208928
|
registerLanguage({
|
|
208929
208929
|
id: "yaml",
|
|
208930
208930
|
extensions: [".yaml", ".yml"],
|
|
208931
208931
|
aliases: ["YAML", "yaml", "YML", "yml"],
|
|
208932
208932
|
mimetypes: ["application/x-yaml", "text/x-yaml"],
|
|
208933
|
-
loader: () => __vitePreload(() => import("./yaml-
|
|
208933
|
+
loader: () => __vitePreload(() => import("./yaml-BGSrk5HC.js"), true ? [] : void 0, import.meta.url)
|
|
208934
208934
|
});
|
|
208935
208935
|
var __defProp = Object.defineProperty;
|
|
208936
208936
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
@@ -213094,7 +213094,7 @@ function Segmented({ options, value, onChange }) {
|
|
|
213094
213094
|
);
|
|
213095
213095
|
}) });
|
|
213096
213096
|
}
|
|
213097
|
-
function
|
|
213097
|
+
function TicketPane() {
|
|
213098
213098
|
const [project, setProject] = reactExports.useState(null);
|
|
213099
213099
|
const [view, setView] = reactExports.useState("list");
|
|
213100
213100
|
const [tickets, setTickets] = reactExports.useState([]);
|
|
@@ -213124,19 +213124,23 @@ function TicketPanel({ open, onClose }) {
|
|
|
213124
213124
|
}
|
|
213125
213125
|
}, []);
|
|
213126
213126
|
reactExports.useEffect(() => {
|
|
213127
|
-
if (!open) return;
|
|
213128
|
-
setView("list");
|
|
213129
213127
|
let cancelled = false;
|
|
213130
|
-
window.worker.getTicketProject().then((r) => {
|
|
213128
|
+
const loadProject = () => window.worker.getTicketProject().then((r) => {
|
|
213131
213129
|
if (!cancelled) setProject(r?.name ?? null);
|
|
213132
213130
|
}).catch(() => {
|
|
213133
213131
|
if (!cancelled) setProject(null);
|
|
213134
213132
|
});
|
|
213133
|
+
loadProject();
|
|
213135
213134
|
void refreshList();
|
|
213135
|
+
const unsub = window.worker.onCwdChanged(() => {
|
|
213136
|
+
loadProject();
|
|
213137
|
+
void refreshList();
|
|
213138
|
+
});
|
|
213136
213139
|
return () => {
|
|
213137
213140
|
cancelled = true;
|
|
213141
|
+
unsub();
|
|
213138
213142
|
};
|
|
213139
|
-
}, [
|
|
213143
|
+
}, [refreshList]);
|
|
213140
213144
|
const openNewForm = reactExports.useCallback(() => {
|
|
213141
213145
|
setEditingId(null);
|
|
213142
213146
|
setTitle("");
|
|
@@ -213172,129 +213176,122 @@ function TicketPanel({ open, onClose }) {
|
|
|
213172
213176
|
}
|
|
213173
213177
|
}, [title, description, status2, priority, editingId, save.kind, refreshList]);
|
|
213174
213178
|
reactExports.useEffect(() => {
|
|
213175
|
-
if (
|
|
213179
|
+
if (view !== "form") return;
|
|
213176
213180
|
const onKey = (e) => {
|
|
213177
213181
|
if (e.key === "Escape") {
|
|
213178
213182
|
e.preventDefault();
|
|
213179
|
-
|
|
213180
|
-
|
|
213181
|
-
} else if (e.key === "Enter" && (e.metaKey || e.ctrlKey) && view === "form") {
|
|
213183
|
+
setView("list");
|
|
213184
|
+
} else if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) {
|
|
213182
213185
|
e.preventDefault();
|
|
213183
213186
|
void handleSave();
|
|
213184
213187
|
}
|
|
213185
213188
|
};
|
|
213186
213189
|
window.addEventListener("keydown", onKey);
|
|
213187
213190
|
return () => window.removeEventListener("keydown", onKey);
|
|
213188
|
-
}, [
|
|
213189
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
213190
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className:
|
|
213191
|
-
|
|
213192
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-drawer-
|
|
213193
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
213194
|
-
|
|
213195
|
-
|
|
213196
|
-
|
|
213197
|
-
|
|
213198
|
-
|
|
213199
|
-
|
|
213200
|
-
|
|
213201
|
-
|
|
213191
|
+
}, [view, handleSave]);
|
|
213192
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-pane", role: "region", "aria-label": "Tickets", children: [
|
|
213193
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ticket-drawer-header", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-drawer-heading", children: [
|
|
213194
|
+
view === "form" ? /* @__PURE__ */ jsxRuntimeExports.jsx("button", { className: "ticket-drawer-back", onClick: () => setView("list"), title: "Back (Esc)", children: "‹" }) : /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-drawer-badge", children: /* @__PURE__ */ jsxRuntimeExports.jsx(TagIcon, { size: 16 }) }),
|
|
213195
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-drawer-headtext", children: [
|
|
213196
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-drawer-title", children: view === "form" ? editingId ? "Edit ticket" : "New ticket" : "Tickets" }),
|
|
213197
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-drawer-subtitle", children: project ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
213198
|
+
"in ",
|
|
213199
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: project })
|
|
213200
|
+
] }) : /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-drawer-warn", children: "no ctlsurf project for this tab" }) })
|
|
213201
|
+
] })
|
|
213202
|
+
] }) }),
|
|
213203
|
+
view === "list" ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
213204
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-list-body", children: [
|
|
213205
|
+
listLoading && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ticket-list-msg", children: "Loading tickets…" }),
|
|
213206
|
+
!listLoading && listError && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-drawer-error", children: [
|
|
213207
|
+
"⚠ ",
|
|
213208
|
+
listError
|
|
213202
213209
|
] }),
|
|
213203
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
213204
|
-
|
|
213205
|
-
|
|
213206
|
-
|
|
213207
|
-
listLoading && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ticket-list-msg", children: "Loading tickets…" }),
|
|
213208
|
-
!listLoading && listError && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-drawer-error", children: [
|
|
213209
|
-
"⚠ ",
|
|
213210
|
-
listError
|
|
213211
|
-
] }),
|
|
213212
|
-
!listLoading && !listError && tickets.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-empty", children: [
|
|
213213
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-empty-icon", children: /* @__PURE__ */ jsxRuntimeExports.jsx(TagIcon, { size: 26 }) }),
|
|
213214
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-empty-title", children: "No tickets yet" }),
|
|
213215
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-empty-hint", children: "Log the first one for this project." })
|
|
213216
|
-
] }),
|
|
213217
|
-
!listLoading && tickets.map((t) => /* @__PURE__ */ jsxRuntimeExports.jsxs("button", { className: "ticket-card", onClick: () => openEditForm(t), children: [
|
|
213218
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-card-bar", style: { background: colorOf(STATUS_OPTIONS, t.status) } }),
|
|
213219
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-card-main", children: [
|
|
213220
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-card-title", children: t.title || "Untitled" }),
|
|
213221
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-card-meta", children: [
|
|
213222
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "ticket-card-status", style: { color: colorOf(STATUS_OPTIONS, t.status) }, children: [
|
|
213223
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-seg-dot", style: { background: colorOf(STATUS_OPTIONS, t.status) } }),
|
|
213224
|
-
t.status
|
|
213225
|
-
] }),
|
|
213226
|
-
t.created && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-card-date", children: formatDate(t.created) })
|
|
213227
|
-
] })
|
|
213228
|
-
] }),
|
|
213229
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
213230
|
-
"span",
|
|
213231
|
-
{
|
|
213232
|
-
className: "ticket-card-pri",
|
|
213233
|
-
style: { color: colorOf(PRIORITY_OPTIONS, t.priority), borderColor: `${colorOf(PRIORITY_OPTIONS, t.priority)}66` },
|
|
213234
|
-
children: t.priority
|
|
213235
|
-
}
|
|
213236
|
-
)
|
|
213237
|
-
] }, t.id))
|
|
213210
|
+
!listLoading && !listError && tickets.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-empty", children: [
|
|
213211
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-empty-icon", children: /* @__PURE__ */ jsxRuntimeExports.jsx(TagIcon, { size: 26 }) }),
|
|
213212
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-empty-title", children: "No tickets yet" }),
|
|
213213
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-empty-hint", children: "Log the first one for this project." })
|
|
213238
213214
|
] }),
|
|
213239
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("
|
|
213240
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-
|
|
213241
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
213242
|
-
|
|
213243
|
-
|
|
213244
|
-
|
|
213245
|
-
|
|
213246
|
-
|
|
213247
|
-
|
|
213248
|
-
"
|
|
213249
|
-
|
|
213250
|
-
type: "text",
|
|
213251
|
-
className: "ticket-input-title",
|
|
213252
|
-
value: title,
|
|
213253
|
-
autoFocus: true,
|
|
213254
|
-
placeholder: "What needs doing?",
|
|
213255
|
-
onChange: (e) => setTitle(e.target.value)
|
|
213256
|
-
}
|
|
213257
|
-
)
|
|
213258
|
-
] }),
|
|
213259
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "ticket-field", children: [
|
|
213260
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-field-label", children: "Description" }),
|
|
213261
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
213262
|
-
"textarea",
|
|
213263
|
-
{
|
|
213264
|
-
value: description,
|
|
213265
|
-
rows: 5,
|
|
213266
|
-
placeholder: "Add detail, context, links…",
|
|
213267
|
-
onChange: (e) => setDescription(e.target.value)
|
|
213268
|
-
}
|
|
213269
|
-
)
|
|
213270
|
-
] }),
|
|
213271
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-field", children: [
|
|
213272
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-field-label", children: "Status" }),
|
|
213273
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Segmented, { options: STATUS_OPTIONS, value: status2, onChange: setStatus })
|
|
213274
|
-
] }),
|
|
213275
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-field", children: [
|
|
213276
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-field-label", children: "Priority" }),
|
|
213277
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Segmented, { options: PRIORITY_OPTIONS, value: priority, onChange: setPriority })
|
|
213215
|
+
!listLoading && tickets.map((t) => /* @__PURE__ */ jsxRuntimeExports.jsxs("button", { className: "ticket-card", onClick: () => openEditForm(t), children: [
|
|
213216
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-card-bar", style: { background: colorOf(STATUS_OPTIONS, t.status) } }),
|
|
213217
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-card-main", children: [
|
|
213218
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-card-title", children: t.title || "Untitled" }),
|
|
213219
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-card-meta", children: [
|
|
213220
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "ticket-card-status", style: { color: colorOf(STATUS_OPTIONS, t.status) }, children: [
|
|
213221
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-seg-dot", style: { background: colorOf(STATUS_OPTIONS, t.status) } }),
|
|
213222
|
+
t.status
|
|
213223
|
+
] }),
|
|
213224
|
+
t.created && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-card-date", children: formatDate(t.created) })
|
|
213225
|
+
] })
|
|
213278
213226
|
] }),
|
|
213279
|
-
|
|
213280
|
-
"
|
|
213281
|
-
|
|
213282
|
-
|
|
213227
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
213228
|
+
"span",
|
|
213229
|
+
{
|
|
213230
|
+
className: "ticket-card-pri",
|
|
213231
|
+
style: { color: colorOf(PRIORITY_OPTIONS, t.priority), borderColor: `${colorOf(PRIORITY_OPTIONS, t.priority)}66` },
|
|
213232
|
+
children: t.priority
|
|
213233
|
+
}
|
|
213234
|
+
)
|
|
213235
|
+
] }, t.id))
|
|
213236
|
+
] }),
|
|
213237
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-drawer-footer", children: [
|
|
213238
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-drawer-hint", children: tickets.length > 0 && `${tickets.length} ticket${tickets.length === 1 ? "" : "s"}` }),
|
|
213239
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("button", { className: "ticket-btn-primary", onClick: openNewForm, children: "+ New ticket" })
|
|
213240
|
+
] })
|
|
213241
|
+
] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
213242
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-drawer-body", children: [
|
|
213243
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "ticket-field", children: [
|
|
213244
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-field-label", children: "Title" }),
|
|
213245
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
213246
|
+
"input",
|
|
213247
|
+
{
|
|
213248
|
+
type: "text",
|
|
213249
|
+
className: "ticket-input-title",
|
|
213250
|
+
value: title,
|
|
213251
|
+
autoFocus: true,
|
|
213252
|
+
placeholder: "What needs doing?",
|
|
213253
|
+
onChange: (e) => setTitle(e.target.value)
|
|
213254
|
+
}
|
|
213255
|
+
)
|
|
213283
213256
|
] }),
|
|
213284
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("
|
|
213285
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-
|
|
213286
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
213287
|
-
|
|
213288
|
-
|
|
213289
|
-
|
|
213290
|
-
|
|
213291
|
-
|
|
213292
|
-
|
|
213293
|
-
|
|
213294
|
-
|
|
213295
|
-
|
|
213296
|
-
|
|
213297
|
-
|
|
213257
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "ticket-field", children: [
|
|
213258
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-field-label", children: "Description" }),
|
|
213259
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
213260
|
+
"textarea",
|
|
213261
|
+
{
|
|
213262
|
+
value: description,
|
|
213263
|
+
rows: 5,
|
|
213264
|
+
placeholder: "Add detail, context, links…",
|
|
213265
|
+
onChange: (e) => setDescription(e.target.value)
|
|
213266
|
+
}
|
|
213267
|
+
)
|
|
213268
|
+
] }),
|
|
213269
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-field", children: [
|
|
213270
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-field-label", children: "Status" }),
|
|
213271
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Segmented, { options: STATUS_OPTIONS, value: status2, onChange: setStatus })
|
|
213272
|
+
] }),
|
|
213273
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-field", children: [
|
|
213274
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-field-label", children: "Priority" }),
|
|
213275
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Segmented, { options: PRIORITY_OPTIONS, value: priority, onChange: setPriority })
|
|
213276
|
+
] }),
|
|
213277
|
+
save.kind === "error" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-drawer-error", children: [
|
|
213278
|
+
"⚠ ",
|
|
213279
|
+
save.message
|
|
213280
|
+
] })
|
|
213281
|
+
] }),
|
|
213282
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-drawer-footer", children: [
|
|
213283
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-drawer-hint", children: "⌘↵ to save" }),
|
|
213284
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-drawer-footer-btns", children: [
|
|
213285
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("button", { className: "ticket-btn-secondary", onClick: () => setView("list"), children: "Cancel" }),
|
|
213286
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
213287
|
+
"button",
|
|
213288
|
+
{
|
|
213289
|
+
className: "ticket-btn-primary",
|
|
213290
|
+
onClick: handleSave,
|
|
213291
|
+
disabled: !title.trim() || save.kind === "saving",
|
|
213292
|
+
children: save.kind === "saving" ? "Saving…" : editingId ? "Save changes" : "Save ticket"
|
|
213293
|
+
}
|
|
213294
|
+
)
|
|
213298
213295
|
] })
|
|
213299
213296
|
] })
|
|
213300
213297
|
] })
|
|
@@ -213305,7 +213302,7 @@ const DEFAULT_LAYOUT = {
|
|
|
213305
213302
|
direction: "horizontal",
|
|
213306
213303
|
children: [
|
|
213307
213304
|
{ type: "leaf", paneId: "terminal" },
|
|
213308
|
-
{ type: "leaf", paneId: "
|
|
213305
|
+
{ type: "leaf", paneId: "tickets" }
|
|
213309
213306
|
],
|
|
213310
213307
|
sizes: [50, 50]
|
|
213311
213308
|
};
|
|
@@ -213332,7 +213329,7 @@ function App() {
|
|
|
213332
213329
|
});
|
|
213333
213330
|
const [activeTabId, setActiveTabId] = reactExports.useState(tabs[0].id);
|
|
213334
213331
|
const [trackingActive, setTrackingActive] = reactExports.useState(false);
|
|
213335
|
-
const [
|
|
213332
|
+
const [agentStates, setAgentStates] = reactExports.useState({});
|
|
213336
213333
|
const [showFloatingMic, setShowFloatingMic] = reactExports.useState(() => {
|
|
213337
213334
|
try {
|
|
213338
213335
|
return localStorage.getItem("ctlsurf.floatingMicVisible") !== "false";
|
|
@@ -213394,6 +213391,13 @@ function App() {
|
|
|
213394
213391
|
});
|
|
213395
213392
|
return unsub;
|
|
213396
213393
|
}, []);
|
|
213394
|
+
reactExports.useEffect(() => {
|
|
213395
|
+
const unsub = window.worker.onAgentState((tabId, state) => {
|
|
213396
|
+
if (!tabId) return;
|
|
213397
|
+
setAgentStates((prev) => prev[tabId] === state ? prev : { ...prev, [tabId]: state });
|
|
213398
|
+
});
|
|
213399
|
+
return unsub;
|
|
213400
|
+
}, []);
|
|
213397
213401
|
reactExports.useEffect(() => {
|
|
213398
213402
|
let cancelled = false;
|
|
213399
213403
|
const refresh = async () => {
|
|
@@ -213553,6 +213557,10 @@ function App() {
|
|
|
213553
213557
|
e.preventDefault();
|
|
213554
213558
|
togglePane("ctlsurf");
|
|
213555
213559
|
break;
|
|
213560
|
+
case "K":
|
|
213561
|
+
e.preventDefault();
|
|
213562
|
+
togglePane("tickets");
|
|
213563
|
+
break;
|
|
213556
213564
|
}
|
|
213557
213565
|
}
|
|
213558
213566
|
};
|
|
@@ -213585,8 +213593,7 @@ function App() {
|
|
|
213585
213593
|
children: [
|
|
213586
213594
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "terminal-tab-label", children: [
|
|
213587
213595
|
tab.agent ? tab.agent.name : tab.label,
|
|
213588
|
-
tab.agentStatus === "active"
|
|
213589
|
-
tab.agentStatus === "exited" && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "terminal-tab-dot exited" })
|
|
213596
|
+
tab.agentStatus === "exited" ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "terminal-tab-dot exited" }) : agentStates[tab.id] === "awaiting_decision" ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "terminal-tab-dot decision", title: "Awaiting your approval" }) : agentStates[tab.id] === "awaiting_input" ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "terminal-tab-dot awaiting", title: "Awaiting your input" }) : tab.agentStatus === "active" ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "terminal-tab-dot active" }) : null
|
|
213590
213597
|
] }),
|
|
213591
213598
|
tabs.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
213592
213599
|
"button",
|
|
@@ -213629,7 +213636,8 @@ function App() {
|
|
|
213629
213636
|
)) })
|
|
213630
213637
|
] })
|
|
213631
213638
|
},
|
|
213632
|
-
{ id: "ctlsurf", label: "ctlsurf", content: /* @__PURE__ */ jsxRuntimeExports.jsx(CtlsurfPanel, { navigate: ctlsurfNav }) }
|
|
213639
|
+
{ id: "ctlsurf", label: "ctlsurf", content: /* @__PURE__ */ jsxRuntimeExports.jsx(CtlsurfPanel, { navigate: ctlsurfNav }) },
|
|
213640
|
+
{ id: "tickets", label: "Tickets", content: /* @__PURE__ */ jsxRuntimeExports.jsx(TicketPane, {}) }
|
|
213633
213641
|
];
|
|
213634
213642
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "app", children: [
|
|
213635
213643
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "titlebar", children: [
|
|
@@ -213658,9 +213666,9 @@ function App() {
|
|
|
213658
213666
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
213659
213667
|
"button",
|
|
213660
213668
|
{
|
|
213661
|
-
className: `titlebar-btn titlebar-icon-btn ${
|
|
213662
|
-
onClick: () =>
|
|
213663
|
-
title: "
|
|
213669
|
+
className: `titlebar-btn titlebar-icon-btn ${visiblePaneIds.includes("tickets") ? "active" : ""}`,
|
|
213670
|
+
onClick: () => togglePane("tickets"),
|
|
213671
|
+
title: "Toggle tickets pane for the active project",
|
|
213664
213672
|
"aria-label": "Tickets",
|
|
213665
213673
|
children: [
|
|
213666
213674
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
@@ -213754,7 +213762,6 @@ function App() {
|
|
|
213754
213762
|
) }),
|
|
213755
213763
|
/* @__PURE__ */ jsxRuntimeExports.jsx(StatusBar, { wsStatus, cwd: cwd2, onChangeCwd: handleChangeCwd, updateInfo }),
|
|
213756
213764
|
/* @__PURE__ */ jsxRuntimeExports.jsx(SettingsDialog, { open: showSettings, onClose: () => setShowSettings(false) }),
|
|
213757
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TicketPanel, { open: showTicketPanel, onClose: () => setShowTicketPanel(false) }),
|
|
213758
213765
|
showAgentPicker && agents.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
213759
213766
|
AgentPicker,
|
|
213760
213767
|
{
|
|
@@ -7588,6 +7588,24 @@ html, body, #root {
|
|
|
7588
7588
|
background: #565f89;
|
|
7589
7589
|
}
|
|
7590
7590
|
|
|
7591
|
+
/* Agent is waiting on the user — pulse to draw the eye across tabs. */
|
|
7592
|
+
.terminal-tab-dot.awaiting {
|
|
7593
|
+
background: #e0af68; /* amber: waiting for next prompt */
|
|
7594
|
+
color: #e0af68; /* drives the box-shadow glow via currentColor */
|
|
7595
|
+
animation: tab-dot-pulse 1.1s ease-in-out infinite;
|
|
7596
|
+
}
|
|
7597
|
+
|
|
7598
|
+
.terminal-tab-dot.decision {
|
|
7599
|
+
background: #f7768e; /* red: blocked on an approval/permission prompt */
|
|
7600
|
+
color: #f7768e;
|
|
7601
|
+
animation: tab-dot-pulse 1.1s ease-in-out infinite;
|
|
7602
|
+
}
|
|
7603
|
+
|
|
7604
|
+
@keyframes tab-dot-pulse {
|
|
7605
|
+
0%, 100% { opacity: 1; box-shadow: 0 0 0 0 currentColor; }
|
|
7606
|
+
50% { opacity: 0.35; box-shadow: 0 0 4px 1px currentColor; }
|
|
7607
|
+
}
|
|
7608
|
+
|
|
7591
7609
|
.terminal-tab-close {
|
|
7592
7610
|
background: none;
|
|
7593
7611
|
border: none;
|
|
@@ -8826,38 +8844,13 @@ html, body, #root {
|
|
|
8826
8844
|
|
|
8827
8845
|
/* ─── Ticket drawer ──────────────────────────────── */
|
|
8828
8846
|
|
|
8829
|
-
|
|
8830
|
-
|
|
8831
|
-
inset: 0;
|
|
8832
|
-
background: rgba(13, 14, 22, 0.55);
|
|
8833
|
-
backdrop-filter: blur(2px);
|
|
8834
|
-
opacity: 0;
|
|
8835
|
-
pointer-events: none;
|
|
8836
|
-
transition: opacity 0.2s ease;
|
|
8837
|
-
z-index: 90;
|
|
8838
|
-
}
|
|
8839
|
-
.ticket-scrim.open {
|
|
8840
|
-
opacity: 1;
|
|
8841
|
-
pointer-events: auto;
|
|
8842
|
-
}
|
|
8843
|
-
|
|
8844
|
-
.ticket-drawer {
|
|
8845
|
-
position: fixed;
|
|
8846
|
-
top: 0;
|
|
8847
|
-
right: 0;
|
|
8848
|
-
bottom: 0;
|
|
8849
|
-
width: 380px;
|
|
8850
|
-
background: linear-gradient(180deg, #20243a 0%, #1b1e2e 100%);
|
|
8851
|
-
border-left: 1px solid #343860;
|
|
8852
|
-
box-shadow: -16px 0 48px rgba(0, 0, 0, 0.5);
|
|
8847
|
+
/* Docked side-pane variant: fills its pane (header/body/footer flex column). */
|
|
8848
|
+
.ticket-pane {
|
|
8853
8849
|
display: flex;
|
|
8854
8850
|
flex-direction: column;
|
|
8855
|
-
|
|
8856
|
-
|
|
8857
|
-
|
|
8858
|
-
}
|
|
8859
|
-
.ticket-drawer.open {
|
|
8860
|
-
transform: translateX(0);
|
|
8851
|
+
height: 100%;
|
|
8852
|
+
min-height: 0;
|
|
8853
|
+
background: linear-gradient(180deg, #20243a 0%, #1b1e2e 100%);
|
|
8861
8854
|
}
|
|
8862
8855
|
|
|
8863
8856
|
/* ── header ── */
|
|
@@ -8907,22 +8900,6 @@ html, body, #root {
|
|
|
8907
8900
|
.ticket-drawer-warn {
|
|
8908
8901
|
color: #e0af68;
|
|
8909
8902
|
}
|
|
8910
|
-
.ticket-drawer-close {
|
|
8911
|
-
background: none;
|
|
8912
|
-
border: none;
|
|
8913
|
-
color: #565f89;
|
|
8914
|
-
font-size: 20px;
|
|
8915
|
-
line-height: 1;
|
|
8916
|
-
cursor: pointer;
|
|
8917
|
-
padding: 2px 6px;
|
|
8918
|
-
border-radius: 6px;
|
|
8919
|
-
transition: background 0.12s ease, color 0.12s ease;
|
|
8920
|
-
}
|
|
8921
|
-
.ticket-drawer-close:hover {
|
|
8922
|
-
color: #d5dbf5;
|
|
8923
|
-
background: rgba(255, 255, 255, 0.06);
|
|
8924
|
-
}
|
|
8925
|
-
|
|
8926
8903
|
/* ── body ── */
|
|
8927
8904
|
.ticket-drawer-body {
|
|
8928
8905
|
flex: 1;
|