@node-projects/web-component-designer 0.0.102 → 0.0.105

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/elements/services/DefaultServiceBootstrap.js +5 -0
  2. package/dist/elements/services/elementsService/WebcomponentManifestElementsService.d.ts +13 -0
  3. package/dist/elements/services/elementsService/WebcomponentManifestElementsService.js +37 -0
  4. package/dist/elements/services/elementsService/WebcomponentManifestParserService.d.ts +25 -0
  5. package/dist/elements/services/elementsService/WebcomponentManifestParserService.js +94 -0
  6. package/dist/elements/services/instanceService/DefaultInstanceService.js +13 -3
  7. package/dist/elements/services/placementService/DefaultPlacementService.d.ts +1 -0
  8. package/dist/elements/services/placementService/DefaultPlacementService.js +7 -0
  9. package/dist/elements/services/placementService/FlexBoxPlacementService.d.ts +1 -0
  10. package/dist/elements/services/placementService/FlexBoxPlacementService.js +3 -0
  11. package/dist/elements/services/placementService/GridPlacementService.d.ts +1 -0
  12. package/dist/elements/services/placementService/GridPlacementService.js +3 -0
  13. package/dist/elements/services/placementService/IPlacementService.d.ts +1 -0
  14. package/dist/elements/services/propertiesService/services/WebcomponentManifestParserService.d.ts +25 -0
  15. package/dist/elements/services/propertiesService/services/WebcomponentManifestParserService.js +94 -0
  16. package/dist/elements/services/propertiesService/services/WebcomponentManifestPropertiesService.d.ts +17 -0
  17. package/dist/elements/services/propertiesService/services/WebcomponentManifestPropertiesService.js +54 -0
  18. package/dist/elements/widgets/designerView/designerCanvas.d.ts +2 -0
  19. package/dist/elements/widgets/designerView/designerCanvas.js +63 -9
  20. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension copy.d.ts +12 -0
  21. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension copy.js +20 -0
  22. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension.d.ts +0 -1
  23. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension.js +0 -2
  24. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtensionProvider copy.d.ts +10 -0
  25. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtensionProvider copy.js +14 -0
  26. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtensionProvider.js +0 -1
  27. package/dist/elements/widgets/designerView/extensions/ExtensionType.d.ts +12 -8
  28. package/dist/elements/widgets/designerView/extensions/ExtensionType.js +12 -8
  29. package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtension.d.ts +11 -0
  30. package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtension.js +18 -0
  31. package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.d.ts +10 -0
  32. package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.js +13 -0
  33. package/dist/elements/widgets/designerView/extensions/GrayOutDragOverExtension.d.ts +11 -0
  34. package/dist/elements/widgets/designerView/extensions/GrayOutDragOverExtension.js +18 -0
  35. package/dist/elements/widgets/designerView/extensions/GrayOutExtension.js +5 -4
  36. package/dist/elements/widgets/designerView/extensions/contextMenu/SelectAllChildrenContextMenu.js +2 -1
  37. package/dist/elements/widgets/designerView/tools/PointerTool.d.ts +4 -0
  38. package/dist/elements/widgets/designerView/tools/PointerTool.js +40 -33
  39. package/dist/index.d.ts +4 -0
  40. package/dist/index.js +4 -0
  41. package/package.json +1 -1
@@ -63,6 +63,7 @@ import { ZoomToolButtonProvider } from '../widgets/designerView/tools/toolBar/bu
63
63
  import { DrawToolButtonProvider } from '../widgets/designerView/tools/toolBar/buttons/DrawToolButtonProvider.js';
64
64
  import { TextToolButtonProvider } from '../widgets/designerView/tools/toolBar/buttons/TextToolButtonProvider.js';
65
65
  import { SelectorToolButtonProvider } from '../widgets/designerView/tools/toolBar/buttons/SelectorToolButtonProvider.js';
66
+ import { GrayOutDragOverContainerExtensionProvider } from '../widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.js';
66
67
  export function createDefaultServiceContainer() {
67
68
  let serviceContainer = new ServiceContainer();
68
69
  serviceContainer.register("propertyService", new PolymerPropertiesService());
@@ -111,8 +112,12 @@ export function createDefaultServiceContainer() {
111
112
  new GrayOutExtensionProvider()
112
113
  ]);
113
114
  serviceContainer.designerExtensions.set(ExtensionType.ContainerDragOver, [
115
+ new GrayOutDragOverContainerExtensionProvider(),
114
116
  new AltToEnterContainerExtensionProvider()
115
117
  ]);
118
+ serviceContainer.designerExtensions.set(ExtensionType.ContainerExternalDragOver, [
119
+ new GrayOutDragOverContainerExtensionProvider()
120
+ ]);
116
121
  serviceContainer.designerExtensions.set(ExtensionType.Doubleclick, [
117
122
  new EditTextExtensionProvider()
118
123
  ]);
@@ -0,0 +1,13 @@
1
+ import { IElementDefinition } from "./IElementDefinition.js";
2
+ import { IElementsService } from "./IElementsService.js";
3
+ export declare class WebcomponentManifestElementsService implements IElementsService {
4
+ private _name;
5
+ get name(): string;
6
+ private _importPrefix;
7
+ private _elementList;
8
+ private _resolveStored;
9
+ private _rejectStored;
10
+ constructor(name: string, importPrefix: string, manifest: any);
11
+ private _parseManifest;
12
+ getElements(): Promise<IElementDefinition[]>;
13
+ }
@@ -0,0 +1,37 @@
1
+ export class WebcomponentManifestElementsService {
2
+ _name;
3
+ get name() { return this._name; }
4
+ _importPrefix;
5
+ _elementList;
6
+ _resolveStored;
7
+ _rejectStored;
8
+ constructor(name, importPrefix, manifest) {
9
+ this._name = name;
10
+ this._importPrefix = importPrefix;
11
+ this._parseManifest(manifest);
12
+ }
13
+ _parseManifest(manifest) {
14
+ this._elementList = [];
15
+ for (let m of manifest.modules) {
16
+ for (let e of m.exports) {
17
+ if (e.kind == 'custom-element-definition') {
18
+ this._elementList.push({ tag: e.name, import: this._importPrefix + '/' + e.declaration.module });
19
+ }
20
+ }
21
+ if (this._resolveStored) {
22
+ this._resolveStored.forEach(x => x(this._elementList));
23
+ this._resolveStored = null;
24
+ this._rejectStored = null;
25
+ }
26
+ }
27
+ }
28
+ async getElements() {
29
+ if (this._elementList)
30
+ return Promise.resolve(this._elementList);
31
+ if (!this._resolveStored) {
32
+ this._resolveStored = [];
33
+ this._rejectStored = [];
34
+ }
35
+ return new Promise((resolve, reject) => { this._resolveStored.push(resolve); this._rejectStored.push(reject); });
36
+ }
37
+ }
@@ -0,0 +1,25 @@
1
+ import { BindingTarget } from "../../item/BindingTarget";
2
+ import { IElementDefinition } from "../elementsService/IElementDefinition";
3
+ import { IElementsService } from "../elementsService/IElementsService";
4
+ import { IPropertiesService } from "../propertiesService/IPropertiesService";
5
+ import { IProperty } from "../propertiesService/IProperty";
6
+ import { IDesignItem } from "../../item/IDesignItem";
7
+ import { UnkownElementPropertiesService } from "../propertiesService/services/UnkownElementPropertiesService";
8
+ export declare class WebcomponentManifestParserService extends UnkownElementPropertiesService implements IElementsService, IPropertiesService {
9
+ private _name;
10
+ get name(): string;
11
+ private _packageData;
12
+ private _elementList;
13
+ private _propertiesList;
14
+ private _resolveStored;
15
+ private _rejectStored;
16
+ private _importPrefix;
17
+ constructor(name: string, fileOrObject: string | object, importPrefix?: string);
18
+ private _parseManifest;
19
+ private manifestClassPropertyTypeToEditorPropertyType;
20
+ getElements(): Promise<IElementDefinition[]>;
21
+ isHandledElement(designItem: IDesignItem): boolean;
22
+ getProperties(designItem: IDesignItem): IProperty[];
23
+ getProperty(designItem: IDesignItem, name: string): IProperty;
24
+ getPropertyTarget(designItem: IDesignItem, property: IProperty): BindingTarget;
25
+ }
@@ -0,0 +1,94 @@
1
+ import { BindingTarget } from "../../item/BindingTarget";
2
+ import { PropertyType } from "../propertiesService/PropertyType";
3
+ import { UnkownElementPropertiesService } from "../propertiesService/services/UnkownElementPropertiesService";
4
+ export class WebcomponentManifestParserService extends UnkownElementPropertiesService {
5
+ _name;
6
+ get name() { return this._name; }
7
+ _packageData;
8
+ _elementList;
9
+ _propertiesList;
10
+ _resolveStored;
11
+ _rejectStored;
12
+ _importPrefix = '';
13
+ constructor(name, fileOrObject, importPrefix = '') {
14
+ super();
15
+ this._name = name;
16
+ this._importPrefix = importPrefix;
17
+ if (typeof fileOrObject === 'string') {
18
+ this._importPrefix = this._importPrefix ?? fileOrObject.split('/').slice(0, -1).join('/');
19
+ import(fileOrObject, { assert: { type: 'json' } }).then(module => {
20
+ this._packageData = module.default;
21
+ this._parseManifest();
22
+ }).catch(err => {
23
+ if (this._rejectStored) {
24
+ this._rejectStored.forEach(x => x(err));
25
+ this._resolveStored = null;
26
+ this._rejectStored = null;
27
+ }
28
+ });
29
+ }
30
+ else {
31
+ this._packageData = fileOrObject;
32
+ this._parseManifest();
33
+ }
34
+ }
35
+ _parseManifest() {
36
+ this._elementList = [];
37
+ this._propertiesList = {};
38
+ for (let m of this._packageData.modules) {
39
+ for (let e of m.exports) {
40
+ if (e.kind == 'custom-element-definition') {
41
+ this._elementList.push({ tag: e.name, import: this._importPrefix + '/' + e.declaration.module });
42
+ let properties = [];
43
+ let declaration = m.declarations.find(x => x.name == e.declaration.name);
44
+ for (let d of declaration.members) {
45
+ if (d.kind == 'field') {
46
+ let pType = PropertyType.property;
47
+ if (declaration.attributes)
48
+ pType = declaration.attributes.find(x => x.fieldName == d.name) != null ? PropertyType.propertyAndAttribute : PropertyType.property;
49
+ properties.push({ name: d.name, service: this, propertyType: pType, type: this.manifestClassPropertyTypeToEditorPropertyType(d.type?.text) });
50
+ }
51
+ }
52
+ this._propertiesList[e.name] = properties;
53
+ }
54
+ }
55
+ if (this._resolveStored) {
56
+ this._resolveStored.forEach(x => x(this._elementList));
57
+ this._resolveStored = null;
58
+ this._rejectStored = null;
59
+ }
60
+ }
61
+ }
62
+ manifestClassPropertyTypeToEditorPropertyType(type) {
63
+ if (type) {
64
+ if (type.toLowerCase() === 'boolean')
65
+ return 'boolean';
66
+ if (type.toLowerCase() === 'number')
67
+ return 'number';
68
+ }
69
+ return type;
70
+ }
71
+ async getElements() {
72
+ if (this._packageData)
73
+ return Promise.resolve(this._elementList);
74
+ if (!this._resolveStored) {
75
+ this._resolveStored = [];
76
+ this._rejectStored = [];
77
+ }
78
+ return new Promise((resolve, reject) => { this._resolveStored.push(resolve); this._rejectStored.push(reject); });
79
+ }
80
+ isHandledElement(designItem) {
81
+ if (this._elementList)
82
+ return this._elementList.find(x => x.tag == designItem.name) != null;
83
+ return false;
84
+ }
85
+ getProperties(designItem) {
86
+ return this._propertiesList[designItem.name];
87
+ }
88
+ getProperty(designItem, name) {
89
+ return this._propertiesList[designItem.name].find(x => x.name == name);
90
+ }
91
+ getPropertyTarget(designItem, property) {
92
+ return this._propertiesList[designItem.name].find(x => x.name == property.name).propertyType == PropertyType.attribute ? BindingTarget.attribute : BindingTarget.property;
93
+ }
94
+ }
@@ -7,9 +7,19 @@ export class DefaultInstanceService {
7
7
  let importUri = definition.import;
8
8
  if (importUri[0] === '.')
9
9
  importUri = (window.location.origin + window.location.pathname).split('/').slice(0, -1).join('/') + '/' + importUri;
10
- import(importUri).then(() => {
11
- //TODO: refresh all extensions
12
- }); //removed await here, feels better to not wait for the elemnt is loaded, maybe this needs to be configurable
10
+ //@ts-ignore
11
+ if (importShim) {
12
+ //@ts-ignore
13
+ importShim(importUri).then(() => {
14
+ //TODO: refresh all extensions
15
+ });
16
+ }
17
+ else {
18
+ import(importUri).then(() => {
19
+ //TODO: refresh all extensions
20
+ });
21
+ }
22
+ //removed await here, feels better to not wait for the elemnt is loaded, maybe this needs to be configurable
13
23
  if (instanceServiceContainer.designContext.imports.indexOf(importUri) <= 0)
14
24
  instanceServiceContainer.designContext.imports.push(importUri);
15
25
  }
@@ -5,6 +5,7 @@ import { IPlacementView } from '../../widgets/designerView/IPlacementView.js';
5
5
  export declare class DefaultPlacementService implements IPlacementService {
6
6
  serviceForContainer(container: IDesignItem, containerStyle: CSSStyleDeclaration): boolean;
7
7
  canEnter(container: IDesignItem, items: IDesignItem[]): boolean;
8
+ canEnterByDrop(container: IDesignItem): boolean;
8
9
  canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
9
10
  getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
10
11
  private calculateTrack;
@@ -17,6 +17,13 @@ export class DefaultPlacementService {
17
17
  return false;
18
18
  return true;
19
19
  }
20
+ canEnterByDrop(container) {
21
+ if (DomConverter.IsSelfClosingElement(container.element.localName))
22
+ return false;
23
+ if (container.element.shadowRoot && container.element.shadowRoot.querySelector('slot') == null)
24
+ return false;
25
+ return true;
26
+ }
20
27
  canLeave(container, items) {
21
28
  return true;
22
29
  }
@@ -7,6 +7,7 @@ export declare class FlexBoxPlacementService implements IPlacementService {
7
7
  leaveContainer(container: IDesignItem, items: IDesignItem[]): void;
8
8
  serviceForContainer(container: IDesignItem, containerStyle: CSSStyleDeclaration): boolean;
9
9
  canEnter(container: IDesignItem, items: IDesignItem[]): boolean;
10
+ canEnterByDrop(container: IDesignItem): boolean;
10
11
  canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
11
12
  getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
12
13
  placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
@@ -18,6 +18,9 @@ export class FlexBoxPlacementService {
18
18
  canEnter(container, items) {
19
19
  return true;
20
20
  }
21
+ canEnterByDrop(container) {
22
+ return true;
23
+ }
21
24
  canLeave(container, items) {
22
25
  return true;
23
26
  }
@@ -7,6 +7,7 @@ export declare class GridPlacementService implements IPlacementService {
7
7
  leaveContainer(container: IDesignItem, items: IDesignItem[]): void;
8
8
  serviceForContainer(container: IDesignItem, containerStyle: CSSStyleDeclaration): boolean;
9
9
  canEnter(container: IDesignItem, items: IDesignItem[]): boolean;
10
+ canEnterByDrop(container: IDesignItem): boolean;
10
11
  canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
11
12
  getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
12
13
  placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
@@ -29,6 +29,9 @@ export class GridPlacementService {
29
29
  canEnter(container, items) {
30
30
  return true;
31
31
  }
32
+ canEnterByDrop(container) {
33
+ return true;
34
+ }
32
35
  canLeave(container, items) {
33
36
  return true;
34
37
  }
@@ -4,6 +4,7 @@ import { IPlacementView } from "../../widgets/designerView/IPlacementView";
4
4
  import { IPoint } from "../../../interfaces/IPoint";
5
5
  export interface IPlacementService extends IService {
6
6
  serviceForContainer(container: IDesignItem, containerStyle: CSSStyleDeclaration): any;
7
+ canEnterByDrop(container: IDesignItem): any;
7
8
  canEnter(container: IDesignItem, items: IDesignItem[]): any;
8
9
  canLeave(container: IDesignItem, items: IDesignItem[]): any;
9
10
  enterContainer(container: IDesignItem, items: IDesignItem[]): any;
@@ -0,0 +1,25 @@
1
+ import { BindingTarget } from "../../item/BindingTarget";
2
+ import { IElementDefinition } from "../elementsService/IElementDefinition";
3
+ import { IElementsService } from "../elementsService/IElementsService";
4
+ import { IPropertiesService } from "../propertiesService/IPropertiesService";
5
+ import { IProperty } from "../propertiesService/IProperty";
6
+ import { IDesignItem } from "../../item/IDesignItem";
7
+ import { UnkownElementPropertiesService } from "../propertiesService/services/UnkownElementPropertiesService";
8
+ export declare class WebcomponentManifestParserService extends UnkownElementPropertiesService implements IElementsService, IPropertiesService {
9
+ private _name;
10
+ get name(): string;
11
+ private _packageData;
12
+ private _elementList;
13
+ private _propertiesList;
14
+ private _resolveStored;
15
+ private _rejectStored;
16
+ private _importPrefix;
17
+ constructor(name: string, fileOrObject: string | object, importPrefix?: string);
18
+ private _parseManifest;
19
+ private manifestClassPropertyTypeToEditorPropertyType;
20
+ getElements(): Promise<IElementDefinition[]>;
21
+ isHandledElement(designItem: IDesignItem): boolean;
22
+ getProperties(designItem: IDesignItem): IProperty[];
23
+ getProperty(designItem: IDesignItem, name: string): IProperty;
24
+ getPropertyTarget(designItem: IDesignItem, property: IProperty): BindingTarget;
25
+ }
@@ -0,0 +1,94 @@
1
+ import { BindingTarget } from "../../item/BindingTarget";
2
+ import { PropertyType } from "../propertiesService/PropertyType";
3
+ import { UnkownElementPropertiesService } from "../propertiesService/services/UnkownElementPropertiesService";
4
+ export class WebcomponentManifestParserService extends UnkownElementPropertiesService {
5
+ _name;
6
+ get name() { return this._name; }
7
+ _packageData;
8
+ _elementList;
9
+ _propertiesList;
10
+ _resolveStored;
11
+ _rejectStored;
12
+ _importPrefix = '';
13
+ constructor(name, fileOrObject, importPrefix = '') {
14
+ super();
15
+ this._name = name;
16
+ this._importPrefix = importPrefix;
17
+ if (typeof fileOrObject === 'string') {
18
+ this._importPrefix = this._importPrefix ?? fileOrObject.split('/').slice(0, -1).join('/');
19
+ import(fileOrObject, { assert: { type: 'json' } }).then(module => {
20
+ this._packageData = module.default;
21
+ this._parseManifest();
22
+ }).catch(err => {
23
+ if (this._rejectStored) {
24
+ this._rejectStored.forEach(x => x(err));
25
+ this._resolveStored = null;
26
+ this._rejectStored = null;
27
+ }
28
+ });
29
+ }
30
+ else {
31
+ this._packageData = fileOrObject;
32
+ this._parseManifest();
33
+ }
34
+ }
35
+ _parseManifest() {
36
+ this._elementList = [];
37
+ this._propertiesList = {};
38
+ for (let m of this._packageData.modules) {
39
+ for (let e of m.exports) {
40
+ if (e.kind == 'custom-element-definition') {
41
+ this._elementList.push({ tag: e.name, import: this._importPrefix + '/' + e.declaration.module });
42
+ let properties = [];
43
+ let declaration = m.declarations.find(x => x.name == e.declaration.name);
44
+ for (let d of declaration.members) {
45
+ if (d.kind == 'field') {
46
+ let pType = PropertyType.property;
47
+ if (declaration.attributes)
48
+ pType = declaration.attributes.find(x => x.fieldName == d.name) != null ? PropertyType.propertyAndAttribute : PropertyType.property;
49
+ properties.push({ name: d.name, service: this, propertyType: pType, type: this.manifestClassPropertyTypeToEditorPropertyType(d.type?.text) });
50
+ }
51
+ }
52
+ this._propertiesList[e.name] = properties;
53
+ }
54
+ }
55
+ if (this._resolveStored) {
56
+ this._resolveStored.forEach(x => x(this._elementList));
57
+ this._resolveStored = null;
58
+ this._rejectStored = null;
59
+ }
60
+ }
61
+ }
62
+ manifestClassPropertyTypeToEditorPropertyType(type) {
63
+ if (type) {
64
+ if (type.toLowerCase() === 'boolean')
65
+ return 'boolean';
66
+ if (type.toLowerCase() === 'number')
67
+ return 'number';
68
+ }
69
+ return type;
70
+ }
71
+ async getElements() {
72
+ if (this._packageData)
73
+ return Promise.resolve(this._elementList);
74
+ if (!this._resolveStored) {
75
+ this._resolveStored = [];
76
+ this._rejectStored = [];
77
+ }
78
+ return new Promise((resolve, reject) => { this._resolveStored.push(resolve); this._rejectStored.push(reject); });
79
+ }
80
+ isHandledElement(designItem) {
81
+ if (this._elementList)
82
+ return this._elementList.find(x => x.tag == designItem.name) != null;
83
+ return false;
84
+ }
85
+ getProperties(designItem) {
86
+ return this._propertiesList[designItem.name];
87
+ }
88
+ getProperty(designItem, name) {
89
+ return this._propertiesList[designItem.name].find(x => x.name == name);
90
+ }
91
+ getPropertyTarget(designItem, property) {
92
+ return this._propertiesList[designItem.name].find(x => x.name == property.name).propertyType == PropertyType.attribute ? BindingTarget.attribute : BindingTarget.property;
93
+ }
94
+ }
@@ -0,0 +1,17 @@
1
+ import { BindingTarget } from "../../../item/BindingTarget.js";
2
+ import { IDesignItem } from "../../../item/IDesignItem.js";
3
+ import { IPropertiesService } from "../IPropertiesService.js";
4
+ import { IProperty } from "../IProperty.js";
5
+ import { UnkownElementPropertiesService } from "./UnkownElementPropertiesService.js";
6
+ export declare class WebcomponentManifestPropertiesService extends UnkownElementPropertiesService implements IPropertiesService {
7
+ private _name;
8
+ get name(): string;
9
+ private _propertiesList;
10
+ constructor(name: string, manifest: any);
11
+ private _parseManifest;
12
+ private manifestClassPropertyTypeToEditorPropertyType;
13
+ isHandledElement(designItem: IDesignItem): boolean;
14
+ getProperties(designItem: IDesignItem): IProperty[];
15
+ getProperty(designItem: IDesignItem, name: string): IProperty;
16
+ getPropertyTarget(designItem: IDesignItem, property: IProperty): BindingTarget;
17
+ }
@@ -0,0 +1,54 @@
1
+ import { BindingTarget } from "../../../item/BindingTarget.js";
2
+ import { PropertyType } from "../PropertyType.js";
3
+ import { UnkownElementPropertiesService } from "./UnkownElementPropertiesService.js";
4
+ export class WebcomponentManifestPropertiesService extends UnkownElementPropertiesService {
5
+ _name;
6
+ get name() { return this._name; }
7
+ _propertiesList;
8
+ constructor(name, manifest) {
9
+ super();
10
+ this._name = name;
11
+ this._parseManifest(manifest);
12
+ }
13
+ _parseManifest(manifest) {
14
+ this._propertiesList = {};
15
+ for (let m of manifest.modules) {
16
+ for (let e of m.exports) {
17
+ if (e.kind == 'custom-element-definition') {
18
+ let properties = [];
19
+ let declaration = m.declarations.find(x => x.name == e.declaration.name);
20
+ for (let d of declaration.members) {
21
+ if (d.kind == 'field') {
22
+ let pType = PropertyType.property;
23
+ if (declaration.attributes)
24
+ pType = declaration.attributes.find(x => x.fieldName == d.name) != null ? PropertyType.propertyAndAttribute : PropertyType.property;
25
+ properties.push({ name: d.name, service: this, propertyType: pType, type: this.manifestClassPropertyTypeToEditorPropertyType(d.type?.text) });
26
+ }
27
+ }
28
+ this._propertiesList[e.name] = properties;
29
+ }
30
+ }
31
+ }
32
+ }
33
+ manifestClassPropertyTypeToEditorPropertyType(type) {
34
+ if (type) {
35
+ if (type.toLowerCase() === 'boolean')
36
+ return 'boolean';
37
+ if (type.toLowerCase() === 'number')
38
+ return 'number';
39
+ }
40
+ return type;
41
+ }
42
+ isHandledElement(designItem) {
43
+ return this._propertiesList[designItem.name] != null;
44
+ }
45
+ getProperties(designItem) {
46
+ return this._propertiesList[designItem.name];
47
+ }
48
+ getProperty(designItem, name) {
49
+ return this._propertiesList[designItem.name].find(x => x.name == name);
50
+ }
51
+ getPropertyTarget(designItem, property) {
52
+ return this._propertiesList[designItem.name].find(x => x.name == property.name).propertyType == PropertyType.attribute ? BindingTarget.attribute : BindingTarget.property;
53
+ }
54
+ }
@@ -77,9 +77,11 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
77
77
  _updateTransform(): void;
78
78
  setDesignItems(designItems: IDesignItem[]): void;
79
79
  addDesignItems(designItems: IDesignItem[]): void;
80
+ _dragOverExtensionItem: IDesignItem;
80
81
  private _onDragEnter;
81
82
  private _onDragLeave;
82
83
  private _onDragOver;
84
+ private _getPossibleContainerForDrop;
83
85
  private _onDrop;
84
86
  showDesignItemContextMenu(designItem: IDesignItem, event: MouseEvent): ContextMenuHelper;
85
87
  private _onDblClick;
@@ -422,6 +422,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
422
422
  }
423
423
  this.snapLines.clearSnaplines();
424
424
  }
425
+ _dragOverExtensionItem;
425
426
  _onDragEnter(event) {
426
427
  this._fillCalculationrects();
427
428
  event.preventDefault();
@@ -446,6 +447,10 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
446
447
  event.dataTransfer.dropEffect = effect;
447
448
  }
448
449
  }
450
+ if (this._dragOverExtensionItem) {
451
+ this.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerExternalDragOver);
452
+ this._dragOverExtensionItem = null;
453
+ }
449
454
  }
450
455
  _onDragOver(event) {
451
456
  event.preventDefault();
@@ -466,15 +471,57 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
466
471
  this._canvas.classList.add('dragFileActive');
467
472
  }
468
473
  }
469
- const hasTransferDataBindingObject = event.dataTransfer.types.indexOf(dragDropFormatNameBindingObject) >= 0;
470
- if (hasTransferDataBindingObject) {
471
- const ddService = this.serviceContainer.bindableObjectDragDropService;
472
- if (ddService) {
473
- const effect = ddService.dragOver(this, event);
474
- event.dataTransfer.dropEffect = effect;
474
+ else {
475
+ const hasTransferDataBindingObject = event.dataTransfer.types.indexOf(dragDropFormatNameBindingObject) >= 0;
476
+ if (hasTransferDataBindingObject) {
477
+ const ddService = this.serviceContainer.bindableObjectDragDropService;
478
+ if (ddService) {
479
+ const effect = ddService.dragOver(this, event);
480
+ event.dataTransfer.dropEffect = effect;
481
+ }
482
+ }
483
+ else {
484
+ let [newContainer] = this._getPossibleContainerForDrop(event);
485
+ if (this._dragOverExtensionItem != newContainer) {
486
+ this.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerExternalDragOver);
487
+ this.extensionManager.applyExtension(newContainer, ExtensionType.ContainerExternalDragOver);
488
+ this._dragOverExtensionItem = newContainer;
489
+ }
475
490
  }
476
491
  }
477
492
  }
493
+ _getPossibleContainerForDrop(event) {
494
+ let newContainerElementDesignItem = null;
495
+ let newContainerService = null;
496
+ const elementsFromPoint = this.elementsFromPoint(event.x, event.y);
497
+ for (let e of elementsFromPoint) {
498
+ if (e == this.rootDesignItem.element) {
499
+ newContainerElementDesignItem = this.rootDesignItem;
500
+ const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
501
+ newContainerService = this.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
502
+ break;
503
+ }
504
+ else if (false) {
505
+ //check we don't try to move a item over one of its children..
506
+ }
507
+ else {
508
+ newContainerElementDesignItem = DesignItem.GetOrCreateDesignItem(e, this.serviceContainer, this.instanceServiceContainer);
509
+ const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
510
+ newContainerService = this.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
511
+ if (newContainerService) {
512
+ if (newContainerService.canEnterByDrop(newContainerElementDesignItem)) {
513
+ break;
514
+ }
515
+ else {
516
+ newContainerElementDesignItem = null;
517
+ newContainerService = null;
518
+ continue;
519
+ }
520
+ }
521
+ }
522
+ }
523
+ return [newContainerElementDesignItem, newContainerService];
524
+ }
478
525
  async _onDrop(event) {
479
526
  event.preventDefault();
480
527
  this._canvas.classList.remove('dragFileActive');
@@ -496,16 +543,23 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
496
543
  }
497
544
  }
498
545
  else {
546
+ if (this._dragOverExtensionItem) {
547
+ this.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerExternalDragOver);
548
+ this._dragOverExtensionItem = null;
549
+ }
550
+ let [newContainer] = this._getPossibleContainerForDrop(event);
551
+ let pos = this.getNormalizedElementCoordinates(newContainer.element);
499
552
  this._fillCalculationrects();
500
553
  const position = this.getNormalizedEventCoordinates(event);
554
+ //TODO : we need to use container service for adding to element, so also grid and flexbox work correct
501
555
  const transferData = event.dataTransfer.getData(dragDropFormatNameElementDefinition);
502
556
  const elementDefinition = JSON.parse(transferData);
503
557
  const di = await this.serviceContainer.forSomeServicesTillResult("instanceService", (service) => service.getElement(elementDefinition, this.serviceContainer, this.instanceServiceContainer));
504
558
  const grp = di.openGroup("Insert");
505
559
  di.setStyle('position', 'absolute');
506
- di.setStyle('left', position.x + 'px');
507
- di.setStyle('top', position.y + 'px');
508
- this.instanceServiceContainer.undoService.execute(new InsertAction(this.rootDesignItem, this.rootDesignItem.childCount, di));
560
+ di.setStyle('left', (position.x - pos.x) + 'px');
561
+ di.setStyle('top', (position.y - pos.y) + 'px');
562
+ this.instanceServiceContainer.undoService.execute(new InsertAction(newContainer, newContainer.childCount, di));
509
563
  grp.commit();
510
564
  requestAnimationFrame(() => this.instanceServiceContainer.selectionService.setSelectedElements([di]));
511
565
  }
@@ -0,0 +1,12 @@
1
+ import { IDesignItem } from "../../../item/IDesignItem";
2
+ import { IDesignerCanvas } from "../IDesignerCanvas";
3
+ import { AbstractExtension } from "./AbstractExtension";
4
+ import { IExtensionManager } from "./IExtensionManger";
5
+ export declare class AltToEnterContainerExtension extends AbstractExtension {
6
+ private _text;
7
+ private _rect;
8
+ constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
9
+ extend(): void;
10
+ refresh(): void;
11
+ dispose(): void;
12
+ }
@@ -0,0 +1,20 @@
1
+ import { AbstractExtension } from "./AbstractExtension";
2
+ import { OverlayLayer } from "./OverlayLayer.js";
3
+ export class AltToEnterContainerExtension extends AbstractExtension {
4
+ _text;
5
+ _rect;
6
+ constructor(extensionManager, designerView, extendedItem) {
7
+ super(extensionManager, designerView, extendedItem);
8
+ }
9
+ extend() {
10
+ this.refresh();
11
+ }
12
+ refresh() {
13
+ let itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
14
+ this._text = this._drawText("Press ALT to enter container", itemRect.x + 5, itemRect.y + 12, 'svg-text-enter-container', this._text, OverlayLayer.Foregorund);
15
+ this._rect = this._drawRect(itemRect.x, itemRect.y, itemRect.width, itemRect.height, 'svg-rect-enter-container', this._rect, OverlayLayer.Foregorund);
16
+ }
17
+ dispose() {
18
+ this._removeAllOverlays();
19
+ }
20
+ }
@@ -4,7 +4,6 @@ import { AbstractExtension } from "./AbstractExtension";
4
4
  import { IExtensionManager } from "./IExtensionManger";
5
5
  export declare class AltToEnterContainerExtension extends AbstractExtension {
6
6
  private _text;
7
- private _rect;
8
7
  constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
9
8
  extend(): void;
10
9
  refresh(): void;
@@ -2,7 +2,6 @@ import { AbstractExtension } from "./AbstractExtension";
2
2
  import { OverlayLayer } from "./OverlayLayer.js";
3
3
  export class AltToEnterContainerExtension extends AbstractExtension {
4
4
  _text;
5
- _rect;
6
5
  constructor(extensionManager, designerView, extendedItem) {
7
6
  super(extensionManager, designerView, extendedItem);
8
7
  }
@@ -12,7 +11,6 @@ export class AltToEnterContainerExtension extends AbstractExtension {
12
11
  refresh() {
13
12
  let itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
14
13
  this._text = this._drawText("Press ALT to enter container", itemRect.x + 5, itemRect.y + 12, 'svg-text-enter-container', this._text, OverlayLayer.Foregorund);
15
- this._rect = this._drawRect(itemRect.x, itemRect.y, itemRect.width, itemRect.height, 'svg-rect-enter-container', this._rect, OverlayLayer.Foregorund);
16
14
  }
17
15
  dispose() {
18
16
  this._removeAllOverlays();
@@ -0,0 +1,10 @@
1
+ import { IDesignerExtensionProvider } from "./IDesignerExtensionProvider";
2
+ import { IDesignItem } from "../../../item/IDesignItem";
3
+ import { IDesignerCanvas } from "../IDesignerCanvas";
4
+ import { IDesignerExtension } from "./IDesignerExtension";
5
+ import { IExtensionManager } from "./IExtensionManger";
6
+ export declare class AltToEnterContainerExtensionProvider implements IDesignerExtensionProvider {
7
+ shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
8
+ getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
9
+ readonly style: CSSStyleSheet;
10
+ }
@@ -0,0 +1,14 @@
1
+ import { AltToEnterContainerExtension } from './AltToEnterContainerExtension';
2
+ import { css } from "@node-projects/base-custom-webcomponent";
3
+ export class AltToEnterContainerExtensionProvider {
4
+ shouldExtend(extensionManager, designerView, designItem) {
5
+ return true;
6
+ }
7
+ getExtension(extensionManager, designerView, designItem) {
8
+ return new AltToEnterContainerExtension(extensionManager, designerView, designItem);
9
+ }
10
+ style = css `
11
+ .svg-text-enter-container { stroke: none; fill: black; stroke-width: 1; font-size: 14px; font-weight:800; font-family: monospace; }
12
+ .svg-rect-enter-container { stroke: none; fill: #aa00ff2e; }
13
+ `;
14
+ }
@@ -9,6 +9,5 @@ export class AltToEnterContainerExtensionProvider {
9
9
  }
10
10
  style = css `
11
11
  .svg-text-enter-container { stroke: none; fill: black; stroke-width: 1; font-size: 14px; font-weight:800; font-family: monospace; }
12
- .svg-rect-enter-container { stroke: none; fill: #aa00ff2e; }
13
12
  `;
14
13
  }
@@ -1,18 +1,22 @@
1
1
  export declare enum ExtensionType {
2
2
  Permanent = 1,
3
3
  Selection = 2,
4
- PrimarySelection = 4,
5
- PrimarySelectionContainer = 8,
6
- MouseOver = 16,
7
- OnlyOneItemSelected = 32,
8
- MultipleItemsSelected = 64,
4
+ PrimarySelection = 3,
5
+ PrimarySelectionContainer = 4,
6
+ MouseOver = 5,
7
+ OnlyOneItemSelected = 6,
8
+ MultipleItemsSelected = 7,
9
9
  /**
10
10
  * Extension for the Container wich the dragged element is draged over.
11
11
  */
12
- ContainerDragOver = 128,
12
+ ContainerDragOver = 8,
13
+ /**
14
+ * Extension for the Container on wich a new element is draged over.
15
+ */
16
+ ContainerExternalDragOver = 9,
13
17
  /**
14
18
  * Extension for the Current Container wich the dragged element is contained.
15
19
  */
16
- ContainerDrag = 256,
17
- Doubleclick = 512
20
+ ContainerDrag = 10,
21
+ Doubleclick = 11
18
22
  }
@@ -2,18 +2,22 @@ export var ExtensionType;
2
2
  (function (ExtensionType) {
3
3
  ExtensionType[ExtensionType["Permanent"] = 1] = "Permanent";
4
4
  ExtensionType[ExtensionType["Selection"] = 2] = "Selection";
5
- ExtensionType[ExtensionType["PrimarySelection"] = 4] = "PrimarySelection";
6
- ExtensionType[ExtensionType["PrimarySelectionContainer"] = 8] = "PrimarySelectionContainer";
7
- ExtensionType[ExtensionType["MouseOver"] = 16] = "MouseOver";
8
- ExtensionType[ExtensionType["OnlyOneItemSelected"] = 32] = "OnlyOneItemSelected";
9
- ExtensionType[ExtensionType["MultipleItemsSelected"] = 64] = "MultipleItemsSelected";
5
+ ExtensionType[ExtensionType["PrimarySelection"] = 3] = "PrimarySelection";
6
+ ExtensionType[ExtensionType["PrimarySelectionContainer"] = 4] = "PrimarySelectionContainer";
7
+ ExtensionType[ExtensionType["MouseOver"] = 5] = "MouseOver";
8
+ ExtensionType[ExtensionType["OnlyOneItemSelected"] = 6] = "OnlyOneItemSelected";
9
+ ExtensionType[ExtensionType["MultipleItemsSelected"] = 7] = "MultipleItemsSelected";
10
10
  /**
11
11
  * Extension for the Container wich the dragged element is draged over.
12
12
  */
13
- ExtensionType[ExtensionType["ContainerDragOver"] = 128] = "ContainerDragOver";
13
+ ExtensionType[ExtensionType["ContainerDragOver"] = 8] = "ContainerDragOver";
14
+ /**
15
+ * Extension for the Container on wich a new element is draged over.
16
+ */
17
+ ExtensionType[ExtensionType["ContainerExternalDragOver"] = 9] = "ContainerExternalDragOver";
14
18
  /**
15
19
  * Extension for the Current Container wich the dragged element is contained.
16
20
  */
17
- ExtensionType[ExtensionType["ContainerDrag"] = 256] = "ContainerDrag";
18
- ExtensionType[ExtensionType["Doubleclick"] = 512] = "Doubleclick";
21
+ ExtensionType[ExtensionType["ContainerDrag"] = 10] = "ContainerDrag";
22
+ ExtensionType[ExtensionType["Doubleclick"] = 11] = "Doubleclick";
19
23
  })(ExtensionType || (ExtensionType = {}));
@@ -0,0 +1,11 @@
1
+ import { IDesignItem } from "../../../item/IDesignItem";
2
+ import { IDesignerCanvas } from "../IDesignerCanvas";
3
+ import { AbstractExtension } from "./AbstractExtension";
4
+ import { IExtensionManager } from "./IExtensionManger";
5
+ export declare class GrayOutDragOverContainerExtension extends AbstractExtension {
6
+ private _rect;
7
+ constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
8
+ extend(): void;
9
+ refresh(): void;
10
+ dispose(): void;
11
+ }
@@ -0,0 +1,18 @@
1
+ import { AbstractExtension } from "./AbstractExtension";
2
+ import { OverlayLayer } from "./OverlayLayer.js";
3
+ export class GrayOutDragOverContainerExtension extends AbstractExtension {
4
+ _rect;
5
+ constructor(extensionManager, designerView, extendedItem) {
6
+ super(extensionManager, designerView, extendedItem);
7
+ }
8
+ extend() {
9
+ this.refresh();
10
+ }
11
+ refresh() {
12
+ let itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
13
+ this._rect = this._drawRect(itemRect.x, itemRect.y, itemRect.width, itemRect.height, 'svg-rect-enter-container', this._rect, OverlayLayer.Foregorund);
14
+ }
15
+ dispose() {
16
+ this._removeAllOverlays();
17
+ }
18
+ }
@@ -0,0 +1,10 @@
1
+ import { IDesignerExtensionProvider } from "./IDesignerExtensionProvider";
2
+ import { IDesignItem } from "../../../item/IDesignItem";
3
+ import { IDesignerCanvas } from "../IDesignerCanvas";
4
+ import { IDesignerExtension } from "./IDesignerExtension";
5
+ import { IExtensionManager } from "./IExtensionManger";
6
+ export declare class GrayOutDragOverContainerExtensionProvider implements IDesignerExtensionProvider {
7
+ shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
8
+ getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
9
+ readonly style: CSSStyleSheet;
10
+ }
@@ -0,0 +1,13 @@
1
+ import { css } from "@node-projects/base-custom-webcomponent";
2
+ import { GrayOutDragOverContainerExtension } from "./GrayOutDragOverContainerExtension.js";
3
+ export class GrayOutDragOverContainerExtensionProvider {
4
+ shouldExtend(extensionManager, designerView, designItem) {
5
+ return true;
6
+ }
7
+ getExtension(extensionManager, designerView, designItem) {
8
+ return new GrayOutDragOverContainerExtension(extensionManager, designerView, designItem);
9
+ }
10
+ style = css `
11
+ .svg-rect-enter-container { stroke: none; fill: #aa00ff2e; }
12
+ `;
13
+ }
@@ -0,0 +1,11 @@
1
+ import { IDesignItem } from "../../../item/IDesignItem";
2
+ import { IDesignerCanvas } from "../IDesignerCanvas";
3
+ import { AbstractExtension } from "./AbstractExtension";
4
+ import { IExtensionManager } from "./IExtensionManger";
5
+ export declare class GrayOutDragOverExtension extends AbstractExtension {
6
+ private _rect;
7
+ constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
8
+ extend(): void;
9
+ refresh(): void;
10
+ dispose(): void;
11
+ }
@@ -0,0 +1,18 @@
1
+ import { AbstractExtension } from "./AbstractExtension";
2
+ import { OverlayLayer } from "./OverlayLayer.js";
3
+ export class GrayOutDragOverExtension extends AbstractExtension {
4
+ _rect;
5
+ constructor(extensionManager, designerView, extendedItem) {
6
+ super(extensionManager, designerView, extendedItem);
7
+ }
8
+ extend() {
9
+ this.refresh();
10
+ }
11
+ refresh() {
12
+ let itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
13
+ this._rect = this._drawRect(itemRect.x, itemRect.y, itemRect.width, itemRect.height, 'svg-rect-enter-container', this._rect, OverlayLayer.Foregorund);
14
+ }
15
+ dispose() {
16
+ this._removeAllOverlays();
17
+ }
18
+ }
@@ -19,10 +19,11 @@ export class GrayOutExtension extends AbstractExtension {
19
19
  this.drawGrayOut(normalizedRect);
20
20
  }
21
21
  drawGrayOut(r) {
22
- const pathPoints = "M0 0 L0 " + this.designerCanvas.outerRect.height + "L" + r.x + " " + this.designerCanvas.outerRect.height + "L" + r.x + " 0" + " L0 0" +
23
- "M" + r.x + " 0 L" + r.x + " " + r.y + "L" + this.designerCanvas.outerRect.width + " " + r.y + "L" + this.designerCanvas.outerRect.width + " 0" + "L" + r.x + " 0" +
24
- "M" + r.x + " " + (r.y + r.height) + "L" + r.x + " " + this.designerCanvas.outerRect.height + "L" + this.designerCanvas.outerRect.width + " " + this.designerCanvas.outerRect.height + "L" + this.designerCanvas.outerRect.width + " " + (r.y + r.height) + "L" + r.x + " " + (r.y + r.height) +
25
- "M" + (r.x + r.width) + " " + r.y + "L" + (r.x + r.width) + " " + (r.y + r.height) + "L" + this.designerCanvas.outerRect.width + " " + (r.y + r.height) + "L" + this.designerCanvas.outerRect.width + " " + (r.y) + "L" + (r.x + r.width) + " " + r.y;
22
+ let outsideRect = { width: this.designerCanvas.containerBoundingRect.width / this.designerCanvas.scaleFactor, height: this.designerCanvas.containerBoundingRect.height / this.designerCanvas.scaleFactor };
23
+ const pathPoints = "M0 0 L0 " + outsideRect.height + "L" + r.x + " " + outsideRect.height + "L" + r.x + " 0" + " L0 0" +
24
+ "M" + r.x + " 0 L" + r.x + " " + r.y + "L" + outsideRect.width + " " + r.y + "L" + outsideRect.width + " 0" + "L" + r.x + " 0" +
25
+ "M" + r.x + " " + (r.y + r.height) + "L" + r.x + " " + outsideRect.height + "L" + outsideRect.width + " " + outsideRect.height + "L" + outsideRect.width + " " + (r.y + r.height) + "L" + r.x + " " + (r.y + r.height) +
26
+ "M" + (r.x + r.width) + " " + r.y + "L" + (r.x + r.width) + " " + (r.y + r.height) + "L" + outsideRect.width + " " + (r.y + r.height) + "L" + outsideRect.width + " " + (r.y) + "L" + (r.x + r.width) + " " + r.y;
26
27
  this._path.setAttribute("d", pathPoints);
27
28
  }
28
29
  dispose() {
@@ -1,3 +1,4 @@
1
+ import { NodeType } from "../../../../item/NodeType.js";
1
2
  export class SelectAllChildrenContextMenu {
2
3
  shouldProvideContextmenu(event, designerView, designItem, initiator) {
3
4
  return designItem.hasChildren;
@@ -5,7 +6,7 @@ export class SelectAllChildrenContextMenu {
5
6
  provideContextMenuItems(event, designerCanvas, designItem) {
6
7
  return [{
7
8
  title: 'Select all Children', action: () => {
8
- designerCanvas.instanceServiceContainer.selectionService.setSelectedElements(Array.from(designItem.children()));
9
+ designerCanvas.instanceServiceContainer.selectionService.setSelectedElements(Array.from(designItem.children()).filter(x => x.nodeType == NodeType.Element));
9
10
  }
10
11
  }];
11
12
  }
@@ -1,3 +1,6 @@
1
+ import { IPoint } from "../../../../interfaces/IPoint";
2
+ import { IDesignItem } from "../../../item/IDesignItem";
3
+ import { IPlacementService } from "../../../services/placementService/IPlacementService";
1
4
  import { IDesignerCanvas } from "../IDesignerCanvas";
2
5
  import { ITool } from "./ITool";
3
6
  import { ServiceContainer } from "../../../services/ServiceContainer.js";
@@ -21,5 +24,6 @@ export declare class PointerTool implements ITool {
21
24
  private _resetTool;
22
25
  private _pointerActionTypeDrawSelection;
23
26
  private _pointerActionTypeDragOrSelect;
27
+ static FindPossibleContainer(designItem: IDesignItem, designItems: IDesignItem[], event: IPoint): [newContainerElementDesignItem: IDesignItem, newContainerService: IPlacementService];
24
28
  keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): void;
25
29
  }
@@ -185,39 +185,7 @@ export class PointerTool {
185
185
  let newContainerElementDesignItem = null;
186
186
  let newContainerService = null;
187
187
  if (canLeave) {
188
- const elementsFromPoint = designerCanvas.elementsFromPoint(event.x, event.y);
189
- for (let e of elementsFromPoint) {
190
- if (e == this._actionStartedDesignItem.element) {
191
- continue;
192
- }
193
- else if (e == this._actionStartedDesignItem.parent.element) {
194
- break;
195
- }
196
- else if (e == designerCanvas.rootDesignItem.element) {
197
- newContainerElementDesignItem = designerCanvas.rootDesignItem;
198
- const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
199
- newContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
200
- break;
201
- }
202
- else if (false) {
203
- //check we don't try to move a item over one of its children..
204
- }
205
- else {
206
- newContainerElementDesignItem = DesignItem.GetOrCreateDesignItem(e, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
207
- const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
208
- newContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
209
- if (newContainerService) {
210
- if (newContainerService.canEnter(newContainerElementDesignItem, this._actionStartedDesignItems)) {
211
- break;
212
- }
213
- else {
214
- newContainerElementDesignItem = null;
215
- newContainerService = null;
216
- continue;
217
- }
218
- }
219
- }
220
- }
188
+ [newContainerElementDesignItem, newContainerService] = PointerTool.FindPossibleContainer(this._actionStartedDesignItem, this._actionStartedDesignItems, event);
221
189
  //if we found a new enterable container create extensions
222
190
  if (newContainerElementDesignItem != null) {
223
191
  if (this._dragOverExtensionItem != newContainerElementDesignItem) {
@@ -284,5 +252,44 @@ export class PointerTool {
284
252
  }
285
253
  }
286
254
  }
255
+ static FindPossibleContainer(designItem, designItems, event) {
256
+ let newContainerElementDesignItem = null;
257
+ let newContainerService = null;
258
+ const designerCanvas = designItem.instanceServiceContainer.designerCanvas;
259
+ const elementsFromPoint = designerCanvas.elementsFromPoint(event.x, event.y);
260
+ for (let e of elementsFromPoint) {
261
+ if (e == designItem.element) {
262
+ continue;
263
+ }
264
+ else if (e == designItem.parent.element) {
265
+ break;
266
+ }
267
+ else if (e == designerCanvas.rootDesignItem.element) {
268
+ newContainerElementDesignItem = designerCanvas.rootDesignItem;
269
+ const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
270
+ newContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
271
+ break;
272
+ }
273
+ else if (false) {
274
+ //check we don't try to move a item over one of its children..
275
+ }
276
+ else {
277
+ newContainerElementDesignItem = DesignItem.GetOrCreateDesignItem(e, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
278
+ const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
279
+ newContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
280
+ if (newContainerService) {
281
+ if (newContainerService.canEnter(newContainerElementDesignItem, designItems)) {
282
+ break;
283
+ }
284
+ else {
285
+ newContainerElementDesignItem = null;
286
+ newContainerService = null;
287
+ continue;
288
+ }
289
+ }
290
+ }
291
+ }
292
+ return [newContainerElementDesignItem, newContainerService];
293
+ }
287
294
  keyboardEventHandler(designerCanvas, event, currentElement) { }
288
295
  }
package/dist/index.d.ts CHANGED
@@ -43,6 +43,7 @@ export type { IElementsJson } from "./elements/services/elementsService/IElement
43
43
  export type { IElementsService } from "./elements/services/elementsService/IElementsService.js";
44
44
  export * from "./elements/services/elementsService/JsonFileElementsService.js";
45
45
  export * from "./elements/services/elementsService/PreDefinedElementsService.js";
46
+ export * from "./elements/services/elementsService/WebcomponentManifestElementsService.js";
46
47
  export type { IHtmlWriterService } from "./elements/services/htmlWriterService/IHtmlWriterService.js";
47
48
  export type { IHtmlWriterOptions } from "./elements/services/htmlWriterService/IHtmlWriterOptions.js";
48
49
  export * from "./elements/services/htmlWriterService/AbstractHtmlWriterService.js";
@@ -71,6 +72,7 @@ export * from "./elements/services/propertiesService/services/LitElementProperti
71
72
  export * from "./elements/services/propertiesService/services/NativeElementsPropertiesService.js";
72
73
  export * from "./elements/services/propertiesService/services/PolymerPropertiesService.js";
73
74
  export * from "./elements/services/propertiesService/services/UnkownElementPropertiesService.js";
75
+ export * from "./elements/services/propertiesService/services/WebcomponentManifestPropertiesService.js";
74
76
  export * from "./elements/services/propertiesService/PropertyType.js";
75
77
  export * from "./elements/services/propertiesService/ValueType.js";
76
78
  export type { ISelectionChangedEvent } from "./elements/services/selectionService/ISelectionChangedEvent.js";
@@ -139,6 +141,8 @@ export * from "./elements/widgets/designerView/extensions/CanvasExtensionProvide
139
141
  export * from "./elements/widgets/designerView/extensions/ExtensionManager.js";
140
142
  export * from "./elements/widgets/designerView/extensions/GrayOutExtension.js";
141
143
  export * from "./elements/widgets/designerView/extensions/GrayOutExtensionProvider.js";
144
+ export * from "./elements/widgets/designerView/extensions/GrayOutDragOverContainerExtension.js";
145
+ export * from "./elements/widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.js";
142
146
  export * from "./elements/widgets/designerView/extensions/GridExtension.js";
143
147
  export * from "./elements/widgets/designerView/extensions/GridExtensionProvider.js";
144
148
  export * from "./elements/widgets/designerView/extensions/InvisibleDivExtension.js";
package/dist/index.js CHANGED
@@ -26,6 +26,7 @@ export * from "./elements/services/demoProviderService/DemoProviderService.js";
26
26
  export * from "./elements/services/dragDropService/DragDropService.js";
27
27
  export * from "./elements/services/elementsService/JsonFileElementsService.js";
28
28
  export * from "./elements/services/elementsService/PreDefinedElementsService.js";
29
+ export * from "./elements/services/elementsService/WebcomponentManifestElementsService.js";
29
30
  export * from "./elements/services/htmlWriterService/AbstractHtmlWriterService.js";
30
31
  export * from "./elements/services/htmlWriterService/FormatingHtmlWriterService.js";
31
32
  export * from "./elements/services/htmlWriterService/HtmlWriterService.js";
@@ -45,6 +46,7 @@ export * from "./elements/services/propertiesService/services/LitElementProperti
45
46
  export * from "./elements/services/propertiesService/services/NativeElementsPropertiesService.js";
46
47
  export * from "./elements/services/propertiesService/services/PolymerPropertiesService.js";
47
48
  export * from "./elements/services/propertiesService/services/UnkownElementPropertiesService.js";
49
+ export * from "./elements/services/propertiesService/services/WebcomponentManifestPropertiesService.js";
48
50
  export * from "./elements/services/propertiesService/PropertyType.js";
49
51
  export * from "./elements/services/propertiesService/ValueType.js";
50
52
  export * from "./elements/services/selectionService/SelectionService.js";
@@ -99,6 +101,8 @@ export * from "./elements/widgets/designerView/extensions/CanvasExtensionProvide
99
101
  export * from "./elements/widgets/designerView/extensions/ExtensionManager.js";
100
102
  export * from "./elements/widgets/designerView/extensions/GrayOutExtension.js";
101
103
  export * from "./elements/widgets/designerView/extensions/GrayOutExtensionProvider.js";
104
+ export * from "./elements/widgets/designerView/extensions/GrayOutDragOverContainerExtension.js";
105
+ export * from "./elements/widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.js";
102
106
  export * from "./elements/widgets/designerView/extensions/GridExtension.js";
103
107
  export * from "./elements/widgets/designerView/extensions/GridExtensionProvider.js";
104
108
  export * from "./elements/widgets/designerView/extensions/InvisibleDivExtension.js";
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.102",
4
+ "version": "0.0.105",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "",