@node-projects/web-component-designer 0.0.267 → 0.0.269
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/dist/elements/helper/NpmPackageLoader.d.ts +2 -1
- package/dist/elements/helper/NpmPackageLoader.js +89 -22
- package/dist/elements/item/DesignItem.d.ts +1 -0
- package/dist/elements/item/DesignItem.js +12 -0
- package/dist/elements/services/DefaultServiceBootstrap.js +2 -2
- package/dist/elements/services/copyPasteService/CopyPasteAsJsonService.js +10 -0
- package/dist/elements/services/demoProviderService/DemoProviderService.js +11 -2
- package/dist/elements/services/demoProviderService/IframeDemoProviderService copy.d.ts +6 -0
- package/dist/elements/services/demoProviderService/IframeDemoProviderService copy.js +38 -0
- package/dist/elements/services/demoProviderService/IframeDemoProviderService.d.ts +6 -0
- package/dist/elements/services/demoProviderService/IframeDemoProviderService.js +38 -0
- package/dist/elements/services/demoProviderService/SimpleDemoProviderService.d.ts +6 -0
- package/dist/elements/services/demoProviderService/SimpleDemoProviderService.js +27 -0
- package/dist/elements/services/designerAddons/IDesignerAddonJson copy.d.ts +3 -0
- package/dist/elements/services/designerAddons/IDesignerAddonJson copy.js +1 -0
- package/dist/elements/services/designerAddons/IDesignerAddonJson.d.ts +0 -3
- package/dist/elements/services/designerAddons/IDesignerInfoJson.d.ts +7 -0
- package/dist/elements/services/designerAddons/IDesignerInfoJson.js +19 -0
- package/dist/elements/services/dragDropService/ExternalDragDropService.d.ts +1 -1
- package/dist/elements/services/dragDropService/ExternalDragDropService.js +10 -16
- package/dist/elements/services/elementsService/WebcomponentManifestElementsService.js +6 -0
- package/dist/elements/services/propertiesService/DefaultEditorTypesService.js +5 -0
- package/dist/elements/services/propertiesService/propertyEditors/FontPropertyEditor.d.ts +9 -0
- package/dist/elements/services/propertiesService/propertyEditors/FontPropertyEditor.js +37 -0
- package/dist/elements/services/propertiesService/propertyEditors/SelectPropertyEditor copy.d.ts +7 -0
- package/dist/elements/services/propertiesService/propertyEditors/SelectPropertyEditor copy.js +28 -0
- package/dist/elements/services/propertiesService/services/CssProperties.json +3 -1
- package/dist/elements/services/propertiesService/services/CssPropertiesService.js +1 -0
- package/dist/elements/widgets/debugView/debug-view.js +6 -1
- package/dist/elements/widgets/designerView/DesignContext.d.ts +1 -0
- package/dist/elements/widgets/designerView/DesignContext.js +1 -0
- package/dist/elements/widgets/designerView/IDesignContext.d.ts +1 -0
- package/dist/elements/widgets/designerView/IDesignerCanvas.d.ts +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/package.json +1 -1
|
@@ -6,12 +6,13 @@ export declare class NpmPackageLoader {
|
|
|
6
6
|
private _dependecies;
|
|
7
7
|
constructor(packageSource?: string);
|
|
8
8
|
static patchCustomElementsRegistryToHandleErrors(): void;
|
|
9
|
-
loadNpmPackage(pkg: string, serviceContainer
|
|
9
|
+
loadNpmPackage(pkg: string, serviceContainer?: ServiceContainer, paletteTree?: PaletteTreeView, loadAllImports?: boolean, reportState?: (state: string) => void): Promise<void>;
|
|
10
10
|
loadDependency(dependency: string, version?: string, reportState?: (state: string) => void): Promise<void>;
|
|
11
11
|
addToImportmap(baseUrl: string, packageJsonObj: {
|
|
12
12
|
name?: string;
|
|
13
13
|
module?: string;
|
|
14
14
|
main?: string;
|
|
15
|
+
unpkg?: string;
|
|
15
16
|
exports?: Record<string, string>;
|
|
16
17
|
}): Promise<void>;
|
|
17
18
|
}
|
|
@@ -83,37 +83,44 @@ export class NpmPackageLoader {
|
|
|
83
83
|
console.warn("github custom elments json fallback", err);
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
for (let
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
86
|
+
if (serviceContainer) {
|
|
87
|
+
fetch(webComponentDesignerUrl).then(async (x) => {
|
|
88
|
+
if (x.ok) {
|
|
89
|
+
const webComponentDesignerJson = await x.json();
|
|
90
|
+
if (webComponentDesignerJson.services) {
|
|
91
|
+
for (let o in webComponentDesignerJson.services) {
|
|
92
|
+
for (let s of webComponentDesignerJson.services[o]) {
|
|
93
|
+
if (s.startsWith('./'))
|
|
94
|
+
s = s.substring(2);
|
|
95
|
+
//@ts-ignore
|
|
96
|
+
const classDefinition = (await importShim(baseUrl + s)).default;
|
|
97
|
+
//@ts-ignore
|
|
98
|
+
serviceContainer.register(o, new classDefinition());
|
|
99
|
+
}
|
|
98
100
|
}
|
|
99
101
|
}
|
|
100
102
|
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
103
105
|
if (customElementsJson.ok) {
|
|
104
106
|
const customElementsJsonObj = await customElementsJson.json();
|
|
105
107
|
let elements = new WebcomponentManifestElementsService(packageJsonObj.name, elementsRootPath, customElementsJsonObj);
|
|
106
|
-
serviceContainer
|
|
107
|
-
|
|
108
|
-
serviceContainer
|
|
108
|
+
if (serviceContainer)
|
|
109
|
+
serviceContainer.register('elementsService', elements);
|
|
110
|
+
if (serviceContainer) {
|
|
111
|
+
let properties = new WebcomponentManifestPropertiesService(packageJsonObj.name, customElementsJsonObj);
|
|
112
|
+
serviceContainer.register('propertyService', properties);
|
|
113
|
+
}
|
|
109
114
|
if (loadAllImports) {
|
|
110
115
|
for (let e of await elements.getElements()) {
|
|
111
116
|
//@ts-ignore
|
|
112
117
|
importShim(e.import);
|
|
113
118
|
}
|
|
114
119
|
}
|
|
115
|
-
|
|
116
|
-
|
|
120
|
+
if (serviceContainer && paletteTree) {
|
|
121
|
+
//todo: should be retriggered by service container, or changeing list in container
|
|
122
|
+
paletteTree.loadControls(serviceContainer, serviceContainer.elementsServices);
|
|
123
|
+
}
|
|
117
124
|
}
|
|
118
125
|
else {
|
|
119
126
|
console.warn('npm package: ' + pkg + ' - no custom-elements.json found, only loading javascript module');
|
|
@@ -153,7 +160,7 @@ export class NpmPackageLoader {
|
|
|
153
160
|
else {
|
|
154
161
|
console.warn('npm package: ' + pkg + ' - no entry point in package found.');
|
|
155
162
|
}
|
|
156
|
-
if (newElements.length > 0) {
|
|
163
|
+
if (newElements.length > 0 && serviceContainer && paletteTree) {
|
|
157
164
|
const elementsCfg = {
|
|
158
165
|
elements: newElements
|
|
159
166
|
};
|
|
@@ -196,13 +203,73 @@ export class NpmPackageLoader {
|
|
|
196
203
|
async addToImportmap(baseUrl, packageJsonObj) {
|
|
197
204
|
//@ts-ignore
|
|
198
205
|
const map = importShim.getImportMap().imports;
|
|
206
|
+
const importMap = { imports: {}, scopes: {} };
|
|
199
207
|
if (!map.hasOwnProperty(packageJsonObj.name)) {
|
|
200
208
|
//todo - use exports of package.json for importMap
|
|
201
|
-
|
|
209
|
+
if (packageJsonObj.exports) {
|
|
210
|
+
/* "exports": {
|
|
211
|
+
".": {
|
|
212
|
+
"browser": "./index.browser.js",
|
|
213
|
+
"default": "./index.js"
|
|
214
|
+
},
|
|
215
|
+
"./async": {
|
|
216
|
+
"browser": "./async/index.browser.js",
|
|
217
|
+
"default": "./async/index.js"
|
|
218
|
+
},
|
|
219
|
+
"./non-secure": "./non-secure/index.js",
|
|
220
|
+
"./package.json": "./package.json"
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
"exports": {
|
|
224
|
+
"node": {
|
|
225
|
+
"import": "./feature-node.mjs",
|
|
226
|
+
"require": "./feature-node.cjs"
|
|
227
|
+
},
|
|
228
|
+
"default": "./feature.mjs"
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
"exports": {
|
|
233
|
+
".": "./index.js",
|
|
234
|
+
"./feature.js": {
|
|
235
|
+
"node": "./feature-node.js",
|
|
236
|
+
"default": "./feature.js"
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
*/
|
|
241
|
+
/*
|
|
242
|
+
"exports": {
|
|
243
|
+
"import": "./index-module.js",
|
|
244
|
+
"require": "./index-require.cjs"
|
|
245
|
+
},
|
|
246
|
+
*/
|
|
247
|
+
let getImport = (obj) => {
|
|
248
|
+
if (obj?.browser)
|
|
249
|
+
return obj.browser;
|
|
250
|
+
if (obj?.import)
|
|
251
|
+
return obj.import;
|
|
252
|
+
if (obj?.default)
|
|
253
|
+
return obj.default;
|
|
254
|
+
return obj?.node;
|
|
255
|
+
};
|
|
256
|
+
//Names to use: browser, import, default, node
|
|
257
|
+
let imp = getImport(packageJsonObj.exports);
|
|
258
|
+
if (imp) {
|
|
259
|
+
importMap.imports[packageJsonObj.name] = baseUrl + removeTrailing(imp, '/');
|
|
260
|
+
}
|
|
261
|
+
else if (imp = getImport(packageJsonObj?.['.'])) {
|
|
262
|
+
importMap.imports[packageJsonObj.name] = baseUrl + removeTrailing(imp, '/');
|
|
263
|
+
}
|
|
264
|
+
}
|
|
202
265
|
let mainImport = packageJsonObj.main;
|
|
203
266
|
if (packageJsonObj.module)
|
|
204
267
|
mainImport = packageJsonObj.module;
|
|
205
|
-
|
|
268
|
+
if (packageJsonObj.unpkg && !mainImport)
|
|
269
|
+
mainImport = packageJsonObj.unpkg;
|
|
270
|
+
if (!importMap.imports[packageJsonObj.name]) {
|
|
271
|
+
importMap.imports[packageJsonObj.name] = baseUrl + removeTrailing(mainImport, '/');
|
|
272
|
+
}
|
|
206
273
|
importMap.imports[packageJsonObj.name + '/'] = baseUrl;
|
|
207
274
|
//@ts-ignore
|
|
208
275
|
importShim.addImportMap(importMap);
|
|
@@ -87,4 +87,5 @@ export declare class DesignItem implements IDesignItem {
|
|
|
87
87
|
_removeChildInternal(designItem: IDesignItem): void;
|
|
88
88
|
_refreshIfStyleSheet(): void;
|
|
89
89
|
getPlacementService(style?: CSSStyleDeclaration): IPlacementService;
|
|
90
|
+
static createDesignItemFromImageBlob(serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, data: Blob): Promise<IDesignItem>;
|
|
90
91
|
}
|
|
@@ -482,4 +482,16 @@ export class DesignItem {
|
|
|
482
482
|
style ??= getComputedStyle(this.element);
|
|
483
483
|
return this.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(this, style));
|
|
484
484
|
}
|
|
485
|
+
static createDesignItemFromImageBlob(serviceContainer, instanceServiceContainer, data) {
|
|
486
|
+
return new Promise(resolve => {
|
|
487
|
+
let reader = new FileReader();
|
|
488
|
+
reader.onloadend = () => {
|
|
489
|
+
const img = document.createElement('img');
|
|
490
|
+
img.src = reader.result;
|
|
491
|
+
const di = DesignItem.createDesignItemFromInstance(img, serviceContainer, instanceServiceContainer);
|
|
492
|
+
return resolve(di);
|
|
493
|
+
};
|
|
494
|
+
reader.readAsDataURL(data);
|
|
495
|
+
});
|
|
496
|
+
}
|
|
485
497
|
}
|
|
@@ -45,7 +45,6 @@ import { CopyPasteService } from './copyPasteService/CopyPasteService.js';
|
|
|
45
45
|
import { DefaultModelCommandService } from './modelCommandService/DefaultModelCommandService.js';
|
|
46
46
|
import { ButtonSeperatorProvider } from '../widgets/designerView/extensions/buttons/ButtonSeperatorProvider.js';
|
|
47
47
|
import { GridExtensionDesignViewConfigButtons } from '../widgets/designerView/extensions/buttons/GridExtensionDesignViewConfigButtons.js';
|
|
48
|
-
import { DemoProviderService } from './demoProviderService/DemoProviderService.js';
|
|
49
48
|
import { DrawRectTool } from '../widgets/designerView/tools/DrawRectTool.js';
|
|
50
49
|
import { DrawEllipsisTool } from '../widgets/designerView/tools/DrawEllipsisTool.js';
|
|
51
50
|
import { DrawLineTool } from '../widgets/designerView/tools/DrawLineTool.js';
|
|
@@ -84,6 +83,7 @@ import { TransformToolButtonProvider } from '../widgets/designerView/tools/toolB
|
|
|
84
83
|
import { MultipleSelectionRectExtensionProvider } from '../widgets/designerView/extensions/MultipleSelectionRectExtensionProvider.js';
|
|
85
84
|
import { DragDropService } from './dragDropService/DragDropService.js';
|
|
86
85
|
import { EventsService } from './eventsService/EventsService.js';
|
|
86
|
+
import { SimpleDemoProviderService } from './demoProviderService/SimpleDemoProviderService.js';
|
|
87
87
|
export function createDefaultServiceContainer() {
|
|
88
88
|
let serviceContainer = new ServiceContainer();
|
|
89
89
|
let defaultPlacementService = new DefaultPlacementService();
|
|
@@ -107,7 +107,7 @@ export function createDefaultServiceContainer() {
|
|
|
107
107
|
serviceContainer.register("dragDropService", new DragDropService());
|
|
108
108
|
serviceContainer.register("copyPasteService", new CopyPasteService());
|
|
109
109
|
serviceContainer.register("modelCommandService", new DefaultModelCommandService());
|
|
110
|
-
serviceContainer.register("demoProviderService", new
|
|
110
|
+
serviceContainer.register("demoProviderService", new SimpleDemoProviderService());
|
|
111
111
|
serviceContainer.register("eventsService", new EventsService());
|
|
112
112
|
serviceContainer.register("undoService", (designerCanvas) => new UndoService(designerCanvas));
|
|
113
113
|
serviceContainer.register("selectionService", (designerCanvas) => new SelectionService(designerCanvas, false));
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DomConverter } from "../../widgets/designerView/DomConverter.js";
|
|
2
2
|
import { copyToClipboard, getFromClipboard, getTextFromClipboard } from "../../helper/ClipboardHelper.js";
|
|
3
|
+
import { DesignItem } from "../../item/DesignItem.js";
|
|
3
4
|
export class CopyPasteAsJsonService {
|
|
4
5
|
async copyItems(designItems) {
|
|
5
6
|
const copyText = DomConverter.ConvertToString(designItems, false);
|
|
@@ -26,6 +27,15 @@ export class CopyPasteAsJsonService {
|
|
|
26
27
|
data = await (await items[0].getType('application/json'))?.text();
|
|
27
28
|
}
|
|
28
29
|
catch { }
|
|
30
|
+
try {
|
|
31
|
+
let imageFmt = items[0].types.find(x => x.startsWith("image/"));
|
|
32
|
+
if (imageFmt) {
|
|
33
|
+
let imgData = await items[0].getType(imageFmt);
|
|
34
|
+
let di = await DesignItem.createDesignItemFromImageBlob(serviceContainer, instanceServiceContainer, imgData);
|
|
35
|
+
return [[di]];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch { }
|
|
29
39
|
}
|
|
30
40
|
else {
|
|
31
41
|
data = await getTextFromClipboard();
|
|
@@ -16,8 +16,17 @@ export class DemoProviderService {
|
|
|
16
16
|
const doc = iframe.contentWindow.document;
|
|
17
17
|
doc.open();
|
|
18
18
|
doc.write('<script type="module">');
|
|
19
|
-
|
|
20
|
-
doc.write("import
|
|
19
|
+
if (instanceServiceContainer.designContext.npmPackages?.length) {
|
|
20
|
+
doc.write("import { NpmPackageLoader } from '../../helper/NpmPackageLoader.js'");
|
|
21
|
+
doc.write("let loader = new NpmPackageLoader();");
|
|
22
|
+
for (let p of instanceServiceContainer.designContext.npmPackages) {
|
|
23
|
+
doc.write("loader.loadNpmPackage('" + p + "', null, null, true);");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (instanceServiceContainer.designContext.imports?.length) {
|
|
27
|
+
for (let i of instanceServiceContainer.designContext.imports) {
|
|
28
|
+
doc.write("import '" + i + "';");
|
|
29
|
+
}
|
|
21
30
|
}
|
|
22
31
|
doc.write("document.body.style.display='';");
|
|
23
32
|
doc.write('</script>');
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { InstanceServiceContainer } from "../InstanceServiceContainer.js";
|
|
2
|
+
import { ServiceContainer } from "../ServiceContainer.js";
|
|
3
|
+
import { IDemoProviderService } from "./IDemoProviderService.js";
|
|
4
|
+
export declare class IframeDemoProviderService implements IDemoProviderService {
|
|
5
|
+
provideDemo(container: HTMLElement, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, code: string, style: string): Promise<void>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { DomHelper } from '@node-projects/base-custom-webcomponent/dist/DomHelper.js';
|
|
2
|
+
export class IframeDemoProviderService {
|
|
3
|
+
provideDemo(container, serviceContainer, instanceServiceContainer, code, style) {
|
|
4
|
+
return new Promise(resolve => {
|
|
5
|
+
const iframe = document.createElement('iframe');
|
|
6
|
+
iframe.style.width = '100%';
|
|
7
|
+
iframe.style.height = '100%';
|
|
8
|
+
iframe.style.border = 'none';
|
|
9
|
+
iframe.style.display = 'none';
|
|
10
|
+
DomHelper.removeAllChildnodes(container);
|
|
11
|
+
container.appendChild(iframe);
|
|
12
|
+
iframe.onload = () => {
|
|
13
|
+
iframe.style.display = 'block';
|
|
14
|
+
resolve();
|
|
15
|
+
};
|
|
16
|
+
const doc = iframe.contentWindow.document;
|
|
17
|
+
doc.open();
|
|
18
|
+
doc.write('<script type="module">');
|
|
19
|
+
if (instanceServiceContainer.designContext.npmPackages?.length) {
|
|
20
|
+
doc.write("import { NpmPackageLoader } from '../../helper/NpmPackageLoader.js'");
|
|
21
|
+
doc.write("let loader = new NpmPackageLoader();");
|
|
22
|
+
for (let p of instanceServiceContainer.designContext.npmPackages) {
|
|
23
|
+
doc.write("loader.loadNpmPackage('" + p + "', null, null, true);");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (instanceServiceContainer.designContext.imports?.length) {
|
|
27
|
+
for (let i of instanceServiceContainer.designContext.imports) {
|
|
28
|
+
doc.write("import '" + i + "';");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
doc.write("document.body.style.display='';");
|
|
32
|
+
doc.write('</script>');
|
|
33
|
+
doc.write('<style>' + (style ?? '') + '</style>');
|
|
34
|
+
doc.write('<body style="display:none; width: 100%; height: 100%; margin: 0; padding: 0; position: absolute;">' + code + '</body>');
|
|
35
|
+
doc.close();
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { InstanceServiceContainer } from "../InstanceServiceContainer.js";
|
|
2
|
+
import { ServiceContainer } from "../ServiceContainer.js";
|
|
3
|
+
import { IDemoProviderService } from "./IDemoProviderService.js";
|
|
4
|
+
export declare class IframeDemoProviderService implements IDemoProviderService {
|
|
5
|
+
provideDemo(container: HTMLElement, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, code: string, style: string): Promise<void>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { DomHelper } from '@node-projects/base-custom-webcomponent/dist/DomHelper.js';
|
|
2
|
+
export class IframeDemoProviderService {
|
|
3
|
+
provideDemo(container, serviceContainer, instanceServiceContainer, code, style) {
|
|
4
|
+
return new Promise(resolve => {
|
|
5
|
+
const iframe = document.createElement('iframe');
|
|
6
|
+
iframe.style.width = '100%';
|
|
7
|
+
iframe.style.height = '100%';
|
|
8
|
+
iframe.style.border = 'none';
|
|
9
|
+
iframe.style.display = 'none';
|
|
10
|
+
DomHelper.removeAllChildnodes(container);
|
|
11
|
+
container.appendChild(iframe);
|
|
12
|
+
iframe.onload = () => {
|
|
13
|
+
iframe.style.display = 'block';
|
|
14
|
+
resolve();
|
|
15
|
+
};
|
|
16
|
+
const doc = iframe.contentWindow.document;
|
|
17
|
+
doc.open();
|
|
18
|
+
doc.write('<script type="module">');
|
|
19
|
+
if (instanceServiceContainer.designContext.npmPackages?.length) {
|
|
20
|
+
doc.write("import { NpmPackageLoader } from '../../helper/NpmPackageLoader.js'");
|
|
21
|
+
doc.write("let loader = new NpmPackageLoader();");
|
|
22
|
+
for (let p of instanceServiceContainer.designContext.npmPackages) {
|
|
23
|
+
doc.write("loader.loadNpmPackage('" + p + "', null, null, true);");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (instanceServiceContainer.designContext.imports?.length) {
|
|
27
|
+
for (let i of instanceServiceContainer.designContext.imports) {
|
|
28
|
+
doc.write("import '" + i + "';");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
doc.write("document.body.style.display='';");
|
|
32
|
+
doc.write('</script>');
|
|
33
|
+
doc.write('<style>' + (style ?? '') + '</style>');
|
|
34
|
+
doc.write('<body style="display:none; width: 100%; height: 100%; margin: 0; padding: 0; position: absolute;">' + code + '</body>');
|
|
35
|
+
doc.close();
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { IDemoProviderService } from "./IDemoProviderService.js";
|
|
2
|
+
import { ServiceContainer } from "../ServiceContainer.js";
|
|
3
|
+
import { InstanceServiceContainer } from "../InstanceServiceContainer.js";
|
|
4
|
+
export declare class SimpleDemoProviderService implements IDemoProviderService {
|
|
5
|
+
provideDemo(container: HTMLElement, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, code: string): Promise<void>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { DomHelper, cssFromString } from "@node-projects/base-custom-webcomponent";
|
|
2
|
+
export class SimpleDemoProviderService {
|
|
3
|
+
async provideDemo(container, serviceContainer, instanceServiceContainer, code) {
|
|
4
|
+
const contentDiv = document.createElement('div');
|
|
5
|
+
let shadowRoot = contentDiv.attachShadow({ mode: 'open' });
|
|
6
|
+
contentDiv.style.width = '100%';
|
|
7
|
+
contentDiv.style.height = '100%';
|
|
8
|
+
contentDiv.style.border = 'none';
|
|
9
|
+
contentDiv.style.display = 'none';
|
|
10
|
+
contentDiv.style.overflow = 'auto';
|
|
11
|
+
contentDiv.style.position = 'absolute';
|
|
12
|
+
container.style.position = 'relative';
|
|
13
|
+
DomHelper.removeAllChildnodes(container);
|
|
14
|
+
container.appendChild(contentDiv);
|
|
15
|
+
let styles = [];
|
|
16
|
+
if (instanceServiceContainer.designerCanvas.additionalStyles)
|
|
17
|
+
styles.push(...instanceServiceContainer.designerCanvas.additionalStyles);
|
|
18
|
+
if (instanceServiceContainer.stylesheetService) {
|
|
19
|
+
styles.push(...instanceServiceContainer.stylesheetService
|
|
20
|
+
.getStylesheets()
|
|
21
|
+
.map(x => cssFromString(x.content)));
|
|
22
|
+
}
|
|
23
|
+
shadowRoot.adoptedStyleSheets = styles;
|
|
24
|
+
shadowRoot.innerHTML = code;
|
|
25
|
+
contentDiv.style.display = '';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -2,5 +2,5 @@ import { IDesignerCanvas } from "../../widgets/designerView/IDesignerCanvas.js";
|
|
|
2
2
|
import { IExternalDragDropService } from "./IExternalDragDropService.js";
|
|
3
3
|
export declare class ExternalDragDropService implements IExternalDragDropService {
|
|
4
4
|
dragOver(event: DragEvent): 'none' | 'copy' | 'link' | 'move';
|
|
5
|
-
drop(designerCanvas: IDesignerCanvas, event: DragEvent): void
|
|
5
|
+
drop(designerCanvas: IDesignerCanvas, event: DragEvent): Promise<void>;
|
|
6
6
|
}
|
|
@@ -6,23 +6,17 @@ export class ExternalDragDropService {
|
|
|
6
6
|
return 'copy';
|
|
7
7
|
return 'none';
|
|
8
8
|
}
|
|
9
|
-
drop(designerCanvas, event) {
|
|
9
|
+
async drop(designerCanvas, event) {
|
|
10
10
|
if (event.dataTransfer.files[0].type.startsWith('image/')) {
|
|
11
|
-
let
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
di.setStyle('left', event.offsetX + targetRect.left - designerCanvas.containerBoundingRect.x + 'px');
|
|
21
|
-
designerCanvas.instanceServiceContainer.undoService.execute(new InsertAction(designerCanvas.rootDesignItem, designerCanvas.rootDesignItem.childCount, di));
|
|
22
|
-
grp.commit();
|
|
23
|
-
requestAnimationFrame(() => designerCanvas.instanceServiceContainer.selectionService.setSelectedElements([di]));
|
|
24
|
-
};
|
|
25
|
-
reader.readAsDataURL(event.dataTransfer.files[0]);
|
|
11
|
+
let di = await DesignItem.createDesignItemFromImageBlob(designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer, event.dataTransfer.files[0]);
|
|
12
|
+
let grp = di.openGroup("Insert of <img>");
|
|
13
|
+
di.setStyle('position', 'absolute');
|
|
14
|
+
const targetRect = event.target.getBoundingClientRect();
|
|
15
|
+
di.setStyle('top', event.offsetY + targetRect.top - designerCanvas.containerBoundingRect.y + 'px');
|
|
16
|
+
di.setStyle('left', event.offsetX + targetRect.left - designerCanvas.containerBoundingRect.x + 'px');
|
|
17
|
+
designerCanvas.instanceServiceContainer.undoService.execute(new InsertAction(designerCanvas.rootDesignItem, designerCanvas.rootDesignItem.childCount, di));
|
|
18
|
+
grp.commit();
|
|
19
|
+
requestAnimationFrame(() => designerCanvas.instanceServiceContainer.selectionService.setSelectedElements([di]));
|
|
26
20
|
}
|
|
27
21
|
}
|
|
28
22
|
}
|
|
@@ -20,6 +20,12 @@ export class WebcomponentManifestElementsService {
|
|
|
20
20
|
this._elementList.push(elDef);
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
|
+
for (let d of m.declarations) {
|
|
24
|
+
if (d.tagName) {
|
|
25
|
+
let elDef = { tag: d.tagName, import: removeTrailing(this._importPrefix, '/') + '/' + removeLeading(m.path, '/'), defaultWidth: "200px", defaultHeight: "200px", className: d.name };
|
|
26
|
+
this._elementList.push(elDef);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
23
29
|
if (this._resolveStored) {
|
|
24
30
|
this._resolveStored.forEach(x => x(this._elementList));
|
|
25
31
|
this._resolveStored = null;
|
|
@@ -7,6 +7,7 @@ import { TextPropertyEditor } from './propertyEditors/TextPropertyEditor.js';
|
|
|
7
7
|
import { BooleanPropertyEditor } from './propertyEditors/BooleanPropertyEditor.js';
|
|
8
8
|
import { ImageButtonListPropertyEditor } from './propertyEditors/ImageButtonListPropertyEditor.js';
|
|
9
9
|
import { ThicknessPropertyEditor } from "./propertyEditors/ThicknessPropertyEditor.js";
|
|
10
|
+
import { FontPropertyEditor } from './propertyEditors/FontPropertyEditor.js';
|
|
10
11
|
export class DefaultEditorTypesService {
|
|
11
12
|
getEditorForProperty(property) {
|
|
12
13
|
if (property.createEditor)
|
|
@@ -20,6 +21,10 @@ export class DefaultEditorTypesService {
|
|
|
20
21
|
{
|
|
21
22
|
return new ColorPropertyEditor(property);
|
|
22
23
|
}
|
|
24
|
+
case "font":
|
|
25
|
+
{
|
|
26
|
+
return new FontPropertyEditor(property);
|
|
27
|
+
}
|
|
23
28
|
case "date":
|
|
24
29
|
{
|
|
25
30
|
return new DatePropertyEditor(property);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IProperty } from '../IProperty.js';
|
|
2
|
+
import { BasePropertyEditor } from './BasePropertyEditor.js';
|
|
3
|
+
import { ValueType } from '../ValueType.js';
|
|
4
|
+
export declare class FontPropertyEditor extends BasePropertyEditor<HTMLSelectElement> {
|
|
5
|
+
static fontList: string[];
|
|
6
|
+
constructor(property: IProperty);
|
|
7
|
+
parseFontList(): void;
|
|
8
|
+
refreshValue(valueType: ValueType, value: any): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BasePropertyEditor } from './BasePropertyEditor.js';
|
|
2
|
+
export class FontPropertyEditor extends BasePropertyEditor {
|
|
3
|
+
static fontList;
|
|
4
|
+
constructor(property) {
|
|
5
|
+
super(property);
|
|
6
|
+
let element = document.createElement("select");
|
|
7
|
+
this.element = element;
|
|
8
|
+
if (FontPropertyEditor.fontList) {
|
|
9
|
+
this.parseFontList();
|
|
10
|
+
//@ts-ignore
|
|
11
|
+
}
|
|
12
|
+
else if (window.queryLocalFonts) {
|
|
13
|
+
//@ts-ignore
|
|
14
|
+
window.queryLocalFonts().then(x => {
|
|
15
|
+
//@ts-ignore
|
|
16
|
+
FontPropertyEditor.fontList = [...new Set(x.map(y => y.family))];
|
|
17
|
+
this.parseFontList();
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
FontPropertyEditor.fontList = ["Verdana", "Arial", "Tahoma", "Trebuchet MS", "Times New Roman", "Georgia", "Garamond", "Courier New", "Brush Script MT"];
|
|
22
|
+
this.parseFontList();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
parseFontList() {
|
|
26
|
+
for (let v of FontPropertyEditor.fontList) {
|
|
27
|
+
let option = document.createElement("option");
|
|
28
|
+
option.value = v;
|
|
29
|
+
option.text = v;
|
|
30
|
+
this.element.appendChild(option);
|
|
31
|
+
}
|
|
32
|
+
this.element.onchange = (e) => this._valueChanged(this.element.value);
|
|
33
|
+
}
|
|
34
|
+
refreshValue(valueType, value) {
|
|
35
|
+
this.element.value = value;
|
|
36
|
+
}
|
|
37
|
+
}
|
package/dist/elements/services/propertiesService/propertyEditors/SelectPropertyEditor copy.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { IProperty } from '../IProperty.js';
|
|
2
|
+
import { BasePropertyEditor } from './BasePropertyEditor.js';
|
|
3
|
+
import { ValueType } from '../ValueType.js';
|
|
4
|
+
export declare class SelectPropertyEditor extends BasePropertyEditor<HTMLSelectElement> {
|
|
5
|
+
constructor(property: IProperty);
|
|
6
|
+
refreshValue(valueType: ValueType, value: any): void;
|
|
7
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BasePropertyEditor } from './BasePropertyEditor.js';
|
|
2
|
+
export class SelectPropertyEditor extends BasePropertyEditor {
|
|
3
|
+
constructor(property) {
|
|
4
|
+
super(property);
|
|
5
|
+
let element = document.createElement("select");
|
|
6
|
+
if (property.type == 'enum') {
|
|
7
|
+
for (let v of property.enumValues) {
|
|
8
|
+
let option = document.createElement("option");
|
|
9
|
+
option.value = v[1];
|
|
10
|
+
option.text = v[0];
|
|
11
|
+
element.appendChild(option);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
for (let v of property.values) {
|
|
16
|
+
let option = document.createElement("option");
|
|
17
|
+
option.value = v;
|
|
18
|
+
option.text = v;
|
|
19
|
+
element.appendChild(option);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
element.onchange = (e) => this._valueChanged(element.value);
|
|
23
|
+
this.element = element;
|
|
24
|
+
}
|
|
25
|
+
refreshValue(valueType, value) {
|
|
26
|
+
this.element.value = value;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -125,7 +125,12 @@ export class DebugView extends BaseCustomWebComponentConstructorAppend {
|
|
|
125
125
|
</div>
|
|
126
126
|
`;
|
|
127
127
|
static style = css `
|
|
128
|
-
|
|
128
|
+
:host {
|
|
129
|
+
overflow: auto;
|
|
130
|
+
height: 100%;
|
|
131
|
+
display: block;
|
|
132
|
+
}
|
|
133
|
+
table {
|
|
129
134
|
font-family: Arial, Helvetica, sans-serif;
|
|
130
135
|
border-collapse: collapse;
|
|
131
136
|
width: 100%;
|
|
@@ -31,6 +31,7 @@ export interface IDesignerCanvas extends IPlacementView, IUiCommandHandler {
|
|
|
31
31
|
readonly scaleFactor: number;
|
|
32
32
|
canvasOffset: IPoint;
|
|
33
33
|
canvas: HTMLElement;
|
|
34
|
+
additionalStyles: CSSStyleSheet[];
|
|
34
35
|
eatEvents: Element;
|
|
35
36
|
initialize(serviceContainer: ServiceContainer): any;
|
|
36
37
|
getNormalizedEventCoordinates(event: MouseEvent): IPoint;
|
package/dist/index.d.ts
CHANGED
|
@@ -41,7 +41,8 @@ export type { IContentService } from "./elements/services/contentService/IConten
|
|
|
41
41
|
export * from "./elements/services/copyPasteService/CopyPasteService.js";
|
|
42
42
|
export * from "./elements/services/copyPasteService/CopyPasteAsJsonService.js";
|
|
43
43
|
export type { ICopyPasteService } from "./elements/services/copyPasteService/ICopyPasteService.js";
|
|
44
|
-
export * from "./elements/services/demoProviderService/
|
|
44
|
+
export * from "./elements/services/demoProviderService/IframeDemoProviderService.js";
|
|
45
|
+
export * from "./elements/services/demoProviderService/SimpleDemoProviderService.js";
|
|
45
46
|
export type { IDemoProviderService } from "./elements/services/demoProviderService/IDemoProviderService.js";
|
|
46
47
|
export * from "./elements/services/designItemDocumentPositionService/DesignItemDocumentPositionService.js";
|
|
47
48
|
export type { IDesignItemDocumentPositionService } from "./elements/services/designItemDocumentPositionService/IDesignItemDocumentPositionService.js";
|
package/dist/index.js
CHANGED
|
@@ -27,7 +27,8 @@ export * from "./elements/services/elementAtPointService/ElementAtPointService.j
|
|
|
27
27
|
export * from "./elements/services/contentService/ContentService.js";
|
|
28
28
|
export * from "./elements/services/copyPasteService/CopyPasteService.js";
|
|
29
29
|
export * from "./elements/services/copyPasteService/CopyPasteAsJsonService.js";
|
|
30
|
-
export * from "./elements/services/demoProviderService/
|
|
30
|
+
export * from "./elements/services/demoProviderService/IframeDemoProviderService.js";
|
|
31
|
+
export * from "./elements/services/demoProviderService/SimpleDemoProviderService.js";
|
|
31
32
|
export * from "./elements/services/designItemDocumentPositionService/DesignItemDocumentPositionService.js";
|
|
32
33
|
export * from "./elements/services/designItemService/DesignItemService.js";
|
|
33
34
|
export * from "./elements/services/dragDropService/ExternalDragDropService.js";
|