@eclipse-docks/core 0.7.113 → 0.7.114
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/index.js +4 -4
- package/dist/api/services.d.ts +1 -1
- package/dist/api/services.d.ts.map +1 -1
- package/dist/{api-BWhUdgQ_.js → api-N5AbUtyH.js} +299 -190
- package/dist/api-N5AbUtyH.js.map +1 -0
- package/dist/components/attribution.d.ts +14 -0
- package/dist/components/attribution.d.ts.map +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/npm-packages.d.ts +11 -0
- package/dist/components/npm-packages.d.ts.map +1 -0
- package/dist/components/release-history.d.ts +19 -0
- package/dist/components/release-history.d.ts.map +1 -0
- package/dist/core/constants.d.ts +1 -15
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/contribution-names.d.ts +28 -0
- package/dist/core/contribution-names.d.ts.map +1 -0
- package/dist/core/contribution-targets.d.ts +20 -0
- package/dist/core/contribution-targets.d.ts.map +1 -0
- package/dist/core/contributionregistry.d.ts +5 -0
- package/dist/core/contributionregistry.d.ts.map +1 -1
- package/dist/core/ui-ids.d.ts +1 -23
- package/dist/core/ui-ids.d.ts.map +1 -1
- package/dist/dialogs/index.d.ts +1 -0
- package/dist/dialogs/index.d.ts.map +1 -1
- package/dist/dialogs/version-info-dialog.d.ts +14 -0
- package/dist/dialogs/version-info-dialog.d.ts.map +1 -0
- package/dist/index.js +4 -4
- package/dist/parts/index.js +1 -1
- package/dist/parts/tabs.d.ts.map +1 -1
- package/dist/{parts-D1n2XZVE.js → parts-BvITdiV3.js} +83 -18
- package/dist/parts-BvITdiV3.js.map +1 -0
- package/dist/{widget-DbolQH0C.js → widget-DFbJNLqB.js} +2 -1
- package/dist/widget-DFbJNLqB.js.map +1 -0
- package/dist/widgets/index.js +1 -1
- package/dist/{widgets-SScpQQr9.js → widgets-CuO5lmjL.js} +2 -2
- package/dist/{widgets-SScpQQr9.js.map → widgets-CuO5lmjL.js.map} +1 -1
- package/package.json +1 -1
- package/src/api/services.ts +1 -0
- package/src/commands/global.ts +2 -2
- package/src/commands/open-view-as-editor.ts +1 -1
- package/src/commands/version-info.ts +10 -219
- package/src/components/attribution.ts +93 -0
- package/src/components/index.ts +4 -1
- package/src/components/npm-packages.ts +53 -0
- package/src/components/part-name.ts +2 -2
- package/src/components/release-history.ts +177 -0
- package/src/components/tasks.ts +2 -2
- package/src/contributions/default-layout-contributions.ts +1 -1
- package/src/contributions/default-ui-contributions.ts +49 -2
- package/src/core/apploader.ts +1 -1
- package/src/core/constants.ts +2 -22
- package/src/core/contribution-names.ts +34 -0
- package/src/core/contribution-targets.ts +24 -0
- package/src/core/contributionregistry.ts +6 -0
- package/src/core/editorregistry.ts +1 -1
- package/src/core/ui-ids.ts +1 -29
- package/src/dialogs/index.ts +2 -1
- package/src/dialogs/version-info-dialog.ts +82 -0
- package/src/layouts/standard-layout.ts +1 -1
- package/src/parts/tabs.ts +2 -1
- package/dist/api-BWhUdgQ_.js.map +0 -1
- package/dist/parts-D1n2XZVE.js.map +0 -1
- package/dist/widget-DbolQH0C.js.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { A as
|
|
1
|
+
import { A as EDITOR_AREA_MAIN, B as TOOLBAR_BOTTOM_CENTER, C as TOPIC_SETTINGS_CHANGED, F as SIDEBAR_MAIN_TOOLBAR, H as TOOLBAR_MAIN, I as SYSTEM_ATTRIBUTIONS, L as SYSTEM_LAYOUTS, M as SIDEBAR_AUXILIARY, N as SIDEBAR_MAIN, O as constants_exports, P as SIDEBAR_MAIN_BOTTOM, S as taskService, U as TOOLBAR_MAIN_CENTER, V as TOOLBAR_BOTTOM_END, W as TOOLBAR_MAIN_RIGHT, a as versionInfoDialog, b as extensionRegistry, c as confirmDialog, h as deleteIndexedDbWorkspaceData, j as PANEL_BOTTOM, k as ABOUT_TABS, m as appLoaderService, n as DocksContainer, o as filebrowserDialog, p as promptDialog, r as icon, t as DocksPart, v as DocksElement, w as appSettings, x as esmShService, y as TOPIC_EXTENSIONS_CHANGED, z as TOOLBAR_BOTTOM } from "./parts-BvITdiV3.js";
|
|
2
2
|
import { a as unregisterLogHandler, o as rootContext, r as registerLogHandler, s as uiContext, t as createLogger } from "./logger-DT0_NW3S.js";
|
|
3
|
-
import { C as toastError, T as toastWarning, 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, w as toastInfo } from "./widget-
|
|
3
|
+
import { C as toastError, T as toastWarning, 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 toastInfo } from "./widget-DFbJNLqB.js";
|
|
4
4
|
import { n as subscribe, t as publish } from "./events-B_ZxkU_G.js";
|
|
5
5
|
import { a as File, c as TOPIC_WORKSPACE_CHANGED, f as workspaceService, i as Directory, l as TOPIC_WORKSPACE_CONNECTED, o as FileContentType, u as UnavailableWorkspaceFolderDirectory } from "./fs-access-D-fDaJ8V.js";
|
|
6
|
-
import "./widgets-
|
|
6
|
+
import "./widgets-CuO5lmjL.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";
|
|
@@ -300,7 +300,7 @@ var treeNodeComparator = (c1, c2) => {
|
|
|
300
300
|
//#endregion
|
|
301
301
|
//#region src/components/filebrowser.ts
|
|
302
302
|
var _DocksFileBrowser;
|
|
303
|
-
var logger$
|
|
303
|
+
var logger$2 = createLogger("DocksFileBrowser");
|
|
304
304
|
var t$6 = await i18n(/* @__PURE__ */ Object.assign({
|
|
305
305
|
"./filebrowser.de.json": () => import("./filebrowser.de-GEf6Eilh.js"),
|
|
306
306
|
"./filebrowser.en.json": () => import("./filebrowser.en-o0Ad5f7Z.js")
|
|
@@ -485,7 +485,7 @@ var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
|
|
|
485
485
|
}
|
|
486
486
|
if (info?.backendName) node.workspaceTag = info.backendName;
|
|
487
487
|
} catch (e) {
|
|
488
|
-
logger$
|
|
488
|
+
logger$2.debug("Failed to get workspace info for directory", e);
|
|
489
489
|
}
|
|
490
490
|
if (resource instanceof Directory && loadChildren) {
|
|
491
491
|
try {
|
|
@@ -513,7 +513,7 @@ var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
|
|
|
513
513
|
return node;
|
|
514
514
|
}
|
|
515
515
|
node.loadError = error instanceof Error ? error.message : String(error);
|
|
516
|
-
logger$
|
|
516
|
+
logger$2.error("Failed to load directory children:", error);
|
|
517
517
|
}
|
|
518
518
|
node.loaded = true;
|
|
519
519
|
}
|
|
@@ -612,7 +612,7 @@ var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
|
|
|
612
612
|
return;
|
|
613
613
|
}
|
|
614
614
|
node.loadError = error instanceof Error ? error.message : String(error);
|
|
615
|
-
logger$
|
|
615
|
+
logger$2.error("Failed to load directory children:", error);
|
|
616
616
|
this.requestUpdate();
|
|
617
617
|
} finally {
|
|
618
618
|
this.loadingNodes.delete(node);
|
|
@@ -746,7 +746,7 @@ var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
|
|
|
746
746
|
if (paths.length === 0) return;
|
|
747
747
|
const workspace = await workspaceService.getWorkspace();
|
|
748
748
|
if (!workspace) {
|
|
749
|
-
logger$
|
|
749
|
+
logger$2.warn("Workspace drop ignored because no workspace is connected");
|
|
750
750
|
return;
|
|
751
751
|
}
|
|
752
752
|
const moveWithinSameBackend = async (src) => {
|
|
@@ -763,7 +763,7 @@ var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
|
|
|
763
763
|
for (const path of paths) try {
|
|
764
764
|
const src = await workspace.getResource(path);
|
|
765
765
|
if (!src) {
|
|
766
|
-
logger$
|
|
766
|
+
logger$2.warn(`Workspace drop: source not found for path "${path}"`);
|
|
767
767
|
failed++;
|
|
768
768
|
continue;
|
|
769
769
|
}
|
|
@@ -774,11 +774,11 @@ var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
|
|
|
774
774
|
const root = src.getWorkspace();
|
|
775
775
|
if (root) srcRoots.add(root);
|
|
776
776
|
} catch (error) {
|
|
777
|
-
logger$
|
|
777
|
+
logger$2.error(`Failed to handle workspace drop for "${path}":`, error);
|
|
778
778
|
failed++;
|
|
779
779
|
}
|
|
780
780
|
if (sources.length === 0) {
|
|
781
|
-
if (failed > 0) logger$
|
|
781
|
+
if (failed > 0) logger$2.info(`Workspace drop failed for ${failed} item(s)`);
|
|
782
782
|
return;
|
|
783
783
|
}
|
|
784
784
|
let isCrossConnection = false;
|
|
@@ -800,17 +800,17 @@ var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
|
|
|
800
800
|
destBackend
|
|
801
801
|
}))) return;
|
|
802
802
|
} catch (err) {
|
|
803
|
-
logger$
|
|
803
|
+
logger$2.debug("Failed to resolve cross-connection info for DnD", err);
|
|
804
804
|
}
|
|
805
805
|
for (const { path, resource } of sources) try {
|
|
806
806
|
const move = await moveWithinSameBackend(resource);
|
|
807
807
|
await workspaceService.copyResource(resource, targetDir, { move });
|
|
808
808
|
processed++;
|
|
809
809
|
} catch (error) {
|
|
810
|
-
logger$
|
|
810
|
+
logger$2.error(`Failed to handle workspace drop for "${path}":`, error);
|
|
811
811
|
failed++;
|
|
812
812
|
}
|
|
813
|
-
logger$
|
|
813
|
+
logger$2.info(`Workspace drop completed: ${processed}/${sources.length} items ${failed > 0 ? `, ${failed} failed` : ""}`);
|
|
814
814
|
await this.loadWorkspace(this.workspaceDir, true);
|
|
815
815
|
}
|
|
816
816
|
async handleFilesDrop(files, targetDir) {
|
|
@@ -829,10 +829,10 @@ var DocksFileBrowser = class DocksFileBrowser extends DocksPart {
|
|
|
829
829
|
await (await this.workspaceDir.getResource(targetPath, { create: true })).saveContents(file);
|
|
830
830
|
processed++;
|
|
831
831
|
} catch (error) {
|
|
832
|
-
logger$
|
|
832
|
+
logger$2.error(`Failed to upload ${file.name}:`, error);
|
|
833
833
|
failed++;
|
|
834
834
|
}
|
|
835
|
-
logger$
|
|
835
|
+
logger$2.info(`Uploaded ${processed}/${total} files${skipped > 0 ? `, ${skipped} skipped` : ""}${failed > 0 ? `, ${failed} failed` : ""}`);
|
|
836
836
|
await this.loadWorkspace(this.workspaceDir);
|
|
837
837
|
}
|
|
838
838
|
buildTargetPath(targetDir, fileName) {
|
|
@@ -935,7 +935,7 @@ _decorate([state()], DocksFileBrowser.prototype, "root", void 0);
|
|
|
935
935
|
_decorate([state()], DocksFileBrowser.prototype, "fileEditorOptions", void 0);
|
|
936
936
|
DocksFileBrowser = _DocksFileBrowser = _decorate([customElement("docks-filebrowser")], DocksFileBrowser);
|
|
937
937
|
//#endregion
|
|
938
|
-
//#region src/core/
|
|
938
|
+
//#region src/core/contribution-names.ts
|
|
939
939
|
var VIEW_FILEBROWSER = "view.filebrowser";
|
|
940
940
|
var VIEW_LOG_TERMINAL = "view.logTerminal";
|
|
941
941
|
var TOOLBAR_INFO = "toolbar.info";
|
|
@@ -955,6 +955,10 @@ var TOOLBAR_TASKS = "toolbar.tasks";
|
|
|
955
955
|
var SIDEBAR_TOOLBAR_EXTENSIONS = "sidebar.toolbar.extensions";
|
|
956
956
|
/** Default file-type → icon mappings on `system.icons`. */
|
|
957
957
|
var SYSTEM_DEFAULT_FILE_ICONS = "system.icons.default";
|
|
958
|
+
var ABOUT_TAB_RELEASE = "about.tab.release";
|
|
959
|
+
var ABOUT_TAB_PACKAGES = "about.tab.packages";
|
|
960
|
+
var ABOUT_TAB_ATTRIBUTIONS = "about.tab.attributions";
|
|
961
|
+
var ATTRIBUTION_ECLIPSE_DOCKS = "attribution.eclipse-docks";
|
|
958
962
|
var TOOLBAR_FILEBROWSER_RENAME = "toolbar.filebrowser.rename";
|
|
959
963
|
var TOOLBAR_FILEBROWSER_DELETE = "toolbar.filebrowser.delete";
|
|
960
964
|
var CTXMENU_FILEBROWSER_RENAME = "contextmenu.filebrowser.rename";
|
|
@@ -1264,7 +1268,7 @@ var DocksPartName = class DocksPartName extends DocksElement {
|
|
|
1264
1268
|
DocksPartName = _decorate([customElement("docks-part-name")], DocksPartName);
|
|
1265
1269
|
//#endregion
|
|
1266
1270
|
//#region src/components/extensions.ts
|
|
1267
|
-
var logger = createLogger("DocksExtensions");
|
|
1271
|
+
var logger$1 = createLogger("DocksExtensions");
|
|
1268
1272
|
var t$2 = await i18n(/* @__PURE__ */ Object.assign({
|
|
1269
1273
|
"./extensions.de.json": () => import("./extensions.de-Ct1DIybE.js"),
|
|
1270
1274
|
"./extensions.en.json": () => import("./extensions.en-DRPFtVHT.js")
|
|
@@ -1375,7 +1379,7 @@ var DocksExtensions = class DocksExtensions extends DocksPart {
|
|
|
1375
1379
|
this.showRegisterDialog = true;
|
|
1376
1380
|
this.requestUpdate();
|
|
1377
1381
|
} catch (error) {
|
|
1378
|
-
logger.warn(`Could not fetch package.json, using defaults: ${error}`);
|
|
1382
|
+
logger$1.warn(`Could not fetch package.json, using defaults: ${error}`);
|
|
1379
1383
|
this.registerExtensionData = {
|
|
1380
1384
|
url,
|
|
1381
1385
|
id: "",
|
|
@@ -2552,6 +2556,237 @@ var DocksLayoutSwitcher = class DocksLayoutSwitcher extends DocksElement {
|
|
|
2552
2556
|
_decorate([state()], DocksLayoutSwitcher.prototype, "currentLayoutId", void 0);
|
|
2553
2557
|
DocksLayoutSwitcher = _decorate([customElement("docks-layout-switcher")], DocksLayoutSwitcher);
|
|
2554
2558
|
//#endregion
|
|
2559
|
+
//#region src/components/release-history.ts
|
|
2560
|
+
var logger = createLogger("ReleaseHistory");
|
|
2561
|
+
async function loadReleases(releaseHistory) {
|
|
2562
|
+
if (!releaseHistory) return [];
|
|
2563
|
+
if (typeof releaseHistory !== "function") return releaseHistory;
|
|
2564
|
+
try {
|
|
2565
|
+
return await releaseHistory();
|
|
2566
|
+
} catch (error) {
|
|
2567
|
+
logger.error(`Failed to load release history from app: ${error instanceof Error ? error.message : String(error)}`);
|
|
2568
|
+
return [];
|
|
2569
|
+
}
|
|
2570
|
+
}
|
|
2571
|
+
function semverEqual(a, b) {
|
|
2572
|
+
return a.replace(/^v/i, "") === b.replace(/^v/i, "");
|
|
2573
|
+
}
|
|
2574
|
+
function isNewerThan(releaseTag, currentVersion) {
|
|
2575
|
+
const currentParts = currentVersion.replace(/^v/i, "").split(".").map(Number);
|
|
2576
|
+
const releaseParts = releaseTag.replace(/^v/i, "").split(".").map(Number);
|
|
2577
|
+
for (let i = 0; i < Math.max(currentParts.length, releaseParts.length); i++) {
|
|
2578
|
+
const current = currentParts[i] || 0;
|
|
2579
|
+
const releasePart = releaseParts[i] || 0;
|
|
2580
|
+
if (releasePart > current) return true;
|
|
2581
|
+
if (releasePart < current) return false;
|
|
2582
|
+
}
|
|
2583
|
+
return false;
|
|
2584
|
+
}
|
|
2585
|
+
var DocksReleaseHistory = class DocksReleaseHistory extends DocksPart {
|
|
2586
|
+
constructor(..._args) {
|
|
2587
|
+
super(..._args);
|
|
2588
|
+
this.scrollMode = "none";
|
|
2589
|
+
this.appVersion = "0.0.0";
|
|
2590
|
+
this.releases = [];
|
|
2591
|
+
this.currentReleaseIndex = 0;
|
|
2592
|
+
}
|
|
2593
|
+
static {
|
|
2594
|
+
this.styles = [css`
|
|
2595
|
+
.release-panel {
|
|
2596
|
+
display: flex;
|
|
2597
|
+
flex-direction: column;
|
|
2598
|
+
gap: 0.5rem;
|
|
2599
|
+
height: 100%;
|
|
2600
|
+
padding: 0.75rem;
|
|
2601
|
+
box-sizing: border-box;
|
|
2602
|
+
}
|
|
2603
|
+
|
|
2604
|
+
.release-panel wa-scroller {
|
|
2605
|
+
flex: 1;
|
|
2606
|
+
min-height: 0;
|
|
2607
|
+
}
|
|
2608
|
+
|
|
2609
|
+
.release-nav {
|
|
2610
|
+
display: flex;
|
|
2611
|
+
gap: 0.5rem;
|
|
2612
|
+
}
|
|
2613
|
+
`];
|
|
2614
|
+
}
|
|
2615
|
+
doInitUI() {
|
|
2616
|
+
this.load();
|
|
2617
|
+
}
|
|
2618
|
+
async load() {
|
|
2619
|
+
const app = appLoaderService.getCurrentApp();
|
|
2620
|
+
this.appVersion = app?.version ?? "0.0.0";
|
|
2621
|
+
this.releases = await loadReleases(app?.releaseHistory);
|
|
2622
|
+
const currentIndex = this.releases.findIndex((release) => semverEqual(release.tag_name, this.appVersion));
|
|
2623
|
+
this.currentReleaseIndex = currentIndex >= 0 ? currentIndex : 0;
|
|
2624
|
+
}
|
|
2625
|
+
showOlder() {
|
|
2626
|
+
if (this.currentReleaseIndex < this.releases.length - 1) this.currentReleaseIndex += 1;
|
|
2627
|
+
}
|
|
2628
|
+
showNewer() {
|
|
2629
|
+
if (this.currentReleaseIndex > 0) this.currentReleaseIndex -= 1;
|
|
2630
|
+
}
|
|
2631
|
+
renderContent() {
|
|
2632
|
+
const release = this.releases[this.currentReleaseIndex];
|
|
2633
|
+
if (!release) return html`<div class="release-panel">No release history available.</div>`;
|
|
2634
|
+
const isCurrent = semverEqual(release.tag_name, this.appVersion);
|
|
2635
|
+
const showUpdateHint = !isCurrent && isNewerThan(release.tag_name, this.appVersion);
|
|
2636
|
+
const atOldest = this.currentReleaseIndex === this.releases.length - 1;
|
|
2637
|
+
const atNewest = this.currentReleaseIndex === 0;
|
|
2638
|
+
const bodyHtml = release.body ? marked.parse(release.body, { async: false }) : "";
|
|
2639
|
+
return html`
|
|
2640
|
+
<div class="release-panel">
|
|
2641
|
+
<p>
|
|
2642
|
+
<strong>Version:</strong> ${release.tag_name}${isCurrent ? " (Current)" : ""}
|
|
2643
|
+
</p>
|
|
2644
|
+
<p>
|
|
2645
|
+
<strong>Released:</strong>
|
|
2646
|
+
<wa-format-date
|
|
2647
|
+
.date=${release.published_at}
|
|
2648
|
+
month="short"
|
|
2649
|
+
day="numeric"
|
|
2650
|
+
year="numeric"
|
|
2651
|
+
></wa-format-date>
|
|
2652
|
+
</p>
|
|
2653
|
+
${showUpdateHint ? html`
|
|
2654
|
+
<wa-callout variant="warning">
|
|
2655
|
+
<wa-icon slot="icon" name="triangle-exclamation"></wa-icon>
|
|
2656
|
+
Update available — reload the page to update
|
|
2657
|
+
</wa-callout>
|
|
2658
|
+
` : ""}
|
|
2659
|
+
<wa-scroller orientation="vertical">
|
|
2660
|
+
${bodyHtml ? html`<div style="white-space: normal;">${unsafeHTML(bodyHtml)}</div>` : ""}
|
|
2661
|
+
</wa-scroller>
|
|
2662
|
+
${this.releases.length > 1 ? html`
|
|
2663
|
+
<div class="release-nav">
|
|
2664
|
+
<wa-button-group>
|
|
2665
|
+
<wa-button
|
|
2666
|
+
variant="default"
|
|
2667
|
+
?disabled=${atOldest}
|
|
2668
|
+
@click=${() => this.showOlder()}
|
|
2669
|
+
>
|
|
2670
|
+
← Previous
|
|
2671
|
+
</wa-button>
|
|
2672
|
+
<wa-button
|
|
2673
|
+
variant="default"
|
|
2674
|
+
?disabled=${atNewest}
|
|
2675
|
+
@click=${() => this.showNewer()}
|
|
2676
|
+
>
|
|
2677
|
+
Next →
|
|
2678
|
+
</wa-button>
|
|
2679
|
+
</wa-button-group>
|
|
2680
|
+
</div>
|
|
2681
|
+
` : ""}
|
|
2682
|
+
</div>
|
|
2683
|
+
`;
|
|
2684
|
+
}
|
|
2685
|
+
};
|
|
2686
|
+
_decorate([state()], DocksReleaseHistory.prototype, "appVersion", void 0);
|
|
2687
|
+
_decorate([state()], DocksReleaseHistory.prototype, "releases", void 0);
|
|
2688
|
+
_decorate([state()], DocksReleaseHistory.prototype, "currentReleaseIndex", void 0);
|
|
2689
|
+
DocksReleaseHistory = _decorate([customElement("docks-release-history")], DocksReleaseHistory);
|
|
2690
|
+
//#endregion
|
|
2691
|
+
//#region src/components/npm-packages.ts
|
|
2692
|
+
var DocksNpmPackages = class DocksNpmPackages extends DocksPart {
|
|
2693
|
+
static {
|
|
2694
|
+
this.styles = [css`
|
|
2695
|
+
.packages-panel {
|
|
2696
|
+
padding: 0.75rem;
|
|
2697
|
+
box-sizing: border-box;
|
|
2698
|
+
}
|
|
2699
|
+
|
|
2700
|
+
wa-tree-item > span small {
|
|
2701
|
+
color: var(--wa-color-neutral-60);
|
|
2702
|
+
font-size: 0.875em;
|
|
2703
|
+
margin-left: 0.5rem;
|
|
2704
|
+
}
|
|
2705
|
+
`];
|
|
2706
|
+
}
|
|
2707
|
+
renderContent() {
|
|
2708
|
+
const app = appLoaderService.getCurrentApp();
|
|
2709
|
+
const entries = Object.entries(app?.dependencies ?? {});
|
|
2710
|
+
if (entries.length === 0) return html`<div class="packages-panel">No package information available.</div>`;
|
|
2711
|
+
return html`
|
|
2712
|
+
<div class="packages-panel">
|
|
2713
|
+
<wa-tree style="--indent-guide-width: 1px;">
|
|
2714
|
+
<wa-tree-item expanded>
|
|
2715
|
+
<span>${app?.name ?? ""}</span>
|
|
2716
|
+
${entries.map(([name, version]) => html`
|
|
2717
|
+
<wa-tree-item>
|
|
2718
|
+
<span>${name} <small>${version}</small></span>
|
|
2719
|
+
</wa-tree-item>
|
|
2720
|
+
`)}
|
|
2721
|
+
</wa-tree-item>
|
|
2722
|
+
</wa-tree>
|
|
2723
|
+
</div>
|
|
2724
|
+
`;
|
|
2725
|
+
}
|
|
2726
|
+
};
|
|
2727
|
+
DocksNpmPackages = _decorate([customElement("docks-npm-packages")], DocksNpmPackages);
|
|
2728
|
+
//#endregion
|
|
2729
|
+
//#region src/components/attribution.ts
|
|
2730
|
+
function renderHtmlContribution(contribution) {
|
|
2731
|
+
const contents = contribution.component;
|
|
2732
|
+
if (contents instanceof Function) return contents();
|
|
2733
|
+
return unsafeHTML(contents);
|
|
2734
|
+
}
|
|
2735
|
+
var DocksAttributionPart = class DocksAttributionPart extends DocksPart {
|
|
2736
|
+
constructor(..._args) {
|
|
2737
|
+
super(..._args);
|
|
2738
|
+
this.attributions = [];
|
|
2739
|
+
}
|
|
2740
|
+
static {
|
|
2741
|
+
this.styles = [css`
|
|
2742
|
+
.attributions {
|
|
2743
|
+
display: flex;
|
|
2744
|
+
flex-direction: column;
|
|
2745
|
+
gap: 1.25rem;
|
|
2746
|
+
padding: 0.75rem;
|
|
2747
|
+
box-sizing: border-box;
|
|
2748
|
+
}
|
|
2749
|
+
|
|
2750
|
+
.attribution h3 {
|
|
2751
|
+
margin: 0 0 0.5rem;
|
|
2752
|
+
font-size: var(--wa-font-size-m);
|
|
2753
|
+
}
|
|
2754
|
+
|
|
2755
|
+
.attribution p {
|
|
2756
|
+
margin: 0 0 0.5rem;
|
|
2757
|
+
}
|
|
2758
|
+
|
|
2759
|
+
.attribution p:last-child {
|
|
2760
|
+
margin-bottom: 0;
|
|
2761
|
+
}
|
|
2762
|
+
`];
|
|
2763
|
+
}
|
|
2764
|
+
doBeforeUI() {
|
|
2765
|
+
this.loadAttributions();
|
|
2766
|
+
this.subscribe(TOPIC_CONTRIBUTEIONS_CHANGED, (event) => {
|
|
2767
|
+
if (event.target === "system.attributions") this.loadAttributions();
|
|
2768
|
+
});
|
|
2769
|
+
}
|
|
2770
|
+
loadAttributions() {
|
|
2771
|
+
this.attributions = contributionRegistry.getContributions(SYSTEM_ATTRIBUTIONS).filter((contribution) => "component" in contribution && getContributionVisible(contribution));
|
|
2772
|
+
}
|
|
2773
|
+
renderContent() {
|
|
2774
|
+
if (this.attributions.length === 0) return html`<div class="attributions">No attributions to display.</div>`;
|
|
2775
|
+
return html`
|
|
2776
|
+
<div class="attributions">
|
|
2777
|
+
${this.attributions.map((contribution) => html`
|
|
2778
|
+
<section class="attribution">
|
|
2779
|
+
${contribution.label ? html`<h3>${contribution.label}</h3>` : nothing}
|
|
2780
|
+
${renderHtmlContribution(contribution)}
|
|
2781
|
+
</section>
|
|
2782
|
+
`)}
|
|
2783
|
+
</div>
|
|
2784
|
+
`;
|
|
2785
|
+
}
|
|
2786
|
+
};
|
|
2787
|
+
_decorate([state()], DocksAttributionPart.prototype, "attributions", void 0);
|
|
2788
|
+
DocksAttributionPart = _decorate([customElement("docks-attribution")], DocksAttributionPart);
|
|
2789
|
+
//#endregion
|
|
2555
2790
|
//#region src/contributions/default-ui-contributions.ts
|
|
2556
2791
|
contributionRegistry.registerContribution(SIDEBAR_MAIN, {
|
|
2557
2792
|
name: VIEW_FILEBROWSER,
|
|
@@ -2565,6 +2800,43 @@ contributionRegistry.registerContribution(PANEL_BOTTOM, {
|
|
|
2565
2800
|
icon: "list",
|
|
2566
2801
|
component: (id) => html`<docks-log-terminal id="${id}"></docks-log-terminal>`
|
|
2567
2802
|
});
|
|
2803
|
+
contributionRegistry.registerContribution(ABOUT_TABS, {
|
|
2804
|
+
name: ABOUT_TAB_ATTRIBUTIONS,
|
|
2805
|
+
label: "Attributions",
|
|
2806
|
+
icon: "copyright",
|
|
2807
|
+
ranking: 100,
|
|
2808
|
+
toolbar: false,
|
|
2809
|
+
contextMenu: false,
|
|
2810
|
+
component: (id) => html`<docks-attribution id="${id}"></docks-attribution>`
|
|
2811
|
+
});
|
|
2812
|
+
contributionRegistry.registerContribution(ABOUT_TABS, {
|
|
2813
|
+
name: ABOUT_TAB_RELEASE,
|
|
2814
|
+
label: "Release History",
|
|
2815
|
+
icon: "clock-rotate-left",
|
|
2816
|
+
ranking: 50,
|
|
2817
|
+
toolbar: false,
|
|
2818
|
+
contextMenu: false,
|
|
2819
|
+
component: (id) => html`<docks-release-history id="${id}"></docks-release-history>`
|
|
2820
|
+
});
|
|
2821
|
+
contributionRegistry.registerContribution(ABOUT_TABS, {
|
|
2822
|
+
name: ABOUT_TAB_PACKAGES,
|
|
2823
|
+
label: "NPM Packages",
|
|
2824
|
+
icon: "cubes",
|
|
2825
|
+
ranking: 0,
|
|
2826
|
+
toolbar: false,
|
|
2827
|
+
contextMenu: false,
|
|
2828
|
+
component: (id) => html`<docks-npm-packages id="${id}"></docks-npm-packages>`
|
|
2829
|
+
});
|
|
2830
|
+
contributionRegistry.registerContribution(SYSTEM_ATTRIBUTIONS, {
|
|
2831
|
+
name: ATTRIBUTION_ECLIPSE_DOCKS,
|
|
2832
|
+
label: "Eclipse Docks",
|
|
2833
|
+
component: () => html`
|
|
2834
|
+
<p>
|
|
2835
|
+
Eclipse Docks is made available under the
|
|
2836
|
+
<a href="https://www.eclipse.org/legal/epl-2.0" target="_blank" rel="noopener noreferrer">Eclipse Public License 2.0</a>.
|
|
2837
|
+
</p>
|
|
2838
|
+
`
|
|
2839
|
+
});
|
|
2568
2840
|
contributionRegistry.registerContribution(TOOLBAR_BOTTOM_END, {
|
|
2569
2841
|
name: TOOLBAR_INFO,
|
|
2570
2842
|
label: "Info",
|
|
@@ -3124,182 +3396,19 @@ registerAll({
|
|
|
3124
3396
|
});
|
|
3125
3397
|
//#endregion
|
|
3126
3398
|
//#region src/commands/version-info.ts
|
|
3127
|
-
/** Compare semver strings whether GitHub uses a leading "v" (e.g. v0.7.83) or package.json does not. */
|
|
3128
|
-
function semverEqual(a, b) {
|
|
3129
|
-
return a.replace(/^v/i, "") === b.replace(/^v/i, "");
|
|
3130
|
-
}
|
|
3131
3399
|
registerAll({
|
|
3132
3400
|
command: {
|
|
3133
|
-
|
|
3134
|
-
|
|
3135
|
-
|
|
3136
|
-
|
|
3401
|
+
id: "show_version_info",
|
|
3402
|
+
name: "Show Version Info",
|
|
3403
|
+
description: "Shows application version information",
|
|
3404
|
+
parameters: []
|
|
3137
3405
|
},
|
|
3138
3406
|
handler: { execute: async (_context) => {
|
|
3139
|
-
|
|
3140
|
-
if (!app) {
|
|
3407
|
+
if (!appLoaderService.getCurrentApp()) {
|
|
3141
3408
|
toastError("No app loaded");
|
|
3142
3409
|
return;
|
|
3143
3410
|
}
|
|
3144
|
-
|
|
3145
|
-
const hasPackages = Object.keys(deps).length > 0;
|
|
3146
|
-
const packagesTree = hasPackages ? html`
|
|
3147
|
-
<wa-tree style="--indent-guide-width: 1px;">
|
|
3148
|
-
<wa-tree-item expanded>
|
|
3149
|
-
<span>${app.name ?? ""}</span>
|
|
3150
|
-
${Object.entries(deps).map(([name, version]) => html`
|
|
3151
|
-
<wa-tree-item>
|
|
3152
|
-
<span>${name} <small>${version}</small></span>
|
|
3153
|
-
</wa-tree-item>
|
|
3154
|
-
`)}
|
|
3155
|
-
</wa-tree-item>
|
|
3156
|
-
</wa-tree>
|
|
3157
|
-
` : html``;
|
|
3158
|
-
let dialogContainer = null;
|
|
3159
|
-
const getDialogContainer = () => {
|
|
3160
|
-
if (!dialogContainer) {
|
|
3161
|
-
dialogContainer = document.getElementById("global-dialog-container") || document.createElement("div");
|
|
3162
|
-
if (!dialogContainer.id) {
|
|
3163
|
-
dialogContainer.id = "global-dialog-container";
|
|
3164
|
-
document.body.appendChild(dialogContainer);
|
|
3165
|
-
}
|
|
3166
|
-
}
|
|
3167
|
-
return dialogContainer;
|
|
3168
|
-
};
|
|
3169
|
-
const cleanup = () => {
|
|
3170
|
-
if (dialogContainer) render(html``, dialogContainer);
|
|
3171
|
-
};
|
|
3172
|
-
const renderReleaseContent = (releaseContent) => {
|
|
3173
|
-
return html`${unsafeHTML(marked.parse(releaseContent, { async: false }))}`;
|
|
3174
|
-
};
|
|
3175
|
-
let releases = [];
|
|
3176
|
-
if (app.releaseHistory) if (typeof app.releaseHistory === "function") try {
|
|
3177
|
-
releases = await app.releaseHistory();
|
|
3178
|
-
} catch (error) {
|
|
3179
|
-
console.error("Failed to load release history from app:", error);
|
|
3180
|
-
releases = [];
|
|
3181
|
-
}
|
|
3182
|
-
else releases = app.releaseHistory;
|
|
3183
|
-
const appVersion = app.version ?? "0.0.0";
|
|
3184
|
-
const currentIndex = releases.length > 0 ? releases.findIndex((r) => semverEqual(r.tag_name, appVersion)) : -1;
|
|
3185
|
-
const startIndex = currentIndex >= 0 ? currentIndex : 0;
|
|
3186
|
-
let currentReleaseIndex = startIndex;
|
|
3187
|
-
const buildReleaseContent = (index) => {
|
|
3188
|
-
if (releases.length === 0) return "";
|
|
3189
|
-
const release = releases[index];
|
|
3190
|
-
const isCurrentVersion = semverEqual(release.tag_name, appVersion);
|
|
3191
|
-
let message = `**Version:** ${release.tag_name}`;
|
|
3192
|
-
if (isCurrentVersion) message += ` (Current)`;
|
|
3193
|
-
message += `\n\n`;
|
|
3194
|
-
const publishDate = new Date(release.published_at).toLocaleDateString();
|
|
3195
|
-
message += `**Released:** ${publishDate}\n\n`;
|
|
3196
|
-
if (!isCurrentVersion) {
|
|
3197
|
-
const cleanCurrent = appVersion.replace(/^v/, "");
|
|
3198
|
-
const cleanRelease = release.tag_name.replace(/^v/, "");
|
|
3199
|
-
const currentParts = cleanCurrent.split(".").map(Number);
|
|
3200
|
-
const releaseParts = cleanRelease.split(".").map(Number);
|
|
3201
|
-
let isNewer = false;
|
|
3202
|
-
for (let i = 0; i < Math.max(currentParts.length, releaseParts.length); i++) {
|
|
3203
|
-
const current = currentParts[i] || 0;
|
|
3204
|
-
const releasePart = releaseParts[i] || 0;
|
|
3205
|
-
if (releasePart > current) {
|
|
3206
|
-
isNewer = true;
|
|
3207
|
-
break;
|
|
3208
|
-
}
|
|
3209
|
-
if (releasePart < current) break;
|
|
3210
|
-
}
|
|
3211
|
-
if (isNewer) message += `⚠️ **Update available - reload page to update**\n\n`;
|
|
3212
|
-
}
|
|
3213
|
-
if (release.body) message += `---\n\n${release.body}`;
|
|
3214
|
-
return message;
|
|
3215
|
-
};
|
|
3216
|
-
const handleClose = () => {
|
|
3217
|
-
cleanup();
|
|
3218
|
-
};
|
|
3219
|
-
const handleAfterHide = () => {
|
|
3220
|
-
cleanup();
|
|
3221
|
-
};
|
|
3222
|
-
const updateDialog = (index) => {
|
|
3223
|
-
const releaseContent = buildReleaseContent(index);
|
|
3224
|
-
const hasNavigation = releases.length > 0;
|
|
3225
|
-
render(html`
|
|
3226
|
-
<wa-dialog
|
|
3227
|
-
label="About ${app.name ?? ""} - ${appVersion}"
|
|
3228
|
-
open
|
|
3229
|
-
light-dismiss
|
|
3230
|
-
style="--width: 600px;"
|
|
3231
|
-
@wa-request-close=${handleClose}
|
|
3232
|
-
@wa-after-hide=${handleAfterHide}
|
|
3233
|
-
>
|
|
3234
|
-
<style>
|
|
3235
|
-
.dialog-content {
|
|
3236
|
-
height: 600px;
|
|
3237
|
-
}
|
|
3238
|
-
|
|
3239
|
-
wa-tree-item > span small {
|
|
3240
|
-
color: var(--wa-color-neutral-60);
|
|
3241
|
-
font-size: 0.875em;
|
|
3242
|
-
margin-left: 0.5rem;
|
|
3243
|
-
}
|
|
3244
|
-
</style>
|
|
3245
|
-
<small>${app.description ?? ""}</small>
|
|
3246
|
-
<div class="dialog-content">
|
|
3247
|
-
<wa-tab-group>
|
|
3248
|
-
${releases.length > 0 ? html`
|
|
3249
|
-
<wa-tab slot="nav" panel="release">Release History</wa-tab>
|
|
3250
|
-
<wa-tab-panel name="release">
|
|
3251
|
-
${renderReleaseContent(releaseContent)}
|
|
3252
|
-
</wa-tab-panel>
|
|
3253
|
-
` : ""}
|
|
3254
|
-
|
|
3255
|
-
${hasPackages ? html`
|
|
3256
|
-
<wa-tab slot="nav" panel="packages">NPM Packages</wa-tab>
|
|
3257
|
-
<wa-tab-panel name="packages">
|
|
3258
|
-
${packagesTree}
|
|
3259
|
-
</wa-tab-panel>
|
|
3260
|
-
` : ""}
|
|
3261
|
-
</wa-tab-group>
|
|
3262
|
-
</div>
|
|
3263
|
-
<div slot="footer">
|
|
3264
|
-
${hasNavigation ? html`
|
|
3265
|
-
<wa-button
|
|
3266
|
-
variant="default"
|
|
3267
|
-
?disabled=${index === releases.length - 1}
|
|
3268
|
-
@click=${() => {
|
|
3269
|
-
if (index < releases.length - 1) {
|
|
3270
|
-
currentReleaseIndex = index + 1;
|
|
3271
|
-
updateDialog(currentReleaseIndex);
|
|
3272
|
-
}
|
|
3273
|
-
}}
|
|
3274
|
-
>
|
|
3275
|
-
← Previous
|
|
3276
|
-
</wa-button>
|
|
3277
|
-
<wa-button
|
|
3278
|
-
variant="default"
|
|
3279
|
-
?disabled=${index === 0}
|
|
3280
|
-
@click=${() => {
|
|
3281
|
-
if (index > 0) {
|
|
3282
|
-
currentReleaseIndex = index - 1;
|
|
3283
|
-
updateDialog(currentReleaseIndex);
|
|
3284
|
-
}
|
|
3285
|
-
}}
|
|
3286
|
-
>
|
|
3287
|
-
Next →
|
|
3288
|
-
</wa-button>
|
|
3289
|
-
` : ""}
|
|
3290
|
-
<wa-button variant="primary" data-dialog="close">Close</wa-button>
|
|
3291
|
-
</div>
|
|
3292
|
-
</wa-dialog>
|
|
3293
|
-
`, getDialogContainer());
|
|
3294
|
-
};
|
|
3295
|
-
updateDialog(startIndex);
|
|
3296
|
-
return new Promise((resolve) => {
|
|
3297
|
-
const checkClosed = () => {
|
|
3298
|
-
if (!dialogContainer?.querySelector("wa-dialog[open]")) resolve();
|
|
3299
|
-
else setTimeout(checkClosed, 100);
|
|
3300
|
-
};
|
|
3301
|
-
checkClosed();
|
|
3302
|
-
});
|
|
3411
|
+
await versionInfoDialog();
|
|
3303
3412
|
} }
|
|
3304
3413
|
});
|
|
3305
3414
|
//#endregion
|
|
@@ -4364,6 +4473,6 @@ function getFrameworkConfig() {
|
|
|
4364
4473
|
return { ...frameworkConfig };
|
|
4365
4474
|
}
|
|
4366
4475
|
//#endregion
|
|
4367
|
-
export {
|
|
4476
|
+
export { TOOLBAR_THEME_SWITCHER as C, editorRegistry as D, treeNodeComparator as E, createLazyLabel as O, TOOLBAR_TASKS as S, VIEW_LOG_TERMINAL as T, TOOLBAR_FILEBROWSER_RENAME as _, DocksStandardLayout as a, TOOLBAR_LANGUAGE_SELECTOR as b, ABOUT_TAB_RELEASE as c, CTXMENU_FILEBROWSER_RENAME as d, SIDEBAR_TOOLBAR_EXTENSIONS as f, TOOLBAR_FILEBROWSER_DELETE as g, TOOLBAR_FAST_VIEWS as h, createJsRuntime as i, i18n as k, 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_FULLSCREEN as v, VIEW_FILEBROWSER as w, TOOLBAR_LAYOUT_SWITCHER as x, TOOLBAR_INFO as y };
|
|
4368
4477
|
|
|
4369
|
-
//# sourceMappingURL=api-
|
|
4478
|
+
//# sourceMappingURL=api-N5AbUtyH.js.map
|