@pie-element/categorize 13.1.1 → 13.1.2-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 (158) hide show
  1. package/configure.js +2 -0
  2. package/controller.js +1 -0
  3. package/dist/author/defaults.d.ts +223 -0
  4. package/dist/author/defaults.js +170 -0
  5. package/dist/author/design/builder.d.ts +10 -0
  6. package/dist/author/design/builder.js +24 -0
  7. package/dist/author/design/buttons.d.ts +28 -0
  8. package/dist/author/design/buttons.js +36 -0
  9. package/dist/author/design/categories/RowLabel.d.ts +23 -0
  10. package/dist/author/design/categories/RowLabel.js +47 -0
  11. package/dist/author/design/categories/alternateResponses.d.ts +31 -0
  12. package/dist/author/design/categories/alternateResponses.js +62 -0
  13. package/dist/author/design/categories/category.d.ts +44 -0
  14. package/dist/author/design/categories/category.js +98 -0
  15. package/dist/author/design/categories/choice-preview.d.ts +25 -0
  16. package/dist/author/design/categories/choice-preview.js +60 -0
  17. package/dist/author/design/categories/droppable-placeholder.d.ts +11 -0
  18. package/dist/author/design/categories/droppable-placeholder.js +71 -0
  19. package/dist/author/design/categories/index.d.ts +41 -0
  20. package/dist/author/design/categories/index.js +146 -0
  21. package/dist/author/design/choices/choice.d.ts +11 -0
  22. package/dist/author/design/choices/choice.js +129 -0
  23. package/dist/author/design/choices/config.d.ts +21 -0
  24. package/dist/author/design/choices/config.js +33 -0
  25. package/dist/author/design/choices/index.d.ts +41 -0
  26. package/dist/author/design/choices/index.js +110 -0
  27. package/dist/author/design/header.d.ts +24 -0
  28. package/dist/author/design/header.js +49 -0
  29. package/dist/author/design/index.d.ts +52 -0
  30. package/dist/author/design/index.js +417 -0
  31. package/dist/author/design/input-header.d.ts +39 -0
  32. package/dist/author/design/input-header.js +69 -0
  33. package/dist/author/design/utils.d.ts +9 -0
  34. package/dist/author/design/utils.js +7 -0
  35. package/dist/author/index.d.ts +51 -0
  36. package/dist/author/index.js +87 -0
  37. package/dist/author/main.d.ts +23 -0
  38. package/dist/author/main.js +30 -0
  39. package/dist/author/utils.d.ts +16 -0
  40. package/dist/author/utils.js +17 -0
  41. package/dist/browser/author/index.js +2041 -0
  42. package/dist/browser/author/index.js.map +1 -0
  43. package/dist/browser/categorize.css +2 -0
  44. package/dist/browser/controller/index.js +299 -0
  45. package/dist/browser/controller/index.js.map +1 -0
  46. package/dist/browser/delivery/index.js +1051 -0
  47. package/dist/browser/delivery/index.js.map +1 -0
  48. package/dist/browser/dist-BINEJ0Vp.js +1954 -0
  49. package/dist/browser/dist-BINEJ0Vp.js.map +1 -0
  50. package/dist/browser/dist-C19vRASu.js +49795 -0
  51. package/dist/browser/dist-C19vRASu.js.map +1 -0
  52. package/dist/controller/defaults.d.ts +34 -0
  53. package/dist/controller/defaults.js +29 -0
  54. package/dist/controller/index.d.ts +61 -0
  55. package/dist/controller/index.js +155 -0
  56. package/dist/controller/utils.d.ts +20 -0
  57. package/dist/controller/utils.js +35 -0
  58. package/dist/delivery/categorize/categories.d.ts +34 -0
  59. package/dist/delivery/categorize/categories.js +66 -0
  60. package/dist/delivery/categorize/category.d.ts +28 -0
  61. package/dist/delivery/categorize/category.js +48 -0
  62. package/dist/delivery/categorize/choice.d.ts +27 -0
  63. package/dist/delivery/categorize/choice.js +94 -0
  64. package/dist/delivery/categorize/choices.d.ts +39 -0
  65. package/dist/delivery/categorize/choices.js +51 -0
  66. package/dist/delivery/categorize/droppable-placeholder.d.ts +32 -0
  67. package/dist/delivery/categorize/droppable-placeholder.js +64 -0
  68. package/dist/delivery/categorize/grid-content.d.ts +25 -0
  69. package/dist/delivery/categorize/grid-content.js +39 -0
  70. package/dist/delivery/categorize/index.d.ts +57 -0
  71. package/dist/delivery/categorize/index.js +260 -0
  72. package/dist/delivery/index.d.ts +27 -0
  73. package/dist/delivery/index.js +152 -0
  74. package/dist/index.d.ts +1 -0
  75. package/dist/index.iife.d.ts +8 -0
  76. package/dist/index.iife.js +152 -0
  77. package/dist/index.js +2 -0
  78. package/dist/runtime-support.d.ts +12 -0
  79. package/dist/runtime-support.js +12 -0
  80. package/package.json +87 -23
  81. package/CHANGELOG.json +0 -1637
  82. package/CHANGELOG.md +0 -2536
  83. package/LICENSE.md +0 -5
  84. package/README.md +0 -5
  85. package/configure/CHANGELOG.json +0 -1202
  86. package/configure/CHANGELOG.md +0 -2119
  87. package/configure/lib/defaults.js +0 -222
  88. package/configure/lib/defaults.js.map +0 -1
  89. package/configure/lib/design/builder.js +0 -55
  90. package/configure/lib/design/builder.js.map +0 -1
  91. package/configure/lib/design/buttons.js +0 -59
  92. package/configure/lib/design/buttons.js.map +0 -1
  93. package/configure/lib/design/categories/RowLabel.js +0 -66
  94. package/configure/lib/design/categories/RowLabel.js.map +0 -1
  95. package/configure/lib/design/categories/alternateResponses.js +0 -116
  96. package/configure/lib/design/categories/alternateResponses.js.map +0 -1
  97. package/configure/lib/design/categories/category.js +0 -153
  98. package/configure/lib/design/categories/category.js.map +0 -1
  99. package/configure/lib/design/categories/choice-preview.js +0 -79
  100. package/configure/lib/design/categories/choice-preview.js.map +0 -1
  101. package/configure/lib/design/categories/droppable-placeholder.js +0 -93
  102. package/configure/lib/design/categories/droppable-placeholder.js.map +0 -1
  103. package/configure/lib/design/categories/index.js +0 -256
  104. package/configure/lib/design/categories/index.js.map +0 -1
  105. package/configure/lib/design/choices/choice.js +0 -187
  106. package/configure/lib/design/choices/choice.js.map +0 -1
  107. package/configure/lib/design/choices/config.js +0 -58
  108. package/configure/lib/design/choices/config.js.map +0 -1
  109. package/configure/lib/design/choices/index.js +0 -197
  110. package/configure/lib/design/choices/index.js.map +0 -1
  111. package/configure/lib/design/header.js +0 -71
  112. package/configure/lib/design/header.js.map +0 -1
  113. package/configure/lib/design/index.js +0 -727
  114. package/configure/lib/design/index.js.map +0 -1
  115. package/configure/lib/design/input-header.js +0 -105
  116. package/configure/lib/design/input-header.js.map +0 -1
  117. package/configure/lib/design/utils.js +0 -12
  118. package/configure/lib/design/utils.js.map +0 -1
  119. package/configure/lib/index.js +0 -147
  120. package/configure/lib/index.js.map +0 -1
  121. package/configure/lib/main.js +0 -44
  122. package/configure/lib/main.js.map +0 -1
  123. package/configure/lib/utils.js +0 -43
  124. package/configure/lib/utils.js.map +0 -1
  125. package/configure/package.json +0 -32
  126. package/controller/CHANGELOG.json +0 -452
  127. package/controller/CHANGELOG.md +0 -1377
  128. package/controller/lib/defaults.js +0 -33
  129. package/controller/lib/defaults.js.map +0 -1
  130. package/controller/lib/index.js +0 -479
  131. package/controller/lib/index.js.map +0 -1
  132. package/controller/lib/utils.js +0 -69
  133. package/controller/lib/utils.js.map +0 -1
  134. package/controller/package.json +0 -18
  135. package/docs/config-schema.json +0 -2897
  136. package/docs/config-schema.json.md +0 -2138
  137. package/docs/demo/config.js +0 -8
  138. package/docs/demo/generate.js +0 -357
  139. package/docs/demo/index.html +0 -1
  140. package/docs/demo/session.js +0 -12
  141. package/docs/pie-schema.json +0 -1784
  142. package/docs/pie-schema.json.md +0 -1046
  143. package/lib/categorize/categories.js +0 -135
  144. package/lib/categorize/categories.js.map +0 -1
  145. package/lib/categorize/category.js +0 -67
  146. package/lib/categorize/category.js.map +0 -1
  147. package/lib/categorize/choice.js +0 -140
  148. package/lib/categorize/choice.js.map +0 -1
  149. package/lib/categorize/choices.js +0 -99
  150. package/lib/categorize/choices.js.map +0 -1
  151. package/lib/categorize/droppable-placeholder.js +0 -84
  152. package/lib/categorize/droppable-placeholder.js.map +0 -1
  153. package/lib/categorize/grid-content.js +0 -55
  154. package/lib/categorize/grid-content.js.map +0 -1
  155. package/lib/categorize/index.js +0 -450
  156. package/lib/categorize/index.js.map +0 -1
  157. package/lib/index.js +0 -316
  158. package/lib/index.js.map +0 -1
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @synced-from pie-elements/packages/categorize/configure/src/design/categories/category.jsx
3
+ * @auto-generated
4
+ *
5
+ * This file is automatically synced from pie-elements and converted to TypeScript.
6
+ * Manual edits will be overwritten on next sync.
7
+ * To make changes, edit the upstream JavaScript file and run sync again.
8
+ */
9
+ import React from 'react';
10
+ import PropTypes from 'prop-types';
11
+ export declare class Category extends React.Component {
12
+ static propTypes: {
13
+ alternateResponseIndex: PropTypes.Requireable<number>;
14
+ category: PropTypes.Validator<object>;
15
+ configuration: PropTypes.Validator<object>;
16
+ defaultImageMaxHeight: PropTypes.Requireable<number>;
17
+ defaultImageMaxWidth: PropTypes.Requireable<number>;
18
+ deleteFocusedEl: PropTypes.Requireable<(...args: any[]) => any>;
19
+ focusedEl: PropTypes.Requireable<number>;
20
+ index: PropTypes.Requireable<number>;
21
+ error: PropTypes.Requireable<string>;
22
+ isDuplicated: PropTypes.Requireable<boolean>;
23
+ maxImageWidth: PropTypes.Requireable<object>;
24
+ maxImageHeight: PropTypes.Requireable<object>;
25
+ onChange: PropTypes.Requireable<(...args: any[]) => any>;
26
+ onDelete: PropTypes.Requireable<(...args: any[]) => any>;
27
+ onDeleteChoice: PropTypes.Requireable<(...args: any[]) => any>;
28
+ imageSupport: PropTypes.Requireable<PropTypes.InferProps<{
29
+ add: PropTypes.Validator<(...args: any[]) => any>;
30
+ delete: PropTypes.Validator<(...args: any[]) => any>;
31
+ }>>;
32
+ toolbarOpts: PropTypes.Requireable<object>;
33
+ spellCheck: PropTypes.Requireable<boolean>;
34
+ uploadSoundSupport: PropTypes.Requireable<PropTypes.InferProps<{
35
+ add: PropTypes.Validator<(...args: any[]) => any>;
36
+ delete: PropTypes.Validator<(...args: any[]) => any>;
37
+ }>>;
38
+ isAlternate: PropTypes.Requireable<boolean>;
39
+ };
40
+ static defaultProps: {};
41
+ changeLabel: any;
42
+ render(): React.JSX.Element;
43
+ }
44
+ export default Category;
@@ -0,0 +1,98 @@
1
+ import e from "../input-header.js";
2
+ import { DeleteButton as t } from "../buttons.js";
3
+ import n from "./droppable-placeholder.js";
4
+ import r from "react";
5
+ import i from "prop-types";
6
+ import { styled as a } from "@mui/material/styles";
7
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
8
+ import c from "@mui/material/Card";
9
+ import l from "@mui/material/CardActions";
10
+ //#region src/author/design/categories/category.tsx
11
+ var u = a(c, { shouldForwardProp: (e) => e !== "isDuplicated" })(({ theme: e, isDuplicated: t }) => ({
12
+ minWidth: "196px",
13
+ padding: e.spacing(1),
14
+ overflow: "visible",
15
+ ...t && { border: "1px solid red" }
16
+ })), d = a(l)(({ theme: e }) => ({ padding: `${e.spacing(1)} 0 0` })), f = a("div")(({ theme: e }) => ({
17
+ padding: e.spacing(2),
18
+ "& p": { margin: 0 }
19
+ })), p = a("div")(({ theme: e }) => ({
20
+ fontSize: e.typography.fontSize - 2,
21
+ color: e.palette.error.main,
22
+ paddingBottom: e.spacing(1)
23
+ })), m = class extends r.Component {
24
+ static propTypes = {
25
+ alternateResponseIndex: i.number,
26
+ category: i.object.isRequired,
27
+ configuration: i.object.isRequired,
28
+ defaultImageMaxHeight: i.number,
29
+ defaultImageMaxWidth: i.number,
30
+ deleteFocusedEl: i.func,
31
+ focusedEl: i.number,
32
+ index: i.number,
33
+ error: i.string,
34
+ isDuplicated: i.bool,
35
+ maxImageWidth: i.object,
36
+ maxImageHeight: i.object,
37
+ onChange: i.func,
38
+ onDelete: i.func,
39
+ onDeleteChoice: i.func,
40
+ imageSupport: i.shape({
41
+ add: i.func.isRequired,
42
+ delete: i.func.isRequired
43
+ }),
44
+ toolbarOpts: i.object,
45
+ spellCheck: i.bool,
46
+ uploadSoundSupport: i.shape({
47
+ add: i.func.isRequired,
48
+ delete: i.func.isRequired
49
+ }),
50
+ isAlternate: i.bool
51
+ };
52
+ static defaultProps = {};
53
+ changeLabel = (e) => {
54
+ let { category: t, onChange: n } = this.props;
55
+ t.label = e, n(t);
56
+ };
57
+ render() {
58
+ let { alternateResponseIndex: r, category: i, configuration: a, deleteFocusedEl: c, focusedEl: l, index: m, error: h, isDuplicated: g, onDelete: _, onDeleteChoice: v, imageSupport: y, spellCheck: b, toolbarOpts: x, maxImageWidth: S, maxImageHeight: C, uploadSoundSupport: w, mathMlOptions: T = {} } = this.props;
59
+ return /* @__PURE__ */ s(u, {
60
+ isDuplicated: g,
61
+ children: [
62
+ /* @__PURE__ */ s("span", { children: [r || r === 0 ? /* @__PURE__ */ o(f, { dangerouslySetInnerHTML: { __html: i.label } }) : /* @__PURE__ */ o(e, {
63
+ label: i.label,
64
+ focusedEl: l,
65
+ deleteFocusedEl: c,
66
+ index: m,
67
+ disabled: !!r || r === 0,
68
+ error: h,
69
+ onChange: this.changeLabel,
70
+ onDelete: _,
71
+ imageSupport: y,
72
+ toolbarOpts: x,
73
+ spellCheck: b,
74
+ maxImageWidth: S,
75
+ maxImageHeight: C,
76
+ uploadSoundSupport: w,
77
+ mathMlOptions: T,
78
+ configuration: a
79
+ }), h && /* @__PURE__ */ o(p, { children: h })] }),
80
+ /* @__PURE__ */ o(n, {
81
+ alternateResponseIndex: r,
82
+ category: i,
83
+ choices: i.choices,
84
+ onDeleteChoice: v,
85
+ categoryId: i.id,
86
+ extraStyles: { minHeight: "100px" },
87
+ isAlternate: this.props.isAlternate
88
+ }),
89
+ _ && /* @__PURE__ */ o(d, { children: /* @__PURE__ */ o(t, {
90
+ label: "delete",
91
+ onClick: _
92
+ }) })
93
+ ]
94
+ });
95
+ }
96
+ };
97
+ //#endregion
98
+ export { m as default };
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @synced-from pie-elements/packages/categorize/configure/src/design/categories/choice-preview.jsx
3
+ * @auto-generated
4
+ *
5
+ * This file is automatically synced from pie-elements and converted to TypeScript.
6
+ * Manual edits will be overwritten on next sync.
7
+ * To make changes, edit the upstream JavaScript file and run sync again.
8
+ */
9
+ import React from 'react';
10
+ import PropTypes from 'prop-types';
11
+ export declare class ChoicePreview extends React.Component {
12
+ static propTypes: {
13
+ alternateResponseIndex: PropTypes.Requireable<number>;
14
+ category: PropTypes.Requireable<object>;
15
+ choice: PropTypes.Validator<object>;
16
+ choiceIndex: PropTypes.Requireable<number>;
17
+ onDelete: PropTypes.Requireable<(...args: any[]) => any>;
18
+ };
19
+ static defaultProps: {
20
+ onDelete: () => void;
21
+ };
22
+ delete: any;
23
+ render(): React.JSX.Element;
24
+ }
25
+ export default ChoicePreview;
@@ -0,0 +1,60 @@
1
+ import e from "react";
2
+ import * as t from "@pie-lib/render-ui";
3
+ import { HtmlAndMath as n, color as r } from "@pie-lib/render-ui";
4
+ import i from "prop-types";
5
+ import { styled as a } from "@mui/material/styles";
6
+ import { DraggableChoice as o } from "@pie-lib/drag";
7
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
8
+ import l from "@mui/material/IconButton";
9
+ import u from "@mui/icons-material/RemoveCircleOutline";
10
+ //#region src/author/design/categories/choice-preview.tsx
11
+ function d(e) {
12
+ return typeof e == "function" || typeof e == "object" && !!e && typeof e.$$typeof == "symbol";
13
+ }
14
+ function f(e, t) {
15
+ return !e || d(e) ? e : d(e.default) ? e.default : t && d(e[t]) ? e[t] : t && d(e[t]?.default) ? e[t].default : e;
16
+ }
17
+ var p = f(n, "HtmlAndMath") || f(g.HtmlAndMath, "HtmlAndMath"), m = t, h = m.default, g = h && typeof h == "object" ? h : m, _ = a("div")({
18
+ position: "relative",
19
+ overflow: "auto",
20
+ touchAction: "none"
21
+ }), v = a(l)({
22
+ position: "absolute",
23
+ right: 0,
24
+ top: 0,
25
+ color: `${r.tertiary()} !important`
26
+ }), y = class extends e.Component {
27
+ static propTypes = {
28
+ alternateResponseIndex: i.number,
29
+ category: i.object,
30
+ choice: i.object.isRequired,
31
+ choiceIndex: i.number,
32
+ onDelete: i.func
33
+ };
34
+ static defaultProps = { onDelete: () => {} };
35
+ delete = () => {
36
+ let { onDelete: e, choice: t } = this.props;
37
+ e(t);
38
+ };
39
+ render() {
40
+ let { alternateResponseIndex: e, category: t, choice: n, choiceIndex: r } = this.props, i = t && t.id, a = e === void 0 ? `${n.id}-${i}-${r}` : `${n.id}-${i}-${r}-alt-${e}`;
41
+ return /* @__PURE__ */ c(_, { children: [n ? /* @__PURE__ */ s(o, {
42
+ alternateResponseIndex: e,
43
+ category: t,
44
+ choice: n,
45
+ choiceIndex: r,
46
+ onRemoveChoice: this.delete,
47
+ type: "choice-preview",
48
+ id: a,
49
+ categoryId: i,
50
+ children: /* @__PURE__ */ s(p, { html: n?.content })
51
+ }) : null, /* @__PURE__ */ s(v, {
52
+ "aria-label": "delete",
53
+ onClick: this.delete,
54
+ size: "large",
55
+ children: /* @__PURE__ */ s(u, {})
56
+ })] });
57
+ }
58
+ };
59
+ //#endregion
60
+ export { y as default };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @synced-from pie-elements/packages/categorize/configure/src/design/categories/droppable-placeholder.jsx
3
+ * @auto-generated
4
+ *
5
+ * This file is automatically synced from pie-elements and converted to TypeScript.
6
+ * Manual edits will be overwritten on next sync.
7
+ * To make changes, edit the upstream JavaScript file and run sync again.
8
+ */
9
+ import React from 'react';
10
+ declare const _default: (props: any) => React.JSX.Element;
11
+ export default _default;
@@ -0,0 +1,71 @@
1
+ import e from "./choice-preview.js";
2
+ import t from "react";
3
+ import n from "prop-types";
4
+ import r from "debug";
5
+ import { styled as i } from "@mui/material/styles";
6
+ import { useDroppable as a } from "@dnd-kit/core";
7
+ import { PlaceHolder as o, uid as s } from "@pie-lib/drag";
8
+ import { jsx as c } from "react/jsx-runtime";
9
+ //#region src/author/design/categories/droppable-placeholder.tsx
10
+ r("@pie-element:categorize:configure");
11
+ var l = i("div")(({ theme: e }) => ({
12
+ display: "flex",
13
+ alignItems: "center",
14
+ justifyContent: "center",
15
+ fontSize: e.typography.fontSize - 2,
16
+ color: `rgba(${e.palette.common.black}, 0.4)`,
17
+ width: "100%",
18
+ height: "100%"
19
+ })), u = () => /* @__PURE__ */ c(l, { children: "Drag your correct answers here" }), d = ({ alternateResponseIndex: n, category: r, choices: i, onDeleteChoice: a }) => /* @__PURE__ */ c(t.Fragment, { children: (i || []).map((t, i) => t && /* @__PURE__ */ c(e, {
20
+ alternateResponseIndex: n,
21
+ category: r,
22
+ choice: t,
23
+ choiceIndex: i,
24
+ onDelete: (e) => a(e, i)
25
+ }, i)) });
26
+ d.propTypes = {
27
+ alternateResponseIndex: n.number,
28
+ category: n.object,
29
+ choices: n.array,
30
+ onDeleteChoice: n.func
31
+ };
32
+ var f = ({ alternateResponseIndex: e, category: t, choices: n, onDeleteChoice: r, categoryId: i, isAlternate: s }) => {
33
+ let { setNodeRef: l, isOver: f } = a({
34
+ id: `${i}-${s ? "alternate" : "standard"}`,
35
+ data: {
36
+ accepts: ["choice", "choice-preview"],
37
+ alternateResponseIndex: e,
38
+ categoryId: i,
39
+ type: s ? "category-alternate" : "category",
40
+ id: i
41
+ }
42
+ });
43
+ return /* @__PURE__ */ c("div", {
44
+ ref: l,
45
+ children: /* @__PURE__ */ c(o, {
46
+ isOver: f,
47
+ extraStyles: {
48
+ width: "100%",
49
+ minHeight: "100px",
50
+ height: "auto"
51
+ },
52
+ children: (n || []).length === 0 ? /* @__PURE__ */ c(u, {}) : /* @__PURE__ */ c(d, {
53
+ alternateResponseIndex: e,
54
+ category: t,
55
+ choices: n,
56
+ onDeleteChoice: r
57
+ })
58
+ })
59
+ });
60
+ };
61
+ f.propTypes = {
62
+ alternateResponseIndex: n.number,
63
+ category: n.object,
64
+ choices: n.array,
65
+ onDeleteChoice: n.func,
66
+ categoryId: n.string.isRequired,
67
+ isAlternate: n.bool
68
+ };
69
+ var p = s.withUid(f);
70
+ //#endregion
71
+ export { p as default };
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @synced-from pie-elements/packages/categorize/configure/src/design/categories/index.jsx
3
+ * @auto-generated
4
+ *
5
+ * This file is automatically synced from pie-elements and converted to TypeScript.
6
+ * Manual edits will be overwritten on next sync.
7
+ * To make changes, edit the upstream JavaScript file and run sync again.
8
+ */
9
+ import React from 'react';
10
+ import PropTypes from 'prop-types';
11
+ export declare class Categories extends React.Component {
12
+ static propTypes: {
13
+ defaultImageMaxHeight: PropTypes.Requireable<number>;
14
+ defaultImageMaxWidth: PropTypes.Requireable<number>;
15
+ imageSupport: PropTypes.Requireable<PropTypes.InferProps<{
16
+ add: PropTypes.Validator<(...args: any[]) => any>;
17
+ delete: PropTypes.Validator<(...args: any[]) => any>;
18
+ }>>;
19
+ uploadSoundSupport: PropTypes.Requireable<PropTypes.InferProps<{
20
+ add: PropTypes.Validator<(...args: any[]) => any>;
21
+ delete: PropTypes.Validator<(...args: any[]) => any>;
22
+ }>>;
23
+ categories: PropTypes.Requireable<any[]>;
24
+ onModelChanged: PropTypes.Requireable<(...args: any[]) => any>;
25
+ model: PropTypes.Validator<object>;
26
+ configuration: PropTypes.Validator<object>;
27
+ toolbarOpts: PropTypes.Requireable<object>;
28
+ spellCheck: PropTypes.Requireable<boolean>;
29
+ };
30
+ state: {
31
+ focusedEl: null;
32
+ };
33
+ add: any;
34
+ deleteFocusedEl: any;
35
+ delete: any;
36
+ change: any;
37
+ deleteChoiceFromCategory: any;
38
+ changeRowLabel: any;
39
+ render(): React.JSX.Element;
40
+ }
41
+ export default Categories;
@@ -0,0 +1,146 @@
1
+ import e from "./category.js";
2
+ import t from "../header.js";
3
+ import { generateValidationMessage as n } from "../../utils.js";
4
+ import { RowLabel as r } from "./RowLabel.js";
5
+ import i from "react";
6
+ import a from "prop-types";
7
+ import { styled as o } from "@mui/material/styles";
8
+ import { removeCategory as s, removeChoiceFromCategory as c } from "@pie-lib/categorize";
9
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
10
+ import { choiceUtils as d } from "@pie-lib/config-ui";
11
+ import f from "@mui/icons-material/Info";
12
+ import p from "@mui/material/Tooltip";
13
+ //#region src/author/design/categories/index.tsx
14
+ var m = o("div")(({ theme: e }) => ({ marginBottom: e.spacing(3) })), h = o("div")(({ theme: e }) => ({
15
+ display: "grid",
16
+ gridRowGap: e.spacing(1),
17
+ gridColumnGap: e.spacing(1)
18
+ })), g = o(p)(({ theme: e }) => ({ "& .MuiTooltip-tooltip": {
19
+ fontSize: e.typography.fontSize - 2,
20
+ whiteSpace: "pre",
21
+ maxWidth: "500px"
22
+ } })), _ = o("div")(({ theme: e }) => ({
23
+ fontSize: e.typography.fontSize - 2,
24
+ color: e.palette.error.main,
25
+ paddingTop: e.spacing(.5)
26
+ })), v = class extends i.Component {
27
+ static propTypes = {
28
+ defaultImageMaxHeight: a.number,
29
+ defaultImageMaxWidth: a.number,
30
+ imageSupport: a.shape({
31
+ add: a.func.isRequired,
32
+ delete: a.func.isRequired
33
+ }),
34
+ uploadSoundSupport: a.shape({
35
+ add: a.func.isRequired,
36
+ delete: a.func.isRequired
37
+ }),
38
+ categories: a.array,
39
+ onModelChanged: a.func,
40
+ model: a.object.isRequired,
41
+ configuration: a.object.isRequired,
42
+ toolbarOpts: a.object,
43
+ spellCheck: a.bool
44
+ };
45
+ state = { focusedEl: null };
46
+ add = () => {
47
+ let { model: e, categories: t } = this.props, { categoriesPerRow: n, correctResponse: r, allowAlternateEnabled: i } = e, a = d.firstAvailableIndex(e.categories.map((e) => e.id), 1), o = {
48
+ id: a,
49
+ label: "Category " + a
50
+ }, s = e.categories.length % n === 0, c = [...e.rowLabels];
51
+ s && c.push(""), this.setState({ focusedEl: t.length }, () => {
52
+ this.props.onModelChanged({
53
+ rowLabels: c,
54
+ categories: e.categories.concat([o]),
55
+ correctResponse: i ? [...r, {
56
+ category: a,
57
+ choices: [],
58
+ alternateResponses: []
59
+ }] : r
60
+ });
61
+ });
62
+ };
63
+ deleteFocusedEl = () => {
64
+ this.setState({ focusedEl: null });
65
+ };
66
+ delete = (e) => {
67
+ let { model: t, onModelChanged: n } = this.props, r = t.categories.findIndex((t) => t.id === e.id);
68
+ r !== -1 && (t.categories.splice(r, 1), t.correctResponse = s(e.id, t.correctResponse), n(t));
69
+ };
70
+ change = (e) => {
71
+ let { categories: t } = this.props, n = t.findIndex((t) => t.id === e.id);
72
+ n !== -1 && (t.splice(n, 1, e), this.props.onModelChanged({ categories: t }));
73
+ };
74
+ deleteChoiceFromCategory = (e, t, n) => {
75
+ let { model: r, onModelChanged: i } = this.props;
76
+ i({ correctResponse: c(t.id, e.id, n, r.correctResponse) });
77
+ };
78
+ changeRowLabel = (e, t) => {
79
+ let { model: n } = this.props, { rowLabels: r } = n, i = [...r];
80
+ i.length < t ? i.push(e) : i[t] = e, this.props.onModelChanged({ rowLabels: i });
81
+ };
82
+ render() {
83
+ let { model: a, categories: o, imageSupport: s, uploadSoundSupport: c, toolbarOpts: d, spellCheck: p, configuration: v, defaultImageMaxHeight: y, defaultImageMaxWidth: b, mathMlOptions: x = {} } = this.props, { categoriesPerRow: S, rowLabels: C, errors: w } = a, { associationError: T, categoriesError: E, categoriesErrors: D } = w || {}, { maxCategories: O, maxImageWidth: k = {}, maxImageHeight: A = {} } = v || {}, j = { gridTemplateColumns: `repeat(${S}, 1fr)` }, M = n(v);
84
+ return /* @__PURE__ */ u(m, { children: [
85
+ /* @__PURE__ */ l(t, {
86
+ label: "Categories",
87
+ buttonLabel: "ADD A CATEGORY",
88
+ onAdd: this.add,
89
+ info: /* @__PURE__ */ l(g, {
90
+ disableFocusListener: !0,
91
+ disableTouchListener: !0,
92
+ placement: "right",
93
+ title: M,
94
+ children: /* @__PURE__ */ l(f, {
95
+ fontSize: "small",
96
+ color: "primary",
97
+ style: { marginLeft: "5px" }
98
+ })
99
+ }),
100
+ buttonDisabled: O && o && O === o.length
101
+ }),
102
+ /* @__PURE__ */ l(h, {
103
+ style: j,
104
+ children: o.map((t, n) => {
105
+ let a = n % S === 0, o = n / S;
106
+ return /* @__PURE__ */ u(i.Fragment, { children: [a && /* @__PURE__ */ l(r, {
107
+ categoriesPerRow: S,
108
+ disabled: !1,
109
+ rowIndex: o,
110
+ markup: C[o] || "",
111
+ onChange: (e) => this.changeRowLabel(e, o),
112
+ imageSupport: s,
113
+ toolbarOpts: d,
114
+ spellCheck: p,
115
+ maxImageWidth: k && k.rowLabel || b,
116
+ maxImageHeight: A && A.rowLabel || y,
117
+ uploadSoundSupport: c,
118
+ mathMlOptions: x,
119
+ configuration: v
120
+ }), /* @__PURE__ */ l(e, {
121
+ imageSupport: s,
122
+ focusedEl: this.state.focusedEl,
123
+ deleteFocusedEl: this.deleteFocusedEl,
124
+ index: n,
125
+ category: t,
126
+ error: D && D[t.id],
127
+ onChange: this.change,
128
+ onDelete: () => this.delete(t),
129
+ toolbarOpts: d,
130
+ spellCheck: p,
131
+ onDeleteChoice: (e, n) => this.deleteChoiceFromCategory(t, e, n),
132
+ maxImageWidth: k && k.categoryLabel || b,
133
+ maxImageHeight: A && A.categoryLabel || y,
134
+ uploadSoundSupport: c,
135
+ configuration: v,
136
+ alternateResponseIndex: void 0
137
+ })] }, n);
138
+ })
139
+ }),
140
+ T && /* @__PURE__ */ l(_, { children: T }),
141
+ E && /* @__PURE__ */ l(_, { children: E })
142
+ ] });
143
+ }
144
+ };
145
+ //#endregion
146
+ export { v as default };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @synced-from pie-elements/packages/categorize/configure/src/design/choices/choice.jsx
3
+ * @auto-generated
4
+ *
5
+ * This file is automatically synced from pie-elements and converted to TypeScript.
6
+ * Manual edits will be overwritten on next sync.
7
+ * To make changes, edit the upstream JavaScript file and run sync again.
8
+ */
9
+ import React from 'react';
10
+ declare const _default: (props: any) => React.JSX.Element;
11
+ export default _default;
@@ -0,0 +1,129 @@
1
+ import e from "../input-header.js";
2
+ import { DeleteButton as t } from "../buttons.js";
3
+ import { multiplePlacements as n } from "../../utils.js";
4
+ import "react";
5
+ import r from "prop-types";
6
+ import i from "debug";
7
+ import { styled as a } from "@mui/material/styles";
8
+ import { useDraggable as o, useDroppable as s } from "@dnd-kit/core";
9
+ import { uid as c } from "@pie-lib/drag";
10
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
11
+ import { Checkbox as d } from "@pie-lib/config-ui";
12
+ import f from "@mui/material/Card";
13
+ import p from "@mui/material/CardActions";
14
+ import m from "@mui/icons-material/DragHandle";
15
+ //#region src/author/design/choices/choice.tsx
16
+ i("@pie-element:categorize:configure:choice");
17
+ var h = (e) => {
18
+ if (e.lockChoiceOrder) return !0;
19
+ let t = e.choice.categoryCount || 0;
20
+ return t === 0 ? !0 : e.correctResponseCount < t;
21
+ }, g = a(f)(({ theme: e }) => ({
22
+ minWidth: "196px",
23
+ padding: e.spacing(1),
24
+ overflow: "visible"
25
+ })), _ = a(p)({
26
+ padding: 0,
27
+ justifyContent: "space-between"
28
+ }), v = a("span", { shouldForwardProp: (e) => e !== "draggable" })(({ draggable: e }) => ({
29
+ cursor: e ? "move" : "inherit",
30
+ touchAction: "none"
31
+ })), y = a("div")(({ theme: e }) => ({
32
+ fontSize: e.typography.fontSize - 2,
33
+ color: e.palette.error.main,
34
+ paddingBottom: e.spacing(1)
35
+ })), b = ({ allowMultiplePlacements: r, configuration: i, choice: a, deleteFocusedEl: c, focusedEl: f, index: p, onDelete: b, onChange: x, correctResponseCount: S, lockChoiceOrder: C, imageSupport: w, spellCheck: T, toolbarOpts: E, error: D, maxImageWidth: O, maxImageHeight: k, uploadSoundSupport: A }) => {
36
+ let j = h({
37
+ choice: a,
38
+ correctResponseCount: S,
39
+ lockChoiceOrder: C
40
+ }), { attributes: M, listeners: N, setNodeRef: P, isDragging: F } = o({
41
+ id: `choice-${a.id}`,
42
+ data: {
43
+ id: a.id,
44
+ index: p,
45
+ type: "choice"
46
+ },
47
+ disabled: !j
48
+ }), { setNodeRef: I } = s({
49
+ id: `choice-drop-${a.id}`,
50
+ data: {
51
+ id: a.id,
52
+ index: p,
53
+ type: "choice"
54
+ }
55
+ }), L = (e) => {
56
+ a.content = e, x(a);
57
+ }, R = () => {
58
+ a.categoryCount === 1 ? a.categoryCount = 0 : a.categoryCount = 1, x(a);
59
+ }, z = ((e) => e === n.perChoice)(r);
60
+ return /* @__PURE__ */ u(g, {
61
+ ref: (e) => {
62
+ P(e), I(e);
63
+ },
64
+ style: { opacity: F ? .5 : 1 },
65
+ children: [
66
+ /* @__PURE__ */ l(_, { children: /* @__PURE__ */ l(v, {
67
+ draggable: j,
68
+ ...M,
69
+ ...N,
70
+ children: /* @__PURE__ */ l(m, { color: j ? "primary" : "disabled" })
71
+ }) }),
72
+ /* @__PURE__ */ l(e, {
73
+ imageSupport: w,
74
+ focusedEl: f,
75
+ deleteFocusedEl: c,
76
+ index: p,
77
+ label: a.content,
78
+ onChange: L,
79
+ onDelete: b,
80
+ toolbarOpts: E,
81
+ spellCheck: T,
82
+ error: D,
83
+ maxImageWidth: O,
84
+ maxImageHeight: k,
85
+ uploadSoundSupport: A,
86
+ configuration: i
87
+ }),
88
+ D && /* @__PURE__ */ l(y, { children: D }),
89
+ /* @__PURE__ */ u(_, { children: [/* @__PURE__ */ l(t, {
90
+ label: "delete",
91
+ onClick: b
92
+ }), z && /* @__PURE__ */ l(d, {
93
+ mini: !0,
94
+ label: "Remove after placing",
95
+ checked: a.categoryCount === 1,
96
+ onChange: R
97
+ })] })
98
+ ]
99
+ });
100
+ };
101
+ b.propTypes = {
102
+ allowMultiplePlacements: r.string,
103
+ configuration: r.object.isRequired,
104
+ choice: r.object.isRequired,
105
+ deleteFocusedEl: r.func,
106
+ focusedEl: r.number,
107
+ index: r.number,
108
+ lockChoiceOrder: r.bool,
109
+ maxImageHeight: r.object,
110
+ maxImageWidth: r.object,
111
+ onChange: r.func.isRequired,
112
+ onDelete: r.func.isRequired,
113
+ correctResponseCount: r.number.isRequired,
114
+ imageSupport: r.shape({
115
+ add: r.func.isRequired,
116
+ delete: r.func.isRequired
117
+ }),
118
+ toolbarOpts: r.object,
119
+ error: r.string,
120
+ uploadSoundSupport: r.shape({
121
+ add: r.func.isRequired,
122
+ delete: r.func.isRequired
123
+ }),
124
+ spellCheck: r.bool,
125
+ rearrangeChoices: r.func
126
+ };
127
+ var x = c.withUid(b);
128
+ //#endregion
129
+ export { x as default };
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @synced-from pie-elements/packages/categorize/configure/src/design/choices/config.jsx
3
+ * @auto-generated
4
+ *
5
+ * This file is automatically synced from pie-elements and converted to TypeScript.
6
+ * Manual edits will be overwritten on next sync.
7
+ * To make changes, edit the upstream JavaScript file and run sync again.
8
+ */
9
+ import React from 'react';
10
+ import PropTypes from 'prop-types';
11
+ export declare class Config extends React.Component {
12
+ static propTypes: {
13
+ config: PropTypes.Requireable<object>;
14
+ onModelChanged: PropTypes.Requireable<(...args: any[]) => any>;
15
+ spellCheck: PropTypes.Requireable<boolean>;
16
+ };
17
+ static defaultProps: {};
18
+ changeLabel: any;
19
+ render(): React.JSX.Element;
20
+ }
21
+ export default Config;