@eclipse-docks/core 0.7.127 → 0.7.132

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 (136) hide show
  1. package/dist/api/index.js +7 -7
  2. package/dist/api/services.d.ts +3 -1
  3. package/dist/api/services.d.ts.map +1 -1
  4. package/dist/{api-Da9zQcfd.js → api-DImisUWV.js} +296 -305
  5. package/dist/api-DImisUWV.js.map +1 -0
  6. package/dist/assets/{js-runtime-worker-DAva_aXx.js.map → js-runtime-worker-X93bOre4.js.map} +1 -1
  7. package/dist/components/attribution.d.ts +1 -0
  8. package/dist/components/attribution.d.ts.map +1 -1
  9. package/dist/components/command.d.ts +0 -1
  10. package/dist/components/command.d.ts.map +1 -1
  11. package/dist/components/extensions.d.ts +3 -0
  12. package/dist/components/extensions.d.ts.map +1 -1
  13. package/dist/components/language-selector.d.ts.map +1 -1
  14. package/dist/components/layout-switcher.d.ts +1 -1
  15. package/dist/components/layout-switcher.d.ts.map +1 -1
  16. package/dist/components/npm-packages.d.ts +1 -0
  17. package/dist/components/npm-packages.d.ts.map +1 -1
  18. package/dist/components/release-history.d.ts +9 -2
  19. package/dist/components/release-history.d.ts.map +1 -1
  20. package/dist/components/tasks.d.ts.map +1 -1
  21. package/dist/core/apploader.d.ts +2 -9
  22. package/dist/core/apploader.d.ts.map +1 -1
  23. package/dist/core/contribution-targets.d.ts +1 -0
  24. package/dist/core/contribution-targets.d.ts.map +1 -1
  25. package/dist/core/dialogservice.d.ts +3 -1
  26. package/dist/core/dialogservice.d.ts.map +1 -1
  27. package/dist/core/dropdown-item.d.ts +8 -0
  28. package/dist/core/dropdown-item.d.ts.map +1 -1
  29. package/dist/core/events.js +1 -1
  30. package/dist/core/layout-panels.d.ts +25 -0
  31. package/dist/core/layout-panels.d.ts.map +1 -0
  32. package/dist/dialogs/navigable-info-dialog.d.ts.map +1 -1
  33. package/dist/dialogs/version-info-dialog.d.ts +18 -2
  34. package/dist/dialogs/version-info-dialog.d.ts.map +1 -1
  35. package/dist/{events-B_ZxkU_G.js → events-BAE5R6TH.js} +1 -1
  36. package/dist/{events-B_ZxkU_G.js.map → events-BAE5R6TH.js.map} +1 -1
  37. package/dist/{extensions.de-Ct1DIybE.js → extensions.de-O6Sx3_t4.js} +1 -1
  38. package/dist/{extensions.de-Ct1DIybE.js.map → extensions.de-O6Sx3_t4.js.map} +1 -1
  39. package/dist/{extensions.en-DRPFtVHT.js → extensions.en-fwqJr8P-.js} +1 -1
  40. package/dist/{extensions.en-DRPFtVHT.js.map → extensions.en-fwqJr8P-.js.map} +1 -1
  41. package/dist/externals/lit.js +1 -1
  42. package/dist/externals/third-party.js.map +1 -1
  43. package/dist/externals/webawesome.js +1 -1
  44. package/dist/{fastviews.de-BFxFslBz.js → fastviews.de-C-B48vwv.js} +1 -1
  45. package/dist/fastviews.de-C-B48vwv.js.map +1 -0
  46. package/dist/{fastviews.en-Cb4J_JXL.js → fastviews.en-BlAxYlHD.js} +1 -1
  47. package/dist/fastviews.en-BlAxYlHD.js.map +1 -0
  48. package/dist/{filebrowser.de-GEf6Eilh.js → filebrowser.de-LWsrI9xj.js} +1 -1
  49. package/dist/{filebrowser.de-GEf6Eilh.js.map → filebrowser.de-LWsrI9xj.js.map} +1 -1
  50. package/dist/{filebrowser.en-o0Ad5f7Z.js → filebrowser.en-C02vpzAs.js} +1 -1
  51. package/dist/{filebrowser.en-o0Ad5f7Z.js.map → filebrowser.en-C02vpzAs.js.map} +1 -1
  52. package/dist/{fs-access-DTXPsV1W.js → fs-access-Cjcg0_Me.js} +27 -25
  53. package/dist/{fs-access-DTXPsV1W.js.map → fs-access-Cjcg0_Me.js.map} +1 -1
  54. package/dist/fs-access-Dp9Fwsxk.js +2 -0
  55. package/dist/index.js +7 -7
  56. package/dist/layouts/standard-layout.d.ts +9 -1
  57. package/dist/layouts/standard-layout.d.ts.map +1 -1
  58. package/dist/{logger-DT0_NW3S.js → logger-CiT0Cc4g.js} +1 -1
  59. package/dist/{logger-DT0_NW3S.js.map → logger-CiT0Cc4g.js.map} +1 -1
  60. package/dist/{logterminal.de-DKp940Ox.js → logterminal.de-BP1FuxHH.js} +1 -1
  61. package/dist/{logterminal.de-DKp940Ox.js.map → logterminal.de-BP1FuxHH.js.map} +1 -1
  62. package/dist/{logterminal.en-Ci2nm0b2.js → logterminal.en-BeDRvTvb.js} +1 -1
  63. package/dist/{logterminal.en-Ci2nm0b2.js.map → logterminal.en-BeDRvTvb.js.map} +1 -1
  64. package/dist/{partname.de-v76uEl0F.js → partname.de-C0I4Wf2X.js} +1 -1
  65. package/dist/{partname.de-v76uEl0F.js.map → partname.de-C0I4Wf2X.js.map} +1 -1
  66. package/dist/{partname.en-By5aAawT.js → partname.en-CIT8z3cY.js} +1 -1
  67. package/dist/{partname.en-By5aAawT.js.map → partname.en-CIT8z3cY.js.map} +1 -1
  68. package/dist/parts/contextmenu.d.ts.map +1 -1
  69. package/dist/parts/index.js +1 -1
  70. package/dist/parts/part.d.ts +2 -0
  71. package/dist/parts/part.d.ts.map +1 -1
  72. package/dist/parts/resizable-grid.d.ts +10 -3
  73. package/dist/parts/resizable-grid.d.ts.map +1 -1
  74. package/dist/parts/tabs.d.ts +6 -0
  75. package/dist/parts/tabs.d.ts.map +1 -1
  76. package/dist/{parts-CRVxaDd-.js → parts-DQRktiiR.js} +1086 -611
  77. package/dist/parts-DQRktiiR.js.map +1 -0
  78. package/dist/{tasks.de-y2xPmQ1k.js → tasks.de-DRvUVugd.js} +1 -1
  79. package/dist/{tasks.de-y2xPmQ1k.js.map → tasks.de-DRvUVugd.js.map} +1 -1
  80. package/dist/{tasks.en-BTbFrxJj.js → tasks.en-dRDildBd.js} +1 -1
  81. package/dist/{tasks.en-BTbFrxJj.js.map → tasks.en-dRDildBd.js.map} +1 -1
  82. package/dist/vite-plugin-app-splash.js.map +1 -1
  83. package/dist/vite-plugin-local-aliases.js +1 -1
  84. package/dist/vite-plugin-local-aliases.js.map +1 -1
  85. package/dist/vite-plugin-resolve-deps.d.ts +6 -3
  86. package/dist/vite-plugin-resolve-deps.d.ts.map +1 -1
  87. package/dist/vite-plugin-resolve-deps.js +17 -15
  88. package/dist/vite-plugin-resolve-deps.js.map +1 -1
  89. package/dist/{webawesome-Y1_HnKa_.js → webawesome-C0Da7hPu.js} +19 -11
  90. package/dist/webawesome-C0Da7hPu.js.map +1 -0
  91. package/dist/{widget-BqQtioK1.js → widget-DUR6wxME.js} +6 -5
  92. package/dist/{widget-BqQtioK1.js.map → widget-DUR6wxME.js.map} +1 -1
  93. package/dist/widgets/index.js +1 -1
  94. package/dist/{widgets-C9V42Mqq.js → widgets-A9XMOA_j.js} +2 -2
  95. package/dist/{widgets-C9V42Mqq.js.map → widgets-A9XMOA_j.js.map} +1 -1
  96. package/package.json +1 -1
  97. package/src/api/services.ts +12 -0
  98. package/src/components/attribution.ts +2 -0
  99. package/src/components/command.ts +2 -8
  100. package/src/components/extensions.ts +20 -3
  101. package/src/components/language-selector.ts +0 -1
  102. package/src/components/layout-switcher.ts +39 -26
  103. package/src/components/npm-packages.ts +2 -0
  104. package/src/components/release-history.ts +29 -40
  105. package/src/components/tasks.ts +0 -1
  106. package/src/contributions/default-layout-contributions.ts +7 -43
  107. package/src/contributions/default-ui-contributions.ts +4 -4
  108. package/src/core/apploader.ts +7 -54
  109. package/src/core/contribution-targets.ts +1 -0
  110. package/src/core/dialogservice.ts +76 -19
  111. package/src/core/dropdown-item.ts +52 -17
  112. package/src/core/extensionregistry.ts +1 -1
  113. package/src/core/layout-panels.ts +121 -0
  114. package/src/dialogs/navigable-info-dialog.ts +5 -2
  115. package/src/dialogs/version-info-dialog.ts +163 -21
  116. package/src/icons/icons.txt +4 -2
  117. package/src/icons/layout-standard-bottom-panel.svg +4 -4
  118. package/src/icons/layout-standard-full.svg +4 -4
  119. package/src/icons/layout-standard-left-aux.svg +8 -0
  120. package/src/icons/layout-standard-left-sidebar.svg +5 -0
  121. package/src/icons/layout-standard-right-aux.svg +8 -0
  122. package/src/icons/layout-standard-right-sidebar.svg +5 -0
  123. package/src/layouts/standard-layout.ts +81 -5
  124. package/src/parts/contextmenu.ts +2 -1
  125. package/src/parts/part.ts +24 -0
  126. package/src/parts/resizable-grid.ts +125 -57
  127. package/src/parts/tabs.ts +103 -0
  128. package/src/vite-plugin-resolve-deps.ts +29 -25
  129. package/dist/api-Da9zQcfd.js.map +0 -1
  130. package/dist/fastviews.de-BFxFslBz.js.map +0 -1
  131. package/dist/fastviews.en-Cb4J_JXL.js.map +0 -1
  132. package/dist/fs-access-CzOh5ot8.js +0 -2
  133. package/dist/parts-CRVxaDd-.js.map +0 -1
  134. package/dist/webawesome-Y1_HnKa_.js.map +0 -1
  135. package/src/icons/layout-standard-bottom-sidebar.svg +0 -6
  136. package/src/icons/layout-standard.svg +0 -6
@@ -1,9 +1,9 @@
1
- import { A as taskService, B as SIDEBAR_AUXILIARY, C as DocksElement, D as TOPIC_EXTENSIONS_CHANGED, E as keyBindingManager, G as SYSTEM_LAYOUTS, H as SIDEBAR_MAIN_BOTTOM, I as constants_exports, J as TOOLBAR_BOTTOM_CENTER, L as ABOUT_TABS, M as appSettings, O as extensionRegistry, Q as TOOLBAR_MAIN_RIGHT, R as EDITOR_AREA_MAIN, U as SIDEBAR_MAIN_TOOLBAR, V as SIDEBAR_MAIN, W as SYSTEM_ATTRIBUTIONS, X as TOOLBAR_MAIN, Y as TOOLBAR_BOTTOM_END, Z as TOOLBAR_MAIN_CENTER, b as deleteIndexedDbWorkspaceData, c as icon, d as filebrowserDialog, i as renderDropdownContribution, j as TOPIC_SETTINGS_CHANGED, k as esmShService, n as DocksContainer, o as renderDropdownItem, p as confirmDialog, q as TOOLBAR_BOTTOM, s as renderDropdownSubmenu, t as DocksPart, u as versionInfoDialog, v as promptDialog, w as parseMarkdownHtml, y as appLoaderService, z as PANEL_BOTTOM } from "./parts-CRVxaDd-.js";
2
- import { a as unregisterLogHandler, o as rootContext, r as registerLogHandler, s as uiContext, t as createLogger } from "./logger-DT0_NW3S.js";
3
- import { E as toastWarning, T as toastInfo, d as activeSelectionSignal, f as activeTasksSignal, g as contributionRegistry, h as TOPIC_CONTRIBUTEIONS_CHANGED, n as watchSignal, s as registerAll, t as DocksWidget, u as activePartSignal, v as getContributionVisible, w as toastError } from "./widget-BqQtioK1.js";
4
- import { n as subscribe, t as publish } from "./events-B_ZxkU_G.js";
5
- import { a as File, d as UnavailableWorkspaceFolderDirectory, i as Directory, l as TOPIC_WORKSPACE_CHANGED, o as FileContentType, p as workspaceService, s as Resource, u as TOPIC_WORKSPACE_CONNECTED } from "./fs-access-DTXPsV1W.js";
6
- import "./widgets-C9V42Mqq.js";
1
+ import { A as filebrowserDialog, C as TOOLBAR_INFO, D as TOOLBAR_THEME_SWITCHER, E as TOOLBAR_TASKS, G as keyBindingManager, H as DocksElement, J as esmShService, K as TOPIC_EXTENSIONS_CHANGED, L as promptDialog, M as confirmDialog, O as VIEW_FILEBROWSER, R as appLoaderService, S as TOOLBAR_FULLSCREEN, T as TOOLBAR_LAYOUT_SWITCHER, X as TOPIC_SETTINGS_CHANGED, Y as taskService, Z as appSettings, _t as TOOLBAR_MAIN_CENTER, a as renderDropdownItem, at as SIDEBAR_AUXILIARY, b as TOOLBAR_ACTIVE_PART_NAME, ct as SIDEBAR_MAIN_BOTTOM, d as DocksContainer, dt as SYSTEM_LAYOUTS, f as ABOUT_TAB_ATTRIBUTIONS, gt as TOOLBAR_MAIN, h as ATTRIBUTION_ECLIPSE_DOCKS, ht as TOOLBAR_BOTTOM_END, it as PANEL_BOTTOM, k as VIEW_LOG_TERMINAL, l as versionInfoDialog, lt as SIDEBAR_MAIN_TOOLBAR, m as ABOUT_TAB_RELEASE, mt as TOOLBAR_BOTTOM_CENTER, nt as ABOUT_TABS, o as renderDropdownSubmenu, ot as SIDEBAR_AUXILIARY_BOTTOM, p as ABOUT_TAB_PACKAGES, pt as TOOLBAR_BOTTOM, q as extensionRegistry, r as renderDropdownContribution, rt as EDITOR_AREA_MAIN, s as icon, st as SIDEBAR_MAIN, t as handleDropdownWaSelect, tt as constants_exports, u as DocksPart, ut as SYSTEM_ATTRIBUTIONS, v as SIDEBAR_TOOLBAR_EXTENSIONS, vt as TOOLBAR_MAIN_RIGHT, w as TOOLBAR_LANGUAGE_SELECTOR, x as TOOLBAR_FAST_VIEWS, z as deleteIndexedDbWorkspaceData } from "./parts-DQRktiiR.js";
2
+ import { a as unregisterLogHandler, o as rootContext, r as registerLogHandler, s as uiContext, t as createLogger } from "./logger-CiT0Cc4g.js";
3
+ import { E as toastWarning, T as toastInfo, d as activeSelectionSignal, f as activeTasksSignal, g as contributionRegistry, h as TOPIC_CONTRIBUTEIONS_CHANGED, n as watchSignal, s as registerAll, t as DocksWidget, u as activePartSignal, v as getContributionVisible, w as toastError } from "./widget-DUR6wxME.js";
4
+ import { n as subscribe, t as publish } from "./events-BAE5R6TH.js";
5
+ import { a as File, d as UnavailableWorkspaceFolderDirectory, i as Directory, l as TOPIC_WORKSPACE_CHANGED, o as FileContentType, p as workspaceService, s as Resource, u as TOPIC_WORKSPACE_CONNECTED } from "./fs-access-Cjcg0_Me.js";
6
+ import "./widgets-A9XMOA_j.js";
7
7
  import { css, html, nothing, render } from "lit";
8
8
  import { signal } from "@lit-labs/signals";
9
9
  import { unsafeHTML } from "lit/directives/unsafe-html.js";
@@ -37,7 +37,7 @@ function replaceParameters(text, params) {
37
37
  if (!params) return text;
38
38
  return text.replace(/\{(\w+)\}/g, (match, paramKey) => params[paramKey] !== void 0 ? params[paramKey] : match);
39
39
  }
40
- var supportedLocales = new Set(["en"]);
40
+ var supportedLocales = /* @__PURE__ */ new Set(["en"]);
41
41
  var supportedLocalesSignal = signal(supportedLocales);
42
42
  var languageFromSettings = null;
43
43
  function addSupportedLocales(locales) {
@@ -133,7 +133,8 @@ var EditorRegistry = class {
133
133
  }
134
134
  getSortedIconContributions() {
135
135
  if (this.cachedIconContributions !== null) return this.cachedIconContributions;
136
- this.cachedIconContributions = [...contributionRegistry.getContributions("system.icons")].sort((a, b) => {
136
+ const contributions = contributionRegistry.getContributions("system.icons");
137
+ this.cachedIconContributions = [...contributions].sort((a, b) => {
137
138
  const priorityA = a.priority ?? 0;
138
139
  const priorityB = b.priority ?? 0;
139
140
  if (priorityB !== priorityA) return priorityB - priorityA;
@@ -299,10 +300,10 @@ var treeNodeComparator = (c1, c2) => {
299
300
  //#endregion
300
301
  //#region src/components/filebrowser.ts
301
302
  var _DocksFileBrowser;
302
- var logger$2 = createLogger("DocksFileBrowser");
303
- var t$6 = await i18n(/* @__PURE__ */ Object.assign({
304
- "./filebrowser.de.json": () => import("./filebrowser.de-GEf6Eilh.js"),
305
- "./filebrowser.en.json": () => import("./filebrowser.en-o0Ad5f7Z.js")
303
+ var logger$1 = createLogger("DocksFileBrowser");
304
+ var t$6 = await i18n(/* #__PURE__ */ Object.assign({
305
+ "./filebrowser.de.json": () => import("./filebrowser.de-LWsrI9xj.js"),
306
+ "./filebrowser.en.json": () => import("./filebrowser.en-C02vpzAs.js")
306
307
  }));
307
308
  var WORKSPACE_CHANGED_DEBOUNCE_MS = 250;
308
309
  var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
@@ -501,7 +502,7 @@ var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
501
502
  }
502
503
  if (info?.backendName) node.workspaceTag = info.backendName;
503
504
  } catch (e) {
504
- logger$2.debug("Failed to get workspace info for directory", e);
505
+ logger$1.debug("Failed to get workspace info for directory", e);
505
506
  }
506
507
  if (resource instanceof Directory && loadChildren) {
507
508
  try {
@@ -529,7 +530,7 @@ var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
529
530
  return node;
530
531
  }
531
532
  node.loadError = error instanceof Error ? error.message : String(error);
532
- logger$2.error("Failed to load directory children:", error);
533
+ logger$1.error("Failed to load directory children:", error);
533
534
  }
534
535
  node.loaded = true;
535
536
  }
@@ -628,7 +629,7 @@ var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
628
629
  return;
629
630
  }
630
631
  node.loadError = error instanceof Error ? error.message : String(error);
631
- logger$2.error("Failed to load directory children:", error);
632
+ logger$1.error("Failed to load directory children:", error);
632
633
  this.requestUpdate();
633
634
  } finally {
634
635
  this.loadingNodes.delete(node);
@@ -698,8 +699,10 @@ var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
698
699
  return;
699
700
  }
700
701
  e.preventDefault();
701
- if (e.dataTransfer) if (isWorkspaceDrop) e.dataTransfer.dropEffect = e.ctrlKey || e.metaKey ? "copy" : "move";
702
- else e.dataTransfer.dropEffect = "copy";
702
+ if (e.dataTransfer) {
703
+ if (isWorkspaceDrop) e.dataTransfer.dropEffect = e.ctrlKey || e.metaKey ? "copy" : "move";
704
+ else e.dataTransfer.dropEffect = "copy";
705
+ }
703
706
  treeElement.classList.add("drag-over");
704
707
  const treeItem = e.target.closest("wa-tree-item");
705
708
  if (!treeItem) {
@@ -770,7 +773,7 @@ var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
770
773
  if (paths.length === 0) return;
771
774
  const workspace = await workspaceService.getWorkspace();
772
775
  if (!workspace) {
773
- logger$2.warn("Workspace drop ignored because no workspace is connected");
776
+ logger$1.warn("Workspace drop ignored because no workspace is connected");
774
777
  return;
775
778
  }
776
779
  const moveWithinSameBackend = async (src) => {
@@ -787,7 +790,7 @@ var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
787
790
  for (const path of paths) try {
788
791
  const src = await workspace.getResource(path);
789
792
  if (!src) {
790
- logger$2.warn(`Workspace drop: source not found for path "${path}"`);
793
+ logger$1.warn(`Workspace drop: source not found for path "${path}"`);
791
794
  failed++;
792
795
  continue;
793
796
  }
@@ -798,11 +801,11 @@ var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
798
801
  const root = src.getWorkspace();
799
802
  if (root) srcRoots.add(root);
800
803
  } catch (error) {
801
- logger$2.error(`Failed to handle workspace drop for "${path}":`, error);
804
+ logger$1.error(`Failed to handle workspace drop for "${path}":`, error);
802
805
  failed++;
803
806
  }
804
807
  if (sources.length === 0) {
805
- if (failed > 0) logger$2.info(`Workspace drop failed for ${failed} item(s)`);
808
+ if (failed > 0) logger$1.info(`Workspace drop failed for ${failed} item(s)`);
806
809
  return;
807
810
  }
808
811
  let isCrossConnection = false;
@@ -824,17 +827,17 @@ var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
824
827
  destBackend
825
828
  }))) return;
826
829
  } catch (err) {
827
- logger$2.debug("Failed to resolve cross-connection info for DnD", err);
830
+ logger$1.debug("Failed to resolve cross-connection info for DnD", err);
828
831
  }
829
832
  for (const { path, resource } of sources) try {
830
833
  const move = await moveWithinSameBackend(resource);
831
834
  await workspaceService.copyResource(resource, targetDir, { move });
832
835
  processed++;
833
836
  } catch (error) {
834
- logger$2.error(`Failed to handle workspace drop for "${path}":`, error);
837
+ logger$1.error(`Failed to handle workspace drop for "${path}":`, error);
835
838
  failed++;
836
839
  }
837
- logger$2.info(`Workspace drop completed: ${processed}/${sources.length} items ${failed > 0 ? `, ${failed} failed` : ""}`);
840
+ logger$1.info(`Workspace drop completed: ${processed}/${sources.length} items ${failed > 0 ? `, ${failed} failed` : ""}`);
838
841
  await this.loadWorkspace(this.workspaceDir, true);
839
842
  }
840
843
  async handleFilesDrop(files, targetDir) {
@@ -853,10 +856,10 @@ var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
853
856
  await (await this.workspaceDir.getResource(targetPath, { create: true })).saveContents(file);
854
857
  processed++;
855
858
  } catch (error) {
856
- logger$2.error(`Failed to upload ${file.name}:`, error);
859
+ logger$1.error(`Failed to upload ${file.name}:`, error);
857
860
  failed++;
858
861
  }
859
- logger$2.info(`Uploaded ${processed}/${total} files${skipped > 0 ? `, ${skipped} skipped` : ""}${failed > 0 ? `, ${failed} failed` : ""}`);
862
+ logger$1.info(`Uploaded ${processed}/${total} files${skipped > 0 ? `, ${skipped} skipped` : ""}${failed > 0 ? `, ${failed} failed` : ""}`);
860
863
  await this.loadWorkspace(this.workspaceDir);
861
864
  }
862
865
  buildTargetPath(targetDir, fileName) {
@@ -958,37 +961,10 @@ var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
958
961
  _decorate([state()], DocksFileBrowser.prototype, "root", void 0);
959
962
  DocksFileBrowser = _DocksFileBrowser = _decorate([customElement("docks-filebrowser")], DocksFileBrowser);
960
963
  //#endregion
961
- //#region src/core/contribution-names.ts
962
- var VIEW_FILEBROWSER = "view.filebrowser";
963
- var VIEW_LOG_TERMINAL = "view.logTerminal";
964
- var TOOLBAR_INFO = "toolbar.info";
965
- var TOOLBAR_FAST_VIEWS = "toolbar.fastViews";
966
- var TOOLBAR_LANGUAGE_SELECTOR = "toolbar.languageSelector";
967
- /** Main toolbar (right): layout picker (`docks-layout-switcher`). */
968
- var TOOLBAR_LAYOUT_SWITCHER = "toolbar.layoutSwitcher";
969
- /** Main toolbar (right): dark/light theme toggle (`switch_theme`). */
970
- var TOOLBAR_THEME_SWITCHER = "toolbar.themeSwitcher";
971
- /** Main toolbar (right): document fullscreen toggle (`fullscreen`). */
972
- var TOOLBAR_FULLSCREEN = "toolbar.fullscreen";
973
- /** Bottom-center toolbar: focused part title / active part indicator (`docks-part-name`). */
974
- var TOOLBAR_ACTIVE_PART_NAME = "toolbar.activePartName";
975
- /** Bottom-center toolbar: background tasks / progress (`docks-tasks`). */
976
- var TOOLBAR_TASKS = "toolbar.tasks";
977
- /** Main sidebar header toolbar: open extensions (`open_extensions` command). */
978
- var SIDEBAR_TOOLBAR_EXTENSIONS = "sidebar.toolbar.extensions";
979
- /** Default file-type → icon mappings on `system.icons`. */
980
- var SYSTEM_DEFAULT_FILE_ICONS = "system.icons.default";
981
- var ABOUT_TAB_RELEASE = "about.tab.release";
982
- var ABOUT_TAB_PACKAGES = "about.tab.packages";
983
- var ABOUT_TAB_ATTRIBUTIONS = "about.tab.attributions";
984
- var ATTRIBUTION_ECLIPSE_DOCKS = "attribution.eclipse-docks";
985
- var CTXMENU_FILEBROWSER_RENAME = "contextmenu.filebrowser.rename";
986
- var CTXMENU_FILEBROWSER_DELETE = "contextmenu.filebrowser.delete";
987
- //#endregion
988
964
  //#region src/components/tasks.ts
989
- var t$5 = await i18n(/* @__PURE__ */ Object.assign({
990
- "./tasks.de.json": () => import("./tasks.de-y2xPmQ1k.js"),
991
- "./tasks.en.json": () => import("./tasks.en-BTbFrxJj.js")
965
+ var t$5 = await i18n(/* #__PURE__ */ Object.assign({
966
+ "./tasks.de.json": () => import("./tasks.de-DRvUVugd.js"),
967
+ "./tasks.en.json": () => import("./tasks.en-dRDildBd.js")
992
968
  }));
993
969
  contributionRegistry.registerContribution(TOOLBAR_BOTTOM_CENTER, {
994
970
  name: TOOLBAR_TASKS,
@@ -1019,20 +995,15 @@ function updateProgressDialog(forceOpen = false) {
1019
995
  }
1020
996
  const existingDialog = getDialogElement();
1021
997
  if (!(forceOpen || existingDialog?.open === true)) return;
1022
- const handleClose = () => {
1023
- const dialog = getDialogElement();
1024
- if (dialog) dialog.open = false;
1025
- };
1026
998
  const handleAfterHide = () => {
1027
999
  render(html``, container);
1028
1000
  };
1029
- render(html`
1001
+ const template = html`
1030
1002
  <wa-dialog
1031
1003
  label="${t$5.ACTIVE_TASKS}"
1032
1004
  open
1033
1005
  light-dismiss
1034
1006
  style="--width: 600px;"
1035
- @wa-request-close=${handleClose}
1036
1007
  @wa-after-hide=${handleAfterHide}
1037
1008
  >
1038
1009
  <style>
@@ -1138,7 +1109,8 @@ function updateProgressDialog(forceOpen = false) {
1138
1109
  })}
1139
1110
  </div>
1140
1111
  </wa-dialog>
1141
- `, container);
1112
+ `;
1113
+ render(template, container);
1142
1114
  }
1143
1115
  var DocksTasks = class DocksTasks extends DocksElement {
1144
1116
  static {
@@ -1212,9 +1184,9 @@ var DocksTasks = class DocksTasks extends DocksElement {
1212
1184
  DocksTasks = _decorate([customElement("docks-tasks")], DocksTasks);
1213
1185
  //#endregion
1214
1186
  //#region src/components/document-title.ts
1215
- var t$4 = await i18n(/* @__PURE__ */ Object.assign({
1216
- "./partname.de.json": () => import("./partname.de-v76uEl0F.js"),
1217
- "./partname.en.json": () => import("./partname.en-By5aAawT.js")
1187
+ var t$4 = await i18n(/* #__PURE__ */ Object.assign({
1188
+ "./partname.de.json": () => import("./partname.de-C0I4Wf2X.js"),
1189
+ "./partname.en.json": () => import("./partname.en-CIT8z3cY.js")
1218
1190
  }));
1219
1191
  /**
1220
1192
  * Human-readable label for the focused part (same logic as docks-part-name).
@@ -1255,9 +1227,9 @@ window.addEventListener("app-loaded", () => {
1255
1227
  });
1256
1228
  //#endregion
1257
1229
  //#region src/components/part-name.ts
1258
- var t$3 = await i18n(/* @__PURE__ */ Object.assign({
1259
- "./partname.de.json": () => import("./partname.de-v76uEl0F.js"),
1260
- "./partname.en.json": () => import("./partname.en-By5aAawT.js")
1230
+ var t$3 = await i18n(/* #__PURE__ */ Object.assign({
1231
+ "./partname.de.json": () => import("./partname.de-C0I4Wf2X.js"),
1232
+ "./partname.en.json": () => import("./partname.en-CIT8z3cY.js")
1261
1233
  }));
1262
1234
  contributionRegistry.registerContribution(TOOLBAR_BOTTOM_CENTER, {
1263
1235
  name: TOOLBAR_ACTIVE_PART_NAME,
@@ -1289,10 +1261,10 @@ var DocksPartName = class DocksPartName extends DocksElement {
1289
1261
  DocksPartName = _decorate([customElement("docks-part-name")], DocksPartName);
1290
1262
  //#endregion
1291
1263
  //#region src/components/extensions.ts
1292
- var logger$1 = createLogger("DocksExtensions");
1293
- var t$2 = await i18n(/* @__PURE__ */ Object.assign({
1294
- "./extensions.de.json": () => import("./extensions.de-Ct1DIybE.js"),
1295
- "./extensions.en.json": () => import("./extensions.en-DRPFtVHT.js")
1264
+ var logger = createLogger("DocksExtensions");
1265
+ var t$2 = await i18n(/* #__PURE__ */ Object.assign({
1266
+ "./extensions.de.json": () => import("./extensions.de-O6Sx3_t4.js"),
1267
+ "./extensions.en.json": () => import("./extensions.en-fwqJr8P-.js")
1296
1268
  }));
1297
1269
  var DocksExtensions = class DocksExtensions extends DocksPart {
1298
1270
  constructor(..._args) {
@@ -1300,6 +1272,9 @@ var DocksExtensions = class DocksExtensions extends DocksPart {
1300
1272
  this.filterText = "";
1301
1273
  this.showRegisterDialog = false;
1302
1274
  this.registerExtensionData = {};
1275
+ this.handleRegisterDialogAfterHide = () => {
1276
+ this.finishRegisterDialogClose();
1277
+ };
1303
1278
  }
1304
1279
  doInitUI() {
1305
1280
  subscribe(TOPIC_EXTENSIONS_CHANGED, () => {
@@ -1387,20 +1362,25 @@ var DocksExtensions = class DocksExtensions extends DocksPart {
1387
1362
  const packageJson = await esmShService.fetchGitHubPackageJson(parsed);
1388
1363
  const owner = parsed.owner;
1389
1364
  const repo = parsed.repo;
1365
+ const extensionId = packageJson.name || `ext.${owner}-${repo}`;
1366
+ const extensionName = packageJson.name || `${owner}/${repo}`;
1367
+ const description = packageJson.description || "";
1368
+ const version = packageJson.version || "";
1369
+ const author = packageJson.author || (typeof packageJson.author === "string" ? packageJson.author : packageJson.author?.name) || "";
1390
1370
  this.registerExtensionData = {
1391
- id: packageJson.name || `ext.${owner}-${repo}`,
1392
- name: packageJson.name || `${owner}/${repo}`,
1393
- description: packageJson.description || "",
1371
+ id: extensionId,
1372
+ name: extensionName,
1373
+ description,
1394
1374
  url,
1395
- version: packageJson.version || "",
1396
- author: packageJson.author || (typeof packageJson.author === "string" ? packageJson.author : packageJson.author?.name) || "",
1375
+ version,
1376
+ author,
1397
1377
  icon: "puzzle-piece",
1398
1378
  external: true
1399
1379
  };
1400
1380
  this.showRegisterDialog = true;
1401
1381
  this.requestUpdate();
1402
1382
  } catch (error) {
1403
- logger$1.warn(`Could not fetch package.json, using defaults: ${error}`);
1383
+ logger.warn(`Could not fetch package.json, using defaults: ${error}`);
1404
1384
  this.registerExtensionData = {
1405
1385
  url,
1406
1386
  id: "",
@@ -1439,7 +1419,7 @@ var DocksExtensions = class DocksExtensions extends DocksPart {
1439
1419
  extensionRegistry.registerExtension(extension);
1440
1420
  await extensionRegistry.loadExtensionFromUrl(this.registerExtensionData.url, extension.id);
1441
1421
  toastInfo(`Extension ${extension.name} registered successfully`);
1442
- this.showRegisterDialog = false;
1422
+ this.closeRegisterDialog();
1443
1423
  this.registerExtensionData = {};
1444
1424
  this.requestUpdate();
1445
1425
  });
@@ -1447,11 +1427,22 @@ var DocksExtensions = class DocksExtensions extends DocksPart {
1447
1427
  toastError(`Failed to register extension: ${error}`);
1448
1428
  }
1449
1429
  }
1450
- cancelRegisterExtension() {
1430
+ closeRegisterDialog() {
1431
+ const dialog = this.renderRoot.querySelector("wa-dialog");
1432
+ if (dialog && dialog.open !== false) {
1433
+ dialog.open = false;
1434
+ return;
1435
+ }
1436
+ this.finishRegisterDialogClose();
1437
+ }
1438
+ finishRegisterDialogClose() {
1451
1439
  this.showRegisterDialog = false;
1452
1440
  this.registerExtensionData = {};
1453
1441
  this.requestUpdate();
1454
1442
  }
1443
+ cancelRegisterExtension() {
1444
+ this.closeRegisterDialog();
1445
+ }
1455
1446
  renderToolbar() {
1456
1447
  return html`
1457
1448
  <wa-input
@@ -1482,7 +1473,7 @@ var DocksExtensions = class DocksExtensions extends DocksPart {
1482
1473
  <wa-dialog
1483
1474
  label="Register Extension"
1484
1475
  open
1485
- @wa-request-close=${() => this.cancelRegisterExtension()}
1476
+ @wa-after-hide=${this.handleRegisterDialogAfterHide}
1486
1477
  style="--wa-dialog-width: 500px;">
1487
1478
  <div style="display: flex; flex-direction: column; gap: 1rem; padding: 1rem;">
1488
1479
  <wa-input
@@ -1860,9 +1851,9 @@ _decorate([state()], DocksExtensions.prototype, "registerExtensionData", void 0)
1860
1851
  DocksExtensions = _decorate([customElement("docks-extensions")], DocksExtensions);
1861
1852
  //#endregion
1862
1853
  //#region src/components/log-terminal.ts
1863
- var t$1 = await i18n(/* @__PURE__ */ Object.assign({
1864
- "./logterminal.de.json": () => import("./logterminal.de-DKp940Ox.js"),
1865
- "./logterminal.en.json": () => import("./logterminal.en-Ci2nm0b2.js")
1854
+ var t$1 = await i18n(/* #__PURE__ */ Object.assign({
1855
+ "./logterminal.de.json": () => import("./logterminal.de-BP1FuxHH.js"),
1856
+ "./logterminal.en.json": () => import("./logterminal.en-BeDRvTvb.js")
1866
1857
  }));
1867
1858
  var DocksLogTerminal = class DocksLogTerminal extends DocksPart {
1868
1859
  constructor(..._args) {
@@ -2154,11 +2145,8 @@ var DocksCommand = class DocksCommand extends DocksWidget {
2154
2145
  this.placement = "bottom-start";
2155
2146
  this.dropdownContributions = [];
2156
2147
  }
2157
- closeDropdown(dropdown) {
2158
- if (dropdown && dropdown.open !== void 0) dropdown.open = false;
2159
- }
2160
2148
  handleSelect(event) {
2161
- this.closeDropdown(event.target);
2149
+ handleDropdownWaSelect(event);
2162
2150
  }
2163
2151
  getKeybinding() {
2164
2152
  if (!this.cmd || this.action) return null;
@@ -2295,9 +2283,9 @@ _decorate([state()], DocksCommand.prototype, "dropdownContributions", void 0);
2295
2283
  DocksCommand = _decorate([customElement("docks-command")], DocksCommand);
2296
2284
  //#endregion
2297
2285
  //#region src/components/fastviews.ts
2298
- var t = await i18n(/* @__PURE__ */ Object.assign({
2299
- "./fastviews.de.json": () => import("./fastviews.de-BFxFslBz.js"),
2300
- "./fastviews.en.json": () => import("./fastviews.en-Cb4J_JXL.js")
2286
+ var t = await i18n(/* #__PURE__ */ Object.assign({
2287
+ "./fastviews.de.json": () => import("./fastviews.de-C-B48vwv.js"),
2288
+ "./fastviews.en.json": () => import("./fastviews.en-BlAxYlHD.js")
2301
2289
  }));
2302
2290
  var DocksFastViews = class DocksFastViews extends DocksWidget {
2303
2291
  constructor(..._args) {
@@ -2419,7 +2407,8 @@ var DocksFastViews = class DocksFastViews extends DocksWidget {
2419
2407
  }
2420
2408
  loadTabContributions() {
2421
2409
  if (!this.target) return;
2422
- this.tabContributions = contributionRegistry.getContributions(this.target).filter((c) => "name" in c);
2410
+ const allContributions = contributionRegistry.getContributions(this.target);
2411
+ this.tabContributions = allContributions.filter((c) => "name" in c);
2423
2412
  this.requestUpdate();
2424
2413
  }
2425
2414
  renderTabContribution(contribution) {
@@ -2573,12 +2562,11 @@ var showLanguageSelectorDialog = async () => {
2573
2562
  await appSettings.set(SETTINGS_KEY_LANGUAGE, language);
2574
2563
  handleClose();
2575
2564
  };
2576
- render(html`
2565
+ const template = html`
2577
2566
  <wa-dialog
2578
2567
  label="Select Language"
2579
2568
  open
2580
2569
  light-dismiss
2581
- @wa-request-close=${handleClose}
2582
2570
  @wa-after-hide=${handleAfterHide}>
2583
2571
  <style>
2584
2572
  .language-list {
@@ -2632,7 +2620,8 @@ var showLanguageSelectorDialog = async () => {
2632
2620
  `)}
2633
2621
  </div>
2634
2622
  </wa-dialog>
2635
- `, container);
2623
+ `;
2624
+ render(template, container);
2636
2625
  });
2637
2626
  };
2638
2627
  var DocksLanguageSelector = class DocksLanguageSelector extends DocksElement {
@@ -2661,38 +2650,145 @@ var DocksLanguageSelector = class DocksLanguageSelector extends DocksElement {
2661
2650
  };
2662
2651
  DocksLanguageSelector = _decorate([customElement("docks-language-selector")], DocksLanguageSelector);
2663
2652
  //#endregion
2653
+ //#region src/core/layout-panels.ts
2654
+ var DEFAULT_LAYOUT_PANEL_VISIBILITY = {
2655
+ showLeftSidebar: true,
2656
+ showAuxSidebar: true,
2657
+ showBottomPanel: true,
2658
+ showLeftAux: false,
2659
+ showRightAux: false
2660
+ };
2661
+ function normalizePanelVisibility(stored) {
2662
+ return {
2663
+ showLeftSidebar: stored.showLeftSidebar ?? DEFAULT_LAYOUT_PANEL_VISIBILITY.showLeftSidebar,
2664
+ showAuxSidebar: stored.showAuxSidebar ?? DEFAULT_LAYOUT_PANEL_VISIBILITY.showAuxSidebar,
2665
+ showBottomPanel: stored.showBottomPanel ?? DEFAULT_LAYOUT_PANEL_VISIBILITY.showBottomPanel,
2666
+ showLeftAux: stored.showLeftAux ?? DEFAULT_LAYOUT_PANEL_VISIBILITY.showLeftAux,
2667
+ showRightAux: stored.showRightAux ?? DEFAULT_LAYOUT_PANEL_VISIBILITY.showRightAux
2668
+ };
2669
+ }
2670
+ var LAYOUT_PANEL_SETTINGS_KEY = "layoutPanelVisibility";
2671
+ /** @deprecated Legacy layout id persisted before panel visibility toggles. */
2672
+ var LEGACY_PREFERRED_LAYOUT_KEY = "preferredLayoutId";
2673
+ /** Maps legacy parameterized layout ids to panel visibility. */
2674
+ function layoutIdToPanelVisibility(layoutId) {
2675
+ switch (layoutId) {
2676
+ case "standard-bottom-panel": return {
2677
+ ...DEFAULT_LAYOUT_PANEL_VISIBILITY,
2678
+ showBottomPanel: true,
2679
+ showLeftAux: false,
2680
+ showRightAux: false
2681
+ };
2682
+ case "standard-bottom-sidebar": return {
2683
+ ...DEFAULT_LAYOUT_PANEL_VISIBILITY,
2684
+ showBottomPanel: false,
2685
+ showLeftAux: true,
2686
+ showRightAux: false
2687
+ };
2688
+ case "standard-full": return {
2689
+ ...DEFAULT_LAYOUT_PANEL_VISIBILITY,
2690
+ showLeftAux: true,
2691
+ showRightAux: true
2692
+ };
2693
+ default: return {
2694
+ ...DEFAULT_LAYOUT_PANEL_VISIBILITY,
2695
+ showBottomPanel: false,
2696
+ showLeftAux: false,
2697
+ showRightAux: false
2698
+ };
2699
+ }
2700
+ }
2701
+ function resolveInitialPanelVisibilityFromApp(appLayout) {
2702
+ if (typeof appLayout === "object" && appLayout.props) return {
2703
+ ...DEFAULT_LAYOUT_PANEL_VISIBILITY,
2704
+ showLeftSidebar: appLayout.props.showLeftSidebar !== false,
2705
+ showAuxSidebar: appLayout.props.showAuxSidebar !== false,
2706
+ showBottomPanel: appLayout.props.showBottomPanel === true,
2707
+ showLeftAux: appLayout.props.showLeftAux === true,
2708
+ showRightAux: appLayout.props.showRightAux === true
2709
+ };
2710
+ if (typeof appLayout === "string") return layoutIdToPanelVisibility(appLayout);
2711
+ return { ...DEFAULT_LAYOUT_PANEL_VISIBILITY };
2712
+ }
2713
+ async function resolveStoredPanelVisibility(appLayout) {
2714
+ try {
2715
+ const saved = await appSettings.get(LAYOUT_PANEL_SETTINGS_KEY);
2716
+ if (saved && typeof saved === "object") return normalizePanelVisibility(saved);
2717
+ } catch {}
2718
+ try {
2719
+ const legacyLayoutId = await appSettings.get(LEGACY_PREFERRED_LAYOUT_KEY);
2720
+ if (legacyLayoutId) return layoutIdToPanelVisibility(legacyLayoutId);
2721
+ } catch {}
2722
+ return resolveInitialPanelVisibilityFromApp(appLayout);
2723
+ }
2724
+ function findStandardLayout(container) {
2725
+ const root = container ?? document.getElementById("app-root") ?? document.body;
2726
+ if (!root || typeof root.querySelector !== "function") return null;
2727
+ return root.querySelector("docks-standard-layout");
2728
+ }
2729
+ var LAYOUT_PANEL_OPTIONS = [
2730
+ {
2731
+ key: "showLeftSidebar",
2732
+ label: "Left sidebar",
2733
+ icon: "docks layout-standard-left-sidebar"
2734
+ },
2735
+ {
2736
+ key: "showAuxSidebar",
2737
+ label: "Right sidebar",
2738
+ icon: "docks layout-standard-right-sidebar"
2739
+ },
2740
+ {
2741
+ key: "showBottomPanel",
2742
+ label: "Bottom panel",
2743
+ icon: "docks layout-standard-bottom-panel"
2744
+ },
2745
+ {
2746
+ key: "showLeftAux",
2747
+ label: "Left Aux",
2748
+ icon: "docks layout-standard-left-aux"
2749
+ },
2750
+ {
2751
+ key: "showRightAux",
2752
+ label: "Right Aux",
2753
+ icon: "docks layout-standard-right-aux"
2754
+ }
2755
+ ];
2756
+ //#endregion
2664
2757
  //#region src/components/layout-switcher.ts
2665
2758
  var DocksLayoutSwitcher = class DocksLayoutSwitcher extends DocksElement {
2666
2759
  constructor(..._args) {
2667
2760
  super(..._args);
2668
- this.currentLayoutId = "standard";
2761
+ this.panels = { ...DEFAULT_LAYOUT_PANEL_VISIBILITY };
2669
2762
  }
2670
2763
  doBeforeUI() {
2671
- this.currentLayoutId = appLoaderService.getCurrentLayoutId();
2672
- const updateLayout = () => {
2673
- this.currentLayoutId = appLoaderService.getCurrentLayoutId();
2764
+ const syncPanels = () => {
2765
+ const layout = findStandardLayout();
2766
+ this.panels = layout?.getPanelVisibility() ?? { ...DEFAULT_LAYOUT_PANEL_VISIBILITY };
2674
2767
  this.requestUpdate();
2675
2768
  };
2676
- window.addEventListener("app-loaded", updateLayout);
2677
- window.addEventListener("layout-changed", updateLayout);
2769
+ syncPanels();
2770
+ window.addEventListener("app-loaded", syncPanels);
2771
+ window.addEventListener("layout-panels-changed", syncPanels);
2678
2772
  return () => {
2679
- window.removeEventListener("app-loaded", updateLayout);
2680
- window.removeEventListener("layout-changed", updateLayout);
2773
+ window.removeEventListener("app-loaded", syncPanels);
2774
+ window.removeEventListener("layout-panels-changed", syncPanels);
2681
2775
  };
2682
2776
  }
2683
2777
  async handleSelect(e) {
2684
- const layoutId = e.detail?.item?.value;
2685
- if (!layoutId || layoutId === this.currentLayoutId) return;
2778
+ const layout = findStandardLayout();
2779
+ if (!layout) return;
2780
+ const item = e.detail?.item;
2781
+ const key = item?.value;
2782
+ if (!item || !key) return;
2686
2783
  try {
2687
- await appLoaderService.setPreferredLayoutId(layoutId);
2784
+ await layout.setPanelVisibility({ [key]: item.checked ?? false });
2785
+ this.panels = layout.getPanelVisibility();
2688
2786
  } catch (err) {
2689
- console.error("Failed to switch layout:", err);
2787
+ console.error("Failed to update layout panels:", err);
2690
2788
  }
2691
2789
  }
2692
2790
  render() {
2693
- const layouts = appLoaderService.getRegisteredLayouts();
2694
- if (layouts.length <= 1) return html``;
2695
- const layoutName = layouts.find((l) => l.id === this.currentLayoutId)?.name ?? this.currentLayoutId;
2791
+ if (!findStandardLayout()) return html``;
2696
2792
  return html`
2697
2793
  <wa-dropdown
2698
2794
  placement="bottom-end"
@@ -2704,19 +2800,19 @@ var DocksLayoutSwitcher = class DocksLayoutSwitcher extends DocksElement {
2704
2800
  appearance="plain"
2705
2801
  size="s"
2706
2802
  with-caret
2707
- title="Switch layout (current: ${layoutName})">
2708
- <wa-icon name="table-cells" label="Layout"></wa-icon>
2803
+ title="Show or hide layout panels">
2804
+ ${icon("docks layout-standard-full", { label: "Layout panels" })}
2709
2805
  </wa-button>
2710
- ${layouts.map((layout) => html`
2806
+ ${LAYOUT_PANEL_OPTIONS.map((panel) => html`
2711
2807
  <wa-dropdown-item
2712
- value="${layout.id}"
2808
+ value="${panel.key}"
2713
2809
  type="checkbox"
2714
- ?checked=${layout.id === this.currentLayoutId}>
2715
- ${icon(layout.icon, {
2716
- label: layout.name,
2810
+ ?checked=${this.panels[panel.key]}>
2811
+ ${icon(panel.icon, {
2812
+ label: panel.label,
2717
2813
  slot: "icon"
2718
2814
  })}
2719
- ${layout.name}
2815
+ ${panel.label}
2720
2816
  </wa-dropdown-item>
2721
2817
  `)}
2722
2818
  </wa-dropdown>
@@ -2730,143 +2826,15 @@ var DocksLayoutSwitcher = class DocksLayoutSwitcher extends DocksElement {
2730
2826
  `;
2731
2827
  }
2732
2828
  };
2733
- _decorate([state()], DocksLayoutSwitcher.prototype, "currentLayoutId", void 0);
2829
+ _decorate([state()], DocksLayoutSwitcher.prototype, "panels", void 0);
2734
2830
  DocksLayoutSwitcher = _decorate([customElement("docks-layout-switcher")], DocksLayoutSwitcher);
2735
2831
  //#endregion
2736
- //#region src/components/release-history.ts
2737
- var logger = createLogger("ReleaseHistory");
2738
- async function loadReleases(releaseHistory) {
2739
- if (!releaseHistory) return [];
2740
- if (typeof releaseHistory !== "function") return releaseHistory;
2741
- try {
2742
- return await releaseHistory();
2743
- } catch (error) {
2744
- logger.error(`Failed to load release history from app: ${error instanceof Error ? error.message : String(error)}`);
2745
- return [];
2746
- }
2747
- }
2748
- function semverEqual(a, b) {
2749
- return a.replace(/^v/i, "") === b.replace(/^v/i, "");
2750
- }
2751
- function isNewerThan(releaseTag, currentVersion) {
2752
- const currentParts = currentVersion.replace(/^v/i, "").split(".").map(Number);
2753
- const releaseParts = releaseTag.replace(/^v/i, "").split(".").map(Number);
2754
- for (let i = 0; i < Math.max(currentParts.length, releaseParts.length); i++) {
2755
- const current = currentParts[i] || 0;
2756
- const releasePart = releaseParts[i] || 0;
2757
- if (releasePart > current) return true;
2758
- if (releasePart < current) return false;
2759
- }
2760
- return false;
2761
- }
2762
- var DocksReleaseHistory = class DocksReleaseHistory extends DocksPart {
2832
+ //#region src/components/npm-packages.ts
2833
+ var DocksNpmPackages = class DocksNpmPackages extends DocksPart {
2763
2834
  constructor(..._args) {
2764
2835
  super(..._args);
2765
2836
  this.scrollMode = "none";
2766
- this.appVersion = "0.0.0";
2767
- this.releases = [];
2768
- this.currentReleaseIndex = 0;
2769
2837
  }
2770
- static {
2771
- this.styles = [css`
2772
- .release-panel {
2773
- display: flex;
2774
- flex-direction: column;
2775
- gap: 0.5rem;
2776
- height: 100%;
2777
- padding: 0.75rem;
2778
- box-sizing: border-box;
2779
- }
2780
-
2781
- .release-panel wa-scroller {
2782
- flex: 1;
2783
- min-height: 0;
2784
- }
2785
-
2786
- .release-nav {
2787
- display: flex;
2788
- gap: 0.5rem;
2789
- }
2790
- `];
2791
- }
2792
- doInitUI() {
2793
- this.load();
2794
- }
2795
- async load() {
2796
- const app = appLoaderService.getCurrentApp();
2797
- this.appVersion = app?.version ?? "0.0.0";
2798
- this.releases = await loadReleases(app?.releaseHistory);
2799
- const currentIndex = this.releases.findIndex((release) => semverEqual(release.tag_name, this.appVersion));
2800
- this.currentReleaseIndex = currentIndex >= 0 ? currentIndex : 0;
2801
- }
2802
- showOlder() {
2803
- if (this.currentReleaseIndex < this.releases.length - 1) this.currentReleaseIndex += 1;
2804
- }
2805
- showNewer() {
2806
- if (this.currentReleaseIndex > 0) this.currentReleaseIndex -= 1;
2807
- }
2808
- renderContent() {
2809
- const release = this.releases[this.currentReleaseIndex];
2810
- if (!release) return html`<div class="release-panel">No release history available.</div>`;
2811
- const isCurrent = semverEqual(release.tag_name, this.appVersion);
2812
- const showUpdateHint = !isCurrent && isNewerThan(release.tag_name, this.appVersion);
2813
- const atOldest = this.currentReleaseIndex === this.releases.length - 1;
2814
- const atNewest = this.currentReleaseIndex === 0;
2815
- const bodyHtml = release.body ? parseMarkdownHtml(release.body) : "";
2816
- return html`
2817
- <div class="release-panel">
2818
- <p>
2819
- <strong>Version:</strong> ${release.tag_name}${isCurrent ? " (Current)" : ""}
2820
- </p>
2821
- <p>
2822
- <strong>Released:</strong>
2823
- <wa-format-date
2824
- .date=${release.published_at}
2825
- month="short"
2826
- day="numeric"
2827
- year="numeric"
2828
- ></wa-format-date>
2829
- </p>
2830
- ${showUpdateHint ? html`
2831
- <wa-callout variant="warning">
2832
- <wa-icon slot="icon" name="triangle-exclamation"></wa-icon>
2833
- Update available — reload the page to update
2834
- </wa-callout>
2835
- ` : ""}
2836
- <wa-scroller orientation="vertical">
2837
- ${bodyHtml ? html`<div style="white-space: normal;">${unsafeHTML(bodyHtml)}</div>` : ""}
2838
- </wa-scroller>
2839
- ${this.releases.length > 1 ? html`
2840
- <div class="release-nav">
2841
- <wa-button-group>
2842
- <wa-button
2843
- variant="default"
2844
- ?disabled=${atOldest}
2845
- @click=${() => this.showOlder()}
2846
- >
2847
- ← Previous
2848
- </wa-button>
2849
- <wa-button
2850
- variant="default"
2851
- ?disabled=${atNewest}
2852
- @click=${() => this.showNewer()}
2853
- >
2854
- Next →
2855
- </wa-button>
2856
- </wa-button-group>
2857
- </div>
2858
- ` : ""}
2859
- </div>
2860
- `;
2861
- }
2862
- };
2863
- _decorate([state()], DocksReleaseHistory.prototype, "appVersion", void 0);
2864
- _decorate([state()], DocksReleaseHistory.prototype, "releases", void 0);
2865
- _decorate([state()], DocksReleaseHistory.prototype, "currentReleaseIndex", void 0);
2866
- DocksReleaseHistory = _decorate([customElement("docks-release-history")], DocksReleaseHistory);
2867
- //#endregion
2868
- //#region src/components/npm-packages.ts
2869
- var DocksNpmPackages = class DocksNpmPackages extends DocksPart {
2870
2838
  static {
2871
2839
  this.styles = [css`
2872
2840
  .packages-panel {
@@ -2912,6 +2880,7 @@ function renderHtmlContribution(contribution) {
2912
2880
  var DocksAttributionPart = class DocksAttributionPart extends DocksPart {
2913
2881
  constructor(..._args) {
2914
2882
  super(..._args);
2883
+ this.scrollMode = "none";
2915
2884
  this.attributions = [];
2916
2885
  }
2917
2886
  static {
@@ -2984,7 +2953,7 @@ contributionRegistry.registerContribution(ABOUT_TABS, {
2984
2953
  ranking: 100,
2985
2954
  toolbar: false,
2986
2955
  contextMenu: false,
2987
- component: (id) => html`<docks-attribution id="${id}"></docks-attribution>`
2956
+ component: (id) => html`<docks-attribution id="${id}" embedded></docks-attribution>`
2988
2957
  });
2989
2958
  contributionRegistry.registerContribution(ABOUT_TABS, {
2990
2959
  name: ABOUT_TAB_RELEASE,
@@ -2993,7 +2962,7 @@ contributionRegistry.registerContribution(ABOUT_TABS, {
2993
2962
  ranking: 50,
2994
2963
  toolbar: false,
2995
2964
  contextMenu: false,
2996
- component: (id) => html`<docks-release-history id="${id}"></docks-release-history>`
2965
+ component: (id) => html`<docks-release-history id="${id}" embedded></docks-release-history>`
2997
2966
  });
2998
2967
  contributionRegistry.registerContribution(ABOUT_TABS, {
2999
2968
  name: ABOUT_TAB_PACKAGES,
@@ -3002,7 +2971,7 @@ contributionRegistry.registerContribution(ABOUT_TABS, {
3002
2971
  ranking: 0,
3003
2972
  toolbar: false,
3004
2973
  contextMenu: false,
3005
- component: (id) => html`<docks-npm-packages id="${id}"></docks-npm-packages>`
2974
+ component: (id) => html`<docks-npm-packages id="${id}" embedded></docks-npm-packages>`
3006
2975
  });
3007
2976
  contributionRegistry.registerContribution(SYSTEM_ATTRIBUTIONS, {
3008
2977
  name: ATTRIBUTION_ECLIPSE_DOCKS,
@@ -3033,7 +3002,7 @@ contributionRegistry.registerContribution(TOOLBAR_BOTTOM_END, {
3033
3002
  });
3034
3003
  contributionRegistry.registerContribution(TOOLBAR_MAIN_RIGHT, {
3035
3004
  name: TOOLBAR_LAYOUT_SWITCHER,
3036
- label: "Layout Switcher",
3005
+ label: "Layout panels",
3037
3006
  component: () => html`<docks-layout-switcher></docks-layout-switcher>`
3038
3007
  });
3039
3008
  contributionRegistry.registerContribution(SIDEBAR_MAIN_TOOLBAR, {
@@ -3047,14 +3016,57 @@ contributionRegistry.registerContribution(SIDEBAR_MAIN_TOOLBAR, {
3047
3016
  var DocksStandardLayout = class DocksStandardLayout extends DocksContainer {
3048
3017
  constructor(..._args) {
3049
3018
  super(..._args);
3050
- this.showBottomSidebar = false;
3051
- this.showBottomPanel = false;
3019
+ this.showLeftAux = false;
3020
+ this.showBottomPanel = true;
3052
3021
  this.showLeftSidebar = true;
3053
3022
  this.showAuxSidebar = true;
3023
+ this.showRightAux = false;
3024
+ this.panelsInitialized = false;
3054
3025
  }
3055
3026
  createRenderRoot() {
3056
3027
  return this;
3057
3028
  }
3029
+ getPanelVisibility() {
3030
+ return {
3031
+ showLeftSidebar: this.showLeftSidebar,
3032
+ showAuxSidebar: this.showAuxSidebar,
3033
+ showBottomPanel: this.showBottomPanel,
3034
+ showLeftAux: this.showLeftAux,
3035
+ showRightAux: this.showRightAux
3036
+ };
3037
+ }
3038
+ applyPanelVisibility(panels) {
3039
+ this.showLeftSidebar = panels.showLeftSidebar;
3040
+ this.showAuxSidebar = panels.showAuxSidebar;
3041
+ this.showBottomPanel = panels.showBottomPanel;
3042
+ this.showLeftAux = panels.showLeftAux;
3043
+ this.showRightAux = panels.showRightAux;
3044
+ }
3045
+ async setPanelVisibility(panels) {
3046
+ const next = {
3047
+ ...this.getPanelVisibility(),
3048
+ ...panels
3049
+ };
3050
+ this.applyPanelVisibility(next);
3051
+ try {
3052
+ await appSettings.set(LAYOUT_PANEL_SETTINGS_KEY, next);
3053
+ } catch (error) {
3054
+ console.error("Failed to persist layout panel visibility:", error);
3055
+ throw error;
3056
+ }
3057
+ window.dispatchEvent(new CustomEvent("layout-panels-changed", { detail: { panels: this.getPanelVisibility() } }));
3058
+ }
3059
+ doInitUI() {
3060
+ this.initializePanelVisibility();
3061
+ }
3062
+ async initializePanelVisibility() {
3063
+ if (this.panelsInitialized) return;
3064
+ this.panelsInitialized = true;
3065
+ const appLayout = appLoaderService.getCurrentApp()?.layout;
3066
+ const panels = await resolveStoredPanelVisibility(appLayout);
3067
+ this.applyPanelVisibility(panels);
3068
+ window.dispatchEvent(new CustomEvent("layout-panels-changed", { detail: { panels: this.getPanelVisibility() } }));
3069
+ }
3058
3070
  getGridSizes() {
3059
3071
  if (this.showLeftSidebar && this.showAuxSidebar) return "20%, 60%, 20%";
3060
3072
  if (this.showLeftSidebar) return "20%, 80%";
@@ -3146,7 +3158,7 @@ var DocksStandardLayout = class DocksStandardLayout extends DocksContainer {
3146
3158
  sizes=${this.getGridSizes()}>
3147
3159
 
3148
3160
  ${this.showLeftSidebar ? html`
3149
- ${this.showBottomSidebar ? html`
3161
+ ${this.showLeftAux ? html`
3150
3162
  <docks-resizable-grid
3151
3163
  id="left-sidebar-split"
3152
3164
  orientation="vertical"
@@ -3167,7 +3179,17 @@ var DocksStandardLayout = class DocksStandardLayout extends DocksContainer {
3167
3179
  </docks-resizable-grid>
3168
3180
  ` : html`<docks-tabs id="${EDITOR_AREA_MAIN}"></docks-tabs>`}
3169
3181
 
3170
- ${this.showAuxSidebar ? html`<docks-tabs id="${SIDEBAR_AUXILIARY}"></docks-tabs>` : nothing}
3182
+ ${this.showAuxSidebar ? html`
3183
+ ${this.showRightAux ? html`
3184
+ <docks-resizable-grid
3185
+ id="right-sidebar-split"
3186
+ orientation="vertical"
3187
+ sizes="50%, 50%">
3188
+ <docks-tabs id="${SIDEBAR_AUXILIARY}"></docks-tabs>
3189
+ <docks-tabs id="${SIDEBAR_AUXILIARY_BOTTOM}" placement="start" icon-only></docks-tabs>
3190
+ </docks-resizable-grid>
3191
+ ` : html`<docks-tabs id="${SIDEBAR_AUXILIARY}"></docks-tabs>`}
3192
+ ` : nothing}
3171
3193
  </docks-resizable-grid>
3172
3194
 
3173
3195
  <div class="toolbar-bottom">
@@ -3180,8 +3202,8 @@ var DocksStandardLayout = class DocksStandardLayout extends DocksContainer {
3180
3202
  };
3181
3203
  _decorate([property({
3182
3204
  type: Boolean,
3183
- attribute: "show-bottom-sidebar"
3184
- })], DocksStandardLayout.prototype, "showBottomSidebar", void 0);
3205
+ attribute: "show-left-aux"
3206
+ })], DocksStandardLayout.prototype, "showLeftAux", void 0);
3185
3207
  _decorate([property({
3186
3208
  type: Boolean,
3187
3209
  attribute: "show-bottom-panel"
@@ -3194,51 +3216,20 @@ _decorate([property({
3194
3216
  type: Boolean,
3195
3217
  attribute: "show-aux-sidebar"
3196
3218
  })], DocksStandardLayout.prototype, "showAuxSidebar", void 0);
3219
+ _decorate([property({
3220
+ type: Boolean,
3221
+ attribute: "show-right-aux"
3222
+ })], DocksStandardLayout.prototype, "showRightAux", void 0);
3197
3223
  DocksStandardLayout = _decorate([customElement("docks-standard-layout")], DocksStandardLayout);
3198
3224
  //#endregion
3199
3225
  //#region src/contributions/default-layout-contributions.ts
3200
- for (const layout of [
3201
- {
3202
- id: "standard",
3203
- name: "Standard",
3204
- label: "Standard",
3205
- icon: "docks layout-standard",
3206
- component: "docks-standard-layout"
3207
- },
3208
- {
3209
- id: "standard-bottom-panel",
3210
- name: "Standard (bottom panel)",
3211
- label: "Standard (bottom panel)",
3212
- icon: "docks layout-standard-bottom-panel",
3213
- component: {
3214
- tag: "docks-standard-layout",
3215
- attributes: { "show-bottom-panel": "true" }
3216
- }
3217
- },
3218
- {
3219
- id: "standard-bottom-sidebar",
3220
- name: "Standard (bottom sidebar)",
3221
- label: "Standard (bottom sidebar)",
3222
- icon: "docks layout-standard-bottom-sidebar",
3223
- component: {
3224
- tag: "docks-standard-layout",
3225
- attributes: { "show-bottom-sidebar": "true" }
3226
- }
3227
- },
3228
- {
3229
- id: "standard-full",
3230
- name: "Standard (panel + sidebar)",
3231
- label: "Standard (panel + sidebar)",
3232
- icon: "docks layout-standard-full",
3233
- component: {
3234
- tag: "docks-standard-layout",
3235
- attributes: {
3236
- "show-bottom-panel": "true",
3237
- "show-bottom-sidebar": "true"
3238
- }
3239
- }
3240
- }
3241
- ]) contributionRegistry.registerContribution(SYSTEM_LAYOUTS, layout);
3226
+ contributionRegistry.registerContribution(SYSTEM_LAYOUTS, {
3227
+ id: "standard",
3228
+ name: "Standard",
3229
+ label: "Standard",
3230
+ icon: "docks layout-standard-full",
3231
+ component: "docks-standard-layout"
3232
+ });
3242
3233
  //#endregion
3243
3234
  //#region src/commands/files.ts
3244
3235
  async function getWorkspaceAndPath(params, requirePath = true) {
@@ -3730,7 +3721,7 @@ registerAll({
3730
3721
  });
3731
3722
  //#endregion
3732
3723
  //#region src/core/js-runtime-worker.js?worker&inline
3733
- var jsContent = "//#region src/core/js-runtime-worker.js\n/**\n* Worker entry for JsRuntime: receives code, evaluates in global scope, posts result or error.\n* Kept as .js so the worker URL is never .ts (servers often map .ts to video/mp2t MIME type).\n*/\nself.onmessage = async function(e) {\n const code = e.data;\n try {\n let value = new Function(code)();\n if (value != null && typeof value.then === \"function\") value = await value;\n try {\n self.postMessage({\n type: \"result\",\n value\n });\n } catch {\n self.postMessage({\n type: \"result\",\n value: value === void 0 ? void 0 : String(value)\n });\n }\n } catch (err) {\n self.postMessage({\n type: \"error\",\n message: err instanceof Error ? err.message : String(err)\n });\n }\n};\n//#endregion\n\n//# sourceMappingURL=js-runtime-worker-DAva_aXx.js.map";
3724
+ var jsContent = "//#region src/core/js-runtime-worker.js\n/**\n* Worker entry for JsRuntime: receives code, evaluates in global scope, posts result or error.\n* Kept as .js so the worker URL is never .ts (servers often map .ts to video/mp2t MIME type).\n*/\nself.onmessage = async function(e) {\n const code = e.data;\n try {\n let value = new Function(code)();\n if (value != null && typeof value.then === \"function\") value = await value;\n try {\n self.postMessage({\n type: \"result\",\n value\n });\n } catch {\n self.postMessage({\n type: \"result\",\n value: value === void 0 ? void 0 : String(value)\n });\n }\n } catch (err) {\n self.postMessage({\n type: \"error\",\n message: err instanceof Error ? err.message : String(err)\n });\n }\n};\n//#endregion\n\n//# sourceMappingURL=js-runtime-worker-X93bOre4.js.map";
3734
3725
  var blob = typeof self !== "undefined" && self.Blob && new Blob(["URL.revokeObjectURL(import.meta.url);", jsContent], { type: "text/javascript;charset=utf-8" });
3735
3726
  function WorkerWrapper(options) {
3736
3727
  let objURL;
@@ -4636,6 +4627,6 @@ function getFrameworkConfig() {
4636
4627
  return { ...frameworkConfig };
4637
4628
  }
4638
4629
  //#endregion
4639
- export { VIEW_LOG_TERMINAL as C, i18n as D, createLazyLabel as E, VIEW_FILEBROWSER as S, editorRegistry as T, TOOLBAR_INFO as _, DocksStandardLayout as a, TOOLBAR_TASKS as b, ABOUT_TAB_RELEASE as c, CTXMENU_FILEBROWSER_RENAME as d, SIDEBAR_TOOLBAR_EXTENSIONS as f, TOOLBAR_FULLSCREEN as g, TOOLBAR_FAST_VIEWS as h, createJsRuntime as i, ATTRIBUTION_ECLIPSE_DOCKS as l, TOOLBAR_ACTIVE_PART_NAME as m, getFrameworkConfig as n, ABOUT_TAB_ATTRIBUTIONS as o, SYSTEM_DEFAULT_FILE_ICONS as p, runJavaScriptCode as r, ABOUT_TAB_PACKAGES as s, configureFramework as t, CTXMENU_FILEBROWSER_DELETE as u, TOOLBAR_LANGUAGE_SELECTOR as v, treeNodeComparator as w, TOOLBAR_THEME_SWITCHER as x, TOOLBAR_LAYOUT_SWITCHER as y };
4630
+ export { i18n as _, DocksStandardLayout as a, LAYOUT_PANEL_SETTINGS_KEY as c, layoutIdToPanelVisibility as d, resolveInitialPanelVisibilityFromApp as f, createLazyLabel as g, editorRegistry as h, createJsRuntime as i, LEGACY_PREFERRED_LAYOUT_KEY as l, treeNodeComparator as m, getFrameworkConfig as n, DEFAULT_LAYOUT_PANEL_VISIBILITY as o, resolveStoredPanelVisibility as p, runJavaScriptCode as r, LAYOUT_PANEL_OPTIONS as s, configureFramework as t, findStandardLayout as u };
4640
4631
 
4641
- //# sourceMappingURL=api-Da9zQcfd.js.map
4632
+ //# sourceMappingURL=api-DImisUWV.js.map