@node-projects/web-component-designer 0.0.252 → 0.0.254
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/item/DesignItem.d.ts +2 -0
- package/dist/elements/item/DesignItem.js +14 -3
- package/dist/elements/item/IDesignItem.d.ts +2 -0
- package/dist/elements/services/DefaultServiceBootstrap.js +12 -9
- package/dist/elements/services/dragDropService/DragDropService.js +6 -6
- package/dist/elements/services/placementService/DefaultPlacementService.d.ts +1 -1
- package/dist/elements/services/placementService/DefaultPlacementService.js +4 -6
- package/dist/elements/services/placementService/FlexBoxPlacementService.d.ts +4 -2
- package/dist/elements/services/placementService/FlexBoxPlacementService.js +8 -4
- package/dist/elements/services/placementService/GridPlacementService.d.ts +4 -2
- package/dist/elements/services/placementService/GridPlacementService.js +8 -4
- package/dist/elements/services/placementService/IPlacementService.d.ts +1 -1
- package/dist/elements/services/propertiesService/DefaultEditorTypesService.js +5 -0
- package/dist/elements/services/propertiesService/PropertyTabsService.d.ts +8 -0
- package/dist/elements/services/propertiesService/PropertyTabsService.js +14 -2
- package/dist/elements/services/propertiesService/propertyEditors/GridAssignedRowColumnPropertyEditor.d.ts +8 -0
- package/dist/elements/services/propertiesService/propertyEditors/GridAssignedRowColumnPropertyEditor.js +44 -0
- package/dist/elements/services/propertiesService/propertyEditors/GridRowColumnPropertyEditor.d.ts +10 -0
- package/dist/elements/services/propertiesService/propertyEditors/GridRowColumnPropertyEditor.js +25 -0
- package/dist/elements/services/propertiesService/propertyEditors/JsonPropertyEditor copy.d.ts +9 -0
- package/dist/elements/services/propertiesService/propertyEditors/JsonPropertyEditor copy.js +21 -0
- package/dist/elements/services/propertiesService/services/CssProperties.json +4 -1
- package/dist/elements/services/propertiesService/services/CssPropertiesService.d.ts +3 -1
- package/dist/elements/services/propertiesService/services/CssPropertiesService.js +12 -1
- package/dist/elements/services/selectionService/SelectionService.js +1 -1
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.js +1 -0
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +9 -1
- package/dist/elements/widgets/designerView/extensions/ExtensionType.d.ts +10 -3
- package/dist/elements/widgets/designerView/extensions/ExtensionType.js +9 -2
- package/dist/elements/widgets/designerView/tools/PointerTool.js +5 -5
- package/dist/elements/widgets/propertyGrid/PropertyGrid.js +37 -35
- package/package.json +3 -3
|
@@ -8,6 +8,7 @@ import { IDesignerExtension } from '../widgets/designerView/extensions/IDesigner
|
|
|
8
8
|
import { ISize } from '../../interfaces/ISize.js';
|
|
9
9
|
import { IDesignerExtensionProvider } from '../widgets/designerView/extensions/IDesignerExtensionProvider.js';
|
|
10
10
|
import { IStyleRule } from '../services/stylesheetService/IStylesheetService.js';
|
|
11
|
+
import { IPlacementService } from '../services/placementService/IPlacementService.js';
|
|
11
12
|
export declare class DesignItem implements IDesignItem {
|
|
12
13
|
lastContainerSize: ISize;
|
|
13
14
|
parsedNode: any;
|
|
@@ -85,4 +86,5 @@ export declare class DesignItem implements IDesignItem {
|
|
|
85
86
|
_insertChildInternal(designItem: IDesignItem, index?: number): void;
|
|
86
87
|
_removeChildInternal(designItem: IDesignItem): void;
|
|
87
88
|
_refreshIfStyleSheet(): void;
|
|
89
|
+
getPlacementService(style?: CSSStyleDeclaration): IPlacementService;
|
|
88
90
|
}
|
|
@@ -422,8 +422,10 @@ export class DesignItem {
|
|
|
422
422
|
}
|
|
423
423
|
// Internal implementations wich don't use undo/redo
|
|
424
424
|
_insertChildInternal(designItem, index) {
|
|
425
|
-
if (designItem.parent && this.instanceServiceContainer.selectionService.primarySelection == designItem)
|
|
425
|
+
if (designItem.parent && this.instanceServiceContainer.selectionService.primarySelection == designItem) {
|
|
426
426
|
designItem.instanceServiceContainer.designerCanvas.extensionManager.removeExtension(designItem.parent, ExtensionType.PrimarySelectionContainer);
|
|
427
|
+
designItem.instanceServiceContainer.designerCanvas.extensionManager.removeExtension(designItem.parent, ExtensionType.PrimarySelectionContainerAndCanBeEntered);
|
|
428
|
+
}
|
|
427
429
|
if (designItem.parent) {
|
|
428
430
|
designItem.parent._removeChildInternal(designItem);
|
|
429
431
|
}
|
|
@@ -438,13 +440,18 @@ export class DesignItem {
|
|
|
438
440
|
}
|
|
439
441
|
designItem._parent = this;
|
|
440
442
|
//todo: is this still needed???
|
|
441
|
-
if (this.instanceServiceContainer.selectionService.primarySelection == designItem)
|
|
443
|
+
if (this.instanceServiceContainer.selectionService.primarySelection == designItem) {
|
|
442
444
|
designItem.instanceServiceContainer.designerCanvas.extensionManager.applyExtension(designItem.parent, ExtensionType.PrimarySelectionContainer);
|
|
445
|
+
if (designItem.getPlacementService().isEnterableContainer(this))
|
|
446
|
+
designItem.instanceServiceContainer.designerCanvas.extensionManager.applyExtension(designItem.parent, ExtensionType.PrimarySelectionContainerAndCanBeEntered);
|
|
447
|
+
}
|
|
443
448
|
this._refreshIfStyleSheet();
|
|
444
449
|
}
|
|
445
450
|
_removeChildInternal(designItem) {
|
|
446
|
-
if (designItem.parent && this.instanceServiceContainer.selectionService.primarySelection == designItem)
|
|
451
|
+
if (designItem.parent && this.instanceServiceContainer.selectionService.primarySelection == designItem) {
|
|
447
452
|
designItem.instanceServiceContainer.designerCanvas.extensionManager.removeExtension(designItem.parent, ExtensionType.PrimarySelectionContainer);
|
|
453
|
+
designItem.instanceServiceContainer.designerCanvas.extensionManager.removeExtension(designItem.parent, ExtensionType.PrimarySelectionAndCanBeEntered);
|
|
454
|
+
}
|
|
448
455
|
designItem.instanceServiceContainer.designerCanvas.extensionManager.removeExtensions([designItem], true);
|
|
449
456
|
const index = this._childArray.indexOf(designItem);
|
|
450
457
|
if (index > -1) {
|
|
@@ -465,4 +472,8 @@ export class DesignItem {
|
|
|
465
472
|
else if (this.name == 'link') {
|
|
466
473
|
}
|
|
467
474
|
}
|
|
475
|
+
getPlacementService(style) {
|
|
476
|
+
style ??= getComputedStyle(this.element);
|
|
477
|
+
return this.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(this, style));
|
|
478
|
+
}
|
|
468
479
|
}
|
|
@@ -7,6 +7,7 @@ import { IDesignerExtension } from '../widgets/designerView/extensions/IDesigner
|
|
|
7
7
|
import { ISize } from "../../interfaces/ISize.js";
|
|
8
8
|
import { IDesignerExtensionProvider } from '../widgets/designerView/extensions/IDesignerExtensionProvider.js';
|
|
9
9
|
import { IStyleRule } from '../services/stylesheetService/IStylesheetService.js';
|
|
10
|
+
import { IPlacementService } from '../services/placementService/IPlacementService.js';
|
|
10
11
|
export interface IDesignItem {
|
|
11
12
|
lastContainerSize: ISize;
|
|
12
13
|
replaceNode(newNode: Node): any;
|
|
@@ -67,4 +68,5 @@ export interface IDesignItem {
|
|
|
67
68
|
hideAtDesignTime: boolean;
|
|
68
69
|
hideAtRunTime: boolean;
|
|
69
70
|
lockAtDesignTime: boolean;
|
|
71
|
+
getPlacementService(style?: CSSStyleDeclaration): IPlacementService;
|
|
70
72
|
}
|
|
@@ -85,6 +85,10 @@ import { MultipleSelectionRectExtensionProvider } from '../widgets/designerView/
|
|
|
85
85
|
import { DragDropService } from './dragDropService/DragDropService.js';
|
|
86
86
|
export function createDefaultServiceContainer() {
|
|
87
87
|
let serviceContainer = new ServiceContainer();
|
|
88
|
+
let defaultPlacementService = new DefaultPlacementService();
|
|
89
|
+
serviceContainer.register("containerService", defaultPlacementService);
|
|
90
|
+
serviceContainer.register("containerService", new GridPlacementService(defaultPlacementService));
|
|
91
|
+
serviceContainer.register("containerService", new FlexBoxPlacementService(defaultPlacementService));
|
|
88
92
|
serviceContainer.register("propertyService", new PolymerPropertiesService());
|
|
89
93
|
serviceContainer.register("propertyService", new LitElementPropertiesService());
|
|
90
94
|
serviceContainer.register("propertyService", new NativeElementsPropertiesService());
|
|
@@ -95,9 +99,6 @@ export function createDefaultServiceContainer() {
|
|
|
95
99
|
serviceContainer.register("instanceService", new DefaultInstanceService());
|
|
96
100
|
serviceContainer.register("editorTypesService", new DefaultEditorTypesService());
|
|
97
101
|
serviceContainer.register("htmlWriterService", new HtmlWriterService());
|
|
98
|
-
serviceContainer.register("containerService", new DefaultPlacementService());
|
|
99
|
-
serviceContainer.register("containerService", new GridPlacementService());
|
|
100
|
-
serviceContainer.register("containerService", new FlexBoxPlacementService());
|
|
101
102
|
serviceContainer.register("snaplinesProviderService", new SnaplinesProviderService());
|
|
102
103
|
serviceContainer.register("htmlParserService", new DefaultHtmlParserService());
|
|
103
104
|
serviceContainer.register("elementAtPointService", new ElementAtPointService());
|
|
@@ -118,9 +119,6 @@ export function createDefaultServiceContainer() {
|
|
|
118
119
|
]);
|
|
119
120
|
serviceContainer.designerExtensions.set(ExtensionType.PrimarySelection, [
|
|
120
121
|
new ElementDragTitleExtensionProvider(),
|
|
121
|
-
new DisplayGridExtensionProvider(),
|
|
122
|
-
new EditGridColumnRowSizesExtensionProvider(),
|
|
123
|
-
new FlexboxExtensionProvider(),
|
|
124
122
|
new TransformOriginExtensionProvider(),
|
|
125
123
|
new CanvasExtensionProvider(),
|
|
126
124
|
new PositionExtensionProvider(),
|
|
@@ -132,10 +130,15 @@ export function createDefaultServiceContainer() {
|
|
|
132
130
|
new RotateExtensionProvider(),
|
|
133
131
|
new MultipleSelectionRectExtensionProvider(),
|
|
134
132
|
]);
|
|
133
|
+
serviceContainer.designerExtensions.set(ExtensionType.PrimarySelectionAndCanBeEntered, [
|
|
134
|
+
new DisplayGridExtensionProvider(),
|
|
135
|
+
new EditGridColumnRowSizesExtensionProvider(),
|
|
136
|
+
new FlexboxExtensionProvider(),
|
|
137
|
+
]);
|
|
135
138
|
serviceContainer.designerExtensions.set(ExtensionType.Selection, [
|
|
136
139
|
new SelectionDefaultExtensionProvider()
|
|
137
140
|
]);
|
|
138
|
-
serviceContainer.designerExtensions.set(ExtensionType.
|
|
141
|
+
serviceContainer.designerExtensions.set(ExtensionType.PrimarySelectionContainerAndCanBeEntered, [
|
|
139
142
|
new DisplayGridExtensionProvider(),
|
|
140
143
|
new EditGridColumnRowSizesExtensionProvider(),
|
|
141
144
|
new FlexboxExtensionProvider()
|
|
@@ -149,11 +152,11 @@ export function createDefaultServiceContainer() {
|
|
|
149
152
|
serviceContainer.designerExtensions.set(ExtensionType.ContainerDrag, [
|
|
150
153
|
new GrayOutExtensionProvider()
|
|
151
154
|
]);
|
|
152
|
-
serviceContainer.designerExtensions.set(ExtensionType.
|
|
155
|
+
serviceContainer.designerExtensions.set(ExtensionType.ContainerDragOverAndCanBeEntered, [
|
|
153
156
|
new ApplyFirstMachingExtensionProvider(new DisplayGridExtensionProvider(), new GrayOutDragOverContainerExtensionProvider()),
|
|
154
157
|
new AltToEnterContainerExtensionProvider()
|
|
155
158
|
]);
|
|
156
|
-
serviceContainer.designerExtensions.set(ExtensionType.
|
|
159
|
+
serviceContainer.designerExtensions.set(ExtensionType.ContainerExternalDragOverAndCanBeEntered, [
|
|
157
160
|
new ApplyFirstMachingExtensionProvider(new DisplayGridExtensionProvider(), new GrayOutDragOverContainerExtensionProvider()),
|
|
158
161
|
]);
|
|
159
162
|
serviceContainer.designerExtensions.set(ExtensionType.Doubleclick, [
|
|
@@ -10,28 +10,28 @@ export class DragDropService {
|
|
|
10
10
|
}
|
|
11
11
|
dragLeave(designerCanvas, event) {
|
|
12
12
|
if (this._dragOverExtensionItem) {
|
|
13
|
-
designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.
|
|
13
|
+
designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerExternalDragOverAndCanBeEntered);
|
|
14
14
|
this._dragOverExtensionItem = null;
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
dragOver(designerCanvas, event) {
|
|
18
18
|
let [newContainer] = this.getPossibleContainerForDragDrop(designerCanvas, event);
|
|
19
19
|
if (this._dragOverExtensionItem != newContainer) {
|
|
20
|
-
designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.
|
|
21
|
-
designerCanvas.extensionManager.applyExtension(newContainer, ExtensionType.
|
|
20
|
+
designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerExternalDragOverAndCanBeEntered);
|
|
21
|
+
designerCanvas.extensionManager.applyExtension(newContainer, ExtensionType.ContainerExternalDragOverAndCanBeEntered, event);
|
|
22
22
|
this._dragOverExtensionItem = newContainer;
|
|
23
23
|
}
|
|
24
24
|
else {
|
|
25
25
|
if (event.x != this._oldX && event.y != this._oldY) {
|
|
26
26
|
this._oldX = event.x;
|
|
27
27
|
this._oldY = event.y;
|
|
28
|
-
designerCanvas.extensionManager.refreshExtension(newContainer, ExtensionType.
|
|
28
|
+
designerCanvas.extensionManager.refreshExtension(newContainer, ExtensionType.ContainerExternalDragOverAndCanBeEntered, event);
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
async drop(designerCanvas, event) {
|
|
33
33
|
if (this._dragOverExtensionItem) {
|
|
34
|
-
designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.
|
|
34
|
+
designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerExternalDragOverAndCanBeEntered);
|
|
35
35
|
this._dragOverExtensionItem = null;
|
|
36
36
|
}
|
|
37
37
|
let [newContainer] = this.getPossibleContainerForDragDrop(designerCanvas, event);
|
|
@@ -76,7 +76,7 @@ export class DragDropService {
|
|
|
76
76
|
newContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
|
|
77
77
|
if (newContainerService) {
|
|
78
78
|
//TODO: Maybe the check for SVG Elemnt should be in "canEnterByDrop"?
|
|
79
|
-
if (newContainerService.
|
|
79
|
+
if (newContainerService.isEnterableContainer(newContainerElementDesignItem) && !(newContainerElementDesignItem.element instanceof SVGElement)) {
|
|
80
80
|
break;
|
|
81
81
|
}
|
|
82
82
|
else {
|
|
@@ -4,8 +4,8 @@ import type { IDesignItem } from '../../item/IDesignItem.js';
|
|
|
4
4
|
import { IPlacementView } from '../../widgets/designerView/IPlacementView.js';
|
|
5
5
|
export declare class DefaultPlacementService implements IPlacementService {
|
|
6
6
|
serviceForContainer(container: IDesignItem, containerStyle: CSSStyleDeclaration): boolean;
|
|
7
|
+
isEnterableContainer(container: IDesignItem): boolean;
|
|
7
8
|
canEnter(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
8
|
-
canEnterByDrop(container: IDesignItem): boolean;
|
|
9
9
|
canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
10
10
|
getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
|
|
11
11
|
private calculateTrack;
|
|
@@ -10,19 +10,17 @@ export class DefaultPlacementService {
|
|
|
10
10
|
return false;
|
|
11
11
|
return true;
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
isEnterableContainer(container) {
|
|
14
14
|
if (DomConverter.IsSelfClosingElement(container.element.localName))
|
|
15
15
|
return false;
|
|
16
16
|
if (container.element.shadowRoot && container.element.shadowRoot.querySelector('slot') == null)
|
|
17
17
|
return false;
|
|
18
|
-
if (!items.every(x => !x.element.contains(container.element)))
|
|
19
|
-
return false;
|
|
20
18
|
return true;
|
|
21
19
|
}
|
|
22
|
-
|
|
23
|
-
if (
|
|
20
|
+
canEnter(container, items) {
|
|
21
|
+
if (!this.isEnterableContainer(container))
|
|
24
22
|
return false;
|
|
25
|
-
if (
|
|
23
|
+
if (!items.every(x => !x.element.contains(container.element)))
|
|
26
24
|
return false;
|
|
27
25
|
return true;
|
|
28
26
|
}
|
|
@@ -3,11 +3,13 @@ import { IDesignItem } from '../../item/IDesignItem.js';
|
|
|
3
3
|
import { IPlacementView } from '../../widgets/designerView/IPlacementView.js';
|
|
4
4
|
import { IPlacementService } from './IPlacementService.js';
|
|
5
5
|
export declare class FlexBoxPlacementService implements IPlacementService {
|
|
6
|
+
private _basePlacementService;
|
|
7
|
+
constructor(basePlacementService: IPlacementService);
|
|
6
8
|
enterContainer(container: IDesignItem, items: IDesignItem[]): void;
|
|
7
9
|
leaveContainer(container: IDesignItem, items: IDesignItem[]): void;
|
|
8
10
|
serviceForContainer(container: IDesignItem, containerStyle: CSSStyleDeclaration): boolean;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
isEnterableContainer(container: IDesignItem): any;
|
|
12
|
+
canEnter(container: IDesignItem, items: IDesignItem[]): any;
|
|
11
13
|
canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
12
14
|
getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
|
|
13
15
|
placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { DefaultPlacementService } from './DefaultPlacementService.js';
|
|
2
2
|
export class FlexBoxPlacementService {
|
|
3
|
+
_basePlacementService;
|
|
4
|
+
constructor(basePlacementService) {
|
|
5
|
+
this._basePlacementService = basePlacementService ?? new DefaultPlacementService();
|
|
6
|
+
}
|
|
3
7
|
enterContainer(container, items) {
|
|
4
8
|
for (let i of items) {
|
|
5
9
|
i.removeStyle("position");
|
|
@@ -22,11 +26,11 @@ export class FlexBoxPlacementService {
|
|
|
22
26
|
return true;
|
|
23
27
|
return false;
|
|
24
28
|
}
|
|
25
|
-
|
|
26
|
-
return
|
|
29
|
+
isEnterableContainer(container) {
|
|
30
|
+
return this._basePlacementService.isEnterableContainer(container);
|
|
27
31
|
}
|
|
28
|
-
|
|
29
|
-
return
|
|
32
|
+
canEnter(container, items) {
|
|
33
|
+
return this._basePlacementService.canEnter(container, items);
|
|
30
34
|
}
|
|
31
35
|
canLeave(container, items) {
|
|
32
36
|
return true;
|
|
@@ -3,11 +3,13 @@ import type { IPlacementService } from './IPlacementService.js';
|
|
|
3
3
|
import type { IDesignItem } from '../../item/IDesignItem.js';
|
|
4
4
|
import { IPlacementView } from '../../widgets/designerView/IPlacementView.js';
|
|
5
5
|
export declare class GridPlacementService implements IPlacementService {
|
|
6
|
+
private _basePlacementService;
|
|
7
|
+
constructor(basePlacementService: IPlacementService);
|
|
6
8
|
enterContainer(container: IDesignItem, items: IDesignItem[]): void;
|
|
7
9
|
leaveContainer(container: IDesignItem, items: IDesignItem[]): void;
|
|
8
10
|
serviceForContainer(container: IDesignItem, containerStyle: CSSStyleDeclaration): boolean;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
isEnterableContainer(container: IDesignItem): any;
|
|
12
|
+
canEnter(container: IDesignItem, items: IDesignItem[]): any;
|
|
11
13
|
canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
12
14
|
getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
|
|
13
15
|
placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
|
|
@@ -2,6 +2,10 @@ import { CalculateGridInformation } from '../../helper/GridHelper.js';
|
|
|
2
2
|
import { pointInRect } from '../../helper/Helper.js';
|
|
3
3
|
import { DefaultPlacementService } from './DefaultPlacementService.js';
|
|
4
4
|
export class GridPlacementService {
|
|
5
|
+
_basePlacementService;
|
|
6
|
+
constructor(basePlacementService) {
|
|
7
|
+
this._basePlacementService = basePlacementService ?? new DefaultPlacementService();
|
|
8
|
+
}
|
|
5
9
|
enterContainer(container, items) {
|
|
6
10
|
for (let i of items) {
|
|
7
11
|
i.removeStyle("position");
|
|
@@ -26,11 +30,11 @@ export class GridPlacementService {
|
|
|
26
30
|
return true;
|
|
27
31
|
return false;
|
|
28
32
|
}
|
|
29
|
-
|
|
30
|
-
return
|
|
33
|
+
isEnterableContainer(container) {
|
|
34
|
+
return this._basePlacementService.isEnterableContainer(container);
|
|
31
35
|
}
|
|
32
|
-
|
|
33
|
-
return
|
|
36
|
+
canEnter(container, items) {
|
|
37
|
+
return this._basePlacementService.canEnter(container, items);
|
|
34
38
|
}
|
|
35
39
|
canLeave(container, items) {
|
|
36
40
|
return true;
|
|
@@ -4,7 +4,7 @@ import { IPlacementView } from '../../widgets/designerView/IPlacementView.js';
|
|
|
4
4
|
import { IPoint } from '../../../interfaces/IPoint.js';
|
|
5
5
|
export interface IPlacementService extends IService {
|
|
6
6
|
serviceForContainer(container: IDesignItem, containerStyle: CSSStyleDeclaration): boolean;
|
|
7
|
-
|
|
7
|
+
isEnterableContainer(container: IDesignItem): boolean;
|
|
8
8
|
canEnter(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
9
9
|
canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
10
10
|
enterContainer(container: IDesignItem, items: IDesignItem[]): any;
|
|
@@ -8,6 +8,7 @@ import { BooleanPropertyEditor } from './propertyEditors/BooleanPropertyEditor.j
|
|
|
8
8
|
import { ImageButtonListPropertyEditor } from './propertyEditors/ImageButtonListPropertyEditor.js';
|
|
9
9
|
import { ThicknessPropertyEditor } from "./propertyEditors/ThicknessPropertyEditor.js";
|
|
10
10
|
import { MetricsPropertyEditor } from './propertyEditors/MetricsPropertyEditor.js';
|
|
11
|
+
import { GridAssignedRowColumnPropertyEditor } from './propertyEditors/GridAssignedRowColumnPropertyEditor.js';
|
|
11
12
|
export class DefaultEditorTypesService {
|
|
12
13
|
getEditorForProperty(property) {
|
|
13
14
|
if (property.createEditor)
|
|
@@ -53,6 +54,10 @@ export class DefaultEditorTypesService {
|
|
|
53
54
|
{
|
|
54
55
|
return new MetricsPropertyEditor(property);
|
|
55
56
|
}
|
|
57
|
+
case "assigned-row-column":
|
|
58
|
+
{
|
|
59
|
+
return new GridAssignedRowColumnPropertyEditor(property);
|
|
60
|
+
}
|
|
56
61
|
case "css-length":
|
|
57
62
|
case "string":
|
|
58
63
|
default:
|
|
@@ -10,6 +10,14 @@ export declare class PropertyTabsService implements IPropertyTabsService {
|
|
|
10
10
|
name: string;
|
|
11
11
|
propertiesService: IPropertiesService;
|
|
12
12
|
}[];
|
|
13
|
+
protected _gridChild: {
|
|
14
|
+
name: string;
|
|
15
|
+
propertiesService: IPropertiesService;
|
|
16
|
+
}[];
|
|
17
|
+
protected _flexChild: {
|
|
18
|
+
name: string;
|
|
19
|
+
propertiesService: IPropertiesService;
|
|
20
|
+
}[];
|
|
13
21
|
getPropertygroups(designItems: IDesignItem[]): {
|
|
14
22
|
name: string;
|
|
15
23
|
propertiesService: IPropertiesService;
|
|
@@ -19,13 +19,25 @@ export class PropertyTabsService {
|
|
|
19
19
|
{ name: 'layout', propertiesService: new CssPropertiesService("layout") },
|
|
20
20
|
{ name: 'svg', propertiesService: new CssPropertiesService("svg") },
|
|
21
21
|
];
|
|
22
|
+
_gridChild = [
|
|
23
|
+
{ name: 'gridChild', propertiesService: new CssPropertiesService("gridChild") },
|
|
24
|
+
];
|
|
25
|
+
_flexChild = [
|
|
26
|
+
{ name: 'flexChild', propertiesService: new CssPropertiesService("flexChild") },
|
|
27
|
+
];
|
|
22
28
|
getPropertygroups(designItems) {
|
|
23
29
|
if (designItems == null || designItems.length == 0)
|
|
24
30
|
return [];
|
|
25
31
|
this._pgList[0].propertiesService = designItems[0].serviceContainer.getLastServiceWhere('propertyService', x => x.isHandledElement(designItems[0]));
|
|
26
32
|
this._svgPgList[0].propertiesService = designItems[0].serviceContainer.getLastServiceWhere('propertyService', x => x.isHandledElement(designItems[0]));
|
|
33
|
+
let lst = this._pgList;
|
|
27
34
|
if (designItems[0].element instanceof SVGElement)
|
|
28
|
-
|
|
29
|
-
|
|
35
|
+
lst = this._svgPgList;
|
|
36
|
+
const parentStyle = getComputedStyle(designItems[0].element.parentElement);
|
|
37
|
+
if (parentStyle.display.includes('grid'))
|
|
38
|
+
lst = [...lst, this._gridChild[0]];
|
|
39
|
+
else if (parentStyle.display.includes('flex'))
|
|
40
|
+
lst = [...lst, this._flexChild[0]];
|
|
41
|
+
return lst;
|
|
30
42
|
}
|
|
31
43
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { IProperty } from '../IProperty.js';
|
|
2
|
+
import { BasePropertyEditor } from './BasePropertyEditor.js';
|
|
3
|
+
import { ValueType } from '../ValueType.js';
|
|
4
|
+
export declare class GridAssignedRowColumnPropertyEditor extends BasePropertyEditor<HTMLDivElement> {
|
|
5
|
+
_root: HTMLDivElement;
|
|
6
|
+
constructor(property: IProperty);
|
|
7
|
+
refreshValue(valueType: ValueType, value: any): void;
|
|
8
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { BasePropertyEditor } from './BasePropertyEditor.js';
|
|
2
|
+
export class GridAssignedRowColumnPropertyEditor extends BasePropertyEditor {
|
|
3
|
+
_root;
|
|
4
|
+
constructor(property) {
|
|
5
|
+
super(property);
|
|
6
|
+
this._root = document.createElement('div');
|
|
7
|
+
this._root.style.display = 'grid';
|
|
8
|
+
this._root.style.padding = '4px 0px';
|
|
9
|
+
this._root.style.boxSizing = 'border-box';
|
|
10
|
+
this._root.style.height = '50px';
|
|
11
|
+
this.element = this._root;
|
|
12
|
+
}
|
|
13
|
+
refreshValue(valueType, value) {
|
|
14
|
+
this._root.innerHTML = "";
|
|
15
|
+
if (this.designItems != null && this.designItems.length) {
|
|
16
|
+
let styleContainer = getComputedStyle(this.designItems[0].element.parentElement);
|
|
17
|
+
let style = getComputedStyle(this.designItems[0].element);
|
|
18
|
+
let cntCol = styleContainer.gridTemplateColumns.split(' ').length;
|
|
19
|
+
let cntRow = styleContainer.gridTemplateRows.split(' ').length;
|
|
20
|
+
this._root.style.gridTemplateColumns = 'repeat(' + cntCol + ', 1fr)';
|
|
21
|
+
this._root.style.gridTemplateRows = 'repeat(' + cntRow + ', 1fr)';
|
|
22
|
+
let rowStart = parseInt(style.gridRowStart);
|
|
23
|
+
let rowEnd = style.gridRowEnd == 'auto' ? rowStart : parseInt(style.gridRowEnd);
|
|
24
|
+
rowEnd = rowEnd <= rowStart ? rowStart + 1 : rowEnd;
|
|
25
|
+
let colStart = parseInt(style.gridColumnStart);
|
|
26
|
+
let colEnd = style.gridColumnEnd == 'auto' ? colStart : parseInt(style.gridColumnEnd);
|
|
27
|
+
colEnd = colEnd <= colStart ? colStart + 1 : colEnd;
|
|
28
|
+
for (let p = 1; p <= cntRow; p++) {
|
|
29
|
+
for (let n = 1; n <= cntCol; n++) {
|
|
30
|
+
const b = document.createElement('button');
|
|
31
|
+
b.onclick = () => {
|
|
32
|
+
let grp = this.designItems[0].openGroup('Change grid row/column');
|
|
33
|
+
this.designItems[0].setStyle("grid-row", p + ' / ' + (p + 1));
|
|
34
|
+
this.designItems[0].setStyle("grid-column", n + ' / ' + (n + 1));
|
|
35
|
+
grp.commit();
|
|
36
|
+
};
|
|
37
|
+
if (p >= rowStart && p < rowEnd && n >= colStart && n < colEnd)
|
|
38
|
+
b.style.backgroundColor = 'coral';
|
|
39
|
+
this._root.appendChild(b);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
package/dist/elements/services/propertiesService/propertyEditors/GridRowColumnPropertyEditor.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IProperty } from '../IProperty.js';
|
|
2
|
+
import { BasePropertyEditor } from './BasePropertyEditor.js';
|
|
3
|
+
import { ValueType } from '../ValueType.js';
|
|
4
|
+
import { IDesignItem } from '../../../item/IDesignItem.js';
|
|
5
|
+
export declare class GridRowColumnPropertyEditor extends BasePropertyEditor<HTMLDivElement> {
|
|
6
|
+
_root: HTMLDivElement;
|
|
7
|
+
constructor(property: IProperty);
|
|
8
|
+
refreshValue(valueType: ValueType, value: any): void;
|
|
9
|
+
designItemsChanged(designItems: IDesignItem[]): void;
|
|
10
|
+
}
|
package/dist/elements/services/propertiesService/propertyEditors/GridRowColumnPropertyEditor.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { BasePropertyEditor } from './BasePropertyEditor.js';
|
|
2
|
+
export class GridRowColumnPropertyEditor extends BasePropertyEditor {
|
|
3
|
+
_root;
|
|
4
|
+
constructor(property) {
|
|
5
|
+
super(property);
|
|
6
|
+
this._root = document.createElement('div');
|
|
7
|
+
this.element = this._root;
|
|
8
|
+
}
|
|
9
|
+
refreshValue(valueType, value) {
|
|
10
|
+
}
|
|
11
|
+
designItemsChanged(designItems) {
|
|
12
|
+
super.designItemsChanged(designItems);
|
|
13
|
+
this._root.innerHTML == "";
|
|
14
|
+
if (this.designItems != null && this.designItems.length) {
|
|
15
|
+
let style = getComputedStyle(this.designItems[0].element);
|
|
16
|
+
let cntCol = style.gridTemplateColumns.split(' ').length;
|
|
17
|
+
let cntRow = style.gridTemplateRows.split(' ').length;
|
|
18
|
+
this._root.style.gridTemplateColumns = 'repeat(' + cntCol + ', 1fr)';
|
|
19
|
+
this._root.style.gridTemplateRows = 'repeat(' + cntRow + ', 1fr)';
|
|
20
|
+
for (let n = 0; n < cntCol * cntRow; n++) {
|
|
21
|
+
this._root.appendChild(document.createElement('button'));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IProperty } from '../IProperty.js';
|
|
2
|
+
import { BasePropertyEditor } from './BasePropertyEditor.js';
|
|
3
|
+
import { ValueType } from '../ValueType.js';
|
|
4
|
+
export declare class JsonPropertyEditor extends BasePropertyEditor<HTMLDivElement> {
|
|
5
|
+
static template: HTMLTemplateElement;
|
|
6
|
+
_input: HTMLInputElement;
|
|
7
|
+
constructor(property: IProperty);
|
|
8
|
+
refreshValue(valueType: ValueType, value: any): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { BasePropertyEditor } from './BasePropertyEditor.js';
|
|
2
|
+
import { html } from '@node-projects/base-custom-webcomponent';
|
|
3
|
+
export class JsonPropertyEditor extends BasePropertyEditor {
|
|
4
|
+
static template = html `
|
|
5
|
+
<div style="display: flex;">
|
|
6
|
+
<input id="input" type="text">
|
|
7
|
+
<button style="width: 30px;">...</button>
|
|
8
|
+
</div>
|
|
9
|
+
`;
|
|
10
|
+
_input;
|
|
11
|
+
constructor(property) {
|
|
12
|
+
super(property);
|
|
13
|
+
let el = JsonPropertyEditor.template.content.cloneNode(true);
|
|
14
|
+
this._input = el.getElementById('input');
|
|
15
|
+
this._input.onchange = (e) => this._valueChanged(this._input.value);
|
|
16
|
+
this.element = el;
|
|
17
|
+
}
|
|
18
|
+
refreshValue(valueType, value) {
|
|
19
|
+
this._input.value = value;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -8,9 +8,11 @@ export declare class CssPropertiesService extends CommonPropertiesService {
|
|
|
8
8
|
getRefreshMode(designItem: IDesignItem): RefreshMode;
|
|
9
9
|
layout: string[];
|
|
10
10
|
grid: string[];
|
|
11
|
+
gridChild: string[];
|
|
11
12
|
flex: string[];
|
|
13
|
+
flexChild: string[];
|
|
12
14
|
svg: string[];
|
|
13
|
-
constructor(name: 'layout' | 'grid' | 'flex' | 'svg');
|
|
15
|
+
constructor(name: 'layout' | 'grid' | 'gridChild' | 'flex' | 'flexChild' | 'svg');
|
|
14
16
|
isHandledElement(designItem: IDesignItem): boolean;
|
|
15
17
|
getProperty(designItem: IDesignItem, name: string): IProperty;
|
|
16
18
|
getProperties(designItem: IDesignItem): IProperty[] | IPropertyGroup[];
|
|
@@ -48,7 +48,14 @@ export class CssPropertiesService extends CommonPropertiesService {
|
|
|
48
48
|
"align-content",
|
|
49
49
|
"justify-content",
|
|
50
50
|
"align-items",
|
|
51
|
-
"justify-items"
|
|
51
|
+
"justify-items",
|
|
52
|
+
];
|
|
53
|
+
gridChild = [
|
|
54
|
+
"grid-row",
|
|
55
|
+
"grid-column",
|
|
56
|
+
"assigned-row-column",
|
|
57
|
+
"align-self",
|
|
58
|
+
"justify-self"
|
|
52
59
|
];
|
|
53
60
|
flex = [
|
|
54
61
|
"display",
|
|
@@ -59,6 +66,10 @@ export class CssPropertiesService extends CommonPropertiesService {
|
|
|
59
66
|
"justify-content",
|
|
60
67
|
"align-items"
|
|
61
68
|
];
|
|
69
|
+
flexChild = [
|
|
70
|
+
"align-self",
|
|
71
|
+
"justify-self"
|
|
72
|
+
];
|
|
62
73
|
svg = [
|
|
63
74
|
"fill",
|
|
64
75
|
"fill-rule",
|
|
@@ -10,7 +10,7 @@ export class SelectionService {
|
|
|
10
10
|
this._undoSelectionChanges = undoSelectionChanges;
|
|
11
11
|
}
|
|
12
12
|
setSelectedElements(designItems) {
|
|
13
|
-
if (this.selectedElements != designItems) {
|
|
13
|
+
if (this.selectedElements != designItems && !(this.selectedElements.length === 0 && (designItems == null || designItems.length === 0))) {
|
|
14
14
|
if (this._undoSelectionChanges) {
|
|
15
15
|
const action = new SelectionChangedAction(this.selectedElements, designItems, this);
|
|
16
16
|
this._designerCanvas.instanceServiceContainer.undoService.execute(action);
|
|
@@ -27,6 +27,7 @@ export class EditTextExtension extends AbstractExtension {
|
|
|
27
27
|
//maybe use a html edit framework
|
|
28
28
|
this.extendedItem.instanceServiceContainer.selectionService.clearSelectedElements();
|
|
29
29
|
//this.extensionManager.removeExtension(this.extendedItem, ExtensionType.PrimarySelection);
|
|
30
|
+
//this.extensionManager.removeExtension(this.extendedItem, ExtensionType.PrimarySelectionAndCanBeEntered);
|
|
30
31
|
//this.extensionManager.removeExtension(this.extendedItem, ExtensionType.Selection);
|
|
31
32
|
this.extendedItem.element.setAttribute('contenteditable', '');
|
|
32
33
|
this.extendedItem.element.addEventListener('input', this._contentEditedBound);
|
|
@@ -32,15 +32,21 @@ export class ExtensionManager {
|
|
|
32
32
|
if (selectionChangedEvent.oldSelectedElements[0].parent) {
|
|
33
33
|
const primaryContainer = DesignItem.GetOrCreateDesignItem(selectionChangedEvent.oldSelectedElements[0].parent.element, selectionChangedEvent.oldSelectedElements[0].parent.element, this.designerCanvas.serviceContainer, this.designerCanvas.instanceServiceContainer);
|
|
34
34
|
this.removeExtension(primaryContainer, ExtensionType.PrimarySelectionContainer);
|
|
35
|
+
this.removeExtension(primaryContainer, ExtensionType.PrimarySelectionContainerAndCanBeEntered);
|
|
35
36
|
this.removeExtension(selectionChangedEvent.oldSelectedElements[0], ExtensionType.PrimarySelection);
|
|
37
|
+
this.removeExtension(selectionChangedEvent.oldSelectedElements[0], ExtensionType.PrimarySelectionAndCanBeEntered);
|
|
36
38
|
this.removeExtensions(selectionChangedEvent.oldSelectedElements, false, ExtensionType.Selection);
|
|
37
39
|
}
|
|
38
40
|
}
|
|
39
41
|
if (selectionChangedEvent.selectedElements && selectionChangedEvent.selectedElements.length) {
|
|
40
42
|
this.applyExtensions(selectionChangedEvent.selectedElements, ExtensionType.Selection);
|
|
41
43
|
this.applyExtension(selectionChangedEvent.selectedElements[0], ExtensionType.PrimarySelection);
|
|
44
|
+
if (selectionChangedEvent.selectedElements[0].getPlacementService().isEnterableContainer(selectionChangedEvent.selectedElements[0]))
|
|
45
|
+
this.applyExtension(selectionChangedEvent.selectedElements[0], ExtensionType.PrimarySelectionAndCanBeEntered);
|
|
42
46
|
const primaryContainer = DesignItem.GetOrCreateDesignItem(selectionChangedEvent.selectedElements[0].parent.element, selectionChangedEvent.selectedElements[0].parent.element, this.designerCanvas.serviceContainer, this.designerCanvas.instanceServiceContainer);
|
|
43
47
|
this.applyExtension(primaryContainer, ExtensionType.PrimarySelectionContainer);
|
|
48
|
+
if (primaryContainer.getPlacementService().isEnterableContainer(primaryContainer))
|
|
49
|
+
this.applyExtension(primaryContainer, ExtensionType.PrimarySelectionContainerAndCanBeEntered);
|
|
44
50
|
}
|
|
45
51
|
//this.refreshExtensions(selectionChangedEvent.selectedElements);
|
|
46
52
|
}
|
|
@@ -273,10 +279,12 @@ export class ExtensionManager {
|
|
|
273
279
|
this.refreshExtensions(designItems, ExtensionType.MouseOver, null, ignoredExtension);
|
|
274
280
|
this.refreshExtensions(designItems, ExtensionType.OnlyOneItemSelected, null, ignoredExtension);
|
|
275
281
|
this.refreshExtensions(designItems, ExtensionType.MultipleItemsSelected, null, ignoredExtension);
|
|
276
|
-
this.refreshExtensions(designItems, ExtensionType.
|
|
282
|
+
this.refreshExtensions(designItems, ExtensionType.ContainerDragOverAndCanBeEntered, null, ignoredExtension);
|
|
277
283
|
this.refreshExtensions(designItems, ExtensionType.ContainerDrag, null, ignoredExtension);
|
|
278
284
|
this.refreshExtensions(designItems, ExtensionType.Doubleclick, null, ignoredExtension);
|
|
279
285
|
this.refreshExtensions(designItems, ExtensionType.Placement, null, ignoredExtension);
|
|
286
|
+
this.refreshExtensions(designItems, ExtensionType.PrimarySelectionAndCanBeEntered, null, ignoredExtension);
|
|
287
|
+
this.refreshExtensions(designItems, ExtensionType.PrimarySelectionContainerAndCanBeEntered, null, ignoredExtension);
|
|
280
288
|
}
|
|
281
289
|
}
|
|
282
290
|
refreshAllAppliedExtentions() {
|
|
@@ -9,15 +9,22 @@ export declare enum ExtensionType {
|
|
|
9
9
|
/**
|
|
10
10
|
* Extension for the Container wich the dragged element is draged over.
|
|
11
11
|
*/
|
|
12
|
-
|
|
12
|
+
ContainerDragOverAndCanBeEntered = 8,
|
|
13
13
|
/**
|
|
14
14
|
* Extension for the Container on wich a new element is draged over.
|
|
15
15
|
*/
|
|
16
|
-
|
|
16
|
+
ContainerExternalDragOverAndCanBeEntered = 9,
|
|
17
17
|
/**
|
|
18
18
|
* Extension for the Current Container wich the dragged element is contained.
|
|
19
19
|
*/
|
|
20
20
|
ContainerDrag = 10,
|
|
21
21
|
Doubleclick = 11,
|
|
22
|
-
Placement = 12
|
|
22
|
+
Placement = 12,
|
|
23
|
+
/**
|
|
24
|
+
* Extensions only when the container can be Entered.
|
|
25
|
+
* So for Example on a custome webcomponent wich uses a grid layout for it's root, but can not show children,
|
|
26
|
+
* do not display grid extension.
|
|
27
|
+
*/
|
|
28
|
+
PrimarySelectionAndCanBeEntered = 13,
|
|
29
|
+
PrimarySelectionContainerAndCanBeEntered = 14
|
|
23
30
|
}
|
|
@@ -10,15 +10,22 @@ export var ExtensionType;
|
|
|
10
10
|
/**
|
|
11
11
|
* Extension for the Container wich the dragged element is draged over.
|
|
12
12
|
*/
|
|
13
|
-
ExtensionType[ExtensionType["
|
|
13
|
+
ExtensionType[ExtensionType["ContainerDragOverAndCanBeEntered"] = 8] = "ContainerDragOverAndCanBeEntered";
|
|
14
14
|
/**
|
|
15
15
|
* Extension for the Container on wich a new element is draged over.
|
|
16
16
|
*/
|
|
17
|
-
ExtensionType[ExtensionType["
|
|
17
|
+
ExtensionType[ExtensionType["ContainerExternalDragOverAndCanBeEntered"] = 9] = "ContainerExternalDragOverAndCanBeEntered";
|
|
18
18
|
/**
|
|
19
19
|
* Extension for the Current Container wich the dragged element is contained.
|
|
20
20
|
*/
|
|
21
21
|
ExtensionType[ExtensionType["ContainerDrag"] = 10] = "ContainerDrag";
|
|
22
22
|
ExtensionType[ExtensionType["Doubleclick"] = 11] = "Doubleclick";
|
|
23
23
|
ExtensionType[ExtensionType["Placement"] = 12] = "Placement";
|
|
24
|
+
/**
|
|
25
|
+
* Extensions only when the container can be Entered.
|
|
26
|
+
* So for Example on a custome webcomponent wich uses a grid layout for it's root, but can not show children,
|
|
27
|
+
* do not display grid extension.
|
|
28
|
+
*/
|
|
29
|
+
ExtensionType[ExtensionType["PrimarySelectionAndCanBeEntered"] = 13] = "PrimarySelectionAndCanBeEntered";
|
|
30
|
+
ExtensionType[ExtensionType["PrimarySelectionContainerAndCanBeEntered"] = 14] = "PrimarySelectionContainerAndCanBeEntered";
|
|
24
31
|
})(ExtensionType || (ExtensionType = {}));
|
|
@@ -249,17 +249,17 @@ export class PointerTool {
|
|
|
249
249
|
//if we found a new enterable container create extensions
|
|
250
250
|
if (newContainerElementDesignItem != null) {
|
|
251
251
|
if (this._dragOverExtensionItem != newContainerElementDesignItem) {
|
|
252
|
-
designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.
|
|
253
|
-
designerCanvas.extensionManager.applyExtension(newContainerElementDesignItem, ExtensionType.
|
|
252
|
+
designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerDragOverAndCanBeEntered);
|
|
253
|
+
designerCanvas.extensionManager.applyExtension(newContainerElementDesignItem, ExtensionType.ContainerDragOverAndCanBeEntered, event);
|
|
254
254
|
this._dragOverExtensionItem = newContainerElementDesignItem;
|
|
255
255
|
}
|
|
256
256
|
else {
|
|
257
|
-
designerCanvas.extensionManager.refreshExtension(newContainerElementDesignItem, ExtensionType.
|
|
257
|
+
designerCanvas.extensionManager.refreshExtension(newContainerElementDesignItem, ExtensionType.ContainerDragOverAndCanBeEntered, event);
|
|
258
258
|
}
|
|
259
259
|
}
|
|
260
260
|
else {
|
|
261
261
|
if (this._dragOverExtensionItem) {
|
|
262
|
-
designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.
|
|
262
|
+
designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerDragOverAndCanBeEntered);
|
|
263
263
|
this._dragOverExtensionItem = null;
|
|
264
264
|
}
|
|
265
265
|
}
|
|
@@ -325,7 +325,7 @@ export class PointerTool {
|
|
|
325
325
|
}
|
|
326
326
|
designerCanvas.extensionManager.removeExtension(this._dragExtensionItem, ExtensionType.ContainerDrag);
|
|
327
327
|
this._dragExtensionItem = null;
|
|
328
|
-
designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.
|
|
328
|
+
designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerDragOverAndCanBeEntered);
|
|
329
329
|
this._dragOverExtensionItem = null;
|
|
330
330
|
this._moveItemsOffset = { x: 0, y: 0 };
|
|
331
331
|
}
|
|
@@ -64,44 +64,46 @@ export class PropertyGrid extends BaseCustomWebComponentLazyAppend {
|
|
|
64
64
|
return this._selectedItems;
|
|
65
65
|
}
|
|
66
66
|
set selectedItems(items) {
|
|
67
|
-
this._selectedItems
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
let
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
67
|
+
if (this._selectedItems != items) {
|
|
68
|
+
this._selectedItems = items;
|
|
69
|
+
const pgGroups = this._serviceContainer.propertyGroupService.getPropertygroups(items);
|
|
70
|
+
const visibleDict = new Set();
|
|
71
|
+
for (let p of pgGroups) {
|
|
72
|
+
let lst = this._propertyGridPropertyListsDict[p.name];
|
|
73
|
+
if (!lst) {
|
|
74
|
+
lst = new PropertyGridPropertyList(this.serviceContainer);
|
|
75
|
+
lst.title = p.name;
|
|
76
|
+
this._designerTabControl.appendChild(lst);
|
|
77
|
+
this._propertyGridPropertyLists.push(lst);
|
|
78
|
+
this._propertyGridPropertyListsDict[p.name] = lst;
|
|
79
|
+
}
|
|
80
|
+
lst.setPropertiesService(p.propertiesService);
|
|
81
|
+
lst.createElements(items[0]);
|
|
82
|
+
visibleDict.add(p.name);
|
|
78
83
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
this._designerTabControl.
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
for (const a of this._propertyGridPropertyLists) {
|
|
98
|
-
a.refreshForDesignItems(items);
|
|
84
|
+
for (let p of this._propertyGridPropertyLists) {
|
|
85
|
+
if (visibleDict.has(p.title))
|
|
86
|
+
p.style.display = 'block';
|
|
87
|
+
else
|
|
88
|
+
p.style.display = 'none';
|
|
89
|
+
}
|
|
90
|
+
this._designerTabControl.refreshItems();
|
|
91
|
+
if (this._designerTabControl.selectedIndex < 0)
|
|
92
|
+
this._designerTabControl.selectedIndex = 0;
|
|
93
|
+
for (const a of this._propertyGridPropertyLists) {
|
|
94
|
+
a.designItemsChanged(items);
|
|
95
|
+
}
|
|
96
|
+
if (items) {
|
|
97
|
+
if (items.length == 1) {
|
|
98
|
+
for (const a of this._propertyGridPropertyLists) {
|
|
99
|
+
a.refreshForDesignItems(items);
|
|
100
|
+
}
|
|
101
|
+
this._observeItems();
|
|
99
102
|
}
|
|
100
|
-
this._observeItems();
|
|
101
103
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
104
|
+
else {
|
|
105
|
+
this._itemsObserver.disconnect();
|
|
106
|
+
}
|
|
105
107
|
}
|
|
106
108
|
}
|
|
107
109
|
_observeItems() {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"description": "A UI designer for Polymer apps",
|
|
3
3
|
"name": "@node-projects/web-component-designer",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.254",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"author": "",
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"@types/css-tree": "^2.3.1",
|
|
25
25
|
"@types/jquery": "^3.5.16",
|
|
26
26
|
"@types/jquery.fancytree": "0.0.7",
|
|
27
|
-
"@types/node": "^20.4.
|
|
28
|
-
"ace-builds": "^1.
|
|
27
|
+
"@types/node": "^20.4.9",
|
|
28
|
+
"ace-builds": "^1.24.0",
|
|
29
29
|
"codemirror": "^5.0.0",
|
|
30
30
|
"css-tree": "^2.3.1",
|
|
31
31
|
"esprima-next": "^5.8.4",
|