@pie-element/categorize 13.1.2-next.5 → 13.1.3

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 (158) hide show
  1. package/CHANGELOG.json +1637 -0
  2. package/CHANGELOG.md +2550 -0
  3. package/LICENSE.md +5 -0
  4. package/README.md +5 -0
  5. package/configure/CHANGELOG.json +1202 -0
  6. package/configure/CHANGELOG.md +2131 -0
  7. package/configure/lib/defaults.js +222 -0
  8. package/configure/lib/defaults.js.map +1 -0
  9. package/configure/lib/design/builder.js +55 -0
  10. package/configure/lib/design/builder.js.map +1 -0
  11. package/configure/lib/design/buttons.js +59 -0
  12. package/configure/lib/design/buttons.js.map +1 -0
  13. package/configure/lib/design/categories/RowLabel.js +66 -0
  14. package/configure/lib/design/categories/RowLabel.js.map +1 -0
  15. package/configure/lib/design/categories/alternateResponses.js +116 -0
  16. package/configure/lib/design/categories/alternateResponses.js.map +1 -0
  17. package/configure/lib/design/categories/category.js +153 -0
  18. package/configure/lib/design/categories/category.js.map +1 -0
  19. package/configure/lib/design/categories/choice-preview.js +79 -0
  20. package/configure/lib/design/categories/choice-preview.js.map +1 -0
  21. package/configure/lib/design/categories/droppable-placeholder.js +93 -0
  22. package/configure/lib/design/categories/droppable-placeholder.js.map +1 -0
  23. package/configure/lib/design/categories/index.js +256 -0
  24. package/configure/lib/design/categories/index.js.map +1 -0
  25. package/configure/lib/design/choices/choice.js +187 -0
  26. package/configure/lib/design/choices/choice.js.map +1 -0
  27. package/configure/lib/design/choices/config.js +58 -0
  28. package/configure/lib/design/choices/config.js.map +1 -0
  29. package/configure/lib/design/choices/index.js +197 -0
  30. package/configure/lib/design/choices/index.js.map +1 -0
  31. package/configure/lib/design/header.js +71 -0
  32. package/configure/lib/design/header.js.map +1 -0
  33. package/configure/lib/design/index.js +727 -0
  34. package/configure/lib/design/index.js.map +1 -0
  35. package/configure/lib/design/input-header.js +105 -0
  36. package/configure/lib/design/input-header.js.map +1 -0
  37. package/configure/lib/design/utils.js +12 -0
  38. package/configure/lib/design/utils.js.map +1 -0
  39. package/configure/lib/index.js +147 -0
  40. package/configure/lib/index.js.map +1 -0
  41. package/configure/lib/main.js +44 -0
  42. package/configure/lib/main.js.map +1 -0
  43. package/configure/lib/utils.js +43 -0
  44. package/configure/lib/utils.js.map +1 -0
  45. package/configure/package.json +32 -0
  46. package/controller/CHANGELOG.json +452 -0
  47. package/controller/CHANGELOG.md +1384 -0
  48. package/controller/lib/defaults.js +33 -0
  49. package/controller/lib/defaults.js.map +1 -0
  50. package/controller/lib/index.js +493 -0
  51. package/controller/lib/index.js.map +1 -0
  52. package/controller/lib/utils.js +69 -0
  53. package/controller/lib/utils.js.map +1 -0
  54. package/controller/package.json +18 -0
  55. package/docs/config-schema.json +2897 -0
  56. package/docs/config-schema.json.md +2138 -0
  57. package/docs/demo/config.js +8 -0
  58. package/docs/demo/generate.js +357 -0
  59. package/docs/demo/index.html +1 -0
  60. package/docs/demo/session.js +12 -0
  61. package/docs/pie-schema.json +1784 -0
  62. package/docs/pie-schema.json.md +1046 -0
  63. package/lib/categorize/categories.js +135 -0
  64. package/lib/categorize/categories.js.map +1 -0
  65. package/lib/categorize/category.js +67 -0
  66. package/lib/categorize/category.js.map +1 -0
  67. package/lib/categorize/choice.js +140 -0
  68. package/lib/categorize/choice.js.map +1 -0
  69. package/lib/categorize/choices.js +99 -0
  70. package/lib/categorize/choices.js.map +1 -0
  71. package/lib/categorize/droppable-placeholder.js +84 -0
  72. package/lib/categorize/droppable-placeholder.js.map +1 -0
  73. package/lib/categorize/grid-content.js +55 -0
  74. package/lib/categorize/grid-content.js.map +1 -0
  75. package/lib/categorize/index.js +450 -0
  76. package/lib/categorize/index.js.map +1 -0
  77. package/lib/index.js +316 -0
  78. package/lib/index.js.map +1 -0
  79. package/package.json +22 -85
  80. package/configure.js +0 -2
  81. package/controller.js +0 -1
  82. package/dist/author/defaults.d.ts +0 -223
  83. package/dist/author/defaults.js +0 -170
  84. package/dist/author/design/builder.d.ts +0 -10
  85. package/dist/author/design/builder.js +0 -24
  86. package/dist/author/design/buttons.d.ts +0 -28
  87. package/dist/author/design/buttons.js +0 -36
  88. package/dist/author/design/categories/RowLabel.d.ts +0 -23
  89. package/dist/author/design/categories/RowLabel.js +0 -47
  90. package/dist/author/design/categories/alternateResponses.d.ts +0 -31
  91. package/dist/author/design/categories/alternateResponses.js +0 -62
  92. package/dist/author/design/categories/category.d.ts +0 -44
  93. package/dist/author/design/categories/category.js +0 -98
  94. package/dist/author/design/categories/choice-preview.d.ts +0 -25
  95. package/dist/author/design/categories/choice-preview.js +0 -60
  96. package/dist/author/design/categories/droppable-placeholder.d.ts +0 -11
  97. package/dist/author/design/categories/droppable-placeholder.js +0 -71
  98. package/dist/author/design/categories/index.d.ts +0 -41
  99. package/dist/author/design/categories/index.js +0 -146
  100. package/dist/author/design/choices/choice.d.ts +0 -11
  101. package/dist/author/design/choices/choice.js +0 -129
  102. package/dist/author/design/choices/config.d.ts +0 -21
  103. package/dist/author/design/choices/config.js +0 -33
  104. package/dist/author/design/choices/index.d.ts +0 -41
  105. package/dist/author/design/choices/index.js +0 -110
  106. package/dist/author/design/header.d.ts +0 -24
  107. package/dist/author/design/header.js +0 -49
  108. package/dist/author/design/index.d.ts +0 -52
  109. package/dist/author/design/index.js +0 -417
  110. package/dist/author/design/input-header.d.ts +0 -39
  111. package/dist/author/design/input-header.js +0 -69
  112. package/dist/author/design/utils.d.ts +0 -9
  113. package/dist/author/design/utils.js +0 -7
  114. package/dist/author/index.d.ts +0 -51
  115. package/dist/author/index.js +0 -87
  116. package/dist/author/main.d.ts +0 -23
  117. package/dist/author/main.js +0 -30
  118. package/dist/author/utils.d.ts +0 -16
  119. package/dist/author/utils.js +0 -17
  120. package/dist/browser/author/index.js +0 -2041
  121. package/dist/browser/author/index.js.map +0 -1
  122. package/dist/browser/categorize.css +0 -2
  123. package/dist/browser/controller/index.js +0 -299
  124. package/dist/browser/controller/index.js.map +0 -1
  125. package/dist/browser/delivery/index.js +0 -1051
  126. package/dist/browser/delivery/index.js.map +0 -1
  127. package/dist/browser/dist-7UsF60Ks.js +0 -55705
  128. package/dist/browser/dist-7UsF60Ks.js.map +0 -1
  129. package/dist/browser/dist-DnGF41FP.js +0 -1958
  130. package/dist/browser/dist-DnGF41FP.js.map +0 -1
  131. package/dist/controller/defaults.d.ts +0 -34
  132. package/dist/controller/defaults.js +0 -29
  133. package/dist/controller/index.d.ts +0 -61
  134. package/dist/controller/index.js +0 -155
  135. package/dist/controller/utils.d.ts +0 -20
  136. package/dist/controller/utils.js +0 -35
  137. package/dist/delivery/categorize/categories.d.ts +0 -34
  138. package/dist/delivery/categorize/categories.js +0 -66
  139. package/dist/delivery/categorize/category.d.ts +0 -28
  140. package/dist/delivery/categorize/category.js +0 -48
  141. package/dist/delivery/categorize/choice.d.ts +0 -27
  142. package/dist/delivery/categorize/choice.js +0 -94
  143. package/dist/delivery/categorize/choices.d.ts +0 -39
  144. package/dist/delivery/categorize/choices.js +0 -51
  145. package/dist/delivery/categorize/droppable-placeholder.d.ts +0 -32
  146. package/dist/delivery/categorize/droppable-placeholder.js +0 -64
  147. package/dist/delivery/categorize/grid-content.d.ts +0 -25
  148. package/dist/delivery/categorize/grid-content.js +0 -39
  149. package/dist/delivery/categorize/index.d.ts +0 -57
  150. package/dist/delivery/categorize/index.js +0 -260
  151. package/dist/delivery/index.d.ts +0 -27
  152. package/dist/delivery/index.js +0 -152
  153. package/dist/index.d.ts +0 -1
  154. package/dist/index.iife.d.ts +0 -8
  155. package/dist/index.iife.js +0 -152
  156. package/dist/index.js +0 -2
  157. package/dist/runtime-support.d.ts +0 -12
  158. package/dist/runtime-support.js +0 -12
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.Category = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+ var _styles = require("@mui/material/styles");
12
+ var _Card = _interopRequireDefault(require("@mui/material/Card"));
13
+ var _CardActions = _interopRequireDefault(require("@mui/material/CardActions"));
14
+ var _inputHeader = _interopRequireDefault(require("../input-header"));
15
+ var _buttons = require("../buttons");
16
+ var _droppablePlaceholder = _interopRequireDefault(require("./droppable-placeholder"));
17
+ const StyledCard = (0, _styles.styled)(_Card.default, {
18
+ shouldForwardProp: prop => prop !== 'isDuplicated'
19
+ })(({
20
+ theme,
21
+ isDuplicated
22
+ }) => ({
23
+ minWidth: '196px',
24
+ padding: theme.spacing(1),
25
+ overflow: 'visible',
26
+ ...(isDuplicated && {
27
+ border: '1px solid red'
28
+ })
29
+ }));
30
+ const StyledCardActions = (0, _styles.styled)(_CardActions.default)(({
31
+ theme
32
+ }) => ({
33
+ padding: `${theme.spacing(1)} 0 0`
34
+ }));
35
+ const CategoryHeader = (0, _styles.styled)('div')(({
36
+ theme
37
+ }) => ({
38
+ padding: theme.spacing(2),
39
+ '& p': {
40
+ margin: 0
41
+ }
42
+ }));
43
+ const ErrorText = (0, _styles.styled)('div')(({
44
+ theme
45
+ }) => ({
46
+ fontSize: theme.typography.fontSize - 2,
47
+ color: theme.palette.error.main,
48
+ paddingBottom: theme.spacing(1)
49
+ }));
50
+ class Category extends _react.default.Component {
51
+ constructor(...args) {
52
+ super(...args);
53
+ (0, _defineProperty2.default)(this, "changeLabel", l => {
54
+ const {
55
+ category,
56
+ onChange
57
+ } = this.props;
58
+ category.label = l;
59
+ onChange(category);
60
+ });
61
+ }
62
+ render() {
63
+ const {
64
+ alternateResponseIndex,
65
+ category,
66
+ configuration,
67
+ deleteFocusedEl,
68
+ focusedEl,
69
+ index,
70
+ error,
71
+ isDuplicated,
72
+ onDelete,
73
+ onDeleteChoice,
74
+ imageSupport,
75
+ spellCheck,
76
+ toolbarOpts,
77
+ maxImageWidth,
78
+ maxImageHeight,
79
+ uploadSoundSupport,
80
+ mathMlOptions = {}
81
+ } = this.props;
82
+ const isCategoryHeaderDisabled = !!alternateResponseIndex || alternateResponseIndex === 0;
83
+ return /*#__PURE__*/_react.default.createElement(StyledCard, {
84
+ isDuplicated: isDuplicated
85
+ }, /*#__PURE__*/_react.default.createElement("span", null, !isCategoryHeaderDisabled ? /*#__PURE__*/_react.default.createElement(_inputHeader.default, {
86
+ label: category.label,
87
+ focusedEl: focusedEl,
88
+ deleteFocusedEl: deleteFocusedEl,
89
+ index: index,
90
+ disabled: !!alternateResponseIndex || alternateResponseIndex === 0,
91
+ error: error,
92
+ onChange: this.changeLabel,
93
+ onDelete: onDelete,
94
+ imageSupport: imageSupport,
95
+ toolbarOpts: toolbarOpts,
96
+ spellCheck: spellCheck,
97
+ maxImageWidth: maxImageWidth,
98
+ maxImageHeight: maxImageHeight,
99
+ uploadSoundSupport: uploadSoundSupport,
100
+ mathMlOptions: mathMlOptions,
101
+ configuration: configuration
102
+ }) : /*#__PURE__*/_react.default.createElement(CategoryHeader, {
103
+ dangerouslySetInnerHTML: {
104
+ __html: category.label
105
+ }
106
+ }), error && /*#__PURE__*/_react.default.createElement(ErrorText, null, error)), /*#__PURE__*/_react.default.createElement(_droppablePlaceholder.default, {
107
+ alternateResponseIndex: alternateResponseIndex,
108
+ category: category,
109
+ choices: category.choices,
110
+ onDeleteChoice: onDeleteChoice,
111
+ categoryId: category.id,
112
+ extraStyles: {
113
+ minHeight: '100px'
114
+ },
115
+ isAlternate: this.props.isAlternate
116
+ }), onDelete && /*#__PURE__*/_react.default.createElement(StyledCardActions, null, /*#__PURE__*/_react.default.createElement(_buttons.DeleteButton, {
117
+ label: 'delete',
118
+ onClick: onDelete
119
+ })));
120
+ }
121
+ }
122
+ exports.Category = Category;
123
+ (0, _defineProperty2.default)(Category, "propTypes", {
124
+ alternateResponseIndex: _propTypes.default.number,
125
+ category: _propTypes.default.object.isRequired,
126
+ configuration: _propTypes.default.object.isRequired,
127
+ defaultImageMaxHeight: _propTypes.default.number,
128
+ defaultImageMaxWidth: _propTypes.default.number,
129
+ deleteFocusedEl: _propTypes.default.func,
130
+ focusedEl: _propTypes.default.number,
131
+ index: _propTypes.default.number,
132
+ error: _propTypes.default.string,
133
+ isDuplicated: _propTypes.default.bool,
134
+ maxImageWidth: _propTypes.default.object,
135
+ maxImageHeight: _propTypes.default.object,
136
+ onChange: _propTypes.default.func,
137
+ onDelete: _propTypes.default.func,
138
+ onDeleteChoice: _propTypes.default.func,
139
+ imageSupport: _propTypes.default.shape({
140
+ add: _propTypes.default.func.isRequired,
141
+ delete: _propTypes.default.func.isRequired
142
+ }),
143
+ toolbarOpts: _propTypes.default.object,
144
+ spellCheck: _propTypes.default.bool,
145
+ uploadSoundSupport: _propTypes.default.shape({
146
+ add: _propTypes.default.func.isRequired,
147
+ delete: _propTypes.default.func.isRequired
148
+ }),
149
+ isAlternate: _propTypes.default.bool
150
+ });
151
+ (0, _defineProperty2.default)(Category, "defaultProps", {});
152
+ var _default = exports.default = Category;
153
+ //# sourceMappingURL=category.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"category.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","_Card","_CardActions","_inputHeader","_buttons","_droppablePlaceholder","StyledCard","styled","Card","shouldForwardProp","prop","theme","isDuplicated","minWidth","padding","spacing","overflow","border","StyledCardActions","CardActions","CategoryHeader","margin","ErrorText","fontSize","typography","color","palette","error","main","paddingBottom","Category","React","Component","constructor","args","_defineProperty2","default","l","category","onChange","props","label","render","alternateResponseIndex","configuration","deleteFocusedEl","focusedEl","index","onDelete","onDeleteChoice","imageSupport","spellCheck","toolbarOpts","maxImageWidth","maxImageHeight","uploadSoundSupport","mathMlOptions","isCategoryHeaderDisabled","createElement","disabled","changeLabel","dangerouslySetInnerHTML","__html","choices","categoryId","id","extraStyles","minHeight","isAlternate","DeleteButton","onClick","exports","PropTypes","number","object","isRequired","defaultImageMaxHeight","defaultImageMaxWidth","func","string","bool","shape","add","delete","_default"],"sources":["../../../src/design/categories/category.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport Card from '@mui/material/Card';\nimport CardActions from '@mui/material/CardActions';\n\nimport InputHeader from '../input-header';\nimport { DeleteButton } from '../buttons';\nimport PlaceHolder from './droppable-placeholder';\n\nconst StyledCard = styled(Card, {\n shouldForwardProp: (prop) => prop !== 'isDuplicated',\n})(({ theme, isDuplicated }) => ({\n minWidth: '196px',\n padding: theme.spacing(1),\n overflow: 'visible',\n ...(isDuplicated && {\n border: '1px solid red',\n }),\n}));\n\nconst StyledCardActions = styled(CardActions)(({ theme }) => ({\n padding: `${theme.spacing(1)} 0 0`,\n}));\n\nconst CategoryHeader = styled('div')(({ theme }) => ({\n padding: theme.spacing(2),\n '& p': {\n margin: 0,\n },\n}));\n\nconst ErrorText = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingBottom: theme.spacing(1),\n}));\n\nexport class Category extends React.Component {\n static propTypes = {\n alternateResponseIndex: PropTypes.number,\n category: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n defaultImageMaxHeight: PropTypes.number,\n defaultImageMaxWidth: PropTypes.number,\n deleteFocusedEl: PropTypes.func,\n focusedEl: PropTypes.number,\n index: PropTypes.number,\n error: PropTypes.string,\n isDuplicated: PropTypes.bool,\n maxImageWidth: PropTypes.object,\n maxImageHeight: PropTypes.object,\n onChange: PropTypes.func,\n onDelete: PropTypes.func,\n onDeleteChoice: PropTypes.func,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n toolbarOpts: PropTypes.object,\n spellCheck: PropTypes.bool,\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n isAlternate: PropTypes.bool,\n };\n\n static defaultProps = {};\n\n changeLabel = (l) => {\n const { category, onChange } = this.props;\n category.label = l;\n onChange(category);\n };\n\n render() {\n const {\n alternateResponseIndex,\n category,\n configuration,\n deleteFocusedEl,\n focusedEl,\n index,\n error,\n isDuplicated,\n onDelete,\n onDeleteChoice,\n imageSupport,\n spellCheck,\n toolbarOpts,\n maxImageWidth,\n maxImageHeight,\n uploadSoundSupport,\n mathMlOptions = {},\n } = this.props;\n const isCategoryHeaderDisabled = !!alternateResponseIndex || alternateResponseIndex === 0;\n\n return (\n <StyledCard isDuplicated={isDuplicated}>\n <span>\n {!isCategoryHeaderDisabled ? (\n <InputHeader\n label={category.label}\n focusedEl={focusedEl}\n deleteFocusedEl={deleteFocusedEl}\n index={index}\n disabled={!!alternateResponseIndex || alternateResponseIndex === 0}\n error={error}\n onChange={this.changeLabel}\n onDelete={onDelete}\n imageSupport={imageSupport}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheck}\n maxImageWidth={maxImageWidth}\n maxImageHeight={maxImageHeight}\n uploadSoundSupport={uploadSoundSupport}\n mathMlOptions={mathMlOptions}\n configuration={configuration}\n />\n ) : (\n <CategoryHeader\n dangerouslySetInnerHTML={{\n __html: category.label,\n }}\n />\n )}\n {error && <ErrorText>{error}</ErrorText>}\n </span>\n <PlaceHolder\n alternateResponseIndex={alternateResponseIndex}\n category={category}\n choices={category.choices}\n onDeleteChoice={onDeleteChoice}\n categoryId={category.id}\n extraStyles={{ minHeight: '100px', }}\n isAlternate={this.props.isAlternate}\n />\n {onDelete && (\n <StyledCardActions>\n <DeleteButton label={'delete'} onClick={onDelete} />\n </StyledCardActions>\n )}\n </StyledCard>\n );\n }\n}\n\nexport default Category;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.ChoicePreview = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+ var _styles = require("@mui/material/styles");
12
+ var _drag = require("@pie-lib/drag");
13
+ var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
14
+ var _RemoveCircleOutline = _interopRequireDefault(require("@mui/icons-material/RemoveCircleOutline"));
15
+ var _renderUi = require("@pie-lib/render-ui");
16
+ const ChoicePreviewContainer = (0, _styles.styled)('div')({
17
+ position: 'relative',
18
+ overflow: 'auto',
19
+ touchAction: 'none'
20
+ });
21
+ const DeleteIconButton = (0, _styles.styled)(_IconButton.default)({
22
+ position: 'absolute',
23
+ right: 0,
24
+ top: 0,
25
+ color: `${_renderUi.color.tertiary()} !important`
26
+ });
27
+ class ChoicePreview extends _react.default.Component {
28
+ constructor(...args) {
29
+ super(...args);
30
+ (0, _defineProperty2.default)(this, "delete", () => {
31
+ const {
32
+ onDelete,
33
+ choice
34
+ } = this.props;
35
+ onDelete(choice);
36
+ });
37
+ }
38
+ render() {
39
+ const {
40
+ alternateResponseIndex,
41
+ category,
42
+ choice,
43
+ choiceIndex
44
+ } = this.props;
45
+
46
+ // Generate unique ID for each instance to distinguish multiple instances of the same choice
47
+ const categoryId = category && category.id;
48
+ const uniqueId = alternateResponseIndex !== undefined ? `${choice.id}-${categoryId}-${choiceIndex}-alt-${alternateResponseIndex}` : `${choice.id}-${categoryId}-${choiceIndex}`;
49
+ return /*#__PURE__*/_react.default.createElement(ChoicePreviewContainer, null, choice ? /*#__PURE__*/_react.default.createElement(_drag.DraggableChoice, {
50
+ alternateResponseIndex: alternateResponseIndex,
51
+ category: category,
52
+ choice: choice,
53
+ choiceIndex: choiceIndex,
54
+ onRemoveChoice: this.delete,
55
+ type: 'choice-preview',
56
+ id: uniqueId,
57
+ categoryId: categoryId
58
+ }, /*#__PURE__*/_react.default.createElement(_renderUi.HtmlAndMath, {
59
+ html: choice?.content
60
+ })) : null, /*#__PURE__*/_react.default.createElement(DeleteIconButton, {
61
+ "aria-label": "delete",
62
+ onClick: this.delete,
63
+ size: "large"
64
+ }, /*#__PURE__*/_react.default.createElement(_RemoveCircleOutline.default, null)));
65
+ }
66
+ }
67
+ exports.ChoicePreview = ChoicePreview;
68
+ (0, _defineProperty2.default)(ChoicePreview, "propTypes", {
69
+ alternateResponseIndex: _propTypes.default.number,
70
+ category: _propTypes.default.object,
71
+ choice: _propTypes.default.object.isRequired,
72
+ choiceIndex: _propTypes.default.number,
73
+ onDelete: _propTypes.default.func
74
+ });
75
+ (0, _defineProperty2.default)(ChoicePreview, "defaultProps", {
76
+ onDelete: () => {}
77
+ });
78
+ var _default = exports.default = ChoicePreview;
79
+ //# sourceMappingURL=choice-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"choice-preview.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","_drag","_IconButton","_RemoveCircleOutline","_renderUi","ChoicePreviewContainer","styled","position","overflow","touchAction","DeleteIconButton","IconButton","right","top","color","tertiary","ChoicePreview","React","Component","constructor","args","_defineProperty2","default","onDelete","choice","props","render","alternateResponseIndex","category","choiceIndex","categoryId","id","uniqueId","undefined","createElement","DraggableChoice","onRemoveChoice","delete","type","HtmlAndMath","html","content","onClick","size","exports","PropTypes","number","object","isRequired","func","_default"],"sources":["../../../src/design/categories/choice-preview.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport { DraggableChoice } from '@pie-lib/drag';\nimport IconButton from '@mui/material/IconButton';\nimport RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';\nimport { HtmlAndMath } from '@pie-lib/render-ui';\nimport { color } from '@pie-lib/render-ui';\n\nconst ChoicePreviewContainer = styled('div')({\n position: 'relative',\n overflow: 'auto',\n touchAction: 'none',\n});\n\nconst DeleteIconButton = styled(IconButton)({\n position: 'absolute',\n right: 0,\n top: 0,\n color: `${color.tertiary()} !important`,\n});\n\nexport class ChoicePreview extends React.Component {\n static propTypes = {\n alternateResponseIndex: PropTypes.number,\n category: PropTypes.object,\n choice: PropTypes.object.isRequired,\n choiceIndex: PropTypes.number,\n onDelete: PropTypes.func,\n };\n static defaultProps = {\n onDelete: () => {},\n };\n\n delete = () => {\n const { onDelete, choice } = this.props;\n onDelete(choice);\n };\n\n render() {\n const { alternateResponseIndex, category, choice, choiceIndex } = this.props;\n\n // Generate unique ID for each instance to distinguish multiple instances of the same choice\n const categoryId = category && category.id;\n const uniqueId =\n alternateResponseIndex !== undefined\n ? `${choice.id}-${categoryId}-${choiceIndex}-alt-${alternateResponseIndex}`\n : `${choice.id}-${categoryId}-${choiceIndex}`;\n\n return (\n <ChoicePreviewContainer>\n {choice ? (\n <DraggableChoice\n alternateResponseIndex={alternateResponseIndex}\n category={category}\n choice={choice}\n choiceIndex={choiceIndex}\n onRemoveChoice={this.delete}\n type={'choice-preview'}\n id={uniqueId}\n categoryId={categoryId}\n >\n <HtmlAndMath html={choice?.content} />\n </DraggableChoice>\n ) : null}\n <DeleteIconButton aria-label=\"delete\" onClick={this.delete} size=\"large\">\n <RemoveCircleOutlineIcon />\n </DeleteIconButton>\n </ChoicePreviewContainer>\n );\n }\n}\n\nexport default ChoicePreview;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _styles = require("@mui/material/styles");
11
+ var _choicePreview = _interopRequireDefault(require("./choice-preview"));
12
+ var _core = require("@dnd-kit/core");
13
+ var _drag = require("@pie-lib/drag");
14
+ var _debug = _interopRequireDefault(require("debug"));
15
+ const log = (0, _debug.default)('@pie-element:categorize:configure');
16
+ const HelperText = (0, _styles.styled)('div')(({
17
+ theme
18
+ }) => ({
19
+ display: 'flex',
20
+ alignItems: 'center',
21
+ justifyContent: 'center',
22
+ fontSize: theme.typography.fontSize - 2,
23
+ color: `rgba(${theme.palette.common.black}, 0.4)`,
24
+ width: '100%',
25
+ height: '100%'
26
+ }));
27
+ const Helper = () => /*#__PURE__*/_react.default.createElement(HelperText, null, "Drag your correct answers here");
28
+ const Previews = ({
29
+ alternateResponseIndex,
30
+ category,
31
+ choices,
32
+ onDeleteChoice
33
+ }) => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, (choices || []).map((c, index) => c && /*#__PURE__*/_react.default.createElement(_choicePreview.default, {
34
+ alternateResponseIndex: alternateResponseIndex,
35
+ category: category,
36
+ choice: c,
37
+ key: index,
38
+ choiceIndex: index,
39
+ onDelete: choice => onDeleteChoice(choice, index)
40
+ })));
41
+ Previews.propTypes = {
42
+ alternateResponseIndex: _propTypes.default.number,
43
+ category: _propTypes.default.object,
44
+ choices: _propTypes.default.array,
45
+ onDeleteChoice: _propTypes.default.func
46
+ };
47
+ const DroppablePlaceHolder = ({
48
+ alternateResponseIndex,
49
+ category,
50
+ choices,
51
+ onDeleteChoice,
52
+ categoryId,
53
+ isAlternate
54
+ }) => {
55
+ const {
56
+ setNodeRef,
57
+ isOver
58
+ } = (0, _core.useDroppable)({
59
+ id: `${categoryId}-${isAlternate ? 'alternate' : 'standard'}`,
60
+ data: {
61
+ accepts: ['choice', 'choice-preview'],
62
+ alternateResponseIndex,
63
+ categoryId,
64
+ type: isAlternate ? 'category-alternate' : 'category',
65
+ id: categoryId
66
+ }
67
+ });
68
+ return /*#__PURE__*/_react.default.createElement("div", {
69
+ ref: setNodeRef
70
+ }, /*#__PURE__*/_react.default.createElement(_drag.PlaceHolder, {
71
+ isOver: isOver,
72
+ extraStyles: {
73
+ width: '100%',
74
+ minHeight: '100px',
75
+ height: 'auto'
76
+ }
77
+ }, (choices || []).length === 0 ? /*#__PURE__*/_react.default.createElement(Helper, null) : /*#__PURE__*/_react.default.createElement(Previews, {
78
+ alternateResponseIndex: alternateResponseIndex,
79
+ category: category,
80
+ choices: choices,
81
+ onDeleteChoice: onDeleteChoice
82
+ })));
83
+ };
84
+ DroppablePlaceHolder.propTypes = {
85
+ alternateResponseIndex: _propTypes.default.number,
86
+ category: _propTypes.default.object,
87
+ choices: _propTypes.default.array,
88
+ onDeleteChoice: _propTypes.default.func,
89
+ categoryId: _propTypes.default.string.isRequired,
90
+ isAlternate: _propTypes.default.bool
91
+ };
92
+ var _default = exports.default = _drag.uid.withUid(DroppablePlaceHolder);
93
+ //# sourceMappingURL=droppable-placeholder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"droppable-placeholder.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","_choicePreview","_core","_drag","_debug","log","debug","HelperText","styled","theme","display","alignItems","justifyContent","fontSize","typography","color","palette","common","black","width","height","Helper","default","createElement","Previews","alternateResponseIndex","category","choices","onDeleteChoice","Fragment","map","c","index","choice","key","choiceIndex","onDelete","propTypes","PropTypes","number","object","array","func","DroppablePlaceHolder","categoryId","isAlternate","setNodeRef","isOver","useDroppable","id","data","accepts","type","ref","PlaceHolder","extraStyles","minHeight","length","string","isRequired","bool","_default","exports","uid","withUid"],"sources":["../../../src/design/categories/droppable-placeholder.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport ChoicePreview from './choice-preview';\nimport { useDroppable } from '@dnd-kit/core';\nimport { uid, PlaceHolder } from '@pie-lib/drag';\nimport debug from 'debug';\n\nconst log = debug('@pie-element:categorize:configure');\n\nconst HelperText = styled('div')(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: theme.typography.fontSize - 2,\n color: `rgba(${theme.palette.common.black}, 0.4)`,\n width: '100%',\n height: '100%',\n}));\n\nconst Helper = () => <HelperText>Drag your correct answers here</HelperText>;\n\nconst Previews = ({ alternateResponseIndex, category, choices, onDeleteChoice }) => (\n <React.Fragment>\n {(choices || []).map((c, index) =>\n c && (\n <ChoicePreview\n alternateResponseIndex={alternateResponseIndex}\n category={category}\n choice={c}\n key={index}\n choiceIndex={index}\n onDelete={(choice) => onDeleteChoice(choice, index)}\n />\n )\n )}\n </React.Fragment>\n);\n\nPreviews.propTypes = {\n alternateResponseIndex: PropTypes.number,\n category: PropTypes.object,\n choices: PropTypes.array,\n onDeleteChoice: PropTypes.func,\n};\n\nconst DroppablePlaceHolder = ({\n alternateResponseIndex,\n category,\n choices,\n onDeleteChoice,\n categoryId,\n isAlternate\n}) => {\n const { setNodeRef, isOver } = useDroppable({\n id: `${categoryId}-${isAlternate ? 'alternate' : 'standard'}`,\n data: {\n accepts: ['choice', 'choice-preview'],\n alternateResponseIndex,\n categoryId,\n type: isAlternate ? 'category-alternate' : 'category',\n id: categoryId,\n },\n });\n\n return (\n <div ref={setNodeRef}>\n <PlaceHolder\n isOver={isOver}\n extraStyles={{\n width: '100%',\n minHeight: '100px',\n height: 'auto',\n }}>\n {(choices || []).length === 0 ? (\n <Helper />\n ) : (\n <Previews\n alternateResponseIndex={alternateResponseIndex}\n category={category}\n choices={choices}\n onDeleteChoice={onDeleteChoice}\n />\n )}\n </PlaceHolder>\n </div>\n );\n};\n\nDroppablePlaceHolder.propTypes = {\n alternateResponseIndex: PropTypes.number,\n category: PropTypes.object,\n choices: PropTypes.array,\n onDeleteChoice: PropTypes.func,\n categoryId: PropTypes.string.isRequired,\n isAlternate: PropTypes.bool,\n};\n\nexport default uid.withUid(DroppablePlaceHolder);\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.Categories = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+ var _styles = require("@mui/material/styles");
12
+ var _configUi = require("@pie-lib/config-ui");
13
+ var _Info = _interopRequireDefault(require("@mui/icons-material/Info"));
14
+ var _Tooltip = _interopRequireDefault(require("@mui/material/Tooltip"));
15
+ var _categorize = require("@pie-lib/categorize");
16
+ var _category = _interopRequireDefault(require("./category"));
17
+ var _header = _interopRequireDefault(require("../header"));
18
+ var _utils = require("../../utils");
19
+ var _RowLabel = require("./RowLabel");
20
+ const CategoriesContainer = (0, _styles.styled)('div')(({
21
+ theme
22
+ }) => ({
23
+ marginBottom: theme.spacing(3)
24
+ }));
25
+ const CategoriesHolder = (0, _styles.styled)('div')(({
26
+ theme
27
+ }) => ({
28
+ display: 'grid',
29
+ gridRowGap: theme.spacing(1),
30
+ gridColumnGap: theme.spacing(1)
31
+ }));
32
+ const StyledTooltip = (0, _styles.styled)(_Tooltip.default)(({
33
+ theme
34
+ }) => ({
35
+ '& .MuiTooltip-tooltip': {
36
+ fontSize: theme.typography.fontSize - 2,
37
+ whiteSpace: 'pre',
38
+ maxWidth: '500px'
39
+ }
40
+ }));
41
+ const ErrorText = (0, _styles.styled)('div')(({
42
+ theme
43
+ }) => ({
44
+ fontSize: theme.typography.fontSize - 2,
45
+ color: theme.palette.error.main,
46
+ paddingTop: theme.spacing(0.5)
47
+ }));
48
+ class Categories extends _react.default.Component {
49
+ constructor(...args) {
50
+ super(...args);
51
+ (0, _defineProperty2.default)(this, "state", {
52
+ focusedEl: null
53
+ });
54
+ (0, _defineProperty2.default)(this, "add", () => {
55
+ const {
56
+ model,
57
+ categories: oldCategories
58
+ } = this.props;
59
+ const {
60
+ categoriesPerRow,
61
+ correctResponse,
62
+ allowAlternateEnabled
63
+ } = model;
64
+ const id = _configUi.choiceUtils.firstAvailableIndex(model.categories.map(a => a.id), 1);
65
+ const data = {
66
+ id,
67
+ label: 'Category ' + id
68
+ };
69
+ const addRowLabel = model.categories.length % categoriesPerRow === 0;
70
+ const rowLabels = [...model.rowLabels];
71
+ if (addRowLabel) {
72
+ rowLabels.push('');
73
+ }
74
+ this.setState({
75
+ focusedEl: oldCategories.length
76
+ }, () => {
77
+ this.props.onModelChanged({
78
+ rowLabels,
79
+ categories: model.categories.concat([data]),
80
+ correctResponse: allowAlternateEnabled ? [...correctResponse, {
81
+ category: id,
82
+ choices: [],
83
+ alternateResponses: []
84
+ }] : correctResponse
85
+ });
86
+ });
87
+ });
88
+ (0, _defineProperty2.default)(this, "deleteFocusedEl", () => {
89
+ this.setState({
90
+ focusedEl: null
91
+ });
92
+ });
93
+ (0, _defineProperty2.default)(this, "delete", category => {
94
+ const {
95
+ model,
96
+ onModelChanged
97
+ } = this.props;
98
+ const index = model.categories.findIndex(a => a.id === category.id);
99
+ if (index !== -1) {
100
+ model.categories.splice(index, 1);
101
+ model.correctResponse = (0, _categorize.removeCategory)(category.id, model.correctResponse);
102
+ onModelChanged(model);
103
+ }
104
+ });
105
+ (0, _defineProperty2.default)(this, "change", c => {
106
+ const {
107
+ categories
108
+ } = this.props;
109
+ const index = categories.findIndex(a => a.id === c.id);
110
+ if (index !== -1) {
111
+ categories.splice(index, 1, c);
112
+ this.props.onModelChanged({
113
+ categories
114
+ });
115
+ }
116
+ });
117
+ (0, _defineProperty2.default)(this, "deleteChoiceFromCategory", (category, choice, choiceIndex) => {
118
+ const {
119
+ model,
120
+ onModelChanged
121
+ } = this.props;
122
+ const correctResponse = (0, _categorize.removeChoiceFromCategory)(choice.id, category.id, choiceIndex, model.correctResponse);
123
+ onModelChanged({
124
+ correctResponse
125
+ });
126
+ });
127
+ (0, _defineProperty2.default)(this, "changeRowLabel", (val, index) => {
128
+ const {
129
+ model
130
+ } = this.props;
131
+ const {
132
+ rowLabels
133
+ } = model;
134
+ const newRowLabels = [...rowLabels];
135
+ if (newRowLabels.length < index) {
136
+ newRowLabels.push(val);
137
+ } else {
138
+ newRowLabels[index] = val;
139
+ }
140
+ this.props.onModelChanged({
141
+ rowLabels: newRowLabels
142
+ });
143
+ });
144
+ }
145
+ render() {
146
+ const {
147
+ model,
148
+ categories,
149
+ imageSupport,
150
+ uploadSoundSupport,
151
+ toolbarOpts,
152
+ spellCheck,
153
+ configuration,
154
+ defaultImageMaxHeight,
155
+ defaultImageMaxWidth,
156
+ mathMlOptions = {}
157
+ } = this.props;
158
+ const {
159
+ categoriesPerRow,
160
+ rowLabels,
161
+ errors
162
+ } = model;
163
+ const {
164
+ associationError,
165
+ categoriesError,
166
+ categoriesErrors
167
+ } = errors || {};
168
+ const {
169
+ maxCategories,
170
+ maxImageWidth = {},
171
+ maxImageHeight = {}
172
+ } = configuration || {};
173
+ const holderStyle = {
174
+ gridTemplateColumns: `repeat(${categoriesPerRow}, 1fr)`
175
+ };
176
+ const validationMessage = (0, _utils.generateValidationMessage)(configuration);
177
+ return /*#__PURE__*/_react.default.createElement(CategoriesContainer, null, /*#__PURE__*/_react.default.createElement(_header.default, {
178
+ label: "Categories",
179
+ buttonLabel: "ADD A CATEGORY",
180
+ onAdd: this.add,
181
+ info: /*#__PURE__*/_react.default.createElement(StyledTooltip, {
182
+ disableFocusListener: true,
183
+ disableTouchListener: true,
184
+ placement: 'right',
185
+ title: validationMessage
186
+ }, /*#__PURE__*/_react.default.createElement(_Info.default, {
187
+ fontSize: 'small',
188
+ color: 'primary',
189
+ style: {
190
+ marginLeft: '5px'
191
+ }
192
+ })),
193
+ buttonDisabled: maxCategories && categories && maxCategories === categories.length
194
+ }), /*#__PURE__*/_react.default.createElement(CategoriesHolder, {
195
+ style: holderStyle
196
+ }, categories.map((category, index) => {
197
+ const hasRowLabel = index % categoriesPerRow === 0;
198
+ const rowIndex = index / categoriesPerRow;
199
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
200
+ key: index
201
+ }, hasRowLabel && /*#__PURE__*/_react.default.createElement(_RowLabel.RowLabel, {
202
+ categoriesPerRow: categoriesPerRow,
203
+ disabled: false,
204
+ rowIndex: rowIndex,
205
+ markup: rowLabels[rowIndex] || '',
206
+ onChange: val => this.changeRowLabel(val, rowIndex),
207
+ imageSupport: imageSupport,
208
+ toolbarOpts: toolbarOpts,
209
+ spellCheck: spellCheck,
210
+ maxImageWidth: maxImageWidth && maxImageWidth.rowLabel || defaultImageMaxWidth,
211
+ maxImageHeight: maxImageHeight && maxImageHeight.rowLabel || defaultImageMaxHeight,
212
+ uploadSoundSupport: uploadSoundSupport,
213
+ mathMlOptions: mathMlOptions,
214
+ configuration: configuration
215
+ }), /*#__PURE__*/_react.default.createElement(_category.default, {
216
+ imageSupport: imageSupport,
217
+ focusedEl: this.state.focusedEl,
218
+ deleteFocusedEl: this.deleteFocusedEl,
219
+ index: index,
220
+ category: category,
221
+ error: categoriesErrors && categoriesErrors[category.id],
222
+ onChange: this.change,
223
+ onDelete: () => this.delete(category),
224
+ toolbarOpts: toolbarOpts,
225
+ spellCheck: spellCheck,
226
+ onDeleteChoice: (choice, choiceIndex) => this.deleteChoiceFromCategory(category, choice, choiceIndex),
227
+ maxImageWidth: maxImageWidth && maxImageWidth.categoryLabel || defaultImageMaxWidth,
228
+ maxImageHeight: maxImageHeight && maxImageHeight.categoryLabel || defaultImageMaxHeight,
229
+ uploadSoundSupport: uploadSoundSupport,
230
+ configuration: configuration,
231
+ alternateResponseIndex: undefined
232
+ }));
233
+ })), associationError && /*#__PURE__*/_react.default.createElement(ErrorText, null, associationError), categoriesError && /*#__PURE__*/_react.default.createElement(ErrorText, null, categoriesError));
234
+ }
235
+ }
236
+ exports.Categories = Categories;
237
+ (0, _defineProperty2.default)(Categories, "propTypes", {
238
+ defaultImageMaxHeight: _propTypes.default.number,
239
+ defaultImageMaxWidth: _propTypes.default.number,
240
+ imageSupport: _propTypes.default.shape({
241
+ add: _propTypes.default.func.isRequired,
242
+ delete: _propTypes.default.func.isRequired
243
+ }),
244
+ uploadSoundSupport: _propTypes.default.shape({
245
+ add: _propTypes.default.func.isRequired,
246
+ delete: _propTypes.default.func.isRequired
247
+ }),
248
+ categories: _propTypes.default.array,
249
+ onModelChanged: _propTypes.default.func,
250
+ model: _propTypes.default.object.isRequired,
251
+ configuration: _propTypes.default.object.isRequired,
252
+ toolbarOpts: _propTypes.default.object,
253
+ spellCheck: _propTypes.default.bool
254
+ });
255
+ var _default = exports.default = Categories;
256
+ //# sourceMappingURL=index.js.map