@hellkite/pipkin 0.6.2 → 0.8.0
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/build/src/lib/replacement.d.ts +5 -3
- package/build/src/lib/replacement.js +6 -3
- package/build/src/lib/replacement.js.map +1 -1
- package/build/src/lib/template.d.ts +18 -26
- package/build/src/lib/template.js +197 -70
- package/build/src/lib/template.js.map +1 -1
- package/build/src/lib/types/containers.d.ts +14 -2
- package/build/src/lib/types/containers.js +2 -7
- package/build/src/lib/types/containers.js.map +1 -1
- package/build/src/lib/types/hypernode.d.ts +2 -0
- package/build/src/lib/types/hypernode.js +3 -0
- package/build/src/lib/types/hypernode.js.map +1 -0
- package/build/src/lib/types/image.d.ts +11 -5
- package/build/src/lib/types/image.js +2 -7
- package/build/src/lib/types/image.js.map +1 -1
- package/build/src/lib/types/index.d.ts +2 -0
- package/build/src/lib/types/index.js +2 -0
- package/build/src/lib/types/index.js.map +1 -1
- package/build/src/lib/types/layer.d.ts +6 -0
- package/build/src/lib/types/layer.js +7 -0
- package/build/src/lib/types/layer.js.map +1 -1
- package/build/src/lib/types/replacement.d.ts +2 -2
- package/build/src/lib/types/template.d.ts +13 -0
- package/build/src/lib/types/template.js +10 -0
- package/build/src/lib/types/template.js.map +1 -0
- package/build/src/lib/types/text.d.ts +9 -4
- package/build/src/lib/types/text.js +3 -10
- package/build/src/lib/types/text.js.map +1 -1
- package/build/src/lib/utils/container.js +10 -45
- package/build/src/lib/utils/container.js.map +1 -1
- package/build/src/lib/utils/htmlToImage.d.ts +2 -3
- package/build/src/lib/utils/htmlToImage.js.map +1 -1
- package/build/src/lib/utils/index.d.ts +1 -3
- package/build/src/lib/utils/index.js +1 -3
- package/build/src/lib/utils/index.js.map +1 -1
- package/build/src/lib/utils/placeBoundingBox.d.ts +2 -0
- package/build/src/lib/utils/placeBoundingBox.js +21 -0
- package/build/src/lib/utils/placeBoundingBox.js.map +1 -0
- package/build/src/lib/utils/placeImage.d.ts +7 -6
- package/build/src/lib/utils/placeImage.js +20 -20
- package/build/src/lib/utils/placeImage.js.map +1 -1
- package/build/src/lib/utils/placeText.d.ts +14 -0
- package/build/src/lib/utils/placeText.js +69 -0
- package/build/src/lib/utils/placeText.js.map +1 -0
- package/build/src/test.js +87 -15
- package/build/src/test.js.map +1 -1
- package/package.json +3 -1
- package/roadmap.md +3 -1
- package/src/lib/replacement.ts +6 -5
- package/src/lib/template.ts +336 -114
- package/src/lib/types/containers.ts +24 -8
- package/src/lib/types/hypernode.ts +4 -0
- package/src/lib/types/image.ts +20 -9
- package/src/lib/types/index.ts +2 -0
- package/src/lib/types/layer.ts +15 -0
- package/src/lib/types/replacement.ts +2 -2
- package/src/lib/types/template.ts +22 -0
- package/src/lib/types/text.ts +16 -12
- package/src/lib/utils/container.ts +13 -70
- package/src/lib/utils/htmlToImage.ts +3 -3
- package/src/lib/utils/index.ts +1 -3
- package/src/lib/utils/{drawBoundingBox.ts → placeBoundingBox.ts} +3 -9
- package/src/lib/utils/placeImage.ts +0 -62
- package/src/lib/utils/renderText.ts +0 -107
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../../../src/lib/types/image.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../../../src/lib/types/image.ts"],"names":[],"mappings":";;;AAEA,mCAA8D;AAmCjD,QAAA,2BAA2B,mCAGjC,6BAAqB,KACxB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,EAAE,IAChB;AAQW,QAAA,uBAAuB,GAAc,QAAQ,CAAC"}
|
|
@@ -24,4 +24,6 @@ __exportStar(require("./text"), exports);
|
|
|
24
24
|
__exportStar(require("./boundingBox"), exports);
|
|
25
25
|
__exportStar(require("./css"), exports);
|
|
26
26
|
__exportStar(require("./layer"), exports);
|
|
27
|
+
__exportStar(require("./hypernode"), exports);
|
|
28
|
+
__exportStar(require("./template"), exports);
|
|
27
29
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,+CAA6B;AAC7B,0CAAwB;AACxB,2CAAyB;AACzB,gDAA8B;AAC9B,0CAAwB;AACxB,yCAAuB;AACvB,gDAA8B;AAC9B,wCAAsB;AACtB,0CAAwB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,+CAA6B;AAC7B,0CAAwB;AACxB,2CAAyB;AACzB,gDAA8B;AAC9B,0CAAwB;AACxB,yCAAuB;AACvB,gDAA8B;AAC9B,wCAAsB;AACtB,0CAAwB;AACxB,8CAA4B;AAC5B,6CAA2B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RequiredDeep } from "type-fest";
|
|
1
2
|
import { JustifyContent, AlignItems } from "./css";
|
|
2
3
|
export type LayerOptions<EntryType extends Record<string, string>> = {
|
|
3
4
|
/**
|
|
@@ -12,4 +13,9 @@ export type LayerOptions<EntryType extends Record<string, string>> = {
|
|
|
12
13
|
* Decides if a layer should be rendered or not for a certain entry
|
|
13
14
|
*/
|
|
14
15
|
skip?: boolean | ((entry: EntryType) => boolean);
|
|
16
|
+
/**
|
|
17
|
+
* Control if should render bounding box for this layer
|
|
18
|
+
*/
|
|
19
|
+
renderBoundingBox?: boolean;
|
|
15
20
|
};
|
|
21
|
+
export declare const DEFAULT_LAYER_OPTIONS: RequiredDeep<LayerOptions<Record<string, string>>>;
|
|
@@ -1,3 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_LAYER_OPTIONS = void 0;
|
|
4
|
+
exports.DEFAULT_LAYER_OPTIONS = {
|
|
5
|
+
justifyContent: 'center',
|
|
6
|
+
alignItems: 'center',
|
|
7
|
+
skip: false,
|
|
8
|
+
renderBoundingBox: false,
|
|
9
|
+
};
|
|
3
10
|
//# sourceMappingURL=layer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layer.js","sourceRoot":"","sources":["../../../../src/lib/types/layer.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"layer.js","sourceRoot":"","sources":["../../../../src/lib/types/layer.ts"],"names":[],"mappings":";;;AAyBa,QAAA,qBAAqB,GAE9B;IACA,cAAc,EAAE,QAAQ;IACxB,UAAU,EAAE,QAAQ;IACpB,IAAI,EAAE,KAAK;IACX,iBAAiB,EAAE,KAAK;CAC3B,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export type ReplacementMap = Record<string,
|
|
1
|
+
import { StaticImageRef } from './image';
|
|
2
|
+
export type ReplacementMap = Record<string, StaticImageRef>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type RequiredTemplateOptions = {
|
|
2
|
+
height: number;
|
|
3
|
+
width: number;
|
|
4
|
+
color: number;
|
|
5
|
+
};
|
|
6
|
+
type OptionalTemplateOptions = Partial<{
|
|
7
|
+
defaultFontFamily: string;
|
|
8
|
+
defaultAssetsPath: string;
|
|
9
|
+
debug: boolean;
|
|
10
|
+
}>;
|
|
11
|
+
export type TemplateOptions = RequiredTemplateOptions & OptionalTemplateOptions;
|
|
12
|
+
export declare const DEFAULT_TEMPLATE_OPTIONS: RequiredTemplateOptions;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_TEMPLATE_OPTIONS = void 0;
|
|
4
|
+
const jimp_1 = require("jimp");
|
|
5
|
+
exports.DEFAULT_TEMPLATE_OPTIONS = {
|
|
6
|
+
height: 1050,
|
|
7
|
+
width: 750,
|
|
8
|
+
color: (0, jimp_1.rgbaToInt)(255, 255, 255, 255),
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../src/lib/types/template.ts"],"names":[],"mappings":";;;AAAA,+BAAiC;AAiBpB,QAAA,wBAAwB,GAA4B;IAC7D,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,IAAA,gBAAS,EAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;CACvC,CAAC"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import type { RequiredDeep } from 'type-fest';
|
|
2
2
|
import { LayerOptions } from './layer';
|
|
3
|
-
import {
|
|
3
|
+
import { Replacement } from '../replacement';
|
|
4
|
+
/**
|
|
5
|
+
* Static text -> `text`
|
|
6
|
+
* Dynamic text -> `key`, `textFn`
|
|
7
|
+
*/
|
|
4
8
|
export type TextRef<EntryType> = {
|
|
5
|
-
key: string;
|
|
6
|
-
} | {
|
|
7
9
|
text: string;
|
|
10
|
+
} | {
|
|
11
|
+
key: string;
|
|
8
12
|
} | {
|
|
9
13
|
textFn: (entry: EntryType) => string;
|
|
10
14
|
};
|
|
@@ -34,7 +38,8 @@ export type TextLayerOptions<EntryType extends Record<string, string>> = LayerOp
|
|
|
34
38
|
width?: number;
|
|
35
39
|
color?: string;
|
|
36
40
|
};
|
|
37
|
-
|
|
41
|
+
replacementFn?: (replace: Replacement) => Replacement;
|
|
38
42
|
};
|
|
39
43
|
export declare const DEFAULT_FONT: Required<FontOptions>;
|
|
44
|
+
export type TextLayerSpecificOptions<EntryType extends Record<string, string>> = Omit<TextLayerOptions<EntryType>, keyof LayerOptions<EntryType>>;
|
|
40
45
|
export declare const DEFAULT_TEXT_LAYER_OPTIONS: RequiredDeep<TextLayerOptions<Record<string, string>>>;
|
|
@@ -1,22 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DEFAULT_TEXT_LAYER_OPTIONS = exports.DEFAULT_FONT = void 0;
|
|
4
|
+
const layer_1 = require("./layer");
|
|
4
5
|
exports.DEFAULT_FONT = {
|
|
5
6
|
size: 28,
|
|
6
7
|
family: 'Arial',
|
|
7
8
|
bold: false,
|
|
8
9
|
italic: false,
|
|
9
10
|
};
|
|
10
|
-
exports.DEFAULT_TEXT_LAYER_OPTIONS = {
|
|
11
|
-
justifyContent: 'center',
|
|
12
|
-
alignItems: 'center',
|
|
13
|
-
font: exports.DEFAULT_FONT,
|
|
14
|
-
color: 'black',
|
|
15
|
-
replacement: {},
|
|
16
|
-
skip: false,
|
|
17
|
-
border: {
|
|
11
|
+
exports.DEFAULT_TEXT_LAYER_OPTIONS = Object.assign(Object.assign({}, layer_1.DEFAULT_LAYER_OPTIONS), { font: exports.DEFAULT_FONT, color: 'black', replacementFn: replacement => replacement, border: {
|
|
18
12
|
width: 0,
|
|
19
13
|
color: 'black',
|
|
20
|
-
}
|
|
21
|
-
};
|
|
14
|
+
} });
|
|
22
15
|
//# sourceMappingURL=text.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../../src/lib/types/text.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../../src/lib/types/text.ts"],"names":[],"mappings":";;;AACA,mCAA8D;AAgDjD,QAAA,YAAY,GAA0B;IAC/C,IAAI,EAAE,EAAE;IACR,MAAM,EAAE,OAAO;IACf,IAAI,EAAE,KAAK;IACX,MAAM,EAAE,KAAK;CAChB,CAAC;AAKW,QAAA,0BAA0B,mCAGhC,6BAAqB,KACxB,IAAI,EAAE,oBAAY,EAClB,KAAK,EAAE,OAAO,EACd,aAAa,EAAE,WAAW,CAAC,EAAE,CAAC,WAAW,EACzC,MAAM,EAAE;QACJ,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,OAAO;KACjB,IACH"}
|
|
@@ -17,43 +17,25 @@ const virtual_dom_1 = require("virtual-dom");
|
|
|
17
17
|
const types_1 = require("../types");
|
|
18
18
|
const toPx_1 = require("./toPx");
|
|
19
19
|
const lodash_merge_1 = __importDefault(require("lodash.merge"));
|
|
20
|
-
const htmlToImage_1 = require("./htmlToImage");
|
|
21
20
|
const lodash_chunk_1 = __importDefault(require("lodash.chunk"));
|
|
22
|
-
const vboxPackingFn = (options) => (box,
|
|
21
|
+
const vboxPackingFn = (options) => (box, elements) => directionalPackingFn({
|
|
23
22
|
isVertical: true,
|
|
24
|
-
|
|
25
|
-
images,
|
|
23
|
+
elements,
|
|
26
24
|
box,
|
|
27
25
|
options,
|
|
28
26
|
});
|
|
29
27
|
exports.vboxPackingFn = vboxPackingFn;
|
|
30
|
-
const hboxPackingFn = (options) => (box,
|
|
28
|
+
const hboxPackingFn = (options) => (box, elements) => directionalPackingFn({
|
|
31
29
|
isVertical: false,
|
|
32
|
-
|
|
33
|
-
images,
|
|
30
|
+
elements,
|
|
34
31
|
box,
|
|
35
32
|
options,
|
|
36
33
|
});
|
|
37
34
|
exports.hboxPackingFn = hboxPackingFn;
|
|
38
|
-
const gridPackingFn = (options) => (box,
|
|
35
|
+
const gridPackingFn = (options) => (box, elements) => __awaiter(void 0, void 0, void 0, function* () {
|
|
39
36
|
const mergedOptions = (0, lodash_merge_1.default)({}, types_1.DEFAULT_GRID_CONTAINER_OPTIONS, options);
|
|
40
|
-
const objectFit = types_1.SCALE_MODE_TO_OBJECT_FIT[mergedOptions.scale];
|
|
41
|
-
const children = yield Promise.all(images.map((image) => __awaiter(void 0, void 0, void 0, function* () {
|
|
42
|
-
const imageBase64 = yield image.getBase64('image/png');
|
|
43
|
-
return (0, virtual_dom_1.h)('img', {
|
|
44
|
-
style: {
|
|
45
|
-
objectFit,
|
|
46
|
-
flex: '1 1 auto',
|
|
47
|
-
minWidth: 0,
|
|
48
|
-
minHeight: 0,
|
|
49
|
-
maxWidth: '100%',
|
|
50
|
-
maxHeight: '100%',
|
|
51
|
-
},
|
|
52
|
-
src: imageBase64,
|
|
53
|
-
}, []);
|
|
54
|
-
})));
|
|
55
37
|
const items = [];
|
|
56
|
-
for (const subset of (0, lodash_chunk_1.default)(
|
|
38
|
+
for (const subset of (0, lodash_chunk_1.default)(elements)) {
|
|
57
39
|
items.push((0, virtual_dom_1.h)('div', {
|
|
58
40
|
style: {
|
|
59
41
|
display: 'flex',
|
|
@@ -65,32 +47,15 @@ const gridPackingFn = (options) => (box, background, images) => __awaiter(void 0
|
|
|
65
47
|
},
|
|
66
48
|
}, subset));
|
|
67
49
|
}
|
|
68
|
-
|
|
50
|
+
return (0, virtual_dom_1.h)('div', {
|
|
69
51
|
style: Object.assign({ display: 'grid', gridTemplateColumns: `repeat(${mergedOptions.size}, 1fr)`, position: 'absolute', gap: (0, toPx_1.toPx)(mergedOptions.gap) }, (0, toPx_1.boundingBoxToPx)(box)),
|
|
70
52
|
}, items);
|
|
71
|
-
return (0, htmlToImage_1.htmlToImage)(document, background);
|
|
72
53
|
});
|
|
73
54
|
exports.gridPackingFn = gridPackingFn;
|
|
74
|
-
const directionalPackingFn = (_a) => __awaiter(void 0, [_a], void 0, function* ({ isVertical,
|
|
55
|
+
const directionalPackingFn = (_a) => __awaiter(void 0, [_a], void 0, function* ({ isVertical, elements, box, options, }) {
|
|
75
56
|
const mergedOptions = (0, lodash_merge_1.default)({}, types_1.DEFAULT_DIRECTION_CONTAINER_OPTIONS, options);
|
|
76
|
-
|
|
77
|
-
const children = yield Promise.all(images.map((image) => __awaiter(void 0, void 0, void 0, function* () {
|
|
78
|
-
const imageBase64 = yield image.getBase64('image/png');
|
|
79
|
-
return (0, virtual_dom_1.h)('img', {
|
|
80
|
-
style: {
|
|
81
|
-
objectFit,
|
|
82
|
-
flex: '1 1 auto',
|
|
83
|
-
minWidth: 0,
|
|
84
|
-
minHeight: 0,
|
|
85
|
-
maxWidth: '100%',
|
|
86
|
-
maxHeight: '100%',
|
|
87
|
-
},
|
|
88
|
-
src: imageBase64,
|
|
89
|
-
}, []);
|
|
90
|
-
})));
|
|
91
|
-
const document = (0, virtual_dom_1.h)('div', {
|
|
57
|
+
return (0, virtual_dom_1.h)('div', {
|
|
92
58
|
style: Object.assign({ display: 'flex', position: 'absolute', scale: 1, flexDirection: `${isVertical ? 'column' : 'row'}${mergedOptions.reversed ? '-reversed' : ''}`, gap: (0, toPx_1.toPx)(mergedOptions.gap), justifyContent: mergedOptions.justifyContent, alignItems: mergedOptions.alignItems }, (0, toPx_1.boundingBoxToPx)(box)),
|
|
93
|
-
},
|
|
94
|
-
return (0, htmlToImage_1.htmlToImage)(document, background);
|
|
59
|
+
}, elements);
|
|
95
60
|
});
|
|
96
61
|
//# sourceMappingURL=container.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../src/lib/utils/container.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,6CAAgC;AAChC,
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../src/lib/utils/container.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,6CAAgC;AAChC,oCASkB;AAClB,iCAA+C;AAC/C,gEAAiC;AACjC,gEAAiC;AAE1B,MAAM,aAAa,GACtB,CACI,OAA8C,EACrC,EAAE,CACf,CAAC,GAAgB,EAAE,QAA0B,EAAE,EAAE,CAC7C,oBAAoB,CAAC;IACjB,UAAU,EAAE,IAAI;IAChB,QAAQ;IACR,GAAG;IACH,OAAO;CACV,CAAC,CAAC;AAVE,QAAA,aAAa,iBAUf;AAEJ,MAAM,aAAa,GACtB,CACI,OAA8C,EACrC,EAAE,CACf,CAAC,GAAgB,EAAE,QAA0B,EAAE,EAAE,CAC7C,oBAAoB,CAAC;IACjB,UAAU,EAAE,KAAK;IACjB,QAAQ;IACR,GAAG;IACH,OAAO;CACV,CAAC,CAAC;AAVE,QAAA,aAAa,iBAUf;AAEJ,MAAM,aAAa,GACtB,CACI,OAAyC,EAChC,EAAE,CACf,CAAO,GAAgB,EAAE,QAA0B,EAAE,EAAE;IACnD,MAAM,aAAa,GAAG,IAAA,sBAAK,EACvB,EAAE,EACF,sCAA8B,EAC9B,OAAO,CACV,CAAC;IAEF,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,KAAK,MAAM,MAAM,IAAI,IAAA,sBAAK,EAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CACN,IAAA,eAAC,EACG,KAAK,EACL;YACI,KAAK,EAAE;gBACH,OAAO,EAAE,MAAM;gBACf,aAAa,EAAE,KAAK;gBACpB,QAAQ,EAAE,QAAQ;gBAElB,GAAG,EAAE,IAAA,WAAI,EAAC,aAAa,CAAC,GAAG,CAAC;gBAC5B,cAAc,EAAE,aAAa,CAAC,cAAc;gBAC5C,UAAU,EAAE,aAAa,CAAC,UAAU;aACvC;SACJ,EACD,MAAM,CACT,CACJ,CAAC;IACN,CAAC;IACD,OAAO,IAAA,eAAC,EACJ,KAAK,EACL;QACI,KAAK,kBACD,OAAO,EAAE,MAAM,EACf,mBAAmB,EAAE,UAAU,aAAa,CAAC,IAAI,QAAQ,EACzD,QAAQ,EAAE,UAAU,EAEpB,GAAG,EAAE,IAAA,WAAI,EAAC,aAAa,CAAC,GAAG,CAAC,IACzB,IAAA,sBAAe,EAAC,GAAG,CAAC,CAC1B;KACJ,EACD,KAAK,CACR,CAAC;AACN,CAAC,CAAA,CAAC;AA7CO,QAAA,aAAa,iBA6CpB;AAEN,MAAM,oBAAoB,GAAG,KAUN,EAAE,4CAVqD,EAC1E,UAAU,EACV,QAAQ,EACR,GAAG,EACH,OAAO,GAMV;IACG,MAAM,aAAa,GAAG,IAAA,sBAAK,EACvB,EAAE,EACF,2CAAmC,EACnC,OAAO,CACV,CAAC;IAEF,OAAO,IAAA,eAAC,EACJ,KAAK,EACL;QACI,KAAK,kBACD,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,CAAC,EAER,aAAa,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAC7F,GAAG,EAAE,IAAA,WAAI,EAAC,aAAa,CAAC,GAAG,CAAC,EAC5B,cAAc,EAAE,aAAa,CAAC,cAAc,EAC5C,UAAU,EAAE,aAAa,CAAC,UAAU,IAEjC,IAAA,sBAAe,EAAC,GAAG,CAAC,CAC1B;KACJ,EACD,QAAQ,CACX,CAAC;AACN,CAAC,CAAA,CAAC"}
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export declare const htmlToImage: (document: VNode, backgroundSize: Size) => Promise<ImageType>;
|
|
1
|
+
import { HyperNode, ImageType, Size } from '../types';
|
|
2
|
+
export declare const htmlToImage: (document: HyperNode, backgroundSize: Size) => Promise<ImageType>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"htmlToImage.js","sourceRoot":"","sources":["../../../../src/lib/utils/htmlToImage.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"htmlToImage.js","sourceRoot":"","sources":["../../../../src/lib/utils/htmlToImage.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,6CAAsD;AACtD,4EAAiD;AACjD,+BAA4B;AAGrB,MAAM,WAAW,GAAG,CACvB,QAAmB,EACnB,cAAoB,EACF,EAAE;IACpB,MAAM,IAAI,GAAG,IAAA,oBAAa,EAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;IAChD,MAAM,KAAK,GAAG,MAAM,IAAA,4BAAe,EAAC;QAChC,IAAI;QACJ,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,KAAK;QACX,aAAa,EAAE;YACX,eAAe,EAAE;gBACb,KAAK,EAAE,cAAc,CAAC,KAAK;gBAC3B,MAAM,EAAE,cAAc,CAAC,MAAM;gBAC7B,iBAAiB,EAAE,CAAC;aACvB;SACJ;KACJ,CAAC,CAAC;IACH,OAAO,WAAI,CAAC,IAAI,CAAC,KAAe,CAAuB,CAAC;AAC5D,CAAC,CAAA,CAAC;AAlBW,QAAA,WAAW,eAkBtB"}
|
|
@@ -15,9 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./container"), exports);
|
|
18
|
-
__exportStar(require("./
|
|
19
|
-
__exportStar(require("./placeImage"), exports);
|
|
20
|
-
__exportStar(require("./renderText"), exports);
|
|
18
|
+
__exportStar(require("./placeBoundingBox"), exports);
|
|
21
19
|
__exportStar(require("./htmlToImage"), exports);
|
|
22
20
|
__exportStar(require("./toPx"), exports);
|
|
23
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,qDAAmC;AACnC,gDAA8B;AAC9B,yCAAuB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.placeBoundingBox = void 0;
|
|
13
|
+
const virtual_dom_1 = require("virtual-dom");
|
|
14
|
+
const toPx_1 = require("./toPx");
|
|
15
|
+
const placeBoundingBox = (box) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
+
return (0, virtual_dom_1.h)('div', {
|
|
17
|
+
style: Object.assign({ position: 'absolute', border: '2px solid red', background: 'transparent', boxSizing: 'border-box' }, (0, toPx_1.boundingBoxToPx)(box)),
|
|
18
|
+
}, []);
|
|
19
|
+
});
|
|
20
|
+
exports.placeBoundingBox = placeBoundingBox;
|
|
21
|
+
//# sourceMappingURL=placeBoundingBox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeBoundingBox.js","sourceRoot":"","sources":["../../../../src/lib/utils/placeBoundingBox.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAgC;AAChC,iCAAyC;AAGlC,MAAM,gBAAgB,GAAG,CAAO,GAAgB,EAAsB,EAAE;IAC3E,OAAO,IAAA,eAAC,EACJ,KAAK,EACL;QACI,KAAK,kBACD,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,eAAe,EACvB,UAAU,EAAE,aAAa,EACzB,SAAS,EAAE,YAAY,IACpB,IAAA,sBAAe,EAAC,GAAG,CAAC,CAC1B;KACJ,EACD,EAAE,CACL,CAAC;AACN,CAAC,CAAA,CAAC;AAdW,QAAA,gBAAgB,oBAc3B"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { ImageLayerOptions, ImageType, BoundingBox } from '../types';
|
|
1
|
+
import { ImageLayerOptions, ImageType, BoundingBox, HyperNode, ImageLayerSpecificOptions } from '../types';
|
|
2
2
|
import { RequiredDeep } from 'type-fest';
|
|
3
3
|
type PlaceImageProps<EntryType extends Record<string, string>> = {
|
|
4
4
|
image: ImageType;
|
|
5
5
|
box: BoundingBox;
|
|
6
|
-
backgroundSize: {
|
|
7
|
-
width: number;
|
|
8
|
-
height: number;
|
|
9
|
-
};
|
|
10
6
|
options: RequiredDeep<ImageLayerOptions<EntryType>>;
|
|
11
7
|
};
|
|
12
|
-
export declare const placeImage: <EntryType extends Record<string, string>>({ image, box,
|
|
8
|
+
export declare const placeImage: <EntryType extends Record<string, string>>({ image, box, options, }: PlaceImageProps<EntryType>) => Promise<HyperNode>;
|
|
9
|
+
type PrepareImageProps<EntryType extends Record<string, string>> = {
|
|
10
|
+
image: ImageType;
|
|
11
|
+
options: RequiredDeep<ImageLayerSpecificOptions<EntryType>>;
|
|
12
|
+
};
|
|
13
|
+
export declare const prepareImage: <EntryType extends Record<string, string>>({ image, options, }: PrepareImageProps<EntryType>) => Promise<HyperNode>;
|
|
13
14
|
export {};
|
|
@@ -9,30 +9,30 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.placeImage = void 0;
|
|
12
|
+
exports.prepareImage = exports.placeImage = void 0;
|
|
13
13
|
const virtual_dom_1 = require("virtual-dom");
|
|
14
14
|
const toPx_1 = require("./toPx");
|
|
15
15
|
const types_1 = require("../types");
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
const imageBase64 = yield image.getBase64('image/png');
|
|
19
|
-
const objectFit = types_1.SCALE_MODE_TO_OBJECT_FIT[options.scale];
|
|
20
|
-
const document = (0, virtual_dom_1.h)('div', {
|
|
16
|
+
const placeImage = (_a) => __awaiter(void 0, [_a], void 0, function* ({ image, box, options, }) {
|
|
17
|
+
return (0, virtual_dom_1.h)('div', {
|
|
21
18
|
style: Object.assign({ display: 'flex', position: 'absolute', scale: 1, justifyContent: options.justifyContent, alignItems: options.alignItems }, (0, toPx_1.boundingBoxToPx)(box)),
|
|
22
|
-
}, [
|
|
23
|
-
(0, virtual_dom_1.h)('img', {
|
|
24
|
-
style: {
|
|
25
|
-
objectFit,
|
|
26
|
-
flex: '1 1 auto',
|
|
27
|
-
minWidth: 0,
|
|
28
|
-
minHeight: 0,
|
|
29
|
-
maxWidth: '100%',
|
|
30
|
-
maxHeight: '100%',
|
|
31
|
-
},
|
|
32
|
-
src: imageBase64,
|
|
33
|
-
}, []),
|
|
34
|
-
]);
|
|
35
|
-
return (0, htmlToImage_1.htmlToImage)(document, backgroundSize);
|
|
19
|
+
}, [yield (0, exports.prepareImage)({ image, options })]);
|
|
36
20
|
});
|
|
37
21
|
exports.placeImage = placeImage;
|
|
22
|
+
const prepareImage = (_a) => __awaiter(void 0, [_a], void 0, function* ({ image, options, }) {
|
|
23
|
+
const imageBase64 = yield image.getBase64('image/png');
|
|
24
|
+
const objectFit = types_1.SCALE_MODE_TO_OBJECT_FIT[options.scale];
|
|
25
|
+
return (0, virtual_dom_1.h)('img', {
|
|
26
|
+
style: {
|
|
27
|
+
objectFit,
|
|
28
|
+
flex: '1 1 auto',
|
|
29
|
+
minWidth: 0,
|
|
30
|
+
minHeight: 0,
|
|
31
|
+
maxWidth: '100%',
|
|
32
|
+
maxHeight: '100%',
|
|
33
|
+
},
|
|
34
|
+
src: imageBase64,
|
|
35
|
+
}, []);
|
|
36
|
+
});
|
|
37
|
+
exports.prepareImage = prepareImage;
|
|
38
38
|
//# sourceMappingURL=placeImage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"placeImage.js","sourceRoot":"","sources":["../../../../src/lib/utils/placeImage.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAgC;AAChC,iCAAyC;AACzC,
|
|
1
|
+
{"version":3,"file":"placeImage.js","sourceRoot":"","sources":["../../../../src/lib/utils/placeImage.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAgC;AAChC,iCAAyC;AACzC,oCAOkB;AASX,MAAM,UAAU,GAAG,KAIyB,EAAE,4CAJsB,EACvE,KAAK,EACL,GAAG,EACH,OAAO,GACkB;IACzB,OAAO,IAAA,eAAC,EACJ,KAAK,EACL;QACI,KAAK,kBACD,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,CAAC,EAER,cAAc,EAAE,OAAO,CAAC,cAAc,EACtC,UAAU,EAAE,OAAO,CAAC,UAAU,IAE3B,IAAA,sBAAe,EAAC,GAAG,CAAC,CAC1B;KACJ,EACD,CAAC,MAAM,IAAA,oBAAY,EAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAC3C,CAAC;AACN,CAAC,CAAA,CAAC;AArBW,QAAA,UAAU,cAqBrB;AAOK,MAAM,YAAY,GAAG,KAGyB,EAAE,4CAHsB,EACzE,KAAK,EACL,OAAO,GACoB;IAC3B,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,gCAAwB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAE1D,OAAO,IAAA,eAAC,EACJ,KAAK,EACL;QACI,KAAK,EAAE;YACH,SAAS;YACT,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,MAAM;SACpB;QACD,GAAG,EAAE,WAAW;KACnB,EACD,EAAE,CACL,CAAC;AACN,CAAC,CAAA,CAAC;AAtBW,QAAA,YAAY,gBAsBvB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BoundingBox, TextLayerOptions, HyperNode, TextLayerSpecificOptions } from '../types';
|
|
2
|
+
import { RequiredDeep } from 'type-fest';
|
|
3
|
+
type PlaceTextProps<EntryType extends Record<string, string>> = {
|
|
4
|
+
text: string;
|
|
5
|
+
box: BoundingBox;
|
|
6
|
+
options: RequiredDeep<TextLayerOptions<EntryType>>;
|
|
7
|
+
};
|
|
8
|
+
export declare const placeText: <EntryType extends Record<string, string>>({ text, box, options, }: PlaceTextProps<EntryType>) => Promise<HyperNode>;
|
|
9
|
+
type PrepareTextProps<EntryType extends Record<string, string>> = {
|
|
10
|
+
text: string;
|
|
11
|
+
options: RequiredDeep<TextLayerSpecificOptions<EntryType>>;
|
|
12
|
+
};
|
|
13
|
+
export declare const prepareText: <EntryType extends Record<string, string>>({ text, options, }: PrepareTextProps<EntryType>) => Promise<HyperNode>;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.prepareText = exports.placeText = void 0;
|
|
13
|
+
const virtual_dom_1 = require("virtual-dom");
|
|
14
|
+
const toPx_1 = require("./toPx");
|
|
15
|
+
const placeText = (_a) => __awaiter(void 0, [_a], void 0, function* ({ text, box, options, }) {
|
|
16
|
+
return (0, virtual_dom_1.h)('div', {
|
|
17
|
+
style: Object.assign({ display: 'flex', overflow: 'visible', position: 'absolute', justifyContent: options.justifyContent, alignItems: options.alignItems }, (0, toPx_1.boundingBoxToPx)(box)),
|
|
18
|
+
}, [
|
|
19
|
+
yield (0, exports.prepareText)({
|
|
20
|
+
text,
|
|
21
|
+
options,
|
|
22
|
+
}),
|
|
23
|
+
]);
|
|
24
|
+
});
|
|
25
|
+
exports.placeText = placeText;
|
|
26
|
+
const prepareText = (_a) => __awaiter(void 0, [_a], void 0, function* ({ text, options, }) {
|
|
27
|
+
let textChildren = [text];
|
|
28
|
+
for (const [word, image] of Object.entries(options.replacement)) {
|
|
29
|
+
const regex = new RegExp(word, 'gi');
|
|
30
|
+
const imageBase64 = yield image.getBase64('image/png');
|
|
31
|
+
let tmpChildren = [];
|
|
32
|
+
for (const textSegment of textChildren) {
|
|
33
|
+
if (typeof textSegment !== 'string') {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
const parts = textSegment.split(regex);
|
|
37
|
+
for (let index = 0; index < parts.length; index++) {
|
|
38
|
+
if (index > 0) {
|
|
39
|
+
tmpChildren.push((0, virtual_dom_1.h)('img', {
|
|
40
|
+
style: {
|
|
41
|
+
display: 'inline',
|
|
42
|
+
verticalAlign: 'middle',
|
|
43
|
+
height: (0, toPx_1.toPx)(options.font.size),
|
|
44
|
+
width: 'auto',
|
|
45
|
+
},
|
|
46
|
+
src: imageBase64,
|
|
47
|
+
}, []));
|
|
48
|
+
}
|
|
49
|
+
tmpChildren.push(parts[index]);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
textChildren = tmpChildren;
|
|
53
|
+
}
|
|
54
|
+
return (0, virtual_dom_1.h)('div', {
|
|
55
|
+
style: {
|
|
56
|
+
overflow: 'visible',
|
|
57
|
+
overflowWrap: 'word-wrap',
|
|
58
|
+
whiteSpace: 'normal',
|
|
59
|
+
color: options.color,
|
|
60
|
+
fontFamily: options.font.family,
|
|
61
|
+
fontSize: options.font.size,
|
|
62
|
+
fontStyle: options.font.italic ? 'italic' : undefined,
|
|
63
|
+
fontWeight: options.font.bold ? 'bold' : undefined,
|
|
64
|
+
'-webkit-text-stroke': `${options.border.width}px ${options.border.color}`,
|
|
65
|
+
},
|
|
66
|
+
}, textChildren);
|
|
67
|
+
});
|
|
68
|
+
exports.prepareText = prepareText;
|
|
69
|
+
//# sourceMappingURL=placeText.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeText.js","sourceRoot":"","sources":["../../../../src/lib/utils/placeText.ts"],"names":[],"mappings":"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"}
|