@node-projects/web-component-designer 0.1.108 → 0.1.110
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/assets/images/display/block.svg +1 -0
- package/assets/images/display/inline.svg +1 -0
- package/dist/elements/controls/ImageButtonListSelector.d.ts +9 -6
- package/dist/elements/controls/ImageButtonListSelector.js +25 -6
- package/dist/elements/item/DesignItem.d.ts +2 -0
- package/dist/elements/item/DesignItem.js +55 -8
- package/dist/elements/item/IDesignItem.d.ts +2 -0
- package/dist/elements/services/DefaultServiceBootstrap.js +2 -0
- package/dist/elements/services/dragDropService/DragDropService.js +3 -1
- package/dist/elements/services/placementService/DefaultPlacementService.d.ts +1 -1
- package/dist/elements/services/placementService/DefaultPlacementService.js +3 -1
- package/dist/elements/services/placementService/FlexBoxPlacementService.d.ts +1 -1
- package/dist/elements/services/placementService/FlexBoxPlacementService.js +5 -2
- package/dist/elements/services/placementService/GridPlacementService.d.ts +1 -1
- package/dist/elements/services/placementService/GridPlacementService.js +5 -2
- package/dist/elements/services/placementService/IPlacementService.d.ts +1 -1
- package/dist/elements/services/propertiesService/PropertyGroupsService.js +2 -2
- package/dist/elements/services/propertiesService/propertyEditors/ImageButtonListPropertyEditor.js +1 -1
- package/dist/elements/services/stylesheetService/AbstractStylesheetService.d.ts +3 -0
- package/dist/elements/services/stylesheetService/AbstractStylesheetService.js +23 -0
- package/dist/elements/services/stylesheetService/IStylesheetService.d.ts +4 -2
- package/dist/elements/widgets/designerView/designerCanvas.js +8 -2
- package/dist/elements/widgets/designerView/extensions/AbstractExtension.d.ts +1 -1
- package/dist/elements/widgets/designerView/extensions/AbstractExtension.js +23 -2
- package/dist/elements/widgets/designerView/extensions/BasicDisplayToolbarExtension.d.ts +20 -0
- package/dist/elements/widgets/designerView/extensions/BasicDisplayToolbarExtension.js +68 -0
- package/dist/elements/widgets/designerView/extensions/BasicStackedToolbarExtension.d.ts +21 -0
- package/dist/elements/widgets/designerView/extensions/BasicStackedToolbarExtension.js +81 -0
- package/dist/elements/widgets/designerView/extensions/BlockToolbarExtension.d.ts +12 -0
- package/dist/elements/widgets/designerView/extensions/BlockToolbarExtension.js +40 -0
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +1 -0
- package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtension.d.ts +4 -7
- package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtension.js +7 -26
- package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtensionProvider.js +4 -2
- package/dist/elements/widgets/designerView/extensions/flex/FlexToolbarExtension.d.ts +5 -6
- package/dist/elements/widgets/designerView/extensions/flex/FlexToolbarExtension.js +63 -21
- package/dist/elements/widgets/designerView/extensions/flex/FlexToolbarExtensionProvider.js +4 -2
- package/dist/elements/widgets/designerView/extensions/grid/GridChildToolbarExtension.d.ts +3 -6
- package/dist/elements/widgets/designerView/extensions/grid/GridChildToolbarExtension.js +45 -56
- package/dist/elements/widgets/designerView/extensions/grid/GridChildToolbarExtensionProvider.d.ts +0 -1
- package/dist/elements/widgets/designerView/extensions/grid/GridChildToolbarExtensionProvider.js +5 -7
- package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtension.d.ts +3 -6
- package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtension.js +50 -29
- package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtensionProvider.js +4 -2
- package/dist/elements/widgets/designerView/overlayLayerView.js +16 -1
- package/dist/elements/widgets/designerView/tools/PointerTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/PointerTool.js +6 -5
- package/dist/elements/widgets/propertyGrid/PropertyGridWithHeader.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { assetsPath } from "../../../../Constants.js";
|
|
2
|
+
import { AbstractExtension } from "./AbstractExtension.js";
|
|
3
|
+
export class BasicStackedToolbarExtension extends AbstractExtension {
|
|
4
|
+
static basicTemplate = `
|
|
5
|
+
<node-projects-image-button-list-selector id="inline" no-value-in-header property="inline">
|
|
6
|
+
<img data-value="block" title="block" src="${assetsPath}images/display/block.svg">
|
|
7
|
+
<img data-value="inline" title="inline" src="${assetsPath}images/display/inline.svg">
|
|
8
|
+
</node-projects-image-button-list-selector>
|
|
9
|
+
<select title="display" id="displayType" style="pointer-events: all; height: 24px; width: 70px; padding: 0; font-weight: 900; text-transform: uppercase; margin-left: 5px; margin-right: 10px;">
|
|
10
|
+
<option>block</option>
|
|
11
|
+
<option>flex</option>
|
|
12
|
+
<option>grid</option>
|
|
13
|
+
</select>
|
|
14
|
+
`;
|
|
15
|
+
static toolBars = [];
|
|
16
|
+
_toolbar;
|
|
17
|
+
_size = { width: 200, height: 30 };
|
|
18
|
+
_display;
|
|
19
|
+
_inline;
|
|
20
|
+
constructor(extensionManager, designerView, extendedItem) {
|
|
21
|
+
super(extensionManager, designerView, extendedItem);
|
|
22
|
+
}
|
|
23
|
+
extend(cache, event) {
|
|
24
|
+
const cs = getComputedStyle(this.extendedItem.element);
|
|
25
|
+
this._display = cs.display.replace('inline-', '').replace('inline', 'block');
|
|
26
|
+
this._inline = cs.display.startsWith('inline') ? 'inline' : 'block';
|
|
27
|
+
//@ts-ignore
|
|
28
|
+
this._toolbar = this.createToolbar(this.constructor.template, this._size.width, this._size.height);
|
|
29
|
+
BasicStackedToolbarExtension.toolBars.push(this._toolbar);
|
|
30
|
+
const displayTypeEl = this._toolbar.getById('displayType');
|
|
31
|
+
if (displayTypeEl) {
|
|
32
|
+
displayTypeEl.value = this._display;
|
|
33
|
+
displayTypeEl.onchange = async () => {
|
|
34
|
+
this._display = displayTypeEl.value;
|
|
35
|
+
await this.updateDisplayValue();
|
|
36
|
+
this.extensionManager.reapplyAllAppliedExtentions([this.extendedItem]);
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
const inlineEl = this._toolbar.getById('inline');
|
|
40
|
+
if (inlineEl) {
|
|
41
|
+
inlineEl.value = this._inline;
|
|
42
|
+
inlineEl.addEventListener('value-changed', async () => {
|
|
43
|
+
this._inline = inlineEl.value;
|
|
44
|
+
if (this._inline && cs.position === 'absolute')
|
|
45
|
+
this.extendedItem.setStyle('position', 'static');
|
|
46
|
+
await this.updateDisplayValue();
|
|
47
|
+
this.extensionManager.reapplyAllAppliedExtentions([this.extendedItem]);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async updateDisplayValue() {
|
|
52
|
+
let v = (this._inline == 'inline' ? 'inline ' : '') + this._display;
|
|
53
|
+
if (v === 'inline block')
|
|
54
|
+
v = 'inline';
|
|
55
|
+
await this.extendedItem.updateStyleInSheetOrLocalAsync('display', v);
|
|
56
|
+
}
|
|
57
|
+
refresh(cache, event) {
|
|
58
|
+
if (event) {
|
|
59
|
+
const pos = this.designerCanvas.getNormalizedEventCoordinates(event);
|
|
60
|
+
let tbOffset = 0;
|
|
61
|
+
for (let i = 0; i < BasicStackedToolbarExtension.toolBars.length - 1; i++) {
|
|
62
|
+
if (BasicStackedToolbarExtension.toolBars[i] === this._toolbar)
|
|
63
|
+
break;
|
|
64
|
+
tbOffset += this._toolbar.children[0].getBoundingClientRect().height + 4;
|
|
65
|
+
}
|
|
66
|
+
this._toolbar.updatePosition({ x: (pos.x - (16 / this.designerCanvas.zoomFactor)), y: (pos.y - tbOffset - ((this._size.height + 14) / this.designerCanvas.zoomFactor)) });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
_addStyleButton(styleAndControlName) {
|
|
70
|
+
const cs = getComputedStyle(this.extendedItem.element);
|
|
71
|
+
const ctl = this._toolbar.getById(styleAndControlName);
|
|
72
|
+
ctl.addEventListener('value-changed', async () => {
|
|
73
|
+
await this.extendedItem.updateStyleInSheetOrLocalAsync(styleAndControlName, ctl.value);
|
|
74
|
+
});
|
|
75
|
+
ctl.value = cs[styleAndControlName];
|
|
76
|
+
}
|
|
77
|
+
dispose() {
|
|
78
|
+
BasicStackedToolbarExtension.toolBars.splice(BasicStackedToolbarExtension.toolBars.indexOf(this._toolbar), 1);
|
|
79
|
+
this._removeAllOverlays();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -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 BlockToolbarExtension 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,40 @@
|
|
|
1
|
+
import { html } from "@node-projects/base-custom-webcomponent";
|
|
2
|
+
import { AbstractExtension } from "../AbstractExtension.js";
|
|
3
|
+
import { assetsPath } from "../../../../../Constants.js";
|
|
4
|
+
export class BlockToolbarExtension extends AbstractExtension {
|
|
5
|
+
static template = html `
|
|
6
|
+
<div style="height: 100%; width: 100%;">
|
|
7
|
+
<node-projects-image-button-list-selector>
|
|
8
|
+
<img data-value="block" title="block" src="${assetsPath}images/display/block.svg">
|
|
9
|
+
<img data-value="inline" title="inline" src="${assetsPath}images/display/inline.svg">
|
|
10
|
+
</node-projects-image-button-list-selector>
|
|
11
|
+
<select title="display" id="displayType" style="pointer-events: all; height: 24px; width: 70px; padding: 0; font-weight: 900; text-transform: uppercase; margin-right: 10px;">
|
|
12
|
+
<option selected>block</option>
|
|
13
|
+
<option>flex</option>
|
|
14
|
+
<option>grid</option>
|
|
15
|
+
</select>
|
|
16
|
+
</div>
|
|
17
|
+
`;
|
|
18
|
+
_toolbar;
|
|
19
|
+
constructor(extensionManager, designerView, extendedItem) {
|
|
20
|
+
super(extensionManager, designerView, extendedItem);
|
|
21
|
+
}
|
|
22
|
+
extend(cache, event) {
|
|
23
|
+
this._toolbar = this.createToolbar(BlockToolbarExtension.template, 200, 30);
|
|
24
|
+
const displayTypeEl = this._toolbar.getById('displayType');
|
|
25
|
+
displayTypeEl.onchange = () => {
|
|
26
|
+
this.extendedItem.updateStyleInSheetOrLocal('display', displayTypeEl.value);
|
|
27
|
+
this.extensionManager.reapplyAllAppliedExtentions([this.extendedItem]);
|
|
28
|
+
};
|
|
29
|
+
this.refresh(cache, event);
|
|
30
|
+
}
|
|
31
|
+
refresh(cache, event) {
|
|
32
|
+
if (event) {
|
|
33
|
+
const pos = this.designerCanvas.getNormalizedEventCoordinates(event);
|
|
34
|
+
this._toolbar.updatePosition({ x: (pos.x - (16 / this.designerCanvas.zoomFactor)), y: (pos.y - (44 / this.designerCanvas.zoomFactor)) });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
dispose() {
|
|
38
|
+
this._removeAllOverlays();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -24,6 +24,7 @@ export class ExtensionManager {
|
|
|
24
24
|
designerCanvas.instanceServiceContainer.contentService.onContentChanged.on(this._contentChanged.bind(this));
|
|
25
25
|
designerCanvas.serviceContainer.globalContext.onToolChanged.on(() => {
|
|
26
26
|
this.removeExtension(designerCanvas.instanceServiceContainer.selectionService.primarySelection, ExtensionType.PrimarySelectionRefreshed);
|
|
27
|
+
this._lastPrimarySelectionRefreshItem = null;
|
|
27
28
|
});
|
|
28
29
|
}
|
|
29
30
|
connected() {
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { IDesignItem } from '../../../../item/IDesignItem.js';
|
|
2
2
|
import { IDesignerCanvas } from '../../IDesignerCanvas.js';
|
|
3
|
-
import {
|
|
4
|
-
import { IExtensionManager } from
|
|
5
|
-
export declare class BlockToolbarExtension extends
|
|
6
|
-
|
|
7
|
-
private _toolbar;
|
|
3
|
+
import { BasicStackedToolbarExtension } from "../BasicStackedToolbarExtension.js";
|
|
4
|
+
import { IExtensionManager } from "../IExtensionManger.js";
|
|
5
|
+
export declare class BlockToolbarExtension extends BasicStackedToolbarExtension {
|
|
6
|
+
protected static template: HTMLTemplateElement;
|
|
8
7
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
9
8
|
extend(cache: Record<string | symbol, any>, event: MouseEvent): void;
|
|
10
|
-
refresh(cache: Record<string | symbol, any>, event?: MouseEvent): void;
|
|
11
|
-
dispose(): void;
|
|
12
9
|
}
|
|
@@ -1,35 +1,16 @@
|
|
|
1
1
|
import { html } from "@node-projects/base-custom-webcomponent";
|
|
2
|
-
import {
|
|
3
|
-
export class BlockToolbarExtension extends
|
|
2
|
+
import { BasicStackedToolbarExtension } from "../BasicStackedToolbarExtension.js";
|
|
3
|
+
export class BlockToolbarExtension extends BasicStackedToolbarExtension {
|
|
4
4
|
static template = html `
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
<option>grid</option>
|
|
10
|
-
</select>
|
|
11
|
-
</div>
|
|
12
|
-
`;
|
|
13
|
-
_toolbar;
|
|
5
|
+
<div style="height: 100%; width: 100%;">
|
|
6
|
+
${BasicStackedToolbarExtension.basicTemplate}
|
|
7
|
+
</div>
|
|
8
|
+
`;
|
|
14
9
|
constructor(extensionManager, designerView, extendedItem) {
|
|
15
10
|
super(extensionManager, designerView, extendedItem);
|
|
16
11
|
}
|
|
17
12
|
extend(cache, event) {
|
|
18
|
-
|
|
19
|
-
const displayTypeEl = this._toolbar.getById('displayType');
|
|
20
|
-
displayTypeEl.onchange = () => {
|
|
21
|
-
this.extendedItem.updateStyleInSheetOrLocal('display', displayTypeEl.value);
|
|
22
|
-
this.extensionManager.reapplyAllAppliedExtentions([this.extendedItem]);
|
|
23
|
-
};
|
|
13
|
+
super.extend(cache, event);
|
|
24
14
|
this.refresh(cache, event);
|
|
25
15
|
}
|
|
26
|
-
refresh(cache, event) {
|
|
27
|
-
if (event) {
|
|
28
|
-
const pos = this.designerCanvas.getNormalizedEventCoordinates(event);
|
|
29
|
-
this._toolbar.updatePosition({ x: (pos.x - (16 / this.designerCanvas.zoomFactor)), y: (pos.y - (44 / this.designerCanvas.zoomFactor)) });
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
dispose() {
|
|
33
|
-
this._removeAllOverlays();
|
|
34
|
-
}
|
|
35
16
|
}
|
package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtensionProvider.js
CHANGED
|
@@ -2,8 +2,10 @@ import { BlockToolbarExtension } from './BlockToolbarExtension.js';
|
|
|
2
2
|
import { NodeType } from '../../../../item/NodeType.js';
|
|
3
3
|
export class BlockToolbarExtensionProvider {
|
|
4
4
|
shouldExtend(extensionManager, designerView, designItem) {
|
|
5
|
-
if (designItem.nodeType === NodeType.Element
|
|
6
|
-
|
|
5
|
+
if (designItem.nodeType === NodeType.Element) {
|
|
6
|
+
const d = getComputedStyle(designItem.element).display;
|
|
7
|
+
return d === 'block' || d === 'inline';
|
|
8
|
+
}
|
|
7
9
|
return false;
|
|
8
10
|
}
|
|
9
11
|
getExtension(extensionManager, designerView, designItem) {
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { IDesignItem } from '../../../../item/IDesignItem.js';
|
|
2
2
|
import { IDesignerCanvas } from '../../IDesignerCanvas.js';
|
|
3
|
-
import { AbstractExtension } from "../AbstractExtension.js";
|
|
4
3
|
import { IExtensionManager } from '../IExtensionManger.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
import { BasicStackedToolbarExtension } from "../BasicStackedToolbarExtension.js";
|
|
5
|
+
export declare class FlexToolbarExtension extends BasicStackedToolbarExtension {
|
|
6
|
+
protected static template: HTMLTemplateElement;
|
|
8
7
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
9
8
|
extend(cache: Record<string | symbol, any>, event: MouseEvent): void;
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
protected _addFlexDirectionButton(): void;
|
|
10
|
+
rotateImagesAcordingFlexDirection(direction: string): void;
|
|
12
11
|
}
|
|
@@ -1,35 +1,77 @@
|
|
|
1
1
|
import { html } from "@node-projects/base-custom-webcomponent";
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { assetsPath } from "../../../../../Constants.js";
|
|
3
|
+
import { BasicStackedToolbarExtension } from "../BasicStackedToolbarExtension.js";
|
|
4
|
+
export class FlexToolbarExtension extends BasicStackedToolbarExtension {
|
|
4
5
|
static template = html `
|
|
5
6
|
<div style="height: 100%; width: 100%;">
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
<
|
|
9
|
-
<
|
|
10
|
-
|
|
7
|
+
${BasicStackedToolbarExtension.basicTemplate}
|
|
8
|
+
<node-projects-image-button-list-selector property="direction" no-value-in-header id="flex-direction">
|
|
9
|
+
<img data-value="row" src="${assetsPath}images/chromeDevtools/flex-direction-row-icon.svg">
|
|
10
|
+
<img data-value="column" src="${assetsPath}images/chromeDevtools/flex-direction-column-icon.svg">
|
|
11
|
+
<img data-value="row-reverse" style="transform: scaleX(-1);" src="${assetsPath}images/chromeDevtools/flex-direction-row-icon.svg">
|
|
12
|
+
<img data-value="column-reverse" style="transform: scaleY(-1);" src="${assetsPath}images/chromeDevtools/flex-direction-column-icon.svg">
|
|
13
|
+
</node-projects-image-button-list-selector>
|
|
14
|
+
<node-projects-image-button-list-selector property="wrap" no-value-in-header id="flex-wrap">
|
|
15
|
+
<img data-value="nowrap" src="${assetsPath}images/chromeDevtools/flex-wrap-nowrap-icon.svg">
|
|
16
|
+
<img data-value="wrap" src="${assetsPath}images/chromeDevtools/flex-wrap-wrap-icon.svg">
|
|
17
|
+
</node-projects-image-button-list-selector>
|
|
18
|
+
<node-projects-image-button-list-selector property="align-content" no-value-in-header id="align-content">
|
|
19
|
+
<img data-value="start" src="${assetsPath}images/chromeDevtools/align-content-flex-start-icon.svg">
|
|
20
|
+
<img data-value="center" src="${assetsPath}images/chromeDevtools/align-content-center-icon.svg">
|
|
21
|
+
<img data-value="end" src="${assetsPath}images/chromeDevtools/align-content-flex-end-icon.svg">
|
|
22
|
+
<img data-value="space-around" src="${assetsPath}images/chromeDevtools/align-content-space-around-icon.svg">
|
|
23
|
+
<img data-value="space-evenly" src="${assetsPath}images/chromeDevtools/align-content-space-evenly-icon.svg">
|
|
24
|
+
<img data-value="space-between" src="${assetsPath}images/chromeDevtools/align-content-space-between-icon.svg">
|
|
25
|
+
<img data-value="stretch" src="${assetsPath}images/chromeDevtools/align-content-stretch-icon.svg">
|
|
26
|
+
</node-projects-image-button-list-selector>
|
|
27
|
+
<node-projects-image-button-list-selector property="justify-content" no-value-in-header id="justify-content">
|
|
28
|
+
<img data-value="start" src="${assetsPath}images/chromeDevtools/justify-content-start-icon.svg">
|
|
29
|
+
<img data-value="center" src="${assetsPath}images/chromeDevtools/justify-content-center-icon.svg">
|
|
30
|
+
<img data-value="end" src="${assetsPath}images/chromeDevtools/justify-content-end-icon.svg">
|
|
31
|
+
<img data-value="space-around" src="${assetsPath}images/chromeDevtools/justify-content-space-around-icon.svg">
|
|
32
|
+
<img data-value="space-evenly" src="${assetsPath}images/chromeDevtools/justify-content-space-evenly-icon.svg">
|
|
33
|
+
<img data-value="space-between" src="${assetsPath}images/chromeDevtools/justify-content-space-between-icon.svg">
|
|
34
|
+
</node-projects-image-button-list-selector>
|
|
35
|
+
<node-projects-image-button-list-selector property="align-items" no-value-in-header id="align-items">
|
|
36
|
+
<img data-value="start" src="${assetsPath}images/chromeDevtools/align-items-start-icon.svg">
|
|
37
|
+
<img data-value="center" src="${assetsPath}images/chromeDevtools/align-items-center-icon.svg">
|
|
38
|
+
<img data-value="end" src="${assetsPath}images/chromeDevtools/align-items-end-icon.svg">
|
|
39
|
+
<img data-value="stretch" src="${assetsPath}images/chromeDevtools/align-items-stretch-icon.svg">
|
|
40
|
+
<img data-value="space-evenly" src="${assetsPath}images/chromeDevtools/align-items-baseline-icon.svg">
|
|
41
|
+
</node-projects-image-button-list-selector>
|
|
11
42
|
</div>
|
|
12
43
|
`;
|
|
13
|
-
_toolbar;
|
|
14
44
|
constructor(extensionManager, designerView, extendedItem) {
|
|
15
45
|
super(extensionManager, designerView, extendedItem);
|
|
46
|
+
this._size.width = 515;
|
|
16
47
|
}
|
|
17
48
|
extend(cache, event) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
49
|
+
super.extend(cache, event);
|
|
50
|
+
this._addFlexDirectionButton();
|
|
51
|
+
this._addStyleButton('flex-wrap');
|
|
52
|
+
this._addStyleButton('align-content');
|
|
53
|
+
this._addStyleButton('justify-content');
|
|
54
|
+
this._addStyleButton('align-items');
|
|
24
55
|
this.refresh(cache, event);
|
|
25
56
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
57
|
+
_addFlexDirectionButton() {
|
|
58
|
+
const cs = getComputedStyle(this.extendedItem.element);
|
|
59
|
+
const ctl = this._toolbar.getById('flex-direction');
|
|
60
|
+
ctl.addEventListener('value-changed', async () => {
|
|
61
|
+
await this.extendedItem.updateStyleInSheetOrLocalAsync('flex-direction', ctl.value);
|
|
62
|
+
this.rotateImagesAcordingFlexDirection(ctl.value);
|
|
63
|
+
});
|
|
64
|
+
ctl.value = cs['flex-direction'];
|
|
65
|
+
this.rotateImagesAcordingFlexDirection(ctl.value);
|
|
31
66
|
}
|
|
32
|
-
|
|
33
|
-
|
|
67
|
+
rotateImagesAcordingFlexDirection(direction) {
|
|
68
|
+
let angle = 0;
|
|
69
|
+
if (direction == 'column' || direction == 'column-reverse')
|
|
70
|
+
angle = -90;
|
|
71
|
+
this._toolbar.getById('flex-wrap').querySelectorAll('img').forEach(x => x.style.rotate = angle + 'deg');
|
|
72
|
+
this._toolbar.getById('align-content').querySelectorAll('img').forEach(x => x.style.rotate = angle + 'deg');
|
|
73
|
+
this._toolbar.getById('justify-content').querySelectorAll('img').forEach(x => x.style.rotate = angle + 'deg');
|
|
74
|
+
//@ts-ignore
|
|
75
|
+
this._toolbar.getById('align-items').querySelectorAll('img:nth-child(-n+4)').forEach(x => x.style.rotate = angle + 'deg');
|
|
34
76
|
}
|
|
35
77
|
}
|
|
@@ -2,8 +2,10 @@ import { FlexToolbarExtension } from './FlexToolbarExtension.js';
|
|
|
2
2
|
import { NodeType } from '../../../../item/NodeType.js';
|
|
3
3
|
export class FlexToolbarExtensionProvider {
|
|
4
4
|
shouldExtend(extensionManager, designerView, designItem) {
|
|
5
|
-
if (designItem.nodeType === NodeType.Element
|
|
6
|
-
|
|
5
|
+
if (designItem.nodeType === NodeType.Element) {
|
|
6
|
+
const d = getComputedStyle(designItem.element).display;
|
|
7
|
+
return d === 'flex' || d === 'inline-flex';
|
|
8
|
+
}
|
|
7
9
|
return false;
|
|
8
10
|
}
|
|
9
11
|
getExtension(extensionManager, designerView, designItem) {
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { IDesignItem } from '../../../../item/IDesignItem.js';
|
|
2
2
|
import { IDesignerCanvas } from '../../IDesignerCanvas.js';
|
|
3
|
-
import { AbstractExtension } from "../AbstractExtension.js";
|
|
4
3
|
import { IExtensionManager } from '../IExtensionManger.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
import { BasicStackedToolbarExtension } from "../BasicStackedToolbarExtension.js";
|
|
5
|
+
export declare class GridChildToolbarExtension extends BasicStackedToolbarExtension {
|
|
6
|
+
protected static template: HTMLTemplateElement;
|
|
8
7
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
9
8
|
extend(cache: Record<string | symbol, any>, event: MouseEvent): void;
|
|
10
|
-
refresh(cache: Record<string | symbol, any>, event?: MouseEvent): void;
|
|
11
|
-
dispose(): void;
|
|
12
9
|
}
|
|
@@ -1,66 +1,55 @@
|
|
|
1
1
|
import { html } from "@node-projects/base-custom-webcomponent";
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { assetsPath } from "../../../../../Constants.js";
|
|
3
|
+
import { BasicStackedToolbarExtension } from "../BasicStackedToolbarExtension.js";
|
|
4
|
+
export class GridChildToolbarExtension extends BasicStackedToolbarExtension {
|
|
4
5
|
static template = html `
|
|
5
6
|
<div style="height: 100%; width: 100%;">
|
|
6
|
-
<
|
|
7
|
-
<
|
|
8
|
-
<
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
<
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
<
|
|
16
|
-
<
|
|
17
|
-
<
|
|
18
|
-
<
|
|
19
|
-
</
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
7
|
+
<div style="display: flex; flex-direction: column;">
|
|
8
|
+
<span style="font-size: 10px; color: #00aff0;">column:</span>
|
|
9
|
+
<input type="text" title="column" id="gridColumn" style="pointer-events: all; height: 12px; width: 45px; padding: 0; margin-right: 5px">
|
|
10
|
+
</div>
|
|
11
|
+
<div style="display: flex; flex-direction: column;">
|
|
12
|
+
<span style="font-size: 10px; color: #00aff0;">row:</span>
|
|
13
|
+
<input type="text" title="column" id="gridRow" style="pointer-events: all; height: 12px; width: 45px; padding: 0; margin-right: 10px">
|
|
14
|
+
</div>
|
|
15
|
+
<node-projects-image-button-list-selector property="align-self" no-value-in-header id="align-self">
|
|
16
|
+
<img data-value="start" src="${assetsPath}images/chromeDevtools/align-items-start-icon.svg">
|
|
17
|
+
<img data-value="center" src="${assetsPath}images/chromeDevtools/align-items-center-icon.svg">
|
|
18
|
+
<img data-value="end" src="${assetsPath}images/chromeDevtools/align-items-end-icon.svg">
|
|
19
|
+
<img data-value="stretch" src="${assetsPath}images/chromeDevtools/align-items-stretch-icon.svg">
|
|
20
|
+
</node-projects-image-button-list-selector>
|
|
21
|
+
<node-projects-image-button-list-selector property="justify-self" no-value-in-header id="justify-self">
|
|
22
|
+
<img data-value="start" src="${assetsPath}images/chromeDevtools/justify-items-start-icon.svg">
|
|
23
|
+
<img data-value="center" src="${assetsPath}images/chromeDevtools/justify-items-center-icon.svg">
|
|
24
|
+
<img data-value="end" src="${assetsPath}images/chromeDevtools/justify-items-end-icon.svg">
|
|
25
|
+
<img data-value="stretch" src="${assetsPath}images/chromeDevtools/justify-items-stretch-icon.svg">
|
|
26
|
+
</node-projects-image-button-list-selector>
|
|
27
|
+
</div>`;
|
|
23
28
|
constructor(extensionManager, designerView, extendedItem) {
|
|
24
29
|
super(extensionManager, designerView, extendedItem);
|
|
30
|
+
this._size.width = 250;
|
|
25
31
|
}
|
|
26
32
|
extend(cache, event) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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 - 44) });
|
|
33
|
+
super.extend(cache, event);
|
|
34
|
+
const cs = getComputedStyle(this.extendedItem.element);
|
|
35
|
+
const gridColumnEl = this._toolbar.getById('gridColumn');
|
|
36
|
+
if (gridColumnEl) {
|
|
37
|
+
gridColumnEl.value = cs.gridColumn;
|
|
38
|
+
gridColumnEl.onkeyup = async (e) => {
|
|
39
|
+
if (e.key === 'Enter')
|
|
40
|
+
await this.extendedItem.updateStyleInSheetOrLocalAsync('gridColumn', gridColumnEl.value);
|
|
41
|
+
};
|
|
61
42
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
43
|
+
const gridRowEl = this._toolbar.getById('gridRow');
|
|
44
|
+
if (gridRowEl) {
|
|
45
|
+
gridRowEl.value = cs.gridColumn;
|
|
46
|
+
gridRowEl.onkeyup = async (e) => {
|
|
47
|
+
if (e.key === 'Enter')
|
|
48
|
+
await this.extendedItem.updateStyleInSheetOrLocalAsync('gridRow', gridRowEl.value);
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
this._addStyleButton('align-self');
|
|
52
|
+
this._addStyleButton('justify-self');
|
|
53
|
+
this.refresh(cache, event);
|
|
65
54
|
}
|
|
66
55
|
}
|
package/dist/elements/widgets/designerView/extensions/grid/GridChildToolbarExtensionProvider.d.ts
CHANGED
|
@@ -6,5 +6,4 @@ import { IExtensionManager } from '../IExtensionManger.js';
|
|
|
6
6
|
export declare class GridChildToolbarExtensionProvider implements IDesignerExtensionProvider {
|
|
7
7
|
shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
8
8
|
getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
9
|
-
readonly style: CSSStyleSheet;
|
|
10
9
|
}
|
package/dist/elements/widgets/designerView/extensions/grid/GridChildToolbarExtensionProvider.js
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
import { css } from '@node-projects/base-custom-webcomponent';
|
|
2
1
|
import { NodeType } from '../../../../item/NodeType.js';
|
|
3
2
|
import { GridChildToolbarExtension } from './GridChildToolbarExtension.js';
|
|
4
3
|
export class GridChildToolbarExtensionProvider {
|
|
5
4
|
shouldExtend(extensionManager, designerView, designItem) {
|
|
6
|
-
if (designItem.nodeType === NodeType.Element &&
|
|
7
|
-
|
|
5
|
+
if (designItem.nodeType === NodeType.Element && designItem.parent) {
|
|
6
|
+
const cs = designItem.parent?.getComputedStyle();
|
|
7
|
+
if (cs != null && (cs.display === 'grid' || cs.display === 'inline-grid'))
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
8
10
|
return false;
|
|
9
11
|
}
|
|
10
12
|
getExtension(extensionManager, designerView, designItem) {
|
|
11
13
|
return new GridChildToolbarExtension(extensionManager, designerView, designItem);
|
|
12
14
|
}
|
|
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
15
|
}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { IDesignItem } from '../../../../item/IDesignItem.js';
|
|
2
2
|
import { IDesignerCanvas } from '../../IDesignerCanvas.js';
|
|
3
|
-
import { AbstractExtension } from "../AbstractExtension.js";
|
|
4
3
|
import { IExtensionManager } from '../IExtensionManger.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
import { BasicStackedToolbarExtension } from "../BasicStackedToolbarExtension.js";
|
|
5
|
+
export declare class GridToolbarExtension extends BasicStackedToolbarExtension {
|
|
6
|
+
protected static template: HTMLTemplateElement;
|
|
8
7
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
9
8
|
extend(cache: Record<string | symbol, any>, event: MouseEvent): void;
|
|
10
|
-
refresh(cache: Record<string | symbol, any>, event?: MouseEvent): void;
|
|
11
|
-
dispose(): void;
|
|
12
9
|
}
|