@theia/core 1.74.0-next.8 → 1.74.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/README.md +10 -10
  2. package/i18n/nls.cs.json +143 -16
  3. package/i18n/nls.de.json +143 -16
  4. package/i18n/nls.es.json +143 -16
  5. package/i18n/nls.fr.json +143 -16
  6. package/i18n/nls.hu.json +143 -16
  7. package/i18n/nls.it.json +143 -16
  8. package/i18n/nls.ja.json +143 -16
  9. package/i18n/nls.json +143 -16
  10. package/i18n/nls.ko.json +143 -16
  11. package/i18n/nls.pl.json +143 -16
  12. package/i18n/nls.pt-br.json +143 -16
  13. package/i18n/nls.ru.json +143 -16
  14. package/i18n/nls.tr.json +143 -16
  15. package/i18n/nls.zh-cn.json +143 -16
  16. package/i18n/nls.zh-tw.json +143 -16
  17. package/lib/browser/browser-clipboard-service.d.ts +3 -0
  18. package/lib/browser/browser-clipboard-service.d.ts.map +1 -1
  19. package/lib/browser/browser-clipboard-service.js +8 -1
  20. package/lib/browser/browser-clipboard-service.js.map +1 -1
  21. package/lib/browser/catalog.json +419 -41
  22. package/lib/browser/clipboard-service.d.ts +11 -0
  23. package/lib/browser/clipboard-service.d.ts.map +1 -1
  24. package/lib/browser/clipboard-service.js.map +1 -1
  25. package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
  26. package/lib/browser/common-frontend-contribution.js +7 -7
  27. package/lib/browser/common-frontend-contribution.js.map +1 -1
  28. package/lib/browser/frontend-application-module.d.ts.map +1 -1
  29. package/lib/browser/frontend-application-module.js +9 -0
  30. package/lib/browser/frontend-application-module.js.map +1 -1
  31. package/lib/browser/frontend-application.d.ts.map +1 -1
  32. package/lib/browser/frontend-application.js +12 -2
  33. package/lib/browser/frontend-application.js.map +1 -1
  34. package/lib/browser/index.d.ts +1 -0
  35. package/lib/browser/index.d.ts.map +1 -1
  36. package/lib/browser/index.js +1 -0
  37. package/lib/browser/index.js.map +1 -1
  38. package/lib/browser/keybinding.d.ts.map +1 -1
  39. package/lib/browser/keybinding.js +12 -7
  40. package/lib/browser/keybinding.js.map +1 -1
  41. package/lib/browser/perspective-service.d.ts +173 -0
  42. package/lib/browser/perspective-service.d.ts.map +1 -0
  43. package/lib/browser/perspective-service.js +484 -0
  44. package/lib/browser/perspective-service.js.map +1 -0
  45. package/lib/browser/perspective-service.spec.d.ts +2 -0
  46. package/lib/browser/perspective-service.spec.d.ts.map +1 -0
  47. package/lib/browser/perspective-service.spec.js +1806 -0
  48. package/lib/browser/perspective-service.spec.js.map +1 -0
  49. package/lib/browser/preferences/preference-contribution.d.ts.map +1 -1
  50. package/lib/browser/preferences/preference-contribution.js +9 -1
  51. package/lib/browser/preferences/preference-contribution.js.map +1 -1
  52. package/lib/browser/preferences/preference-service.spec.js +63 -0
  53. package/lib/browser/preferences/preference-service.spec.js.map +1 -1
  54. package/lib/browser/shell/application-shell.d.ts +7 -0
  55. package/lib/browser/shell/application-shell.d.ts.map +1 -1
  56. package/lib/browser/shell/application-shell.js +38 -28
  57. package/lib/browser/shell/application-shell.js.map +1 -1
  58. package/lib/browser/shell/shell-layout-restorer.d.ts +9 -0
  59. package/lib/browser/shell/shell-layout-restorer.d.ts.map +1 -1
  60. package/lib/browser/shell/shell-layout-restorer.js +124 -14
  61. package/lib/browser/shell/shell-layout-restorer.js.map +1 -1
  62. package/lib/browser/shell/shell-layout-restorer.spec.d.ts +2 -0
  63. package/lib/browser/shell/shell-layout-restorer.spec.d.ts.map +1 -0
  64. package/lib/browser/shell/shell-layout-restorer.spec.js +539 -0
  65. package/lib/browser/shell/shell-layout-restorer.spec.js.map +1 -0
  66. package/lib/browser/shell/view-contribution.d.ts +2 -0
  67. package/lib/browser/shell/view-contribution.d.ts.map +1 -1
  68. package/lib/browser/shell/view-contribution.js +5 -1
  69. package/lib/browser/shell/view-contribution.js.map +1 -1
  70. package/lib/browser/status-bar/status-bar.d.ts +2 -0
  71. package/lib/browser/status-bar/status-bar.d.ts.map +1 -1
  72. package/lib/browser/status-bar/status-bar.js +11 -3
  73. package/lib/browser/status-bar/status-bar.js.map +1 -1
  74. package/lib/browser/tree/tree-widget.d.ts +7 -33
  75. package/lib/browser/tree/tree-widget.d.ts.map +1 -1
  76. package/lib/browser/tree/tree-widget.js +7 -54
  77. package/lib/browser/tree/tree-widget.js.map +1 -1
  78. package/lib/browser/widgets/index.d.ts +1 -0
  79. package/lib/browser/widgets/index.d.ts.map +1 -1
  80. package/lib/browser/widgets/index.js +1 -0
  81. package/lib/browser/widgets/index.js.map +1 -1
  82. package/lib/browser/widgets/select-component.d.ts +2 -2
  83. package/lib/browser/widgets/select-component.d.ts.map +1 -1
  84. package/lib/browser/widgets/select-component.js +42 -12
  85. package/lib/browser/widgets/select-component.js.map +1 -1
  86. package/lib/browser/widgets/tab-bar-tracker.d.ts +23 -0
  87. package/lib/browser/widgets/tab-bar-tracker.d.ts.map +1 -0
  88. package/lib/browser/widgets/tab-bar-tracker.js +65 -0
  89. package/lib/browser/widgets/tab-bar-tracker.js.map +1 -0
  90. package/lib/browser/widgets/tab-bar-tracker.spec.d.ts +2 -0
  91. package/lib/browser/widgets/tab-bar-tracker.spec.d.ts.map +1 -0
  92. package/lib/browser/widgets/tab-bar-tracker.spec.js +109 -0
  93. package/lib/browser/widgets/tab-bar-tracker.spec.js.map +1 -0
  94. package/lib/browser-only/messaging/frontend-only-service-connection-provider.d.ts +13 -2
  95. package/lib/browser-only/messaging/frontend-only-service-connection-provider.d.ts.map +1 -1
  96. package/lib/browser-only/messaging/frontend-only-service-connection-provider.js +31 -3
  97. package/lib/browser-only/messaging/frontend-only-service-connection-provider.js.map +1 -1
  98. package/lib/common/preferences/index.d.ts +1 -0
  99. package/lib/common/preferences/index.d.ts.map +1 -1
  100. package/lib/common/preferences/index.js +1 -0
  101. package/lib/common/preferences/index.js.map +1 -1
  102. package/lib/common/preferences/preference-provider.d.ts +15 -0
  103. package/lib/common/preferences/preference-provider.d.ts.map +1 -1
  104. package/lib/common/preferences/preference-provider.js +21 -1
  105. package/lib/common/preferences/preference-provider.js.map +1 -1
  106. package/lib/common/preferences/preference-provider.spec.js +17 -0
  107. package/lib/common/preferences/preference-provider.spec.js.map +1 -1
  108. package/lib/common/preferences/preference-scope.d.ts +6 -1
  109. package/lib/common/preferences/preference-scope.d.ts.map +1 -1
  110. package/lib/common/preferences/preference-scope.js +5 -0
  111. package/lib/common/preferences/preference-scope.js.map +1 -1
  112. package/lib/common/preferences/preference-scope.spec.js +5 -3
  113. package/lib/common/preferences/preference-scope.spec.js.map +1 -1
  114. package/lib/common/preferences/preference-service.d.ts +19 -0
  115. package/lib/common/preferences/preference-service.d.ts.map +1 -1
  116. package/lib/common/preferences/preference-service.js +34 -5
  117. package/lib/common/preferences/preference-service.js.map +1 -1
  118. package/lib/common/preferences/session-preference-provider.d.ts +17 -0
  119. package/lib/common/preferences/session-preference-provider.d.ts.map +1 -0
  120. package/lib/common/preferences/session-preference-provider.js +77 -0
  121. package/lib/common/preferences/session-preference-provider.js.map +1 -0
  122. package/lib/common/preferences/session-preference-provider.spec.d.ts +2 -0
  123. package/lib/common/preferences/session-preference-provider.spec.d.ts.map +1 -0
  124. package/lib/common/preferences/session-preference-provider.spec.js +71 -0
  125. package/lib/common/preferences/session-preference-provider.spec.js.map +1 -0
  126. package/lib/electron-browser/electron-clipboard-service.d.ts +3 -0
  127. package/lib/electron-browser/electron-clipboard-service.d.ts.map +1 -1
  128. package/lib/electron-browser/electron-clipboard-service.js +6 -0
  129. package/lib/electron-browser/electron-clipboard-service.js.map +1 -1
  130. package/lib/electron-browser/preload.d.ts.map +1 -1
  131. package/lib/electron-browser/preload.js +2 -1
  132. package/lib/electron-browser/preload.js.map +1 -1
  133. package/lib/electron-common/electron-api.d.ts +2 -0
  134. package/lib/electron-common/electron-api.d.ts.map +1 -1
  135. package/lib/electron-common/electron-api.js +2 -1
  136. package/lib/electron-common/electron-api.js.map +1 -1
  137. package/lib/electron-main/electron-api-main.d.ts.map +1 -1
  138. package/lib/electron-main/electron-api-main.js +43 -0
  139. package/lib/electron-main/electron-api-main.js.map +1 -1
  140. package/lib/electron-main/electron-main-application.d.ts.map +1 -1
  141. package/lib/electron-main/electron-main-application.js +3 -0
  142. package/lib/electron-main/electron-main-application.js.map +1 -1
  143. package/lib/electron-node/hosting/electron-backend-hosting-module.d.ts.map +1 -1
  144. package/lib/electron-node/hosting/electron-backend-hosting-module.js +7 -0
  145. package/lib/electron-node/hosting/electron-backend-hosting-module.js.map +1 -1
  146. package/lib/electron-node/hosting/electron-backend-hosting-module.spec.d.ts +2 -0
  147. package/lib/electron-node/hosting/electron-backend-hosting-module.spec.d.ts.map +1 -0
  148. package/lib/electron-node/hosting/electron-backend-hosting-module.spec.js +39 -0
  149. package/lib/electron-node/hosting/electron-backend-hosting-module.spec.js.map +1 -0
  150. package/lib/node/hosting/backend-hosting-module.d.ts.map +1 -1
  151. package/lib/node/hosting/backend-hosting-module.js +4 -1
  152. package/lib/node/hosting/backend-hosting-module.js.map +1 -1
  153. package/lib/node/hosting/browser-connection-token.d.ts +29 -1
  154. package/lib/node/hosting/browser-connection-token.d.ts.map +1 -1
  155. package/lib/node/hosting/browser-connection-token.js +25 -1
  156. package/lib/node/hosting/browser-connection-token.js.map +1 -1
  157. package/lib/node/hosting/browser-connection-token.spec.js +70 -0
  158. package/lib/node/hosting/browser-connection-token.spec.js.map +1 -1
  159. package/lib/node/index.d.ts +1 -0
  160. package/lib/node/index.d.ts.map +1 -1
  161. package/lib/node/index.js +3 -1
  162. package/lib/node/index.js.map +1 -1
  163. package/package.json +11 -11
  164. package/src/browser/browser-clipboard-service.ts +7 -1
  165. package/src/browser/clipboard-service.ts +11 -0
  166. package/src/browser/common-frontend-contribution.ts +7 -7
  167. package/src/browser/frontend-application-module.ts +11 -1
  168. package/src/browser/frontend-application.ts +12 -4
  169. package/src/browser/index.ts +1 -0
  170. package/src/browser/keybinding.ts +12 -7
  171. package/src/browser/perspective-service.spec.ts +2270 -0
  172. package/src/browser/perspective-service.ts +625 -0
  173. package/src/browser/preferences/preference-contribution.ts +9 -1
  174. package/src/browser/preferences/preference-service.spec.ts +72 -0
  175. package/src/browser/shell/application-shell.ts +41 -26
  176. package/src/browser/shell/shell-layout-restorer.spec.ts +746 -0
  177. package/src/browser/shell/shell-layout-restorer.ts +134 -13
  178. package/src/browser/shell/view-contribution.ts +6 -1
  179. package/src/browser/status-bar/status-bar.tsx +13 -3
  180. package/src/browser/style/select-component.css +16 -0
  181. package/src/browser/style/sidepanel.css +5 -0
  182. package/src/browser/style/status-bar.css +1 -1
  183. package/src/browser/tree/tree-widget.tsx +12 -78
  184. package/src/browser/widgets/index.ts +1 -0
  185. package/src/browser/widgets/select-component.tsx +41 -12
  186. package/src/browser/widgets/tab-bar-tracker.spec.ts +121 -0
  187. package/src/browser/widgets/tab-bar-tracker.ts +68 -0
  188. package/src/browser-only/messaging/frontend-only-service-connection-provider.ts +32 -3
  189. package/src/common/i18n/nls.metadata.json +4149 -888
  190. package/src/common/preferences/index.ts +1 -0
  191. package/src/common/preferences/preference-provider.spec.ts +17 -0
  192. package/src/common/preferences/preference-provider.ts +22 -1
  193. package/src/common/preferences/preference-scope.spec.ts +5 -3
  194. package/src/common/preferences/preference-scope.ts +6 -1
  195. package/src/common/preferences/preference-service.ts +39 -5
  196. package/src/common/preferences/session-preference-provider.spec.ts +78 -0
  197. package/src/common/preferences/session-preference-provider.ts +69 -0
  198. package/src/electron-browser/electron-clipboard-service.ts +5 -0
  199. package/src/electron-browser/menu/electron-menu-style.css +3 -1
  200. package/src/electron-browser/preload.ts +5 -2
  201. package/src/electron-common/electron-api.ts +4 -0
  202. package/src/electron-main/electron-api-main.ts +56 -3
  203. package/src/electron-main/electron-main-application.ts +3 -0
  204. package/src/electron-node/hosting/electron-backend-hosting-module.spec.ts +42 -0
  205. package/src/electron-node/hosting/electron-backend-hosting-module.ts +8 -0
  206. package/src/node/hosting/backend-hosting-module.ts +5 -2
  207. package/src/node/hosting/browser-connection-token.spec.ts +92 -0
  208. package/src/node/hosting/browser-connection-token.ts +45 -1
  209. package/src/node/index.ts +1 -0
@@ -0,0 +1,539 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 EclipseSource GmbH.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const jsdom_1 = require("../test/jsdom");
19
+ const disableJSDOM = (0, jsdom_1.enableJSDOM)();
20
+ const chai_1 = require("chai");
21
+ const sinon = require("sinon");
22
+ const shell_layout_restorer_1 = require("./shell-layout-restorer");
23
+ disableJSDOM();
24
+ describe('ShellLayoutRestorer - Perspective Support', () => {
25
+ let restorer;
26
+ let mockStorageService;
27
+ let mockLogger;
28
+ let mockWidgetManager;
29
+ let mockShell;
30
+ let mockApp;
31
+ let mockProvider;
32
+ let mockTransformations;
33
+ let mockMigrations;
34
+ let mockWindowService;
35
+ let mockThemeService;
36
+ let toTearDown;
37
+ beforeEach(() => {
38
+ toTearDown = (0, jsdom_1.enableJSDOM)();
39
+ mockStorageService = {
40
+ setData: sinon.stub().resolves(),
41
+ getData: sinon.stub().resolves(undefined)
42
+ };
43
+ mockLogger = {
44
+ info: sinon.stub(),
45
+ error: sinon.stub(),
46
+ warn: sinon.stub()
47
+ };
48
+ mockWidgetManager = {
49
+ getDescription: sinon.stub().returns(undefined)
50
+ };
51
+ mockShell = {
52
+ getLayoutData: sinon.stub().returns({ version: 999, mainPanel: {}, bottomPanel: {} }),
53
+ setLayoutData: sinon.stub().resolves()
54
+ };
55
+ mockApp = { shell: mockShell };
56
+ mockProvider = {
57
+ getActivePerspectiveId: sinon.stub().returns('default'),
58
+ getSavedPerspectiveIds: sinon.stub().returns([]),
59
+ getSavedLayout: sinon.stub().returns(undefined),
60
+ setSavedLayout: sinon.stub(),
61
+ setActivePerspectiveId: sinon.stub().returns(true),
62
+ clearSavedLayouts: sinon.stub(),
63
+ onLayoutRestored: sinon.stub(),
64
+ defaultPerspectiveId: 'default'
65
+ };
66
+ mockTransformations = {
67
+ getContributions: sinon.stub().returns([])
68
+ };
69
+ mockMigrations = {
70
+ getContributions: sinon.stub().returns([])
71
+ };
72
+ mockWindowService = {
73
+ isSafeToShutDown: sinon.stub().resolves(true),
74
+ reload: sinon.stub()
75
+ };
76
+ mockThemeService = {
77
+ reset: sinon.stub()
78
+ };
79
+ restorer = new shell_layout_restorer_1.ShellLayoutRestorer(mockWidgetManager, mockLogger, mockStorageService);
80
+ restorer['perspectiveService'] = mockProvider;
81
+ restorer['transformations'] = mockTransformations;
82
+ restorer['migrations'] = mockMigrations;
83
+ restorer['windowService'] = mockWindowService;
84
+ restorer['themeService'] = mockThemeService;
85
+ });
86
+ afterEach(() => {
87
+ sinon.restore();
88
+ toTearDown();
89
+ });
90
+ describe('storePerspectiveLayouts', () => {
91
+ it('should read current shell layout as the active perspective layout', () => {
92
+ mockProvider.getActivePerspectiveId.returns('persp-a');
93
+ mockProvider.getSavedPerspectiveIds.returns([]);
94
+ const currentLayout = { version: 999, mainPanel: { items: ['editor1'] }, bottomPanel: {} };
95
+ mockShell.getLayoutData.returns(currentLayout);
96
+ restorer.storeLayout(mockApp);
97
+ const perspCall = mockStorageService.setData.getCalls().find((c) => c.args[0] === shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY && c.args[1] !== undefined);
98
+ (0, chai_1.expect)(perspCall).to.not.be.undefined;
99
+ const data = perspCall.args[1];
100
+ (0, chai_1.expect)(data.activePerspectiveId).to.equal('persp-a');
101
+ (0, chai_1.expect)(data.layouts['persp-a']).to.be.a('string');
102
+ // Verify it contains the current shell layout content
103
+ const parsed = JSON.parse(data.layouts['persp-a']);
104
+ (0, chai_1.expect)(parsed.mainPanel.items).to.deep.equal(['editor1']);
105
+ });
106
+ it('should deflate all inactive perspective layouts from provider', () => {
107
+ mockProvider.getActivePerspectiveId.returns('active');
108
+ mockProvider.getSavedPerspectiveIds.returns(['active', 'inactive1', 'inactive2']);
109
+ const inactiveLayout1 = { version: 999, mainPanel: { items: ['w1'] }, bottomPanel: {} };
110
+ const inactiveLayout2 = { version: 999, mainPanel: { items: ['w2'] }, bottomPanel: {} };
111
+ mockProvider.getSavedLayout.withArgs('inactive1').returns(inactiveLayout1);
112
+ mockProvider.getSavedLayout.withArgs('inactive2').returns(inactiveLayout2);
113
+ mockProvider.getSavedLayout.withArgs('active').returns(undefined);
114
+ restorer.storeLayout(mockApp);
115
+ const [, data] = mockStorageService.setData.firstCall.args;
116
+ (0, chai_1.expect)(Object.keys(data.layouts)).to.have.lengthOf(3);
117
+ (0, chai_1.expect)(data.layouts).to.have.property('active');
118
+ (0, chai_1.expect)(data.layouts).to.have.property('inactive1');
119
+ (0, chai_1.expect)(data.layouts).to.have.property('inactive2');
120
+ });
121
+ it('should use shell layout for active perspective, not provider', () => {
122
+ mockProvider.getActivePerspectiveId.returns('active');
123
+ mockProvider.getSavedPerspectiveIds.returns(['active']);
124
+ // Provider has stale data for the active perspective
125
+ const staleLayout = { version: 999, mainPanel: { items: ['stale'] }, bottomPanel: {} };
126
+ mockProvider.getSavedLayout.withArgs('active').returns(staleLayout);
127
+ // Shell has the current data
128
+ const currentLayout = { version: 999, mainPanel: { items: ['current'] }, bottomPanel: {} };
129
+ mockShell.getLayoutData.returns(currentLayout);
130
+ restorer.storeLayout(mockApp);
131
+ const [, data] = mockStorageService.setData.firstCall.args;
132
+ const parsed = JSON.parse(data.layouts['active']);
133
+ // Should use shell data, not provider data
134
+ (0, chai_1.expect)(parsed.mainPanel.items).to.deep.equal(['current']);
135
+ });
136
+ it('should write to legacy key when only default perspective is used', () => {
137
+ mockProvider.getActivePerspectiveId.returns('default');
138
+ mockProvider.getSavedPerspectiveIds.returns([]);
139
+ restorer.storeLayout(mockApp);
140
+ // Should write to legacy key for backward compatibility
141
+ const legacyCall = mockStorageService.setData.getCalls().find((c) => c.args[0] === 'layout');
142
+ (0, chai_1.expect)(legacyCall).to.not.be.undefined;
143
+ // Should clear the perspective key
144
+ const perspClear = mockStorageService.setData.getCalls().find((c) => c.args[0] === shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY && c.args[1] === undefined);
145
+ (0, chai_1.expect)(perspClear).to.not.be.undefined;
146
+ });
147
+ it('should write to perspective key when multiple perspectives are used', () => {
148
+ mockProvider.getActivePerspectiveId.returns('persp-a');
149
+ mockProvider.getSavedPerspectiveIds.returns(['persp-a', 'persp-b']);
150
+ const inactiveLayout = { version: 999, mainPanel: { items: ['b'] }, bottomPanel: {} };
151
+ mockProvider.getSavedLayout.withArgs('persp-b').returns(inactiveLayout);
152
+ mockProvider.getSavedLayout.withArgs('persp-a').returns(undefined);
153
+ restorer.storeLayout(mockApp);
154
+ const perspCall = mockStorageService.setData.getCalls().find((c) => c.args[0] === shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY && c.args[1] !== undefined);
155
+ (0, chai_1.expect)(perspCall).to.not.be.undefined;
156
+ // Should clear the legacy key
157
+ const legacyClear = mockStorageService.setData.getCalls().find((c) => c.args[0] === 'layout' && c.args[1] === undefined);
158
+ (0, chai_1.expect)(legacyClear).to.not.be.undefined;
159
+ });
160
+ });
161
+ describe('restorePerspectiveLayouts', () => {
162
+ it('should inflate all layouts and push to provider', async () => {
163
+ const persisted = {
164
+ activePerspectiveId: 'persp-a',
165
+ layouts: {
166
+ 'persp-a': JSON.stringify({ version: 999, mainPanel: { items: ['a'] }, bottomPanel: {} }),
167
+ 'persp-b': JSON.stringify({ version: 999, mainPanel: { items: ['b'] }, bottomPanel: {} })
168
+ }
169
+ };
170
+ mockStorageService.getData.withArgs(shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY).resolves(persisted);
171
+ // Return the inflated layout for the active persp when asked
172
+ mockProvider.getSavedLayout.callsFake((id) => {
173
+ if (id === 'persp-a') {
174
+ // After setSavedLayout is called, return the layout
175
+ const call = mockProvider.setSavedLayout.getCalls().find((c) => c.args[0] === 'persp-a');
176
+ return call?.args[1];
177
+ }
178
+ return undefined;
179
+ });
180
+ const result = await restorer.restoreLayout(mockApp);
181
+ (0, chai_1.expect)(result).to.be.true;
182
+ (0, chai_1.expect)(mockProvider.setSavedLayout.callCount).to.equal(2);
183
+ // Verify persp-a was set
184
+ const setACall = mockProvider.setSavedLayout.getCalls().find((c) => c.args[0] === 'persp-a');
185
+ (0, chai_1.expect)(setACall).to.not.be.undefined;
186
+ // Verify persp-b was set
187
+ const setBCall = mockProvider.setSavedLayout.getCalls().find((c) => c.args[0] === 'persp-b');
188
+ (0, chai_1.expect)(setBCall).to.not.be.undefined;
189
+ });
190
+ it('should set active perspective ID on provider', async () => {
191
+ const persisted = {
192
+ activePerspectiveId: 'my-persp',
193
+ layouts: {
194
+ 'my-persp': JSON.stringify({ version: 999, mainPanel: {}, bottomPanel: {} })
195
+ }
196
+ };
197
+ mockStorageService.getData.withArgs(shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY).resolves(persisted);
198
+ mockProvider.getSavedLayout.callsFake((id) => {
199
+ const call = mockProvider.setSavedLayout.getCalls().find((c) => c.args[0] === id);
200
+ return call?.args[1];
201
+ });
202
+ await restorer.restoreLayout(mockApp);
203
+ (0, chai_1.expect)(mockProvider.setActivePerspectiveId.calledWith('my-persp')).to.be.true;
204
+ });
205
+ it('should apply the active layout to the shell', async () => {
206
+ const layoutData = { version: 999, mainPanel: { items: ['active-item'] }, bottomPanel: {} };
207
+ const persisted = {
208
+ activePerspectiveId: 'active',
209
+ layouts: {
210
+ 'active': JSON.stringify(layoutData)
211
+ }
212
+ };
213
+ mockStorageService.getData.withArgs(shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY).resolves(persisted);
214
+ mockProvider.getSavedLayout.callsFake((id) => {
215
+ const call = mockProvider.setSavedLayout.getCalls().find((c) => c.args[0] === id);
216
+ return call?.args[1];
217
+ });
218
+ await restorer.restoreLayout(mockApp);
219
+ (0, chai_1.expect)(mockShell.setLayoutData.calledOnce).to.be.true;
220
+ const applied = mockShell.setLayoutData.firstCall.args[0];
221
+ (0, chai_1.expect)(applied.mainPanel.items).to.deep.equal(['active-item']);
222
+ });
223
+ it('should apply transformations to all inflated layouts, not just the active one', async () => {
224
+ const transformer = {
225
+ transformLayoutOnRestore: sinon.stub()
226
+ };
227
+ mockTransformations.getContributions.returns([transformer]);
228
+ const persisted = {
229
+ activePerspectiveId: 'persp-a',
230
+ layouts: {
231
+ 'persp-a': JSON.stringify({ version: 999, mainPanel: {}, bottomPanel: {} }),
232
+ 'persp-b': JSON.stringify({ version: 999, mainPanel: {}, bottomPanel: {} })
233
+ }
234
+ };
235
+ mockStorageService.getData.withArgs(shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY).resolves(persisted);
236
+ mockProvider.getSavedLayout.callsFake((id) => {
237
+ const call = mockProvider.setSavedLayout.getCalls().find((c) => c.args[0] === id);
238
+ return call?.args[1];
239
+ });
240
+ await restorer.restoreLayout(mockApp);
241
+ // Transformer should be called for both layouts
242
+ (0, chai_1.expect)(transformer.transformLayoutOnRestore.callCount).to.equal(2);
243
+ });
244
+ it('should fall back to provider active ID when persisted ID is not registered', async () => {
245
+ const persisted = {
246
+ activePerspectiveId: 'removed-persp',
247
+ layouts: {
248
+ 'removed-persp': JSON.stringify({ version: 999, mainPanel: {}, bottomPanel: {} }),
249
+ 'default': JSON.stringify({ version: 999, mainPanel: { items: ['default-w'] }, bottomPanel: {} })
250
+ }
251
+ };
252
+ mockStorageService.getData.withArgs(shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY).resolves(persisted);
253
+ mockProvider.setActivePerspectiveId.returns(false);
254
+ mockProvider.getActivePerspectiveId.returns('default');
255
+ mockProvider.getSavedLayout.callsFake((id) => {
256
+ const call = mockProvider.setSavedLayout.getCalls().find((c) => c.args[0] === id);
257
+ return call?.args[1];
258
+ });
259
+ const result = await restorer.restoreLayout(mockApp);
260
+ (0, chai_1.expect)(result).to.be.true;
261
+ // Should apply 'default' layout to shell, not 'removed-persp'
262
+ const applied = mockShell.setLayoutData.firstCall.args[0];
263
+ (0, chai_1.expect)(applied.mainPanel.items).to.deep.equal(['default-w']);
264
+ // onLayoutRestored should be called with 'default'
265
+ (0, chai_1.expect)(mockProvider.onLayoutRestored.calledWith('default')).to.be.true;
266
+ });
267
+ it('should return false when no perspective data and no legacy data exists', async () => {
268
+ mockStorageService.getData.resolves(undefined);
269
+ const result = await restorer.restoreLayout(mockApp);
270
+ (0, chai_1.expect)(result).to.be.false;
271
+ });
272
+ it('should warn when a perspective layout fails to inflate', async () => {
273
+ const persisted = {
274
+ activePerspectiveId: 'good',
275
+ layouts: {
276
+ 'good': JSON.stringify({ version: 999, mainPanel: {}, bottomPanel: {} }),
277
+ 'bad': 'invalid-json{'
278
+ }
279
+ };
280
+ mockStorageService.getData.withArgs(shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY).resolves(persisted);
281
+ mockProvider.getSavedLayout.callsFake((id) => {
282
+ const call = mockProvider.setSavedLayout.getCalls().find((c) => c.args[0] === id);
283
+ return call?.args[1];
284
+ });
285
+ await restorer.restoreLayout(mockApp);
286
+ // 'good' should be inflated successfully
287
+ const goodCall = mockProvider.setSavedLayout.getCalls().find((c) => c.args[0] === 'good');
288
+ (0, chai_1.expect)(goodCall).to.not.be.undefined;
289
+ // Should warn about 'bad'
290
+ (0, chai_1.expect)(mockLogger.warn.called).to.be.true;
291
+ const warnCall = mockLogger.warn.getCalls().find((c) => c.args[0].includes('bad'));
292
+ (0, chai_1.expect)(warnCall).to.not.be.undefined;
293
+ });
294
+ });
295
+ describe('legacy migration', () => {
296
+ it('should fall back to legacy key when perspective-layouts is absent', async () => {
297
+ const legacyLayout = JSON.stringify({ version: 999, mainPanel: { items: ['legacy'] }, bottomPanel: {} });
298
+ mockStorageService.getData.withArgs(shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY).resolves(undefined);
299
+ mockStorageService.getData.withArgs('layout').resolves(legacyLayout);
300
+ mockProvider.getSavedLayout.callsFake((id) => {
301
+ const call = mockProvider.setSavedLayout.getCalls().find((c) => c.args[0] === id);
302
+ return call?.args[1];
303
+ });
304
+ const result = await restorer.restoreLayout(mockApp);
305
+ (0, chai_1.expect)(result).to.be.true;
306
+ // Should push layout as 'default' perspective
307
+ (0, chai_1.expect)(mockProvider.setSavedLayout.calledOnce).to.be.true;
308
+ (0, chai_1.expect)(mockProvider.setSavedLayout.firstCall.args[0]).to.equal('default');
309
+ // Should set active to 'default'
310
+ (0, chai_1.expect)(mockProvider.setActivePerspectiveId.calledWith('default')).to.be.true;
311
+ });
312
+ it('should keep the legacy key after a successful migration', async () => {
313
+ const legacyLayout = JSON.stringify({ version: 999, mainPanel: { items: ['legacy'] }, bottomPanel: {} });
314
+ mockStorageService.getData.withArgs(shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY).resolves(undefined);
315
+ mockStorageService.getData.withArgs('layout').resolves(legacyLayout);
316
+ mockProvider.getSavedLayout.callsFake((id) => {
317
+ const call = mockProvider.setSavedLayout.getCalls().find((c) => c.args[0] === id);
318
+ return call?.args[1];
319
+ });
320
+ await restorer.restoreLayout(mockApp);
321
+ // Restoring must not touch the key: it is rewritten or cleared by the next `storeLayout`,
322
+ // so a crash before then still finds the layout where it was.
323
+ const legacyWrite = mockStorageService.setData.getCalls().find((c) => c.args[0] === 'layout');
324
+ (0, chai_1.expect)(legacyWrite).to.be.undefined;
325
+ });
326
+ it('should preserve legacy key when inflate fails', async () => {
327
+ mockStorageService.getData.withArgs(shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY).resolves(undefined);
328
+ mockStorageService.getData.withArgs('layout').resolves('not-valid-json{');
329
+ const result = await restorer.restoreLayout(mockApp);
330
+ (0, chai_1.expect)(result).to.be.false;
331
+ // Legacy key should NOT be cleared
332
+ const legacyClear = mockStorageService.setData.getCalls().find((c) => c.args[0] === 'layout' && c.args[1] === undefined);
333
+ (0, chai_1.expect)(legacyClear).to.be.undefined;
334
+ // No layout should have been saved
335
+ (0, chai_1.expect)(mockProvider.setSavedLayout.called).to.be.false;
336
+ // Should warn about the failure
337
+ (0, chai_1.expect)(mockLogger.warn.called).to.be.true;
338
+ });
339
+ it('should apply migrated legacy layout to shell', async () => {
340
+ const legacyLayout = JSON.stringify({ version: 999, mainPanel: { items: ['legacy-w'] }, bottomPanel: {} });
341
+ mockStorageService.getData.withArgs(shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY).resolves(undefined);
342
+ mockStorageService.getData.withArgs('layout').resolves(legacyLayout);
343
+ mockProvider.getSavedLayout.callsFake((id) => {
344
+ const call = mockProvider.setSavedLayout.getCalls().find((c) => c.args[0] === id);
345
+ return call?.args[1];
346
+ });
347
+ await restorer.restoreLayout(mockApp);
348
+ (0, chai_1.expect)(mockShell.setLayoutData.calledOnce).to.be.true;
349
+ });
350
+ });
351
+ describe('storePerspectiveLayouts - error isolation', () => {
352
+ it('should persist other perspectives when one inactive perspective deflate fails', () => {
353
+ mockProvider.getActivePerspectiveId.returns('active');
354
+ mockProvider.getSavedPerspectiveIds.returns(['active', 'good', 'bad']);
355
+ const goodLayout = { version: 999, mainPanel: { items: ['good'] }, bottomPanel: {} };
356
+ // Create a layout with a circular reference that will cause JSON.stringify to throw
357
+ const badLayout = { version: 999, mainPanel: {}, bottomPanel: {} };
358
+ badLayout['self'] = badLayout;
359
+ mockProvider.getSavedLayout.withArgs('good').returns(goodLayout);
360
+ mockProvider.getSavedLayout.withArgs('bad').returns(badLayout);
361
+ mockProvider.getSavedLayout.withArgs('active').returns(undefined);
362
+ restorer.storeLayout(mockApp);
363
+ // Multiple perspectives => writes to PERSPECTIVE_LAYOUTS_STORAGE_KEY and clears legacy
364
+ const perspCall = mockStorageService.setData.getCalls().find((c) => c.args[0] === shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY && c.args[1] !== undefined);
365
+ (0, chai_1.expect)(perspCall).to.not.be.undefined;
366
+ const data = perspCall.args[1];
367
+ (0, chai_1.expect)(data.layouts).to.have.property('active');
368
+ (0, chai_1.expect)(data.layouts).to.have.property('good');
369
+ (0, chai_1.expect)(data.layouts).to.not.have.property('bad');
370
+ // Should warn about 'bad'
371
+ (0, chai_1.expect)(mockLogger.warn.called).to.be.true;
372
+ const warnCall = mockLogger.warn.getCalls().find((c) => c.args[0].includes('bad'));
373
+ (0, chai_1.expect)(warnCall).to.not.be.undefined;
374
+ });
375
+ it('should persist inactive perspectives when active perspective deflate fails', () => {
376
+ mockProvider.getActivePerspectiveId.returns('active');
377
+ mockProvider.getSavedPerspectiveIds.returns(['active', 'inactive']);
378
+ // Make the shell return a circular structure for the active perspective
379
+ const circularLayout = { version: 999, mainPanel: {}, bottomPanel: {} };
380
+ circularLayout['self'] = circularLayout;
381
+ mockShell.getLayoutData.returns(circularLayout);
382
+ const inactiveLayout = { version: 999, mainPanel: { items: ['inactive'] }, bottomPanel: {} };
383
+ mockProvider.getSavedLayout.withArgs('inactive').returns(inactiveLayout);
384
+ restorer.storeLayout(mockApp);
385
+ // Multiple perspectives (active + inactive) => writes to PERSPECTIVE_LAYOUTS_STORAGE_KEY
386
+ const perspCall = mockStorageService.setData.getCalls().find((c) => c.args[0] === shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY && c.args[1] !== undefined);
387
+ (0, chai_1.expect)(perspCall).to.not.be.undefined;
388
+ const data = perspCall.args[1];
389
+ (0, chai_1.expect)(data.layouts).to.not.have.property('active');
390
+ (0, chai_1.expect)(data.layouts).to.have.property('inactive');
391
+ (0, chai_1.expect)(mockLogger.warn.called).to.be.true;
392
+ });
393
+ it('should clear storage key when setData rejects (multi-perspective)', async () => {
394
+ mockProvider.getActivePerspectiveId.returns('persp-a');
395
+ mockProvider.getSavedPerspectiveIds.returns(['persp-a', 'persp-b']);
396
+ const layout = { version: 999, mainPanel: {}, bottomPanel: {} };
397
+ mockProvider.getSavedLayout.withArgs('persp-b').returns(layout);
398
+ // The perspective-layouts setData call rejects only the first time (when data is present)
399
+ let perspCallCount = 0;
400
+ mockStorageService.setData.callsFake((key, data) => {
401
+ if (key === shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY && data !== undefined) {
402
+ perspCallCount++;
403
+ return Promise.reject(new Error('storage error'));
404
+ }
405
+ return Promise.resolve();
406
+ });
407
+ restorer.storeLayout(mockApp);
408
+ // Allow the .catch() handler to execute
409
+ await new Promise(resolve => setTimeout(resolve, 0));
410
+ (0, chai_1.expect)(perspCallCount).to.equal(1);
411
+ // Should have attempted to clear the perspective key
412
+ const clearCall = mockStorageService.setData.getCalls().find((c) => c.args[0] === shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY && c.args[1] === undefined);
413
+ (0, chai_1.expect)(clearCall).to.not.be.undefined;
414
+ (0, chai_1.expect)(mockLogger.error.called).to.be.true;
415
+ });
416
+ });
417
+ describe('restorePerspectiveLayouts - desync fallback', () => {
418
+ it('should fall back to default perspective when active perspective has no saved layout', async () => {
419
+ const persisted = {
420
+ activePerspectiveId: 'custom',
421
+ layouts: {
422
+ 'default': JSON.stringify({ version: 999, mainPanel: { items: ['default-w'] }, bottomPanel: {} })
423
+ }
424
+ };
425
+ mockStorageService.getData.withArgs(shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY).resolves(persisted);
426
+ // 'custom' is a registered perspective, but has no layout entry
427
+ mockProvider.setActivePerspectiveId.returns(true);
428
+ // Track calls to setActivePerspectiveId to simulate state changes
429
+ let currentActiveId = 'default';
430
+ mockProvider.setActivePerspectiveId.callsFake((id) => {
431
+ currentActiveId = id;
432
+ return true;
433
+ });
434
+ mockProvider.getActivePerspectiveId.callsFake(() => currentActiveId);
435
+ mockProvider.getSavedLayout.callsFake((id) => {
436
+ const call = mockProvider.setSavedLayout.getCalls().find((c) => c.args[0] === id);
437
+ return call?.args[1];
438
+ });
439
+ const result = await restorer.restoreLayout(mockApp);
440
+ (0, chai_1.expect)(result).to.be.true;
441
+ // Should have fallen back to default
442
+ (0, chai_1.expect)(mockLogger.warn.called).to.be.true;
443
+ const warnCall = mockLogger.warn.getCalls().find((c) => c.args[0].includes('custom'));
444
+ (0, chai_1.expect)(warnCall).to.not.be.undefined;
445
+ // Should have called onLayoutRestored with default
446
+ (0, chai_1.expect)(mockProvider.onLayoutRestored.calledWith('default')).to.be.true;
447
+ });
448
+ it('should call onLayoutRestored even when falling through to no layout', async () => {
449
+ const persisted = {
450
+ activePerspectiveId: 'custom',
451
+ layouts: {}
452
+ };
453
+ mockStorageService.getData.withArgs(shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY).resolves(persisted);
454
+ let currentActiveId = 'default';
455
+ mockProvider.setActivePerspectiveId.callsFake((id) => {
456
+ currentActiveId = id;
457
+ return true;
458
+ });
459
+ mockProvider.getActivePerspectiveId.callsFake(() => currentActiveId);
460
+ mockProvider.getSavedLayout.returns(undefined);
461
+ const result = await restorer.restoreLayout(mockApp);
462
+ (0, chai_1.expect)(result).to.be.false;
463
+ // onLayoutRestored should still be called
464
+ (0, chai_1.expect)(mockProvider.onLayoutRestored.calledOnce).to.be.true;
465
+ });
466
+ });
467
+ describe('resetLayout', () => {
468
+ it('should clear layouts and legacy layout keys', async () => {
469
+ // Access private method
470
+ await restorer['resetLayout']();
471
+ const setDataCalls = mockStorageService.setData.getCalls();
472
+ const layoutClear = setDataCalls.find((c) => c.args[0] === 'layout' && c.args[1] === undefined);
473
+ const perspClear = setDataCalls.find((c) => c.args[0] === shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY && c.args[1] === undefined);
474
+ (0, chai_1.expect)(layoutClear).to.not.be.undefined;
475
+ (0, chai_1.expect)(perspClear).to.not.be.undefined;
476
+ });
477
+ it('should call provider.clearSavedLayouts', async () => {
478
+ await restorer['resetLayout']();
479
+ (0, chai_1.expect)(mockProvider.clearSavedLayouts.calledOnce).to.be.true;
480
+ });
481
+ it('should reload the window after reset', async () => {
482
+ await restorer['resetLayout']();
483
+ (0, chai_1.expect)(mockWindowService.reload.calledOnce).to.be.true;
484
+ });
485
+ });
486
+ describe('onLayoutRestored callback', () => {
487
+ it('should call onLayoutRestored on provider after successful restore', async () => {
488
+ const persisted = {
489
+ activePerspectiveId: 'my-persp',
490
+ layouts: {
491
+ 'my-persp': JSON.stringify({ version: 999, mainPanel: {}, bottomPanel: {} })
492
+ }
493
+ };
494
+ mockStorageService.getData.withArgs(shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY).resolves(persisted);
495
+ let currentActiveId = 'default';
496
+ mockProvider.setActivePerspectiveId.callsFake((id) => {
497
+ currentActiveId = id;
498
+ return true;
499
+ });
500
+ mockProvider.getActivePerspectiveId.callsFake(() => currentActiveId);
501
+ mockProvider.getSavedLayout.callsFake((id) => {
502
+ const call = mockProvider.setSavedLayout.getCalls().find((c) => c.args[0] === id);
503
+ return call?.args[1];
504
+ });
505
+ await restorer.restoreLayout(mockApp);
506
+ (0, chai_1.expect)(mockProvider.onLayoutRestored.calledOnce).to.be.true;
507
+ (0, chai_1.expect)(mockProvider.onLayoutRestored.calledWith('my-persp')).to.be.true;
508
+ });
509
+ it('should call onLayoutRestored even when no layout is restored', async () => {
510
+ mockStorageService.getData.resolves(undefined);
511
+ await restorer.restoreLayout(mockApp);
512
+ (0, chai_1.expect)(mockProvider.onLayoutRestored.calledOnce).to.be.true;
513
+ (0, chai_1.expect)(mockProvider.onLayoutRestored.calledWith('default')).to.be.true;
514
+ });
515
+ it('should call onLayoutRestored after layout is applied to shell', async () => {
516
+ const persisted = {
517
+ activePerspectiveId: 'active',
518
+ layouts: {
519
+ 'active': JSON.stringify({ version: 999, mainPanel: {}, bottomPanel: {} })
520
+ }
521
+ };
522
+ mockStorageService.getData.withArgs(shell_layout_restorer_1.PERSPECTIVE_LAYOUTS_STORAGE_KEY).resolves(persisted);
523
+ let currentActiveId = 'default';
524
+ mockProvider.setActivePerspectiveId.callsFake((id) => {
525
+ currentActiveId = id;
526
+ return true;
527
+ });
528
+ mockProvider.getActivePerspectiveId.callsFake(() => currentActiveId);
529
+ mockProvider.getSavedLayout.callsFake((id) => {
530
+ const call = mockProvider.setSavedLayout.getCalls().find((c) => c.args[0] === id);
531
+ return call?.args[1];
532
+ });
533
+ await restorer.restoreLayout(mockApp);
534
+ // onLayoutRestored should be called after setLayoutData
535
+ (0, chai_1.expect)(mockShell.setLayoutData.calledBefore(mockProvider.onLayoutRestored)).to.be.true;
536
+ });
537
+ });
538
+ });
539
+ //# sourceMappingURL=shell-layout-restorer.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-layout-restorer.spec.js","sourceRoot":"","sources":["../../../src/browser/shell/shell-layout-restorer.spec.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;AAEhF,yCAA4C;AAC5C,MAAM,YAAY,GAAG,IAAA,mBAAW,GAAE,CAAC;AAEnC,+BAA8B;AAC9B,+BAA+B;AAC/B,mEAIiC;AAEjC,YAAY,EAAE,CAAC;AAEf,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACvD,IAAI,QAA6B,CAAC;IAClC,IAAI,kBAA0E,CAAC;IAC/E,IAAI,UAAoF,CAAC;IACzF,IAAI,iBAAsD,CAAC;IAC3D,IAAI,SAGH,CAAC;IACF,IAAI,OAAoC,CAAC;IACzC,IAAI,YASH,CAAC;IACF,IAAI,mBAA0D,CAAC;IAC/D,IAAI,cAAqD,CAAC;IAC1D,IAAI,iBAAiF,CAAC;IACtF,IAAI,gBAA4C,CAAC;IACjD,IAAI,UAAsB,CAAC;IAE3B,UAAU,CAAC,GAAG,EAAE;QACZ,UAAU,GAAG,IAAA,mBAAW,GAAE,CAAC;QAE3B,kBAAkB,GAAG;YACjB,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;YAChC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;SAC5C,CAAC;QACF,UAAU,GAAG;YACT,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;YAClB,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;YACnB,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;SACrB,CAAC;QACF,iBAAiB,GAAG;YAChB,cAAc,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;SAClD,CAAC;QACF,SAAS,GAAG;YACR,aAAa,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;YACrF,aAAa,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;SACzC,CAAC;QACF,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC/B,YAAY,GAAG;YACX,sBAAsB,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;YACvD,sBAAsB,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YAChD,cAAc,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;YAC/C,cAAc,EAAE,KAAK,CAAC,IAAI,EAAE;YAC5B,sBAAsB,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;YAClD,iBAAiB,EAAE,KAAK,CAAC,IAAI,EAAE;YAC/B,gBAAgB,EAAE,KAAK,CAAC,IAAI,EAAE;YAC9B,oBAAoB,EAAE,SAAS;SAClC,CAAC;QACF,mBAAmB,GAAG;YAClB,gBAAgB,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;SAC7C,CAAC;QACF,cAAc,GAAG;YACb,gBAAgB,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;SAC7C,CAAC;QACF,iBAAiB,GAAG;YAChB,gBAAgB,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC7C,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE;SACvB,CAAC;QACF,gBAAgB,GAAG;YACf,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;SACtB,CAAC;QAEF,QAAQ,GAAG,IAAI,2CAAmB,CAC9B,iBAA0B,EAC1B,UAAmB,EACnB,kBAA2B,CAC9B,CAAC;QAED,QAA+C,CAAC,oBAAoB,CAAC,GAAG,YAAY,CAAC;QACrF,QAA+C,CAAC,iBAAiB,CAAC,GAAG,mBAAmB,CAAC;QACzF,QAA+C,CAAC,YAAY,CAAC,GAAG,cAAc,CAAC;QAC/E,QAA+C,CAAC,eAAe,CAAC,GAAG,iBAAiB,CAAC;QACrF,QAA+C,CAAC,cAAc,CAAC,GAAG,gBAAgB,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,UAAU,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;YAEzE,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACvD,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,aAAa,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;YAC3F,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAE/C,QAAQ,CAAC,WAAW,CAAC,OAAgB,CAAC,CAAC;YAEvC,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CACxD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,uDAA+B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CACtG,CAAC;YACF,IAAA,aAAM,EAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;YACtC,MAAM,IAAI,GAAG,SAAU,CAAC,IAAI,CAAC,CAAC,CAA6B,CAAC;YAC5D,IAAA,aAAM,EAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACrD,IAAA,aAAM,EAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAClD,sDAAsD;YACtD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;YACnD,IAAA,aAAM,EAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;YAErE,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACtD,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YAClF,MAAM,eAAe,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAA4C,CAAC;YAClI,MAAM,eAAe,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAA4C,CAAC;YAClI,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAC3E,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAC3E,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAElE,QAAQ,CAAC,WAAW,CAAC,OAAgB,CAAC,CAAC;YAEvC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,IAA0C,CAAC;YACjG,IAAA,aAAM,EAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACtD,IAAA,aAAM,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAA,aAAM,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACnD,IAAA,aAAM,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YAEpE,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACtD,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxD,qDAAqD;YACrD,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAA4C,CAAC;YACjI,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACpE,6BAA6B;YAC7B,MAAM,aAAa,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;YAC3F,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAE/C,QAAQ,CAAC,WAAW,CAAC,OAAgB,CAAC,CAAC;YAEvC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,IAA0C,CAAC;YACjG,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClD,2CAA2C;YAC3C,IAAA,aAAM,EAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;YACxE,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACvD,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAEhD,QAAQ,CAAC,WAAW,CAAC,OAAgB,CAAC,CAAC;YAEvC,wDAAwD;YACxD,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CACzD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CACpD,CAAC;YACF,IAAA,aAAM,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;YACvC,mCAAmC;YACnC,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CACzD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,uDAA+B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CACtG,CAAC;YACF,IAAA,aAAM,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;YAC3E,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACvD,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;YACpE,MAAM,cAAc,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAA4C,CAAC;YAChI,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACxE,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAEnE,QAAQ,CAAC,WAAW,CAAC,OAAgB,CAAC,CAAC;YAEvC,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CACxD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,uDAA+B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CACtG,CAAC;YACF,IAAA,aAAM,EAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;YACtC,8BAA8B;YAC9B,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAC1D,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAC/E,CAAC;YACF,IAAA,aAAM,EAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAE7D,MAAM,SAAS,GAA6B;gBACxC,mBAAmB,EAAE,SAAS;gBAC9B,OAAO,EAAE;oBACL,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;oBACzF,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;iBAC5F;aACJ,CAAC;YACF,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,uDAA+B,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEzF,6DAA6D;YAC7D,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAU,EAAE,EAAE;gBACjD,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;oBACnB,oDAAoD;oBACpD,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CACpD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CACrD,CAAC;oBACF,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gBACzB,CAAC;gBACD,OAAO,SAAS,CAAC;YACrB,CAAC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAgB,CAAC,CAAC;YAE9D,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC1B,IAAA,aAAM,EAAC,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1D,yBAAyB;YACzB,MAAM,QAAQ,GAAG,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CACxD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CACrD,CAAC;YACF,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;YACrC,yBAAyB;YACzB,MAAM,QAAQ,GAAG,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CACxD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CACrD,CAAC;YACF,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAE1D,MAAM,SAAS,GAA6B;gBACxC,mBAAmB,EAAE,UAAU;gBAC/B,OAAO,EAAE;oBACL,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;iBAC/E;aACJ,CAAC;YACF,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,uDAA+B,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEzF,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAU,EAAE,EAAE;gBACjD,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CACpD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAC9C,CAAC;gBACF,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAgB,CAAC,CAAC;YAE/C,IAAA,aAAM,EAAC,YAAY,CAAC,sBAAsB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAClF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAEzD,MAAM,UAAU,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;YAC5F,MAAM,SAAS,GAA6B;gBACxC,mBAAmB,EAAE,QAAQ;gBAC7B,OAAO,EAAE;oBACL,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;iBACvC;aACJ,CAAC;YACF,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,uDAA+B,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEzF,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAU,EAAE,EAAE;gBACjD,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CACpD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAC9C,CAAC;gBACF,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAgB,CAAC,CAAC;YAE/C,IAAA,aAAM,EAAC,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACtD,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAA,aAAM,EAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;YAE3F,MAAM,WAAW,GAAG;gBAChB,wBAAwB,EAAE,KAAK,CAAC,IAAI,EAAE;aACzC,CAAC;YACF,mBAAmB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YAE5D,MAAM,SAAS,GAA6B;gBACxC,mBAAmB,EAAE,SAAS;gBAC9B,OAAO,EAAE;oBACL,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;oBAC3E,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;iBAC9E;aACJ,CAAC;YACF,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,uDAA+B,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACzF,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAU,EAAE,EAAE;gBACjD,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CACpD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAC9C,CAAC;gBACF,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAgB,CAAC,CAAC;YAE/C,gDAAgD;YAChD,IAAA,aAAM,EAAC,WAAW,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;YAExF,MAAM,SAAS,GAA6B;gBACxC,mBAAmB,EAAE,eAAe;gBACpC,OAAO,EAAE;oBACL,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;oBACjF,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;iBACpG;aACJ,CAAC;YACF,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,uDAA+B,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACzF,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACnD,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACvD,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAU,EAAE,EAAE;gBACjD,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CACpD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAC9C,CAAC;gBACF,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAgB,CAAC,CAAC;YAE9D,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC1B,8DAA8D;YAC9D,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAA,aAAM,EAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YAC7D,mDAAmD;YACnD,IAAA,aAAM,EAAC,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;YAEpF,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAE/C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAgB,CAAC,CAAC;YAE9D,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YAEpE,MAAM,SAAS,GAA6B;gBACxC,mBAAmB,EAAE,MAAM;gBAC3B,OAAO,EAAE;oBACL,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;oBACxE,KAAK,EAAE,eAAe;iBACzB;aACJ,CAAC;YACF,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,uDAA+B,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEzF,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAU,EAAE,EAAE;gBACjD,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CACpD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAC9C,CAAC;gBACF,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAgB,CAAC,CAAC;YAE/C,yCAAyC;YACzC,MAAM,QAAQ,GAAG,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CACxD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAClD,CAAC;YACF,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;YAErC,0BAA0B;YAC1B,IAAA,aAAM,EAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC1C,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAC5C,CAAC,CAAqB,EAAE,EAAE,CAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CACnE,CAAC;YACF,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YAE/E,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;YACzG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,uDAA+B,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACzF,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAErE,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAU,EAAE,EAAE;gBACjD,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CACpD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAC9C,CAAC;gBACF,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAgB,CAAC,CAAC;YAE9D,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC1B,8CAA8C;YAC9C,IAAA,aAAM,EAAC,YAAY,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC1D,IAAA,aAAM,EAAC,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC1E,iCAAiC;YACjC,IAAA,aAAM,EAAC,YAAY,CAAC,sBAAsB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACjF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YAErE,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;YACzG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,uDAA+B,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACzF,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAErE,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAU,EAAE,EAAE;gBACjD,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CACpD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAC9C,CAAC;gBACF,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAgB,CAAC,CAAC;YAE/C,0FAA0F;YAC1F,8DAA8D;YAC9D,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAC1D,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CACpD,CAAC;YACF,IAAA,aAAM,EAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAE3D,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,uDAA+B,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACzF,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;YAE1E,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAgB,CAAC,CAAC;YAE9D,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC3B,mCAAmC;YACnC,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAC1D,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAC/E,CAAC;YACF,IAAA,aAAM,EAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YACpC,mCAAmC;YACnC,IAAA,aAAM,EAAC,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YACvD,gCAAgC;YAChC,IAAA,aAAM,EAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAE1D,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3G,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,uDAA+B,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACzF,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAErE,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAU,EAAE,EAAE;gBACjD,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CACpD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAC9C,CAAC;gBACF,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAgB,CAAC,CAAC;YAE/C,IAAA,aAAM,EAAC,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC1D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACvD,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;YACrF,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACtD,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;YAEvE,MAAM,UAAU,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAA4C,CAAC;YAC/H,oFAAoF;YACpF,MAAM,SAAS,GAA4B,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;YAC5F,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;YAE9B,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACjE,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC/D,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAElE,QAAQ,CAAC,WAAW,CAAC,OAAgB,CAAC,CAAC;YAEvC,uFAAuF;YACvF,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CACxD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,uDAA+B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CACtG,CAAC;YACF,IAAA,aAAM,EAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;YACtC,MAAM,IAAI,GAAG,SAAU,CAAC,IAAI,CAAC,CAAC,CAA6B,CAAC;YAC5D,IAAA,aAAM,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAA,aAAM,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAA,aAAM,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEjD,0BAA0B;YAC1B,IAAA,aAAM,EAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC1C,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAC5C,CAAC,CAAqB,EAAE,EAAE,CAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CACnE,CAAC;YACF,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;YAClF,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACtD,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;YAEpE,wEAAwE;YACxE,MAAM,cAAc,GAA4B,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;YACjG,cAAc,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC;YACxC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAEhD,MAAM,cAAc,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAA4C,CAAC;YACvI,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAEzE,QAAQ,CAAC,WAAW,CAAC,OAAgB,CAAC,CAAC;YAEvC,yFAAyF;YACzF,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CACxD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,uDAA+B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CACtG,CAAC;YACF,IAAA,aAAM,EAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;YACtC,MAAM,IAAI,GAAG,SAAU,CAAC,IAAI,CAAC,CAAC,CAA6B,CAAC;YAC5D,IAAA,aAAM,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpD,IAAA,aAAM,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAElD,IAAA,aAAM,EAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YAC/E,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACvD,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAA4C,CAAC;YAC1G,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAEhE,0FAA0F;YAC1F,IAAI,cAAc,GAAG,CAAC,CAAC;YACvB,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAW,EAAE,IAAa,EAAE,EAAE;gBAChE,IAAI,GAAG,KAAK,uDAA+B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBAChE,cAAc,EAAE,CAAC;oBACjB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;gBACtD,CAAC;gBACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,WAAW,CAAC,OAAgB,CAAC,CAAC;YAEvC,wCAAwC;YACxC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YAErD,IAAA,aAAM,EAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,qDAAqD;YACrD,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CACxD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,uDAA+B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CACtG,CAAC;YACF,IAAA,aAAM,EAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;YAEtC,IAAA,aAAM,EAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC/C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACzD,EAAE,CAAC,qFAAqF,EAAE,KAAK,IAAI,EAAE;YACjG,MAAM,SAAS,GAA6B;gBACxC,mBAAmB,EAAE,QAAQ;gBAC7B,OAAO,EAAE;oBACL,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;iBACpG;aACJ,CAAC;YACF,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,uDAA+B,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEzF,gEAAgE;YAChE,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAElD,kEAAkE;YAClE,IAAI,eAAe,GAAG,SAAS,CAAC;YAChC,YAAY,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,EAAU,EAAE,EAAE;gBACzD,eAAe,GAAG,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;YACH,YAAY,CAAC,sBAAsB,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;YAErE,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAU,EAAE,EAAE;gBACjD,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CACpD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAC9C,CAAC;gBACF,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAgB,CAAC,CAAC;YAE9D,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC1B,qCAAqC;YACrC,IAAA,aAAM,EAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC1C,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAC5C,CAAC,CAAqB,EAAE,EAAE,CAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACtE,CAAC;YACF,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;YACrC,mDAAmD;YACnD,IAAA,aAAM,EAAC,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,SAAS,GAA6B;gBACxC,mBAAmB,EAAE,QAAQ;gBAC7B,OAAO,EAAE,EAAE;aACd,CAAC;YACF,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,uDAA+B,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEzF,IAAI,eAAe,GAAG,SAAS,CAAC;YAChC,YAAY,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,EAAU,EAAE,EAAE;gBACzD,eAAe,GAAG,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;YACH,YAAY,CAAC,sBAAsB,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;YACrE,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAE/C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAgB,CAAC,CAAC;YAE9D,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC3B,0CAA0C;YAC1C,IAAA,aAAM,EAAC,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAChE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAEzD,wBAAwB;YACxB,MAAO,QAA2D,CAAC,aAAa,CAAC,EAAE,CAAC;YAEpF,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC3D,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;YACpH,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,uDAA+B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;YAE1I,IAAA,aAAM,EAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;YACxC,IAAA,aAAM,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YAEpD,MAAO,QAA2D,CAAC,aAAa,CAAC,EAAE,CAAC;YAEpF,IAAA,aAAM,EAAC,YAAY,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YAElD,MAAO,QAA2D,CAAC,aAAa,CAAC,EAAE,CAAC;YAEpF,IAAA,aAAM,EAAC,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC3D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YAE/E,MAAM,SAAS,GAA6B;gBACxC,mBAAmB,EAAE,UAAU;gBAC/B,OAAO,EAAE;oBACL,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;iBAC/E;aACJ,CAAC;YACF,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,uDAA+B,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEzF,IAAI,eAAe,GAAG,SAAS,CAAC;YAChC,YAAY,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,EAAU,EAAE,EAAE;gBACzD,eAAe,GAAG,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;YACH,YAAY,CAAC,sBAAsB,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;YAErE,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAU,EAAE,EAAE;gBACjD,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CACpD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAC9C,CAAC;gBACF,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAgB,CAAC,CAAC;YAE/C,IAAA,aAAM,EAAC,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC5D,IAAA,aAAM,EAAC,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC5E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAE1E,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAE/C,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAgB,CAAC,CAAC;YAE/C,IAAA,aAAM,EAAC,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC5D,IAAA,aAAM,EAAC,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAE3E,MAAM,SAAS,GAA6B;gBACxC,mBAAmB,EAAE,QAAQ;gBAC7B,OAAO,EAAE;oBACL,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;iBAC7E;aACJ,CAAC;YACF,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,uDAA+B,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEzF,IAAI,eAAe,GAAG,SAAS,CAAC;YAChC,YAAY,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,EAAU,EAAE,EAAE;gBACzD,eAAe,GAAG,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;YACH,YAAY,CAAC,sBAAsB,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;YAErE,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAU,EAAE,EAAE;gBACjD,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CACpD,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAC9C,CAAC;gBACF,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAgB,CAAC,CAAC;YAE/C,wDAAwD;YACxD,IAAA,aAAM,EAAC,SAAS,CAAC,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC3F,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -32,6 +32,8 @@ export declare abstract class AbstractViewContribution<T extends Widget> impleme
32
32
  get viewId(): string;
33
33
  get viewLabel(): string;
34
34
  get defaultViewOptions(): ApplicationShell.WidgetOptions;
35
+ /** The widget ID used for shell operations — `viewContainerId` if set, otherwise `widgetId`. */
36
+ get effectiveWidgetId(): string;
35
37
  get widget(): Promise<T>;
36
38
  tryGetWidget(): T | undefined;
37
39
  openView(args?: Partial<OpenViewArguments>): Promise<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"view-contribution.d.ts","sourceRoot":"","sources":["../../../src/browser/shell/view-contribution.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAsB,UAAU,EAAuB,MAAM,WAAW,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EACH,iBAAiB,EAAE,OAAO,EAAE,mBAAmB,EAC/C,gBAAgB,EAAE,eAAe,EACpC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB,CAAC,aAAa;IACrE,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,gBAAgB,CAAC,aAAa,CAAC;IACrD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,wBAAwB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAM5K;AAED;;GAEG;AACH,8BACsB,wBAAwB,CAAC,CAAC,SAAS,MAAM,CAAE,YAAW,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB;IAWpH,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,uBAAuB;IAT7C,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IAGrE,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IAE/C,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;gBAGG,OAAO,EAAE,uBAAuB;IAWpE,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,kBAAkB,IAAI,gBAAgB,CAAC,aAAa,CAEvD;IAED,IAAI,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,CAEvB;IAED,YAAY,IAAI,CAAC,GAAG,SAAS;IAIvB,QAAQ,CAAC,IAAI,GAAE,OAAO,CAAC,iBAAiB,CAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAuCjE,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAY3C,SAAS,IAAI,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAKzC,UAAU,IAAI,OAAO,CAAC,CAAC,CAAC;IAOxB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAS7C,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,GAAG,IAAI;CAQ7D"}
1
+ {"version":3,"file":"view-contribution.d.ts","sourceRoot":"","sources":["../../../src/browser/shell/view-contribution.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAsB,UAAU,EAAuB,MAAM,WAAW,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EACH,iBAAiB,EAAE,OAAO,EAAE,mBAAmB,EAC/C,gBAAgB,EAAE,eAAe,EACpC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB,CAAC,aAAa;IACrE,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,gBAAgB,CAAC,aAAa,CAAC;IACrD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,wBAAwB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAM5K;AAED;;GAEG;AACH,8BACsB,wBAAwB,CAAC,CAAC,SAAS,MAAM,CAAE,YAAW,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB;IAWpH,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,uBAAuB;IAT7C,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IAGrE,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IAE/C,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;gBAGG,OAAO,EAAE,uBAAuB;IAWpE,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,kBAAkB,IAAI,gBAAgB,CAAC,aAAa,CAEvD;IAED,gGAAgG;IAChG,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,CAEvB;IAED,YAAY,IAAI,CAAC,GAAG,SAAS;IAIvB,QAAQ,CAAC,IAAI,GAAE,OAAO,CAAC,iBAAiB,CAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAuCjE,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAY3C,SAAS,IAAI,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAKzC,UAAU,IAAI,OAAO,CAAC,CAAC,CAAC;IAOxB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAS7C,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,GAAG,IAAI;CAQ7D"}
@@ -55,6 +55,10 @@ let AbstractViewContribution = class AbstractViewContribution {
55
55
  get defaultViewOptions() {
56
56
  return this.options.defaultWidgetOptions;
57
57
  }
58
+ /** The widget ID used for shell operations — `viewContainerId` if set, otherwise `widgetId`. */
59
+ get effectiveWidgetId() {
60
+ return this.options.viewContainerId || this.options.widgetId;
61
+ }
58
62
  get widget() {
59
63
  return this.widgetManager.getOrCreateWidget(this.viewId);
60
64
  }
@@ -63,7 +67,7 @@ let AbstractViewContribution = class AbstractViewContribution {
63
67
  }
64
68
  async openView(args = {}) {
65
69
  const shell = this.shell;
66
- const widget = await this.widgetManager.getOrCreateWidget(this.options.viewContainerId || this.viewId);
70
+ const widget = await this.widgetManager.getOrCreateWidget(this.effectiveWidgetId);
67
71
  const tabBar = shell.getTabBarFor(widget);
68
72
  const area = shell.getAreaFor(widget);
69
73
  if (!tabBar) {