@pie-element/categorize 8.15.1-next.0 → 8.15.1-next.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 (63) hide show
  1. package/configure/package.json +1 -1
  2. package/controller/package.json +1 -1
  3. package/package.json +3 -3
  4. package/configure/lib/defaults.js +0 -207
  5. package/configure/lib/defaults.js.map +0 -1
  6. package/configure/lib/design/builder.js +0 -74
  7. package/configure/lib/design/builder.js.map +0 -1
  8. package/configure/lib/design/buttons.js +0 -127
  9. package/configure/lib/design/buttons.js.map +0 -1
  10. package/configure/lib/design/categories/RowLabel.js +0 -78
  11. package/configure/lib/design/categories/RowLabel.js.map +0 -1
  12. package/configure/lib/design/categories/alternateResponses.js +0 -293
  13. package/configure/lib/design/categories/alternateResponses.js.map +0 -1
  14. package/configure/lib/design/categories/category.js +0 -219
  15. package/configure/lib/design/categories/category.js.map +0 -1
  16. package/configure/lib/design/categories/choice-preview.js +0 -136
  17. package/configure/lib/design/categories/choice-preview.js.map +0 -1
  18. package/configure/lib/design/categories/droppable-placeholder.js +0 -187
  19. package/configure/lib/design/categories/droppable-placeholder.js.map +0 -1
  20. package/configure/lib/design/categories/index.js +0 -408
  21. package/configure/lib/design/categories/index.js.map +0 -1
  22. package/configure/lib/design/choices/choice.js +0 -297
  23. package/configure/lib/design/choices/choice.js.map +0 -1
  24. package/configure/lib/design/choices/config.js +0 -114
  25. package/configure/lib/design/choices/config.js.map +0 -1
  26. package/configure/lib/design/choices/index.js +0 -276
  27. package/configure/lib/design/choices/index.js.map +0 -1
  28. package/configure/lib/design/header.js +0 -107
  29. package/configure/lib/design/header.js.map +0 -1
  30. package/configure/lib/design/index.js +0 -538
  31. package/configure/lib/design/index.js.map +0 -1
  32. package/configure/lib/design/input-header.js +0 -166
  33. package/configure/lib/design/input-header.js.map +0 -1
  34. package/configure/lib/design/utils.js +0 -23
  35. package/configure/lib/design/utils.js.map +0 -1
  36. package/configure/lib/index.js +0 -196
  37. package/configure/lib/index.js.map +0 -1
  38. package/configure/lib/main.js +0 -88
  39. package/configure/lib/main.js.map +0 -1
  40. package/configure/lib/utils.js +0 -40
  41. package/configure/lib/utils.js.map +0 -1
  42. package/controller/lib/defaults.js +0 -31
  43. package/controller/lib/defaults.js.map +0 -1
  44. package/controller/lib/index.js +0 -484
  45. package/controller/lib/index.js.map +0 -1
  46. package/controller/lib/utils.js +0 -60
  47. package/controller/lib/utils.js.map +0 -1
  48. package/lib/categorize/categories.js +0 -193
  49. package/lib/categorize/categories.js.map +0 -1
  50. package/lib/categorize/category.js +0 -135
  51. package/lib/categorize/category.js.map +0 -1
  52. package/lib/categorize/choice.js +0 -228
  53. package/lib/categorize/choice.js.map +0 -1
  54. package/lib/categorize/choices.js +0 -162
  55. package/lib/categorize/choices.js.map +0 -1
  56. package/lib/categorize/droppable-placeholder.js +0 -111
  57. package/lib/categorize/droppable-placeholder.js.map +0 -1
  58. package/lib/categorize/grid-content.js +0 -103
  59. package/lib/categorize/grid-content.js.map +0 -1
  60. package/lib/categorize/index.js +0 -368
  61. package/lib/categorize/index.js.map +0 -1
  62. package/lib/index.js +0 -137
  63. package/lib/index.js.map +0 -1
@@ -1,297 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.specTarget = exports.spec = exports["default"] = exports.Choice = void 0;
9
-
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
-
16
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
-
18
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
-
20
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
-
22
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
-
24
- var _react = _interopRequireDefault(require("react"));
25
-
26
- var _propTypes = _interopRequireDefault(require("prop-types"));
27
-
28
- var _styles = require("@material-ui/core/styles");
29
-
30
- var _classnames = _interopRequireDefault(require("classnames"));
31
-
32
- var _Card = _interopRequireDefault(require("@material-ui/core/Card"));
33
-
34
- var _CardActions = _interopRequireDefault(require("@material-ui/core/CardActions"));
35
-
36
- var _inputHeader = _interopRequireDefault(require("../input-header"));
37
-
38
- var _configUi = require("@pie-lib/pie-toolbox/config-ui");
39
-
40
- var _buttons = require("../buttons");
41
-
42
- var _DragHandle = _interopRequireDefault(require("@material-ui/icons/DragHandle"));
43
-
44
- var _reactDnd = require("react-dnd");
45
-
46
- var _debug = _interopRequireDefault(require("debug"));
47
-
48
- var _drag = require("@pie-lib/pie-toolbox/drag");
49
-
50
- var _utils = require("../../utils");
51
-
52
- var _flow = _interopRequireDefault(require("lodash/flow"));
53
-
54
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
55
-
56
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
57
-
58
- var log = (0, _debug["default"])('@pie-element:categorize:configure:choice');
59
-
60
- var canDrag = function canDrag(props) {
61
- if (props.lockChoiceOrder) {
62
- return true;
63
- }
64
-
65
- var count = props.choice.categoryCount || 0;
66
-
67
- if (count === 0) {
68
- return true;
69
- } else {
70
- return props.correctResponseCount < count;
71
- }
72
- };
73
-
74
- var Choice = /*#__PURE__*/function (_React$Component) {
75
- (0, _inherits2["default"])(Choice, _React$Component);
76
-
77
- var _super = _createSuper(Choice);
78
-
79
- function Choice() {
80
- var _this;
81
-
82
- (0, _classCallCheck2["default"])(this, Choice);
83
-
84
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
85
- args[_key] = arguments[_key];
86
- }
87
-
88
- _this = _super.call.apply(_super, [this].concat(args));
89
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeContent", function (content) {
90
- var _this$props = _this.props,
91
- onChange = _this$props.onChange,
92
- choice = _this$props.choice;
93
- choice.content = content;
94
- onChange(choice);
95
- });
96
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeCategoryCount", function () {
97
- var _this$props2 = _this.props,
98
- onChange = _this$props2.onChange,
99
- choice = _this$props2.choice;
100
-
101
- if (choice.categoryCount === 1) {
102
- choice.categoryCount = 0;
103
- } else {
104
- choice.categoryCount = 1;
105
- }
106
-
107
- onChange(choice);
108
- });
109
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "isCheckboxShown", function (allowMultiplePlacements) {
110
- return allowMultiplePlacements === _utils.multiplePlacements.perChoice;
111
- });
112
- return _this;
113
- }
114
-
115
- (0, _createClass2["default"])(Choice, [{
116
- key: "render",
117
- value: function render() {
118
- var _this$props3 = this.props,
119
- allowMultiplePlacements = _this$props3.allowMultiplePlacements,
120
- classes = _this$props3.classes,
121
- className = _this$props3.className,
122
- configuration = _this$props3.configuration,
123
- choice = _this$props3.choice,
124
- deleteFocusedEl = _this$props3.deleteFocusedEl,
125
- focusedEl = _this$props3.focusedEl,
126
- index = _this$props3.index,
127
- onDelete = _this$props3.onDelete,
128
- connectDropTarget = _this$props3.connectDropTarget,
129
- connectDragSource = _this$props3.connectDragSource,
130
- connectDragPreview = _this$props3.connectDragPreview,
131
- imageSupport = _this$props3.imageSupport,
132
- spellCheck = _this$props3.spellCheck,
133
- toolbarOpts = _this$props3.toolbarOpts,
134
- error = _this$props3.error,
135
- maxImageWidth = _this$props3.maxImageWidth,
136
- maxImageHeight = _this$props3.maxImageHeight,
137
- uploadSoundSupport = _this$props3.uploadSoundSupport;
138
- var showRemoveAfterPlacing = this.isCheckboxShown(allowMultiplePlacements);
139
- var draggable = canDrag(this.props);
140
- return /*#__PURE__*/_react["default"].createElement(_Card["default"], {
141
- className: (0, _classnames["default"])(classes.choice, className)
142
- }, /*#__PURE__*/_react["default"].createElement(_CardActions["default"], {
143
- className: classes.actions
144
- }, connectDragSource(connectDropTarget( /*#__PURE__*/_react["default"].createElement("span", {
145
- className: (0, _classnames["default"])(classes.dragHandle, draggable === false && classes.dragDisabled)
146
- }, /*#__PURE__*/_react["default"].createElement(_DragHandle["default"], {
147
- color: draggable ? 'primary' : 'disabled'
148
- }))))), connectDragPreview( /*#__PURE__*/_react["default"].createElement("span", null, /*#__PURE__*/_react["default"].createElement(_inputHeader["default"], {
149
- imageSupport: imageSupport,
150
- focusedEl: focusedEl,
151
- deleteFocusedEl: deleteFocusedEl,
152
- index: index,
153
- label: choice.content,
154
- onChange: this.changeContent,
155
- onDelete: onDelete,
156
- toolbarOpts: toolbarOpts,
157
- spellCheck: spellCheck,
158
- error: error,
159
- maxImageWidth: maxImageWidth,
160
- maxImageHeight: maxImageHeight,
161
- uploadSoundSupport: uploadSoundSupport,
162
- configuration: configuration
163
- }), error && /*#__PURE__*/_react["default"].createElement("div", {
164
- className: classes.errorText
165
- }, error))), /*#__PURE__*/_react["default"].createElement(_CardActions["default"], {
166
- className: classes.actions
167
- }, /*#__PURE__*/_react["default"].createElement(_buttons.DeleteButton, {
168
- label: 'delete',
169
- onClick: onDelete
170
- }), showRemoveAfterPlacing && /*#__PURE__*/_react["default"].createElement(_configUi.Checkbox, {
171
- mini: true,
172
- label: 'Remove after placing',
173
- checked: choice.categoryCount === 1,
174
- onChange: this.changeCategoryCount
175
- })));
176
- }
177
- }]);
178
- return Choice;
179
- }(_react["default"].Component);
180
-
181
- exports.Choice = Choice;
182
- (0, _defineProperty2["default"])(Choice, "propTypes", {
183
- allowMultiplePlacements: _propTypes["default"].string,
184
- classes: _propTypes["default"].object.isRequired,
185
- className: _propTypes["default"].string,
186
- configuration: _propTypes["default"].object.isRequired,
187
- choice: _propTypes["default"].object.isRequired,
188
- connectDropTarget: _propTypes["default"].func,
189
- deleteFocusedEl: _propTypes["default"].func,
190
- defaultImageMaxHeight: _propTypes["default"].number,
191
- defaultImageMaxWidth: _propTypes["default"].number,
192
- focusedEl: _propTypes["default"].number,
193
- index: _propTypes["default"].number,
194
- lockChoiceOrder: _propTypes["default"].bool,
195
- maxImageHeight: _propTypes["default"].object,
196
- maxImageWidth: _propTypes["default"].object,
197
- onChange: _propTypes["default"].func.isRequired,
198
- onDelete: _propTypes["default"].func.isRequired,
199
- connectDragSource: _propTypes["default"].func.isRequired,
200
- connectDragPreview: _propTypes["default"].func.isRequired,
201
- correctResponseCount: _propTypes["default"].number.isRequired,
202
- imageSupport: _propTypes["default"].shape({
203
- add: _propTypes["default"].func.isRequired,
204
- "delete": _propTypes["default"].func.isRequired
205
- }),
206
- toolbarOpts: _propTypes["default"].object,
207
- error: _propTypes["default"].string,
208
- uploadSoundSupport: _propTypes["default"].shape({
209
- add: _propTypes["default"].func.isRequired,
210
- "delete": _propTypes["default"].func.isRequired
211
- }),
212
- spellCheck: _propTypes["default"].bool
213
- });
214
- (0, _defineProperty2["default"])(Choice, "defaultProps", {});
215
-
216
- var styles = function styles(theme) {
217
- return {
218
- actions: {
219
- padding: 0,
220
- justifyContent: 'space-between'
221
- },
222
- choice: {
223
- minWidth: '196px',
224
- padding: theme.spacing.unit,
225
- overflow: 'visible'
226
- },
227
- dragHandle: {
228
- cursor: 'move'
229
- },
230
- dragDisabled: {
231
- cursor: 'inherit'
232
- },
233
- errorText: {
234
- fontSize: theme.typography.fontSize - 2,
235
- color: theme.palette.error.main,
236
- paddingBottom: theme.spacing.unit
237
- }
238
- };
239
- };
240
-
241
- var StyledChoice = (0, _styles.withStyles)(styles)(Choice);
242
- var spec = {
243
- canDrag: canDrag,
244
- beginDrag: function beginDrag(props) {
245
- var out = {
246
- id: props.choice.id,
247
- index: props.index
248
- };
249
- log('[beginDrag] out:', out);
250
- return out;
251
- },
252
- endDrag: function endDrag(props, monitor) {
253
- if (!monitor.didDrop()) {
254
- var item = monitor.getItem();
255
-
256
- if (item.categoryId) {
257
- log('wasnt droppped - what to do?');
258
- props.onRemoveChoice(item);
259
- }
260
- }
261
- }
262
- };
263
- exports.spec = spec;
264
- var specTarget = {
265
- drop: function drop(props, monitor) {
266
- log('[drop] props: ', props);
267
- var item = monitor.getItem();
268
- props.rearrangeChoices(item.index, props.index);
269
- },
270
- canDrop: function canDrop(props, monitor) {
271
- var item = monitor.getItem();
272
- return props.choice.id !== item.id;
273
- }
274
- };
275
- exports.specTarget = specTarget;
276
-
277
- var _default = _drag.uid.withUid((0, _flow["default"])((0, _reactDnd.DragSource)(function (_ref) {
278
- var uid = _ref.uid;
279
- return uid;
280
- }, spec, function (connect, monitor) {
281
- return {
282
- connectDragSource: connect.dragSource(),
283
- connectDragPreview: connect.dragPreview(),
284
- isDragging: monitor.isDragging()
285
- };
286
- }), (0, _reactDnd.DropTarget)(function (_ref2) {
287
- var uid = _ref2.uid;
288
- return uid;
289
- }, specTarget, function (connect, monitor) {
290
- return {
291
- connectDropTarget: connect.dropTarget(),
292
- isOver: monitor.isOver()
293
- };
294
- }))(StyledChoice));
295
-
296
- exports["default"] = _default;
297
- //# sourceMappingURL=choice.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/design/choices/choice.jsx"],"names":["log","canDrag","props","lockChoiceOrder","count","choice","categoryCount","correctResponseCount","Choice","content","onChange","allowMultiplePlacements","multiplePlacements","perChoice","classes","className","configuration","deleteFocusedEl","focusedEl","index","onDelete","connectDropTarget","connectDragSource","connectDragPreview","imageSupport","spellCheck","toolbarOpts","error","maxImageWidth","maxImageHeight","uploadSoundSupport","showRemoveAfterPlacing","isCheckboxShown","draggable","actions","dragHandle","dragDisabled","changeContent","errorText","changeCategoryCount","React","Component","PropTypes","string","object","isRequired","func","defaultImageMaxHeight","number","defaultImageMaxWidth","bool","shape","add","styles","theme","padding","justifyContent","minWidth","spacing","unit","overflow","cursor","fontSize","typography","color","palette","main","paddingBottom","StyledChoice","spec","beginDrag","out","id","endDrag","monitor","didDrop","item","getItem","categoryId","onRemoveChoice","specTarget","drop","rearrangeChoices","canDrop","uid","withUid","connect","dragSource","dragPreview","isDragging","dropTarget","isOver"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport InputHeader from '../input-header';\nimport { Checkbox } from '@pie-lib/pie-toolbox/config-ui';\nimport { DeleteButton } from '../buttons';\nimport DragHandle from '@material-ui/icons/DragHandle';\nimport { DragSource, DropTarget } from 'react-dnd';\nimport debug from 'debug';\nimport { uid } from '@pie-lib/pie-toolbox/drag';\nimport { multiplePlacements } from '../../utils';\nimport flow from 'lodash/flow';\n\nconst log = debug('@pie-element:categorize:configure:choice');\n\nconst canDrag = (props) => {\n if (props.lockChoiceOrder) {\n return true;\n }\n const count = props.choice.categoryCount || 0;\n if (count === 0) {\n return true;\n } else {\n return props.correctResponseCount < count;\n }\n};\n\nexport class Choice extends React.Component {\n static propTypes = {\n allowMultiplePlacements: PropTypes.string,\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n configuration: PropTypes.object.isRequired,\n choice: PropTypes.object.isRequired,\n connectDropTarget: PropTypes.func,\n deleteFocusedEl: PropTypes.func,\n defaultImageMaxHeight: PropTypes.number,\n defaultImageMaxWidth: PropTypes.number,\n focusedEl: PropTypes.number,\n index: PropTypes.number,\n lockChoiceOrder: PropTypes.bool,\n maxImageHeight: PropTypes.object,\n maxImageWidth: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n connectDragSource: PropTypes.func.isRequired,\n connectDragPreview: PropTypes.func.isRequired,\n correctResponseCount: PropTypes.number.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n toolbarOpts: PropTypes.object,\n error: PropTypes.string,\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n spellCheck: PropTypes.bool,\n };\n\n static defaultProps = {};\n\n changeContent = (content) => {\n const { onChange, choice } = this.props;\n choice.content = content;\n onChange(choice);\n };\n\n changeCategoryCount = () => {\n const { onChange, choice } = this.props;\n if (choice.categoryCount === 1) {\n choice.categoryCount = 0;\n } else {\n choice.categoryCount = 1;\n }\n onChange(choice);\n };\n\n isCheckboxShown = (allowMultiplePlacements) => allowMultiplePlacements === multiplePlacements.perChoice;\n\n render() {\n const {\n allowMultiplePlacements,\n classes,\n className,\n configuration,\n choice,\n deleteFocusedEl,\n focusedEl,\n index,\n onDelete,\n connectDropTarget,\n connectDragSource,\n connectDragPreview,\n imageSupport,\n spellCheck,\n toolbarOpts,\n error,\n maxImageWidth,\n maxImageHeight,\n uploadSoundSupport,\n } = this.props;\n\n const showRemoveAfterPlacing = this.isCheckboxShown(allowMultiplePlacements);\n const draggable = canDrag(this.props);\n\n return (\n <Card className={classNames(classes.choice, className)}>\n <CardActions className={classes.actions}>\n {connectDragSource(\n connectDropTarget(\n <span className={classNames(classes.dragHandle, draggable === false && classes.dragDisabled)}>\n <DragHandle color={draggable ? 'primary' : 'disabled'} />\n </span>,\n ),\n )}\n </CardActions>\n {connectDragPreview(\n <span>\n <InputHeader\n imageSupport={imageSupport}\n focusedEl={focusedEl}\n deleteFocusedEl={deleteFocusedEl}\n index={index}\n label={choice.content}\n onChange={this.changeContent}\n onDelete={onDelete}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n error={error}\n maxImageWidth={maxImageWidth}\n maxImageHeight={maxImageHeight}\n uploadSoundSupport={uploadSoundSupport}\n configuration={configuration}\n />\n {error && <div className={classes.errorText}>{error}</div>}\n </span>,\n )}\n\n <CardActions className={classes.actions}>\n <DeleteButton label={'delete'} onClick={onDelete} />\n {showRemoveAfterPlacing && (\n <Checkbox\n mini\n label={'Remove after placing'}\n checked={choice.categoryCount === 1}\n onChange={this.changeCategoryCount}\n />\n )}\n </CardActions>\n </Card>\n );\n }\n}\nconst styles = (theme) => ({\n actions: {\n padding: 0,\n justifyContent: 'space-between',\n },\n choice: {\n minWidth: '196px',\n padding: theme.spacing.unit,\n overflow: 'visible',\n },\n dragHandle: {\n cursor: 'move',\n },\n dragDisabled: {\n cursor: 'inherit',\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingBottom: theme.spacing.unit,\n },\n});\n\nconst StyledChoice = withStyles(styles)(Choice);\n\nexport const spec = {\n canDrag,\n beginDrag: (props) => {\n const out = {\n id: props.choice.id,\n index: props.index,\n };\n log('[beginDrag] out:', out);\n return out;\n },\n endDrag: (props, monitor) => {\n if (!monitor.didDrop()) {\n const item = monitor.getItem();\n if (item.categoryId) {\n log('wasnt droppped - what to do?');\n props.onRemoveChoice(item);\n }\n }\n },\n};\n\nexport const specTarget = {\n drop: (props, monitor) => {\n log('[drop] props: ', props);\n const item = monitor.getItem();\n props.rearrangeChoices(item.index, props.index);\n },\n canDrop: (props, monitor) => {\n const item = monitor.getItem();\n return props.choice.id !== item.id;\n },\n};\n\nexport default uid.withUid(\n flow(\n DragSource(\n ({ uid }) => uid,\n spec,\n (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n connectDragPreview: connect.dragPreview(),\n isDragging: monitor.isDragging(),\n }),\n ),\n DropTarget(\n ({ uid }) => uid,\n specTarget,\n (connect, monitor) => ({\n connectDropTarget: connect.dropTarget(),\n isOver: monitor.isOver(),\n }),\n ),\n )(StyledChoice),\n);\n"],"file":"choice.js"}
@@ -1,114 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports["default"] = exports.Config = void 0;
9
-
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
-
16
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
-
18
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
-
20
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
-
22
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
-
24
- var _react = _interopRequireDefault(require("react"));
25
-
26
- var _propTypes = _interopRequireDefault(require("prop-types"));
27
-
28
- var _styles = require("@material-ui/core/styles");
29
-
30
- var _classnames = _interopRequireDefault(require("classnames"));
31
-
32
- var _TextField = _interopRequireDefault(require("@material-ui/core/TextField"));
33
-
34
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
35
-
36
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
37
-
38
- var Config = /*#__PURE__*/function (_React$Component) {
39
- (0, _inherits2["default"])(Config, _React$Component);
40
-
41
- var _super = _createSuper(Config);
42
-
43
- function Config() {
44
- var _this;
45
-
46
- (0, _classCallCheck2["default"])(this, Config);
47
-
48
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
49
- args[_key] = arguments[_key];
50
- }
51
-
52
- _this = _super.call.apply(_super, [this].concat(args));
53
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeLabel", function (_ref) {
54
- var target = _ref.target;
55
-
56
- _this.props.onModelChanged({
57
- choicesLabel: target.value
58
- });
59
- });
60
- return _this;
61
- }
62
-
63
- (0, _createClass2["default"])(Config, [{
64
- key: "render",
65
- value: function render() {
66
- var _this$props = this.props,
67
- classes = _this$props.classes,
68
- className = _this$props.className,
69
- config = _this$props.config,
70
- spellCheck = _this$props.spellCheck;
71
- return /*#__PURE__*/_react["default"].createElement("div", {
72
- className: (0, _classnames["default"])(classes.config, className)
73
- }, /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
74
- className: classes.label,
75
- InputLabelProps: {
76
- shrink: true
77
- },
78
- variant: "outlined",
79
- label: "Label",
80
- value: config.choicesLabel,
81
- onChange: this.changeLabel,
82
- spellCheck: spellCheck
83
- }));
84
- }
85
- }]);
86
- return Config;
87
- }(_react["default"].Component);
88
-
89
- exports.Config = Config;
90
- (0, _defineProperty2["default"])(Config, "propTypes", {
91
- classes: _propTypes["default"].object.isRequired,
92
- className: _propTypes["default"].string,
93
- config: _propTypes["default"].object,
94
- onModelChanged: _propTypes["default"].func,
95
- spellCheck: _propTypes["default"].bool
96
- });
97
- (0, _defineProperty2["default"])(Config, "defaultProps", {});
98
-
99
- var styles = function styles(theme) {
100
- return {
101
- config: {
102
- paddingTop: theme.spacing.unit,
103
- marginBottom: theme.spacing.unit
104
- },
105
- label: {
106
- width: '100%'
107
- }
108
- };
109
- };
110
-
111
- var _default = (0, _styles.withStyles)(styles)(Config);
112
-
113
- exports["default"] = _default;
114
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/design/choices/config.jsx"],"names":["Config","target","props","onModelChanged","choicesLabel","value","classes","className","config","spellCheck","label","shrink","changeLabel","React","Component","PropTypes","object","isRequired","string","func","bool","styles","theme","paddingTop","spacing","unit","marginBottom","width"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;;;;;IAEaA,M;;;;;;;;;;;;;;;oGAWG,gBAAgB;AAAA,UAAbC,MAAa,QAAbA,MAAa;;AAC5B,YAAKC,KAAL,CAAWC,cAAX,CAA0B;AAAEC,QAAAA,YAAY,EAAEH,MAAM,CAACI;AAAvB,OAA1B;AACD,K;;;;;;WAED,kBAAS;AACP,wBAAmD,KAAKH,KAAxD;AAAA,UAAQI,OAAR,eAAQA,OAAR;AAAA,UAAiBC,SAAjB,eAAiBA,SAAjB;AAAA,UAA4BC,MAA5B,eAA4BA,MAA5B;AAAA,UAAoCC,UAApC,eAAoCA,UAApC;AAEA,0BACE;AAAK,QAAA,SAAS,EAAE,4BAAWH,OAAO,CAACE,MAAnB,EAA2BD,SAA3B;AAAhB,sBACE,gCAAC,qBAAD;AACE,QAAA,SAAS,EAAED,OAAO,CAACI,KADrB;AAEE,QAAA,eAAe,EAAE;AACfC,UAAAA,MAAM,EAAE;AADO,SAFnB;AAKE,QAAA,OAAO,EAAC,UALV;AAME,QAAA,KAAK,EAAC,OANR;AAOE,QAAA,KAAK,EAAEH,MAAM,CAACJ,YAPhB;AAQE,QAAA,QAAQ,EAAE,KAAKQ,WARjB;AASE,QAAA,UAAU,EAAEH;AATd,QADF,CADF;AAeD;;;EAjCyBI,kBAAMC,S;;;iCAArBd,M,eACQ;AACjBM,EAAAA,OAAO,EAAES,sBAAUC,MAAV,CAAiBC,UADT;AAEjBV,EAAAA,SAAS,EAAEQ,sBAAUG,MAFJ;AAGjBV,EAAAA,MAAM,EAAEO,sBAAUC,MAHD;AAIjBb,EAAAA,cAAc,EAAEY,sBAAUI,IAJT;AAKjBV,EAAAA,UAAU,EAAEM,sBAAUK;AALL,C;iCADRpB,M,kBASW,E;;AA2BxB,IAAMqB,MAAM,GAAG,SAATA,MAAS,CAACC,KAAD;AAAA,SAAY;AACzBd,IAAAA,MAAM,EAAE;AACNe,MAAAA,UAAU,EAAED,KAAK,CAACE,OAAN,CAAcC,IADpB;AAENC,MAAAA,YAAY,EAAEJ,KAAK,CAACE,OAAN,CAAcC;AAFtB,KADiB;AAKzBf,IAAAA,KAAK,EAAE;AACLiB,MAAAA,KAAK,EAAE;AADF;AALkB,GAAZ;AAAA,CAAf;;eAUe,wBAAWN,MAAX,EAAmBrB,MAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport TextField from '@material-ui/core/TextField';\n\nexport class Config extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n config: PropTypes.object,\n onModelChanged: PropTypes.func,\n spellCheck: PropTypes.bool,\n };\n\n static defaultProps = {};\n\n changeLabel = ({ target }) => {\n this.props.onModelChanged({ choicesLabel: target.value });\n };\n\n render() {\n const { classes, className, config, spellCheck } = this.props;\n\n return (\n <div className={classNames(classes.config, className)}>\n <TextField\n className={classes.label}\n InputLabelProps={{\n shrink: true,\n }}\n variant=\"outlined\"\n label=\"Label\"\n value={config.choicesLabel}\n onChange={this.changeLabel}\n spellCheck={spellCheck}\n />\n </div>\n );\n }\n}\n\nconst styles = (theme) => ({\n config: {\n paddingTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit,\n },\n label: {\n width: '100%',\n },\n});\n\nexport default withStyles(styles)(Config);\n"],"file":"config.js"}