@micromag/screen-ranking 0.2.286

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.
@@ -0,0 +1 @@
1
+ .micromag-screen-ranking-container .micromag-screen-ranking-empty{margin:5px auto;border:2px dashed #343434;color:#343434}.micromag-screen-ranking-container{position:relative}.micromag-screen-ranking-container .micromag-screen-ranking-empty{height:50px;margin-right:10px}.micromag-screen-ranking-container .micromag-screen-ranking-item{position:relative;padding:10px 0}.micromag-screen-ranking-container .micromag-screen-ranking-rankText{font-size:48px}.micromag-screen-ranking-container .micromag-screen-ranking-description,.micromag-screen-ranking-container .micromag-screen-ranking-title{padding:8px 0}.micromag-screen-ranking-container .micromag-screen-ranking-callToAction{position:absolute;bottom:0;left:0;width:100%}.micromag-screen-ranking-container.micromag-screen-ranking-sideLayout .micromag-screen-ranking-layout{display:table;width:100%}.micromag-screen-ranking-container.micromag-screen-ranking-sideLayout .micromag-screen-ranking-item{display:table-row;padding:0}.micromag-screen-ranking-container.micromag-screen-ranking-sideLayout .micromag-screen-ranking-content,.micromag-screen-ranking-container.micromag-screen-ranking-sideLayout .micromag-screen-ranking-rank{display:table-cell;padding:10px 0;vertical-align:top}.micromag-screen-ranking-container.micromag-screen-ranking-sideLayout .micromag-screen-ranking-rank{padding-right:20px}.micromag-screen-ranking-container.micromag-screen-ranking-isPlaceholder .micromag-screen-ranking-rank{color:rgba(28,28,28,.5);font-size:16px;text-align:left}.micromag-screen-ranking-container.micromag-screen-ranking-isPlaceholder .micromag-screen-ranking-scroll{padding:5px}.micromag-screen-ranking-container.micromag-screen-ranking-isPlaceholder .micromag-screen-ranking-description,.micromag-screen-ranking-container.micromag-screen-ranking-isPlaceholder .micromag-screen-ranking-title{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:0}.micromag-screen-ranking-container.micromag-screen-ranking-isPlaceholder .micromag-screen-ranking-item{padding:1px 0}.micromag-screen-ranking-container.micromag-screen-ranking-isPlaceholder.micromag-screen-ranking-sideLayout .micromag-screen-ranking-rank{width:24px;padding-top:8px;padding-right:4px}.micromag-screen-ranking-container.micromag-screen-ranking-isPlaceholder.micromag-screen-ranking-sideLayout .micromag-screen-ranking-content{padding:5px 0}
package/es/index.js ADDED
@@ -0,0 +1,379 @@
1
+ import { FormattedMessage, defineMessage } from 'react-intl';
2
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
3
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
4
+ import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
5
+ import React, { useState, useCallback } from 'react';
6
+ import PropTypes from 'prop-types';
7
+ import classNames from 'classnames';
8
+ import { PropTypes as PropTypes$1 } from '@micromag/core';
9
+ import { Transitions, ScreenElement } from '@micromag/core/components';
10
+ import { useScreenSize, useViewer, useScreenRenderContext } from '@micromag/core/contexts';
11
+ import { useTrackScreenEvent, useResizeObserver } from '@micromag/core/hooks';
12
+ import { isTextFilled } from '@micromag/core/utils';
13
+ import Background from '@micromag/element-background';
14
+ import Container from '@micromag/element-container';
15
+ import Layout from '@micromag/element-layout';
16
+ import Text from '@micromag/element-text';
17
+ import Heading from '@micromag/element-heading';
18
+ import Scroll from '@micromag/element-scroll';
19
+ import CallToAction from '@micromag/element-call-to-action';
20
+ import _objectSpread from '@babel/runtime/helpers/objectSpread2';
21
+ import { Text as Text$1, Container as Container$1 } from '@micromag/transforms/apple-news';
22
+
23
+ var styles = {"container":"micromag-screen-ranking-container","empty":"micromag-screen-ranking-empty","item":"micromag-screen-ranking-item","rankText":"micromag-screen-ranking-rankText","description":"micromag-screen-ranking-description","title":"micromag-screen-ranking-title","callToAction":"micromag-screen-ranking-callToAction","sideLayout":"micromag-screen-ranking-sideLayout","layout":"micromag-screen-ranking-layout","content":"micromag-screen-ranking-content","rank":"micromag-screen-ranking-rank","isPlaceholder":"micromag-screen-ranking-isPlaceholder","scroll":"micromag-screen-ranking-scroll"};
24
+
25
+ var propTypes = {
26
+ layout: PropTypes.oneOf(['side', 'over']),
27
+ items: PropTypes.arrayOf(PropTypes$1.textElement),
28
+ numbersStyle: PropTypes$1.textStyle,
29
+ ascending: PropTypes.bool,
30
+ spacing: PropTypes.number,
31
+ background: PropTypes$1.backgroundElement,
32
+ callToAction: PropTypes$1.callToAction,
33
+ current: PropTypes.bool,
34
+ transitions: PropTypes$1.transitions,
35
+ transitionStagger: PropTypes.number,
36
+ type: PropTypes.string,
37
+ className: PropTypes.string
38
+ };
39
+ var defaultProps = {
40
+ layout: 'side',
41
+ items: [null],
42
+ numbersStyle: null,
43
+ ascending: false,
44
+ spacing: 20,
45
+ background: null,
46
+ callToAction: null,
47
+ current: true,
48
+ transitions: null,
49
+ transitionStagger: 75,
50
+ type: null,
51
+ className: null
52
+ };
53
+
54
+ var RankingScreen = function RankingScreen(_ref) {
55
+ var _ref5;
56
+
57
+ var layout = _ref.layout,
58
+ items = _ref.items,
59
+ numbersStyle = _ref.numbersStyle,
60
+ ascending = _ref.ascending,
61
+ spacing = _ref.spacing,
62
+ background = _ref.background,
63
+ callToAction = _ref.callToAction,
64
+ current = _ref.current,
65
+ transitions = _ref.transitions,
66
+ transitionStagger = _ref.transitionStagger,
67
+ type = _ref.type,
68
+ className = _ref.className;
69
+ var trackScreenEvent = useTrackScreenEvent(type);
70
+
71
+ var _useScreenSize = useScreenSize(),
72
+ width = _useScreenSize.width,
73
+ height = _useScreenSize.height,
74
+ menuOverScreen = _useScreenSize.menuOverScreen;
75
+
76
+ var _useViewer = useViewer(),
77
+ menuSize = _useViewer.menuSize;
78
+
79
+ var _useScreenRenderConte = useScreenRenderContext(),
80
+ isView = _useScreenRenderConte.isView,
81
+ isPreview = _useScreenRenderConte.isPreview,
82
+ isPlaceholder = _useScreenRenderConte.isPlaceholder,
83
+ isEdit = _useScreenRenderConte.isEdit,
84
+ isStatic = _useScreenRenderConte.isStatic,
85
+ isCapture = _useScreenRenderConte.isCapture;
86
+
87
+ var finalItems = isPlaceholder ? _toConsumableArray(new Array(10)).map(function () {
88
+ return {};
89
+ }) : items || [null];
90
+ var itemsCount = finalItems !== null ? finalItems.length : 0;
91
+ var transitionPlaying = current;
92
+ var transitionDisabled = isStatic || isCapture || isPlaceholder || isPreview || isEdit;
93
+ var scrollingDisabled = !isEdit && transitionDisabled || !current;
94
+ var backgroundPlaying = current && (isView || isEdit);
95
+ var elements = (finalItems || []).map(function (item, itemI) {
96
+ var _ref2 = item || {},
97
+ _ref2$title = _ref2.title,
98
+ title = _ref2$title === void 0 ? null : _ref2$title,
99
+ _ref2$description = _ref2.description,
100
+ description = _ref2$description === void 0 ? null : _ref2$description;
101
+
102
+ var hasTitle = isTextFilled(title);
103
+ var hasDescription = isTextFilled(description);
104
+ var titleElement = /*#__PURE__*/React.createElement("div", {
105
+ className: styles.title
106
+ }, /*#__PURE__*/React.createElement(ScreenElement, {
107
+ placeholder: "title",
108
+ emptyLabel: /*#__PURE__*/React.createElement(FormattedMessage, {
109
+ id: "2ZOPe+",
110
+ defaultMessage: [{
111
+ "type": 0,
112
+ "value": "Title"
113
+ }]
114
+ }),
115
+ emptyClassName: styles.empty,
116
+ isEmpty: !hasTitle
117
+ }, hasTitle ? /*#__PURE__*/React.createElement(Transitions, {
118
+ transitions: transitions,
119
+ playing: transitionPlaying,
120
+ delay: transitionStagger * itemI,
121
+ disabled: transitionDisabled
122
+ }, /*#__PURE__*/React.createElement(Heading, title)) : null));
123
+ var descriptionElement = /*#__PURE__*/React.createElement("div", {
124
+ className: styles.description
125
+ }, /*#__PURE__*/React.createElement(ScreenElement, {
126
+ placeholder: "text",
127
+ emptyLabel: /*#__PURE__*/React.createElement(FormattedMessage, {
128
+ id: "507VAi",
129
+ defaultMessage: [{
130
+ "type": 0,
131
+ "value": "Description"
132
+ }]
133
+ }),
134
+ emptyClassName: styles.empty,
135
+ isEmpty: !hasDescription
136
+ }, hasDescription ? /*#__PURE__*/React.createElement(Transitions, {
137
+ transitions: transitions,
138
+ playing: transitionPlaying,
139
+ delay: transitionStagger * itemI,
140
+ disabled: transitionDisabled
141
+ }, /*#__PURE__*/React.createElement(Text, description)) : null));
142
+ var rankText = "".concat(ascending ? itemI + 1 : itemsCount - itemI);
143
+ return /*#__PURE__*/React.createElement("div", {
144
+ className: styles.item,
145
+ key: "item-".concat(itemI)
146
+ }, /*#__PURE__*/React.createElement("div", {
147
+ className: styles.rank
148
+ }, isPlaceholder ? rankText : /*#__PURE__*/React.createElement(Transitions, {
149
+ transitions: transitions,
150
+ playing: transitionPlaying,
151
+ delay: transitionStagger * itemI,
152
+ disabled: transitionDisabled
153
+ }, /*#__PURE__*/React.createElement(Text, {
154
+ className: styles.rankText,
155
+ body: rankText,
156
+ textStyle: numbersStyle
157
+ }))), /*#__PURE__*/React.createElement("div", {
158
+ className: styles.content
159
+ }, titleElement, descriptionElement));
160
+ }); // Call to Action
161
+
162
+ var hasCallToAction = callToAction !== null && callToAction.active === true;
163
+
164
+ var _useState = useState(false),
165
+ _useState2 = _slicedToArray(_useState, 2),
166
+ scrolledBottom = _useState2[0],
167
+ setScrolledBottom = _useState2[1];
168
+
169
+ var _useResizeObserver = useResizeObserver(),
170
+ callToActionRef = _useResizeObserver.ref,
171
+ callToActionRect = _useResizeObserver.entry.contentRect;
172
+
173
+ var _ref3 = callToActionRect || {},
174
+ _ref3$height = _ref3.height,
175
+ callToActionHeight = _ref3$height === void 0 ? 0 : _ref3$height;
176
+
177
+ if (hasCallToAction) {
178
+ elements.push( /*#__PURE__*/React.createElement("div", {
179
+ key: "call-to-action-spacer",
180
+ style: {
181
+ height: callToActionHeight
182
+ }
183
+ }));
184
+ }
185
+
186
+ var onScrolledBottom = useCallback(function (_ref4) {
187
+ var initial = _ref4.initial;
188
+
189
+ if (initial) {
190
+ trackScreenEvent('scroll', 'Screen');
191
+ }
192
+
193
+ setScrolledBottom(true);
194
+ }, [trackScreenEvent]);
195
+ var onScrolledNotBottom = useCallback(function () {
196
+ setScrolledBottom(false);
197
+ }, [setScrolledBottom]);
198
+ return /*#__PURE__*/React.createElement("div", {
199
+ className: classNames([styles.container, (_ref5 = {}, _defineProperty(_ref5, className, className !== null), _defineProperty(_ref5, styles["".concat(layout, "Layout")], layout !== null), _defineProperty(_ref5, styles.isPlaceholder, isPlaceholder), _ref5)]),
200
+ "data-screen-ready": true
201
+ }, !isPlaceholder ? /*#__PURE__*/React.createElement(Background, Object.assign({}, background, {
202
+ width: width,
203
+ height: height,
204
+ playing: backgroundPlaying
205
+ })) : null, /*#__PURE__*/React.createElement(Container, {
206
+ width: width,
207
+ height: height
208
+ }, /*#__PURE__*/React.createElement(Scroll, {
209
+ className: styles.scroll,
210
+ verticalAlign: "middle",
211
+ disabled: scrollingDisabled,
212
+ onScrolledBottom: onScrolledBottom,
213
+ onScrolledNotBottom: onScrolledNotBottom
214
+ }, /*#__PURE__*/React.createElement(Layout, {
215
+ className: styles.layout,
216
+ style: !isPlaceholder ? {
217
+ padding: spacing,
218
+ paddingTop: (menuOverScreen && !isPreview ? menuSize : 0) + spacing
219
+ } : null
220
+ }, elements)), !isPlaceholder && hasCallToAction ? /*#__PURE__*/React.createElement(CallToAction, {
221
+ ref: callToActionRef,
222
+ className: styles.callToAction,
223
+ disabled: !scrolledBottom,
224
+ animationDisabled: isPreview,
225
+ callToAction: callToAction
226
+ }) : null));
227
+ };
228
+
229
+ RankingScreen.propTypes = propTypes;
230
+ RankingScreen.defaultProps = defaultProps;
231
+
232
+ var transform = function transform(newStory, _ref) {
233
+ var _ref$items = _ref.items,
234
+ items = _ref$items === void 0 ? [] : _ref$items,
235
+ _ref$ascending = _ref.ascending,
236
+ ascending = _ref$ascending === void 0 ? false : _ref$ascending;
237
+ var allItems = items || [];
238
+ var ordered = ascending ? allItems.reverse() : allItems;
239
+ var list = ordered.reduce(function (acc, it) {
240
+ var _Text = Text$1(acc.story, it.title),
241
+ titleStory = _Text.story,
242
+ titleComponent = _Text.component;
243
+
244
+ var _Text2 = Text$1(titleStory, it.description),
245
+ descriptionStory = _Text2.story,
246
+ descriptionComponent = _Text2.component;
247
+
248
+ var _Container = Container$1(descriptionStory, [].concat(_toConsumableArray(titleComponent ? [titleComponent] : []), _toConsumableArray(descriptionComponent ? [descriptionComponent] : []))),
249
+ containerStory = _Container.story,
250
+ containerComponent = _Container.component;
251
+
252
+ return {
253
+ story: containerStory,
254
+ components: [].concat(_toConsumableArray(acc.components || []), _toConsumableArray(containerComponent ? [containerComponent] : []))
255
+ };
256
+ }, {
257
+ story: newStory,
258
+ components: []
259
+ });
260
+
261
+ var _ref2 = list || {},
262
+ reducedStory = _ref2.story,
263
+ _ref2$components = _ref2.components,
264
+ reducedComponents = _ref2$components === void 0 ? [] : _ref2$components;
265
+
266
+ var _Container2 = Container$1(reducedStory, reducedComponents),
267
+ bigContainerStory = _Container2.story,
268
+ bigContainerComponent = _Container2.component;
269
+
270
+ return _objectSpread(_objectSpread({}, bigContainerStory), {}, {
271
+ components: [].concat(_toConsumableArray(newStory.components || []), _toConsumableArray(bigContainerComponent ? [bigContainerComponent] : []))
272
+ });
273
+ };
274
+
275
+ // eslint-disable-next-line
276
+
277
+ var transforms = /*#__PURE__*/Object.freeze({
278
+ __proto__: null,
279
+ appleNews: transform
280
+ });
281
+
282
+ var definition = {
283
+ id: 'ranking',
284
+ type: 'screen',
285
+ group: {
286
+ label: defineMessage({
287
+ "id": "cGItoy",
288
+ "defaultMessage": [{
289
+ "type": 0,
290
+ "value": "List"
291
+ }]
292
+ }),
293
+ order: 8
294
+ },
295
+ title: defineMessage({
296
+ "id": "17BMn2",
297
+ "defaultMessage": [{
298
+ "type": 0,
299
+ "value": "Ranking"
300
+ }]
301
+ }),
302
+ component: RankingScreen,
303
+ layouts: ['side', 'over'],
304
+ transforms: transforms,
305
+ fields: [{
306
+ name: 'layout',
307
+ type: 'screen-layout',
308
+ defaultValue: 'side',
309
+ label: defineMessage({
310
+ "id": "4iBXj2",
311
+ "defaultMessage": [{
312
+ "type": 0,
313
+ "value": "Layout"
314
+ }]
315
+ })
316
+ }, {
317
+ name: 'items',
318
+ type: 'entries',
319
+ theme: {
320
+ title: {
321
+ textStyle: 'heading2'
322
+ },
323
+ description: {
324
+ textStyle: 'text'
325
+ }
326
+ },
327
+ label: defineMessage({
328
+ "id": "sESmah",
329
+ "defaultMessage": [{
330
+ "type": 0,
331
+ "value": "Entries"
332
+ }]
333
+ })
334
+ }, {
335
+ name: 'ascending',
336
+ type: 'toggle',
337
+ label: defineMessage({
338
+ "id": "9DhYaZ",
339
+ "defaultMessage": [{
340
+ "type": 0,
341
+ "value": "Ascending"
342
+ }]
343
+ })
344
+ }, {
345
+ name: 'numbersStyle',
346
+ type: 'text-style',
347
+ theme: {
348
+ textStyle: 'heading1'
349
+ },
350
+ label: defineMessage({
351
+ "id": "UdrdRF",
352
+ "defaultMessage": [{
353
+ "type": 0,
354
+ "value": "Numbers style"
355
+ }]
356
+ })
357
+ }, {
358
+ name: 'background',
359
+ type: 'background',
360
+ label: defineMessage({
361
+ "id": "+MPZRu",
362
+ "defaultMessage": [{
363
+ "type": 0,
364
+ "value": "Background"
365
+ }]
366
+ })
367
+ }, {
368
+ name: 'callToAction',
369
+ type: 'call-to-action',
370
+ theme: {
371
+ label: {
372
+ textStyle: 'heading2'
373
+ }
374
+ }
375
+ }]
376
+ };
377
+
378
+ export default definition;
379
+ export { RankingScreen };
package/lib/index.js ADDED
@@ -0,0 +1,400 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var reactIntl = require('react-intl');
6
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
7
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
8
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
9
+ var React = require('react');
10
+ var PropTypes = require('prop-types');
11
+ var classNames = require('classnames');
12
+ var core = require('@micromag/core');
13
+ var components = require('@micromag/core/components');
14
+ var contexts = require('@micromag/core/contexts');
15
+ var hooks = require('@micromag/core/hooks');
16
+ var utils = require('@micromag/core/utils');
17
+ var Background = require('@micromag/element-background');
18
+ var Container = require('@micromag/element-container');
19
+ var Layout = require('@micromag/element-layout');
20
+ var Text = require('@micromag/element-text');
21
+ var Heading = require('@micromag/element-heading');
22
+ var Scroll = require('@micromag/element-scroll');
23
+ var CallToAction = require('@micromag/element-call-to-action');
24
+ var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
25
+ var appleNews = require('@micromag/transforms/apple-news');
26
+
27
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
28
+
29
+ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
30
+ var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
31
+ var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
32
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
33
+ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
34
+ var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames);
35
+ var Background__default = /*#__PURE__*/_interopDefaultLegacy(Background);
36
+ var Container__default = /*#__PURE__*/_interopDefaultLegacy(Container);
37
+ var Layout__default = /*#__PURE__*/_interopDefaultLegacy(Layout);
38
+ var Text__default = /*#__PURE__*/_interopDefaultLegacy(Text);
39
+ var Heading__default = /*#__PURE__*/_interopDefaultLegacy(Heading);
40
+ var Scroll__default = /*#__PURE__*/_interopDefaultLegacy(Scroll);
41
+ var CallToAction__default = /*#__PURE__*/_interopDefaultLegacy(CallToAction);
42
+ var _objectSpread__default = /*#__PURE__*/_interopDefaultLegacy(_objectSpread);
43
+
44
+ var styles = {"container":"micromag-screen-ranking-container","empty":"micromag-screen-ranking-empty","item":"micromag-screen-ranking-item","rankText":"micromag-screen-ranking-rankText","description":"micromag-screen-ranking-description","title":"micromag-screen-ranking-title","callToAction":"micromag-screen-ranking-callToAction","sideLayout":"micromag-screen-ranking-sideLayout","layout":"micromag-screen-ranking-layout","content":"micromag-screen-ranking-content","rank":"micromag-screen-ranking-rank","isPlaceholder":"micromag-screen-ranking-isPlaceholder","scroll":"micromag-screen-ranking-scroll"};
45
+
46
+ var propTypes = {
47
+ layout: PropTypes__default['default'].oneOf(['side', 'over']),
48
+ items: PropTypes__default['default'].arrayOf(core.PropTypes.textElement),
49
+ numbersStyle: core.PropTypes.textStyle,
50
+ ascending: PropTypes__default['default'].bool,
51
+ spacing: PropTypes__default['default'].number,
52
+ background: core.PropTypes.backgroundElement,
53
+ callToAction: core.PropTypes.callToAction,
54
+ current: PropTypes__default['default'].bool,
55
+ transitions: core.PropTypes.transitions,
56
+ transitionStagger: PropTypes__default['default'].number,
57
+ type: PropTypes__default['default'].string,
58
+ className: PropTypes__default['default'].string
59
+ };
60
+ var defaultProps = {
61
+ layout: 'side',
62
+ items: [null],
63
+ numbersStyle: null,
64
+ ascending: false,
65
+ spacing: 20,
66
+ background: null,
67
+ callToAction: null,
68
+ current: true,
69
+ transitions: null,
70
+ transitionStagger: 75,
71
+ type: null,
72
+ className: null
73
+ };
74
+
75
+ var RankingScreen = function RankingScreen(_ref) {
76
+ var _ref5;
77
+
78
+ var layout = _ref.layout,
79
+ items = _ref.items,
80
+ numbersStyle = _ref.numbersStyle,
81
+ ascending = _ref.ascending,
82
+ spacing = _ref.spacing,
83
+ background = _ref.background,
84
+ callToAction = _ref.callToAction,
85
+ current = _ref.current,
86
+ transitions = _ref.transitions,
87
+ transitionStagger = _ref.transitionStagger,
88
+ type = _ref.type,
89
+ className = _ref.className;
90
+ var trackScreenEvent = hooks.useTrackScreenEvent(type);
91
+
92
+ var _useScreenSize = contexts.useScreenSize(),
93
+ width = _useScreenSize.width,
94
+ height = _useScreenSize.height,
95
+ menuOverScreen = _useScreenSize.menuOverScreen;
96
+
97
+ var _useViewer = contexts.useViewer(),
98
+ menuSize = _useViewer.menuSize;
99
+
100
+ var _useScreenRenderConte = contexts.useScreenRenderContext(),
101
+ isView = _useScreenRenderConte.isView,
102
+ isPreview = _useScreenRenderConte.isPreview,
103
+ isPlaceholder = _useScreenRenderConte.isPlaceholder,
104
+ isEdit = _useScreenRenderConte.isEdit,
105
+ isStatic = _useScreenRenderConte.isStatic,
106
+ isCapture = _useScreenRenderConte.isCapture;
107
+
108
+ var finalItems = isPlaceholder ? _toConsumableArray__default['default'](new Array(10)).map(function () {
109
+ return {};
110
+ }) : items || [null];
111
+ var itemsCount = finalItems !== null ? finalItems.length : 0;
112
+ var transitionPlaying = current;
113
+ var transitionDisabled = isStatic || isCapture || isPlaceholder || isPreview || isEdit;
114
+ var scrollingDisabled = !isEdit && transitionDisabled || !current;
115
+ var backgroundPlaying = current && (isView || isEdit);
116
+ var elements = (finalItems || []).map(function (item, itemI) {
117
+ var _ref2 = item || {},
118
+ _ref2$title = _ref2.title,
119
+ title = _ref2$title === void 0 ? null : _ref2$title,
120
+ _ref2$description = _ref2.description,
121
+ description = _ref2$description === void 0 ? null : _ref2$description;
122
+
123
+ var hasTitle = utils.isTextFilled(title);
124
+ var hasDescription = utils.isTextFilled(description);
125
+ var titleElement = /*#__PURE__*/React__default['default'].createElement("div", {
126
+ className: styles.title
127
+ }, /*#__PURE__*/React__default['default'].createElement(components.ScreenElement, {
128
+ placeholder: "title",
129
+ emptyLabel: /*#__PURE__*/React__default['default'].createElement(reactIntl.FormattedMessage, {
130
+ id: "2ZOPe+",
131
+ defaultMessage: [{
132
+ "type": 0,
133
+ "value": "Title"
134
+ }]
135
+ }),
136
+ emptyClassName: styles.empty,
137
+ isEmpty: !hasTitle
138
+ }, hasTitle ? /*#__PURE__*/React__default['default'].createElement(components.Transitions, {
139
+ transitions: transitions,
140
+ playing: transitionPlaying,
141
+ delay: transitionStagger * itemI,
142
+ disabled: transitionDisabled
143
+ }, /*#__PURE__*/React__default['default'].createElement(Heading__default['default'], title)) : null));
144
+ var descriptionElement = /*#__PURE__*/React__default['default'].createElement("div", {
145
+ className: styles.description
146
+ }, /*#__PURE__*/React__default['default'].createElement(components.ScreenElement, {
147
+ placeholder: "text",
148
+ emptyLabel: /*#__PURE__*/React__default['default'].createElement(reactIntl.FormattedMessage, {
149
+ id: "507VAi",
150
+ defaultMessage: [{
151
+ "type": 0,
152
+ "value": "Description"
153
+ }]
154
+ }),
155
+ emptyClassName: styles.empty,
156
+ isEmpty: !hasDescription
157
+ }, hasDescription ? /*#__PURE__*/React__default['default'].createElement(components.Transitions, {
158
+ transitions: transitions,
159
+ playing: transitionPlaying,
160
+ delay: transitionStagger * itemI,
161
+ disabled: transitionDisabled
162
+ }, /*#__PURE__*/React__default['default'].createElement(Text__default['default'], description)) : null));
163
+ var rankText = "".concat(ascending ? itemI + 1 : itemsCount - itemI);
164
+ return /*#__PURE__*/React__default['default'].createElement("div", {
165
+ className: styles.item,
166
+ key: "item-".concat(itemI)
167
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
168
+ className: styles.rank
169
+ }, isPlaceholder ? rankText : /*#__PURE__*/React__default['default'].createElement(components.Transitions, {
170
+ transitions: transitions,
171
+ playing: transitionPlaying,
172
+ delay: transitionStagger * itemI,
173
+ disabled: transitionDisabled
174
+ }, /*#__PURE__*/React__default['default'].createElement(Text__default['default'], {
175
+ className: styles.rankText,
176
+ body: rankText,
177
+ textStyle: numbersStyle
178
+ }))), /*#__PURE__*/React__default['default'].createElement("div", {
179
+ className: styles.content
180
+ }, titleElement, descriptionElement));
181
+ }); // Call to Action
182
+
183
+ var hasCallToAction = callToAction !== null && callToAction.active === true;
184
+
185
+ var _useState = React.useState(false),
186
+ _useState2 = _slicedToArray__default['default'](_useState, 2),
187
+ scrolledBottom = _useState2[0],
188
+ setScrolledBottom = _useState2[1];
189
+
190
+ var _useResizeObserver = hooks.useResizeObserver(),
191
+ callToActionRef = _useResizeObserver.ref,
192
+ callToActionRect = _useResizeObserver.entry.contentRect;
193
+
194
+ var _ref3 = callToActionRect || {},
195
+ _ref3$height = _ref3.height,
196
+ callToActionHeight = _ref3$height === void 0 ? 0 : _ref3$height;
197
+
198
+ if (hasCallToAction) {
199
+ elements.push( /*#__PURE__*/React__default['default'].createElement("div", {
200
+ key: "call-to-action-spacer",
201
+ style: {
202
+ height: callToActionHeight
203
+ }
204
+ }));
205
+ }
206
+
207
+ var onScrolledBottom = React.useCallback(function (_ref4) {
208
+ var initial = _ref4.initial;
209
+
210
+ if (initial) {
211
+ trackScreenEvent('scroll', 'Screen');
212
+ }
213
+
214
+ setScrolledBottom(true);
215
+ }, [trackScreenEvent]);
216
+ var onScrolledNotBottom = React.useCallback(function () {
217
+ setScrolledBottom(false);
218
+ }, [setScrolledBottom]);
219
+ return /*#__PURE__*/React__default['default'].createElement("div", {
220
+ className: classNames__default['default']([styles.container, (_ref5 = {}, _defineProperty__default['default'](_ref5, className, className !== null), _defineProperty__default['default'](_ref5, styles["".concat(layout, "Layout")], layout !== null), _defineProperty__default['default'](_ref5, styles.isPlaceholder, isPlaceholder), _ref5)]),
221
+ "data-screen-ready": true
222
+ }, !isPlaceholder ? /*#__PURE__*/React__default['default'].createElement(Background__default['default'], Object.assign({}, background, {
223
+ width: width,
224
+ height: height,
225
+ playing: backgroundPlaying
226
+ })) : null, /*#__PURE__*/React__default['default'].createElement(Container__default['default'], {
227
+ width: width,
228
+ height: height
229
+ }, /*#__PURE__*/React__default['default'].createElement(Scroll__default['default'], {
230
+ className: styles.scroll,
231
+ verticalAlign: "middle",
232
+ disabled: scrollingDisabled,
233
+ onScrolledBottom: onScrolledBottom,
234
+ onScrolledNotBottom: onScrolledNotBottom
235
+ }, /*#__PURE__*/React__default['default'].createElement(Layout__default['default'], {
236
+ className: styles.layout,
237
+ style: !isPlaceholder ? {
238
+ padding: spacing,
239
+ paddingTop: (menuOverScreen && !isPreview ? menuSize : 0) + spacing
240
+ } : null
241
+ }, elements)), !isPlaceholder && hasCallToAction ? /*#__PURE__*/React__default['default'].createElement(CallToAction__default['default'], {
242
+ ref: callToActionRef,
243
+ className: styles.callToAction,
244
+ disabled: !scrolledBottom,
245
+ animationDisabled: isPreview,
246
+ callToAction: callToAction
247
+ }) : null));
248
+ };
249
+
250
+ RankingScreen.propTypes = propTypes;
251
+ RankingScreen.defaultProps = defaultProps;
252
+
253
+ var transform = function transform(newStory, _ref) {
254
+ var _ref$items = _ref.items,
255
+ items = _ref$items === void 0 ? [] : _ref$items,
256
+ _ref$ascending = _ref.ascending,
257
+ ascending = _ref$ascending === void 0 ? false : _ref$ascending;
258
+ var allItems = items || [];
259
+ var ordered = ascending ? allItems.reverse() : allItems;
260
+ var list = ordered.reduce(function (acc, it) {
261
+ var _Text = appleNews.Text(acc.story, it.title),
262
+ titleStory = _Text.story,
263
+ titleComponent = _Text.component;
264
+
265
+ var _Text2 = appleNews.Text(titleStory, it.description),
266
+ descriptionStory = _Text2.story,
267
+ descriptionComponent = _Text2.component;
268
+
269
+ var _Container = appleNews.Container(descriptionStory, [].concat(_toConsumableArray__default['default'](titleComponent ? [titleComponent] : []), _toConsumableArray__default['default'](descriptionComponent ? [descriptionComponent] : []))),
270
+ containerStory = _Container.story,
271
+ containerComponent = _Container.component;
272
+
273
+ return {
274
+ story: containerStory,
275
+ components: [].concat(_toConsumableArray__default['default'](acc.components || []), _toConsumableArray__default['default'](containerComponent ? [containerComponent] : []))
276
+ };
277
+ }, {
278
+ story: newStory,
279
+ components: []
280
+ });
281
+
282
+ var _ref2 = list || {},
283
+ reducedStory = _ref2.story,
284
+ _ref2$components = _ref2.components,
285
+ reducedComponents = _ref2$components === void 0 ? [] : _ref2$components;
286
+
287
+ var _Container2 = appleNews.Container(reducedStory, reducedComponents),
288
+ bigContainerStory = _Container2.story,
289
+ bigContainerComponent = _Container2.component;
290
+
291
+ return _objectSpread__default['default'](_objectSpread__default['default']({}, bigContainerStory), {}, {
292
+ components: [].concat(_toConsumableArray__default['default'](newStory.components || []), _toConsumableArray__default['default'](bigContainerComponent ? [bigContainerComponent] : []))
293
+ });
294
+ };
295
+
296
+ // eslint-disable-next-line
297
+
298
+ var transforms = /*#__PURE__*/Object.freeze({
299
+ __proto__: null,
300
+ appleNews: transform
301
+ });
302
+
303
+ var definition = {
304
+ id: 'ranking',
305
+ type: 'screen',
306
+ group: {
307
+ label: reactIntl.defineMessage({
308
+ "id": "cGItoy",
309
+ "defaultMessage": [{
310
+ "type": 0,
311
+ "value": "List"
312
+ }]
313
+ }),
314
+ order: 8
315
+ },
316
+ title: reactIntl.defineMessage({
317
+ "id": "17BMn2",
318
+ "defaultMessage": [{
319
+ "type": 0,
320
+ "value": "Ranking"
321
+ }]
322
+ }),
323
+ component: RankingScreen,
324
+ layouts: ['side', 'over'],
325
+ transforms: transforms,
326
+ fields: [{
327
+ name: 'layout',
328
+ type: 'screen-layout',
329
+ defaultValue: 'side',
330
+ label: reactIntl.defineMessage({
331
+ "id": "4iBXj2",
332
+ "defaultMessage": [{
333
+ "type": 0,
334
+ "value": "Layout"
335
+ }]
336
+ })
337
+ }, {
338
+ name: 'items',
339
+ type: 'entries',
340
+ theme: {
341
+ title: {
342
+ textStyle: 'heading2'
343
+ },
344
+ description: {
345
+ textStyle: 'text'
346
+ }
347
+ },
348
+ label: reactIntl.defineMessage({
349
+ "id": "sESmah",
350
+ "defaultMessage": [{
351
+ "type": 0,
352
+ "value": "Entries"
353
+ }]
354
+ })
355
+ }, {
356
+ name: 'ascending',
357
+ type: 'toggle',
358
+ label: reactIntl.defineMessage({
359
+ "id": "9DhYaZ",
360
+ "defaultMessage": [{
361
+ "type": 0,
362
+ "value": "Ascending"
363
+ }]
364
+ })
365
+ }, {
366
+ name: 'numbersStyle',
367
+ type: 'text-style',
368
+ theme: {
369
+ textStyle: 'heading1'
370
+ },
371
+ label: reactIntl.defineMessage({
372
+ "id": "UdrdRF",
373
+ "defaultMessage": [{
374
+ "type": 0,
375
+ "value": "Numbers style"
376
+ }]
377
+ })
378
+ }, {
379
+ name: 'background',
380
+ type: 'background',
381
+ label: reactIntl.defineMessage({
382
+ "id": "+MPZRu",
383
+ "defaultMessage": [{
384
+ "type": 0,
385
+ "value": "Background"
386
+ }]
387
+ })
388
+ }, {
389
+ name: 'callToAction',
390
+ type: 'call-to-action',
391
+ theme: {
392
+ label: {
393
+ textStyle: 'heading2'
394
+ }
395
+ }
396
+ }]
397
+ };
398
+
399
+ exports.RankingScreen = RankingScreen;
400
+ exports.default = definition;
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "@micromag/screen-ranking",
3
+ "version": "0.2.286",
4
+ "description": "",
5
+ "keywords": [
6
+ "javascript"
7
+ ],
8
+ "homepage": "https://github.com/urbania-media/micromag-js",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/urbania-media/micromag-js.git"
12
+ },
13
+ "author": {
14
+ "name": "Folklore",
15
+ "email": "info@folklore.email"
16
+ },
17
+ "contributors": [
18
+ {
19
+ "name": "David Mongeau-Petitpas",
20
+ "email": "dmp@folklore.email"
21
+ },
22
+ {
23
+ "name": "Nicolas Roy-Bourdages",
24
+ "email": "nrb@folklore.email"
25
+ },
26
+ {
27
+ "name": "Julien Carignan",
28
+ "email": "jc@folklore.email"
29
+ }
30
+ ],
31
+ "license": "ISC",
32
+ "main": "lib/index.js",
33
+ "module": "es/index.js",
34
+ "files": [
35
+ "lib",
36
+ "es",
37
+ "assets"
38
+ ],
39
+ "scripts": {
40
+ "prepare": "../../scripts/prepare-package.sh"
41
+ },
42
+ "devDependencies": {
43
+ "react": "^16.8.0",
44
+ "react-dom": "^16.8.0"
45
+ },
46
+ "peerDependencies": {
47
+ "react": "^16.8.0",
48
+ "react-dom": "^16.8.0"
49
+ },
50
+ "dependencies": {
51
+ "@babel/runtime": "^7.13.10",
52
+ "@micromag/core": "^0.2.286",
53
+ "@micromag/data": "^0.2.286",
54
+ "@micromag/element-background": "^0.2.286",
55
+ "@micromag/element-call-to-action": "^0.2.286",
56
+ "@micromag/element-container": "^0.2.286",
57
+ "@micromag/element-heading": "^0.2.286",
58
+ "@micromag/element-layout": "^0.2.286",
59
+ "@micromag/element-scroll": "^0.2.286",
60
+ "@micromag/element-text": "^0.2.286",
61
+ "@micromag/transforms": "^0.2.286",
62
+ "classnames": "^2.2.6",
63
+ "lodash": "^4.17.20",
64
+ "prop-types": "^15.7.2",
65
+ "react-intl": "^5.12.1",
66
+ "uuid": "^8.3.2"
67
+ },
68
+ "publishConfig": {
69
+ "access": "public"
70
+ },
71
+ "gitHead": "380a52b4b3f57dc2535014af6241032f09055d40"
72
+ }