@phenx-inc/ctlsurf 0.10.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.
Files changed (27) hide show
  1. package/out/headless/index.mjs +1 -1
  2. package/out/headless/index.mjs.map +1 -1
  3. package/out/main/index.js +46 -21
  4. package/out/renderer/assets/{cssMode-BbCVOTaJ.js → cssMode-Bmzy9hKX.js} +3 -3
  5. package/out/renderer/assets/{freemarker2-DryLywQv.js → freemarker2-CDAsExTa.js} +1 -1
  6. package/out/renderer/assets/{handlebars-CdUMtSdr.js → handlebars-CvpBYG1L.js} +1 -1
  7. package/out/renderer/assets/{html-Cwkf2GMH.js → html-CNhEQqr8.js} +1 -1
  8. package/out/renderer/assets/{htmlMode-C7PzhXxH.js → htmlMode-DD7YPgga.js} +3 -3
  9. package/out/renderer/assets/{index-Dg1vMspf.js → index-BDlCPzCG.js} +144 -144
  10. package/out/renderer/assets/{index-BIceGcz3.css → index-CGHeDwZa.css} +5 -46
  11. package/out/renderer/assets/{javascript-Cy7ROXJl.js → javascript-CsGLsswK.js} +2 -2
  12. package/out/renderer/assets/{jsonMode-BtZtt3QW.js → jsonMode-CTuGgRvC.js} +3 -3
  13. package/out/renderer/assets/{liquid-xReAQeYs.js → liquid-BrrN4uul.js} +1 -1
  14. package/out/renderer/assets/{lspLanguageFeatures-Dmx0L0Bw.js → lspLanguageFeatures-Bhdn2Eqy.js} +1 -1
  15. package/out/renderer/assets/{mdx-YMNFO1Zz.js → mdx-DJo-gax4.js} +1 -1
  16. package/out/renderer/assets/{python-BExaDVxv.js → python-DYHeg5b2.js} +1 -1
  17. package/out/renderer/assets/{razor-HL8ANmQ4.js → razor-Cqcks14K.js} +1 -1
  18. package/out/renderer/assets/{tsMode-Dqd8vdLE.js → tsMode-YTLgCayh.js} +1 -1
  19. package/out/renderer/assets/{typescript-Dysz1PTX.js → typescript-oxBn_Vcw.js} +1 -1
  20. package/out/renderer/assets/{xml-BHp5Z9nc.js → xml-BEqGMCTc.js} +1 -1
  21. package/out/renderer/assets/{yaml-CPDHxVup.js → yaml-BGSrk5HC.js} +1 -1
  22. package/out/renderer/index.html +2 -2
  23. package/package.json +1 -1
  24. package/src/main/index.ts +60 -31
  25. package/src/renderer/App.tsx +9 -7
  26. package/src/renderer/components/TicketPanel.tsx +20 -25
  27. package/src/renderer/styles.css +5 -46
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./cssMode-BbCVOTaJ.js","./lspLanguageFeatures-Dmx0L0Bw.js","./htmlMode-C7PzhXxH.js","./jsonMode-BtZtt3QW.js","./javascript-Cy7ROXJl.js","./typescript-Dysz1PTX.js"])))=>i.map(i=>d[i]);
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-BbCVOTaJ.js"), true ? __vite__mapDeps([0,1]) : void 0, import.meta.url);
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-C7PzhXxH.js"), true ? __vite__mapDeps([2,1]) : void 0, import.meta.url);
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-BtZtt3QW.js"), true ? __vite__mapDeps([3,1]) : void 0, import.meta.url);
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-Dqd8vdLE.js"), true ? [] : void 0, import.meta.url);
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-DryLywQv.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationDollar);
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-DryLywQv.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAngleInterpolationDollar);
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-DryLywQv.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagBracketInterpolationDollar);
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-DryLywQv.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAngleInterpolationBracket);
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-DryLywQv.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagBracketInterpolationBracket);
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-DryLywQv.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationDollar);
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-DryLywQv.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationBracket);
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-CdUMtSdr.js"), true ? [] : void 0, import.meta.url)
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-Cwkf2GMH.js"), true ? [] : void 0, import.meta.url)
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-Cy7ROXJl.js"), true ? __vite__mapDeps([4,5]) : void 0, import.meta.url)
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-xReAQeYs.js"), true ? [] : void 0, import.meta.url)
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-YMNFO1Zz.js"), true ? [] : void 0, import.meta.url)
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-BExaDVxv.js"), true ? [] : void 0, import.meta.url)
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-HL8ANmQ4.js"), true ? [] : void 0, import.meta.url)
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-Dysz1PTX.js"), true ? [] : void 0, import.meta.url);
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-BHp5Z9nc.js"), true ? [] : void 0, import.meta.url)
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-CPDHxVup.js"), true ? [] : void 0, import.meta.url)
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 TicketPanel({ open, onClose }) {
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
- }, [open, refreshList]);
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 (!open) return;
213179
+ if (view !== "form") return;
213176
213180
  const onKey = (e) => {
213177
213181
  if (e.key === "Escape") {
213178
213182
  e.preventDefault();
213179
- if (view === "form") setView("list");
213180
- else onClose();
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
- }, [open, view, onClose, handleSave]);
213189
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
213190
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `ticket-scrim ${open ? "open" : ""}`, onClick: onClose }),
213191
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `ticket-drawer ${open ? "open" : ""}`, role: "dialog", "aria-label": "Tickets", children: [
213192
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-drawer-header", children: [
213193
- /* @__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
- ] })
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.jsx("button", { className: "ticket-drawer-close", onClick: onClose, title: "Close", children: "×" })
213204
- ] }),
213205
- view === "list" ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
213206
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-list-body", children: [
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("div", { className: "ticket-drawer-footer", children: [
213240
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-drawer-hint", children: tickets.length > 0 && `${tickets.length} ticket${tickets.length === 1 ? "" : "s"}` }),
213241
- /* @__PURE__ */ jsxRuntimeExports.jsx("button", { className: "ticket-btn-primary", onClick: openNewForm, children: "+ New ticket" })
213242
- ] })
213243
- ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
213244
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-drawer-body", children: [
213245
- /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "ticket-field", children: [
213246
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-field-label", children: "Title" }),
213247
- /* @__PURE__ */ jsxRuntimeExports.jsx(
213248
- "input",
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
- save.kind === "error" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-drawer-error", children: [
213280
- "⚠ ",
213281
- save.message
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("div", { className: "ticket-drawer-footer", children: [
213285
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ticket-drawer-hint", children: "⌘↵ to save" }),
213286
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ticket-drawer-footer-btns", children: [
213287
- /* @__PURE__ */ jsxRuntimeExports.jsx("button", { className: "ticket-btn-secondary", onClick: () => setView("list"), children: "Cancel" }),
213288
- /* @__PURE__ */ jsxRuntimeExports.jsx(
213289
- "button",
213290
- {
213291
- className: "ticket-btn-primary",
213292
- onClick: handleSave,
213293
- disabled: !title.trim() || save.kind === "saving",
213294
- children: save.kind === "saving" ? "Saving…" : editingId ? "Save changes" : "Save ticket"
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: "ctlsurf" }
213305
+ { type: "leaf", paneId: "tickets" }
213309
213306
  ],
213310
213307
  sizes: [50, 50]
213311
213308
  };
@@ -213333,7 +213330,6 @@ function App() {
213333
213330
  const [activeTabId, setActiveTabId] = reactExports.useState(tabs[0].id);
213334
213331
  const [trackingActive, setTrackingActive] = reactExports.useState(false);
213335
213332
  const [agentStates, setAgentStates] = reactExports.useState({});
213336
- const [showTicketPanel, setShowTicketPanel] = reactExports.useState(false);
213337
213333
  const [showFloatingMic, setShowFloatingMic] = reactExports.useState(() => {
213338
213334
  try {
213339
213335
  return localStorage.getItem("ctlsurf.floatingMicVisible") !== "false";
@@ -213561,6 +213557,10 @@ function App() {
213561
213557
  e.preventDefault();
213562
213558
  togglePane("ctlsurf");
213563
213559
  break;
213560
+ case "K":
213561
+ e.preventDefault();
213562
+ togglePane("tickets");
213563
+ break;
213564
213564
  }
213565
213565
  }
213566
213566
  };
@@ -213636,7 +213636,8 @@ function App() {
213636
213636
  )) })
213637
213637
  ] })
213638
213638
  },
213639
- { 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, {}) }
213640
213641
  ];
213641
213642
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "app", children: [
213642
213643
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "titlebar", children: [
@@ -213665,9 +213666,9 @@ function App() {
213665
213666
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
213666
213667
  "button",
213667
213668
  {
213668
- className: `titlebar-btn titlebar-icon-btn ${showTicketPanel ? "active" : ""}`,
213669
- onClick: () => setShowTicketPanel((v2) => !v2),
213670
- title: "Tickets for the active project",
213669
+ className: `titlebar-btn titlebar-icon-btn ${visiblePaneIds.includes("tickets") ? "active" : ""}`,
213670
+ onClick: () => togglePane("tickets"),
213671
+ title: "Toggle tickets pane for the active project",
213671
213672
  "aria-label": "Tickets",
213672
213673
  children: [
213673
213674
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
@@ -213761,7 +213762,6 @@ function App() {
213761
213762
  ) }),
213762
213763
  /* @__PURE__ */ jsxRuntimeExports.jsx(StatusBar, { wsStatus, cwd: cwd2, onChangeCwd: handleChangeCwd, updateInfo }),
213763
213764
  /* @__PURE__ */ jsxRuntimeExports.jsx(SettingsDialog, { open: showSettings, onClose: () => setShowSettings(false) }),
213764
- /* @__PURE__ */ jsxRuntimeExports.jsx(TicketPanel, { open: showTicketPanel, onClose: () => setShowTicketPanel(false) }),
213765
213765
  showAgentPicker && agents.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(
213766
213766
  AgentPicker,
213767
213767
  {
@@ -8844,38 +8844,13 @@ html, body, #root {
8844
8844
 
8845
8845
  /* ─── Ticket drawer ──────────────────────────────── */
8846
8846
 
8847
- .ticket-scrim {
8848
- position: fixed;
8849
- inset: 0;
8850
- background: rgba(13, 14, 22, 0.55);
8851
- backdrop-filter: blur(2px);
8852
- opacity: 0;
8853
- pointer-events: none;
8854
- transition: opacity 0.2s ease;
8855
- z-index: 90;
8856
- }
8857
- .ticket-scrim.open {
8858
- opacity: 1;
8859
- pointer-events: auto;
8860
- }
8861
-
8862
- .ticket-drawer {
8863
- position: fixed;
8864
- top: 0;
8865
- right: 0;
8866
- bottom: 0;
8867
- width: 380px;
8868
- background: linear-gradient(180deg, #20243a 0%, #1b1e2e 100%);
8869
- border-left: 1px solid #343860;
8870
- 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 {
8871
8849
  display: flex;
8872
8850
  flex-direction: column;
8873
- transform: translateX(100%);
8874
- transition: transform 0.24s cubic-bezier(0.32, 0.72, 0, 1);
8875
- z-index: 100;
8876
- }
8877
- .ticket-drawer.open {
8878
- transform: translateX(0);
8851
+ height: 100%;
8852
+ min-height: 0;
8853
+ background: linear-gradient(180deg, #20243a 0%, #1b1e2e 100%);
8879
8854
  }
8880
8855
 
8881
8856
  /* ── header ── */
@@ -8925,22 +8900,6 @@ html, body, #root {
8925
8900
  .ticket-drawer-warn {
8926
8901
  color: #e0af68;
8927
8902
  }
8928
- .ticket-drawer-close {
8929
- background: none;
8930
- border: none;
8931
- color: #565f89;
8932
- font-size: 20px;
8933
- line-height: 1;
8934
- cursor: pointer;
8935
- padding: 2px 6px;
8936
- border-radius: 6px;
8937
- transition: background 0.12s ease, color 0.12s ease;
8938
- }
8939
- .ticket-drawer-close:hover {
8940
- color: #d5dbf5;
8941
- background: rgba(255, 255, 255, 0.06);
8942
- }
8943
-
8944
8903
  /* ── body ── */
8945
8904
  .ticket-drawer-body {
8946
8905
  flex: 1;
@@ -1,5 +1,5 @@
1
- import { conf as conf$1, language as language$1 } from "./typescript-Dysz1PTX.js";
2
- import "./index-Dg1vMspf.js";
1
+ import { conf as conf$1, language as language$1 } from "./typescript-oxBn_Vcw.js";
2
+ import "./index-BDlCPzCG.js";
3
3
  const conf = conf$1;
4
4
  const language = {
5
5
  // Set defaultToken to invalid to see what you do not tokenize yet
@@ -1,6 +1,6 @@
1
- import { c as createWebWorker, l as languages, e as editor } from "./index-Dg1vMspf.js";
2
- import { f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider, C as CompletionAdapter, H as HoverAdapter, b as DocumentSymbolAdapter, d as DocumentColorAdapter, F as FoldingRangeAdapter, S as SelectionRangeAdapter, e as DiagnosticsAdapter } from "./lspLanguageFeatures-Dmx0L0Bw.js";
3
- import { a, D, h, R, c, i, j, t, k } from "./lspLanguageFeatures-Dmx0L0Bw.js";
1
+ import { c as createWebWorker, l as languages, e as editor } from "./index-BDlCPzCG.js";
2
+ import { f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider, C as CompletionAdapter, H as HoverAdapter, b as DocumentSymbolAdapter, d as DocumentColorAdapter, F as FoldingRangeAdapter, S as SelectionRangeAdapter, e as DiagnosticsAdapter } from "./lspLanguageFeatures-Bhdn2Eqy.js";
3
+ import { a, D, h, R, c, i, j, t, k } from "./lspLanguageFeatures-Bhdn2Eqy.js";
4
4
  const STOP_WHEN_IDLE_FOR = 2 * 60 * 1e3;
5
5
  class WorkerManager {
6
6
  constructor(defaults) {
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-Dg1vMspf.js";
1
+ import { l as languages } from "./index-BDlCPzCG.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "area",
4
4
  "base",
@@ -1,4 +1,4 @@
1
- import { R as Range$1, l as languages, e as editor, U as Uri, M as MarkerSeverity } from "./index-Dg1vMspf.js";
1
+ import { R as Range$1, l as languages, e as editor, U as Uri, M as MarkerSeverity } from "./index-BDlCPzCG.js";
2
2
  var DocumentUri;
3
3
  (function(DocumentUri2) {
4
4
  function is(value) {
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-Dg1vMspf.js";
1
+ import { l as languages } from "./index-BDlCPzCG.js";
2
2
  const conf = {
3
3
  comments: {
4
4
  blockComment: ["{/*", "*/}"]