@telefonica/mistica 12.1.0 → 12.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +2 -2
  2. package/dist/button-group.d.ts +2 -1
  3. package/dist/button-group.js +35 -4
  4. package/dist/button-group.js.flow +2 -1
  5. package/dist/button-layout.d.ts +2 -1
  6. package/dist/button-layout.js +22 -4
  7. package/dist/button-layout.js.flow +2 -1
  8. package/dist/button.js +110 -32
  9. package/dist/carousel.js +36 -29
  10. package/dist/container-type-context.d.ts +5 -0
  11. package/dist/container-type-context.js +49 -0
  12. package/dist/container-type-context.js.flow +7 -0
  13. package/dist/dialog.d.ts +21 -4
  14. package/dist/dialog.js +51 -26
  15. package/dist/dialog.js.flow +17 -4
  16. package/dist/generated/mistica-icons/icon-gift-light.js +1 -1
  17. package/dist/generated/mistica-icons/icon-hand-snap-filled.js +1 -1
  18. package/dist/generated/mistica-icons/icon-intranet-light.js +1 -1
  19. package/dist/generated/mistica-icons/icon-support-agent-premium-regular.js +1 -1
  20. package/dist/generated/mistica-icons/icon-support-agent-regular.js +1 -1
  21. package/dist/generated/mistica-icons/icon-tag-discount-euro-regular.js +1 -1
  22. package/dist/generated/mistica-icons/icon-tips-and-tricks-regular.js +2 -2
  23. package/dist/generated/mistica-icons/icon-world-device-filled.d.ts +4 -0
  24. package/dist/generated/mistica-icons/icon-world-device-filled.js +109 -0
  25. package/dist/generated/mistica-icons/icon-world-device-filled.js.flow +6 -0
  26. package/dist/generated/mistica-icons/icon-world-device-light.d.ts +4 -0
  27. package/dist/generated/mistica-icons/icon-world-device-light.js +115 -0
  28. package/dist/generated/mistica-icons/icon-world-device-light.js.flow +6 -0
  29. package/dist/generated/mistica-icons/icon-world-device-regular.d.ts +4 -0
  30. package/dist/generated/mistica-icons/icon-world-device-regular.js +109 -0
  31. package/dist/generated/mistica-icons/icon-world-device-regular.js.flow +6 -0
  32. package/dist/grid-layout.d.ts +16 -0
  33. package/dist/grid-layout.js +173 -68
  34. package/dist/grid-layout.js.flow +33 -1
  35. package/dist/header.d.ts +3 -1
  36. package/dist/header.js +4 -2
  37. package/dist/header.js.flow +7 -1
  38. package/dist/hooks.d.ts +1 -1
  39. package/dist/hooks.js.flow +1 -1
  40. package/dist/index.d.ts +5 -1
  41. package/dist/index.js +58 -0
  42. package/dist/index.js.flow +11 -1
  43. package/dist/navigation-bar.js +121 -96
  44. package/dist/navigation-breadcrumbs.d.ts +7 -0
  45. package/dist/navigation-breadcrumbs.js +108 -29
  46. package/dist/navigation-breadcrumbs.js.flow +3 -0
  47. package/dist/overscroll-color-context.d.ts +1 -1
  48. package/dist/overscroll-color-context.js +12 -14
  49. package/dist/overscroll-color-context.js.flow +1 -1
  50. package/dist/package-version.js +1 -1
  51. package/dist/responsive-layout.js +13 -8
  52. package/dist/screen-size-context-provider.js +17 -5
  53. package/dist/screen-size-context.d.ts +1 -0
  54. package/dist/screen-size-context.js +2 -1
  55. package/dist/screen-size-context.js.flow +1 -0
  56. package/dist/skeleton-base.d.ts +9 -0
  57. package/dist/skeleton-base.js +75 -0
  58. package/dist/skeleton-base.js.flow +11 -0
  59. package/dist/skeletons.d.ts +21 -0
  60. package/dist/skeletons.js +232 -0
  61. package/dist/skeletons.js.flow +29 -0
  62. package/dist/skins/blau.js +1 -1
  63. package/dist/skins/movistar.js +1 -1
  64. package/dist/skins/o2-classic.js +1 -1
  65. package/dist/skins/o2.js +1 -1
  66. package/dist/skins/telefonica.js +2 -2
  67. package/dist/skins/utils.d.ts +2 -0
  68. package/dist/skins/utils.js +34 -1
  69. package/dist/skins/utils.js.flow +2 -0
  70. package/dist/skins/vivo.js +1 -1
  71. package/dist/snackbar.js +5 -4
  72. package/dist/tabs.d.ts +2 -1
  73. package/dist/tabs.js +22 -4
  74. package/dist/tabs.js.flow +2 -1
  75. package/dist/utils/types.d.ts +1 -0
  76. package/dist/utils/types.js.flow +6 -0
  77. package/dist-es/button-group.js +34 -4
  78. package/dist-es/button-layout.js +21 -4
  79. package/dist-es/button.js +110 -32
  80. package/dist-es/carousel.js +36 -29
  81. package/dist-es/container-type-context.js +21 -0
  82. package/dist-es/dialog.js +51 -25
  83. package/dist-es/generated/mistica-icons/icon-gift-light.js +1 -1
  84. package/dist-es/generated/mistica-icons/icon-hand-snap-filled.js +1 -1
  85. package/dist-es/generated/mistica-icons/icon-intranet-light.js +1 -1
  86. package/dist-es/generated/mistica-icons/icon-support-agent-premium-regular.js +1 -1
  87. package/dist-es/generated/mistica-icons/icon-support-agent-regular.js +1 -1
  88. package/dist-es/generated/mistica-icons/icon-tag-discount-euro-regular.js +1 -1
  89. package/dist-es/generated/mistica-icons/icon-tips-and-tricks-regular.js +2 -2
  90. package/dist-es/generated/mistica-icons/icon-world-device-filled.js +85 -0
  91. package/dist-es/generated/mistica-icons/icon-world-device-light.js +91 -0
  92. package/dist-es/generated/mistica-icons/icon-world-device-regular.js +85 -0
  93. package/dist-es/grid-layout.js +167 -68
  94. package/dist-es/header.js +4 -2
  95. package/dist-es/index.js +5 -1
  96. package/dist-es/navigation-bar.js +121 -96
  97. package/dist-es/navigation-breadcrumbs.js +106 -30
  98. package/dist-es/overscroll-color-context.js +12 -14
  99. package/dist-es/package-version.js +1 -1
  100. package/dist-es/responsive-layout.js +13 -8
  101. package/dist-es/screen-size-context-provider.js +17 -5
  102. package/dist-es/screen-size-context.js +2 -1
  103. package/dist-es/skeleton-base.js +43 -0
  104. package/dist-es/skeletons.js +196 -0
  105. package/dist-es/skins/blau.js +1 -1
  106. package/dist-es/skins/movistar.js +1 -1
  107. package/dist-es/skins/o2-classic.js +1 -1
  108. package/dist-es/skins/o2.js +1 -1
  109. package/dist-es/skins/telefonica.js +2 -2
  110. package/dist-es/skins/utils.js +12 -0
  111. package/dist-es/skins/vivo.js +1 -1
  112. package/dist-es/snackbar.js +6 -5
  113. package/dist-es/tabs.js +21 -4
  114. package/package.json +2 -2
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
- <img alt="Mística for Web" src="https://raw.githubusercontent.com/Telefonica/mistica-web/master/img/mistica-web.svg">
2
- <br>
1
+ ![Mistica for Web](img/mistica-web-light.svg#gh-light-mode-only)
2
+ ![Mistica for Web](img/mistica-web-dark.svg#gh-dark-mode-only)
3
3
 
4
4
  React components library for Telefonica Design System ([Mistica](https://github.com/Telefonica/mistica))
5
5
 
@@ -1,10 +1,11 @@
1
1
  import * as React from 'react';
2
2
  import { ButtonLink, ButtonPrimary, ButtonSecondary } from './button';
3
- import type { RendersNullableElement } from './utils/types';
3
+ import type { DataAttributes, RendersNullableElement } from './utils/types';
4
4
  export interface ButtonGroupProps {
5
5
  primaryButton?: RendersNullableElement<typeof ButtonPrimary>;
6
6
  secondaryButton?: RendersNullableElement<typeof ButtonSecondary>;
7
7
  link?: RendersNullableElement<typeof ButtonLink>;
8
+ dataAttributes?: DataAttributes;
8
9
  }
9
10
  declare const ButtonGroup: React.FC<ButtonGroupProps>;
10
11
  export default ButtonGroup;
@@ -7,6 +7,7 @@ var _jsxRuntime = require("react/jsx-runtime");
7
7
  var React = _interopRequireWildcard(require("react"));
8
8
  var _jss = require("./jss");
9
9
  var _classnames = _interopRequireDefault(require("classnames"));
10
+ var _dom = require("./utils/dom");
10
11
  function _interopRequireDefault(obj) {
11
12
  return obj && obj.__esModule ? obj : {
12
13
  default: obj
@@ -33,6 +34,35 @@ function _interopRequireWildcard(obj) {
33
34
  return newObj;
34
35
  }
35
36
  }
37
+ function _defineProperty(obj, key, value) {
38
+ if (key in obj) {
39
+ Object.defineProperty(obj, key, {
40
+ value: value,
41
+ enumerable: true,
42
+ configurable: true,
43
+ writable: true
44
+ });
45
+ } else {
46
+ obj[key] = value;
47
+ }
48
+ return obj;
49
+ }
50
+ function _objectSpread(target) {
51
+ var _arguments = arguments, _loop = function(i) {
52
+ var source = _arguments[i] != null ? _arguments[i] : {};
53
+ var ownKeys = Object.keys(source);
54
+ if (typeof Object.getOwnPropertySymbols === "function") {
55
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
56
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
57
+ }));
58
+ }
59
+ ownKeys.forEach(function(key) {
60
+ _defineProperty(target, key, source[key]);
61
+ });
62
+ };
63
+ for(var i = 1; i < arguments.length; i++)_loop(i);
64
+ return target;
65
+ }
36
66
  var buttonLayoutSpacing = 16;
37
67
  var buttonLinkPadding = 12;
38
68
  var useStyles = (0, _jss).createUseStyles(function() {
@@ -65,14 +95,15 @@ var useStyles = (0, _jss).createUseStyles(function() {
65
95
  };
66
96
  });
67
97
  var ButtonGroup = function ButtonGroup(param) {
68
- var primaryButton = param.primaryButton, secondaryButton = param.secondaryButton, link = param.link;
98
+ var primaryButton = param.primaryButton, secondaryButton = param.secondaryButton, link = param.link, dataAttributes = param.dataAttributes;
69
99
  var anyAction = !!primaryButton || !!secondaryButton || !!link;
70
100
  var bothButtons = !!primaryButton && !!secondaryButton;
71
101
  var classes = useStyles({
72
102
  bothButtons: bothButtons
73
103
  });
74
- return anyAction ? /*#__PURE__*/ (0, _jsxRuntime).jsxs("div", {
75
- className: (0, _classnames).default(classes.inline, classes.container),
104
+ return anyAction ? /*#__PURE__*/ (0, _jsxRuntime).jsxs("div", _objectSpread({
105
+ className: (0, _classnames).default(classes.inline, classes.container)
106
+ }, (0, _dom).getPrefixedDataAttributes(dataAttributes), {
76
107
  children: [
77
108
  (primaryButton || secondaryButton) && /*#__PURE__*/ (0, _jsxRuntime).jsxs("div", {
78
109
  className: (0, _classnames).default(classes.inline, classes.buttons),
@@ -90,7 +121,7 @@ var ButtonGroup = function ButtonGroup(param) {
90
121
  children: link
91
122
  })
92
123
  ]
93
- }) : null;
124
+ })) : null;
94
125
  };
95
126
  var _default = ButtonGroup;
96
127
  exports.default = _default;
@@ -2,11 +2,12 @@
2
2
 
3
3
  import * as React from "react";
4
4
  import { ButtonLink, ButtonPrimary, ButtonSecondary } from "./button";
5
- import type { RendersNullableElement } from "./utils/types";
5
+ import type { DataAttributes, RendersNullableElement } from "./utils/types";
6
6
  export type ButtonGroupProps = {
7
7
  primaryButton?: RendersNullableElement<typeof ButtonPrimary>,
8
8
  secondaryButton?: RendersNullableElement<typeof ButtonSecondary>,
9
9
  link?: RendersNullableElement<typeof ButtonLink>,
10
+ dataAttributes?: DataAttributes,
10
11
  };
11
12
  declare var ButtonGroup: React.ComponentType<ButtonGroupProps>;
12
13
  declare export default typeof ButtonGroup;
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { ButtonLink } from './button';
3
- import type { RendersNullableElement } from './utils/types';
3
+ import type { DataAttributes, RendersNullableElement } from './utils/types';
4
4
  import type { NullableButtonElement } from './button';
5
5
  declare type MaybeButtonElement = NullableButtonElement | void | false;
6
6
  declare type ButtonLayoutProps = {
@@ -8,6 +8,7 @@ declare type ButtonLayoutProps = {
8
8
  align?: 'center' | 'left' | 'right' | 'full-width';
9
9
  link?: RendersNullableElement<typeof ButtonLink>;
10
10
  withMargins?: boolean;
11
+ dataAttributes?: DataAttributes;
11
12
  };
12
13
  declare const ButtonLayout: React.FC<ButtonLayoutProps>;
13
14
  export default ButtonLayout;
@@ -10,6 +10,7 @@ var _hooks = require("./hooks");
10
10
  var _button = require("./button");
11
11
  var _classnames = _interopRequireDefault(require("classnames"));
12
12
  var _debounce = _interopRequireDefault(require("lodash/debounce"));
13
+ var _dom = require("./utils/dom");
13
14
  function _interopRequireDefault(obj) {
14
15
  return obj && obj.__esModule ? obj : {
15
16
  default: obj
@@ -93,6 +94,22 @@ function _nonIterableRest() {
93
94
  function _nonIterableSpread() {
94
95
  throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
95
96
  }
97
+ function _objectSpread(target) {
98
+ var _arguments = arguments, _loop = function(i) {
99
+ var source = _arguments[i] != null ? _arguments[i] : {};
100
+ var ownKeys = Object.keys(source);
101
+ if (typeof Object.getOwnPropertySymbols === "function") {
102
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
103
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
104
+ }));
105
+ }
106
+ ownKeys.forEach(function(key) {
107
+ _defineProperty(target, key, source[key]);
108
+ });
109
+ };
110
+ for(var i = 1; i < arguments.length; i++)_loop(i);
111
+ return target;
112
+ }
96
113
  function _slicedToArray(arr, i) {
97
114
  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
98
115
  }
@@ -212,7 +229,7 @@ var buttonsRange = [
212
229
  _button.ButtonPrimary
213
230
  ];
214
231
  var ButtonLayout = function ButtonLayout(param1) {
215
- var children = param1.children, _align = param1.align, align = _align === void 0 ? "full-width" : _align, link = param1.link, _withMargins = param1.withMargins, withMargins = _withMargins === void 0 ? false : _withMargins;
232
+ var children = param1.children, _align = param1.align, align = _align === void 0 ? "full-width" : _align, link = param1.link, _withMargins = param1.withMargins, withMargins = _withMargins === void 0 ? false : _withMargins, dataAttributes = param1.dataAttributes;
216
233
  var isTabletOrSmaller = (0, _hooks).useScreenSize().isTabletOrSmaller;
217
234
  var childrenCount = React.Children.count(children);
218
235
  var ref = _slicedToArray(React.useState({
@@ -304,9 +321,10 @@ var ButtonLayout = function ButtonLayout(param1) {
304
321
  return range1 - range2;
305
322
  });
306
323
  var needsLinkAlignment = !isTabletOrSmaller && align === "left";
307
- var content = /*#__PURE__*/ (0, _jsxRuntime).jsxs("div", {
324
+ var content = /*#__PURE__*/ (0, _jsxRuntime).jsxs("div", _objectSpread({
308
325
  ref: wrapperElRef,
309
- className: classes.container,
326
+ className: classes.container
327
+ }, (0, _dom).getPrefixedDataAttributes(dataAttributes), {
310
328
  children: [
311
329
  link ? /*#__PURE__*/ (0, _jsxRuntime).jsx("div", {
312
330
  className: (0, _classnames).default(classes.link, _defineProperty({}, classes.linkAlignment, needsLinkAlignment)),
@@ -314,7 +332,7 @@ var ButtonLayout = function ButtonLayout(param1) {
314
332
  }) : null,
315
333
  sortedButtons
316
334
  ]
317
- });
335
+ }));
318
336
  return withMargins ? /*#__PURE__*/ (0, _jsxRuntime).jsx("div", {
319
337
  className: classes.margins,
320
338
  children: content
@@ -2,7 +2,7 @@
2
2
 
3
3
  import * as React from "react";
4
4
  import { ButtonLink } from "./button";
5
- import type { RendersNullableElement } from "./utils/types";
5
+ import type { DataAttributes, RendersNullableElement } from "./utils/types";
6
6
  import type { NullableButtonElement } from "./button";
7
7
  declare type MaybeButtonElement = NullableButtonElement | void | false;
8
8
  declare type ButtonLayoutProps = {
@@ -10,6 +10,7 @@ declare type ButtonLayoutProps = {
10
10
  align?: "center" | "left" | "right" | "full-width",
11
11
  link?: RendersNullableElement<typeof ButtonLink>,
12
12
  withMargins?: boolean,
13
+ dataAttributes?: DataAttributes,
13
14
  };
14
15
  declare var ButtonLayout: React.ComponentType<ButtonLayoutProps>;
15
16
  declare export default typeof ButtonLayout;
package/dist/button.js CHANGED
@@ -17,6 +17,7 @@ var _box = _interopRequireDefault(require("./box"));
17
17
  var _common = require("./utils/common");
18
18
  var _analytics = require("./utils/analytics");
19
19
  var _hooks = require("./hooks");
20
+ var _utils = require("./skins/utils");
20
21
  function _interopRequireDefault(obj) {
21
22
  return obj && obj.__esModule ? obj : {
22
23
  default: obj
@@ -122,11 +123,15 @@ var BUTTON_MIN_WIDTH = 136;
122
123
  exports.BUTTON_MIN_WIDTH = BUTTON_MIN_WIDTH;
123
124
  var transitionTiming = "0.3s cubic-bezier(0.77, 0, 0.175, 1)";
124
125
  var BORDER_PX = 1.5;
125
- var SPINNER_MARGIN_PX = 8;
126
+ var ICON_MARGIN_PX = 8;
126
127
  var X_PADDING_PX = 16 - BORDER_PX;
127
128
  var Y_PADDING_PX = 12 - BORDER_PX;
128
129
  var X_SMALL_PADDING_PX = 12 - BORDER_PX;
129
130
  var Y_SMALL_PADDING_PX = 6 - BORDER_PX;
131
+ var ICON_SIZE = 24;
132
+ var SMALL_ICON_SIZE = 20;
133
+ var SPINNER_SIZE = 20;
134
+ var SMALL_SPINNER_SIZE = 16;
130
135
  var commonClasses = function commonClasses() {
131
136
  return {
132
137
  button: {
@@ -134,7 +139,6 @@ var commonClasses = function commonClasses() {
134
139
  position: "relative",
135
140
  width: "auto",
136
141
  minWidth: BUTTON_MIN_WIDTH,
137
- textAlign: "center",
138
142
  border: "".concat(BORDER_PX, "px solid transparent"),
139
143
  borderRadius: 4,
140
144
  overflow: "hidden",
@@ -169,6 +173,9 @@ var commonClasses = function commonClasses() {
169
173
  }
170
174
  },
171
175
  textContent: {
176
+ display: "flex",
177
+ alignItems: "center",
178
+ justifyContent: "center",
172
179
  padding: "".concat(Y_PADDING_PX, "px ").concat(X_PADDING_PX, "px"),
173
180
  opacity: 1,
174
181
  transition: "opacity ".concat(transitionTiming, ", transform ").concat(transitionTiming),
@@ -176,9 +183,7 @@ var commonClasses = function commonClasses() {
176
183
  padding: "".concat(Y_SMALL_PADDING_PX, "px ").concat(X_SMALL_PADDING_PX, "px")
177
184
  },
178
185
  "& svg": {
179
- marginRight: SPINNER_MARGIN_PX,
180
- verticalAlign: "bottom",
181
- height: "100%"
186
+ display: "block"
182
187
  }
183
188
  },
184
189
  isLoading: {
@@ -299,6 +304,48 @@ var useDangerButtonStyles = (0, _jss).createUseStyles(function(theme) {
299
304
  inverse: dangerButtonStyles(theme)
300
305
  });
301
306
  });
307
+ var renderButtonContent = function renderButtonContent(param) {
308
+ var content = param.content, defaultIconSize = param.defaultIconSize, renderText = param.renderText;
309
+ var childrenArr = (0, _utils).flattenChildren(content);
310
+ var length = childrenArr.length;
311
+ var resultChildrenArr = [];
312
+ var accText = [];
313
+ var flushAccText = function flushAccText() {
314
+ resultChildrenArr.push(/*#__PURE__*/ (0, _jsxRuntime).jsx(React.Fragment, {
315
+ children: renderText(accText)
316
+ }, resultChildrenArr.length));
317
+ accText = [];
318
+ };
319
+ childrenArr.forEach(function(element, idx) {
320
+ var isFirstChild = idx === 0;
321
+ var isLastChild = idx === length - 1;
322
+ var isIconElement = /*#__PURE__*/ React.isValidElement(element);
323
+ if (isIconElement) {
324
+ if (accText.length) {
325
+ flushAccText();
326
+ }
327
+ var _size;
328
+ var sizeInPx = (_size = element.props.size) !== null && _size !== void 0 ? _size : defaultIconSize;
329
+ resultChildrenArr.push(/*#__PURE__*/ (0, _jsxRuntime).jsx("div", {
330
+ style: {
331
+ display: "flex",
332
+ alignItems: "center",
333
+ marginLeft: isFirstChild ? 0 : ICON_MARGIN_PX,
334
+ marginRight: isLastChild ? 0 : ICON_MARGIN_PX
335
+ },
336
+ children: /*#__PURE__*/ React.cloneElement(element, {
337
+ size: (0, _css).pxToRem(sizeInPx)
338
+ })
339
+ }, resultChildrenArr.length));
340
+ } else {
341
+ accText.push(element);
342
+ if (isLastChild) {
343
+ flushAccText();
344
+ }
345
+ }
346
+ });
347
+ return resultChildrenArr;
348
+ };
302
349
  var Button = function Button(props) {
303
350
  var eventFormat = (0, _analytics).useTrackingConfig().eventFormat;
304
351
  var ref = (0, _formContext).useForm(), formStatus = ref.formStatus, formId = ref.formId;
@@ -321,24 +368,6 @@ var Button = function Button(props) {
321
368
  shouldRenderSpinner,
322
369
  formStatus
323
370
  ]);
324
- var spinnerSizeRem = (0, _css).pxToRem(props.small ? 16 : 24);
325
- var renderText = function renderText(text) {
326
- return props.small ? /*#__PURE__*/ (0, _jsxRuntime).jsx(_text.Text, {
327
- size: 14,
328
- lineHeight: 20,
329
- weight: "medium",
330
- truncate: 1,
331
- color: "inherit",
332
- as: "div",
333
- children: text
334
- }) : /*#__PURE__*/ (0, _jsxRuntime).jsx(_text.Text3, {
335
- medium: true,
336
- truncate: 1,
337
- color: "inherit",
338
- as: "div",
339
- children: text
340
- });
341
- };
342
371
  var createDefaultTrackingEvent = function createDefaultTrackingEvent() {
343
372
  if (eventFormat === "google-analytics-4") {
344
373
  return {
@@ -354,6 +383,25 @@ var Button = function Button(props) {
354
383
  };
355
384
  }
356
385
  };
386
+ var defaultIconSize = props.small ? SMALL_ICON_SIZE : ICON_SIZE;
387
+ var spinnerSizeRem = (0, _css).pxToRem(props.small ? SMALL_SPINNER_SIZE : SPINNER_SIZE);
388
+ var renderText = function renderText(element) {
389
+ return props.small ? /*#__PURE__*/ (0, _jsxRuntime).jsx(_text.Text, {
390
+ size: 14,
391
+ lineHeight: 20,
392
+ weight: "medium",
393
+ truncate: 1,
394
+ color: "inherit",
395
+ as: "div",
396
+ children: element
397
+ }) : /*#__PURE__*/ (0, _jsxRuntime).jsx(_text.Text3, {
398
+ medium: true,
399
+ truncate: 1,
400
+ color: "inherit",
401
+ as: "div",
402
+ children: element
403
+ });
404
+ };
357
405
  var _trackingEvent;
358
406
  var _obj;
359
407
  var commonProps = {
@@ -371,16 +419,24 @@ var Button = function Button(props) {
371
419
  /*#__PURE__*/ (0, _jsxRuntime).jsx("div", {
372
420
  "aria-hidden": showSpinner ? true : undefined,
373
421
  className: classes.textContent,
374
- children: renderText(props.children)
422
+ children: renderButtonContent({
423
+ content: props.children,
424
+ defaultIconSize: defaultIconSize,
425
+ renderText: renderText
426
+ })
375
427
  }),
376
428
  /*#__PURE__*/ (0, _jsxRuntime).jsx("div", {
377
429
  className: classes.loadingFiller,
378
430
  "aria-hidden": true,
379
431
  style: {
380
432
  paddingLeft: spinnerSizeRem,
381
- paddingRight: SPINNER_MARGIN_PX + 2 * (props.small ? X_SMALL_PADDING_PX : X_PADDING_PX)
433
+ paddingRight: ICON_MARGIN_PX + 2 * (props.small ? X_SMALL_PADDING_PX : X_PADDING_PX)
382
434
  },
383
- children: renderText(loadingText)
435
+ children: renderButtonContent({
436
+ content: loadingText,
437
+ defaultIconSize: defaultIconSize,
438
+ renderText: renderText
439
+ })
384
440
  }),
385
441
  /*#__PURE__*/ (0, _jsxRuntime).jsxs("div", {
386
442
  "aria-hidden": showSpinner ? undefined : true,
@@ -405,7 +461,11 @@ var Button = function Button(props) {
405
461
  }),
406
462
  loadingText ? /*#__PURE__*/ (0, _jsxRuntime).jsx(_box.default, {
407
463
  paddingLeft: 8,
408
- children: renderText(loadingText)
464
+ children: renderButtonContent({
465
+ content: loadingText,
466
+ defaultIconSize: defaultIconSize,
467
+ renderText: renderText
468
+ })
409
469
  }) : null
410
470
  ]
411
471
  })
@@ -482,6 +542,14 @@ var useButtonLinkStyles = (0, _jss).createUseStyles(function(theme) {
482
542
  }),
483
543
  "&[disabled]": disabledStyle
484
544
  },
545
+ textContent: {
546
+ display: "flex",
547
+ alignItems: "center",
548
+ justifyContent: "center",
549
+ "& svg": {
550
+ display: "block"
551
+ }
552
+ },
485
553
  inverse: {
486
554
  color: theme.colors.textLinkInverse,
487
555
  "&:enabled:active": {
@@ -518,17 +586,27 @@ var ButtonLink = /*#__PURE__*/ React.forwardRef(function(props, ref) {
518
586
  };
519
587
  }
520
588
  };
589
+ var renderText = function renderText(element) {
590
+ return /*#__PURE__*/ (0, _jsxRuntime).jsx(_text.Text2, {
591
+ medium: true,
592
+ truncate: 1,
593
+ color: "inherit",
594
+ children: element
595
+ });
596
+ };
521
597
  var _trackingEvent;
522
598
  var _obj;
523
599
  var commonProps = {
524
600
  className: (0, _classnames).default(classes.link, (_obj = {}, _defineProperty(_obj, classes.inverse, isInverse), _defineProperty(_obj, classes.aligned, props.aligned), _obj)),
525
601
  trackingEvent: (_trackingEvent = props.trackingEvent) !== null && _trackingEvent !== void 0 ? _trackingEvent : props.trackEvent ? createDefaultTrackingEvent() : undefined,
526
602
  dataAttributes: props.dataAttributes,
527
- children: /*#__PURE__*/ (0, _jsxRuntime).jsx(_text.Text2, {
528
- medium: true,
529
- truncate: 1,
530
- color: "inherit",
531
- children: props.children
603
+ children: /*#__PURE__*/ (0, _jsxRuntime).jsx("div", {
604
+ className: classes.textContent,
605
+ children: renderButtonContent({
606
+ content: props.children,
607
+ defaultIconSize: SMALL_ICON_SIZE,
608
+ renderText: renderText
609
+ })
532
610
  }),
533
611
  disabled: props.disabled || formStatus === "sending"
534
612
  };
package/dist/carousel.js CHANGED
@@ -20,6 +20,7 @@ var _image = require("./image");
20
20
  var _dom = require("./utils/dom");
21
21
  var _platform = require("./utils/platform");
22
22
  var _documentVisibility = require("./utils/document-visibility");
23
+ var _containerTypeContext = require("./container-type-context");
23
24
  function _interopRequireDefault(obj) {
24
25
  return obj && obj.__esModule ? obj : {
25
26
  default: obj
@@ -218,8 +219,19 @@ var arrowButtonStyle = function arrowButtonStyle(theme) {
218
219
  display: "none"
219
220
  });
220
221
  };
222
+ var arrowButtonSeparation = function arrowButtonSeparation(containerType, isLargeDesktop, sideMargin) {
223
+ switch(containerType){
224
+ case "mobile-column":
225
+ case "tablet-column":
226
+ return -sideMargin;
227
+ case "desktop-wide-column":
228
+ return isLargeDesktop ? -(24 + arrowButtonSize) : -arrowButtonSize / 2;
229
+ default:
230
+ return -arrowButtonSize / 2;
231
+ }
232
+ };
221
233
  var useStyles = (0, _jss).createUseStyles(function(theme) {
222
- var _obj, _obj1, _obj2;
234
+ var _obj;
223
235
  return {
224
236
  carouselContainer: {
225
237
  // This value is a workaround to solve an issue when the page is rendered in a hidden webview
@@ -231,26 +243,18 @@ var useStyles = (0, _jss).createUseStyles(function(theme) {
231
243
  position: "absolute",
232
244
  zIndex: 1,
233
245
  top: "calc(50% - ".concat(arrowButtonSize / 2, "px)"),
234
- "&.prev": (_obj = {
235
- left: -arrowButtonSize / 2
236
- }, _defineProperty(_obj, theme.mq.tabletOrSmaller, {
246
+ "&.prev": {
237
247
  left: function left(param) {
238
- var sideMargin = param.sideMargin;
239
- return -sideMargin;
248
+ var containerType = param.containerType, isLargeDesktop = param.isLargeDesktop, sideMargin = param.sideMargin;
249
+ return arrowButtonSeparation(containerType, isLargeDesktop, sideMargin);
240
250
  }
241
- }), _defineProperty(_obj, theme.mq.largeDesktop, {
242
- left: -(24 + arrowButtonSize)
243
- }), _obj),
244
- "&.next": (_obj1 = {
245
- right: -arrowButtonSize / 2
246
- }, _defineProperty(_obj1, theme.mq.tabletOrSmaller, {
251
+ },
252
+ "&.next": {
247
253
  right: function right(param) {
248
- var sideMargin = param.sideMargin;
249
- return -sideMargin;
254
+ var containerType = param.containerType, isLargeDesktop = param.isLargeDesktop, sideMargin = param.sideMargin;
255
+ return arrowButtonSeparation(containerType, isLargeDesktop, sideMargin);
250
256
  }
251
- }), _defineProperty(_obj1, theme.mq.largeDesktop, {
252
- right: -(24 + arrowButtonSize)
253
- }), _obj1)
257
+ }
254
258
  }),
255
259
  hasScroll: {},
256
260
  centered: {},
@@ -276,7 +280,7 @@ var useStyles = (0, _jss).createUseStyles(function(theme) {
276
280
  width: "25%"
277
281
  }
278
282
  })),
279
- item: (_obj2 = {
283
+ item: (_obj = {
280
284
  scrollSnapStop: (0, _platform).isAndroid(theme.platformOverrides) ? "always" : "normal",
281
285
  scrollSnapAlign: "start",
282
286
  flexShrink: 0,
@@ -295,7 +299,7 @@ var useStyles = (0, _jss).createUseStyles(function(theme) {
295
299
  },
296
300
  scrollMargin: 0
297
301
  }
298
- }, _defineProperty(_obj2, theme.mq.tabletOrSmaller, {
302
+ }, _defineProperty(_obj, theme.mq.tabletOrSmaller, {
299
303
  width: function width(param) {
300
304
  var itemsPerPageConfig = param.itemsPerPageConfig, gap = param.gap;
301
305
  return "calc(".concat(100 / itemsPerPageConfig.mobile, "% + ").concat(gap / itemsPerPageConfig.mobile, "px)");
@@ -346,14 +350,14 @@ var useStyles = (0, _jss).createUseStyles(function(theme) {
346
350
  return 0;
347
351
  }
348
352
  }
349
- }), _defineProperty(_obj2, "&:not(:empty) ~ &:not(:empty)", {
353
+ }), _defineProperty(_obj, "&:not(:empty) ~ &:not(:empty)", {
350
354
  paddingLeft: function paddingLeft(param) {
351
355
  var gap = param.gap;
352
356
  return gap;
353
357
  }
354
- }), _defineProperty(_obj2, "&:empty", {
358
+ }), _defineProperty(_obj, "&:empty", {
355
359
  display: "none"
356
- }), _obj2),
360
+ }), _obj),
357
361
  bullets: {
358
362
  display: "flex",
359
363
  justifyContent: "center"
@@ -417,9 +421,10 @@ var DEFAULT_AUTOPLAY_TIME = 5000;
417
421
  var BaseCarousel = function BaseCarousel(param) {
418
422
  var items = param.items, itemStyle = param.itemStyle, itemClassName = param.itemClassName, withBullets = param.withBullets, renderBullets = param.renderBullets, itemsPerPage = param.itemsPerPage, itemsToScroll = param.itemsToScroll, _mobilePageOffset = param.mobilePageOffset, mobilePageOffset = _mobilePageOffset === void 0 ? 16 : _mobilePageOffset, gapProp = param.gap, free = param.free, centered = param.centered, autoplay = param.autoplay, onPageChange = param.onPageChange, dataAttributes = param.dataAttributes;
419
423
  var texts = (0, _hooks).useTheme().texts;
424
+ var containerType = (0, _containerTypeContext).useContainerType();
420
425
  var itemsPerPageConfig = normalizeItemsPerPage(itemsPerPage);
421
426
  var mobilePageOffsetConfig = normalizeMobilePageOffset(mobilePageOffset);
422
- var isDesktopOrBigger = (0, _hooks).useScreenSize().isDesktopOrBigger;
427
+ var ref4 = (0, _hooks).useScreenSize(), isDesktopOrBigger = ref4.isDesktopOrBigger, isLargeDesktop = ref4.isLargeDesktop;
423
428
  var gap = gapProp !== null && gapProp !== void 0 ? gapProp : isDesktopOrBigger ? 16 : 8;
424
429
  var sideMargin = (0, _responsiveLayout).useResonsiveLayoutMargin();
425
430
  var classes = useStyles({
@@ -427,16 +432,18 @@ var BaseCarousel = function BaseCarousel(param) {
427
432
  mobilePageOffsetConfig: mobilePageOffsetConfig,
428
433
  free: free,
429
434
  gap: gap,
430
- sideMargin: sideMargin
435
+ sideMargin: sideMargin,
436
+ containerType: containerType,
437
+ isLargeDesktop: isLargeDesktop
431
438
  });
432
439
  var carouselRef = React.useRef(null);
433
440
  var itemsPerPageFloor = isDesktopOrBigger ? Math.floor(itemsPerPageConfig.desktop) : Math.floor(itemsPerPageConfig.mobile);
434
441
  var pagesCount = Math.ceil(items.length / itemsPerPageFloor);
435
- var ref3 = _slicedToArray(React.useState({
442
+ var ref1 = _slicedToArray(React.useState({
436
443
  scrollLeft: 0,
437
444
  scrollRight: 0
438
- }), 2), ref1 = ref3[0], scrollLeft1 = ref1.scrollLeft, scrollRight1 = ref1.scrollRight, setScroll = ref3[1];
439
- var ref2 = _slicedToArray(React.useState([]), 2), itemScrollPositions = ref2[0], setItemScrollPositions = ref2[1];
445
+ }), 2), ref2 = ref1[0], scrollLeft1 = ref2.scrollLeft, scrollRight1 = ref2.scrollRight, setScroll = ref1[1];
446
+ var ref3 = _slicedToArray(React.useState([]), 2), itemScrollPositions = ref3[0], setItemScrollPositions = ref3[1];
440
447
  var pagesScrollPositions = calcPagesScrollPositions(itemScrollPositions, pagesCount);
441
448
  var scrollPositions = itemsToScroll ? calcPagesScrollPositions(itemScrollPositions, Math.ceil(items.length / itemsToScroll)) : pagesScrollPositions;
442
449
  var showNextArrow = scrollRight1 !== 0;
@@ -735,10 +742,10 @@ var Slideshow = function Slideshow(param) {
735
742
  sideMargin: sideMargin
736
743
  });
737
744
  var carouselRef = React.useRef(null);
738
- var ref5 = _slicedToArray(React.useState({
745
+ var ref6 = _slicedToArray(React.useState({
739
746
  scrollLeft: 0,
740
747
  scrollRight: 0
741
- }), 2), ref4 = ref5[0], scrollLeft2 = ref4.scrollLeft, scrollRight2 = ref4.scrollRight, setScroll = ref5[1];
748
+ }), 2), ref5 = ref6[0], scrollLeft2 = ref5.scrollLeft, scrollRight2 = ref5.scrollRight, setScroll = ref6[1];
742
749
  var goPrev = React.useCallback(function() {
743
750
  var carouselEl = carouselRef.current;
744
751
  if (carouselEl) {
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ import type { ContainerType } from './utils/types';
3
+ declare const ContainerTypeContext: React.Context<ContainerType | null>;
4
+ export declare const useContainerType: () => ContainerType;
5
+ export default ContainerTypeContext;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.default = exports.useContainerType = void 0;
6
+ var React = _interopRequireWildcard(require("react"));
7
+ var _hooks = require("./hooks");
8
+ function _interopRequireWildcard(obj) {
9
+ if (obj && obj.__esModule) {
10
+ return obj;
11
+ } else {
12
+ var newObj = {};
13
+ if (obj != null) {
14
+ for(var key in obj){
15
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
16
+ var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
17
+ if (desc.get || desc.set) {
18
+ Object.defineProperty(newObj, key, desc);
19
+ } else {
20
+ newObj[key] = obj[key];
21
+ }
22
+ }
23
+ }
24
+ }
25
+ newObj.default = obj;
26
+ return newObj;
27
+ }
28
+ }
29
+ var ContainerTypeContext = /*#__PURE__*/ React.createContext(null);
30
+ var useContainerType = function useContainerType() {
31
+ var containerType = React.useContext(ContainerTypeContext);
32
+ var ref = (0, _hooks).useScreenSize(), isTablet = ref.isTablet, isDesktopOrBigger = ref.isDesktopOrBigger, isLargeDesktop = ref.isLargeDesktop;
33
+ if (containerType) {
34
+ return containerType;
35
+ }
36
+ if (isLargeDesktop) {
37
+ return "desktop-wide-column";
38
+ }
39
+ if (isDesktopOrBigger) {
40
+ return "desktop-medium-column";
41
+ }
42
+ if (isTablet) {
43
+ return "tablet-column";
44
+ }
45
+ return "mobile-column";
46
+ };
47
+ exports.useContainerType = useContainerType;
48
+ var _default = ContainerTypeContext;
49
+ exports.default = _default;
@@ -0,0 +1,7 @@
1
+ // @flow
2
+
3
+ import * as React from "react";
4
+ import type { ContainerType } from "./utils/types";
5
+ declare var ContainerTypeContext: React.Context<ContainerType | null>;
6
+ declare export var useContainerType: () => ContainerType;
7
+ declare export default typeof ContainerTypeContext;