@react-pdf/stylesheet 5.0.1 → 5.2.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/lib/index.js +38 -14
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { compose, castArray } from '@react-pdf/fns';
|
|
1
|
+
import { compose, castArray, matchPercent } from '@react-pdf/fns';
|
|
2
2
|
import parse$1 from 'postcss-value-parser/lib/parse.js';
|
|
3
3
|
import parseUnit from 'postcss-value-parser/lib/unit.js';
|
|
4
4
|
import hlsToHex from 'hsl-to-hex';
|
|
@@ -162,7 +162,7 @@ const processMarginSingle = expandBoxModel({
|
|
|
162
162
|
autoSupported: true
|
|
163
163
|
});
|
|
164
164
|
|
|
165
|
-
const BORDER_SHORTHAND_REGEX = /(-?\d+(\.\d+)?(
|
|
165
|
+
const BORDER_SHORTHAND_REGEX = /(-?\d+(\.\d+)?(in|mm|cm|pt|vw|vh|px|rem)?)\s(\S+)\s(.+)/;
|
|
166
166
|
const matchBorderShorthand = value => value.match(BORDER_SHORTHAND_REGEX) || [];
|
|
167
167
|
const expandBorders = (key, value) => {
|
|
168
168
|
const match = matchBorderShorthand(`${value}`);
|
|
@@ -420,7 +420,7 @@ const flatten = compose(mergeStyles, compact, castArray);
|
|
|
420
420
|
* @returns {Object} parsed value
|
|
421
421
|
*/
|
|
422
422
|
const parseValue = value => {
|
|
423
|
-
const match = /^(-?\d*\.?\d+)(in|mm|cm|pt|vh|vw|px)?$/g.exec(value);
|
|
423
|
+
const match = /^(-?\d*\.?\d+)(in|mm|cm|pt|vh|vw|px|rem)?$/g.exec(value);
|
|
424
424
|
return match ? {
|
|
425
425
|
value: parseFloat(match[1]),
|
|
426
426
|
unit: match[2] || 'pt'
|
|
@@ -439,12 +439,15 @@ const parseValue = value => {
|
|
|
439
439
|
*/
|
|
440
440
|
const transformUnit = (container, value) => {
|
|
441
441
|
const scalar = parseValue(value);
|
|
442
|
-
const
|
|
443
|
-
const
|
|
444
|
-
const
|
|
442
|
+
const outputDpi = 72;
|
|
443
|
+
const inputDpi = container.dpi || 72;
|
|
444
|
+
const mmFactor = 1 / 25.4 * outputDpi;
|
|
445
|
+
const cmFactor = 1 / 2.54 * outputDpi;
|
|
445
446
|
switch (scalar.unit) {
|
|
447
|
+
case 'rem':
|
|
448
|
+
return scalar.value * (container.remBase || 18);
|
|
446
449
|
case 'in':
|
|
447
|
-
return scalar.value *
|
|
450
|
+
return scalar.value * outputDpi;
|
|
448
451
|
case 'mm':
|
|
449
452
|
return scalar.value * mmFactor;
|
|
450
453
|
case 'cm':
|
|
@@ -453,6 +456,8 @@ const transformUnit = (container, value) => {
|
|
|
453
456
|
return scalar.value * (container.height / 100);
|
|
454
457
|
case 'vw':
|
|
455
458
|
return scalar.value * (container.width / 100);
|
|
459
|
+
case 'px':
|
|
460
|
+
return Math.round(scalar.value * (outputDpi / inputDpi));
|
|
456
461
|
default:
|
|
457
462
|
return scalar.value;
|
|
458
463
|
}
|
|
@@ -642,6 +647,24 @@ const processFontWeight = value => {
|
|
|
642
647
|
return value;
|
|
643
648
|
};
|
|
644
649
|
|
|
650
|
+
/* eslint-disable no-restricted-globals */
|
|
651
|
+
|
|
652
|
+
const processLineHeight = (value, styles) => {
|
|
653
|
+
if (value === '') return value;
|
|
654
|
+
const {
|
|
655
|
+
fontSize = 18
|
|
656
|
+
} = styles;
|
|
657
|
+
|
|
658
|
+
// Percent values: use this number multiplied by the element's font size
|
|
659
|
+
const {
|
|
660
|
+
percent
|
|
661
|
+
} = matchPercent(value) || {};
|
|
662
|
+
if (percent) return percent * fontSize;
|
|
663
|
+
|
|
664
|
+
// Unitless values: use this number multiplied by the element's font size
|
|
665
|
+
return isNaN(value) ? value : value * fontSize;
|
|
666
|
+
};
|
|
667
|
+
|
|
645
668
|
const matchNumber = value => typeof value === 'string' && /^-?\d*\.?\d*$/.test(value);
|
|
646
669
|
const castFloat = value => {
|
|
647
670
|
if (typeof value !== 'string') return value;
|
|
@@ -671,13 +694,14 @@ const transformTransformOrigin = value => offsetKeyword(value) || castFloat(valu
|
|
|
671
694
|
const handlers = {
|
|
672
695
|
transform: processTransform,
|
|
673
696
|
fontWeight: processFontWeight,
|
|
697
|
+
lineHeight: processLineHeight,
|
|
674
698
|
objectPositionX: transformObjectPosition,
|
|
675
699
|
objectPositionY: transformObjectPosition,
|
|
676
700
|
transformOriginX: transformTransformOrigin,
|
|
677
701
|
transformOriginY: transformTransformOrigin
|
|
678
702
|
};
|
|
679
|
-
const transformStyle = (key, value, container) => {
|
|
680
|
-
const result = handlers[key] ? handlers[key](value) : value;
|
|
703
|
+
const transformStyle = (key, value, styles, container) => {
|
|
704
|
+
const result = handlers[key] ? handlers[key](value, styles) : value;
|
|
681
705
|
return transformColor(transformUnit(container, castFloat(result)));
|
|
682
706
|
};
|
|
683
707
|
|
|
@@ -693,14 +717,14 @@ const transformStyle = (key, value, container) => {
|
|
|
693
717
|
* @param {Object} container
|
|
694
718
|
* @returns {Transform} transform function
|
|
695
719
|
*/
|
|
696
|
-
const transform = container =>
|
|
697
|
-
if (!
|
|
698
|
-
const propsArray = Object.keys(
|
|
720
|
+
const transform = container => styles => {
|
|
721
|
+
if (!styles) return styles;
|
|
722
|
+
const propsArray = Object.keys(styles);
|
|
699
723
|
const resolvedStyle = {};
|
|
700
724
|
for (let i = 0; i < propsArray.length; i += 1) {
|
|
701
725
|
const key = propsArray[i];
|
|
702
|
-
const value =
|
|
703
|
-
const transformed = transformStyle(key, value, container);
|
|
726
|
+
const value = styles[key];
|
|
727
|
+
const transformed = transformStyle(key, value, styles, container);
|
|
704
728
|
resolvedStyle[key] = transformed;
|
|
705
729
|
}
|
|
706
730
|
return resolvedStyle;
|