@react-pdf/stylesheet 5.0.0 → 5.1.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 +32 -11
- 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';
|
|
@@ -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'
|
|
@@ -443,6 +443,8 @@ const transformUnit = (container, value) => {
|
|
|
443
443
|
const mmFactor = 1 / 25.4 * dpi;
|
|
444
444
|
const cmFactor = 1 / 2.54 * dpi;
|
|
445
445
|
switch (scalar.unit) {
|
|
446
|
+
case 'rem':
|
|
447
|
+
return scalar.value * (container.remBase || 18);
|
|
446
448
|
case 'in':
|
|
447
449
|
return scalar.value * dpi;
|
|
448
450
|
case 'mm':
|
|
@@ -497,7 +499,7 @@ const transformColor = value => {
|
|
|
497
499
|
};
|
|
498
500
|
|
|
499
501
|
const parse = transformString => {
|
|
500
|
-
const transforms = transformString.trim().split(/\) |\)/);
|
|
502
|
+
const transforms = transformString.trim().split(/\)[ ,]|\)/);
|
|
501
503
|
|
|
502
504
|
// Handle "initial", "inherit", "unset".
|
|
503
505
|
if (transforms.length === 1) {
|
|
@@ -511,7 +513,7 @@ const parse = transformString => {
|
|
|
511
513
|
const splitChar = rawValue.indexOf(',') >= 0 ? ',' : ' ';
|
|
512
514
|
const value = rawValue.split(splitChar).map(val => val.trim());
|
|
513
515
|
parsed.push({
|
|
514
|
-
operation: name,
|
|
516
|
+
operation: name.trim(),
|
|
515
517
|
value
|
|
516
518
|
});
|
|
517
519
|
}
|
|
@@ -642,6 +644,24 @@ const processFontWeight = value => {
|
|
|
642
644
|
return value;
|
|
643
645
|
};
|
|
644
646
|
|
|
647
|
+
/* eslint-disable no-restricted-globals */
|
|
648
|
+
|
|
649
|
+
const processLineHeight = (value, styles) => {
|
|
650
|
+
if (value === '') return value;
|
|
651
|
+
const {
|
|
652
|
+
fontSize = 18
|
|
653
|
+
} = styles;
|
|
654
|
+
|
|
655
|
+
// Percent values: use this number multiplied by the element's font size
|
|
656
|
+
const {
|
|
657
|
+
percent
|
|
658
|
+
} = matchPercent(value) || {};
|
|
659
|
+
if (percent) return percent * fontSize;
|
|
660
|
+
|
|
661
|
+
// Unitless values: use this number multiplied by the element's font size
|
|
662
|
+
return isNaN(value) ? value : value * fontSize;
|
|
663
|
+
};
|
|
664
|
+
|
|
645
665
|
const matchNumber = value => typeof value === 'string' && /^-?\d*\.?\d*$/.test(value);
|
|
646
666
|
const castFloat = value => {
|
|
647
667
|
if (typeof value !== 'string') return value;
|
|
@@ -671,13 +691,14 @@ const transformTransformOrigin = value => offsetKeyword(value) || castFloat(valu
|
|
|
671
691
|
const handlers = {
|
|
672
692
|
transform: processTransform,
|
|
673
693
|
fontWeight: processFontWeight,
|
|
694
|
+
lineHeight: processLineHeight,
|
|
674
695
|
objectPositionX: transformObjectPosition,
|
|
675
696
|
objectPositionY: transformObjectPosition,
|
|
676
697
|
transformOriginX: transformTransformOrigin,
|
|
677
698
|
transformOriginY: transformTransformOrigin
|
|
678
699
|
};
|
|
679
|
-
const transformStyle = (key, value, container) => {
|
|
680
|
-
const result = handlers[key] ? handlers[key](value) : value;
|
|
700
|
+
const transformStyle = (key, value, styles, container) => {
|
|
701
|
+
const result = handlers[key] ? handlers[key](value, styles) : value;
|
|
681
702
|
return transformColor(transformUnit(container, castFloat(result)));
|
|
682
703
|
};
|
|
683
704
|
|
|
@@ -693,14 +714,14 @@ const transformStyle = (key, value, container) => {
|
|
|
693
714
|
* @param {Object} container
|
|
694
715
|
* @returns {Transform} transform function
|
|
695
716
|
*/
|
|
696
|
-
const transform = container =>
|
|
697
|
-
if (!
|
|
698
|
-
const propsArray = Object.keys(
|
|
717
|
+
const transform = container => styles => {
|
|
718
|
+
if (!styles) return styles;
|
|
719
|
+
const propsArray = Object.keys(styles);
|
|
699
720
|
const resolvedStyle = {};
|
|
700
721
|
for (let i = 0; i < propsArray.length; i += 1) {
|
|
701
722
|
const key = propsArray[i];
|
|
702
|
-
const value =
|
|
703
|
-
const transformed = transformStyle(key, value, container);
|
|
723
|
+
const value = styles[key];
|
|
724
|
+
const transformed = transformStyle(key, value, styles, container);
|
|
704
725
|
resolvedStyle[key] = transformed;
|
|
705
726
|
}
|
|
706
727
|
return resolvedStyle;
|