@scion/workbench 17.0.0-beta.5 → 17.0.0-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/common/grid-element-if-visible.pipe.mjs +32 -0
- package/esm2022/lib/layout/main-area-layout/main-area-layout.component.mjs +12 -16
- package/esm2022/lib/layout/workbench-layout.component.mjs +11 -12
- package/esm2022/lib/layout/workbench-layouts.util.mjs +29 -0
- package/esm2022/lib/logging/logger.mjs +1 -1
- package/esm2022/lib/logging//311/265logger.mjs +3 -3
- package/esm2022/lib/part/view-context-menu/view-menu.service.mjs +37 -25
- package/esm2022/lib/view-dnd/grid-drop-targets.util.mjs +48 -0
- package/esm2022/lib/view-dnd/view-drag.service.mjs +1 -1
- package/fesm2022/scion-workbench.mjs +135 -51
- package/fesm2022/scion-workbench.mjs.map +1 -1
- package/lib/common/grid-element-if-visible.pipe.d.ts +13 -0
- package/lib/layout/main-area-layout/main-area-layout.component.d.ts +4 -7
- package/lib/layout/workbench-layout.component.d.ts +3 -3
- package/lib/layout/workbench-layouts.util.d.ts +12 -0
- package/lib/logging/logger.d.ts +5 -1
- package/lib/logging//311/265logger.d.ts +1 -1
- package/lib/part/view-context-menu/view-menu.service.d.ts +3 -2
- package/lib/view-dnd/grid-drop-targets.util.d.ts +24 -0
- package/lib/view-dnd/view-drag.service.d.ts +55 -47
- package/package.json +1 -1
- package/esm2022/lib/common/grid-element-visible.pipe.mjs +0 -29
- package/lib/common/grid-element-visible.pipe.d.ts +0 -13
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { PipeTransform } from '@angular/core';
|
|
2
|
+
import { MPart, MTreeNode } from '../layout/workbench-layout.model';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Returns given grid element, but only if visible.
|
|
6
|
+
*
|
|
7
|
+
* @see isGridElementVisible
|
|
8
|
+
*/
|
|
9
|
+
export declare class GridElementIfVisiblePipe implements PipeTransform {
|
|
10
|
+
transform(gridElement: MTreeNode | MPart | null | undefined): MTreeNode | MPart | null;
|
|
11
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GridElementIfVisiblePipe, never>;
|
|
12
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<GridElementIfVisiblePipe, "wbGridElementIfVisible", true>;
|
|
13
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ɵWorkbenchPart } from '../../part/ɵworkbench-part.model';
|
|
2
|
-
import {
|
|
2
|
+
import { MPartGrid } from '../workbench-layout.model';
|
|
3
3
|
import { WorkbenchLayoutService } from '../workbench-layout.service';
|
|
4
4
|
import { ViewDragService } from '../../view-dnd/view-drag.service';
|
|
5
5
|
import { WbViewDropEvent } from '../../view-dnd/view-drop-zone.directive';
|
|
@@ -32,13 +32,10 @@ export declare class MainAreaLayoutComponent {
|
|
|
32
32
|
private _part;
|
|
33
33
|
private _workbenchLayoutService;
|
|
34
34
|
private _viewDragService;
|
|
35
|
-
get partId(): string;
|
|
35
|
+
protected get partId(): string;
|
|
36
36
|
constructor(_workbenchId: string, _part: ɵWorkbenchPart, _workbenchLayoutService: WorkbenchLayoutService, _viewDragService: ViewDragService);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
*/
|
|
40
|
-
get root(): MTreeNode | MPart;
|
|
41
|
-
onViewDrop(event: WbViewDropEvent): void;
|
|
37
|
+
protected get mainAreaGrid(): MPartGrid;
|
|
38
|
+
protected onViewDrop(event: WbViewDropEvent): void;
|
|
42
39
|
static ɵfac: i0.ɵɵFactoryDeclaration<MainAreaLayoutComponent, never>;
|
|
43
40
|
static ɵcmp: i0.ɵɵComponentDeclaration<MainAreaLayoutComponent, "wb-main-area-layout", never, {}, {}, never, never, true, never>;
|
|
44
41
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { WorkbenchLayoutService } from './workbench-layout.service';
|
|
2
2
|
import { ɵWorkbenchLayout } from './ɵworkbench-layout';
|
|
3
3
|
import { ViewDragService } from '../view-dnd/view-drag.service';
|
|
4
|
-
import {
|
|
4
|
+
import { MPartGrid } from './workbench-layout.model';
|
|
5
5
|
import { WbViewDropEvent } from '../view-dnd/view-drop-zone.directive';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
/**
|
|
@@ -32,9 +32,9 @@ export declare class WorkbenchLayoutComponent {
|
|
|
32
32
|
private _workbenchId;
|
|
33
33
|
private _viewDragService;
|
|
34
34
|
layout: ɵWorkbenchLayout | undefined;
|
|
35
|
-
|
|
35
|
+
protected grid: MPartGrid | undefined;
|
|
36
36
|
constructor(_workbenchId: string, _viewDragService: ViewDragService, workbenchLayoutService: WorkbenchLayoutService);
|
|
37
|
-
onViewDrop(event: WbViewDropEvent): void;
|
|
37
|
+
protected onViewDrop(event: WbViewDropEvent): void;
|
|
38
38
|
static ɵfac: i0.ɵɵFactoryDeclaration<WorkbenchLayoutComponent, never>;
|
|
39
39
|
static ɵcmp: i0.ɵɵComponentDeclaration<WorkbenchLayoutComponent, "wb-workbench-layout", never, {}, {}, never, never, true, never>;
|
|
40
40
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { MPart, MTreeNode } from './workbench-layout.model';
|
|
2
|
+
/**
|
|
3
|
+
* Recursively collects all parts of a given element and its descendants.
|
|
4
|
+
*/
|
|
5
|
+
declare function collectParts(element: MPart | MTreeNode): MPart[];
|
|
6
|
+
/**
|
|
7
|
+
* Provides helper functions for operating on a workbench layout.
|
|
8
|
+
*/
|
|
9
|
+
export declare const WorkbenchLayouts: {
|
|
10
|
+
readonly collectParts: typeof collectParts;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
package/lib/logging/logger.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LoggerName } from './logging.model';
|
|
1
|
+
import { LoggerName, LogLevel } from './logging.model';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
/**
|
|
4
4
|
* Logger used by the workbench to log messages.
|
|
@@ -16,6 +16,10 @@ import * as i0 from "@angular/core";
|
|
|
16
16
|
* @see {@link LogAppender}
|
|
17
17
|
*/
|
|
18
18
|
export declare abstract class Logger {
|
|
19
|
+
/**
|
|
20
|
+
* Log level of the workbench logger.
|
|
21
|
+
*/
|
|
22
|
+
abstract readonly logLevel: LogLevel;
|
|
19
23
|
/**
|
|
20
24
|
* Logs a message with debug severity.
|
|
21
25
|
*
|
|
@@ -4,7 +4,7 @@ import { Logger } from './logger';
|
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class ɵLogger implements Logger {
|
|
6
6
|
private _logAppenders;
|
|
7
|
-
|
|
7
|
+
logLevel: LogLevel;
|
|
8
8
|
constructor(_logAppenders: LogAppender[], router: Router, logLevel: LogLevel);
|
|
9
9
|
debug(message: string | (() => string), ...args: any[]): void;
|
|
10
10
|
info(message: string | (() => string), ...args: any[]): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ElementRef, Injector } from '@angular/core';
|
|
1
|
+
import { ElementRef, Injector, NgZone } from '@angular/core';
|
|
2
2
|
import { Overlay } from '@angular/cdk/overlay';
|
|
3
3
|
import { WorkbenchViewRegistry } from '../../view/workbench-view.registry';
|
|
4
4
|
import { Observable } from 'rxjs';
|
|
@@ -12,6 +12,7 @@ import * as i0 from "@angular/core";
|
|
|
12
12
|
export declare class ViewMenuService {
|
|
13
13
|
private _overlay;
|
|
14
14
|
private _injector;
|
|
15
|
+
private _zone;
|
|
15
16
|
private _viewRegistry;
|
|
16
17
|
private _workbenchService;
|
|
17
18
|
private _workbenchModuleConfig;
|
|
@@ -19,7 +20,7 @@ export declare class ViewMenuService {
|
|
|
19
20
|
private static readonly TOP_RIGHT;
|
|
20
21
|
private static readonly BOTTOM_LEFT;
|
|
21
22
|
private static readonly BOTTOM_RIGHT;
|
|
22
|
-
constructor(_overlay: Overlay, _injector: Injector, _viewRegistry: WorkbenchViewRegistry, _workbenchService: WorkbenchService, _workbenchModuleConfig: WorkbenchModuleConfig);
|
|
23
|
+
constructor(_overlay: Overlay, _injector: Injector, _zone: NgZone, _viewRegistry: WorkbenchViewRegistry, _workbenchService: WorkbenchService, _workbenchModuleConfig: WorkbenchModuleConfig);
|
|
23
24
|
/**
|
|
24
25
|
* Shows a menu with menu items registered in given {@link WorkbenchView}.
|
|
25
26
|
*
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ViewMoveEventTarget } from './view-drag.service';
|
|
2
|
+
import { MPartGrid } from '../layout/workbench-layout.model';
|
|
3
|
+
/**
|
|
4
|
+
* Resolves the drop target for moving a view to the root part (or node) of a grid.
|
|
5
|
+
*
|
|
6
|
+
* Examples:
|
|
7
|
+
* - Droping a view at the grid's boundaries (north, south, east, west).
|
|
8
|
+
* - Dropping a view on the grid's start page (center).
|
|
9
|
+
*
|
|
10
|
+
* When dropping a view on the grid's start page, the root of the grid can be a part or a node,
|
|
11
|
+
* depending on whether the grid contains structural parts.
|
|
12
|
+
*/
|
|
13
|
+
declare function resolve(target: {
|
|
14
|
+
grid: MPartGrid;
|
|
15
|
+
dropRegion: 'west' | 'east' | 'north' | 'south' | 'center';
|
|
16
|
+
workbenchId: string;
|
|
17
|
+
}): ViewMoveEventTarget;
|
|
18
|
+
/**
|
|
19
|
+
* Provides helper functions for dragging a view to a grid.
|
|
20
|
+
*/
|
|
21
|
+
export declare const GridDropTargets: {
|
|
22
|
+
readonly resolve: typeof resolve;
|
|
23
|
+
};
|
|
24
|
+
export {};
|
|
@@ -135,57 +135,65 @@ export interface ViewDragData {
|
|
|
135
135
|
* Event emitted when moving a view.
|
|
136
136
|
*/
|
|
137
137
|
export interface ViewMoveEvent {
|
|
138
|
-
source:
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
138
|
+
source: ViewMoveEventSource;
|
|
139
|
+
target: ViewMoveEventTarget;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Describes a view to be moved to another location.
|
|
143
|
+
*/
|
|
144
|
+
export interface ViewMoveEventSource {
|
|
145
|
+
viewId: string;
|
|
146
|
+
partId: string;
|
|
147
|
+
viewUrlSegments: UrlSegment[];
|
|
148
|
+
workbenchId: string;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Describes the target location for moving a view.
|
|
152
|
+
*/
|
|
153
|
+
export interface ViewMoveEventTarget {
|
|
154
|
+
/**
|
|
155
|
+
* Part (or node) where (or relative to which) to add the view.
|
|
156
|
+
*
|
|
157
|
+
* Rules for different regions:
|
|
158
|
+
* - If not specifying a region, {@link elementId} is mandatory and must reference a part.
|
|
159
|
+
* - For regions `north`, `south`, `east`, or `west`, {@link elementId} can reference a part or node,
|
|
160
|
+
* relative to which to align the view. If not set, the view is aligned relative to the root of
|
|
161
|
+
* the entire layout.
|
|
162
|
+
*
|
|
163
|
+
* Note: Property is ignored when moving the view to a new window.
|
|
164
|
+
*/
|
|
165
|
+
elementId?: string;
|
|
166
|
+
/**
|
|
167
|
+
* Region of {@link elementId} where to add the view (in a new part).
|
|
168
|
+
*
|
|
169
|
+
* If not specified, {@link elementId} must reference a part to which to add the view.
|
|
170
|
+
*
|
|
171
|
+
* Note:
|
|
172
|
+
* - Property is ignored when moving the view to a new window.
|
|
173
|
+
* - Property is required if {@link elementId} is a node.
|
|
174
|
+
*/
|
|
175
|
+
region?: 'north' | 'east' | 'south' | 'west';
|
|
176
|
+
/**
|
|
177
|
+
* Position where to insert the view. The position is zero-based. If not set, adds the view after the active view.
|
|
178
|
+
*/
|
|
179
|
+
position?: number | 'start' | 'end';
|
|
180
|
+
/**
|
|
181
|
+
* Identifier of the target workbench, or 'new-window' to move the view to a new browser window.
|
|
182
|
+
*/
|
|
183
|
+
workbenchId: string | 'new-window';
|
|
184
|
+
/**
|
|
185
|
+
* Describes the part to be created if the region is 'north', 'east', 'south', or 'west'.
|
|
186
|
+
*/
|
|
187
|
+
newPart?: {
|
|
171
188
|
/**
|
|
172
|
-
*
|
|
189
|
+
* Identity of the new part. If not set, assigns a UUID.
|
|
173
190
|
*/
|
|
174
|
-
|
|
191
|
+
id?: string;
|
|
175
192
|
/**
|
|
176
|
-
*
|
|
193
|
+
* Proportional size of the part relative to the reference part.
|
|
194
|
+
* The ratio is the closed interval [0,1]. If not set, defaults to `0.5`.
|
|
177
195
|
*/
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Identity of the new part. If not set, assigns a UUID.
|
|
181
|
-
*/
|
|
182
|
-
id?: string;
|
|
183
|
-
/**
|
|
184
|
-
* Proportional size of the part relative to the reference part.
|
|
185
|
-
* The ratio is the closed interval [0,1]. If not set, defaults to `0.5`.
|
|
186
|
-
*/
|
|
187
|
-
ratio?: number;
|
|
188
|
-
};
|
|
196
|
+
ratio?: number;
|
|
189
197
|
};
|
|
190
198
|
}
|
|
191
199
|
export interface ViewDragEventListenerOptions extends EventListenerOptions {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scion/workbench",
|
|
3
|
-
"version": "17.0.0-beta.
|
|
3
|
+
"version": "17.0.0-beta.6",
|
|
4
4
|
"description": "SCION Workbench enables the creation of Angular web applications that require a flexible layout to arrange content side-by-side or stacked, all personalizable by the user via drag & drop.",
|
|
5
5
|
"license": "EPL-2.0",
|
|
6
6
|
"private": false,
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2018-2023 Swiss Federal Railways
|
|
3
|
-
*
|
|
4
|
-
* This program and the accompanying materials are made
|
|
5
|
-
* available under the terms of the Eclipse Public License 2.0
|
|
6
|
-
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
|
7
|
-
*
|
|
8
|
-
* SPDX-License-Identifier: EPL-2.0
|
|
9
|
-
*/
|
|
10
|
-
import { Pipe } from '@angular/core';
|
|
11
|
-
import { isGridElementVisible } from '../layout/ɵworkbench-layout';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
/**
|
|
14
|
-
* Tests if given element is visible.
|
|
15
|
-
*
|
|
16
|
-
* @see isGridElementVisible
|
|
17
|
-
*/
|
|
18
|
-
export class GridElementVisiblePipe {
|
|
19
|
-
transform(gridElement) {
|
|
20
|
-
return !!gridElement && isGridElementVisible(gridElement);
|
|
21
|
-
}
|
|
22
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: GridElementVisiblePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
23
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.3", ngImport: i0, type: GridElementVisiblePipe, isStandalone: true, name: "wbGridElementVisible" }); }
|
|
24
|
-
}
|
|
25
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: GridElementVisiblePipe, decorators: [{
|
|
26
|
-
type: Pipe,
|
|
27
|
-
args: [{ name: 'wbGridElementVisible', standalone: true }]
|
|
28
|
-
}] });
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1lbGVtZW50LXZpc2libGUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL2NvbW1vbi9ncmlkLWVsZW1lbnQtdmlzaWJsZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLElBQUksRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7O0FBRWpFOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sc0JBQXNCO0lBRTFCLFNBQVMsQ0FBQyxXQUFpRDtRQUNoRSxPQUFPLENBQUMsQ0FBQyxXQUFXLElBQUksb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUQsQ0FBQzs4R0FKVSxzQkFBc0I7NEdBQXRCLHNCQUFzQjs7MkZBQXRCLHNCQUFzQjtrQkFEbEMsSUFBSTttQkFBQyxFQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIzIFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQge1BpcGUsIFBpcGVUcmFuc2Zvcm19IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNUGFydCwgTVRyZWVOb2RlfSBmcm9tICcuLi9sYXlvdXQvd29ya2JlbmNoLWxheW91dC5tb2RlbCc7XG5pbXBvcnQge2lzR3JpZEVsZW1lbnRWaXNpYmxlfSBmcm9tICcuLi9sYXlvdXQvybV3b3JrYmVuY2gtbGF5b3V0JztcblxuLyoqXG4gKiBUZXN0cyBpZiBnaXZlbiBlbGVtZW50IGlzIHZpc2libGUuXG4gKlxuICogQHNlZSBpc0dyaWRFbGVtZW50VmlzaWJsZVxuICovXG5AUGlwZSh7bmFtZTogJ3diR3JpZEVsZW1lbnRWaXNpYmxlJywgc3RhbmRhbG9uZTogdHJ1ZX0pXG5leHBvcnQgY2xhc3MgR3JpZEVsZW1lbnRWaXNpYmxlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gIHB1YmxpYyB0cmFuc2Zvcm0oZ3JpZEVsZW1lbnQ6IE1UcmVlTm9kZSB8IE1QYXJ0IHwgbnVsbCB8IHVuZGVmaW5lZCk6IGdyaWRFbGVtZW50IGlzIChNVHJlZU5vZGUgfCBNUGFydCkge1xuICAgIHJldHVybiAhIWdyaWRFbGVtZW50ICYmIGlzR3JpZEVsZW1lbnRWaXNpYmxlKGdyaWRFbGVtZW50KTtcbiAgfVxufVxuIl19
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { PipeTransform } from '@angular/core';
|
|
2
|
-
import { MPart, MTreeNode } from '../layout/workbench-layout.model';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
/**
|
|
5
|
-
* Tests if given element is visible.
|
|
6
|
-
*
|
|
7
|
-
* @see isGridElementVisible
|
|
8
|
-
*/
|
|
9
|
-
export declare class GridElementVisiblePipe implements PipeTransform {
|
|
10
|
-
transform(gridElement: MTreeNode | MPart | null | undefined): gridElement is (MTreeNode | MPart);
|
|
11
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<GridElementVisiblePipe, never>;
|
|
12
|
-
static ɵpipe: i0.ɵɵPipeDeclaration<GridElementVisiblePipe, "wbGridElementVisible", true>;
|
|
13
|
-
}
|