@node-projects/web-component-designer 0.0.100 → 0.0.103

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 (33) hide show
  1. package/dist/elements/services/DefaultServiceBootstrap.js +5 -0
  2. package/dist/elements/services/placementService/DefaultPlacementService.d.ts +1 -0
  3. package/dist/elements/services/placementService/DefaultPlacementService.js +9 -0
  4. package/dist/elements/services/placementService/FlexBoxPlacementService.d.ts +1 -0
  5. package/dist/elements/services/placementService/FlexBoxPlacementService.js +3 -0
  6. package/dist/elements/services/placementService/GridPlacementService.d.ts +1 -0
  7. package/dist/elements/services/placementService/GridPlacementService.js +3 -0
  8. package/dist/elements/services/placementService/IPlacementService.d.ts +1 -0
  9. package/dist/elements/widgets/designerView/designerCanvas.d.ts +2 -0
  10. package/dist/elements/widgets/designerView/designerCanvas.js +63 -9
  11. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension copy.d.ts +12 -0
  12. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension copy.js +20 -0
  13. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension.d.ts +0 -1
  14. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension.js +0 -2
  15. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtensionProvider copy.d.ts +10 -0
  16. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtensionProvider copy.js +14 -0
  17. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtensionProvider.js +0 -1
  18. package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.js +3 -0
  19. package/dist/elements/widgets/designerView/extensions/ExtensionType.d.ts +12 -8
  20. package/dist/elements/widgets/designerView/extensions/ExtensionType.js +12 -8
  21. package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtension.d.ts +11 -0
  22. package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtension.js +18 -0
  23. package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.d.ts +10 -0
  24. package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.js +13 -0
  25. package/dist/elements/widgets/designerView/extensions/GrayOutDragOverExtension.d.ts +11 -0
  26. package/dist/elements/widgets/designerView/extensions/GrayOutDragOverExtension.js +18 -0
  27. package/dist/elements/widgets/designerView/extensions/GrayOutExtension.d.ts +1 -1
  28. package/dist/elements/widgets/designerView/extensions/GrayOutExtension.js +8 -8
  29. package/dist/elements/widgets/designerView/tools/PointerTool.d.ts +5 -0
  30. package/dist/elements/widgets/designerView/tools/PointerTool.js +52 -40
  31. package/dist/index.d.ts +2 -0
  32. package/dist/index.js +2 -0
  33. package/package.json +42 -42
@@ -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
  ]);
@@ -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;
@@ -9,6 +9,15 @@ export class DefaultPlacementService {
9
9
  return true;
10
10
  }
11
11
  canEnter(container, items) {
12
+ if (DomConverter.IsSelfClosingElement(container.element.localName))
13
+ return false;
14
+ if (container.element.shadowRoot && container.element.shadowRoot.querySelector('slot') == null)
15
+ return false;
16
+ if (!items.every(x => !x.element.contains(container.element)))
17
+ return false;
18
+ return true;
19
+ }
20
+ canEnterByDrop(container) {
12
21
  if (DomConverter.IsSelfClosingElement(container.element.localName))
13
22
  return false;
14
23
  if (container.element.shadowRoot && container.element.shadowRoot.querySelector('slot') == null)
@@ -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;
@@ -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
  }
@@ -10,6 +10,9 @@ export class ElementDragTitleExtension extends AbstractExtension {
10
10
  const boundRect = this.extendedItem.element.getBoundingClientRect();
11
11
  this._rect = this._drawRect((boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 16, 60, 15, 'svg-primary-selection-move', this._rect);
12
12
  this._text = this._drawText(this.extendedItem.name.substring(0, 10) + '…', (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 5, 'svg-text-primary', this._text);
13
+ const title = document.createElementNS("http://www.w3.org/2000/svg", "title");
14
+ title.textContent = this.extendedItem.name;
15
+ this._text.appendChild(title);
13
16
  this._rect.addEventListener('pointerdown', (e) => this._pointerEvent(e));
14
17
  this._rect.addEventListener('pointermove', (e) => this._pointerEvent(e));
15
18
  this._rect.addEventListener('pointerup', (e) => this._pointerEvent(e));
@@ -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
+ }
@@ -8,6 +8,6 @@ export declare class GrayOutExtension extends AbstractExtension {
8
8
  constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
9
9
  extend(): void;
10
10
  refresh(): void;
11
- drawGrayOut(rect: IRect): void;
11
+ drawGrayOut(r: IRect): void;
12
12
  dispose(): void;
13
13
  }
@@ -15,15 +15,15 @@ export class GrayOutExtension extends AbstractExtension {
15
15
  this.overlayLayerView.addOverlay(this._path, OverlayLayer.Background);
16
16
  this.overlays.push(this._path);
17
17
  }
18
- let itemRect = this.extendedItem.element.getBoundingClientRect();
19
- this.drawGrayOut(itemRect);
18
+ let normalizedRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
19
+ this.drawGrayOut(normalizedRect);
20
20
  }
21
- drawGrayOut(rect) {
22
- let r = { x: rect.x - this.designerCanvas.containerBoundingRect.x, y: rect.y - this.designerCanvas.containerBoundingRect.y, width: rect.width, height: rect.height };
23
- const pathPoints = "M0 0 L0 " + this.designerCanvas.containerBoundingRect.height + "L" + r.x + " " + this.designerCanvas.containerBoundingRect.height + "L" + r.x + " 0" + " L0 0" +
24
- "M" + r.x + " 0 L" + r.x + " " + r.y + "L" + this.designerCanvas.containerBoundingRect.width + " " + r.y + "L" + this.designerCanvas.containerBoundingRect.width + " 0" + "L" + r.x + " 0" +
25
- "M" + r.x + " " + (r.y + r.height) + "L" + r.x + " " + this.designerCanvas.containerBoundingRect.height + "L" + this.designerCanvas.containerBoundingRect.width + " " + this.designerCanvas.containerBoundingRect.height + "L" + this.designerCanvas.containerBoundingRect.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" + this.designerCanvas.containerBoundingRect.width + " " + (r.y + r.height) + "L" + this.designerCanvas.containerBoundingRect.width + " " + (r.y) + "L" + (r.x + r.width) + " " + r.y;
21
+ drawGrayOut(r) {
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;
27
27
  this._path.setAttribute("d", pathPoints);
28
28
  }
29
29
  dispose() {
@@ -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";
@@ -7,6 +10,7 @@ export declare class PointerTool implements ITool {
7
10
  private _initialPoint;
8
11
  private _actionType?;
9
12
  private _actionStartedDesignItem?;
13
+ private _actionStartedDesignItems?;
10
14
  private _previousEventName;
11
15
  private _dragOverExtensionItem;
12
16
  private _dragExtensionItem;
@@ -20,5 +24,6 @@ export declare class PointerTool implements ITool {
20
24
  private _resetTool;
21
25
  private _pointerActionTypeDrawSelection;
22
26
  private _pointerActionTypeDragOrSelect;
27
+ static FindPossibleContainer(designItem: IDesignItem, designItems: IDesignItem[], event: IPoint): [newContainerElementDesignItem: IDesignItem, newContainerService: IPlacementService];
23
28
  keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): void;
24
29
  }
@@ -9,6 +9,7 @@ export class PointerTool {
9
9
  _initialPoint;
10
10
  _actionType;
11
11
  _actionStartedDesignItem;
12
+ _actionStartedDesignItems;
12
13
  _previousEventName;
13
14
  _dragOverExtensionItem;
14
15
  _dragExtensionItem;
@@ -69,6 +70,7 @@ export class PointerTool {
69
70
  this._initialOffset = designerCanvas.getNormalizedOffsetInElement(event, currentElement);
70
71
  if (event.type == EventNames.PointerDown) {
71
72
  this._actionStartedDesignItem = currentDesignItem;
73
+ this._actionStartedDesignItems = [...designerCanvas.instanceServiceContainer.selectionService.selectedElements];
72
74
  designerCanvas.snapLines.clearSnaplines();
73
75
  if (currentDesignItem !== designerCanvas.rootDesignItem) {
74
76
  this._actionType = PointerActionType.Drag;
@@ -106,6 +108,7 @@ export class PointerTool {
106
108
  _resetTool() {
107
109
  this._actionType = null;
108
110
  this._actionStartedDesignItem = null;
111
+ this._actionStartedDesignItems = null;
109
112
  this._movedSinceStartedAction = false;
110
113
  this._initialPoint = null;
111
114
  }
@@ -154,6 +157,7 @@ export class PointerTool {
154
157
  if (designerCanvas.instanceServiceContainer.selectionService.selectedElements.indexOf(currentDesignItem) < 0)
155
158
  designerCanvas.instanceServiceContainer.selectionService.setSelectedElements([currentDesignItem]);
156
159
  }
160
+ this._actionStartedDesignItems = [...designerCanvas.instanceServiceContainer.selectionService.selectedElements];
157
161
  if (designerCanvas.alignOnSnap)
158
162
  designerCanvas.snapLines.calculateSnaplines(designerCanvas.instanceServiceContainer.selectionService.selectedElements);
159
163
  break;
@@ -177,43 +181,11 @@ export class PointerTool {
177
181
  else {
178
182
  designerCanvas.extensionManager.refreshExtension(dragItem, ExtensionType.ContainerDrag);
179
183
  }
180
- const canLeave = currentContainerService.canLeave(this._actionStartedDesignItem.parent, [this._actionStartedDesignItem]);
184
+ const canLeave = currentContainerService.canLeave(this._actionStartedDesignItem.parent, this._actionStartedDesignItems);
181
185
  let newContainerElementDesignItem = null;
182
186
  let newContainerService = null;
183
187
  if (canLeave) {
184
- const elementsFromPoint = designerCanvas.elementsFromPoint(event.x, event.y);
185
- for (let e of elementsFromPoint) {
186
- if (e == this._actionStartedDesignItem.element) {
187
- continue;
188
- }
189
- else if (e == this._actionStartedDesignItem.parent.element) {
190
- break;
191
- }
192
- else if (e == designerCanvas.rootDesignItem.element) {
193
- newContainerElementDesignItem = designerCanvas.rootDesignItem;
194
- const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
195
- newContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
196
- break;
197
- }
198
- else if (false) {
199
- //check we don't try to move a item over one of its children..
200
- }
201
- else {
202
- newContainerElementDesignItem = DesignItem.GetOrCreateDesignItem(e, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
203
- const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
204
- newContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
205
- if (newContainerService) {
206
- if (newContainerService.canEnter(newContainerElementDesignItem, [this._actionStartedDesignItem])) {
207
- break;
208
- }
209
- else {
210
- newContainerElementDesignItem = null;
211
- newContainerService = null;
212
- continue;
213
- }
214
- }
215
- }
216
- }
188
+ [newContainerElementDesignItem, newContainerService] = PointerTool.FindPossibleContainer(this._actionStartedDesignItem, this._actionStartedDesignItems, event);
217
189
  //if we found a new enterable container create extensions
218
190
  if (newContainerElementDesignItem != null) {
219
191
  if (this._dragOverExtensionItem != newContainerElementDesignItem) {
@@ -237,17 +209,18 @@ export class PointerTool {
237
209
  const oldOffset = currentContainerService.getElementOffset(this._actionStartedDesignItem.parent, this._actionStartedDesignItem);
238
210
  const newOffset = newContainerService.getElementOffset(newContainerElementDesignItem, this._actionStartedDesignItem);
239
211
  this._moveItemsOffset = { x: newOffset.x - oldOffset.x + this._moveItemsOffset.x, y: newOffset.y - oldOffset.y + this._moveItemsOffset.y };
240
- currentContainerService.leaveContainer(this._actionStartedDesignItem.parent, [this._actionStartedDesignItem]);
241
- newContainerElementDesignItem._insertChildInternal(this._actionStartedDesignItem);
212
+ currentContainerService.leaveContainer(this._actionStartedDesignItem.parent, this._actionStartedDesignItems);
213
+ for (let di of this._actionStartedDesignItems)
214
+ newContainerElementDesignItem._insertChildInternal(di); //todo -> maybe in enter container???
242
215
  const cp = { x: currentPoint.x - this._moveItemsOffset.x, y: currentPoint.y - this._moveItemsOffset.y };
243
- newContainerService.enterContainer(newContainerElementDesignItem, [this._actionStartedDesignItem]);
244
- newContainerService.place(event, designerCanvas, this._actionStartedDesignItem.parent, this._initialPoint, this._initialOffset, cp, designerCanvas.instanceServiceContainer.selectionService.selectedElements);
216
+ newContainerService.enterContainer(newContainerElementDesignItem, this._actionStartedDesignItems);
217
+ newContainerService.place(event, designerCanvas, this._actionStartedDesignItem.parent, this._initialPoint, this._initialOffset, cp, this._actionStartedDesignItems);
245
218
  }
246
219
  else {
247
220
  const cp = { x: currentPoint.x - this._moveItemsOffset.x, y: currentPoint.y - this._moveItemsOffset.y };
248
- currentContainerService.place(event, designerCanvas, this._actionStartedDesignItem.parent, this._initialPoint, this._initialOffset, cp, designerCanvas.instanceServiceContainer.selectionService.selectedElements);
221
+ currentContainerService.place(event, designerCanvas, this._actionStartedDesignItem.parent, this._initialPoint, this._initialOffset, cp, this._actionStartedDesignItems);
249
222
  }
250
- designerCanvas.extensionManager.refreshExtensions(designerCanvas.instanceServiceContainer.selectionService.selectedElements);
223
+ designerCanvas.extensionManager.refreshExtensions(this._actionStartedDesignItems);
251
224
  }
252
225
  }
253
226
  break;
@@ -279,5 +252,44 @@ export class PointerTool {
279
252
  }
280
253
  }
281
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
+ }
282
294
  keyboardEventHandler(designerCanvas, event, currentElement) { }
283
295
  }
package/dist/index.d.ts CHANGED
@@ -139,6 +139,8 @@ export * from "./elements/widgets/designerView/extensions/CanvasExtensionProvide
139
139
  export * from "./elements/widgets/designerView/extensions/ExtensionManager.js";
140
140
  export * from "./elements/widgets/designerView/extensions/GrayOutExtension.js";
141
141
  export * from "./elements/widgets/designerView/extensions/GrayOutExtensionProvider.js";
142
+ export * from "./elements/widgets/designerView/extensions/GrayOutDragOverContainerExtension.js";
143
+ export * from "./elements/widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.js";
142
144
  export * from "./elements/widgets/designerView/extensions/GridExtension.js";
143
145
  export * from "./elements/widgets/designerView/extensions/GridExtensionProvider.js";
144
146
  export * from "./elements/widgets/designerView/extensions/InvisibleDivExtension.js";
package/dist/index.js CHANGED
@@ -99,6 +99,8 @@ export * from "./elements/widgets/designerView/extensions/CanvasExtensionProvide
99
99
  export * from "./elements/widgets/designerView/extensions/ExtensionManager.js";
100
100
  export * from "./elements/widgets/designerView/extensions/GrayOutExtension.js";
101
101
  export * from "./elements/widgets/designerView/extensions/GrayOutExtensionProvider.js";
102
+ export * from "./elements/widgets/designerView/extensions/GrayOutDragOverContainerExtension.js";
103
+ export * from "./elements/widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.js";
102
104
  export * from "./elements/widgets/designerView/extensions/GridExtension.js";
103
105
  export * from "./elements/widgets/designerView/extensions/GridExtensionProvider.js";
104
106
  export * from "./elements/widgets/designerView/extensions/InvisibleDivExtension.js";
package/package.json CHANGED
@@ -1,42 +1,42 @@
1
- {
2
- "description": "A UI designer for Polymer apps",
3
- "name": "@node-projects/web-component-designer",
4
- "version": "0.0.100",
5
- "type": "module",
6
- "main": "./dist/index.js",
7
- "author": "",
8
- "license": "MIT",
9
- "scripts": {
10
- "tsc": "tsc",
11
- "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
12
- "build": "tsc",
13
- "prepublishOnly": "npm run build"
14
- },
15
- "dependencies": {
16
- "@node-projects/base-custom-webcomponent": "^0.9.1",
17
- "construct-style-sheets-polyfill": "^3.1.0"
18
- },
19
- "devDependencies": {
20
- "@node-projects/lean-he-esm": "^3.3.0",
21
- "@node-projects/node-html-parser-esm": "^2.4.1",
22
- "@papyrs/stylo": "^0.0.26",
23
- "@types/codemirror": "^5.60.5",
24
- "@types/jquery": "^3.5.14",
25
- "@types/jquery.fancytree": "0.0.7",
26
- "ace-builds": "^1.5.1",
27
- "codemirror": "^5.65.4",
28
- "esprima-next": "^5.8.2",
29
- "html2canvas": "*",
30
- "jest": "^28.1.0",
31
- "jquery": "^3.6.0",
32
- "jquery.fancytree": "^2.38.1",
33
- "monaco-editor": "^0.33.0",
34
- "ts-jest": "^28.0.3",
35
- "typescript": "^4.7.2",
36
- "typescript-lit-html-plugin": "^0.9.0"
37
- },
38
- "repository": {
39
- "type": "git",
40
- "url": "git+https://github.com/node-projects/web-component-designer.git"
41
- }
42
- }
1
+ {
2
+ "description": "A UI designer for Polymer apps",
3
+ "name": "@node-projects/web-component-designer",
4
+ "version": "0.0.103",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "author": "",
8
+ "license": "MIT",
9
+ "scripts": {
10
+ "tsc": "tsc",
11
+ "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
12
+ "build": "tsc",
13
+ "prepublishOnly": "npm run build"
14
+ },
15
+ "dependencies": {
16
+ "@node-projects/base-custom-webcomponent": "^0.9.1",
17
+ "construct-style-sheets-polyfill": "^3.1.0"
18
+ },
19
+ "devDependencies": {
20
+ "@node-projects/lean-he-esm": "^3.3.0",
21
+ "@node-projects/node-html-parser-esm": "^2.4.1",
22
+ "@papyrs/stylo": "^0.0.30",
23
+ "@types/codemirror": "^5.60.5",
24
+ "@types/jquery": "^3.5.14",
25
+ "@types/jquery.fancytree": "0.0.7",
26
+ "ace-builds": "^1.7.1",
27
+ "codemirror": "^6.0.1",
28
+ "esprima-next": "^5.8.3",
29
+ "html2canvas": "*",
30
+ "jest": "^28.1.2",
31
+ "jquery": "^3.6.0",
32
+ "jquery.fancytree": "^2.38.2",
33
+ "monaco-editor": "^0.33.0",
34
+ "ts-jest": "^28.0.5",
35
+ "typescript": "^4.7.4",
36
+ "typescript-lit-html-plugin": "^0.9.0"
37
+ },
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "git+https://github.com/node-projects/web-component-designer.git"
41
+ }
42
+ }