@react-pdf/stylesheet 5.0.1 → 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.
Files changed (2) hide show
  1. package/lib/index.js +30 -9
  2. 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':
@@ -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 => style => {
697
- if (!style) return style;
698
- const propsArray = Object.keys(style);
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 = style[key];
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-pdf/stylesheet",
3
- "version": "5.0.1",
3
+ "version": "5.1.0",
4
4
  "license": "MIT",
5
5
  "description": "A styles engine for Node and the browser",
6
6
  "author": "Diego Muracciole <diegomuracciole@gmail.com>",