uni-answer-sheet 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,31 +1,31 @@
1
1
  var Ut = Object.defineProperty;
2
- var Ft = (t, e, r) => e in t ? Ut(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r;
3
- var wt = (t, e, r) => Ft(t, typeof e != "symbol" ? e + "" : e, r);
2
+ var Ft = (t, e, o) => e in t ? Ut(t, e, { enumerable: !0, configurable: !0, writable: !0, value: o }) : t[e] = o;
3
+ var wt = (t, e, o) => Ft(t, typeof e != "symbol" ? e + "" : e, o);
4
4
  const Kt = ["pagination", "content-identity", "choice-fill", "answer-regions", "html-codec", "status"];
5
5
  function vt(t) {
6
6
  const e = t.filter((n) => n?.kind === "answer-sheet-editor");
7
7
  if (e.length !== 1) throw new Error("请显式注册一个富文本插件:plugins: [createEditorPlugin()]");
8
- const r = e[0];
9
- if (r.apiVersion !== 1 || r.documentVersion !== 1 || Kt.some((n) => !r.capabilities?.includes(n)) || typeof r.prepare != "function" || typeof r.create != "function" || typeof r.validateDocument != "function" || typeof r.html?.parse != "function" || typeof r.html?.serialize != "function") throw new Error("富文本插件协议不兼容,需要支持制卡协议 v1 的 uni-editor/plugin");
10
- return r;
8
+ const o = e[0];
9
+ if (o.apiVersion !== 1 || o.documentVersion !== 1 || Kt.some((n) => !o.capabilities?.includes(n)) || typeof o.prepare != "function" || typeof o.create != "function" || typeof o.validateDocument != "function" || typeof o.html?.parse != "function" || typeof o.html?.serialize != "function") throw new Error("富文本插件协议不兼容,需要支持制卡协议 v1 的 uni-editor/plugin");
10
+ return o;
11
11
  }
12
12
  function xt(t) {
13
- const e = [], r = (n) => {
13
+ const e = [], o = (n) => {
14
14
  if (n.type === "choiceGroup") {
15
15
  typeof n.attrs?.id == "string" && e.push({
16
16
  id: n.attrs.id,
17
17
  label: n.attrs.label || String(e.length + 1),
18
- options: (n.content || []).map((o, s) => ({ id: o.attrs?.id, label: String.fromCharCode(65 + s) })).filter((o) => typeof o.id == "string")
18
+ options: (n.content || []).map((r, s) => ({ id: r.attrs?.id, label: String.fromCharCode(65 + s) })).filter((r) => typeof r.id == "string")
19
19
  });
20
20
  return;
21
21
  }
22
- n.content?.forEach(r);
22
+ n.content?.forEach(o);
23
23
  };
24
- return r(t.content), e;
24
+ return o(t.content), e;
25
25
  }
26
26
  class mt extends Error {
27
- constructor(e, r) {
28
- super(r), this.path = e;
27
+ constructor(e, o) {
28
+ super(o), this.path = e;
29
29
  }
30
30
  }
31
31
  const B = (t, e) => {
@@ -51,121 +51,121 @@ const B = (t, e) => {
51
51
  J: ["语文", "数学", "英语", "物理", "化学", "生物", "地理", "历史", "道德与法治", "信息科技"],
52
52
  S: ["语文", "数学", "英语", "物理", "化学", "生物", "政治", "历史", "地理", "信息技术", "日语"]
53
53
  }, Wt = ["一年级", "二年级", "三年级", "四年级", "五年级", "六年级", "初一", "初二", "初三", "高一", "高二", "高三"], Vt = Wt.map((t, e) => {
54
- const r = e < 6 ? "P" : e < 9 ? "J" : "S";
55
- return { label: t, value: `${r}0${e < 6 ? e + 1 : (e - 6) % 3 + 1}`, classify: r };
54
+ const o = e < 6 ? "P" : e < 9 ? "J" : "S";
55
+ return { label: t, value: `${o}0${e < 6 ? e + 1 : (e - 6) % 3 + 1}`, classify: o };
56
56
  }), z = (t, e) => typeof t == "string" && t.trim() ? t.trim() : B(e, "字典编码和名称必须是非空字符串"), tt = (t, e) => t && typeof t == "object" && !Array.isArray(t) ? t : B(e, "字典必须是对象"), $t = (t) => t.classify || (/^[PJS]/.test(t.value) ? t.value[0] : void 0);
57
57
  function Lt(t = {}) {
58
- const e = tt(t, "dictionaries"), r = (l, u) => {
58
+ const e = tt(t, "dictionaries"), o = (l, u) => {
59
59
  if (!Array.isArray(l)) return B(u, "字典选项必须是数组");
60
60
  const g = /* @__PURE__ */ new Set();
61
61
  return l.map((A, C) => {
62
- const x = tt(A, `${u}.${C}`), M = z(x.value, `${u}.${C}.value`), w = z(x.label, `${u}.${C}.label`);
63
- return g.has(M) && B(`${u}.${C}.value`, "字典编码重复"), g.add(M), { ...x, value: M, label: w };
62
+ const M = tt(A, `${u}.${C}`), $ = z(M.value, `${u}.${C}.value`), b = z(M.label, `${u}.${C}.label`);
63
+ return g.has($) && B(`${u}.${C}.value`, "字典编码重复"), g.add($), { ...M, value: $, label: b };
64
64
  });
65
- }, n = r(e.grades === void 0 ? Vt : e.grades, "dictionaries.grades").map((l, u) => (l.classify !== void 0 && !["P", "J", "S"].includes(String(l.classify)) && B(`dictionaries.grades.${u}.classify`, "学段为 P、J 或 S"), { value: l.value, label: l.label, classify: l.classify })), o = e.gradeCourseMap === void 0 ? void 0 : tt(e.gradeCourseMap, "dictionaries.gradeCourseMap"), s = e.courseCodeToSubjectCode === void 0 ? {} : tt(e.courseCodeToSubjectCode, "dictionaries.courseCodeToSubjectCode");
65
+ }, n = o(e.grades === void 0 ? Vt : e.grades, "dictionaries.grades").map((l, u) => (l.classify !== void 0 && !["P", "J", "S"].includes(String(l.classify)) && B(`dictionaries.grades.${u}.classify`, "学段为 P、J 或 S"), { value: l.value, label: l.label, classify: l.classify })), r = e.gradeCourseMap === void 0 ? void 0 : tt(e.gradeCourseMap, "dictionaries.gradeCourseMap"), s = e.courseCodeToSubjectCode === void 0 ? {} : tt(e.courseCodeToSubjectCode, "dictionaries.courseCodeToSubjectCode");
66
66
  for (const [l, u] of Object.entries(s)) z(u, `dictionaries.courseCodeToSubjectCode.${l}`);
67
67
  const c = /* @__PURE__ */ new Map(), i = Object.fromEntries(n.map((l) => {
68
- const u = $t(l), g = (u ? zt[u] : []).map((x) => ({ value: ot[x], label: x, subjectCode: ot[x] })), A = `dictionaries.gradeCourseMap.${l.value}`, C = r(o ? o[l.value] ?? [] : g, A).map((x, M) => {
69
- const w = s[x.value];
70
- x.subjectCode !== void 0 && w !== void 0 && x.subjectCode !== w && B(`${A}.${M}.subjectCode`, "课程对应的学科编码冲突");
71
- const O = z(x.subjectCode ?? w ?? (Object.values(ot).includes(x.value) ? x.value : void 0), `${A}.${M}.subjectCode`);
72
- return c.has(x.value) && c.get(x.value) !== O && B(`${A}.${M}.subjectCode`, "同一课程不能对应不同学科"), c.set(x.value, O), x.custom !== void 0 && typeof x.custom != "boolean" && B(`${A}.${M}.custom`, "custom 必须是布尔值"), { value: x.value, label: x.label, subjectCode: O, ...x.custom === void 0 ? {} : { custom: x.custom } };
68
+ const u = $t(l), g = (u ? zt[u] : []).map((M) => ({ value: ot[M], label: M, subjectCode: ot[M] })), A = `dictionaries.gradeCourseMap.${l.value}`, C = o(r ? r[l.value] ?? [] : g, A).map((M, $) => {
69
+ const b = s[M.value];
70
+ M.subjectCode !== void 0 && b !== void 0 && M.subjectCode !== b && B(`${A}.${$}.subjectCode`, "课程对应的学科编码冲突");
71
+ const O = z(M.subjectCode ?? b ?? (Object.values(ot).includes(M.value) ? M.value : void 0), `${A}.${$}.subjectCode`);
72
+ return c.has(M.value) && c.get(M.value) !== O && B(`${A}.${$}.subjectCode`, "同一课程不能对应不同学科"), c.set(M.value, O), M.custom !== void 0 && typeof M.custom != "boolean" && B(`${A}.${$}.custom`, "custom 必须是布尔值"), { value: M.value, label: M.label, subjectCode: O, ...M.custom === void 0 ? {} : { custom: M.custom } };
73
73
  });
74
74
  return [l.value, C];
75
- })), a = n.filter((l) => i[l.value].length), y = e.defaultGradeCode === void 0 ? void 0 : z(e.defaultGradeCode, "dictionaries.defaultGradeCode"), T = a.find((l) => l.value === y)?.value || a[0]?.value || "", m = e.defaultCourseCode === void 0 ? void 0 : z(e.defaultCourseCode, "dictionaries.defaultCourseCode"), f = i[T] || [], p = f.find((l) => l.value === m)?.value || f[0]?.value || "";
76
- return { grades: a, gradeCourseMap: i, defaultGradeCode: T, defaultCourseCode: p };
75
+ })), a = n.filter((l) => i[l.value].length), y = e.defaultGradeCode === void 0 ? void 0 : z(e.defaultGradeCode, "dictionaries.defaultGradeCode"), T = a.find((l) => l.value === y)?.value || a[0]?.value || "", m = e.defaultCourseCode === void 0 ? void 0 : z(e.defaultCourseCode, "dictionaries.defaultCourseCode"), f = i[T] || [], h = f.find((l) => l.value === m)?.value || f[0]?.value || "";
76
+ return { grades: a, gradeCourseMap: i, defaultGradeCode: T, defaultCourseCode: h };
77
77
  }
78
- function dt(t, e, r) {
78
+ function dt(t, e, o) {
79
79
  const n = t.grades.find((s) => s.value === e);
80
80
  if (!n) return B("initialization.gradeCode", "年级不在可用字典中");
81
- const o = t.gradeCourseMap[e]?.find((s) => s.value === r);
82
- return o ? { grade: n.label, subject: o.label, gradeCode: e, courseCode: r, subjectCode: o.subjectCode, phaseCode: $t(n) } : B("initialization.courseCode", "当前年级没有此课程");
81
+ const r = t.gradeCourseMap[e]?.find((s) => s.value === o);
82
+ return r ? { grade: n.label, subject: r.label, gradeCode: e, courseCode: o, subjectCode: r.subjectCode, phaseCode: $t(n) } : B("initialization.courseCode", "当前年级没有此课程");
83
83
  }
84
- function He(t, e = {}) {
85
- const n = t.grades.find((c) => c.value === e.gradeCode || !e.gradeCode && c.label === e.grade)?.value || t.defaultGradeCode, o = t.gradeCourseMap[n] || [], s = o.find((c) => c.value === e.courseCode || !e.courseCode && c.label === e.subject)?.value || (n === t.defaultGradeCode ? t.defaultCourseCode : o[0]?.value) || "";
84
+ function Be(t, e = {}) {
85
+ const n = t.grades.find((c) => c.value === e.gradeCode || !e.gradeCode && c.label === e.grade)?.value || t.defaultGradeCode, r = t.gradeCourseMap[n] || [], s = r.find((c) => c.value === e.courseCode || !e.courseCode && c.label === e.subject)?.value || (n === t.defaultGradeCode ? t.defaultCourseCode : r[0]?.value) || "";
86
86
  return n && s ? dt(t, n, s) : { grade: "", subject: "", gradeCode: "", courseCode: "" };
87
87
  }
88
88
  function _t(t) {
89
89
  return t?.subjectCode || ot[t?.subject || ""];
90
90
  }
91
- const W = { questions: 200, options: 12, score: 15 }, Be = (t) => t.multiple ? t.indefinite ? "indefinite" : "multiple" : "single", v = (t) => Number.isFinite(t) && Number.isInteger(t * 2), ht = (t) => !!(_t(t) === "MATHS" && (t?.phaseCode ? t.phaseCode === "S" : t?.gradeCode ? t.gradeCode.startsWith("S") : /^高[一二三]/.test(t?.grade || "")));
91
+ const W = { questions: 200, options: 12, score: 15 }, je = (t) => t.multiple ? t.indefinite ? "indefinite" : "multiple" : "single", v = (t) => Number.isFinite(t) && Number.isInteger(t * 2), ht = (t) => !!(_t(t) === "MATHS" && (t?.phaseCode ? t.phaseCode === "S" : t?.gradeCode ? t.gradeCode.startsWith("S") : /^高[一二三]/.test(t?.grade || "")));
92
92
  function Qt(t) {
93
- const e = typeof t.score == "number" && v(t.score) && t.score >= 0.5 && t.score <= W.score ? t.score : null, r = [...new Set(t.correctIds)].filter((n) => t.options.some((o) => o.id === n));
93
+ const e = typeof t.score == "number" && v(t.score) && t.score >= 0.5 && t.score <= W.score ? t.score : null, o = [...new Set(t.correctIds)].filter((n) => t.options.some((r) => r.id === n));
94
94
  return {
95
95
  ...t,
96
96
  indefinite: !!(t.multiple && t.indefinite),
97
97
  score: e,
98
98
  scoreType: t.multiple && t.scoreType === "ITEM_SCORE" ? "ITEM_SCORE" : "LESS_SCORE",
99
99
  lessScore: t.multiple && e !== null && v(t.lessScore ?? 0) ? Math.max(0, Math.min(e, t.lessScore ?? 0)) : 0,
100
- correctIds: t.multiple ? r : r.slice(0, 1)
100
+ correctIds: t.multiple ? o : o.slice(0, 1)
101
101
  };
102
102
  }
103
- function Tt(t, e, r) {
103
+ function Tt(t, e, o) {
104
104
  let n = { ...t };
105
105
  if (e.kind !== void 0) {
106
- const o = e.kind !== "single";
107
- o && !t.multiple && (n.scoreType = ht(r) ? "ITEM_SCORE" : "LESS_SCORE", typeof n.score != "number" && ht(r) && (n.score = 6)), n.multiple = o, n.indefinite = e.kind === "indefinite";
106
+ const r = e.kind !== "single";
107
+ r && !t.multiple && (n.scoreType = ht(o) ? "ITEM_SCORE" : "LESS_SCORE", typeof n.score != "number" && ht(o) && (n.score = 6)), n.multiple = r, n.indefinite = e.kind === "indefinite";
108
108
  }
109
109
  if (e.optionCount !== void 0) {
110
- const o = Math.max(2, Math.min(W.options, Math.round(e.optionCount)));
111
- n.options = Array.from({ length: o }, (s, c) => t.options[c] || { id: crypto.randomUUID(), label: String.fromCharCode(65 + c) });
110
+ const r = Math.max(2, Math.min(W.options, Math.round(e.optionCount)));
111
+ n.options = Array.from({ length: r }, (s, c) => t.options[c] || { id: crypto.randomUUID(), label: String.fromCharCode(65 + c) });
112
112
  }
113
113
  return e.score !== void 0 && (n.score = e.score), e.scoreType !== void 0 && (n.scoreType = e.scoreType), e.lessScore !== void 0 && (n.lessScore = e.lessScore), Qt(n);
114
114
  }
115
115
  function Dt(t) {
116
116
  return typeof t.score == "number" && (!v(t.score) || t.score < 0.5 || t.score > W.score) ? "每题分值须为 0.5–15 分,按 0.5 分递增" : t.multiple && t.scoreType === "LESS_SCORE" && typeof t.score == "number" && (!v(t.lessScore ?? 0) || (t.lessScore ?? 0) < 0 || (t.lessScore ?? 0) > t.score) ? "少选得分须为 0.5 的倍数,且不能超过本题分值" : t.multiple && t.scoreType === "ITEM_SCORE" && typeof t.score == "number" && t.correctIds.length && !v(t.score / t.correctIds.length) ? "答案个数与分值不匹配,每个正确选项的得分须为 0.5 的倍数" : null;
117
117
  }
118
- function je(t) {
118
+ function Ge(t) {
119
119
  return t.multiple && t.scoreType === "ITEM_SCORE" && typeof t.score == "number" && t.correctIds.length && !Dt(t) ? t.score / t.correctIds.length : null;
120
120
  }
121
- function Ge(t) {
122
- const e = t.map((o) => Number(o.label)).filter((o) => Number.isSafeInteger(o) && o > 0 && o < 1e5);
123
- let r = String(Math.max(0, ...e) + 1);
124
- const n = new Set(t.map((o) => o.label));
125
- for (; n.has(r); ) r = String(Number(r) + 1);
126
- return r;
127
- }
128
- function Ue(t, e) {
129
- const r = new Map(t.options.map((n) => [n.id, crypto.randomUUID()]));
121
+ function Ue(t) {
122
+ const e = t.map((r) => Number(r.label)).filter((r) => Number.isSafeInteger(r) && r > 0 && r < 1e5);
123
+ let o = String(Math.max(0, ...e) + 1);
124
+ const n = new Set(t.map((r) => r.label));
125
+ for (; n.has(o); ) o = String(Number(o) + 1);
126
+ return o;
127
+ }
128
+ function Fe(t, e) {
129
+ const o = new Map(t.options.map((n) => [n.id, crypto.randomUUID()]));
130
130
  return {
131
131
  ...t,
132
132
  id: crypto.randomUUID(),
133
133
  label: e,
134
134
  breakBefore: !1,
135
135
  contentTarget: null,
136
- options: t.options.map((n) => ({ ...n, id: r.get(n.id) })),
137
- correctIds: t.correctIds.map((n) => r.get(n)).filter(Boolean)
136
+ options: t.options.map((n) => ({ ...n, id: o.get(n.id) })),
137
+ correctIds: t.correctIds.map((n) => o.get(n)).filter(Boolean)
138
138
  };
139
139
  }
140
- function Jt(t, e, r) {
141
- return r.trim() ? t.some((n) => n.id !== e && n.label.trim() === r.trim()) ? "题组内题号不能重复" : null : "题号不能为空";
140
+ function Jt(t, e, o) {
141
+ return o.trim() ? t.some((n) => n.id !== e && n.label.trim() === o.trim()) ? "题组内题号不能重复" : null : "题号不能为空";
142
142
  }
143
- function Fe(t, e, r, n) {
144
- const o = t.questions.filter((a) => e.includes(a.id));
145
- if (!o.length) return { error: "请选择要修改的题目" };
143
+ function Ke(t, e, o, n) {
144
+ const r = t.questions.filter((a) => e.includes(a.id));
145
+ if (!r.length) return { error: "请选择要修改的题目" };
146
146
  let s;
147
- if (r.type === "settings") {
148
- if (!Object.keys(r.patch).length) return { error: "请设置需要修改的属性" };
149
- const { optionCount: a, score: y, lessScore: T } = r.patch;
147
+ if (o.type === "settings") {
148
+ if (!Object.keys(o.patch).length) return { error: "请设置需要修改的属性" };
149
+ const { optionCount: a, score: y, lessScore: T } = o.patch;
150
150
  if (a !== void 0 && (!Number.isInteger(a) || a < 2 || a > W.options)) return { error: "选项个数须为 2–12 的整数" };
151
151
  if (typeof y == "number" && (!v(y) || y < 0.5 || y > W.score)) return { error: "每题分值须为 0.5–15 分,按 0.5 分递增" };
152
152
  if (T !== void 0 && (!v(T) || T < 0)) return { error: "少选得分须为非负的 0.5 倍数" };
153
- if (s = o.map((m) => Tt(m, r.patch, n)), T !== void 0 && s.some((m) => m.multiple && m.scoreType !== "ITEM_SCORE" && T > (m.score ?? 0))) return { error: "少选得分不能超过所选题目的分值" };
154
- } else if (r.type === "numbering") {
155
- if (!Number.isInteger(r.start) || r.start < 1 || r.start + o.length - 1 > 1e3) return { error: "连续题号须在 1–1000 内" };
156
- s = o.map((a, y) => ({ ...a, label: String(r.start + y) }));
157
- } else if (r.type === "average") {
158
- const a = r.total / o.length;
153
+ if (s = r.map((m) => Tt(m, o.patch, n)), T !== void 0 && s.some((m) => m.multiple && m.scoreType !== "ITEM_SCORE" && T > (m.score ?? 0))) return { error: "少选得分不能超过所选题目的分值" };
154
+ } else if (o.type === "numbering") {
155
+ if (!Number.isInteger(o.start) || o.start < 1 || o.start + r.length - 1 > 1e3) return { error: "连续题号须在 1–1000 内" };
156
+ s = r.map((a, y) => ({ ...a, label: String(o.start + y) }));
157
+ } else if (o.type === "average") {
158
+ const a = o.total / r.length;
159
159
  if (!v(a) || a < 0.5 || a > W.score) return { error: "总分无法平均分配,每题须为 0.5–15 分且为 0.5 的倍数" };
160
- s = o.map((y) => Tt(y, { score: a }));
160
+ s = r.map((y) => Tt(y, { score: a }));
161
161
  } else {
162
- const a = r.text.toUpperCase().trim().split(/[\s,,;;]+/).filter(Boolean);
163
- if (a.length !== o.length) return { error: `需要 ${o.length} 组答案,当前为 ${a.length} 组` };
162
+ const a = o.text.toUpperCase().trim().split(/[\s,,;;]+/).filter(Boolean);
163
+ if (a.length !== r.length) return { error: `需要 ${r.length} 组答案,当前为 ${a.length} 组` };
164
164
  s = [];
165
- for (let y = 0; y < o.length; y++) {
166
- const T = o[y], m = a[y];
167
- if (m !== "-" && (!/^[A-T]+$/.test(m) || new Set(m).size !== m.length || [...m].some((p) => !T.options.some((l) => l.label === p)))) return { error: `第 ${T.label} 题包含无效或重复选项` };
168
- const f = m === "-" ? [] : [...m].map((p) => T.options.find((l) => l.label === p).id);
165
+ for (let y = 0; y < r.length; y++) {
166
+ const T = r[y], m = a[y];
167
+ if (m !== "-" && (!/^[A-T]+$/.test(m) || new Set(m).size !== m.length || [...m].some((h) => !T.options.some((l) => l.label === h)))) return { error: `第 ${T.label} 题包含无效或重复选项` };
168
+ const f = m === "-" ? [] : [...m].map((h) => T.options.find((l) => l.label === h).id);
169
169
  if (!T.multiple && f.length > 1) return { error: `第 ${T.label} 题为单选,只能设置一个答案` };
170
170
  s.push({ ...T, correctIds: f });
171
171
  }
@@ -178,32 +178,32 @@ function Fe(t, e, r, n) {
178
178
  return { value: { ...t, questions: i } };
179
179
  }
180
180
  const Xt = { layout: "natural", columns: 2, indent: !1, rowGap: 0, columnGap: 32, marker: "letter" }, St = (t) => `question:${t}`, Yt = (t) => t.presentation === "stem" ? "stem" : ["option", "distributed"].includes(t.presentation) ? "option" : "concentrated";
181
- function Ke(t, e, r) {
182
- const n = xt(e), o = /* @__PURE__ */ new Map(), s = (i, a) => {
181
+ function ve(t, e, o) {
182
+ const n = xt(e), r = /* @__PURE__ */ new Map(), s = (i, a) => {
183
183
  const y = i.attrs?.contentId || a;
184
- i.type === "choiceGroup" && y && o.set(i.attrs.id, y), i.content?.forEach((T) => s(T, y));
184
+ i.type === "choiceGroup" && y && r.set(i.attrs.id, y), i.content?.forEach((T) => s(T, y));
185
185
  };
186
186
  s(e.content);
187
187
  const c = new Set(t.questions.map((i) => i.contentTarget?.groupId));
188
- return { ...t, presentation: r, questions: t.questions.map((i, a) => {
189
- const y = n.find((T) => o.get(T.id) === i.id) || (o.size ? void 0 : n[a]);
190
- return r === "concentrated" || i.contentTarget !== void 0 || !y || c.has(y.id) ? i : (c.add(y.id), { ...i, contentTarget: { groupId: y.id, optionIds: y.options.map((T) => T.id) } });
188
+ return { ...t, presentation: o, questions: t.questions.map((i, a) => {
189
+ const y = n.find((T) => r.get(T.id) === i.id) || (r.size ? void 0 : n[a]);
190
+ return o === "concentrated" || i.contentTarget !== void 0 || !y || c.has(y.id) ? i : (c.add(y.id), { ...i, contentTarget: { groupId: y.id, optionIds: y.options.map((T) => T.id) } });
191
191
  }) };
192
192
  }
193
- function Zt(t, e, r) {
194
- const n = Yt(t), o = new Map(xt(e).map((f) => [f.id, f])), s = /* @__PURE__ */ new Set(), c = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map(), a = (f, p) => {
195
- const l = f.attrs?.contentId || p;
193
+ function Zt(t, e, o) {
194
+ const n = Yt(t), r = new Map(xt(e).map((f) => [f.id, f])), s = /* @__PURE__ */ new Set(), c = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map(), a = (f, h) => {
195
+ const l = f.attrs?.contentId || h;
196
196
  f.type === "choiceGroup" && l && (c.set(l, [...c.get(l) || [], f.attrs.id]), i.set(f.attrs.id, l)), f.type === "choiceStemAnchor" && typeof f.attrs?.groupId == "string" && s.add(f.attrs.groupId), f.content?.forEach((u) => a(u, l));
197
197
  };
198
198
  a(e.content);
199
199
  const y = [], T = /* @__PURE__ */ new Set(), m = t.questions.filter((f) => {
200
- if (!r || n === "concentrated") return !0;
200
+ if (!o || n === "concentrated") return !0;
201
201
  if (n === "stem" && s.has(St(f.id)))
202
202
  return y.push({ groupId: St(f.id), questionId: f.id, options: f.options.map((C) => ({ ...C, contentOptionId: C.id })) }), !1;
203
- const p = c.get(f.id), l = p?.length === 1 ? o.get(p[0]) : void 0, u = l ? { groupId: l.id, optionIds: l.options.map((C) => C.id) } : f.contentTarget, g = u && o.get(u.groupId);
203
+ const h = c.get(f.id), l = h?.length === 1 ? r.get(h[0]) : void 0, u = l ? { groupId: l.id, optionIds: l.options.map((C) => C.id) } : f.contentTarget, g = u && r.get(u.groupId);
204
204
  if (!u || !g || T.has(g.id) || n === "stem" && !s.has(g.id) || i.has(g.id) && i.get(g.id) !== f.id) return !0;
205
205
  const A = u.optionIds.slice(0, f.options.length);
206
- return A.length !== f.options.length || new Set(A).size !== A.length || A.some((C) => !g.options.some((x) => x.id === C)) ? !0 : (T.add(g.id), y.push({ groupId: g.id, questionId: f.id, options: f.options.map((C, x) => ({ ...C, contentOptionId: A[x] })) }), !1);
206
+ return A.length !== f.options.length || new Set(A).size !== A.length || A.some((C) => !g.options.some((M) => M.id === C)) ? !0 : (T.add(g.id), y.push({ groupId: g.id, questionId: f.id, options: f.options.map((C, M) => ({ ...C, contentOptionId: A[M] })) }), !1);
207
207
  });
208
208
  return { position: n === "concentrated" ? void 0 : n, bindings: y, concentrated: { ...t, questions: m } };
209
209
  }
@@ -218,7 +218,7 @@ function at(t, e = 4) {
218
218
  lessScore: 0,
219
219
  correctIds: [],
220
220
  breakBefore: !1,
221
- options: Array.from({ length: e }, (r, n) => ({ id: crypto.randomUUID(), label: String.fromCharCode(65 + n) }))
221
+ options: Array.from({ length: e }, (o, n) => ({ id: crypto.randomUUID(), label: String.fromCharCode(65 + n) }))
222
222
  };
223
223
  }
224
224
  function qt(t = 8) {
@@ -230,24 +230,24 @@ function qt(t = 8) {
230
230
  marker: "box",
231
231
  rowGap: 0,
232
232
  columnGap: 0,
233
- questions: Array.from({ length: t }, (e, r) => at(r))
233
+ questions: Array.from({ length: t }, (e, o) => at(o))
234
234
  };
235
235
  }
236
- function ve(t) {
236
+ function ze(t) {
237
237
  return new Set(t.questions.map((e) => e.options.length)).size > 1 ? "column" : t.direction;
238
238
  }
239
239
  function te(t) {
240
240
  const e = [];
241
- for (const r of t.questions) {
241
+ for (const o of t.questions) {
242
242
  const n = e.at(-1);
243
- (!n || n.length >= t.rowsPerColumn || r.breakBefore || n[0].options.length !== r.options.length) && e.push([]), e[e.length - 1].push(r);
243
+ (!n || n.length >= t.rowsPerColumn || o.breakBefore || n[0].options.length !== o.options.length) && e.push([]), e[e.length - 1].push(o);
244
244
  }
245
245
  return e;
246
246
  }
247
- function ze(t) {
247
+ function We(t) {
248
248
  const e = [];
249
- for (const r of te(t))
250
- (!e.length || r[0].breakBefore) && e.push([]), e[e.length - 1].push(r);
249
+ for (const o of te(t))
250
+ (!e.length || o[0].breakBefore) && e.push([]), e[e.length - 1].push(o);
251
251
  return e;
252
252
  }
253
253
  const ee = {
@@ -269,21 +269,21 @@ const ee = {
269
269
  composite: "材料/复合题",
270
270
  optional: "选做题组",
271
271
  practice: "实践评价"
272
- }, We = { choice: "选择", judge: "判断", fill: "填空", answer: "简答", calculation: "计算/证明", correction: "改错", drawing: "作图", table: "表格", writing: "作文", english: "外语写作" }, Ve = ["reading", "cloze", "completion", "composite", "optional"], j = () => ({ version: 1, content: { type: "doc", content: [{ type: "paragraph" }] } }), Qe = { symbols: ["√", "×"], letters: ["T", "F"], words: ["正确", "错误"] }, ne = (t) => ["writing", "english"].includes(t) ? 70 : ["answer", "calculation", "drawing", "table", "correction"].includes(t) ? 60 : 15, Je = (t) => t === "judge" ? 200 : t === "fill" ? 50 : ["reading", "cloze", "completion"].includes(t) ? 20 : t === "matching" ? 9 : 100;
272
+ }, Ve = { choice: "选择", judge: "判断", fill: "填空", answer: "简答", calculation: "计算/证明", correction: "改错", drawing: "作图", table: "表格", writing: "作文", english: "外语写作" }, Qe = ["reading", "cloze", "completion", "composite", "optional"], j = () => ({ version: 1, content: { type: "doc", content: [{ type: "paragraph" }] } }), Je = { symbols: ["√", "×"], letters: ["T", "F"], words: ["正确", "错误"] }, ne = (t) => ["writing", "english"].includes(t) ? 70 : ["answer", "calculation", "drawing", "table", "correction"].includes(t) ? 60 : 15, Xe = (t) => t === "judge" ? 200 : t === "fill" ? 50 : ["reading", "cloze", "completion"].includes(t) ? 20 : t === "matching" ? 9 : 100;
273
273
  function oe(t = 0) {
274
274
  return { id: crypto.randomUUID(), label: String(t + 1), width: 50, style: "line", characters: 6, score: null, answers: [], prefix: "", suffix: "", breakAfter: !1 };
275
275
  }
276
276
  function re(t, e = "1") {
277
- const r = crypto.randomUUID();
277
+ const o = crypto.randomUUID();
278
278
  return {
279
- id: r,
279
+ id: o,
280
280
  label: e,
281
281
  kind: t,
282
282
  document: j(),
283
283
  reference: j(),
284
284
  explanation: j(),
285
285
  score: null,
286
- choice: { ...at(0, t === "judge" ? 2 : 4), id: r, label: e },
286
+ choice: { ...at(0, t === "judge" ? 2 : 4), id: o, label: e },
287
287
  presentation: "concentrated",
288
288
  blanks: [oe()],
289
289
  steps: [],
@@ -296,7 +296,7 @@ function re(t, e = "1") {
296
296
  function ie(t) {
297
297
  return ["reading", "cloze", "chunk"].includes(t) ? "choice" : ["matching", "completion"].includes(t) ? "fill" : ["ordering", "composite", "optional", "practice"].includes(t) ? "answer" : t;
298
298
  }
299
- function Xe(t) {
299
+ function Ye(t) {
300
300
  return {
301
301
  items: [re(ie(t))],
302
302
  judgeLabels: "symbols",
@@ -319,67 +319,67 @@ function Xe(t) {
319
319
  attachmentUrl: ""
320
320
  };
321
321
  }
322
- function Ye(t) {
322
+ function Ze(t) {
323
323
  return String(Math.max(0, ...t.map((e) => /^\d+$/.test(e.label) ? Number(e.label) : 0)) + 1);
324
324
  }
325
325
  function kt(t) {
326
- const e = structuredClone(t), r = /* @__PURE__ */ new Map(), n = (s) => {
326
+ const e = structuredClone(t), o = /* @__PURE__ */ new Map(), n = (s) => {
327
327
  !s || typeof s != "object" || Object.entries(s).forEach(([c, i]) => {
328
- ["id", "answerId"].includes(c) && typeof i == "string" ? r.set(i, crypto.randomUUID()) : n(i);
328
+ ["id", "answerId"].includes(c) && typeof i == "string" ? o.set(i, crypto.randomUUID()) : n(i);
329
329
  });
330
330
  };
331
331
  n(e);
332
- const o = (s) => typeof s == "string" ? r.get(s) || s : Array.isArray(s) ? s.map(o) : s && typeof s == "object" ? Object.fromEntries(Object.entries(s).map(([c, i]) => [r.get(c) || c, o(i)])) : s;
333
- return o(e);
332
+ const r = (s) => typeof s == "string" ? o.get(s) || s : Array.isArray(s) ? s.map(r) : s && typeof s == "object" ? Object.fromEntries(Object.entries(s).map(([c, i]) => [o.get(c) || c, r(i)])) : s;
333
+ return r(e);
334
334
  }
335
- function Ze(t, e) {
336
- const r = kt(t);
337
- return { ...r, label: e, choice: { ...r.choice, label: e } };
335
+ function qe(t, e) {
336
+ const o = kt(t);
337
+ return { ...o, label: e, choice: { ...o.choice, label: e } };
338
338
  }
339
- function qe(t, e, r) {
340
- const n = t.findIndex((c) => c.id === e), o = n + r;
341
- if (n < 0 || o < 0 || o >= t.length) return t;
339
+ function tn(t, e, o) {
340
+ const n = t.findIndex((c) => c.id === e), r = n + o;
341
+ if (n < 0 || r < 0 || r >= t.length) return t;
342
342
  const s = [...t];
343
- return s.splice(o, 0, ...s.splice(n, 1)), s;
343
+ return s.splice(r, 0, ...s.splice(n, 1)), s;
344
344
  }
345
- function tn(t, e) {
346
- return { ...t, pool: t.pool.filter((r) => r.id !== e), sequence: t.sequence.filter((r) => r !== e), assignments: Object.fromEntries(Object.entries(t.assignments).filter(([r]) => r !== e)), items: t.items.map((r) => ({ ...r, targets: r.targets.filter((n) => n !== e) })) };
345
+ function en(t, e) {
346
+ return { ...t, pool: t.pool.filter((o) => o.id !== e), sequence: t.sequence.filter((o) => o !== e), assignments: Object.fromEntries(Object.entries(t.assignments).filter(([o]) => o !== e)), items: t.items.map((o) => ({ ...o, targets: o.targets.filter((n) => n !== e) })) };
347
347
  }
348
- function en(t, e, r) {
349
- const n = [...new Set(r)].filter((s) => t.pool.some((c) => c.id === s)), o = t.relation === "one" ? n.slice(-1) : n;
350
- return { ...t, items: t.items.map((s) => s.id === e ? { ...s, targets: o } : t.reuseOptions ? s : { ...s, targets: s.targets.filter((c) => !o.includes(c)) }) };
348
+ function nn(t, e, o) {
349
+ const n = [...new Set(o)].filter((s) => t.pool.some((c) => c.id === s)), r = t.relation === "one" ? n.slice(-1) : n;
350
+ return { ...t, items: t.items.map((s) => s.id === e ? { ...s, targets: r } : t.reuseOptions ? s : { ...s, targets: s.targets.filter((c) => !r.includes(c)) }) };
351
351
  }
352
- function nn(t, e) {
353
- let r = 0;
354
- for (; r < e.length && r < t.chunkText.length && e[r] === t.chunkText[r]; ) r++;
352
+ function on(t, e) {
353
+ let o = 0;
354
+ for (; o < e.length && o < t.chunkText.length && e[o] === t.chunkText[o]; ) o++;
355
355
  let n = 0;
356
- for (; n < e.length - r && n < t.chunkText.length - r && e[e.length - 1 - n] === t.chunkText[t.chunkText.length - 1 - n]; ) n++;
357
- const o = t.chunkText.length - n, s = /* @__PURE__ */ new Set(), c = t.chunkPoints.filter((i) => i.offset <= r || i.offset >= o).map((i) => ({ ...i, offset: i.offset <= r ? i.offset : i.offset + e.length - t.chunkText.length })).filter((i) => i.offset <= 0 || i.offset >= e.length || s.has(i.offset) ? !1 : (s.add(i.offset), !0));
356
+ for (; n < e.length - o && n < t.chunkText.length - o && e[e.length - 1 - n] === t.chunkText[t.chunkText.length - 1 - n]; ) n++;
357
+ const r = t.chunkText.length - n, s = /* @__PURE__ */ new Set(), c = t.chunkPoints.filter((i) => i.offset <= o || i.offset >= r).map((i) => ({ ...i, offset: i.offset <= o ? i.offset : i.offset + e.length - t.chunkText.length })).filter((i) => i.offset <= 0 || i.offset >= e.length || s.has(i.offset) ? !1 : (s.add(i.offset), !0));
358
358
  return { ...t, chunkText: e, chunkPoints: c, chunkCorrect: t.chunkCorrect.filter((i) => c.some((a) => a.id === i)) };
359
359
  }
360
- function on(t, e) {
361
- const r = [], n = t.items.map((o) => o.label.trim());
362
- (n.some((o) => !o) || new Set(n).size !== n.length) && r.push("题号不能为空或重复");
363
- for (const o of t.items) {
364
- o.score !== null && (!Number.isFinite(o.score) || o.score < 0.5 || o.score > ne(o.kind) || !Number.isInteger(o.score * 2)) && r.push(`${o.label} 题分值超出范围或不是 0.5 的倍数`);
365
- const c = (o.kind === "fill" ? o.blanks : o.steps).map((i) => i.score);
366
- c.length && o.score !== null && c.every((i) => i !== null) && c.reduce((i, a) => i + (a || 0), 0) !== o.score && r.push(`${o.label} 题分项分值之和与题分不一致`);
360
+ function rn(t, e) {
361
+ const o = [], n = t.items.map((r) => r.label.trim());
362
+ (n.some((r) => !r) || new Set(n).size !== n.length) && o.push("题号不能为空或重复");
363
+ for (const r of t.items) {
364
+ r.score !== null && (!Number.isFinite(r.score) || r.score < 0.5 || r.score > ne(r.kind) || !Number.isInteger(r.score * 2)) && o.push(`${r.label} 题分值超出范围或不是 0.5 的倍数`);
365
+ const c = (r.kind === "fill" ? r.blanks : r.steps).map((i) => i.score);
366
+ c.length && r.score !== null && c.every((i) => i !== null) && c.reduce((i, a) => i + (a || 0), 0) !== r.score && o.push(`${r.label} 题分项分值之和与题分不一致`);
367
367
  }
368
368
  if (["matching", "ordering"].includes(e)) {
369
- const o = t.pool.map((s) => s.label.trim());
370
- (o.some((s) => !s) || new Set(o).size !== o.length) && r.push("共享选项编号不能为空或重复");
369
+ const r = t.pool.map((s) => s.label.trim());
370
+ (r.some((s) => !s) || new Set(r).size !== r.length) && o.push("共享选项编号不能为空或重复");
371
371
  }
372
- return e === "optional" && t.chooseCount > t.items.length && r.push("选做数量不能超过题目数量"), e === "chunk" && t.chunkCorrect.length > t.chunkMax && r.push("正确断点数不能超过最多选择数"), r;
372
+ return e === "optional" && t.chooseCount > t.items.length && o.push("选做数量不能超过题目数量"), e === "chunk" && t.chunkCorrect.length > t.chunkMax && o.push("正确断点数不能超过最多选择数"), o;
373
373
  }
374
- function rn(t = 3, e = 3) {
374
+ function sn(t = 3, e = 3) {
375
375
  return { version: 1, content: { type: "doc", content: [{ type: "table", content: Array.from({ length: t }, () => ({ type: "tableRow", content: Array.from({ length: e }, () => ({ type: "tableCell", content: [{ type: "paragraph" }] })) })) }] } };
376
376
  }
377
377
  function J(t) {
378
- const e = (r) => !!(r.text || r.type && !["doc", "paragraph", "choiceStemAnchor"].includes(r.type) || r.content?.some(e));
378
+ const e = (o) => !!(o.text || o.type && !["doc", "paragraph", "choiceStemAnchor"].includes(o.type) || o.content?.some(e));
379
379
  return !e(t.content);
380
380
  }
381
- const sn = { choice: "选择题", area: "空白区域", ...ee };
382
- function cn(t) {
381
+ const cn = { choice: "选择题", area: "空白区域", ...ee };
382
+ function an(t) {
383
383
  return {
384
384
  id: crypto.randomUUID(),
385
385
  kind: "area",
@@ -390,7 +390,7 @@ function cn(t) {
390
390
  };
391
391
  }
392
392
  function se() {
393
- return { version: 1, title: "", questionCard: !1, preset: "a3-two", margin: 15, gap: 10, blocks: [] };
393
+ return { version: 1, title: "", questionCard: !1, duplex: !1, preset: "a3-two", margin: 15, gap: 10, blocks: [] };
394
394
  }
395
395
  function ce(t = "") {
396
396
  return {
@@ -420,62 +420,65 @@ const le = {
420
420
  a4: { label: "A4 单栏", width: 210, height: 297, columns: 1 },
421
421
  "a3-two": { label: "A3 双栏", width: 420, height: 297, columns: 2 },
422
422
  "a3-three": { label: "A3 三栏", width: 420, height: 297, columns: 3 }
423
- }, et = 44, it = 16;
423
+ }, et = 44, it = 16, ue = (t) => t.duplex === !0 ? 2 : 1;
424
424
  function Ct(t, e) {
425
- const r = le[t.preset], n = Q(r.width), o = Q(r.height), s = Q(t.margin), c = Q(t.gap), i = t.usage !== "homework" && t.header?.mifeng ? Q(t.header.kaohao === "code" ? 26 : 14) : 0, a = n - s * 2 - i, y = (a - c * (r.columns - 1)) / r.columns, T = Math.max(s, t.header ? t.recognition?.examQrCode ? 64 : 39 : 0), m = Math.max(s, t.header ? 56 : 0), f = o - T - m, p = f - it, l = t.header ? y : a, u = e && e.id === t.paperTitle?.id && Math.abs(e.width - l) < 1 ? e : void 0, g = t.paperTitle ? Math.min(f, u?.height ?? t.paperTitle.height + (t.header ? 260 : it)) : 0, A = (w, O = 0) => !!t.paperTitle && (t.header ? w % 2 === 0 && O === 0 : w === 0), C = (w, O = 0) => A(w, O) ? g : 0;
426
- return { ...r, width: n, height: o, margin: s, topInset: T, bottomInset: m, gap: c, sealWidth: i, contentWidth: a, contentHeight: f, columnWidth: y, columnX: (w, O) => s + (w % 2 === 0 ? i : 0) + O * (y + c), titleWidth: l, titleMaxHeight: p, hasHeader: A, headerHeight: C, capacity: (w, O = 0) => f - C(w, O) };
427
- }
428
- function an(t, e, r) {
429
- const n = Ct(t, r);
430
- let o = 0, s = 0, c = 0;
431
- const i = () => {
432
- s++, s === n.columns && (s = 0, o++), c = 0;
433
- }, a = t.blocks.map((T) => {
434
- const m = e[T.id], f = m && Math.abs(m.width - n.columnWidth) < 1 ? m.height : 100 + T.answerHeight, p = m && Math.abs(m.width - n.columnWidth) < 1 ? [...new Set([...m.breaks || [], f].filter((M) => Number.isFinite(M) && M > 0 && M <= f))].sort((M, w) => M - w) : [], l = T.reference?.type === "CCOMPOSITION", u = (M) => l && M > 0 ? Math.max(0, 6 - Math.max(0, (m?.compositionStart || 0) - M)) : 0;
435
- if (p.length > 1 && p.every((M, w) => {
436
- const O = p[w - 1] || 0;
437
- return M - O + u(O) <= n.capacity(1) + 0.5;
425
+ const o = le[t.preset], n = Q(o.width), r = Q(o.height), s = Q(t.margin), c = Q(t.gap), i = t.usage !== "homework" && t.header?.mifeng ? Q(t.header.kaohao === "code" ? 26 : 14) : 0, a = n - s * 2 - i, y = (a - c * (o.columns - 1)) / o.columns, T = Math.max(s, t.header ? t.recognition?.examQrCode ? 64 : 39 : 0), m = Math.max(s, t.header ? 56 : 0), f = r - T - m, h = f - it, l = t.header ? y : a, u = e && e.id === t.paperTitle?.id && Math.abs(e.width - l) < 1 ? e : void 0, g = t.paperTitle ? Math.min(f, u?.height ?? t.paperTitle.height + (t.header ? 260 : it)) : 0, A = (b, O = 0) => !!t.paperTitle && (t.header ? b % 2 === 0 && O === 0 : b === 0), C = (b, O = 0) => A(b, O) ? g : 0;
426
+ return { ...o, width: n, height: r, margin: s, topInset: T, bottomInset: m, gap: c, sealWidth: i, contentWidth: a, contentHeight: f, columnWidth: y, columnX: (b, O) => s + (b % 2 === 0 ? i : 0) + O * (y + c), titleWidth: l, titleMaxHeight: h, hasHeader: A, headerHeight: C, capacity: (b, O = 0) => f - C(b, O) };
427
+ }
428
+ function ln(t, e, o) {
429
+ const n = Ct(t, o), r = ue(t);
430
+ let s = 0, c = 0, i = 0;
431
+ const a = () => {
432
+ c++, c === n.columns && (c = 0, s++), i = 0;
433
+ }, y = t.blocks.map((m) => {
434
+ const f = e[m.id], h = f && Math.abs(f.width - n.columnWidth) < 1 ? f.height : 100 + m.answerHeight, l = f && Math.abs(f.width - n.columnWidth) < 1 ? [...new Set([...f.breaks || [], h].filter((b) => Number.isFinite(b) && b > 0 && b <= h))].sort((b, O) => b - O) : [], u = m.reference?.type === "CCOMPOSITION", g = (b) => u && b > 0 ? Math.max(0, 6 - Math.max(0, (f?.compositionStart || 0) - b)) : 0;
435
+ if (l.length > 1 && l.every((b, O) => {
436
+ const p = l[O - 1] || 0;
437
+ return b - p + g(p) <= n.capacity(1) + 0.5;
438
438
  })) {
439
- const M = [];
440
- let w = 0;
441
- for (; w < f - 0.5; ) {
442
- const h = n.capacity(o, s) - c, I = w, d = u(w), b = (N) => m?.markingFrames?.some((L) => L.from >= I - 0.5 && L.from < N - 0.5 && L.to > N + 0.5) ? 22 : 0, E = p.filter((N) => N > I + 0.5 && N + b(N) <= I + h - d + 0.5).at(-1);
443
- if (E === void 0) {
444
- i();
439
+ const b = [];
440
+ let O = 0;
441
+ for (; O < h - 0.5; ) {
442
+ const E = n.capacity(s, c) - i, d = O, I = g(O), w = (L) => f?.markingFrames?.some((_) => _.from >= d - 0.5 && _.from < L - 0.5 && _.to > L + 0.5) ? 22 : 0, S = l.filter((L) => L > d + 0.5 && L + w(L) <= d + E - I + 0.5).at(-1);
443
+ if (S === void 0) {
444
+ a();
445
445
  continue;
446
446
  }
447
- const S = l && E < f - 0.5 ? Math.max(b(E), h - d - (E - w)) : b(E);
448
- M.push({ page: o, column: s, x: n.columnX(o, s), y: o * (n.height + et) + n.topInset + n.headerHeight(o, s) + c, from: w, to: E, ...d ? { topPadding: d } : {}, ...S ? { bottomPadding: S } : {} }), c += E - w + d, w = E, w < f - 0.5 && i();
447
+ const N = u && S < h - 0.5 ? Math.max(w(S), E - I - (S - O)) : w(S);
448
+ b.push({ page: s, column: c, x: n.columnX(s, c), y: s * (n.height + et) + n.topInset + n.headerHeight(s, c) + i, from: O, to: S, ...I ? { topPadding: I } : {}, ...N ? { bottomPadding: N } : {} }), i += S - O + I, O = S, O < h - 0.5 && a();
449
449
  }
450
- c += it;
451
- const O = M[0];
452
- return { id: T.id, ...O, height: f, available: n.capacity(O.page, O.column), overflowing: !1, fragments: M };
450
+ i += it;
451
+ const p = b[0];
452
+ return { id: m.id, ...p, height: h, available: n.capacity(p.page, p.column), overflowing: !1, fragments: b };
453
453
  }
454
- for (; c + f > n.capacity(o, s) + 0.5 && (c > 0 || n.headerHeight(o, s) > 0); ) i();
455
- const A = n.capacity(o, s), C = f > A + 0.5, x = {
456
- id: T.id,
457
- page: o,
458
- column: s,
459
- x: n.columnX(o, s),
460
- y: o * (n.height + et) + n.topInset + n.headerHeight(o, s) + c,
461
- height: f,
462
- available: A,
463
- overflowing: C,
464
- fragments: [{ page: o, column: s, x: n.columnX(o, s), y: o * (n.height + et) + n.topInset + n.headerHeight(o, s) + c, from: 0, to: Math.min(f, A) }]
454
+ for (; i + h > n.capacity(s, c) + 0.5 && (i > 0 || n.headerHeight(s, c) > 0); ) a();
455
+ const C = n.capacity(s, c), M = h > C + 0.5, $ = {
456
+ id: m.id,
457
+ page: s,
458
+ column: c,
459
+ x: n.columnX(s, c),
460
+ y: s * (n.height + et) + n.topInset + n.headerHeight(s, c) + i,
461
+ height: h,
462
+ available: C,
463
+ overflowing: M,
464
+ fragments: [{ page: s, column: c, x: n.columnX(s, c), y: s * (n.height + et) + n.topInset + n.headerHeight(s, c) + i, from: 0, to: Math.min(h, C) }]
465
465
  };
466
- return c += Math.min(f, A) + it, x;
467
- }), y = /* @__PURE__ */ new Map();
468
- return a.forEach((T, m) => T.fragments.forEach((f) => {
469
- const p = `${f.page}/${f.column}`, l = y.get(p) || [];
470
- l.push({ fragment: f, placement: T, blockIndex: m }), y.set(p, l);
471
- })), y.forEach((T) => {
472
- const m = T.filter((u) => ["answer", "writing", "english", "composite", "area"].includes(t.blocks[u.blockIndex].kind)).at(-1);
473
- if (!m || t.blocks[m.blockIndex].reference?.type !== "CCOMPOSITION" && t.blocks[m.blockIndex].kind !== "area") return;
474
- const f = T.at(-1).fragment, l = f.page * (n.height + et) + n.height - n.bottomInset - f.y - (f.to - f.from) - (f.topPadding || 0) - (f.bottomPadding || 0);
475
- l <= 0 || l > 30 || (m.fragment.bottomPadding = (m.fragment.bottomPadding || 0) + l, T.slice(T.indexOf(m) + 1).forEach(({ fragment: u, placement: g }) => {
476
- u.y += l, g.fragments[0] === u && (g.y = u.y);
466
+ return i += Math.min(h, C) + it, $;
467
+ }), T = /* @__PURE__ */ new Map();
468
+ y.forEach((m, f) => m.fragments.forEach((h) => {
469
+ const l = `${h.page}/${h.column}`, u = T.get(l) || [];
470
+ u.push({ fragment: h, placement: m, blockIndex: f }), T.set(l, u);
471
+ })), T.forEach((m) => {
472
+ const f = m.filter((g) => ["answer", "writing", "english", "composite", "area"].includes(t.blocks[g.blockIndex].kind)).at(-1);
473
+ if (!f || t.blocks[f.blockIndex].reference?.type !== "CCOMPOSITION" && t.blocks[f.blockIndex].kind !== "area") return;
474
+ const h = m.at(-1).fragment, u = h.page * (n.height + et) + n.height - n.bottomInset - h.y - (h.to - h.from) - (h.topPadding || 0) - (h.bottomPadding || 0);
475
+ u <= 0 || u > 30 || (f.fragment.bottomPadding = (f.fragment.bottomPadding || 0) + u, m.slice(m.indexOf(f) + 1).forEach(({ fragment: g, placement: A }) => {
476
+ g.y += u, A.fragments[0] === g && (A.y = g.y);
477
477
  }));
478
- }), { geometry: n, placements: a, pageCount: o + 1 };
478
+ });
479
+ for (const m of y)
480
+ (m.overflowing || m.fragments.some((f) => f.page >= r)) && (m.overflowFrom = m.fragments.filter((f) => f.page < r).at(-1)?.to || 0);
481
+ return { geometry: n, placements: y, pageCount: Math.min(r, s + 1), requiredPageCount: s + 1 };
479
482
  }
480
483
  function pt(t, e) {
481
484
  return { version: 1, content: { type: "doc", content: [{ type: "paragraph", content: [
@@ -483,18 +486,18 @@ function pt(t, e) {
483
486
  ...e ? [{ type: "text", text: `(${e}分)`, marks: [{ type: "documentLabel", attrs: { kind: "score" } }] }] : []
484
487
  ] }] } };
485
488
  }
486
- function st(t, e, r) {
487
- const n = (o) => {
488
- if (!o.content) return o;
489
+ function st(t, e, o) {
490
+ const n = (r) => {
491
+ if (!r.content) return r;
489
492
  let s;
490
- const c = o.content.flatMap((a) => {
493
+ const c = r.content.flatMap((a) => {
491
494
  const y = a.type === "text" && a.marks?.find((f) => f.type === "documentLabel")?.attrs?.kind, T = y && y === s;
492
495
  if (s = y, T) return [];
493
496
  if (!y) return [n(a)];
494
- const m = y === "number" ? `${e}.` : r ? `(${r}分)` : "";
497
+ const m = y === "number" ? `${e}.` : o ? `(${o}分)` : "";
495
498
  return m ? [{ ...a, text: m }] : [];
496
499
  }), i = c.findIndex((a) => a.marks?.some((y) => y.type === "documentLabel" && y.attrs?.kind === "number"));
497
- return r && i >= 0 && !c.some((a) => a.marks?.some((y) => y.type === "documentLabel" && y.attrs?.kind === "score")) && c.splice(i + 1, 0, { type: "text", text: `(${r}分)`, marks: [{ type: "documentLabel", attrs: { kind: "score" } }] }), { ...o, content: c };
500
+ return o && i >= 0 && !c.some((a) => a.marks?.some((y) => y.type === "documentLabel" && y.attrs?.kind === "score")) && c.splice(i + 1, 0, { type: "text", text: `(${o}分)`, marks: [{ type: "documentLabel", attrs: { kind: "score" } }] }), { ...r, content: c };
498
501
  };
499
502
  return { ...t, content: n(t.content) };
500
503
  }
@@ -513,91 +516,91 @@ const It = {
513
516
  CCOMPOSITION: "语文作文",
514
517
  CHUNK_CHOICE: "断句题"
515
518
  }, At = ["SCHOICE", "MCHOICE", "JUDGE", "FILLBLANK", "SHORTANSWER", "MIXED"];
516
- function ln(t, e = !1) {
517
- const r = _t(t), n = e ? At.filter((o) => o !== "MIXED") : At;
518
- return e ? ["CHINESE", "JAPANESE"].includes(r || "") ? [...n, "CHUNK_CHOICE"] : n : r === "CHINESE" ? [...n, "CCOMPOSITION", "CHUNK_CHOICE"] : r === "ENGLISH" ? [...n, "CLOZE", "READTHENANSWER", "INFO_MATCHING", "TEXT_COMPLETION", "ECOMPOSITION"] : r === "JAPANESE" ? Object.keys(It) : ["POLITICAL", "HISTORY"].includes(r || "") ? [...n, "CCOMPOSITION"] : n;
519
+ function un(t, e = !1) {
520
+ const o = _t(t), n = e ? At.filter((r) => r !== "MIXED") : At;
521
+ return e ? ["CHINESE", "JAPANESE"].includes(o || "") ? [...n, "CHUNK_CHOICE"] : n : o === "CHINESE" ? [...n, "CCOMPOSITION", "CHUNK_CHOICE"] : o === "ENGLISH" ? [...n, "CLOZE", "READTHENANSWER", "INFO_MATCHING", "TEXT_COMPLETION", "ECOMPOSITION"] : o === "JAPANESE" ? Object.keys(It) : ["POLITICAL", "HISTORY"].includes(o || "") ? [...n, "CCOMPOSITION"] : n;
519
522
  }
520
- const ue = (t) => ["CLOZE", "READTHENANSWER", "INFO_MATCHING", "TEXT_COMPLETION"].includes(t), fe = (t) => ["SCHOICE", "MCHOICE", "CLOZE", "READTHENANSWER", "INFO_MATCHING", "JUDGE"].includes(t), Z = (t) => ({ version: 1, content: { type: "doc", content: t.length ? t : [{ type: "paragraph" }] } });
521
- function Pt(t, e, r = !1) {
523
+ const fe = (t) => ["CLOZE", "READTHENANSWER", "INFO_MATCHING", "TEXT_COMPLETION"].includes(t), de = (t) => ["SCHOICE", "MCHOICE", "CLOZE", "READTHENANSWER", "INFO_MATCHING", "JUDGE"].includes(t), Z = (t) => ({ version: 1, content: { type: "doc", content: t.length ? t : [{ type: "paragraph" }] } });
524
+ function Pt(t, e, o = !1) {
522
525
  return {
523
526
  content: j(),
524
- numbered: !r,
527
+ numbered: !o,
525
528
  groupId: `options:${e.id}`,
526
529
  layout: { ...Xt, columns: t === "CLOZE" ? 4 : 2, ...t === "READTHENANSWER" ? { layout: "fixed", columnGap: 0 } : {} },
527
- itemsContent: !r && fe(t) ? e.options.map((n) => ({ id: n.id, key: n.label, content: j() })) : []
530
+ itemsContent: !o && de(t) ? e.options.map((n) => ({ id: n.id, key: n.label, content: j() })) : []
528
531
  };
529
532
  }
530
533
  const ct = (t) => {
531
534
  if (t.type === "choiceStemAnchor" || t.type === "text" && t.marks?.some((n) => n.type === "documentLabel" && n.attrs?.kind === "number")) return null;
532
- const { contentId: e, ...r } = t.attrs || {};
533
- return { ...t, ...t.attrs ? { attrs: r } : {}, ...t.content ? { content: t.content.map(ct).filter((n) => n !== null) } : {} };
535
+ const { contentId: e, ...o } = t.attrs || {};
536
+ return { ...t, ...t.attrs ? { attrs: o } : {}, ...t.content ? { content: t.content.map(ct).filter((n) => n !== null) } : {} };
534
537
  };
535
- function Ot(t, e, r) {
536
- const o = (t.content.content.content || [{ type: "paragraph" }]).map((s) => ({ ...s, attrs: { ...s.attrs, contentId: e } }));
538
+ function Ot(t, e, o) {
539
+ const r = (t.content.content.content || [{ type: "paragraph" }]).map((s) => ({ ...s, attrs: { ...s.attrs, contentId: e } }));
537
540
  if (t.numbered) {
538
- const s = { type: "text", text: `${r}.`, marks: [{ type: "documentLabel", attrs: { kind: "number" } }] };
539
- ["paragraph", "heading"].includes(o[0]?.type || "") || o.unshift({ type: "paragraph", attrs: { contentId: e }, content: [] }), o[0] = { ...o[0], content: [s, ...o[0].content || []] };
541
+ const s = { type: "text", text: `${o}.`, marks: [{ type: "documentLabel", attrs: { kind: "number" } }] };
542
+ ["paragraph", "heading"].includes(r[0]?.type || "") || r.unshift({ type: "paragraph", attrs: { contentId: e }, content: [] }), r[0] = { ...r[0], content: [s, ...r[0].content || []] };
540
543
  }
541
- return t.itemsContent.length && o.push({ type: "choiceGroup", attrs: { id: t.groupId, contentId: e, ...t.layout }, content: t.itemsContent.map((s) => ({
544
+ return t.itemsContent.length && r.push({ type: "choiceGroup", attrs: { id: t.groupId, contentId: e, ...t.layout }, content: t.itemsContent.map((s) => ({
542
545
  type: "choiceOption",
543
546
  attrs: { id: s.id, label: s.key, sourceKey: s.key, marker: "letter" },
544
547
  content: s.content.content.content || [{ type: "paragraph" }]
545
- })) }), o;
548
+ })) }), r;
546
549
  }
547
- function de(t, e) {
548
- const r = e.filter((i) => i.type === "choiceGroup"), n = r.find((i) => i.attrs?.id === t.groupId) || (r.length === 1 ? r[0] : void 0), o = e.filter((i) => i !== n);
550
+ function he(t, e) {
551
+ const o = e.filter((i) => i.type === "choiceGroup"), n = o.find((i) => i.attrs?.id === t.groupId) || (o.length === 1 ? o[0] : void 0), r = e.filter((i) => i !== n);
549
552
  let s = !1;
550
553
  const c = (i) => {
551
554
  i.marks?.some((a) => a.type === "documentLabel" && a.attrs?.kind === "number") && (s = !0), i.content?.forEach(c);
552
555
  };
553
- return o.forEach(c), {
556
+ return r.forEach(c), {
554
557
  ...t,
555
558
  numbered: s,
556
- content: Z(o.map(ct).filter((i) => i !== null)),
559
+ content: Z(r.map(ct).filter((i) => i !== null)),
557
560
  groupId: n?.attrs?.id || t.groupId,
558
561
  layout: n ? Object.fromEntries(Object.entries(t.layout).map(([i, a]) => [i, n.attrs?.[i] ?? a])) : t.layout,
559
562
  itemsContent: (n?.content || []).map((i, a) => ({ id: i.attrs?.id || t.itemsContent[a]?.id || crypto.randomUUID(), key: i.attrs?.label || String.fromCharCode(65 + a), content: Z((i.content || []).map(ct).filter((y) => y !== null)) }))
560
563
  };
561
564
  }
562
- function he(t, e, r, n) {
563
- const o = /* @__PURE__ */ new Map();
565
+ function pe(t, e, o, n) {
566
+ const r = /* @__PURE__ */ new Map();
564
567
  e.content.content?.forEach((i) => {
565
- i.attrs?.contentId && o.set(i.attrs.contentId, [...o.get(i.attrs.contentId) || [], i]);
568
+ i.attrs?.contentId && r.set(i.attrs.contentId, [...r.get(i.attrs.contentId) || [], i]);
566
569
  });
567
- const s = new Set(n?.content.content?.map((i) => i.attrs?.contentId).filter(Boolean)), c = (i, a) => a && (o.has(i) || s.has(i)) ? de(a, o.get(i) || []) : a;
570
+ const s = new Set(n?.content.content?.map((i) => i.attrs?.contentId).filter(Boolean)), c = (i, a) => a && (r.has(i) || s.has(i)) ? he(a, r.get(i) || []) : a;
568
571
  return {
569
572
  ...t,
570
- ...o.has(r) ? { material: Z(o.get(r).map((i) => ct(i))) } : {},
573
+ ...r.has(o) ? { material: Z(r.get(o).map((i) => ct(i))) } : {},
571
574
  questions: t.questions.map((i) => ({ ...i, text: c(i.id, i.text), parts: i.parts.map((a) => ({ ...a, text: c(a.id, a.text) })) }))
572
575
  };
573
576
  }
574
- function pe(t) {
575
- const e = t.reference, r = [];
576
- e.type === "MIXED" && r.push(...(e.material || j()).content.content.map((o) => ({ ...o, attrs: { ...o.attrs, contentId: t.id } }))), e.questions.forEach((o) => {
577
- o.text && r.push(...Ot(o.text, o.id, o.label)), ue(o.type) && o.parts.forEach((s) => {
578
- s.text && r.push(...Ot(s.text, s.id, s.label));
577
+ function ge(t) {
578
+ const e = t.reference, o = [];
579
+ e.type === "MIXED" && o.push(...(e.material || j()).content.content.map((r) => ({ ...r, attrs: { ...r.attrs, contentId: t.id } }))), e.questions.forEach((r) => {
580
+ r.text && o.push(...Ot(r.text, r.id, r.label)), fe(r.type) && r.parts.forEach((s) => {
581
+ s.text && o.push(...Ot(s.text, s.id, s.label));
579
582
  });
580
583
  });
581
- const n = (t.document.content.content || []).filter((o) => !o.attrs?.contentId);
582
- return J(Z(n)) || r.push(...n), Z(r);
584
+ const n = (t.document.content.content || []).filter((r) => !r.attrs?.contentId);
585
+ return J(Z(n)) || o.push(...n), Z(o);
583
586
  }
584
- function ge(t, e) {
585
- const r = (n, o, s) => !n || !s || o.options.map((c) => c.id).join() === s.options.map((c) => c.id).join() ? n : { ...n, itemsContent: o.options.map((c) => ({ ...n.itemsContent.find((i) => i.id === c.id), id: c.id, key: c.label, content: n.itemsContent.find((i) => i.id === c.id)?.content || j() })) };
587
+ function me(t, e) {
588
+ const o = (n, r, s) => !n || !s || r.options.map((c) => c.id).join() === s.options.map((c) => c.id).join() ? n : { ...n, itemsContent: r.options.map((c) => ({ ...n.itemsContent.find((i) => i.id === c.id), id: c.id, key: c.label, content: n.itemsContent.find((i) => i.id === c.id)?.content || j() })) };
586
589
  return { ...t, questions: t.questions.map((n) => {
587
- const o = e.questions.find((s) => s.id === n.id);
588
- return { ...n, text: r(n.text, n.choice, o?.choice), parts: n.parts.map((s) => ({ ...s, text: r(s.text, s.choice, o?.parts.find((c) => c.id === s.id)?.choice) })) };
590
+ const r = e.questions.find((s) => s.id === n.id);
591
+ return { ...n, text: o(n.text, n.choice, r?.choice), parts: n.parts.map((s) => ({ ...s, text: o(s.text, s.choice, r?.parts.find((c) => c.id === s.id)?.choice) })) };
589
592
  }) };
590
593
  }
591
- function un(t, e, r) {
594
+ function fn(t, e, o) {
592
595
  if (t.reference?.textVersion !== 1) return t;
593
596
  let n = t.reference;
594
597
  if (!e && !J(t.document) && !t.document.content.content?.some((s) => s.attrs?.contentId)) return { ...t, reference: { ...n, textVersion: void 0 } };
595
598
  if (e?.reference === n && e.document === t.document && !J(t.document)) return t;
596
- if (t.document !== e?.document && (!J(t.document) || e) && (n = he(n, t.document, t.id, e?.document), e && t.reference === e.reference))
599
+ if (t.document !== e?.document && (!J(t.document) || e) && (n = pe(n, t.document, t.id, e?.document), e && t.reference === e.reference))
597
600
  return { ...t, reference: n };
598
- e?.reference && t.reference !== e.reference && (n = ge(n, e.reference));
599
- const o = { ...t, reference: n };
600
- return r || !J(t.document) ? { ...o, document: pe(o) } : o;
601
+ e?.reference && t.reference !== e.reference && (n = me(n, e.reference));
602
+ const r = { ...t, reference: n };
603
+ return o || !J(t.document) ? { ...r, document: ge(r) } : r;
601
604
  }
602
605
  const lt = {
603
606
  SCHOICE: { count: 200, options: [2, 12], parts: 1, score: 15 },
@@ -612,15 +615,15 @@ const lt = {
612
615
  TEXT_COMPLETION: { count: 20, options: [0, 0], parts: 20, score: 15 },
613
616
  CCOMPOSITION: { count: 1, options: [0, 0], parts: 1, score: 70 },
614
617
  ECOMPOSITION: { count: 1, options: [0, 0], parts: 1, score: 70 }
615
- }, Y = (t) => ["SCHOICE", "MCHOICE", "JUDGE", "CHUNK_CHOICE", "CLOZE", "READTHENANSWER", "INFO_MATCHING"].includes(t), R = (t) => ["CLOZE", "READTHENANSWER", "INFO_MATCHING", "TEXT_COMPLETION"].includes(t), fn = (t) => t === "FILLBLANK" || t === "TEXT_COMPLETION", Rt = (t) => t === "CCOMPOSITION" || t === "ECOMPOSITION", me = { SCHOICE: "choice", MCHOICE: "choice", JUDGE: "judge", FILLBLANK: "fill", SHORTANSWER: "answer", MIXED: "composite", CLOZE: "cloze", READTHENANSWER: "reading", INFO_MATCHING: "matching", TEXT_COMPLETION: "completion", ECOMPOSITION: "english", CCOMPOSITION: "writing", CHUNK_CHOICE: "chunk" };
616
- function Ce(t) {
618
+ }, Y = (t) => ["SCHOICE", "MCHOICE", "JUDGE", "CHUNK_CHOICE", "CLOZE", "READTHENANSWER", "INFO_MATCHING"].includes(t), R = (t) => ["CLOZE", "READTHENANSWER", "INFO_MATCHING", "TEXT_COMPLETION"].includes(t), dn = (t) => t === "FILLBLANK" || t === "TEXT_COMPLETION", Rt = (t) => t === "CCOMPOSITION" || t === "ECOMPOSITION", Ce = { SCHOICE: "choice", MCHOICE: "choice", JUDGE: "judge", FILLBLANK: "fill", SHORTANSWER: "answer", MIXED: "composite", CLOZE: "cloze", READTHENANSWER: "reading", INFO_MATCHING: "matching", TEXT_COMPLETION: "completion", ECOMPOSITION: "english", CCOMPOSITION: "writing", CHUNK_CHOICE: "chunk" };
619
+ function Ie(t) {
617
620
  return { type: t, textVersion: 1, questions: [], layout: qt(0), fillNewLine: !1, optional: !1, choose: 1, optionalHeight: 200, scoreType: "LESS_SCORE" };
618
621
  }
619
- function dn(t) {
620
- return { id: crypto.randomUUID(), kind: me[t], title: It[t], answerHeight: 0, document: j(), reference: Ce(t) };
622
+ function hn(t) {
623
+ return { id: crypto.randomUUID(), kind: Ce[t], title: It[t], answerHeight: 0, document: j(), reference: Ie(t) };
621
624
  }
622
- function hn(t, e = 1, r) {
623
- const n = t === "MCHOICE" && ht(r);
625
+ function pn(t, e = 1, o) {
626
+ const n = t === "MCHOICE" && ht(o);
624
627
  return {
625
628
  type: t,
626
629
  start: e,
@@ -636,35 +639,35 @@ function hn(t, e = 1, r) {
636
639
  singleScore: 1
637
640
  };
638
641
  }
639
- function Ht(t, e, r) {
640
- const n = Array.from({ length: r }, (o, s) => ({ ...t.options[s] || { id: crypto.randomUUID() }, label: e === "JUDGE" ? ["T", "F"][s] : String.fromCharCode(65 + s) }));
641
- return { ...t, options: n, multiple: e === "MCHOICE" || e === "CHUNK_CHOICE", indefinite: !1, correctIds: t.correctIds.filter((o) => n.some((s) => s.id === o)).slice(0, e === "MCHOICE" || e === "CHUNK_CHOICE" ? r : 1) };
642
+ function Ht(t, e, o) {
643
+ const n = Array.from({ length: o }, (r, s) => ({ ...t.options[s] || { id: crypto.randomUUID() }, label: e === "JUDGE" ? ["T", "F"][s] : String.fromCharCode(65 + s) }));
644
+ return { ...t, options: n, multiple: e === "MCHOICE" || e === "CHUNK_CHOICE", indefinite: !1, correctIds: t.correctIds.filter((r) => n.some((s) => s.id === r)).slice(0, e === "MCHOICE" || e === "CHUNK_CHOICE" ? o : 1) };
642
645
  }
643
- function Ie(t, e, r, n = 4) {
644
- const o = crypto.randomUUID(), s = { ...Ht(at(0), r, n), id: o, label: t, score: e };
646
+ function ye(t, e, o, n = 4) {
647
+ const r = crypto.randomUUID(), s = { ...Ht(at(0), o, n), id: r, label: t, score: e };
645
648
  return {
646
- id: o,
649
+ id: r,
647
650
  label: t,
648
651
  score: e,
649
652
  width: 25,
650
653
  breakAfter: !1,
651
654
  height: 100,
652
- document: r === "SHORTANSWER" ? pt(t, e) : j(),
655
+ document: o === "SHORTANSWER" ? pt(t, e) : j(),
653
656
  choice: s,
654
- ...R(r) && r !== "TEXT_COMPLETION" ? { text: Pt(r, s) } : {}
657
+ ...R(o) && o !== "TEXT_COMPLETION" ? { text: Pt(o, s) } : {}
655
658
  };
656
659
  }
657
- function ye(t, e) {
658
- const r = crypto.randomUUID(), { type: n, score: o } = t, s = String(e), c = t.partCount || 1, i = Array.from({ length: R(n) || ["FILLBLANK", "SHORTANSWER"].includes(n) ? c : 0 }, (y, T) => Ie(R(n) ? String(e + T) : c === 1 ? s : `${s}.${T + 1}`, o, n, t.optionCount || 4)), a = { ...Ht(at(0), n, t.optionCount || 4), id: r, label: s, score: o, scoreType: t.scoreType, lessScore: t.lessScore };
660
+ function be(t, e) {
661
+ const o = crypto.randomUUID(), { type: n, score: r } = t, s = String(e), c = t.partCount || 1, i = Array.from({ length: R(n) || ["FILLBLANK", "SHORTANSWER"].includes(n) ? c : 0 }, (y, T) => ye(R(n) ? String(e + T) : c === 1 ? s : `${s}.${T + 1}`, r, n, t.optionCount || 4)), a = { ...Ht(at(0), n, t.optionCount || 4), id: o, label: s, score: r, scoreType: t.scoreType, lessScore: t.lessScore };
659
662
  return {
660
- id: r,
663
+ id: o,
661
664
  type: n,
662
665
  label: s,
663
- score: i.length ? Bt(i) : o,
666
+ score: i.length ? Bt(i) : r,
664
667
  choice: a,
665
668
  text: Pt(n, a, R(n)),
666
669
  parts: i,
667
- document: n === "ECOMPOSITION" ? { version: 1, content: { type: "doc", content: [...pt(s, o).content.content, ...be(t.lines, t.paperWidth || 600).content.content] } } : n === "CCOMPOSITION" ? pt(s, o) : j(),
670
+ document: n === "ECOMPOSITION" ? { version: 1, content: { type: "doc", content: [...pt(s, r).content.content, ...Ee(t.lines, t.paperWidth || 600).content.content] } } : n === "CCOMPOSITION" ? pt(s, r) : j(),
668
671
  height: n === "ECOMPOSITION" ? 50 * t.lines + 40 : 100,
669
672
  contentHeight: 38,
670
673
  characters: t.characters,
@@ -674,26 +677,26 @@ function ye(t, e) {
674
677
  singleScore: t.singleScore
675
678
  };
676
679
  }
677
- const Bt = (t) => t.some((e) => e.score === null) ? null : t.reduce((e, r) => e + (r.score || 0), 0);
680
+ const Bt = (t) => t.some((e) => e.score === null) ? null : t.reduce((e, o) => e + (o.score || 0), 0);
678
681
  function yt(t) {
679
- return t.questions.flatMap((e) => R(e.type) ? e.parts.map((r) => r.label) : [e.label]);
682
+ return t.questions.flatMap((e) => R(e.type) ? e.parts.map((o) => o.label) : [e.label]);
680
683
  }
681
- function pn(t) {
684
+ function gn(t) {
682
685
  return Math.max(0, ...yt(t).map(Number).filter(Number.isFinite)) + 1;
683
686
  }
684
- function gn(t, e, r = !1, n = !1) {
685
- const o = lt[e.type], s = Rt(e.type) ? 1 : e.end - e.start + 1;
686
- if (!Number.isInteger(e.start) || e.start < 1 || e.end > 1e3 || !Number.isInteger(s) || s < 1 || s > o.count) return `题号须为 1–1000,单次题数为 1–${o.count}`;
687
+ function mn(t, e, o = !1, n = !1) {
688
+ const r = lt[e.type], s = Rt(e.type) ? 1 : e.end - e.start + 1;
689
+ if (!Number.isInteger(e.start) || e.start < 1 || e.end > 1e3 || !Number.isInteger(s) || s < 1 || s > r.count) return `题号须为 1–1000,单次题数为 1–${r.count}`;
687
690
  if (t.type === "CCOMPOSITION" && t.questions.length) return "语文作文每组只能有一道题";
688
691
  if (t.optional) return "选做题组不能追加题目";
689
692
  const c = yt(t);
690
693
  if (Array.from({ length: s }, (i, a) => String(e.start + a)).some((i) => c.includes(i))) return "同一分组内,题号不能重复";
691
- if (Y(e.type) && (e.optionCount === null || !Number.isInteger(e.optionCount) || e.optionCount < o.options[0] || e.optionCount > o.options[1])) return `选项个数须为 ${o.options[0]}–${o.options[1]}`;
692
- if ((R(e.type) || ["FILLBLANK", "SHORTANSWER"].includes(e.type)) && (!e.partCount || !Number.isInteger(e.partCount) || e.partCount < 1 || e.partCount > o.parts)) return `子题/空数须为 1–${o.parts}`;
694
+ if (Y(e.type) && (e.optionCount === null || !Number.isInteger(e.optionCount) || e.optionCount < r.options[0] || e.optionCount > r.options[1])) return `选项个数须为 ${r.options[0]}–${r.options[1]}`;
695
+ if ((R(e.type) || ["FILLBLANK", "SHORTANSWER"].includes(e.type)) && (!e.partCount || !Number.isInteger(e.partCount) || e.partCount < 1 || e.partCount > r.parts)) return `子题/空数须为 1–${r.parts}`;
693
696
  if (R(e.type) && s % e.partCount !== 0) return "题目数量无法按子题数量均分,请重新设置";
694
697
  if (e.type === "INFO_MATCHING" && e.partCount > e.optionCount) return "选项个数需大于等于子题数量";
695
- if (e.type === "SHORTANSWER" && (r || t.optional) && e.partCount !== 1) return "网阅或选做题不支持小题";
696
- if (e.score !== null && (!Number.isFinite(e.score) || e.score < (n ? 0 : 0.5) || e.score > o.score || !Number.isInteger(e.score * 2))) return `分值须为 ${n ? 0 : 0.5}–${o.score} 分,按 0.5 分递增`;
698
+ if (e.type === "SHORTANSWER" && (o || t.optional) && e.partCount !== 1) return "网阅或选做题不支持小题";
699
+ if (e.score !== null && (!Number.isFinite(e.score) || e.score < (n ? 0 : 0.5) || e.score > r.score || !Number.isInteger(e.score * 2))) return `分值须为 ${n ? 0 : 0.5}–${r.score} 分,按 0.5 分递增`;
697
700
  if (e.type === "MCHOICE" && (e.lessScore < 0 || !Number.isInteger(e.lessScore * 2) || e.lessScore > (e.score || 0))) return "少选得分不能超过本题分值";
698
701
  if (e.type === "CHUNK_CHOICE") {
699
702
  if (!e.rightAnswers || !Number.isInteger(e.rightAnswers) || e.rightAnswers >= e.optionCount) return "正确答案个数需小于选项个数";
@@ -701,40 +704,40 @@ function gn(t, e, r = !1, n = !1) {
701
704
  }
702
705
  return e.type === "CCOMPOSITION" && (!Number.isInteger(e.characters) || e.characters < 1 || e.characters > 1200) ? "作文格数须为 1–1200" : e.type === "ECOMPOSITION" && (!Number.isInteger(e.lines) || e.lines < 1 || e.lines > 100) ? "作文行数须为 1–100" : e.score === null ? "请输入分值" : null;
703
706
  }
704
- function mn(t, e, r) {
705
- const n = R(e.type) ? e.partCount : 1, o = [];
706
- for (let i = e.start; i <= (Rt(e.type) ? e.start : e.end); i += n) o.push(ye(e, i));
707
- const s = [...t.questions], c = s.findIndex((i) => i.id === r || i.parts.some((a) => a.id === r));
708
- return s.splice(c < 0 ? s.length : c + 1, 0, ...o), { ...t, questions: s };
707
+ function Cn(t, e, o) {
708
+ const n = R(e.type) ? e.partCount : 1, r = [];
709
+ for (let i = e.start; i <= (Rt(e.type) ? e.start : e.end); i += n) r.push(be(e, i));
710
+ const s = [...t.questions], c = s.findIndex((i) => i.id === o || i.parts.some((a) => a.id === o));
711
+ return s.splice(c < 0 ? s.length : c + 1, 0, ...r), { ...t, questions: s };
709
712
  }
710
- function Cn(t) {
713
+ function In(t) {
711
714
  return t.questions.flatMap((e) => [e, ...e.parts]);
712
715
  }
713
- function In(t) {
714
- return t.questions.filter((e) => Y(e.type)).flatMap((e) => R(e.type) ? e.parts.map((r) => ({ ...r.choice, label: r.label, score: r.score })) : [{ ...e.choice, label: e.label, score: e.score }]);
716
+ function yn(t) {
717
+ return t.questions.filter((e) => Y(e.type)).flatMap((e) => R(e.type) ? e.parts.map((o) => ({ ...o.choice, label: o.label, score: o.score })) : [{ ...e.choice, label: e.label, score: e.score }]);
715
718
  }
716
- function yn(t, e) {
717
- const r = kt(t);
718
- return r.referenceData && (r.referenceData = { ...r.referenceData, questionId: r.id }), r.text && (r.text.groupId = `options:${r.id}`), r.label = String(e), r.choice.label = r.label, r.choice.contentTarget = null, r.choice.breakBefore = !1, r.parts.forEach((n, o) => {
719
- n.label = R(r.type) ? String(e + o) : r.parts.length === 1 ? r.label : `${e}.${o + 1}`, n.choice.label = n.label, n.choice.contentTarget = null, n.choice.breakBefore = !1;
720
- }), r.parts.forEach((n) => {
721
- n.text && (n.text.groupId = `options:${n.id}`), n.referenceData && (n.referenceData = { ...n.referenceData, questionId: n.id, questionPid: r.id });
722
- }), r.document = st(r.document, r.label, r.score), r.parts = r.parts.map((n) => ({ ...n, document: st(n.document, n.label, n.score) })), r;
719
+ function bn(t, e) {
720
+ const o = kt(t);
721
+ return o.referenceData && (o.referenceData = { ...o.referenceData, questionId: o.id }), o.text && (o.text.groupId = `options:${o.id}`), o.label = String(e), o.choice.label = o.label, o.choice.contentTarget = null, o.choice.breakBefore = !1, o.parts.forEach((n, r) => {
722
+ n.label = R(o.type) ? String(e + r) : o.parts.length === 1 ? o.label : `${e}.${r + 1}`, n.choice.label = n.label, n.choice.contentTarget = null, n.choice.breakBefore = !1;
723
+ }), o.parts.forEach((n) => {
724
+ n.text && (n.text.groupId = `options:${n.id}`), n.referenceData && (n.referenceData = { ...n.referenceData, questionId: n.id, questionPid: o.id });
725
+ }), o.document = st(o.document, o.label, o.score), o.parts = o.parts.map((n) => ({ ...n, document: st(n.document, n.label, n.score) })), o;
723
726
  }
724
- function bn(t) {
727
+ function En(t) {
725
728
  return Math.max(1, Math.floor((t - 6) / 31));
726
729
  }
727
- function be(t, e) {
730
+ function Ee(t, e) {
728
731
  return { version: 1, content: { type: "doc", content: Array.from({ length: t }, () => ({ type: "paragraph", attrs: { fixedLineHeight: 1152 / 25.4 }, content: [{ type: "text", text: " ".repeat(Math.max(1, Math.floor((e - 24) / 3))), marks: [{ type: "underline" }, { type: "textStyle", attrs: { fontFamily: "Times New Roman, serif", fontSize: "12px" } }] }] })) } };
729
732
  }
730
- function En(t, e, r = !1) {
731
- const n = t.questions.reduce((s, c) => s + (c.parts.length || 1), 0), o = e / n;
732
- return !n || !Number.isFinite(o) || o < (r ? 0 : 0.5) || !Number.isInteger(o * 2) || t.questions.some((s) => o > lt[s.type].score || o !== 0 && s.type === "CHUNK_CHOICE" && (s.rightAnswers || 0) * (s.singleScore || 0) > o) ? null : { ...t, questions: t.questions.map((s) => ({ ...s, score: o * (s.parts.length || 1), document: st(s.document, s.label, o * (s.parts.length || 1)), choice: { ...s.choice, score: o, lessScore: Math.min(s.choice.lessScore || 0, o) }, parts: s.parts.map((c) => ({ ...c, score: o, document: st(c.document, c.label, o), choice: { ...c.choice, score: o } })) })) };
733
+ function wn(t, e, o = !1) {
734
+ const n = t.questions.reduce((s, c) => s + (c.parts.length || 1), 0), r = e / n;
735
+ return !n || !Number.isFinite(r) || r < (o ? 0 : 0.5) || !Number.isInteger(r * 2) || t.questions.some((s) => r > lt[s.type].score || r !== 0 && s.type === "CHUNK_CHOICE" && (s.rightAnswers || 0) * (s.singleScore || 0) > r) ? null : { ...t, questions: t.questions.map((s) => ({ ...s, score: r * (s.parts.length || 1), document: st(s.document, s.label, r * (s.parts.length || 1)), choice: { ...s.choice, score: r, lessScore: Math.min(s.choice.lessScore || 0, r) }, parts: s.parts.map((c) => ({ ...c, score: r, document: st(c.document, c.label, r), choice: { ...c.choice, score: r } })) })) };
733
736
  }
734
- function wn(t, e) {
735
- return [...t <= 17 ? Array.from({ length: 18 }, (r, n) => 17 - n <= t ? String(17 - n) : "") : [...Array.from({ length: 7 }, (r, n) => 7 - n <= Math.floor(t / 10) ? `${7 - n}0` : ""), "", ...Array.from({ length: 10 }, (r, n) => String(9 - n))], e ? "0.5" : ""];
737
+ function Tn(t, e) {
738
+ return [...t <= 17 ? Array.from({ length: 18 }, (o, n) => 17 - n <= t ? String(17 - n) : "") : [...Array.from({ length: 7 }, (o, n) => 7 - n <= Math.floor(t / 10) ? `${7 - n}0` : ""), "", ...Array.from({ length: 10 }, (o, n) => String(9 - n))], e ? "0.5" : ""];
736
739
  }
737
- const Ee = ["000", "100", "110", "111", "101", "010", "011", "001"], Tn = (t) => Ee[t - 1], jt = {
740
+ const we = ["000", "100", "110", "111", "101", "010", "011", "001"], Sn = (t) => we[t - 1], jt = {
738
741
  CHINESE: [1],
739
742
  MATHS: [2],
740
743
  ENGLISH: [3],
@@ -750,7 +753,7 @@ const Ee = ["000", "100", "110", "111", "101", "010", "011", "001"], Tn = (t) =>
750
753
  ART: [1, 3, 4],
751
754
  SCIENCE: [2, 3, 4],
752
755
  HISTORY: [1, 2, 3, 4]
753
- }, we = {
756
+ }, Te = {
754
757
  语文: "CHINESE",
755
758
  数学: "MATHS",
756
759
  英语: "ENGLISH",
@@ -770,245 +773,245 @@ const Ee = ["000", "100", "110", "111", "101", "010", "011", "001"], Tn = (t) =>
770
773
  科学: "SCIENCE",
771
774
  历史: "HISTORY"
772
775
  };
773
- function Te(t) {
774
- return t?.subjectCode || (t?.courseCode && jt[t.courseCode] ? t.courseCode : we[t?.subject || ""]);
776
+ function Se(t) {
777
+ return t?.subjectCode || (t?.courseCode && jt[t.courseCode] ? t.courseCode : Te[t?.subject || ""]);
775
778
  }
776
- const nt = (t) => Math.round(t * 1e3) / 1e3, Sn = (t) => ({ x: nt(t.x), y: nt(t.y), width: nt(t.width), height: nt(t.height) });
777
- function An(t, e) {
778
- const r = Math.max(t.x, e.x), n = Math.max(t.y, e.y), o = Math.min(t.x + t.width, e.x + e.width) - r, s = Math.min(t.y + t.height, e.y + e.height) - n;
779
- return o > 0.01 && s > 0.01 ? { x: r, y: n, width: o, height: s } : void 0;
779
+ const nt = (t) => Math.round(t * 1e3) / 1e3, An = (t) => ({ x: nt(t.x), y: nt(t.y), width: nt(t.width), height: nt(t.height) });
780
+ function On(t, e) {
781
+ const o = Math.max(t.x, e.x), n = Math.max(t.y, e.y), r = Math.min(t.x + t.width, e.x + e.width) - o, s = Math.min(t.y + t.height, e.y + e.height) - n;
782
+ return r > 0.01 && s > 0.01 ? { x: o, y: n, width: r, height: s } : void 0;
780
783
  }
781
784
  const V = function(t, e) {
782
- let o = t;
785
+ let r = t;
783
786
  const s = X[e];
784
787
  let c = null, i = 0, a = null;
785
- const y = [], T = {}, m = function(h, I) {
786
- i = o * 4 + 17, c = (function(d) {
787
- const b = new Array(d);
788
- for (let E = 0; E < d; E += 1) {
789
- b[E] = new Array(d);
788
+ const y = [], T = {}, m = function(p, E) {
789
+ i = r * 4 + 17, c = (function(d) {
790
+ const I = new Array(d);
791
+ for (let w = 0; w < d; w += 1) {
792
+ I[w] = new Array(d);
790
793
  for (let S = 0; S < d; S += 1)
791
- b[E][S] = null;
794
+ I[w][S] = null;
792
795
  }
793
- return b;
794
- })(i), f(0, 0), f(i - 7, 0), f(0, i - 7), u(), l(), A(h, I), o >= 7 && g(h), a == null && (a = M(o, s, y)), C(a, I);
795
- }, f = function(h, I) {
796
+ return I;
797
+ })(i), f(0, 0), f(i - 7, 0), f(0, i - 7), u(), l(), A(p, E), r >= 7 && g(p), a == null && (a = $(r, s, y)), C(a, E);
798
+ }, f = function(p, E) {
796
799
  for (let d = -1; d <= 7; d += 1)
797
- if (!(h + d <= -1 || i <= h + d))
798
- for (let b = -1; b <= 7; b += 1)
799
- I + b <= -1 || i <= I + b || (0 <= d && d <= 6 && (b == 0 || b == 6) || 0 <= b && b <= 6 && (d == 0 || d == 6) || 2 <= d && d <= 4 && 2 <= b && b <= 4 ? c[h + d][I + b] = !0 : c[h + d][I + b] = !1);
800
- }, p = function() {
801
- let h = 0, I = 0;
800
+ if (!(p + d <= -1 || i <= p + d))
801
+ for (let I = -1; I <= 7; I += 1)
802
+ E + I <= -1 || i <= E + I || (0 <= d && d <= 6 && (I == 0 || I == 6) || 0 <= I && I <= 6 && (d == 0 || d == 6) || 2 <= d && d <= 4 && 2 <= I && I <= 4 ? c[p + d][E + I] = !0 : c[p + d][E + I] = !1);
803
+ }, h = function() {
804
+ let p = 0, E = 0;
802
805
  for (let d = 0; d < 8; d += 1) {
803
806
  m(!0, d);
804
- const b = F.getLostPoint(T);
805
- (d == 0 || h > b) && (h = b, I = d);
807
+ const I = F.getLostPoint(T);
808
+ (d == 0 || p > I) && (p = I, E = d);
806
809
  }
807
- return I;
810
+ return E;
808
811
  }, l = function() {
809
- for (let h = 8; h < i - 8; h += 1)
810
- c[h][6] == null && (c[h][6] = h % 2 == 0);
811
- for (let h = 8; h < i - 8; h += 1)
812
- c[6][h] == null && (c[6][h] = h % 2 == 0);
812
+ for (let p = 8; p < i - 8; p += 1)
813
+ c[p][6] == null && (c[p][6] = p % 2 == 0);
814
+ for (let p = 8; p < i - 8; p += 1)
815
+ c[6][p] == null && (c[6][p] = p % 2 == 0);
813
816
  }, u = function() {
814
- const h = F.getPatternPosition(o);
815
- for (let I = 0; I < h.length; I += 1)
816
- for (let d = 0; d < h.length; d += 1) {
817
- const b = h[I], E = h[d];
818
- if (c[b][E] == null)
817
+ const p = F.getPatternPosition(r);
818
+ for (let E = 0; E < p.length; E += 1)
819
+ for (let d = 0; d < p.length; d += 1) {
820
+ const I = p[E], w = p[d];
821
+ if (c[I][w] == null)
819
822
  for (let S = -2; S <= 2; S += 1)
820
823
  for (let N = -2; N <= 2; N += 1)
821
- S == -2 || S == 2 || N == -2 || N == 2 || S == 0 && N == 0 ? c[b + S][E + N] = !0 : c[b + S][E + N] = !1;
824
+ S == -2 || S == 2 || N == -2 || N == 2 || S == 0 && N == 0 ? c[I + S][w + N] = !0 : c[I + S][w + N] = !1;
822
825
  }
823
- }, g = function(h) {
824
- const I = F.getBCHTypeNumber(o);
826
+ }, g = function(p) {
827
+ const E = F.getBCHTypeNumber(r);
825
828
  for (let d = 0; d < 18; d += 1) {
826
- const b = !h && (I >> d & 1) == 1;
827
- c[Math.floor(d / 3)][d % 3 + i - 8 - 3] = b;
829
+ const I = !p && (E >> d & 1) == 1;
830
+ c[Math.floor(d / 3)][d % 3 + i - 8 - 3] = I;
828
831
  }
829
832
  for (let d = 0; d < 18; d += 1) {
830
- const b = !h && (I >> d & 1) == 1;
831
- c[d % 3 + i - 8 - 3][Math.floor(d / 3)] = b;
833
+ const I = !p && (E >> d & 1) == 1;
834
+ c[d % 3 + i - 8 - 3][Math.floor(d / 3)] = I;
832
835
  }
833
- }, A = function(h, I) {
834
- const d = s << 3 | I, b = F.getBCHTypeInfo(d);
835
- for (let E = 0; E < 15; E += 1) {
836
- const S = !h && (b >> E & 1) == 1;
837
- E < 6 ? c[E][8] = S : E < 8 ? c[E + 1][8] = S : c[i - 15 + E][8] = S;
836
+ }, A = function(p, E) {
837
+ const d = s << 3 | E, I = F.getBCHTypeInfo(d);
838
+ for (let w = 0; w < 15; w += 1) {
839
+ const S = !p && (I >> w & 1) == 1;
840
+ w < 6 ? c[w][8] = S : w < 8 ? c[w + 1][8] = S : c[i - 15 + w][8] = S;
838
841
  }
839
- for (let E = 0; E < 15; E += 1) {
840
- const S = !h && (b >> E & 1) == 1;
841
- E < 8 ? c[8][i - E - 1] = S : E < 9 ? c[8][15 - E - 1 + 1] = S : c[8][15 - E - 1] = S;
842
+ for (let w = 0; w < 15; w += 1) {
843
+ const S = !p && (I >> w & 1) == 1;
844
+ w < 8 ? c[8][i - w - 1] = S : w < 9 ? c[8][15 - w - 1 + 1] = S : c[8][15 - w - 1] = S;
842
845
  }
843
- c[i - 8][8] = !h;
844
- }, C = function(h, I) {
845
- let d = -1, b = i - 1, E = 7, S = 0;
846
- const N = F.getMaskFunction(I);
846
+ c[i - 8][8] = !p;
847
+ }, C = function(p, E) {
848
+ let d = -1, I = i - 1, w = 7, S = 0;
849
+ const N = F.getMaskFunction(E);
847
850
  for (let L = i - 1; L > 0; L -= 2)
848
851
  for (L == 6 && (L -= 1); ; ) {
849
852
  for (let _ = 0; _ < 2; _ += 1)
850
- if (c[b][L - _] == null) {
853
+ if (c[I][L - _] == null) {
851
854
  let k = !1;
852
- S < h.length && (k = (h[S] >>> E & 1) == 1), N(b, L - _) && (k = !k), c[b][L - _] = k, E -= 1, E == -1 && (S += 1, E = 7);
855
+ S < p.length && (k = (p[S] >>> w & 1) == 1), N(I, L - _) && (k = !k), c[I][L - _] = k, w -= 1, w == -1 && (S += 1, w = 7);
853
856
  }
854
- if (b += d, b < 0 || i <= b) {
855
- b -= d, d = -d;
857
+ if (I += d, I < 0 || i <= I) {
858
+ I -= d, d = -d;
856
859
  break;
857
860
  }
858
861
  }
859
- }, x = function(h, I) {
860
- let d = 0, b = 0, E = 0;
861
- const S = new Array(I.length), N = new Array(I.length);
862
- for (let $ = 0; $ < I.length; $ += 1) {
863
- const D = I[$].dataCount, H = I[$].totalCount - D;
864
- b = Math.max(b, D), E = Math.max(E, H), S[$] = new Array(D);
865
- for (let G = 0; G < S[$].length; G += 1)
866
- S[$][G] = 255 & h.getBuffer()[G + d];
862
+ }, M = function(p, E) {
863
+ let d = 0, I = 0, w = 0;
864
+ const S = new Array(E.length), N = new Array(E.length);
865
+ for (let x = 0; x < E.length; x += 1) {
866
+ const D = E[x].dataCount, H = E[x].totalCount - D;
867
+ I = Math.max(I, D), w = Math.max(w, H), S[x] = new Array(D);
868
+ for (let G = 0; G < S[x].length; G += 1)
869
+ S[x][G] = 255 & p.getBuffer()[G + d];
867
870
  d += D;
868
- const ft = F.getErrorCorrectPolynomial(H), bt = q(S[$], ft.getLength() - 1).mod(ft);
869
- N[$] = new Array(ft.getLength() - 1);
870
- for (let G = 0; G < N[$].length; G += 1) {
871
- const Et = G + bt.getLength() - N[$].length;
872
- N[$][G] = Et >= 0 ? bt.getAt(Et) : 0;
871
+ const ft = F.getErrorCorrectPolynomial(H), bt = q(S[x], ft.getLength() - 1).mod(ft);
872
+ N[x] = new Array(ft.getLength() - 1);
873
+ for (let G = 0; G < N[x].length; G += 1) {
874
+ const Et = G + bt.getLength() - N[x].length;
875
+ N[x][G] = Et >= 0 ? bt.getAt(Et) : 0;
873
876
  }
874
877
  }
875
878
  let L = 0;
876
- for (let $ = 0; $ < I.length; $ += 1)
877
- L += I[$].totalCount;
879
+ for (let x = 0; x < E.length; x += 1)
880
+ L += E[x].totalCount;
878
881
  const _ = new Array(L);
879
882
  let k = 0;
880
- for (let $ = 0; $ < b; $ += 1)
881
- for (let D = 0; D < I.length; D += 1)
882
- $ < S[D].length && (_[k] = S[D][$], k += 1);
883
- for (let $ = 0; $ < E; $ += 1)
884
- for (let D = 0; D < I.length; D += 1)
885
- $ < N[D].length && (_[k] = N[D][$], k += 1);
883
+ for (let x = 0; x < I; x += 1)
884
+ for (let D = 0; D < E.length; D += 1)
885
+ x < S[D].length && (_[k] = S[D][x], k += 1);
886
+ for (let x = 0; x < w; x += 1)
887
+ for (let D = 0; D < E.length; D += 1)
888
+ x < N[D].length && (_[k] = N[D][x], k += 1);
886
889
  return _;
887
- }, M = function(h, I, d) {
888
- const b = Nt.getRSBlocks(h, I), E = Mt();
890
+ }, $ = function(p, E, d) {
891
+ const I = Nt.getRSBlocks(p, E), w = Mt();
889
892
  for (let N = 0; N < d.length; N += 1) {
890
893
  const L = d[N];
891
- E.put(L.getMode(), 4), E.put(L.getLength(), F.getLengthInBits(L.getMode(), h)), L.write(E);
894
+ w.put(L.getMode(), 4), w.put(L.getLength(), F.getLengthInBits(L.getMode(), p)), L.write(w);
892
895
  }
893
896
  let S = 0;
894
- for (let N = 0; N < b.length; N += 1)
895
- S += b[N].dataCount;
896
- if (E.getLengthInBits() > S * 8)
897
- throw "code length overflow. (" + E.getLengthInBits() + ">" + S * 8 + ")";
898
- for (E.getLengthInBits() + 4 <= S * 8 && E.put(0, 4); E.getLengthInBits() % 8 != 0; )
899
- E.putBit(!1);
900
- for (; !(E.getLengthInBits() >= S * 8 || (E.put(236, 8), E.getLengthInBits() >= S * 8)); )
901
- E.put(17, 8);
902
- return x(E, b);
897
+ for (let N = 0; N < I.length; N += 1)
898
+ S += I[N].dataCount;
899
+ if (w.getLengthInBits() > S * 8)
900
+ throw "code length overflow. (" + w.getLengthInBits() + ">" + S * 8 + ")";
901
+ for (w.getLengthInBits() + 4 <= S * 8 && w.put(0, 4); w.getLengthInBits() % 8 != 0; )
902
+ w.putBit(!1);
903
+ for (; !(w.getLengthInBits() >= S * 8 || (w.put(236, 8), w.getLengthInBits() >= S * 8)); )
904
+ w.put(17, 8);
905
+ return M(w, I);
903
906
  };
904
- T.addData = function(h, I) {
905
- I = I || "Byte";
907
+ T.addData = function(p, E) {
908
+ E = E || "Byte";
906
909
  let d = null;
907
- switch (I) {
910
+ switch (E) {
908
911
  case "Numeric":
909
- d = Se(h);
912
+ d = Ae(p);
910
913
  break;
911
914
  case "Alphanumeric":
912
- d = Ae(h);
915
+ d = Oe(p);
913
916
  break;
914
917
  case "Byte":
915
- d = Oe(h);
918
+ d = Ne(p);
916
919
  break;
917
920
  case "Kanji":
918
- d = Ne(h);
921
+ d = Me(p);
919
922
  break;
920
923
  default:
921
- throw "mode:" + I;
924
+ throw "mode:" + E;
922
925
  }
923
926
  y.push(d), a = null;
924
- }, T.isDark = function(h, I) {
925
- if (h < 0 || i <= h || I < 0 || i <= I)
926
- throw h + "," + I;
927
- return c[h][I];
927
+ }, T.isDark = function(p, E) {
928
+ if (p < 0 || i <= p || E < 0 || i <= E)
929
+ throw p + "," + E;
930
+ return c[p][E];
928
931
  }, T.getModuleCount = function() {
929
932
  return i;
930
933
  }, T.make = function() {
931
- if (o < 1) {
932
- let h = 1;
933
- for (; h < 40; h++) {
934
- const I = Nt.getRSBlocks(h, s), d = Mt();
935
- for (let E = 0; E < y.length; E++) {
936
- const S = y[E];
937
- d.put(S.getMode(), 4), d.put(S.getLength(), F.getLengthInBits(S.getMode(), h)), S.write(d);
934
+ if (r < 1) {
935
+ let p = 1;
936
+ for (; p < 40; p++) {
937
+ const E = Nt.getRSBlocks(p, s), d = Mt();
938
+ for (let w = 0; w < y.length; w++) {
939
+ const S = y[w];
940
+ d.put(S.getMode(), 4), d.put(S.getLength(), F.getLengthInBits(S.getMode(), p)), S.write(d);
938
941
  }
939
- let b = 0;
940
- for (let E = 0; E < I.length; E++)
941
- b += I[E].dataCount;
942
- if (d.getLengthInBits() <= b * 8)
942
+ let I = 0;
943
+ for (let w = 0; w < E.length; w++)
944
+ I += E[w].dataCount;
945
+ if (d.getLengthInBits() <= I * 8)
943
946
  break;
944
947
  }
945
- o = h;
948
+ r = p;
946
949
  }
947
- m(!1, p());
948
- }, T.createTableTag = function(h, I) {
949
- h = h || 2, I = typeof I > "u" ? h * 4 : I;
950
+ m(!1, h());
951
+ }, T.createTableTag = function(p, E) {
952
+ p = p || 2, E = typeof E > "u" ? p * 4 : E;
950
953
  let d = "";
951
- d += '<table style="', d += " border-width: 0px; border-style: none;", d += " border-collapse: collapse;", d += " padding: 0px; margin: " + I + "px;", d += '">', d += "<tbody>";
952
- for (let b = 0; b < T.getModuleCount(); b += 1) {
954
+ d += '<table style="', d += " border-width: 0px; border-style: none;", d += " border-collapse: collapse;", d += " padding: 0px; margin: " + E + "px;", d += '">', d += "<tbody>";
955
+ for (let I = 0; I < T.getModuleCount(); I += 1) {
953
956
  d += "<tr>";
954
- for (let E = 0; E < T.getModuleCount(); E += 1)
955
- d += '<td style="', d += " border-width: 0px; border-style: none;", d += " border-collapse: collapse;", d += " padding: 0px; margin: 0px;", d += " width: " + h + "px;", d += " height: " + h + "px;", d += " background-color: ", d += T.isDark(b, E) ? "#000000" : "#ffffff", d += ";", d += '"/>';
957
+ for (let w = 0; w < T.getModuleCount(); w += 1)
958
+ d += '<td style="', d += " border-width: 0px; border-style: none;", d += " border-collapse: collapse;", d += " padding: 0px; margin: 0px;", d += " width: " + p + "px;", d += " height: " + p + "px;", d += " background-color: ", d += T.isDark(I, w) ? "#000000" : "#ffffff", d += ";", d += '"/>';
956
959
  d += "</tr>";
957
960
  }
958
961
  return d += "</tbody>", d += "</table>", d;
959
- }, T.createSvgTag = function(h, I, d, b) {
960
- let E = {};
961
- typeof arguments[0] == "object" && (E = arguments[0], h = E.cellSize, I = E.margin, d = E.alt, b = E.title), h = h || 2, I = typeof I > "u" ? h * 4 : I, d = typeof d == "string" ? { text: d } : d || {}, d.text = d.text || null, d.id = d.text ? d.id || "qrcode-description" : null, b = typeof b == "string" ? { text: b } : b || {}, b.text = b.text || null, b.id = b.text ? b.id || "qrcode-title" : null;
962
- const S = T.getModuleCount() * h + I * 2;
963
- let N, L, _, k, $ = "", D;
964
- for (D = "l" + h + ",0 0," + h + " -" + h + ",0 0,-" + h + "z ", $ += '<svg version="1.1" xmlns="http://www.w3.org/2000/svg"', $ += E.scalable ? "" : ' width="' + S + 'px" height="' + S + 'px"', $ += ' viewBox="0 0 ' + S + " " + S + '" ', $ += ' preserveAspectRatio="xMinYMin meet"', $ += b.text || d.text ? ' role="img" aria-labelledby="' + w([b.id, d.id].join(" ").trim()) + '"' : "", $ += ">", $ += b.text ? '<title id="' + w(b.id) + '">' + w(b.text) + "</title>" : "", $ += d.text ? '<description id="' + w(d.id) + '">' + w(d.text) + "</description>" : "", $ += '<rect width="100%" height="100%" fill="white" cx="0" cy="0"/>', $ += '<path d="', _ = 0; _ < T.getModuleCount(); _ += 1)
965
- for (k = _ * h + I, N = 0; N < T.getModuleCount(); N += 1)
966
- T.isDark(_, N) && (L = N * h + I, $ += "M" + L + "," + k + D);
967
- return $ += '" stroke="transparent" fill="black"/>', $ += "</svg>", $;
968
- }, T.createDataURL = function(h, I) {
969
- h = h || 2, I = typeof I > "u" ? h * 4 : I;
970
- const d = T.getModuleCount() * h + I * 2, b = I, E = d - I;
971
- return Le(d, d, function(S, N) {
972
- if (b <= S && S < E && b <= N && N < E) {
973
- const L = Math.floor((S - b) / h), _ = Math.floor((N - b) / h);
962
+ }, T.createSvgTag = function(p, E, d, I) {
963
+ let w = {};
964
+ typeof arguments[0] == "object" && (w = arguments[0], p = w.cellSize, E = w.margin, d = w.alt, I = w.title), p = p || 2, E = typeof E > "u" ? p * 4 : E, d = typeof d == "string" ? { text: d } : d || {}, d.text = d.text || null, d.id = d.text ? d.id || "qrcode-description" : null, I = typeof I == "string" ? { text: I } : I || {}, I.text = I.text || null, I.id = I.text ? I.id || "qrcode-title" : null;
965
+ const S = T.getModuleCount() * p + E * 2;
966
+ let N, L, _, k, x = "", D;
967
+ for (D = "l" + p + ",0 0," + p + " -" + p + ",0 0,-" + p + "z ", x += '<svg version="1.1" xmlns="http://www.w3.org/2000/svg"', x += w.scalable ? "" : ' width="' + S + 'px" height="' + S + 'px"', x += ' viewBox="0 0 ' + S + " " + S + '" ', x += ' preserveAspectRatio="xMinYMin meet"', x += I.text || d.text ? ' role="img" aria-labelledby="' + b([I.id, d.id].join(" ").trim()) + '"' : "", x += ">", x += I.text ? '<title id="' + b(I.id) + '">' + b(I.text) + "</title>" : "", x += d.text ? '<description id="' + b(d.id) + '">' + b(d.text) + "</description>" : "", x += '<rect width="100%" height="100%" fill="white" cx="0" cy="0"/>', x += '<path d="', _ = 0; _ < T.getModuleCount(); _ += 1)
968
+ for (k = _ * p + E, N = 0; N < T.getModuleCount(); N += 1)
969
+ T.isDark(_, N) && (L = N * p + E, x += "M" + L + "," + k + D);
970
+ return x += '" stroke="transparent" fill="black"/>', x += "</svg>", x;
971
+ }, T.createDataURL = function(p, E) {
972
+ p = p || 2, E = typeof E > "u" ? p * 4 : E;
973
+ const d = T.getModuleCount() * p + E * 2, I = E, w = d - E;
974
+ return _e(d, d, function(S, N) {
975
+ if (I <= S && S < w && I <= N && N < w) {
976
+ const L = Math.floor((S - I) / p), _ = Math.floor((N - I) / p);
974
977
  return T.isDark(_, L) ? 0 : 1;
975
978
  } else
976
979
  return 1;
977
980
  });
978
- }, T.createImgTag = function(h, I, d) {
979
- h = h || 2, I = typeof I > "u" ? h * 4 : I;
980
- const b = T.getModuleCount() * h + I * 2;
981
- let E = "";
982
- return E += "<img", E += ' src="', E += T.createDataURL(h, I), E += '"', E += ' width="', E += b, E += '"', E += ' height="', E += b, E += '"', d && (E += ' alt="', E += w(d), E += '"'), E += "/>", E;
981
+ }, T.createImgTag = function(p, E, d) {
982
+ p = p || 2, E = typeof E > "u" ? p * 4 : E;
983
+ const I = T.getModuleCount() * p + E * 2;
984
+ let w = "";
985
+ return w += "<img", w += ' src="', w += T.createDataURL(p, E), w += '"', w += ' width="', w += I, w += '"', w += ' height="', w += I, w += '"', d && (w += ' alt="', w += b(d), w += '"'), w += "/>", w;
983
986
  };
984
- const w = function(h) {
985
- let I = "";
986
- for (let d = 0; d < h.length; d += 1) {
987
- const b = h.charAt(d);
988
- switch (b) {
987
+ const b = function(p) {
988
+ let E = "";
989
+ for (let d = 0; d < p.length; d += 1) {
990
+ const I = p.charAt(d);
991
+ switch (I) {
989
992
  case "<":
990
- I += "&lt;";
993
+ E += "&lt;";
991
994
  break;
992
995
  case ">":
993
- I += "&gt;";
996
+ E += "&gt;";
994
997
  break;
995
998
  case "&":
996
- I += "&amp;";
999
+ E += "&amp;";
997
1000
  break;
998
1001
  case '"':
999
- I += "&quot;";
1002
+ E += "&quot;";
1000
1003
  break;
1001
1004
  default:
1002
- I += b;
1005
+ E += I;
1003
1006
  break;
1004
1007
  }
1005
1008
  }
1006
- return I;
1007
- }, O = function(h) {
1008
- h = typeof h > "u" ? 2 : h;
1009
- const d = T.getModuleCount() * 1 + h * 2, b = h, E = d - h;
1009
+ return E;
1010
+ }, O = function(p) {
1011
+ p = typeof p > "u" ? 2 : p;
1012
+ const d = T.getModuleCount() * 1 + p * 2, I = p, w = d - p;
1010
1013
  let S, N, L, _, k;
1011
- const $ = {
1014
+ const x = {
1012
1015
  "██": "█",
1013
1016
  "█ ": "▀",
1014
1017
  " █": "▄",
@@ -1021,72 +1024,72 @@ const V = function(t, e) {
1021
1024
  };
1022
1025
  let H = "";
1023
1026
  for (S = 0; S < d; S += 2) {
1024
- for (L = Math.floor((S - b) / 1), _ = Math.floor((S + 1 - b) / 1), N = 0; N < d; N += 1)
1025
- k = "█", b <= N && N < E && b <= S && S < E && T.isDark(L, Math.floor((N - b) / 1)) && (k = " "), b <= N && N < E && b <= S + 1 && S + 1 < E && T.isDark(_, Math.floor((N - b) / 1)) ? k += " " : k += "█", H += h < 1 && S + 1 >= E ? D[k] : $[k];
1027
+ for (L = Math.floor((S - I) / 1), _ = Math.floor((S + 1 - I) / 1), N = 0; N < d; N += 1)
1028
+ k = "█", I <= N && N < w && I <= S && S < w && T.isDark(L, Math.floor((N - I) / 1)) && (k = " "), I <= N && N < w && I <= S + 1 && S + 1 < w && T.isDark(_, Math.floor((N - I) / 1)) ? k += " " : k += "█", H += p < 1 && S + 1 >= w ? D[k] : x[k];
1026
1029
  H += `
1027
1030
  `;
1028
1031
  }
1029
- return d % 2 && h > 0 ? H.substring(0, H.length - d - 1) + Array(d + 1).join("▀") : H.substring(0, H.length - 1);
1032
+ return d % 2 && p > 0 ? H.substring(0, H.length - d - 1) + Array(d + 1).join("▀") : H.substring(0, H.length - 1);
1030
1033
  };
1031
- return T.createASCII = function(h, I) {
1032
- if (h = h || 1, h < 2)
1033
- return O(I);
1034
- h -= 1, I = typeof I > "u" ? h * 2 : I;
1035
- const d = T.getModuleCount() * h + I * 2, b = I, E = d - I;
1034
+ return T.createASCII = function(p, E) {
1035
+ if (p = p || 1, p < 2)
1036
+ return O(E);
1037
+ p -= 1, E = typeof E > "u" ? p * 2 : E;
1038
+ const d = T.getModuleCount() * p + E * 2, I = E, w = d - E;
1036
1039
  let S, N, L, _;
1037
- const k = Array(h + 1).join("██"), $ = Array(h + 1).join(" ");
1040
+ const k = Array(p + 1).join("██"), x = Array(p + 1).join(" ");
1038
1041
  let D = "", H = "";
1039
1042
  for (S = 0; S < d; S += 1) {
1040
- for (L = Math.floor((S - b) / h), H = "", N = 0; N < d; N += 1)
1041
- _ = 1, b <= N && N < E && b <= S && S < E && T.isDark(L, Math.floor((N - b) / h)) && (_ = 0), H += _ ? k : $;
1042
- for (L = 0; L < h; L += 1)
1043
+ for (L = Math.floor((S - I) / p), H = "", N = 0; N < d; N += 1)
1044
+ _ = 1, I <= N && N < w && I <= S && S < w && T.isDark(L, Math.floor((N - I) / p)) && (_ = 0), H += _ ? k : x;
1045
+ for (L = 0; L < p; L += 1)
1043
1046
  D += H + `
1044
1047
  `;
1045
1048
  }
1046
1049
  return D.substring(0, D.length - 1);
1047
- }, T.renderTo2dContext = function(h, I) {
1048
- I = I || 2;
1050
+ }, T.renderTo2dContext = function(p, E) {
1051
+ E = E || 2;
1049
1052
  const d = T.getModuleCount();
1050
- for (let b = 0; b < d; b++)
1051
- for (let E = 0; E < d; E++)
1052
- h.fillStyle = T.isDark(b, E) ? "black" : "white", h.fillRect(E * I, b * I, I, I);
1053
+ for (let I = 0; I < d; I++)
1054
+ for (let w = 0; w < d; w++)
1055
+ p.fillStyle = T.isDark(I, w) ? "black" : "white", p.fillRect(w * E, I * E, E, E);
1053
1056
  }, T;
1054
1057
  };
1055
1058
  V.stringToBytes = function(t) {
1056
1059
  const e = [];
1057
- for (let r = 0; r < t.length; r += 1) {
1058
- const n = t.charCodeAt(r);
1060
+ for (let o = 0; o < t.length; o += 1) {
1061
+ const n = t.charCodeAt(o);
1059
1062
  e.push(n & 255);
1060
1063
  }
1061
1064
  return e;
1062
1065
  };
1063
1066
  V.createStringToBytes = function(t, e) {
1064
- const r = (function() {
1065
- const o = xe(t), s = function() {
1066
- const a = o.read();
1067
+ const o = (function() {
1068
+ const r = $e(t), s = function() {
1069
+ const a = r.read();
1067
1070
  if (a == -1) throw "eof";
1068
1071
  return a;
1069
1072
  };
1070
1073
  let c = 0;
1071
1074
  const i = {};
1072
1075
  for (; ; ) {
1073
- const a = o.read();
1076
+ const a = r.read();
1074
1077
  if (a == -1) break;
1075
- const y = s(), T = s(), m = s(), f = String.fromCharCode(a << 8 | y), p = T << 8 | m;
1076
- i[f] = p, c += 1;
1078
+ const y = s(), T = s(), m = s(), f = String.fromCharCode(a << 8 | y), h = T << 8 | m;
1079
+ i[f] = h, c += 1;
1077
1080
  }
1078
1081
  if (c != e)
1079
1082
  throw c + " != " + e;
1080
1083
  return i;
1081
1084
  })(), n = 63;
1082
- return function(o) {
1085
+ return function(r) {
1083
1086
  const s = [];
1084
- for (let c = 0; c < o.length; c += 1) {
1085
- const i = o.charCodeAt(c);
1087
+ for (let c = 0; c < r.length; c += 1) {
1088
+ const i = r.charCodeAt(c);
1086
1089
  if (i < 128)
1087
1090
  s.push(i);
1088
1091
  else {
1089
- const a = r[o.charAt(c)];
1092
+ const a = o[r.charAt(c)];
1090
1093
  typeof a == "number" ? (a & 255) == a ? s.push(a) : (s.push(a >>> 8), s.push(a & 255)) : s.push(n);
1091
1094
  }
1092
1095
  }
@@ -1154,25 +1157,25 @@ const P = {
1154
1157
  [6, 32, 58, 84, 110, 136, 162],
1155
1158
  [6, 26, 54, 82, 110, 138, 166],
1156
1159
  [6, 30, 58, 86, 114, 142, 170]
1157
- ], e = 1335, r = 7973, n = 21522, o = {}, s = function(c) {
1160
+ ], e = 1335, o = 7973, n = 21522, r = {}, s = function(c) {
1158
1161
  let i = 0;
1159
1162
  for (; c != 0; )
1160
1163
  i += 1, c >>>= 1;
1161
1164
  return i;
1162
1165
  };
1163
- return o.getBCHTypeInfo = function(c) {
1166
+ return r.getBCHTypeInfo = function(c) {
1164
1167
  let i = c << 10;
1165
1168
  for (; s(i) - s(e) >= 0; )
1166
1169
  i ^= e << s(i) - s(e);
1167
1170
  return (c << 10 | i) ^ n;
1168
- }, o.getBCHTypeNumber = function(c) {
1171
+ }, r.getBCHTypeNumber = function(c) {
1169
1172
  let i = c << 12;
1170
- for (; s(i) - s(r) >= 0; )
1171
- i ^= r << s(i) - s(r);
1173
+ for (; s(i) - s(o) >= 0; )
1174
+ i ^= o << s(i) - s(o);
1172
1175
  return c << 12 | i;
1173
- }, o.getPatternPosition = function(c) {
1176
+ }, r.getPatternPosition = function(c) {
1174
1177
  return t[c - 1];
1175
- }, o.getMaskFunction = function(c) {
1178
+ }, r.getMaskFunction = function(c) {
1176
1179
  switch (c) {
1177
1180
  case U.PATTERN000:
1178
1181
  return function(i, a) {
@@ -1209,12 +1212,12 @@ const P = {
1209
1212
  default:
1210
1213
  throw "bad maskPattern:" + c;
1211
1214
  }
1212
- }, o.getErrorCorrectPolynomial = function(c) {
1215
+ }, r.getErrorCorrectPolynomial = function(c) {
1213
1216
  let i = q([1], 0);
1214
1217
  for (let a = 0; a < c; a += 1)
1215
1218
  i = i.multiply(q([1, K.gexp(a)], 0));
1216
1219
  return i;
1217
- }, o.getLengthInBits = function(c, i) {
1220
+ }, r.getLengthInBits = function(c, i) {
1218
1221
  if (1 <= i && i < 10)
1219
1222
  switch (c) {
1220
1223
  case P.MODE_NUMBER:
@@ -1256,23 +1259,23 @@ const P = {
1256
1259
  }
1257
1260
  else
1258
1261
  throw "type:" + i;
1259
- }, o.getLostPoint = function(c) {
1262
+ }, r.getLostPoint = function(c) {
1260
1263
  const i = c.getModuleCount();
1261
1264
  let a = 0;
1262
1265
  for (let m = 0; m < i; m += 1)
1263
1266
  for (let f = 0; f < i; f += 1) {
1264
- let p = 0;
1267
+ let h = 0;
1265
1268
  const l = c.isDark(m, f);
1266
1269
  for (let u = -1; u <= 1; u += 1)
1267
1270
  if (!(m + u < 0 || i <= m + u))
1268
1271
  for (let g = -1; g <= 1; g += 1)
1269
- f + g < 0 || i <= f + g || u == 0 && g == 0 || l == c.isDark(m + u, f + g) && (p += 1);
1270
- p > 5 && (a += 3 + p - 5);
1272
+ f + g < 0 || i <= f + g || u == 0 && g == 0 || l == c.isDark(m + u, f + g) && (h += 1);
1273
+ h > 5 && (a += 3 + h - 5);
1271
1274
  }
1272
1275
  for (let m = 0; m < i - 1; m += 1)
1273
1276
  for (let f = 0; f < i - 1; f += 1) {
1274
- let p = 0;
1275
- c.isDark(m, f) && (p += 1), c.isDark(m + 1, f) && (p += 1), c.isDark(m, f + 1) && (p += 1), c.isDark(m + 1, f + 1) && (p += 1), (p == 0 || p == 4) && (a += 3);
1277
+ let h = 0;
1278
+ c.isDark(m, f) && (h += 1), c.isDark(m + 1, f) && (h += 1), c.isDark(m, f + 1) && (h += 1), c.isDark(m + 1, f + 1) && (h += 1), (h == 0 || h == 4) && (a += 3);
1276
1279
  }
1277
1280
  for (let m = 0; m < i; m += 1)
1278
1281
  for (let f = 0; f < i - 6; f += 1)
@@ -1286,7 +1289,7 @@ const P = {
1286
1289
  c.isDark(f, m) && (y += 1);
1287
1290
  const T = Math.abs(100 * y / i / i - 50) / 5;
1288
1291
  return a += T * 10, a;
1289
- }, o;
1292
+ }, r;
1290
1293
  })(), K = (function() {
1291
1294
  const t = new Array(256), e = new Array(256);
1292
1295
  for (let n = 0; n < 8; n += 1)
@@ -1295,49 +1298,49 @@ const P = {
1295
1298
  t[n] = t[n - 4] ^ t[n - 5] ^ t[n - 6] ^ t[n - 8];
1296
1299
  for (let n = 0; n < 255; n += 1)
1297
1300
  e[t[n]] = n;
1298
- const r = {};
1299
- return r.glog = function(n) {
1301
+ const o = {};
1302
+ return o.glog = function(n) {
1300
1303
  if (n < 1)
1301
1304
  throw "glog(" + n + ")";
1302
1305
  return e[n];
1303
- }, r.gexp = function(n) {
1306
+ }, o.gexp = function(n) {
1304
1307
  for (; n < 0; )
1305
1308
  n += 255;
1306
1309
  for (; n >= 256; )
1307
1310
  n -= 255;
1308
1311
  return t[n];
1309
- }, r;
1312
+ }, o;
1310
1313
  })(), q = function(t, e) {
1311
1314
  if (typeof t.length > "u")
1312
1315
  throw t.length + "/" + e;
1313
- const r = (function() {
1314
- let o = 0;
1315
- for (; o < t.length && t[o] == 0; )
1316
- o += 1;
1317
- const s = new Array(t.length - o + e);
1318
- for (let c = 0; c < t.length - o; c += 1)
1319
- s[c] = t[c + o];
1316
+ const o = (function() {
1317
+ let r = 0;
1318
+ for (; r < t.length && t[r] == 0; )
1319
+ r += 1;
1320
+ const s = new Array(t.length - r + e);
1321
+ for (let c = 0; c < t.length - r; c += 1)
1322
+ s[c] = t[c + r];
1320
1323
  return s;
1321
1324
  })(), n = {};
1322
- return n.getAt = function(o) {
1323
- return r[o];
1325
+ return n.getAt = function(r) {
1326
+ return o[r];
1324
1327
  }, n.getLength = function() {
1325
- return r.length;
1326
- }, n.multiply = function(o) {
1327
- const s = new Array(n.getLength() + o.getLength() - 1);
1328
+ return o.length;
1329
+ }, n.multiply = function(r) {
1330
+ const s = new Array(n.getLength() + r.getLength() - 1);
1328
1331
  for (let c = 0; c < n.getLength(); c += 1)
1329
- for (let i = 0; i < o.getLength(); i += 1)
1330
- s[c + i] ^= K.gexp(K.glog(n.getAt(c)) + K.glog(o.getAt(i)));
1332
+ for (let i = 0; i < r.getLength(); i += 1)
1333
+ s[c + i] ^= K.gexp(K.glog(n.getAt(c)) + K.glog(r.getAt(i)));
1331
1334
  return q(s, 0);
1332
- }, n.mod = function(o) {
1333
- if (n.getLength() - o.getLength() < 0)
1335
+ }, n.mod = function(r) {
1336
+ if (n.getLength() - r.getLength() < 0)
1334
1337
  return n;
1335
- const s = K.glog(n.getAt(0)) - K.glog(o.getAt(0)), c = new Array(n.getLength());
1338
+ const s = K.glog(n.getAt(0)) - K.glog(r.getAt(0)), c = new Array(n.getLength());
1336
1339
  for (let i = 0; i < n.getLength(); i += 1)
1337
1340
  c[i] = n.getAt(i);
1338
- for (let i = 0; i < o.getLength(); i += 1)
1339
- c[i] ^= K.gexp(K.glog(o.getAt(i)) + s);
1340
- return q(c, 0).mod(o);
1341
+ for (let i = 0; i < r.getLength(); i += 1)
1342
+ c[i] ^= K.gexp(K.glog(r.getAt(i)) + s);
1343
+ return q(c, 0).mod(r);
1341
1344
  }, n;
1342
1345
  }, Nt = (function() {
1343
1346
  const t = [
@@ -1545,67 +1548,67 @@ const P = {
1545
1548
  [18, 75, 47, 31, 76, 48],
1546
1549
  [34, 54, 24, 34, 55, 25],
1547
1550
  [20, 45, 15, 61, 46, 16]
1548
- ], e = function(o, s) {
1551
+ ], e = function(r, s) {
1549
1552
  const c = {};
1550
- return c.totalCount = o, c.dataCount = s, c;
1551
- }, r = {}, n = function(o, s) {
1553
+ return c.totalCount = r, c.dataCount = s, c;
1554
+ }, o = {}, n = function(r, s) {
1552
1555
  switch (s) {
1553
1556
  case X.L:
1554
- return t[(o - 1) * 4 + 0];
1557
+ return t[(r - 1) * 4 + 0];
1555
1558
  case X.M:
1556
- return t[(o - 1) * 4 + 1];
1559
+ return t[(r - 1) * 4 + 1];
1557
1560
  case X.Q:
1558
- return t[(o - 1) * 4 + 2];
1561
+ return t[(r - 1) * 4 + 2];
1559
1562
  case X.H:
1560
- return t[(o - 1) * 4 + 3];
1563
+ return t[(r - 1) * 4 + 3];
1561
1564
  default:
1562
1565
  return;
1563
1566
  }
1564
1567
  };
1565
- return r.getRSBlocks = function(o, s) {
1566
- const c = n(o, s);
1568
+ return o.getRSBlocks = function(r, s) {
1569
+ const c = n(r, s);
1567
1570
  if (typeof c > "u")
1568
- throw "bad rs block @ typeNumber:" + o + "/errorCorrectionLevel:" + s;
1571
+ throw "bad rs block @ typeNumber:" + r + "/errorCorrectionLevel:" + s;
1569
1572
  const i = c.length / 3, a = [];
1570
1573
  for (let y = 0; y < i; y += 1) {
1571
1574
  const T = c[y * 3 + 0], m = c[y * 3 + 1], f = c[y * 3 + 2];
1572
- for (let p = 0; p < T; p += 1)
1575
+ for (let h = 0; h < T; h += 1)
1573
1576
  a.push(e(m, f));
1574
1577
  }
1575
1578
  return a;
1576
- }, r;
1579
+ }, o;
1577
1580
  })(), Mt = function() {
1578
1581
  const t = [];
1579
1582
  let e = 0;
1580
- const r = {};
1581
- return r.getBuffer = function() {
1583
+ const o = {};
1584
+ return o.getBuffer = function() {
1582
1585
  return t;
1583
- }, r.getAt = function(n) {
1584
- const o = Math.floor(n / 8);
1585
- return (t[o] >>> 7 - n % 8 & 1) == 1;
1586
- }, r.put = function(n, o) {
1587
- for (let s = 0; s < o; s += 1)
1588
- r.putBit((n >>> o - s - 1 & 1) == 1);
1589
- }, r.getLengthInBits = function() {
1586
+ }, o.getAt = function(n) {
1587
+ const r = Math.floor(n / 8);
1588
+ return (t[r] >>> 7 - n % 8 & 1) == 1;
1589
+ }, o.put = function(n, r) {
1590
+ for (let s = 0; s < r; s += 1)
1591
+ o.putBit((n >>> r - s - 1 & 1) == 1);
1592
+ }, o.getLengthInBits = function() {
1590
1593
  return e;
1591
- }, r.putBit = function(n) {
1592
- const o = Math.floor(e / 8);
1593
- t.length <= o && t.push(0), n && (t[o] |= 128 >>> e % 8), e += 1;
1594
- }, r;
1595
- }, Se = function(t) {
1596
- const e = P.MODE_NUMBER, r = t, n = {};
1594
+ }, o.putBit = function(n) {
1595
+ const r = Math.floor(e / 8);
1596
+ t.length <= r && t.push(0), n && (t[r] |= 128 >>> e % 8), e += 1;
1597
+ }, o;
1598
+ }, Ae = function(t) {
1599
+ const e = P.MODE_NUMBER, o = t, n = {};
1597
1600
  n.getMode = function() {
1598
1601
  return e;
1599
1602
  }, n.getLength = function(c) {
1600
- return r.length;
1603
+ return o.length;
1601
1604
  }, n.write = function(c) {
1602
- const i = r;
1605
+ const i = o;
1603
1606
  let a = 0;
1604
1607
  for (; a + 2 < i.length; )
1605
- c.put(o(i.substring(a, a + 3)), 10), a += 3;
1606
- a < i.length && (i.length - a == 1 ? c.put(o(i.substring(a, a + 1)), 4) : i.length - a == 2 && c.put(o(i.substring(a, a + 2)), 7));
1608
+ c.put(r(i.substring(a, a + 3)), 10), a += 3;
1609
+ a < i.length && (i.length - a == 1 ? c.put(r(i.substring(a, a + 1)), 4) : i.length - a == 2 && c.put(r(i.substring(a, a + 2)), 7));
1607
1610
  };
1608
- const o = function(c) {
1611
+ const r = function(c) {
1609
1612
  let i = 0;
1610
1613
  for (let a = 0; a < c.length; a += 1)
1611
1614
  i = i * 10 + s(c.charAt(a));
@@ -1616,23 +1619,23 @@ const P = {
1616
1619
  throw "illegal char :" + c;
1617
1620
  };
1618
1621
  return n;
1619
- }, Ae = function(t) {
1620
- const e = P.MODE_ALPHA_NUM, r = t, n = {};
1622
+ }, Oe = function(t) {
1623
+ const e = P.MODE_ALPHA_NUM, o = t, n = {};
1621
1624
  n.getMode = function() {
1622
1625
  return e;
1623
1626
  }, n.getLength = function(s) {
1624
- return r.length;
1627
+ return o.length;
1625
1628
  }, n.write = function(s) {
1626
- const c = r;
1629
+ const c = o;
1627
1630
  let i = 0;
1628
1631
  for (; i + 1 < c.length; )
1629
1632
  s.put(
1630
- o(c.charAt(i)) * 45 + o(c.charAt(i + 1)),
1633
+ r(c.charAt(i)) * 45 + r(c.charAt(i + 1)),
1631
1634
  11
1632
1635
  ), i += 2;
1633
- i < c.length && s.put(o(c.charAt(i)), 6);
1636
+ i < c.length && s.put(r(c.charAt(i)), 6);
1634
1637
  };
1635
- const o = function(s) {
1638
+ const r = function(s) {
1636
1639
  if ("0" <= s && s <= "9")
1637
1640
  return s.charCodeAt(0) - 48;
1638
1641
  if ("A" <= s && s <= "Z")
@@ -1661,29 +1664,29 @@ const P = {
1661
1664
  }
1662
1665
  };
1663
1666
  return n;
1664
- }, Oe = function(t) {
1665
- const e = P.MODE_8BIT_BYTE, r = V.stringToBytes(t), n = {};
1667
+ }, Ne = function(t) {
1668
+ const e = P.MODE_8BIT_BYTE, o = V.stringToBytes(t), n = {};
1666
1669
  return n.getMode = function() {
1667
1670
  return e;
1668
- }, n.getLength = function(o) {
1669
- return r.length;
1670
- }, n.write = function(o) {
1671
- for (let s = 0; s < r.length; s += 1)
1672
- o.put(r[s], 8);
1671
+ }, n.getLength = function(r) {
1672
+ return o.length;
1673
+ }, n.write = function(r) {
1674
+ for (let s = 0; s < o.length; s += 1)
1675
+ r.put(o[s], 8);
1673
1676
  }, n;
1674
- }, Ne = function(t) {
1675
- const e = P.MODE_KANJI, r = V.stringToBytes;
1677
+ }, Me = function(t) {
1678
+ const e = P.MODE_KANJI, o = V.stringToBytes;
1676
1679
  (function(s, c) {
1677
- const i = r(s);
1680
+ const i = o(s);
1678
1681
  if (i.length != 2 || (i[0] << 8 | i[1]) != c)
1679
1682
  throw "sjis not supported.";
1680
1683
  })("友", 38726);
1681
- const n = r(t), o = {};
1682
- return o.getMode = function() {
1684
+ const n = o(t), r = {};
1685
+ return r.getMode = function() {
1683
1686
  return e;
1684
- }, o.getLength = function(s) {
1687
+ }, r.getLength = function(s) {
1685
1688
  return ~~(n.length / 2);
1686
- }, o.write = function(s) {
1689
+ }, r.write = function(s) {
1687
1690
  const c = n;
1688
1691
  let i = 0;
1689
1692
  for (; i + 1 < c.length; ) {
@@ -1698,32 +1701,32 @@ const P = {
1698
1701
  }
1699
1702
  if (i < c.length)
1700
1703
  throw "illegal char at " + (i + 1);
1701
- }, o;
1704
+ }, r;
1702
1705
  }, Gt = function() {
1703
1706
  const t = [], e = {};
1704
- return e.writeByte = function(r) {
1705
- t.push(r & 255);
1706
- }, e.writeShort = function(r) {
1707
- e.writeByte(r), e.writeByte(r >>> 8);
1708
- }, e.writeBytes = function(r, n, o) {
1709
- n = n || 0, o = o || r.length;
1710
- for (let s = 0; s < o; s += 1)
1711
- e.writeByte(r[s + n]);
1712
- }, e.writeString = function(r) {
1713
- for (let n = 0; n < r.length; n += 1)
1714
- e.writeByte(r.charCodeAt(n));
1707
+ return e.writeByte = function(o) {
1708
+ t.push(o & 255);
1709
+ }, e.writeShort = function(o) {
1710
+ e.writeByte(o), e.writeByte(o >>> 8);
1711
+ }, e.writeBytes = function(o, n, r) {
1712
+ n = n || 0, r = r || o.length;
1713
+ for (let s = 0; s < r; s += 1)
1714
+ e.writeByte(o[s + n]);
1715
+ }, e.writeString = function(o) {
1716
+ for (let n = 0; n < o.length; n += 1)
1717
+ e.writeByte(o.charCodeAt(n));
1715
1718
  }, e.toByteArray = function() {
1716
1719
  return t;
1717
1720
  }, e.toString = function() {
1718
- let r = "";
1719
- r += "[";
1721
+ let o = "";
1722
+ o += "[";
1720
1723
  for (let n = 0; n < t.length; n += 1)
1721
- n > 0 && (r += ","), r += t[n];
1722
- return r += "]", r;
1724
+ n > 0 && (o += ","), o += t[n];
1725
+ return o += "]", o;
1723
1726
  }, e;
1724
- }, Me = function() {
1725
- let t = 0, e = 0, r = 0, n = "";
1726
- const o = {}, s = function(i) {
1727
+ }, xe = function() {
1728
+ let t = 0, e = 0, o = 0, n = "";
1729
+ const r = {}, s = function(i) {
1727
1730
  n += String.fromCharCode(c(i & 63));
1728
1731
  }, c = function(i) {
1729
1732
  if (i < 0)
@@ -1740,38 +1743,38 @@ const P = {
1740
1743
  return 47;
1741
1744
  throw "n:" + i;
1742
1745
  };
1743
- return o.writeByte = function(i) {
1744
- for (t = t << 8 | i & 255, e += 8, r += 1; e >= 6; )
1746
+ return r.writeByte = function(i) {
1747
+ for (t = t << 8 | i & 255, e += 8, o += 1; e >= 6; )
1745
1748
  s(t >>> e - 6), e -= 6;
1746
- }, o.flush = function() {
1747
- if (e > 0 && (s(t << 6 - e), t = 0, e = 0), r % 3 != 0) {
1748
- const i = 3 - r % 3;
1749
+ }, r.flush = function() {
1750
+ if (e > 0 && (s(t << 6 - e), t = 0, e = 0), o % 3 != 0) {
1751
+ const i = 3 - o % 3;
1749
1752
  for (let a = 0; a < i; a += 1)
1750
1753
  n += "=";
1751
1754
  }
1752
- }, o.toString = function() {
1755
+ }, r.toString = function() {
1753
1756
  return n;
1754
- }, o;
1755
- }, xe = function(t) {
1757
+ }, r;
1758
+ }, $e = function(t) {
1756
1759
  const e = t;
1757
- let r = 0, n = 0, o = 0;
1760
+ let o = 0, n = 0, r = 0;
1758
1761
  const s = {};
1759
1762
  s.read = function() {
1760
- for (; o < 8; ) {
1761
- if (r >= e.length) {
1762
- if (o == 0)
1763
+ for (; r < 8; ) {
1764
+ if (o >= e.length) {
1765
+ if (r == 0)
1763
1766
  return -1;
1764
- throw "unexpected end of file./" + o;
1767
+ throw "unexpected end of file./" + r;
1765
1768
  }
1766
- const a = e.charAt(r);
1767
- if (r += 1, a == "=")
1768
- return o = 0, -1;
1769
+ const a = e.charAt(o);
1770
+ if (o += 1, a == "=")
1771
+ return r = 0, -1;
1769
1772
  if (a.match(/^\s$/))
1770
1773
  continue;
1771
- n = n << 6 | c(a.charCodeAt(0)), o += 6;
1774
+ n = n << 6 | c(a.charCodeAt(0)), r += 6;
1772
1775
  }
1773
- const i = n >>> o - 8 & 255;
1774
- return o -= 8, i;
1776
+ const i = n >>> r - 8 & 255;
1777
+ return r -= 8, i;
1775
1778
  };
1776
1779
  const c = function(i) {
1777
1780
  if (65 <= i && i <= 90)
@@ -1787,12 +1790,12 @@ const P = {
1787
1790
  throw "c:" + i;
1788
1791
  };
1789
1792
  return s;
1790
- }, $e = function(t, e) {
1791
- const r = t, n = e, o = new Array(t * e), s = {};
1793
+ }, Le = function(t, e) {
1794
+ const o = t, n = e, r = new Array(t * e), s = {};
1792
1795
  s.setPixel = function(y, T, m) {
1793
- o[T * r + y] = m;
1796
+ r[T * o + y] = m;
1794
1797
  }, s.write = function(y) {
1795
- y.writeString("GIF87a"), y.writeShort(r), y.writeShort(n), y.writeByte(128), y.writeByte(0), y.writeByte(0), y.writeByte(0), y.writeByte(0), y.writeByte(0), y.writeByte(255), y.writeByte(255), y.writeByte(255), y.writeString(","), y.writeShort(0), y.writeShort(0), y.writeShort(r), y.writeShort(n), y.writeByte(0);
1798
+ y.writeString("GIF87a"), y.writeShort(o), y.writeShort(n), y.writeByte(128), y.writeByte(0), y.writeByte(0), y.writeByte(0), y.writeByte(0), y.writeByte(0), y.writeByte(255), y.writeByte(255), y.writeByte(255), y.writeString(","), y.writeShort(0), y.writeShort(0), y.writeShort(o), y.writeShort(n), y.writeByte(0);
1796
1799
  const T = 2, m = i(T);
1797
1800
  y.writeByte(T);
1798
1801
  let f = 0;
@@ -1803,31 +1806,31 @@ const P = {
1803
1806
  const c = function(y) {
1804
1807
  const T = y;
1805
1808
  let m = 0, f = 0;
1806
- const p = {};
1807
- return p.write = function(l, u) {
1809
+ const h = {};
1810
+ return h.write = function(l, u) {
1808
1811
  if (l >>> u)
1809
1812
  throw "length over";
1810
1813
  for (; m + u >= 8; )
1811
1814
  T.writeByte(255 & (l << m | f)), u -= 8 - m, l >>>= 8 - m, f = 0, m = 0;
1812
1815
  f = l << m | f, m = m + u;
1813
- }, p.flush = function() {
1816
+ }, h.flush = function() {
1814
1817
  m > 0 && T.writeByte(f);
1815
- }, p;
1818
+ }, h;
1816
1819
  }, i = function(y) {
1817
1820
  const T = 1 << y, m = (1 << y) + 1;
1818
1821
  let f = y + 1;
1819
- const p = a();
1822
+ const h = a();
1820
1823
  for (let C = 0; C < T; C += 1)
1821
- p.add(String.fromCharCode(C));
1822
- p.add(String.fromCharCode(T)), p.add(String.fromCharCode(m));
1824
+ h.add(String.fromCharCode(C));
1825
+ h.add(String.fromCharCode(T)), h.add(String.fromCharCode(m));
1823
1826
  const l = Gt(), u = c(l);
1824
1827
  u.write(T, f);
1825
- let g = 0, A = String.fromCharCode(o[g]);
1826
- for (g += 1; g < o.length; ) {
1827
- const C = String.fromCharCode(o[g]);
1828
- g += 1, p.contains(A + C) ? A = A + C : (u.write(p.indexOf(A), f), p.size() < 4095 && (p.size() == 1 << f && (f += 1), p.add(A + C)), A = C);
1828
+ let g = 0, A = String.fromCharCode(r[g]);
1829
+ for (g += 1; g < r.length; ) {
1830
+ const C = String.fromCharCode(r[g]);
1831
+ g += 1, h.contains(A + C) ? A = A + C : (u.write(h.indexOf(A), f), h.size() < 4095 && (h.size() == 1 << f && (f += 1), h.add(A + C)), A = C);
1829
1832
  }
1830
- return u.write(p.indexOf(A), f), u.write(m, f), u.flush(), l.toByteArray();
1833
+ return u.write(h.indexOf(A), f), u.write(m, f), u.flush(), l.toByteArray();
1831
1834
  }, a = function() {
1832
1835
  const y = {};
1833
1836
  let T = 0;
@@ -1845,74 +1848,74 @@ const P = {
1845
1848
  }, m;
1846
1849
  };
1847
1850
  return s;
1848
- }, Le = function(t, e, r) {
1849
- const n = $e(t, e);
1851
+ }, _e = function(t, e, o) {
1852
+ const n = Le(t, e);
1850
1853
  for (let i = 0; i < e; i += 1)
1851
1854
  for (let a = 0; a < t; a += 1)
1852
- n.setPixel(a, i, r(a, i));
1853
- const o = Gt();
1854
- n.write(o);
1855
- const s = Me(), c = o.toByteArray();
1855
+ n.setPixel(a, i, o(a, i));
1856
+ const r = Gt();
1857
+ n.write(r);
1858
+ const s = xe(), c = r.toByteArray();
1856
1859
  for (let i = 0; i < c.length; i += 1)
1857
1860
  s.writeByte(c[i]);
1858
1861
  return s.flush(), "data:image/gif;base64," + s;
1859
1862
  };
1860
1863
  V.stringToBytes;
1861
- function _e(t) {
1862
- const e = V(0, "M"), r = Array.from(new TextEncoder().encode(t), (s) => String.fromCharCode(s)).join("");
1863
- e.addData(r, /^\d+$/.test(t) ? "Numeric" : "Byte"), e.make();
1864
+ function De(t) {
1865
+ const e = V(0, "M"), o = Array.from(new TextEncoder().encode(t), (s) => String.fromCharCode(s)).join("");
1866
+ e.addData(o, /^\d+$/.test(t) ? "Numeric" : "Byte"), e.make();
1864
1867
  const n = e.getModuleCount();
1865
- let o = "";
1866
- for (let s = 0; s < n; s++) for (let c = 0; c < n; c++) e.isDark(s, c) && (o += `M${c} ${s}h1v1h-1z`);
1867
- return { count: n, path: o };
1868
+ let r = "";
1869
+ for (let s = 0; s < n; s++) for (let c = 0; c < n; c++) e.isDark(s, c) && (r += `M${c} ${s}h1v1h-1z`);
1870
+ return { count: n, path: r };
1868
1871
  }
1869
1872
  class ut extends Error {
1870
- constructor(r) {
1871
- super(r[0]?.message || "题卡数据无效");
1873
+ constructor(o) {
1874
+ super(o[0]?.message || "题卡数据无效");
1872
1875
  wt(this, "issues");
1873
- this.name = "AnswerSheetDataError", this.issues = r;
1876
+ this.name = "AnswerSheetDataError", this.issues = o;
1874
1877
  }
1875
1878
  }
1876
- function De(t, e) {
1877
- const r = (l, u = "题卡数据结构无效") => {
1879
+ function ke(t, e) {
1880
+ const o = (l, u = "题卡数据结构无效") => {
1878
1881
  throw new ut([{ code: "INVALID_DATA", path: l, message: u }]);
1879
- }, n = (l, u) => !l || typeof l != "object" || Array.isArray(l) ? r(u) : l, o = (l, u) => Array.isArray(l) ? l : r(u), s = (l, u) => {
1880
- typeof l != "string" && r(u);
1882
+ }, n = (l, u) => !l || typeof l != "object" || Array.isArray(l) ? o(u) : l, r = (l, u) => Array.isArray(l) ? l : o(u), s = (l, u) => {
1883
+ typeof l != "string" && o(u);
1881
1884
  }, c = (l, u, g = 0, A = 1e5) => {
1882
- (typeof l != "number" || !Number.isFinite(l) || l < g || l > A) && r(u);
1885
+ (typeof l != "number" || !Number.isFinite(l) || l < g || l > A) && o(u);
1883
1886
  }, i = (l, u) => {
1884
1887
  n(l, u);
1885
1888
  const g = e.validateDocument(l);
1886
- g.length && r(u, g[0]);
1889
+ g.length && o(u, g[0]);
1887
1890
  }, a = (l, u) => {
1888
1891
  const g = n(l, u);
1889
- if (s(g.id, `${u}.id`), s(g.label, `${u}.label`), (typeof g.multiple != "boolean" || typeof g.breakBefore != "boolean") && r(u), g.contentTarget !== void 0 && g.contentTarget !== null) {
1892
+ if (s(g.id, `${u}.id`), s(g.label, `${u}.label`), (typeof g.multiple != "boolean" || typeof g.breakBefore != "boolean") && o(u), g.contentTarget !== void 0 && g.contentTarget !== null) {
1890
1893
  const A = n(g.contentTarget, `${u}.contentTarget`);
1891
- s(A.groupId, `${u}.contentTarget.groupId`), o(A.optionIds, `${u}.contentTarget.optionIds`).forEach((C, x) => s(C, `${u}.contentTarget.optionIds.${x}`));
1894
+ s(A.groupId, `${u}.contentTarget.groupId`), r(A.optionIds, `${u}.contentTarget.optionIds`).forEach((C, M) => s(C, `${u}.contentTarget.optionIds.${M}`));
1892
1895
  }
1893
- o(g.options, `${u}.options`).forEach((A, C) => {
1894
- const x = n(A, `${u}.options.${C}`);
1895
- s(x.id, `${u}.options.${C}.id`), s(x.label, `${u}.options.${C}.label`);
1896
- }), o(g.correctIds, `${u}.correctIds`).forEach((A, C) => s(A, `${u}.correctIds.${C}`));
1896
+ r(g.options, `${u}.options`).forEach((A, C) => {
1897
+ const M = n(A, `${u}.options.${C}`);
1898
+ s(M.id, `${u}.options.${C}.id`), s(M.label, `${u}.options.${C}.label`);
1899
+ }), r(g.correctIds, `${u}.correctIds`).forEach((A, C) => s(A, `${u}.correctIds.${C}`));
1897
1900
  }, y = (l, u) => {
1898
1901
  const g = n(l, u);
1899
- (!["row", "column"].includes(String(g.direction)) || !["concentrated", "distributed", "stem", "option"].includes(String(g.presentation)) || !["box", "check", "bubble"].includes(String(g.marker))) && r(u), c(g.rowsPerColumn, `${u}.rowsPerColumn`, 1, 5), c(g.rowGap, `${u}.rowGap`, 0, 64), c(g.columnGap, `${u}.columnGap`, 0, 64), o(g.questions, `${u}.questions`).forEach((A, C) => a(A, `${u}.questions.${C}`));
1902
+ (!["row", "column"].includes(String(g.direction)) || !["concentrated", "distributed", "stem", "option"].includes(String(g.presentation)) || !["box", "check", "bubble"].includes(String(g.marker))) && o(u), c(g.rowsPerColumn, `${u}.rowsPerColumn`, 1, 5), c(g.rowGap, `${u}.rowGap`, 0, 64), c(g.columnGap, `${u}.columnGap`, 0, 64), r(g.questions, `${u}.questions`).forEach((A, C) => a(A, `${u}.questions.${C}`));
1900
1903
  }, T = /* @__PURE__ */ new WeakSet(), m = (l, u) => {
1901
1904
  if (!(!l || typeof l != "object")) {
1902
- if (T.has(l)) return r(u, "题卡必须是无循环引用的 JSON 数据");
1905
+ if (T.has(l)) return o(u, "题卡必须是无循环引用的 JSON 数据");
1903
1906
  T.add(l), Object.entries(l).forEach(([g, A]) => m(A, `${u}.${g}`)), T.delete(l);
1904
1907
  }
1905
1908
  }, f = n(t, "");
1906
- if (f.version !== 1 && r("version", "不支持的题卡数据版本"), s(f.title, "title"), f.usage !== void 0 && !["exam", "homework"].includes(String(f.usage)) && r("usage"), ["questionCard", "scanMarking", "halfPoint", "mergeObjective"].forEach((l) => {
1907
- f[l] !== void 0 && typeof f[l] != "boolean" && r(l);
1908
- }), ["a4", "a3-two", "a3-three"].includes(String(f.preset)) || r("preset"), c(f.margin, "margin", 0, 100), c(f.gap, "gap", 0, 100), f.creation) {
1909
+ if (f.version !== 1 && o("version", "不支持的题卡数据版本"), s(f.title, "title"), f.usage !== void 0 && !["exam", "homework"].includes(String(f.usage)) && o("usage"), ["questionCard", "duplex", "scanMarking", "halfPoint", "mergeObjective"].forEach((l) => {
1910
+ f[l] !== void 0 && typeof f[l] != "boolean" && o(l);
1911
+ }), ["a4", "a3-two", "a3-three"].includes(String(f.preset)) || o("preset"), c(f.margin, "margin", 0, 100), c(f.gap, "gap", 0, 100), f.creation) {
1909
1912
  const l = n(f.creation, "creation");
1910
- ["template", "exam"].includes(String(l.mode)) || r("creation.mode"), ["name", "grade", "subject"].forEach((u) => s(l[u], `creation.${u}`));
1911
- for (const u of ["gradeCode", "courseCode", "subjectCode"]) l[u] !== void 0 && (typeof l[u] != "string" || !l[u].trim()) && r(`creation.${u}`);
1912
- l.phaseCode !== void 0 && !["P", "J", "S"].includes(String(l.phaseCode)) && r("creation.phaseCode"), l.createMode !== void 0 && !["MANUALLY", "IMPORTED", "THIRD"].includes(String(l.createMode)) && r("creation.createMode");
1913
+ ["template", "exam"].includes(String(l.mode)) || o("creation.mode"), ["name", "grade", "subject"].forEach((u) => s(l[u], `creation.${u}`));
1914
+ for (const u of ["gradeCode", "courseCode", "subjectCode"]) l[u] !== void 0 && (typeof l[u] != "string" || !l[u].trim()) && o(`creation.${u}`);
1915
+ l.phaseCode !== void 0 && !["P", "J", "S"].includes(String(l.phaseCode)) && o("creation.phaseCode"), l.createMode !== void 0 && !["MANUALLY", "IMPORTED", "THIRD"].includes(String(l.createMode)) && o("creation.createMode");
1913
1916
  for (const u of ["id", "exampaperId"]) if (l[u] !== void 0) {
1914
1917
  const g = l[u];
1915
- typeof g == "string" && g.trim() || typeof g == "number" && Number.isSafeInteger(g) && g >= 0 || r(`creation.${u}`);
1918
+ typeof g == "string" && g.trim() || typeof g == "number" && Number.isSafeInteger(g) && g >= 0 || o(`creation.${u}`);
1916
1919
  }
1917
1920
  }
1918
1921
  if (f.paperTitle) {
@@ -1921,16 +1924,16 @@ function De(t, e) {
1921
1924
  }
1922
1925
  if (f.header) {
1923
1926
  const l = n(f.header, "header");
1924
- ["code", "school"].includes(String(l.kaohao)) || r("header.kaohao"), c(l.weishu, "header.weishu", 1, 20), l.tiaomaStyle !== void 0 && ![1, 2].includes(l.tiaomaStyle) && r("header.tiaomaStyle"), l.classText !== void 0 && typeof l.classText != "boolean" && r("header.classText");
1927
+ ["code", "school"].includes(String(l.kaohao)) || o("header.kaohao"), c(l.weishu, "header.weishu", 1, 20), l.tiaomaStyle !== void 0 && ![1, 2].includes(l.tiaomaStyle) && o("header.tiaomaStyle"), l.classText !== void 0 && typeof l.classText != "boolean" && o("header.classText");
1925
1928
  }
1926
1929
  if (f.recognition !== void 0) {
1927
1930
  const l = n(f.recognition, "recognition");
1928
- for (const u of ["examQrCode", "subjectMarkers", "pointBlack"]) l[u] !== void 0 && typeof l[u] != "boolean" && r(`recognition.${u}`);
1931
+ for (const u of ["examQrCode", "subjectMarkers", "pointBlack"]) l[u] !== void 0 && typeof l[u] != "boolean" && o(`recognition.${u}`);
1929
1932
  }
1930
- o(f.blocks, "blocks").forEach((l, u) => {
1933
+ r(f.blocks, "blocks").forEach((l, u) => {
1931
1934
  const g = `blocks.${u}`, A = n(l, g);
1932
1935
  if (s(A.id, `${g}.id`), s(A.title, `${g}.title`), c(A.answerHeight, `${g}.answerHeight`), i(A.document, `${g}.document`), A.kind === "area") {
1933
- (!["forbiden", "editArea"].includes(String(A.areaType)) || A.reference || A.choices || A.exercise) && r(`${g}.areaType`), c(A.answerHeight, `${g}.answerHeight`, 100, 4e3);
1936
+ (!["forbiden", "editArea"].includes(String(A.areaType)) || A.reference || A.choices || A.exercise) && o(`${g}.areaType`), c(A.answerHeight, `${g}.answerHeight`, 100, 4e3);
1934
1937
  return;
1935
1938
  }
1936
1939
  if (!A.reference) {
@@ -1938,108 +1941,108 @@ function De(t, e) {
1938
1941
  y(A.choices, `${g}.choices`);
1939
1942
  return;
1940
1943
  }
1941
- r(`${g}.reference`, "请使用包含 reference 题目结构的制卡数据");
1944
+ o(`${g}.reference`, "请使用包含 reference 题目结构的制卡数据");
1942
1945
  }
1943
1946
  const C = n(A.reference, `${g}.reference`);
1944
- C.material !== void 0 && i(C.material, `${g}.reference.material`), C.textVersion !== void 0 && C.textVersion !== 1 && r(`${g}.reference.textVersion`), Object.hasOwn(It, String(C.type)) || r(`${g}.reference.type`), y(C.layout, `${g}.reference.layout`), c(C.optionalHeight, `${g}.reference.optionalHeight`), o(C.questions, `${g}.reference.questions`).forEach((x, M) => {
1945
- const w = `${g}.reference.questions.${M}`, O = n(x, w);
1946
- Object.hasOwn(lt, String(O.type)) || r(`${w}.type`), s(O.id, `${w}.id`), s(O.label, `${w}.label`), a(O.choice, `${w}.choice`), ["height", "contentHeight", "characters", "lines"].forEach((I) => c(O[I], `${w}.${I}`)), i(O.document, `${w}.document`);
1947
- const h = (I, d) => {
1948
- if (!I) return;
1949
- const b = n(I, d);
1950
- i(b.content, `${d}.content`), n(b.layout, `${d}.layout`), s(b.groupId, `${d}.groupId`), o(b.itemsContent, `${d}.itemsContent`).forEach((E, S) => {
1951
- const N = n(E, `${d}.itemsContent.${S}`);
1947
+ C.material !== void 0 && i(C.material, `${g}.reference.material`), C.textVersion !== void 0 && C.textVersion !== 1 && o(`${g}.reference.textVersion`), Object.hasOwn(It, String(C.type)) || o(`${g}.reference.type`), y(C.layout, `${g}.reference.layout`), c(C.optionalHeight, `${g}.reference.optionalHeight`), r(C.questions, `${g}.reference.questions`).forEach((M, $) => {
1948
+ const b = `${g}.reference.questions.${$}`, O = n(M, b);
1949
+ Object.hasOwn(lt, String(O.type)) || o(`${b}.type`), s(O.id, `${b}.id`), s(O.label, `${b}.label`), a(O.choice, `${b}.choice`), ["height", "contentHeight", "characters", "lines"].forEach((E) => c(O[E], `${b}.${E}`)), i(O.document, `${b}.document`);
1950
+ const p = (E, d) => {
1951
+ if (!E) return;
1952
+ const I = n(E, d);
1953
+ i(I.content, `${d}.content`), n(I.layout, `${d}.layout`), s(I.groupId, `${d}.groupId`), r(I.itemsContent, `${d}.itemsContent`).forEach((w, S) => {
1954
+ const N = n(w, `${d}.itemsContent.${S}`);
1952
1955
  s(N.id, `${d}.itemsContent.${S}.id`), s(N.key, `${d}.itemsContent.${S}.key`), i(N.content, `${d}.itemsContent.${S}.content`);
1953
1956
  });
1954
1957
  };
1955
- h(O.text, `${w}.text`), o(O.parts, `${w}.parts`).forEach((I, d) => {
1956
- const b = `${w}.parts.${d}`, E = n(I, b);
1957
- s(E.id, `${b}.id`), s(E.label, `${b}.label`), c(E.width, `${b}.width`), c(E.height, `${b}.height`), i(E.document, `${b}.document`), a(E.choice, `${b}.choice`), h(E.text, `${b}.text`);
1958
+ p(O.text, `${b}.text`), r(O.parts, `${b}.parts`).forEach((E, d) => {
1959
+ const I = `${b}.parts.${d}`, w = n(E, I);
1960
+ s(w.id, `${I}.id`), s(w.label, `${I}.label`), c(w.width, `${I}.width`), c(w.height, `${I}.height`), i(w.document, `${I}.document`), a(w.choice, `${I}.choice`), p(w.text, `${I}.text`);
1958
1961
  });
1959
1962
  });
1960
1963
  }), m(t, "");
1961
- const p = Ct(t);
1962
- (p.columnWidth < 100 || p.contentHeight < 100) && r("margin", "边距或栏间距过大,纸张没有足够的作答区域");
1964
+ const h = Ct(t);
1965
+ (h.columnWidth < 100 || h.contentHeight < 100) && o("margin", "边距或栏间距过大,纸张没有足够的作答区域");
1963
1966
  }
1964
1967
  function rt(t) {
1965
1968
  return !t || t.marks?.some((e) => e.type === "documentLabel") ? !1 : t.type === "text" ? !!t.text?.trim() : t.type === "image" ? !!t.attrs?.src : t.type === "formula" || t.type === "blockFormula" ? !!t.attrs?.latex?.trim() : !!t.content?.some(rt);
1966
1969
  }
1967
- function On(t, e) {
1970
+ function Nn(t, e) {
1968
1971
  try {
1969
- De(t, e);
1970
- } catch (p) {
1971
- return { valid: !1, issues: p instanceof ut ? p.issues : [{ code: "INVALID_DATA", path: "", message: "题卡数据无法读取" }] };
1972
+ ke(t, e);
1973
+ } catch (h) {
1974
+ return { valid: !1, issues: h instanceof ut ? h.issues : [{ code: "INVALID_DATA", path: "", message: "题卡数据无法读取" }] };
1972
1975
  }
1973
- const r = [];
1976
+ const o = [];
1974
1977
  let n = {};
1975
- const o = (p, l, u) => r.push({ code: p, path: l, message: u, ...n }), s = /* @__PURE__ */ new Set(), c = (p, l) => {
1976
- (!p.trim() || s.has(p)) && o("DUPLICATE_ID", l, "题块、题目和选项 ID 必须非空且唯一"), s.add(p);
1977
- }, i = (p, l, u) => {
1978
- (p === null || !Number.isFinite(p) || p < (t.usage === "homework" ? 0 : 0.5) || p > l || !Number.isInteger(p * 2)) && o("INVALID_SCORE", u, `分值须为 ${t.usage === "homework" ? 0 : 0.5}–${l} 分,按 0.5 分递增`);
1979
- }, a = (p, l, u) => {
1980
- (p.options.length < l[0] || p.options.length > l[1]) && o("INVALID_OPTIONS", `${u}.options`, `选项个数须为 ${l[0]}–${l[1]}`), p.options.forEach((g, A) => c(g.id, `${u}.options.${A}.id`)), (new Set(p.correctIds).size !== p.correctIds.length || p.correctIds.some((g) => !p.options.some((A) => A.id === g))) && o("INVALID_ANSWER_REFERENCE", `${u}.correctIds`, "答案引用了不存在或重复的选项");
1981
- }, y = (p, l, u, g = 0, A = !0) => {
1982
- A && !rt(p?.content.content) && o("MISSING_CONTENT", `${l}.content`, "请填写题干或材料"), u && (p?.itemsContent.length !== g || p.itemsContent.some((C) => !rt(C.content.content))) && o("MISSING_OPTION_CONTENT", `${l}.itemsContent`, "请补全每个选项的内容");
1978
+ const r = (h, l, u) => o.push({ code: h, path: l, message: u, ...n }), s = /* @__PURE__ */ new Set(), c = (h, l) => {
1979
+ (!h.trim() || s.has(h)) && r("DUPLICATE_ID", l, "题块、题目和选项 ID 必须非空且唯一"), s.add(h);
1980
+ }, i = (h, l, u) => {
1981
+ (h === null || !Number.isFinite(h) || h < (t.usage === "homework" ? 0 : 0.5) || h > l || !Number.isInteger(h * 2)) && r("INVALID_SCORE", u, `分值须为 ${t.usage === "homework" ? 0 : 0.5}–${l} 分,按 0.5 分递增`);
1982
+ }, a = (h, l, u) => {
1983
+ (h.options.length < l[0] || h.options.length > l[1]) && r("INVALID_OPTIONS", `${u}.options`, `选项个数须为 ${l[0]}–${l[1]}`), h.options.forEach((g, A) => c(g.id, `${u}.options.${A}.id`)), (new Set(h.correctIds).size !== h.correctIds.length || h.correctIds.some((g) => !h.options.some((A) => A.id === g))) && r("INVALID_ANSWER_REFERENCE", `${u}.correctIds`, "答案引用了不存在或重复的选项");
1984
+ }, y = (h, l, u, g = 0, A = !0) => {
1985
+ A && !rt(h?.content.content) && r("MISSING_CONTENT", `${l}.content`, "请填写题干或材料"), u && (h?.itemsContent.length !== g || h.itemsContent.some((C) => !rt(C.content.content))) && r("MISSING_OPTION_CONTENT", `${l}.itemsContent`, "请补全每个选项的内容");
1983
1986
  };
1984
- if (t.title.trim() || o("MISSING_TITLE", "title", "请填写题卡名称"), t.recognition?.examQrCode) {
1985
- const p = String(t.creation?.exampaperId ?? "").trim();
1986
- if (!p) o("MISSING_EXAM_ID", "creation.exampaperId", "显示试卷二维码需要填写试卷 ID");
1987
+ if (t.title.trim() || r("MISSING_TITLE", "title", "请填写题卡名称"), t.recognition?.examQrCode) {
1988
+ const h = String(t.creation?.exampaperId ?? "").trim();
1989
+ if (!h) r("MISSING_EXAM_ID", "creation.exampaperId", "显示试卷二维码需要填写试卷 ID");
1987
1990
  else
1988
1991
  try {
1989
- _e(p);
1992
+ De(h);
1990
1993
  } catch {
1991
- o("INVALID_QR_PAYLOAD", "creation.exampaperId", "试卷 ID 太长,无法生成二维码");
1994
+ r("INVALID_QR_PAYLOAD", "creation.exampaperId", "试卷 ID 太长,无法生成二维码");
1992
1995
  }
1993
1996
  }
1994
- t.header && t.recognition?.subjectMarkers !== !1 && !jt[Te(t.creation) || ""] && o("UNKNOWN_SUBJECT_MARK", "creation.subjectCode", "当前学科没有参考识别编码,请配置标准学科或关闭学科标记"), (!t.creation?.grade.trim() || !t.creation.subject.trim()) && o("MISSING_CREATION", "creation", "请选择年级和学科"), (!t.paperTitle || !rt(t.paperTitle.document.content)) && o("MISSING_PAPER_TITLE", "paperTitle", "请填写纸面标题"), t.blocks.some((p) => p.kind !== "area") || o("EMPTY_CARD", "blocks", "请至少添加一个题块和一道题目"), t.paperTitle && c(t.paperTitle.id, "paperTitle.id"), t.blocks.forEach((p, l) => {
1995
- n = { blockId: p.id };
1997
+ t.header && t.recognition?.subjectMarkers !== !1 && !jt[Se(t.creation) || ""] && r("UNKNOWN_SUBJECT_MARK", "creation.subjectCode", "当前学科没有参考识别编码,请配置标准学科或关闭学科标记"), (!t.creation?.grade.trim() || !t.creation.subject.trim()) && r("MISSING_CREATION", "creation", "请选择年级和学科"), (!t.paperTitle || !rt(t.paperTitle.document.content)) && r("MISSING_PAPER_TITLE", "paperTitle", "请填写纸面标题"), t.blocks.some((h) => h.kind !== "area") || r("EMPTY_CARD", "blocks", "请至少添加一个题块和一道题目"), t.paperTitle && c(t.paperTitle.id, "paperTitle.id"), t.blocks.forEach((h, l) => {
1998
+ n = { blockId: h.id };
1996
1999
  const u = `blocks.${l}`;
1997
- if (c(p.id, `${u}.id`), p.kind === "area") {
1998
- p.areaType === (t.questionCard ? "forbiden" : "editArea") && o("INVALID_AREA_MODE", `${u}.areaType`, "题卡合一使用空白答题区,独立答题卡使用禁止答题区");
2000
+ if (c(h.id, `${u}.id`), h.kind === "area") {
2001
+ h.areaType === (t.questionCard ? "forbiden" : "editArea") && r("INVALID_AREA_MODE", `${u}.areaType`, "题卡合一使用空白答题区,独立答题卡使用禁止答题区");
1999
2002
  return;
2000
2003
  }
2001
- p.title.trim() || o("MISSING_BLOCK_TITLE", `${u}.title`, "请填写题块标题"), p.id === "reference-merged-objective" && o("RESERVED_ID", `${u}.id`, "题块使用了系统保留 ID");
2002
- const g = p.reference;
2004
+ h.title.trim() || r("MISSING_BLOCK_TITLE", `${u}.title`, "请填写题块标题"), h.id === "reference-merged-objective" && r("RESERVED_ID", `${u}.id`, "题块使用了系统保留 ID");
2005
+ const g = h.reference;
2003
2006
  if (!g) {
2004
- p.choices?.questions.length || o("EMPTY_BLOCK", u, "题块中没有题目"), p.choices?.questions.forEach((C, x) => {
2005
- n = { blockId: p.id, questionId: C.id }, c(C.id, `${u}.choices.questions.${x}.id`), a(C, [2, 12], `${u}.choices.questions.${x}`), i(C.score ?? null, 15, `${u}.choices.questions.${x}.score`);
2007
+ h.choices?.questions.length || r("EMPTY_BLOCK", u, "题块中没有题目"), h.choices?.questions.forEach((C, M) => {
2008
+ n = { blockId: h.id, questionId: C.id }, c(C.id, `${u}.choices.questions.${M}.id`), a(C, [2, 12], `${u}.choices.questions.${M}`), i(C.score ?? null, 15, `${u}.choices.questions.${M}.score`);
2006
2009
  });
2007
2010
  return;
2008
2011
  }
2009
- g.questions.length || o("EMPTY_BLOCK", `${u}.reference.questions`, "题块中没有题目");
2012
+ g.questions.length || r("EMPTY_BLOCK", `${u}.reference.questions`, "题块中没有题目");
2010
2013
  const A = yt(g);
2011
- if ((A.some((C) => !C.trim()) || new Set(A).size !== A.length) && o("INVALID_QUESTION_NUMBER", `${u}.reference.questions`, "同一题块内的题号须非空且不能重复"), g.optional && (g.type !== "SHORTANSWER" || !Number.isInteger(g.choose) || g.choose < 1 || g.choose >= g.questions.length) && o("INVALID_OPTIONAL", `${u}.reference.choose`, "选做题须为解答题,且选做数量小于总题数"), g.type === "CCOMPOSITION" && g.questions.length > 1 && o("INVALID_COUNT", `${u}.reference.questions`, "语文作文每组只能有一道题"), g.questions.forEach((C, x) => {
2012
- n = { blockId: p.id, questionId: C.id };
2013
- const M = `${u}.reference.questions.${x}`, w = lt[C.type];
2014
- c(C.id, `${M}.id`), g.type !== "MIXED" && g.type !== C.type && o("TYPE_MISMATCH", `${M}.type`, "题目类型与题块不一致"), C.choice.id !== C.id && o("INVALID_BINDING", `${M}.choice.id`, "题目与填涂项 ID 不一致");
2014
+ if ((A.some((C) => !C.trim()) || new Set(A).size !== A.length) && r("INVALID_QUESTION_NUMBER", `${u}.reference.questions`, "同一题块内的题号须非空且不能重复"), g.optional && (g.type !== "SHORTANSWER" || !Number.isInteger(g.choose) || g.choose < 1 || g.choose >= g.questions.length) && r("INVALID_OPTIONAL", `${u}.reference.choose`, "选做题须为解答题,且选做数量小于总题数"), g.type === "CCOMPOSITION" && g.questions.length > 1 && r("INVALID_COUNT", `${u}.reference.questions`, "语文作文每组只能有一道题"), g.questions.forEach((C, M) => {
2015
+ n = { blockId: h.id, questionId: C.id };
2016
+ const $ = `${u}.reference.questions.${M}`, b = lt[C.type];
2017
+ c(C.id, `${$}.id`), g.type !== "MIXED" && g.type !== C.type && r("TYPE_MISMATCH", `${$}.type`, "题目类型与题块不一致"), C.choice.id !== C.id && r("INVALID_BINDING", `${$}.choice.id`, "题目与填涂项 ID 不一致");
2015
2018
  const O = R(C.type) || ["FILLBLANK", "SHORTANSWER"].includes(C.type);
2016
- (O && (C.parts.length < 1 || C.parts.length > w.parts) || !O && C.parts.length) && o("INVALID_PARTS", `${M}.parts`, `子题/空数须为 ${O ? `1–${w.parts}` : "0"}`), C.parts.length ? C.score !== Bt(C.parts) && o("SCORE_MISMATCH", `${M}.score`, "总分与子题分值之和不一致") : i(C.score, w.score, `${M}.score`), Y(C.type) && !R(C.type) && a(C.choice, w.options, `${M}.choice`), C.type === "INFO_MATCHING" && (a(C.choice, w.options, `${M}.choice`), C.parts.length > C.choice.options.length && o("INVALID_OPTIONS", `${M}.choice.options`, "信息匹配的选项数不能少于子题数")), C.type === "MCHOICE" && (!Number.isFinite(C.choice.lessScore) || C.choice.lessScore < 0 || C.choice.lessScore > (C.score || 0) || !Number.isInteger(C.choice.lessScore * 2)) && o("INVALID_LESS_SCORE", `${M}.choice.lessScore`, "少选得分须按 0.5 分递增且不能超过本题分值"), C.type === "CHUNK_CHOICE" && (!C.rightAnswers || !Number.isInteger(C.rightAnswers) || C.rightAnswers >= C.choice.options.length || !C.singleScore || C.singleScore < 0.5 || !Number.isInteger(C.singleScore * 2) || C.score !== 0 && C.singleScore * C.rightAnswers > (C.score || 0)) && o("INVALID_CHUNK_SCORE", M, "请检查正确答案个数及每处得分"), C.type === "CCOMPOSITION" && (!Number.isInteger(C.characters) || C.characters < 1 || C.characters > 1200) && o("INVALID_GRID_COUNT", `${M}.characters`, "作文格数须为 1–1200"), C.type === "ECOMPOSITION" && (!Number.isInteger(C.lines) || C.lines < 1 || C.lines > 100) && o("INVALID_LINE_COUNT", `${M}.lines`, "作文行数须为 1–100"), t.questionCard && y(C.text, `${M}.text`, ["SCHOICE", "MCHOICE"].includes(C.type), C.choice.options.length), C.parts.forEach((h, I) => {
2017
- const d = `${M}.parts.${I}`;
2018
- n = { blockId: p.id, questionId: h.id }, c(h.id, `${d}.id`), i(h.score, w.score, `${d}.score`), R(C.type) && Y(C.type) && (a(h.choice, w.options, `${d}.choice`), h.choice.id !== h.id && o("INVALID_BINDING", `${d}.choice.id`, "子题与填涂项 ID 不一致")), t.questionCard && ["CLOZE", "READTHENANSWER"].includes(C.type) && y(h.text, `${d}.text`, !0, h.choice.options.length, C.type === "READTHENANSWER");
2019
+ (O && (C.parts.length < 1 || C.parts.length > b.parts) || !O && C.parts.length) && r("INVALID_PARTS", `${$}.parts`, `子题/空数须为 ${O ? `1–${b.parts}` : "0"}`), C.parts.length ? C.score !== Bt(C.parts) && r("SCORE_MISMATCH", `${$}.score`, "总分与子题分值之和不一致") : i(C.score, b.score, `${$}.score`), Y(C.type) && !R(C.type) && a(C.choice, b.options, `${$}.choice`), C.type === "INFO_MATCHING" && (a(C.choice, b.options, `${$}.choice`), C.parts.length > C.choice.options.length && r("INVALID_OPTIONS", `${$}.choice.options`, "信息匹配的选项数不能少于子题数")), C.type === "MCHOICE" && (!Number.isFinite(C.choice.lessScore) || C.choice.lessScore < 0 || C.choice.lessScore > (C.score || 0) || !Number.isInteger(C.choice.lessScore * 2)) && r("INVALID_LESS_SCORE", `${$}.choice.lessScore`, "少选得分须按 0.5 分递增且不能超过本题分值"), C.type === "CHUNK_CHOICE" && (!C.rightAnswers || !Number.isInteger(C.rightAnswers) || C.rightAnswers >= C.choice.options.length || !C.singleScore || C.singleScore < 0.5 || !Number.isInteger(C.singleScore * 2) || C.score !== 0 && C.singleScore * C.rightAnswers > (C.score || 0)) && r("INVALID_CHUNK_SCORE", $, "请检查正确答案个数及每处得分"), C.type === "CCOMPOSITION" && (!Number.isInteger(C.characters) || C.characters < 1 || C.characters > 1200) && r("INVALID_GRID_COUNT", `${$}.characters`, "作文格数须为 1–1200"), C.type === "ECOMPOSITION" && (!Number.isInteger(C.lines) || C.lines < 1 || C.lines > 100) && r("INVALID_LINE_COUNT", `${$}.lines`, "作文行数须为 1–100"), t.questionCard && y(C.text, `${$}.text`, ["SCHOICE", "MCHOICE"].includes(C.type), C.choice.options.length), C.parts.forEach((p, E) => {
2020
+ const d = `${$}.parts.${E}`;
2021
+ n = { blockId: h.id, questionId: p.id }, c(p.id, `${d}.id`), i(p.score, b.score, `${d}.score`), R(C.type) && Y(C.type) && (a(p.choice, b.options, `${d}.choice`), p.choice.id !== p.id && r("INVALID_BINDING", `${d}.choice.id`, "子题与填涂项 ID 不一致")), t.questionCard && ["CLOZE", "READTHENANSWER"].includes(C.type) && y(p.text, `${d}.text`, !0, p.choice.options.length, C.type === "READTHENANSWER");
2019
2022
  });
2020
- }), n = { blockId: p.id }, t.questionCard && g.layout.presentation !== "concentrated") {
2021
- const C = g.questions.filter((M) => Y(M.type)).flatMap((M) => R(M.type) ? M.parts.map((w) => w.choice) : [M.choice]);
2022
- Zt({ ...g.layout, questions: C }, p.document, !0).concentrated.questions.length && o("MISSING_FILL_TARGET", `${u}.reference.layout.presentation`, "部分填涂框没有对应的题干或选项位置");
2023
+ }), n = { blockId: h.id }, t.questionCard && g.layout.presentation !== "concentrated") {
2024
+ const C = g.questions.filter(($) => Y($.type)).flatMap(($) => R($.type) ? $.parts.map((b) => b.choice) : [$.choice]);
2025
+ Zt({ ...g.layout, questions: C }, h.document, !0).concentrated.questions.length && r("MISSING_FILL_TARGET", `${u}.reference.layout.presentation`, "部分填涂框没有对应的题干或选项位置");
2023
2026
  }
2024
2027
  }), n = {};
2025
- const T = (p, l) => {
2026
- p.type === "image" && (!p.attrs?.src || /^blob:/i.test(p.attrs.src)) && o("INVALID_IMAGE_URL", l, "图片缺少可保存的地址,请上传后使用持久 URL 或内嵌图片"), ["formula", "blockFormula"].includes(p.type || "") && !String(p.attrs?.latex || "").trim() && o("EMPTY_FORMULA", l, "请填写公式或删除空公式"), p.content?.forEach((u, g) => T(u, `${l}.content.${g}`));
2027
- }, m = (p, l) => {
2028
- p && T(p.content, `${l}.content`);
2029
- }, f = (p, l) => {
2030
- m(p?.content, `${l}.content`), p?.itemsContent.forEach((u, g) => m(u.content, `${l}.itemsContent.${g}.content`));
2028
+ const T = (h, l) => {
2029
+ h.type === "image" && (!h.attrs?.src || /^blob:/i.test(h.attrs.src)) && r("INVALID_IMAGE_URL", l, "图片缺少可保存的地址,请上传后使用持久 URL 或内嵌图片"), ["formula", "blockFormula"].includes(h.type || "") && !String(h.attrs?.latex || "").trim() && r("EMPTY_FORMULA", l, "请填写公式或删除空公式"), h.content?.forEach((u, g) => T(u, `${l}.content.${g}`));
2030
+ }, m = (h, l) => {
2031
+ h && T(h.content, `${l}.content`);
2032
+ }, f = (h, l) => {
2033
+ m(h?.content, `${l}.content`), h?.itemsContent.forEach((u, g) => m(u.content, `${l}.itemsContent.${g}.content`));
2031
2034
  };
2032
- return m(t.paperTitle?.document, "paperTitle.document"), t.blocks.forEach((p, l) => {
2033
- n = { blockId: p.id };
2035
+ return m(t.paperTitle?.document, "paperTitle.document"), t.blocks.forEach((h, l) => {
2036
+ n = { blockId: h.id };
2034
2037
  const u = `blocks.${l}`;
2035
- m(p.document, `${u}.document`), m(p.reference?.material, `${u}.reference.material`), p.reference?.questions.forEach((g, A) => {
2036
- n = { blockId: p.id, questionId: g.id };
2038
+ m(h.document, `${u}.document`), m(h.reference?.material, `${u}.reference.material`), h.reference?.questions.forEach((g, A) => {
2039
+ n = { blockId: h.id, questionId: g.id };
2037
2040
  const C = `blocks.${l}.reference.questions.${A}`;
2038
- m(g.document, `${C}.document`), f(g.text, `${C}.text`), g.parts.forEach((x, M) => {
2039
- n = { blockId: p.id, questionId: x.id }, m(x.document, `${C}.parts.${M}.document`), f(x.text, `${C}.parts.${M}.text`);
2041
+ m(g.document, `${C}.document`), f(g.text, `${C}.text`), g.parts.forEach((M, $) => {
2042
+ n = { blockId: h.id, questionId: M.id }, m(M.document, `${C}.parts.${$}.document`), f(M.text, `${C}.parts.${$}.text`);
2040
2043
  });
2041
2044
  });
2042
- }), { valid: r.length === 0, issues: r };
2045
+ }), { valid: o.length === 0, issues: o };
2043
2046
  }
2044
2047
  function gt(t) {
2045
2048
  if (t !== void 0)
@@ -2050,69 +2053,69 @@ function gt(t) {
2050
2053
  throw e instanceof mt ? new ut([{ code: "INVALID_DICTIONARIES", path: e.path, message: e.message }]) : e;
2051
2054
  }
2052
2055
  }
2053
- function ke(t, e) {
2054
- const r = (w, O) => {
2055
- throw new ut([{ code: "INVALID_INITIALIZATION", path: w, message: O }]);
2056
- }, n = (w, O, h) => {
2057
- if (!w || typeof w != "object" || Array.isArray(w)) return r(O, "初始化配置必须是对象");
2058
- const I = Object.entries(w);
2059
- for (const [d] of I) h.includes(d) || r(`${O}.${d}`, "不支持的初始化字段");
2060
- return Object.fromEntries(I.filter(([, d]) => d !== void 0));
2061
- }, o = (w, O) => typeof w != "string" || !w.trim() ? r(O, "请提供非空的试卷名称、年级和学科") : w.trim(), s = (w, O, h) => {
2062
- w !== void 0 && !h.includes(w) && r(O, `可选值为 ${h.join("、")}`);
2063
- }, c = (w, O) => {
2064
- w !== void 0 && typeof w != "boolean" && r(O, "请使用布尔值");
2065
- }, i = (w, O, h, I) => {
2066
- w !== void 0 && (typeof w != "number" || !Number.isFinite(w) || w < h || w > I) && r(O, `数值必须在 ${h}–${I} 之间`);
2067
- }, a = n(t, "initialization", ["name", "grade", "subject", "gradeCode", "courseCode", "subjectCode", "mode", "id", "exampaperId", "createMode", "layout", "header", "recognition"]), y = o(a.name, "initialization.name");
2068
- y.length > 30 && r("initialization.name", "试卷名称最多 30 个字符");
2056
+ function Pe(t, e) {
2057
+ const o = (b, O) => {
2058
+ throw new ut([{ code: "INVALID_INITIALIZATION", path: b, message: O }]);
2059
+ }, n = (b, O, p) => {
2060
+ if (!b || typeof b != "object" || Array.isArray(b)) return o(O, "初始化配置必须是对象");
2061
+ const E = Object.entries(b);
2062
+ for (const [d] of E) p.includes(d) || o(`${O}.${d}`, "不支持的初始化字段");
2063
+ return Object.fromEntries(E.filter(([, d]) => d !== void 0));
2064
+ }, r = (b, O) => typeof b != "string" || !b.trim() ? o(O, "请提供非空的试卷名称、年级和学科") : b.trim(), s = (b, O, p) => {
2065
+ b !== void 0 && !p.includes(b) && o(O, `可选值为 ${p.join("、")}`);
2066
+ }, c = (b, O) => {
2067
+ b !== void 0 && typeof b != "boolean" && o(O, "请使用布尔值");
2068
+ }, i = (b, O, p, E) => {
2069
+ b !== void 0 && (typeof b != "number" || !Number.isFinite(b) || b < p || b > E) && o(O, `数值必须在 ${p}–${E} 之间`);
2070
+ }, a = n(t, "initialization", ["name", "grade", "subject", "gradeCode", "courseCode", "subjectCode", "mode", "id", "exampaperId", "createMode", "layout", "header", "recognition"]), y = r(a.name, "initialization.name");
2071
+ y.length > 30 && o("initialization.name", "试卷名称最多 30 个字符");
2069
2072
  const T = Lt(gt(e)), m = a.gradeCode !== void 0 || a.courseCode !== void 0 || a.subjectCode !== void 0;
2070
2073
  let f;
2071
2074
  if (m) {
2072
2075
  try {
2073
- f = dt(T, o(a.gradeCode, "initialization.gradeCode"), o(a.courseCode, "initialization.courseCode"));
2074
- } catch (w) {
2075
- if (w instanceof mt) return r(w.path, w.message);
2076
- throw w;
2076
+ f = dt(T, r(a.gradeCode, "initialization.gradeCode"), r(a.courseCode, "initialization.courseCode"));
2077
+ } catch (b) {
2078
+ if (b instanceof mt) return o(b.path, b.message);
2079
+ throw b;
2077
2080
  }
2078
- for (const w of ["grade", "subject", "subjectCode"]) a[w] !== void 0 && o(a[w], `initialization.${w}`) !== f[w] && r(`initialization.${w}`, "名称或学科编码与课程字典不一致");
2081
+ for (const b of ["grade", "subject", "subjectCode"]) a[b] !== void 0 && r(a[b], `initialization.${b}`) !== f[b] && o(`initialization.${b}`, "名称或学科编码与课程字典不一致");
2079
2082
  } else {
2080
- const w = o(a.grade, "initialization.grade"), O = o(a.subject, "initialization.subject"), h = T.grades.filter((b) => b.label === w);
2081
- h.length > 1 && r("initialization.grade", "同名年级不唯一,请使用 gradeCode");
2082
- const I = h[0], d = I ? T.gradeCourseMap[I.value].filter((b) => b.label === O) : [];
2083
- d.length > 1 && r("initialization.subject", "同名课程不唯一,请使用 courseCode"), e && (!I || !d.length) && r(I ? "initialization.subject" : "initialization.grade", "名称不在可用字典中,请使用年级和课程编码"), f = I && d.length ? dt(T, I.value, d[0].value) : { grade: w, subject: O };
2083
+ const b = r(a.grade, "initialization.grade"), O = r(a.subject, "initialization.subject"), p = T.grades.filter((I) => I.label === b);
2084
+ p.length > 1 && o("initialization.grade", "同名年级不唯一,请使用 gradeCode");
2085
+ const E = p[0], d = E ? T.gradeCourseMap[E.value].filter((I) => I.label === O) : [];
2086
+ d.length > 1 && o("initialization.subject", "同名课程不唯一,请使用 courseCode"), e && (!E || !d.length) && o(E ? "initialization.subject" : "initialization.grade", "名称不在可用字典中,请使用年级和课程编码"), f = E && d.length ? dt(T, E.value, d[0].value) : { grade: b, subject: O };
2084
2087
  }
2085
2088
  s(a.mode, "initialization.mode", ["template", "exam"]), s(a.createMode, "initialization.createMode", ["MANUALLY", "IMPORTED", "THIRD"]);
2086
- const p = {};
2087
- for (const w of ["id", "exampaperId"]) if (a[w] !== void 0) {
2088
- const O = a[w];
2089
- typeof O == "string" ? p[w] = o(O, `initialization.${w}`) : typeof O == "number" && Number.isSafeInteger(O) && O >= 0 ? p[w] = O : r(`initialization.${w}`, "ID 必须是非空字符串或非负安全整数");
2089
+ const h = {};
2090
+ for (const b of ["id", "exampaperId"]) if (a[b] !== void 0) {
2091
+ const O = a[b];
2092
+ typeof O == "string" ? h[b] = r(O, `initialization.${b}`) : typeof O == "number" && Number.isSafeInteger(O) && O >= 0 ? h[b] = O : o(`initialization.${b}`, "ID 必须是非空字符串或非负安全整数");
2090
2093
  }
2091
- a.createMode !== void 0 && (p.createMode = a.createMode);
2092
- const l = a.layout === void 0 ? {} : n(a.layout, "initialization.layout", ["usage", "preset", "margin", "gap", "questionCard", "scanMarking", "halfPoint", "choiceDirection", "mergeObjective", "pageNum", "quesCard", "scoreType", "choiceType", "mixOb"]), u = (w, O, h) => {
2093
- l[w] !== void 0 && (l[O] !== void 0 && l[O] !== h && r(`initialization.layout.${w}`, `与 ${O} 设置冲突`), l[O] = h, delete l[w]);
2094
+ a.createMode !== void 0 && (h.createMode = a.createMode);
2095
+ const l = a.layout === void 0 ? {} : n(a.layout, "initialization.layout", ["usage", "preset", "margin", "gap", "questionCard", "duplex", "scanMarking", "halfPoint", "choiceDirection", "mergeObjective", "pageNum", "quesCard", "scoreType", "choiceType", "mixOb"]), u = (b, O, p) => {
2096
+ l[b] !== void 0 && (l[O] !== void 0 && l[O] !== p && o(`initialization.layout.${b}`, `与 ${O} 设置冲突`), l[O] = p, delete l[b]);
2094
2097
  };
2095
- l.pageNum !== void 0 && ![1, 2, 3].includes(l.pageNum) && r("initialization.layout.pageNum", "分栏数为 1、2 或 3"), u("pageNum", "preset", { 1: "a4", 2: "a3-two", 3: "a3-three" }[l.pageNum]);
2096
- for (const [w, O] of [["quesCard", "questionCard"], ["scoreType", "halfPoint"], ["mixOb", "mergeObjective"], ["choiceType", "choiceDirection"]])
2097
- c(l[w], `initialization.layout.${w}`), u(w, O, w === "choiceType" ? l[w] ? "column" : "row" : l[w]);
2098
+ l.pageNum !== void 0 && ![1, 2, 3].includes(l.pageNum) && o("initialization.layout.pageNum", "分栏数为 1、2 或 3"), u("pageNum", "preset", { 1: "a4", 2: "a3-two", 3: "a3-three" }[l.pageNum]);
2099
+ for (const [b, O] of [["quesCard", "questionCard"], ["scoreType", "halfPoint"], ["mixOb", "mergeObjective"], ["choiceType", "choiceDirection"]])
2100
+ c(l[b], `initialization.layout.${b}`), u(b, O, b === "choiceType" ? l[b] ? "column" : "row" : l[b]);
2098
2101
  s(l.preset, "initialization.layout.preset", ["a4", "a3-two", "a3-three"]), s(l.usage, "initialization.layout.usage", ["exam", "homework"]), s(l.choiceDirection, "initialization.layout.choiceDirection", ["row", "column"]), i(l.margin, "initialization.layout.margin", 0, 100), i(l.gap, "initialization.layout.gap", 0, 100);
2099
- for (const w of ["questionCard", "scanMarking", "halfPoint", "mergeObjective"]) c(l[w], `initialization.layout.${w}`);
2102
+ for (const b of ["questionCard", "duplex", "scanMarking", "halfPoint", "mergeObjective"]) c(l[b], `initialization.layout.${b}`);
2100
2103
  const g = a.header === void 0 ? {} : n(a.header, "initialization.header", ["focusText", "writeKaohao", "missExam", "mifeng", "kaohao", "weishu", "tiaomaStyle", "classText"]);
2101
- for (const w of ["focusText", "writeKaohao", "missExam", "mifeng", "classText"]) c(g[w], `initialization.header.${w}`);
2102
- g.tiaomaStyle !== void 0 && ![1, 2].includes(g.tiaomaStyle) && r("initialization.header.tiaomaStyle", "考号版式为 1(填涂)或 2(条形码)"), s(g.kaohao, "initialization.header.kaohao", ["school", "code"]), i(g.weishu, "initialization.header.weishu", 4, 12), g.weishu !== void 0 && !Number.isInteger(g.weishu) && r("initialization.header.weishu", "考号位数必须是整数");
2103
- const A = ae({ name: y, ...f, ...p, mode: a.mode ?? "template" }), C = a.recognition === void 0 ? void 0 : n(a.recognition, "initialization.recognition", ["examQrCode", "subjectMarkers", "pointBlack"]);
2104
- if (C) for (const w of ["examQrCode", "subjectMarkers", "pointBlack"]) c(C[w], `initialization.recognition.${w}`);
2105
- const x = { ...A, ...l, header: { ...A.header, ...g }, ...C ? { recognition: C } : {} }, M = Ct(x);
2106
- return (M.columnWidth < 100 || M.contentHeight < 100) && r("initialization.layout", "边距或栏间距过大,纸张没有足够的作答区域"), x;
2107
- }
2108
- function Nn(t, e) {
2104
+ for (const b of ["focusText", "writeKaohao", "missExam", "mifeng", "classText"]) c(g[b], `initialization.header.${b}`);
2105
+ g.tiaomaStyle !== void 0 && ![1, 2].includes(g.tiaomaStyle) && o("initialization.header.tiaomaStyle", "考号版式为 1(填涂)或 2(条形码)"), s(g.kaohao, "initialization.header.kaohao", ["school", "code"]), i(g.weishu, "initialization.header.weishu", 4, 12), g.weishu !== void 0 && !Number.isInteger(g.weishu) && o("initialization.header.weishu", "考号位数必须是整数");
2106
+ const A = ae({ name: y, ...f, ...h, mode: a.mode ?? "template" }), C = a.recognition === void 0 ? void 0 : n(a.recognition, "initialization.recognition", ["examQrCode", "subjectMarkers", "pointBlack"]);
2107
+ if (C) for (const b of ["examQrCode", "subjectMarkers", "pointBlack"]) c(C[b], `initialization.recognition.${b}`);
2108
+ const M = { ...A, ...l, header: { ...A.header, ...g }, ...C ? { recognition: C } : {} }, $ = Ct(M);
2109
+ return ($.columnWidth < 100 || $.contentHeight < 100) && o("initialization.layout", "边距或栏间距过大,纸张没有足够的作答区域"), M;
2110
+ }
2111
+ function Mn(t, e) {
2109
2112
  if (typeof document > "u") throw new Error("请在浏览器挂载后创建制卡实例");
2110
- const r = vt(e?.plugins || []), n = gt(e.dictionaries), o = typeof t == "string" ? document.querySelector(t) : t;
2111
- if (!(o instanceof HTMLElement) || o.ownerDocument !== document || /^(INPUT|TEXTAREA|SELECT|BUTTON|IMG|CANVAS|IFRAME)$/.test(o.tagName)) throw new Error("制卡需要一个空的 HTML 容器,例如 div");
2113
+ const o = vt(e?.plugins || []), n = gt(e.dictionaries), r = typeof t == "string" ? document.querySelector(t) : t;
2114
+ if (!(r instanceof HTMLElement) || r.ownerDocument !== document || /^(INPUT|TEXTAREA|SELECT|BUTTON|IMG|CANVAS|IFRAME)$/.test(r.tagName)) throw new Error("制卡需要一个空的 HTML 容器,例如 div");
2112
2115
  if (document.querySelector("[data-uni-answer-sheet-mount], #uni-answer-sheet")) throw new Error("当前文档已挂载制卡工作区;切换容器前请先 destroy()");
2113
- if (o.textContent?.trim() || o.children.length) throw new Error("请提供空容器,已有题卡请通过 initialValue 传入");
2116
+ if (r.textContent?.trim() || r.children.length) throw new Error("请提供空容器,已有题卡请通过 initialValue 传入");
2114
2117
  const s = document.createElement("div");
2115
- s.className = "uni-answer-sheet-host", s.dataset.uniAnswerSheetMount = "", s.style.height = "100%", o.append(s);
2118
+ s.className = "uni-answer-sheet-host", s.dataset.uniAnswerSheetMount = "", s.style.height = "100%", r.append(s);
2116
2119
  let c = !1, i = { ...e, dictionaries: n }, a, y, T;
2117
2120
  const m = new Promise((u, g) => {
2118
2121
  y = u, T = g;
@@ -2123,22 +2126,22 @@ function Nn(t, e) {
2123
2126
  if (c) throw new Error("制卡实例已销毁");
2124
2127
  if (!a?.isReady()) throw new Error("请先等待 sheet.ready");
2125
2128
  return a;
2126
- }, p = async () => (await m, f()), l = {
2129
+ }, h = async () => (await m, f()), l = {
2127
2130
  ready: m,
2128
2131
  async initialize(u) {
2129
2132
  if (c) throw new Error("制卡实例已销毁");
2130
- const g = ke(u, i.dictionaries);
2131
- a || (i = { ...i, initialValue: g }), await (await p()).setDocument(g);
2133
+ const g = Pe(u, i.dictionaries);
2134
+ a || (i = { ...i, initialValue: g }), await (await h()).setDocument(g);
2132
2135
  },
2133
2136
  getDocument: () => f().getDocument(),
2134
- load: async (u) => (await p()).setDocument(u),
2135
- setDocument: async (u) => (await p()).setDocument(u),
2136
- newDocument: async (u) => (await p()).newDocument(u),
2137
+ load: async (u) => (await h()).setDocument(u),
2138
+ setDocument: async (u) => (await h()).setDocument(u),
2139
+ newDocument: async (u) => (await h()).newDocument(u),
2137
2140
  getReferenceData: () => f().getReferenceData(),
2138
- setReferenceData: async (u) => (await p()).setReferenceData(u),
2139
- validate: async () => (await p()).validate(),
2140
- save: async () => (await p()).save(),
2141
- getRecognitionData: async () => (await p()).getRecognitionData(),
2141
+ setReferenceData: async (u) => (await h()).setReferenceData(u),
2142
+ validate: async () => (await h()).validate(),
2143
+ save: async () => (await h()).save(),
2144
+ getRecognitionData: async () => (await h()).getRecognitionData(),
2142
2145
  focusIssue: (u) => f().focusIssue(u),
2143
2146
  setOptions(u) {
2144
2147
  if (c) throw new Error("制卡实例已销毁");
@@ -2149,8 +2152,8 @@ function Nn(t, e) {
2149
2152
  c || (c = !0, a?.destroy(), s.remove(), T(new DOMException("制卡实例已销毁", "AbortError")));
2150
2153
  }
2151
2154
  };
2152
- return Promise.all([r.prepare(), import("./runtime-C-fdAw2T.js")]).then(([, { mountAnswerSheet: u }]) => {
2153
- c || (a = u(s, r, i, y, (g) => {
2155
+ return Promise.all([o.prepare(), import("./runtime-C9TDF-ed.js")]).then(([, { mountAnswerSheet: u }]) => {
2156
+ c || (a = u(s, o, i, y, (g) => {
2154
2157
  T(g), l.destroy(), i.onError?.(g instanceof Error ? g : new Error(String(g)));
2155
2158
  }));
2156
2159
  }).catch((u) => {
@@ -2158,98 +2161,99 @@ function Nn(t, e) {
2158
2161
  }), l;
2159
2162
  }
2160
2163
  export {
2161
- oe as $,
2162
- An as A,
2163
- Sn as B,
2164
- Lt as C,
2165
- se as D,
2166
- un as E,
2167
- an as F,
2168
- et as G,
2169
- Cn as H,
2170
- ae as I,
2171
- ln as J,
2172
- v as K,
2173
- W as L,
2174
- Fe as M,
2175
- ve as N,
2176
- Yt as O,
2177
- xt as P,
2178
- Jt as Q,
2179
- Dt as R,
2180
- Ke as S,
2181
- Ge as T,
2182
- at as U,
2183
- Be as V,
2164
+ Ze as $,
2165
+ On as A,
2166
+ ue as B,
2167
+ An as C,
2168
+ Lt as D,
2169
+ se as E,
2170
+ fn as F,
2171
+ ln as G,
2172
+ et as H,
2173
+ In as I,
2174
+ ae as J,
2175
+ un as K,
2176
+ v as L,
2177
+ W as M,
2178
+ Ke as N,
2179
+ ze as O,
2180
+ Yt as P,
2181
+ xt as Q,
2182
+ Jt as R,
2183
+ Dt as S,
2184
+ ve as T,
2185
+ Ue as U,
2186
+ at as V,
2184
2187
  je as W,
2185
- Tt as X,
2186
- Ue as Y,
2187
- qe as Z,
2188
- Ye as _,
2189
- ye as a,
2190
- nn as a0,
2191
- tn as a1,
2188
+ Ge as X,
2189
+ Tt as Y,
2190
+ Fe as Z,
2191
+ tn as _,
2192
+ be as a,
2193
+ oe as a0,
2194
+ on as a1,
2192
2195
  en as a2,
2193
- on as a3,
2194
- Je as a4,
2195
- ne as a5,
2196
- re as a6,
2197
- ie as a7,
2198
- We as a8,
2199
- Qe as a9,
2200
- _e as aA,
2196
+ nn as a3,
2197
+ rn as a4,
2198
+ Xe as a5,
2199
+ ne as a6,
2200
+ re as a7,
2201
+ ie as a8,
2202
+ Ve as a9,
2203
+ Sn as aA,
2201
2204
  De as aB,
2202
- ut as aC,
2203
- On as aD,
2205
+ ke as aC,
2206
+ ut as aD,
2204
2207
  Nn as aE,
2205
- qt as aa,
2206
- rn as ab,
2207
- Ze as ac,
2208
- Ve as ad,
2209
- lt as ae,
2210
- Rt as af,
2211
- gn as ag,
2212
- yn as ah,
2213
- pn as ai,
2214
- mn as aj,
2215
- En as ak,
2216
- ht as al,
2217
- sn as am,
2218
- Xe as an,
2219
- He as ao,
2220
- dt as ap,
2221
- le as aq,
2222
- cn as ar,
2223
- ze as as,
2224
- de as at,
2225
- bn as au,
2226
- wn as av,
2227
- it as aw,
2228
- Te as ax,
2229
- jt as ay,
2230
- Tn as az,
2231
- hn as b,
2232
- Ce as c,
2208
+ Mn as aF,
2209
+ Je as aa,
2210
+ qt as ab,
2211
+ sn as ac,
2212
+ qe as ad,
2213
+ Qe as ae,
2214
+ lt as af,
2215
+ Rt as ag,
2216
+ mn as ah,
2217
+ bn as ai,
2218
+ gn as aj,
2219
+ Cn as ak,
2220
+ wn as al,
2221
+ ht as am,
2222
+ cn as an,
2223
+ Ye as ao,
2224
+ Be as ap,
2225
+ dt as aq,
2226
+ le as ar,
2227
+ We as as,
2228
+ he as at,
2229
+ En as au,
2230
+ Tn as av,
2231
+ an as aw,
2232
+ it as ax,
2233
+ Se as ay,
2234
+ jt as az,
2235
+ pn as b,
2236
+ Ie as c,
2233
2237
  Ht as d,
2234
- Ie as e,
2238
+ ye as e,
2235
2239
  pt as f,
2236
2240
  Y as g,
2237
- In as h,
2241
+ yn as h,
2238
2242
  R as i,
2239
2243
  j,
2240
- fn as k,
2244
+ dn as k,
2241
2245
  kt as l,
2242
2246
  Q as m,
2243
2247
  St as n,
2244
- dn as o,
2245
- pe as p,
2248
+ hn as o,
2249
+ ge as p,
2246
2250
  It as q,
2247
2251
  Zt as r,
2248
2252
  Bt as s,
2249
2253
  J as t,
2250
2254
  st as u,
2251
2255
  Pt as v,
2252
- he as w,
2256
+ pe as w,
2253
2257
  Ot as x,
2254
2258
  Z as y,
2255
2259
  nt as z