UNPKG

25.3 kBTypeScriptView Raw
1import { BoxLayout, BoxPanel, DockLayout, DockPanel, FocusTracker, Layout, Panel, SplitLayout, TabBar, Widget, Title } from '@phosphor/widgets';
2import { Message } from '@phosphor/messaging';
3import { IDragEvent } from '@phosphor/dragdrop';
4import { RecursivePartial, Event as CommonEvent, DisposableCollection } from '../../common';
5import { SaveOptions } from '../saveable';
6import { StatusBarImpl } from '../status-bar/status-bar';
7import { TheiaDockPanel } from './theia-dock-panel';
8import { SidePanelHandler, SidePanel } from './side-panel-handler';
9import { TabBarRendererFactory, ToolbarAwareTabBar } from './tab-bars';
10import { SplitPositionHandler } from './split-panels';
11import { FrontendApplicationStateService } from '../frontend-application-state';
12import { TabBarToolbarRegistry, TabBarToolbarFactory } from './tab-bar-toolbar';
13import { ContextKeyService } from '../context-key-service';
14import { Emitter } from '../../common/event';
15import { CorePreferences } from '../core-preferences';
16import { BreadcrumbsRendererFactory } from '../breadcrumbs/breadcrumbs-renderer';
17import { SaveResourceService } from '../save-resource-service';
18import { SecondaryWindowHandler } from '../secondary-window-handler';
19import URI from '../../common/uri';
20import { OpenerService } from '../opener-service';
21export declare type ApplicationShellLayoutVersion =
22/** layout versioning is introduced, unversioned layout are not compatible */
232.0 |
24/** view containers are introduced, backward compatible to 2.0 */
253.0 |
26/** git history view is replaced by a more generic scm history view, backward compatible to 3.0 */
274.0 |
28/** Replace custom/font-awesome icons with codicons */
295.0 |
30/** added the ability to drag and drop view parts between view containers */
316.0;
32/**
33 * When a version is increased, make sure to introduce a migration (ApplicationShellLayoutMigration) to this version.
34 */
35export declare const applicationShellLayoutVersion: ApplicationShellLayoutVersion;
36export declare const ApplicationShellOptions: unique symbol;
37export declare const DockPanelRendererFactory: unique symbol;
38export interface DockPanelRendererFactory {
39 (): DockPanelRenderer;
40}
41/**
42 * A renderer for dock panels that supports context menus on tabs.
43 */
44export declare class DockPanelRenderer implements DockLayout.IRenderer {
45 protected readonly tabBarRendererFactory: TabBarRendererFactory;
46 protected readonly tabBarToolbarRegistry: TabBarToolbarRegistry;
47 protected readonly tabBarToolbarFactory: TabBarToolbarFactory;
48 protected readonly breadcrumbsRendererFactory: BreadcrumbsRendererFactory;
49 protected readonly dockPanelFactory: TheiaDockPanel.Factory;
50 readonly tabBarClasses: string[];
51 private readonly onDidCreateTabBarEmitter;
52 constructor(tabBarRendererFactory: TabBarRendererFactory, tabBarToolbarRegistry: TabBarToolbarRegistry, tabBarToolbarFactory: TabBarToolbarFactory, breadcrumbsRendererFactory: BreadcrumbsRendererFactory);
53 get onDidCreateTabBar(): CommonEvent<TabBar<Widget>>;
54 createTabBar(): TabBar<Widget>;
55 createHandle(): HTMLDivElement;
56 protected onCurrentTabChanged(sender: ToolbarAwareTabBar, { currentIndex }: TabBar.ICurrentChangedArgs<Widget>): void;
57}
58/**
59 * The application shell manages the top-level widgets of the application. Use this class to
60 * add, remove, or activate a widget.
61 */
62export declare class ApplicationShell extends Widget {
63 protected dockPanelRendererFactory: () => DockPanelRenderer;
64 protected readonly statusBar: StatusBarImpl;
65 protected readonly sidePanelHandlerFactory: () => SidePanelHandler;
66 protected splitPositionHandler: SplitPositionHandler;
67 protected readonly applicationStateService: FrontendApplicationStateService;
68 protected readonly corePreferences: CorePreferences;
69 protected readonly saveResourceService: SaveResourceService;
70 protected readonly secondaryWindowHandler: SecondaryWindowHandler;
71 /**
72 * The dock panel in the main shell area. This is where editors usually go to.
73 */
74 mainPanel: TheiaDockPanel;
75 /**
76 * The dock panel in the bottom shell area. In contrast to the main panel, the bottom panel
77 * can be collapsed and expanded.
78 */
79 bottomPanel: TheiaDockPanel;
80 /**
81 * Handler for the left side panel. The primary application views go here, such as the
82 * file explorer and the git view.
83 */
84 leftPanelHandler: SidePanelHandler;
85 /**
86 * Handler for the right side panel. The secondary application views go here, such as the
87 * outline view.
88 */
89 rightPanelHandler: SidePanelHandler;
90 /**
91 * General options for the application shell.
92 */
93 protected options: ApplicationShell.Options;
94 /**
95 * The fixed-size panel shown on top. This one usually holds the main menu.
96 */
97 topPanel: Panel;
98 /**
99 * The current state of the bottom panel.
100 */
101 protected readonly bottomPanelState: SidePanel.State;
102 private readonly tracker;
103 private dragState?;
104 additionalDraggedUris: URI[] | undefined;
105 protected readonly contextKeyService: ContextKeyService;
106 protected readonly openerService: OpenerService;
107 protected readonly onDidAddWidgetEmitter: Emitter<Widget>;
108 readonly onDidAddWidget: CommonEvent<Widget>;
109 protected fireDidAddWidget(widget: Widget): void;
110 protected readonly onDidRemoveWidgetEmitter: Emitter<Widget>;
111 readonly onDidRemoveWidget: CommonEvent<Widget>;
112 protected fireDidRemoveWidget(widget: Widget): void;
113 protected readonly onDidChangeActiveWidgetEmitter: Emitter<FocusTracker.IChangedArgs<Widget>>;
114 readonly onDidChangeActiveWidget: CommonEvent<FocusTracker.IChangedArgs<Widget>>;
115 protected readonly onDidChangeCurrentWidgetEmitter: Emitter<FocusTracker.IChangedArgs<Widget>>;
116 readonly onDidChangeCurrentWidget: CommonEvent<FocusTracker.IChangedArgs<Widget>>;
117 protected readonly dockPanelFactory: TheiaDockPanel.Factory;
118 private _mainPanelRenderer;
119 get mainPanelRenderer(): DockPanelRenderer;
120 /**
121 * Construct a new application shell.
122 */
123 constructor(dockPanelRendererFactory: () => DockPanelRenderer, statusBar: StatusBarImpl, sidePanelHandlerFactory: () => SidePanelHandler, splitPositionHandler: SplitPositionHandler, applicationStateService: FrontendApplicationStateService, options: RecursivePartial<ApplicationShell.Options> | undefined, corePreferences: CorePreferences, saveResourceService: SaveResourceService, secondaryWindowHandler: SecondaryWindowHandler);
124 protected init(): void;
125 protected initializeShell(): void;
126 protected initSidebarVisibleKeyContext(): void;
127 protected initFocusKeyContexts(): void;
128 protected setTopPanelVisibility(preference: string): void;
129 protected onBeforeAttach(msg: Message): void;
130 protected onAfterDetach(msg: Message): void;
131 handleEvent(event: Event): void;
132 protected onDragEnter({ mimeData }: IDragEvent): void;
133 protected onDragOver(event: IDragEvent): void;
134 /**
135 * This method is called after a side panel has been expanded while dragging a widget. It fires
136 * a `mousemove` event so that the drag overlay markers are updated correctly in all dock panels.
137 */
138 private dispatchMouseMove;
139 protected onDrop(event: IDragEvent): void;
140 protected onDragLeave(event: IDragEvent): void;
141 /**
142 * Create the dock panel in the main shell area.
143 */
144 protected createMainPanel(): TheiaDockPanel;
145 addAdditionalDraggedEditorUris(uris: URI[]): void;
146 clearAdditionalDraggedEditorUris(): void;
147 protected static getDraggedEditorUris(dataTransfer: DataTransfer): URI[];
148 static setDraggedEditorUris(dataTransfer: DataTransfer, uris: URI[]): void;
149 /**
150 * Create the dock panel in the bottom shell area.
151 */
152 protected createBottomPanel(): TheiaDockPanel;
153 /**
154 * Create the top panel, which is used to hold the main menu.
155 */
156 protected createTopPanel(): Panel;
157 /**
158 * Create a box layout to assemble the application shell layout.
159 */
160 protected createBoxLayout(widgets: Widget[], stretch?: number[], options?: BoxPanel.IOptions): BoxLayout;
161 /**
162 * Create a split layout to assemble the application shell layout.
163 */
164 protected createSplitLayout(widgets: Widget[], stretch?: number[], options?: Partial<SplitLayout.IOptions>): SplitLayout;
165 /**
166 * Assemble the application shell layout. Override this method in order to change the arrangement
167 * of the main area and the side panels.
168 */
169 protected createLayout(): Layout;
170 /**
171 * Create an object that describes the current shell layout. This object may contain references
172 * to widgets; these need to be transformed before the layout can be serialized.
173 */
174 getLayoutData(): ApplicationShell.LayoutData;
175 getPinnedMainWidgets(): boolean[];
176 getPinnedBottomWidgets(): boolean[];
177 /**
178 * Compute the current height of the bottom panel. This implementation assumes that the container
179 * of the bottom panel is a `SplitPanel`.
180 */
181 protected getBottomPanelSize(): number | undefined;
182 /**
183 * Determine the default size to apply when the bottom panel is expanded for the first time.
184 */
185 protected getDefaultBottomPanelSize(): number | undefined;
186 /**
187 * Apply a shell layout that has been previously created with `getLayoutData`.
188 */
189 setLayoutData(layoutData: ApplicationShell.LayoutData): Promise<void>;
190 /**
191 * Modify the height of the bottom panel. This implementation assumes that the container of the
192 * bottom panel is a `SplitPanel`.
193 */
194 protected setBottomPanelSize(size: number): Promise<void>;
195 /**
196 * A promise that is resolved when all currently pending updates are done.
197 */
198 get pendingUpdates(): Promise<void>;
199 /**
200 * Track all widgets that are referenced by the given layout data.
201 */
202 protected registerWithFocusTracker(data: DockLayout.ITabAreaConfig | DockLayout.ISplitAreaConfig | SidePanel.LayoutData | null): void;
203 /**
204 * Add a widget to the application shell. The given widget must have a unique `id` property,
205 * which will be used as the DOM id.
206 *
207 * Widgets are removed from the shell by calling their `close` or `dispose` methods.
208 *
209 * Widgets added to the top area are not tracked regarding the _current_ and _active_ states.
210 */
211 addWidget(widget: Widget, options?: Readonly<ApplicationShell.WidgetOptions>): Promise<void>;
212 getInsertionOptions(options?: Readonly<ApplicationShell.WidgetOptions>): {
213 area: string;
214 addOptions: DockLayout.IAddOptions;
215 };
216 /**
217 * The widgets contained in the given shell area.
218 */
219 getWidgets(area: ApplicationShell.Area): Widget[];
220 /**
221 * Find the widget that contains the given HTML element. The returned widget may be one
222 * that is managed by the application shell, or one that is embedded in another widget and
223 * not directly managed by the shell, or a tab bar.
224 */
225 findWidgetForElement(element: HTMLElement): Widget | undefined;
226 private findWidgetForNode;
227 /**
228 * Finds the title widget from the tab-bar.
229 * @param tabBar used for providing an array of titles.
230 * @returns the selected title widget, else returns the currentTitle or undefined.
231 */
232 findTitle(tabBar: TabBar<Widget>, event?: Event): Title<Widget> | undefined;
233 /**
234 * Finds the tab-bar widget.
235 * @returns the selected tab-bar, else returns the currentTabBar.
236 */
237 findTabBar(event?: Event): TabBar<Widget> | undefined;
238 /**
239 * @returns the widget whose title has been targeted by a DOM event on a tabbar, or undefined if none can be found.
240 */
241 findTargetedWidget(event?: Event): Widget | undefined;
242 /**
243 * The current widget in the application shell. The current widget is the last widget that
244 * was active and not yet closed. See the remarks to `activeWidget` on what _active_ means.
245 */
246 get currentWidget(): Widget | undefined;
247 /**
248 * The active widget in the application shell. The active widget is the one that has focus
249 * (either the widget itself or any of its contents).
250 *
251 * _Note:_ Focus is taken by a widget through the `onActivateRequest` method. It is up to the
252 * widget implementation which DOM element will get the focus. The default implementation
253 * does not take any focus; in that case the widget is never returned by this property.
254 */
255 get activeWidget(): Widget | undefined;
256 /**
257 * Returns the last active widget in the given shell area.
258 */
259 getCurrentWidget(area: ApplicationShell.Area): Widget | undefined;
260 /**
261 * Handle a change to the current widget.
262 */
263 private onCurrentChanged;
264 protected readonly toDisposeOnActiveChanged: DisposableCollection;
265 /**
266 * Handle a change to the active widget.
267 */
268 private onActiveChanged;
269 /**
270 * Set the z-index of the given element and its ancestors to the value `z`.
271 */
272 private setZIndex;
273 /**
274 * Track the given widget so it is considered in the `current` and `active` state of the shell.
275 */
276 protected track(widget: Widget): void;
277 /**
278 * @returns an array of Widgets, all of which are tracked by the focus tracker
279 * The first member of the array is the widget whose id is passed in, and the other widgets
280 * are its tracked parents in ascending order
281 */
282 protected toTrackedStack(id: string): Widget[];
283 /**
284 * Activate a widget in the application shell. This makes the widget visible and usually
285 * also assigns focus to it.
286 *
287 * _Note:_ Focus is taken by a widget through the `onActivateRequest` method. It is up to the
288 * widget implementation which DOM element will get the focus. The default implementation
289 * does not take any focus.
290 *
291 * @returns the activated widget if it was found
292 */
293 activateWidget(id: string): Promise<Widget | undefined>;
294 waitForActivation(id: string): Promise<void>;
295 /**
296 * Activate top-level area widget.
297 */
298 protected doActivateWidget(id: string): Widget | undefined;
299 /**
300 * Focus is taken by a widget through the `onActivateRequest` method. It is up to the
301 * widget implementation which DOM element will get the focus. The default implementation
302 * of Widget does not take any focus. This method can help finding such problems by logging
303 * a warning in case a widget was explicitly activated, but did not trigger a change of the
304 * `activeWidget` property.
305 */
306 private checkActivation;
307 private readonly activationTimeout;
308 private readonly toDisposeOnActivationCheck;
309 private assertActivated;
310 /**
311 * Reveal a widget in the application shell. This makes the widget visible,
312 * but does not activate it.
313 *
314 * @returns the revealed widget if it was found
315 */
316 revealWidget(id: string): Promise<Widget | undefined>;
317 /**
318 * Reveal top-level area widget.
319 */
320 protected doRevealWidget(id: string): Widget | undefined;
321 /**
322 * Expand the named side panel area. This makes sure that the panel is visible, even if there
323 * are no widgets in it. If the panel is already visible, nothing happens. If the panel is currently
324 * collapsed (see `collapsePanel`) and it contains widgets, the widgets are revealed that were
325 * visible before it was collapsed.
326 */
327 expandPanel(area: ApplicationShell.Area): void;
328 /**
329 * Adjusts the size of the given area in the application shell.
330 *
331 * @param size the desired size of the panel in pixels.
332 * @param area the area to resize.
333 */
334 resize(size: number, area: ApplicationShell.Area): void;
335 /**
336 * Expand the bottom panel. See `expandPanel` regarding the exact behavior.
337 */
338 protected expandBottomPanel(): void;
339 /**
340 * Collapse the named side panel area. This makes sure that the panel is hidden,
341 * increasing the space that is available for other shell areas.
342 */
343 collapsePanel(area: ApplicationShell.Area): Promise<void>;
344 /**
345 * Collapse the bottom panel. All contained widgets are hidden, but not closed.
346 * They can be restored by calling `expandBottomPanel`.
347 */
348 protected collapseBottomPanel(): Promise<void>;
349 /**
350 * Refresh the toggle button for the bottom panel. This implementation creates a status bar entry
351 * and refers to the command `core.toggle.bottom.panel`.
352 */
353 protected refreshBottomPanelToggleButton(): void;
354 /**
355 * Check whether the named side panel area is expanded (returns `true`) or collapsed (returns `false`).
356 */
357 isExpanded(area: ApplicationShell.Area): boolean;
358 /**
359 * Close all tabs or a selection of tabs in a specific part of the application shell.
360 *
361 * @param tabBarOrArea
362 * Either the name of a shell area or a `TabBar` that is contained in such an area.
363 * @param filter
364 * If undefined, all tabs are closed; otherwise only those tabs that match the filter are closed.
365 */
366 closeTabs(tabBarOrArea: TabBar<Widget> | ApplicationShell.Area, filter?: (title: Title<Widget>, index: number) => boolean): Promise<void>;
367 saveTabs(tabBarOrArea: TabBar<Widget> | ApplicationShell.Area, filter?: (title: Title<Widget>, index: number) => boolean): void;
368 /**
369 * Collects all widget titles for the given tab bar or area and optionally filters them.
370 *
371 * @param tabBarOrArea The tab bar or area to retrieve the widget titles for
372 * @param filter The filter to apply to the result
373 * @returns The filtered array of widget titles or an empty array
374 */
375 protected getWidgetTitles(tabBarOrArea: TabBar<Widget> | ApplicationShell.Area, filter?: (title: Title<Widget>, index: number) => boolean): Title<Widget>[];
376 /**
377 * @param targets the widgets to be closed
378 * @return an array of all the widgets that were actually closed.
379 */
380 closeMany(targets: Widget[], options?: ApplicationShell.CloseOptions): Promise<Widget[]>;
381 /**
382 * @returns the widget that was closed, if any, `undefined` otherwise.
383 *
384 * If your use case requires closing multiple widgets, use {@link ApplicationShell#closeMany} instead. That method handles closing saveable widgets more reliably.
385 */
386 closeWidget(id: string, options?: ApplicationShell.CloseOptions): Promise<Widget | undefined>;
387 /**
388 * The shell area name of the currently active tab, or undefined.
389 */
390 get currentTabArea(): ApplicationShell.Area | undefined;
391 /**
392 * Determine the name of the shell area where the given widget resides. The result is
393 * undefined if the widget does not reside directly in the shell.
394 */
395 getAreaFor(input: TabBar<Widget> | Widget): ApplicationShell.Area | undefined;
396 protected getAreaPanelFor(input: Widget): DockPanel | undefined;
397 /**
398 * Return the tab bar that has the currently active widget, or undefined.
399 */
400 get currentTabBar(): TabBar<Widget> | undefined;
401 /**
402 * Return the tab bar in the given shell area, or the tab bar that has the given widget, or undefined.
403 */
404 getTabBarFor(widgetOrArea: Widget | ApplicationShell.Area): TabBar<Widget> | undefined;
405 /**
406 * The tab bars contained in the main shell area. If there is no widget in the main area, the
407 * returned array is empty.
408 */
409 get mainAreaTabBars(): TabBar<Widget>[];
410 /**
411 * The tab bars contained in the bottom shell area. If there is no widget in the bottom area,
412 * the returned array is empty.
413 */
414 get bottomAreaTabBars(): TabBar<Widget>[];
415 /**
416 * The tab bars contained in all shell areas.
417 */
418 get allTabBars(): TabBar<Widget>[];
419 activateNextTabInTabBar(current?: TabBar<Widget> | undefined): boolean;
420 nextTabIndexInTabBar(current?: TabBar<Widget> | undefined): number;
421 activateNextTab(): boolean;
422 activateNextTabBar(current?: TabBar<Widget> | undefined): boolean;
423 /**
424 * Return the tab bar next to the given tab bar; return the given tab bar if there is no adjacent one.
425 */
426 nextTabBar(current?: TabBar<Widget> | undefined): TabBar<Widget> | undefined;
427 activatePreviousTabInTabBar(current?: TabBar<Widget> | undefined): boolean;
428 previousTabIndexInTabBar(current?: TabBar<Widget> | undefined): number;
429 activatePreviousTab(): boolean;
430 activatePreviousTabBar(current?: TabBar<Widget> | undefined): boolean;
431 /**
432 * Return the tab bar previous to the given tab bar; return the given tab bar if there is no adjacent one.
433 */
434 previousTabBar(current?: TabBar<Widget> | undefined): TabBar<Widget> | undefined;
435 /**
436 * Test whether the current widget is dirty.
437 */
438 canSave(): boolean;
439 /**
440 * Save the current widget if it is dirty.
441 */
442 save(options?: SaveOptions): Promise<void>;
443 /**
444 * Test whether there is a dirty widget.
445 */
446 canSaveAll(): boolean;
447 /**
448 * Save all dirty widgets.
449 */
450 saveAll(options?: SaveOptions): Promise<void>;
451 /**
452 * Returns a snapshot of all tracked widgets to allow async modifications.
453 */
454 get widgets(): ReadonlyArray<Widget>;
455 getWidgetById(id: string): Widget | undefined;
456 canToggleMaximized(widget?: Widget | undefined): boolean;
457 toggleMaximized(widget?: Widget | undefined): void;
458}
459/**
460 * The namespace for `ApplicationShell` class statics.
461 */
462export declare namespace ApplicationShell {
463 /**
464 * The areas of the application shell where widgets can reside.
465 */
466 type Area = 'main' | 'top' | 'left' | 'right' | 'bottom' | 'secondaryWindow';
467 const areaLabels: Record<Area, string>;
468 /**
469 * The _side areas_ are those shell areas that can be collapsed and expanded,
470 * i.e. `left`, `right`, and `bottom`.
471 */
472 function isSideArea(area?: string): area is 'left' | 'right' | 'bottom';
473 function isValidArea(area?: unknown): area is ApplicationShell.Area;
474 /**
475 * General options for the application shell. These are passed on construction and can be modified
476 * through dependency injection (`ApplicationShellOptions` symbol).
477 */
478 interface Options extends Widget.IOptions {
479 bottomPanel: BottomPanelOptions;
480 leftPanel: SidePanel.Options;
481 rightPanel: SidePanel.Options;
482 }
483 interface BottomPanelOptions extends SidePanel.Options {
484 }
485 /**
486 * The default values for application shell options.
487 */
488 const DEFAULT_OPTIONS: Readonly<Options>;
489 /**
490 * Whether a widget should be opened to the side tab bar relatively to the reference widget.
491 */
492 type OpenToSideMode = 'open-to-left' | 'open-to-right';
493 function isOpenToSideMode(mode: unknown): mode is OpenToSideMode;
494 /**
495 * Options for adding a widget to the application shell.
496 */
497 interface WidgetOptions extends SidePanel.WidgetOptions {
498 /**
499 * The area of the application shell where the widget will reside.
500 */
501 area?: Area;
502 /**
503 * The insertion mode for adding the widget.
504 *
505 * The default is `'tab-after'`.
506 */
507 mode?: DockLayout.InsertMode | OpenToSideMode;
508 /**
509 * The reference widget for the insert location.
510 *
511 * The default is `undefined`.
512 */
513 ref?: Widget;
514 }
515 interface CloseOptions {
516 /**
517 * if optional then a user will be prompted
518 * if undefined then close will be canceled
519 * if true then will be saved on close
520 * if false then won't be saved on close
521 */
522 save?: boolean | undefined;
523 }
524 /**
525 * Data to save and load the application shell layout.
526 */
527 interface LayoutData {
528 version?: string | ApplicationShellLayoutVersion;
529 mainPanel?: DockPanel.ILayoutConfig;
530 mainPanelPinned?: boolean[];
531 bottomPanel?: BottomPanelLayoutData;
532 leftPanel?: SidePanel.LayoutData;
533 rightPanel?: SidePanel.LayoutData;
534 activeWidgetId?: string;
535 }
536 /**
537 * Data to save and load the bottom panel layout.
538 */
539 interface BottomPanelLayoutData {
540 config?: DockPanel.ILayoutConfig;
541 size?: number;
542 expanded?: boolean;
543 pinned?: boolean[];
544 }
545 /**
546 * Exposes widgets which activation state should be tracked by shell.
547 */
548 interface TrackableWidgetProvider {
549 getTrackableWidgets(): Widget[];
550 readonly onDidChangeTrackableWidgets?: CommonEvent<Widget[]>;
551 /**
552 * Make visible and focus a trackable widget for the given id.
553 * If not implemented then `activate` request will be sent to a child widget directly.
554 */
555 activateWidget?(id: string): Widget | undefined;
556 /**
557 * Make visible a trackable widget for the given id.
558 * If not implemented then a widget should be always visible when an owner is visible.
559 */
560 revealWidget?(id: string): Widget | undefined;
561 }
562 namespace TrackableWidgetProvider {
563 function is(widget: unknown): widget is TrackableWidgetProvider;
564 }
565}
566//# sourceMappingURL=application-shell.d.ts.map
\No newline at end of file