@node-projects/web-component-designer 0.1.167 → 0.1.169

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -60,10 +60,9 @@ Your index.html should be extended as follows:
60
60
 
61
61
  Pointer Tool:
62
62
  alt: select element behind
63
- meta: draw selection rect
64
- ctrl: add to selection
65
- shift: remove from selection
66
-
63
+ shift: draw selection rect
64
+ ctrl: add/remove from selection
65
+ ctrl+shift: pan
67
66
 
68
67
  ## Copyright notice
69
68
 
@@ -20,23 +20,23 @@ export var ElementDisplayType;
20
20
  export function isInline(element) {
21
21
  if (element == null)
22
22
  return false;
23
- if (element instanceof element.ownerDocument.defaultView.SVGElement || element instanceof element.ownerDocument.defaultView.HTMLHtmlElement || element instanceof element.ownerDocument.defaultView.HTMLHeadElement || element instanceof element.ownerDocument.defaultView.HTMLBodyElement)
23
+ if (element instanceof (element.ownerDocument.defaultView ?? window).SVGElement || element instanceof (element.ownerDocument.defaultView ?? window).HTMLHtmlElement || element instanceof (element.ownerDocument.defaultView ?? window).HTMLHeadElement || element instanceof (element.ownerDocument.defaultView ?? window).HTMLBodyElement)
24
24
  return false;
25
- return element.ownerDocument.defaultView.getComputedStyle(element).display.startsWith('inline');
25
+ return (element.ownerDocument.defaultView ?? window).getComputedStyle(element).display.startsWith('inline');
26
26
  }
27
27
  export function isInlineAfter(element) {
28
28
  if (element == null)
29
29
  return false;
30
- if (element instanceof element.ownerDocument.defaultView.SVGElement || element instanceof element.ownerDocument.defaultView.HTMLHtmlElement || element instanceof element.ownerDocument.defaultView.HTMLHeadElement || element instanceof element.ownerDocument.defaultView.HTMLBodyElement)
30
+ if (element instanceof (element.ownerDocument.defaultView ?? window).SVGElement || element instanceof (element.ownerDocument.defaultView ?? window).HTMLHtmlElement || element instanceof (element.ownerDocument.defaultView ?? window).HTMLHeadElement || element instanceof (element.ownerDocument.defaultView ?? window).HTMLBodyElement)
31
31
  return false;
32
- return element.ownerDocument.defaultView.getComputedStyle(element).display.startsWith('inline');
32
+ return (element.ownerDocument.defaultView ?? window).getComputedStyle(element).display.startsWith('inline');
33
33
  }
34
34
  export function getElementDisplaytype(element) {
35
- if (element instanceof element.ownerDocument.defaultView.SVGElement || element instanceof element.ownerDocument.defaultView.HTMLHtmlElement || element instanceof element.ownerDocument.defaultView.HTMLHeadElement || element instanceof element.ownerDocument.defaultView.HTMLBodyElement)
35
+ if (element instanceof (element.ownerDocument.defaultView ?? window).SVGElement || element instanceof (element.ownerDocument.defaultView ?? window).HTMLHtmlElement || element instanceof (element.ownerDocument.defaultView ?? window).HTMLHeadElement || element instanceof (element.ownerDocument.defaultView ?? window).HTMLBodyElement)
36
36
  return ElementDisplayType.block;
37
- if (element instanceof element.ownerDocument.defaultView.MathMLElement)
37
+ if (element instanceof (element.ownerDocument.defaultView ?? window).MathMLElement)
38
38
  return ElementDisplayType.block;
39
- const display = element.ownerDocument.defaultView.getComputedStyle(element).display;
39
+ const display = (element.ownerDocument.defaultView ?? window).getComputedStyle(element).display;
40
40
  return display == 'none' ? ElementDisplayType.none : display.startsWith('inline') ? ElementDisplayType.inline : ElementDisplayType.block;
41
41
  }
42
42
  export function isEmptyTextNode(node) {
@@ -81,18 +81,18 @@ export function getElementsWindowOffsetWithoutSelfAndParentTransformations(eleme
81
81
  break;
82
82
  }
83
83
  let nextParent = element.offsetParent ? element.offsetParent : element.getRootNode().host;
84
- if (element instanceof element.ownerDocument.defaultView.SVGSVGElement || element instanceof element.ownerDocument.defaultView.HTMLBodyElement || element instanceof element.ownerDocument.defaultView.HTMLHtmlElement) {
84
+ if (element instanceof (element.ownerDocument.defaultView ?? window).SVGSVGElement || element instanceof (element.ownerDocument.defaultView ?? window).HTMLBodyElement || element instanceof (element.ownerDocument.defaultView ?? window).HTMLHtmlElement) {
85
85
  nextParent = element.parentElement ? element.parentElement : element.getRootNode().host;
86
86
  }
87
- else if (element instanceof element.ownerDocument.defaultView.SVGGraphicsElement) {
87
+ else if (element instanceof (element.ownerDocument.defaultView ?? window).SVGGraphicsElement) {
88
88
  nextParent = element.ownerSVGElement;
89
89
  }
90
- else if (element instanceof element.ownerDocument.defaultView.MathMLElement) {
90
+ else if (element instanceof (element.ownerDocument.defaultView ?? window).MathMLElement) {
91
91
  nextParent = element.parentElement ?? nextParent;
92
92
  }
93
93
  let scrollLeft = 0;
94
94
  let scrollTop = 0;
95
- if (element instanceof element.ownerDocument.defaultView.HTMLElement) {
95
+ if (element instanceof (element.ownerDocument.defaultView ?? window).HTMLElement) {
96
96
  let parent = element.parentElement;
97
97
  while (parent !== null && parent !== nextParent) {
98
98
  scrollLeft += parent.scrollLeft;
@@ -106,7 +106,7 @@ export function getElementsWindowOffsetWithoutSelfAndParentTransformations(eleme
106
106
  }
107
107
  let currLeft = 0;
108
108
  let currTop = 0;
109
- if (element instanceof element.ownerDocument.defaultView.SVGSVGElement || element instanceof element.ownerDocument.defaultView.MathMLElement) {
109
+ if (element instanceof (element.ownerDocument.defaultView ?? window).SVGSVGElement || element instanceof (element.ownerDocument.defaultView ?? window).MathMLElement) {
110
110
  //TODO: !huge Perf impact! - fix without transformation
111
111
  let t = element.style.transform;
112
112
  element.style.transform = '';
@@ -116,7 +116,7 @@ export function getElementsWindowOffsetWithoutSelfAndParentTransformations(eleme
116
116
  currLeft = (bcEl.left - bcPar.left) / zoom;
117
117
  currTop = (bcEl.top - bcPar.top) / zoom;
118
118
  }
119
- else if (element instanceof element.ownerDocument.defaultView.SVGGraphicsElement) {
119
+ else if (element instanceof (element.ownerDocument.defaultView ?? window).SVGGraphicsElement) {
120
120
  let bbox = element.getBBox();
121
121
  currLeft = bbox.x;
122
122
  currTop = bbox.y;
@@ -1,11 +1,11 @@
1
1
  export function isVisualSvgElement(element) {
2
2
  let el = element;
3
3
  while (el) {
4
- if (el instanceof el.ownerDocument.defaultView.SVGSVGElement)
4
+ if (el instanceof (el.ownerDocument.defaultView ?? window).SVGSVGElement)
5
5
  return true;
6
- if (el instanceof el.ownerDocument.defaultView.SVGDefsElement)
6
+ if (el instanceof (el.ownerDocument.defaultView ?? window).SVGDefsElement)
7
7
  return false;
8
- if (el instanceof el.ownerDocument.defaultView.SVGMetadataElement)
8
+ if (el instanceof (el.ownerDocument.defaultView ?? window).SVGMetadataElement)
9
9
  return false;
10
10
  el = el.parentElement;
11
11
  }
@@ -9,7 +9,7 @@ let identityMatrix = [
9
9
  ];
10
10
  export function getElementCombinedTransform(element) {
11
11
  //https://www.w3.org/TR/css-transforms-2/#ctm
12
- let s = element.ownerDocument.defaultView.getComputedStyle(element);
12
+ let s = (element.ownerDocument.defaultView ?? window).getComputedStyle(element);
13
13
  let m = new DOMMatrix();
14
14
  if (s.translate != 'none' && s.translate) {
15
15
  m = m.multiply(new DOMMatrix('translate(' + s.translate + ')'));
@@ -159,7 +159,7 @@ export function getByParentsTransformedPointRelatedToCanvas(element, point, desi
159
159
  const parentElementTransformOrigin = new DOMPoint(elementWindowOffset.offsetLeft - designerCanvas.outerRect.x + tfX, elementWindowOffset.offsetTop - designerCanvas.outerRect.y + tfY);
160
160
  //if (actualElement == element)
161
161
  {
162
- const transf = element.ownerDocument.defaultView.getComputedStyle(element).transform;
162
+ const transf = (element.ownerDocument.defaultView ?? window).getComputedStyle(element).transform;
163
163
  const mtx = extractTranslationFromDOMMatrix(new DOMMatrix(transf));
164
164
  parentElementTransformOrigin.x -= mtx.x;
165
165
  parentElementTransformOrigin.y -= mtx.y;
@@ -177,16 +177,16 @@ export function getDesignerCanvasNormalizedTransformedPoint(element, point, desi
177
177
  export function getElementSize(element) {
178
178
  let width = element.offsetWidth;
179
179
  let height = element.offsetHeight;
180
- if (element instanceof element.ownerDocument.defaultView.SVGElement && element.width) {
180
+ if (element instanceof (element.ownerDocument.defaultView ?? window).SVGElement && element.width) {
181
181
  width = element.width.baseVal.value;
182
182
  height = element.height.baseVal.value;
183
183
  }
184
- else if (element instanceof element.ownerDocument.defaultView.SVGGraphicsElement) {
184
+ else if (element instanceof (element.ownerDocument.defaultView ?? window).SVGGraphicsElement) {
185
185
  let bbox = element.getBBox();
186
186
  width = bbox.width;
187
187
  height = bbox.height;
188
188
  }
189
- else if (element instanceof element.ownerDocument.defaultView.MathMLElement) {
189
+ else if (element instanceof (element.ownerDocument.defaultView ?? window).MathMLElement) {
190
190
  let bbox = element.getBoundingClientRect();
191
191
  width = bbox.width;
192
192
  height = bbox.height;
@@ -316,7 +316,7 @@ export class ContextMenu {
316
316
  close() {
317
317
  this._menuElement.remove();
318
318
  window.removeEventListener("keyup", this._windowKeyUp);
319
- window.removeEventListener("mousedown", this._windowDown);
319
+ window.removeEventListener("mousedown", this._windowDown, true);
320
320
  window.removeEventListener("resize", this._windowResize);
321
321
  setTimeout(() => window.removeEventListener("contextmenu", this._windowDown), 10);
322
322
  }
@@ -24,7 +24,7 @@ export declare class DesignItem implements IDesignItem {
24
24
  nodeReplaced: TypedEvent<void>;
25
25
  get window(): Window & typeof globalThis;
26
26
  get document(): Document;
27
- get usableContainer(): Element | Document | ShadowRoot;
27
+ get usableContainer(): ShadowRoot | Document | Element;
28
28
  clone(): Promise<IDesignItem>;
29
29
  allMatching(selectors: string): Generator<IDesignItem, void, undefined>;
30
30
  replaceNode(newNode: Node): void;
@@ -30,7 +30,7 @@ export class DesignItem {
30
30
  get window() {
31
31
  if (this.isRootItem && this.node instanceof HTMLIFrameElement)
32
32
  return this.node.contentDocument.defaultView;
33
- return this.node.ownerDocument.defaultView;
33
+ return (this.node.ownerDocument.defaultView ?? window);
34
34
  }
35
35
  get document() {
36
36
  if (this.isRootItem && this.node instanceof HTMLIFrameElement)
@@ -38,7 +38,7 @@ export class DesignItem {
38
38
  return this.node.ownerDocument;
39
39
  }
40
40
  get usableContainer() {
41
- if (this.isRootItem && this.element instanceof this.element.ownerDocument.defaultView.HTMLIFrameElement)
41
+ if (this.isRootItem && this.element instanceof (this.element.ownerDocument.defaultView ?? window).HTMLIFrameElement)
42
42
  return this.element.contentWindow.document;
43
43
  else if (this.isRootItem)
44
44
  return this.node.shadowRoot;
@@ -74,9 +74,9 @@ export class DesignItem {
74
74
  this.nodeReplaced.emit();
75
75
  }
76
76
  get nodeType() {
77
- if (this.node instanceof this.node.ownerDocument.defaultView.Comment)
77
+ if (this.node instanceof (this.node.ownerDocument.defaultView ?? window).Comment)
78
78
  return NodeType.Comment;
79
- if (this.node instanceof this.node.ownerDocument.defaultView.Text)
79
+ if (this.node instanceof (this.node.ownerDocument.defaultView ?? window).Text)
80
80
  return NodeType.TextNode;
81
81
  return NodeType.Element;
82
82
  }
@@ -105,7 +105,7 @@ export class DesignItem {
105
105
  }
106
106
  _reparseSpecialAttributes(name) {
107
107
  if (name == hideAtDesignTimeAttributeName) {
108
- if (this.element instanceof this.node.ownerDocument.defaultView.HTMLElement || this.element instanceof this.node.ownerDocument.defaultView.SVGElement) {
108
+ if (this.element instanceof (this.node.ownerDocument.defaultView ?? window).HTMLElement || this.element instanceof (this.node.ownerDocument.defaultView ?? window).SVGElement) {
109
109
  if (!this._attributes.has(hideAtDesignTimeAttributeName))
110
110
  this.element.style.display = this._styles.get('display') ?? "";
111
111
  else
@@ -113,7 +113,7 @@ export class DesignItem {
113
113
  }
114
114
  }
115
115
  else if (name == hideAtRunTimeAttributeName) {
116
- if (this.element instanceof this.node.ownerDocument.defaultView.HTMLElement || this.element instanceof this.node.ownerDocument.defaultView.SVGElement) {
116
+ if (this.element instanceof (this.node.ownerDocument.defaultView ?? window).HTMLElement || this.element instanceof (this.node.ownerDocument.defaultView ?? window).SVGElement) {
117
117
  if (!this._attributes.has(hideAtRunTimeAttributeName))
118
118
  this.element.style.opacity = this._styles.get('opacity') ?? "";
119
119
  else
@@ -121,7 +121,7 @@ export class DesignItem {
121
121
  }
122
122
  }
123
123
  else if (name == lockAtDesignTimeAttributeName) {
124
- if (this.element instanceof this.node.ownerDocument.defaultView.HTMLElement || this.element instanceof this.node.ownerDocument.defaultView.SVGElement) {
124
+ if (this.element instanceof (this.node.ownerDocument.defaultView ?? window).HTMLElement || this.element instanceof (this.node.ownerDocument.defaultView ?? window).SVGElement) {
125
125
  if (!this._attributes.has(lockAtDesignTimeAttributeName))
126
126
  this.element.style.pointerEvents = 'auto';
127
127
  else
@@ -330,7 +330,7 @@ export class DesignItem {
330
330
  }
331
331
  static createDesignItemFromInstance(node, serviceContainer, instanceServiceContainer) {
332
332
  let designItem = new DesignItem(node, node, serviceContainer, instanceServiceContainer);
333
- if (node instanceof node.ownerDocument.defaultView.HTMLTemplateElement && node.getAttribute('shadowrootmode') == 'open') {
333
+ if (node instanceof (node.ownerDocument.defaultView ?? window).HTMLTemplateElement && node.getAttribute('shadowrootmode') == 'open') {
334
334
  try {
335
335
  const shadow = node.parentNode.attachShadow({ mode: 'open' });
336
336
  shadow.appendChild(node.content.cloneNode(true));
@@ -345,7 +345,7 @@ export class DesignItem {
345
345
  designItem._attributes.set(a.name, a.value);
346
346
  }
347
347
  }
348
- if (node instanceof node.ownerDocument.defaultView.HTMLElement || node instanceof node.ownerDocument.defaultView.SVGElement) {
348
+ if (node instanceof (node.ownerDocument.defaultView ?? window).HTMLElement || node instanceof (node.ownerDocument.defaultView ?? window).SVGElement) {
349
349
  const cssParser = new CssAttributeParser();
350
350
  const st = node.getAttribute("style");
351
351
  if (st) {
@@ -390,13 +390,13 @@ export class DesignItem {
390
390
  _internalUpdateChildrenFromNodesChildren() {
391
391
  const newChilds = [];
392
392
  if (this.nodeType == NodeType.Element) {
393
- if (this.element instanceof this.node.ownerDocument.defaultView.HTMLTemplateElement) {
393
+ if (this.element instanceof (this.node.ownerDocument.defaultView ?? window).HTMLTemplateElement) {
394
394
  for (const c of this.element.content.childNodes) {
395
395
  const di = DesignItem.createDesignItemFromInstance(c, this.serviceContainer, this.instanceServiceContainer);
396
396
  newChilds.push(di);
397
397
  }
398
398
  }
399
- else if (this.element instanceof this.node.ownerDocument.defaultView.HTMLIFrameElement) {
399
+ else if (this.element instanceof (this.node.ownerDocument.defaultView ?? window).HTMLIFrameElement) {
400
400
  for (const c of this.element.contentWindow.document.childNodes) {
401
401
  const di = DesignItem.createDesignItemFromInstance(c, this.serviceContainer, this.instanceServiceContainer);
402
402
  newChilds.push(di);
@@ -640,7 +640,7 @@ export class DesignItem {
640
640
  if (this.isRootItem) {
641
641
  this.usableContainer.appendChild(designItem.view);
642
642
  }
643
- else if (this.view instanceof this.node.ownerDocument.defaultView.HTMLTemplateElement) {
643
+ else if (this.view instanceof (this.node.ownerDocument.defaultView ?? window).HTMLTemplateElement) {
644
644
  this.view.content.appendChild(designItem.view);
645
645
  }
646
646
  else
@@ -651,7 +651,7 @@ export class DesignItem {
651
651
  if (this.isRootItem) {
652
652
  this.usableContainer.insertBefore(designItem.view, el.element);
653
653
  }
654
- else if (this.view instanceof this.node.ownerDocument.defaultView.HTMLTemplateElement) {
654
+ else if (this.view instanceof (this.node.ownerDocument.defaultView ?? window).HTMLTemplateElement) {
655
655
  this.view.content.insertBefore(designItem.view, el.element);
656
656
  }
657
657
  else
@@ -9,7 +9,7 @@ export class DesignContext {
9
9
  enableStylesheetService: false,
10
10
  basicStackedToolbarExtensionShowOverlay: false,
11
11
  simulateHoverOnHover: false,
12
- selectUnhitableElements: false,
12
+ selectUnhitableElements: true,
13
13
  };
14
14
  extensionOptionsChanged = new TypedEvent;
15
15
  }
@@ -36,7 +36,6 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
36
36
  private _scaleFactor;
37
37
  private _canvasOffset;
38
38
  private _additionalStyle;
39
- private _currentContextMenu;
40
39
  private _backgroundImage;
41
40
  private _enableSelectTextNodesOnClick;
42
41
  private _moveGroup;
@@ -64,7 +64,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
64
64
  _scaleFactor = 1; //if scale css property is used this need to be the scale value
65
65
  _canvasOffset = { x: 0, y: 0 };
66
66
  _additionalStyle;
67
- _currentContextMenu;
68
67
  _backgroundImage;
69
68
  _enableSelectTextNodesOnClick = false;
70
69
  _moveGroup;
@@ -535,7 +534,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
535
534
  this.canvasOffset = { x: 0, y: 0 };
536
535
  this.zoomFactor = 1;
537
536
  for (let n of this.rootDesignItem.querySelectorAll('*')) {
538
- if (n instanceof n.ownerDocument.defaultView.Element) {
537
+ if (n instanceof (n.ownerDocument.defaultView ?? window).Element) {
539
538
  const rect = n.getBoundingClientRect();
540
539
  minX = minX < rect.x ? minX : rect.x;
541
540
  minY = minY < rect.y ? minY : rect.y;
@@ -910,7 +909,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
910
909
  }
911
910
  }
912
911
  showDesignItemContextMenu(designItem, event) {
913
- this._currentContextMenu?.close();
914
912
  const mnuItems = [];
915
913
  for (let cme of this.serviceContainer.designerContextMenuExtensions) {
916
914
  if (cme.shouldProvideContextmenu(event, this, designItem, 'designer')) {
@@ -31,7 +31,7 @@ export class PointerTool {
31
31
  }
32
32
  _showContextMenu(event, designerCanvas) {
33
33
  event.preventDefault();
34
- if (!event.ctrlKey && !event.shiftKey) {
34
+ if (!event.ctrlKey) {
35
35
  let items = designerCanvas.elementsFromPoint(event.x, event.y);
36
36
  for (let e of designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
37
37
  if (items.indexOf(e.element) >= 0) {
@@ -48,8 +48,7 @@ export class PointerTool {
48
48
  }
49
49
  }
50
50
  pointerEventHandler(designerCanvas, event, currentElement) {
51
- event.preventDefault();
52
- if (event.ctrlKey || event.shiftKey)
51
+ if (event.ctrlKey)
53
52
  this.cursor = 'copy';
54
53
  else
55
54
  this.cursor = 'default';
@@ -104,7 +103,8 @@ export class PointerTool {
104
103
  if (this._actionType == null) {
105
104
  this._initialPoint = currentPoint;
106
105
  this._initialOffset = designerCanvas.getNormalizedOffsetInElement(event, currentElement);
107
- if (event.metaKey) {
106
+ if (event.shiftKey) {
107
+ event.preventDefault();
108
108
  this._actionType = PointerActionType.DrawSelection;
109
109
  }
110
110
  else if (event.type == EventNames.PointerDown) {
@@ -196,7 +196,7 @@ export class PointerTool {
196
196
  }
197
197
  if (this._firstTimeInMove) {
198
198
  if (!currentDesignItem.instanceServiceContainer.selectionService.selectedElements.includes(currentDesignItem)) {
199
- if (event.ctrlKey || event.shiftKey)
199
+ if (event.ctrlKey)
200
200
  currentDesignItem.instanceServiceContainer.selectionService.setSelectedElements([...currentDesignItem.instanceServiceContainer.selectionService.selectedElements, currentDesignItem], event);
201
201
  else
202
202
  currentDesignItem.instanceServiceContainer.selectionService.setSelectedElements([currentDesignItem], event);
@@ -320,7 +320,7 @@ export class PointerTool {
320
320
  {
321
321
  this._started = false;
322
322
  if (!this._movedSinceStartedAction || this._actionType == PointerActionType.DragOrSelect) {
323
- if (this._previousEventName == EventNames.PointerDown && !event.shiftKey && !event.ctrlKey) {
323
+ if (this._previousEventName == EventNames.PointerDown && !event.ctrlKey) {
324
324
  designerCanvas.instanceServiceContainer.selectionService.setSelectedElements([this._actionStartedDesignItem], event);
325
325
  }
326
326
  else {
@@ -373,7 +373,7 @@ export class PointerTool {
373
373
  }
374
374
  }
375
375
  checkSelectElement(event, designerCanvas, currentDesignItem) {
376
- if (event.shiftKey || event.ctrlKey) {
376
+ if (event.ctrlKey) {
377
377
  const index = designerCanvas.instanceServiceContainer.selectionService.selectedElements.indexOf(currentDesignItem);
378
378
  if (index >= 0) {
379
379
  let newSelectedList = designerCanvas.instanceServiceContainer.selectionService.selectedElements.slice(0);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "description": "A WYSIWYG designer webcomponent for html components",
3
3
  "name": "@node-projects/web-component-designer",
4
- "version": "0.1.167",
4
+ "version": "0.1.169",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "jochen.kuehner@gmx.de",