@node-projects/web-component-designer 0.1.126 → 0.1.128
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/elements/documentContainer.js +34 -24
- package/dist/elements/services/DefaultServiceBootstrap.js +2 -1
- package/dist/elements/services/placementService/AbsolutePlacementService.d.ts +6 -6
- package/dist/elements/services/placementService/AbsolutePlacementService.js +22 -20
- package/dist/elements/services/placementService/DefaultPlacementService.d.ts +3 -2
- package/dist/elements/services/placementService/FlexBoxPlacementService.d.ts +5 -5
- package/dist/elements/services/placementService/FlexBoxPlacementService.js +8 -8
- package/dist/elements/services/placementService/GridPlacementService.d.ts +5 -5
- package/dist/elements/services/placementService/GridPlacementService.js +9 -9
- package/dist/elements/services/placementService/IPlacementService.d.ts +5 -5
- package/dist/elements/services/selectionService/ISelectionChangedEvent copy.d.ts +6 -0
- package/dist/elements/services/selectionService/ISelectionChangedEvent copy.js +1 -0
- package/dist/elements/widgets/designerView/IDesignerCanvas.d.ts +0 -1
- package/dist/elements/widgets/designerView/designerCanvas.d.ts +0 -1
- package/dist/elements/widgets/designerView/designerCanvas.js +2 -6
- package/dist/elements/widgets/designerView/extensions/AbstractToolbarExtension.d.ts +9 -0
- package/dist/elements/widgets/designerView/extensions/AbstractToolbarExtension.js +30 -0
- package/dist/elements/widgets/designerView/extensions/BasicDisplayToolbarExtension.d.ts +20 -0
- package/dist/elements/widgets/designerView/extensions/BasicDisplayToolbarExtension.js +68 -0
- package/dist/elements/widgets/designerView/extensions/BasicStackedToolbarExtension.d.ts +1 -0
- package/dist/elements/widgets/designerView/extensions/BasicStackedToolbarExtension.js +1 -0
- package/dist/elements/widgets/designerView/extensions/BlockToolbarExtension.d.ts +12 -0
- package/dist/elements/widgets/designerView/extensions/BlockToolbarExtension.js +40 -0
- package/dist/elements/widgets/designerView/extensions/ConditionExtensionProvider.d.ts +13 -0
- package/dist/elements/widgets/designerView/extensions/ConditionExtensionProvider.js +18 -0
- package/dist/elements/widgets/designerView/extensions/EditTextExtension.d.ts +18 -0
- package/dist/elements/widgets/designerView/extensions/EditTextExtension.js +107 -0
- package/dist/elements/widgets/designerView/extensions/GridToolbarExtension.d.ts +12 -0
- package/dist/elements/widgets/designerView/extensions/GridToolbarExtension.js +58 -0
- package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +37 -31
- package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtensionProvider.d.ts +1 -1
- package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtensionProvider.js +4 -2
- package/dist/elements/widgets/designerView/extensions/block/FlexToolbarExtension.d.ts +12 -0
- package/dist/elements/widgets/designerView/extensions/block/FlexToolbarExtension.js +34 -0
- package/dist/elements/widgets/designerView/extensions/block/FlexToolbarExtensionProvider.d.ts +9 -0
- package/dist/elements/widgets/designerView/extensions/block/FlexToolbarExtensionProvider.js +12 -0
- package/dist/elements/widgets/designerView/extensions/buttons/GridExtensionDesignViewConfigButtons copy.d.ts +4 -0
- package/dist/elements/widgets/designerView/extensions/buttons/GridExtensionDesignViewConfigButtons copy.js +7 -0
- package/dist/elements/widgets/designerView/extensions/buttons/ToolbarExtensionsDesignViewConfigButtons.d.ts +4 -0
- package/dist/elements/widgets/designerView/extensions/buttons/ToolbarExtensionsDesignViewConfigButtons.js +7 -0
- package/dist/elements/widgets/designerView/extensions/flex/FlexToolbarExtensionProvider.d.ts +1 -1
- package/dist/elements/widgets/designerView/extensions/flex/FlexToolbarExtensionProvider.js +4 -2
- package/dist/elements/widgets/designerView/extensions/flex/GridToolbarExtension.d.ts +12 -0
- package/dist/elements/widgets/designerView/extensions/flex/GridToolbarExtension.js +66 -0
- package/dist/elements/widgets/designerView/extensions/flex/GridToolbarExtensionProvider.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/flex/GridToolbarExtensionProvider.js +17 -0
- package/dist/elements/widgets/designerView/extensions/grid/GridChildToolbarExtensionProvider.d.ts +1 -1
- package/dist/elements/widgets/designerView/extensions/grid/GridChildToolbarExtensionProvider.js +3 -2
- package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtension copy.d.ts +12 -0
- package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtension copy.js +66 -0
- package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtensionProvider copy.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtensionProvider copy.js +17 -0
- package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtensionProvider.d.ts +1 -1
- package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtensionProvider.js +4 -2
- package/dist/elements/widgets/designerView/extensions/grid/ResizeExtension.d.ts +28 -0
- package/dist/elements/widgets/designerView/extensions/grid/ResizeExtension.js +355 -0
- package/dist/elements/widgets/designerView/extensions/grid/ResizeExtensionProvider.d.ts +12 -0
- package/dist/elements/widgets/designerView/extensions/grid/ResizeExtensionProvider.js +20 -0
- package/dist/elements/widgets/designerView/extensions/svg/RectExtensionProvider copy.d.ts +9 -0
- package/dist/elements/widgets/designerView/extensions/svg/RectExtensionProvider copy.js +14 -0
- package/dist/elements/widgets/designerView/extensions/svg/SvgBaseExtension.d.ts +30 -0
- package/dist/elements/widgets/designerView/extensions/svg/SvgBaseExtension.js +181 -0
- package/dist/elements/widgets/designerView/overlayLayerView.d.ts +0 -1
- package/dist/elements/widgets/designerView/overlayLayerView.js +0 -4
- package/dist/index.d.ts +7 -0
- package/dist/index.js +7 -0
- package/package.json +1 -1
- package/dist/elements/services/designItemService/DesignItemService copy.d.ts +0 -7
- package/dist/elements/services/designItemService/DesignItemService copy.js +0 -6
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { assetsPath } from "../../../../Constants.js";
|
|
2
|
+
import { AbstractExtension } from "./AbstractExtension.js";
|
|
3
|
+
export class BasicStackedToolbarExtension extends AbstractExtension {
|
|
4
|
+
static basicTemplate = `
|
|
5
|
+
<node-projects-image-button-list-selector id="inline" no-value-in-header property="inline">
|
|
6
|
+
<img data-value="block" title="block" src="${assetsPath}images/display/block.svg">
|
|
7
|
+
<img data-value="inline" title="inline" src="${assetsPath}images/display/inline.svg">
|
|
8
|
+
</node-projects-image-button-list-selector>
|
|
9
|
+
<select title="display" id="displayType" style="pointer-events: all; height: 24px; width: 70px; padding: 0; font-weight: 900; text-transform: uppercase; margin-left: 5px; margin-right: 10px;">
|
|
10
|
+
<option>block</option>
|
|
11
|
+
<option>flex</option>
|
|
12
|
+
<option>grid</option>
|
|
13
|
+
</select>
|
|
14
|
+
`;
|
|
15
|
+
_toolbar;
|
|
16
|
+
_size = { width: 200, height: 30 };
|
|
17
|
+
_display;
|
|
18
|
+
_inline;
|
|
19
|
+
constructor(extensionManager, designerView, extendedItem) {
|
|
20
|
+
super(extensionManager, designerView, extendedItem);
|
|
21
|
+
}
|
|
22
|
+
extend(cache, event) {
|
|
23
|
+
const cs = getComputedStyle(this.extendedItem.element);
|
|
24
|
+
this._display = cs.display.replace('inline-', '').replace('inline', 'block');
|
|
25
|
+
this._inline = cs.display.startsWith('inline') ? 'inline' : 'block';
|
|
26
|
+
//@ts-ignore
|
|
27
|
+
this._toolbar = this.createToolbar(this.constructor.template, this._size.width, this._size.height);
|
|
28
|
+
const displayTypeEl = this._toolbar.getById('displayType');
|
|
29
|
+
displayTypeEl.value = this._display;
|
|
30
|
+
displayTypeEl.onchange = async () => {
|
|
31
|
+
this._display = displayTypeEl.value;
|
|
32
|
+
await this.updateDisplayValue();
|
|
33
|
+
this.extensionManager.reapplyAllAppliedExtentions([this.extendedItem]);
|
|
34
|
+
};
|
|
35
|
+
const inlineEl = this._toolbar.getById('inline');
|
|
36
|
+
inlineEl.value = this._inline;
|
|
37
|
+
inlineEl.addEventListener('value-changed', async () => {
|
|
38
|
+
this._inline = inlineEl.value;
|
|
39
|
+
if (this._inline && cs.position === 'absolute')
|
|
40
|
+
this.extendedItem.setStyle('position', 'static');
|
|
41
|
+
await this.updateDisplayValue();
|
|
42
|
+
this.extensionManager.reapplyAllAppliedExtentions([this.extendedItem]);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
async updateDisplayValue() {
|
|
46
|
+
let v = (this._inline == 'inline' ? 'inline ' : '') + this._display;
|
|
47
|
+
if (v === 'inline block')
|
|
48
|
+
v = 'inline';
|
|
49
|
+
await this.extendedItem.updateStyleInSheetOrLocalAsync('display', v);
|
|
50
|
+
}
|
|
51
|
+
refresh(cache, event) {
|
|
52
|
+
if (event) {
|
|
53
|
+
const pos = this.designerCanvas.getNormalizedEventCoordinates(event);
|
|
54
|
+
this._toolbar.updatePosition({ x: (pos.x - (16 / this.designerCanvas.zoomFactor)), y: (pos.y - (44 / this.designerCanvas.zoomFactor)) });
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
_addStyleButton(styleAndControlName) {
|
|
58
|
+
const cs = getComputedStyle(this.extendedItem.element);
|
|
59
|
+
const ctl = this._toolbar.getById(styleAndControlName);
|
|
60
|
+
ctl.addEventListener('value-changed', async () => {
|
|
61
|
+
await this.extendedItem.updateStyleInSheetOrLocalAsync(styleAndControlName, ctl.value);
|
|
62
|
+
});
|
|
63
|
+
ctl.value = cs[styleAndControlName];
|
|
64
|
+
}
|
|
65
|
+
dispose() {
|
|
66
|
+
this._removeAllOverlays();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -2,6 +2,7 @@ import { AbstractExtension, toolbarObject } from "./AbstractExtension.js";
|
|
|
2
2
|
import { IExtensionManager } from "./IExtensionManger.js";
|
|
3
3
|
import { IDesignerCanvas } from "../IDesignerCanvas.js";
|
|
4
4
|
import { IDesignItem } from "../../../item/IDesignItem.js";
|
|
5
|
+
export declare const basicStackedToolbarExtensionOverlayOptionName = "basicStackedToolbarExtensionShowOverlay";
|
|
5
6
|
export declare class BasicStackedToolbarExtension extends AbstractExtension {
|
|
6
7
|
protected static basicTemplate: string;
|
|
7
8
|
protected static toolBars: toolbarObject[];
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { assetsPath } from "../../../../Constants.js";
|
|
2
2
|
import { AbstractExtension } from "./AbstractExtension.js";
|
|
3
|
+
export const basicStackedToolbarExtensionOverlayOptionName = 'basicStackedToolbarExtensionShowOverlay';
|
|
3
4
|
export class BasicStackedToolbarExtension extends AbstractExtension {
|
|
4
5
|
static basicTemplate = `
|
|
5
6
|
<node-projects-image-button-list-selector id="inline" no-value-in-header property="inline">
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { IDesignItem } from '../../../../item/IDesignItem.js';
|
|
2
|
+
import { IDesignerCanvas } from '../../IDesignerCanvas.js';
|
|
3
|
+
import { AbstractExtension } from "../AbstractExtension.js";
|
|
4
|
+
import { IExtensionManager } from '../IExtensionManger.js';
|
|
5
|
+
export declare class BlockToolbarExtension extends AbstractExtension {
|
|
6
|
+
private static template;
|
|
7
|
+
private _toolbar;
|
|
8
|
+
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
9
|
+
extend(cache: Record<string | symbol, any>, event: MouseEvent): void;
|
|
10
|
+
refresh(cache: Record<string | symbol, any>, event?: MouseEvent): void;
|
|
11
|
+
dispose(): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { html } from "@node-projects/base-custom-webcomponent";
|
|
2
|
+
import { AbstractExtension } from "../AbstractExtension.js";
|
|
3
|
+
import { assetsPath } from "../../../../../Constants.js";
|
|
4
|
+
export class BlockToolbarExtension extends AbstractExtension {
|
|
5
|
+
static template = html `
|
|
6
|
+
<div style="height: 100%; width: 100%;">
|
|
7
|
+
<node-projects-image-button-list-selector>
|
|
8
|
+
<img data-value="block" title="block" src="${assetsPath}images/display/block.svg">
|
|
9
|
+
<img data-value="inline" title="inline" src="${assetsPath}images/display/inline.svg">
|
|
10
|
+
</node-projects-image-button-list-selector>
|
|
11
|
+
<select title="display" id="displayType" style="pointer-events: all; height: 24px; width: 70px; padding: 0; font-weight: 900; text-transform: uppercase; margin-right: 10px;">
|
|
12
|
+
<option selected>block</option>
|
|
13
|
+
<option>flex</option>
|
|
14
|
+
<option>grid</option>
|
|
15
|
+
</select>
|
|
16
|
+
</div>
|
|
17
|
+
`;
|
|
18
|
+
_toolbar;
|
|
19
|
+
constructor(extensionManager, designerView, extendedItem) {
|
|
20
|
+
super(extensionManager, designerView, extendedItem);
|
|
21
|
+
}
|
|
22
|
+
extend(cache, event) {
|
|
23
|
+
this._toolbar = this.createToolbar(BlockToolbarExtension.template, 200, 30);
|
|
24
|
+
const displayTypeEl = this._toolbar.getById('displayType');
|
|
25
|
+
displayTypeEl.onchange = () => {
|
|
26
|
+
this.extendedItem.updateStyleInSheetOrLocal('display', displayTypeEl.value);
|
|
27
|
+
this.extensionManager.reapplyAllAppliedExtentions([this.extendedItem]);
|
|
28
|
+
};
|
|
29
|
+
this.refresh(cache, event);
|
|
30
|
+
}
|
|
31
|
+
refresh(cache, event) {
|
|
32
|
+
if (event) {
|
|
33
|
+
const pos = this.designerCanvas.getNormalizedEventCoordinates(event);
|
|
34
|
+
this._toolbar.updatePosition({ x: (pos.x - (16 / this.designerCanvas.zoomFactor)), y: (pos.y - (44 / this.designerCanvas.zoomFactor)) });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
dispose() {
|
|
38
|
+
this._removeAllOverlays();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IDesignerExtensionProvider } from './IDesignerExtensionProvider.js';
|
|
2
|
+
import { IDesignItem } from '../../../item/IDesignItem.js';
|
|
3
|
+
import { IDesignerCanvas } from '../IDesignerCanvas.js';
|
|
4
|
+
import { IDesignerExtension } from './IDesignerExtension.js';
|
|
5
|
+
import { IExtensionManager } from './IExtensionManger.js';
|
|
6
|
+
export declare class ConditionExtensionProvider implements IDesignerExtensionProvider {
|
|
7
|
+
constructor(extensionProvider: IDesignerExtensionProvider, condition: (designItem: IDesignItem) => boolean);
|
|
8
|
+
extensionProvider: IDesignerExtensionProvider;
|
|
9
|
+
condition: (designItem: IDesignItem) => boolean;
|
|
10
|
+
style: CSSStyleSheet;
|
|
11
|
+
shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
12
|
+
getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
13
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export class ConditionExtensionProvider {
|
|
2
|
+
constructor(extensionProvider, condition) {
|
|
3
|
+
this.extensionProvider = extensionProvider;
|
|
4
|
+
this.condition = condition;
|
|
5
|
+
this.style = extensionProvider.style;
|
|
6
|
+
}
|
|
7
|
+
extensionProvider;
|
|
8
|
+
condition;
|
|
9
|
+
style;
|
|
10
|
+
shouldExtend(extensionManager, designerView, designItem) {
|
|
11
|
+
if (!this.condition(designItem))
|
|
12
|
+
return false;
|
|
13
|
+
return this.extensionProvider.shouldExtend(extensionManager, designerView, designItem);
|
|
14
|
+
}
|
|
15
|
+
getExtension(extensionManager, designerView, designItem) {
|
|
16
|
+
return this.extensionProvider.getExtension(extensionManager, designerView, designItem);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { IDesignItem } from '../../../../item/IDesignItem.js';
|
|
2
|
+
import { IDesignerCanvas } from '../../IDesignerCanvas.js';
|
|
3
|
+
import { AbstractExtension } from "../AbstractExtension.js";
|
|
4
|
+
import { IExtensionManager } from '../IExtensionManger.js';
|
|
5
|
+
export type handlesPointerEvent = {
|
|
6
|
+
handlesPointerEvent(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare class EditTextExtension extends AbstractExtension implements handlesPointerEvent {
|
|
9
|
+
private static template;
|
|
10
|
+
private _foreignObject;
|
|
11
|
+
private _path;
|
|
12
|
+
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
13
|
+
extend(): void;
|
|
14
|
+
refresh(): void;
|
|
15
|
+
dispose(): void;
|
|
16
|
+
handlesPointerEvent(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): boolean;
|
|
17
|
+
_formatSelection(type: string, value?: string): void;
|
|
18
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { html } from "@node-projects/base-custom-webcomponent";
|
|
2
|
+
import { AbstractExtension } from "../AbstractExtension.js";
|
|
3
|
+
import { OverlayLayer } from "../OverlayLayer.js";
|
|
4
|
+
import { getDesignerCanvasNormalizedTransformedCornerDOMPoints } from "../../../../helper/TransformHelper.js";
|
|
5
|
+
import { shadowrootGetSelection, wrapSelectionInSpans } from "../../../../helper/SelectionHelper.js";
|
|
6
|
+
import { FontPropertyEditor } from "../../../../services/propertiesService/propertyEditors/FontPropertyEditor.js";
|
|
7
|
+
export class EditTextExtension extends AbstractExtension {
|
|
8
|
+
static template = html `
|
|
9
|
+
<div style="height: 24px; display: flex; gap: 2px;">
|
|
10
|
+
<button data-command="font-weight" data-command-parameter="800" style="pointer-events: all; height: 24px; width: 24px; padding: 0; font-weight: 900;">b</button>
|
|
11
|
+
<button data-command="font-style" data-command-parameter="italic" style="pointer-events: all; height: 24px; width: 24px; padding: 0;"><em>i</em></button>
|
|
12
|
+
<button data-command="text-decoration" data-command-parameter="underline" style="pointer-events: all; height: 24px; width: 24px; padding: 0;"><ins>u</ins></button>
|
|
13
|
+
<button data-command="text-decoration" data-command-parameter="line-through" style="pointer-events: all; height: 24px; width: 24px; padding: 0;"><del>s</del></button>
|
|
14
|
+
<button data-command="text-decoration" data-command-parameter="overline" style="pointer-events: all; height: 24px; width: 24px; padding: 0;"><span style="text-decoration: overline">o</span></button>
|
|
15
|
+
<select data-command="fontSize" style="pointer-events: all; height: 24px; width: 60px; padding: 0;">
|
|
16
|
+
<option>8px</option>
|
|
17
|
+
<option>9px</option>
|
|
18
|
+
<option>10px</option>
|
|
19
|
+
<option>11px</option>
|
|
20
|
+
<option>12px</option>
|
|
21
|
+
<option>14px</option>
|
|
22
|
+
<option>16px</option>
|
|
23
|
+
<option>18px</option>
|
|
24
|
+
<option>20px</option>
|
|
25
|
+
<option>24px</option>
|
|
26
|
+
<option>28px</option>
|
|
27
|
+
<option>32px</option>
|
|
28
|
+
<option>36px</option>
|
|
29
|
+
</select>
|
|
30
|
+
<select id="fontFamily" data-command="font-family" style="pointer-events: all; height: 24px; width: 90px; padding: 0;">
|
|
31
|
+
|
|
32
|
+
</select>
|
|
33
|
+
</div>
|
|
34
|
+
`;
|
|
35
|
+
_foreignObject;
|
|
36
|
+
_path;
|
|
37
|
+
constructor(extensionManager, designerView, extendedItem) {
|
|
38
|
+
super(extensionManager, designerView, extendedItem);
|
|
39
|
+
}
|
|
40
|
+
extend() {
|
|
41
|
+
//TODO: -> check what to do with extensions, do not loose edit on mouse click,...
|
|
42
|
+
//maybe use a html edit framework
|
|
43
|
+
this.extendedItem.instanceServiceContainer.selectionService.clearSelectedElements();
|
|
44
|
+
this.extendedItem.removeDesignerAttributesAndStylesFromChildren();
|
|
45
|
+
this.extendedItem.element.setAttribute('contenteditable', '');
|
|
46
|
+
this.extendedItem.element.focus();
|
|
47
|
+
let itemRect = this.extendedItem.element.getBoundingClientRect();
|
|
48
|
+
const elements = EditTextExtension.template.content.cloneNode(true);
|
|
49
|
+
FontPropertyEditor.addFontsToSelect(elements.querySelector('#fontFamily'));
|
|
50
|
+
elements.querySelectorAll('button').forEach(x => x.onpointerdown = (e) => {
|
|
51
|
+
this.designerCanvas.ignoreEvent(e);
|
|
52
|
+
this._formatSelection(x.dataset['command'], x.dataset['commandParameter']);
|
|
53
|
+
});
|
|
54
|
+
elements.querySelectorAll('select').forEach(x => x.onpointerdown = (e) => this.designerCanvas.ignoreEvent(e));
|
|
55
|
+
elements.querySelectorAll('select').forEach(x => x.onchange = () => this._formatSelection(x.dataset['command'], x.value));
|
|
56
|
+
//Button overlay
|
|
57
|
+
const foreignObject = document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject');
|
|
58
|
+
this._foreignObject = foreignObject;
|
|
59
|
+
foreignObject.setAttribute('x', '' + (itemRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor);
|
|
60
|
+
foreignObject.setAttribute('y', '' + ((itemRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 30));
|
|
61
|
+
foreignObject.setAttribute('width', '300');
|
|
62
|
+
foreignObject.setAttribute('height', '24');
|
|
63
|
+
foreignObject.appendChild(elements);
|
|
64
|
+
this._addOverlay(foreignObject, OverlayLayer.Foreground);
|
|
65
|
+
//TODO - nice way to disable click overlay
|
|
66
|
+
this.designerCanvas.clickOverlay.style.pointerEvents = 'none';
|
|
67
|
+
//overlay to detect click outside
|
|
68
|
+
this._path = document.createElementNS("http://www.w3.org/2000/svg", "path");
|
|
69
|
+
this._path.setAttribute('class', 'svg-edit-text-clickoutside');
|
|
70
|
+
this._path.setAttribute('fill-rule', 'evenodd');
|
|
71
|
+
this._path.style.pointerEvents = 'auto';
|
|
72
|
+
this._path.onpointerdown = (e) => {
|
|
73
|
+
this.extensionManager.removeExtensionInstance(this.extendedItem, this);
|
|
74
|
+
};
|
|
75
|
+
this._addOverlay(this._path, OverlayLayer.Background);
|
|
76
|
+
let points = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas);
|
|
77
|
+
let outsideRect = { width: this.designerCanvas.containerBoundingRect.width / this.designerCanvas.scaleFactor, height: this.designerCanvas.containerBoundingRect.height / this.designerCanvas.scaleFactor };
|
|
78
|
+
let data = "M0 0 L" + outsideRect.width + " 0 L" + outsideRect.width + ' ' + outsideRect.height + " L0 " + outsideRect.height + " Z ";
|
|
79
|
+
data += "M" + points[0].x + " " + points[0].y + " L" + points[1].x + " " + points[1].y + " L" + points[3].x + " " + points[3].y + " L" + points[2].x + " " + points[2].y + " Z";
|
|
80
|
+
this._path.setAttribute("d", data);
|
|
81
|
+
}
|
|
82
|
+
refresh() {
|
|
83
|
+
let points = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas);
|
|
84
|
+
let outsideRect = { width: this.designerCanvas.containerBoundingRect.width / this.designerCanvas.scaleFactor, height: this.designerCanvas.containerBoundingRect.height / this.designerCanvas.scaleFactor };
|
|
85
|
+
let data = "M0 0 L" + outsideRect.width + " 0 L" + outsideRect.width + ' ' + outsideRect.height + " L0 " + outsideRect.height + " Z ";
|
|
86
|
+
data += "M" + points[0].x + " " + points[0].y + " L" + points[1].x + " " + points[1].y + " L" + points[3].x + " " + points[3].y + " L" + points[2].x + " " + points[2].y + " Z";
|
|
87
|
+
this._path.setAttribute("d", data);
|
|
88
|
+
}
|
|
89
|
+
dispose() {
|
|
90
|
+
this._removeAllOverlays();
|
|
91
|
+
this.extendedItem.element.removeAttribute('contenteditable');
|
|
92
|
+
this.extendedItem.updateChildrenFromNodesChildren();
|
|
93
|
+
this.designerCanvas.clickOverlay.style.pointerEvents = 'auto';
|
|
94
|
+
}
|
|
95
|
+
handlesPointerEvent(designerCanvas, event, currentElement) {
|
|
96
|
+
const p = event.composedPath();
|
|
97
|
+
const stylo = this._foreignObject.querySelector('stylo-editor');
|
|
98
|
+
return p.indexOf(stylo) >= 0;
|
|
99
|
+
}
|
|
100
|
+
_formatSelection(type, value) {
|
|
101
|
+
const selection = shadowrootGetSelection(this.designerCanvas.rootDesignItem.element.shadowRoot);
|
|
102
|
+
const spans = wrapSelectionInSpans(selection);
|
|
103
|
+
for (const span of spans)
|
|
104
|
+
span.style[type] = value;
|
|
105
|
+
this.extendedItem.element.focus();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { IDesignItem } from '../../../../item/IDesignItem.js';
|
|
2
|
+
import { IDesignerCanvas } from '../../IDesignerCanvas.js';
|
|
3
|
+
import { AbstractExtension } from "../AbstractExtension.js";
|
|
4
|
+
import { IExtensionManager } from '../IExtensionManger.js';
|
|
5
|
+
export declare class GridToolbarExtension extends AbstractExtension {
|
|
6
|
+
private static template;
|
|
7
|
+
private _foreignObject;
|
|
8
|
+
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
9
|
+
extend(cache: Record<string | symbol, any>, event: MouseEvent): void;
|
|
10
|
+
refresh(cache: Record<string | symbol, any>, event?: MouseEvent): void;
|
|
11
|
+
dispose(): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { html } from "@node-projects/base-custom-webcomponent";
|
|
2
|
+
import { AbstractExtension } from "../AbstractExtension.js";
|
|
3
|
+
import { OverlayLayer } from "../OverlayLayer.js";
|
|
4
|
+
export class GridToolbarExtension extends AbstractExtension {
|
|
5
|
+
static template = html `
|
|
6
|
+
<div style="height: 30px; width: 200px;">
|
|
7
|
+
<span>GRID</span>
|
|
8
|
+
<select id="gridType" style="pointer-events: all; height: 24px; width: 60px; padding: 0;">
|
|
9
|
+
<option>1x1</option>
|
|
10
|
+
<option>1x16</option>
|
|
11
|
+
<option>2x8</option>
|
|
12
|
+
<option>4x4</option>
|
|
13
|
+
<option>8x2</option>
|
|
14
|
+
<option>16x1</option>
|
|
15
|
+
<option>custom</option>
|
|
16
|
+
</select>
|
|
17
|
+
</div>
|
|
18
|
+
`;
|
|
19
|
+
_foreignObject;
|
|
20
|
+
constructor(extensionManager, designerView, extendedItem) {
|
|
21
|
+
super(extensionManager, designerView, extendedItem);
|
|
22
|
+
}
|
|
23
|
+
extend(cache, event) {
|
|
24
|
+
const element = GridToolbarExtension.template.content.cloneNode(true);
|
|
25
|
+
element.querySelectorAll('*').forEach(x => x.onpointerdown = (e) => {
|
|
26
|
+
this.designerCanvas.ignoreEvent(e);
|
|
27
|
+
//this._formatSelection(x.dataset['command'], x.dataset['commandParameter'])
|
|
28
|
+
});
|
|
29
|
+
//element.querySelectorAll('select').forEach(x => x.onpointerdown = (e) => this.designerCanvas.ignoreEvent(e));
|
|
30
|
+
const gridTypeEl = element.querySelector('#gridType');
|
|
31
|
+
gridTypeEl.onchange = () => {
|
|
32
|
+
const parts = gridTypeEl.value.split('x');
|
|
33
|
+
this.extendedItem.updateStyleInSheetOrLocal('grid-template-columns', '1fr '.repeat(parseInt(parts[0])).trim());
|
|
34
|
+
this.extendedItem.updateStyleInSheetOrLocal('grid-template-rows', '1fr '.repeat(parseInt(parts[1])).trim());
|
|
35
|
+
};
|
|
36
|
+
//elements.querySelectorAll('select').forEach(x => x.onchange = () => this._formatSelection(x.dataset['command'], x.value));
|
|
37
|
+
//overlay
|
|
38
|
+
const foreignObject = document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject');
|
|
39
|
+
this._foreignObject = foreignObject;
|
|
40
|
+
foreignObject.classList.add('svg-toolbar');
|
|
41
|
+
foreignObject.setAttribute('width', '1');
|
|
42
|
+
foreignObject.setAttribute('height', '1');
|
|
43
|
+
foreignObject.appendChild(element);
|
|
44
|
+
this.refresh(cache, event);
|
|
45
|
+
this._addOverlay(foreignObject, OverlayLayer.Foreground);
|
|
46
|
+
}
|
|
47
|
+
refresh(cache, event) {
|
|
48
|
+
if (event) {
|
|
49
|
+
const pos = this.designerCanvas.getNormalizedEventCoordinates(event);
|
|
50
|
+
//debugger;
|
|
51
|
+
this._foreignObject.setAttribute('x', '' + (pos.x - 16));
|
|
52
|
+
this._foreignObject.setAttribute('y', '' + (pos.y - 36));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
dispose() {
|
|
56
|
+
this._removeAllOverlays();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -241,40 +241,46 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
241
241
|
case EventNames.PointerUp:
|
|
242
242
|
event.target.releasePointerCapture(event.pointerId);
|
|
243
243
|
let cg = this.extendedItem.openGroup((this.resizeAllSelected && this.designerCanvas.instanceServiceContainer.selectionService.selectedElements.length > 1) ? "Resize Elements" : "Resize <" + this.extendedItem.name + ">");
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
designItem
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
244
|
+
try {
|
|
245
|
+
this.extendedItem.setStyle('width', this.extendedItem.element.style.width);
|
|
246
|
+
this.extendedItem.setStyle('height', this.extendedItem.element.style.height);
|
|
247
|
+
this.extendedItem.setStyle('left', roundValue(this.extendedItem, parseFloat(normalizeToAbsolutePosition(this.extendedItem.element, 'left'))) + 'px');
|
|
248
|
+
this.extendedItem.setStyle('top', roundValue(this.extendedItem, parseFloat(normalizeToAbsolutePosition(this.extendedItem.element, 'top'))) + 'px');
|
|
249
|
+
let p3Abs = new DOMPoint(this.extendedItem.element.offsetLeft + parseFloat(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[0].replace('px', '')), this.extendedItem.element.offsetTop + parseFloat(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[1].replace('px', '')));
|
|
250
|
+
this.extendedItem.element.style.transformOrigin = this._initialTransformOrigins[0];
|
|
251
|
+
let p1Abs = new DOMPoint(this.extendedItem.element.offsetLeft + parseFloat(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[0].replace('px', '')), this.extendedItem.element.offsetTop + parseFloat(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[1].replace('px', '')));
|
|
252
|
+
let p1 = new DOMPoint(p1Abs.x - p3Abs.x, -(p1Abs.y - p3Abs.y));
|
|
253
|
+
let matrix = new DOMMatrix(getComputedStyle(this.extendedItem.element).transform);
|
|
254
|
+
let deltaX = 0;
|
|
255
|
+
let deltaY = 0;
|
|
256
|
+
let p1transformed = transformPointByInverseMatrix(p1, matrix);
|
|
257
|
+
let p2Abs = new DOMPoint(p3Abs.x + p1transformed.x, p3Abs.y - p1transformed.y);
|
|
258
|
+
let p1p2 = new DOMPoint(p2Abs.x - p1Abs.x, -(p2Abs.y - p1Abs.y));
|
|
259
|
+
let p1p2transformed = p1p2.matrixTransform(matrix);
|
|
260
|
+
let p4Abs = new DOMPoint(p1Abs.x + p1p2transformed.x, p1Abs.y - p1p2transformed.y);
|
|
261
|
+
deltaX = p4Abs.x - p1Abs.x;
|
|
262
|
+
deltaY = p4Abs.y - p1Abs.y;
|
|
263
|
+
this.extendedItem.element.style.transform = matrix.translate(deltaX, deltaY).toString();
|
|
264
|
+
if (matrix.isIdentity) {
|
|
265
|
+
this.extendedItem.element.style.transform = '';
|
|
266
|
+
}
|
|
267
|
+
this.extendedItem.setStyle('transform', this.extendedItem.element.style.transform);
|
|
268
|
+
if (this.resizeAllSelected) {
|
|
269
|
+
for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
|
|
270
|
+
if (designItem !== this.extendedItem) {
|
|
271
|
+
designItem.setStyle('width', designItem.element.style.width);
|
|
272
|
+
designItem.setStyle('height', designItem.element.style.height);
|
|
273
|
+
designItem.setStyle('left', roundValue(this.extendedItem, parseFloat(normalizeToAbsolutePosition(designItem.element, 'left'))) + 'px');
|
|
274
|
+
designItem.setStyle('top', roundValue(this.extendedItem, parseFloat(normalizeToAbsolutePosition(designItem.element, 'top'))) + 'px');
|
|
275
|
+
}
|
|
274
276
|
}
|
|
275
277
|
}
|
|
278
|
+
cg.commit();
|
|
279
|
+
}
|
|
280
|
+
catch (err) {
|
|
281
|
+
cg.abort();
|
|
282
|
+
console.error(err);
|
|
276
283
|
}
|
|
277
|
-
cg.commit();
|
|
278
284
|
this._initialSizes = null;
|
|
279
285
|
this._initialPoint = null;
|
|
280
286
|
break;
|
package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtensionProvider.d.ts
CHANGED
|
@@ -4,6 +4,6 @@ import { IDesignerCanvas } from '../../IDesignerCanvas.js';
|
|
|
4
4
|
import { IDesignerExtension } from '../IDesignerExtension.js';
|
|
5
5
|
import { IExtensionManager } from '../IExtensionManger.js';
|
|
6
6
|
export declare class BlockToolbarExtensionProvider implements IDesignerExtensionProvider {
|
|
7
|
-
shouldExtend(extensionManager: IExtensionManager,
|
|
7
|
+
shouldExtend(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
8
8
|
getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
9
9
|
}
|
package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtensionProvider.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { BlockToolbarExtension } from './BlockToolbarExtension.js';
|
|
2
2
|
import { NodeType } from '../../../../item/NodeType.js';
|
|
3
|
+
import { basicStackedToolbarExtensionOverlayOptionName } from '../BasicStackedToolbarExtension.js';
|
|
3
4
|
export class BlockToolbarExtensionProvider {
|
|
4
|
-
shouldExtend(extensionManager,
|
|
5
|
+
shouldExtend(extensionManager, designerCanvas, designItem) {
|
|
5
6
|
if (designItem.nodeType === NodeType.Element) {
|
|
6
7
|
const d = getComputedStyle(designItem.element).display;
|
|
7
|
-
|
|
8
|
+
if (d === 'block' || d === 'inline' || d === 'inline-block')
|
|
9
|
+
return designerCanvas.instanceServiceContainer.designContext.extensionOptions[basicStackedToolbarExtensionOverlayOptionName] !== false;
|
|
8
10
|
}
|
|
9
11
|
return false;
|
|
10
12
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { IDesignItem } from '../../../../item/IDesignItem.js';
|
|
2
|
+
import { IDesignerCanvas } from '../../IDesignerCanvas.js';
|
|
3
|
+
import { AbstractExtension } from "../AbstractExtension.js";
|
|
4
|
+
import { IExtensionManager } from '../IExtensionManger.js';
|
|
5
|
+
export declare class FlexToolbarExtension extends AbstractExtension {
|
|
6
|
+
private static template;
|
|
7
|
+
private _toolbar;
|
|
8
|
+
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
9
|
+
extend(cache: Record<string | symbol, any>, event: MouseEvent): void;
|
|
10
|
+
refresh(cache: Record<string | symbol, any>, event?: MouseEvent): void;
|
|
11
|
+
dispose(): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { html } from "@node-projects/base-custom-webcomponent";
|
|
2
|
+
import { AbstractExtension } from "../AbstractExtension.js";
|
|
3
|
+
export class FlexToolbarExtension extends AbstractExtension {
|
|
4
|
+
static template = html `
|
|
5
|
+
<div style="height: 100%; width: 100%;">
|
|
6
|
+
<select id="displayType" style="pointer-events: all; height: 24px; width: 70px; padding: 0; font-weight: 900; text-transform: uppercase; margin-right: 10px;">
|
|
7
|
+
<option>block</option>
|
|
8
|
+
<option selected>flex</option>
|
|
9
|
+
<option>grid</option>
|
|
10
|
+
</select>
|
|
11
|
+
</div>
|
|
12
|
+
`;
|
|
13
|
+
_toolbar;
|
|
14
|
+
constructor(extensionManager, designerView, extendedItem) {
|
|
15
|
+
super(extensionManager, designerView, extendedItem);
|
|
16
|
+
}
|
|
17
|
+
extend(cache, event) {
|
|
18
|
+
this._toolbar = this.createToolbar(FlexToolbarExtension.template, 200, 30);
|
|
19
|
+
const displayTypeEl = this._toolbar.getById('displayType');
|
|
20
|
+
displayTypeEl.onchange = () => {
|
|
21
|
+
this.extendedItem.updateStyleInSheetOrLocal('display', displayTypeEl.value);
|
|
22
|
+
};
|
|
23
|
+
this.refresh(cache, event);
|
|
24
|
+
}
|
|
25
|
+
refresh(cache, event) {
|
|
26
|
+
if (event) {
|
|
27
|
+
const pos = this.designerCanvas.getNormalizedEventCoordinates(event);
|
|
28
|
+
this._toolbar.updatePosition({ x: (pos.x - 16), y: (pos.y - 36) });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
dispose() {
|
|
32
|
+
this._removeAllOverlays();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IDesignerExtensionProvider } from '../IDesignerExtensionProvider.js';
|
|
2
|
+
import { IDesignItem } from '../../../../item/IDesignItem.js';
|
|
3
|
+
import { IDesignerCanvas } from '../../IDesignerCanvas.js';
|
|
4
|
+
import { IDesignerExtension } from '../IDesignerExtension.js';
|
|
5
|
+
import { IExtensionManager } from '../IExtensionManger.js';
|
|
6
|
+
export declare class GridToolbarExtensionProvider implements IDesignerExtensionProvider {
|
|
7
|
+
shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
8
|
+
getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
9
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FlexToolbarExtension } from './FlexToolbarExtension.js';
|
|
2
|
+
import { NodeType } from '../../../../item/NodeType.js';
|
|
3
|
+
export class GridToolbarExtensionProvider {
|
|
4
|
+
shouldExtend(extensionManager, designerView, designItem) {
|
|
5
|
+
if (designItem.nodeType === NodeType.Element && getComputedStyle(designItem.element).display === 'grid')
|
|
6
|
+
return true;
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
getExtension(extensionManager, designerView, designItem) {
|
|
10
|
+
return new FlexToolbarExtension(extensionManager, designerView, designItem);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { gridExtensionShowOverlayOptionName } from "../grid/DisplayGridExtensionProvider.js";
|
|
2
|
+
import { AbstractDesignViewConfigButton } from "./AbstractDesignViewConfigButton.js";
|
|
3
|
+
export class GridExtensionDesignViewConfigButtons extends AbstractDesignViewConfigButton {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(gridExtensionShowOverlayOptionName, "G", "show grid overlay");
|
|
6
|
+
}
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { basicStackedToolbarExtensionOverlayOptionName } from "../BasicStackedToolbarExtension.js";
|
|
2
|
+
import { AbstractDesignViewConfigButton } from "./AbstractDesignViewConfigButton.js";
|
|
3
|
+
export class ToolbarExtensionsDesignViewConfigButtons extends AbstractDesignViewConfigButton {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(basicStackedToolbarExtensionOverlayOptionName, "T", "show Toolbars");
|
|
6
|
+
}
|
|
7
|
+
}
|
package/dist/elements/widgets/designerView/extensions/flex/FlexToolbarExtensionProvider.d.ts
CHANGED
|
@@ -4,6 +4,6 @@ import { IDesignerCanvas } from '../../IDesignerCanvas.js';
|
|
|
4
4
|
import { IDesignerExtension } from '../IDesignerExtension.js';
|
|
5
5
|
import { IExtensionManager } from '../IExtensionManger.js';
|
|
6
6
|
export declare class FlexToolbarExtensionProvider implements IDesignerExtensionProvider {
|
|
7
|
-
shouldExtend(extensionManager: IExtensionManager,
|
|
7
|
+
shouldExtend(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
8
8
|
getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
9
9
|
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { FlexToolbarExtension } from './FlexToolbarExtension.js';
|
|
2
2
|
import { NodeType } from '../../../../item/NodeType.js';
|
|
3
|
+
import { basicStackedToolbarExtensionOverlayOptionName } from '../BasicStackedToolbarExtension.js';
|
|
3
4
|
export class FlexToolbarExtensionProvider {
|
|
4
|
-
shouldExtend(extensionManager,
|
|
5
|
+
shouldExtend(extensionManager, designerCanvas, designItem) {
|
|
5
6
|
if (designItem.nodeType === NodeType.Element) {
|
|
6
7
|
const d = getComputedStyle(designItem.element).display;
|
|
7
|
-
|
|
8
|
+
if (d === 'flex' || d === 'inline-flex')
|
|
9
|
+
return designerCanvas.instanceServiceContainer.designContext.extensionOptions[basicStackedToolbarExtensionOverlayOptionName] !== false;
|
|
8
10
|
}
|
|
9
11
|
return false;
|
|
10
12
|
}
|