@micromag/core 0.3.418 → 0.3.420

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/es/components.js CHANGED
@@ -3827,7 +3827,7 @@ var Placeholder = /*#__PURE__*/React.memo(ScreenPlaceholder);
3827
3827
 
3828
3828
  var styles$6 = {"stack":"micromag-core-screens-preview-stack","stackScreen":"micromag-core-screens-preview-stackScreen","stackItem":"micromag-core-screens-preview-stackItem","screen":"micromag-core-screens-preview-screen"};
3829
3829
 
3830
- var _excluded = ["screen", "screenState", "width", "height", "screenWidth", "screenHeight", "className", "withSize"];
3830
+ var _excluded = ["screen", "screenState", "width", "height", "screenWidth", "screenHeight", "className", "withSize", "hidden"];
3831
3831
  var propTypes$7 = {
3832
3832
  screen: PropTypes.component.isRequired,
3833
3833
  screenState: PropTypes$1.string,
@@ -3836,7 +3836,8 @@ var propTypes$7 = {
3836
3836
  screenWidth: PropTypes$1.number,
3837
3837
  screenHeight: PropTypes$1.number,
3838
3838
  className: PropTypes$1.string,
3839
- withSize: PropTypes$1.bool
3839
+ withSize: PropTypes$1.bool,
3840
+ hidden: PropTypes$1.bool
3840
3841
  };
3841
3842
  var defaultProps$7 = {
3842
3843
  screenState: null,
@@ -3845,7 +3846,8 @@ var defaultProps$7 = {
3845
3846
  screenWidth: undefined,
3846
3847
  screenHeight: undefined,
3847
3848
  className: null,
3848
- withSize: false
3849
+ withSize: false,
3850
+ hidden: false
3849
3851
  };
3850
3852
  var ScreenPreview = function ScreenPreview(_ref) {
3851
3853
  var screen = _ref.screen,
@@ -3856,6 +3858,7 @@ var ScreenPreview = function ScreenPreview(_ref) {
3856
3858
  screenHeight = _ref.screenHeight,
3857
3859
  className = _ref.className,
3858
3860
  withSize = _ref.withSize,
3861
+ hidden = _ref.hidden,
3859
3862
  props = _objectWithoutProperties(_ref, _excluded);
3860
3863
  var screenElement = /*#__PURE__*/React.createElement(Screen$1, Object.assign({
3861
3864
  screen: screen,
@@ -3865,13 +3868,14 @@ var ScreenPreview = function ScreenPreview(_ref) {
3865
3868
  height: !withSize ? height : undefined,
3866
3869
  className: classNames([styles$6.screen, _defineProperty({}, className, !withSize)])
3867
3870
  }, props));
3871
+ var element = !hidden ? screenElement : /*#__PURE__*/React.createElement("div", null);
3868
3872
  var screenWithSize = withSize ? /*#__PURE__*/React.createElement(ScreenSizer, {
3869
3873
  className: className,
3870
3874
  screenWidth: screenWidth,
3871
3875
  screenHeight: screenHeight,
3872
3876
  width: width,
3873
3877
  height: height
3874
- }, screenElement) : screenElement;
3878
+ }, element) : element;
3875
3879
  return screenWithSize;
3876
3880
  };
3877
3881
  ScreenPreview.propTypes = propTypes$7;
package/es/index.js CHANGED
@@ -1156,7 +1156,8 @@ var FieldsManager = /*#__PURE__*/function (_DefinitionsManager) {
1156
1156
  return FieldsManager;
1157
1157
  }(DefinitionsManager);
1158
1158
 
1159
- var _excluded$4 = ["medias"];
1159
+ var _excluded$4 = ["medias"],
1160
+ _excluded2$2 = ["medias"];
1160
1161
  var MediasParser = /*#__PURE__*/function () {
1161
1162
  function MediasParser(_ref) {
1162
1163
  var fieldsManager = _ref.fieldsManager,
@@ -1165,8 +1166,23 @@ var MediasParser = /*#__PURE__*/function () {
1165
1166
  this.fieldsManager = fieldsManager;
1166
1167
  this.screensManager = screensManager;
1167
1168
  this.fieldsPatternCache = {};
1169
+ this.parsedThemesCache = {};
1168
1170
  }
1169
1171
  _createClass(MediasParser, [{
1172
+ key: "getParsedStoryTheme",
1173
+ value: function getParsedStoryTheme(storyId, theme) {
1174
+ if (typeof this.parsedThemesCache[storyId] === 'undefined') {
1175
+ var _this$toPath = this.toPath(theme),
1176
+ themeMedias = _this$toPath.medias,
1177
+ newTheme = _objectWithoutProperties(_this$toPath, _excluded$4);
1178
+ this.parsedThemesCache[storyId] = {
1179
+ themeMedias: themeMedias,
1180
+ newTheme: newTheme
1181
+ };
1182
+ }
1183
+ return this.parsedThemesCache[storyId];
1184
+ }
1185
+ }, {
1170
1186
  key: "getFieldsPatternByScreen",
1171
1187
  value: function getFieldsPatternByScreen(type) {
1172
1188
  if (typeof this.fieldsPatternCache[type] === 'undefined') {
@@ -1187,6 +1203,8 @@ var MediasParser = /*#__PURE__*/function () {
1187
1203
  return story;
1188
1204
  }
1189
1205
  var _ref3 = story || {},
1206
+ _ref3$id = _ref3.id,
1207
+ storyId = _ref3$id === void 0 ? null : _ref3$id,
1190
1208
  _ref3$theme = _ref3.theme,
1191
1209
  theme = _ref3$theme === void 0 ? null : _ref3$theme,
1192
1210
  _ref3$components = _ref3.components,
@@ -1210,9 +1228,9 @@ var MediasParser = /*#__PURE__*/function () {
1210
1228
  newComponents = _components$reduce.components,
1211
1229
  medias = _components$reduce.medias;
1212
1230
  if (theme !== null) {
1213
- var _this$toPath = this.toPath(theme),
1214
- themeMedias = _this$toPath.medias,
1215
- newTheme = _objectWithoutProperties(_this$toPath, _excluded$4);
1231
+ var _this$getParsedStoryT = this.getParsedStoryTheme(storyId, theme),
1232
+ themeMedias = _this$getParsedStoryT.medias,
1233
+ newTheme = _objectWithoutProperties(_this$getParsedStoryT, _excluded2$2);
1216
1234
  return medias !== null || themeMedias !== null ? _objectSpread(_objectSpread({}, story), {}, {
1217
1235
  theme: newTheme,
1218
1236
  components: newComponents,
@@ -1641,6 +1659,7 @@ var ThemeParser = /*#__PURE__*/function () {
1641
1659
  _classCallCheck(this, ThemeParser);
1642
1660
  this.screensManager = screensManager;
1643
1661
  this.definitionCache = {};
1662
+ this.fieldsCache = {};
1644
1663
  }
1645
1664
  _createClass(ThemeParser, [{
1646
1665
  key: "getDefinitionByScreen",
@@ -1657,6 +1676,54 @@ var ThemeParser = /*#__PURE__*/function () {
1657
1676
  }
1658
1677
  return this.definitionCache[type];
1659
1678
  }
1679
+ }, {
1680
+ key: "getFieldsForDefinition",
1681
+ value: function getFieldsForDefinition(definition) {
1682
+ var _ref2 = definition || {},
1683
+ _ref2$id = _ref2.id,
1684
+ definitionId = _ref2$id === void 0 ? null : _ref2$id,
1685
+ _ref2$fields = _ref2.fields,
1686
+ fields = _ref2$fields === void 0 ? [] : _ref2$fields,
1687
+ _ref2$states = _ref2.states,
1688
+ states = _ref2$states === void 0 ? [] : _ref2$states;
1689
+ if (typeof this.fieldsCache[definitionId] === 'undefined') {
1690
+ if (states === null || states.length === 0) {
1691
+ this.fieldsCache[definitionId] = {
1692
+ fields: fields
1693
+ };
1694
+ } else {
1695
+ // TODO: test this
1696
+ var finalFields = fields;
1697
+ var repetableStates = [];
1698
+ if (states !== null && states.length > 0) {
1699
+ var nonRepetableStates = states.filter(function (_ref3) {
1700
+ var _ref3$repeatable = _ref3.repeatable,
1701
+ repeatable = _ref3$repeatable === void 0 ? false : _ref3$repeatable;
1702
+ return repeatable === false;
1703
+ });
1704
+ repetableStates = states.filter(function (_ref4) {
1705
+ var _ref4$repeatable = _ref4.repeatable,
1706
+ repeatable = _ref4$repeatable === void 0 ? false : _ref4$repeatable;
1707
+ return repeatable === true;
1708
+ });
1709
+ finalFields = nonRepetableStates.reduce(function (acc, it) {
1710
+ var _ref5 = it || {},
1711
+ _ref5$fields = _ref5.fields,
1712
+ itemFields = _ref5$fields === void 0 ? [] : _ref5$fields;
1713
+ if (itemFields !== null && itemFields.length > 0) {
1714
+ return acc.concat(itemFields);
1715
+ }
1716
+ return acc;
1717
+ }, finalFields);
1718
+ }
1719
+ this.fieldsCache[definitionId] = {
1720
+ fields: finalFields,
1721
+ repetableStates: repetableStates
1722
+ };
1723
+ }
1724
+ }
1725
+ return this.fieldsCache[definitionId];
1726
+ }
1660
1727
  }, {
1661
1728
  key: "parse",
1662
1729
  value: function parse(story) {
@@ -1664,11 +1731,11 @@ var ThemeParser = /*#__PURE__*/function () {
1664
1731
  if (story === null) {
1665
1732
  return story;
1666
1733
  }
1667
- var _ref2 = story || {},
1668
- _ref2$theme = _ref2.theme,
1669
- theme = _ref2$theme === void 0 ? null : _ref2$theme,
1670
- _ref2$components = _ref2.components,
1671
- components = _ref2$components === void 0 ? null : _ref2$components;
1734
+ var _ref6 = story || {},
1735
+ _ref6$theme = _ref6.theme,
1736
+ theme = _ref6$theme === void 0 ? null : _ref6$theme,
1737
+ _ref6$components = _ref6.components,
1738
+ components = _ref6$components === void 0 ? null : _ref6$components;
1672
1739
  if (theme === null || components === null) {
1673
1740
  return story;
1674
1741
  }
@@ -1682,6 +1749,33 @@ var ThemeParser = /*#__PURE__*/function () {
1682
1749
  themeTextStyles = _theme$textStyles === void 0 ? null : _theme$textStyles,
1683
1750
  _theme$boxStyles = theme.boxStyles,
1684
1751
  themeBoxStyles = _theme$boxStyles === void 0 ? null : _theme$boxStyles;
1752
+
1753
+ // Speed test
1754
+ // const newComponents = [...components];
1755
+ // for (let index = 0; index < components.length; index += 1) {
1756
+ // const screen = components[index] || {};
1757
+ // const { type } = screen;
1758
+ // const { definition, themeScreen } = this.getDefinitionByScreen(type, themeComponents);
1759
+ // const newScreen = this.parseScreen(
1760
+ // definition,
1761
+ // screen,
1762
+ // themeScreen,
1763
+ // themeBackground,
1764
+ // themeColors,
1765
+ // themeTextStyles,
1766
+ // themeBoxStyles,
1767
+ // );
1768
+
1769
+ // if (newScreen !== screen || themeScreen !== null) {
1770
+ // newComponents[index] = {
1771
+ // ...themeScreen,
1772
+ // ...newScreen,
1773
+ // };
1774
+ // }
1775
+ // }
1776
+ // story.components = newComponents;
1777
+ // return story;
1778
+
1685
1779
  var newComponents = components.reduce(function (currentComponents, screen, index) {
1686
1780
  var type = screen.type;
1687
1781
  var _this$getDefinitionBy = _this.getDefinitionByScreen(type, themeComponents),
@@ -1700,36 +1794,11 @@ var ThemeParser = /*#__PURE__*/function () {
1700
1794
  key: "parseScreen",
1701
1795
  value: function parseScreen(definition, value, themeValue, themeBackground, themeColors, themeTextStyles, themeBoxStyles) {
1702
1796
  var _this2 = this;
1703
- var _ref3 = definition || {},
1704
- _ref3$fields = _ref3.fields,
1705
- fields = _ref3$fields === void 0 ? [] : _ref3$fields,
1706
- _ref3$states = _ref3.states,
1707
- states = _ref3$states === void 0 ? [] : _ref3$states;
1708
-
1709
- // TODO: test this
1710
- var finalFields = fields;
1711
- var repetableStates = [];
1712
- if (states !== null && states.length > 0) {
1713
- var nonRepetableStates = states.filter(function (_ref4) {
1714
- var _ref4$repeatable = _ref4.repeatable,
1715
- repeatable = _ref4$repeatable === void 0 ? false : _ref4$repeatable;
1716
- return repeatable === false;
1717
- });
1718
- repetableStates = states.filter(function (_ref5) {
1719
- var _ref5$repeatable = _ref5.repeatable,
1720
- repeatable = _ref5$repeatable === void 0 ? false : _ref5$repeatable;
1721
- return repeatable === true;
1722
- });
1723
- finalFields = nonRepetableStates.reduce(function (acc, it) {
1724
- var _ref6 = it || {},
1725
- _ref6$fields = _ref6.fields,
1726
- itemFields = _ref6$fields === void 0 ? [] : _ref6$fields;
1727
- if (itemFields !== null && itemFields.length > 0) {
1728
- return acc.concat(itemFields);
1729
- }
1730
- return acc;
1731
- }, finalFields);
1732
- }
1797
+ var _this$getFieldsForDef = this.getFieldsForDefinition(definition),
1798
+ _this$getFieldsForDef2 = _this$getFieldsForDef.fields,
1799
+ fields = _this$getFieldsForDef2 === void 0 ? null : _this$getFieldsForDef2,
1800
+ _this$getFieldsForDef3 = _this$getFieldsForDef.repetableStates,
1801
+ repetableStates = _this$getFieldsForDef3 === void 0 ? null : _this$getFieldsForDef3;
1733
1802
  var newThemeValue = themeValue === null && themeBackground !== null ? {} : themeValue;
1734
1803
  if (themeBackground !== null && typeof newThemeValue.background !== 'undefined') {
1735
1804
  newThemeValue.background = _objectSpread(_objectSpread({}, themeBackground), newThemeValue.background);
@@ -1738,23 +1807,33 @@ var ThemeParser = /*#__PURE__*/function () {
1738
1807
  }
1739
1808
  var newScreenValue = Object.keys(value).reduce(function (currentValue, key) {
1740
1809
  var repetableState = null;
1741
- if (repetableStates.length > 0) {
1810
+ if (repetableStates !== null && repetableStates.length > 0) {
1742
1811
  repetableState = repetableStates.find(function (_ref7) {
1743
1812
  var _ref7$id = _ref7.id,
1744
1813
  stateId = _ref7$id === void 0 ? null : _ref7$id;
1745
1814
  return stateId !== null && stateId === key;
1746
1815
  }) || null;
1747
1816
  }
1748
- var fieldDefinition = finalFields.find(function (it) {
1817
+ var fieldDefinition = (fields || null).find(function (it) {
1749
1818
  return it.name === key;
1750
1819
  }) || repetableState || {};
1751
1820
  var fieldValue = value[key];
1752
1821
  var fieldThemeValue = newThemeValue !== null ? newThemeValue[key] || null : null;
1753
1822
 
1823
+ // Try for early return
1824
+ var _ref8 = fieldDefinition || {},
1825
+ _ref8$theme = _ref8.theme,
1826
+ theme = _ref8$theme === void 0 ? null : _ref8$theme;
1827
+ if ((theme === null || !isObject(theme)) && fields === null) {
1828
+ return _objectSpread(_objectSpread({}, currentValue), {}, _defineProperty({}, key, fieldValue));
1829
+ }
1830
+
1754
1831
  // console.log('start', key, fieldValue);
1755
1832
  var newFieldValue = _this2.parseField(fieldValue, fieldDefinition, fieldThemeValue, themeColors, themeTextStyles, themeBoxStyles);
1756
1833
  // console.log('result', newFieldValue);
1757
1834
 
1835
+ // const newFieldValue = fieldValue;
1836
+
1758
1837
  // Only switch field if it has changed
1759
1838
  return newFieldValue !== fieldValue ? _objectSpread(_objectSpread({}, currentValue), {}, _defineProperty({}, key, newFieldValue)) : currentValue;
1760
1839
  }, value);
@@ -1764,12 +1843,14 @@ var ThemeParser = /*#__PURE__*/function () {
1764
1843
  // eslint-disable-next-line class-methods-use-this
1765
1844
  }, {
1766
1845
  key: "parseField",
1767
- value: function parseField(value, definition, themeValue, themeColors, themeTextStyles, themeBoxStyles) {
1846
+ value: function parseField(value, fieldDefinition, themeValue, themeColors, themeTextStyles, themeBoxStyles) {
1768
1847
  var _this3 = this;
1769
- var _definition$theme = definition.theme,
1770
- fieldTheme = _definition$theme === void 0 ? null : _definition$theme,
1771
- _definition$fields = definition.fields,
1772
- definitionFields = _definition$fields === void 0 ? null : _definition$fields;
1848
+ var _fieldDefinition$them = fieldDefinition.theme,
1849
+ fieldTheme = _fieldDefinition$them === void 0 ? null : _fieldDefinition$them,
1850
+ _fieldDefinition$fiel = fieldDefinition.fields,
1851
+ definitionFields = _fieldDefinition$fiel === void 0 ? null : _fieldDefinition$fiel;
1852
+
1853
+ // There are sub-fields in this definition
1773
1854
  if (definitionFields !== null && value !== null) {
1774
1855
  return isArray(value) ? value.map(function (innerFieldValue) {
1775
1856
  if (innerFieldValue === null) {
@@ -1792,13 +1873,13 @@ var ThemeParser = /*#__PURE__*/function () {
1792
1873
  if (!isObject(innerField[innerFieldName])) {
1793
1874
  return newInnerField;
1794
1875
  }
1795
- var _ref8 = fieldTheme[innerFieldName] || {},
1796
- _ref8$textStyle = _ref8.textStyle,
1797
- innerFieldTextStyle = _ref8$textStyle === void 0 ? null : _ref8$textStyle,
1798
- _ref8$color = _ref8.color,
1799
- innerFieldColor = _ref8$color === void 0 ? null : _ref8$color,
1800
- _ref8$boxStyle = _ref8.boxStyle,
1801
- innerFieldBoxStyle = _ref8$boxStyle === void 0 ? null : _ref8$boxStyle;
1876
+ var _ref9 = fieldTheme[innerFieldName] || {},
1877
+ _ref9$textStyle = _ref9.textStyle,
1878
+ innerFieldTextStyle = _ref9$textStyle === void 0 ? null : _ref9$textStyle,
1879
+ _ref9$color = _ref9.color,
1880
+ innerFieldColor = _ref9$color === void 0 ? null : _ref9$color,
1881
+ _ref9$boxStyle = _ref9.boxStyle,
1882
+ innerFieldBoxStyle = _ref9$boxStyle === void 0 ? null : _ref9$boxStyle;
1802
1883
 
1803
1884
  // Early return, no theme
1804
1885
  if (innerFieldTextStyle === null && innerFieldColor === null && innerFieldBoxStyle === null) {
@@ -1838,9 +1919,9 @@ var ThemeParser = /*#__PURE__*/function () {
1838
1919
  var innerDefinition = isArray(fieldsOrDefinition) ? fieldsOrDefinition.find(function (it) {
1839
1920
  return it.name === innerFieldName;
1840
1921
  }) || null : fieldsOrDefinition;
1841
- var _ref9 = innerDefinition || {},
1842
- _ref9$theme = _ref9.theme,
1843
- idfTheme = _ref9$theme === void 0 ? null : _ref9$theme;
1922
+ var _ref10 = innerDefinition || {},
1923
+ _ref10$theme = _ref10.theme,
1924
+ idfTheme = _ref10$theme === void 0 ? null : _ref10$theme;
1844
1925
  var innerValue = value[innerFieldName];
1845
1926
 
1846
1927
  // For items fields
@@ -1871,14 +1952,14 @@ var ThemeParser = /*#__PURE__*/function () {
1871
1952
  var _this5 = this;
1872
1953
  if (isObject(initialValue) || isObject(fieldTheme)) {
1873
1954
  var value = initialValue || null;
1874
- var _ref10 = fieldTheme || {},
1875
- _ref10$textStyle = _ref10.textStyle,
1876
- fieldTextStyleName = _ref10$textStyle === void 0 ? null : _ref10$textStyle,
1877
- _ref10$color = _ref10.color,
1878
- fieldColorName = _ref10$color === void 0 ? null : _ref10$color,
1879
- _ref10$boxStyle = _ref10.boxStyle,
1880
- fieldBoxStyleName = _ref10$boxStyle === void 0 ? null : _ref10$boxStyle,
1881
- otherProps = _objectWithoutProperties(_ref10, _excluded$1);
1955
+ var _ref11 = fieldTheme || {},
1956
+ _ref11$textStyle = _ref11.textStyle,
1957
+ fieldTextStyleName = _ref11$textStyle === void 0 ? null : _ref11$textStyle,
1958
+ _ref11$color = _ref11.color,
1959
+ fieldColorName = _ref11$color === void 0 ? null : _ref11$color,
1960
+ _ref11$boxStyle = _ref11.boxStyle,
1961
+ fieldBoxStyleName = _ref11$boxStyle === void 0 ? null : _ref11$boxStyle,
1962
+ otherProps = _objectWithoutProperties(_ref11, _excluded$1);
1882
1963
  if (fieldTextStyleName === null && fieldColorName === null && fieldBoxStyleName === null && isEmpty(otherProps) && !isObject(fieldTheme)) {
1883
1964
  return value;
1884
1965
  }
@@ -1890,11 +1971,11 @@ var ThemeParser = /*#__PURE__*/function () {
1890
1971
  return _objectSpread(_objectSpread({}, newObject), newValue !== null ? _defineProperty({}, key, newValue) : null);
1891
1972
  }, {});
1892
1973
  }
1893
- var _ref12 = value || {},
1894
- _ref12$textStyle = _ref12.textStyle,
1895
- valueTextStyle = _ref12$textStyle === void 0 ? null : _ref12$textStyle,
1896
- _ref12$boxStyle = _ref12.boxStyle,
1897
- valueBoxStyle = _ref12$boxStyle === void 0 ? null : _ref12$boxStyle;
1974
+ var _ref13 = value || {},
1975
+ _ref13$textStyle = _ref13.textStyle,
1976
+ valueTextStyle = _ref13$textStyle === void 0 ? null : _ref13$textStyle,
1977
+ _ref13$boxStyle = _ref13.boxStyle,
1978
+ valueBoxStyle = _ref13$boxStyle === void 0 ? null : _ref13$boxStyle;
1898
1979
 
1899
1980
  // Color
1900
1981
  var fieldColor = fieldColorName !== null && themeColors !== null ? themeColors[fieldColorName] || null : null;
package/lib/components.js CHANGED
@@ -3868,7 +3868,7 @@ var Placeholder = /*#__PURE__*/React__default["default"].memo(ScreenPlaceholder)
3868
3868
 
3869
3869
  var styles$6 = {"stack":"micromag-core-screens-preview-stack","stackScreen":"micromag-core-screens-preview-stackScreen","stackItem":"micromag-core-screens-preview-stackItem","screen":"micromag-core-screens-preview-screen"};
3870
3870
 
3871
- var _excluded = ["screen", "screenState", "width", "height", "screenWidth", "screenHeight", "className", "withSize"];
3871
+ var _excluded = ["screen", "screenState", "width", "height", "screenWidth", "screenHeight", "className", "withSize", "hidden"];
3872
3872
  var propTypes$7 = {
3873
3873
  screen: core.PropTypes.component.isRequired,
3874
3874
  screenState: PropTypes__default["default"].string,
@@ -3877,7 +3877,8 @@ var propTypes$7 = {
3877
3877
  screenWidth: PropTypes__default["default"].number,
3878
3878
  screenHeight: PropTypes__default["default"].number,
3879
3879
  className: PropTypes__default["default"].string,
3880
- withSize: PropTypes__default["default"].bool
3880
+ withSize: PropTypes__default["default"].bool,
3881
+ hidden: PropTypes__default["default"].bool
3881
3882
  };
3882
3883
  var defaultProps$7 = {
3883
3884
  screenState: null,
@@ -3886,7 +3887,8 @@ var defaultProps$7 = {
3886
3887
  screenWidth: undefined,
3887
3888
  screenHeight: undefined,
3888
3889
  className: null,
3889
- withSize: false
3890
+ withSize: false,
3891
+ hidden: false
3890
3892
  };
3891
3893
  var ScreenPreview = function ScreenPreview(_ref) {
3892
3894
  var screen = _ref.screen,
@@ -3897,6 +3899,7 @@ var ScreenPreview = function ScreenPreview(_ref) {
3897
3899
  screenHeight = _ref.screenHeight,
3898
3900
  className = _ref.className,
3899
3901
  withSize = _ref.withSize,
3902
+ hidden = _ref.hidden,
3900
3903
  props = _objectWithoutProperties__default["default"](_ref, _excluded);
3901
3904
  var screenElement = /*#__PURE__*/React__default["default"].createElement(Screen$1, Object.assign({
3902
3905
  screen: screen,
@@ -3906,13 +3909,14 @@ var ScreenPreview = function ScreenPreview(_ref) {
3906
3909
  height: !withSize ? height : undefined,
3907
3910
  className: classNames__default["default"]([styles$6.screen, _defineProperty__default["default"]({}, className, !withSize)])
3908
3911
  }, props));
3912
+ var element = !hidden ? screenElement : /*#__PURE__*/React__default["default"].createElement("div", null);
3909
3913
  var screenWithSize = withSize ? /*#__PURE__*/React__default["default"].createElement(ScreenSizer, {
3910
3914
  className: className,
3911
3915
  screenWidth: screenWidth,
3912
3916
  screenHeight: screenHeight,
3913
3917
  width: width,
3914
3918
  height: height
3915
- }, screenElement) : screenElement;
3919
+ }, element) : element;
3916
3920
  return screenWithSize;
3917
3921
  };
3918
3922
  ScreenPreview.propTypes = propTypes$7;
package/lib/index.js CHANGED
@@ -1183,7 +1183,8 @@ var FieldsManager = /*#__PURE__*/function (_DefinitionsManager) {
1183
1183
  return FieldsManager;
1184
1184
  }(DefinitionsManager);
1185
1185
 
1186
- var _excluded$4 = ["medias"];
1186
+ var _excluded$4 = ["medias"],
1187
+ _excluded2$2 = ["medias"];
1187
1188
  var MediasParser = /*#__PURE__*/function () {
1188
1189
  function MediasParser(_ref) {
1189
1190
  var fieldsManager = _ref.fieldsManager,
@@ -1192,8 +1193,23 @@ var MediasParser = /*#__PURE__*/function () {
1192
1193
  this.fieldsManager = fieldsManager;
1193
1194
  this.screensManager = screensManager;
1194
1195
  this.fieldsPatternCache = {};
1196
+ this.parsedThemesCache = {};
1195
1197
  }
1196
1198
  _createClass__default["default"](MediasParser, [{
1199
+ key: "getParsedStoryTheme",
1200
+ value: function getParsedStoryTheme(storyId, theme) {
1201
+ if (typeof this.parsedThemesCache[storyId] === 'undefined') {
1202
+ var _this$toPath = this.toPath(theme),
1203
+ themeMedias = _this$toPath.medias,
1204
+ newTheme = _objectWithoutProperties__default["default"](_this$toPath, _excluded$4);
1205
+ this.parsedThemesCache[storyId] = {
1206
+ themeMedias: themeMedias,
1207
+ newTheme: newTheme
1208
+ };
1209
+ }
1210
+ return this.parsedThemesCache[storyId];
1211
+ }
1212
+ }, {
1197
1213
  key: "getFieldsPatternByScreen",
1198
1214
  value: function getFieldsPatternByScreen(type) {
1199
1215
  if (typeof this.fieldsPatternCache[type] === 'undefined') {
@@ -1214,6 +1230,8 @@ var MediasParser = /*#__PURE__*/function () {
1214
1230
  return story;
1215
1231
  }
1216
1232
  var _ref3 = story || {},
1233
+ _ref3$id = _ref3.id,
1234
+ storyId = _ref3$id === void 0 ? null : _ref3$id,
1217
1235
  _ref3$theme = _ref3.theme,
1218
1236
  theme = _ref3$theme === void 0 ? null : _ref3$theme,
1219
1237
  _ref3$components = _ref3.components,
@@ -1237,9 +1255,9 @@ var MediasParser = /*#__PURE__*/function () {
1237
1255
  newComponents = _components$reduce.components,
1238
1256
  medias = _components$reduce.medias;
1239
1257
  if (theme !== null) {
1240
- var _this$toPath = this.toPath(theme),
1241
- themeMedias = _this$toPath.medias,
1242
- newTheme = _objectWithoutProperties__default["default"](_this$toPath, _excluded$4);
1258
+ var _this$getParsedStoryT = this.getParsedStoryTheme(storyId, theme),
1259
+ themeMedias = _this$getParsedStoryT.medias,
1260
+ newTheme = _objectWithoutProperties__default["default"](_this$getParsedStoryT, _excluded2$2);
1243
1261
  return medias !== null || themeMedias !== null ? _objectSpread__default["default"](_objectSpread__default["default"]({}, story), {}, {
1244
1262
  theme: newTheme,
1245
1263
  components: newComponents,
@@ -1668,6 +1686,7 @@ var ThemeParser = /*#__PURE__*/function () {
1668
1686
  _classCallCheck__default["default"](this, ThemeParser);
1669
1687
  this.screensManager = screensManager;
1670
1688
  this.definitionCache = {};
1689
+ this.fieldsCache = {};
1671
1690
  }
1672
1691
  _createClass__default["default"](ThemeParser, [{
1673
1692
  key: "getDefinitionByScreen",
@@ -1684,6 +1703,54 @@ var ThemeParser = /*#__PURE__*/function () {
1684
1703
  }
1685
1704
  return this.definitionCache[type];
1686
1705
  }
1706
+ }, {
1707
+ key: "getFieldsForDefinition",
1708
+ value: function getFieldsForDefinition(definition) {
1709
+ var _ref2 = definition || {},
1710
+ _ref2$id = _ref2.id,
1711
+ definitionId = _ref2$id === void 0 ? null : _ref2$id,
1712
+ _ref2$fields = _ref2.fields,
1713
+ fields = _ref2$fields === void 0 ? [] : _ref2$fields,
1714
+ _ref2$states = _ref2.states,
1715
+ states = _ref2$states === void 0 ? [] : _ref2$states;
1716
+ if (typeof this.fieldsCache[definitionId] === 'undefined') {
1717
+ if (states === null || states.length === 0) {
1718
+ this.fieldsCache[definitionId] = {
1719
+ fields: fields
1720
+ };
1721
+ } else {
1722
+ // TODO: test this
1723
+ var finalFields = fields;
1724
+ var repetableStates = [];
1725
+ if (states !== null && states.length > 0) {
1726
+ var nonRepetableStates = states.filter(function (_ref3) {
1727
+ var _ref3$repeatable = _ref3.repeatable,
1728
+ repeatable = _ref3$repeatable === void 0 ? false : _ref3$repeatable;
1729
+ return repeatable === false;
1730
+ });
1731
+ repetableStates = states.filter(function (_ref4) {
1732
+ var _ref4$repeatable = _ref4.repeatable,
1733
+ repeatable = _ref4$repeatable === void 0 ? false : _ref4$repeatable;
1734
+ return repeatable === true;
1735
+ });
1736
+ finalFields = nonRepetableStates.reduce(function (acc, it) {
1737
+ var _ref5 = it || {},
1738
+ _ref5$fields = _ref5.fields,
1739
+ itemFields = _ref5$fields === void 0 ? [] : _ref5$fields;
1740
+ if (itemFields !== null && itemFields.length > 0) {
1741
+ return acc.concat(itemFields);
1742
+ }
1743
+ return acc;
1744
+ }, finalFields);
1745
+ }
1746
+ this.fieldsCache[definitionId] = {
1747
+ fields: finalFields,
1748
+ repetableStates: repetableStates
1749
+ };
1750
+ }
1751
+ }
1752
+ return this.fieldsCache[definitionId];
1753
+ }
1687
1754
  }, {
1688
1755
  key: "parse",
1689
1756
  value: function parse(story) {
@@ -1691,11 +1758,11 @@ var ThemeParser = /*#__PURE__*/function () {
1691
1758
  if (story === null) {
1692
1759
  return story;
1693
1760
  }
1694
- var _ref2 = story || {},
1695
- _ref2$theme = _ref2.theme,
1696
- theme = _ref2$theme === void 0 ? null : _ref2$theme,
1697
- _ref2$components = _ref2.components,
1698
- components = _ref2$components === void 0 ? null : _ref2$components;
1761
+ var _ref6 = story || {},
1762
+ _ref6$theme = _ref6.theme,
1763
+ theme = _ref6$theme === void 0 ? null : _ref6$theme,
1764
+ _ref6$components = _ref6.components,
1765
+ components = _ref6$components === void 0 ? null : _ref6$components;
1699
1766
  if (theme === null || components === null) {
1700
1767
  return story;
1701
1768
  }
@@ -1709,6 +1776,33 @@ var ThemeParser = /*#__PURE__*/function () {
1709
1776
  themeTextStyles = _theme$textStyles === void 0 ? null : _theme$textStyles,
1710
1777
  _theme$boxStyles = theme.boxStyles,
1711
1778
  themeBoxStyles = _theme$boxStyles === void 0 ? null : _theme$boxStyles;
1779
+
1780
+ // Speed test
1781
+ // const newComponents = [...components];
1782
+ // for (let index = 0; index < components.length; index += 1) {
1783
+ // const screen = components[index] || {};
1784
+ // const { type } = screen;
1785
+ // const { definition, themeScreen } = this.getDefinitionByScreen(type, themeComponents);
1786
+ // const newScreen = this.parseScreen(
1787
+ // definition,
1788
+ // screen,
1789
+ // themeScreen,
1790
+ // themeBackground,
1791
+ // themeColors,
1792
+ // themeTextStyles,
1793
+ // themeBoxStyles,
1794
+ // );
1795
+
1796
+ // if (newScreen !== screen || themeScreen !== null) {
1797
+ // newComponents[index] = {
1798
+ // ...themeScreen,
1799
+ // ...newScreen,
1800
+ // };
1801
+ // }
1802
+ // }
1803
+ // story.components = newComponents;
1804
+ // return story;
1805
+
1712
1806
  var newComponents = components.reduce(function (currentComponents, screen, index) {
1713
1807
  var type = screen.type;
1714
1808
  var _this$getDefinitionBy = _this.getDefinitionByScreen(type, themeComponents),
@@ -1727,36 +1821,11 @@ var ThemeParser = /*#__PURE__*/function () {
1727
1821
  key: "parseScreen",
1728
1822
  value: function parseScreen(definition, value, themeValue, themeBackground, themeColors, themeTextStyles, themeBoxStyles) {
1729
1823
  var _this2 = this;
1730
- var _ref3 = definition || {},
1731
- _ref3$fields = _ref3.fields,
1732
- fields = _ref3$fields === void 0 ? [] : _ref3$fields,
1733
- _ref3$states = _ref3.states,
1734
- states = _ref3$states === void 0 ? [] : _ref3$states;
1735
-
1736
- // TODO: test this
1737
- var finalFields = fields;
1738
- var repetableStates = [];
1739
- if (states !== null && states.length > 0) {
1740
- var nonRepetableStates = states.filter(function (_ref4) {
1741
- var _ref4$repeatable = _ref4.repeatable,
1742
- repeatable = _ref4$repeatable === void 0 ? false : _ref4$repeatable;
1743
- return repeatable === false;
1744
- });
1745
- repetableStates = states.filter(function (_ref5) {
1746
- var _ref5$repeatable = _ref5.repeatable,
1747
- repeatable = _ref5$repeatable === void 0 ? false : _ref5$repeatable;
1748
- return repeatable === true;
1749
- });
1750
- finalFields = nonRepetableStates.reduce(function (acc, it) {
1751
- var _ref6 = it || {},
1752
- _ref6$fields = _ref6.fields,
1753
- itemFields = _ref6$fields === void 0 ? [] : _ref6$fields;
1754
- if (itemFields !== null && itemFields.length > 0) {
1755
- return acc.concat(itemFields);
1756
- }
1757
- return acc;
1758
- }, finalFields);
1759
- }
1824
+ var _this$getFieldsForDef = this.getFieldsForDefinition(definition),
1825
+ _this$getFieldsForDef2 = _this$getFieldsForDef.fields,
1826
+ fields = _this$getFieldsForDef2 === void 0 ? null : _this$getFieldsForDef2,
1827
+ _this$getFieldsForDef3 = _this$getFieldsForDef.repetableStates,
1828
+ repetableStates = _this$getFieldsForDef3 === void 0 ? null : _this$getFieldsForDef3;
1760
1829
  var newThemeValue = themeValue === null && themeBackground !== null ? {} : themeValue;
1761
1830
  if (themeBackground !== null && typeof newThemeValue.background !== 'undefined') {
1762
1831
  newThemeValue.background = _objectSpread__default["default"](_objectSpread__default["default"]({}, themeBackground), newThemeValue.background);
@@ -1765,23 +1834,33 @@ var ThemeParser = /*#__PURE__*/function () {
1765
1834
  }
1766
1835
  var newScreenValue = Object.keys(value).reduce(function (currentValue, key) {
1767
1836
  var repetableState = null;
1768
- if (repetableStates.length > 0) {
1837
+ if (repetableStates !== null && repetableStates.length > 0) {
1769
1838
  repetableState = repetableStates.find(function (_ref7) {
1770
1839
  var _ref7$id = _ref7.id,
1771
1840
  stateId = _ref7$id === void 0 ? null : _ref7$id;
1772
1841
  return stateId !== null && stateId === key;
1773
1842
  }) || null;
1774
1843
  }
1775
- var fieldDefinition = finalFields.find(function (it) {
1844
+ var fieldDefinition = (fields || null).find(function (it) {
1776
1845
  return it.name === key;
1777
1846
  }) || repetableState || {};
1778
1847
  var fieldValue = value[key];
1779
1848
  var fieldThemeValue = newThemeValue !== null ? newThemeValue[key] || null : null;
1780
1849
 
1850
+ // Try for early return
1851
+ var _ref8 = fieldDefinition || {},
1852
+ _ref8$theme = _ref8.theme,
1853
+ theme = _ref8$theme === void 0 ? null : _ref8$theme;
1854
+ if ((theme === null || !isObject__default["default"](theme)) && fields === null) {
1855
+ return _objectSpread__default["default"](_objectSpread__default["default"]({}, currentValue), {}, _defineProperty__default["default"]({}, key, fieldValue));
1856
+ }
1857
+
1781
1858
  // console.log('start', key, fieldValue);
1782
1859
  var newFieldValue = _this2.parseField(fieldValue, fieldDefinition, fieldThemeValue, themeColors, themeTextStyles, themeBoxStyles);
1783
1860
  // console.log('result', newFieldValue);
1784
1861
 
1862
+ // const newFieldValue = fieldValue;
1863
+
1785
1864
  // Only switch field if it has changed
1786
1865
  return newFieldValue !== fieldValue ? _objectSpread__default["default"](_objectSpread__default["default"]({}, currentValue), {}, _defineProperty__default["default"]({}, key, newFieldValue)) : currentValue;
1787
1866
  }, value);
@@ -1791,12 +1870,14 @@ var ThemeParser = /*#__PURE__*/function () {
1791
1870
  // eslint-disable-next-line class-methods-use-this
1792
1871
  }, {
1793
1872
  key: "parseField",
1794
- value: function parseField(value, definition, themeValue, themeColors, themeTextStyles, themeBoxStyles) {
1873
+ value: function parseField(value, fieldDefinition, themeValue, themeColors, themeTextStyles, themeBoxStyles) {
1795
1874
  var _this3 = this;
1796
- var _definition$theme = definition.theme,
1797
- fieldTheme = _definition$theme === void 0 ? null : _definition$theme,
1798
- _definition$fields = definition.fields,
1799
- definitionFields = _definition$fields === void 0 ? null : _definition$fields;
1875
+ var _fieldDefinition$them = fieldDefinition.theme,
1876
+ fieldTheme = _fieldDefinition$them === void 0 ? null : _fieldDefinition$them,
1877
+ _fieldDefinition$fiel = fieldDefinition.fields,
1878
+ definitionFields = _fieldDefinition$fiel === void 0 ? null : _fieldDefinition$fiel;
1879
+
1880
+ // There are sub-fields in this definition
1800
1881
  if (definitionFields !== null && value !== null) {
1801
1882
  return isArray__default["default"](value) ? value.map(function (innerFieldValue) {
1802
1883
  if (innerFieldValue === null) {
@@ -1819,13 +1900,13 @@ var ThemeParser = /*#__PURE__*/function () {
1819
1900
  if (!isObject__default["default"](innerField[innerFieldName])) {
1820
1901
  return newInnerField;
1821
1902
  }
1822
- var _ref8 = fieldTheme[innerFieldName] || {},
1823
- _ref8$textStyle = _ref8.textStyle,
1824
- innerFieldTextStyle = _ref8$textStyle === void 0 ? null : _ref8$textStyle,
1825
- _ref8$color = _ref8.color,
1826
- innerFieldColor = _ref8$color === void 0 ? null : _ref8$color,
1827
- _ref8$boxStyle = _ref8.boxStyle,
1828
- innerFieldBoxStyle = _ref8$boxStyle === void 0 ? null : _ref8$boxStyle;
1903
+ var _ref9 = fieldTheme[innerFieldName] || {},
1904
+ _ref9$textStyle = _ref9.textStyle,
1905
+ innerFieldTextStyle = _ref9$textStyle === void 0 ? null : _ref9$textStyle,
1906
+ _ref9$color = _ref9.color,
1907
+ innerFieldColor = _ref9$color === void 0 ? null : _ref9$color,
1908
+ _ref9$boxStyle = _ref9.boxStyle,
1909
+ innerFieldBoxStyle = _ref9$boxStyle === void 0 ? null : _ref9$boxStyle;
1829
1910
 
1830
1911
  // Early return, no theme
1831
1912
  if (innerFieldTextStyle === null && innerFieldColor === null && innerFieldBoxStyle === null) {
@@ -1865,9 +1946,9 @@ var ThemeParser = /*#__PURE__*/function () {
1865
1946
  var innerDefinition = isArray__default["default"](fieldsOrDefinition) ? fieldsOrDefinition.find(function (it) {
1866
1947
  return it.name === innerFieldName;
1867
1948
  }) || null : fieldsOrDefinition;
1868
- var _ref9 = innerDefinition || {},
1869
- _ref9$theme = _ref9.theme,
1870
- idfTheme = _ref9$theme === void 0 ? null : _ref9$theme;
1949
+ var _ref10 = innerDefinition || {},
1950
+ _ref10$theme = _ref10.theme,
1951
+ idfTheme = _ref10$theme === void 0 ? null : _ref10$theme;
1871
1952
  var innerValue = value[innerFieldName];
1872
1953
 
1873
1954
  // For items fields
@@ -1898,14 +1979,14 @@ var ThemeParser = /*#__PURE__*/function () {
1898
1979
  var _this5 = this;
1899
1980
  if (isObject__default["default"](initialValue) || isObject__default["default"](fieldTheme)) {
1900
1981
  var value = initialValue || null;
1901
- var _ref10 = fieldTheme || {},
1902
- _ref10$textStyle = _ref10.textStyle,
1903
- fieldTextStyleName = _ref10$textStyle === void 0 ? null : _ref10$textStyle,
1904
- _ref10$color = _ref10.color,
1905
- fieldColorName = _ref10$color === void 0 ? null : _ref10$color,
1906
- _ref10$boxStyle = _ref10.boxStyle,
1907
- fieldBoxStyleName = _ref10$boxStyle === void 0 ? null : _ref10$boxStyle,
1908
- otherProps = _objectWithoutProperties__default["default"](_ref10, _excluded$1);
1982
+ var _ref11 = fieldTheme || {},
1983
+ _ref11$textStyle = _ref11.textStyle,
1984
+ fieldTextStyleName = _ref11$textStyle === void 0 ? null : _ref11$textStyle,
1985
+ _ref11$color = _ref11.color,
1986
+ fieldColorName = _ref11$color === void 0 ? null : _ref11$color,
1987
+ _ref11$boxStyle = _ref11.boxStyle,
1988
+ fieldBoxStyleName = _ref11$boxStyle === void 0 ? null : _ref11$boxStyle,
1989
+ otherProps = _objectWithoutProperties__default["default"](_ref11, _excluded$1);
1909
1990
  if (fieldTextStyleName === null && fieldColorName === null && fieldBoxStyleName === null && isEmpty__default["default"](otherProps) && !isObject__default["default"](fieldTheme)) {
1910
1991
  return value;
1911
1992
  }
@@ -1917,11 +1998,11 @@ var ThemeParser = /*#__PURE__*/function () {
1917
1998
  return _objectSpread__default["default"](_objectSpread__default["default"]({}, newObject), newValue !== null ? _defineProperty__default["default"]({}, key, newValue) : null);
1918
1999
  }, {});
1919
2000
  }
1920
- var _ref12 = value || {},
1921
- _ref12$textStyle = _ref12.textStyle,
1922
- valueTextStyle = _ref12$textStyle === void 0 ? null : _ref12$textStyle,
1923
- _ref12$boxStyle = _ref12.boxStyle,
1924
- valueBoxStyle = _ref12$boxStyle === void 0 ? null : _ref12$boxStyle;
2001
+ var _ref13 = value || {},
2002
+ _ref13$textStyle = _ref13.textStyle,
2003
+ valueTextStyle = _ref13$textStyle === void 0 ? null : _ref13$textStyle,
2004
+ _ref13$boxStyle = _ref13.boxStyle,
2005
+ valueBoxStyle = _ref13$boxStyle === void 0 ? null : _ref13$boxStyle;
1925
2006
 
1926
2007
  // Color
1927
2008
  var fieldColor = fieldColorName !== null && themeColors !== null ? themeColors[fieldColorName] || null : null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@micromag/core",
3
- "version": "0.3.418",
3
+ "version": "0.3.420",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "keywords": [
@@ -136,5 +136,5 @@
136
136
  "access": "public",
137
137
  "registry": "https://registry.npmjs.org/"
138
138
  },
139
- "gitHead": "b88d067aa5c016ffdbc031902e1c387160d51f9b"
139
+ "gitHead": "5b0f037a41c3bca07a5bce8f0dce205242f7ad17"
140
140
  }