@node-projects/web-component-designer 0.0.86 → 0.0.89

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 (55) hide show
  1. package/dist/elements/controls/PlainScrollbar.js +122 -116
  2. package/dist/elements/controls/SimpleSplitView.js +1 -1
  3. package/dist/elements/documentContainer.js +2 -0
  4. package/dist/elements/helper/ElementHelper.d.ts +1 -0
  5. package/dist/elements/helper/ElementHelper.js +10 -0
  6. package/dist/elements/item/DesignItem.d.ts +2 -0
  7. package/dist/elements/item/DesignItem.js +7 -0
  8. package/dist/elements/item/IDesignItem.d.ts +1 -0
  9. package/dist/elements/services/DefaultServiceBootstrap.js +0 -4
  10. package/dist/elements/services/ServiceContainer.d.ts +1 -3
  11. package/dist/elements/services/ServiceContainer.js +8 -3
  12. package/dist/elements/services/htmlParserService/NodeHtmlParserService.js +8 -0
  13. package/dist/elements/services/initializationService/DefaultIntializationService.js +12 -12
  14. package/dist/elements/services/instanceService/PrepareElementsForDesignerService.js +23 -23
  15. package/dist/elements/services/undoService/UndoService.js +3 -2
  16. package/dist/elements/services/undoService/transactionItems/InsertAction.js +0 -3
  17. package/dist/elements/widgets/designerView/IDesignerCanvas.d.ts +8 -0
  18. package/dist/elements/widgets/designerView/designerCanvas.d.ts +13 -1
  19. package/dist/elements/widgets/designerView/designerCanvas.js +129 -39
  20. package/dist/elements/widgets/designerView/designerCanvas.ts.BASE.d.ts +92 -0
  21. package/dist/elements/widgets/designerView/designerCanvas.ts.BASE.js +734 -0
  22. package/dist/elements/widgets/designerView/designerCanvas.ts.LOCAL.d.ts +95 -0
  23. package/dist/elements/widgets/designerView/designerCanvas.ts.LOCAL.js +768 -0
  24. package/dist/elements/widgets/designerView/designerCanvas.ts.REMOTE.d.ts +94 -0
  25. package/dist/elements/widgets/designerView/designerCanvas.ts.REMOTE.js +745 -0
  26. package/dist/elements/widgets/designerView/designerView.js +19 -15
  27. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension copy.d.ts +17 -0
  28. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension copy.js +80 -0
  29. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.js +4 -2
  30. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtensionProvider copy.d.ts +9 -0
  31. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtensionProvider copy.js +11 -0
  32. package/dist/elements/widgets/designerView/extensions/EditText/EditTextWithStyloExtension.d.ts +20 -0
  33. package/dist/elements/widgets/designerView/extensions/EditText/EditTextWithStyloExtension.js +83 -0
  34. package/dist/elements/widgets/designerView/extensions/EditText/EditTextWithStyloExtensionProvider.d.ts +10 -0
  35. package/dist/elements/widgets/designerView/extensions/EditText/EditTextWithStyloExtensionProvider.js +15 -0
  36. package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.js +2 -2
  37. package/dist/elements/widgets/designerView/extensions/PathExtension.js +2 -5
  38. package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +2 -1
  39. package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +1 -0
  40. package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.js +1 -0
  41. package/dist/elements/widgets/designerView/tools/DrawLineTool.js +1 -0
  42. package/dist/elements/widgets/designerView/tools/DrawPathTool.js +1 -0
  43. package/dist/elements/widgets/designerView/tools/DrawRectTool.js +1 -0
  44. package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.js +10 -9
  45. package/dist/elements/widgets/designerView/tools/PanTool.js +1 -0
  46. package/dist/elements/widgets/designerView/tools/PointerTool.js +4 -2
  47. package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.js +10 -9
  48. package/dist/elements/widgets/designerView/tools/ZoomTool.d.ts +8 -1
  49. package/dist/elements/widgets/designerView/tools/ZoomTool.js +69 -0
  50. package/dist/elements/widgets/paletteView/paletteTreeView.js +5 -0
  51. package/dist/elements/widgets/treeView/treeView.js +1 -0
  52. package/dist/elements/widgets/treeView/treeViewExtended.js +21 -20
  53. package/dist/index.d.ts +4 -4
  54. package/dist/index.js +4 -3
  55. package/package.json +5 -4
@@ -142,7 +142,7 @@ class Widget {
142
142
  if (clippedNewValue == this.value) {
143
143
  return false;
144
144
  }
145
- this.value = clippedNewValue;
145
+ this.value = isNaN(clippedNewValue) ? 0 : clippedNewValue;
146
146
  this.updateThumbPosition();
147
147
  return true;
148
148
  }
@@ -281,10 +281,16 @@ export class PlainScrollbar extends HTMLElement {
281
281
  widget;
282
282
  constructor() {
283
283
  super();
284
- const value = parseFloat(this.getAttribute("value"));
285
284
  this.widget = new Widget(this);
285
+ const value = parseFloat(this.getAttribute("value"));
286
286
  if (!isNaN(value))
287
287
  this.widget.value = value;
288
+ if (this.hasOwnProperty('value')) {
289
+ let value = this.value;
290
+ delete this.value;
291
+ if (!isNaN(value))
292
+ this.widget.value = value;
293
+ }
288
294
  }
289
295
  /* @Override */ connectedCallback() {
290
296
  this.widget.connectedCallback();
@@ -343,121 +349,121 @@ export class PlainScrollbar extends HTMLElement {
343
349
  const EPS = 1E-9;
344
350
  const buttonSize = "var(--plain-scrollbar-button-size, 13px)";
345
351
  const buttonPath = '<path d="M -60 30 h 120 L 0 -30 z" stroke-width="0"/>';
346
- const scrollbarStyle = `
347
- :host {
348
- display: block;
349
- contain: content;
350
- background-color: #f8f8f8;
351
- border-style: solid;
352
- border-width: 1px;
353
- border-color: #dddddd;
354
- }
355
- #root {
356
- touch-action: none;
357
- user-select: none;
358
- box-sizing: border-box;
359
- position: relative;
360
- width: 100%;
361
- height: 100%;
362
- }
363
- #trough {
364
- position: absolute;
365
- }
366
- #root.vertical #trough {
367
- width: 100%;
368
- top: ${buttonSize};
369
- bottom: ${buttonSize};
370
- }
371
- #root.horizontal #trough {
372
- height: 100%;
373
- left: ${buttonSize};
374
- right: ${buttonSize};
375
- }
376
- #thumb {
377
- box-sizing: border-box;
378
- position: absolute;
379
- width: 100%;
380
- height: 100%;
381
- background-color: var(--plain-scrollbar-thumb-background-color, #f0f0f0);
382
- border-style: solid;
383
- border-width: var(--plain-scrollbar-thumb-border-width, 1px);
384
- border-color: var(--plain-scrollbar-thumb-border-color, #b8b8b8);
385
- border-radius: var(--plain-scrollbar-thumb-border-radius, 4px);
386
- transition: background-color 50ms linear;
387
- }
388
- #thumb:hover {
389
- background-color: var(--plain-scrollbar-thumb-background-color-hover, #e0e0e0);
390
- }
391
- #thumb.active {
392
- background-color: var(--plain-scrollbar-thumb-background-color-active, #c0c0c0);
393
- }
394
- #button1,
395
- #button2 {
396
- box-sizing: border-box;
397
- position: absolute;
398
- display: block;
399
- fill: var(--plain-scrollbar-button-color, #606060);
400
- }
401
- #root.vertical #button1 {
402
- top: 0;
403
- width: 100%;
404
- height: ${buttonSize};
405
- }
406
- #root.vertical #button2 {
407
- bottom: 0;
408
- width: 100%;
409
- height: ${buttonSize};
410
- }
411
- #root.horizontal #button1 {
412
- left: 0;
413
- height: 100%;
414
- width: ${buttonSize};
415
- }
416
- #root.horizontal #button2 {
417
- right: 0;
418
- height: 100%;
419
- width: ${buttonSize};
420
- }
421
- #upArrow,
422
- #downArrow,
423
- #leftArrow,
424
- #rightArrow {
425
- display: none;
426
- width: 100%;
427
- height: 100%;
428
- }
429
- #root.vertical #upArrow,
430
- #root.vertical #downArrow {
431
- display: block;
432
- }
433
- #root.horizontal #leftArrow,
434
- #root.horizontal #rightArrow {
435
- display: block;
436
- }
437
- #button1:hover,
438
- #button2:hover {
439
- background-color: var(--plain-scrollbar-button-color-hover, #e0e0e0);
440
- }
441
- #button1.active,
442
- #button2.active {
443
- background-color: var(--plain-scrollbar-button-color-active, #c0c0c0);
444
- }
352
+ const scrollbarStyle = `
353
+ :host {
354
+ display: block;
355
+ contain: content;
356
+ background-color: #f8f8f8;
357
+ border-style: solid;
358
+ border-width: 1px;
359
+ border-color: #dddddd;
360
+ }
361
+ #root {
362
+ touch-action: none;
363
+ user-select: none;
364
+ box-sizing: border-box;
365
+ position: relative;
366
+ width: 100%;
367
+ height: 100%;
368
+ }
369
+ #trough {
370
+ position: absolute;
371
+ }
372
+ #root.vertical #trough {
373
+ width: 100%;
374
+ top: ${buttonSize};
375
+ bottom: ${buttonSize};
376
+ }
377
+ #root.horizontal #trough {
378
+ height: 100%;
379
+ left: ${buttonSize};
380
+ right: ${buttonSize};
381
+ }
382
+ #thumb {
383
+ box-sizing: border-box;
384
+ position: absolute;
385
+ width: 100%;
386
+ height: 100%;
387
+ background-color: var(--plain-scrollbar-thumb-background-color, #f0f0f0);
388
+ border-style: solid;
389
+ border-width: var(--plain-scrollbar-thumb-border-width, 1px);
390
+ border-color: var(--plain-scrollbar-thumb-border-color, #b8b8b8);
391
+ border-radius: var(--plain-scrollbar-thumb-border-radius, 4px);
392
+ transition: background-color 50ms linear;
393
+ }
394
+ #thumb:hover {
395
+ background-color: var(--plain-scrollbar-thumb-background-color-hover, #e0e0e0);
396
+ }
397
+ #thumb.active {
398
+ background-color: var(--plain-scrollbar-thumb-background-color-active, #c0c0c0);
399
+ }
400
+ #button1,
401
+ #button2 {
402
+ box-sizing: border-box;
403
+ position: absolute;
404
+ display: block;
405
+ fill: var(--plain-scrollbar-button-color, #606060);
406
+ }
407
+ #root.vertical #button1 {
408
+ top: 0;
409
+ width: 100%;
410
+ height: ${buttonSize};
411
+ }
412
+ #root.vertical #button2 {
413
+ bottom: 0;
414
+ width: 100%;
415
+ height: ${buttonSize};
416
+ }
417
+ #root.horizontal #button1 {
418
+ left: 0;
419
+ height: 100%;
420
+ width: ${buttonSize};
421
+ }
422
+ #root.horizontal #button2 {
423
+ right: 0;
424
+ height: 100%;
425
+ width: ${buttonSize};
426
+ }
427
+ #upArrow,
428
+ #downArrow,
429
+ #leftArrow,
430
+ #rightArrow {
431
+ display: none;
432
+ width: 100%;
433
+ height: 100%;
434
+ }
435
+ #root.vertical #upArrow,
436
+ #root.vertical #downArrow {
437
+ display: block;
438
+ }
439
+ #root.horizontal #leftArrow,
440
+ #root.horizontal #rightArrow {
441
+ display: block;
442
+ }
443
+ #button1:hover,
444
+ #button2:hover {
445
+ background-color: var(--plain-scrollbar-button-color-hover, #e0e0e0);
446
+ }
447
+ #button1.active,
448
+ #button2.active {
449
+ background-color: var(--plain-scrollbar-button-color-active, #c0c0c0);
450
+ }
445
451
  `;
446
- const scrollbarHtmlTemplate = `
447
- <style>${scrollbarStyle}</style>
448
- <div id="root" part="root">
449
- <div id="button1" part="button button1">
450
- <svg id="upArrow" part="arrow upArrow" viewBox="-100 -100 200 200">${buttonPath}</svg>
451
- <svg id="leftArrow" part="arrow leftArrow" viewBox="-100 -100 200 200"><g transform="rotate(-90)">${buttonPath}</g></svg>
452
- </div>
453
- <div id="trough" part="trough">
454
- <div id="thumb" part="thumb"></div>
455
- </div>
456
- <div id="button2" part="button button2">
457
- <svg id="downArrow" part="arrow downArrow" viewBox="-100 -100 200 200"><g transform="rotate(180)">${buttonPath}</g></svg>
458
- <svg id="rightArrow" part="arrow rightArrow" viewBox="-100 -100 200 200"><g transform="rotate(90)">${buttonPath}</g></svg>
459
- </div>
460
- </div>
452
+ const scrollbarHtmlTemplate = `
453
+ <style>${scrollbarStyle}</style>
454
+ <div id="root" part="root">
455
+ <div id="button1" part="button button1">
456
+ <svg id="upArrow" part="arrow upArrow" viewBox="-100 -100 200 200">${buttonPath}</svg>
457
+ <svg id="leftArrow" part="arrow leftArrow" viewBox="-100 -100 200 200"><g transform="rotate(-90)">${buttonPath}</g></svg>
458
+ </div>
459
+ <div id="trough" part="trough">
460
+ <div id="thumb" part="thumb"></div>
461
+ </div>
462
+ <div id="button2" part="button button2">
463
+ <svg id="downArrow" part="arrow downArrow" viewBox="-100 -100 200 200"><g transform="rotate(180)">${buttonPath}</g></svg>
464
+ <svg id="rightArrow" part="arrow rightArrow" viewBox="-100 -100 200 200"><g transform="rotate(90)">${buttonPath}</g></svg>
465
+ </div>
466
+ </div>
461
467
  `;
462
468
  //------------------------------------------------------------------------------
463
469
  function formatOrientation(b) {
@@ -8,7 +8,7 @@ export class SimpleSplitView extends BaseCustomWebComponentConstructorAppend {
8
8
  position: relative;
9
9
  height: 100%;
10
10
  width: 100%;
11
- grid-template-rows: calc(var(--split) * 1%) 5px calc((100 - var(--split)) * 1%);
11
+ grid-template-rows: calc(var(--split) * 1%) 5px calc(((100 - var(--split)) * 1%) - 5px);
12
12
  display: grid;
13
13
  align-items: center;
14
14
  }
@@ -62,9 +62,11 @@ export class DocumentContainer extends BaseCustomWebComponentLazyAppend {
62
62
  this.designerView.designerCanvas.onContentChanged.on(() => this.designerContentChanged());
63
63
  this.codeView = new serviceContainer.config.codeViewWidget();
64
64
  this.codeView.slot = 'bottom';
65
+ this.codeView.style.position = 'relative';
65
66
  this._codeDiv = document.createElement("div");
66
67
  this._tabControl.appendChild(this._codeDiv);
67
68
  this._codeDiv.title = 'Code';
69
+ this._codeDiv.style.position = 'relative';
68
70
  this._codeDiv.appendChild(this.codeView);
69
71
  this.codeView.onTextChanged.on(text => {
70
72
  if (!this._disableChangeNotificationDesigner) {
@@ -7,3 +7,4 @@ export declare enum ElementDisplayType {
7
7
  export declare function isInline(element: HTMLElement): boolean;
8
8
  export declare function getElementDisplaytype(element: HTMLElement): ElementDisplayType;
9
9
  export declare function isEmptyTextNode(node: Node): boolean;
10
+ export declare function getActiveElement(): Element;
@@ -20,3 +20,13 @@ export function getElementDisplaytype(element) {
20
20
  export function isEmptyTextNode(node) {
21
21
  return node.textContent.trim() == '' && node.textContent.indexOf('\xa0' /* &nbsp; */) < 0;
22
22
  }
23
+ export function getActiveElement() {
24
+ let activeElement = document.activeElement;
25
+ let lastActive = null;
26
+ while (activeElement != lastActive) {
27
+ lastActive = activeElement;
28
+ if (activeElement.shadowRoot != null && activeElement.shadowRoot.activeElement)
29
+ activeElement = activeElement.shadowRoot.activeElement;
30
+ }
31
+ return activeElement;
32
+ }
@@ -39,6 +39,8 @@ export declare class DesignItem implements IDesignItem {
39
39
  get hasContent(): boolean;
40
40
  get content(): string;
41
41
  set content(value: string);
42
+ get innerHTML(): string;
43
+ set innerHTML(value: string);
42
44
  private _hideAtDesignTime;
43
45
  get hideAtDesignTime(): boolean;
44
46
  set hideAtDesignTime(value: boolean);
@@ -114,6 +114,13 @@ export class DesignItem {
114
114
  set content(value) {
115
115
  this.node.textContent = value;
116
116
  }
117
+ get innerHTML() {
118
+ return this.element.innerHTML;
119
+ }
120
+ set innerHTML(value) {
121
+ this.element.innerHTML = value;
122
+ this.updateChildrenFromNodesChildren();
123
+ }
117
124
  _hideAtDesignTime;
118
125
  get hideAtDesignTime() {
119
126
  return this._hideAtDesignTime;
@@ -32,6 +32,7 @@ export interface IDesignItem {
32
32
  updateChildrenFromNodesChildren(): any;
33
33
  readonly hasContent: boolean;
34
34
  content: string;
35
+ innerHTML?: string;
35
36
  readonly node: Node;
36
37
  readonly element: Element;
37
38
  serviceContainer: ServiceContainer;
@@ -39,7 +39,6 @@ import { GridPlacementService } from './placementService/GridPlacementService.js
39
39
  import { ElementAtPointService } from './elementAtPointService/ElementAtPointService';
40
40
  import { FlexBoxPlacementService } from './placementService/FlexBoxPlacementService';
41
41
  import { SnaplinesProviderService } from './placementService/SnaplinesProviderService';
42
- import { PrepareElementsForDesignerService } from './instanceService/PrepareElementsForDesignerService';
43
42
  import { DragDropService } from './dragDropService/DragDropService';
44
43
  import { EditTextExtensionProvider } from '../widgets/designerView/extensions/EditText/EditTextExtensionProvider.js';
45
44
  import { CopyPasteService } from './copyPasteService/CopyPasteService';
@@ -54,7 +53,6 @@ import { DrawLineTool } from '../widgets/designerView/tools/DrawLineTool.js';
54
53
  import { HtmlWriterService } from './htmlWriterService/HtmlWriterService.js';
55
54
  import { RectContextMenu } from '../widgets/designerView/extensions/contextMenu/RectContextMenu.js';
56
55
  import { PathContextMenu } from '../widgets/designerView/extensions/contextMenu/PathContextMenu.js';
57
- import { IframeExtensionProvider } from '../widgets/designerView/extensions/IframeExtensionProvider.js';
58
56
  export function createDefaultServiceContainer() {
59
57
  let serviceContainer = new ServiceContainer();
60
58
  serviceContainer.register("propertyService", new PolymerPropertiesService());
@@ -71,7 +69,6 @@ export function createDefaultServiceContainer() {
71
69
  serviceContainer.register("snaplinesProviderService", new SnaplinesProviderService());
72
70
  serviceContainer.register("htmlParserService", new DefaultHtmlParserService());
73
71
  serviceContainer.register("elementAtPointService", new ElementAtPointService());
74
- serviceContainer.register("prepareElementsForDesignerService", new PrepareElementsForDesignerService());
75
72
  serviceContainer.register("dragDropService", new DragDropService());
76
73
  serviceContainer.register("copyPasteService", new CopyPasteService());
77
74
  serviceContainer.register("modelCommandService", new DefaultModelCommandService());
@@ -79,7 +76,6 @@ export function createDefaultServiceContainer() {
79
76
  serviceContainer.designerExtensions.set(ExtensionType.Permanent, [
80
77
  // new ResizeExtensionProvider(false),
81
78
  new InvisibleDivExtensionProvider(),
82
- new IframeExtensionProvider(),
83
79
  // new ElementDragTitleExtensionProvider(),
84
80
  ]);
85
81
  serviceContainer.designerExtensions.set(ExtensionType.PrimarySelection, [
@@ -18,7 +18,6 @@ import { GlobalContext } from './GlobalContext';
18
18
  import { IBindingService } from "./bindingsService/IBindingService";
19
19
  import { IElementAtPointService } from './elementAtPointService/IElementAtPointService';
20
20
  import { ISnaplinesProviderService } from "./placementService/ISnaplinesProviderService.js";
21
- import { IPrepareElementsForDesignerService } from './instanceService/IPrepareElementsForDesignerService';
22
21
  import { IDragDropService } from './dragDropService/IDragDropService';
23
22
  import { ICopyPasteService } from "./copyPasteService/ICopyPasteService.js";
24
23
  import { IDesignerPointerExtensionProvider } from "../widgets/designerView/extensions/pointerExtensions/IDesignerPointerExtensionProvider.js";
@@ -41,7 +40,6 @@ interface ServiceNameMap {
41
40
  "bindableObjectsService": IBindableObjectsService;
42
41
  "bindableObjectDragDropService": IBindableObjectDragDropService;
43
42
  "elementAtPointService": IElementAtPointService;
44
- "prepareElementsForDesignerService": IPrepareElementsForDesignerService;
45
43
  "dragDropService": IDragDropService;
46
44
  "copyPasteService": ICopyPasteService;
47
45
  "modelCommandService": IModelCommandService;
@@ -53,6 +51,7 @@ export declare class ServiceContainer extends BaseServiceContainer<ServiceNameMa
53
51
  demoViewWidget: new (...args: any[]) => IDemoView & HTMLElement;
54
52
  };
55
53
  readonly designerExtensions: Map<(ExtensionType | string), IDesignerExtensionProvider[]>;
54
+ removeDesignerExtensionOfType(container: (ExtensionType | string), lambda: new (...args: any[]) => IDesignerExtensionProvider): void;
56
55
  readonly designViewConfigButtons: IDesignViewConfigButtonsProvider[];
57
56
  readonly designerPointerExtensions: IDesignerPointerExtensionProvider[];
58
57
  designerContextMenuExtensions: IContextMenuExtension[];
@@ -71,7 +70,6 @@ export declare class ServiceContainer extends BaseServiceContainer<ServiceNameMa
71
70
  get htmlParserService(): IHtmlParserService;
72
71
  get intializationService(): IIntializationService;
73
72
  get elementAtPointService(): IElementAtPointService;
74
- get prepareElementsForDesignerService(): IPrepareElementsForDesignerService;
75
73
  get dragDropService(): IDragDropService;
76
74
  get copyPasteService(): ICopyPasteService;
77
75
  get modelCommandService(): IModelCommandService;
@@ -8,6 +8,14 @@ export class ServiceContainer extends BaseServiceContainer {
8
8
  demoViewWidget: DemoView
9
9
  };
10
10
  designerExtensions = new Map();
11
+ removeDesignerExtensionOfType(container, lambda) {
12
+ const extContainer = this.designerExtensions.get(container);
13
+ for (let i = 0; i < extContainer.length; i++) {
14
+ if (extContainer[i].constructor === lambda) {
15
+ extContainer.splice(i, 1);
16
+ }
17
+ }
18
+ }
11
19
  designViewConfigButtons = [];
12
20
  designerPointerExtensions = [];
13
21
  designerContextMenuExtensions;
@@ -52,9 +60,6 @@ export class ServiceContainer extends BaseServiceContainer {
52
60
  get elementAtPointService() {
53
61
  return this.getLastService('elementAtPointService');
54
62
  }
55
- get prepareElementsForDesignerService() {
56
- return this.getLastService('prepareElementsForDesignerService');
57
- }
58
63
  get dragDropService() {
59
64
  return this.getLastService('dragDropService');
60
65
  }
@@ -27,6 +27,7 @@ export class NodeHtmlParserService {
27
27
  let designItem = null;
28
28
  if (item.nodeType == 1) {
29
29
  let element;
30
+ let manualCreatedElement = false;
30
31
  if (!namespace)
31
32
  element = newElementFromString('<' + item.rawTagName + ' ' + item.rawAttrs + '></' + item.rawTagName + '>'); // some custom elements only parse attributes during constructor call
32
33
  if (!element) {
@@ -34,6 +35,7 @@ export class NodeHtmlParserService {
34
35
  element = document.createElementNS(namespace, item.rawTagName);
35
36
  else
36
37
  element = document.createElement(item.rawTagName);
38
+ manualCreatedElement = true;
37
39
  }
38
40
  designItem = new DesignItem(element, serviceContainer, instanceServiceContainer);
39
41
  let hideAtDesignTime = false;
@@ -44,6 +46,9 @@ export class NodeHtmlParserService {
44
46
  for (let a in attr) {
45
47
  if (a !== 'style') {
46
48
  designItem.attributes.set(a, attr[a]);
49
+ if (manualCreatedElement) {
50
+ element.setAttribute(a, attr[a]);
51
+ }
47
52
  if (a === 'node-projects-hide-at-design-time')
48
53
  hideAtDesignTime = true;
49
54
  else if (a === 'node-projects-hide-at-run-time')
@@ -60,6 +65,9 @@ export class NodeHtmlParserService {
60
65
  styleParser.parse(style);
61
66
  for (let s of styleParser.entries) {
62
67
  designItem.styles.set(s.name, s.value);
68
+ if (manualCreatedElement) {
69
+ element.style[s.name] = s.value;
70
+ }
63
71
  }
64
72
  }
65
73
  if (!lockAtDesignTime && (element instanceof HTMLElement || element instanceof SVGElement)) {
@@ -1,22 +1,22 @@
1
1
  export class DefaultIntializationService {
2
2
  init(designItem) {
3
- if (designItem.name == 'iframe') {
4
- this.initializeIframe(designItem.element);
5
- }
3
+ /*if (designItem.name == 'iframe') {
4
+ this.initializeIframe(<HTMLIFrameElement>designItem.element);
5
+ }*/
6
6
  }
7
7
  initializeIframe(iframe) {
8
- iframe.contentDocument.body.style.pointerEvents = 'none';
9
- function cloneIframeEvent(event) {
10
- var clRect = iframe.getBoundingClientRect();
11
- let data = { ...event };
12
- data.clientX = event.clientX + clRect.left;
13
- data.clientY = event.clientY + clRect.top;
14
- var evt = new PointerEvent(event.type, data); //new CustomEvent('pointerdown', {bubbles: true, cancelable: false});
15
- iframe.dispatchEvent(evt);
8
+ /*iframe.contentDocument.body.style.pointerEvents = 'none';
9
+ function cloneIframeEvent(event: PointerEvent) {
10
+ var clRect = iframe.getBoundingClientRect();
11
+ let data = { ...event };
12
+ data.clientX = event.clientX + clRect.left;
13
+ data.clientY = event.clientY + clRect.top;
14
+ var evt = new PointerEvent(event.type, data) //new CustomEvent('pointerdown', {bubbles: true, cancelable: false});
15
+ iframe.dispatchEvent(evt);
16
16
  }
17
17
  iframe.contentWindow.addEventListener('pointerdown', cloneIframeEvent);
18
18
  iframe.contentWindow.addEventListener('pointermove', cloneIframeEvent);
19
- iframe.contentWindow.addEventListener('pointerup', cloneIframeEvent);
19
+ iframe.contentWindow.addEventListener('pointerup', cloneIframeEvent);*/
20
20
  }
21
21
  ;
22
22
  }
@@ -5,28 +5,28 @@ export class PrepareElementsForDesignerService {
5
5
  this._prepareElementsForDesigner(designItem.element.querySelectorAll('*'), true);
6
6
  }
7
7
  _prepareElementsForDesigner(elements, rootElements) {
8
- for (let el of elements) {
9
- if (el.shadowRoot) {
10
- this._prepareElementsForDesigner((el.shadowRoot).querySelectorAll('*'), false);
11
- }
12
- if (el instanceof HTMLElement) {
13
- el.onclick = null;
14
- el.onmousedown = null;
15
- el.onmouseup = null;
16
- if (!rootElements)
17
- el.style.pointerEvents = 'none';
18
- }
19
- if (el instanceof HTMLImageElement) {
20
- el.draggable = false;
21
- }
22
- else if (el instanceof HTMLInputElement) {
23
- el.onmousedown = (e) => e.preventDefault();
24
- //const ip = el;
25
- //el.onclick = (e) => { if (ip.type == 'checkbox') ip.checked = !ip.checked };
26
- }
27
- else if (el instanceof HTMLSelectElement) {
28
- el.onmousedown = (e) => e.preventDefault();
29
- }
30
- }
8
+ /*for (let el of elements) {
9
+ if ((<HTMLElement>el).shadowRoot) {
10
+ this._prepareElementsForDesigner(((<HTMLElement>el).shadowRoot).querySelectorAll('*'), false);
11
+ }
12
+ if (el instanceof HTMLElement) {
13
+ el.onclick = null;
14
+ el.onmousedown = null;
15
+ el.onmouseup = null;
16
+ if (!rootElements)
17
+ el.style.pointerEvents = 'none';
18
+ }
19
+ if (el instanceof HTMLImageElement) {
20
+ el.draggable = false;
21
+ }
22
+ else if (el instanceof HTMLInputElement) {
23
+ el.onmousedown = (e) => e.preventDefault();
24
+ //const ip = el;
25
+ //el.onclick = (e) => { if (ip.type == 'checkbox') ip.checked = !ip.checked };
26
+ }
27
+ else if (el instanceof HTMLSelectElement) {
28
+ el.onmousedown = (e) => e.preventDefault();
29
+ }
30
+ }*/
31
31
  }
32
32
  }
@@ -19,16 +19,17 @@ export class UndoService {
19
19
  let itm = this._transactionStack.pop();
20
20
  if (itm !== transactionItem) {
21
21
  this.clear();
22
- throw "UndoService - Commited Transation was not the last";
22
+ throw "UndoService - Commited Transaction was not the last";
23
23
  }
24
24
  if (itm.undoStack.length)
25
25
  this._undoStack.push(itm);
26
+ this._redoStack = [];
26
27
  }
27
28
  abortTransactionItem(transactionItem) {
28
29
  let itm = this._transactionStack.pop();
29
30
  if (itm !== transactionItem) {
30
31
  this.clear();
31
- throw "UndoService - Aborted Transation was not the last";
32
+ throw "UndoService - Aborted Transaction was not the last";
32
33
  }
33
34
  itm.undo();
34
35
  }
@@ -15,9 +15,6 @@ export class InsertAction {
15
15
  }
16
16
  do() {
17
17
  this.designItem._insertChildInternal(this.newItem, this.index);
18
- const prepService = this.designItem.serviceContainer.prepareElementsForDesignerService;
19
- if (prepService)
20
- requestAnimationFrame(() => prepService.prepareElementsForDesigner(this.newItem));
21
18
  this.affectedItems[0].instanceServiceContainer.contentService.onContentChanged.emit({ changeType: 'added', designItems: [this.newItem] });
22
19
  }
23
20
  designItem;
@@ -9,13 +9,16 @@ import { IPoint } from "../../../interfaces/IPoint";
9
9
  import { OverlayLayerView } from "./overlayLayerView";
10
10
  import { IRect } from "../../../interfaces/IRect.js";
11
11
  import { TypedEvent } from "@node-projects/base-custom-webcomponent";
12
+ import { ISize } from "../../../interfaces/ISize.js";
12
13
  export interface IDesignerCanvas extends IPlacementView, IUiCommandHandler {
13
14
  readonly serviceContainer: ServiceContainer;
14
15
  readonly instanceServiceContainer: InstanceServiceContainer;
15
16
  readonly containerBoundingRect: DOMRect;
17
+ readonly outerRect: DOMRect;
16
18
  readonly rootDesignItem: IDesignItem;
17
19
  readonly overlayLayer: OverlayLayerView;
18
20
  readonly extensionManager: IExtensionManager;
21
+ readonly clickOverlay: HTMLDivElement;
19
22
  readonly snapLines: Snaplines;
20
23
  readonly shadowRoot: ShadowRoot;
21
24
  readonly alignOnGrid: boolean;
@@ -27,9 +30,14 @@ export interface IDesignerCanvas extends IPlacementView, IUiCommandHandler {
27
30
  eatEvents: Element;
28
31
  initialize(serviceContainer: ServiceContainer): any;
29
32
  getNormalizedEventCoordinates(event: MouseEvent): IPoint;
33
+ getViewportCoordinates(event: MouseEvent): IPoint;
30
34
  getNormalizedElementCoordinates(element: Element): IRect;
35
+ removeCurrentPointerEventHandler(): any;
36
+ getDesignSurfaceDimensions(): ISize;
31
37
  getNormalizedOffsetInElement(event: MouseEvent, element: Element): IPoint;
32
38
  getElementAtPoint(point: IPoint, ignoreElementCallback?: (element: HTMLElement) => boolean): any;
33
39
  elementFromPoint(x: number, y: number): Element;
34
40
  getItemsBelowMouse(event: MouseEvent): Element[];
41
+ zoomTowardsPoint(point: IPoint, scalechange: number): void;
42
+ zoomOntoRectangle(startPoint: IPoint, endPoint: IPoint): void;
35
43
  }