@pdfme/schemas 2.2.1

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.
Files changed (153) hide show
  1. package/.eslintrc.js +31 -0
  2. package/dist/cjs/__tests__/barcode.test.js +341 -0
  3. package/dist/cjs/__tests__/barcode.test.js.map +1 -0
  4. package/dist/cjs/__tests__/text.test.js +318 -0
  5. package/dist/cjs/__tests__/text.test.js.map +1 -0
  6. package/dist/cjs/src/barcodes/constants.js +19 -0
  7. package/dist/cjs/src/barcodes/constants.js.map +1 -0
  8. package/dist/cjs/src/barcodes/helper.js +147 -0
  9. package/dist/cjs/src/barcodes/helper.js.map +1 -0
  10. package/dist/cjs/src/barcodes/index.js +11 -0
  11. package/dist/cjs/src/barcodes/index.js.map +1 -0
  12. package/dist/cjs/src/barcodes/pdfRender.js +37 -0
  13. package/dist/cjs/src/barcodes/pdfRender.js.map +1 -0
  14. package/dist/cjs/src/barcodes/propPanel.js +69 -0
  15. package/dist/cjs/src/barcodes/propPanel.js.map +1 -0
  16. package/dist/cjs/src/barcodes/types.js +3 -0
  17. package/dist/cjs/src/barcodes/types.js.map +1 -0
  18. package/dist/cjs/src/barcodes/uiRender.js +92 -0
  19. package/dist/cjs/src/barcodes/uiRender.js.map +1 -0
  20. package/dist/cjs/src/image/constants.js +3 -0
  21. package/dist/cjs/src/image/constants.js.map +1 -0
  22. package/dist/cjs/src/image/helper.js +3 -0
  23. package/dist/cjs/src/image/helper.js.map +1 -0
  24. package/dist/cjs/src/image/index.js +8 -0
  25. package/dist/cjs/src/image/index.js.map +1 -0
  26. package/dist/cjs/src/image/pdfRender.js +34 -0
  27. package/dist/cjs/src/image/pdfRender.js.map +1 -0
  28. package/dist/cjs/src/image/propPanel.js +9 -0
  29. package/dist/cjs/src/image/propPanel.js.map +1 -0
  30. package/dist/cjs/src/image/types.js +3 -0
  31. package/dist/cjs/src/image/types.js.map +1 -0
  32. package/dist/cjs/src/image/uiRender.js +108 -0
  33. package/dist/cjs/src/image/uiRender.js.map +1 -0
  34. package/dist/cjs/src/index.js +13 -0
  35. package/dist/cjs/src/index.js.map +1 -0
  36. package/dist/cjs/src/renderUtils.js +65 -0
  37. package/dist/cjs/src/renderUtils.js.map +1 -0
  38. package/dist/cjs/src/text/constants.js +22 -0
  39. package/dist/cjs/src/text/constants.js.map +1 -0
  40. package/dist/cjs/src/text/helper.js +270 -0
  41. package/dist/cjs/src/text/helper.js.map +1 -0
  42. package/dist/cjs/src/text/index.js +8 -0
  43. package/dist/cjs/src/text/index.js.map +1 -0
  44. package/dist/cjs/src/text/pdfRender.js +111 -0
  45. package/dist/cjs/src/text/pdfRender.js.map +1 -0
  46. package/dist/cjs/src/text/propPanel.js +122 -0
  47. package/dist/cjs/src/text/propPanel.js.map +1 -0
  48. package/dist/cjs/src/text/types.js +3 -0
  49. package/dist/cjs/src/text/types.js.map +1 -0
  50. package/dist/cjs/src/text/uiRender.js +118 -0
  51. package/dist/cjs/src/text/uiRender.js.map +1 -0
  52. package/dist/esm/__tests__/barcode.test.js +336 -0
  53. package/dist/esm/__tests__/barcode.test.js.map +1 -0
  54. package/dist/esm/__tests__/text.test.js +293 -0
  55. package/dist/esm/__tests__/text.test.js.map +1 -0
  56. package/dist/esm/src/barcodes/constants.js +16 -0
  57. package/dist/esm/src/barcodes/constants.js.map +1 -0
  58. package/dist/esm/src/barcodes/helper.js +137 -0
  59. package/dist/esm/src/barcodes/helper.js.map +1 -0
  60. package/dist/esm/src/barcodes/index.js +9 -0
  61. package/dist/esm/src/barcodes/index.js.map +1 -0
  62. package/dist/esm/src/barcodes/pdfRender.js +33 -0
  63. package/dist/esm/src/barcodes/pdfRender.js.map +1 -0
  64. package/dist/esm/src/barcodes/propPanel.js +65 -0
  65. package/dist/esm/src/barcodes/propPanel.js.map +1 -0
  66. package/dist/esm/src/barcodes/types.js +2 -0
  67. package/dist/esm/src/barcodes/types.js.map +1 -0
  68. package/dist/esm/src/barcodes/uiRender.js +88 -0
  69. package/dist/esm/src/barcodes/uiRender.js.map +1 -0
  70. package/dist/esm/src/image/constants.js +2 -0
  71. package/dist/esm/src/image/constants.js.map +1 -0
  72. package/dist/esm/src/image/helper.js +2 -0
  73. package/dist/esm/src/image/helper.js.map +1 -0
  74. package/dist/esm/src/image/index.js +6 -0
  75. package/dist/esm/src/image/index.js.map +1 -0
  76. package/dist/esm/src/image/pdfRender.js +30 -0
  77. package/dist/esm/src/image/pdfRender.js.map +1 -0
  78. package/dist/esm/src/image/propPanel.js +6 -0
  79. package/dist/esm/src/image/propPanel.js.map +1 -0
  80. package/dist/esm/src/image/types.js +2 -0
  81. package/dist/esm/src/image/types.js.map +1 -0
  82. package/dist/esm/src/image/uiRender.js +104 -0
  83. package/dist/esm/src/image/uiRender.js.map +1 -0
  84. package/dist/esm/src/index.js +7 -0
  85. package/dist/esm/src/index.js.map +1 -0
  86. package/dist/esm/src/renderUtils.js +56 -0
  87. package/dist/esm/src/renderUtils.js.map +1 -0
  88. package/dist/esm/src/text/constants.js +19 -0
  89. package/dist/esm/src/text/constants.js.map +1 -0
  90. package/dist/esm/src/text/helper.js +237 -0
  91. package/dist/esm/src/text/helper.js.map +1 -0
  92. package/dist/esm/src/text/index.js +6 -0
  93. package/dist/esm/src/text/index.js.map +1 -0
  94. package/dist/esm/src/text/pdfRender.js +107 -0
  95. package/dist/esm/src/text/pdfRender.js.map +1 -0
  96. package/dist/esm/src/text/propPanel.js +119 -0
  97. package/dist/esm/src/text/propPanel.js.map +1 -0
  98. package/dist/esm/src/text/types.js +2 -0
  99. package/dist/esm/src/text/types.js.map +1 -0
  100. package/dist/esm/src/text/uiRender.js +114 -0
  101. package/dist/esm/src/text/uiRender.js.map +1 -0
  102. package/dist/types/__tests__/barcode.test.d.ts +1 -0
  103. package/dist/types/__tests__/text.test.d.ts +1 -0
  104. package/dist/types/src/barcodes/constants.d.ts +3 -0
  105. package/dist/types/src/barcodes/helper.d.ts +20 -0
  106. package/dist/types/src/barcodes/index.d.ts +4 -0
  107. package/dist/types/src/barcodes/pdfRender.d.ts +3 -0
  108. package/dist/types/src/barcodes/propPanel.d.ts +3 -0
  109. package/dist/types/src/barcodes/types.d.ts +9 -0
  110. package/dist/types/src/barcodes/uiRender.d.ts +3 -0
  111. package/dist/types/src/image/constants.d.ts +1 -0
  112. package/dist/types/src/image/helper.d.ts +1 -0
  113. package/dist/types/src/image/index.d.ts +4 -0
  114. package/dist/types/src/image/pdfRender.d.ts +3 -0
  115. package/dist/types/src/image/propPanel.d.ts +3 -0
  116. package/dist/types/src/image/types.d.ts +3 -0
  117. package/dist/types/src/image/uiRender.d.ts +3 -0
  118. package/dist/types/src/index.d.ts +3 -0
  119. package/dist/types/src/renderUtils.d.ts +16 -0
  120. package/dist/types/src/text/constants.d.ts +19 -0
  121. package/dist/types/src/text/helper.d.ts +29 -0
  122. package/dist/types/src/text/index.d.ts +4 -0
  123. package/dist/types/src/text/pdfRender.d.ts +3 -0
  124. package/dist/types/src/text/propPanel.d.ts +3 -0
  125. package/dist/types/src/text/types.d.ts +26 -0
  126. package/dist/types/src/text/uiRender.d.ts +3 -0
  127. package/package.json +86 -0
  128. package/src/barcodes/constants.ts +17 -0
  129. package/src/barcodes/helper.ts +161 -0
  130. package/src/barcodes/index.ts +16 -0
  131. package/src/barcodes/pdfRender.ts +29 -0
  132. package/src/barcodes/propPanel.ts +133 -0
  133. package/src/barcodes/types.ts +11 -0
  134. package/src/barcodes/uiRender.ts +116 -0
  135. package/src/image/constants.ts +1 -0
  136. package/src/image/helper.ts +1 -0
  137. package/src/image/index.ts +8 -0
  138. package/src/image/pdfRender.ts +24 -0
  139. package/src/image/propPanel.ts +8 -0
  140. package/src/image/types.ts +3 -0
  141. package/src/image/uiRender.ts +118 -0
  142. package/src/index.ts +7 -0
  143. package/src/renderUtils.ts +74 -0
  144. package/src/text/constants.ts +22 -0
  145. package/src/text/helper.ts +317 -0
  146. package/src/text/index.ts +9 -0
  147. package/src/text/pdfRender.ts +155 -0
  148. package/src/text/propPanel.ts +148 -0
  149. package/src/text/types.ts +29 -0
  150. package/src/text/uiRender.ts +153 -0
  151. package/tsconfig.cjs.json +10 -0
  152. package/tsconfig.esm.json +10 -0
  153. package/tsconfig.json +6 -0
@@ -0,0 +1,88 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { validateBarcodeInput, createBarCode } from './helper';
11
+ const fullSize = { width: '100%', height: '100%' };
12
+ const createErrorBarcodeElm = () => {
13
+ const container = document.createElement('div');
14
+ const containerStyle = Object.assign({ display: 'flex', alignItems: 'center', justifyContent: 'center' }, fullSize);
15
+ Object.assign(container.style, containerStyle);
16
+ const span = document.createElement('span');
17
+ const spanStyle = {
18
+ color: 'white',
19
+ background: 'red',
20
+ padding: '0.25rem',
21
+ fontSize: '12pt',
22
+ fontWeight: 'bold',
23
+ borderRadius: '2px',
24
+ };
25
+ Object.assign(span.style, spanStyle);
26
+ span.textContent = 'ERROR';
27
+ container.appendChild(span);
28
+ return container;
29
+ };
30
+ const blobToDataURL = (blob) => new Promise((resolve, reject) => {
31
+ const reader = new FileReader();
32
+ reader.onloadend = () => resolve(reader.result);
33
+ reader.onerror = reject;
34
+ reader.readAsDataURL(blob);
35
+ });
36
+ const createBarcodeImage = (schema, value) => __awaiter(void 0, void 0, void 0, function* () {
37
+ const imageBuf = yield createBarCode(Object.assign(Object.assign({}, schema), { input: value }));
38
+ const barcodeData = new Blob([new Uint8Array(imageBuf)], { type: 'image/png' });
39
+ const barcodeDataURL = yield blobToDataURL(barcodeData);
40
+ return barcodeDataURL;
41
+ });
42
+ const createBarcodeImageElm = (schema, value) => __awaiter(void 0, void 0, void 0, function* () {
43
+ const barcodeDataURL = yield createBarcodeImage(schema, value);
44
+ const img = document.createElement('img');
45
+ img.src = barcodeDataURL;
46
+ const imgStyle = Object.assign(Object.assign({}, fullSize), { borderRadius: 0 });
47
+ Object.assign(img.style, imgStyle);
48
+ return img;
49
+ });
50
+ export const uiRender = (arg) => __awaiter(void 0, void 0, void 0, function* () {
51
+ const { value, rootElement, mode, onChange, stopEditing, tabIndex, placeholder, schema } = arg;
52
+ const container = document.createElement('div');
53
+ const containerStyle = Object.assign(Object.assign({}, fullSize), { display: 'flex', alignItems: 'center', justifyContent: 'center', fontFamily: "'Open Sans', sans-serif" });
54
+ Object.assign(container.style, containerStyle);
55
+ rootElement.appendChild(container);
56
+ const isForm = mode === 'form';
57
+ if (isForm) {
58
+ const input = document.createElement('input');
59
+ const inputStyle = Object.assign(Object.assign({}, fullSize), { position: 'absolute', textAlign: 'center', fontSize: '1rem', color: '#000', backgroundColor: isForm || value ? 'rgb(242 244 255 / 75%)' : 'none', border: 'none', display: 'flex', alignItems: 'center', justifyContent: 'center', overflow: 'auto' });
60
+ Object.assign(input.style, inputStyle);
61
+ input.value = value;
62
+ input.placeholder = placeholder || '';
63
+ input.tabIndex = tabIndex || 0;
64
+ input.addEventListener('change', (e) => {
65
+ onChange && onChange(e.target.value);
66
+ });
67
+ input.addEventListener('blur', () => {
68
+ stopEditing && stopEditing();
69
+ });
70
+ container.appendChild(input);
71
+ input.setSelectionRange(value.length, value.length);
72
+ input.focus();
73
+ }
74
+ if (!value)
75
+ return;
76
+ try {
77
+ if (!validateBarcodeInput(schema.type, value))
78
+ throw new Error('Invalid barcode input');
79
+ const imgElm = yield createBarcodeImageElm(schema, value);
80
+ container.appendChild(imgElm);
81
+ }
82
+ catch (err) {
83
+ console.error(err);
84
+ const errorBarcodeElm = createErrorBarcodeElm();
85
+ container.appendChild(errorBarcodeElm);
86
+ }
87
+ });
88
+ //# sourceMappingURL=uiRender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uiRender.js","sourceRoot":"","sources":["../../../../src/barcodes/uiRender.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/image/constants.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../../src/image/helper.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { pdfRender } from './pdfRender';
2
+ import { propPanel } from './propPanel';
3
+ import { uiRender } from './uiRender';
4
+ const schema = { pdf: pdfRender, ui: uiRender, propPanel };
5
+ export default schema;
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/image/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,MAAM,MAAM,GAAwB,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAChF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,30 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { calcX, calcY, convertSchemaDimensionsToPt, getCacheKey } from '../renderUtils';
11
+ export const pdfRender = (arg) => __awaiter(void 0, void 0, void 0, function* () {
12
+ const { value, schema, pdfDoc, page, _cache } = arg;
13
+ const { width, height, rotate } = convertSchemaDimensionsToPt(schema);
14
+ const opt = {
15
+ x: calcX(schema.position.x, 'left', width, width),
16
+ y: calcY(schema.position.y, page.getHeight(), height),
17
+ rotate,
18
+ width,
19
+ height,
20
+ };
21
+ const inputImageCacheKey = getCacheKey(schema, value);
22
+ let image = _cache.get(inputImageCacheKey);
23
+ if (!image) {
24
+ const isPng = value.startsWith('data:image/png;');
25
+ image = yield (isPng ? pdfDoc.embedPng(value) : pdfDoc.embedJpg(value));
26
+ _cache.set(inputImageCacheKey, image);
27
+ }
28
+ page.drawImage(image, opt);
29
+ });
30
+ //# sourceMappingURL=pdfRender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdfRender.js","sourceRoot":"","sources":["../../../../src/image/pdfRender.ts"],"names":[],"mappings":";;;;;;;;;AAEA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAExF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAO,GAAgC,EAAE,EAAE;IAClE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEpD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACtE,MAAM,GAAG,GAAG;QACV,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC;QACjD,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC;QACrD,MAAM;QACN,KAAK;QACL,MAAM;KACP,CAAC;IACF,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtD,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE;QACV,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAClD,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;KACvC;IACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC7B,CAAC,CAAA,CAAC"}
@@ -0,0 +1,6 @@
1
+ export const propPanel = {
2
+ propPanelSchema: {},
3
+ defaultValue: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAu4AAALuAQMAAADL0wGJAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAGUExURbzAw+rv8fKruy0AAAPoSURBVHja7dwxbtwwEEBRCkKwRQodYftcYk+ROkcJz5NTsEuZK/AIKlIQAUEnke0VqQ0pA5zxWvFnZcD2s0CNuENxPOZBc0QDDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD/+P8bkxvnTzzjTG0M2b5rh08rHNT518aPOnTt63+aGTd23edPJ2h//ax+/oO6Gzx6c78+cuPu7x01vmwx5/6uLnO/PjO+b/rGifvtWH3VnT9vmh/e3eqx/bc9d79af2YwEPDw8P/6r8r1GVt5VcUoZPtXxGhp9rGYEM72vbEBne1hJ5Gb6ayIvwqZppi/CxmgqL8KGaTIrwc3WDfATeV/ffIryr7r+PwNvq/vsIfH17D5/qbw/gb/mLKp/OqnycFPj14yqcJPm4vfp5VJ0cP6jyzqjy9rr2q/Dr4qzBp3V5E1wxp/V3rl8LXn32qF6fAY31Psv2NXi/5lQaH+Vuzak0eLsmPRppVPa3FPiU3QiFFDZmD4FCAh6yxV+Bn7O9isLmx2d/TGHr5rI7obDxtFkcKWyb89M2+U1/sX7Kv7Io8gaxFy5l2D/faRk++3x6PgsalV52+fwUW4j/+eGhDPuneyH/otHmp9jyfHHMLM6n4phZnI/FObA4H4qDWnF+Lo46xXlflG+I864o3xDnbVG+Ic6X9RXSfCrrK6T5WBZASPOhrFCQ5ufyjF+a92XdkjTvyrolad6WdUvS/KawSI7/sQn7JfDl+O+bsF8CX44fN2FvHnNnIT4Nm7BfAl+ON5uwXwJfjA/LCuk2BXvCvN0U7InxflmAtxV1gvx0U2N3luPtdZOlwj/FoR5vbuq85Pi48F6LD0scOk3+sq1cleP9ohlNfkpq/N9pGaMuH7T4ZVqGWYt/nBavyxstftblfaVIWJU/y72yODCfzJH5oMvPh+adLm+PzCdzZD5U/61ClT9Lnvyo8e7QvFHlE3ydj0zOu5ucickhcpgcJofJedUVk8j5b/nGgIeHh4d/I3x/RwLlhgfNH3DavSwGXf7YjT76uqCEQ/P37p9z7uKVmwspd17S7hul3PXK6fbsmnvWhO6GZlMnn3ri8gXN5GzHnX0B35ydj91814CHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHl+d/A9cKjmiL040TAAAAAElFTkSuQmCC',
4
+ defaultSchema: { type: 'image', position: { x: 0, y: 0 }, width: 40, height: 40 },
5
+ };
6
+ //# sourceMappingURL=propPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propPanel.js","sourceRoot":"","sources":["../../../../src/image/propPanel.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAA2B;IAC/C,eAAe,EAAE,EAAE;IACnB,YAAY,EACV,w9CAAw9C;IAC19C,aAAa,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;CAClF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/image/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,104 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { ZOOM } from '@pdfme/common';
11
+ const fullSize = { width: '100%', height: '100%' };
12
+ const readFile = (input) => new Promise((resolve, reject) => {
13
+ const fileReader = new FileReader();
14
+ fileReader.onload = (e) => {
15
+ var _a;
16
+ if ((_a = e.target) === null || _a === void 0 ? void 0 : _a.result) {
17
+ resolve(e.target.result);
18
+ }
19
+ };
20
+ fileReader.onerror = (e) => {
21
+ reject(new Error('File reading failed'));
22
+ };
23
+ let file = null;
24
+ if (input instanceof FileList && input.length > 0) {
25
+ file = input[0];
26
+ }
27
+ else if (input instanceof File) {
28
+ file = input;
29
+ }
30
+ if (file) {
31
+ fileReader.readAsDataURL(file);
32
+ }
33
+ else {
34
+ reject(new Error('No files provided'));
35
+ }
36
+ });
37
+ export const uiRender = (arg) => __awaiter(void 0, void 0, void 0, function* () {
38
+ const { value, rootElement, mode, onChange, stopEditing, tabIndex, placeholder, schema } = arg;
39
+ const isForm = mode === 'form';
40
+ const size = { width: schema.width * ZOOM, height: schema.height * ZOOM };
41
+ const container = document.createElement('div');
42
+ const containerStyle = Object.assign(Object.assign({}, fullSize), { backgroundImage: value ? 'none' : `url(${placeholder})`, backgroundSize: `${size.width}px ${size.height}px` });
43
+ Object.assign(container.style, containerStyle);
44
+ container.addEventListener('click', (e) => {
45
+ if (isForm) {
46
+ e.stopPropagation();
47
+ }
48
+ });
49
+ rootElement.appendChild(container);
50
+ // image tag
51
+ if (value) {
52
+ const img = document.createElement('img');
53
+ const imgStyle = { height: '100%', width: '100%', borderRadius: 0 };
54
+ Object.assign(img.style, imgStyle);
55
+ img.src = value;
56
+ container.appendChild(img);
57
+ }
58
+ // remove button
59
+ if (value && isForm) {
60
+ const button = document.createElement('button');
61
+ button.textContent = 'x';
62
+ const buttonStyle = {
63
+ position: 'absolute',
64
+ top: 0,
65
+ left: 0,
66
+ zIndex: 1,
67
+ display: 'flex',
68
+ justifyContent: 'center',
69
+ alignItems: 'center',
70
+ color: '#333',
71
+ background: '#f2f2f2',
72
+ borderRadius: '2px',
73
+ border: '1px solid #767676',
74
+ cursor: 'pointer',
75
+ height: '24px',
76
+ width: '24px',
77
+ };
78
+ Object.assign(button.style, buttonStyle);
79
+ button.addEventListener('click', () => {
80
+ onChange && onChange('');
81
+ });
82
+ container.appendChild(button);
83
+ }
84
+ // file input
85
+ if (!value && isForm) {
86
+ const label = document.createElement('label');
87
+ const labelStyle = Object.assign(Object.assign({}, fullSize), { display: isForm ? 'flex' : 'none', position: 'absolute', top: 0, backgroundColor: isForm || value ? 'rgb(242 244 255 / 75%)' : 'none', cursor: 'pointer' });
88
+ Object.assign(label.style, labelStyle);
89
+ container.appendChild(label);
90
+ const input = document.createElement('input');
91
+ const inputStyle = Object.assign(Object.assign({}, fullSize), { position: 'absolute', top: '50%' });
92
+ Object.assign(input.style, inputStyle);
93
+ input.tabIndex = tabIndex || 0;
94
+ input.type = 'file';
95
+ input.accept = 'image/jpeg, image/png';
96
+ input.addEventListener('change', (event) => {
97
+ const changeEvent = event;
98
+ readFile(changeEvent.target.files).then((result) => onChange && onChange(result));
99
+ });
100
+ input.addEventListener('blur', () => stopEditing && stopEditing());
101
+ label.appendChild(input);
102
+ }
103
+ });
104
+ //# sourceMappingURL=uiRender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uiRender.js","sourceRoot":"","sources":["../../../../src/image/uiRender.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import textSchema from './text';
2
+ import imageSchema from './image';
3
+ import barcodesSchemaObj from './barcodes';
4
+ export const text = textSchema;
5
+ export const image = imageSchema;
6
+ export const barcodes = barcodesSchemaObj;
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,QAAQ,CAAC;AAChC,OAAO,WAAW,MAAM,SAAS,CAAC;AAClC,OAAO,iBAAiB,MAAM,YAAY,CAAC;AAE3C,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAC;AAC/B,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC;AACjC,MAAM,CAAC,MAAM,QAAQ,GAAG,iBAAiB,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { degrees, rgb } from '@pdfme/pdf-lib';
2
+ import { mm2pt } from '@pdfme/common';
3
+ const hex2rgb = (hex) => {
4
+ if (hex.slice(0, 1) === '#')
5
+ hex = hex.slice(1);
6
+ if (hex.length === 3)
7
+ hex =
8
+ hex.slice(0, 1) +
9
+ hex.slice(0, 1) +
10
+ hex.slice(1, 2) +
11
+ hex.slice(1, 2) +
12
+ hex.slice(2, 3) +
13
+ hex.slice(2, 3);
14
+ return [hex.slice(0, 2), hex.slice(2, 4), hex.slice(4, 6)].map((str) => parseInt(str, 16));
15
+ };
16
+ export const hex2RgbColor = (hexString) => {
17
+ if (hexString) {
18
+ const [r, g, b] = hex2rgb(hexString);
19
+ return rgb(r / 255, g / 255, b / 255);
20
+ }
21
+ // eslint-disable-next-line no-undefined
22
+ return undefined;
23
+ };
24
+ export const calcX = (x, alignment, boxWidth, textWidth) => {
25
+ let addition = 0;
26
+ if (alignment === 'center') {
27
+ addition = (boxWidth - textWidth) / 2;
28
+ }
29
+ else if (alignment === 'right') {
30
+ addition = boxWidth - textWidth;
31
+ }
32
+ return mm2pt(x) + addition;
33
+ };
34
+ export const calcY = (y, pageHeight, itemHeight) => pageHeight - mm2pt(y) - itemHeight;
35
+ export const renderBackgroundColor = (arg) => {
36
+ const { schema, page, pageHeight } = arg;
37
+ if (!schema.backgroundColor)
38
+ return;
39
+ const { width, height } = convertSchemaDimensionsToPt(schema);
40
+ const color = hex2RgbColor(schema.backgroundColor);
41
+ page.drawRectangle({
42
+ x: calcX(schema.position.x, 'left', width, width),
43
+ y: calcY(schema.position.y, pageHeight, height),
44
+ width,
45
+ height,
46
+ color,
47
+ });
48
+ };
49
+ export const convertSchemaDimensionsToPt = (schema) => {
50
+ const width = mm2pt(schema.width);
51
+ const height = mm2pt(schema.height);
52
+ const rotate = degrees(schema.rotate ? schema.rotate : 0);
53
+ return { width, height, rotate };
54
+ };
55
+ export const getCacheKey = (schema, input) => `${schema.type}${input}`;
56
+ //# sourceMappingURL=renderUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderUtils.js","sourceRoot":"","sources":["../../../src/renderUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export const DEFAULT_FONT_SIZE = 13;
2
+ export const ALIGN_LEFT = 'left';
3
+ export const ALIGN_CENTER = 'center';
4
+ export const ALIGN_RIGHT = 'right';
5
+ export const DEFAULT_ALIGNMENT = ALIGN_LEFT;
6
+ export const VERTICAL_ALIGN_TOP = 'top';
7
+ export const VERTICAL_ALIGN_MIDDLE = 'middle';
8
+ export const VERTICAL_ALIGN_BOTTOM = 'bottom';
9
+ export const DEFAULT_VERTICAL_ALIGNMENT = VERTICAL_ALIGN_TOP;
10
+ export const DEFAULT_LINE_HEIGHT = 1;
11
+ export const DEFAULT_CHARACTER_SPACING = 0;
12
+ export const DEFAULT_FONT_COLOR = '#000000';
13
+ export const DYNAMIC_FIT_VERTICAL = 'vertical';
14
+ export const DYNAMIC_FIT_HORIZONTAL = 'horizontal';
15
+ export const DEFAULT_DYNAMIC_FIT = DYNAMIC_FIT_VERTICAL;
16
+ export const DEFAULT_DYNAMIC_MIN_FONT_SIZE = 4;
17
+ export const DEFAULT_DYNAMIC_MAX_FONT_SIZE = 72;
18
+ export const FONT_SIZE_ADJUSTMENT = 0.25;
19
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/text/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC,MAAM,CAAC,MAAM,UAAU,GAAG,MAAmB,CAAC;AAC9C,MAAM,CAAC,MAAM,YAAY,GAAG,QAAqB,CAAC;AAClD,MAAM,CAAC,MAAM,WAAW,GAAG,OAAoB,CAAC;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAC5C,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAA2B,CAAC;AAC9D,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAA8B,CAAC;AACpE,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAA8B,CAAC;AACpE,MAAM,CAAC,MAAM,0BAA0B,GAAG,kBAAkB,CAAC;AAC7D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAC5C,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAmC,CAAC;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG,YAAqC,CAAC;AAC5E,MAAM,CAAC,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AACxD,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAChD,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC"}
@@ -0,0 +1,237 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import * as fontkit from 'fontkit';
11
+ import { b64toUint8Array, mm2pt, pt2mm, pt2px, getFallbackFontName, getDefaultFont, DEFAULT_FONT_NAME, } from '@pdfme/common';
12
+ import { Buffer } from 'buffer';
13
+ import { DEFAULT_FONT_SIZE, DEFAULT_CHARACTER_SPACING, DEFAULT_LINE_HEIGHT, FONT_SIZE_ADJUSTMENT, DEFAULT_DYNAMIC_FIT, DYNAMIC_FIT_HORIZONTAL, DYNAMIC_FIT_VERTICAL, VERTICAL_ALIGN_TOP, } from './constants';
14
+ export const getBrowserVerticalFontAdjustments = (fontKitFont, fontSize, lineHeight, verticalAlignment) => {
15
+ const { ascent, descent, unitsPerEm } = fontKitFont;
16
+ // Fonts have a designed line height that the browser renders when using `line-height: normal`
17
+ const fontBaseLineHeight = (ascent - descent) / unitsPerEm;
18
+ // For vertical alignment top
19
+ // To achieve consistent positioning between browser and PDF, we apply the difference between
20
+ // the font's actual height and the font size in pixels.
21
+ // Browsers middle the font within this height, so we only need half of it to apply to the top.
22
+ // This means the font renders a bit lower in the browser, but achieves PDF alignment
23
+ const topAdjustment = (fontBaseLineHeight * fontSize - fontSize) / 2;
24
+ if (verticalAlignment === VERTICAL_ALIGN_TOP) {
25
+ return { topAdj: pt2px(topAdjustment), bottomAdj: 0 };
26
+ }
27
+ // For vertical alignment bottom and middle
28
+ // When browsers render text in a non-form element (such as a <div>), some of the text may be
29
+ // lowered below and outside the containing element if the line height used is less than
30
+ // the base line-height of the font.
31
+ // This behaviour does not happen in a <textarea> though, so we need to adjust the positioning
32
+ // for consistency between editing and viewing to stop text jumping up and down.
33
+ // This portion of text is half of the difference between the base line height and the used
34
+ // line height. If using the same or higher line-height than the base font, then line-height
35
+ // takes over in the browser and this adjustment is not needed.
36
+ // Unlike the top adjustment - this is only driven by browser behaviour, not PDF alignment.
37
+ let bottomAdjustment = 0;
38
+ if (lineHeight < fontBaseLineHeight) {
39
+ bottomAdjustment = ((fontBaseLineHeight - lineHeight) * fontSize) / 2;
40
+ }
41
+ return { topAdj: 0, bottomAdj: pt2px(bottomAdjustment) };
42
+ };
43
+ export const getFontDescentInPt = (fontKitFont, fontSize) => {
44
+ const { descent, unitsPerEm } = fontKitFont;
45
+ return (descent / unitsPerEm) * fontSize;
46
+ };
47
+ export const heightOfFontAtSize = (fontKitFont, fontSize) => {
48
+ const { ascent, descent, bbox, unitsPerEm } = fontKitFont;
49
+ const scale = 1000 / unitsPerEm;
50
+ const yTop = (ascent || bbox.maxY) * scale;
51
+ const yBottom = (descent || bbox.minY) * scale;
52
+ let height = yTop - yBottom;
53
+ height -= Math.abs(descent * scale) || 0;
54
+ return (height / 1000) * fontSize;
55
+ };
56
+ const calculateCharacterSpacing = (textContent, textCharacterSpacing) => {
57
+ return (textContent.length - 1) * textCharacterSpacing;
58
+ };
59
+ export const widthOfTextAtSize = (text, fontKitFont, fontSize, characterSpacing) => {
60
+ const { glyphs } = fontKitFont.layout(text);
61
+ const scale = 1000 / fontKitFont.unitsPerEm;
62
+ const standardWidth = glyphs.reduce((totalWidth, glyph) => totalWidth + glyph.advanceWidth * scale, 0) *
63
+ (fontSize / 1000);
64
+ return standardWidth + calculateCharacterSpacing(text, characterSpacing);
65
+ };
66
+ const getFallbackFont = (font) => {
67
+ const fallbackFontName = getFallbackFontName(font);
68
+ return font[fallbackFontName];
69
+ };
70
+ const fontKitFontCache = {};
71
+ export const getFontKitFont = (textSchema, font) => __awaiter(void 0, void 0, void 0, function* () {
72
+ const fontName = textSchema.fontName || getFallbackFontName(font);
73
+ if (fontKitFontCache[fontName]) {
74
+ return fontKitFontCache[fontName];
75
+ }
76
+ const currentFont = font[fontName] || getFallbackFont(font) || getDefaultFont()[DEFAULT_FONT_NAME];
77
+ let fontData = currentFont.data;
78
+ if (typeof fontData === 'string') {
79
+ fontData = fontData.startsWith('http')
80
+ ? yield fetch(fontData).then((res) => res.arrayBuffer())
81
+ : b64toUint8Array(fontData);
82
+ }
83
+ const fontKitFont = fontkit.create(fontData instanceof Buffer ? fontData : Buffer.from(fontData));
84
+ fontKitFontCache[fontName] = fontKitFont;
85
+ return fontKitFont;
86
+ });
87
+ const isTextExceedingBoxWidth = (text, calcValues) => {
88
+ const { font, fontSize, characterSpacing, boxWidthInPt } = calcValues;
89
+ const textWidth = widthOfTextAtSize(text, font, fontSize, characterSpacing);
90
+ return textWidth > boxWidthInPt;
91
+ };
92
+ /**
93
+ * Incrementally checks the current line for its real length
94
+ * and returns the position where it exceeds the box width.
95
+ * Returns `null` to indicate if textLine is shorter than the available box.
96
+ */
97
+ const getOverPosition = (textLine, calcValues) => {
98
+ for (let i = 0; i <= textLine.length; i++) {
99
+ if (isTextExceedingBoxWidth(textLine.slice(0, i + 1), calcValues)) {
100
+ return i;
101
+ }
102
+ }
103
+ return null;
104
+ };
105
+ /**
106
+ * Gets the position of the split. Splits the exceeding line at
107
+ * the last whitespace prior to it exceeding the bounding box width.
108
+ */
109
+ const getSplitPosition = (textLine, calcValues) => {
110
+ const overPos = getOverPosition(textLine, calcValues);
111
+ if (overPos === null)
112
+ return textLine.length; // input line is shorter than the available space
113
+ let overPosTmp = overPos;
114
+ while (textLine[overPosTmp] !== ' ' && overPosTmp >= 0) {
115
+ overPosTmp--;
116
+ }
117
+ // For very long lines with no whitespace use the original overPos
118
+ return overPosTmp > 0 ? overPosTmp : overPos;
119
+ };
120
+ /**
121
+ * Recursively splits the line at getSplitPosition.
122
+ * If there is some leftover, split the rest again in the same manner.
123
+ */
124
+ export const getSplittedLines = (textLine, calcValues) => {
125
+ const splitPos = getSplitPosition(textLine, calcValues);
126
+ const splittedLine = textLine.substring(0, splitPos);
127
+ const rest = textLine.substring(splitPos).trimStart();
128
+ if (rest === textLine) {
129
+ // if we went so small that we want to split on the first char
130
+ // then end recursion to avoid infinite loop
131
+ return [textLine];
132
+ }
133
+ if (rest.length === 0) {
134
+ // end recursion if there is no leftover
135
+ return [splittedLine];
136
+ }
137
+ return [splittedLine, ...getSplittedLines(rest, calcValues)];
138
+ };
139
+ /**
140
+ * If using dynamic font size, iteratively increment or decrement the
141
+ * font size to fit the containing box.
142
+ * Calculating space usage involves splitting lines where they exceed
143
+ * the box width based on the proposed size.
144
+ */
145
+ export const calculateDynamicFontSize = ({ textSchema, font, value, startingFontSize, }) => __awaiter(void 0, void 0, void 0, function* () {
146
+ var _a;
147
+ const { fontSize: schemaFontSize, dynamicFontSize: dynamicFontSizeSetting, characterSpacing: schemaCharacterSpacing, width: boxWidth, height: boxHeight, lineHeight = DEFAULT_LINE_HEIGHT, } = textSchema;
148
+ const fontSize = startingFontSize || schemaFontSize || DEFAULT_FONT_SIZE;
149
+ if (!dynamicFontSizeSetting)
150
+ return fontSize;
151
+ if (dynamicFontSizeSetting.max < dynamicFontSizeSetting.min)
152
+ return fontSize;
153
+ const characterSpacing = schemaCharacterSpacing !== null && schemaCharacterSpacing !== void 0 ? schemaCharacterSpacing : DEFAULT_CHARACTER_SPACING;
154
+ const fontKitFont = yield getFontKitFont(textSchema, font);
155
+ const paragraphs = value.split('\n');
156
+ let dynamicFontSize = fontSize;
157
+ if (dynamicFontSize < dynamicFontSizeSetting.min) {
158
+ dynamicFontSize = dynamicFontSizeSetting.min;
159
+ }
160
+ else if (dynamicFontSize > dynamicFontSizeSetting.max) {
161
+ dynamicFontSize = dynamicFontSizeSetting.max;
162
+ }
163
+ const dynamicFontFit = (_a = dynamicFontSizeSetting.fit) !== null && _a !== void 0 ? _a : DEFAULT_DYNAMIC_FIT;
164
+ const calculateConstraints = (size) => {
165
+ let totalWidthInMm = 0;
166
+ let totalHeightInMm = 0;
167
+ const boxWidthInPt = mm2pt(boxWidth);
168
+ const firstLineTextHeight = heightOfFontAtSize(fontKitFont, size);
169
+ const firstLineHeightInMm = pt2mm(firstLineTextHeight * lineHeight);
170
+ const otherRowHeightInMm = pt2mm(size * lineHeight);
171
+ paragraphs.forEach((paragraph, paraIndex) => {
172
+ const lines = getSplittedLines(paragraph, {
173
+ font: fontKitFont,
174
+ fontSize: size,
175
+ characterSpacing,
176
+ boxWidthInPt,
177
+ });
178
+ lines.forEach((line, lineIndex) => {
179
+ if (dynamicFontFit === DYNAMIC_FIT_VERTICAL) {
180
+ // For vertical fit we want to consider the width of text lines where we detect a split
181
+ const textWidth = widthOfTextAtSize(line, fontKitFont, size, characterSpacing);
182
+ const textWidthInMm = pt2mm(textWidth);
183
+ totalWidthInMm = Math.max(totalWidthInMm, textWidthInMm);
184
+ }
185
+ if (paraIndex + lineIndex === 0) {
186
+ totalHeightInMm += firstLineHeightInMm;
187
+ }
188
+ else {
189
+ totalHeightInMm += otherRowHeightInMm;
190
+ }
191
+ });
192
+ if (dynamicFontFit === DYNAMIC_FIT_HORIZONTAL) {
193
+ // For horizontal fit we want to consider the line's width 'unsplit'
194
+ const textWidth = widthOfTextAtSize(paragraph, fontKitFont, size, characterSpacing);
195
+ const textWidthInMm = pt2mm(textWidth);
196
+ totalWidthInMm = Math.max(totalWidthInMm, textWidthInMm);
197
+ }
198
+ });
199
+ return { totalWidthInMm, totalHeightInMm };
200
+ };
201
+ const shouldFontGrowToFit = (totalWidthInMm, totalHeightInMm) => {
202
+ if (dynamicFontSize >= dynamicFontSizeSetting.max) {
203
+ return false;
204
+ }
205
+ if (dynamicFontFit === DYNAMIC_FIT_HORIZONTAL) {
206
+ return totalWidthInMm < boxWidth;
207
+ }
208
+ return totalHeightInMm < boxHeight;
209
+ };
210
+ const shouldFontShrinkToFit = (totalWidthInMm, totalHeightInMm) => {
211
+ if (dynamicFontSize <= dynamicFontSizeSetting.min || dynamicFontSize <= 0) {
212
+ return false;
213
+ }
214
+ return totalWidthInMm > boxWidth || totalHeightInMm > boxHeight;
215
+ };
216
+ let { totalWidthInMm, totalHeightInMm } = calculateConstraints(dynamicFontSize);
217
+ // Attempt to increase the font size up to desired fit
218
+ while (shouldFontGrowToFit(totalWidthInMm, totalHeightInMm)) {
219
+ dynamicFontSize += FONT_SIZE_ADJUSTMENT;
220
+ const { totalWidthInMm: newWidth, totalHeightInMm: newHeight } = calculateConstraints(dynamicFontSize);
221
+ if (newHeight < boxHeight) {
222
+ totalWidthInMm = newWidth;
223
+ totalHeightInMm = newHeight;
224
+ }
225
+ else {
226
+ dynamicFontSize -= FONT_SIZE_ADJUSTMENT;
227
+ break;
228
+ }
229
+ }
230
+ // Attempt to decrease the font size down to desired fit
231
+ while (shouldFontShrinkToFit(totalWidthInMm, totalHeightInMm)) {
232
+ dynamicFontSize -= FONT_SIZE_ADJUSTMENT;
233
+ ({ totalWidthInMm, totalHeightInMm } = calculateConstraints(dynamicFontSize));
234
+ }
235
+ return dynamicFontSize;
236
+ });
237
+ //# sourceMappingURL=helper.js.map