@pie-element/multi-trait-rubric 8.1.1 → 8.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 (100) hide show
  1. package/configure.js +2 -0
  2. package/controller.js +1 -0
  3. package/dist/author/common.d.ts +90 -0
  4. package/dist/author/common.js +275 -0
  5. package/dist/author/defaults.d.ts +153 -0
  6. package/dist/author/defaults.js +113 -0
  7. package/dist/author/index.d.ts +22 -0
  8. package/dist/author/index.js +89 -0
  9. package/dist/author/main.d.ts +43 -0
  10. package/dist/author/main.js +247 -0
  11. package/dist/author/modals.d.ts +94 -0
  12. package/dist/author/modals.js +171 -0
  13. package/dist/author/scale.d.ts +46 -0
  14. package/dist/author/scale.js +280 -0
  15. package/dist/author/trait.d.ts +70 -0
  16. package/dist/author/trait.js +202 -0
  17. package/dist/author/traitsHeader.d.ts +28 -0
  18. package/dist/author/traitsHeader.js +172 -0
  19. package/dist/author/utils.d.ts +10 -0
  20. package/dist/author/utils.js +41 -0
  21. package/dist/browser/Typography-CdgSBeUZ.js +8993 -0
  22. package/dist/browser/Typography-CdgSBeUZ.js.map +1 -0
  23. package/dist/browser/author/index.js +41731 -0
  24. package/dist/browser/author/index.js.map +1 -0
  25. package/dist/browser/controller/index.js +70 -0
  26. package/dist/browser/controller/index.js.map +1 -0
  27. package/dist/browser/delivery/index.js +523 -0
  28. package/dist/browser/delivery/index.js.map +1 -0
  29. package/dist/browser/multi-trait-rubric.css +2 -0
  30. package/dist/controller/defaults.d.ts +20 -0
  31. package/dist/controller/defaults.js +14 -0
  32. package/dist/controller/index.d.ts +26 -0
  33. package/dist/controller/index.js +57 -0
  34. package/dist/controller/utils.d.ts +9 -0
  35. package/dist/controller/utils.js +4 -0
  36. package/dist/delivery/index.d.ts +17 -0
  37. package/dist/delivery/index.js +37 -0
  38. package/dist/delivery/main.d.ts +15 -0
  39. package/dist/delivery/main.js +95 -0
  40. package/dist/delivery/scale.d.ts +17 -0
  41. package/dist/delivery/scale.js +175 -0
  42. package/dist/delivery/trait.d.ts +27 -0
  43. package/dist/delivery/trait.js +44 -0
  44. package/dist/index.d.ts +1 -0
  45. package/dist/index.iife.d.ts +8 -0
  46. package/dist/index.iife.js +145 -0
  47. package/dist/index.js +2 -0
  48. package/dist/runtime-support.d.ts +12 -0
  49. package/dist/runtime-support.js +12 -0
  50. package/package.json +86 -16
  51. package/CHANGELOG.json +0 -1
  52. package/CHANGELOG.md +0 -1584
  53. package/LICENSE.md +0 -5
  54. package/README.md +0 -55
  55. package/configure/CHANGELOG.json +0 -1
  56. package/configure/CHANGELOG.md +0 -1479
  57. package/configure/lib/common.js +0 -424
  58. package/configure/lib/common.js.map +0 -1
  59. package/configure/lib/defaults.js +0 -184
  60. package/configure/lib/defaults.js.map +0 -1
  61. package/configure/lib/index.js +0 -157
  62. package/configure/lib/index.js.map +0 -1
  63. package/configure/lib/main.js +0 -454
  64. package/configure/lib/main.js.map +0 -1
  65. package/configure/lib/modals.js +0 -206
  66. package/configure/lib/modals.js.map +0 -1
  67. package/configure/lib/scale.js +0 -478
  68. package/configure/lib/scale.js.map +0 -1
  69. package/configure/lib/trait.js +0 -275
  70. package/configure/lib/trait.js.map +0 -1
  71. package/configure/lib/traitsHeader.js +0 -235
  72. package/configure/lib/traitsHeader.js.map +0 -1
  73. package/configure/lib/utils.js +0 -87
  74. package/configure/lib/utils.js.map +0 -1
  75. package/configure/package.json +0 -24
  76. package/controller/CHANGELOG.json +0 -1
  77. package/controller/CHANGELOG.md +0 -911
  78. package/controller/lib/defaults.js +0 -18
  79. package/controller/lib/defaults.js.map +0 -1
  80. package/controller/lib/index.js +0 -158
  81. package/controller/lib/index.js.map +0 -1
  82. package/controller/lib/utils.js +0 -11
  83. package/controller/lib/utils.js.map +0 -1
  84. package/controller/package.json +0 -14
  85. package/docs/config-schema.json +0 -1628
  86. package/docs/config-schema.json.md +0 -1202
  87. package/docs/demo/config.js +0 -8
  88. package/docs/demo/generate.js +0 -117
  89. package/docs/demo/index.html +0 -1
  90. package/docs/demo/session.js +0 -6
  91. package/docs/pie-schema.json +0 -861
  92. package/docs/pie-schema.json.md +0 -614
  93. package/lib/index.js +0 -54
  94. package/lib/index.js.map +0 -1
  95. package/lib/main.js +0 -123
  96. package/lib/main.js.map +0 -1
  97. package/lib/scale.js +0 -248
  98. package/lib/scale.js.map +0 -1
  99. package/lib/trait.js +0 -83
  100. package/lib/trait.js.map +0 -1
@@ -0,0 +1,70 @@
1
+ //#region src/controller/defaults.ts
2
+ var e = {
3
+ addScaleEnabled: !0,
4
+ description: !1,
5
+ excludeZero: !1,
6
+ halfScoring: !1,
7
+ maxPointsEnabled: !0,
8
+ pointLabels: !0,
9
+ scales: [],
10
+ standards: !1,
11
+ visibleToStudent: !0
12
+ }, t = (e) => (e || "").replace(/(<([^>]+)>)/gi, "");
13
+ //#endregion
14
+ //#region src/controller/index.ts
15
+ function n(t = {}) {
16
+ return new Promise((n) => n({
17
+ ...e,
18
+ ...t
19
+ }));
20
+ }
21
+ var r = (t) => ({
22
+ ...e,
23
+ ...t
24
+ });
25
+ async function i(e, t, n) {
26
+ let i = r(e);
27
+ !n.role || n.role === "student" ? i.visible = i.visibleToStudent : i.visible = !0;
28
+ let { scales: a, excludeZero: o } = i || {}, s = (a || []).map((e) => ({
29
+ ...e,
30
+ excludeZero: o
31
+ }));
32
+ return {
33
+ ...i,
34
+ scales: s
35
+ };
36
+ }
37
+ var a = () => 0;
38
+ function o() {
39
+ return new Promise((e) => e({
40
+ score: 0,
41
+ empty: !0
42
+ }));
43
+ }
44
+ var s = (e, t) => new Promise((e) => {
45
+ t.mode !== "evaluate" && t.role === "instructor" ? e({ id: "1" }) : e(null);
46
+ }), c = (e, n) => {
47
+ let { scales: r, description: i = !1, pointLabels: a = !1 } = e, o = {}, s = {}, c = {};
48
+ return (r || []).forEach((e, n) => {
49
+ let { traits: r = [] } = e, { scorePointsLabels: o = [] } = e, l = {}, u = {};
50
+ a && o.forEach((e, n) => {
51
+ !e || e === "<div></div>" ? u[n] = "Points labels should not be empty." : o.slice(n + 1).some((n) => t(n) === t(e)) && (u[n] = "Points labels should be unique.");
52
+ }), Object.keys(u).length > 0 && (c[n] = u), r.forEach((e, n) => {
53
+ if (!e.name || e.name === "<div></div>" ? l[n] = { name: "Trait names should not be empty." } : r.slice(n + 1).some((n) => t(n.name) === t(e.name)) && (l[n] = { name: "Trait names should be unique." }), i && (!e.description || e.description === "<div></div>")) l[n] = {
54
+ ...l[n],
55
+ description: "Trait description should not be empty"
56
+ };
57
+ else {
58
+ let a = r.slice(n + 1).some((n) => t(n.description) === t(e.description));
59
+ i && a && (l[n] = {
60
+ ...l[n],
61
+ description: "Trait descriptions should be unique."
62
+ });
63
+ }
64
+ }), Object.keys(l).length > 0 && (s[n] = l);
65
+ }), Object.keys(s).length > 0 && (o.traitsErrors = s), Object.keys(c).length > 0 && (o.scorePointsErrors = c), o;
66
+ };
67
+ //#endregion
68
+ export { s as createCorrectResponseSession, n as createDefaultModel, a as getScore, i as model, r as normalize, o as outcome, c as validate };
69
+
70
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/controller/defaults.ts","../../../src/controller/utils.ts","../../../src/controller/index.ts"],"sourcesContent":["// @ts-nocheck\n/**\n * @synced-from pie-elements/packages/multi-trait-rubric/controller/src/defaults.js\n * @auto-generated\n *\n * This file is automatically synced from pie-elements and converted to TypeScript.\n * Manual edits will be overwritten on next sync.\n * To make changes, edit the upstream JavaScript file and run sync again.\n */\n\nexport default {\n addScaleEnabled: true,\n description: false,\n excludeZero: false,\n halfScoring: false,\n maxPointsEnabled: true,\n pointLabels: true,\n scales: [],\n standards: false,\n visibleToStudent: true,\n};\n","// @ts-nocheck\n/**\n * @synced-from pie-elements/packages/multi-trait-rubric/controller/src/utils.js\n * @auto-generated\n *\n * This file is automatically synced from pie-elements and converted to TypeScript.\n * Manual edits will be overwritten on next sync.\n * To make changes, edit the upstream JavaScript file and run sync again.\n */\n\nexport const markupToText = (s) => {\n return (s || '').replace(/(<([^>]+)>)/ig, '');\n};\n","// @ts-nocheck\n/**\n * @synced-from pie-elements/packages/multi-trait-rubric/controller/src/index.js\n * @auto-generated\n *\n * This file is automatically synced from pie-elements and converted to TypeScript.\n * Manual edits will be overwritten on next sync.\n * To make changes, edit the upstream JavaScript file and run sync again.\n */\n\nimport defaults from './defaults.js';\nimport { markupToText } from './utils.js';\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => resolve({ ...defaults, ...model }));\n}\n\nexport const normalize = (question) => ({ ...defaults, ...question });\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n */\nexport async function model(question, session, env) {\n const normalizedQuestion = normalize(question);\n\n if (!env.role || env.role === 'student') {\n normalizedQuestion.visible = normalizedQuestion.visibleToStudent;\n } else {\n normalizedQuestion.visible = true;\n }\n\n // todo update pie-ui instead of parsing this here:\n const { scales, excludeZero } = normalizedQuestion || {};\n const parsedScales = (scales || []).map((scale) => ({ ...scale, excludeZero }));\n\n return {\n ...normalizedQuestion,\n scales: parsedScales,\n };\n}\n\nexport const getScore = () => 0;\n\n/**\n * @param {Object} model - the main model\n * @param {*} session\n * @param {Object} env\n */\nexport function outcome() {\n return new Promise((resolve) => resolve({ score: 0, empty: true }));\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n resolve({ id: '1' });\n } else {\n resolve(null);\n }\n });\n};\n\n// IMPORTANT! If you make any changes to this function, please make sure you also update complex-rubric/controller/validateMultiTraitRubric function!“.\nexport const validate = (model, config) => {\n const { scales, description = false, pointLabels = false } = model;\n const errors = {};\n const traitsErrors = {};\n const scorePointsErrors = {};\n\n (scales || []).forEach((scale, scaleIndex) => {\n const { traits = [] } = scale;\n const { scorePointsLabels = [] } = scale;\n const scaleErrors = {};\n const scorePointsLabelsErrors = {};\n\n if (pointLabels) {\n scorePointsLabels.forEach((scorePointLabel, scoreIndex) => {\n if (!scorePointLabel || scorePointLabel === '<div></div>') {\n scorePointsLabelsErrors[scoreIndex] = 'Points labels should not be empty.';\n } else {\n const identicalScorePointLabel = scorePointsLabels\n .slice(scoreIndex + 1)\n .some((s) => markupToText(s) === markupToText(scorePointLabel));\n\n if (identicalScorePointLabel) {\n scorePointsLabelsErrors[scoreIndex] = 'Points labels should be unique.';\n }\n }\n });\n }\n\n if (Object.keys(scorePointsLabelsErrors).length > 0) {\n scorePointsErrors[scaleIndex] = scorePointsLabelsErrors;\n }\n\n traits.forEach((trait, traitIndex) => {\n if (!trait.name || trait.name === '<div></div>') {\n scaleErrors[traitIndex] = { name: 'Trait names should not be empty.' };\n } else {\n const identicalTraitName = traits\n .slice(traitIndex + 1)\n .some((t) => markupToText(t.name) === markupToText(trait.name));\n\n if (identicalTraitName) {\n scaleErrors[traitIndex] = { name: 'Trait names should be unique.' };\n }\n }\n if (description && (!trait.description || trait.description === '<div></div>')) {\n scaleErrors[traitIndex] = { ...scaleErrors[traitIndex], description: 'Trait description should not be empty' };\n } else {\n const identicalTraitDescr = traits\n .slice(traitIndex + 1)\n .some((t) => markupToText(t.description) === markupToText(trait.description));\n\n if (description && identicalTraitDescr) {\n scaleErrors[traitIndex] = { ...scaleErrors[traitIndex], description: 'Trait descriptions should be unique.' };\n }\n }\n });\n if (Object.keys(scaleErrors).length > 0) {\n traitsErrors[scaleIndex] = scaleErrors;\n }\n });\n\n if (Object.keys(traitsErrors).length > 0) {\n errors.traitsErrors = traitsErrors;\n }\n\n if (Object.keys(scorePointsErrors).length > 0) {\n errors.scorePointsErrors = scorePointsErrors;\n }\n\n return errors;\n};\n"],"mappings":";AAUA,IAAA,IAAe;CACb,iBAAiB;CACjB,aAAa;CACb,aAAa;CACb,aAAa;CACb,kBAAkB;CAClB,aAAa;CACb,QAAQ,CAAC;CACT,WAAW;CACX,kBAAkB;AACpB,GCVa,KAAgB,OACjB,KAAK,IAAI,QAAQ,iBAAiB,EAAE;;;ACEhD,SAAgB,EAAmB,IAAQ,CAAC,GAAG;CAC7C,OAAO,IAAI,SAAS,MAAY,EAAQ;EAAE,GAAG;EAAU,GAAG;CAAM,CAAC,CAAC;AACpE;AAEA,IAAa,KAAa,OAAc;CAAE,GAAG;CAAU,GAAG;AAAS;AAQnE,eAAsB,EAAM,GAAU,GAAS,GAAK;CAClD,IAAM,IAAqB,EAAU,CAAQ;CAE7C,AAAI,CAAC,EAAI,QAAQ,EAAI,SAAS,YAC5B,EAAmB,UAAU,EAAmB,mBAEhD,EAAmB,UAAU;CAI/B,IAAM,EAAE,WAAQ,mBAAgB,KAAsB,CAAC,GACjD,KAAgB,KAAU,CAAC,GAAG,KAAK,OAAW;EAAE,GAAG;EAAO;CAAY,EAAE;CAE9E,OAAO;EACL,GAAG;EACH,QAAQ;CACV;AACF;AAEA,IAAa,UAAiB;AAO9B,SAAgB,IAAU;CACxB,OAAO,IAAI,SAAS,MAAY,EAAQ;EAAE,OAAO;EAAG,OAAO;CAAK,CAAC,CAAC;AACpE;AAEA,IAAa,KAAgC,GAAU,MAC9C,IAAI,SAAS,MAAY;CAC9B,AAAI,EAAI,SAAS,cAAc,EAAI,SAAS,eAC1C,EAAQ,EAAE,IAAI,IAAI,CAAC,IAEnB,EAAQ,IAAI;AAEhB,CAAC,GAIU,KAAY,GAAO,MAAW;CACzC,IAAM,EAAE,WAAQ,iBAAc,IAAO,iBAAc,OAAU,GACvD,IAAS,CAAC,GACV,IAAe,CAAC,GAChB,IAAoB,CAAC;CAiE3B,QA/DC,KAAU,CAAC,GAAG,SAAS,GAAO,MAAe;EAC5C,IAAM,EAAE,YAAS,CAAC,MAAM,GAClB,EAAE,uBAAoB,CAAC,MAAM,GAC7B,IAAc,CAAC,GACf,IAA0B,CAAC;EA8CjC,AA5CI,KACF,EAAkB,SAAS,GAAiB,MAAe;GACzD,AAAI,CAAC,KAAmB,MAAoB,gBAC1C,EAAwB,KAAc,uCAEL,EAC9B,MAAM,IAAa,CAAC,EACpB,MAAM,MAAM,EAAa,CAAC,MAAM,EAAa,CAAe,CAE3D,MACF,EAAwB,KAAc;EAG5C,CAAC,GAGC,OAAO,KAAK,CAAuB,EAAE,SAAS,MAChD,EAAkB,KAAc,IAGlC,EAAO,SAAS,GAAO,MAAe;GAYpC,IAXI,CAAC,EAAM,QAAQ,EAAM,SAAS,gBAChC,EAAY,KAAc,EAAE,MAAM,mCAAmC,IAE1C,EACxB,MAAM,IAAa,CAAC,EACpB,MAAM,MAAM,EAAa,EAAE,IAAI,MAAM,EAAa,EAAM,IAAI,CAE3D,MACF,EAAY,KAAc,EAAE,MAAM,gCAAgC,IAGlE,MAAgB,CAAC,EAAM,eAAe,EAAM,gBAAgB,gBAC9D,EAAY,KAAc;IAAE,GAAG,EAAY;IAAa,aAAa;GAAwC;QACxG;IACL,IAAM,IAAsB,EACzB,MAAM,IAAa,CAAC,EACpB,MAAM,MAAM,EAAa,EAAE,WAAW,MAAM,EAAa,EAAM,WAAW,CAAC;IAE9E,AAAI,KAAe,MACjB,EAAY,KAAc;KAAE,GAAG,EAAY;KAAa,aAAa;IAAuC;GAEhH;EACF,CAAC,GACG,OAAO,KAAK,CAAW,EAAE,SAAS,MACpC,EAAa,KAAc;CAE/B,CAAC,GAEG,OAAO,KAAK,CAAY,EAAE,SAAS,MACrC,EAAO,eAAe,IAGpB,OAAO,KAAK,CAAiB,EAAE,SAAS,MAC1C,EAAO,oBAAoB,IAGtB;AACT"}
@@ -0,0 +1,523 @@
1
+ import { C as e, E as t, Et as n, H as r, P as i, _ as a, _t as o, bt as s, ft as c, ht as l, i as u, it as d, kt as f, lt as p, n as m, ot as h, r as g, t as _, tt as v, vt as y, w as b, x, yt as S } from "../Typography-CdgSBeUZ.js";
2
+ import * as C from "react";
3
+ import w from "react";
4
+ import { createRoot as T } from "react-dom/client";
5
+ import { jsx as E, jsxs as D } from "react/jsx-runtime";
6
+ //#region ../../shared/player-events/dist/index.js
7
+ var O = class e extends CustomEvent {
8
+ static {
9
+ this.TYPE = "model-set";
10
+ }
11
+ constructor(t, n, r) {
12
+ super(e.TYPE, {
13
+ bubbles: !0,
14
+ composed: !0,
15
+ detail: {
16
+ complete: n,
17
+ component: t,
18
+ hasModel: r
19
+ }
20
+ }), this.component = t, this.complete = n;
21
+ }
22
+ };
23
+ (class e extends CustomEvent {
24
+ static {
25
+ this.TYPE = "session-changed";
26
+ }
27
+ constructor(t, n) {
28
+ super(e.TYPE, {
29
+ bubbles: !0,
30
+ composed: !0,
31
+ detail: {
32
+ complete: n,
33
+ component: t
34
+ }
35
+ }), this.component = t, this.complete = n;
36
+ }
37
+ });
38
+ //#endregion
39
+ //#region src/delivery/trait.tsx
40
+ var k = /* @__PURE__ */ f(n(), 1), A = h("td")({
41
+ color: d.primaryDark(),
42
+ verticalAlign: "middle"
43
+ }), j = h("div")({
44
+ color: d.secondaryBackground(),
45
+ textAlign: "center"
46
+ }), M = (e) => {
47
+ let { trait: t, traitIndex: n, scaleIndex: r, showStandards: i, showDescription: a, scorePointsValues: o } = e, { name: s, standards: c, scorePointsDescriptors: l, description: u } = t || {};
48
+ return /* @__PURE__ */ D("tr", { children: [
49
+ /* @__PURE__ */ E(A, { children: /* @__PURE__ */ E("div", { dangerouslySetInnerHTML: { __html: s } }) }),
50
+ i ? /* @__PURE__ */ E("td", { children: /* @__PURE__ */ E("div", { dangerouslySetInnerHTML: { __html: c.join(",") } }) }) : null,
51
+ a ? /* @__PURE__ */ E("td", { children: /* @__PURE__ */ E("div", { dangerouslySetInnerHTML: { __html: u } }) }) : null,
52
+ o && o.map((e, t) => {
53
+ let n;
54
+ try {
55
+ n = l[o.length - t - 1] || "";
56
+ } catch {
57
+ n = "";
58
+ }
59
+ return /* @__PURE__ */ E("td", { children: n ? /* @__PURE__ */ E("div", { dangerouslySetInnerHTML: { __html: n } }) : /* @__PURE__ */ E(j, { dangerouslySetInnerHTML: { __html: "No Description" } }) }, `table-cell-${t}`);
60
+ })
61
+ ] }, `scale-${r}-trait-${n}`);
62
+ };
63
+ M.propTypes = {
64
+ showStandards: k.default.bool,
65
+ showDescription: k.default.bool,
66
+ scorePointsValues: k.default.arrayOf(k.default.number),
67
+ scaleIndex: k.default.number,
68
+ traitIndex: k.default.number,
69
+ trait: k.default.shape({
70
+ name: k.default.string,
71
+ standards: k.default.arrayOf(k.default.string),
72
+ scorePointsDescriptors: k.default.arrayOf(k.default.string),
73
+ description: k.default.string
74
+ })
75
+ };
76
+ //#endregion
77
+ //#region src/delivery/scale.tsx
78
+ var N = h("div")({
79
+ display: "flex",
80
+ position: "relative"
81
+ }), P = h("div")({
82
+ width: "100%",
83
+ overflow: "auto"
84
+ }), F = h("table")(({ theme: e }) => ({
85
+ borderSpacing: 0,
86
+ marginBottom: e.spacing(2),
87
+ borderRadius: "4px",
88
+ color: d.text(),
89
+ fontSize: e.typography.fontSize,
90
+ lineHeight: "16px",
91
+ overflow: "unset",
92
+ "& ul, ol": {
93
+ marginBlockStart: 0,
94
+ paddingInlineStart: e.spacing(2)
95
+ },
96
+ "& th": {
97
+ padding: e.spacing(2),
98
+ textAlign: "left",
99
+ backgroundColor: d.secondaryBackground(),
100
+ verticalAlign: "bottom"
101
+ },
102
+ "& th div": { width: "200px" },
103
+ "& td": {
104
+ width: "200px",
105
+ padding: `${e.spacing(2)} ${e.spacing(1)}`,
106
+ verticalAlign: "top"
107
+ }
108
+ })), I = h("table")({ "& td": {
109
+ border: 0,
110
+ padding: 0,
111
+ textAlign: "center",
112
+ minWidth: "200px"
113
+ } }), L = h("div")({ marginBottom: "4px" }), R = h("td")({ fontWeight: "normal" }), z = ({ show: e, onClick: t, extraStyles: n, children: r }) => /* @__PURE__ */ E("div", {
114
+ style: {
115
+ height: "calc(100% - 1px)",
116
+ top: "1px",
117
+ display: e ? "flex" : "none",
118
+ width: "50px",
119
+ margin: "auto",
120
+ position: "absolute",
121
+ alignItems: "center",
122
+ justifyContent: "center",
123
+ cursor: "pointer",
124
+ ...n
125
+ },
126
+ onClick: t,
127
+ children: r
128
+ });
129
+ z.propTypes = {
130
+ show: k.default.bool,
131
+ onClick: k.default.func,
132
+ extraStyles: k.default.object,
133
+ children: k.default.object
134
+ };
135
+ var B = class extends w.Component {
136
+ state = {};
137
+ componentDidMount() {
138
+ this.tableWrapper && this.tableWrapper.offsetWidth < this.tableWrapper.scrollWidth && this.setState({ showRight: !0 });
139
+ }
140
+ scrollLeft = () => {
141
+ this.tableWrapper.scrollLeft -= this.tableWrapper.offsetWidth / 2, this.setState({
142
+ showRight: this.tableWrapper.scrollLeft < this.tableWrapper.scrollWidth,
143
+ showLeft: this.tableWrapper.scrollLeft < this.tableWrapper.scrollWidth && this.tableWrapper.scrollLeft > 0
144
+ });
145
+ };
146
+ scrollRight = () => {
147
+ let e = this.tableWrapper.scrollLeft;
148
+ this.tableWrapper.scrollLeft += this.tableWrapper.offsetWidth / 2, this.setState({
149
+ showRight: e !== this.tableWrapper.scrollLeft && this.tableWrapper.scrollLeft < this.tableWrapper.scrollWidth,
150
+ showLeft: this.tableWrapper.scrollLeft < this.tableWrapper.scrollWidth && this.tableWrapper.scrollLeft > 0
151
+ });
152
+ };
153
+ render() {
154
+ let { showRight: e, showLeft: t } = this.state, { scale: n, scaleIndex: r, showDescription: i, showPointsLabels: a, showStandards: o, arrowsDisabled: s } = this.props, { excludeZero: c, maxPoints: l, traitLabel: u, traits: f, scorePointsLabels: p } = n || {}, h = [], _, v, y;
155
+ try {
156
+ for (let e = l; +(e >= c); --e) h.push(e);
157
+ let { traitStandards: e, traitDescriptions: t } = f.reduce((e, t) => ({
158
+ traitStandards: [...e.traitStandards, ...t.standards || []],
159
+ traitDescriptions: [...e.traitDescriptions, ...t.description || []]
160
+ }), {
161
+ traitStandards: [],
162
+ traitDescriptions: []
163
+ });
164
+ _ = i && t.length, v = a && p.length, y = o && e.length;
165
+ } catch {
166
+ _ = !1, v = !1, y = !1;
167
+ }
168
+ return /* @__PURE__ */ D(N, { children: [
169
+ /* @__PURE__ */ E(z, {
170
+ show: t && !s,
171
+ onClick: this.scrollLeft,
172
+ extraStyles: {
173
+ left: 0,
174
+ background: `linear-gradient(to right, white, ${d.background()})`
175
+ },
176
+ children: /* @__PURE__ */ E(g, {})
177
+ }),
178
+ /* @__PURE__ */ D(P, {
179
+ ref: (e) => {
180
+ this.tableWrapper = e;
181
+ },
182
+ onScroll: () => {
183
+ this.setState({
184
+ showRight: this.tableWrapper.scrollLeft + this.tableWrapper.offsetWidth < this.tableWrapper.scrollWidth - 5 && this.tableWrapper.scrollLeft < this.tableWrapper.scrollWidth,
185
+ showLeft: this.tableWrapper.scrollLeft < this.tableWrapper.scrollWidth && this.tableWrapper.scrollLeft > 0
186
+ });
187
+ },
188
+ children: [s && (e || t) ? /* @__PURE__ */ E("div", { children: "The item is too large to fit in print mode." }) : null, /* @__PURE__ */ D(F, { children: [/* @__PURE__ */ E("thead", { children: /* @__PURE__ */ D("tr", { children: [
189
+ /* @__PURE__ */ E("th", { children: /* @__PURE__ */ E("div", { dangerouslySetInnerHTML: { __html: u } }) }),
190
+ y ? /* @__PURE__ */ E("th", { children: /* @__PURE__ */ E("div", { children: "Standard(s)" }) }) : null,
191
+ _ ? /* @__PURE__ */ E("th", { children: /* @__PURE__ */ E("div", { children: "Description" }) }) : null,
192
+ h && h.map((e, t) => {
193
+ let n = "";
194
+ try {
195
+ n = p[h.length - t - 1] || "";
196
+ } catch {
197
+ n = "";
198
+ }
199
+ return /* @__PURE__ */ E("th", { children: /* @__PURE__ */ E(I, { children: /* @__PURE__ */ D("thead", { children: [v ? /* @__PURE__ */ E("tr", { children: /* @__PURE__ */ E("td", { children: /* @__PURE__ */ E(L, { dangerouslySetInnerHTML: { __html: n } }) }) }) : null, /* @__PURE__ */ E("tr", { children: /* @__PURE__ */ E(R, { children: e === 1 ? `${e} point` : `${e} points` }) })] }) }) }, `table-header-${t}`);
200
+ })
201
+ ] }) }), /* @__PURE__ */ E("tbody", { children: f && f.map((e, t) => /* @__PURE__ */ E(M, {
202
+ trait: e,
203
+ traitIndex: t,
204
+ showDescription: !!_,
205
+ showStandards: !!y,
206
+ scaleIndex: r,
207
+ scorePointsValues: h,
208
+ excludeZero: c
209
+ }, `trait_${r}_${t}`)) })] }, `scale-${r}`)]
210
+ }),
211
+ /* @__PURE__ */ E(z, {
212
+ show: e && !s,
213
+ onClick: this.scrollRight,
214
+ extraStyles: {
215
+ right: 0,
216
+ background: `linear-gradient(to left, white, ${d.background()})`
217
+ },
218
+ children: /* @__PURE__ */ E(m, {})
219
+ })
220
+ ] });
221
+ }
222
+ };
223
+ B.propTypes = {
224
+ scaleIndex: k.default.number,
225
+ scale: k.default.shape({
226
+ excludeZero: k.default.bool,
227
+ maxPoints: k.default.number,
228
+ scorePointsLabels: k.default.arrayOf(k.default.string),
229
+ traitLabel: k.default.string,
230
+ traits: k.default.arrayOf(k.default.shape({
231
+ name: k.default.string,
232
+ standards: k.default.arrayOf(k.default.string),
233
+ scorePointsDescriptors: k.default.arrayOf(k.default.string),
234
+ description: k.default.string
235
+ }))
236
+ }),
237
+ showPointsLabels: k.default.bool,
238
+ showDescription: k.default.bool,
239
+ showStandards: k.default.bool,
240
+ arrowsDisabled: k.default.bool
241
+ };
242
+ //#endregion
243
+ //#region ../../../node_modules/.bun/@mui+material@7.3.11+eb26afe407ed7030/node_modules/@mui/material/esm/Link/linkClasses.js
244
+ function V(e) {
245
+ return y("MuiLink", e);
246
+ }
247
+ var H = o("MuiLink", [
248
+ "root",
249
+ "underlineNone",
250
+ "underlineHover",
251
+ "underlineAlways",
252
+ "button",
253
+ "focusVisible"
254
+ ]), U = ({ theme: e, ownerState: t }) => {
255
+ let n = t.color;
256
+ if ("colorSpace" in e && e.colorSpace) {
257
+ let r = s(e, `palette.${n}.main`) || s(e, `palette.${n}`) || t.color;
258
+ return e.alpha(r, .4);
259
+ }
260
+ let r = s(e, `palette.${n}.main`, !1) || s(e, `palette.${n}`, !1) || t.color, i = s(e, `palette.${n}.mainChannel`) || s(e, `palette.${n}Channel`);
261
+ return "vars" in e && i ? `rgba(${i} / 0.4)` : l(r, .4);
262
+ }, W = {
263
+ primary: !0,
264
+ secondary: !0,
265
+ error: !0,
266
+ info: !0,
267
+ success: !0,
268
+ warning: !0,
269
+ textPrimary: !0,
270
+ textSecondary: !0,
271
+ textDisabled: !0
272
+ }, G = (e) => {
273
+ let { classes: t, component: n, focusVisible: r, underline: a } = e;
274
+ return c({ root: [
275
+ "root",
276
+ `underline${i(a)}`,
277
+ n === "button" && "button",
278
+ r && "focusVisible"
279
+ ] }, V, t);
280
+ }, K = h(_, {
281
+ name: "MuiLink",
282
+ slot: "Root",
283
+ overridesResolver: (e, t) => {
284
+ let { ownerState: n } = e;
285
+ return [
286
+ t.root,
287
+ t[`underline${i(n.underline)}`],
288
+ n.component === "button" && t.button
289
+ ];
290
+ }
291
+ })(r(({ theme: e }) => ({ variants: [
292
+ {
293
+ props: { underline: "none" },
294
+ style: { textDecoration: "none" }
295
+ },
296
+ {
297
+ props: { underline: "hover" },
298
+ style: {
299
+ textDecoration: "none",
300
+ "&:hover": { textDecoration: "underline" }
301
+ }
302
+ },
303
+ {
304
+ props: { underline: "always" },
305
+ style: {
306
+ textDecoration: "underline",
307
+ "&:hover": { textDecorationColor: "inherit" }
308
+ }
309
+ },
310
+ {
311
+ props: ({ underline: e, ownerState: t }) => e === "always" && t.color !== "inherit",
312
+ style: { textDecorationColor: "var(--Link-underlineColor)" }
313
+ },
314
+ {
315
+ props: ({ underline: e, ownerState: t }) => e === "always" && t.color === "inherit",
316
+ style: e.colorSpace ? { textDecorationColor: e.alpha("currentColor", .4) } : null
317
+ },
318
+ ...Object.entries(e.palette).filter(x()).map(([t]) => ({
319
+ props: {
320
+ underline: "always",
321
+ color: t
322
+ },
323
+ style: { "--Link-underlineColor": e.alpha((e.vars || e).palette[t].main, .4) }
324
+ })),
325
+ {
326
+ props: {
327
+ underline: "always",
328
+ color: "textPrimary"
329
+ },
330
+ style: { "--Link-underlineColor": e.alpha((e.vars || e).palette.text.primary, .4) }
331
+ },
332
+ {
333
+ props: {
334
+ underline: "always",
335
+ color: "textSecondary"
336
+ },
337
+ style: { "--Link-underlineColor": e.alpha((e.vars || e).palette.text.secondary, .4) }
338
+ },
339
+ {
340
+ props: {
341
+ underline: "always",
342
+ color: "textDisabled"
343
+ },
344
+ style: { "--Link-underlineColor": (e.vars || e).palette.text.disabled }
345
+ },
346
+ {
347
+ props: { component: "button" },
348
+ style: {
349
+ position: "relative",
350
+ WebkitTapHighlightColor: "transparent",
351
+ backgroundColor: "transparent",
352
+ outline: 0,
353
+ border: 0,
354
+ margin: 0,
355
+ borderRadius: 0,
356
+ padding: 0,
357
+ cursor: "pointer",
358
+ userSelect: "none",
359
+ verticalAlign: "middle",
360
+ MozAppearance: "none",
361
+ WebkitAppearance: "none",
362
+ "&::-moz-focus-inner": { borderStyle: "none" },
363
+ [`&.${H.focusVisible}`]: { outline: "auto" }
364
+ }
365
+ }
366
+ ] }))), q = /*#__PURE__*/ C.forwardRef(function(t, n) {
367
+ let r = v({
368
+ props: t,
369
+ name: "MuiLink"
370
+ }), i = p(), { className: a, color: o = "primary", component: s = "a", onBlur: c, onFocus: l, TypographyClasses: u, underline: d = "always", variant: f = "inherit", sx: m, ...h } = r, [g, _] = C.useState(!1), y = (t) => {
371
+ e(t.target) || _(!1), c && c(t);
372
+ }, b = (t) => {
373
+ e(t.target) && _(!0), l && l(t);
374
+ }, x = {
375
+ ...r,
376
+ color: o,
377
+ component: s,
378
+ focusVisible: g,
379
+ underline: d,
380
+ variant: f
381
+ };
382
+ return /*#__PURE__*/ E(K, {
383
+ color: o,
384
+ className: S(G(x).root, a),
385
+ classes: u,
386
+ component: s,
387
+ onBlur: y,
388
+ onFocus: b,
389
+ ref: n,
390
+ ownerState: x,
391
+ variant: f,
392
+ ...h,
393
+ sx: [...W[o] === void 0 ? [{ color: o }] : [], ...Array.isArray(m) ? m : [m]],
394
+ style: {
395
+ ...h.style,
396
+ ...d === "always" && o !== "inherit" && !W[o] && { "--Link-underlineColor": U({
397
+ theme: i,
398
+ ownerState: x
399
+ }) }
400
+ }
401
+ });
402
+ });
403
+ //#endregion
404
+ //#region src/delivery/main.tsx
405
+ function J(e) {
406
+ return typeof e == "function" || typeof e == "object" && !!e && typeof e.$$typeof == "symbol";
407
+ }
408
+ function Y(e, t) {
409
+ return !e || J(e) ? e : J(e.default) ? e.default : t && J(e[t]) ? e[t] : t && J(e[t]?.default) ? e[t].default : e;
410
+ }
411
+ var X = Y(a, "UiLayout") || Y(ee.UiLayout, "UiLayout"), Z = u, Q = Z.default, ee = Q && typeof Q == "object" ? Q : Z, $ = class extends w.Component {
412
+ constructor(e) {
413
+ super(e), this.state = {
414
+ rubricOpen: !1,
415
+ linkPrefix: "Show"
416
+ }, this.toggleRubric = this.toggleRubric.bind(this);
417
+ }
418
+ toggleRubric() {
419
+ this.setState({ rubricOpen: !this.state.rubricOpen }), this.setState({ linkPrefix: this.state.rubricOpen ? "Show" : "Hide" });
420
+ }
421
+ render() {
422
+ let { model: e } = this.props, { animationsDisabled: n } = this.props, { extraCSSRules: r, halfScoring: i, scales: a, visible: o, pointLabels: s, description: c, standards: l, arrowsDisabled: u } = e || {};
423
+ if (n ||= e.animationsDisabled, !a || !o) return null;
424
+ let f = /* @__PURE__ */ D(X, {
425
+ extraCSSRules: r,
426
+ style: {
427
+ fontFamily: "Cerebri Sans",
428
+ color: d.text(),
429
+ backgroundColor: d.background()
430
+ },
431
+ children: [i ? /* @__PURE__ */ E("div", {
432
+ style: { marginBottom: "16px" },
433
+ children: "* Half-point or in-between scores are permitted under this rubric."
434
+ }) : null, a.map((e, t) => /* @__PURE__ */ E(B, {
435
+ scale: e,
436
+ scaleIndex: t,
437
+ showPointsLabels: s,
438
+ showDescription: c,
439
+ showStandards: l,
440
+ arrowsDisabled: u
441
+ }, `scale_${t}`))]
442
+ });
443
+ return n ? f : /* @__PURE__ */ D(X, {
444
+ extraCSSRules: r,
445
+ style: {
446
+ color: d.text(),
447
+ backgroundColor: d.background()
448
+ },
449
+ children: [/* @__PURE__ */ D(q, {
450
+ style: { backgroundColor: d.background() },
451
+ href: this.dudUrl,
452
+ onClick: this.toggleRubric,
453
+ children: [this.state.linkPrefix, " Rubric"]
454
+ }), /* @__PURE__ */ E(t, {
455
+ style: { marginTop: "16px" },
456
+ in: this.state.rubricOpen,
457
+ timeout: {
458
+ enter: 225,
459
+ exit: 195
460
+ },
461
+ children: f
462
+ })]
463
+ });
464
+ }
465
+ };
466
+ $.propTypes = {
467
+ model: k.default.shape({
468
+ halfScoring: k.default.bool,
469
+ scales: k.default.arrayOf(k.default.shape({
470
+ excludeZero: k.default.bool,
471
+ maxPoints: k.default.number,
472
+ scorePointsLabels: k.default.arrayOf(k.default.string),
473
+ traitLabel: k.default.string,
474
+ traits: k.default.arrayOf(k.default.shape({
475
+ name: k.default.string,
476
+ description: k.default.string,
477
+ scorePointsDescriptors: k.default.arrayOf(k.default.string),
478
+ standards: k.default.arrayOf(k.default.string)
479
+ }))
480
+ })),
481
+ visible: k.default.bool,
482
+ pointLabels: k.default.bool,
483
+ description: k.default.bool,
484
+ standards: k.default.bool,
485
+ animationsDisabled: k.default.bool
486
+ }),
487
+ animationsDisabled: k.default.bool
488
+ };
489
+ //#endregion
490
+ //#region src/delivery/index.ts
491
+ var te = class extends HTMLElement {
492
+ constructor() {
493
+ super(), this._model = {}, this._session = null, this._root = null;
494
+ }
495
+ set model(e) {
496
+ this._model = e, this.dispatchEvent(new O(this.tagName.toLowerCase(), this._session, !!this._model)), this._render();
497
+ }
498
+ set session(e) {
499
+ this._session = e;
500
+ }
501
+ get session() {
502
+ return this._session;
503
+ }
504
+ connectedCallback() {
505
+ this._render();
506
+ }
507
+ _render() {
508
+ let e = w.createElement($, {
509
+ model: this._model,
510
+ session: this._session
511
+ });
512
+ this._root ||= T(this), this._root.render(e), queueMicrotask(() => {
513
+ b(this);
514
+ });
515
+ }
516
+ disconnectedCallback() {
517
+ this._root && this._root.unmount();
518
+ }
519
+ };
520
+ //#endregion
521
+ export { te as default };
522
+
523
+ //# sourceMappingURL=index.js.map