@pdfme/schemas 4.2.4-dev.4 → 4.2.4-dev.5
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.
@@ -5,8 +5,36 @@ const common_1 = require("@pdfme/common");
|
|
5
5
|
const constants_js_1 = require("./constants.js");
|
6
6
|
const helper_js_1 = require("./helper.js");
|
7
7
|
const utils_js_1 = require("../utils.js");
|
8
|
+
const replaceUnsupportedChars = (text, fontKitFont) => {
|
9
|
+
const charSupportCache = {};
|
10
|
+
const isCharSupported = (char) => {
|
11
|
+
if (char in charSupportCache) {
|
12
|
+
return charSupportCache[char];
|
13
|
+
}
|
14
|
+
const isSupported = fontKitFont.hasGlyphForCodePoint(char.codePointAt(0) || 0);
|
15
|
+
charSupportCache[char] = isSupported;
|
16
|
+
return isSupported;
|
17
|
+
};
|
18
|
+
const segments = text.split(/(\r\n|\n|\r)/);
|
19
|
+
return segments
|
20
|
+
.map((segment) => {
|
21
|
+
if (/\r\n|\n|\r/.test(segment)) {
|
22
|
+
return segment;
|
23
|
+
}
|
24
|
+
return segment
|
25
|
+
.split('')
|
26
|
+
.map((char) => {
|
27
|
+
if (/\s/.test(char) || char.charCodeAt(0) < 32) {
|
28
|
+
return char;
|
29
|
+
}
|
30
|
+
return isCharSupported(char) ? char : '〿';
|
31
|
+
})
|
32
|
+
.join('');
|
33
|
+
})
|
34
|
+
.join('');
|
35
|
+
};
|
8
36
|
const uiRender = async (arg) => {
|
9
|
-
const { value, schema, mode, onChange, stopEditing, tabIndex, placeholder, options, _cache
|
37
|
+
const { value, schema, mode, onChange, stopEditing, tabIndex, placeholder, options, _cache } = arg;
|
10
38
|
const usePlaceholder = (0, utils_js_1.isEditable)(mode, schema) && placeholder && !value;
|
11
39
|
const getText = (element) => {
|
12
40
|
let text = element.innerText;
|
@@ -16,10 +44,15 @@ const uiRender = async (arg) => {
|
|
16
44
|
}
|
17
45
|
return text;
|
18
46
|
};
|
19
|
-
const
|
47
|
+
const font = options?.font || (0, common_1.getDefaultFont)();
|
48
|
+
const [fontKitFont, textBlock] = await Promise.all([
|
49
|
+
(0, helper_js_1.getFontKitFont)(schema.fontName, font, _cache),
|
50
|
+
(0, exports.buildStyledTextContainer)(arg, usePlaceholder ? placeholder : value),
|
51
|
+
]);
|
52
|
+
const processedText = replaceUnsupportedChars(value, fontKitFont);
|
20
53
|
if (!(0, utils_js_1.isEditable)(mode, schema)) {
|
21
54
|
// Read-only mode
|
22
|
-
textBlock.innerHTML =
|
55
|
+
textBlock.innerHTML = processedText
|
23
56
|
.split('')
|
24
57
|
.map((l, i) => `<span style="letter-spacing:${String(value).length === i + 1 ? 0 : 'inherit'};">${l}</span>`)
|
25
58
|
.join('');
|
@@ -27,7 +60,7 @@ const uiRender = async (arg) => {
|
|
27
60
|
}
|
28
61
|
(0, exports.makeElementPlainTextContentEditable)(textBlock);
|
29
62
|
textBlock.tabIndex = tabIndex || 0;
|
30
|
-
textBlock.innerText = value;
|
63
|
+
textBlock.innerText = mode === 'designer' ? value : processedText;
|
31
64
|
textBlock.addEventListener('blur', (e) => {
|
32
65
|
onChange && onChange({ key: 'content', value: getText(e.target) });
|
33
66
|
stopEditing && stopEditing();
|
@@ -82,7 +115,7 @@ const uiRender = async (arg) => {
|
|
82
115
|
};
|
83
116
|
exports.uiRender = uiRender;
|
84
117
|
const buildStyledTextContainer = async (arg, value) => {
|
85
|
-
const { schema, rootElement, mode, options, _cache
|
118
|
+
const { schema, rootElement, mode, options, _cache } = arg;
|
86
119
|
const font = options?.font || (0, common_1.getDefaultFont)();
|
87
120
|
let dynamicFontSize = undefined;
|
88
121
|
if (schema.dynamicFontSize && value) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"uiRender.js","sourceRoot":"","sources":["../../../../src/text/uiRender.ts"],"names":[],"mappings":";;;
|
1
|
+
{"version":3,"file":"uiRender.js","sourceRoot":"","sources":["../../../../src/text/uiRender.ts"],"names":[],"mappings":"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"}
|
@@ -2,8 +2,36 @@ import { getDefaultFont } from '@pdfme/common';
|
|
2
2
|
import { DEFAULT_FONT_SIZE, DEFAULT_ALIGNMENT, VERTICAL_ALIGN_TOP, VERTICAL_ALIGN_MIDDLE, VERTICAL_ALIGN_BOTTOM, DEFAULT_VERTICAL_ALIGNMENT, DEFAULT_LINE_HEIGHT, DEFAULT_CHARACTER_SPACING, DEFAULT_FONT_COLOR, PLACEHOLDER_FONT_COLOR, } from './constants.js';
|
3
3
|
import { calculateDynamicFontSize, getFontKitFont, getBrowserVerticalFontAdjustments, isFirefox, } from './helper.js';
|
4
4
|
import { isEditable } from '../utils.js';
|
5
|
+
const replaceUnsupportedChars = (text, fontKitFont) => {
|
6
|
+
const charSupportCache = {};
|
7
|
+
const isCharSupported = (char) => {
|
8
|
+
if (char in charSupportCache) {
|
9
|
+
return charSupportCache[char];
|
10
|
+
}
|
11
|
+
const isSupported = fontKitFont.hasGlyphForCodePoint(char.codePointAt(0) || 0);
|
12
|
+
charSupportCache[char] = isSupported;
|
13
|
+
return isSupported;
|
14
|
+
};
|
15
|
+
const segments = text.split(/(\r\n|\n|\r)/);
|
16
|
+
return segments
|
17
|
+
.map((segment) => {
|
18
|
+
if (/\r\n|\n|\r/.test(segment)) {
|
19
|
+
return segment;
|
20
|
+
}
|
21
|
+
return segment
|
22
|
+
.split('')
|
23
|
+
.map((char) => {
|
24
|
+
if (/\s/.test(char) || char.charCodeAt(0) < 32) {
|
25
|
+
return char;
|
26
|
+
}
|
27
|
+
return isCharSupported(char) ? char : '〿';
|
28
|
+
})
|
29
|
+
.join('');
|
30
|
+
})
|
31
|
+
.join('');
|
32
|
+
};
|
5
33
|
export const uiRender = async (arg) => {
|
6
|
-
const { value, schema, mode, onChange, stopEditing, tabIndex, placeholder, options, _cache
|
34
|
+
const { value, schema, mode, onChange, stopEditing, tabIndex, placeholder, options, _cache } = arg;
|
7
35
|
const usePlaceholder = isEditable(mode, schema) && placeholder && !value;
|
8
36
|
const getText = (element) => {
|
9
37
|
let text = element.innerText;
|
@@ -13,10 +41,15 @@ export const uiRender = async (arg) => {
|
|
13
41
|
}
|
14
42
|
return text;
|
15
43
|
};
|
16
|
-
const
|
44
|
+
const font = options?.font || getDefaultFont();
|
45
|
+
const [fontKitFont, textBlock] = await Promise.all([
|
46
|
+
getFontKitFont(schema.fontName, font, _cache),
|
47
|
+
buildStyledTextContainer(arg, usePlaceholder ? placeholder : value),
|
48
|
+
]);
|
49
|
+
const processedText = replaceUnsupportedChars(value, fontKitFont);
|
17
50
|
if (!isEditable(mode, schema)) {
|
18
51
|
// Read-only mode
|
19
|
-
textBlock.innerHTML =
|
52
|
+
textBlock.innerHTML = processedText
|
20
53
|
.split('')
|
21
54
|
.map((l, i) => `<span style="letter-spacing:${String(value).length === i + 1 ? 0 : 'inherit'};">${l}</span>`)
|
22
55
|
.join('');
|
@@ -24,7 +57,7 @@ export const uiRender = async (arg) => {
|
|
24
57
|
}
|
25
58
|
makeElementPlainTextContentEditable(textBlock);
|
26
59
|
textBlock.tabIndex = tabIndex || 0;
|
27
|
-
textBlock.innerText = value;
|
60
|
+
textBlock.innerText = mode === 'designer' ? value : processedText;
|
28
61
|
textBlock.addEventListener('blur', (e) => {
|
29
62
|
onChange && onChange({ key: 'content', value: getText(e.target) });
|
30
63
|
stopEditing && stopEditing();
|
@@ -78,7 +111,7 @@ export const uiRender = async (arg) => {
|
|
78
111
|
}
|
79
112
|
};
|
80
113
|
export const buildStyledTextContainer = async (arg, value) => {
|
81
|
-
const { schema, rootElement, mode, options, _cache
|
114
|
+
const { schema, rootElement, mode, options, _cache } = arg;
|
82
115
|
const font = options?.font || getDefaultFont();
|
83
116
|
let dynamicFontSize = undefined;
|
84
117
|
if (schema.dynamicFontSize && value) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"uiRender.js","sourceRoot":"","sources":["../../../../src/text/uiRender.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"uiRender.js","sourceRoot":"","sources":["../../../../src/text/uiRender.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/text/uiRender.ts
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
import type * as CSS from 'csstype';
|
2
|
+
import type { Font as FontKitFont } from 'fontkit';
|
2
3
|
import { UIRenderProps, getDefaultFont } from '@pdfme/common';
|
3
4
|
import type { TextSchema } from './types';
|
4
5
|
import {
|
@@ -21,18 +22,43 @@ import {
|
|
21
22
|
} from './helper.js';
|
22
23
|
import { isEditable } from '../utils.js';
|
23
24
|
|
25
|
+
const replaceUnsupportedChars = (text: string, fontKitFont: FontKitFont): string => {
|
26
|
+
const charSupportCache: { [char: string]: boolean } = {};
|
27
|
+
|
28
|
+
const isCharSupported = (char: string): boolean => {
|
29
|
+
if (char in charSupportCache) {
|
30
|
+
return charSupportCache[char];
|
31
|
+
}
|
32
|
+
const isSupported = fontKitFont.hasGlyphForCodePoint(char.codePointAt(0) || 0);
|
33
|
+
charSupportCache[char] = isSupported;
|
34
|
+
return isSupported;
|
35
|
+
};
|
36
|
+
|
37
|
+
const segments = text.split(/(\r\n|\n|\r)/);
|
38
|
+
|
39
|
+
return segments
|
40
|
+
.map((segment) => {
|
41
|
+
if (/\r\n|\n|\r/.test(segment)) {
|
42
|
+
return segment;
|
43
|
+
}
|
44
|
+
|
45
|
+
return segment
|
46
|
+
.split('')
|
47
|
+
.map((char) => {
|
48
|
+
if (/\s/.test(char) || char.charCodeAt(0) < 32) {
|
49
|
+
return char;
|
50
|
+
}
|
51
|
+
|
52
|
+
return isCharSupported(char) ? char : '〿';
|
53
|
+
})
|
54
|
+
.join('');
|
55
|
+
})
|
56
|
+
.join('');
|
57
|
+
};
|
58
|
+
|
24
59
|
export const uiRender = async (arg: UIRenderProps<TextSchema>) => {
|
25
|
-
const {
|
26
|
-
|
27
|
-
schema,
|
28
|
-
mode,
|
29
|
-
onChange,
|
30
|
-
stopEditing,
|
31
|
-
tabIndex,
|
32
|
-
placeholder,
|
33
|
-
options,
|
34
|
-
_cache,
|
35
|
-
} = arg;
|
60
|
+
const { value, schema, mode, onChange, stopEditing, tabIndex, placeholder, options, _cache } =
|
61
|
+
arg;
|
36
62
|
const usePlaceholder = isEditable(mode, schema) && placeholder && !value;
|
37
63
|
const getText = (element: HTMLDivElement) => {
|
38
64
|
let text = element.innerText;
|
@@ -42,26 +68,31 @@ export const uiRender = async (arg: UIRenderProps<TextSchema>) => {
|
|
42
68
|
}
|
43
69
|
return text;
|
44
70
|
};
|
71
|
+
const font = options?.font || getDefaultFont();
|
72
|
+
const [fontKitFont, textBlock] = await Promise.all([
|
73
|
+
getFontKitFont(schema.fontName, font, _cache),
|
74
|
+
buildStyledTextContainer(arg, usePlaceholder ? placeholder : value),
|
75
|
+
]);
|
45
76
|
|
46
|
-
const
|
77
|
+
const processedText = replaceUnsupportedChars(value, fontKitFont);
|
47
78
|
|
48
79
|
if (!isEditable(mode, schema)) {
|
49
80
|
// Read-only mode
|
50
|
-
textBlock.innerHTML =
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
81
|
+
textBlock.innerHTML = processedText
|
82
|
+
.split('')
|
83
|
+
.map(
|
84
|
+
(l, i) =>
|
85
|
+
`<span style="letter-spacing:${
|
86
|
+
String(value).length === i + 1 ? 0 : 'inherit'
|
87
|
+
};">${l}</span>`
|
88
|
+
)
|
89
|
+
.join('');
|
59
90
|
return;
|
60
91
|
}
|
61
92
|
|
62
93
|
makeElementPlainTextContentEditable(textBlock);
|
63
94
|
textBlock.tabIndex = tabIndex || 0;
|
64
|
-
textBlock.innerText = value;
|
95
|
+
textBlock.innerText = mode === 'designer' ? value : processedText;
|
65
96
|
textBlock.addEventListener('blur', (e: Event) => {
|
66
97
|
onChange && onChange({ key: 'content', value: getText(e.target as HTMLDivElement) });
|
67
98
|
stopEditing && stopEditing();
|
@@ -85,13 +116,12 @@ export const uiRender = async (arg: UIRenderProps<TextSchema>) => {
|
|
85
116
|
});
|
86
117
|
textBlock.style.fontSize = `${dynamicFontSize}pt`;
|
87
118
|
|
88
|
-
const { topAdj: newTopAdj, bottomAdj: newBottomAdj } =
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
);
|
119
|
+
const { topAdj: newTopAdj, bottomAdj: newBottomAdj } = getBrowserVerticalFontAdjustments(
|
120
|
+
fontKitFont,
|
121
|
+
dynamicFontSize ?? schema.fontSize ?? DEFAULT_FONT_SIZE,
|
122
|
+
schema.lineHeight ?? DEFAULT_LINE_HEIGHT,
|
123
|
+
schema.verticalAlignment ?? DEFAULT_VERTICAL_ALIGNMENT
|
124
|
+
);
|
95
125
|
textBlock.style.paddingTop = `${newTopAdj}px`;
|
96
126
|
textBlock.style.marginBottom = `${newBottomAdj}px`;
|
97
127
|
})();
|
@@ -126,13 +156,7 @@ export const uiRender = async (arg: UIRenderProps<TextSchema>) => {
|
|
126
156
|
};
|
127
157
|
|
128
158
|
export const buildStyledTextContainer = async (arg: UIRenderProps<TextSchema>, value: string) => {
|
129
|
-
const {
|
130
|
-
schema,
|
131
|
-
rootElement,
|
132
|
-
mode,
|
133
|
-
options,
|
134
|
-
_cache,
|
135
|
-
} = arg;
|
159
|
+
const { schema, rootElement, mode, options, _cache } = arg;
|
136
160
|
const font = options?.font || getDefaultFont();
|
137
161
|
|
138
162
|
let dynamicFontSize: undefined | number = undefined;
|
@@ -151,10 +175,10 @@ export const buildStyledTextContainer = async (arg: UIRenderProps<TextSchema>, v
|
|
151
175
|
// Depending on vertical alignment, we need to move the top or bottom of the font to keep
|
152
176
|
// it within it's defined box and align it with the generated pdf.
|
153
177
|
const { topAdj, bottomAdj } = getBrowserVerticalFontAdjustments(
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
178
|
+
fontKitFont,
|
179
|
+
dynamicFontSize ?? schema.fontSize ?? DEFAULT_FONT_SIZE,
|
180
|
+
schema.lineHeight ?? DEFAULT_LINE_HEIGHT,
|
181
|
+
schema.verticalAlignment ?? DEFAULT_VERTICAL_ALIGNMENT
|
158
182
|
);
|
159
183
|
|
160
184
|
const topAdjustment = topAdj.toString();
|
@@ -239,7 +263,7 @@ export const makeElementPlainTextContentEditable = (element: HTMLElement) => {
|
|
239
263
|
selection.getRangeAt(0).insertNode(document.createTextNode(paste || ''));
|
240
264
|
selection.collapseToEnd();
|
241
265
|
});
|
242
|
-
}
|
266
|
+
};
|
243
267
|
|
244
268
|
const mapVerticalAlignToFlex = (verticalAlignmentValue: string | undefined) => {
|
245
269
|
switch (verticalAlignmentValue) {
|