@gamelearn/arcade-components 0.9.0 → 0.11.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.
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.withoutBackground = exports.voiceOverProps = exports.conversationProps = exports.converOld = void 0;
6
+ exports.conversationPropsNoFeedbackNoRewards = exports.withoutBackground = exports.voiceOverProps = exports.conversationProps = exports.converOld = void 0;
7
7
  var animations = {
8
8
  neutral: {
9
9
  url: 'https://min.int.gamelearn.io/cooked.gl-lms-storage/clients/5981fca94d82290bcbe957fe/animation/5f06e116f9efdd00112fcc6f/male_missunderstand_1.glb'
@@ -588,4 +588,262 @@ var withoutBackground = {
588
588
  uid: 'kjTHqi'
589
589
  }]
590
590
  };
591
- exports.withoutBackground = withoutBackground;
591
+ exports.withoutBackground = withoutBackground;
592
+ var conversationPropsNoFeedbackNoRewards = {
593
+ lines: [{
594
+ flex: true,
595
+ slots: [{
596
+ emotion: '',
597
+ text: '',
598
+ uid: 'DbKslR',
599
+ talking: false,
600
+ alias: 'paco',
601
+ text_labelId: 'text_0_0_nlrZh8Np',
602
+ alias_labelId: 'alias_0_0_nlrZh2Iq'
603
+ }, {
604
+ emotion: 'neutral',
605
+ text: '',
606
+ uid: null,
607
+ talking: false,
608
+ text_labelId: 'text_0_1_nlrZiNfB',
609
+ alias_labelId: 'alias_0_1_nlrZijhw'
610
+ }, {
611
+ emotion: 'neutral',
612
+ text: '',
613
+ uid: null,
614
+ talking: false,
615
+ text_labelId: 'text_0_2_nlrZiBF3',
616
+ alias_labelId: 'alias_0_2_nlrZiR6G'
617
+ }, {
618
+ emotion: 'neutral',
619
+ text: '',
620
+ uid: null,
621
+ talking: false,
622
+ text_labelId: 'text_0_3_nlrZinJN',
623
+ alias_labelId: 'alias_0_3_nlrZjLWB'
624
+ }, {
625
+ emotion: 'neutral',
626
+ text: 'Hola!',
627
+ uid: 'kjTHqt',
628
+ talking: true,
629
+ alias: 'manolo',
630
+ text_labelId: 'text_0_4_nlrZjUV9',
631
+ alias_labelId: 'alias_0_4_nlrZj81d'
632
+ }],
633
+ audioId: '5f1078861d84860011e179d0',
634
+ hasAlias: true,
635
+ text_labelId: 'text_0_nlrZj4Nr',
636
+ audioId_labelId: 'audioId_0_nlrZkkdo'
637
+ }, {
638
+ flex: true,
639
+ slots: [{
640
+ emotion: '',
641
+ text: '',
642
+ uid: 'DbKslR',
643
+ talking: false,
644
+ alias: 'paco',
645
+ text_labelId: 'text_0_0_nlrZh8Np',
646
+ alias_labelId: 'alias_0_0_nlrZh2Iq'
647
+ }, {
648
+ emotion: 'neutral',
649
+ text: '',
650
+ uid: null,
651
+ talking: false,
652
+ text_labelId: 'text_0_1_nlrZiNfB',
653
+ alias_labelId: 'alias_0_1_nlrZijhw'
654
+ }, {
655
+ emotion: 'neutral',
656
+ text: '',
657
+ uid: null,
658
+ talking: false,
659
+ text_labelId: 'text_0_2_nlrZiBF3',
660
+ alias_labelId: 'alias_0_2_nlrZiR6G'
661
+ }, {
662
+ emotion: 'neutral',
663
+ text: '',
664
+ uid: null,
665
+ talking: false,
666
+ text_labelId: 'text_0_3_nlrZinJN',
667
+ alias_labelId: 'alias_0_3_nlrZjLWB'
668
+ }, {
669
+ emotion: 'neutral',
670
+ text: 'Hola!',
671
+ uid: 'kjTHqi',
672
+ talking: true,
673
+ alias: 'manolo',
674
+ text_labelId: 'text_0_4_nlrZjUV9',
675
+ alias_labelId: 'alias_0_4_nlrZj81d'
676
+ }],
677
+ audioId: '5f1078861d84860011e179d0',
678
+ hasAlias: true,
679
+ text_labelId: 'text_0_nlrZj4Nr',
680
+ audioId_labelId: 'audioId_0_nlrZkkdo'
681
+ }, {
682
+ flex: true,
683
+ slots: [{
684
+ emotion: '',
685
+ text: '',
686
+ uid: 'DbKslR',
687
+ talking: false,
688
+ alias: 'paco',
689
+ text_labelId: 'text_0_0_nlrZh8Np',
690
+ alias_labelId: 'alias_0_0_nlrZh2Iq'
691
+ }, {
692
+ emotion: 'neutral',
693
+ text: '',
694
+ uid: null,
695
+ talking: false,
696
+ text_labelId: 'text_0_1_nlrZiNfB',
697
+ alias_labelId: 'alias_0_1_nlrZijhw'
698
+ }, {
699
+ emotion: 'neutral',
700
+ text: '',
701
+ uid: null,
702
+ talking: false,
703
+ text_labelId: 'text_0_2_nlrZiBF3',
704
+ alias_labelId: 'alias_0_2_nlrZiR6G'
705
+ }, {
706
+ emotion: 'neutral',
707
+ text: '',
708
+ uid: null,
709
+ talking: false,
710
+ text_labelId: 'text_0_3_nlrZinJN',
711
+ alias_labelId: 'alias_0_3_nlrZjLWB'
712
+ }, {
713
+ emotion: 'neutral',
714
+ text: 'Hola!',
715
+ uid: 'kjTHqx',
716
+ talking: true,
717
+ alias: 'manolo',
718
+ text_labelId: 'text_0_4_nlrZjUV9',
719
+ alias_labelId: 'alias_0_4_nlrZj81d'
720
+ }],
721
+ audioId: '5f1078861d84860011e179d0',
722
+ hasAlias: true,
723
+ text_labelId: 'text_0_nlrZj4Nr',
724
+ audioId_labelId: 'audioId_0_nlrZkkdo'
725
+ }, {
726
+ payload: {
727
+ options: [{
728
+ id: 0,
729
+ right: false,
730
+ text: 'Si',
731
+ rewards: [],
732
+ audioId: '',
733
+ text_labelId: 'text_3_0_u4s8j5fa',
734
+ audioId_labelId: 'audioId_3_0_u4s8jyiK'
735
+ }, {
736
+ id: 1,
737
+ right: false,
738
+ text: 'No',
739
+ rewards: [],
740
+ audioId: '',
741
+ text_labelId: 'text_3_1_u4s8jzBF',
742
+ audioId_labelId: 'audioId_3_1_u4s8jaJY'
743
+ }, {
744
+ id: 2,
745
+ right: true,
746
+ text: 'Patata',
747
+ rewards: [],
748
+ audioId: '',
749
+ text_labelId: 'text_3_2_u4s8jA2Z',
750
+ audioId_labelId: 'audioId_3_2_u4s8j23g'
751
+ }],
752
+ required: true,
753
+ question: 'Decisión en conversacion sin feedback ni puntos',
754
+ question_labelId: 'question_3_u4s8i10a'
755
+ },
756
+ decision: true
757
+ }, {
758
+ flex: true,
759
+ slots: [{
760
+ emotion: 'angry',
761
+ text: '',
762
+ uid: 'DbKslR',
763
+ talking: false,
764
+ alias: 'paco',
765
+ text_labelId: 'text_0_0_nlrZh8Np',
766
+ alias_labelId: 'alias_0_0_nlrZh2Iq'
767
+ }, {
768
+ emotion: 'neutral',
769
+ text: '',
770
+ uid: null,
771
+ talking: false,
772
+ text_labelId: 'text_0_1_nlrZiNfB',
773
+ alias_labelId: 'alias_0_1_nlrZijhw'
774
+ }, {
775
+ emotion: 'neutral',
776
+ text: '',
777
+ uid: null,
778
+ talking: false,
779
+ text_labelId: 'text_0_2_nlrZiBF3',
780
+ alias_labelId: 'alias_0_2_nlrZiR6G'
781
+ }, {
782
+ emotion: 'neutral',
783
+ text: '',
784
+ uid: null,
785
+ talking: false,
786
+ text_labelId: 'text_0_3_nlrZinJN',
787
+ alias_labelId: 'alias_0_3_nlrZjLWB'
788
+ }, {
789
+ emotion: 'neutral',
790
+ text: 'Hola!',
791
+ uid: 'kjTHqi',
792
+ talking: true,
793
+ alias: 'manolo',
794
+ text_labelId: 'text_0_4_nlrZjUV9',
795
+ alias_labelId: 'alias_0_4_nlrZj81d'
796
+ }],
797
+ audioId: '5f1078861d84860011e179d0',
798
+ hasAlias: true,
799
+ text_labelId: 'text_0_nlrZj4Nr',
800
+ audioId_labelId: 'audioId_0_nlrZkkdo'
801
+ }],
802
+ background: {
803
+ imgId: '605369a5901f3e00123b81ca',
804
+ imgName: 'b27bb40dcb1189d14012131a35b48a36.jpeg',
805
+ img: {
806
+ url: 'https://min.int.gamelearn.io/cooked.gl-lms-storage/clients/58dccfba26561500117caf53/image/605369a5901f3e00123b81ca/b27bb40dcb1189d14012131a35b48a36.jpeg'
807
+ }
808
+ },
809
+ characters: [{
810
+ name: 'Testing',
811
+ resourceId: '5f68d7b6a373890011a78a11',
812
+ resource: {
813
+ url: 'https://min.int.gamelearn.io/cooked.gl-lms-storage/clients/5981fca94d82290bcbe957fe/object/5eff09c2085be00011aae087/pr0238_yacht_001.glb'
814
+ },
815
+ type: 'object',
816
+ uid: 'DbKslR'
817
+ }, {
818
+ name: 'Male senior dark-skinned 01',
819
+ resourceId: '5f5214cec39e26001123797f',
820
+ resource: {
821
+ url: 'https://min.int.gamelearn.io/cooked.gl-lms-storage/clients/5981fca94d82290bcbe957fe/character/5f5214cec39e26001123797f/ch0112_philip_001.glb',
822
+ animations: animations
823
+ },
824
+ type: 'character',
825
+ uid: 'kjTHqi'
826
+ }, {
827
+ name: 'Female senior light-skinned 01',
828
+ resourceId: '5f5214cec39e26001123797f',
829
+ resource: {
830
+ url: 'https://min.int.gamelearn.io/cooked.gl-lms-storage/clients/5981fca94d82290bcbe957fe/character/5f60759328beb100113b694c/ch0116_bima_001_rig_v01_llaveronuevo.glb',
831
+ animations: {
832
+ neutral: {
833
+ resource: {}
834
+ }
835
+ }
836
+ },
837
+ type: 'character',
838
+ uid: 'kjTHqt'
839
+ }, {
840
+ name: 'Taxi',
841
+ resourceId: '5f5214cec39e26001123797f',
842
+ resource: {
843
+ url: 'https://min.int.gamelearn.io/cooked.gl-lms-storage/clients/5981fca94d82290bcbe957fe/object/5e53b649ef1f60000fb9cc1c/draco_pr0065_car_004.glb'
844
+ },
845
+ type: 'object',
846
+ uid: 'kjTHqx'
847
+ }]
848
+ };
849
+ exports.conversationPropsNoFeedbackNoRewards = conversationPropsNoFeedbackNoRewards;
@@ -45,7 +45,8 @@ var DecisionBody = function DecisionBody(_ref) {
45
45
  showingResults = _ref.showingResults,
46
46
  currentSelectedChoice = _ref.currentSelectedChoice,
47
47
  children = _ref.children,
48
- translate = _ref.translate;
48
+ translate = _ref.translate,
49
+ hasRewards = _ref.hasRewards;
49
50
 
50
51
  var _useState = (0, _react.useState)(currentSelectedChoice),
51
52
  _useState2 = _slicedToArray(_useState, 2),
@@ -65,16 +66,21 @@ var DecisionBody = function DecisionBody(_ref) {
65
66
  inherited: inherited,
66
67
  selectedChoice: selectedChoice,
67
68
  selectChoice: !showingResults || inherited && failed ? choose : noop,
68
- options: options
69
+ options: options,
70
+ showingResults: showingResults,
71
+ hasFeedbackDefinedInEditor: currentSelectedChoice.feedback,
72
+ hasRewards: hasRewards
69
73
  };
70
74
 
71
75
  var BasicDecision = function BasicDecision(_ref2) {
72
76
  var defaultChildren = _ref2.children;
73
77
  return /*#__PURE__*/_react.default.createElement("div", {
74
- className: "popup popup__large popup__basicDecision arcade-popup__basicDecision ".concat(showingResults ? 'popup__feedback' : '')
78
+ className: "popup popup__large popup__basicDecision arcade-popup__basicDecision ".concat(showingResults && currentSelectedChoice.feedback ? 'popup__feedback' : '')
75
79
  }, /*#__PURE__*/_react.default.createElement("div", {
76
80
  className: "popup--info"
77
- }, showingResults ? defaultChildren : /*#__PURE__*/_react.default.createElement("span", {
81
+ }, showingResults ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, defaultChildren, !currentSelectedChoice.feedback && hasRewards.length === 0 && /*#__PURE__*/_react.default.createElement("span", {
82
+ className: "popup--info__title"
83
+ }, question !== '' && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, question))) : /*#__PURE__*/_react.default.createElement("span", {
78
84
  className: "popup--info__title"
79
85
  }, question)), /*#__PURE__*/_react.default.createElement("div", {
80
86
  className: "popup__questions"
@@ -136,7 +142,8 @@ DecisionBody.defaultProps = {
136
142
  onBack: noop,
137
143
  inherited: false,
138
144
  failed: false,
139
- children: []
145
+ children: [],
146
+ hasRewards: []
140
147
  };
141
148
  DecisionBody.propTypes = {
142
149
  children: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.node), _propTypes.default.node]),
@@ -161,7 +168,8 @@ DecisionBody.propTypes = {
161
168
  question: _propTypes.default.string,
162
169
  inherited: _propTypes.default.bool,
163
170
  failed: _propTypes.default.bool,
164
- showingResults: _propTypes.default.bool
171
+ showingResults: _propTypes.default.bool,
172
+ hasRewards: _propTypes.default.arrayOf(_propTypes.default.shape())
165
173
  };
166
174
  var _default = DecisionBody;
167
175
  exports.default = _default;
@@ -107,6 +107,7 @@ var DecisionComponent = function DecisionComponent(_ref) {
107
107
  inherited: inherited,
108
108
  showingResults: selectedView === 'results',
109
109
  currentSelectedChoice: resultChoice,
110
+ hasRewards: resultChoice.rewards || [],
110
111
  failed: failed,
111
112
  changeOption: function changeOption(option) {
112
113
  setResultChoice(option);
@@ -159,7 +160,7 @@ var DecisionComponent = function DecisionComponent(_ref) {
159
160
  }
160
161
 
161
162
  return /*#__PURE__*/_react.default.createElement("div", {
162
- className: "conversation--layer ".concat(selectedView === 'results' ? 'conversation--layer__feedback' : '')
163
+ className: "conversation--layer \n ".concat(resultChoice.feedback ? '' : 'conversation--layer__defaultFeedback', " \n ").concat(selectedView === 'results' ? 'conversation--layer__feedback' : '')
163
164
  }, children);
164
165
  };
165
166
 
@@ -186,14 +187,12 @@ var DecisionComponent = function DecisionComponent(_ref) {
186
187
  inherited: inherited,
187
188
  choice: resultChoice,
188
189
  rewards: resultChoice.rewards || [],
189
- addPoints: function addPoints() {},
190
190
  emitEvent: emitEvent
191
191
  }) : null) : /*#__PURE__*/_react.default.createElement(PopupWrapper, null, /*#__PURE__*/_react.default.createElement(_DecisionBody.default, bodyProps, /*#__PURE__*/_react.default.createElement(_Feedback.default, {
192
192
  question: question,
193
193
  inherited: inherited,
194
194
  choice: resultChoice,
195
195
  rewards: resultChoice.rewards || [],
196
- addPoints: function addPoints() {},
197
196
  emitEvent: emitEvent
198
197
  })));
199
198
  };
@@ -23,7 +23,6 @@ var FeedBack = function FeedBack(_ref) {
23
23
  var choice = _ref.choice,
24
24
  inherited = _ref.inherited,
25
25
  rewards = _ref.rewards,
26
- addPoints = _ref.addPoints,
27
26
  emitEvent = _ref.emitEvent;
28
27
  var noFeedBack = choice.feedback === '' || !choice.feedback;
29
28
  var centerRewards = noFeedBack;
@@ -40,13 +39,6 @@ var FeedBack = function FeedBack(_ref) {
40
39
  var noRewards = rewards.filter(function (reward) {
41
40
  return reward.type !== 'grade';
42
41
  }).length === 0;
43
- (0, _react.useEffect)(function () {
44
- if (rewards.filter(function (reward) {
45
- return reward.type === 'grade';
46
- }).length === rewards.length) {
47
- addPoints();
48
- }
49
- }, [addPoints, rewards]);
50
42
  return noFeedBack && noRewards ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null) : /*#__PURE__*/_react.default.createElement(Wrapper, null, !noFeedBack ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
51
43
  className: "conversation--feedback__title"
52
44
  }, "Feedback"), /*#__PURE__*/_react.default.createElement("div", {
@@ -62,7 +54,6 @@ var FeedBack = function FeedBack(_ref) {
62
54
  };
63
55
 
64
56
  FeedBack.defaultProps = {
65
- addPoints: function addPoints() {},
66
57
  rewards: [],
67
58
  choice: {},
68
59
  inherited: false,
@@ -70,7 +61,6 @@ FeedBack.defaultProps = {
70
61
  };
71
62
  FeedBack.propTypes = {
72
63
  inherited: _propTypes.default.bool,
73
- addPoints: _propTypes.default.func,
74
64
  rewards: _propTypes.default.arrayOf(_propTypes.default.shape({})),
75
65
  choice: _propTypes.default.shape({
76
66
  id: _propTypes.default.number,
@@ -13,7 +13,10 @@ var Options = function Options(_ref) {
13
13
  var inherited = _ref.inherited,
14
14
  options = _ref.options,
15
15
  selectedChoice = _ref.selectedChoice,
16
- selectChoice = _ref.selectChoice;
16
+ selectChoice = _ref.selectChoice,
17
+ showingResults = _ref.showingResults,
18
+ hasFeedbackDefinedInEditor = _ref.hasFeedbackDefinedInEditor,
19
+ hasRewards = _ref.hasRewards;
17
20
  return options.filter(function (option) {
18
21
  return option.text;
19
22
  }).map(function (option) {
@@ -24,7 +27,13 @@ var Options = function Options(_ref) {
24
27
  type: "radio",
25
28
  name: option.id,
26
29
  defaultChecked: selectedChoice.id === option.id
27
- }), /*#__PURE__*/_react.default.createElement("label", {
30
+ }), showingResults ? /*#__PURE__*/_react.default.createElement("label", {
31
+ className: "".concat(option.right ? "radio-text-success ".concat(!hasFeedbackDefinedInEditor && hasRewards.length === 0 ? 'radio-icon-success' : '') : "radio-text-fail ".concat(!hasFeedbackDefinedInEditor && hasRewards.length === 0 ? 'radio-icon-fail' : '')),
32
+ htmlFor: option.id,
33
+ onClick: function onClick() {
34
+ selectChoice(option);
35
+ }
36
+ }, option.text) : /*#__PURE__*/_react.default.createElement("label", {
28
37
  htmlFor: option.id,
29
38
  onClick: function onClick() {
30
39
  selectChoice(option);
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.decisionProps = void 0;
6
+ exports.decisionPropsWithRadios = exports.decisionProps = void 0;
7
7
 
8
8
  var emitEvent = function emitEvent(_ref) {
9
9
  var type = _ref.type,
@@ -179,4 +179,36 @@ var decisionProps = {
179
179
  question: 'Funciona la decisión',
180
180
  question_labelId: 'question_3_u4s8i10a'
181
181
  };
182
- exports.decisionProps = decisionProps;
182
+ exports.decisionProps = decisionProps;
183
+ var decisionPropsWithRadios = {
184
+ emitEvent: emitEvent,
185
+ options: [{
186
+ id: 0,
187
+ right: false,
188
+ text: 'Si',
189
+ rewards: [],
190
+ audioId: '',
191
+ text_labelId: 'text_3_0_u4s8j5fa',
192
+ audioId_labelId: 'audioId_3_0_u4s8jyiK'
193
+ }, {
194
+ id: 1,
195
+ right: false,
196
+ text: 'No',
197
+ rewards: [],
198
+ audioId: '',
199
+ text_labelId: 'text_3_1_u4s8jzBF',
200
+ audioId_labelId: 'audioId_3_1_u4s8jaJY'
201
+ }, {
202
+ id: 2,
203
+ right: true,
204
+ text: 'Patata',
205
+ rewards: [],
206
+ audioId: '',
207
+ text_labelId: 'text_3_2_u4s8jA2Z',
208
+ audioId_labelId: 'audioId_3_2_u4s8j23g'
209
+ }],
210
+ required: true,
211
+ question: 'Decision sin feedback ni puntos',
212
+ question_labelId: 'question_3_u4s8i10a'
213
+ };
214
+ exports.decisionPropsWithRadios = decisionPropsWithRadios;
@@ -179,6 +179,12 @@ Object.defineProperty(exports, "TestComponent", {
179
179
  return _testComponent.default;
180
180
  }
181
181
  });
182
+ Object.defineProperty(exports, "SurveyComponent", {
183
+ enumerable: true,
184
+ get: function get() {
185
+ return _surveyComponent.default;
186
+ }
187
+ });
182
188
 
183
189
  var _scene = _interopRequireDefault(require("./arcade-render/scene"));
184
190
 
@@ -236,6 +242,8 @@ var _dragItemPuzzleComponent = _interopRequireDefault(require("./drag-item-puzzl
236
242
 
237
243
  var _testComponent = _interopRequireDefault(require("./test-component"));
238
244
 
245
+ var _surveyComponent = _interopRequireDefault(require("./survey-component"));
246
+
239
247
  function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
240
248
 
241
249
  function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
13
+
14
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
+
16
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
17
+
18
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
19
+
20
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
21
+
22
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
23
+
24
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
25
+
26
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
27
+
28
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
29
+
30
+ function _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
31
+
32
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
33
+
34
+ var OPTIONS = ['yes', 'no'];
35
+ var LETTERS = ['A', 'B'];
36
+
37
+ var ApplicableBox = function ApplicableBox(_ref) {
38
+ var setSurveyData = _ref.setSurveyData,
39
+ survey = _ref.survey,
40
+ id = _ref.id,
41
+ enable = _ref.enable,
42
+ translate = _ref.translate;
43
+
44
+ var _useState = (0, _react.useState)(),
45
+ _useState2 = _slicedToArray(_useState, 2),
46
+ optionSelected = _useState2[0],
47
+ selectOption = _useState2[1];
48
+
49
+ var select = function select(option) {
50
+ enable();
51
+ selectOption(option);
52
+ setSurveyData(_objectSpread(_objectSpread({}, survey), {}, _defineProperty({}, id, option)));
53
+ };
54
+
55
+ return /*#__PURE__*/_react.default.createElement("div", {
56
+ className: "survey--page__item"
57
+ }, OPTIONS.map(function (option, i) {
58
+ return /*#__PURE__*/_react.default.createElement("div", {
59
+ key: option,
60
+ onClick: function onClick() {
61
+ return select(option);
62
+ },
63
+ className: "survey--response__item ".concat(optionSelected === option ? 'selected' : '')
64
+ }, /*#__PURE__*/_react.default.createElement("div", {
65
+ className: "survey--response__index"
66
+ }, LETTERS[i]), /*#__PURE__*/_react.default.createElement("div", {
67
+ className: "survey--response__text"
68
+ }, translate("survey.".concat(option))));
69
+ }));
70
+ };
71
+
72
+ var _default = ApplicableBox;
73
+ exports.default = _default;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
13
+
14
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
+
16
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
17
+
18
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
19
+
20
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
21
+
22
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
23
+
24
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
25
+
26
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
27
+
28
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
29
+
30
+ function _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
31
+
32
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
33
+
34
+ var OPINION_OPTIONS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
35
+
36
+ var OpinionBox = function OpinionBox(_ref) {
37
+ var setSurveyData = _ref.setSurveyData,
38
+ survey = _ref.survey,
39
+ enable = _ref.enable,
40
+ id = _ref.id,
41
+ translate = _ref.translate;
42
+
43
+ var _useState = (0, _react.useState)(),
44
+ _useState2 = _slicedToArray(_useState, 2),
45
+ optionSelected = _useState2[0],
46
+ selectOption = _useState2[1];
47
+
48
+ var select = function select(option) {
49
+ enable();
50
+ selectOption(option);
51
+ setSurveyData(_objectSpread(_objectSpread({}, survey), {}, _defineProperty({}, id, option)));
52
+ };
53
+
54
+ return /*#__PURE__*/_react.default.createElement("div", {
55
+ className: "survey--page__item"
56
+ }, /*#__PURE__*/_react.default.createElement("ul", {
57
+ className: "survey--points"
58
+ }, OPINION_OPTIONS.map(function (option) {
59
+ return /*#__PURE__*/_react.default.createElement("li", {
60
+ key: option,
61
+ onClick: function onClick() {
62
+ return select(option);
63
+ },
64
+ className: "survey--points__item ".concat(optionSelected === option ? 'selected' : '')
65
+ }, option);
66
+ })), /*#__PURE__*/_react.default.createElement("div", {
67
+ className: "survey--points__labels"
68
+ }, /*#__PURE__*/_react.default.createElement("span", null, translate('survey.bad')), /*#__PURE__*/_react.default.createElement("span", null, translate('survey.excellent'))));
69
+ };
70
+
71
+ var _default = OpinionBox;
72
+ exports.default = _default;
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ var _ApplicableBox = _interopRequireDefault(require("./ApplicableBox"));
13
+
14
+ var _OpinionBox = _interopRequireDefault(require("./OpinionBox"));
15
+
16
+ var _TextBox = _interopRequireDefault(require("./TextBox"));
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
+ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
21
+
22
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+
24
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
25
+
26
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
27
+
28
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
29
+
30
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
31
+
32
+ function _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
33
+
34
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
35
+
36
+ var INIT_SURVEY = {
37
+ applicable: '',
38
+ opinion: '',
39
+ comments: '',
40
+ suggestions: ''
41
+ };
42
+ var PAGES = [{
43
+ component: _ApplicableBox.default,
44
+ id: 'applicable'
45
+ }, {
46
+ component: _OpinionBox.default,
47
+ id: 'opinion'
48
+ }, {
49
+ component: _TextBox.default,
50
+ id: 'comments'
51
+ }, {
52
+ component: _TextBox.default,
53
+ id: 'suggestions'
54
+ }];
55
+
56
+ var SurveyComponent = function SurveyComponent(_ref) {
57
+ var emitEvent = _ref.emitEvent;
58
+
59
+ var _useState = (0, _react.useState)(INIT_SURVEY),
60
+ _useState2 = _slicedToArray(_useState, 2),
61
+ survey = _useState2[0],
62
+ setSurveyData = _useState2[1];
63
+
64
+ var _useState3 = (0, _react.useState)(0),
65
+ _useState4 = _slicedToArray(_useState3, 2),
66
+ page = _useState4[0],
67
+ setPage = _useState4[1];
68
+
69
+ var _useState5 = (0, _react.useState)(true),
70
+ _useState6 = _slicedToArray(_useState5, 2),
71
+ disabled = _useState6[0],
72
+ disable = _useState6[1];
73
+
74
+ var _useState7 = (0, _react.useState)(false),
75
+ _useState8 = _slicedToArray(_useState7, 2),
76
+ finished = _useState8[0],
77
+ finish = _useState8[1];
78
+
79
+ var translate = function translate(id, values) {
80
+ return emitEvent({
81
+ type: 'translate',
82
+ payload: id,
83
+ values: values
84
+ });
85
+ };
86
+
87
+ var nextPage = function nextPage() {
88
+ disable(true);
89
+ setPage(page + 1);
90
+ };
91
+
92
+ var View = PAGES[page].component;
93
+ return /*#__PURE__*/_react.default.createElement("div", {
94
+ className: "survey--container"
95
+ }, /*#__PURE__*/_react.default.createElement("div", {
96
+ className: "survey--questions"
97
+ }, /*#__PURE__*/_react.default.createElement("div", {
98
+ className: "survey--questions__container"
99
+ }, /*#__PURE__*/_react.default.createElement("div", {
100
+ className: "survey--questions__count"
101
+ }, /*#__PURE__*/_react.default.createElement("span", null, translate('survey.numQuestion', {
102
+ init: page + 1,
103
+ page: PAGES.length
104
+ })), /*#__PURE__*/_react.default.createElement("span", null, translate('survey.mandatory'))), /*#__PURE__*/_react.default.createElement("div", {
105
+ className: "survey--questions__item"
106
+ }, translate("survey.question".concat(page + 1), {
107
+ ordinal: page + 1
108
+ })), /*#__PURE__*/_react.default.createElement(View, {
109
+ setSurveyData: setSurveyData,
110
+ enable: function enable() {
111
+ return disable(false);
112
+ },
113
+ id: PAGES[page].id,
114
+ survey: survey,
115
+ translate: translate
116
+ })), /*#__PURE__*/_react.default.createElement("div", {
117
+ className: "test--buttons next"
118
+ }, page < PAGES.length - 1 ? /*#__PURE__*/_react.default.createElement("button", {
119
+ id: "survey-button",
120
+ type: "button",
121
+ onClick: function onClick() {
122
+ return disabled ? null : nextPage();
123
+ },
124
+ className: "gat--btn__navigation"
125
+ }, /*#__PURE__*/_react.default.createElement("span", {
126
+ className: "icon-next"
127
+ })) : /*#__PURE__*/_react.default.createElement("button", {
128
+ id: "survey-button",
129
+ type: "button",
130
+ onClick: function onClick() {
131
+ if (!finished) {
132
+ finish();
133
+ emitEvent({
134
+ type: 'survey',
135
+ payload: survey
136
+ });
137
+ }
138
+ },
139
+ className: "gat--btn gat--btn__primary ".concat(disabled ? 'disabled' : '')
140
+ }, translate('survey.finish')))));
141
+ };
142
+
143
+ var _default = SurveyComponent;
144
+ exports.default = _default;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
13
+
14
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
15
+
16
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
17
+
18
+ var TextBox = function TextBox(_ref) {
19
+ var setSurveyData = _ref.setSurveyData,
20
+ survey = _ref.survey,
21
+ enable = _ref.enable,
22
+ id = _ref.id;
23
+
24
+ var writeText = function writeText(text) {
25
+ enable();
26
+ setSurveyData(_objectSpread(_objectSpread({}, survey), {}, _defineProperty({}, id, text)));
27
+ };
28
+
29
+ return /*#__PURE__*/_react.default.createElement("div", {
30
+ className: "survey--page__item"
31
+ }, /*#__PURE__*/_react.default.createElement("textarea", {
32
+ className: "survey--textarea",
33
+ value: survey[id],
34
+ onChange: function onChange(event) {
35
+ return writeText(event.target.value);
36
+ }
37
+ }));
38
+ };
39
+
40
+ var _default = TextBox;
41
+ exports.default = _default;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _SurveyComponent = _interopRequireDefault(require("./components/SurveyComponent"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ var _default = _SurveyComponent.default;
13
+ exports.default = _default;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.mockProps = void 0;
7
+
8
+ var emitEvent = function emitEvent(_ref) {
9
+ var type = _ref.type,
10
+ payload = _ref.payload;
11
+
12
+ if (type === 'translate') {
13
+ return payload;
14
+ }
15
+ };
16
+
17
+ var mockProps = {
18
+ emitEvent: emitEvent
19
+ };
20
+ exports.mockProps = mockProps;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@gamelearn/arcade-components",
3
3
  "license": "Gamelearn",
4
- "version": "0.9.0",
4
+ "version": "0.11.0",
5
5
  "main": "dist/index.js",
6
6
  "files": [
7
7
  "dist",
@@ -55,7 +55,7 @@
55
55
  "@babel/cli": "7.12.10",
56
56
  "@babel/preset-env": "7.12.11",
57
57
  "@babel/preset-react": "7.12.10",
58
- "@gamelearn/ui-components-core": "5.18.0",
58
+ "@gamelearn/ui-components-core": "5.21.0",
59
59
  "@react-three/test-renderer": "6.0.6",
60
60
  "@storybook/addon-actions": "6.1.11",
61
61
  "@storybook/addon-essentials": "6.1.11",
@@ -76,4 +76,4 @@
76
76
  "^react-pdf$": "react-pdf/dist/umd/entry.jest"
77
77
  }
78
78
  }
79
- }
79
+ }