@coorpacademy/components 11.9.0 → 11.9.2-alpha.1

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 (74) hide show
  1. package/es/atom/loader/index.native.d.ts.map +1 -1
  2. package/es/atom/loader/index.native.js +11 -9
  3. package/es/atom/loader/index.native.js.map +1 -1
  4. package/es/atom/review-presentation/index.d.ts.map +1 -1
  5. package/es/atom/review-presentation/index.js +12 -62
  6. package/es/atom/review-presentation/index.js.map +1 -1
  7. package/es/atom/review-presentation/index.native.d.ts.map +1 -1
  8. package/es/atom/review-presentation/index.native.js +7 -2
  9. package/es/atom/review-presentation/index.native.js.map +1 -1
  10. package/es/atom/review-presentation/style.css +7 -67
  11. package/es/atom/tooltip/index.d.ts +22 -0
  12. package/es/atom/tooltip/index.d.ts.map +1 -0
  13. package/es/atom/tooltip/index.js +117 -0
  14. package/es/atom/tooltip/index.js.map +1 -0
  15. package/es/atom/tooltip/style.css +96 -0
  16. package/es/template/activity/engine-stars.css +16 -33
  17. package/es/template/activity/engine-stars.d.ts +15 -17
  18. package/es/template/activity/engine-stars.d.ts.map +1 -1
  19. package/es/template/activity/engine-stars.js +128 -115
  20. package/es/template/activity/engine-stars.js.map +1 -1
  21. package/es/template/activity/index.d.ts +1 -0
  22. package/es/template/activity/index.d.ts.map +1 -1
  23. package/es/template/activity/index.js +18 -9
  24. package/es/template/activity/index.js.map +1 -1
  25. package/es/template/activity/progression-item.js +1 -1
  26. package/es/template/activity/progression-item.js.map +1 -1
  27. package/es/template/activity/stars-summary.d.ts +1 -0
  28. package/es/template/activity/stars-summary.d.ts.map +1 -1
  29. package/es/template/activity/stars-summary.js +10 -5
  30. package/es/template/activity/stars-summary.js.map +1 -1
  31. package/es/template/app-review/index.native.d.ts.map +1 -1
  32. package/es/template/app-review/index.native.js +48 -20
  33. package/es/template/app-review/index.native.js.map +1 -1
  34. package/es/template/app-review/skills/index.native.d.ts.map +1 -1
  35. package/es/template/app-review/skills/index.native.js +26 -5
  36. package/es/template/app-review/skills/index.native.js.map +1 -1
  37. package/lib/atom/loader/index.native.d.ts.map +1 -1
  38. package/lib/atom/loader/index.native.js +11 -9
  39. package/lib/atom/loader/index.native.js.map +1 -1
  40. package/lib/atom/review-presentation/index.d.ts.map +1 -1
  41. package/lib/atom/review-presentation/index.js +13 -66
  42. package/lib/atom/review-presentation/index.js.map +1 -1
  43. package/lib/atom/review-presentation/index.native.d.ts.map +1 -1
  44. package/lib/atom/review-presentation/index.native.js +7 -2
  45. package/lib/atom/review-presentation/index.native.js.map +1 -1
  46. package/lib/atom/review-presentation/style.css +7 -67
  47. package/lib/atom/tooltip/index.d.ts +22 -0
  48. package/lib/atom/tooltip/index.d.ts.map +1 -0
  49. package/lib/atom/tooltip/index.js +137 -0
  50. package/lib/atom/tooltip/index.js.map +1 -0
  51. package/lib/atom/tooltip/style.css +96 -0
  52. package/lib/template/activity/engine-stars.css +16 -33
  53. package/lib/template/activity/engine-stars.d.ts +15 -17
  54. package/lib/template/activity/engine-stars.d.ts.map +1 -1
  55. package/lib/template/activity/engine-stars.js +135 -116
  56. package/lib/template/activity/engine-stars.js.map +1 -1
  57. package/lib/template/activity/index.d.ts +1 -0
  58. package/lib/template/activity/index.d.ts.map +1 -1
  59. package/lib/template/activity/index.js +21 -9
  60. package/lib/template/activity/index.js.map +1 -1
  61. package/lib/template/activity/progression-item.js +1 -1
  62. package/lib/template/activity/progression-item.js.map +1 -1
  63. package/lib/template/activity/stars-summary.d.ts +1 -0
  64. package/lib/template/activity/stars-summary.d.ts.map +1 -1
  65. package/lib/template/activity/stars-summary.js +10 -5
  66. package/lib/template/activity/stars-summary.js.map +1 -1
  67. package/lib/template/app-review/index.native.d.ts.map +1 -1
  68. package/lib/template/app-review/index.native.js +49 -19
  69. package/lib/template/app-review/index.native.js.map +1 -1
  70. package/lib/template/app-review/skills/index.native.d.ts.map +1 -1
  71. package/lib/template/app-review/skills/index.native.js +30 -7
  72. package/lib/template/app-review/skills/index.native.js.map +1 -1
  73. package/locales/en/global.json +1 -0
  74. package/package.json +5 -4
@@ -0,0 +1,96 @@
1
+ @value colors: "../../variables/colors.css";
2
+ @value cm_blue_900 from colors;
3
+ @value cm_grey_75 from colors;
4
+ @value cm_grey_500 from colors;
5
+ @value cm_grey_700 from colors;
6
+
7
+ .textBase {
8
+ font-family: "Gilroy";
9
+ font-style: normal;
10
+ color: cm_blue_900;
11
+ user-select: none;
12
+ }
13
+
14
+ .tooltipContainer {
15
+ overflow: visible;
16
+ position: relative;
17
+ z-index: 10;
18
+ display: flex;
19
+ justify-content: center;
20
+ justify-self: center;
21
+ }
22
+
23
+ .tooltipIconContainer {
24
+ display: flex;
25
+ justify-content: flex-end;
26
+ border: none;
27
+ background: cm_grey_75;
28
+ height: 25px;
29
+ align-items: center;
30
+ }
31
+
32
+ .toolTip {
33
+ transition: opacity 0.8s;
34
+ position: absolute;
35
+ border-radius: 7px;
36
+ background-color: cm_grey_700;
37
+ right: -75px;
38
+ bottom: 32px;
39
+ height: auto;
40
+ width: 200px;
41
+ }
42
+
43
+ .toolTip::before {
44
+ content: '';
45
+ display: inline-block;
46
+ visibility: inherit;
47
+ opacity: inherit;
48
+ width: 15px;
49
+ height: 15px;
50
+ transform: rotate(-45deg);
51
+ background-color: cm_grey_700;
52
+ position: inherit;
53
+ border-radius: 2px;
54
+ bottom: -5px;
55
+ right: 40%;
56
+ }
57
+
58
+ .tooltipContent {
59
+ composes: textBase;
60
+ font-weight: 500;
61
+ font-size: 14px;
62
+ display: inline-block;
63
+ border-radius: 3px;
64
+ word-wrap: break-word;
65
+ color: white;
66
+ padding: 8px 14px;
67
+ text-align: center;
68
+ }
69
+
70
+ .informationIcon {
71
+ color: cm_grey_500;
72
+ }
73
+
74
+ /* ----------------------- ReactToolTip exclusive classes ------------------------- */
75
+ .toolTipReact {
76
+ pointer-events: all !important;
77
+ background-color: cm_grey_700;
78
+ border-radius: 7px !important;
79
+ visibility: visible !important;
80
+ opacity: 1 !important;
81
+ left: 5px;
82
+ }
83
+
84
+ /* for keyboard navigation, the position can't be obtained from the mouse */
85
+ [class*="__react_component_tooltip"]:not(.toolTipReact) {
86
+ border-radius: 7px !important;
87
+ top: 97px!important;
88
+ left: 628px!important;
89
+ visibility: visible !important;
90
+ opacity: 1!important;
91
+ }
92
+
93
+ /* same reason, arrow can't be placed effectively */
94
+ [class*="__react_component_tooltip"]:not(.toolTipReact)::after {
95
+ content: none !important;
96
+ }
@@ -21,6 +21,10 @@
21
21
 
22
22
  user-select: none;
23
23
  position: relative;
24
+ border-bottom: none;
25
+ border-right: 0px;
26
+ border-width: 1px 0 0 1px;
27
+ background: inherit;
24
28
  }
25
29
 
26
30
  .engineIcon {
@@ -156,28 +160,22 @@
156
160
  opacity: 0.4;
157
161
  }
158
162
 
159
- .toolTip {
160
- opacity: 1 !important;
161
- padding: 0;
162
- pointer-events: all;
163
- background-color: transparent !important;
164
- }
165
-
166
- .toolTip::after {
167
- border-left-color: transparent !important;
163
+ .textBase {
164
+ font-family: "Gilroy";
165
+ font-style: normal;
166
+ color: white;
168
167
  }
169
168
 
170
169
  .toolTipContent {
171
- padding: 10px;
172
- margin: 0;
173
- border-radius: 3px;
174
- font-family: 'Gilroy';
175
- font-size: 12px;
170
+ composes: textBase;
176
171
  width: 270px;
177
- background-color: white;
178
- border: 1px solid white;
179
- color: dark;
180
- box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 8px 3px 10px rgba(0, 0, 0, 0.23);
172
+ font-weight: 500;
173
+ font-size: 14px;
174
+ display: inline-block;
175
+ border-radius: 3px;
176
+ word-wrap: break-word;
177
+ padding: 8px 14px;
178
+ text-align: center;
181
179
  }
182
180
 
183
181
  .toolTipContent > a {
@@ -191,21 +189,6 @@
191
189
  text-decoration: underline;
192
190
  }
193
191
 
194
- .toolTipContent::after {
195
- content: '';
196
- width: 0;
197
- height: 0;
198
- position: absolute;
199
- border-left-color: inherit;
200
- border-left-style: solid;
201
- border-left-width: 6px;
202
- border-top: 5px solid transparent;
203
- border-bottom: 5px solid transparent;
204
- right: -6px;
205
- top: 50%;
206
- margin-top: -4px;
207
- }
208
-
209
192
  /* ------------------------------------------------------ */
210
193
 
211
194
  @media tablet, mobile {
@@ -1,21 +1,23 @@
1
1
  export default EngineStars;
2
- declare class EngineStars extends React.Component<any, any, any> {
3
- static propTypes: {
4
- type: PropTypes.Validator<string>;
5
- stars: PropTypes.Validator<number>;
6
- title: PropTypes.Validator<string>;
7
- active: PropTypes.Requireable<boolean>;
8
- disabled: PropTypes.Requireable<boolean>;
9
- onClick: PropTypes.Requireable<(...args: any[]) => any>;
10
- toolTip: PropTypes.Requireable<PropTypes.InferProps<{
2
+ declare function EngineStars(props: any, legacyContext: any): JSX.Element;
3
+ declare namespace EngineStars {
4
+ namespace propTypes {
5
+ const type: PropTypes.Validator<string>;
6
+ const stars: PropTypes.Validator<number>;
7
+ const title: PropTypes.Validator<string>;
8
+ const active: PropTypes.Requireable<boolean>;
9
+ const disabled: PropTypes.Requireable<boolean>;
10
+ const onClick: PropTypes.Requireable<(...args: any[]) => any>;
11
+ const className: PropTypes.Requireable<string>;
12
+ const toolTip: PropTypes.Requireable<PropTypes.InferProps<{
11
13
  preMessage: PropTypes.Requireable<string>;
12
14
  linkMessage: PropTypes.Requireable<string>;
13
15
  endMessage: PropTypes.Requireable<string>;
14
16
  onClick: PropTypes.Requireable<(...args: any[]) => any>;
15
17
  }>>;
16
- };
17
- static contextTypes: {
18
- skin: PropTypes.Requireable<PropTypes.InferProps<{
18
+ }
19
+ namespace contextTypes {
20
+ const skin: PropTypes.Requireable<PropTypes.InferProps<{
19
21
  common: PropTypes.Requireable<{
20
22
  [x: string]: any;
21
23
  }>;
@@ -36,11 +38,7 @@ declare class EngineStars extends React.Component<any, any, any> {
36
38
  [x: string]: any;
37
39
  }>;
38
40
  }>>;
39
- };
40
- constructor(props: any, context: any);
41
- handleClick: (e: any) => void;
42
- render(): JSX.Element;
41
+ }
43
42
  }
44
- import React from "react";
45
43
  import PropTypes from "prop-types";
46
44
  //# sourceMappingURL=engine-stars.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine-stars.d.ts","sourceRoot":"","sources":["../../../src/template/activity/engine-stars.js"],"names":[],"mappings":";AAqFA;IACE;;;;;;;;;;;;;MAaE;IAEF;;;;;;;;;;;;;;;;;;;;;;MAEE;IAEF,sCAGC;IAED,8BAKE;IAEF,sBAqDC;CACF"}
1
+ {"version":3,"file":"engine-stars.d.ts","sourceRoot":"","sources":["../../../src/template/activity/engine-stars.js"],"names":[],"mappings":";AAuEA,0EAwIC"}
@@ -1,11 +1,15 @@
1
1
  import _noop from "lodash/fp/noop";
2
2
  import _get from "lodash/fp/get";
3
+
4
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
5
+
3
6
  import classnames from 'classnames';
4
- import React from 'react';
5
- import ReactTooltip from 'react-tooltip';
7
+ import React, { useCallback, useMemo, useState, useRef } from 'react';
6
8
  import PropTypes from 'prop-types';
9
+ import { v5 as uuidV5 } from 'uuid';
7
10
  import { NovaCompositionCoorpacademyStar as StarIcon, NovaCompositionCoorpacademyTimer as TimerIcon, NovaCompositionCoorpacademyBolt as BoltIcon, NovaSolidSchoolScienceGraduationHat as CertificationIcon, NovaSolidContentContentBook1 as LearnerIcon, NovaSolidVoteRewardsRewardsBadge1 as BonusIcon, NovaCompositionCoorpacademyScorm as ScormIcon, NovaCompositionCoorpacademyArticle as ArticleIcon, NovaCompositionCoorpacademyVideo as VideoIcon, NovaCompositionCoorpacademyMicrophone as PodcastIcon, NovaCompositionCoorpacademyRevision as RevisionIcon } from '@coorpacademy/nova-icons';
8
- import Provider from '../../atom/provider';
11
+ import Provider, { GetSkinFromContext, GetTranslateFromContext } from '../../atom/provider';
12
+ import ToolTip, { toggleStateOnKeyPress } from '../../atom/tooltip';
9
13
  import Link from '../../atom/link';
10
14
  import style from './engine-stars.css';
11
15
  const ICONS = {
@@ -21,131 +25,136 @@ const ICONS = {
21
25
  review: RevisionIcon
22
26
  };
23
27
 
24
- const ToolTip = ({
25
- toolTip,
26
- id
27
- }, context) => {
28
- if (!toolTip) {
29
- return null;
28
+ const ToolTipContent = ({
29
+ preMessage,
30
+ linkMessage,
31
+ endMessage,
32
+ onClick,
33
+ color,
34
+ handleContentMouseOver
35
+ }) => /*#__PURE__*/React.createElement("p", {
36
+ className: style.toolTipContent,
37
+ onMouseOver: handleContentMouseOver,
38
+ "data-testid": "react-tooltip-content"
39
+ }, /*#__PURE__*/React.createElement("span", null, preMessage), /*#__PURE__*/React.createElement(Link, {
40
+ onClick: onClick,
41
+ style: {
42
+ color
30
43
  }
44
+ }, linkMessage), /*#__PURE__*/React.createElement("span", null, endMessage));
31
45
 
32
- const {
33
- skin
34
- } = context;
35
- const {
36
- preMessage,
37
- endMessage,
38
- linkMessage,
39
- onClick
40
- } = toolTip;
41
-
42
- const primary = _get('common.primary', skin);
43
-
44
- const handleClick = onClick;
45
- return /*#__PURE__*/React.createElement(ReactTooltip, {
46
- id: id,
47
- className: style.toolTip,
48
- "data-event-off": "click",
49
- place: "left",
50
- effect: "solid",
51
- delayHide: 500
52
- }, /*#__PURE__*/React.createElement("p", {
53
- className: style.toolTipContent
54
- }, /*#__PURE__*/React.createElement("span", null, `${preMessage}`), /*#__PURE__*/React.createElement(Link, {
55
- onClick: handleClick,
56
- style: {
57
- color: primary
58
- }
59
- }, `${linkMessage}`), /*#__PURE__*/React.createElement("span", null, `${endMessage}`)));
60
- };
61
-
62
- ToolTip.contextTypes = {
63
- skin: Provider.childContextTypes.skin
64
- };
65
- ToolTip.propTypes = process.env.NODE_ENV !== "production" ? {
66
- toolTip: PropTypes.shape({
67
- preMessage: PropTypes.string,
68
- linkMessage: PropTypes.string,
69
- endMessage: PropTypes.string,
70
- onClick: PropTypes.func
71
- }),
72
- id: PropTypes.string.isRequired
46
+ ToolTipContent.propTypes = process.env.NODE_ENV !== "production" ? {
47
+ preMessage: PropTypes.string,
48
+ linkMessage: PropTypes.string,
49
+ endMessage: PropTypes.string,
50
+ color: PropTypes.string,
51
+ onClick: PropTypes.func,
52
+ handleContentMouseOver: PropTypes.func
73
53
  } : {};
74
54
 
75
- class EngineStars extends React.Component {
76
- constructor(props, context) {
77
- super(props, context);
55
+ const EngineStars = (props, legacyContext) => {
56
+ const skin = GetSkinFromContext(legacyContext);
57
+ const translate = GetTranslateFromContext(legacyContext);
58
+ const {
59
+ toolTip = null,
60
+ disabled,
61
+ type,
62
+ stars,
63
+ title,
64
+ active = false,
65
+ onClick = _noop,
66
+ className
67
+ } = props;
78
68
 
79
- this.handleClick = e => {
80
- e.stopPropagation();
81
- e.preventDefault();
82
- const {
83
- onClick
84
- } = this.props;
85
- onClick && onClick(e);
86
- };
69
+ const handleClick = e => {
70
+ e.stopPropagation();
71
+ e.preventDefault();
72
+ onClick(e);
73
+ };
87
74
 
88
- this.handleClick = this.handleClick.bind(this);
89
- }
75
+ const dark = _get('common.dark', skin);
90
76
 
91
- render() {
92
- const {
93
- skin
94
- } = this.context;
95
- const {
96
- disabled,
97
- type,
98
- stars,
99
- title,
100
- active = false,
101
- onClick = _noop,
102
- toolTip = null
103
- } = this.props;
77
+ const light = _get('common.light', skin);
104
78
 
105
- const dark = _get('common.dark', skin);
79
+ const IconType = ICONS[type];
106
80
 
107
- const light = _get('common.light', skin);
81
+ const primary = _get('common.primary', skin); // to replace by useId when React17 is bumped to React18
108
82
 
109
- const primary = _get('common.primary', skin);
110
83
 
111
- const IconType = ICONS[type];
112
- return /*#__PURE__*/React.createElement("div", {
113
- "data-tip": disabled,
114
- "data-engine": type,
115
- onClick: disabled || active ? _noop : this.handleClick,
116
- "data-for": disabled && type,
117
- className: classnames([style.engineStars, disabled ? style.disabled : '', active ? style.active : '', onClick !== _noop ? style.clickable : null])
118
- }, /*#__PURE__*/React.createElement(ToolTip, {
119
- toolTip: toolTip,
120
- id: type
121
- }), /*#__PURE__*/React.createElement("span", {
122
- className: style.engineIcon,
123
- style: {
124
- backgroundColor: onClick === _noop ? light : primary
125
- }
126
- }, /*#__PURE__*/React.createElement(IconType, {
127
- className: style.iconHeader,
128
- width: "30"
129
- })), /*#__PURE__*/React.createElement("div", {
130
- className: style.score,
131
- style: {
132
- color: active ? primary : dark
133
- }
134
- }, /*#__PURE__*/React.createElement("p", {
135
- "data-name": "star-counter"
136
- }, stars), /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(StarIcon, {
137
- className: style.iconStar,
84
+ const [engineStarsContentId] = useState(disabled ? uuidV5('engine-stars', uuidV5.URL) : undefined);
85
+ const [toolTipIsVisible, setToolTipIsVisible] = useState(false);
86
+ const [mouseLeaveTimer, setMouseLeaveTimer] = useState(undefined);
87
+ const buttonRef = useRef(null);
88
+ const handleKeyPress = useCallback(event => {
89
+ toggleStateOnKeyPress(toolTipIsVisible, setToolTipIsVisible, buttonRef)(event);
90
+ }, [toolTipIsVisible]);
91
+ const handleMouseOver = useCallback(() => {
92
+ mouseLeaveTimer && clearTimeout(mouseLeaveTimer);
93
+ setToolTipIsVisible(true);
94
+ }, [mouseLeaveTimer]);
95
+ const handleContentMouseOver = useCallback(() => {
96
+ mouseLeaveTimer &&
97
+ /* istanbul ignore next */
98
+ clearTimeout(mouseLeaveTimer);
99
+ }, [mouseLeaveTimer]);
100
+ const handleMouseLeave = useCallback(() => {
101
+ setMouseLeaveTimer(setTimeout(() => setToolTipIsVisible(false), 500));
102
+ }, []);
103
+ const toolTipContentProps = useMemo(() => toolTip ? {
104
+ preMessage: toolTip.preMessage,
105
+ linkMessage: toolTip.linkMessage,
106
+ endMessage: toolTip.endMessage,
107
+ color: primary,
108
+ onClick: toolTip.onClick
109
+ } : null, [primary, toolTip]);
110
+ const toolTipProps = {
111
+ closeToolTipInformationTextAriaLabel: translate('Press the escape key to close the information text')
112
+ };
113
+ const TooltipContent = useCallback(_props => /*#__PURE__*/React.createElement(ToolTipContent, _extends({}, _extends({}, toolTipContentProps, _props), {
114
+ handleContentMouseOver: handleContentMouseOver
115
+ })), [handleContentMouseOver, toolTipContentProps]);
116
+ return /*#__PURE__*/React.createElement("button", {
117
+ ref: buttonRef,
118
+ "data-tip": disabled,
119
+ "data-engine": type,
120
+ "data-testid": `engine-stars-${type}` // eslint-disable-next-line no-nested-ternary
121
+ ,
122
+ onClick: disabled ? handleKeyPress : active ? _noop : handleClick,
123
+ "data-for": engineStarsContentId,
124
+ className: classnames([style.engineStars, disabled ? style.disabled : '', active ? style.active : '', onClick !== _noop ? style.clickable : null, className]),
125
+ type: "button",
126
+ "data-tooltip-place": "left",
127
+ onKeyDown: handleKeyPress,
128
+ onMouseLeave: handleMouseLeave,
129
+ onMouseOver: handleMouseOver
130
+ }, disabled ? /*#__PURE__*/React.createElement(ToolTip, _extends({}, toolTipProps, {
131
+ anchorId: engineStarsContentId,
132
+ toolTipIsVisible: toolTipIsVisible,
133
+ TooltipContent: TooltipContent,
134
+ mouseLeaveTimer: mouseLeaveTimer
135
+ })) : null, /*#__PURE__*/React.createElement("span", {
136
+ className: style.engineIcon,
137
+ style: {
138
+ backgroundColor: onClick === _noop ? light : primary
139
+ }
140
+ }, /*#__PURE__*/React.createElement(IconType, {
141
+ className: style.iconHeader,
142
+ width: "30"
143
+ })), /*#__PURE__*/React.createElement("div", {
144
+ className: style.score,
145
+ style: {
138
146
  color: active ? primary : dark
139
- }))), /*#__PURE__*/React.createElement("div", {
140
- className: style.scoreTitle
141
- }, title));
142
- }
143
-
144
- }
145
-
146
- EngineStars.contextTypes = {
147
- skin: Provider.childContextTypes.skin
147
+ }
148
+ }, /*#__PURE__*/React.createElement("p", {
149
+ "data-name": "star-counter"
150
+ }, stars), /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(StarIcon, {
151
+ className: style.iconStar,
152
+ color: active ? primary : dark
153
+ }))), /*#__PURE__*/React.createElement("div", {
154
+ className: style.scoreTitle
155
+ }, title));
148
156
  };
157
+
149
158
  EngineStars.propTypes = process.env.NODE_ENV !== "production" ? {
150
159
  type: PropTypes.string.isRequired,
151
160
  stars: PropTypes.number.isRequired,
@@ -153,6 +162,7 @@ EngineStars.propTypes = process.env.NODE_ENV !== "production" ? {
153
162
  active: PropTypes.bool,
154
163
  disabled: PropTypes.bool,
155
164
  onClick: PropTypes.func,
165
+ className: PropTypes.string,
156
166
  toolTip: PropTypes.shape({
157
167
  preMessage: PropTypes.string,
158
168
  linkMessage: PropTypes.string,
@@ -160,5 +170,8 @@ EngineStars.propTypes = process.env.NODE_ENV !== "production" ? {
160
170
  onClick: PropTypes.func
161
171
  })
162
172
  } : {};
173
+ EngineStars.contextTypes = {
174
+ skin: Provider.childContextTypes.skin
175
+ };
163
176
  export default EngineStars;
164
177
  //# sourceMappingURL=engine-stars.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine-stars.js","names":["classnames","React","ReactTooltip","PropTypes","NovaCompositionCoorpacademyStar","StarIcon","NovaCompositionCoorpacademyTimer","TimerIcon","NovaCompositionCoorpacademyBolt","BoltIcon","NovaSolidSchoolScienceGraduationHat","CertificationIcon","NovaSolidContentContentBook1","LearnerIcon","NovaSolidVoteRewardsRewardsBadge1","BonusIcon","NovaCompositionCoorpacademyScorm","ScormIcon","NovaCompositionCoorpacademyArticle","ArticleIcon","NovaCompositionCoorpacademyVideo","VideoIcon","NovaCompositionCoorpacademyMicrophone","PodcastIcon","NovaCompositionCoorpacademyRevision","RevisionIcon","Provider","Link","style","ICONS","microlearning","learner","battle","certifications","bonus","article","scorm","video","podcast","review","ToolTip","toolTip","id","context","skin","preMessage","endMessage","linkMessage","onClick","primary","handleClick","toolTipContent","color","contextTypes","childContextTypes","propTypes","shape","string","func","isRequired","EngineStars","Component","constructor","props","e","stopPropagation","preventDefault","bind","render","disabled","type","stars","title","active","dark","light","IconType","engineStars","clickable","engineIcon","backgroundColor","iconHeader","score","iconStar","scoreTitle","number","bool"],"sources":["../../../src/template/activity/engine-stars.js"],"sourcesContent":["import classnames from 'classnames';\nimport React from 'react';\nimport ReactTooltip from 'react-tooltip';\nimport PropTypes from 'prop-types';\nimport {get, noop} from 'lodash/fp';\nimport {\n NovaCompositionCoorpacademyStar as StarIcon,\n NovaCompositionCoorpacademyTimer as TimerIcon,\n NovaCompositionCoorpacademyBolt as BoltIcon,\n NovaSolidSchoolScienceGraduationHat as CertificationIcon,\n NovaSolidContentContentBook1 as LearnerIcon,\n NovaSolidVoteRewardsRewardsBadge1 as BonusIcon,\n NovaCompositionCoorpacademyScorm as ScormIcon,\n NovaCompositionCoorpacademyArticle as ArticleIcon,\n NovaCompositionCoorpacademyVideo as VideoIcon,\n NovaCompositionCoorpacademyMicrophone as PodcastIcon,\n NovaCompositionCoorpacademyRevision as RevisionIcon\n} from '@coorpacademy/nova-icons';\nimport Provider from '../../atom/provider';\nimport Link from '../../atom/link';\nimport style from './engine-stars.css';\n\nconst ICONS = {\n microlearning: TimerIcon,\n learner: LearnerIcon,\n battle: BoltIcon,\n certifications: CertificationIcon,\n bonus: BonusIcon,\n article: ArticleIcon,\n scorm: ScormIcon,\n video: VideoIcon,\n podcast: PodcastIcon,\n review: RevisionIcon\n};\n\nconst ToolTip = ({toolTip, id}, context) => {\n if (!toolTip) {\n return null;\n }\n\n const {skin} = context;\n const {preMessage, endMessage, linkMessage, onClick} = toolTip;\n const primary = get('common.primary', skin);\n\n const handleClick = onClick;\n\n return (\n <ReactTooltip\n id={id}\n className={style.toolTip}\n data-event-off=\"click\"\n place=\"left\"\n effect=\"solid\"\n delayHide={500}\n >\n <p className={style.toolTipContent}>\n <span>{`${preMessage}`}</span>\n <Link\n onClick={handleClick}\n style={{\n color: primary\n }}\n >\n {`${linkMessage}`}\n </Link>\n <span>{`${endMessage}`}</span>\n </p>\n </ReactTooltip>\n );\n};\n\nToolTip.contextTypes = {\n skin: Provider.childContextTypes.skin\n};\n\nToolTip.propTypes = {\n toolTip: PropTypes.shape({\n preMessage: PropTypes.string,\n linkMessage: PropTypes.string,\n endMessage: PropTypes.string,\n onClick: PropTypes.func\n }),\n id: PropTypes.string.isRequired\n};\n\nclass EngineStars extends React.Component {\n static propTypes = {\n type: PropTypes.string.isRequired,\n stars: PropTypes.number.isRequired,\n title: PropTypes.string.isRequired,\n active: PropTypes.bool,\n disabled: PropTypes.bool,\n onClick: PropTypes.func,\n toolTip: PropTypes.shape({\n preMessage: PropTypes.string,\n linkMessage: PropTypes.string,\n endMessage: PropTypes.string,\n onClick: PropTypes.func\n })\n };\n\n static contextTypes = {\n skin: Provider.childContextTypes.skin\n };\n\n constructor(props, context) {\n super(props, context);\n this.handleClick = this.handleClick.bind(this);\n }\n\n handleClick = e => {\n e.stopPropagation();\n e.preventDefault();\n const {onClick} = this.props;\n onClick && onClick(e);\n };\n\n render() {\n const {skin} = this.context;\n const {\n disabled,\n type,\n stars,\n title,\n active = false,\n onClick = noop,\n toolTip = null\n } = this.props;\n const dark = get('common.dark', skin);\n const light = get('common.light', skin);\n const primary = get('common.primary', skin);\n const IconType = ICONS[type];\n\n return (\n <div\n data-tip={disabled}\n data-engine={type}\n onClick={disabled || active ? noop : this.handleClick}\n data-for={disabled && type}\n className={classnames([\n style.engineStars,\n disabled ? style.disabled : '',\n active ? style.active : '',\n onClick !== noop ? style.clickable : null\n ])}\n >\n <ToolTip toolTip={toolTip} id={type} />\n\n <span\n className={style.engineIcon}\n style={{\n backgroundColor: onClick === noop ? light : primary\n }}\n >\n <IconType className={style.iconHeader} width=\"30\" />\n </span>\n <div\n className={style.score}\n style={{\n color: active ? primary : dark\n }}\n >\n <p data-name=\"star-counter\">{stars}</p>\n <span>\n <StarIcon className={style.iconStar} color={active ? primary : dark} />\n </span>\n </div>\n <div className={style.scoreTitle}>{title}</div>\n </div>\n );\n }\n}\n\nexport default EngineStars;\n"],"mappings":"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"}
1
+ {"version":3,"file":"engine-stars.js","names":["classnames","React","useCallback","useMemo","useState","useRef","PropTypes","v5","uuidV5","NovaCompositionCoorpacademyStar","StarIcon","NovaCompositionCoorpacademyTimer","TimerIcon","NovaCompositionCoorpacademyBolt","BoltIcon","NovaSolidSchoolScienceGraduationHat","CertificationIcon","NovaSolidContentContentBook1","LearnerIcon","NovaSolidVoteRewardsRewardsBadge1","BonusIcon","NovaCompositionCoorpacademyScorm","ScormIcon","NovaCompositionCoorpacademyArticle","ArticleIcon","NovaCompositionCoorpacademyVideo","VideoIcon","NovaCompositionCoorpacademyMicrophone","PodcastIcon","NovaCompositionCoorpacademyRevision","RevisionIcon","Provider","GetSkinFromContext","GetTranslateFromContext","ToolTip","toggleStateOnKeyPress","Link","style","ICONS","microlearning","learner","battle","certifications","bonus","article","scorm","video","podcast","review","ToolTipContent","preMessage","linkMessage","endMessage","onClick","color","handleContentMouseOver","toolTipContent","propTypes","string","func","EngineStars","props","legacyContext","skin","translate","toolTip","disabled","type","stars","title","active","className","handleClick","e","stopPropagation","preventDefault","dark","light","IconType","primary","engineStarsContentId","URL","undefined","toolTipIsVisible","setToolTipIsVisible","mouseLeaveTimer","setMouseLeaveTimer","buttonRef","handleKeyPress","event","handleMouseOver","clearTimeout","handleMouseLeave","setTimeout","toolTipContentProps","toolTipProps","closeToolTipInformationTextAriaLabel","TooltipContent","_props","engineStars","clickable","engineIcon","backgroundColor","iconHeader","score","iconStar","scoreTitle","isRequired","number","bool","shape","contextTypes","childContextTypes"],"sources":["../../../src/template/activity/engine-stars.js"],"sourcesContent":["import classnames from 'classnames';\nimport React, {useCallback, useMemo, useState, useRef} from 'react';\nimport PropTypes from 'prop-types';\nimport {get, noop} from 'lodash/fp';\nimport {v5 as uuidV5} from 'uuid';\nimport {\n NovaCompositionCoorpacademyStar as StarIcon,\n NovaCompositionCoorpacademyTimer as TimerIcon,\n NovaCompositionCoorpacademyBolt as BoltIcon,\n NovaSolidSchoolScienceGraduationHat as CertificationIcon,\n NovaSolidContentContentBook1 as LearnerIcon,\n NovaSolidVoteRewardsRewardsBadge1 as BonusIcon,\n NovaCompositionCoorpacademyScorm as ScormIcon,\n NovaCompositionCoorpacademyArticle as ArticleIcon,\n NovaCompositionCoorpacademyVideo as VideoIcon,\n NovaCompositionCoorpacademyMicrophone as PodcastIcon,\n NovaCompositionCoorpacademyRevision as RevisionIcon\n} from '@coorpacademy/nova-icons';\nimport Provider, {GetSkinFromContext, GetTranslateFromContext} from '../../atom/provider';\nimport ToolTip, {toggleStateOnKeyPress} from '../../atom/tooltip';\nimport Link from '../../atom/link';\nimport style from './engine-stars.css';\n\nconst ICONS = {\n microlearning: TimerIcon,\n learner: LearnerIcon,\n battle: BoltIcon,\n certifications: CertificationIcon,\n bonus: BonusIcon,\n article: ArticleIcon,\n scorm: ScormIcon,\n video: VideoIcon,\n podcast: PodcastIcon,\n review: RevisionIcon\n};\n\nconst ToolTipContent = ({\n preMessage,\n linkMessage,\n endMessage,\n onClick,\n color,\n handleContentMouseOver\n}) => (\n <p\n className={style.toolTipContent}\n onMouseOver={handleContentMouseOver}\n data-testid=\"react-tooltip-content\"\n >\n <span>{preMessage}</span>\n <Link\n onClick={onClick}\n style={{\n color\n }}\n >\n {linkMessage}\n </Link>\n <span>{endMessage}</span>\n </p>\n);\n\nToolTipContent.propTypes = {\n preMessage: PropTypes.string,\n linkMessage: PropTypes.string,\n endMessage: PropTypes.string,\n color: PropTypes.string,\n onClick: PropTypes.func,\n handleContentMouseOver: PropTypes.func\n};\n\nconst EngineStars = (props, legacyContext) => {\n const skin = GetSkinFromContext(legacyContext);\n const translate = GetTranslateFromContext(legacyContext);\n const {\n toolTip = null,\n disabled,\n type,\n stars,\n title,\n active = false,\n onClick = noop,\n className\n } = props;\n\n const handleClick = e => {\n e.stopPropagation();\n e.preventDefault();\n onClick(e);\n };\n const dark = get('common.dark', skin);\n const light = get('common.light', skin);\n const IconType = ICONS[type];\n\n const primary = get('common.primary', skin);\n\n // to replace by useId when React17 is bumped to React18\n const [engineStarsContentId] = useState(\n disabled ? uuidV5('engine-stars', uuidV5.URL) : undefined\n );\n const [toolTipIsVisible, setToolTipIsVisible] = useState(false);\n const [mouseLeaveTimer, setMouseLeaveTimer] = useState(undefined);\n const buttonRef = useRef(null);\n\n const handleKeyPress = useCallback(\n event => {\n toggleStateOnKeyPress(toolTipIsVisible, setToolTipIsVisible, buttonRef)(event);\n },\n [toolTipIsVisible]\n );\n\n const handleMouseOver = useCallback(() => {\n mouseLeaveTimer && clearTimeout(mouseLeaveTimer);\n setToolTipIsVisible(true);\n }, [mouseLeaveTimer]);\n\n const handleContentMouseOver = useCallback(() => {\n mouseLeaveTimer && /* istanbul ignore next */ clearTimeout(mouseLeaveTimer);\n }, [mouseLeaveTimer]);\n\n const handleMouseLeave = useCallback(() => {\n setMouseLeaveTimer(setTimeout(() => setToolTipIsVisible(false), 500));\n }, []);\n\n const toolTipContentProps = useMemo(\n () =>\n toolTip\n ? {\n preMessage: toolTip.preMessage,\n linkMessage: toolTip.linkMessage,\n endMessage: toolTip.endMessage,\n color: primary,\n onClick: toolTip.onClick\n }\n : null,\n [primary, toolTip]\n );\n\n const toolTipProps = {\n closeToolTipInformationTextAriaLabel: translate(\n 'Press the escape key to close the information text'\n )\n };\n\n const TooltipContent = useCallback(\n _props => (\n <ToolTipContent\n {...{...toolTipContentProps, ..._props}}\n handleContentMouseOver={handleContentMouseOver}\n />\n ),\n [handleContentMouseOver, toolTipContentProps]\n );\n\n return (\n <button\n ref={buttonRef}\n data-tip={disabled}\n data-engine={type}\n data-testid={`engine-stars-${type}`}\n // eslint-disable-next-line no-nested-ternary\n onClick={disabled ? handleKeyPress : active ? noop : handleClick}\n data-for={engineStarsContentId}\n className={classnames([\n style.engineStars,\n disabled ? style.disabled : '',\n active ? style.active : '',\n onClick !== noop ? style.clickable : null,\n className\n ])}\n type=\"button\"\n data-tooltip-place=\"left\"\n onKeyDown={handleKeyPress}\n onMouseLeave={handleMouseLeave}\n onMouseOver={handleMouseOver}\n >\n {disabled ? (\n <ToolTip\n {...toolTipProps}\n anchorId={engineStarsContentId}\n toolTipIsVisible={toolTipIsVisible}\n TooltipContent={TooltipContent}\n mouseLeaveTimer={mouseLeaveTimer}\n />\n ) : null}\n <span\n className={style.engineIcon}\n style={{\n backgroundColor: onClick === noop ? light : primary\n }}\n >\n <IconType className={style.iconHeader} width=\"30\" />\n </span>\n <div\n className={style.score}\n style={{\n color: active ? primary : dark\n }}\n >\n <p data-name=\"star-counter\">{stars}</p>\n <span>\n <StarIcon className={style.iconStar} color={active ? primary : dark} />\n </span>\n </div>\n <div className={style.scoreTitle}>{title}</div>\n </button>\n );\n};\n\nEngineStars.propTypes = {\n type: PropTypes.string.isRequired,\n stars: PropTypes.number.isRequired,\n title: PropTypes.string.isRequired,\n active: PropTypes.bool,\n disabled: PropTypes.bool,\n onClick: PropTypes.func,\n className: PropTypes.string,\n toolTip: PropTypes.shape({\n preMessage: PropTypes.string,\n linkMessage: PropTypes.string,\n endMessage: PropTypes.string,\n onClick: PropTypes.func\n })\n};\n\nEngineStars.contextTypes = {\n skin: Provider.childContextTypes.skin\n};\n\nexport default EngineStars;\n"],"mappings":"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"}
@@ -39,6 +39,7 @@ declare namespace Progression {
39
39
  active: PropTypes.Requireable<boolean>;
40
40
  disabled: PropTypes.Requireable<boolean>;
41
41
  onClick: PropTypes.Requireable<(...args: any[]) => any>;
42
+ className: PropTypes.Requireable<string>;
42
43
  toolTip: PropTypes.Requireable<PropTypes.InferProps<{
43
44
  preMessage: PropTypes.Requireable<string>;
44
45
  linkMessage: PropTypes.Requireable<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/template/activity/index.js"],"names":[],"mappings":";AAeA,0EAuGC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/template/activity/index.js"],"names":[],"mappings":";AAmBA,0EA0GC"}
@@ -3,6 +3,8 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
3
3
  import React, { useCallback } from 'react';
4
4
  import get from 'lodash/fp/get';
5
5
  import isEmpty from 'lodash/fp/isEmpty';
6
+ import map from 'lodash/fp/map';
7
+ import noop from 'lodash/fp/noop';
6
8
  import omit from 'lodash/fp/omit';
7
9
  import PropTypes from 'prop-types';
8
10
  import classnames from 'classnames';
@@ -14,6 +16,9 @@ import ProgressionItem from './progression-item';
14
16
  import EngineStars from './engine-stars';
15
17
  import StarsSummary from './stars-summary';
16
18
  import style from './style.css';
19
+ const mapWithIndex = map.convert({
20
+ cap: false
21
+ });
17
22
 
18
23
  const Progression = (props, legacyContext) => {
19
24
  const {
@@ -35,9 +40,9 @@ const Progression = (props, legacyContext) => {
35
40
  e.stopPropagation();
36
41
  e.preventDefault();
37
42
  const {
38
- onClick
43
+ onClick = noop
39
44
  } = recommendation;
40
- onClick && onClick(e);
45
+ onClick(e);
41
46
  }, [recommendation]);
42
47
  const handleSelectTheme = useCallback(e => {
43
48
  themeFilterOnChange && themeFilterOnChange(e);
@@ -46,10 +51,10 @@ const Progression = (props, legacyContext) => {
46
51
  const loader = loading ? /*#__PURE__*/React.createElement("div", {
47
52
  className: style.loader
48
53
  }, /*#__PURE__*/React.createElement(Loader, null)) : null;
49
- const allProgressions = progressions.map(progression => /*#__PURE__*/React.createElement(ProgressionItem, _extends({}, omit(['ref'], progression), {
50
- key: progression.ref,
54
+ const allProgressions = mapWithIndex((progression, index) => /*#__PURE__*/React.createElement(ProgressionItem, _extends({}, omit(['ref'], progression), {
55
+ key: `${index}-${progression.ref}`,
51
56
  adaptiveAriaLabel: adaptiveAriaLabel
52
- })));
57
+ })), progressions);
53
58
  const coreProgression = /*#__PURE__*/React.createElement("div", {
54
59
  "data-name": "activityCore",
55
60
  className: style.core
@@ -85,13 +90,17 @@ const Progression = (props, legacyContext) => {
85
90
  return /*#__PURE__*/React.createElement("div", {
86
91
  className: style.default
87
92
  }, /*#__PURE__*/React.createElement("div", {
88
- "data-name": "activity-header"
93
+ "data-name": "activity-header",
94
+ tabIndex: 0
89
95
  }, /*#__PURE__*/React.createElement("div", {
90
- className: style.mainTitle
96
+ className: style.mainTitle,
97
+ tabIndex: 0
91
98
  }, /*#__PURE__*/React.createElement("span", null, mainTitle), " ", mainSubtitle), /*#__PURE__*/React.createElement("div", {
92
- className: style.headerProgression
99
+ className: style.headerProgression,
100
+ tabIndex: 0
93
101
  }, /*#__PURE__*/React.createElement("div", {
94
- className: style.wrapperCta
102
+ className: style.wrapperCta,
103
+ tabIndex: 0
95
104
  }, themeSelect, recommendationSection), /*#__PURE__*/React.createElement(StarsSummary, {
96
105
  engines: engines,
97
106
  total: total