@node-projects/web-component-designer 0.1.104 → 0.1.105

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/elements/helper/Helper.d.ts +1 -0
  2. package/dist/elements/helper/Helper.js +13 -0
  3. package/dist/elements/item/DesignItem.d.ts +0 -5
  4. package/dist/elements/item/DesignItem.js +0 -2
  5. package/dist/elements/item/IDesignItem.d.ts +0 -5
  6. package/dist/elements/services/DefaultServiceBootstrap.js +18 -18
  7. package/dist/elements/services/dragDropService/DragDropService.js +1 -1
  8. package/dist/elements/services/selectionService/ISelectionChangedEvent copy.d.ts +6 -0
  9. package/dist/elements/services/selectionService/ISelectionChangedEvent copy.js +1 -0
  10. package/dist/elements/services/selectionService/ISelectionChangedEvent.d.ts +1 -0
  11. package/dist/elements/services/selectionService/ISelectionRefreshEvent.d.ts +5 -0
  12. package/dist/elements/services/selectionService/ISelectionRefreshEvent.js +1 -0
  13. package/dist/elements/services/selectionService/ISelectionService.d.ts +3 -1
  14. package/dist/elements/services/selectionService/SelectionService.d.ts +4 -2
  15. package/dist/elements/services/selectionService/SelectionService.js +10 -4
  16. package/dist/elements/widgets/designerView/extensions/AbstractExtension.d.ts +7 -0
  17. package/dist/elements/widgets/designerView/extensions/AbstractExtension.js +21 -0
  18. package/dist/elements/widgets/designerView/extensions/AbstractToolbarExtension.d.ts +9 -0
  19. package/dist/elements/widgets/designerView/extensions/AbstractToolbarExtension.js +30 -0
  20. package/dist/elements/widgets/designerView/extensions/ConditionExtensionProvider.d.ts +13 -0
  21. package/dist/elements/widgets/designerView/extensions/ConditionExtensionProvider.js +18 -0
  22. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.d.ts +1 -0
  23. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.js +7 -16
  24. package/dist/elements/widgets/designerView/extensions/EditTextExtension.d.ts +18 -0
  25. package/dist/elements/widgets/designerView/extensions/EditTextExtension.js +107 -0
  26. package/dist/elements/widgets/designerView/extensions/ExtensionManager.d.ts +9 -3
  27. package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +94 -59
  28. package/dist/elements/widgets/designerView/extensions/ExtensionType.d.ts +5 -1
  29. package/dist/elements/widgets/designerView/extensions/ExtensionType.js +4 -0
  30. package/dist/elements/widgets/designerView/extensions/GridToolbarExtension.d.ts +12 -0
  31. package/dist/elements/widgets/designerView/extensions/GridToolbarExtension.js +58 -0
  32. package/dist/elements/widgets/designerView/extensions/IExtensionManger.d.ts +3 -3
  33. package/dist/elements/widgets/designerView/extensions/TransformOriginExtensionProvider.js +6 -2
  34. package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtension.d.ts +12 -0
  35. package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtension.js +35 -0
  36. package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtensionProvider.d.ts +9 -0
  37. package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtensionProvider.js +12 -0
  38. package/dist/elements/widgets/designerView/extensions/block/FlexToolbarExtension.d.ts +12 -0
  39. package/dist/elements/widgets/designerView/extensions/block/FlexToolbarExtension.js +34 -0
  40. package/dist/elements/widgets/designerView/extensions/block/FlexToolbarExtensionProvider.d.ts +9 -0
  41. package/dist/elements/widgets/designerView/extensions/block/FlexToolbarExtensionProvider.js +12 -0
  42. package/dist/elements/widgets/designerView/extensions/contextMenu/ChildContextMenu.d.ts +11 -0
  43. package/dist/elements/widgets/designerView/extensions/contextMenu/ChildContextMenu.js +14 -0
  44. package/dist/elements/widgets/designerView/extensions/contextMenu/CopyPasteContextMenu.js +3 -3
  45. package/dist/elements/widgets/designerView/extensions/contextMenu/JumpToElementContextMenu.js +1 -1
  46. package/dist/elements/widgets/designerView/extensions/contextMenu/MultipleItemsSelectedContextMenu.js +1 -1
  47. package/dist/elements/widgets/designerView/extensions/contextMenu/PathContextMenu.js +1 -1
  48. package/dist/elements/widgets/designerView/extensions/contextMenu/RectContextMenu.js +1 -1
  49. package/dist/elements/widgets/designerView/extensions/contextMenu/RotateLeftAndRightContextMenu.js +1 -1
  50. package/dist/elements/widgets/designerView/extensions/contextMenu/SelectAllChildrenContextMenu.js +1 -1
  51. package/dist/elements/widgets/designerView/extensions/contextMenu/ZMoveContextMenu.js +1 -1
  52. package/dist/elements/widgets/designerView/extensions/contextMenu/ZoomToElementContextMenu.js +1 -1
  53. package/dist/elements/widgets/designerView/extensions/flex/FlexToolbarExtension.d.ts +12 -0
  54. package/dist/elements/widgets/designerView/extensions/flex/FlexToolbarExtension.js +35 -0
  55. package/dist/elements/widgets/designerView/extensions/flex/FlexToolbarExtensionProvider.d.ts +9 -0
  56. package/dist/elements/widgets/designerView/extensions/flex/FlexToolbarExtensionProvider.js +12 -0
  57. package/dist/elements/widgets/designerView/extensions/flex/GridToolbarExtension.d.ts +12 -0
  58. package/dist/elements/widgets/designerView/extensions/flex/GridToolbarExtension.js +66 -0
  59. package/dist/elements/widgets/designerView/extensions/flex/GridToolbarExtensionProvider.d.ts +10 -0
  60. package/dist/elements/widgets/designerView/extensions/flex/GridToolbarExtensionProvider.js +17 -0
  61. package/dist/elements/widgets/designerView/extensions/grid/DisplayGridExtension.d.ts +1 -0
  62. package/dist/elements/widgets/designerView/extensions/grid/DisplayGridExtension.js +12 -8
  63. package/dist/elements/widgets/designerView/extensions/grid/GridChildResizeExtension.d.ts +27 -0
  64. package/dist/elements/widgets/designerView/extensions/grid/GridChildResizeExtension.js +259 -0
  65. package/dist/elements/widgets/designerView/extensions/grid/GridChildResizeExtensionProvider.d.ts +10 -0
  66. package/dist/elements/widgets/designerView/extensions/grid/GridChildResizeExtensionProvider.js +16 -0
  67. package/dist/elements/widgets/designerView/extensions/grid/GridChildToolbarExtension.d.ts +12 -0
  68. package/dist/elements/widgets/designerView/extensions/grid/GridChildToolbarExtension.js +66 -0
  69. package/dist/elements/widgets/designerView/extensions/grid/GridChildToolbarExtensionProvider.d.ts +10 -0
  70. package/dist/elements/widgets/designerView/extensions/grid/GridChildToolbarExtensionProvider.js +17 -0
  71. package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtension copy.d.ts +12 -0
  72. package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtension copy.js +66 -0
  73. package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtension.d.ts +12 -0
  74. package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtension.js +67 -0
  75. package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtensionProvider copy.d.ts +10 -0
  76. package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtensionProvider copy.js +17 -0
  77. package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtensionProvider.d.ts +9 -0
  78. package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtensionProvider.js +12 -0
  79. package/dist/elements/widgets/designerView/extensions/grid/ResizeExtension.d.ts +28 -0
  80. package/dist/elements/widgets/designerView/extensions/grid/ResizeExtension.js +355 -0
  81. package/dist/elements/widgets/designerView/extensions/grid/ResizeExtensionProvider.d.ts +12 -0
  82. package/dist/elements/widgets/designerView/extensions/grid/ResizeExtensionProvider.js +20 -0
  83. package/dist/elements/widgets/designerView/extensions/logic/ConditionExtensionProvider.d.ts +13 -0
  84. package/dist/elements/widgets/designerView/extensions/logic/ConditionExtensionProvider.js +18 -0
  85. package/dist/elements/widgets/designerView/extensions/svg/EllipsisExtension.js +8 -6
  86. package/dist/elements/widgets/designerView/extensions/svg/RectExtension.d.ts +2 -2
  87. package/dist/elements/widgets/designerView/extensions/svg/RectExtension.js +18 -15
  88. package/dist/elements/widgets/designerView/extensions/svg/RectExtensionProvider copy.d.ts +9 -0
  89. package/dist/elements/widgets/designerView/extensions/svg/RectExtensionProvider copy.js +14 -0
  90. package/dist/elements/widgets/designerView/extensions/svg/SvgBaseExtension.d.ts +30 -0
  91. package/dist/elements/widgets/designerView/extensions/svg/SvgBaseExtension.js +181 -0
  92. package/dist/elements/widgets/designerView/extensions/svg/SvgElementExtension.d.ts +26 -0
  93. package/dist/elements/widgets/designerView/extensions/svg/SvgElementExtension.js +144 -0
  94. package/dist/elements/widgets/designerView/extensions/svg/SvgElementExtensionProvider.d.ts +9 -0
  95. package/dist/elements/widgets/designerView/extensions/svg/SvgElementExtensionProvider.js +16 -0
  96. package/dist/elements/widgets/designerView/overlayLayerView.js +4 -1
  97. package/dist/elements/widgets/designerView/tools/DrawElementTool.js +1 -1
  98. package/dist/elements/widgets/designerView/tools/PointerTool.js +9 -9
  99. package/dist/index.d.ts +15 -0
  100. package/dist/index.js +14 -0
  101. package/package.json +1 -1
@@ -0,0 +1,34 @@
1
+ import { html } from "@node-projects/base-custom-webcomponent";
2
+ import { AbstractExtension } from "../AbstractExtension.js";
3
+ export class FlexToolbarExtension extends AbstractExtension {
4
+ static template = html `
5
+ <div style="height: 100%; width: 100%;">
6
+ <select id="displayType" style="pointer-events: all; height: 24px; width: 70px; padding: 0; font-weight: 900; text-transform: uppercase; margin-right: 10px;">
7
+ <option>block</option>
8
+ <option selected>flex</option>
9
+ <option>grid</option>
10
+ </select>
11
+ </div>
12
+ `;
13
+ _toolbar;
14
+ constructor(extensionManager, designerView, extendedItem) {
15
+ super(extensionManager, designerView, extendedItem);
16
+ }
17
+ extend(cache, event) {
18
+ this._toolbar = this.createToolbar(FlexToolbarExtension.template, 200, 30);
19
+ const displayTypeEl = this._toolbar.getById('displayType');
20
+ displayTypeEl.onchange = () => {
21
+ this.extendedItem.updateStyleInSheetOrLocal('display', displayTypeEl.value);
22
+ };
23
+ this.refresh(cache, event);
24
+ }
25
+ refresh(cache, event) {
26
+ if (event) {
27
+ const pos = this.designerCanvas.getNormalizedEventCoordinates(event);
28
+ this._toolbar.updatePosition({ x: (pos.x - 16), y: (pos.y - 36) });
29
+ }
30
+ }
31
+ dispose() {
32
+ this._removeAllOverlays();
33
+ }
34
+ }
@@ -0,0 +1,9 @@
1
+ import { IDesignerExtensionProvider } from '../IDesignerExtensionProvider.js';
2
+ import { IDesignItem } from '../../../../item/IDesignItem.js';
3
+ import { IDesignerCanvas } from '../../IDesignerCanvas.js';
4
+ import { IDesignerExtension } from '../IDesignerExtension.js';
5
+ import { IExtensionManager } from '../IExtensionManger.js';
6
+ export declare class GridToolbarExtensionProvider implements IDesignerExtensionProvider {
7
+ shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
8
+ getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
9
+ }
@@ -0,0 +1,12 @@
1
+ import { FlexToolbarExtension } from './FlexToolbarExtension.js';
2
+ import { NodeType } from '../../../../item/NodeType.js';
3
+ export class GridToolbarExtensionProvider {
4
+ shouldExtend(extensionManager, designerView, designItem) {
5
+ if (designItem.nodeType === NodeType.Element && getComputedStyle(designItem.element).display === 'grid')
6
+ return true;
7
+ return false;
8
+ }
9
+ getExtension(extensionManager, designerView, designItem) {
10
+ return new FlexToolbarExtension(extensionManager, designerView, designItem);
11
+ }
12
+ }
@@ -0,0 +1,11 @@
1
+ import { IContextMenuItem } from '../../../../helper/contextMenu/IContextMenuItem.js';
2
+ import { IDesignItem } from '../../../../item/IDesignItem.js';
3
+ import { IDesignerCanvas } from '../../IDesignerCanvas.js';
4
+ import { ContextmenuInitiator, IContextMenuExtension } from './IContextMenuExtension.js';
5
+ export declare class ChildContextMenu implements IContextMenuExtension {
6
+ private _title;
7
+ private _contextMenus;
8
+ constructor(title: string, ...contextMenus: IContextMenuExtension[]);
9
+ shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem, initiator: ContextmenuInitiator): boolean;
10
+ provideContextMenuItems(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): IContextMenuItem[];
11
+ }
@@ -0,0 +1,14 @@
1
+ export class ChildContextMenu {
2
+ _title;
3
+ _contextMenus;
4
+ constructor(title, ...contextMenus) {
5
+ this._title = title;
6
+ this._contextMenus = contextMenus;
7
+ }
8
+ shouldProvideContextmenu(event, designerView, designItem, initiator) {
9
+ return this._contextMenus.some(x => x.shouldProvideContextmenu(event, designerView, designItem, initiator));
10
+ }
11
+ provideContextMenuItems(event, designerView, designItem) {
12
+ return [{ title: this._title, children: this._contextMenus.map(x => x.provideContextMenuItems(event, designerView, designItem)).flat() }];
13
+ }
14
+ }
@@ -5,10 +5,10 @@ export class CopyPasteContextMenu {
5
5
  }
6
6
  provideContextMenuItems(event, designerView, designItem) {
7
7
  return [
8
- { title: 'copy', action: () => { designerView.executeCommand({ type: CommandType.copy }); }, shortCut: 'Ctrl + C' },
9
- { title: 'cut', action: () => { designerView.executeCommand({ type: CommandType.cut }); }, shortCut: 'Ctrl + X' },
8
+ { title: 'copy', action: () => { designerView.executeCommand({ type: CommandType.copy }); }, shortCut: 'Ctrl + C', disabled: designItem === null },
9
+ { title: 'cut', action: () => { designerView.executeCommand({ type: CommandType.cut }); }, shortCut: 'Ctrl + X', disabled: designItem === null },
10
10
  { title: 'paste', action: () => { designerView.executeCommand({ type: CommandType.paste }); }, shortCut: 'Ctrl + V' },
11
- { title: 'delete', action: () => { designerView.executeCommand({ type: CommandType.delete }); }, shortCut: 'Del' },
11
+ { title: 'delete', action: () => { designerView.executeCommand({ type: CommandType.delete }); }, shortCut: 'Del', disabled: designItem === null },
12
12
  ];
13
13
  }
14
14
  }
@@ -1,6 +1,6 @@
1
1
  export class JumpToElementContextMenu {
2
2
  shouldProvideContextmenu(event, designerCanvas, designItem, initiator) {
3
- return true;
3
+ return designItem !== null;
4
4
  }
5
5
  provideContextMenuItems(event, designerCanvas, designItem) {
6
6
  return [
@@ -3,7 +3,7 @@ import { DesignItem } from '../../../../item/DesignItem.js';
3
3
  export class MultipleItemsSelectedContextMenu {
4
4
  orderIndex = 60;
5
5
  shouldProvideContextmenu(event, designerCanvas, designItem, initiator) {
6
- if (designItem.instanceServiceContainer.selectionService.selectedElements.length > 1) {
6
+ if (designItem?.instanceServiceContainer.selectionService.selectedElements.length > 1) {
7
7
  return true;
8
8
  }
9
9
  return false;
@@ -1,7 +1,7 @@
1
1
  import { createPathD } from '../../../../helper/PathDataPolyfill.js';
2
2
  export class PathContextMenu {
3
3
  shouldProvideContextmenu(event, designerView, designItem, initiator) {
4
- if (designItem.element instanceof SVGPathElement)
4
+ if (designItem?.element instanceof SVGPathElement)
5
5
  return true;
6
6
  return false;
7
7
  }
@@ -3,7 +3,7 @@ import { DeleteAction } from '../../../../services/undoService/transactionItems/
3
3
  import { InsertAction } from '../../../../services/undoService/transactionItems/InsertAction.js';
4
4
  export class RectContextMenu {
5
5
  shouldProvideContextmenu(event, designerView, designItem, initiator) {
6
- if (designItem.element instanceof SVGRectElement)
6
+ if (designItem?.element instanceof SVGRectElement)
7
7
  return true;
8
8
  return false;
9
9
  }
@@ -2,7 +2,7 @@ import { CommandType } from '../../../../../commandHandling/CommandType.js';
2
2
  import { NodeType } from '../../../../item/NodeType.js';
3
3
  export class RotateLeftAndRight {
4
4
  shouldProvideContextmenu(event, designerView, designItem, initiator) {
5
- return !designItem.isRootItem && designItem.nodeType == NodeType.Element;
5
+ return !designItem?.isRootItem && designItem?.nodeType == NodeType.Element;
6
6
  }
7
7
  provideContextMenuItems(event, designerView, designItem) {
8
8
  return [
@@ -1,7 +1,7 @@
1
1
  import { NodeType } from "../../../../item/NodeType.js";
2
2
  export class SelectAllChildrenContextMenu {
3
3
  shouldProvideContextmenu(event, designerView, designItem, initiator) {
4
- return designItem.hasChildren;
4
+ return designItem?.hasChildren;
5
5
  }
6
6
  provideContextMenuItems(event, designerCanvas, designItem) {
7
7
  return [{
@@ -2,7 +2,7 @@ import { CommandType } from '../../../../../commandHandling/CommandType.js';
2
2
  import { NodeType } from '../../../../item/NodeType.js';
3
3
  export class ZMoveContextMenu {
4
4
  shouldProvideContextmenu(event, designerView, designItem, initiator) {
5
- return !designItem.isRootItem && designItem.nodeType == NodeType.Element;
5
+ return !designItem?.isRootItem && designItem?.nodeType == NodeType.Element;
6
6
  }
7
7
  provideContextMenuItems(event, designerView, designItem) {
8
8
  return [
@@ -1,7 +1,7 @@
1
1
  const offset = 10;
2
2
  export class ZoomToElementContextMenu {
3
3
  shouldProvideContextmenu(event, designerCanvas, designItem, initiator) {
4
- return true;
4
+ return designItem !== null;
5
5
  }
6
6
  provideContextMenuItems(event, designerCanvas, designItem) {
7
7
  return [
@@ -0,0 +1,12 @@
1
+ import { IDesignItem } from '../../../../item/IDesignItem.js';
2
+ import { IDesignerCanvas } from '../../IDesignerCanvas.js';
3
+ import { AbstractExtension } from "../AbstractExtension.js";
4
+ import { IExtensionManager } from '../IExtensionManger.js';
5
+ export declare class FlexToolbarExtension extends AbstractExtension {
6
+ private static template;
7
+ private _toolbar;
8
+ constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
9
+ extend(cache: Record<string | symbol, any>, event: MouseEvent): void;
10
+ refresh(cache: Record<string | symbol, any>, event?: MouseEvent): void;
11
+ dispose(): void;
12
+ }
@@ -0,0 +1,35 @@
1
+ import { html } from "@node-projects/base-custom-webcomponent";
2
+ import { AbstractExtension } from "../AbstractExtension.js";
3
+ export class FlexToolbarExtension extends AbstractExtension {
4
+ static template = html `
5
+ <div style="height: 100%; width: 100%;">
6
+ <select id="displayType" style="pointer-events: all; height: 24px; width: 70px; padding: 0; font-weight: 900; text-transform: uppercase; margin-right: 10px;">
7
+ <option>block</option>
8
+ <option selected>flex</option>
9
+ <option>grid</option>
10
+ </select>
11
+ </div>
12
+ `;
13
+ _toolbar;
14
+ constructor(extensionManager, designerView, extendedItem) {
15
+ super(extensionManager, designerView, extendedItem);
16
+ }
17
+ extend(cache, event) {
18
+ this._toolbar = this.createToolbar(FlexToolbarExtension.template, 200, 30);
19
+ const displayTypeEl = this._toolbar.getById('displayType');
20
+ displayTypeEl.onchange = () => {
21
+ this.extendedItem.updateStyleInSheetOrLocal('display', displayTypeEl.value);
22
+ this.extensionManager.reapplyAllAppliedExtentions([this.extendedItem]);
23
+ };
24
+ this.refresh(cache, event);
25
+ }
26
+ refresh(cache, event) {
27
+ if (event) {
28
+ const pos = this.designerCanvas.getNormalizedEventCoordinates(event);
29
+ this._toolbar.updatePosition({ x: (pos.x - 16), y: (pos.y - 44) });
30
+ }
31
+ }
32
+ dispose() {
33
+ this._removeAllOverlays();
34
+ }
35
+ }
@@ -0,0 +1,9 @@
1
+ import { IDesignerExtensionProvider } from '../IDesignerExtensionProvider.js';
2
+ import { IDesignItem } from '../../../../item/IDesignItem.js';
3
+ import { IDesignerCanvas } from '../../IDesignerCanvas.js';
4
+ import { IDesignerExtension } from '../IDesignerExtension.js';
5
+ import { IExtensionManager } from '../IExtensionManger.js';
6
+ export declare class FlexToolbarExtensionProvider implements IDesignerExtensionProvider {
7
+ shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
8
+ getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
9
+ }
@@ -0,0 +1,12 @@
1
+ import { FlexToolbarExtension } from './FlexToolbarExtension.js';
2
+ import { NodeType } from '../../../../item/NodeType.js';
3
+ export class FlexToolbarExtensionProvider {
4
+ shouldExtend(extensionManager, designerView, designItem) {
5
+ if (designItem.nodeType === NodeType.Element && getComputedStyle(designItem.element).display === 'flex')
6
+ return true;
7
+ return false;
8
+ }
9
+ getExtension(extensionManager, designerView, designItem) {
10
+ return new FlexToolbarExtension(extensionManager, designerView, designItem);
11
+ }
12
+ }
@@ -0,0 +1,12 @@
1
+ import { IDesignItem } from '../../../../item/IDesignItem.js';
2
+ import { IDesignerCanvas } from '../../IDesignerCanvas.js';
3
+ import { AbstractExtension } from "../AbstractExtension.js";
4
+ import { IExtensionManager } from '../IExtensionManger.js';
5
+ export declare class GridToolbarExtension extends AbstractExtension {
6
+ private static template;
7
+ private _toolbar;
8
+ constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
9
+ extend(cache: Record<string | symbol, any>, event: MouseEvent): void;
10
+ refresh(cache: Record<string | symbol, any>, event?: MouseEvent): void;
11
+ dispose(): void;
12
+ }
@@ -0,0 +1,66 @@
1
+ import { html } from "@node-projects/base-custom-webcomponent";
2
+ import { AbstractExtension } from "../AbstractExtension.js";
3
+ export class GridToolbarExtension extends AbstractExtension {
4
+ static template = html `
5
+ <div style="height: 100%; width: 100%;">
6
+ <select id="displayType" style="pointer-events: all; height: 24px; width: 70px; padding: 0; font-weight: 900; text-transform: uppercase; margin-right: 10px;">
7
+ <option>block</option>
8
+ <option>flex</option>
9
+ <option selected>grid</option>
10
+ </select>
11
+ <select id="gridType" style="pointer-events: all; height: 24px; width: 60px; padding: 0;">
12
+ <option>1x1</option>
13
+ <option>1x16</option>
14
+ <option>2x8</option>
15
+ <option>4x4</option>
16
+ <option>8x2</option>
17
+ <option>16x1</option>
18
+ <option>custom</option>
19
+ </select>
20
+ </div>
21
+ `;
22
+ _toolbar;
23
+ constructor(extensionManager, designerView, extendedItem) {
24
+ super(extensionManager, designerView, extendedItem);
25
+ }
26
+ extend(cache, event) {
27
+ const style = getComputedStyle(this.extendedItem.element);
28
+ this._toolbar = this.createToolbar(GridToolbarExtension.template, 200, 30);
29
+ const displayTypeEl = this._toolbar.getById('displayType');
30
+ displayTypeEl.onchange = () => {
31
+ this.extendedItem.updateStyleInSheetOrLocal('display', displayTypeEl.value);
32
+ };
33
+ const gridTypeEl = this._toolbar.getById('gridType');
34
+ let op = document.createElement('option');
35
+ op.innerText = style.gridTemplateColumns.split(' ').length + 'x' + style.gridTemplateRows.split(' ').length;
36
+ gridTypeEl.insertAdjacentElement('afterbegin', op);
37
+ gridTypeEl.selectedIndex = 0;
38
+ gridTypeEl.onchange = () => {
39
+ if (gridTypeEl.value == 'custom') {
40
+ const columns = prompt("Number of columns?", '4');
41
+ if (!columns)
42
+ return;
43
+ const rows = prompt("Number of rows?", '4');
44
+ if (!rows)
45
+ return;
46
+ this.extendedItem.updateStyleInSheetOrLocal('grid-template-columns', '1fr '.repeat(parseInt(columns)).trim());
47
+ this.extendedItem.updateStyleInSheetOrLocal('grid-template-rows', '1fr '.repeat(parseInt(rows)).trim());
48
+ }
49
+ else {
50
+ const parts = gridTypeEl.value.split('x');
51
+ this.extendedItem.updateStyleInSheetOrLocal('grid-template-columns', '1fr '.repeat(parseInt(parts[0])).trim());
52
+ this.extendedItem.updateStyleInSheetOrLocal('grid-template-rows', '1fr '.repeat(parseInt(parts[1])).trim());
53
+ }
54
+ };
55
+ this.refresh(cache, event);
56
+ }
57
+ refresh(cache, event) {
58
+ if (event) {
59
+ const pos = this.designerCanvas.getNormalizedEventCoordinates(event);
60
+ this._toolbar.updatePosition({ x: (pos.x - 16), y: (pos.y - 36) });
61
+ }
62
+ }
63
+ dispose() {
64
+ this._removeAllOverlays();
65
+ }
66
+ }
@@ -0,0 +1,10 @@
1
+ import { IDesignerExtensionProvider } from '../IDesignerExtensionProvider.js';
2
+ import { IDesignItem } from '../../../../item/IDesignItem.js';
3
+ import { IDesignerCanvas } from '../../IDesignerCanvas.js';
4
+ import { IDesignerExtension } from '../IDesignerExtension.js';
5
+ import { IExtensionManager } from '../IExtensionManger.js';
6
+ export declare class GridToolbarExtensionProvider 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,17 @@
1
+ import { css } from '@node-projects/base-custom-webcomponent';
2
+ import { GridToolbarExtension } from './GridToolbarExtension.js';
3
+ import { NodeType } from '../../../../item/NodeType.js';
4
+ export class GridToolbarExtensionProvider {
5
+ shouldExtend(extensionManager, designerView, designItem) {
6
+ if (designItem.nodeType === NodeType.Element && getComputedStyle(designItem.element).display === 'grid')
7
+ return true;
8
+ return false;
9
+ }
10
+ getExtension(extensionManager, designerView, designItem) {
11
+ return new GridToolbarExtension(extensionManager, designerView, designItem);
12
+ }
13
+ style = css `
14
+ .svg-toolbar-container { overflow: visible }
15
+ .svg-toolbar-container div { padding: 5px; display: flex; gap: 2px; background: white; border-radius: 4px; box-shadow: 0 2px 10px 0 rgba(19,23,32,.2); align-items: center; }
16
+ `;
17
+ }
@@ -8,6 +8,7 @@ export declare class DisplayGridExtension extends AbstractExtension {
8
8
  private _gaps;
9
9
  private _group;
10
10
  private gridInformation;
11
+ private _lastEvent;
11
12
  constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
12
13
  extend(cache: Record<string | symbol, any>, event?: Event): void;
13
14
  refresh(cache: Record<string | symbol, any>, event?: Event): void;
@@ -8,6 +8,7 @@ export class DisplayGridExtension extends AbstractExtension {
8
8
  _gaps;
9
9
  _group;
10
10
  gridInformation;
11
+ _lastEvent;
11
12
  constructor(extensionManager, designerView, extendedItem) {
12
13
  super(extensionManager, designerView, extendedItem);
13
14
  }
@@ -18,15 +19,17 @@ export class DisplayGridExtension extends AbstractExtension {
18
19
  refresh(cache, event) {
19
20
  this.gridInformation = calculateGridInformation(this.extendedItem);
20
21
  let cells = this.gridInformation.cells;
21
- if (!this._group) {
22
- this._group = this._drawGroup(null, this._group, OverlayLayer.Background);
23
- this._group.style.transform = getElementCombinedTransform(this.extendedItem.element).toString();
24
- this._group.style.transformOrigin = '0 0';
25
- this._group.style.transformBox = 'fill-box';
26
- }
22
+ if (event)
23
+ this._lastEvent = event;
27
24
  if (cells[0][0] && !isNaN(cells[0][0].height) && !isNaN(cells[0][0].width)) {
28
25
  if (this.gridInformation.cells.length != this._cells.length || this.gridInformation.cells[0].length != this._cells[0].length)
29
26
  this._initSVGArrays();
27
+ if (!this._group) {
28
+ this._group = this._drawGroup(null, this._group, OverlayLayer.Background);
29
+ this._group.style.transform = getElementCombinedTransform(this.extendedItem.element).toString();
30
+ this._group.style.transformOrigin = '0 0';
31
+ this._group.style.transformBox = 'fill-box';
32
+ }
30
33
  //draw gaps
31
34
  this.gridInformation.gaps.forEach((gap, i) => {
32
35
  this._gaps[i] = this._drawRect(gap.x, gap.y, gap.width, gap.height, 'svg-grid-gap', this._gaps[i], OverlayLayer.Background);
@@ -41,8 +44,8 @@ export class DisplayGridExtension extends AbstractExtension {
41
44
  this._texts[i][j] = this._drawText(cell.name, cell.x, cell.y, 'svg-grid-area', this._texts[i][j], OverlayLayer.Background);
42
45
  this._texts[i][j].setAttribute("dominant-baseline", "hanging");
43
46
  }
44
- if (event && event instanceof MouseEvent) {
45
- let crd = this.designerCanvas.getNormalizedEventCoordinates(event);
47
+ if (this._lastEvent && this._lastEvent instanceof MouseEvent) {
48
+ let crd = this.designerCanvas.getNormalizedEventCoordinates(this._lastEvent);
46
49
  if (crd.x >= cell.x && crd.y >= cell.y && crd.x <= cell.x + cell.width && crd.y <= cell.y + cell.height) {
47
50
  this._cells[i][j].setAttribute("class", "svg-grid-current-cell");
48
51
  }
@@ -56,6 +59,7 @@ export class DisplayGridExtension extends AbstractExtension {
56
59
  }
57
60
  _initSVGArrays() {
58
61
  this._removeAllOverlays();
62
+ this._group = null;
59
63
  this.gridInformation = calculateGridInformation(this.extendedItem);
60
64
  this._cells = new Array(this.gridInformation.cells.length);
61
65
  this.gridInformation.cells.forEach((row, i) => this._cells[i] = new Array(row.length));
@@ -0,0 +1,27 @@
1
+ import { IDesignItem } from "../../../../item/IDesignItem.js";
2
+ import { IDesignerCanvas } from "../../IDesignerCanvas.js";
3
+ import { AbstractExtension } from "../AbstractExtension.js";
4
+ import { IExtensionManager } from "../IExtensionManger.js";
5
+ export declare class GridChildResizeExtension extends AbstractExtension {
6
+ private _initialSizes;
7
+ private _actionModeStarted;
8
+ private _initialPoint;
9
+ private _offsetPoint;
10
+ private _circle1;
11
+ private _circle2;
12
+ private _circle3;
13
+ private _circle4;
14
+ private _circle5;
15
+ private _circle6;
16
+ private _circle7;
17
+ private _circle8;
18
+ private _initialComputedTransformOrigins;
19
+ private _initialTransformOrigins;
20
+ constructor(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, extendedItem: IDesignItem);
21
+ extend(cache: Record<string | symbol, any>, event?: Event): void;
22
+ refresh(cache: Record<string | symbol, any>, event?: Event): void;
23
+ _drawResizerOverlay(x: number, y: number, cursor: string, oldCircle?: SVGCircleElement): SVGCircleElement;
24
+ _pointerActionTypeResize(circle: SVGCircleElement, event: PointerEvent, actionMode: string): void;
25
+ private prepareResize;
26
+ dispose(): void;
27
+ }