@eclipse-lyra/core 0.7.6 → 0.7.7

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 (60) hide show
  1. package/dist/api/index.js +28 -29
  2. package/dist/api/services.d.ts +0 -4
  3. package/dist/api/services.d.ts.map +1 -1
  4. package/dist/api/types.d.ts +1 -1
  5. package/dist/api/types.d.ts.map +1 -1
  6. package/dist/components/fastviews.d.ts +1 -1
  7. package/dist/components/index.d.ts.map +1 -1
  8. package/dist/components/{app-switcher.d.ts → layout-switcher.d.ts} +5 -4
  9. package/dist/components/layout-switcher.d.ts.map +1 -0
  10. package/dist/{standard-layout-Efok-voU.js → config-BiRvaEoO.js} +243 -454
  11. package/dist/config-BiRvaEoO.js.map +1 -0
  12. package/dist/contributions/default-layout-contributions.d.ts +1 -0
  13. package/dist/contributions/default-layout-contributions.d.ts.map +1 -0
  14. package/dist/contributions/index.d.ts.map +1 -1
  15. package/dist/core/apploader.d.ts +40 -30
  16. package/dist/core/apploader.d.ts.map +1 -1
  17. package/dist/core/constants.d.ts +1 -0
  18. package/dist/core/constants.d.ts.map +1 -1
  19. package/dist/core/contributionregistry.d.ts +9 -0
  20. package/dist/core/contributionregistry.d.ts.map +1 -1
  21. package/dist/core/index.d.ts.map +1 -1
  22. package/dist/icon-DN6fp0dg.js.map +1 -1
  23. package/dist/index.js +28 -29
  24. package/dist/parts/contextmenu.d.ts +1 -1
  25. package/dist/parts/index.js +1 -1
  26. package/dist/parts/resizable-grid.d.ts +1 -1
  27. package/dist/{resizable-grid-BP9wOk_x.js → resizable-grid-oWYRVx30.js} +315 -94
  28. package/dist/resizable-grid-oWYRVx30.js.map +1 -0
  29. package/dist/vite-plugin-resolve-deps.d.ts +18 -0
  30. package/dist/vite-plugin-resolve-deps.d.ts.map +1 -0
  31. package/dist/widgets/icon.d.ts +1 -1
  32. package/package.json +8 -1
  33. package/src/api/services.ts +0 -4
  34. package/src/api/types.ts +1 -0
  35. package/src/commands/version-info.ts +24 -10
  36. package/src/components/index.ts +1 -1
  37. package/src/components/layout-switcher.ts +83 -0
  38. package/src/contributions/default-layout-contributions.ts +10 -0
  39. package/src/contributions/default-ui-contributions.ts +1 -1
  40. package/src/contributions/index.ts +1 -0
  41. package/src/contributions/marketplace-catalog-contributions.ts +1 -1
  42. package/src/core/apploader.ts +182 -99
  43. package/src/core/constants.ts +1 -0
  44. package/src/core/contributionregistry.ts +7 -0
  45. package/src/core/index.ts +0 -1
  46. package/src/vite-env.d.ts +9 -0
  47. package/src/vite-plugin-resolve-deps.ts +112 -0
  48. package/dist/components/app-selector.d.ts +0 -17
  49. package/dist/components/app-selector.d.ts.map +0 -1
  50. package/dist/components/app-switcher.d.ts.map +0 -1
  51. package/dist/core/app-host-config.d.ts +0 -7
  52. package/dist/core/app-host-config.d.ts.map +0 -1
  53. package/dist/core/packageinfoservice.d.ts +0 -16
  54. package/dist/core/packageinfoservice.d.ts.map +0 -1
  55. package/dist/resizable-grid-BP9wOk_x.js.map +0 -1
  56. package/dist/standard-layout-Efok-voU.js.map +0 -1
  57. package/src/components/app-selector.ts +0 -233
  58. package/src/components/app-switcher.ts +0 -126
  59. package/src/core/app-host-config.ts +0 -23
  60. package/src/core/packageinfoservice.ts +0 -56
@@ -1,6 +1,6 @@
1
- import { l as rootContext, h as contributionRegistry, b as TOPIC_CONTRIBUTEIONS_CHANGED, w as watchSignal, p as partDirtySignal, d as activePartSignal, c as activeEditorSignal, i as createLogger, e as activeSelectionSignal, f as activeTasksSignal, t as toastError, m as toastInfo, o as registerLogHandler, q as unregisterLogHandler, L as LyraWidget, r as registerAll, u as uiContext, n as toastWarning } from "./icon-DN6fp0dg.js";
2
- import { html, css, nothing, render } from "lit";
3
- import { n as appSettings, l as TOPIC_SETTINGS_CHANGED, t as persistenceService, E as EDITOR_AREA_MAIN, c as LyraPart, q as extensionRegistry, H as HIDE_DOT_RESOURCE, o as confirmDialog, g as TOOLBAR_BOTTOM_CENTER, v as taskService, b as LyraElement, w as TOPIC_EXTENSIONS_CHANGED, m as appLoaderService, u as promptDialog, p as esmShService, D as DIALOG_CONTRIBUTION_TARGET, x as CLOSE_BUTTON, y as dialogService, d as SIDEBAR_MAIN, h as TOOLBAR_BOTTOM_END, k as TOOLBAR_MAIN_RIGHT, f as SYSTEM_VIEWS, z as constants, L as LyraContainer, i as TOOLBAR_MAIN, j as TOOLBAR_MAIN_CENTER, T as TOOLBAR_BOTTOM, e as SIDEBAR_MAIN_BOTTOM, P as PANEL_BOTTOM, S as SIDEBAR_AUXILIARY } from "./resizable-grid-BP9wOk_x.js";
1
+ import { l as rootContext, h as contributionRegistry, b as TOPIC_CONTRIBUTEIONS_CHANGED, w as watchSignal, p as partDirtySignal, d as activePartSignal, c as activeEditorSignal, e as activeSelectionSignal, f as activeTasksSignal, t as toastError, m as toastInfo, i as createLogger, o as registerLogHandler, q as unregisterLogHandler, L as LyraWidget, r as registerAll, u as uiContext, n as toastWarning } from "./icon-DN6fp0dg.js";
2
+ import { css, html, nothing, render } from "lit";
3
+ import { o as appSettings, m as TOPIC_SETTINGS_CHANGED, u as persistenceService, E as EDITOR_AREA_MAIN, c as LyraPart, H as HIDE_DOT_RESOURCE, p as confirmDialog, h as TOOLBAR_BOTTOM_CENTER, w as taskService, b as LyraElement, x as TOPIC_EXTENSIONS_CHANGED, r as extensionRegistry, n as appLoaderService, v as promptDialog, q as esmShService, d as SIDEBAR_MAIN, i as TOOLBAR_BOTTOM_END, l as TOOLBAR_MAIN_RIGHT, L as LyraContainer, j as TOOLBAR_MAIN, k as TOOLBAR_MAIN_CENTER, T as TOOLBAR_BOTTOM, e as SIDEBAR_MAIN_BOTTOM, P as PANEL_BOTTOM, S as SIDEBAR_AUXILIARY, f as SYSTEM_LAYOUTS, g as SYSTEM_VIEWS, y as constants } from "./resizable-grid-oWYRVx30.js";
4
4
  import { signal } from "@lit-labs/signals";
5
5
  import { subscribe, publish } from "./core/events.js";
6
6
  import "./externals/webawesome.js";
@@ -10,47 +10,6 @@ import { createRef, ref } from "lit/directives/ref.js";
10
10
  import "./nocontent-BhrN6yxJ.js";
11
11
  import { unsafeHTML } from "lit/directives/unsafe-html.js";
12
12
  import { marked } from "marked";
13
- class PackageInfoService {
14
- constructor() {
15
- this.packages = [];
16
- }
17
- addPackage(packageInfo) {
18
- this.packages.push(packageInfo);
19
- }
20
- hasPackages() {
21
- return this.packages.length > 0 && this.packages.some(
22
- (pkg) => pkg.dependencies && Object.keys(pkg.dependencies).length > 0
23
- );
24
- }
25
- renderTree() {
26
- if (this.packages.length === 0) {
27
- return html``;
28
- }
29
- return html`
30
- <wa-tree style="--indent-guide-width: 1px;">
31
- ${this.packages.map((pkg) => {
32
- const deps = pkg.dependencies || {};
33
- const depEntries = Object.entries(deps);
34
- if (depEntries.length === 0) {
35
- return html``;
36
- }
37
- return html`
38
- <wa-tree-item expanded>
39
- <span>${pkg.name}</span>
40
- ${depEntries.map(([name, version]) => html`
41
- <wa-tree-item>
42
- <span>${name} <small>${version}</small></span>
43
- </wa-tree-item>
44
- `)}
45
- </wa-tree-item>
46
- `;
47
- })}
48
- </wa-tree>
49
- `;
50
- }
51
- }
52
- const packageInfoService = new PackageInfoService();
53
- rootContext.put("packageInfoService", packageInfoService);
54
13
  const SYSTEM_LANGUAGE_BUNDLES = "system.language_bundles";
55
14
  const SETTINGS_KEY_LANGUAGE = "language";
56
15
  function replaceParameters(text, params) {
@@ -1582,152 +1541,6 @@ contributionRegistry.registerContribution("system.icons", {
1582
1541
  },
1583
1542
  priority: 0
1584
1543
  });
1585
- const logger$2 = createLogger("MarketplaceRegistry");
1586
- const TOPIC_MARKETPLACE_CHANGED = "events/marketplaceregistry/changed";
1587
- const KEY_CATALOG_URLS = "marketplace.catalogUrls";
1588
- class MarketplaceRegistry {
1589
- constructor() {
1590
- this.catalogUrls = [];
1591
- this.loadingPromises = /* @__PURE__ */ new Map();
1592
- this.loadCatalogUrls().then(() => {
1593
- this.refreshCatalogs().catch((err) => {
1594
- logger$2.error(`Failed to refresh catalogs on init: ${err.message}`);
1595
- });
1596
- });
1597
- }
1598
- async loadCatalogUrls() {
1599
- try {
1600
- const urls = await appSettings.get(KEY_CATALOG_URLS);
1601
- this.catalogUrls = Array.isArray(urls) ? urls : [];
1602
- logger$2.debug(`Loaded ${this.catalogUrls.length} catalog URLs`);
1603
- } catch (error) {
1604
- logger$2.error(`Failed to load catalog URLs: ${error}`);
1605
- this.catalogUrls = [];
1606
- }
1607
- }
1608
- async saveCatalogUrls() {
1609
- await appSettings.set(KEY_CATALOG_URLS, this.catalogUrls);
1610
- publish(TOPIC_MARKETPLACE_CHANGED, { type: "catalogs", urls: this.catalogUrls });
1611
- }
1612
- async addCatalogUrl(url) {
1613
- if (!this.isValidUrl(url)) {
1614
- throw new Error(`Invalid catalog URL: ${url}`);
1615
- }
1616
- if (this.catalogUrls.includes(url)) {
1617
- logger$2.debug(`Catalog URL already exists: ${url}`);
1618
- return;
1619
- }
1620
- this.catalogUrls.push(url);
1621
- await this.saveCatalogUrls();
1622
- logger$2.info(`Added catalog URL: ${url}`);
1623
- try {
1624
- await this.refreshCatalogs();
1625
- } catch (error) {
1626
- logger$2.warn(`Failed to refresh catalogs immediately after adding: ${error}`);
1627
- }
1628
- }
1629
- async removeCatalogUrl(url) {
1630
- const index = this.catalogUrls.indexOf(url);
1631
- if (index === -1) {
1632
- return;
1633
- }
1634
- this.catalogUrls.splice(index, 1);
1635
- await this.saveCatalogUrls();
1636
- logger$2.info(`Removed catalog URL: ${url}`);
1637
- }
1638
- getCatalogUrls() {
1639
- return [...this.catalogUrls];
1640
- }
1641
- isValidUrl(url) {
1642
- try {
1643
- const parsed = new URL(url);
1644
- return parsed.protocol === "http:" || parsed.protocol === "https:";
1645
- } catch {
1646
- return false;
1647
- }
1648
- }
1649
- async fetchCatalog(url) {
1650
- const existingPromise = this.loadingPromises.get(url);
1651
- if (existingPromise) {
1652
- return existingPromise;
1653
- }
1654
- const fetchPromise = (async () => {
1655
- try {
1656
- logger$2.debug(`Fetching catalog from: ${url}`);
1657
- const response = await fetch(url, {
1658
- method: "GET",
1659
- headers: {
1660
- "Accept": "application/json"
1661
- }
1662
- });
1663
- if (!response.ok) {
1664
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
1665
- }
1666
- const data = await response.json();
1667
- if (!data.extensions || !Array.isArray(data.extensions)) {
1668
- throw new Error("Invalid catalog format: extensions array is required");
1669
- }
1670
- const catalog = {
1671
- name: data.name,
1672
- description: data.description,
1673
- extensions: data.extensions || []
1674
- };
1675
- const extCount = catalog.extensions?.length || 0;
1676
- logger$2.debug(`Successfully fetched catalog from ${url}: ${extCount} extensions`);
1677
- return catalog;
1678
- } catch (error) {
1679
- logger$2.error(`Failed to fetch catalog from ${url}: ${error}`);
1680
- throw error;
1681
- } finally {
1682
- this.loadingPromises.delete(url);
1683
- }
1684
- })();
1685
- this.loadingPromises.set(url, fetchPromise);
1686
- return fetchPromise;
1687
- }
1688
- async refreshCatalogs() {
1689
- logger$2.info(`Refreshing ${this.catalogUrls.length} catalogs...`);
1690
- const promises = this.catalogUrls.map(
1691
- (url) => this.fetchCatalog(url).catch((error) => {
1692
- logger$2.warn(`Failed to refresh catalog ${url}: ${error.message}`);
1693
- return null;
1694
- })
1695
- );
1696
- const catalogs = await Promise.allSettled(promises);
1697
- catalogs.forEach((result, index) => {
1698
- if (result.status === "fulfilled" && result.value) {
1699
- const catalog = result.value;
1700
- if (catalog.extensions) {
1701
- catalog.extensions.forEach((marketplaceExt) => {
1702
- if (!extensionRegistry.getExtensions().find((e) => e.id === marketplaceExt.id)) {
1703
- const extension = {
1704
- ...marketplaceExt,
1705
- external: true
1706
- };
1707
- extensionRegistry.registerExtension(extension);
1708
- logger$2.debug(`Registered marketplace extension: ${marketplaceExt.id}`);
1709
- }
1710
- });
1711
- }
1712
- }
1713
- });
1714
- publish(TOPIC_MARKETPLACE_CHANGED, { type: "refreshed" });
1715
- logger$2.info("Catalog refresh completed");
1716
- }
1717
- getMarketplaceExtension(extensionId) {
1718
- const extension = extensionRegistry.getExtensions().find((e) => e.id === extensionId);
1719
- if (extension && extension.external) {
1720
- return extension;
1721
- }
1722
- return void 0;
1723
- }
1724
- isMarketplaceExtension(extensionId) {
1725
- const extension = extensionRegistry.getExtensions().find((e) => e.id === extensionId);
1726
- return extension !== void 0 && extension.external === true;
1727
- }
1728
- }
1729
- const marketplaceRegistry = new MarketplaceRegistry();
1730
- rootContext.put("marketplaceRegistry", marketplaceRegistry);
1731
1544
  const namespace$6 = "filebrowser";
1732
1545
  const en$6 = { "CONNECT_WORKSPACE": "Connect Workspace...", "REFRESH_RESOURCE": "Refresh resource", "CREATE_NEW": "Create new...", "OPEN": "Open", "FILE": "File", "FOLDER": "Folder", "FILE_EXISTS_OVERWRITE": 'File "{fileName}" already exists. Do you want to overwrite it?', "SELECT_WORKSPACE": "Select a workspace.", "DROP_FILES_HERE": "📁 Drop files here", "OPEN_WITH": "Open with..." };
1733
1546
  const de$6 = { "CONNECT_WORKSPACE": "Arbeitsbereich verbinden...", "REFRESH_RESOURCE": "Ressource aktualisieren", "CREATE_NEW": "Neu erstellen...", "OPEN": "Öffnen", "FILE": "Datei", "FOLDER": "Ordner", "FILE_EXISTS_OVERWRITE": 'Die Datei "{fileName}" existiert bereits. Möchten Sie sie überschreiben?', "SELECT_WORKSPACE": "Wählen Sie einen Arbeitsbereich aus.", "DROP_FILES_HERE": "📁 Dateien hier ablegen", "OPEN_WITH": "Öffnen mit..." };
@@ -3838,105 +3651,79 @@ var __decorateClass$1 = (decorators, target, key, kind) => {
3838
3651
  if (kind && result) __defProp$1(target, key, result);
3839
3652
  return result;
3840
3653
  };
3841
- const APP_SWITCHER_DIALOG_ID = "app-switcher";
3842
- contributionRegistry.registerContribution(DIALOG_CONTRIBUTION_TARGET, {
3843
- id: APP_SWITCHER_DIALOG_ID,
3844
- label: "Switch Application",
3845
- buttons: [CLOSE_BUTTON],
3846
- component: (state2) => {
3847
- const apps = state2?.apps || [];
3848
- const currentAppId = state2?.currentAppId;
3849
- const selectApp = state2?.selectApp;
3850
- return html`
3851
- <wa-scroller orientation="vertical" style="min-width: 300px; max-height: 400px; padding: var(--wa-space-m);">
3852
- <div style="display: flex; flex-direction: column; gap: var(--wa-space-s);">
3853
- ${apps.map((app) => html`
3854
- <wa-card
3855
- style="cursor: pointer;"
3856
- variant=${app.id === currentAppId ? "brand" : "neutral"}
3857
- @click=${() => selectApp(app)}>
3858
- <div style="display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: var(--wa-space-xs);">
3859
- <span style="font-weight: 600;">${app.name}</span>
3860
- ${app.version ? html`<wa-badge variant="neutral">v${app.version}</wa-badge>` : ""}
3861
- </div>
3862
- ${app.description ? html`<p style="margin: 0; font-size: 0.875rem; line-height: 1.4;">${app.description}</p>` : ""}
3863
- <div style="font-size: 0.75rem; color: var(--wa-color-neutral-foreground-quiet); font-family: monospace; margin-top: var(--wa-space-xs);">ID: ${app.id}</div>
3864
- </wa-card>
3865
- `)}
3866
- </div>
3867
- </wa-scroller>
3868
- `;
3869
- },
3870
- onButton: async () => true
3871
- });
3872
- const showAppSwitcherDialog = async () => {
3873
- const apps = appLoaderService.getRegisteredApps();
3874
- const currentApp = appLoaderService.getCurrentApp();
3875
- if (apps.length === 0) {
3876
- return;
3654
+ let LyraLayoutSwitcher = class extends LyraElement {
3655
+ constructor() {
3656
+ super(...arguments);
3657
+ this.currentLayoutId = "standard";
3877
3658
  }
3878
- const state2 = {
3879
- apps,
3880
- currentAppId: currentApp?.id,
3881
- selectApp: async (app) => {
3882
- if (app.id === currentApp?.id) {
3883
- state2.close?.();
3884
- return;
3885
- }
3886
- try {
3887
- await appLoaderService.setPreferredAppId(app.id);
3888
- await appLoaderService.loadApp(app.id, document.body);
3889
- } catch (error) {
3890
- console.error("Failed to switch app:", error);
3891
- } finally {
3892
- state2.close?.();
3893
- }
3894
- },
3895
- close: void 0
3896
- };
3897
- await dialogService.open(APP_SWITCHER_DIALOG_ID, state2);
3898
- };
3899
- let LyraAppSwitcher = class extends LyraElement {
3900
3659
  doBeforeUI() {
3901
- this.currentApp = appLoaderService.getCurrentApp();
3902
- const updateCurrentApp = () => {
3903
- this.currentApp = appLoaderService.getCurrentApp();
3660
+ this.currentLayoutId = appLoaderService.getCurrentLayoutId();
3661
+ const updateLayout = () => {
3662
+ this.currentLayoutId = appLoaderService.getCurrentLayoutId();
3904
3663
  this.requestUpdate();
3905
3664
  };
3906
- window.addEventListener("app-loaded", updateCurrentApp);
3665
+ window.addEventListener("app-loaded", updateLayout);
3666
+ window.addEventListener("layout-changed", updateLayout);
3907
3667
  return () => {
3908
- window.removeEventListener("app-loaded", updateCurrentApp);
3668
+ window.removeEventListener("app-loaded", updateLayout);
3669
+ window.removeEventListener("layout-changed", updateLayout);
3909
3670
  };
3910
3671
  }
3672
+ async handleSelect(e) {
3673
+ const layoutId = e.detail?.item?.value;
3674
+ if (!layoutId || layoutId === this.currentLayoutId) return;
3675
+ try {
3676
+ await appLoaderService.setPreferredLayoutId(layoutId);
3677
+ } catch (err) {
3678
+ console.error("Failed to switch layout:", err);
3679
+ }
3680
+ }
3911
3681
  render() {
3912
- const apps = appLoaderService.getRegisteredApps();
3913
- const appName = this.currentApp?.name || "No App";
3914
- if (apps.length <= 1) {
3682
+ const layouts = appLoaderService.getRegisteredLayouts();
3683
+ if (layouts.length <= 1) {
3915
3684
  return html``;
3916
3685
  }
3686
+ const currentLayout = layouts.find((l) => l.id === this.currentLayoutId);
3687
+ const layoutName = currentLayout?.name ?? this.currentLayoutId;
3917
3688
  return html`
3918
- <wa-button
3919
- appearance="plain"
3689
+ <wa-dropdown
3690
+ placement="bottom-end"
3691
+ distance="4"
3920
3692
  size="small"
3921
- title="Current app: ${appName}. Click to switch applications."
3922
- @click=${() => showAppSwitcherDialog()}>
3923
- <wa-icon name="grip" style="margin-right: 0.5rem;"></wa-icon>
3924
- ${appName}
3925
- </wa-button>
3693
+ @wa-select=${this.handleSelect}>
3694
+ <wa-button
3695
+ slot="trigger"
3696
+ appearance="plain"
3697
+ size="small"
3698
+ with-caret
3699
+ title="Switch layout (current: ${layoutName})">
3700
+ <wa-icon name="table-cells" label="Layout"></wa-icon>
3701
+ </wa-button>
3702
+ ${layouts.map(
3703
+ (layout) => html`
3704
+ <wa-dropdown-item
3705
+ value="${layout.id}"
3706
+ type="checkbox"
3707
+ ?checked=${layout.id === this.currentLayoutId}>
3708
+ ${layout.name}
3709
+ </wa-dropdown-item>
3710
+ `
3711
+ )}
3712
+ </wa-dropdown>
3926
3713
  `;
3927
3714
  }
3928
3715
  };
3929
- LyraAppSwitcher.styles = css`
3716
+ LyraLayoutSwitcher.styles = css`
3930
3717
  :host {
3931
3718
  display: inline-block;
3932
3719
  }
3933
3720
  `;
3934
3721
  __decorateClass$1([
3935
3722
  state()
3936
- ], LyraAppSwitcher.prototype, "currentApp", 2);
3937
- LyraAppSwitcher = __decorateClass$1([
3938
- customElement("lyra-app-switcher")
3939
- ], LyraAppSwitcher);
3723
+ ], LyraLayoutSwitcher.prototype, "currentLayoutId", 2);
3724
+ LyraLayoutSwitcher = __decorateClass$1([
3725
+ customElement("lyra-layout-switcher")
3726
+ ], LyraLayoutSwitcher);
3940
3727
  contributionRegistry.registerContribution(SIDEBAR_MAIN, {
3941
3728
  name: "filebrowser",
3942
3729
  label: "Workspace",
@@ -3965,10 +3752,171 @@ contributionRegistry.registerContribution(TOOLBAR_BOTTOM_END, {
3965
3752
  });
3966
3753
  contributionRegistry.registerContribution(TOOLBAR_MAIN_RIGHT, {
3967
3754
  label: "App Switcher",
3968
- component: () => html`<lyra-app-switcher></lyra-app-switcher>`
3755
+ component: () => html`<lyra-layout-switcher></lyra-layout-switcher>`
3756
+ });
3757
+ var __defProp = Object.defineProperty;
3758
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3759
+ var __decorateClass = (decorators, target, key, kind) => {
3760
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
3761
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
3762
+ if (decorator = decorators[i])
3763
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
3764
+ if (kind && result) __defProp(target, key, result);
3765
+ return result;
3766
+ };
3767
+ let LyraStandardLayout = class extends LyraContainer {
3768
+ constructor() {
3769
+ super(...arguments);
3770
+ this.showBottomSidebar = false;
3771
+ this.showBottomPanel = false;
3772
+ this.showLeftSidebar = true;
3773
+ this.showAuxSidebar = true;
3774
+ }
3775
+ createRenderRoot() {
3776
+ return this;
3777
+ }
3778
+ getGridSizes() {
3779
+ if (this.showLeftSidebar && this.showAuxSidebar) {
3780
+ return "15%, 65%, 20%";
3781
+ }
3782
+ if (this.showLeftSidebar) {
3783
+ return "15%, 85%";
3784
+ }
3785
+ if (this.showAuxSidebar) {
3786
+ return "80%, 20%";
3787
+ }
3788
+ return "100%";
3789
+ }
3790
+ render() {
3791
+ return html`
3792
+ <style>
3793
+ *, *::before, *::after {
3794
+ box-sizing: border-box;
3795
+ }
3796
+
3797
+ html {
3798
+ height: 100%;
3799
+ margin: 0;
3800
+ padding: 0;
3801
+ overflow: hidden;
3802
+ }
3803
+
3804
+ body {
3805
+ height: 100%;
3806
+ width: 100%;
3807
+ margin: 0;
3808
+ padding: 0;
3809
+ overflow: hidden;
3810
+ display: flex;
3811
+ flex-direction: column;
3812
+ }
3813
+
3814
+ lyra-standard-layout {
3815
+ display: flex;
3816
+ flex-direction: column;
3817
+ height: 100vh;
3818
+ width: 100%;
3819
+ }
3820
+
3821
+ lyra-standard-layout .toolbar-top {
3822
+ width: 100%;
3823
+ display: grid;
3824
+ grid-template-columns: 1fr 2fr 1fr;
3825
+ align-items: center;
3826
+ border-bottom: solid var(--wa-border-width-s) var(--wa-color-neutral-border-loud);
3827
+ flex-shrink: 0;
3828
+ }
3829
+
3830
+ lyra-standard-layout .toolbar-bottom {
3831
+ width: 100%;
3832
+ border-top: solid var(--wa-border-width-s) var(--wa-color-neutral-border-loud);
3833
+ display: grid;
3834
+ grid-template-columns: 1fr 2fr auto;
3835
+ align-items: center;
3836
+ flex-shrink: 0;
3837
+ min-height: 32px;
3838
+ padding: 0 var(--wa-space-s);
3839
+ box-sizing: border-box;
3840
+ }
3841
+
3842
+ lyra-standard-layout .main-layout {
3843
+ flex: 1;
3844
+ min-height: 0;
3845
+ }
3846
+
3847
+ lyra-standard-layout .toolbar-end {
3848
+ justify-self: end;
3849
+ }
3850
+ </style>
3851
+
3852
+ <div class="toolbar-top">
3853
+ <lyra-toolbar id=${TOOLBAR_MAIN}></lyra-toolbar>
3854
+ <lyra-toolbar id=${TOOLBAR_MAIN_CENTER}></lyra-toolbar>
3855
+ <lyra-toolbar class="toolbar-end" id=${TOOLBAR_MAIN_RIGHT}></lyra-toolbar>
3856
+ </div>
3857
+
3858
+ <lyra-resizable-grid
3859
+ class="main-layout"
3860
+ id="main-layout"
3861
+ orientation="horizontal"
3862
+ sizes=${this.getGridSizes()}>
3863
+
3864
+ ${this.showLeftSidebar ? html`
3865
+ ${this.showBottomSidebar ? html`
3866
+ <lyra-resizable-grid
3867
+ id="left-sidebar-split"
3868
+ orientation="vertical"
3869
+ sizes="50%, 50%">
3870
+ <lyra-tabs id="${SIDEBAR_MAIN}"></lyra-tabs>
3871
+ <lyra-tabs id="${SIDEBAR_MAIN_BOTTOM}"></lyra-tabs>
3872
+ </lyra-resizable-grid>
3873
+ ` : html`<lyra-tabs id="${SIDEBAR_MAIN}"></lyra-tabs>`}
3874
+ ` : nothing}
3875
+
3876
+ ${this.showBottomPanel ? html`
3877
+ <lyra-resizable-grid
3878
+ id="editor-area-split"
3879
+ orientation="vertical"
3880
+ sizes="70%, 30%">
3881
+ <lyra-tabs id="${EDITOR_AREA_MAIN}"></lyra-tabs>
3882
+ <lyra-tabs id="${PANEL_BOTTOM}"></lyra-tabs>
3883
+ </lyra-resizable-grid>
3884
+ ` : html`<lyra-tabs id="${EDITOR_AREA_MAIN}"></lyra-tabs>`}
3885
+
3886
+ ${this.showAuxSidebar ? html`<lyra-tabs id="${SIDEBAR_AUXILIARY}"></lyra-tabs>` : nothing}
3887
+ </lyra-resizable-grid>
3888
+
3889
+ <div class="toolbar-bottom">
3890
+ <lyra-toolbar id=${TOOLBAR_BOTTOM}></lyra-toolbar>
3891
+ <lyra-toolbar id=${TOOLBAR_BOTTOM_CENTER}></lyra-toolbar>
3892
+ <lyra-toolbar class="toolbar-end" id=${TOOLBAR_BOTTOM_END}></lyra-toolbar>
3893
+ </div>
3894
+ `;
3895
+ }
3896
+ };
3897
+ __decorateClass([
3898
+ property({ type: Boolean, attribute: "show-bottom-sidebar" })
3899
+ ], LyraStandardLayout.prototype, "showBottomSidebar", 2);
3900
+ __decorateClass([
3901
+ property({ type: Boolean, attribute: "show-bottom-panel" })
3902
+ ], LyraStandardLayout.prototype, "showBottomPanel", 2);
3903
+ __decorateClass([
3904
+ property({ type: Boolean, attribute: "show-left-sidebar" })
3905
+ ], LyraStandardLayout.prototype, "showLeftSidebar", 2);
3906
+ __decorateClass([
3907
+ property({ type: Boolean, attribute: "show-aux-sidebar" })
3908
+ ], LyraStandardLayout.prototype, "showAuxSidebar", 2);
3909
+ LyraStandardLayout = __decorateClass([
3910
+ customElement("lyra-standard-layout")
3911
+ ], LyraStandardLayout);
3912
+ contributionRegistry.registerContribution(SYSTEM_LAYOUTS, {
3913
+ id: "standard",
3914
+ name: "Standard",
3915
+ label: "Standard",
3916
+ component: "lyra-standard-layout"
3969
3917
  });
3970
3918
  const logger = createLogger("MarketplaceCatalogContributions");
3971
- logger.debug("Marketplace catalog URLs are set by the app host via applyAppHostConfig()");
3919
+ logger.debug("Marketplace catalog URLs are set per app via AppDefinition.marketplaceCatalogUrls");
3972
3920
  async function getWorkspaceAndPath(params, requirePath = true) {
3973
3921
  const workspace = await workspaceService.getWorkspace();
3974
3922
  if (!workspace) {
@@ -4326,8 +4274,20 @@ registerAll({
4326
4274
  toastError("No app loaded");
4327
4275
  return;
4328
4276
  }
4329
- const hasPackages = packageInfoService.hasPackages();
4330
- const packagesTree = packageInfoService.renderTree();
4277
+ const deps = app.dependencies ?? {};
4278
+ const hasPackages = Object.keys(deps).length > 0;
4279
+ const packagesTree = hasPackages ? html`
4280
+ <wa-tree style="--indent-guide-width: 1px;">
4281
+ <wa-tree-item expanded>
4282
+ <span>${app.name ?? ""}</span>
4283
+ ${Object.entries(deps).map(([name, version]) => html`
4284
+ <wa-tree-item>
4285
+ <span>${name} <small>${version}</small></span>
4286
+ </wa-tree-item>
4287
+ `)}
4288
+ </wa-tree-item>
4289
+ </wa-tree>
4290
+ ` : html``;
4331
4291
  let dialogContainer = null;
4332
4292
  const getDialogContainer2 = () => {
4333
4293
  if (!dialogContainer) {
@@ -4361,8 +4321,8 @@ registerAll({
4361
4321
  releases = app.releaseHistory;
4362
4322
  }
4363
4323
  }
4364
- app.version === "0.0.0";
4365
- const currentIndex = releases.length > 0 ? releases.findIndex((r) => r.tag_name === app.version) : -1;
4324
+ const appVersion = app.version ?? "0.0.0";
4325
+ const currentIndex = releases.length > 0 ? releases.findIndex((r) => r.tag_name === appVersion) : -1;
4366
4326
  const startIndex = currentIndex >= 0 ? currentIndex : 0;
4367
4327
  let currentReleaseIndex = startIndex;
4368
4328
  const buildReleaseContent = (index) => {
@@ -4370,7 +4330,7 @@ registerAll({
4370
4330
  return "";
4371
4331
  }
4372
4332
  const release = releases[index];
4373
- const isCurrentVersion = release.tag_name === app.version;
4333
+ const isCurrentVersion = release.tag_name === appVersion;
4374
4334
  let message = `**Version:** ${release.tag_name}`;
4375
4335
  if (isCurrentVersion) {
4376
4336
  message += ` (Current)`;
@@ -4383,7 +4343,7 @@ registerAll({
4383
4343
 
4384
4344
  `;
4385
4345
  if (!isCurrentVersion) {
4386
- const cleanCurrent = app.version.replace(/^v/, "");
4346
+ const cleanCurrent = appVersion.replace(/^v/, "");
4387
4347
  const cleanRelease = release.tag_name.replace(/^v/, "");
4388
4348
  const currentParts = cleanCurrent.split(".").map(Number);
4389
4349
  const releaseParts = cleanRelease.split(".").map(Number);
@@ -4423,7 +4383,7 @@ ${release.body}`;
4423
4383
  const hasNavigation = releases.length > 0;
4424
4384
  const template = html`
4425
4385
  <wa-dialog
4426
- label="About ${app.name} - ${app.version}"
4386
+ label="About ${app.name ?? ""} - ${app.version ?? "0.0.0"}"
4427
4387
  open
4428
4388
  light-dismiss
4429
4389
  style="--width: 600px;"
@@ -4441,7 +4401,7 @@ ${release.body}`;
4441
4401
  margin-left: 0.5rem;
4442
4402
  }
4443
4403
  </style>
4444
- <small>${app.description}</small>
4404
+ <small>${app.description ?? ""}</small>
4445
4405
  <div class="dialog-content">
4446
4406
  <wa-tab-group>
4447
4407
  ${releases.length > 0 ? html`
@@ -4706,20 +4666,6 @@ uiContext.put("render", render);
4706
4666
  uiContext.put("toastInfo", toastInfo);
4707
4667
  uiContext.put("toastError", toastError);
4708
4668
  uiContext.put("toastWarning", toastWarning);
4709
- let applied = false;
4710
- function applyAppHostConfig(config) {
4711
- if (applied) return;
4712
- applied = true;
4713
- if (config.packageInfo) {
4714
- packageInfoService.addPackage(config.packageInfo);
4715
- }
4716
- if (config.marketplaceCatalogUrls?.length) {
4717
- config.marketplaceCatalogUrls.forEach((url) => {
4718
- marketplaceRegistry.addCatalogUrl(url).catch(() => {
4719
- });
4720
- });
4721
- }
4722
- }
4723
4669
  let frameworkConfig = {};
4724
4670
  function configureFramework(config) {
4725
4671
  frameworkConfig = { ...frameworkConfig, ...config };
@@ -4727,161 +4673,6 @@ function configureFramework(config) {
4727
4673
  function getFrameworkConfig() {
4728
4674
  return { ...frameworkConfig };
4729
4675
  }
4730
- var __defProp = Object.defineProperty;
4731
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4732
- var __decorateClass = (decorators, target, key, kind) => {
4733
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
4734
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
4735
- if (decorator = decorators[i])
4736
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
4737
- if (kind && result) __defProp(target, key, result);
4738
- return result;
4739
- };
4740
- let LyraStandardLayout = class extends LyraContainer {
4741
- constructor() {
4742
- super(...arguments);
4743
- this.showBottomSidebar = false;
4744
- this.showBottomPanel = false;
4745
- this.showLeftSidebar = true;
4746
- this.showAuxSidebar = true;
4747
- }
4748
- createRenderRoot() {
4749
- return this;
4750
- }
4751
- getGridSizes() {
4752
- if (this.showLeftSidebar && this.showAuxSidebar) {
4753
- return "15%, 65%, 20%";
4754
- }
4755
- if (this.showLeftSidebar) {
4756
- return "15%, 85%";
4757
- }
4758
- if (this.showAuxSidebar) {
4759
- return "80%, 20%";
4760
- }
4761
- return "100%";
4762
- }
4763
- render() {
4764
- return html`
4765
- <style>
4766
- *, *::before, *::after {
4767
- box-sizing: border-box;
4768
- }
4769
-
4770
- html {
4771
- height: 100%;
4772
- margin: 0;
4773
- padding: 0;
4774
- overflow: hidden;
4775
- }
4776
-
4777
- body {
4778
- height: 100%;
4779
- width: 100%;
4780
- margin: 0;
4781
- padding: 0;
4782
- overflow: hidden;
4783
- display: flex;
4784
- flex-direction: column;
4785
- }
4786
-
4787
- lyra-standard-layout {
4788
- display: flex;
4789
- flex-direction: column;
4790
- height: 100vh;
4791
- width: 100%;
4792
- }
4793
-
4794
- lyra-standard-layout .toolbar-top {
4795
- width: 100%;
4796
- display: grid;
4797
- grid-template-columns: 1fr 2fr 1fr;
4798
- align-items: center;
4799
- border-bottom: solid var(--wa-border-width-s) var(--wa-color-neutral-border-loud);
4800
- flex-shrink: 0;
4801
- }
4802
-
4803
- lyra-standard-layout .toolbar-bottom {
4804
- width: 100%;
4805
- border-top: solid var(--wa-border-width-s) var(--wa-color-neutral-border-loud);
4806
- display: grid;
4807
- grid-template-columns: 1fr 2fr auto;
4808
- align-items: center;
4809
- flex-shrink: 0;
4810
- min-height: 32px;
4811
- padding: 0 var(--wa-space-s);
4812
- box-sizing: border-box;
4813
- }
4814
-
4815
- lyra-standard-layout .main-layout {
4816
- flex: 1;
4817
- min-height: 0;
4818
- }
4819
-
4820
- lyra-standard-layout .toolbar-end {
4821
- justify-self: end;
4822
- }
4823
- </style>
4824
-
4825
- <div class="toolbar-top">
4826
- <lyra-toolbar id=${TOOLBAR_MAIN}></lyra-toolbar>
4827
- <lyra-toolbar id=${TOOLBAR_MAIN_CENTER}></lyra-toolbar>
4828
- <lyra-toolbar class="toolbar-end" id=${TOOLBAR_MAIN_RIGHT}></lyra-toolbar>
4829
- </div>
4830
-
4831
- <lyra-resizable-grid
4832
- class="main-layout"
4833
- id="main-layout"
4834
- orientation="horizontal"
4835
- sizes=${this.getGridSizes()}>
4836
-
4837
- ${this.showLeftSidebar ? html`
4838
- ${this.showBottomSidebar ? html`
4839
- <lyra-resizable-grid
4840
- id="left-sidebar-split"
4841
- orientation="vertical"
4842
- sizes="50%, 50%">
4843
- <lyra-tabs id="${SIDEBAR_MAIN}"></lyra-tabs>
4844
- <lyra-tabs id="${SIDEBAR_MAIN_BOTTOM}"></lyra-tabs>
4845
- </lyra-resizable-grid>
4846
- ` : html`<lyra-tabs id="${SIDEBAR_MAIN}"></lyra-tabs>`}
4847
- ` : nothing}
4848
-
4849
- ${this.showBottomPanel ? html`
4850
- <lyra-resizable-grid
4851
- id="editor-area-split"
4852
- orientation="vertical"
4853
- sizes="70%, 30%">
4854
- <lyra-tabs id="${EDITOR_AREA_MAIN}"></lyra-tabs>
4855
- <lyra-tabs id="${PANEL_BOTTOM}"></lyra-tabs>
4856
- </lyra-resizable-grid>
4857
- ` : html`<lyra-tabs id="${EDITOR_AREA_MAIN}"></lyra-tabs>`}
4858
-
4859
- ${this.showAuxSidebar ? html`<lyra-tabs id="${SIDEBAR_AUXILIARY}"></lyra-tabs>` : nothing}
4860
- </lyra-resizable-grid>
4861
-
4862
- <div class="toolbar-bottom">
4863
- <lyra-toolbar id=${TOOLBAR_BOTTOM}></lyra-toolbar>
4864
- <lyra-toolbar id=${TOOLBAR_BOTTOM_CENTER}></lyra-toolbar>
4865
- <lyra-toolbar class="toolbar-end" id=${TOOLBAR_BOTTOM_END}></lyra-toolbar>
4866
- </div>
4867
- `;
4868
- }
4869
- };
4870
- __decorateClass([
4871
- property({ type: Boolean, attribute: "show-bottom-sidebar" })
4872
- ], LyraStandardLayout.prototype, "showBottomSidebar", 2);
4873
- __decorateClass([
4874
- property({ type: Boolean, attribute: "show-bottom-panel" })
4875
- ], LyraStandardLayout.prototype, "showBottomPanel", 2);
4876
- __decorateClass([
4877
- property({ type: Boolean, attribute: "show-left-sidebar" })
4878
- ], LyraStandardLayout.prototype, "showLeftSidebar", 2);
4879
- __decorateClass([
4880
- property({ type: Boolean, attribute: "show-aux-sidebar" })
4881
- ], LyraStandardLayout.prototype, "showAuxSidebar", 2);
4882
- LyraStandardLayout = __decorateClass([
4883
- customElement("lyra-standard-layout")
4884
- ], LyraStandardLayout);
4885
4676
  export {
4886
4677
  CompositeDirectory as C,
4887
4678
  Directory as D,
@@ -4894,14 +4685,12 @@ export {
4894
4685
  FileSysDirHandleResource as b,
4895
4686
  StringFile as c,
4896
4687
  TOPIC_WORKSPACE_CONNECTED as d,
4897
- applyAppHostConfig as e,
4898
- configureFramework as f,
4899
- editorRegistry as g,
4900
- getFrameworkConfig as h,
4688
+ configureFramework as e,
4689
+ editorRegistry as f,
4690
+ getFrameworkConfig as g,
4691
+ i18nLazy as h,
4901
4692
  i18n as i,
4902
- i18nLazy as j,
4903
- packageInfoService as p,
4904
4693
  treeNodeComparator as t,
4905
4694
  workspaceService as w
4906
4695
  };
4907
- //# sourceMappingURL=standard-layout-Efok-voU.js.map
4696
+ //# sourceMappingURL=config-BiRvaEoO.js.map