email-builder-online 4.1.13 → 4.1.15
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/LICENSE +661 -661
- package/README.md +1034 -1034
- package/dist/{index-BORDx2NL.cjs → index-BatJsONT.cjs} +169 -169
- package/dist/{index-BGFPP7q7.js → index-DFHcCVv7.js} +22450 -23140
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.mjs +1 -1
- package/dist/lazyThumbnailGenerator-BZlGvJjL.js +55 -0
- package/dist/lazyThumbnailGenerator-CPvTa1OS.js +55 -0
- package/dist/lazyThumbnailGenerator-CxousRtK.cjs +1 -0
- package/dist/localPresets-57l3x2SK.js +11 -0
- package/dist/localPresets-CdsQZFO1.cjs +1 -0
- package/dist/seedLocalLibrary-CKIQbOie.js +36 -0
- package/dist/seedLocalLibrary-Ct5I8GHM.js +36 -0
- package/dist/seedLocalLibrary-Dp3QfNd2.cjs +1 -0
- package/dist/{standalone-QpPEEu_A.js → standalone-DwQRIC9h.js} +28457 -29146
- package/dist/standalone.js +218 -218
- package/dist/standalone.mjs +1 -1
- package/package.json +3 -3
- package/vite.config.standalone.ts +95 -95
- package/dist/lazyThumbnailGenerator-B_X8zwAa.cjs +0 -1
- package/dist/lazyThumbnailGenerator-Bb9drzyo.js +0 -64
- package/dist/lazyThumbnailGenerator-CDFvk5_J.js +0 -64
- package/dist/localPresets-Bqt2Z5-T.cjs +0 -1
- package/dist/localPresets-zfQXhBg0.js +0 -17
- package/dist/seedLocalLibrary-BEbXcwJY.js +0 -36
- package/dist/seedLocalLibrary-C4qVLhqT.cjs +0 -1
- package/dist/seedLocalLibrary-DSdtiOMs.js +0 -36
package/dist/standalone.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "email-builder-online",
|
|
3
|
-
"version": "4.1.
|
|
3
|
+
"version": "4.1.15",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -109,11 +109,11 @@
|
|
|
109
109
|
"react-dom": "^19.2.1",
|
|
110
110
|
"typescript": "^5.2.2",
|
|
111
111
|
"vite": "^7.2.7",
|
|
112
|
-
"@eb/block-button": "1.0.0",
|
|
113
112
|
"@eb/block-columns-container": "1.0.0",
|
|
114
|
-
"@eb/block-
|
|
113
|
+
"@eb/block-button": "1.0.0",
|
|
115
114
|
"@eb/block-divider": "1.0.0",
|
|
116
115
|
"@eb/block-notion-text": "1.0.0",
|
|
116
|
+
"@eb/block-container": "1.0.0",
|
|
117
117
|
"@eb/block-image": "1.0.0",
|
|
118
118
|
"@eb/block-spacer": "1.0.0",
|
|
119
119
|
"@eb/email-builder": "1.0.0"
|
|
@@ -1,95 +1,95 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Standalone build — bundles React + ReactDOM inside the output.
|
|
3
|
-
*
|
|
4
|
-
* Use this when the host environment does NOT have React (e.g. Laravel, plain HTML).
|
|
5
|
-
* The output auto-registers the <email-builder> Web Component on import.
|
|
6
|
-
*
|
|
7
|
-
* Output:
|
|
8
|
-
* dist/standalone.mjs — ES module, self-contained
|
|
9
|
-
* dist/standalone.js — IIFE (UMD-like), self-contained, window.EmailBuilder global
|
|
10
|
-
* dist/style.css — shared with the regular build
|
|
11
|
-
*
|
|
12
|
-
* Usage in Laravel / plain HTML:
|
|
13
|
-
* <link rel="stylesheet" href="/vendor/email-builder/style.css" />
|
|
14
|
-
* <script type="module" src="/vendor/email-builder/standalone.mjs"></script>
|
|
15
|
-
* <email-builder></email-builder>
|
|
16
|
-
*
|
|
17
|
-
* Or with the IIFE build (no module support needed):
|
|
18
|
-
* <script src="/vendor/email-builder/standalone.js"></script>
|
|
19
|
-
* <email-builder></email-builder>
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
import { resolve } from 'path';
|
|
23
|
-
import { defineConfig } from 'vite';
|
|
24
|
-
|
|
25
|
-
import react from '@vitejs/plugin-react-swc';
|
|
26
|
-
|
|
27
|
-
const packagesPath = resolve(__dirname, '..');
|
|
28
|
-
const reactPath = resolve(__dirname, 'node_modules/react');
|
|
29
|
-
const reactDomPath = resolve(__dirname, 'node_modules/react-dom');
|
|
30
|
-
const muiMaterialPath = resolve(__dirname, 'node_modules/@mui/material');
|
|
31
|
-
const muiIconsPath = resolve(__dirname, 'node_modules/@mui/icons-material');
|
|
32
|
-
const emotionReactPath = resolve(__dirname, 'node_modules/@emotion/react');
|
|
33
|
-
const emotionStyledPath = resolve(__dirname, 'node_modules/@emotion/styled');
|
|
34
|
-
const emotionCachePath = resolve(__dirname, 'node_modules/@emotion/cache');
|
|
35
|
-
|
|
36
|
-
export default defineConfig({
|
|
37
|
-
plugins: [react()],
|
|
38
|
-
resolve: {
|
|
39
|
-
alias: [
|
|
40
|
-
// Force all React imports to resolve to a single copy (prevents React 18/19 duplication)
|
|
41
|
-
{ find: /^react$/, replacement: reactPath },
|
|
42
|
-
{ find: /^react\/(.*)/, replacement: `${reactPath}/$1` },
|
|
43
|
-
{ find: /^react-dom$/, replacement: reactDomPath },
|
|
44
|
-
{ find: /^react-dom\/server$/, replacement: resolve(reactDomPath, 'server.browser.js') },
|
|
45
|
-
{ find: /^react-dom\/(.*)/, replacement: `${reactDomPath}/$1` },
|
|
46
|
-
{ find: /^@eb\/block-button$/, replacement: resolve(packagesPath, 'block-button/src') },
|
|
47
|
-
{ find: /^@eb\/block-columns-container$/, replacement: resolve(packagesPath, 'block-columns-container/src') },
|
|
48
|
-
{ find: /^@eb\/block-container$/, replacement: resolve(packagesPath, 'block-container/src') },
|
|
49
|
-
{ find: /^@eb\/block-divider$/, replacement: resolve(packagesPath, 'block-divider/src') },
|
|
50
|
-
{ find: /^@eb\/block-image$/, replacement: resolve(packagesPath, 'block-image/src') },
|
|
51
|
-
{ find: /^@eb\/block-spacer$/, replacement: resolve(packagesPath, 'block-spacer/src') },
|
|
52
|
-
{ find: /^@eb\/block-notion-text$/, replacement: resolve(packagesPath, 'block-notion-text/src') },
|
|
53
|
-
{ find: /^@eb\/document-core$/, replacement: resolve(packagesPath, 'document-core/src') },
|
|
54
|
-
{ find: /^@eb\/email-builder$/, replacement: resolve(packagesPath, 'email-builder/src') },
|
|
55
|
-
{ find: /^@mui\/material$/, replacement: muiMaterialPath },
|
|
56
|
-
{ find: /^@mui\/material\/(.*)/, replacement: `${muiMaterialPath}/$1` },
|
|
57
|
-
{ find: /^@mui\/icons-material$/, replacement: muiIconsPath },
|
|
58
|
-
{ find: /^@mui\/icons-material\/(.*)/, replacement: `${muiIconsPath}/$1` },
|
|
59
|
-
{ find: /^@emotion\/react$/, replacement: emotionReactPath },
|
|
60
|
-
{ find: /^@emotion\/styled$/, replacement: emotionStyledPath },
|
|
61
|
-
{ find: /^@emotion\/cache$/, replacement: emotionCachePath },
|
|
62
|
-
],
|
|
63
|
-
},
|
|
64
|
-
build: {
|
|
65
|
-
outDir: resolve(__dirname, 'dist'),
|
|
66
|
-
// Do NOT empty outDir — the regular build already wrote style.css and index.* there
|
|
67
|
-
emptyOutDir: false,
|
|
68
|
-
lib: {
|
|
69
|
-
entry: resolve(__dirname, './src/standalone.tsx'),
|
|
70
|
-
name: 'EmailBuilder',
|
|
71
|
-
fileName: (format) => `standalone.${format === 'es' ? 'mjs' : 'js'}`,
|
|
72
|
-
formats: ['es', 'iife'],
|
|
73
|
-
},
|
|
74
|
-
rollupOptions: {
|
|
75
|
-
// No externals — bundle everything including React
|
|
76
|
-
external: [],
|
|
77
|
-
output: {
|
|
78
|
-
// IIFE global name (window.EmailBuilder)
|
|
79
|
-
name: 'EmailBuilder',
|
|
80
|
-
assetFileNames: (assetInfo) => {
|
|
81
|
-
if (assetInfo.name?.endsWith('.css')) return 'style.css';
|
|
82
|
-
return assetInfo.name || 'assets/[name].[ext]';
|
|
83
|
-
},
|
|
84
|
-
exports: 'named',
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
cssCodeSplit: false,
|
|
88
|
-
sourcemap: false,
|
|
89
|
-
minify: 'esbuild',
|
|
90
|
-
target: 'es2020',
|
|
91
|
-
},
|
|
92
|
-
define: {
|
|
93
|
-
'process.env.NODE_ENV': JSON.stringify('production'),
|
|
94
|
-
},
|
|
95
|
-
});
|
|
1
|
+
/**
|
|
2
|
+
* Standalone build — bundles React + ReactDOM inside the output.
|
|
3
|
+
*
|
|
4
|
+
* Use this when the host environment does NOT have React (e.g. Laravel, plain HTML).
|
|
5
|
+
* The output auto-registers the <email-builder> Web Component on import.
|
|
6
|
+
*
|
|
7
|
+
* Output:
|
|
8
|
+
* dist/standalone.mjs — ES module, self-contained
|
|
9
|
+
* dist/standalone.js — IIFE (UMD-like), self-contained, window.EmailBuilder global
|
|
10
|
+
* dist/style.css — shared with the regular build
|
|
11
|
+
*
|
|
12
|
+
* Usage in Laravel / plain HTML:
|
|
13
|
+
* <link rel="stylesheet" href="/vendor/email-builder/style.css" />
|
|
14
|
+
* <script type="module" src="/vendor/email-builder/standalone.mjs"></script>
|
|
15
|
+
* <email-builder></email-builder>
|
|
16
|
+
*
|
|
17
|
+
* Or with the IIFE build (no module support needed):
|
|
18
|
+
* <script src="/vendor/email-builder/standalone.js"></script>
|
|
19
|
+
* <email-builder></email-builder>
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import { resolve } from 'path';
|
|
23
|
+
import { defineConfig } from 'vite';
|
|
24
|
+
|
|
25
|
+
import react from '@vitejs/plugin-react-swc';
|
|
26
|
+
|
|
27
|
+
const packagesPath = resolve(__dirname, '..');
|
|
28
|
+
const reactPath = resolve(__dirname, 'node_modules/react');
|
|
29
|
+
const reactDomPath = resolve(__dirname, 'node_modules/react-dom');
|
|
30
|
+
const muiMaterialPath = resolve(__dirname, 'node_modules/@mui/material');
|
|
31
|
+
const muiIconsPath = resolve(__dirname, 'node_modules/@mui/icons-material');
|
|
32
|
+
const emotionReactPath = resolve(__dirname, 'node_modules/@emotion/react');
|
|
33
|
+
const emotionStyledPath = resolve(__dirname, 'node_modules/@emotion/styled');
|
|
34
|
+
const emotionCachePath = resolve(__dirname, 'node_modules/@emotion/cache');
|
|
35
|
+
|
|
36
|
+
export default defineConfig({
|
|
37
|
+
plugins: [react()],
|
|
38
|
+
resolve: {
|
|
39
|
+
alias: [
|
|
40
|
+
// Force all React imports to resolve to a single copy (prevents React 18/19 duplication)
|
|
41
|
+
{ find: /^react$/, replacement: reactPath },
|
|
42
|
+
{ find: /^react\/(.*)/, replacement: `${reactPath}/$1` },
|
|
43
|
+
{ find: /^react-dom$/, replacement: reactDomPath },
|
|
44
|
+
{ find: /^react-dom\/server$/, replacement: resolve(reactDomPath, 'server.browser.js') },
|
|
45
|
+
{ find: /^react-dom\/(.*)/, replacement: `${reactDomPath}/$1` },
|
|
46
|
+
{ find: /^@eb\/block-button$/, replacement: resolve(packagesPath, 'block-button/src') },
|
|
47
|
+
{ find: /^@eb\/block-columns-container$/, replacement: resolve(packagesPath, 'block-columns-container/src') },
|
|
48
|
+
{ find: /^@eb\/block-container$/, replacement: resolve(packagesPath, 'block-container/src') },
|
|
49
|
+
{ find: /^@eb\/block-divider$/, replacement: resolve(packagesPath, 'block-divider/src') },
|
|
50
|
+
{ find: /^@eb\/block-image$/, replacement: resolve(packagesPath, 'block-image/src') },
|
|
51
|
+
{ find: /^@eb\/block-spacer$/, replacement: resolve(packagesPath, 'block-spacer/src') },
|
|
52
|
+
{ find: /^@eb\/block-notion-text$/, replacement: resolve(packagesPath, 'block-notion-text/src') },
|
|
53
|
+
{ find: /^@eb\/document-core$/, replacement: resolve(packagesPath, 'document-core/src') },
|
|
54
|
+
{ find: /^@eb\/email-builder$/, replacement: resolve(packagesPath, 'email-builder/src') },
|
|
55
|
+
{ find: /^@mui\/material$/, replacement: muiMaterialPath },
|
|
56
|
+
{ find: /^@mui\/material\/(.*)/, replacement: `${muiMaterialPath}/$1` },
|
|
57
|
+
{ find: /^@mui\/icons-material$/, replacement: muiIconsPath },
|
|
58
|
+
{ find: /^@mui\/icons-material\/(.*)/, replacement: `${muiIconsPath}/$1` },
|
|
59
|
+
{ find: /^@emotion\/react$/, replacement: emotionReactPath },
|
|
60
|
+
{ find: /^@emotion\/styled$/, replacement: emotionStyledPath },
|
|
61
|
+
{ find: /^@emotion\/cache$/, replacement: emotionCachePath },
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
build: {
|
|
65
|
+
outDir: resolve(__dirname, 'dist'),
|
|
66
|
+
// Do NOT empty outDir — the regular build already wrote style.css and index.* there
|
|
67
|
+
emptyOutDir: false,
|
|
68
|
+
lib: {
|
|
69
|
+
entry: resolve(__dirname, './src/standalone.tsx'),
|
|
70
|
+
name: 'EmailBuilder',
|
|
71
|
+
fileName: (format) => `standalone.${format === 'es' ? 'mjs' : 'js'}`,
|
|
72
|
+
formats: ['es', 'iife'],
|
|
73
|
+
},
|
|
74
|
+
rollupOptions: {
|
|
75
|
+
// No externals — bundle everything including React
|
|
76
|
+
external: [],
|
|
77
|
+
output: {
|
|
78
|
+
// IIFE global name (window.EmailBuilder)
|
|
79
|
+
name: 'EmailBuilder',
|
|
80
|
+
assetFileNames: (assetInfo) => {
|
|
81
|
+
if (assetInfo.name?.endsWith('.css')) return 'style.css';
|
|
82
|
+
return assetInfo.name || 'assets/[name].[ext]';
|
|
83
|
+
},
|
|
84
|
+
exports: 'named',
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
cssCodeSplit: false,
|
|
88
|
+
sourcemap: false,
|
|
89
|
+
minify: 'esbuild',
|
|
90
|
+
target: 'es2020',
|
|
91
|
+
},
|
|
92
|
+
define: {
|
|
93
|
+
'process.env.NODE_ENV': JSON.stringify('production'),
|
|
94
|
+
},
|
|
95
|
+
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./index-BORDx2NL.cjs"),T=200;let s=!1,l=!1;function g(){l=!0}function h(){l=!1}function y(e){return new Promise((t,i)=>{const n=new FileReader;n.onload=()=>t(n.result),n.onerror=i,n.readAsDataURL(e)})}function b(e){return new Promise(t=>setTimeout(t,e))}function p(e){try{const t=localStorage.getItem(e);return t?JSON.parse(t):[]}catch{return[]}}async function w(){if(s||a.getComponentsStorageMode()!=="local")return;s=!0;let e=0;try{const t=[{storageKey:"eb:lib:sections",isTemplate:!1},{storageKey:"eb:lib:layouts",isTemplate:!1},{storageKey:"eb:lib:templates",isTemplate:!0}];for(const{storageKey:i,isTemplate:n}of t){const m=p(i);for(const o of m)if(!a.hasCachedThumbnail(o.id)&&o.blocks?.length){for(;l;)await b(500);try{const u={};for(const r of o.blocks)u[r.id]=r.block;const f=n?"root":o.blocks[0].id,d=a.buildSubtreeHtml(u,f),c=await a.captureSubtreeThumbnail(d,{timeoutMs:6e3});if(c){const r=await y(c);a.setThumbnailDataUrl(o.id,r),e++}}catch{}await b(T)}}}finally{s=!1,e>0&&a.bumpLocalSeedVersion()}}exports.generateMissingThumbnails=w;exports.pauseThumbnailGeneration=g;exports.resumeThumbnailGeneration=h;
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { g as d, h as g, a as h, c as p, s as y, b as T } from "./standalone-QpPEEu_A.js";
|
|
2
|
-
const w = 200;
|
|
3
|
-
let s = !1, i = !1;
|
|
4
|
-
function A() {
|
|
5
|
-
i = !0;
|
|
6
|
-
}
|
|
7
|
-
function D() {
|
|
8
|
-
i = !1;
|
|
9
|
-
}
|
|
10
|
-
function S(e) {
|
|
11
|
-
return new Promise((t, r) => {
|
|
12
|
-
const a = new FileReader();
|
|
13
|
-
a.onload = () => t(a.result), a.onerror = r, a.readAsDataURL(e);
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
function u(e) {
|
|
17
|
-
return new Promise((t) => setTimeout(t, e));
|
|
18
|
-
}
|
|
19
|
-
function k(e) {
|
|
20
|
-
try {
|
|
21
|
-
const t = localStorage.getItem(e);
|
|
22
|
-
return t ? JSON.parse(t) : [];
|
|
23
|
-
} catch {
|
|
24
|
-
return [];
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
async function K() {
|
|
28
|
-
if (s || d() !== "local") return;
|
|
29
|
-
s = !0;
|
|
30
|
-
let e = 0;
|
|
31
|
-
try {
|
|
32
|
-
const t = [
|
|
33
|
-
{ storageKey: "eb:lib:sections", isTemplate: !1 },
|
|
34
|
-
{ storageKey: "eb:lib:layouts", isTemplate: !1 },
|
|
35
|
-
{ storageKey: "eb:lib:templates", isTemplate: !0 }
|
|
36
|
-
];
|
|
37
|
-
for (const { storageKey: r, isTemplate: a } of t) {
|
|
38
|
-
const f = k(r);
|
|
39
|
-
for (const o of f)
|
|
40
|
-
if (!g(o.id) && o.blocks?.length) {
|
|
41
|
-
for (; i; ) await u(500);
|
|
42
|
-
try {
|
|
43
|
-
const l = {};
|
|
44
|
-
for (const n of o.blocks)
|
|
45
|
-
l[n.id] = n.block;
|
|
46
|
-
const b = a ? "root" : o.blocks[0].id, m = h(l, b), c = await p(m, { timeoutMs: 6e3 });
|
|
47
|
-
if (c) {
|
|
48
|
-
const n = await S(c);
|
|
49
|
-
y(o.id, n), e++;
|
|
50
|
-
}
|
|
51
|
-
} catch {
|
|
52
|
-
}
|
|
53
|
-
await u(w);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
} finally {
|
|
57
|
-
s = !1, e > 0 && T();
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
export {
|
|
61
|
-
K as generateMissingThumbnails,
|
|
62
|
-
A as pauseThumbnailGeneration,
|
|
63
|
-
D as resumeThumbnailGeneration
|
|
64
|
-
};
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { g as d, h as g, a as h, c as p, s as y, b as T } from "./index-BGFPP7q7.js";
|
|
2
|
-
const w = 200;
|
|
3
|
-
let s = !1, i = !1;
|
|
4
|
-
function A() {
|
|
5
|
-
i = !0;
|
|
6
|
-
}
|
|
7
|
-
function D() {
|
|
8
|
-
i = !1;
|
|
9
|
-
}
|
|
10
|
-
function S(e) {
|
|
11
|
-
return new Promise((t, r) => {
|
|
12
|
-
const a = new FileReader();
|
|
13
|
-
a.onload = () => t(a.result), a.onerror = r, a.readAsDataURL(e);
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
function u(e) {
|
|
17
|
-
return new Promise((t) => setTimeout(t, e));
|
|
18
|
-
}
|
|
19
|
-
function k(e) {
|
|
20
|
-
try {
|
|
21
|
-
const t = localStorage.getItem(e);
|
|
22
|
-
return t ? JSON.parse(t) : [];
|
|
23
|
-
} catch {
|
|
24
|
-
return [];
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
async function K() {
|
|
28
|
-
if (s || d() !== "local") return;
|
|
29
|
-
s = !0;
|
|
30
|
-
let e = 0;
|
|
31
|
-
try {
|
|
32
|
-
const t = [
|
|
33
|
-
{ storageKey: "eb:lib:sections", isTemplate: !1 },
|
|
34
|
-
{ storageKey: "eb:lib:layouts", isTemplate: !1 },
|
|
35
|
-
{ storageKey: "eb:lib:templates", isTemplate: !0 }
|
|
36
|
-
];
|
|
37
|
-
for (const { storageKey: r, isTemplate: a } of t) {
|
|
38
|
-
const f = k(r);
|
|
39
|
-
for (const o of f)
|
|
40
|
-
if (!g(o.id) && o.blocks?.length) {
|
|
41
|
-
for (; i; ) await u(500);
|
|
42
|
-
try {
|
|
43
|
-
const l = {};
|
|
44
|
-
for (const n of o.blocks)
|
|
45
|
-
l[n.id] = n.block;
|
|
46
|
-
const b = a ? "root" : o.blocks[0].id, m = h(l, b), c = await p(m, { timeoutMs: 6e3 });
|
|
47
|
-
if (c) {
|
|
48
|
-
const n = await S(c);
|
|
49
|
-
y(o.id, n), e++;
|
|
50
|
-
}
|
|
51
|
-
} catch {
|
|
52
|
-
}
|
|
53
|
-
await u(w);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
} finally {
|
|
57
|
-
s = !1, e > 0 && T();
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
export {
|
|
61
|
-
K as generateMissingThumbnails,
|
|
62
|
-
A as pauseThumbnailGeneration,
|
|
63
|
-
D as resumeThumbnailGeneration
|
|
64
|
-
};
|