@micromag/core 0.3.348 → 0.3.359

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
@@ -1292,8 +1292,9 @@ var Dropdown = function Dropdown(_ref) {
1292
1292
  onClickItem(e);
1293
1293
  }
1294
1294
  } : null;
1295
- return ItemComponent !== null ? /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(ItemComponent, Object.assign({
1296
- key: "item-".concat(index, "-").concat(label, "-").concat(type),
1295
+ return ItemComponent !== null ? /*#__PURE__*/React.createElement("div", {
1296
+ key: "item-".concat(index, "-").concat(label, "-").concat(type)
1297
+ }, /*#__PURE__*/React.createElement(ItemComponent, Object.assign({
1297
1298
  className: classNames([(_ref3 = {
1298
1299
  'dropdown-item': type === 'link' || type === 'button',
1299
1300
  'dropdown-divider': type === 'divider',
@@ -3101,6 +3102,10 @@ PropTypes$1.shape({
3101
3102
  id: PropTypes$1.oneOfType([PropTypes$1.string, PropTypes$1.number]),
3102
3103
  name: PropTypes$1.string
3103
3104
  });
3105
+ PropTypes$1.shape({
3106
+ label: textElement,
3107
+ buttonStyle: boxStyle
3108
+ });
3104
3109
 
3105
3110
  /* eslint-disable react/no-array-index-key */
3106
3111
  var propTypes$d = {
package/es/hooks.js CHANGED
@@ -1599,7 +1599,9 @@ var useParsedStory = function useParsedStory(story) {
1599
1599
  _ref$withMedias = _ref.withMedias,
1600
1600
  withMedias = _ref$withMedias === void 0 ? true : _ref$withMedias,
1601
1601
  _ref$withFonts = _ref.withFonts,
1602
- withFonts = _ref$withFonts === void 0 ? true : _ref$withFonts;
1602
+ withFonts = _ref$withFonts === void 0 ? true : _ref$withFonts,
1603
+ _ref$withMigrations = _ref.withMigrations,
1604
+ withMigrations = _ref$withMigrations === void 0 ? true : _ref$withMigrations;
1603
1605
  var screensManager = useScreensManager();
1604
1606
  var fieldsManager = useFieldsManager();
1605
1607
  var parser = useMemo(function () {
@@ -1615,7 +1617,8 @@ var useParsedStory = function useParsedStory(story) {
1615
1617
  return parser.parse(story, {
1616
1618
  withMedias: withMedias,
1617
1619
  withTheme: withTheme,
1618
- withFonts: withFonts
1620
+ withFonts: withFonts,
1621
+ withMigrations: withMigrations
1619
1622
  });
1620
1623
  }, [parser, disabled, withMedias, withTheme, withFonts, story]);
1621
1624
  return newStory;
package/es/index.js CHANGED
@@ -25,8 +25,8 @@ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
25
25
  import 'slugify';
26
26
  import uniqBy from 'lodash/uniqBy';
27
27
  import _typeof from '@babel/runtime/helpers/typeof';
28
- import isEmpty from 'lodash/isEmpty';
29
28
  import uniq from 'lodash/uniq';
29
+ import isEmpty from 'lodash/isEmpty';
30
30
  import { Tracking as Tracking$1 } from '@folklore/tracking';
31
31
 
32
32
  /**
@@ -605,6 +605,10 @@ var visitor = PropTypes$1.shape({
605
605
  id: PropTypes$1.oneOfType([PropTypes$1.string, PropTypes$1.number]),
606
606
  name: PropTypes$1.string
607
607
  });
608
+ var badge = PropTypes$1.shape({
609
+ label: textElement,
610
+ buttonStyle: boxStyle
611
+ });
608
612
 
609
613
  var PropTypes = /*#__PURE__*/Object.freeze({
610
614
  __proto__: null,
@@ -749,7 +753,8 @@ var PropTypes = /*#__PURE__*/Object.freeze({
749
753
  paymentItems: paymentItems,
750
754
  pageMetadata: pageMetadata,
751
755
  authorElement: authorElement,
752
- visitor: visitor
756
+ visitor: visitor,
757
+ badge: badge
753
758
  });
754
759
 
755
760
  var sortedColors = function sortedColors(colors) {
@@ -1137,7 +1142,7 @@ var FieldsManager = /*#__PURE__*/function (_DefinitionsManager) {
1137
1142
  return FieldsManager;
1138
1143
  }(DefinitionsManager);
1139
1144
 
1140
- var _excluded$3 = ["medias"];
1145
+ var _excluded$4 = ["medias"];
1141
1146
  var MediasParser = /*#__PURE__*/function () {
1142
1147
  function MediasParser(_ref) {
1143
1148
  var fieldsManager = _ref.fieldsManager,
@@ -1193,7 +1198,7 @@ var MediasParser = /*#__PURE__*/function () {
1193
1198
  if (theme !== null) {
1194
1199
  var _this$toPath = this.toPath(theme),
1195
1200
  themeMedias = _this$toPath.medias,
1196
- newTheme = _objectWithoutProperties(_this$toPath, _excluded$3);
1201
+ newTheme = _objectWithoutProperties(_this$toPath, _excluded$4);
1197
1202
  return medias !== null || themeMedias !== null ? _objectSpread(_objectSpread({}, story), {}, {
1198
1203
  theme: newTheme,
1199
1204
  components: newComponents,
@@ -1425,7 +1430,197 @@ var ScreensManager = /*#__PURE__*/function (_DefinitionsManager) {
1425
1430
  return ScreensManager;
1426
1431
  }(DefinitionsManager);
1427
1432
 
1428
- var _excluded$2 = ["textStyle", "color", "boxStyle"];
1433
+ var _excluded$3 = ["fonts"];
1434
+ var FontsParser = /*#__PURE__*/function () {
1435
+ function FontsParser(_ref) {
1436
+ var fieldsManager = _ref.fieldsManager,
1437
+ screensManager = _ref.screensManager;
1438
+ _classCallCheck(this, FontsParser);
1439
+ this.fieldsManager = fieldsManager;
1440
+ this.screensManager = screensManager;
1441
+ this.fieldsPatternCache = {};
1442
+ }
1443
+ _createClass(FontsParser, [{
1444
+ key: "getFieldsPatternByScreen",
1445
+ value: function getFieldsPatternByScreen(type) {
1446
+ if (typeof this.fieldsPatternCache[type] === 'undefined') {
1447
+ var _ref2 = this.screensManager.getDefinition(type) || {},
1448
+ _ref2$fields = _ref2.fields,
1449
+ fields = _ref2$fields === void 0 ? [] : _ref2$fields;
1450
+ this.fieldsPatternCache[type] = this.getFieldsPattern(fields);
1451
+ }
1452
+ return this.fieldsPatternCache[type];
1453
+ }
1454
+
1455
+ // Extract fonts
1456
+ }, {
1457
+ key: "parse",
1458
+ value: function parse(story) {
1459
+ var _this = this;
1460
+ if (story === null) {
1461
+ return story;
1462
+ }
1463
+
1464
+ // Extract fonts from screen
1465
+ var _ref3 = story || {},
1466
+ _ref3$theme = _ref3.theme,
1467
+ theme = _ref3$theme === void 0 ? null : _ref3$theme,
1468
+ _ref3$components = _ref3.components,
1469
+ components = _ref3$components === void 0 ? [] : _ref3$components;
1470
+ var fonts = uniq(components.reduce(function (currentFonts, screen) {
1471
+ var type = screen.type;
1472
+ var fieldsPattern = _this.getFieldsPatternByScreen(type);
1473
+ var newFonts = FontsParser.extractFontsWithPaths(screen, fieldsPattern);
1474
+ return newFonts.length > 0 ? [].concat(_toConsumableArray(currentFonts), _toConsumableArray(newFonts)) : currentFonts;
1475
+ }, []), 'name');
1476
+
1477
+ // Extract fonts from theme
1478
+ if (theme !== null) {
1479
+ var _this$parse = this.parse(theme),
1480
+ _this$parse$fonts = _this$parse.fonts,
1481
+ themeFonts = _this$parse$fonts === void 0 ? [] : _this$parse$fonts,
1482
+ newTheme = _objectWithoutProperties(_this$parse, _excluded$3);
1483
+ return fonts.length > 0 || themeFonts.length > 0 ? _objectSpread(_objectSpread({}, story), {}, {
1484
+ theme: newTheme,
1485
+ fonts: uniq([].concat(_toConsumableArray(themeFonts), _toConsumableArray(fonts)), 'name')
1486
+ }) : story;
1487
+ }
1488
+ return fonts.length > 0 ? _objectSpread(_objectSpread({}, story), {}, {
1489
+ fonts: fonts
1490
+ }) : story;
1491
+ }
1492
+ }, {
1493
+ key: "getFieldsPattern",
1494
+ value: function getFieldsPattern(fields) {
1495
+ var _this2 = this;
1496
+ var namePrefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
1497
+ return fields.reduce(function (patterns, field) {
1498
+ var _field$name = field.name,
1499
+ name = _field$name === void 0 ? null : _field$name,
1500
+ _field$type = field.type,
1501
+ type = _field$type === void 0 ? null : _field$type;
1502
+ var path = [namePrefix, name].filter(function (it) {
1503
+ return it !== null;
1504
+ }).join('\\.');
1505
+ var fieldDefinition = _objectSpread(_objectSpread({}, type !== null ? _this2.fieldsManager.getDefinition(type) : null), field);
1506
+
1507
+ // also check settings fields
1508
+ var _fieldDefinition$fiel = fieldDefinition.fields,
1509
+ subFields = _fieldDefinition$fiel === void 0 ? [] : _fieldDefinition$fiel,
1510
+ _fieldDefinition$item = fieldDefinition.itemsField,
1511
+ itemsField = _fieldDefinition$item === void 0 ? null : _fieldDefinition$item,
1512
+ _fieldDefinition$sett = fieldDefinition.settings,
1513
+ settings = _fieldDefinition$sett === void 0 ? [] : _fieldDefinition$sett;
1514
+ return [].concat(_toConsumableArray(patterns), _toConsumableArray(FontsParser.fieldIsFontFamily(fieldDefinition) ? [new RegExp("^".concat(path, "$"))] : []), _toConsumableArray(_this2.getFieldsPattern(subFields, path)), _toConsumableArray(_this2.getFieldsPattern(settings, path)), _toConsumableArray(itemsField !== null ? _this2.getFieldsPattern([itemsField], "".concat(path, "\\.[0-9]+")) : []));
1515
+ }, []);
1516
+ }
1517
+ }], [{
1518
+ key: "fieldIsFontFamily",
1519
+ value: function fieldIsFontFamily(_ref4) {
1520
+ var _ref4$id = _ref4.id,
1521
+ id = _ref4$id === void 0 ? null : _ref4$id;
1522
+ return id === 'font-family';
1523
+ }
1524
+ }, {
1525
+ key: "valueIsFont",
1526
+ value: function valueIsFont(_ref5) {
1527
+ var _ref5$type = _ref5.type,
1528
+ type = _ref5$type === void 0 ? null : _ref5$type;
1529
+ return type === 'custom' || type === 'google';
1530
+ }
1531
+ }, {
1532
+ key: "extractFontsWithPaths",
1533
+ value: function extractFontsWithPaths(data, patterns) {
1534
+ var keyPrefix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
1535
+ var dataIsArray = isArray(data);
1536
+ var keys = dataIsArray ? _toConsumableArray(data.keys()) : Object.keys(data);
1537
+ return keys.reduce(function (currentFonts, key) {
1538
+ var path = [keyPrefix, key].filter(function (it) {
1539
+ return it !== null;
1540
+ }).join('.');
1541
+ var patternMatch = patterns.reduce(function (found, pattern) {
1542
+ return found || pattern.test(path);
1543
+ }, false);
1544
+ var value = data[key];
1545
+ var font = null;
1546
+ var subFonts = null;
1547
+ if (patternMatch && isObject(value) && FontsParser.valueIsFont(value)) {
1548
+ font = value;
1549
+ } else if (isObject(value) || isArray(value)) {
1550
+ subFonts = FontsParser.extractFontsWithPaths(value, patterns, path);
1551
+ }
1552
+ return subFonts !== null || font !== null ? [].concat(_toConsumableArray(currentFonts), _toConsumableArray(subFonts || []), _toConsumableArray(font !== null ? [font] : [])) : currentFonts;
1553
+ }, []);
1554
+ }
1555
+ }]);
1556
+ return FontsParser;
1557
+ }();
1558
+
1559
+ var _excluded$2 = ["components"],
1560
+ _excluded2$1 = ["shareIncentive", "callToAction"];
1561
+ var MigrationsParser = /*#__PURE__*/function () {
1562
+ function MigrationsParser(_ref) {
1563
+ var fieldsManager = _ref.fieldsManager,
1564
+ screensManager = _ref.screensManager;
1565
+ _classCallCheck(this, MigrationsParser);
1566
+ this.fieldsManager = fieldsManager;
1567
+ this.screensManager = screensManager;
1568
+ }
1569
+
1570
+ // eslint-disable-next-line class-methods-use-this
1571
+ _createClass(MigrationsParser, [{
1572
+ key: "parse",
1573
+ value: function parse(story) {
1574
+ if (story === null) {
1575
+ return story;
1576
+ }
1577
+ var _ref2 = story || {},
1578
+ _ref2$components = _ref2.components,
1579
+ components = _ref2$components === void 0 ? [] : _ref2$components,
1580
+ restStory = _objectWithoutProperties(_ref2, _excluded$2);
1581
+ var finalComponents = components.reduce(function (currentComponents, screen) {
1582
+ var _ref3 = screen || {},
1583
+ _ref3$shareIncentive = _ref3.shareIncentive,
1584
+ shareIncentive = _ref3$shareIncentive === void 0 ? null : _ref3$shareIncentive,
1585
+ _ref3$callToAction = _ref3.callToAction,
1586
+ callToAction = _ref3$callToAction === void 0 ? null : _ref3$callToAction,
1587
+ restScreen = _objectWithoutProperties(_ref3, _excluded2$1);
1588
+ if (shareIncentive === null && callToAction === null) {
1589
+ return [].concat(_toConsumableArray(currentComponents), [restScreen]);
1590
+ }
1591
+ var _ref4 = screen || {},
1592
+ _ref4$header = _ref4.header,
1593
+ header = _ref4$header === void 0 ? null : _ref4$header,
1594
+ _ref4$footer = _ref4.footer,
1595
+ footer = _ref4$footer === void 0 ? null : _ref4$footer;
1596
+
1597
+ // Carful for recursivity here cause same key name
1598
+ var newHeader = shareIncentive !== null ? _objectSpread(_objectSpread({}, shareIncentive !== null ? {
1599
+ shareIncentive: shareIncentive
1600
+ } : null), header !== null ? {
1601
+ header: header
1602
+ } : null) : header;
1603
+ var newFooter = callToAction !== null ? _objectSpread(_objectSpread({}, callToAction !== null ? {
1604
+ callToAction: callToAction
1605
+ } : null), footer !== null ? {
1606
+ footer: footer
1607
+ } : null) : footer;
1608
+ var newScreen = _objectSpread(_objectSpread(_objectSpread({}, restScreen), newHeader !== null ? {
1609
+ header: newHeader
1610
+ } : null), newFooter !== null ? {
1611
+ footer: newFooter
1612
+ } : null);
1613
+ return [].concat(_toConsumableArray(currentComponents), [newScreen]);
1614
+ }, []);
1615
+ return _objectSpread(_objectSpread({}, restStory), {}, {
1616
+ components: finalComponents
1617
+ });
1618
+ }
1619
+ }]);
1620
+ return MigrationsParser;
1621
+ }();
1622
+
1623
+ var _excluded$1 = ["textStyle", "color", "boxStyle"];
1429
1624
  var ThemeParser = /*#__PURE__*/function () {
1430
1625
  function ThemeParser(_ref) {
1431
1626
  var screensManager = _ref.screensManager;
@@ -1519,6 +1714,7 @@ var ThemeParser = /*#__PURE__*/function () {
1519
1714
  value: function parseField(key, definition, value, themeValue, themeColors, themeTextStyles, themeBoxStyles) {
1520
1715
  var _definition$theme = definition.theme,
1521
1716
  fieldTheme = _definition$theme === void 0 ? null : _definition$theme;
1717
+ // console.log('fieldTheme', id, fieldTheme);
1522
1718
 
1523
1719
  // Early return
1524
1720
  if (fieldTheme === null || !isObject(fieldTheme)) {
@@ -1529,6 +1725,7 @@ var ThemeParser = /*#__PURE__*/function () {
1529
1725
  if (isArray(value)) {
1530
1726
  var newFieldValue = value.map(function (innerField) {
1531
1727
  return innerField !== null ? Object.keys(innerField).reduce(function (newInnerField, innerFieldName) {
1728
+ // console.log('innerField', innerField);
1532
1729
  // Early return
1533
1730
  if (!isObject(innerField[innerFieldName])) {
1534
1731
  return newInnerField;
@@ -1588,15 +1785,15 @@ var ThemeParser = /*#__PURE__*/function () {
1588
1785
  fieldColorName = _ref4$color === void 0 ? null : _ref4$color,
1589
1786
  _ref4$boxStyle = _ref4.boxStyle,
1590
1787
  fieldBoxStyleName = _ref4$boxStyle === void 0 ? null : _ref4$boxStyle,
1591
- otherProps = _objectWithoutProperties(_ref4, _excluded$2);
1788
+ otherProps = _objectWithoutProperties(_ref4, _excluded$1);
1592
1789
  if (fieldTextStyleName === null && fieldColorName === null && fieldBoxStyleName === null && isEmpty(otherProps) && !isObject(fieldTheme)) {
1593
1790
  return value;
1594
1791
  }
1595
1792
  var complexValue = null;
1596
1793
  if (!isEmpty(otherProps)) {
1597
- complexValue = Object.keys(fieldTheme).reduce(function (newObject, key) {
1794
+ complexValue = Object.keys(otherProps).reduce(function (newObject, key) {
1598
1795
  var innerValue = value !== null ? value[key] || null : null;
1599
- var newValue = _this3.parseValue(innerValue, fieldTheme[key], themeValue, themeColors, themeTextStyles, themeBoxStyles);
1796
+ var newValue = _this3.parseValue(innerValue, otherProps[key], themeValue, themeColors, themeTextStyles, themeBoxStyles);
1600
1797
  return _objectSpread(_objectSpread({}, newObject), newValue !== null ? _defineProperty({}, key, newValue) : null);
1601
1798
  }, {});
1602
1799
  }
@@ -1626,6 +1823,8 @@ var ThemeParser = /*#__PURE__*/function () {
1626
1823
  boxStyle: _objectSpread(_objectSpread(_objectSpread({}, fieldBoxStyle), fieldThemeComponentBoxStyle), valueBoxStyle || null)
1627
1824
  } : null;
1628
1825
 
1826
+ // console.log('hell', boxStyleValue, complexValue);
1827
+
1629
1828
  // Only change value if something is overrided
1630
1829
  return colorValue !== null || themeValue !== null || textStyleValue !== null || boxStyleValue !== null || complexValue !== null ? _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, colorValue), themeValue), value), boxStyleValue), textStyleValue), complexValue) : value;
1631
1830
  }
@@ -1635,132 +1834,6 @@ var ThemeParser = /*#__PURE__*/function () {
1635
1834
  return ThemeParser;
1636
1835
  }();
1637
1836
 
1638
- var _excluded$1 = ["fonts"];
1639
- var FontsParser = /*#__PURE__*/function () {
1640
- function FontsParser(_ref) {
1641
- var fieldsManager = _ref.fieldsManager,
1642
- screensManager = _ref.screensManager;
1643
- _classCallCheck(this, FontsParser);
1644
- this.fieldsManager = fieldsManager;
1645
- this.screensManager = screensManager;
1646
- this.fieldsPatternCache = {};
1647
- }
1648
- _createClass(FontsParser, [{
1649
- key: "getFieldsPatternByScreen",
1650
- value: function getFieldsPatternByScreen(type) {
1651
- if (typeof this.fieldsPatternCache[type] === 'undefined') {
1652
- var _ref2 = this.screensManager.getDefinition(type) || {},
1653
- _ref2$fields = _ref2.fields,
1654
- fields = _ref2$fields === void 0 ? [] : _ref2$fields;
1655
- this.fieldsPatternCache[type] = this.getFieldsPattern(fields);
1656
- }
1657
- return this.fieldsPatternCache[type];
1658
- }
1659
-
1660
- // Extract fonts
1661
- }, {
1662
- key: "parse",
1663
- value: function parse(story) {
1664
- var _this = this;
1665
- if (story === null) {
1666
- return story;
1667
- }
1668
-
1669
- // Extract fonts from screen
1670
- var _ref3 = story || {},
1671
- _ref3$theme = _ref3.theme,
1672
- theme = _ref3$theme === void 0 ? null : _ref3$theme,
1673
- _ref3$components = _ref3.components,
1674
- components = _ref3$components === void 0 ? [] : _ref3$components;
1675
- var fonts = uniq(components.reduce(function (currentFonts, screen) {
1676
- var type = screen.type;
1677
- var fieldsPattern = _this.getFieldsPatternByScreen(type);
1678
- var newFonts = FontsParser.extractFontsWithPaths(screen, fieldsPattern);
1679
- return newFonts.length > 0 ? [].concat(_toConsumableArray(currentFonts), _toConsumableArray(newFonts)) : currentFonts;
1680
- }, []), 'name');
1681
-
1682
- // Extract fonts from theme
1683
- if (theme !== null) {
1684
- var _this$parse = this.parse(theme),
1685
- _this$parse$fonts = _this$parse.fonts,
1686
- themeFonts = _this$parse$fonts === void 0 ? [] : _this$parse$fonts,
1687
- newTheme = _objectWithoutProperties(_this$parse, _excluded$1);
1688
- return fonts.length > 0 || themeFonts.length > 0 ? _objectSpread(_objectSpread({}, story), {}, {
1689
- theme: newTheme,
1690
- fonts: uniq([].concat(_toConsumableArray(themeFonts), _toConsumableArray(fonts)), 'name')
1691
- }) : story;
1692
- }
1693
- return fonts.length > 0 ? _objectSpread(_objectSpread({}, story), {}, {
1694
- fonts: fonts
1695
- }) : story;
1696
- }
1697
- }, {
1698
- key: "getFieldsPattern",
1699
- value: function getFieldsPattern(fields) {
1700
- var _this2 = this;
1701
- var namePrefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
1702
- return fields.reduce(function (patterns, field) {
1703
- var _field$name = field.name,
1704
- name = _field$name === void 0 ? null : _field$name,
1705
- _field$type = field.type,
1706
- type = _field$type === void 0 ? null : _field$type;
1707
- var path = [namePrefix, name].filter(function (it) {
1708
- return it !== null;
1709
- }).join('\\.');
1710
- var fieldDefinition = _objectSpread(_objectSpread({}, type !== null ? _this2.fieldsManager.getDefinition(type) : null), field);
1711
-
1712
- // also check settings fields
1713
- var _fieldDefinition$fiel = fieldDefinition.fields,
1714
- subFields = _fieldDefinition$fiel === void 0 ? [] : _fieldDefinition$fiel,
1715
- _fieldDefinition$item = fieldDefinition.itemsField,
1716
- itemsField = _fieldDefinition$item === void 0 ? null : _fieldDefinition$item,
1717
- _fieldDefinition$sett = fieldDefinition.settings,
1718
- settings = _fieldDefinition$sett === void 0 ? [] : _fieldDefinition$sett;
1719
- return [].concat(_toConsumableArray(patterns), _toConsumableArray(FontsParser.fieldIsFontFamily(fieldDefinition) ? [new RegExp("^".concat(path, "$"))] : []), _toConsumableArray(_this2.getFieldsPattern(subFields, path)), _toConsumableArray(_this2.getFieldsPattern(settings, path)), _toConsumableArray(itemsField !== null ? _this2.getFieldsPattern([itemsField], "".concat(path, "\\.[0-9]+")) : []));
1720
- }, []);
1721
- }
1722
- }], [{
1723
- key: "fieldIsFontFamily",
1724
- value: function fieldIsFontFamily(_ref4) {
1725
- var _ref4$id = _ref4.id,
1726
- id = _ref4$id === void 0 ? null : _ref4$id;
1727
- return id === 'font-family';
1728
- }
1729
- }, {
1730
- key: "valueIsFont",
1731
- value: function valueIsFont(_ref5) {
1732
- var _ref5$type = _ref5.type,
1733
- type = _ref5$type === void 0 ? null : _ref5$type;
1734
- return type === 'custom' || type === 'google';
1735
- }
1736
- }, {
1737
- key: "extractFontsWithPaths",
1738
- value: function extractFontsWithPaths(data, patterns) {
1739
- var keyPrefix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
1740
- var dataIsArray = isArray(data);
1741
- var keys = dataIsArray ? _toConsumableArray(data.keys()) : Object.keys(data);
1742
- return keys.reduce(function (currentFonts, key) {
1743
- var path = [keyPrefix, key].filter(function (it) {
1744
- return it !== null;
1745
- }).join('.');
1746
- var patternMatch = patterns.reduce(function (found, pattern) {
1747
- return found || pattern.test(path);
1748
- }, false);
1749
- var value = data[key];
1750
- var font = null;
1751
- var subFonts = null;
1752
- if (patternMatch && isObject(value) && FontsParser.valueIsFont(value)) {
1753
- font = value;
1754
- } else if (isObject(value) || isArray(value)) {
1755
- subFonts = FontsParser.extractFontsWithPaths(value, patterns, path);
1756
- }
1757
- return subFonts !== null || font !== null ? [].concat(_toConsumableArray(currentFonts), _toConsumableArray(subFonts || []), _toConsumableArray(font !== null ? [font] : [])) : currentFonts;
1758
- }, []);
1759
- }
1760
- }]);
1761
- return FontsParser;
1762
- }();
1763
-
1764
1837
  var StoryParser = /*#__PURE__*/function () {
1765
1838
  function StoryParser(_ref) {
1766
1839
  var screensManager = _ref.screensManager,
@@ -1777,6 +1850,10 @@ var StoryParser = /*#__PURE__*/function () {
1777
1850
  screensManager: screensManager,
1778
1851
  fieldsManager: fieldsManager
1779
1852
  });
1853
+ this.migrationsParser = new MigrationsParser({
1854
+ screensManager: screensManager,
1855
+ fieldsManager: fieldsManager
1856
+ });
1780
1857
  }
1781
1858
  _createClass(StoryParser, [{
1782
1859
  key: "parse",
@@ -1788,7 +1865,9 @@ var StoryParser = /*#__PURE__*/function () {
1788
1865
  _ref2$withMedias = _ref2.withMedias,
1789
1866
  withMedias = _ref2$withMedias === void 0 ? true : _ref2$withMedias,
1790
1867
  _ref2$withFonts = _ref2.withFonts,
1791
- withFonts = _ref2$withFonts === void 0 ? true : _ref2$withFonts;
1868
+ withFonts = _ref2$withFonts === void 0 ? true : _ref2$withFonts,
1869
+ _ref2$withMigrations = _ref2.withMigrations,
1870
+ withMigrations = _ref2$withMigrations === void 0 ? true : _ref2$withMigrations;
1792
1871
  if (story === null) {
1793
1872
  return story;
1794
1873
  }
@@ -1798,6 +1877,8 @@ var StoryParser = /*#__PURE__*/function () {
1798
1877
  return _this.themeParser.parse(newStory);
1799
1878
  }], [withFonts, function (newStory) {
1800
1879
  return _this.fontsParser.parse(newStory);
1880
+ }], [withMigrations, function (newStory) {
1881
+ return _this.migrationsParser.parse(newStory);
1801
1882
  }]];
1802
1883
  return parsers.reduce(function (parsedStory, _ref3) {
1803
1884
  var _ref4 = _slicedToArray(_ref3, 2),
package/es/utils.js CHANGED
@@ -3,7 +3,7 @@ import { paramCase } from 'param-case';
3
3
  import _regeneratorRuntime from '@babel/runtime/helpers/regeneratorRuntime';
4
4
  import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
5
5
  import isObject from 'lodash/isObject';
6
- import { useEffect } from 'react';
6
+ import { useEffect, useMemo } from 'react';
7
7
  import isString from 'lodash/isString';
8
8
  import tinycolor from 'tinycolor2';
9
9
  import { pascalCase, paramCase as paramCase$1, snakeCase } from 'change-case';
@@ -393,6 +393,40 @@ var getFontFamily = function getFontFamily(value) {
393
393
  }).join(', ');
394
394
  };
395
395
 
396
+ var _excluded$1 = ["isPreview", "isView", "current", "openWebView", "enableInteraction", "disableInteraction"];
397
+ var getFooterProps = function getFooterProps() {
398
+ var footer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
399
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
400
+ _ref$isPreview = _ref.isPreview,
401
+ isPreview = _ref$isPreview === void 0 ? false : _ref$isPreview,
402
+ _ref$isView = _ref.isView,
403
+ isView = _ref$isView === void 0 ? false : _ref$isView,
404
+ _ref$current = _ref.current,
405
+ current = _ref$current === void 0 ? false : _ref$current,
406
+ _ref$openWebView = _ref.openWebView,
407
+ openWebView = _ref$openWebView === void 0 ? false : _ref$openWebView,
408
+ _ref$enableInteractio = _ref.enableInteraction,
409
+ enableInteraction = _ref$enableInteractio === void 0 ? true : _ref$enableInteractio,
410
+ _ref$disableInteracti = _ref.disableInteraction,
411
+ disableInteraction = _ref$disableInteracti === void 0 ? false : _ref$disableInteracti,
412
+ otherProps = _objectWithoutProperties(_ref, _excluded$1);
413
+ var _ref2 = footer || {},
414
+ _ref2$callToAction = _ref2.callToAction,
415
+ callToAction = _ref2$callToAction === void 0 ? null : _ref2$callToAction;
416
+ var footerProps = useMemo(function () {
417
+ return {
418
+ callToAction: _objectSpread(_objectSpread({}, callToAction), {}, {
419
+ animationDisabled: isPreview,
420
+ focusable: current && isView,
421
+ openWebView: openWebView,
422
+ enableInteraction: enableInteraction,
423
+ disableInteraction: disableInteraction
424
+ }, otherProps)
425
+ };
426
+ }, [callToAction, isPreview, isView, current, enableInteraction, disableInteraction, otherProps]);
427
+ return footerProps;
428
+ };
429
+
396
430
  var getGridLayoutName = function getGridLayoutName(layout) {
397
431
  return layout.map(function (it) {
398
432
  return "".concat(it.rows, "_").concat(it.columns.join('_'));
@@ -912,6 +946,38 @@ var getLayoutParts = function getLayoutParts() {
912
946
  };
913
947
  };
914
948
 
949
+ var isHeaderFilled = function isHeaderFilled() {
950
+ var header = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
951
+ var _ref = header || {},
952
+ _ref$badge = _ref.badge,
953
+ badge = _ref$badge === void 0 ? null : _ref$badge;
954
+ var _ref2 = badge || {},
955
+ _ref2$active = _ref2.active,
956
+ badgeActive = _ref2$active === void 0 ? false : _ref2$active,
957
+ _ref2$label = _ref2.label,
958
+ label = _ref2$label === void 0 ? null : _ref2$label;
959
+ var _ref3 = label || {},
960
+ _ref3$body = _ref3.body,
961
+ body = _ref3$body === void 0 ? null : _ref3$body;
962
+ return badgeActive && body !== null;
963
+ };
964
+
965
+ var isFooterFilled = function isFooterFilled() {
966
+ var footer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
967
+ var _ref = footer || {},
968
+ _ref$callToAction = _ref.callToAction,
969
+ callToAction = _ref$callToAction === void 0 ? null : _ref$callToAction;
970
+ var _ref2 = callToAction || {},
971
+ _ref2$active = _ref2.active,
972
+ callToActionActive = _ref2$active === void 0 ? false : _ref2$active,
973
+ _ref2$label = _ref2.label,
974
+ label = _ref2$label === void 0 ? null : _ref2$label;
975
+ var _ref3 = label || {},
976
+ _ref3$body = _ref3.body,
977
+ body = _ref3$body === void 0 ? null : _ref3$body;
978
+ return callToActionActive && body !== null;
979
+ };
980
+
915
981
  var isMessage = function isMessage(message) {
916
982
  return isObject(message) && typeof message.defaultMessage !== 'undefined';
917
983
  };
@@ -1043,4 +1109,4 @@ var getContrastingColor = function getContrastingColor(backgroundColor) {
1043
1109
  return tinycolor(color).spin(30).toString();
1044
1110
  };
1045
1111
 
1046
- export { convertStyleToString, copyToClipboard, createNullableOnChange, createUseEvent, easings, getColorAsString, getComponentFromName, getContrastingColor, getDeviceScreens, getDisplayName, getFieldByName, getFieldFromPath, getFileName, getFontFamily as getFontFamilyFromFont, getGridLayoutName, largestRemainderRound as getLargestRemainderRound, getLayersFromBackground, getLayoutParts, getMediaFilesAsArray, getOptimalImageUrl, getScreenExtraField, getSecondsFromTime, getShadowCoords, getStyleFromAlignment, getStyleFromBorder, getStyleFromBox, getStyleFromColor, getStyleFromContainer, getStyleFromHighlight, getStyleFromImage, getStyleFromLink, getStyleFromMargin, getStyleFromText, getVideoSupportedMimes, isImageFilled, isIos, isTextFilled$1 as isLabelFilled, isMessage, isTextFilled, isValidUrl, schemaId, setValue as setFieldValue, slug, unique, validateFields };
1112
+ export { convertStyleToString, copyToClipboard, createNullableOnChange, createUseEvent, easings, getColorAsString, getComponentFromName, getContrastingColor, getDeviceScreens, getDisplayName, getFieldByName, getFieldFromPath, getFileName, getFontFamily as getFontFamilyFromFont, getFooterProps, getGridLayoutName, largestRemainderRound as getLargestRemainderRound, getLayersFromBackground, getLayoutParts, getMediaFilesAsArray, getOptimalImageUrl, getScreenExtraField, getSecondsFromTime, getShadowCoords, getStyleFromAlignment, getStyleFromBorder, getStyleFromBox, getStyleFromColor, getStyleFromContainer, getStyleFromHighlight, getStyleFromImage, getStyleFromLink, getStyleFromMargin, getStyleFromText, getVideoSupportedMimes, isFooterFilled, isHeaderFilled, isImageFilled, isIos, isTextFilled$1 as isLabelFilled, isMessage, isTextFilled, isValidUrl, schemaId, setValue as setFieldValue, slug, unique, validateFields };
package/lib/components.js CHANGED
@@ -1333,8 +1333,9 @@ var Dropdown = function Dropdown(_ref) {
1333
1333
  onClickItem(e);
1334
1334
  }
1335
1335
  } : null;
1336
- return ItemComponent !== null ? /*#__PURE__*/React__default["default"].createElement("div", null, /*#__PURE__*/React__default["default"].createElement(ItemComponent, Object.assign({
1337
- key: "item-".concat(index, "-").concat(label, "-").concat(type),
1336
+ return ItemComponent !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
1337
+ key: "item-".concat(index, "-").concat(label, "-").concat(type)
1338
+ }, /*#__PURE__*/React__default["default"].createElement(ItemComponent, Object.assign({
1338
1339
  className: classNames__default["default"]([(_ref3 = {
1339
1340
  'dropdown-item': type === 'link' || type === 'button',
1340
1341
  'dropdown-divider': type === 'divider',
@@ -3142,6 +3143,10 @@ PropTypes__default["default"].shape({
3142
3143
  id: PropTypes__default["default"].oneOfType([PropTypes__default["default"].string, PropTypes__default["default"].number]),
3143
3144
  name: PropTypes__default["default"].string
3144
3145
  });
3146
+ PropTypes__default["default"].shape({
3147
+ label: textElement,
3148
+ buttonStyle: boxStyle
3149
+ });
3145
3150
 
3146
3151
  /* eslint-disable react/no-array-index-key */
3147
3152
  var propTypes$d = {
package/lib/hooks.js CHANGED
@@ -1637,7 +1637,9 @@ var useParsedStory = function useParsedStory(story) {
1637
1637
  _ref$withMedias = _ref.withMedias,
1638
1638
  withMedias = _ref$withMedias === void 0 ? true : _ref$withMedias,
1639
1639
  _ref$withFonts = _ref.withFonts,
1640
- withFonts = _ref$withFonts === void 0 ? true : _ref$withFonts;
1640
+ withFonts = _ref$withFonts === void 0 ? true : _ref$withFonts,
1641
+ _ref$withMigrations = _ref.withMigrations,
1642
+ withMigrations = _ref$withMigrations === void 0 ? true : _ref$withMigrations;
1641
1643
  var screensManager = contexts.useScreensManager();
1642
1644
  var fieldsManager = contexts.useFieldsManager();
1643
1645
  var parser = react.useMemo(function () {
@@ -1653,7 +1655,8 @@ var useParsedStory = function useParsedStory(story) {
1653
1655
  return parser.parse(story, {
1654
1656
  withMedias: withMedias,
1655
1657
  withTheme: withTheme,
1656
- withFonts: withFonts
1658
+ withFonts: withFonts,
1659
+ withMigrations: withMigrations
1657
1660
  });
1658
1661
  }, [parser, disabled, withMedias, withTheme, withFonts, story]);
1659
1662
  return newStory;
package/lib/index.js CHANGED
@@ -29,8 +29,8 @@ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
29
29
  require('slugify');
30
30
  var uniqBy = require('lodash/uniqBy');
31
31
  var _typeof = require('@babel/runtime/helpers/typeof');
32
- var isEmpty = require('lodash/isEmpty');
33
32
  var uniq = require('lodash/uniq');
33
+ var isEmpty = require('lodash/isEmpty');
34
34
  var tracking = require('@folklore/tracking');
35
35
 
36
36
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -53,8 +53,8 @@ var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_obje
53
53
  var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
54
54
  var uniqBy__default = /*#__PURE__*/_interopDefaultLegacy(uniqBy);
55
55
  var _typeof__default = /*#__PURE__*/_interopDefaultLegacy(_typeof);
56
- var isEmpty__default = /*#__PURE__*/_interopDefaultLegacy(isEmpty);
57
56
  var uniq__default = /*#__PURE__*/_interopDefaultLegacy(uniq);
57
+ var isEmpty__default = /*#__PURE__*/_interopDefaultLegacy(isEmpty);
58
58
 
59
59
  /**
60
60
  * Core
@@ -632,6 +632,10 @@ var visitor = PropTypes__default["default"].shape({
632
632
  id: PropTypes__default["default"].oneOfType([PropTypes__default["default"].string, PropTypes__default["default"].number]),
633
633
  name: PropTypes__default["default"].string
634
634
  });
635
+ var badge = PropTypes__default["default"].shape({
636
+ label: textElement,
637
+ buttonStyle: boxStyle
638
+ });
635
639
 
636
640
  var PropTypes = /*#__PURE__*/Object.freeze({
637
641
  __proto__: null,
@@ -776,7 +780,8 @@ var PropTypes = /*#__PURE__*/Object.freeze({
776
780
  paymentItems: paymentItems,
777
781
  pageMetadata: pageMetadata,
778
782
  authorElement: authorElement,
779
- visitor: visitor
783
+ visitor: visitor,
784
+ badge: badge
780
785
  });
781
786
 
782
787
  var sortedColors = function sortedColors(colors) {
@@ -1164,7 +1169,7 @@ var FieldsManager = /*#__PURE__*/function (_DefinitionsManager) {
1164
1169
  return FieldsManager;
1165
1170
  }(DefinitionsManager);
1166
1171
 
1167
- var _excluded$3 = ["medias"];
1172
+ var _excluded$4 = ["medias"];
1168
1173
  var MediasParser = /*#__PURE__*/function () {
1169
1174
  function MediasParser(_ref) {
1170
1175
  var fieldsManager = _ref.fieldsManager,
@@ -1220,7 +1225,7 @@ var MediasParser = /*#__PURE__*/function () {
1220
1225
  if (theme !== null) {
1221
1226
  var _this$toPath = this.toPath(theme),
1222
1227
  themeMedias = _this$toPath.medias,
1223
- newTheme = _objectWithoutProperties__default["default"](_this$toPath, _excluded$3);
1228
+ newTheme = _objectWithoutProperties__default["default"](_this$toPath, _excluded$4);
1224
1229
  return medias !== null || themeMedias !== null ? _objectSpread__default["default"](_objectSpread__default["default"]({}, story), {}, {
1225
1230
  theme: newTheme,
1226
1231
  components: newComponents,
@@ -1452,7 +1457,197 @@ var ScreensManager = /*#__PURE__*/function (_DefinitionsManager) {
1452
1457
  return ScreensManager;
1453
1458
  }(DefinitionsManager);
1454
1459
 
1455
- var _excluded$2 = ["textStyle", "color", "boxStyle"];
1460
+ var _excluded$3 = ["fonts"];
1461
+ var FontsParser = /*#__PURE__*/function () {
1462
+ function FontsParser(_ref) {
1463
+ var fieldsManager = _ref.fieldsManager,
1464
+ screensManager = _ref.screensManager;
1465
+ _classCallCheck__default["default"](this, FontsParser);
1466
+ this.fieldsManager = fieldsManager;
1467
+ this.screensManager = screensManager;
1468
+ this.fieldsPatternCache = {};
1469
+ }
1470
+ _createClass__default["default"](FontsParser, [{
1471
+ key: "getFieldsPatternByScreen",
1472
+ value: function getFieldsPatternByScreen(type) {
1473
+ if (typeof this.fieldsPatternCache[type] === 'undefined') {
1474
+ var _ref2 = this.screensManager.getDefinition(type) || {},
1475
+ _ref2$fields = _ref2.fields,
1476
+ fields = _ref2$fields === void 0 ? [] : _ref2$fields;
1477
+ this.fieldsPatternCache[type] = this.getFieldsPattern(fields);
1478
+ }
1479
+ return this.fieldsPatternCache[type];
1480
+ }
1481
+
1482
+ // Extract fonts
1483
+ }, {
1484
+ key: "parse",
1485
+ value: function parse(story) {
1486
+ var _this = this;
1487
+ if (story === null) {
1488
+ return story;
1489
+ }
1490
+
1491
+ // Extract fonts from screen
1492
+ var _ref3 = story || {},
1493
+ _ref3$theme = _ref3.theme,
1494
+ theme = _ref3$theme === void 0 ? null : _ref3$theme,
1495
+ _ref3$components = _ref3.components,
1496
+ components = _ref3$components === void 0 ? [] : _ref3$components;
1497
+ var fonts = uniq__default["default"](components.reduce(function (currentFonts, screen) {
1498
+ var type = screen.type;
1499
+ var fieldsPattern = _this.getFieldsPatternByScreen(type);
1500
+ var newFonts = FontsParser.extractFontsWithPaths(screen, fieldsPattern);
1501
+ return newFonts.length > 0 ? [].concat(_toConsumableArray__default["default"](currentFonts), _toConsumableArray__default["default"](newFonts)) : currentFonts;
1502
+ }, []), 'name');
1503
+
1504
+ // Extract fonts from theme
1505
+ if (theme !== null) {
1506
+ var _this$parse = this.parse(theme),
1507
+ _this$parse$fonts = _this$parse.fonts,
1508
+ themeFonts = _this$parse$fonts === void 0 ? [] : _this$parse$fonts,
1509
+ newTheme = _objectWithoutProperties__default["default"](_this$parse, _excluded$3);
1510
+ return fonts.length > 0 || themeFonts.length > 0 ? _objectSpread__default["default"](_objectSpread__default["default"]({}, story), {}, {
1511
+ theme: newTheme,
1512
+ fonts: uniq__default["default"]([].concat(_toConsumableArray__default["default"](themeFonts), _toConsumableArray__default["default"](fonts)), 'name')
1513
+ }) : story;
1514
+ }
1515
+ return fonts.length > 0 ? _objectSpread__default["default"](_objectSpread__default["default"]({}, story), {}, {
1516
+ fonts: fonts
1517
+ }) : story;
1518
+ }
1519
+ }, {
1520
+ key: "getFieldsPattern",
1521
+ value: function getFieldsPattern(fields) {
1522
+ var _this2 = this;
1523
+ var namePrefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
1524
+ return fields.reduce(function (patterns, field) {
1525
+ var _field$name = field.name,
1526
+ name = _field$name === void 0 ? null : _field$name,
1527
+ _field$type = field.type,
1528
+ type = _field$type === void 0 ? null : _field$type;
1529
+ var path = [namePrefix, name].filter(function (it) {
1530
+ return it !== null;
1531
+ }).join('\\.');
1532
+ var fieldDefinition = _objectSpread__default["default"](_objectSpread__default["default"]({}, type !== null ? _this2.fieldsManager.getDefinition(type) : null), field);
1533
+
1534
+ // also check settings fields
1535
+ var _fieldDefinition$fiel = fieldDefinition.fields,
1536
+ subFields = _fieldDefinition$fiel === void 0 ? [] : _fieldDefinition$fiel,
1537
+ _fieldDefinition$item = fieldDefinition.itemsField,
1538
+ itemsField = _fieldDefinition$item === void 0 ? null : _fieldDefinition$item,
1539
+ _fieldDefinition$sett = fieldDefinition.settings,
1540
+ settings = _fieldDefinition$sett === void 0 ? [] : _fieldDefinition$sett;
1541
+ return [].concat(_toConsumableArray__default["default"](patterns), _toConsumableArray__default["default"](FontsParser.fieldIsFontFamily(fieldDefinition) ? [new RegExp("^".concat(path, "$"))] : []), _toConsumableArray__default["default"](_this2.getFieldsPattern(subFields, path)), _toConsumableArray__default["default"](_this2.getFieldsPattern(settings, path)), _toConsumableArray__default["default"](itemsField !== null ? _this2.getFieldsPattern([itemsField], "".concat(path, "\\.[0-9]+")) : []));
1542
+ }, []);
1543
+ }
1544
+ }], [{
1545
+ key: "fieldIsFontFamily",
1546
+ value: function fieldIsFontFamily(_ref4) {
1547
+ var _ref4$id = _ref4.id,
1548
+ id = _ref4$id === void 0 ? null : _ref4$id;
1549
+ return id === 'font-family';
1550
+ }
1551
+ }, {
1552
+ key: "valueIsFont",
1553
+ value: function valueIsFont(_ref5) {
1554
+ var _ref5$type = _ref5.type,
1555
+ type = _ref5$type === void 0 ? null : _ref5$type;
1556
+ return type === 'custom' || type === 'google';
1557
+ }
1558
+ }, {
1559
+ key: "extractFontsWithPaths",
1560
+ value: function extractFontsWithPaths(data, patterns) {
1561
+ var keyPrefix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
1562
+ var dataIsArray = isArray__default["default"](data);
1563
+ var keys = dataIsArray ? _toConsumableArray__default["default"](data.keys()) : Object.keys(data);
1564
+ return keys.reduce(function (currentFonts, key) {
1565
+ var path = [keyPrefix, key].filter(function (it) {
1566
+ return it !== null;
1567
+ }).join('.');
1568
+ var patternMatch = patterns.reduce(function (found, pattern) {
1569
+ return found || pattern.test(path);
1570
+ }, false);
1571
+ var value = data[key];
1572
+ var font = null;
1573
+ var subFonts = null;
1574
+ if (patternMatch && isObject__default["default"](value) && FontsParser.valueIsFont(value)) {
1575
+ font = value;
1576
+ } else if (isObject__default["default"](value) || isArray__default["default"](value)) {
1577
+ subFonts = FontsParser.extractFontsWithPaths(value, patterns, path);
1578
+ }
1579
+ return subFonts !== null || font !== null ? [].concat(_toConsumableArray__default["default"](currentFonts), _toConsumableArray__default["default"](subFonts || []), _toConsumableArray__default["default"](font !== null ? [font] : [])) : currentFonts;
1580
+ }, []);
1581
+ }
1582
+ }]);
1583
+ return FontsParser;
1584
+ }();
1585
+
1586
+ var _excluded$2 = ["components"],
1587
+ _excluded2$1 = ["shareIncentive", "callToAction"];
1588
+ var MigrationsParser = /*#__PURE__*/function () {
1589
+ function MigrationsParser(_ref) {
1590
+ var fieldsManager = _ref.fieldsManager,
1591
+ screensManager = _ref.screensManager;
1592
+ _classCallCheck__default["default"](this, MigrationsParser);
1593
+ this.fieldsManager = fieldsManager;
1594
+ this.screensManager = screensManager;
1595
+ }
1596
+
1597
+ // eslint-disable-next-line class-methods-use-this
1598
+ _createClass__default["default"](MigrationsParser, [{
1599
+ key: "parse",
1600
+ value: function parse(story) {
1601
+ if (story === null) {
1602
+ return story;
1603
+ }
1604
+ var _ref2 = story || {},
1605
+ _ref2$components = _ref2.components,
1606
+ components = _ref2$components === void 0 ? [] : _ref2$components,
1607
+ restStory = _objectWithoutProperties__default["default"](_ref2, _excluded$2);
1608
+ var finalComponents = components.reduce(function (currentComponents, screen) {
1609
+ var _ref3 = screen || {},
1610
+ _ref3$shareIncentive = _ref3.shareIncentive,
1611
+ shareIncentive = _ref3$shareIncentive === void 0 ? null : _ref3$shareIncentive,
1612
+ _ref3$callToAction = _ref3.callToAction,
1613
+ callToAction = _ref3$callToAction === void 0 ? null : _ref3$callToAction,
1614
+ restScreen = _objectWithoutProperties__default["default"](_ref3, _excluded2$1);
1615
+ if (shareIncentive === null && callToAction === null) {
1616
+ return [].concat(_toConsumableArray__default["default"](currentComponents), [restScreen]);
1617
+ }
1618
+ var _ref4 = screen || {},
1619
+ _ref4$header = _ref4.header,
1620
+ header = _ref4$header === void 0 ? null : _ref4$header,
1621
+ _ref4$footer = _ref4.footer,
1622
+ footer = _ref4$footer === void 0 ? null : _ref4$footer;
1623
+
1624
+ // Carful for recursivity here cause same key name
1625
+ var newHeader = shareIncentive !== null ? _objectSpread__default["default"](_objectSpread__default["default"]({}, shareIncentive !== null ? {
1626
+ shareIncentive: shareIncentive
1627
+ } : null), header !== null ? {
1628
+ header: header
1629
+ } : null) : header;
1630
+ var newFooter = callToAction !== null ? _objectSpread__default["default"](_objectSpread__default["default"]({}, callToAction !== null ? {
1631
+ callToAction: callToAction
1632
+ } : null), footer !== null ? {
1633
+ footer: footer
1634
+ } : null) : footer;
1635
+ var newScreen = _objectSpread__default["default"](_objectSpread__default["default"](_objectSpread__default["default"]({}, restScreen), newHeader !== null ? {
1636
+ header: newHeader
1637
+ } : null), newFooter !== null ? {
1638
+ footer: newFooter
1639
+ } : null);
1640
+ return [].concat(_toConsumableArray__default["default"](currentComponents), [newScreen]);
1641
+ }, []);
1642
+ return _objectSpread__default["default"](_objectSpread__default["default"]({}, restStory), {}, {
1643
+ components: finalComponents
1644
+ });
1645
+ }
1646
+ }]);
1647
+ return MigrationsParser;
1648
+ }();
1649
+
1650
+ var _excluded$1 = ["textStyle", "color", "boxStyle"];
1456
1651
  var ThemeParser = /*#__PURE__*/function () {
1457
1652
  function ThemeParser(_ref) {
1458
1653
  var screensManager = _ref.screensManager;
@@ -1546,6 +1741,7 @@ var ThemeParser = /*#__PURE__*/function () {
1546
1741
  value: function parseField(key, definition, value, themeValue, themeColors, themeTextStyles, themeBoxStyles) {
1547
1742
  var _definition$theme = definition.theme,
1548
1743
  fieldTheme = _definition$theme === void 0 ? null : _definition$theme;
1744
+ // console.log('fieldTheme', id, fieldTheme);
1549
1745
 
1550
1746
  // Early return
1551
1747
  if (fieldTheme === null || !isObject__default["default"](fieldTheme)) {
@@ -1556,6 +1752,7 @@ var ThemeParser = /*#__PURE__*/function () {
1556
1752
  if (isArray__default["default"](value)) {
1557
1753
  var newFieldValue = value.map(function (innerField) {
1558
1754
  return innerField !== null ? Object.keys(innerField).reduce(function (newInnerField, innerFieldName) {
1755
+ // console.log('innerField', innerField);
1559
1756
  // Early return
1560
1757
  if (!isObject__default["default"](innerField[innerFieldName])) {
1561
1758
  return newInnerField;
@@ -1615,15 +1812,15 @@ var ThemeParser = /*#__PURE__*/function () {
1615
1812
  fieldColorName = _ref4$color === void 0 ? null : _ref4$color,
1616
1813
  _ref4$boxStyle = _ref4.boxStyle,
1617
1814
  fieldBoxStyleName = _ref4$boxStyle === void 0 ? null : _ref4$boxStyle,
1618
- otherProps = _objectWithoutProperties__default["default"](_ref4, _excluded$2);
1815
+ otherProps = _objectWithoutProperties__default["default"](_ref4, _excluded$1);
1619
1816
  if (fieldTextStyleName === null && fieldColorName === null && fieldBoxStyleName === null && isEmpty__default["default"](otherProps) && !isObject__default["default"](fieldTheme)) {
1620
1817
  return value;
1621
1818
  }
1622
1819
  var complexValue = null;
1623
1820
  if (!isEmpty__default["default"](otherProps)) {
1624
- complexValue = Object.keys(fieldTheme).reduce(function (newObject, key) {
1821
+ complexValue = Object.keys(otherProps).reduce(function (newObject, key) {
1625
1822
  var innerValue = value !== null ? value[key] || null : null;
1626
- var newValue = _this3.parseValue(innerValue, fieldTheme[key], themeValue, themeColors, themeTextStyles, themeBoxStyles);
1823
+ var newValue = _this3.parseValue(innerValue, otherProps[key], themeValue, themeColors, themeTextStyles, themeBoxStyles);
1627
1824
  return _objectSpread__default["default"](_objectSpread__default["default"]({}, newObject), newValue !== null ? _defineProperty__default["default"]({}, key, newValue) : null);
1628
1825
  }, {});
1629
1826
  }
@@ -1653,6 +1850,8 @@ var ThemeParser = /*#__PURE__*/function () {
1653
1850
  boxStyle: _objectSpread__default["default"](_objectSpread__default["default"](_objectSpread__default["default"]({}, fieldBoxStyle), fieldThemeComponentBoxStyle), valueBoxStyle || null)
1654
1851
  } : null;
1655
1852
 
1853
+ // console.log('hell', boxStyleValue, complexValue);
1854
+
1656
1855
  // Only change value if something is overrided
1657
1856
  return colorValue !== null || themeValue !== null || textStyleValue !== null || boxStyleValue !== null || complexValue !== null ? _objectSpread__default["default"](_objectSpread__default["default"](_objectSpread__default["default"](_objectSpread__default["default"](_objectSpread__default["default"](_objectSpread__default["default"]({}, colorValue), themeValue), value), boxStyleValue), textStyleValue), complexValue) : value;
1658
1857
  }
@@ -1662,132 +1861,6 @@ var ThemeParser = /*#__PURE__*/function () {
1662
1861
  return ThemeParser;
1663
1862
  }();
1664
1863
 
1665
- var _excluded$1 = ["fonts"];
1666
- var FontsParser = /*#__PURE__*/function () {
1667
- function FontsParser(_ref) {
1668
- var fieldsManager = _ref.fieldsManager,
1669
- screensManager = _ref.screensManager;
1670
- _classCallCheck__default["default"](this, FontsParser);
1671
- this.fieldsManager = fieldsManager;
1672
- this.screensManager = screensManager;
1673
- this.fieldsPatternCache = {};
1674
- }
1675
- _createClass__default["default"](FontsParser, [{
1676
- key: "getFieldsPatternByScreen",
1677
- value: function getFieldsPatternByScreen(type) {
1678
- if (typeof this.fieldsPatternCache[type] === 'undefined') {
1679
- var _ref2 = this.screensManager.getDefinition(type) || {},
1680
- _ref2$fields = _ref2.fields,
1681
- fields = _ref2$fields === void 0 ? [] : _ref2$fields;
1682
- this.fieldsPatternCache[type] = this.getFieldsPattern(fields);
1683
- }
1684
- return this.fieldsPatternCache[type];
1685
- }
1686
-
1687
- // Extract fonts
1688
- }, {
1689
- key: "parse",
1690
- value: function parse(story) {
1691
- var _this = this;
1692
- if (story === null) {
1693
- return story;
1694
- }
1695
-
1696
- // Extract fonts from screen
1697
- var _ref3 = story || {},
1698
- _ref3$theme = _ref3.theme,
1699
- theme = _ref3$theme === void 0 ? null : _ref3$theme,
1700
- _ref3$components = _ref3.components,
1701
- components = _ref3$components === void 0 ? [] : _ref3$components;
1702
- var fonts = uniq__default["default"](components.reduce(function (currentFonts, screen) {
1703
- var type = screen.type;
1704
- var fieldsPattern = _this.getFieldsPatternByScreen(type);
1705
- var newFonts = FontsParser.extractFontsWithPaths(screen, fieldsPattern);
1706
- return newFonts.length > 0 ? [].concat(_toConsumableArray__default["default"](currentFonts), _toConsumableArray__default["default"](newFonts)) : currentFonts;
1707
- }, []), 'name');
1708
-
1709
- // Extract fonts from theme
1710
- if (theme !== null) {
1711
- var _this$parse = this.parse(theme),
1712
- _this$parse$fonts = _this$parse.fonts,
1713
- themeFonts = _this$parse$fonts === void 0 ? [] : _this$parse$fonts,
1714
- newTheme = _objectWithoutProperties__default["default"](_this$parse, _excluded$1);
1715
- return fonts.length > 0 || themeFonts.length > 0 ? _objectSpread__default["default"](_objectSpread__default["default"]({}, story), {}, {
1716
- theme: newTheme,
1717
- fonts: uniq__default["default"]([].concat(_toConsumableArray__default["default"](themeFonts), _toConsumableArray__default["default"](fonts)), 'name')
1718
- }) : story;
1719
- }
1720
- return fonts.length > 0 ? _objectSpread__default["default"](_objectSpread__default["default"]({}, story), {}, {
1721
- fonts: fonts
1722
- }) : story;
1723
- }
1724
- }, {
1725
- key: "getFieldsPattern",
1726
- value: function getFieldsPattern(fields) {
1727
- var _this2 = this;
1728
- var namePrefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
1729
- return fields.reduce(function (patterns, field) {
1730
- var _field$name = field.name,
1731
- name = _field$name === void 0 ? null : _field$name,
1732
- _field$type = field.type,
1733
- type = _field$type === void 0 ? null : _field$type;
1734
- var path = [namePrefix, name].filter(function (it) {
1735
- return it !== null;
1736
- }).join('\\.');
1737
- var fieldDefinition = _objectSpread__default["default"](_objectSpread__default["default"]({}, type !== null ? _this2.fieldsManager.getDefinition(type) : null), field);
1738
-
1739
- // also check settings fields
1740
- var _fieldDefinition$fiel = fieldDefinition.fields,
1741
- subFields = _fieldDefinition$fiel === void 0 ? [] : _fieldDefinition$fiel,
1742
- _fieldDefinition$item = fieldDefinition.itemsField,
1743
- itemsField = _fieldDefinition$item === void 0 ? null : _fieldDefinition$item,
1744
- _fieldDefinition$sett = fieldDefinition.settings,
1745
- settings = _fieldDefinition$sett === void 0 ? [] : _fieldDefinition$sett;
1746
- return [].concat(_toConsumableArray__default["default"](patterns), _toConsumableArray__default["default"](FontsParser.fieldIsFontFamily(fieldDefinition) ? [new RegExp("^".concat(path, "$"))] : []), _toConsumableArray__default["default"](_this2.getFieldsPattern(subFields, path)), _toConsumableArray__default["default"](_this2.getFieldsPattern(settings, path)), _toConsumableArray__default["default"](itemsField !== null ? _this2.getFieldsPattern([itemsField], "".concat(path, "\\.[0-9]+")) : []));
1747
- }, []);
1748
- }
1749
- }], [{
1750
- key: "fieldIsFontFamily",
1751
- value: function fieldIsFontFamily(_ref4) {
1752
- var _ref4$id = _ref4.id,
1753
- id = _ref4$id === void 0 ? null : _ref4$id;
1754
- return id === 'font-family';
1755
- }
1756
- }, {
1757
- key: "valueIsFont",
1758
- value: function valueIsFont(_ref5) {
1759
- var _ref5$type = _ref5.type,
1760
- type = _ref5$type === void 0 ? null : _ref5$type;
1761
- return type === 'custom' || type === 'google';
1762
- }
1763
- }, {
1764
- key: "extractFontsWithPaths",
1765
- value: function extractFontsWithPaths(data, patterns) {
1766
- var keyPrefix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
1767
- var dataIsArray = isArray__default["default"](data);
1768
- var keys = dataIsArray ? _toConsumableArray__default["default"](data.keys()) : Object.keys(data);
1769
- return keys.reduce(function (currentFonts, key) {
1770
- var path = [keyPrefix, key].filter(function (it) {
1771
- return it !== null;
1772
- }).join('.');
1773
- var patternMatch = patterns.reduce(function (found, pattern) {
1774
- return found || pattern.test(path);
1775
- }, false);
1776
- var value = data[key];
1777
- var font = null;
1778
- var subFonts = null;
1779
- if (patternMatch && isObject__default["default"](value) && FontsParser.valueIsFont(value)) {
1780
- font = value;
1781
- } else if (isObject__default["default"](value) || isArray__default["default"](value)) {
1782
- subFonts = FontsParser.extractFontsWithPaths(value, patterns, path);
1783
- }
1784
- return subFonts !== null || font !== null ? [].concat(_toConsumableArray__default["default"](currentFonts), _toConsumableArray__default["default"](subFonts || []), _toConsumableArray__default["default"](font !== null ? [font] : [])) : currentFonts;
1785
- }, []);
1786
- }
1787
- }]);
1788
- return FontsParser;
1789
- }();
1790
-
1791
1864
  var StoryParser = /*#__PURE__*/function () {
1792
1865
  function StoryParser(_ref) {
1793
1866
  var screensManager = _ref.screensManager,
@@ -1804,6 +1877,10 @@ var StoryParser = /*#__PURE__*/function () {
1804
1877
  screensManager: screensManager,
1805
1878
  fieldsManager: fieldsManager
1806
1879
  });
1880
+ this.migrationsParser = new MigrationsParser({
1881
+ screensManager: screensManager,
1882
+ fieldsManager: fieldsManager
1883
+ });
1807
1884
  }
1808
1885
  _createClass__default["default"](StoryParser, [{
1809
1886
  key: "parse",
@@ -1815,7 +1892,9 @@ var StoryParser = /*#__PURE__*/function () {
1815
1892
  _ref2$withMedias = _ref2.withMedias,
1816
1893
  withMedias = _ref2$withMedias === void 0 ? true : _ref2$withMedias,
1817
1894
  _ref2$withFonts = _ref2.withFonts,
1818
- withFonts = _ref2$withFonts === void 0 ? true : _ref2$withFonts;
1895
+ withFonts = _ref2$withFonts === void 0 ? true : _ref2$withFonts,
1896
+ _ref2$withMigrations = _ref2.withMigrations,
1897
+ withMigrations = _ref2$withMigrations === void 0 ? true : _ref2$withMigrations;
1819
1898
  if (story === null) {
1820
1899
  return story;
1821
1900
  }
@@ -1825,6 +1904,8 @@ var StoryParser = /*#__PURE__*/function () {
1825
1904
  return _this.themeParser.parse(newStory);
1826
1905
  }], [withFonts, function (newStory) {
1827
1906
  return _this.fontsParser.parse(newStory);
1907
+ }], [withMigrations, function (newStory) {
1908
+ return _this.migrationsParser.parse(newStory);
1828
1909
  }]];
1829
1910
  return parsers.reduce(function (parsedStory, _ref3) {
1830
1911
  var _ref4 = _slicedToArray__default["default"](_ref3, 2),
package/lib/utils.js CHANGED
@@ -412,6 +412,40 @@ var getFontFamily = function getFontFamily(value) {
412
412
  }).join(', ');
413
413
  };
414
414
 
415
+ var _excluded$1 = ["isPreview", "isView", "current", "openWebView", "enableInteraction", "disableInteraction"];
416
+ var getFooterProps = function getFooterProps() {
417
+ var footer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
418
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
419
+ _ref$isPreview = _ref.isPreview,
420
+ isPreview = _ref$isPreview === void 0 ? false : _ref$isPreview,
421
+ _ref$isView = _ref.isView,
422
+ isView = _ref$isView === void 0 ? false : _ref$isView,
423
+ _ref$current = _ref.current,
424
+ current = _ref$current === void 0 ? false : _ref$current,
425
+ _ref$openWebView = _ref.openWebView,
426
+ openWebView = _ref$openWebView === void 0 ? false : _ref$openWebView,
427
+ _ref$enableInteractio = _ref.enableInteraction,
428
+ enableInteraction = _ref$enableInteractio === void 0 ? true : _ref$enableInteractio,
429
+ _ref$disableInteracti = _ref.disableInteraction,
430
+ disableInteraction = _ref$disableInteracti === void 0 ? false : _ref$disableInteracti,
431
+ otherProps = _objectWithoutProperties__default["default"](_ref, _excluded$1);
432
+ var _ref2 = footer || {},
433
+ _ref2$callToAction = _ref2.callToAction,
434
+ callToAction = _ref2$callToAction === void 0 ? null : _ref2$callToAction;
435
+ var footerProps = react.useMemo(function () {
436
+ return {
437
+ callToAction: _objectSpread__default["default"](_objectSpread__default["default"]({}, callToAction), {}, {
438
+ animationDisabled: isPreview,
439
+ focusable: current && isView,
440
+ openWebView: openWebView,
441
+ enableInteraction: enableInteraction,
442
+ disableInteraction: disableInteraction
443
+ }, otherProps)
444
+ };
445
+ }, [callToAction, isPreview, isView, current, enableInteraction, disableInteraction, otherProps]);
446
+ return footerProps;
447
+ };
448
+
415
449
  var getGridLayoutName = function getGridLayoutName(layout) {
416
450
  return layout.map(function (it) {
417
451
  return "".concat(it.rows, "_").concat(it.columns.join('_'));
@@ -931,6 +965,38 @@ var getLayoutParts = function getLayoutParts() {
931
965
  };
932
966
  };
933
967
 
968
+ var isHeaderFilled = function isHeaderFilled() {
969
+ var header = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
970
+ var _ref = header || {},
971
+ _ref$badge = _ref.badge,
972
+ badge = _ref$badge === void 0 ? null : _ref$badge;
973
+ var _ref2 = badge || {},
974
+ _ref2$active = _ref2.active,
975
+ badgeActive = _ref2$active === void 0 ? false : _ref2$active,
976
+ _ref2$label = _ref2.label,
977
+ label = _ref2$label === void 0 ? null : _ref2$label;
978
+ var _ref3 = label || {},
979
+ _ref3$body = _ref3.body,
980
+ body = _ref3$body === void 0 ? null : _ref3$body;
981
+ return badgeActive && body !== null;
982
+ };
983
+
984
+ var isFooterFilled = function isFooterFilled() {
985
+ var footer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
986
+ var _ref = footer || {},
987
+ _ref$callToAction = _ref.callToAction,
988
+ callToAction = _ref$callToAction === void 0 ? null : _ref$callToAction;
989
+ var _ref2 = callToAction || {},
990
+ _ref2$active = _ref2.active,
991
+ callToActionActive = _ref2$active === void 0 ? false : _ref2$active,
992
+ _ref2$label = _ref2.label,
993
+ label = _ref2$label === void 0 ? null : _ref2$label;
994
+ var _ref3 = label || {},
995
+ _ref3$body = _ref3.body,
996
+ body = _ref3$body === void 0 ? null : _ref3$body;
997
+ return callToActionActive && body !== null;
998
+ };
999
+
934
1000
  var isMessage = function isMessage(message) {
935
1001
  return isObject__default["default"](message) && typeof message.defaultMessage !== 'undefined';
936
1002
  };
@@ -1084,6 +1150,7 @@ exports.getFieldByName = getFieldByName;
1084
1150
  exports.getFieldFromPath = getFieldFromPath;
1085
1151
  exports.getFileName = getFileName;
1086
1152
  exports.getFontFamilyFromFont = getFontFamily;
1153
+ exports.getFooterProps = getFooterProps;
1087
1154
  exports.getGridLayoutName = getGridLayoutName;
1088
1155
  exports.getLargestRemainderRound = largestRemainderRound;
1089
1156
  exports.getLayersFromBackground = getLayersFromBackground;
@@ -1104,6 +1171,8 @@ exports.getStyleFromLink = getStyleFromLink;
1104
1171
  exports.getStyleFromMargin = getStyleFromMargin;
1105
1172
  exports.getStyleFromText = getStyleFromText;
1106
1173
  exports.getVideoSupportedMimes = getVideoSupportedMimes;
1174
+ exports.isFooterFilled = isFooterFilled;
1175
+ exports.isHeaderFilled = isHeaderFilled;
1107
1176
  exports.isImageFilled = isImageFilled;
1108
1177
  exports.isIos = isIos;
1109
1178
  exports.isLabelFilled = isTextFilled$1;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@micromag/core",
3
- "version": "0.3.348",
3
+ "version": "0.3.359",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "javascript"
@@ -133,5 +133,5 @@
133
133
  "publishConfig": {
134
134
  "access": "public"
135
135
  },
136
- "gitHead": "20ef008fdf5c678004b740f395f51cb548591dad"
136
+ "gitHead": "22eba0d01f18f8971e0405bbb41081b5e2ae80ee"
137
137
  }