@vuu-ui/vuu-shell 0.8.33 → 0.8.34
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/cjs/app-header/AppHeader.css +24 -0
- package/cjs/connection-status/ConnectionStatusIcon.css +68 -0
- package/cjs/feature-list/FeatureList.css +21 -0
- package/cjs/layout-management/LayoutList.css +86 -0
- package/cjs/layout-management/LayoutTile.css +28 -0
- package/cjs/layout-management/SaveLayoutPanel.css +130 -0
- package/cjs/left-nav/LeftNav.css +178 -0
- package/cjs/login/LoginPanel.css +70 -0
- package/cjs/node_modules/html-to-image/es/apply-style.js +24 -0
- package/cjs/node_modules/html-to-image/es/apply-style.js.map +1 -0
- package/cjs/node_modules/html-to-image/es/clone-node.js +185 -0
- package/cjs/node_modules/html-to-image/es/clone-node.js.map +1 -0
- package/cjs/node_modules/html-to-image/es/clone-pseudos.js +48 -0
- package/cjs/node_modules/html-to-image/es/clone-pseudos.js.map +1 -0
- package/cjs/node_modules/html-to-image/es/dataurl.js +83 -0
- package/cjs/node_modules/html-to-image/es/dataurl.js.map +1 -0
- package/cjs/node_modules/html-to-image/es/embed-images.js +68 -0
- package/cjs/node_modules/html-to-image/es/embed-images.js.map +1 -0
- package/cjs/node_modules/html-to-image/es/embed-resources.js +74 -0
- package/cjs/node_modules/html-to-image/es/embed-resources.js.map +1 -0
- package/cjs/node_modules/html-to-image/es/embed-webfonts.js +187 -0
- package/cjs/node_modules/html-to-image/es/embed-webfonts.js.map +1 -0
- package/cjs/node_modules/html-to-image/es/index.js +49 -0
- package/cjs/node_modules/html-to-image/es/index.js.map +1 -0
- package/cjs/node_modules/html-to-image/es/mimes.js +28 -0
- package/cjs/node_modules/html-to-image/es/mimes.js.map +1 -0
- package/cjs/node_modules/html-to-image/es/util.js +166 -0
- package/cjs/node_modules/html-to-image/es/util.js.map +1 -0
- package/cjs/packages/vuu-shell/src/ShellContextProvider.js +31 -0
- package/cjs/packages/vuu-shell/src/ShellContextProvider.js.map +1 -0
- package/cjs/packages/vuu-shell/src/app-header/AppHeader.js +57 -0
- package/cjs/packages/vuu-shell/src/app-header/AppHeader.js.map +1 -0
- package/cjs/packages/vuu-shell/src/connection-status/ConnectionStatusIcon.js +42 -0
- package/cjs/packages/vuu-shell/src/connection-status/ConnectionStatusIcon.js.map +1 -0
- package/cjs/packages/vuu-shell/src/feature/Feature.js +56 -0
- package/cjs/packages/vuu-shell/src/feature/Feature.js.map +1 -0
- package/cjs/packages/vuu-shell/src/feature/FeatureErrorBoundary.js +30 -0
- package/cjs/packages/vuu-shell/src/feature/FeatureErrorBoundary.js.map +1 -0
- package/cjs/packages/vuu-shell/src/feature/Loader.js +8 -0
- package/cjs/packages/vuu-shell/src/feature/Loader.js.map +1 -0
- package/cjs/packages/vuu-shell/src/feature/css-module-loader.js +9 -0
- package/cjs/packages/vuu-shell/src/feature/css-module-loader.js.map +1 -0
- package/cjs/packages/vuu-shell/src/feature-list/FeatureList.js +43 -0
- package/cjs/packages/vuu-shell/src/feature-list/FeatureList.js.map +1 -0
- package/cjs/packages/vuu-shell/src/index.js +51 -0
- package/cjs/packages/vuu-shell/src/index.js.map +1 -0
- package/cjs/packages/vuu-shell/src/layout-management/LayoutList.js +66 -0
- package/cjs/packages/vuu-shell/src/layout-management/LayoutList.js.map +1 -0
- package/cjs/packages/vuu-shell/src/layout-management/LayoutTile.js +27 -0
- package/cjs/packages/vuu-shell/src/layout-management/LayoutTile.js.map +1 -0
- package/cjs/packages/vuu-shell/src/layout-management/SaveLayoutPanel.js +140 -0
- package/cjs/packages/vuu-shell/src/layout-management/SaveLayoutPanel.js.map +1 -0
- package/cjs/packages/vuu-shell/src/layout-management/screenshot-utils.js +25 -0
- package/cjs/packages/vuu-shell/src/layout-management/screenshot-utils.js.map +1 -0
- package/cjs/packages/vuu-shell/src/layout-management/useLayoutContextMenuItems.js +72 -0
- package/cjs/packages/vuu-shell/src/layout-management/useLayoutContextMenuItems.js.map +1 -0
- package/cjs/packages/vuu-shell/src/layout-management/useLayoutManager.js +218 -0
- package/cjs/packages/vuu-shell/src/layout-management/useLayoutManager.js.map +1 -0
- package/cjs/packages/vuu-shell/src/left-nav/LeftNav.js +156 -0
- package/cjs/packages/vuu-shell/src/left-nav/LeftNav.js.map +1 -0
- package/cjs/packages/vuu-shell/src/login/LoginPanel.js +99 -0
- package/cjs/packages/vuu-shell/src/login/LoginPanel.js.map +1 -0
- package/cjs/packages/vuu-shell/src/login/VuuLogo.js +134 -0
- package/cjs/packages/vuu-shell/src/login/VuuLogo.js.map +1 -0
- package/cjs/packages/vuu-shell/src/login/login-utils.js +31 -0
- package/cjs/packages/vuu-shell/src/login/login-utils.js.map +1 -0
- package/cjs/packages/vuu-shell/src/persistence-management/LocalPersistenceManager.js +183 -0
- package/cjs/packages/vuu-shell/src/persistence-management/LocalPersistenceManager.js.map +1 -0
- package/cjs/packages/vuu-shell/src/persistence-management/RemotePersistenceManager.js +162 -0
- package/cjs/packages/vuu-shell/src/persistence-management/RemotePersistenceManager.js.map +1 -0
- package/cjs/packages/vuu-shell/src/persistence-management/defaultApplicationJson.js +42 -0
- package/cjs/packages/vuu-shell/src/persistence-management/defaultApplicationJson.js.map +1 -0
- package/cjs/packages/vuu-shell/src/session-editing-form/SessionEditingForm.js +271 -0
- package/cjs/packages/vuu-shell/src/session-editing-form/SessionEditingForm.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/context-panel/ContextPanel.js +61 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/context-panel/ContextPanel.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/side-panel/SidePanel.js +27 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/side-panel/SidePanel.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/useFullHeightLeftPanel.js +41 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/useFullHeightLeftPanel.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/useInlayLeftPanel.js +78 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/useInlayLeftPanel.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/useShellLayout.js +15 -0
- package/cjs/packages/vuu-shell/src/shell-layouts/useShellLayout.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shell.js +129 -0
- package/cjs/packages/vuu-shell/src/shell.js.map +1 -0
- package/cjs/packages/vuu-shell/src/shellTypes.js +8 -0
- package/cjs/packages/vuu-shell/src/shellTypes.js.map +1 -0
- package/cjs/packages/vuu-shell/src/theme-switch/ThemeSwitch.js +47 -0
- package/cjs/packages/vuu-shell/src/theme-switch/ThemeSwitch.js.map +1 -0
- package/cjs/session-editing-form/SessionEditingForm.css +53 -0
- package/cjs/shell-layouts/context-panel/ContextPanel.css +58 -0
- package/cjs/shell-layouts/side-panel/SidePanel.css +4 -0
- package/cjs/shell.css +49 -0
- package/cjs/theme-switch/ThemeSwitch.css +30 -0
- package/esm/app-header/AppHeader.css +24 -0
- package/esm/connection-status/ConnectionStatusIcon.css +68 -0
- package/esm/feature-list/FeatureList.css +21 -0
- package/esm/layout-management/LayoutList.css +86 -0
- package/esm/layout-management/LayoutTile.css +28 -0
- package/esm/layout-management/SaveLayoutPanel.css +130 -0
- package/esm/left-nav/LeftNav.css +178 -0
- package/esm/login/LoginPanel.css +70 -0
- package/esm/node_modules/html-to-image/es/apply-style.js +22 -0
- package/esm/node_modules/html-to-image/es/apply-style.js.map +1 -0
- package/esm/node_modules/html-to-image/es/clone-node.js +183 -0
- package/esm/node_modules/html-to-image/es/clone-node.js.map +1 -0
- package/esm/node_modules/html-to-image/es/clone-pseudos.js +46 -0
- package/esm/node_modules/html-to-image/es/clone-pseudos.js.map +1 -0
- package/esm/node_modules/html-to-image/es/dataurl.js +78 -0
- package/esm/node_modules/html-to-image/es/dataurl.js.map +1 -0
- package/esm/node_modules/html-to-image/es/embed-images.js +66 -0
- package/esm/node_modules/html-to-image/es/embed-images.js.map +1 -0
- package/esm/node_modules/html-to-image/es/embed-resources.js +69 -0
- package/esm/node_modules/html-to-image/es/embed-resources.js.map +1 -0
- package/esm/node_modules/html-to-image/es/embed-webfonts.js +184 -0
- package/esm/node_modules/html-to-image/es/embed-webfonts.js.map +1 -0
- package/esm/node_modules/html-to-image/es/index.js +45 -0
- package/esm/node_modules/html-to-image/es/index.js.map +1 -0
- package/esm/node_modules/html-to-image/es/mimes.js +26 -0
- package/esm/node_modules/html-to-image/es/mimes.js.map +1 -0
- package/esm/node_modules/html-to-image/es/util.js +155 -0
- package/esm/node_modules/html-to-image/es/util.js.map +1 -0
- package/esm/packages/vuu-shell/src/ShellContextProvider.js +28 -0
- package/esm/packages/vuu-shell/src/ShellContextProvider.js.map +1 -0
- package/esm/packages/vuu-shell/src/app-header/AppHeader.js +55 -0
- package/esm/packages/vuu-shell/src/app-header/AppHeader.js.map +1 -0
- package/esm/packages/vuu-shell/src/connection-status/ConnectionStatusIcon.js +40 -0
- package/esm/packages/vuu-shell/src/connection-status/ConnectionStatusIcon.js.map +1 -0
- package/esm/packages/vuu-shell/src/feature/Feature.js +54 -0
- package/esm/packages/vuu-shell/src/feature/Feature.js.map +1 -0
- package/esm/packages/vuu-shell/src/feature/FeatureErrorBoundary.js +28 -0
- package/esm/packages/vuu-shell/src/feature/FeatureErrorBoundary.js.map +1 -0
- package/esm/packages/vuu-shell/src/feature/Loader.js +6 -0
- package/esm/packages/vuu-shell/src/feature/Loader.js.map +1 -0
- package/esm/packages/vuu-shell/src/feature/css-module-loader.js +7 -0
- package/esm/packages/vuu-shell/src/feature/css-module-loader.js.map +1 -0
- package/esm/packages/vuu-shell/src/feature-list/FeatureList.js +41 -0
- package/esm/packages/vuu-shell/src/feature-list/FeatureList.js.map +1 -0
- package/esm/packages/vuu-shell/src/index.js +20 -0
- package/esm/packages/vuu-shell/src/index.js.map +1 -0
- package/esm/packages/vuu-shell/src/layout-management/LayoutList.js +64 -0
- package/esm/packages/vuu-shell/src/layout-management/LayoutList.js.map +1 -0
- package/esm/packages/vuu-shell/src/layout-management/LayoutTile.js +25 -0
- package/esm/packages/vuu-shell/src/layout-management/LayoutTile.js.map +1 -0
- package/esm/packages/vuu-shell/src/layout-management/SaveLayoutPanel.js +138 -0
- package/esm/packages/vuu-shell/src/layout-management/SaveLayoutPanel.js.map +1 -0
- package/esm/packages/vuu-shell/src/layout-management/screenshot-utils.js +23 -0
- package/esm/packages/vuu-shell/src/layout-management/screenshot-utils.js.map +1 -0
- package/esm/packages/vuu-shell/src/layout-management/useLayoutContextMenuItems.js +70 -0
- package/esm/packages/vuu-shell/src/layout-management/useLayoutContextMenuItems.js.map +1 -0
- package/esm/packages/vuu-shell/src/layout-management/useLayoutManager.js +214 -0
- package/esm/packages/vuu-shell/src/layout-management/useLayoutManager.js.map +1 -0
- package/esm/packages/vuu-shell/src/left-nav/LeftNav.js +154 -0
- package/esm/packages/vuu-shell/src/left-nav/LeftNav.js.map +1 -0
- package/esm/packages/vuu-shell/src/login/LoginPanel.js +97 -0
- package/esm/packages/vuu-shell/src/login/LoginPanel.js.map +1 -0
- package/esm/packages/vuu-shell/src/login/VuuLogo.js +132 -0
- package/esm/packages/vuu-shell/src/login/VuuLogo.js.map +1 -0
- package/esm/packages/vuu-shell/src/login/login-utils.js +26 -0
- package/esm/packages/vuu-shell/src/login/login-utils.js.map +1 -0
- package/esm/packages/vuu-shell/src/persistence-management/LocalPersistenceManager.js +181 -0
- package/esm/packages/vuu-shell/src/persistence-management/LocalPersistenceManager.js.map +1 -0
- package/esm/packages/vuu-shell/src/persistence-management/RemotePersistenceManager.js +160 -0
- package/esm/packages/vuu-shell/src/persistence-management/RemotePersistenceManager.js.map +1 -0
- package/esm/packages/vuu-shell/src/persistence-management/defaultApplicationJson.js +39 -0
- package/esm/packages/vuu-shell/src/persistence-management/defaultApplicationJson.js.map +1 -0
- package/esm/packages/vuu-shell/src/session-editing-form/SessionEditingForm.js +269 -0
- package/esm/packages/vuu-shell/src/session-editing-form/SessionEditingForm.js.map +1 -0
- package/esm/packages/vuu-shell/src/shell-layouts/context-panel/ContextPanel.js +59 -0
- package/esm/packages/vuu-shell/src/shell-layouts/context-panel/ContextPanel.js.map +1 -0
- package/esm/packages/vuu-shell/src/shell-layouts/side-panel/SidePanel.js +25 -0
- package/esm/packages/vuu-shell/src/shell-layouts/side-panel/SidePanel.js.map +1 -0
- package/esm/packages/vuu-shell/src/shell-layouts/useFullHeightLeftPanel.js +39 -0
- package/esm/packages/vuu-shell/src/shell-layouts/useFullHeightLeftPanel.js.map +1 -0
- package/esm/packages/vuu-shell/src/shell-layouts/useInlayLeftPanel.js +76 -0
- package/esm/packages/vuu-shell/src/shell-layouts/useInlayLeftPanel.js.map +1 -0
- package/esm/packages/vuu-shell/src/shell-layouts/useShellLayout.js +13 -0
- package/esm/packages/vuu-shell/src/shell-layouts/useShellLayout.js.map +1 -0
- package/esm/packages/vuu-shell/src/shell.js +127 -0
- package/esm/packages/vuu-shell/src/shell.js.map +1 -0
- package/esm/packages/vuu-shell/src/shellTypes.js +5 -0
- package/esm/packages/vuu-shell/src/shellTypes.js.map +1 -0
- package/esm/packages/vuu-shell/src/theme-switch/ThemeSwitch.js +45 -0
- package/esm/packages/vuu-shell/src/theme-switch/ThemeSwitch.js.map +1 -0
- package/esm/session-editing-form/SessionEditingForm.css +53 -0
- package/esm/shell-layouts/context-panel/ContextPanel.css +58 -0
- package/esm/shell-layouts/side-panel/SidePanel.css +4 -0
- package/esm/shell.css +49 -0
- package/esm/theme-switch/ThemeSwitch.css +30 -0
- package/package.json +14 -12
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var clonePseudos = require('./clone-pseudos.js');
|
|
4
|
+
var util = require('./util.js');
|
|
5
|
+
var mimes = require('./mimes.js');
|
|
6
|
+
var dataurl = require('./dataurl.js');
|
|
7
|
+
|
|
8
|
+
async function cloneCanvasElement(canvas) {
|
|
9
|
+
const dataURL = canvas.toDataURL();
|
|
10
|
+
if (dataURL === 'data:,') {
|
|
11
|
+
return canvas.cloneNode(false);
|
|
12
|
+
}
|
|
13
|
+
return util.createImage(dataURL);
|
|
14
|
+
}
|
|
15
|
+
async function cloneVideoElement(video, options) {
|
|
16
|
+
if (video.currentSrc) {
|
|
17
|
+
const canvas = document.createElement('canvas');
|
|
18
|
+
const ctx = canvas.getContext('2d');
|
|
19
|
+
canvas.width = video.clientWidth;
|
|
20
|
+
canvas.height = video.clientHeight;
|
|
21
|
+
ctx === null || ctx === void 0 ? void 0 : ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
|
|
22
|
+
const dataURL = canvas.toDataURL();
|
|
23
|
+
return util.createImage(dataURL);
|
|
24
|
+
}
|
|
25
|
+
const poster = video.poster;
|
|
26
|
+
const contentType = mimes.getMimeType(poster);
|
|
27
|
+
const dataURL = await dataurl.resourceToDataURL(poster, contentType, options);
|
|
28
|
+
return util.createImage(dataURL);
|
|
29
|
+
}
|
|
30
|
+
async function cloneIFrameElement(iframe) {
|
|
31
|
+
var _a;
|
|
32
|
+
try {
|
|
33
|
+
if ((_a = iframe === null || iframe === void 0 ? void 0 : iframe.contentDocument) === null || _a === void 0 ? void 0 : _a.body) {
|
|
34
|
+
return (await cloneNode(iframe.contentDocument.body, {}, true));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (_b) {
|
|
38
|
+
// Failed to clone iframe
|
|
39
|
+
}
|
|
40
|
+
return iframe.cloneNode(false);
|
|
41
|
+
}
|
|
42
|
+
async function cloneSingleNode(node, options) {
|
|
43
|
+
if (util.isInstanceOfElement(node, HTMLCanvasElement)) {
|
|
44
|
+
return cloneCanvasElement(node);
|
|
45
|
+
}
|
|
46
|
+
if (util.isInstanceOfElement(node, HTMLVideoElement)) {
|
|
47
|
+
return cloneVideoElement(node, options);
|
|
48
|
+
}
|
|
49
|
+
if (util.isInstanceOfElement(node, HTMLIFrameElement)) {
|
|
50
|
+
return cloneIFrameElement(node);
|
|
51
|
+
}
|
|
52
|
+
return node.cloneNode(false);
|
|
53
|
+
}
|
|
54
|
+
const isSlotElement = (node) => node.tagName != null && node.tagName.toUpperCase() === 'SLOT';
|
|
55
|
+
async function cloneChildren(nativeNode, clonedNode, options) {
|
|
56
|
+
var _a, _b;
|
|
57
|
+
let children = [];
|
|
58
|
+
if (isSlotElement(nativeNode) && nativeNode.assignedNodes) {
|
|
59
|
+
children = util.toArray(nativeNode.assignedNodes());
|
|
60
|
+
}
|
|
61
|
+
else if (util.isInstanceOfElement(nativeNode, HTMLIFrameElement) &&
|
|
62
|
+
((_a = nativeNode.contentDocument) === null || _a === void 0 ? void 0 : _a.body)) {
|
|
63
|
+
children = util.toArray(nativeNode.contentDocument.body.childNodes);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
children = util.toArray(((_b = nativeNode.shadowRoot) !== null && _b !== void 0 ? _b : nativeNode).childNodes);
|
|
67
|
+
}
|
|
68
|
+
if (children.length === 0 ||
|
|
69
|
+
util.isInstanceOfElement(nativeNode, HTMLVideoElement)) {
|
|
70
|
+
return clonedNode;
|
|
71
|
+
}
|
|
72
|
+
await children.reduce((deferred, child) => deferred
|
|
73
|
+
.then(() => cloneNode(child, options))
|
|
74
|
+
.then((clonedChild) => {
|
|
75
|
+
if (clonedChild) {
|
|
76
|
+
clonedNode.appendChild(clonedChild);
|
|
77
|
+
}
|
|
78
|
+
}), Promise.resolve());
|
|
79
|
+
return clonedNode;
|
|
80
|
+
}
|
|
81
|
+
function cloneCSSStyle(nativeNode, clonedNode) {
|
|
82
|
+
const targetStyle = clonedNode.style;
|
|
83
|
+
if (!targetStyle) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const sourceStyle = window.getComputedStyle(nativeNode);
|
|
87
|
+
if (sourceStyle.cssText) {
|
|
88
|
+
targetStyle.cssText = sourceStyle.cssText;
|
|
89
|
+
targetStyle.transformOrigin = sourceStyle.transformOrigin;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
util.toArray(sourceStyle).forEach((name) => {
|
|
93
|
+
let value = sourceStyle.getPropertyValue(name);
|
|
94
|
+
if (name === 'font-size' && value.endsWith('px')) {
|
|
95
|
+
const reducedFont = Math.floor(parseFloat(value.substring(0, value.length - 2))) - 0.1;
|
|
96
|
+
value = `${reducedFont}px`;
|
|
97
|
+
}
|
|
98
|
+
if (util.isInstanceOfElement(nativeNode, HTMLIFrameElement) &&
|
|
99
|
+
name === 'display' &&
|
|
100
|
+
value === 'inline') {
|
|
101
|
+
value = 'block';
|
|
102
|
+
}
|
|
103
|
+
if (name === 'd' && clonedNode.getAttribute('d')) {
|
|
104
|
+
value = `path(${clonedNode.getAttribute('d')})`;
|
|
105
|
+
}
|
|
106
|
+
targetStyle.setProperty(name, value, sourceStyle.getPropertyPriority(name));
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function cloneInputValue(nativeNode, clonedNode) {
|
|
111
|
+
if (util.isInstanceOfElement(nativeNode, HTMLTextAreaElement)) {
|
|
112
|
+
clonedNode.innerHTML = nativeNode.value;
|
|
113
|
+
}
|
|
114
|
+
if (util.isInstanceOfElement(nativeNode, HTMLInputElement)) {
|
|
115
|
+
clonedNode.setAttribute('value', nativeNode.value);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function cloneSelectValue(nativeNode, clonedNode) {
|
|
119
|
+
if (util.isInstanceOfElement(nativeNode, HTMLSelectElement)) {
|
|
120
|
+
const clonedSelect = clonedNode;
|
|
121
|
+
const selectedOption = Array.from(clonedSelect.children).find((child) => nativeNode.value === child.getAttribute('value'));
|
|
122
|
+
if (selectedOption) {
|
|
123
|
+
selectedOption.setAttribute('selected', '');
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function decorate(nativeNode, clonedNode) {
|
|
128
|
+
if (util.isInstanceOfElement(clonedNode, Element)) {
|
|
129
|
+
cloneCSSStyle(nativeNode, clonedNode);
|
|
130
|
+
clonePseudos.clonePseudoElements(nativeNode, clonedNode);
|
|
131
|
+
cloneInputValue(nativeNode, clonedNode);
|
|
132
|
+
cloneSelectValue(nativeNode, clonedNode);
|
|
133
|
+
}
|
|
134
|
+
return clonedNode;
|
|
135
|
+
}
|
|
136
|
+
async function ensureSVGSymbols(clone, options) {
|
|
137
|
+
const uses = clone.querySelectorAll ? clone.querySelectorAll('use') : [];
|
|
138
|
+
if (uses.length === 0) {
|
|
139
|
+
return clone;
|
|
140
|
+
}
|
|
141
|
+
const processedDefs = {};
|
|
142
|
+
for (let i = 0; i < uses.length; i++) {
|
|
143
|
+
const use = uses[i];
|
|
144
|
+
const id = use.getAttribute('xlink:href');
|
|
145
|
+
if (id) {
|
|
146
|
+
const exist = clone.querySelector(id);
|
|
147
|
+
const definition = document.querySelector(id);
|
|
148
|
+
if (!exist && definition && !processedDefs[id]) {
|
|
149
|
+
// eslint-disable-next-line no-await-in-loop
|
|
150
|
+
processedDefs[id] = (await cloneNode(definition, options, true));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const nodes = Object.values(processedDefs);
|
|
155
|
+
if (nodes.length) {
|
|
156
|
+
const ns = 'http://www.w3.org/1999/xhtml';
|
|
157
|
+
const svg = document.createElementNS(ns, 'svg');
|
|
158
|
+
svg.setAttribute('xmlns', ns);
|
|
159
|
+
svg.style.position = 'absolute';
|
|
160
|
+
svg.style.width = '0';
|
|
161
|
+
svg.style.height = '0';
|
|
162
|
+
svg.style.overflow = 'hidden';
|
|
163
|
+
svg.style.display = 'none';
|
|
164
|
+
const defs = document.createElementNS(ns, 'defs');
|
|
165
|
+
svg.appendChild(defs);
|
|
166
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
167
|
+
defs.appendChild(nodes[i]);
|
|
168
|
+
}
|
|
169
|
+
clone.appendChild(svg);
|
|
170
|
+
}
|
|
171
|
+
return clone;
|
|
172
|
+
}
|
|
173
|
+
async function cloneNode(node, options, isRoot) {
|
|
174
|
+
if (!isRoot && options.filter && !options.filter(node)) {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
return Promise.resolve(node)
|
|
178
|
+
.then((clonedNode) => cloneSingleNode(clonedNode, options))
|
|
179
|
+
.then((clonedNode) => cloneChildren(node, clonedNode, options))
|
|
180
|
+
.then((clonedNode) => decorate(node, clonedNode))
|
|
181
|
+
.then((clonedNode) => ensureSVGSymbols(clonedNode, options));
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
exports.cloneNode = cloneNode;
|
|
185
|
+
//# sourceMappingURL=clone-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone-node.js","sources":["../../../../../../node_modules/html-to-image/es/clone-node.js"],"sourcesContent":["import { clonePseudoElements } from './clone-pseudos';\nimport { createImage, toArray, isInstanceOfElement } from './util';\nimport { getMimeType } from './mimes';\nimport { resourceToDataURL } from './dataurl';\nasync function cloneCanvasElement(canvas) {\n const dataURL = canvas.toDataURL();\n if (dataURL === 'data:,') {\n return canvas.cloneNode(false);\n }\n return createImage(dataURL);\n}\nasync function cloneVideoElement(video, options) {\n if (video.currentSrc) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n canvas.width = video.clientWidth;\n canvas.height = video.clientHeight;\n ctx === null || ctx === void 0 ? void 0 : ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n const dataURL = canvas.toDataURL();\n return createImage(dataURL);\n }\n const poster = video.poster;\n const contentType = getMimeType(poster);\n const dataURL = await resourceToDataURL(poster, contentType, options);\n return createImage(dataURL);\n}\nasync function cloneIFrameElement(iframe) {\n var _a;\n try {\n if ((_a = iframe === null || iframe === void 0 ? void 0 : iframe.contentDocument) === null || _a === void 0 ? void 0 : _a.body) {\n return (await cloneNode(iframe.contentDocument.body, {}, true));\n }\n }\n catch (_b) {\n // Failed to clone iframe\n }\n return iframe.cloneNode(false);\n}\nasync function cloneSingleNode(node, options) {\n if (isInstanceOfElement(node, HTMLCanvasElement)) {\n return cloneCanvasElement(node);\n }\n if (isInstanceOfElement(node, HTMLVideoElement)) {\n return cloneVideoElement(node, options);\n }\n if (isInstanceOfElement(node, HTMLIFrameElement)) {\n return cloneIFrameElement(node);\n }\n return node.cloneNode(false);\n}\nconst isSlotElement = (node) => node.tagName != null && node.tagName.toUpperCase() === 'SLOT';\nasync function cloneChildren(nativeNode, clonedNode, options) {\n var _a, _b;\n let children = [];\n if (isSlotElement(nativeNode) && nativeNode.assignedNodes) {\n children = toArray(nativeNode.assignedNodes());\n }\n else if (isInstanceOfElement(nativeNode, HTMLIFrameElement) &&\n ((_a = nativeNode.contentDocument) === null || _a === void 0 ? void 0 : _a.body)) {\n children = toArray(nativeNode.contentDocument.body.childNodes);\n }\n else {\n children = toArray(((_b = nativeNode.shadowRoot) !== null && _b !== void 0 ? _b : nativeNode).childNodes);\n }\n if (children.length === 0 ||\n isInstanceOfElement(nativeNode, HTMLVideoElement)) {\n return clonedNode;\n }\n await children.reduce((deferred, child) => deferred\n .then(() => cloneNode(child, options))\n .then((clonedChild) => {\n if (clonedChild) {\n clonedNode.appendChild(clonedChild);\n }\n }), Promise.resolve());\n return clonedNode;\n}\nfunction cloneCSSStyle(nativeNode, clonedNode) {\n const targetStyle = clonedNode.style;\n if (!targetStyle) {\n return;\n }\n const sourceStyle = window.getComputedStyle(nativeNode);\n if (sourceStyle.cssText) {\n targetStyle.cssText = sourceStyle.cssText;\n targetStyle.transformOrigin = sourceStyle.transformOrigin;\n }\n else {\n toArray(sourceStyle).forEach((name) => {\n let value = sourceStyle.getPropertyValue(name);\n if (name === 'font-size' && value.endsWith('px')) {\n const reducedFont = Math.floor(parseFloat(value.substring(0, value.length - 2))) - 0.1;\n value = `${reducedFont}px`;\n }\n if (isInstanceOfElement(nativeNode, HTMLIFrameElement) &&\n name === 'display' &&\n value === 'inline') {\n value = 'block';\n }\n if (name === 'd' && clonedNode.getAttribute('d')) {\n value = `path(${clonedNode.getAttribute('d')})`;\n }\n targetStyle.setProperty(name, value, sourceStyle.getPropertyPriority(name));\n });\n }\n}\nfunction cloneInputValue(nativeNode, clonedNode) {\n if (isInstanceOfElement(nativeNode, HTMLTextAreaElement)) {\n clonedNode.innerHTML = nativeNode.value;\n }\n if (isInstanceOfElement(nativeNode, HTMLInputElement)) {\n clonedNode.setAttribute('value', nativeNode.value);\n }\n}\nfunction cloneSelectValue(nativeNode, clonedNode) {\n if (isInstanceOfElement(nativeNode, HTMLSelectElement)) {\n const clonedSelect = clonedNode;\n const selectedOption = Array.from(clonedSelect.children).find((child) => nativeNode.value === child.getAttribute('value'));\n if (selectedOption) {\n selectedOption.setAttribute('selected', '');\n }\n }\n}\nfunction decorate(nativeNode, clonedNode) {\n if (isInstanceOfElement(clonedNode, Element)) {\n cloneCSSStyle(nativeNode, clonedNode);\n clonePseudoElements(nativeNode, clonedNode);\n cloneInputValue(nativeNode, clonedNode);\n cloneSelectValue(nativeNode, clonedNode);\n }\n return clonedNode;\n}\nasync function ensureSVGSymbols(clone, options) {\n const uses = clone.querySelectorAll ? clone.querySelectorAll('use') : [];\n if (uses.length === 0) {\n return clone;\n }\n const processedDefs = {};\n for (let i = 0; i < uses.length; i++) {\n const use = uses[i];\n const id = use.getAttribute('xlink:href');\n if (id) {\n const exist = clone.querySelector(id);\n const definition = document.querySelector(id);\n if (!exist && definition && !processedDefs[id]) {\n // eslint-disable-next-line no-await-in-loop\n processedDefs[id] = (await cloneNode(definition, options, true));\n }\n }\n }\n const nodes = Object.values(processedDefs);\n if (nodes.length) {\n const ns = 'http://www.w3.org/1999/xhtml';\n const svg = document.createElementNS(ns, 'svg');\n svg.setAttribute('xmlns', ns);\n svg.style.position = 'absolute';\n svg.style.width = '0';\n svg.style.height = '0';\n svg.style.overflow = 'hidden';\n svg.style.display = 'none';\n const defs = document.createElementNS(ns, 'defs');\n svg.appendChild(defs);\n for (let i = 0; i < nodes.length; i++) {\n defs.appendChild(nodes[i]);\n }\n clone.appendChild(svg);\n }\n return clone;\n}\nexport async function cloneNode(node, options, isRoot) {\n if (!isRoot && options.filter && !options.filter(node)) {\n return null;\n }\n return Promise.resolve(node)\n .then((clonedNode) => cloneSingleNode(clonedNode, options))\n .then((clonedNode) => cloneChildren(node, clonedNode, options))\n .then((clonedNode) => decorate(node, clonedNode))\n .then((clonedNode) => ensureSVGSymbols(clonedNode, options));\n}\n//# sourceMappingURL=clone-node.js.map"],"names":["createImage","getMimeType","resourceToDataURL","isInstanceOfElement","toArray","clonePseudoElements"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var util = require('./util.js');
|
|
4
|
+
|
|
5
|
+
function formatCSSText(style) {
|
|
6
|
+
const content = style.getPropertyValue('content');
|
|
7
|
+
return `${style.cssText} content: '${content.replace(/'|"/g, '')}';`;
|
|
8
|
+
}
|
|
9
|
+
function formatCSSProperties(style) {
|
|
10
|
+
return util.toArray(style)
|
|
11
|
+
.map((name) => {
|
|
12
|
+
const value = style.getPropertyValue(name);
|
|
13
|
+
const priority = style.getPropertyPriority(name);
|
|
14
|
+
return `${name}: ${value}${priority ? ' !important' : ''};`;
|
|
15
|
+
})
|
|
16
|
+
.join(' ');
|
|
17
|
+
}
|
|
18
|
+
function getPseudoElementStyle(className, pseudo, style) {
|
|
19
|
+
const selector = `.${className}:${pseudo}`;
|
|
20
|
+
const cssText = style.cssText
|
|
21
|
+
? formatCSSText(style)
|
|
22
|
+
: formatCSSProperties(style);
|
|
23
|
+
return document.createTextNode(`${selector}{${cssText}}`);
|
|
24
|
+
}
|
|
25
|
+
function clonePseudoElement(nativeNode, clonedNode, pseudo) {
|
|
26
|
+
const style = window.getComputedStyle(nativeNode, pseudo);
|
|
27
|
+
const content = style.getPropertyValue('content');
|
|
28
|
+
if (content === '' || content === 'none') {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const className = util.uuid();
|
|
32
|
+
try {
|
|
33
|
+
clonedNode.className = `${clonedNode.className} ${className}`;
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const styleElement = document.createElement('style');
|
|
39
|
+
styleElement.appendChild(getPseudoElementStyle(className, pseudo, style));
|
|
40
|
+
clonedNode.appendChild(styleElement);
|
|
41
|
+
}
|
|
42
|
+
function clonePseudoElements(nativeNode, clonedNode) {
|
|
43
|
+
clonePseudoElement(nativeNode, clonedNode, ':before');
|
|
44
|
+
clonePseudoElement(nativeNode, clonedNode, ':after');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
exports.clonePseudoElements = clonePseudoElements;
|
|
48
|
+
//# sourceMappingURL=clone-pseudos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone-pseudos.js","sources":["../../../../../../node_modules/html-to-image/es/clone-pseudos.js"],"sourcesContent":["import { uuid, toArray } from './util';\nfunction formatCSSText(style) {\n const content = style.getPropertyValue('content');\n return `${style.cssText} content: '${content.replace(/'|\"/g, '')}';`;\n}\nfunction formatCSSProperties(style) {\n return toArray(style)\n .map((name) => {\n const value = style.getPropertyValue(name);\n const priority = style.getPropertyPriority(name);\n return `${name}: ${value}${priority ? ' !important' : ''};`;\n })\n .join(' ');\n}\nfunction getPseudoElementStyle(className, pseudo, style) {\n const selector = `.${className}:${pseudo}`;\n const cssText = style.cssText\n ? formatCSSText(style)\n : formatCSSProperties(style);\n return document.createTextNode(`${selector}{${cssText}}`);\n}\nfunction clonePseudoElement(nativeNode, clonedNode, pseudo) {\n const style = window.getComputedStyle(nativeNode, pseudo);\n const content = style.getPropertyValue('content');\n if (content === '' || content === 'none') {\n return;\n }\n const className = uuid();\n try {\n clonedNode.className = `${clonedNode.className} ${className}`;\n }\n catch (err) {\n return;\n }\n const styleElement = document.createElement('style');\n styleElement.appendChild(getPseudoElementStyle(className, pseudo, style));\n clonedNode.appendChild(styleElement);\n}\nexport function clonePseudoElements(nativeNode, clonedNode) {\n clonePseudoElement(nativeNode, clonedNode, ':before');\n clonePseudoElement(nativeNode, clonedNode, ':after');\n}\n//# sourceMappingURL=clone-pseudos.js.map"],"names":["toArray","uuid"],"mappings":";;;;AACA,SAAS,aAAa,CAAC,KAAK,EAAE;AAC9B,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACtD,IAAI,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACzE,CAAC;AACD,SAAS,mBAAmB,CAAC,KAAK,EAAE;AACpC,IAAI,OAAOA,YAAO,CAAC,KAAK,CAAC;AACzB,SAAS,GAAG,CAAC,CAAC,IAAI,KAAK;AACvB,QAAQ,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACnD,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AACzD,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACpE,KAAK,CAAC;AACN,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AACD,SAAS,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE;AACzD,IAAI,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;AACjC,UAAU,aAAa,CAAC,KAAK,CAAC;AAC9B,UAAU,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACrC,IAAI,OAAO,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AACD,SAAS,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE;AAC5D,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAC9D,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACtD,IAAI,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,MAAM,EAAE;AAC9C,QAAQ,OAAO;AACf,KAAK;AACL,IAAI,MAAM,SAAS,GAAGC,SAAI,EAAE,CAAC;AAC7B,IAAI,IAAI;AACR,QAAQ,UAAU,CAAC,SAAS,GAAG,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AACtE,KAAK;AACL,IAAI,OAAO,GAAG,EAAE;AAChB,QAAQ,OAAO;AACf,KAAK;AACL,IAAI,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACzD,IAAI,YAAY,CAAC,WAAW,CAAC,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9E,IAAI,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AACzC,CAAC;AACM,SAAS,mBAAmB,CAAC,UAAU,EAAE,UAAU,EAAE;AAC5D,IAAI,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AAC1D,IAAI,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AACzD;;;;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
function getContentFromDataUrl(dataURL) {
|
|
4
|
+
return dataURL.split(/,/)[1];
|
|
5
|
+
}
|
|
6
|
+
function isDataUrl(url) {
|
|
7
|
+
return url.search(/^(data:)/) !== -1;
|
|
8
|
+
}
|
|
9
|
+
function makeDataUrl(content, mimeType) {
|
|
10
|
+
return `data:${mimeType};base64,${content}`;
|
|
11
|
+
}
|
|
12
|
+
async function fetchAsDataURL(url, init, process) {
|
|
13
|
+
const res = await fetch(url, init);
|
|
14
|
+
if (res.status === 404) {
|
|
15
|
+
throw new Error(`Resource "${res.url}" not found`);
|
|
16
|
+
}
|
|
17
|
+
const blob = await res.blob();
|
|
18
|
+
return new Promise((resolve, reject) => {
|
|
19
|
+
const reader = new FileReader();
|
|
20
|
+
reader.onerror = reject;
|
|
21
|
+
reader.onloadend = () => {
|
|
22
|
+
try {
|
|
23
|
+
resolve(process({ res, result: reader.result }));
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
reject(error);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
reader.readAsDataURL(blob);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
const cache = {};
|
|
33
|
+
function getCacheKey(url, contentType, includeQueryParams) {
|
|
34
|
+
let key = url.replace(/\?.*/, '');
|
|
35
|
+
if (includeQueryParams) {
|
|
36
|
+
key = url;
|
|
37
|
+
}
|
|
38
|
+
// font resource
|
|
39
|
+
if (/ttf|otf|eot|woff2?/i.test(key)) {
|
|
40
|
+
key = key.replace(/.*\//, '');
|
|
41
|
+
}
|
|
42
|
+
return contentType ? `[${contentType}]${key}` : key;
|
|
43
|
+
}
|
|
44
|
+
async function resourceToDataURL(resourceUrl, contentType, options) {
|
|
45
|
+
const cacheKey = getCacheKey(resourceUrl, contentType, options.includeQueryParams);
|
|
46
|
+
if (cache[cacheKey] != null) {
|
|
47
|
+
return cache[cacheKey];
|
|
48
|
+
}
|
|
49
|
+
// ref: https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Bypassing_the_cache
|
|
50
|
+
if (options.cacheBust) {
|
|
51
|
+
// eslint-disable-next-line no-param-reassign
|
|
52
|
+
resourceUrl += (/\?/.test(resourceUrl) ? '&' : '?') + new Date().getTime();
|
|
53
|
+
}
|
|
54
|
+
let dataURL;
|
|
55
|
+
try {
|
|
56
|
+
const content = await fetchAsDataURL(resourceUrl, options.fetchRequestInit, ({ res, result }) => {
|
|
57
|
+
if (!contentType) {
|
|
58
|
+
// eslint-disable-next-line no-param-reassign
|
|
59
|
+
contentType = res.headers.get('Content-Type') || '';
|
|
60
|
+
}
|
|
61
|
+
return getContentFromDataUrl(result);
|
|
62
|
+
});
|
|
63
|
+
dataURL = makeDataUrl(content, contentType);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
dataURL = options.imagePlaceholder || '';
|
|
67
|
+
let msg = `Failed to fetch resource: ${resourceUrl}`;
|
|
68
|
+
if (error) {
|
|
69
|
+
msg = typeof error === 'string' ? error : error.message;
|
|
70
|
+
}
|
|
71
|
+
if (msg) {
|
|
72
|
+
console.warn(msg);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
cache[cacheKey] = dataURL;
|
|
76
|
+
return dataURL;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
exports.fetchAsDataURL = fetchAsDataURL;
|
|
80
|
+
exports.isDataUrl = isDataUrl;
|
|
81
|
+
exports.makeDataUrl = makeDataUrl;
|
|
82
|
+
exports.resourceToDataURL = resourceToDataURL;
|
|
83
|
+
//# sourceMappingURL=dataurl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataurl.js","sources":["../../../../../../node_modules/html-to-image/es/dataurl.js"],"sourcesContent":["function getContentFromDataUrl(dataURL) {\n return dataURL.split(/,/)[1];\n}\nexport function isDataUrl(url) {\n return url.search(/^(data:)/) !== -1;\n}\nexport function makeDataUrl(content, mimeType) {\n return `data:${mimeType};base64,${content}`;\n}\nexport async function fetchAsDataURL(url, init, process) {\n const res = await fetch(url, init);\n if (res.status === 404) {\n throw new Error(`Resource \"${res.url}\" not found`);\n }\n const blob = await res.blob();\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = () => {\n try {\n resolve(process({ res, result: reader.result }));\n }\n catch (error) {\n reject(error);\n }\n };\n reader.readAsDataURL(blob);\n });\n}\nconst cache = {};\nfunction getCacheKey(url, contentType, includeQueryParams) {\n let key = url.replace(/\\?.*/, '');\n if (includeQueryParams) {\n key = url;\n }\n // font resource\n if (/ttf|otf|eot|woff2?/i.test(key)) {\n key = key.replace(/.*\\//, '');\n }\n return contentType ? `[${contentType}]${key}` : key;\n}\nexport async function resourceToDataURL(resourceUrl, contentType, options) {\n const cacheKey = getCacheKey(resourceUrl, contentType, options.includeQueryParams);\n if (cache[cacheKey] != null) {\n return cache[cacheKey];\n }\n // ref: https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Bypassing_the_cache\n if (options.cacheBust) {\n // eslint-disable-next-line no-param-reassign\n resourceUrl += (/\\?/.test(resourceUrl) ? '&' : '?') + new Date().getTime();\n }\n let dataURL;\n try {\n const content = await fetchAsDataURL(resourceUrl, options.fetchRequestInit, ({ res, result }) => {\n if (!contentType) {\n // eslint-disable-next-line no-param-reassign\n contentType = res.headers.get('Content-Type') || '';\n }\n return getContentFromDataUrl(result);\n });\n dataURL = makeDataUrl(content, contentType);\n }\n catch (error) {\n dataURL = options.imagePlaceholder || '';\n let msg = `Failed to fetch resource: ${resourceUrl}`;\n if (error) {\n msg = typeof error === 'string' ? error : error.message;\n }\n if (msg) {\n console.warn(msg);\n }\n }\n cache[cacheKey] = dataURL;\n return dataURL;\n}\n//# sourceMappingURL=dataurl.js.map"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var embedResources = require('./embed-resources.js');
|
|
4
|
+
var util = require('./util.js');
|
|
5
|
+
var dataurl = require('./dataurl.js');
|
|
6
|
+
var mimes = require('./mimes.js');
|
|
7
|
+
|
|
8
|
+
async function embedProp(propName, node, options) {
|
|
9
|
+
var _a;
|
|
10
|
+
const propValue = (_a = node.style) === null || _a === void 0 ? void 0 : _a.getPropertyValue(propName);
|
|
11
|
+
if (propValue) {
|
|
12
|
+
const cssString = await embedResources.embedResources(propValue, null, options);
|
|
13
|
+
node.style.setProperty(propName, cssString, node.style.getPropertyPriority(propName));
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
async function embedBackground(clonedNode, options) {
|
|
19
|
+
if (!(await embedProp('background', clonedNode, options))) {
|
|
20
|
+
await embedProp('background-image', clonedNode, options);
|
|
21
|
+
}
|
|
22
|
+
if (!(await embedProp('mask', clonedNode, options))) {
|
|
23
|
+
await embedProp('mask-image', clonedNode, options);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async function embedImageNode(clonedNode, options) {
|
|
27
|
+
const isImageElement = util.isInstanceOfElement(clonedNode, HTMLImageElement);
|
|
28
|
+
if (!(isImageElement && !dataurl.isDataUrl(clonedNode.src)) &&
|
|
29
|
+
!(util.isInstanceOfElement(clonedNode, SVGImageElement) &&
|
|
30
|
+
!dataurl.isDataUrl(clonedNode.href.baseVal))) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const url = isImageElement ? clonedNode.src : clonedNode.href.baseVal;
|
|
34
|
+
const dataURL = await dataurl.resourceToDataURL(url, mimes.getMimeType(url), options);
|
|
35
|
+
await new Promise((resolve, reject) => {
|
|
36
|
+
clonedNode.onload = resolve;
|
|
37
|
+
clonedNode.onerror = reject;
|
|
38
|
+
const image = clonedNode;
|
|
39
|
+
if (image.decode) {
|
|
40
|
+
image.decode = resolve;
|
|
41
|
+
}
|
|
42
|
+
if (image.loading === 'lazy') {
|
|
43
|
+
image.loading = 'eager';
|
|
44
|
+
}
|
|
45
|
+
if (isImageElement) {
|
|
46
|
+
clonedNode.srcset = '';
|
|
47
|
+
clonedNode.src = dataURL;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
clonedNode.href.baseVal = dataURL;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
async function embedChildren(clonedNode, options) {
|
|
55
|
+
const children = util.toArray(clonedNode.childNodes);
|
|
56
|
+
const deferreds = children.map((child) => embedImages(child, options));
|
|
57
|
+
await Promise.all(deferreds).then(() => clonedNode);
|
|
58
|
+
}
|
|
59
|
+
async function embedImages(clonedNode, options) {
|
|
60
|
+
if (util.isInstanceOfElement(clonedNode, Element)) {
|
|
61
|
+
await embedBackground(clonedNode, options);
|
|
62
|
+
await embedImageNode(clonedNode, options);
|
|
63
|
+
await embedChildren(clonedNode, options);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
exports.embedImages = embedImages;
|
|
68
|
+
//# sourceMappingURL=embed-images.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed-images.js","sources":["../../../../../../node_modules/html-to-image/es/embed-images.js"],"sourcesContent":["import { embedResources } from './embed-resources';\nimport { toArray, isInstanceOfElement } from './util';\nimport { isDataUrl, resourceToDataURL } from './dataurl';\nimport { getMimeType } from './mimes';\nasync function embedProp(propName, node, options) {\n var _a;\n const propValue = (_a = node.style) === null || _a === void 0 ? void 0 : _a.getPropertyValue(propName);\n if (propValue) {\n const cssString = await embedResources(propValue, null, options);\n node.style.setProperty(propName, cssString, node.style.getPropertyPriority(propName));\n return true;\n }\n return false;\n}\nasync function embedBackground(clonedNode, options) {\n if (!(await embedProp('background', clonedNode, options))) {\n await embedProp('background-image', clonedNode, options);\n }\n if (!(await embedProp('mask', clonedNode, options))) {\n await embedProp('mask-image', clonedNode, options);\n }\n}\nasync function embedImageNode(clonedNode, options) {\n const isImageElement = isInstanceOfElement(clonedNode, HTMLImageElement);\n if (!(isImageElement && !isDataUrl(clonedNode.src)) &&\n !(isInstanceOfElement(clonedNode, SVGImageElement) &&\n !isDataUrl(clonedNode.href.baseVal))) {\n return;\n }\n const url = isImageElement ? clonedNode.src : clonedNode.href.baseVal;\n const dataURL = await resourceToDataURL(url, getMimeType(url), options);\n await new Promise((resolve, reject) => {\n clonedNode.onload = resolve;\n clonedNode.onerror = reject;\n const image = clonedNode;\n if (image.decode) {\n image.decode = resolve;\n }\n if (image.loading === 'lazy') {\n image.loading = 'eager';\n }\n if (isImageElement) {\n clonedNode.srcset = '';\n clonedNode.src = dataURL;\n }\n else {\n clonedNode.href.baseVal = dataURL;\n }\n });\n}\nasync function embedChildren(clonedNode, options) {\n const children = toArray(clonedNode.childNodes);\n const deferreds = children.map((child) => embedImages(child, options));\n await Promise.all(deferreds).then(() => clonedNode);\n}\nexport async function embedImages(clonedNode, options) {\n if (isInstanceOfElement(clonedNode, Element)) {\n await embedBackground(clonedNode, options);\n await embedImageNode(clonedNode, options);\n await embedChildren(clonedNode, options);\n }\n}\n//# sourceMappingURL=embed-images.js.map"],"names":["embedResources","isInstanceOfElement","isDataUrl","resourceToDataURL","getMimeType","toArray"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var util = require('./util.js');
|
|
4
|
+
var mimes = require('./mimes.js');
|
|
5
|
+
var dataurl = require('./dataurl.js');
|
|
6
|
+
|
|
7
|
+
const URL_REGEX = /url\((['"]?)([^'"]+?)\1\)/g;
|
|
8
|
+
const URL_WITH_FORMAT_REGEX = /url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g;
|
|
9
|
+
const FONT_SRC_REGEX = /src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;
|
|
10
|
+
function toRegex(url) {
|
|
11
|
+
// eslint-disable-next-line no-useless-escape
|
|
12
|
+
const escaped = url.replace(/([.*+?^${}()|\[\]\/\\])/g, '\\$1');
|
|
13
|
+
return new RegExp(`(url\\(['"]?)(${escaped})(['"]?\\))`, 'g');
|
|
14
|
+
}
|
|
15
|
+
function parseURLs(cssText) {
|
|
16
|
+
const urls = [];
|
|
17
|
+
cssText.replace(URL_REGEX, (raw, quotation, url) => {
|
|
18
|
+
urls.push(url);
|
|
19
|
+
return raw;
|
|
20
|
+
});
|
|
21
|
+
return urls.filter((url) => !dataurl.isDataUrl(url));
|
|
22
|
+
}
|
|
23
|
+
async function embed(cssText, resourceURL, baseURL, options, getContentFromUrl) {
|
|
24
|
+
try {
|
|
25
|
+
const resolvedURL = baseURL ? util.resolveUrl(resourceURL, baseURL) : resourceURL;
|
|
26
|
+
const contentType = mimes.getMimeType(resourceURL);
|
|
27
|
+
let dataURL;
|
|
28
|
+
if (getContentFromUrl) {
|
|
29
|
+
const content = await getContentFromUrl(resolvedURL);
|
|
30
|
+
dataURL = dataurl.makeDataUrl(content, contentType);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
dataURL = await dataurl.resourceToDataURL(resolvedURL, contentType, options);
|
|
34
|
+
}
|
|
35
|
+
return cssText.replace(toRegex(resourceURL), `$1${dataURL}$3`);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
// pass
|
|
39
|
+
}
|
|
40
|
+
return cssText;
|
|
41
|
+
}
|
|
42
|
+
function filterPreferredFontFormat(str, { preferredFontFormat }) {
|
|
43
|
+
return !preferredFontFormat
|
|
44
|
+
? str
|
|
45
|
+
: str.replace(FONT_SRC_REGEX, (match) => {
|
|
46
|
+
// eslint-disable-next-line no-constant-condition
|
|
47
|
+
while (true) {
|
|
48
|
+
const [src, , format] = URL_WITH_FORMAT_REGEX.exec(match) || [];
|
|
49
|
+
if (!format) {
|
|
50
|
+
return '';
|
|
51
|
+
}
|
|
52
|
+
if (format === preferredFontFormat) {
|
|
53
|
+
return `src: ${src};`;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function shouldEmbed(url) {
|
|
59
|
+
return url.search(URL_REGEX) !== -1;
|
|
60
|
+
}
|
|
61
|
+
async function embedResources(cssText, baseUrl, options) {
|
|
62
|
+
if (!shouldEmbed(cssText)) {
|
|
63
|
+
return cssText;
|
|
64
|
+
}
|
|
65
|
+
const filteredCSSText = filterPreferredFontFormat(cssText, options);
|
|
66
|
+
const urls = parseURLs(filteredCSSText);
|
|
67
|
+
return urls.reduce((deferred, url) => deferred.then((css) => embed(css, url, baseUrl, options)), Promise.resolve(filteredCSSText));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
exports.embed = embed;
|
|
71
|
+
exports.embedResources = embedResources;
|
|
72
|
+
exports.parseURLs = parseURLs;
|
|
73
|
+
exports.shouldEmbed = shouldEmbed;
|
|
74
|
+
//# sourceMappingURL=embed-resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed-resources.js","sources":["../../../../../../node_modules/html-to-image/es/embed-resources.js"],"sourcesContent":["import { resolveUrl } from './util';\nimport { getMimeType } from './mimes';\nimport { isDataUrl, makeDataUrl, resourceToDataURL } from './dataurl';\nconst URL_REGEX = /url\\((['\"]?)([^'\"]+?)\\1\\)/g;\nconst URL_WITH_FORMAT_REGEX = /url\\([^)]+\\)\\s*format\\(([\"']?)([^\"']+)\\1\\)/g;\nconst FONT_SRC_REGEX = /src:\\s*(?:url\\([^)]+\\)\\s*format\\([^)]+\\)[,;]\\s*)+/g;\nfunction toRegex(url) {\n // eslint-disable-next-line no-useless-escape\n const escaped = url.replace(/([.*+?^${}()|\\[\\]\\/\\\\])/g, '\\\\$1');\n return new RegExp(`(url\\\\(['\"]?)(${escaped})(['\"]?\\\\))`, 'g');\n}\nexport function parseURLs(cssText) {\n const urls = [];\n cssText.replace(URL_REGEX, (raw, quotation, url) => {\n urls.push(url);\n return raw;\n });\n return urls.filter((url) => !isDataUrl(url));\n}\nexport async function embed(cssText, resourceURL, baseURL, options, getContentFromUrl) {\n try {\n const resolvedURL = baseURL ? resolveUrl(resourceURL, baseURL) : resourceURL;\n const contentType = getMimeType(resourceURL);\n let dataURL;\n if (getContentFromUrl) {\n const content = await getContentFromUrl(resolvedURL);\n dataURL = makeDataUrl(content, contentType);\n }\n else {\n dataURL = await resourceToDataURL(resolvedURL, contentType, options);\n }\n return cssText.replace(toRegex(resourceURL), `$1${dataURL}$3`);\n }\n catch (error) {\n // pass\n }\n return cssText;\n}\nfunction filterPreferredFontFormat(str, { preferredFontFormat }) {\n return !preferredFontFormat\n ? str\n : str.replace(FONT_SRC_REGEX, (match) => {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const [src, , format] = URL_WITH_FORMAT_REGEX.exec(match) || [];\n if (!format) {\n return '';\n }\n if (format === preferredFontFormat) {\n return `src: ${src};`;\n }\n }\n });\n}\nexport function shouldEmbed(url) {\n return url.search(URL_REGEX) !== -1;\n}\nexport async function embedResources(cssText, baseUrl, options) {\n if (!shouldEmbed(cssText)) {\n return cssText;\n }\n const filteredCSSText = filterPreferredFontFormat(cssText, options);\n const urls = parseURLs(filteredCSSText);\n return urls.reduce((deferred, url) => deferred.then((css) => embed(css, url, baseUrl, options)), Promise.resolve(filteredCSSText));\n}\n//# sourceMappingURL=embed-resources.js.map"],"names":["isDataUrl","resolveUrl","getMimeType","makeDataUrl","resourceToDataURL"],"mappings":"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","x_google_ignoreList":[0]}
|