@instructure/platform-modules 1.3.0 → 1.4.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.
Files changed (33) hide show
  1. package/dist/components/ModuleCard.d.ts.map +1 -1
  2. package/dist/components/ModulesList.d.ts.map +1 -1
  3. package/dist/components/ModulesList.stories.d.ts +1 -0
  4. package/dist/components/ModulesList.stories.d.ts.map +1 -1
  5. package/dist/components/ModulesProgressBar.d.ts +8 -0
  6. package/dist/components/ModulesProgressBar.d.ts.map +1 -0
  7. package/dist/components/ModulesProgressBar.stories.d.ts +18 -0
  8. package/dist/components/ModulesProgressBar.stories.d.ts.map +1 -0
  9. package/dist/components/StatusPill.d.ts +13 -0
  10. package/dist/components/StatusPill.d.ts.map +1 -1
  11. package/dist/components/index.d.ts +1 -0
  12. package/dist/components/index.d.ts.map +1 -1
  13. package/dist/components/storyThemes.d.ts +4 -0
  14. package/dist/components/storyThemes.d.ts.map +1 -1
  15. package/dist/config/actions.d.ts +20 -0
  16. package/dist/config/actions.d.ts.map +1 -0
  17. package/dist/config/index.d.ts +3 -1
  18. package/dist/config/index.d.ts.map +1 -1
  19. package/dist/config/schemas.d.ts +16 -0
  20. package/dist/config/schemas.d.ts.map +1 -1
  21. package/dist/config/types.d.ts +5 -5
  22. package/dist/config/types.d.ts.map +1 -1
  23. package/dist/config/useActionContext.d.ts +6 -0
  24. package/dist/config/useActionContext.d.ts.map +1 -0
  25. package/dist/hooks/useModules.d.ts +1 -0
  26. package/dist/hooks/useModules.d.ts.map +1 -1
  27. package/dist/hooks/useModulesPageData.d.ts +4 -0
  28. package/dist/hooks/useModulesPageData.d.ts.map +1 -1
  29. package/dist/index.d.ts +2 -2
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +1774 -1363
  32. package/locales/en.json +27 -3
  33. package/package.json +3 -1
package/dist/index.js CHANGED
@@ -1,37 +1,37 @@
1
- import { z as d } from "zod";
2
- import { gql as Me } from "graphql-tag";
3
- import { jsx as i, jsxs as S, Fragment as it } from "react/jsx-runtime";
4
- import { createContext as Pt, useContext as Ct, useMemo as N, isValidElement as wt, useCallback as F, useRef as $, useState as Le, useEffect as Ie, useId as vt, memo as Lt, Fragment as At } from "react";
5
- import { PlugInstUIIcon as Pn, ExternalLinkInstUIIcon as Cn, FileInstUIIcon as wn, FileTextInstUIIcon as vn, MessagesSquareInstUIIcon as Ln, RocketInstUIIcon as An, FilePenLineInstUIIcon as Rn, LockInstUIIcon as Rt, TriangleAlertInstUIIcon as ge, CircleCheckInstUIIcon as xt, ClockFadingInstUIIcon as Nt, CornerDownRightInstUIIcon as xn, IconArrowOpenUpLine as Nn, IconArrowOpenDownLine as qt } from "@instructure/ui-icons";
6
- import { useInfiniteQuery as Ke, useQueryClient as kt, InfiniteQueryObserver as qn } from "@tanstack/react-query";
7
- import kn from "p-limit";
8
- import { Button as he, IconButton as Dn } from "@instructure/ui-buttons/v11_7";
9
- import { Flex as T } from "@instructure/ui-flex/v11_7";
10
- import { Text as P } from "@instructure/ui-text/v11_7";
11
- import { View as E } from "@instructure/ui-view/v11_7";
12
- import { TruncateWithTooltip as On, politeAnnounce as Dt, getLiveRegion as Ot } from "@instructure/platform-instui-bindings";
13
- import { Alert as Ft } from "@instructure/ui-alerts/v11_7";
14
- import { Heading as Ut } from "@instructure/ui-heading/v11_7";
15
- import { ProgressBar as Fn } from "@instructure/ui-progress/v11_7";
16
- import { Spinner as zt } from "@instructure/ui-spinner/v11_7";
17
- import { Tooltip as Un } from "@instructure/ui-tooltip/v11_7";
18
- import { useTheme as $t } from "@instructure/emotion";
19
- import { ScreenReaderContent as lt } from "@instructure/ui-a11y-content";
20
- import { Link as zn } from "@instructure/ui-link/v11_7";
21
- import { Pill as $n } from "@instructure/ui-pill/v11_7";
22
- import { WithBreakpoints as Bn } from "@instructure/platform-with-breakpoints";
23
- import { Menu as $e } from "@instructure/ui-menu/v11_7";
24
- const jn = d.object({
25
- target: d.enum(["module", "item"]),
26
- field: d.string(),
27
- op: d.enum(["eq", "contains"]),
28
- value: d.union([d.string(), d.boolean()])
1
+ import { z as m } from "zod";
2
+ import { gql as xe } from "graphql-tag";
3
+ import { jsx as l, jsxs as C, Fragment as vt } from "react/jsx-runtime";
4
+ import { createContext as en, useContext as tn, useMemo as N, isValidElement as nn, useCallback as U, useRef as $, useState as V, useEffect as Z, useId as st, memo as on, Fragment as sn } from "react";
5
+ import { PlugInstUIIcon as ro, ExternalLinkInstUIIcon as io, FileInstUIIcon as lo, FileTextInstUIIcon as ao, MessagesSquareInstUIIcon as co, RocketInstUIIcon as uo, FilePenLineInstUIIcon as mo, LockInstUIIcon as rn, CircleAlertInstUIIcon as Pe, CircleCheckInstUIIcon as ln, ClockFadingInstUIIcon as an, CircleDashedInstUIIcon as cn, CornerDownRightInstUIIcon as po, IconArrowOpenUpLine as fo, IconArrowOpenDownLine as go } from "@instructure/ui-icons";
6
+ import { useQueryClient as ht, useInfiniteQuery as It, keepPreviousData as ho, InfiniteQueryObserver as Io } from "@tanstack/react-query";
7
+ import bo from "p-limit";
8
+ import { Button as ve, IconButton as Mo } from "@instructure/ui-buttons/v11_7";
9
+ import { Flex as E } from "@instructure/ui-flex/v11_7";
10
+ import { Text as v } from "@instructure/ui-text/v11_7";
11
+ import { View as T } from "@instructure/ui-view/v11_7";
12
+ import { TruncateWithTooltip as yo, politeAnnounce as pe, getLiveRegion as un } from "@instructure/platform-instui-bindings";
13
+ import { Alert as dn } from "@instructure/ui-alerts/v11_7";
14
+ import { Heading as mn } from "@instructure/ui-heading/v11_7";
15
+ import { ProgressBar as So } from "@instructure/ui-progress/v11_7";
16
+ import { Spinner as rt } from "@instructure/ui-spinner/v11_7";
17
+ import { Tooltip as pn } from "@instructure/ui-tooltip/v11_7";
18
+ import { useTheme as fn } from "@instructure/emotion";
19
+ import { ScreenReaderContent as it } from "@instructure/ui-a11y-content";
20
+ import { Link as _o } from "@instructure/ui-link/v11_7";
21
+ import { isValid as lt, colorToRGB as at, overlayColors as To, alpha as Eo, color2hex as gn, contrast as oe, darken as Co, lighten as wo } from "@instructure/ui-color-utils";
22
+ import { Pill as Po } from "@instructure/ui-pill/v11_7";
23
+ import { WithBreakpoints as vo } from "@instructure/platform-with-breakpoints";
24
+ const Ao = m.object({
25
+ target: m.enum(["module", "item"]),
26
+ field: m.string(),
27
+ op: m.enum(["eq", "contains"]),
28
+ value: m.union([m.string(), m.boolean()])
29
29
  }).strict();
30
- function Gn(e, t) {
30
+ function xo(e, t) {
31
31
  const n = e == null ? void 0 : e[t.target];
32
32
  return !n || !Object.prototype.hasOwnProperty.call(n, t.field) ? !1 : n[t.field].includes(t.op);
33
33
  }
34
- const Yn = d.enum([
34
+ const Lo = m.enum([
35
35
  "assignment",
36
36
  "quiz",
37
37
  "discussion",
@@ -40,7 +40,7 @@ const Yn = d.enum([
40
40
  "external_url",
41
41
  "external_tool",
42
42
  "sub_header"
43
- ]), Wn = d.enum(["not_started", "in_progress", "complete", "incomplete", "missing", "locked"]), Qn = d.enum([
43
+ ]), Ro = m.enum(["not_started", "in_progress", "complete", "incomplete", "missing", "locked"]), ko = m.enum([
44
44
  "not_started",
45
45
  "in_progress",
46
46
  "complete",
@@ -48,7 +48,7 @@ const Yn = d.enum([
48
48
  "incomplete",
49
49
  "missing_and_incomplete",
50
50
  "locked"
51
- ]), Hn = d.enum([
51
+ ]), No = m.enum([
52
52
  "must_view",
53
53
  "must_mark_done",
54
54
  "must_contribute",
@@ -56,97 +56,97 @@ const Yn = d.enum([
56
56
  "min_score",
57
57
  "min_percentage",
58
58
  "unknown"
59
- ]), Vn = d.object({
60
- status: Qn.optional(),
61
- requirementsMet: d.number(),
62
- requirementCount: d.number(),
63
- percentComplete: d.number().min(0).max(100),
64
- nextDueAt: d.string().nullish(),
65
- missingCount: d.number(),
66
- incompleteCount: d.number()
67
- }), Bt = d.object({
68
- itemId: d.string(),
69
- type: Hn,
70
- minScore: d.number().nullish(),
71
- minPercentage: d.number().nullish()
72
- }), jt = d.object({
73
- id: d.string(),
74
- moduleId: d.string(),
75
- title: d.string(),
76
- type: Yn,
77
- position: d.number(),
78
- indent: d.number(),
79
- published: d.boolean(),
80
- url: d.string().nullish(),
81
- newTab: d.boolean().nullish(),
82
- completionRequirement: Bt.nullish(),
83
- dueAt: d.string().nullish(),
84
- status: Wn.optional(),
85
- pointsPossible: d.number().nullish(),
86
- extensions: d.record(d.unknown()).optional()
87
- }), Kn = d.object({
88
- id: d.string(),
89
- name: d.string()
90
- }), Zn = d.object({
91
- id: d.string(),
92
- name: d.string(),
93
- position: d.number(),
94
- published: d.boolean(),
95
- itemCount: d.number(),
96
- items: d.array(jt).optional(),
97
- unlockAt: d.string().nullish(),
98
- prerequisiteModules: d.array(Kn),
99
- requirementCount: d.number().nullish(),
100
- requireSequentialProgress: d.boolean(),
101
- completionRequirements: d.array(Bt).optional(),
102
- progress: Vn.optional(),
103
- collapsed: d.boolean().nullish(),
104
- extensions: d.record(d.unknown()).optional()
105
- }), Gt = d.object({
106
- hasNextPage: d.boolean(),
107
- endCursor: d.string().nullable()
59
+ ]), Do = m.object({
60
+ status: ko.optional(),
61
+ requirementsMet: m.number(),
62
+ requirementCount: m.number(),
63
+ percentComplete: m.number().min(0).max(100),
64
+ nextDueAt: m.string().nullish(),
65
+ missingCount: m.number(),
66
+ incompleteCount: m.number()
67
+ }), hn = m.object({
68
+ itemId: m.string(),
69
+ type: No,
70
+ minScore: m.number().nullish(),
71
+ minPercentage: m.number().nullish()
72
+ }), In = m.object({
73
+ id: m.string(),
74
+ moduleId: m.string(),
75
+ title: m.string(),
76
+ type: Lo,
77
+ position: m.number(),
78
+ indent: m.number(),
79
+ published: m.boolean(),
80
+ url: m.string().nullish(),
81
+ newTab: m.boolean().nullish(),
82
+ completionRequirement: hn.nullish(),
83
+ dueAt: m.string().nullish(),
84
+ status: Ro.optional(),
85
+ pointsPossible: m.number().nullish(),
86
+ extensions: m.record(m.unknown()).optional()
87
+ }), Oo = m.object({
88
+ id: m.string(),
89
+ name: m.string()
90
+ }), qo = m.object({
91
+ id: m.string(),
92
+ name: m.string(),
93
+ position: m.number(),
94
+ published: m.boolean(),
95
+ itemCount: m.number(),
96
+ items: m.array(In).optional(),
97
+ unlockAt: m.string().nullish(),
98
+ prerequisiteModules: m.array(Oo),
99
+ requirementCount: m.number().nullish(),
100
+ requireSequentialProgress: m.boolean(),
101
+ completionRequirements: m.array(hn).optional(),
102
+ progress: Do.optional(),
103
+ collapsed: m.boolean().nullish(),
104
+ extensions: m.record(m.unknown()).optional()
105
+ }), bn = m.object({
106
+ hasNextPage: m.boolean(),
107
+ endCursor: m.string().nullable()
108
108
  }).refine((e) => !e.hasNextPage || e.endCursor !== null, {
109
109
  message: 'hasNextPage is true but endCursor is null: there is another page and no cursor to ask for it with, which renders a "Load more" that can never load.',
110
110
  path: ["endCursor"]
111
- }), Xn = d.object({
112
- modules: d.array(Zn),
113
- pageInfo: Gt
114
- }), Jn = d.object({
115
- items: d.array(jt),
116
- pageInfo: Gt
117
- }), Yt = "career.estimatedDurationMinutes";
118
- function eo(e) {
111
+ }), Fo = m.object({
112
+ modules: m.array(qo),
113
+ pageInfo: bn
114
+ }), Uo = m.object({
115
+ items: m.array(In),
116
+ pageInfo: bn
117
+ }), Mn = "career.estimatedDurationMinutes";
118
+ function zo(e) {
119
119
  var n;
120
- const t = (n = e.extensions) == null ? void 0 : n[Yt];
120
+ const t = (n = e.extensions) == null ? void 0 : n[Mn];
121
121
  return typeof t != "number" || !Number.isFinite(t) || t <= 0 ? null : t;
122
122
  }
123
- function Ze(e, t) {
124
- return t == null ? e : { ...e, [Yt]: t };
123
+ function bt(e, t) {
124
+ return t == null ? e : { ...e, [Mn]: t };
125
125
  }
126
- const Ge = 100, Xe = 2e3;
127
- class to extends Error {
126
+ const ct = 100, Mt = 2e3;
127
+ class $o extends Error {
128
128
  constructor(t, n) {
129
129
  super(
130
130
  `This in-memory adapter was built for course ${t} but was asked for course ${n}. A fixture serves exactly one course.`
131
131
  ), this.name = "InMemoryCourseMismatchError", this.expected = t, this.received = n;
132
132
  }
133
133
  }
134
- const no = (e) => `offset:${e}`, oo = (e) => {
134
+ const Bo = (e) => `offset:${e}`, Go = (e) => {
135
135
  if (!e) return 0;
136
136
  const t = Number.parseInt(e.replace("offset:", ""), 10);
137
137
  return Number.isFinite(t) && t >= 0 ? t : 0;
138
- }, at = (e) => {
138
+ }, At = (e) => {
139
139
  if (e != null && e.aborted)
140
140
  throw new DOMException("The operation was aborted.", "AbortError");
141
141
  };
142
- function ut(e, t, n) {
143
- const o = oo(t), r = e.slice(o, o + n), s = o + r.length, l = s < e.length;
142
+ function xt(e, t, n) {
143
+ const o = Go(t), s = e.slice(o, o + n), r = o + s.length, i = r < e.length;
144
144
  return {
145
- slice: r,
146
- pageInfo: { hasNextPage: l, endCursor: l ? no(s) : null }
145
+ slice: s,
146
+ pageInfo: { hasNextPage: i, endCursor: i ? Bo(r) : null }
147
147
  };
148
148
  }
149
- const ro = /* @__PURE__ */ new Map([
149
+ const jo = /* @__PURE__ */ new Map([
150
150
  ["COMPLETED", (e) => {
151
151
  var t;
152
152
  return ((t = e.progress) == null ? void 0 : t.status) === "complete";
@@ -166,67 +166,67 @@ const ro = /* @__PURE__ */ new Map([
166
166
  return ((t = e.progress) == null ? void 0 : t.status) !== "complete" && ((n = e.progress) == null ? void 0 : n.status) !== "in_progress";
167
167
  }
168
168
  ]
169
- ]), so = { module: { completionStatus: ["eq"] } };
170
- function io(e) {
169
+ ]), Yo = { module: { completionStatus: ["eq"] } };
170
+ function Wo(e) {
171
171
  if (e.target !== "module" || e.field !== "completionStatus" || e.op !== "eq")
172
172
  throw new Error(
173
173
  `in-memory adapter cannot compile ${e.target}.${e.field} ${e.op}`
174
174
  );
175
- const t = typeof e.value == "string" ? ro.get(e.value) : void 0;
175
+ const t = typeof e.value == "string" ? jo.get(e.value) : void 0;
176
176
  if (!t) throw new Error(`unknown completionStatus "${String(e.value)}"`);
177
177
  return t;
178
178
  }
179
- function xl(e, t = {}) {
180
- const n = (r) => e.itemsByModuleId[r] ?? [], o = (r) => {
181
- if (r !== e.courseId)
182
- throw new to(e.courseId, r);
179
+ function Wa(e, t = {}) {
180
+ const n = (s) => e.itemsByModuleId[s] ?? [], o = (s) => {
181
+ if (s !== e.courseId)
182
+ throw new $o(e.courseId, s);
183
183
  };
184
184
  return {
185
- capabilities: so,
185
+ capabilities: Yo,
186
186
  async listModules({
187
- courseId: r,
188
- cursor: s,
189
- pageSize: l,
187
+ courseId: s,
188
+ cursor: r,
189
+ pageSize: i,
190
190
  includeItems: a,
191
- filter: m,
192
- inlineItemsFirst: c,
193
- signal: u
191
+ filter: d,
192
+ inlineItemsFirst: u,
193
+ signal: c
194
194
  }) {
195
- var _;
196
- at(u), o(r), (_ = t.onRequest) == null || _.call(t, "listModules", { operation: "listModules", courseId: r });
197
- const p = m ? e.modules.filter(io(m)) : e.modules, { slice: f, pageInfo: y } = ut(p, s, l), g = Math.min(c ?? Ge, Ge);
198
- return { modules: f.map((C) => {
199
- const b = n(C.id), w = a && b.length <= g;
200
- return { ...C, itemCount: b.length, items: w ? b : void 0 };
195
+ var w;
196
+ At(c), o(s), (w = t.onRequest) == null || w.call(t, "listModules", { operation: "listModules", courseId: s });
197
+ const p = d ? e.modules.filter(Wo(d)) : e.modules, { slice: f, pageInfo: y } = xt(p, r, i), g = Math.min(u ?? ct, ct);
198
+ return { modules: f.map((x) => {
199
+ const _ = n(x.id), A = a && _.length <= g;
200
+ return { ...x, itemCount: _.length, items: A ? _ : void 0 };
201
201
  }), pageInfo: y };
202
202
  },
203
203
  async listModuleItems({
204
- courseId: r,
205
- moduleId: s,
206
- cursor: l,
204
+ courseId: s,
205
+ moduleId: r,
206
+ cursor: i,
207
207
  pageSize: a,
208
- signal: m
208
+ signal: d
209
209
  }) {
210
210
  var p;
211
- at(m), o(r), (p = t.onRequest) == null || p.call(t, "listModuleItems", { operation: "listModuleItems", courseId: r, moduleId: s });
212
- const { slice: c, pageInfo: u } = ut(n(s), l, a);
213
- return { items: c, pageInfo: u };
211
+ At(d), o(s), (p = t.onRequest) == null || p.call(t, "listModuleItems", { operation: "listModuleItems", courseId: s, moduleId: r });
212
+ const { slice: u, pageInfo: c } = xt(n(r), i, a);
213
+ return { items: u, pageInfo: c };
214
214
  }
215
215
  };
216
216
  }
217
- class Wt extends Error {
217
+ class yn extends Error {
218
218
  constructor(t, n, o) {
219
- const r = t === "module" ? "module" : "module item";
219
+ const s = t === "module" ? "module" : "module item";
220
220
  super(
221
- `Canvas returned ${r} ${n} without a usable ${o}. This is a partial response; refusing to guess a value for it.`
221
+ `Canvas returned ${s} ${n} without a usable ${o}. This is a partial response; refusing to guess a value for it.`
222
222
  ), this.name = "PartialCanvasResponseError", this.subject = t, this.id = n, this.field = o;
223
223
  }
224
224
  }
225
- function Qt(e, t, n) {
225
+ function Sn(e, t, n) {
226
226
  if (e != null) return e;
227
- throw new Wt(t, n, "published");
227
+ throw new yn(t, n, "published");
228
228
  }
229
- function lo(e, t) {
229
+ function Ho(e, t) {
230
230
  if (e.onUnsupportedItem) {
231
231
  e.onUnsupportedItem(t);
232
232
  return;
@@ -235,7 +235,7 @@ function lo(e, t) {
235
235
  `[platform-modules] dropped module item ${t.id}: content type "${t.typename ?? "null"}" is outside the closed ModuleItemType enum. Pass \`onUnsupportedItem\` to handle these yourself.`
236
236
  );
237
237
  }
238
- const ao = {
238
+ const Ko = {
239
239
  Assignment: "assignment",
240
240
  Quiz: "quiz",
241
241
  Discussion: "discussion",
@@ -247,21 +247,21 @@ const ao = {
247
247
  SubHeader: "sub_header",
248
248
  PeerReviewSubAssignment: "assignment"
249
249
  };
250
- function uo(e) {
250
+ function Qo(e) {
251
251
  const t = e == null ? void 0 : e.__typename;
252
252
  if (!t) return null;
253
- const n = ao[t];
253
+ const n = Ko[t];
254
254
  return n ? n === "assignment" && (e == null ? void 0 : e.isNewQuiz) === !0 ? "quiz" : n : null;
255
255
  }
256
- const co = /^P(?!$)(?:(\d+(?:\.\d+)?)W)?(?:(\d+(?:\.\d+)?)D)?(?:T(?!$)(?:(\d+(?:\.\d+)?)H)?(?:(\d+(?:\.\d+)?)M)?(?:(\d+(?:\.\d+)?)S)?)?$/;
257
- function mo(e) {
256
+ const Vo = /^P(?!$)(?:(\d+(?:\.\d+)?)W)?(?:(\d+(?:\.\d+)?)D)?(?:T(?!$)(?:(\d+(?:\.\d+)?)H)?(?:(\d+(?:\.\d+)?)M)?(?:(\d+(?:\.\d+)?)S)?)?$/;
257
+ function Zo(e) {
258
258
  if (!e) return null;
259
- const t = co.exec(e);
259
+ const t = Vo.exec(e);
260
260
  if (!t) return null;
261
- const [, n, o, r, s, l] = t, a = Number(n ?? 0) * 7 * 24 * 60 + Number(o ?? 0) * 24 * 60 + Number(r ?? 0) * 60 + Number(s ?? 0) + Number(l ?? 0) / 60;
261
+ const [, n, o, s, r, i] = t, a = Number(n ?? 0) * 7 * 24 * 60 + Number(o ?? 0) * 24 * 60 + Number(s ?? 0) * 60 + Number(r ?? 0) + Number(i ?? 0) / 60;
262
262
  return Math.round(a);
263
263
  }
264
- const po = /* @__PURE__ */ new Set([
264
+ const Xo = /* @__PURE__ */ new Set([
265
265
  "must_view",
266
266
  "must_mark_done",
267
267
  "must_contribute",
@@ -269,42 +269,42 @@ const po = /* @__PURE__ */ new Set([
269
269
  "min_score",
270
270
  "min_percentage"
271
271
  ]);
272
- function fo(e) {
273
- return po.has(e) ? e : "unknown";
272
+ function Jo(e) {
273
+ return Xo.has(e) ? e : "unknown";
274
274
  }
275
- function go(e) {
275
+ function es(e) {
276
276
  return {
277
277
  itemId: String(e.id),
278
- type: fo(e.type),
278
+ type: Jo(e.type),
279
279
  minScore: e.minScore ?? null,
280
280
  minPercentage: e.minPercentage ?? null
281
281
  };
282
282
  }
283
- function Ht(e) {
283
+ function _n(e) {
284
284
  return {
285
285
  hasNextPage: (e == null ? void 0 : e.hasNextPage) ?? !1,
286
286
  endCursor: (e == null ? void 0 : e.endCursor) ?? null
287
287
  };
288
288
  }
289
- const ho = /* @__PURE__ */ new Set(["min_score", "min_percentage"]);
290
- function Io(e) {
289
+ const ts = /* @__PURE__ */ new Set(["min_score", "min_percentage"]);
290
+ function ns(e) {
291
291
  var t;
292
292
  for (const n of ((t = e == null ? void 0 : e.submissionsConnection) == null ? void 0 : t.nodes) ?? [])
293
293
  if (n) return n;
294
294
  return null;
295
295
  }
296
- function Vt(e, t) {
296
+ function Tn(e, t) {
297
297
  if (!e) return;
298
- const n = new Map(t.map((s) => [s.itemId, s.type])), o = /* @__PURE__ */ new Set(), r = /* @__PURE__ */ new Map();
299
- for (const s of e.requirementsMet ?? []) {
300
- if (!s) continue;
301
- const l = String(s.id);
302
- n.get(l) === s.type && o.add(l);
298
+ const n = new Map(t.map((r) => [r.itemId, r.type])), o = /* @__PURE__ */ new Set(), s = /* @__PURE__ */ new Map();
299
+ for (const r of e.requirementsMet ?? []) {
300
+ if (!r) continue;
301
+ const i = String(r.id);
302
+ n.get(i) === r.type && o.add(i);
303
303
  }
304
- for (const s of e.incompleteRequirements ?? []) {
305
- if (!s) continue;
306
- const l = String(s.id);
307
- n.get(l) === s.type && ho.has(s.type) && r.set(l, s.score ?? null);
304
+ for (const r of e.incompleteRequirements ?? []) {
305
+ if (!r) continue;
306
+ const i = String(r.id);
307
+ n.get(i) === r.type && ts.has(r.type) && s.set(i, r.score ?? null);
308
308
  }
309
309
  return {
310
310
  locked: e.locked === !0 || e.workflowState === "locked",
@@ -312,10 +312,10 @@ function Vt(e, t) {
312
312
  completed: e.completed === !0 || e.workflowState === "completed",
313
313
  started: e.started === !0 || e.workflowState === "started",
314
314
  requirementsMetItemIds: o,
315
- incompleteRequirementScores: r
315
+ incompleteRequirementScores: s
316
316
  };
317
317
  }
318
- const bo = {
318
+ const os = {
319
319
  LOCKED: "locked",
320
320
  MISSING: "missing",
321
321
  INCOMPLETE: "incomplete",
@@ -323,11 +323,11 @@ const bo = {
323
323
  IN_PROGRESS: "in_progress",
324
324
  NOT_STARTED: "not_started"
325
325
  };
326
- function Mo(e) {
326
+ function ss(e) {
327
327
  if (e != null)
328
- return bo[e];
328
+ return os[e];
329
329
  }
330
- const yo = {
330
+ const rs = {
331
331
  LOCKED: "locked",
332
332
  MISSING: "missing",
333
333
  MISSING_AND_INCOMPLETE: "missing_and_incomplete",
@@ -336,89 +336,89 @@ const yo = {
336
336
  IN_PROGRESS: "in_progress",
337
337
  NOT_STARTED: "not_started"
338
338
  };
339
- function So(e) {
339
+ function is(e) {
340
340
  if (e != null)
341
- return yo[e];
341
+ return rs[e];
342
342
  }
343
- function _o(e, t, n) {
344
- var a, m;
343
+ function ls(e, t, n) {
344
+ var a, d;
345
345
  if (!n) return;
346
- const o = e.requirementCount ?? t.length, r = Math.min(n.requirementsMetItemIds.size, o), s = ((a = e.submissionStatistics) == null ? void 0 : a.missingAssignmentCount) ?? 0, l = [...n.incompleteRequirementScores.values()].filter(
347
- (c) => c != null
346
+ const o = e.requirementCount ?? t.length, s = Math.min(n.requirementsMetItemIds.size, o), r = ((a = e.submissionStatistics) == null ? void 0 : a.missingAssignmentCount) ?? 0, i = [...n.incompleteRequirementScores.values()].filter(
347
+ (u) => u != null
348
348
  ).length;
349
349
  return {
350
- status: So(e.moduleStatus) ?? (n.locked ? "locked" : void 0),
351
- requirementsMet: r,
350
+ status: is(e.moduleStatus) ?? (n.locked ? "locked" : void 0),
351
+ requirementsMet: s,
352
352
  requirementCount: o,
353
- percentComplete: o > 0 ? Math.round(r / o * 100) : 0,
354
- nextDueAt: ((m = e.submissionStatistics) == null ? void 0 : m.nextDueAt) ?? null,
355
- missingCount: s,
356
- incompleteCount: l
353
+ percentComplete: o > 0 ? Math.round(s / o * 100) : 0,
354
+ nextDueAt: ((d = e.submissionStatistics) == null ? void 0 : d.nextDueAt) ?? null,
355
+ missingCount: r,
356
+ incompleteCount: i
357
357
  };
358
358
  }
359
- function To(e, t, n, o = {}, r) {
360
- var c, u, p;
361
- const s = String(e._id), l = uo(e.content);
362
- if (!l)
363
- return lo(o, { id: s, typename: ((c = e.content) == null ? void 0 : c.__typename) ?? null }), null;
364
- const a = Io(e.content), m = n.get(s) ?? null;
359
+ function as(e, t, n, o = {}, s) {
360
+ var u, c, p;
361
+ const r = String(e._id), i = Qo(e.content);
362
+ if (!i)
363
+ return Ho(o, { id: r, typename: ((u = e.content) == null ? void 0 : u.__typename) ?? null }), null;
364
+ const a = ns(e.content), d = n.get(r) ?? null;
365
365
  return {
366
- id: s,
366
+ id: r,
367
367
  moduleId: t,
368
368
  title: e.title ?? "",
369
- type: l,
369
+ type: i,
370
370
  position: e.position ?? 0,
371
371
  indent: e.indent ?? 0,
372
- published: Qt(e.published, "moduleItem", s),
372
+ published: Sn(e.published, "moduleItem", r),
373
373
  url: e.url ?? null,
374
374
  newTab: e.newTab ?? !1,
375
- completionRequirement: m,
376
- dueAt: (a == null ? void 0 : a.cachedDueDate) ?? ((u = e.content) == null ? void 0 : u.dueAt) ?? null,
377
- status: r ? Mo(e.moduleItemStatus) ?? (r.locked ? "locked" : void 0) : void 0,
375
+ completionRequirement: d,
376
+ dueAt: (a == null ? void 0 : a.cachedDueDate) ?? ((c = e.content) == null ? void 0 : c.dueAt) ?? null,
377
+ status: s ? ss(e.moduleItemStatus) ?? (s.locked ? "locked" : void 0) : void 0,
378
378
  pointsPossible: ((p = e.content) == null ? void 0 : p.pointsPossible) ?? null,
379
- extensions: Ze(
379
+ extensions: bt(
380
380
  void 0,
381
- mo(e.estimatedDuration)
381
+ Zo(e.estimatedDuration)
382
382
  )
383
383
  };
384
384
  }
385
- function Kt(e, t, n, o, r) {
386
- const s = [];
387
- for (const l of e ?? []) {
388
- if (!l) continue;
389
- const a = To(
390
- l,
385
+ function En(e, t, n, o, s) {
386
+ const r = [];
387
+ for (const i of e ?? []) {
388
+ if (!i) continue;
389
+ const a = as(
390
+ i,
391
391
  t,
392
392
  n,
393
393
  o,
394
- r
394
+ s
395
395
  );
396
- a && s.push(a);
396
+ a && r.push(a);
397
397
  }
398
- return s;
398
+ return r;
399
399
  }
400
- function Zt(e) {
400
+ function Cn(e) {
401
401
  const t = [], n = /* @__PURE__ */ new Map();
402
402
  for (const o of e ?? []) {
403
403
  if (!o) continue;
404
- const r = go(o);
405
- t.push(r), n.set(r.itemId, r);
404
+ const s = es(o);
405
+ t.push(s), n.set(s.itemId, s);
406
406
  }
407
407
  return { list: t, byItemId: n };
408
408
  }
409
- function Eo(e, t = {}) {
410
- var c, u;
409
+ function cs(e, t = {}) {
410
+ var u, c;
411
411
  const n = String(e._id);
412
412
  if (e.moduleItemsTotalCount == null)
413
- throw new Wt("module", n, "moduleItemsTotalCount");
414
- const { list: o, byItemId: r } = Zt(e.completionRequirements), s = e.moduleItemsConnection, l = s != null && !((c = s.pageInfo) != null && c.hasNextPage), a = Vt(e.progression, o), m = l ? Kt(s.nodes, n, r, t, a) : void 0;
413
+ throw new yn("module", n, "moduleItemsTotalCount");
414
+ const { list: o, byItemId: s } = Cn(e.completionRequirements), r = e.moduleItemsConnection, i = r != null && !((u = r.pageInfo) != null && u.hasNextPage), a = Tn(e.progression, o), d = i ? En(r.nodes, n, s, t, a) : void 0;
415
415
  return {
416
416
  id: n,
417
417
  name: e.name ?? "",
418
418
  position: e.position ?? 0,
419
- published: Qt(e.published, "module", n),
419
+ published: Sn(e.published, "module", n),
420
420
  itemCount: e.moduleItemsTotalCount,
421
- items: m,
421
+ items: d,
422
422
  unlockAt: e.unlockAt ?? null,
423
423
  prerequisiteModules: (e.prerequisites ?? []).filter(
424
424
  (p) => p != null
@@ -426,30 +426,30 @@ function Eo(e, t = {}) {
426
426
  requirementCount: e.requirementCount ?? null,
427
427
  requireSequentialProgress: e.requireSequentialProgress ?? !1,
428
428
  completionRequirements: o,
429
- progress: _o(e, o, a),
430
- collapsed: ((u = e.progression) == null ? void 0 : u.collapsed) ?? null
429
+ progress: ls(e, o, a),
430
+ collapsed: ((c = e.progression) == null ? void 0 : c.collapsed) ?? null
431
431
  };
432
432
  }
433
- function Po(e, t = {}) {
434
- var r;
435
- const n = (r = e == null ? void 0 : e.legacyNode) == null ? void 0 : r.modulesConnection, o = [];
436
- for (const s of (n == null ? void 0 : n.nodes) ?? [])
437
- s && o.push(Eo(s, t));
438
- return { modules: o, pageInfo: Ht(n == null ? void 0 : n.pageInfo) };
433
+ function us(e, t = {}) {
434
+ var s;
435
+ const n = (s = e == null ? void 0 : e.legacyNode) == null ? void 0 : s.modulesConnection, o = [];
436
+ for (const r of (n == null ? void 0 : n.nodes) ?? [])
437
+ r && o.push(cs(r, t));
438
+ return { modules: o, pageInfo: _n(n == null ? void 0 : n.pageInfo) };
439
439
  }
440
- function Co(e, t, n = {}) {
441
- const o = e == null ? void 0 : e.legacyNode, { list: r, byItemId: s } = Zt(o == null ? void 0 : o.completionRequirements), l = o == null ? void 0 : o.moduleItemsConnection, a = Vt(o == null ? void 0 : o.progression, r);
440
+ function ds(e, t, n = {}) {
441
+ const o = e == null ? void 0 : e.legacyNode, { list: s, byItemId: r } = Cn(o == null ? void 0 : o.completionRequirements), i = o == null ? void 0 : o.moduleItemsConnection, a = Tn(o == null ? void 0 : o.progression, s);
442
442
  return {
443
- items: Kt(l == null ? void 0 : l.nodes, t, s, n, a),
444
- pageInfo: Ht(l == null ? void 0 : l.pageInfo)
443
+ items: En(i == null ? void 0 : i.nodes, t, r, n, a),
444
+ pageInfo: _n(i == null ? void 0 : i.pageInfo)
445
445
  };
446
446
  }
447
- const wo = Me`
447
+ const ms = xe`
448
448
  fragment PlatformModulesSubmissionFields on Submission {
449
449
  _id
450
450
  cachedDueDate
451
451
  }
452
- `, Xt = Me`
452
+ `, wn = xe`
453
453
  fragment PlatformModulesItemFields on ModuleItem {
454
454
  _id
455
455
  title
@@ -497,8 +497,8 @@ const wo = Me`
497
497
  }
498
498
  }
499
499
  }
500
- ${wo}
501
- `, Jt = Me`
500
+ ${ms}
501
+ `, Pn = xe`
502
502
  fragment PlatformModulesProgressionFields on ModuleProgression {
503
503
  workflowState
504
504
  completed
@@ -518,7 +518,7 @@ const wo = Me`
518
518
  score
519
519
  }
520
520
  }
521
- `, vo = Me`
521
+ `, ps = xe`
522
522
  query PlatformModulesGetModules(
523
523
  $courseId: ID!
524
524
  $first: Int!
@@ -578,9 +578,9 @@ const wo = Me`
578
578
  }
579
579
  }
580
580
  }
581
- ${Xt}
582
- ${Jt}
583
- `, Lo = Me`
581
+ ${wn}
582
+ ${Pn}
583
+ `, fs = xe`
584
584
  query PlatformModulesGetModuleItems(
585
585
  $moduleId: ID!
586
586
  $first: Int!
@@ -611,265 +611,340 @@ const wo = Me`
611
611
  }
612
612
  }
613
613
  }
614
- ${Xt}
615
- ${Jt}
614
+ ${wn}
615
+ ${Pn}
616
616
  `;
617
- function en() {
617
+ function vn() {
618
618
  return new DOMException("The operation was aborted.", "AbortError");
619
619
  }
620
- function Ce(e) {
621
- if (e != null && e.aborted) throw en();
620
+ function We(e) {
621
+ if (e != null && e.aborted) throw vn();
622
622
  }
623
- function ct(e, t) {
623
+ function Lt(e, t) {
624
624
  return t ? new Promise((n, o) => {
625
- const r = () => o(en());
626
- t.addEventListener("abort", r, { once: !0 }), e.then(n, o).finally(() => t.removeEventListener("abort", r));
625
+ const s = () => o(vn());
626
+ t.addEventListener("abort", s, { once: !0 }), e.then(n, o).finally(() => t.removeEventListener("abort", s));
627
627
  }) : e;
628
628
  }
629
- const dt = [
629
+ const Rt = [
630
630
  "COMPLETED",
631
631
  "INCOMPLETE",
632
632
  "IN_PROGRESS",
633
633
  "NOT_STARTED"
634
- ], Ao = {
634
+ ], gs = {
635
635
  module: { completionStatus: ["eq"] }
636
636
  };
637
- function Ro(e) {
637
+ function hs(e) {
638
638
  if (!e) return null;
639
639
  if (e.target !== "module" || e.field !== "completionStatus" || e.op !== "eq")
640
640
  throw new Error(
641
641
  `Canvas GraphQL cannot serve ${e.target}.${e.field} "${e.op}". Only module.completionStatus eq is compiled here.`
642
642
  );
643
643
  const t = e.value;
644
- if (!dt.includes(t))
644
+ if (!Rt.includes(t))
645
645
  throw new Error(
646
- `"${e.value}" is not a ModuleCompletionStatus (${dt.join(", ")}).`
646
+ `"${e.value}" is not a ModuleCompletionStatus (${Rt.join(", ")}).`
647
647
  );
648
648
  return { completionStatus: t };
649
649
  }
650
- function Nl({
650
+ function Ha({
651
651
  executeQuery: e,
652
- inlineItemLimit: t = Ge,
653
- nodeBudget: n = Xe,
652
+ inlineItemLimit: t = ct,
653
+ nodeBudget: n = Mt,
654
654
  onUnsupportedItem: o,
655
- studentId: r,
656
- validate: s = !0,
657
- capabilities: l = Ao
655
+ studentId: s,
656
+ validate: r = !0,
657
+ capabilities: i = gs
658
658
  }) {
659
- const a = r != null, m = { onUnsupportedItem: o };
659
+ const a = s != null, d = { onUnsupportedItem: o };
660
660
  return {
661
661
  inlineNodeBudget: n,
662
- capabilities: l,
662
+ capabilities: i,
663
663
  async listModules({
664
- courseId: c,
665
- cursor: u,
664
+ courseId: u,
665
+ cursor: c,
666
666
  pageSize: p,
667
667
  includeItems: f,
668
668
  filter: y,
669
669
  inlineItemsFirst: g,
670
- inlineFirst: h,
671
- signal: _
670
+ inlineFirst: b,
671
+ signal: w
672
672
  }) {
673
- Ce(_);
674
- const C = f ? Math.min(h ?? p, p) : p, b = Math.min(g ?? t, t), w = Math.max(1, Math.min(b, Math.floor(n / C))), k = await ct(
675
- e(vo, {
676
- courseId: c,
677
- first: C,
678
- after: u ?? null,
673
+ We(w);
674
+ const x = f ? Math.min(b ?? p, p) : p, _ = Math.min(g ?? t, t), A = Math.max(1, Math.min(_, Math.floor(n / x))), q = await Lt(
675
+ e(ps, {
676
+ courseId: u,
677
+ first: x,
678
+ after: c ?? null,
679
679
  includeItems: f,
680
- itemsFirst: w,
680
+ itemsFirst: A,
681
681
  includeSubmissions: a,
682
- studentId: r ?? null,
683
- filter: Ro(y)
682
+ studentId: s ?? null,
683
+ filter: hs(y)
684
684
  }),
685
- _
685
+ w
686
686
  );
687
- Ce(_);
688
- const q = Po(k, m);
689
- return s ? Xn.parse(q) : q;
687
+ We(w);
688
+ const B = us(q, d);
689
+ return r ? Fo.parse(B) : B;
690
690
  },
691
691
  async listModuleItems({
692
- moduleId: c,
693
- cursor: u,
692
+ moduleId: u,
693
+ cursor: c,
694
694
  pageSize: p,
695
695
  signal: f
696
696
  }) {
697
- Ce(f);
698
- const y = await ct(
699
- e(Lo, {
700
- moduleId: c,
697
+ We(f);
698
+ const y = await Lt(
699
+ e(fs, {
700
+ moduleId: u,
701
701
  first: p,
702
- after: u ?? null,
702
+ after: c ?? null,
703
703
  includeSubmissions: a,
704
- studentId: r ?? null
704
+ studentId: s ?? null
705
705
  }),
706
706
  f
707
707
  );
708
- Ce(f);
709
- const g = Co(y, c, m);
710
- return s ? Jn.parse(g) : g;
708
+ We(f);
709
+ const g = ds(y, u, d);
710
+ return r ? Uo.parse(g) : g;
711
711
  }
712
712
  };
713
713
  }
714
- const xo = "Course modules", No = { one: "%{count} module loaded", other: "%{count} modules loaded" }, qo = "Expand / collapse", ko = "Expand all", Do = "Collapse all", Oo = "This filter runs on the modules loaded so far — load more to filter the rest of the course.", Fo = "Modules failed to load: %{message}", Uo = "Loading modules", zo = "This course has no modules.", $o = { one: "The only loaded module does not match this filter.", other: "None of the %{count} loaded modules match this filter." }, Bo = "No modules match this filter.", jo = "Clear filters", Go = "Loading more modules…", Yo = "Load more modules (%{count} loaded)", Wo = { one: "The only module in this course is loaded.", other: "All %{count} modules in this course are loaded." }, Qo = "Filter", Ho = "All", Vo = "In progress", Ko = "Complete", Zo = "Due this week", Xo = "Missing", Jo = "Locked until %{name} is completed.", er = "Locked until %{prerequisites} are completed.", tr = "%{count} prerequisites", nr = "%{label}. %{name}", or = "%{name} progress", rr = { one: "%{loaded} of %{count} item loaded in %{name}", other: "%{loaded} of %{count} items loaded in %{name}" }, sr = "Items failed to load: %{message}", ir = "Loading items", lr = "Loading…", ar = "No items.", ur = "Loading more items…", cr = "Load more items (%{loaded} of %{count} loaded)", dr = "(unpublished)", mr = "Collapse %{name}", pr = "Expand %{name}", fr = "Not started", gr = "In progress", hr = "All completed", Ir = "%{count} Missing", br = "%{count} Incomplete", Mr = "%{missing} & %{incomplete}", yr = "Locked", Sr = "Not started", _r = "In progress", Tr = "Completed", Er = "Incomplete", Pr = "Missing", Cr = "Locked", wr = "Assignment", vr = "Quiz", Lr = "Discussion", Ar = "Page", Rr = "File", xr = "External URL", Nr = "External tool", qr = "Text header", kr = "Item type", Dr = "Due date", Or = "Points", Fr = "Requirement", Ur = "Estimated duration", zr = "Publish state", $r = "View the item", Br = "Submit the assignment", jr = "Contribute to the page", Gr = "Mark as done", Yr = "Score at least the minimum", Wr = "Score at least %{count}", Qr = "Score at least the minimum percentage", Hr = "Score at least %{count}%", Vr = "Complete the requirement", Kr = "today, %{time}", Zr = "yesterday, %{time}", Xr = "tomorrow, %{time}", Jr = "%{date}, %{time}", es = "%{time} (%{zone})", ts = "Due %{when}", ns = "Will unlock on %{when}", os = "Unlocked on %{when}", rs = { one: "%{count} pt", other: "%{count} pts" }, ss = { one: "%{percent}% | %{met} of %{count} requirement met", other: "%{percent}% | %{met} of %{count} requirements met" }, is = { one: "%{percent}% complete, %{met} of %{count} requirement met", other: "%{percent}% complete, %{met} of %{count} requirements met" }, ls = "%{count} min", as = "Unpublished", us = "Untitled item", cs = "opens in a new window", ds = {
715
- pageTitle: xo,
716
- modulesLoadedAnnouncement: No,
717
- expandCollapseTrigger: qo,
718
- expandAll: ko,
719
- collapseAll: Do,
720
- filterScopeHint: Oo,
721
- modulesLoadErrorAlert: Fo,
722
- modulesLoadingSpinnerLabel: Uo,
723
- noModulesEmptyState: zo,
724
- filteredEmptyState: $o,
725
- noFilterMatches: Bo,
726
- clearFilters: jo,
727
- loadMoreModulesLoading: Go,
728
- loadMoreModules: Yo,
729
- allModulesLoaded: Wo,
730
- filterGroupLabel: Qo,
731
- filterAll: Ho,
732
- filterInProgress: Vo,
733
- filterComplete: Ko,
734
- filterDueThisWeek: Zo,
735
- filterMissing: Xo,
736
- lockedByPrerequisiteByline: Jo,
737
- lockedByPrerequisitesByline: er,
738
- lockedByPrerequisitesCount: tr,
739
- moduleNameWithLabel: nr,
740
- moduleProgressScreenReaderLabel: or,
741
- itemsLoadedAnnouncement: rr,
742
- itemsLoadErrorAlert: sr,
743
- itemsLoadingSpinnerLabel: ir,
744
- itemsLoadingText: lr,
745
- noItemsEmptyState: ar,
746
- loadMoreItemsLoading: ur,
747
- loadMoreItems: cr,
748
- moduleUnpublishedBadge: dr,
749
- collapseModule: mr,
750
- expandModule: pr,
751
- moduleStatusNotStarted: fr,
752
- moduleStatusInProgress: gr,
753
- moduleStatusComplete: hr,
754
- moduleStatusMissing: Ir,
755
- moduleStatusIncomplete: br,
756
- moduleStatusMissingAndIncomplete: Mr,
757
- moduleStatusLocked: yr,
758
- itemStatusNotStarted: Sr,
759
- itemStatusInProgress: _r,
760
- itemStatusComplete: Tr,
761
- itemStatusIncomplete: Er,
762
- itemStatusMissing: Pr,
763
- itemStatusLocked: Cr,
764
- itemTypeAssignment: wr,
765
- itemTypeQuiz: vr,
766
- itemTypeDiscussion: Lr,
767
- itemTypePage: Ar,
768
- itemTypeFile: Rr,
769
- itemTypeExternalUrl: xr,
770
- itemTypeExternalTool: Nr,
771
- itemTypeSubHeader: qr,
772
- metaFieldTypeLabel: kr,
773
- metaFieldDueAtLabel: Dr,
774
- metaFieldPointsLabel: Or,
775
- metaFieldRequirementLabel: Fr,
776
- metaFieldDurationLabel: Ur,
777
- metaFieldPublishStateLabel: zr,
778
- requirementMustView: $r,
779
- requirementMustSubmit: Br,
780
- requirementMustContribute: jr,
781
- requirementMustMarkDone: Gr,
782
- requirementMinScoreUnknown: Yr,
783
- requirementMinScore: Wr,
784
- requirementMinPercentageUnknown: Qr,
785
- requirementMinPercentage: Hr,
786
- requirementUnknown: Vr,
787
- dateTimeToday: Kr,
788
- dateTimeYesterday: Zr,
789
- dateTimeTomorrow: Xr,
790
- dateTimeWithDate: Jr,
791
- timeWithZone: es,
792
- dueByline: ts,
793
- unlockByline: ns,
794
- unlockedByline: os,
795
- pointsAbbreviated: rs,
796
- progressSummary: ss,
797
- progressScreenReaderValue: is,
798
- durationMinutes: ls,
799
- itemUnpublishedLabel: as,
800
- itemUntitled: us,
801
- opensInNewWindow: cs
802
- }, ms = /%\{(\w+)\}/g, ps = ds, oe = "en-US", fs = /* @__PURE__ */ new Map(), gs = /* @__PURE__ */ new Map();
803
- function tn(e, t, n) {
714
+ const ge = ["platform-modules"], Le = {
715
+ all: ge,
716
+ course: (e) => [...ge, e],
717
+ list: (e, t = {}) => [...ge, e, "list", t],
718
+ items: (e, t, n = {}) => [...ge, e, "module", t, "items", n]
719
+ };
720
+ function Is(e) {
721
+ return [...ge, e, "list"];
722
+ }
723
+ function ut(e, t) {
724
+ return [...ge, e, "module", t, "items"];
725
+ }
726
+ function bs(e, t, n, o) {
727
+ const s = o ? Le.items(t, n, o) : ut(t, n);
728
+ return e.invalidateQueries({ queryKey: s });
729
+ }
730
+ function kt(e, t, n) {
731
+ const o = n ? Le.list(t, n) : Is(t);
732
+ return e.invalidateQueries({ queryKey: o });
733
+ }
734
+ function Ka(e, t) {
735
+ return e.invalidateQueries({ queryKey: Le.course(t) });
736
+ }
737
+ const Qe = (e, t) => Object.prototype.hasOwnProperty.call(e, t);
738
+ function Ve(e, t) {
739
+ const n = Object.entries(t ?? {}).filter(([, o]) => o !== void 0);
740
+ return { ...e, ...Object.fromEntries(n) };
741
+ }
742
+ function me(e, t = {}) {
743
+ const n = Object.keys(e).map((s) => [
744
+ s,
745
+ Ve(e[s], Qe(t, s) ? t[s] : void 0)
746
+ ]), o = Object.keys(t).filter((s) => !Qe(e, s)).sort().map((s) => [s, Ve({}, t[s])]);
747
+ return Object.fromEntries([...n, ...o]);
748
+ }
749
+ function he(e, t) {
750
+ if (!(!Qe(e, t) || e[t].hidden))
751
+ return e[t];
752
+ }
753
+ function Je(e) {
754
+ return Object.keys(e).filter((t) => he(e, t) !== void 0).map((t) => ({ ...e[t], key: t })).sort((t, n) => t.order - n.order);
755
+ }
756
+ const Qa = 1e3;
757
+ function Ms({
758
+ queryClient: e,
759
+ courseId: t,
760
+ module: n,
761
+ item: o
762
+ }) {
763
+ return {
764
+ module: n,
765
+ item: o,
766
+ invalidateModuleItems: async (s) => {
767
+ await Promise.all([
768
+ bs(e, t, s),
769
+ kt(e, t)
770
+ ]);
771
+ },
772
+ invalidateModuleList: () => kt(e, t)
773
+ };
774
+ }
775
+ function Va(e, t) {
776
+ return Je(e).filter(
777
+ (n) => n.visible == null || n.visible(t) === !0
778
+ );
779
+ }
780
+ const ys = "Course modules", Ss = { one: "%{count} module loaded", other: "%{count} modules loaded" }, _s = "Expand all modules", Ts = "Collapse all modules", Es = { one: "Loading items in %{count} module…", other: "Loading items in %{count} modules…" }, Cs = "All items loaded", ws = { one: "%{count} module expanded", other: "%{count} modules expanded" }, Ps = { one: "%{count} module collapsed", other: "%{count} modules collapsed" }, vs = "This filter runs on the modules loaded so far — load more to filter the rest of the course.", As = "Modules failed to load: %{message}", xs = "Loading modules", Ls = "This course has no modules.", Rs = { one: "The only loaded module does not match this filter.", other: "None of the %{count} loaded modules match this filter." }, ks = "No modules match this filter.", Ns = "Clear filters", Ds = "Loading more modules…", Os = "Load more modules (%{count} loaded)", qs = { one: "The only module in this course is loaded.", other: "All %{count} modules in this course are loaded." }, Fs = "Filter", Us = "All", zs = "In progress", $s = "Complete", Bs = "Due this week", Gs = "Missing", js = "Locked until %{name} is completed.", Ys = "Locked until %{prerequisites} are completed.", Ws = "%{count} prerequisites", Hs = "%{label}. %{name}", Ks = "%{name} progress", Qs = { one: "%{loaded} of %{count} item loaded in %{name}", other: "%{loaded} of %{count} items loaded in %{name}" }, Vs = "Items failed to load: %{message}", Zs = "Loading items", Xs = "Loading…", Js = "No items.", er = "Loading more items…", tr = "Load more items (%{loaded} of %{count} loaded)", nr = "(unpublished)", or = "Collapse %{name}", sr = "Expand %{name}", rr = "Not started", ir = "In progress", lr = "All completed", ar = "%{count} Missing", cr = "%{count} Incomplete", ur = "%{missing} & %{incomplete}", dr = "Locked", mr = "Not started", pr = "In progress", fr = "Completed", gr = "Incomplete", hr = "Missing", Ir = "Locked", br = "Assignment", Mr = "Quiz", yr = "Discussion", Sr = "Page", _r = "File", Tr = "External URL", Er = "External tool", Cr = "Text header", wr = "Item type", Pr = "Due date", vr = "Points", Ar = "Requirement", xr = "Estimated duration", Lr = "Publish state", Rr = "View the item", kr = "Submit the assignment", Nr = "Contribute to the page", Dr = "Mark as done", Or = "Score at least the minimum", qr = "Score at least %{count}", Fr = "Score at least the minimum percentage", Ur = "Score at least %{count}%", zr = "Complete the requirement", $r = "today, %{time}", Br = "yesterday, %{time}", Gr = "tomorrow, %{time}", jr = "%{date}, %{time}", Yr = "%{time} (%{zone})", Wr = "Due %{when}", Hr = "Will unlock on %{when}", Kr = "Unlocked on %{when}", Qr = { one: "%{count} pt", other: "%{count} pts" }, Vr = { one: "%{percent}% | %{met} of %{count} requirement met", other: "%{percent}% | %{met} of %{count} requirements met" }, Zr = { one: "%{percent}% complete, %{met} of %{count} requirement met", other: "%{percent}% complete, %{met} of %{count} requirements met" }, Xr = "%{percent}%", Jr = { one: "%{completedModules} of %{totalModules} module complete", other: "%{completedModules} of %{totalModules} modules complete" }, ei = "(%{itemsSummary})", ti = { one: "%{completedItems} of %{totalItems} item", other: "%{completedItems} of %{totalItems} items" }, ni = "Module progress", oi = "%{name}: %{status}", si = "%{count} min", ri = "Unpublished", ii = "Untitled item", li = "opens in a new window", ai = {
781
+ pageTitle: ys,
782
+ modulesLoadedAnnouncement: Ss,
783
+ expandAllModules: _s,
784
+ collapseAllModules: Ts,
785
+ expandAllLoadingItems: Es,
786
+ expandAllItemsLoaded: Cs,
787
+ modulesExpandedAnnouncement: ws,
788
+ modulesCollapsedAnnouncement: Ps,
789
+ filterScopeHint: vs,
790
+ modulesLoadErrorAlert: As,
791
+ modulesLoadingSpinnerLabel: xs,
792
+ noModulesEmptyState: Ls,
793
+ filteredEmptyState: Rs,
794
+ noFilterMatches: ks,
795
+ clearFilters: Ns,
796
+ loadMoreModulesLoading: Ds,
797
+ loadMoreModules: Os,
798
+ allModulesLoaded: qs,
799
+ filterGroupLabel: Fs,
800
+ filterAll: Us,
801
+ filterInProgress: zs,
802
+ filterComplete: $s,
803
+ filterDueThisWeek: Bs,
804
+ filterMissing: Gs,
805
+ lockedByPrerequisiteByline: js,
806
+ lockedByPrerequisitesByline: Ys,
807
+ lockedByPrerequisitesCount: Ws,
808
+ moduleNameWithLabel: Hs,
809
+ moduleProgressScreenReaderLabel: Ks,
810
+ itemsLoadedAnnouncement: Qs,
811
+ itemsLoadErrorAlert: Vs,
812
+ itemsLoadingSpinnerLabel: Zs,
813
+ itemsLoadingText: Xs,
814
+ noItemsEmptyState: Js,
815
+ loadMoreItemsLoading: er,
816
+ loadMoreItems: tr,
817
+ moduleUnpublishedBadge: nr,
818
+ collapseModule: or,
819
+ expandModule: sr,
820
+ moduleStatusNotStarted: rr,
821
+ moduleStatusInProgress: ir,
822
+ moduleStatusComplete: lr,
823
+ moduleStatusMissing: ar,
824
+ moduleStatusIncomplete: cr,
825
+ moduleStatusMissingAndIncomplete: ur,
826
+ moduleStatusLocked: dr,
827
+ itemStatusNotStarted: mr,
828
+ itemStatusInProgress: pr,
829
+ itemStatusComplete: fr,
830
+ itemStatusIncomplete: gr,
831
+ itemStatusMissing: hr,
832
+ itemStatusLocked: Ir,
833
+ itemTypeAssignment: br,
834
+ itemTypeQuiz: Mr,
835
+ itemTypeDiscussion: yr,
836
+ itemTypePage: Sr,
837
+ itemTypeFile: _r,
838
+ itemTypeExternalUrl: Tr,
839
+ itemTypeExternalTool: Er,
840
+ itemTypeSubHeader: Cr,
841
+ metaFieldTypeLabel: wr,
842
+ metaFieldDueAtLabel: Pr,
843
+ metaFieldPointsLabel: vr,
844
+ metaFieldRequirementLabel: Ar,
845
+ metaFieldDurationLabel: xr,
846
+ metaFieldPublishStateLabel: Lr,
847
+ requirementMustView: Rr,
848
+ requirementMustSubmit: kr,
849
+ requirementMustContribute: Nr,
850
+ requirementMustMarkDone: Dr,
851
+ requirementMinScoreUnknown: Or,
852
+ requirementMinScore: qr,
853
+ requirementMinPercentageUnknown: Fr,
854
+ requirementMinPercentage: Ur,
855
+ requirementUnknown: zr,
856
+ dateTimeToday: $r,
857
+ dateTimeYesterday: Br,
858
+ dateTimeTomorrow: Gr,
859
+ dateTimeWithDate: jr,
860
+ timeWithZone: Yr,
861
+ dueByline: Wr,
862
+ unlockByline: Hr,
863
+ unlockedByline: Kr,
864
+ pointsAbbreviated: Qr,
865
+ progressSummary: Vr,
866
+ progressScreenReaderValue: Zr,
867
+ moduleProgressOverviewPercentLabel: Xr,
868
+ moduleProgressOverviewSummary: Jr,
869
+ moduleProgressOverviewDetail: ei,
870
+ moduleProgressOverviewItemsSummary: ti,
871
+ moduleProgressOverviewGroupLabel: ni,
872
+ moduleProgressSegmentLabel: oi,
873
+ durationMinutes: si,
874
+ itemUnpublishedLabel: ri,
875
+ itemUntitled: ii,
876
+ opensInNewWindow: li
877
+ }, ci = /%\{(\w+)\}/g, ui = ai, Ie = "en-US", di = /* @__PURE__ */ new Map(), mi = /* @__PURE__ */ new Map();
878
+ function An(e, t, n) {
804
879
  const o = e.get(t);
805
880
  if (o) return o;
806
- const r = n();
807
- return e.set(t, r), r;
808
- }
809
- function hs(e, t, n) {
810
- return n ? e.replace(ms, (o, r) => {
811
- if (!Object.prototype.hasOwnProperty.call(n, r)) return o;
812
- const s = n[r];
813
- return typeof s == "number" && Number.isFinite(s) ? tn(gs, t, () => new Intl.NumberFormat(t)).format(s) : String(s);
881
+ const s = n();
882
+ return e.set(t, s), s;
883
+ }
884
+ function pi(e, t, n) {
885
+ return n ? e.replace(ci, (o, s) => {
886
+ if (!Object.prototype.hasOwnProperty.call(n, s)) return o;
887
+ const r = n[s];
888
+ return typeof r == "number" && Number.isFinite(r) ? An(mi, t, () => new Intl.NumberFormat(t)).format(r) : String(r);
814
889
  }) : e;
815
890
  }
816
- function Is(e, t, n) {
891
+ function fi(e, t, n) {
817
892
  const o = n == null ? void 0 : n.count;
818
893
  if (typeof o == "number" && Number.isFinite(o)) {
819
- const r = tn(fs, t, () => new Intl.PluralRules(t)).select(o), s = e[r];
820
- if (typeof s == "string") return s;
894
+ const s = An(di, t, () => new Intl.PluralRules(t)).select(o), r = e[s];
895
+ if (typeof r == "string") return r;
821
896
  }
822
897
  return typeof e.other == "string" ? e.other : void 0;
823
898
  }
824
- function mt(e, t, n) {
899
+ function Nt(e, t, n) {
825
900
  if (typeof e == "string") return e;
826
901
  if (e !== null && typeof e == "object")
827
- return Is(e, t, n);
902
+ return fi(e, t, n);
828
903
  }
829
- const pt = /* @__PURE__ */ new Set();
830
- function bs(e) {
831
- pt.has(e) || (pt.add(e), console.warn(
904
+ const Dt = /* @__PURE__ */ new Set();
905
+ function gi(e) {
906
+ Dt.has(e) || (Dt.add(e), console.warn(
832
907
  `[platform-modules] no translation for "${e}"; it will render as itself. Add it to the catalog passed to ModulesI18nProvider.`
833
908
  ));
834
909
  }
835
- function Ms(e, t, n, o, r) {
836
- const s = mt(e == null ? void 0 : e[t], n, r);
837
- if (typeof s == "string") return s;
838
- const l = mt(ps[t], n, r);
839
- return typeof l == "string" ? l : (o && bs(t), t);
910
+ function hi(e, t, n, o, s) {
911
+ const r = Nt(e == null ? void 0 : e[t], n, s);
912
+ if (typeof r == "string") return r;
913
+ const i = Nt(ui[t], n, s);
914
+ return typeof i == "string" ? i : (o && gi(t), t);
840
915
  }
841
- function nn(e, t = oe, n = !1) {
842
- return (o, r) => hs(Ms(e, o, t, n, r), t, r);
916
+ function xn(e, t = Ie, n = !1) {
917
+ return (o, s) => pi(hi(e, o, t, n, s), t, s);
843
918
  }
844
- const ys = nn(), Ss = { t: ys, locale: oe }, on = Pt(null);
845
- function ql({
919
+ const Ii = xn(), bi = { t: Ii, locale: Ie }, Ln = en(null);
920
+ function Za({
846
921
  translations: e,
847
922
  locale: t,
848
923
  timezone: n,
849
924
  warnOnMissingKey: o,
850
- children: r
925
+ children: s
851
926
  }) {
852
- const s = N(() => {
853
- const l = t ?? oe;
927
+ const r = N(() => {
928
+ const i = t ?? Ie;
854
929
  return {
855
- t: nn(e, l, o),
856
- locale: l,
930
+ t: xn(e, i, o),
931
+ locale: i,
857
932
  timezone: n
858
933
  };
859
934
  }, [e, t, n, o]);
860
- return /* @__PURE__ */ i(on.Provider, { value: s, children: r });
935
+ return /* @__PURE__ */ l(Ln.Provider, { value: r, children: s });
861
936
  }
862
- function B() {
863
- return Ct(on) ?? Ss;
937
+ function j() {
938
+ return tn(Ln) ?? bi;
864
939
  }
865
- const _s = 864e5, Ts = "en-US", ft = /* @__PURE__ */ new Map(), gt = /* @__PURE__ */ new Map();
866
- function Es(e) {
867
- const t = gt.get(e);
940
+ const Mi = 864e5, yi = "en-US", Ot = /* @__PURE__ */ new Map(), qt = /* @__PURE__ */ new Map();
941
+ function Si(e) {
942
+ const t = qt.get(e);
868
943
  if (t) return t;
869
944
  const n = new Intl.NumberFormat(e, { minimumIntegerDigits: 2, useGrouping: !1 });
870
- return gt.set(e, n), n;
945
+ return qt.set(e, n), n;
871
946
  }
872
- function ht(e, t) {
947
+ function Ft(e, t) {
873
948
  return {
874
949
  time: new Intl.DateTimeFormat(e, {
875
950
  hour: "numeric",
@@ -884,7 +959,7 @@ function ht(e, t) {
884
959
  timeZone: t
885
960
  }),
886
961
  zone: t ? new Intl.DateTimeFormat(e, { timeZone: t, timeZoneName: "short" }) : void 0,
887
- civilDay: new Intl.DateTimeFormat(Ts, {
962
+ civilDay: new Intl.DateTimeFormat(yi, {
888
963
  year: "numeric",
889
964
  month: "numeric",
890
965
  day: "numeric",
@@ -892,57 +967,57 @@ function ht(e, t) {
892
967
  })
893
968
  };
894
969
  }
895
- function rn(e, t) {
896
- const n = t || void 0, o = `${e}|${n ?? ""}`, r = ft.get(o);
897
- if (r) return r;
898
- let s;
970
+ function Rn(e, t) {
971
+ const n = t || void 0, o = `${e}|${n ?? ""}`, s = Ot.get(o);
972
+ if (s) return s;
973
+ let r;
899
974
  try {
900
- s = ht(e, n);
975
+ r = Ft(e, n);
901
976
  } catch {
902
977
  console.warn(
903
978
  `[platform-modules] Unusable timezone ${JSON.stringify(n)}; rendering dates in the viewer's own clock instead.`
904
- ), s = ht(e, void 0);
979
+ ), r = Ft(e, void 0);
905
980
  }
906
- return ft.set(o, s), s;
981
+ return Ot.set(o, r), r;
907
982
  }
908
- function It(e, t) {
909
- return new Date(Ye(e, t)).getUTCFullYear();
983
+ function Ut(e, t) {
984
+ return new Date(dt(e, t)).getUTCFullYear();
910
985
  }
911
- function Ps(e, t) {
986
+ function _i(e, t) {
912
987
  var o;
913
- const n = (o = e.zone) == null ? void 0 : o.formatToParts(t).find((r) => r.type === "timeZoneName");
988
+ const n = (o = e.zone) == null ? void 0 : o.formatToParts(t).find((s) => s.type === "timeZoneName");
914
989
  return (n == null ? void 0 : n.value) ?? null;
915
990
  }
916
- function Ye(e, t) {
917
- const n = e.civilDay.formatToParts(t), o = (r) => {
918
- var s;
919
- return Number((s = n.find((l) => l.type === r)) == null ? void 0 : s.value);
991
+ function dt(e, t) {
992
+ const n = e.civilDay.formatToParts(t), o = (s) => {
993
+ var r;
994
+ return Number((r = n.find((i) => i.type === s)) == null ? void 0 : r.value);
920
995
  };
921
996
  return Date.UTC(o("year"), o("month") - 1, o("day"));
922
997
  }
923
- function Cs(e, t, n) {
924
- return sn(rn(oe, n), e, t);
998
+ function Ti(e, t, n) {
999
+ return kn(Rn(Ie, n), e, t);
925
1000
  }
926
- function sn(e, t, n) {
927
- return Math.round((Ye(e, t) - Ye(e, n)) / _s);
1001
+ function kn(e, t, n) {
1002
+ return Math.round((dt(e, t) - dt(e, n)) / Mi);
928
1003
  }
929
- function ws(e, t, n, { locale: o = oe, timezone: r } = {}) {
930
- const s = new Date(t);
931
- if (Number.isNaN(s.getTime())) return t;
932
- const l = rn(o, r), a = Ps(l, s), m = l.time.format(s), c = a ? e("timeWithZone", { time: m, zone: a }) : m, u = sn(l, s, n);
933
- if (u === 0) return e("dateTimeToday", { time: c });
934
- if (u === -1) return e("dateTimeYesterday", { time: c });
935
- if (u === 1) return e("dateTimeTomorrow", { time: c });
936
- const f = It(l, s) === It(l, n) ? l.day.format(s) : l.dayYear.format(s);
937
- return e("dateTimeWithDate", { date: f, time: c });
1004
+ function Ei(e, t, n, { locale: o = Ie, timezone: s } = {}) {
1005
+ const r = new Date(t);
1006
+ if (Number.isNaN(r.getTime())) return t;
1007
+ const i = Rn(o, s), a = _i(i, r), d = i.time.format(r), u = a ? e("timeWithZone", { time: d, zone: a }) : d, c = kn(i, r, n);
1008
+ if (c === 0) return e("dateTimeToday", { time: u });
1009
+ if (c === -1) return e("dateTimeYesterday", { time: u });
1010
+ if (c === 1) return e("dateTimeTomorrow", { time: u });
1011
+ const f = Ut(i, r) === Ut(i, n) ? i.day.format(r) : i.dayYear.format(r);
1012
+ return e("dateTimeWithDate", { date: f, time: u });
938
1013
  }
939
- function vs(e, t = oe) {
940
- return !Number.isInteger(e) || e < 1 ? null : Es(t).format(e);
1014
+ function Ci(e, t = Ie) {
1015
+ return !Number.isInteger(e) || e < 1 ? null : Si(t).format(e);
941
1016
  }
942
- function Ls(e, t) {
1017
+ function wi(e, t) {
943
1018
  return t == null ? null : e("pointsAbbreviated", { count: t });
944
1019
  }
945
- function As(e, t) {
1020
+ function Pi(e, t) {
946
1021
  switch (t.type) {
947
1022
  case "must_view":
948
1023
  return e("requirementMustView");
@@ -960,13 +1035,13 @@ function As(e, t) {
960
1035
  return e("requirementUnknown");
961
1036
  }
962
1037
  }
963
- function Rs(e, t, n, o) {
1038
+ function vi(e, t, n, o) {
964
1039
  return e("progressSummary", { percent: t, met: n, count: o });
965
1040
  }
966
- function xs(e, t, n, o) {
1041
+ function Ai(e, t, n, o) {
967
1042
  return e("progressScreenReaderValue", { percent: t, met: n, count: o });
968
1043
  }
969
- const V = "all", Ns = 7, qs = {
1044
+ const X = "all", xi = 7, Li = {
970
1045
  all: {
971
1046
  label: "filterAll",
972
1047
  order: 10,
@@ -995,13 +1070,13 @@ const V = "all", Ns = 7, qs = {
995
1070
  label: "filterDueThisWeek",
996
1071
  order: 40,
997
1072
  predicate: (e, { today: t, timezone: n }) => {
998
- var l;
999
- const o = (l = e.progress) == null ? void 0 : l.nextDueAt;
1073
+ var i;
1074
+ const o = (i = e.progress) == null ? void 0 : i.nextDueAt;
1000
1075
  if (!o) return !1;
1001
- const r = new Date(o);
1002
- if (Number.isNaN(r.getTime())) return !1;
1003
- const s = Cs(r, t, n);
1004
- return s >= 0 && s < Ns;
1076
+ const s = new Date(o);
1077
+ if (Number.isNaN(s.getTime())) return !1;
1078
+ const r = Ti(s, t, n);
1079
+ return r >= 0 && r < xi;
1005
1080
  }
1006
1081
  },
1007
1082
  missing: {
@@ -1013,43 +1088,24 @@ const V = "all", Ns = 7, qs = {
1013
1088
  }
1014
1089
  }
1015
1090
  };
1016
- function Je(e) {
1091
+ function yt(e) {
1017
1092
  if (!(!e || e.clientOnly))
1018
1093
  return e.query;
1019
1094
  }
1020
- function We(e) {
1021
- return e !== void 0 && Je(e) === void 0;
1022
- }
1023
- const ks = {
1024
- moduleLabel: (e, t, { locale: n }) => vs(e, n),
1025
- dateTime: (e, t, { t: n, locale: o, timezone: r }) => ws(n, e, t, { locale: o, timezone: r }),
1026
- points: (e, { t }) => Ls(t, e),
1027
- progress: (e, t, n, { t: o }) => Rs(o, e, t, n)
1028
- }, Ae = (e, t) => Object.prototype.hasOwnProperty.call(e, t);
1029
- function Re(e, t) {
1030
- const n = Object.entries(t ?? {}).filter(([, o]) => o !== void 0);
1031
- return { ...e, ...Object.fromEntries(n) };
1095
+ function mt(e) {
1096
+ return e !== void 0 && yt(e) === void 0;
1032
1097
  }
1033
- function ee(e, t = {}) {
1034
- const n = Object.keys(e).map((r) => [
1035
- r,
1036
- Re(e[r], Ae(t, r) ? t[r] : void 0)
1037
- ]), o = Object.keys(t).filter((r) => !Ae(e, r)).sort().map((r) => [r, Re({}, t[r])]);
1038
- return Object.fromEntries([...n, ...o]);
1039
- }
1040
- function ne(e, t) {
1041
- if (!(!Ae(e, t) || e[t].hidden))
1042
- return e[t];
1043
- }
1044
- function et(e) {
1045
- return Object.keys(e).filter((t) => ne(e, t) !== void 0).map((t) => ({ ...e[t], key: t })).sort((t, n) => t.order - n.order);
1046
- }
1047
- const Ds = "type", Os = {
1098
+ const Ri = {
1099
+ moduleLabel: (e, t, { locale: n }) => Ci(e, n),
1100
+ dateTime: (e, t, { t: n, locale: o, timezone: s }) => Ei(n, e, t, { locale: o, timezone: s }),
1101
+ points: (e, { t }) => wi(t, e),
1102
+ progress: (e, t, n, { t: o }) => vi(o, e, t, n)
1103
+ }, ki = "type", Ni = {
1048
1104
  type: {
1049
1105
  label: "metaFieldTypeLabel",
1050
1106
  order: 10,
1051
1107
  render: ({ item: e, t, config: n }) => {
1052
- const o = ne(n.itemTypes, e.type);
1108
+ const o = he(n.itemTypes, e.type);
1053
1109
  return o ? t(o.label) : null;
1054
1110
  }
1055
1111
  },
@@ -1066,13 +1122,13 @@ const Ds = "type", Os = {
1066
1122
  requirement: {
1067
1123
  label: "metaFieldRequirementLabel",
1068
1124
  order: 40,
1069
- render: ({ item: e, t }) => e.completionRequirement ? As(t, e.completionRequirement) : null
1125
+ render: ({ item: e, t }) => e.completionRequirement ? Pi(t, e.completionRequirement) : null
1070
1126
  },
1071
1127
  estimatedDuration: {
1072
1128
  label: "metaFieldDurationLabel",
1073
1129
  order: 50,
1074
1130
  render: ({ item: e, t }) => {
1075
- const n = eo(e);
1131
+ const n = zo(e);
1076
1132
  return n === null ? null : t("durationMinutes", { count: n });
1077
1133
  }
1078
1134
  },
@@ -1081,286 +1137,298 @@ const Ds = "type", Os = {
1081
1137
  order: 60,
1082
1138
  render: ({ item: e, t }) => e.published ? null : t("itemUnpublishedLabel")
1083
1139
  }
1084
- }, H = { size: "md", color: "mutedColor" }, Fs = {
1140
+ }, ne = { size: "md", color: "mutedColor" }, Di = {
1085
1141
  assignment: {
1086
1142
  label: "itemTypeAssignment",
1087
1143
  order: 10,
1088
- icon: /* @__PURE__ */ i(Rn, { ...H })
1144
+ icon: /* @__PURE__ */ l(mo, { ...ne })
1089
1145
  },
1090
- quiz: { label: "itemTypeQuiz", order: 20, icon: /* @__PURE__ */ i(An, { ...H }) },
1146
+ quiz: { label: "itemTypeQuiz", order: 20, icon: /* @__PURE__ */ l(uo, { ...ne }) },
1091
1147
  discussion: {
1092
1148
  label: "itemTypeDiscussion",
1093
1149
  order: 30,
1094
- icon: /* @__PURE__ */ i(Ln, { ...H })
1150
+ icon: /* @__PURE__ */ l(co, { ...ne })
1095
1151
  },
1096
- page: { label: "itemTypePage", order: 40, icon: /* @__PURE__ */ i(vn, { ...H }) },
1097
- file: { label: "itemTypeFile", order: 50, icon: /* @__PURE__ */ i(wn, { ...H }) },
1152
+ page: { label: "itemTypePage", order: 40, icon: /* @__PURE__ */ l(ao, { ...ne }) },
1153
+ file: { label: "itemTypeFile", order: 50, icon: /* @__PURE__ */ l(lo, { ...ne }) },
1098
1154
  external_url: {
1099
1155
  label: "itemTypeExternalUrl",
1100
1156
  order: 60,
1101
- icon: /* @__PURE__ */ i(Cn, { ...H })
1157
+ icon: /* @__PURE__ */ l(io, { ...ne })
1102
1158
  },
1103
1159
  external_tool: {
1104
1160
  label: "itemTypeExternalTool",
1105
1161
  order: 70,
1106
- icon: /* @__PURE__ */ i(Pn, { ...H })
1162
+ icon: /* @__PURE__ */ l(ro, { ...ne })
1107
1163
  },
1108
1164
  sub_header: { label: "itemTypeSubHeader", order: 80, icon: null }
1109
- }, qe = {
1110
- formatters: ks,
1111
- itemTypes: Fs,
1165
+ }, et = {
1166
+ formatters: Ri,
1167
+ itemTypes: Di,
1112
1168
  itemStatuses: {},
1113
- itemMeta: Os,
1114
- filters: qs,
1169
+ itemMeta: Ni,
1170
+ filters: Li,
1115
1171
  moduleActions: {},
1116
1172
  itemActions: {},
1117
1173
  navigation: {}
1118
1174
  };
1119
- Object.freeze(qe);
1120
- for (const e of Object.values(qe)) {
1175
+ Object.freeze(et);
1176
+ for (const e of Object.values(et)) {
1121
1177
  Object.freeze(e);
1122
1178
  for (const t of Object.values(e)) Object.freeze(t);
1123
1179
  }
1124
- function Us(e, t) {
1125
- return et(e).filter((n) => {
1126
- const o = Je(n);
1127
- return o !== void 0 && !Gn(t, o);
1180
+ function Oi(e, t) {
1181
+ return Je(e).filter((n) => {
1182
+ const o = yt(n);
1183
+ return o !== void 0 && !xo(t, o);
1128
1184
  }).map((n) => n.key);
1129
1185
  }
1130
- function bt(e) {
1186
+ function zt(e) {
1131
1187
  return `[platform-modules] the adapter cannot serve filter(s): ${e.join(", ")}. Add the field to the adapter's capabilities, or set clientOnly on the entry.`;
1132
1188
  }
1133
- function zs(e, t) {
1134
- const n = Us(e, t);
1189
+ function qi(e, t) {
1190
+ const n = Oi(e, t);
1135
1191
  if (n.length === 0) return e;
1136
1192
  if (process.env.NODE_ENV !== "production")
1137
- throw new Error(bt(n));
1138
- console.warn(bt(n));
1139
- const o = Object.fromEntries(n.map((r) => [r, { ...e[r], hidden: !0 }]));
1193
+ throw new Error(zt(n));
1194
+ console.warn(zt(n));
1195
+ const o = Object.fromEntries(n.map((s) => [s, { ...e[s], hidden: !0 }]));
1140
1196
  return { ...e, ...o };
1141
1197
  }
1142
- const ln = Pt(null);
1143
- function kl({ value: e, children: t }) {
1144
- return /* @__PURE__ */ i(ln.Provider, { value: e, children: t });
1198
+ const Nn = en(null);
1199
+ function Xa({ value: e, children: t }) {
1200
+ return /* @__PURE__ */ l(Nn.Provider, { value: e, children: t });
1145
1201
  }
1146
- function ye() {
1147
- return Ct(ln) ?? qe;
1202
+ function Re() {
1203
+ return tn(Nn) ?? et;
1148
1204
  }
1149
- function Dl(e) {
1150
- return ne(ye().itemMeta, e) !== void 0;
1205
+ function Ja(e) {
1206
+ return he(Re().itemMeta, e) !== void 0;
1151
1207
  }
1152
- const ke = d.object({
1153
- label: d.string(),
1154
- order: d.number(),
1155
- hidden: d.boolean().optional()
1208
+ const ke = m.object({
1209
+ label: m.string(),
1210
+ order: m.number(),
1211
+ hidden: m.boolean().optional()
1156
1212
  });
1157
- function ve(e) {
1158
- return d.record(d.string(), e);
1213
+ function fe(e) {
1214
+ return m.record(m.string(), e);
1159
1215
  }
1160
- const Be = ve(ke.strict()), an = (e) => e == null || typeof e == "string" || typeof e == "number" || typeof e == "bigint" || typeof e == "boolean" || wt(e) || Array.isArray(e) && e.every(an), $s = (e) => {
1216
+ const Fi = fe(ke.strict()), Dn = (e) => e == null || typeof e == "string" || typeof e == "number" || typeof e == "bigint" || typeof e == "boolean" || nn(e) || Array.isArray(e) && e.every(Dn), Ui = (e) => {
1161
1217
  var t;
1162
1218
  return e == null || typeof e == "function" && !((t = e.prototype) != null && t.isReactComponent);
1163
- }, Bs = ke.extend({
1164
- icon: d.custom(an, { message: "icon must be a ReactNode" }),
1165
- renderIcon: d.custom($s, {
1219
+ }, zi = ke.extend({
1220
+ icon: m.custom(Dn, { message: "icon must be a ReactNode" }),
1221
+ renderIcon: m.custom(Ui, {
1166
1222
  message: "renderIcon must be a function of the item, not a React component"
1167
1223
  })
1224
+ }).strict(), On = (e) => {
1225
+ var t;
1226
+ return typeof e == "function" && !((t = e.prototype) != null && t.isReactComponent);
1227
+ }, $t = (e) => e == null || On(e), Bt = ke.extend({
1228
+ onSelect: m.custom(On, {
1229
+ message: "onSelect must be a function taking an ActionContext"
1230
+ }),
1231
+ visible: m.custom($t, {
1232
+ message: "visible must be a function taking an ActionContext, not a React component"
1233
+ }),
1234
+ renderModal: m.custom($t, {
1235
+ message: "renderModal must be a function taking an ActionContext, not a React component"
1236
+ })
1168
1237
  }).strict();
1169
- function we() {
1170
- return d.custom((e) => typeof e == "function", {
1238
+ function He() {
1239
+ return m.custom((e) => typeof e == "function", {
1171
1240
  message: "Expected a function"
1172
1241
  });
1173
1242
  }
1174
- const js = ke.extend({
1175
- render: d.custom((e) => typeof e == "function", {
1243
+ const $i = ke.extend({
1244
+ render: m.custom((e) => typeof e == "function", {
1176
1245
  message: "render must be a function taking a MetaFieldContext"
1177
1246
  })
1178
- }).strict(), Gs = ke.extend({
1179
- predicate: d.custom((e) => typeof e == "function", {
1247
+ }).strict(), Bi = ke.extend({
1248
+ predicate: m.custom((e) => typeof e == "function", {
1180
1249
  message: "predicate must be a function of the module and a FilterContext"
1181
1250
  }),
1182
- query: jn.optional(),
1183
- clientOnly: d.boolean().optional()
1184
- }).strict(), Ys = d.object({
1185
- formatters: d.object({
1186
- moduleLabel: we(),
1187
- dateTime: we(),
1188
- points: we(),
1189
- progress: we()
1251
+ query: Ao.optional(),
1252
+ clientOnly: m.boolean().optional()
1253
+ }).strict(), Gi = m.object({
1254
+ formatters: m.object({
1255
+ moduleLabel: He(),
1256
+ dateTime: He(),
1257
+ points: He(),
1258
+ progress: He()
1190
1259
  }).strict(),
1191
- itemTypes: ve(Bs),
1192
- itemStatuses: Be,
1193
- itemMeta: ve(js),
1194
- filters: ve(Gs),
1195
- moduleActions: Be,
1196
- itemActions: Be,
1197
- navigation: d.object({}).strict()
1260
+ itemTypes: fe(zi),
1261
+ itemStatuses: Fi,
1262
+ itemMeta: fe($i),
1263
+ filters: fe(Bi),
1264
+ moduleActions: fe(Bt),
1265
+ itemActions: fe(Bt),
1266
+ navigation: m.object({}).strict()
1198
1267
  });
1199
- function Ws(e, t = {}) {
1200
- const n = Object.keys(t).filter((r) => !Ae(e, r));
1268
+ function ji(e, t = {}) {
1269
+ const n = Object.keys(t).filter((s) => !Qe(e, s));
1201
1270
  if (n.length > 0)
1202
1271
  throw new Error(
1203
1272
  `Unknown modules config key(s): ${n.join(", ")}. Known keys are ${Object.keys(e).join(", ")}.`
1204
1273
  );
1205
1274
  const o = {
1206
- formatters: Re(e.formatters, t.formatters),
1207
- itemTypes: ee(e.itemTypes, t.itemTypes),
1208
- itemStatuses: ee(e.itemStatuses, t.itemStatuses),
1209
- itemMeta: ee(e.itemMeta, t.itemMeta),
1210
- filters: ee(e.filters, t.filters),
1211
- moduleActions: ee(e.moduleActions, t.moduleActions),
1212
- itemActions: ee(e.itemActions, t.itemActions),
1213
- navigation: Re(e.navigation, t.navigation)
1275
+ formatters: Ve(e.formatters, t.formatters),
1276
+ itemTypes: me(e.itemTypes, t.itemTypes),
1277
+ itemStatuses: me(e.itemStatuses, t.itemStatuses),
1278
+ itemMeta: me(e.itemMeta, t.itemMeta),
1279
+ filters: me(e.filters, t.filters),
1280
+ moduleActions: me(e.moduleActions, t.moduleActions),
1281
+ itemActions: me(e.itemActions, t.itemActions),
1282
+ navigation: Ve(e.navigation, t.navigation)
1214
1283
  };
1215
- return Ys.parse(o), o;
1284
+ return Gi.parse(o), o;
1216
1285
  }
1217
- function Ol(e = {}) {
1218
- return Ws(qe, e);
1286
+ function ec(e = {}) {
1287
+ return ji(et, e);
1219
1288
  }
1220
- function De() {
1221
- const { formatters: e } = ye(), { t, locale: n, timezone: o } = B();
1289
+ function tc(e) {
1290
+ const t = ht();
1291
+ return U(
1292
+ (n, o) => Ms({ queryClient: t, courseId: e, module: n, item: o }),
1293
+ [t, e]
1294
+ );
1295
+ }
1296
+ function Ne() {
1297
+ const { formatters: e } = Re(), { t, locale: n, timezone: o } = j();
1222
1298
  return N(() => {
1223
- const r = { t, locale: n, timezone: o }, s = (l, a) => e.dateTime(l, a, r);
1299
+ const s = { t, locale: n, timezone: o }, r = (i, a) => e.dateTime(i, a, s);
1224
1300
  return {
1225
- moduleLabel: (l, a) => e.moduleLabel(l, a, r) || null,
1226
- dueByline: (l, a) => t("dueByline", { when: s(l, a) }),
1227
- unlockByline: (l, a) => t("unlockByline", { when: s(l, a) }),
1228
- unlockedByline: (l, a) => t("unlockedByline", { when: s(l, a) }),
1229
- points: (l) => e.points(l, r),
1230
- progress: (l, a, m) => e.progress(l, a, m, r)
1301
+ moduleLabel: (i, a) => e.moduleLabel(i, a, s) || null,
1302
+ dueByline: (i, a) => t("dueByline", { when: r(i, a) }),
1303
+ unlockByline: (i, a) => t("unlockByline", { when: r(i, a) }),
1304
+ unlockedByline: (i, a) => t("unlockedByline", { when: r(i, a) }),
1305
+ points: (i) => e.points(i, s),
1306
+ progress: (i, a, d) => e.progress(i, a, d, s)
1231
1307
  };
1232
1308
  }, [e, t, n, o]);
1233
1309
  }
1234
- const tt = 100, un = 100, cn = 100, Qs = 4, Oe = 5 * 60 * 1e3, dn = 20, xe = { hasNextPage: !1, endCursor: null }, te = ["platform-modules"], Se = {
1235
- all: te,
1236
- course: (e) => [...te, e],
1237
- list: (e, t = {}) => [...te, e, "list", t],
1238
- items: (e, t, n = {}) => [...te, e, "module", t, "items", n]
1239
- };
1240
- function Hs(e) {
1241
- return [...te, e, "list"];
1242
- }
1243
- function mn(e, t) {
1244
- return [...te, e, "module", t, "items"];
1245
- }
1246
- function pn(e) {
1310
+ const St = 100, qn = 100, Fn = 100, Yi = 4, tt = 5 * 60 * 1e3, Un = 20, Ze = { hasNextPage: !1, endCursor: null };
1311
+ function zn(e) {
1247
1312
  return e.pageInfo.hasNextPage ? e.pageInfo.endCursor : null;
1248
1313
  }
1249
- function fn(e) {
1314
+ function $n(e) {
1250
1315
  const {
1251
1316
  courseId: t,
1252
1317
  adapter: n,
1253
1318
  pageSize: o,
1254
- includeItems: r,
1255
- filter: s,
1256
- inlineItemsFirst: l,
1319
+ includeItems: s,
1320
+ filter: r,
1321
+ inlineItemsFirst: i,
1257
1322
  inlineFirst: a,
1258
- view: m,
1259
- staleTime: c,
1260
- enabled: u
1323
+ view: d,
1324
+ staleTime: u,
1325
+ enabled: c
1261
1326
  } = e;
1262
1327
  return {
1263
1328
  // `inlineItemsFirst` is deliberately out of the key: it is derived from this very list.
1264
- queryKey: Se.list(t, { view: m, pageSize: o, includeItems: r, filter: s }),
1329
+ queryKey: Le.list(t, { view: d, pageSize: o, includeItems: s, filter: r }),
1265
1330
  initialPageParam: null,
1266
1331
  queryFn: ({ pageParam: p, signal: f }) => n.listModules({
1267
1332
  courseId: t,
1268
1333
  cursor: p,
1269
1334
  pageSize: o,
1270
- includeItems: r,
1271
- filter: s,
1272
- inlineItemsFirst: l,
1335
+ includeItems: s,
1336
+ filter: r,
1337
+ inlineItemsFirst: i,
1273
1338
  inlineFirst: a,
1274
1339
  signal: f
1275
1340
  }),
1276
- getNextPageParam: pn,
1277
- enabled: u,
1278
- staleTime: c,
1341
+ getNextPageParam: zn,
1342
+ enabled: c,
1343
+ staleTime: u,
1279
1344
  refetchOnWindowFocus: !1
1280
1345
  };
1281
1346
  }
1282
- function gn(e) {
1283
- const { courseId: t, moduleId: n, adapter: o, pageSize: r, view: s, staleTime: l, enabled: a, limit: m } = e;
1347
+ function Bn(e) {
1348
+ const { courseId: t, moduleId: n, adapter: o, pageSize: s, view: r, staleTime: i, enabled: a, limit: d } = e;
1284
1349
  return {
1285
- queryKey: Se.items(t, n, { view: s, pageSize: r }),
1350
+ queryKey: Le.items(t, n, { view: r, pageSize: s }),
1286
1351
  initialPageParam: null,
1287
- queryFn: ({ pageParam: c, signal: u }) => {
1288
- const p = () => o.listModuleItems({ courseId: t, moduleId: n, cursor: c, pageSize: r, signal: u });
1289
- return m ? m(() => {
1290
- if (u.aborted)
1352
+ queryFn: ({ pageParam: u, signal: c }) => {
1353
+ const p = () => o.listModuleItems({ courseId: t, moduleId: n, cursor: u, pageSize: s, signal: c });
1354
+ return d ? d(() => {
1355
+ if (c.aborted)
1291
1356
  throw new DOMException("The operation was aborted.", "AbortError");
1292
1357
  return p();
1293
1358
  }) : p();
1294
1359
  },
1295
- getNextPageParam: pn,
1360
+ getNextPageParam: zn,
1296
1361
  enabled: a,
1297
- staleTime: l,
1362
+ staleTime: i,
1298
1363
  refetchOnWindowFocus: !1
1299
1364
  };
1300
1365
  }
1301
- function Vs(e) {
1302
- var C;
1366
+ function Wi(e) {
1367
+ var x;
1303
1368
  const {
1304
1369
  courseId: t,
1305
1370
  adapter: n,
1306
- pageSize: o = tt,
1307
- includeItems: r = !1,
1308
- filter: s,
1309
- inlineItemsFirst: l,
1371
+ pageSize: o = St,
1372
+ includeItems: s = !1,
1373
+ filter: r,
1374
+ inlineItemsFirst: i,
1310
1375
  inlineFirst: a,
1311
- view: m,
1312
- staleTime: c = Oe,
1313
- enabled: u = !0
1314
- } = e, p = Ke(
1315
- fn({
1376
+ view: d,
1377
+ staleTime: u = tt,
1378
+ enabled: c = !0
1379
+ } = e, p = It({
1380
+ ...$n({
1316
1381
  courseId: t,
1317
1382
  adapter: n,
1318
1383
  pageSize: o,
1319
- includeItems: r,
1320
- filter: s,
1321
- inlineItemsFirst: l,
1384
+ includeItems: s,
1385
+ filter: r,
1386
+ inlineItemsFirst: i,
1322
1387
  inlineFirst: a,
1323
- view: m,
1324
- staleTime: c,
1325
- enabled: u
1326
- })
1327
- ), f = (C = p.data) == null ? void 0 : C.pages, y = N(() => (f ?? []).flatMap((b) => b.modules), [f]), g = f && f.length > 0 ? f[f.length - 1].pageInfo : xe, h = p.fetchNextPage, _ = F(() => {
1328
- h();
1329
- }, [h]);
1388
+ view: d,
1389
+ staleTime: u,
1390
+ enabled: c
1391
+ }),
1392
+ // `useItemsMode` shares `modulesQueryOptions`, and `inlineFirst` is out of that key.
1393
+ placeholderData: ho
1394
+ }), f = (x = p.data) == null ? void 0 : x.pages, y = N(() => (f ?? []).flatMap((_) => _.modules), [f]), g = f && f.length > 0 ? f[f.length - 1].pageInfo : Ze, b = p.fetchNextPage, w = U(() => {
1395
+ b();
1396
+ }, [b]);
1330
1397
  return {
1331
1398
  modules: y,
1332
1399
  pageInfo: g,
1333
1400
  hasNextPage: g.hasNextPage,
1334
- fetchNextPage: _,
1401
+ fetchNextPage: w,
1335
1402
  isLoading: p.isLoading,
1336
1403
  isFetchingNextPage: p.isFetchingNextPage,
1337
1404
  isPending: p.isPending,
1405
+ isPlaceholderData: p.isPlaceholderData,
1338
1406
  error: p.error
1339
1407
  };
1340
1408
  }
1341
- function Fl(e) {
1342
- var h;
1409
+ function nc(e) {
1410
+ var b;
1343
1411
  const {
1344
1412
  courseId: t,
1345
1413
  moduleId: n,
1346
1414
  adapter: o,
1347
- pageSize: r = un,
1348
- view: s,
1349
- enabled: l = !0,
1350
- staleTime: a = Oe,
1351
- limit: m
1352
- } = e, c = Ke(
1353
- gn({
1415
+ pageSize: s = qn,
1416
+ view: r,
1417
+ enabled: i = !0,
1418
+ staleTime: a = tt,
1419
+ limit: d
1420
+ } = e, u = It(
1421
+ Bn({
1354
1422
  courseId: t,
1355
1423
  moduleId: n,
1356
1424
  adapter: o,
1357
- pageSize: r,
1358
- view: s,
1425
+ pageSize: s,
1426
+ view: r,
1359
1427
  staleTime: a,
1360
- enabled: l,
1361
- limit: m
1428
+ enabled: i,
1429
+ limit: d
1362
1430
  })
1363
- ), u = (h = c.data) == null ? void 0 : h.pages, p = N(() => (u ?? []).flatMap((_) => _.items), [u]), f = u && u.length > 0 ? u[u.length - 1].pageInfo : xe, y = c.fetchNextPage, g = F(() => {
1431
+ ), c = (b = u.data) == null ? void 0 : b.pages, p = N(() => (c ?? []).flatMap((w) => w.items), [c]), f = c && c.length > 0 ? c[c.length - 1].pageInfo : Ze, y = u.fetchNextPage, g = U(() => {
1364
1432
  y();
1365
1433
  }, [y]);
1366
1434
  return {
@@ -1368,45 +1436,45 @@ function Fl(e) {
1368
1436
  pageInfo: f,
1369
1437
  hasNextPage: f.hasNextPage,
1370
1438
  fetchNextPage: g,
1371
- isLoading: c.isLoading,
1372
- isFetchingNextPage: c.isFetchingNextPage,
1373
- error: c.error
1439
+ isLoading: u.isLoading,
1440
+ isFetchingNextPage: u.isFetchingNextPage,
1441
+ error: u.error
1374
1442
  };
1375
1443
  }
1376
- function Ks(e, t, n = Xe) {
1444
+ function Hi(e, t, n = Mt) {
1377
1445
  if (e.pageInfo.hasNextPage) return "onDemand";
1378
- let o = 0, r = 0;
1379
- for (const s of e.modules) {
1380
- if (s.itemCount > t) return "onDemand";
1381
- o += s.itemCount, s.itemCount > r && (r = s.itemCount);
1446
+ let o = 0, s = 0;
1447
+ for (const r of e.modules) {
1448
+ if (r.itemCount > t) return "onDemand";
1449
+ o += r.itemCount, r.itemCount > s && (s = r.itemCount);
1382
1450
  }
1383
- return o > t * 2 ? "onDemand" : Math.max(e.modules.length, 1) * Math.max(r, 1) <= n ? "inline" : "onDemand";
1451
+ return o > t * 2 ? "onDemand" : Math.max(e.modules.length, 1) * Math.max(s, 1) <= n ? "inline" : "onDemand";
1384
1452
  }
1385
- function Zs(e) {
1453
+ function Ki(e) {
1386
1454
  var y;
1387
1455
  const {
1388
1456
  courseId: t,
1389
1457
  adapter: n,
1390
1458
  mode: o = "auto",
1391
- inlineThreshold: r = cn,
1392
- nodeBudget: s = n.inlineNodeBudget ?? Xe,
1393
- pageSize: l = tt,
1459
+ inlineThreshold: s = Fn,
1460
+ nodeBudget: r = n.inlineNodeBudget ?? Mt,
1461
+ pageSize: i = St,
1394
1462
  filter: a,
1395
- view: m,
1396
- staleTime: c = Oe
1397
- } = e, u = o === "auto", p = Ke(
1398
- fn({
1463
+ view: d,
1464
+ staleTime: u = tt
1465
+ } = e, c = o === "auto", p = It(
1466
+ $n({
1399
1467
  courseId: t,
1400
1468
  adapter: n,
1401
- pageSize: l,
1469
+ pageSize: i,
1402
1470
  includeItems: !1,
1403
1471
  filter: a,
1404
- view: m,
1405
- staleTime: c,
1406
- enabled: u
1472
+ view: d,
1473
+ staleTime: u,
1474
+ enabled: c
1407
1475
  })
1408
1476
  );
1409
- if (!u)
1477
+ if (!c)
1410
1478
  return {
1411
1479
  resolvedMode: o,
1412
1480
  isResolving: !1,
@@ -1424,267 +1492,276 @@ function Zs(e) {
1424
1492
  };
1425
1493
  const f = (y = p.data) == null ? void 0 : y.pages[0];
1426
1494
  return f ? {
1427
- resolvedMode: Ks(f, r, s),
1495
+ resolvedMode: Hi(f, s, r),
1428
1496
  isResolving: !1,
1429
1497
  probed: !0,
1430
1498
  error: null,
1431
- inlineShape: Xs(f)
1499
+ inlineShape: Qi(f)
1432
1500
  } : { resolvedMode: null, isResolving: !0, probed: !0, error: null, inlineShape: null };
1433
1501
  }
1434
- function Xs(e) {
1502
+ function Qi(e) {
1435
1503
  let t = 1;
1436
1504
  for (const n of e.modules)
1437
1505
  n.itemCount > t && (t = n.itemCount);
1438
1506
  return { moduleCount: Math.max(e.modules.length, 1), maxItemCount: t };
1439
1507
  }
1440
- const Mt = "\0", Js = /* @__PURE__ */ new Map();
1441
- function ei(e, t, n = dn) {
1442
- const o = kt(), r = $(/* @__PURE__ */ new Map()), [s, l] = Le(Js), a = e.join(Mt), m = N(() => a === "" ? [] : a.split(Mt), [a]);
1443
- Ie(() => {
1444
- const u = r.current, p = () => {
1445
- l((g) => {
1446
- const h = /* @__PURE__ */ new Map();
1447
- let _ = g.size !== u.size;
1448
- for (const [C, b] of u) {
1449
- const w = b.getCurrentResult();
1450
- h.set(C, w), !_ && g.get(C) !== w && (_ = !0);
1508
+ const Gt = "\0", Vi = /* @__PURE__ */ new Map();
1509
+ function Zi(e, t, n = Un) {
1510
+ const o = ht(), s = $(/* @__PURE__ */ new Map()), [r, i] = V(Vi), a = e.join(Gt), d = N(() => a === "" ? [] : a.split(Gt), [a]);
1511
+ Z(() => {
1512
+ const c = s.current, p = () => {
1513
+ i((g) => {
1514
+ const b = /* @__PURE__ */ new Map();
1515
+ let w = g.size !== c.size;
1516
+ for (const [x, _] of c) {
1517
+ const A = _.getCurrentResult();
1518
+ b.set(x, A), !w && g.get(x) !== A && (w = !0);
1451
1519
  }
1452
- return _ ? h : g;
1520
+ return w ? b : g;
1453
1521
  });
1454
- }, f = new Set(m);
1455
- for (const g of m) {
1456
- if (u.has(g)) continue;
1457
- const h = new qn(
1522
+ }, f = new Set(d);
1523
+ for (const g of d) {
1524
+ if (c.has(g)) continue;
1525
+ const b = new Io(
1458
1526
  o,
1459
1527
  t(g, !0)
1460
1528
  );
1461
- u.set(g, h), h.subscribe(p);
1529
+ c.set(g, b), b.subscribe(p);
1462
1530
  }
1463
- for (const [g, h] of u)
1464
- h.setOptions(t(g, f.has(g)));
1465
- for (const g of m) {
1466
- const h = u.get(g);
1467
- h && (u.delete(g), u.set(g, h));
1531
+ for (const [g, b] of c)
1532
+ b.setOptions(t(g, f.has(g)));
1533
+ for (const g of d) {
1534
+ const b = c.get(g);
1535
+ b && (c.delete(g), c.set(g, b));
1468
1536
  }
1469
- let y = u.size - f.size;
1537
+ let y = c.size - f.size;
1470
1538
  if (y > n)
1471
- for (const [g, h] of u) {
1539
+ for (const [g, b] of c) {
1472
1540
  if (y <= n) break;
1473
- f.has(g) || (h.destroy(), u.delete(g), y -= 1);
1541
+ f.has(g) || (b.destroy(), c.delete(g), y -= 1);
1474
1542
  }
1475
1543
  p();
1476
- }, [o, t, m, n]), Ie(() => {
1477
- const u = r.current;
1544
+ }, [o, t, d, n]), Z(() => {
1545
+ const c = s.current;
1478
1546
  return () => {
1479
- for (const p of u.values()) p.destroy();
1480
- u.clear();
1547
+ for (const p of c.values()) p.destroy();
1548
+ c.clear();
1481
1549
  };
1482
1550
  }, []);
1483
- const c = F((u) => {
1551
+ const u = U((c) => {
1484
1552
  var p;
1485
- (p = r.current.get(u)) == null || p.fetchNextPage();
1553
+ (p = s.current.get(c)) == null || p.fetchNextPage();
1486
1554
  }, []);
1487
- return { results: s, fetchNextPage: c };
1555
+ return { results: r, fetchNextPage: u };
1488
1556
  }
1489
- const ti = [], ni = () => {
1557
+ const Xi = [], Ji = () => {
1490
1558
  };
1491
- function Ul(e) {
1492
- var Ee, x;
1559
+ function oc(e) {
1560
+ var Te, Ge;
1493
1561
  const {
1494
1562
  courseId: t,
1495
1563
  adapter: n,
1496
1564
  view: o,
1497
- itemsMode: r = "auto",
1498
- inlineThreshold: s = cn,
1499
- pageSize: l = tt,
1500
- itemPageSize: a = un,
1501
- itemConcurrency: m = Qs,
1502
- retainCollapsedLimit: c = dn,
1503
- staleTime: u = Oe,
1565
+ itemsMode: s = "auto",
1566
+ inlineThreshold: r = Fn,
1567
+ pageSize: i = St,
1568
+ itemPageSize: a = qn,
1569
+ itemConcurrency: d = Yi,
1570
+ retainCollapsedLimit: u = Un,
1571
+ staleTime: c = tt,
1504
1572
  initialExpandedModuleIds: p,
1505
- initialFilter: f = V
1506
- } = e, y = kt(), g = ye(), [h, _] = Le(f), C = N(
1507
- () => zs(g.filters, n.capabilities),
1573
+ initialFilter: f = X
1574
+ } = e, y = ht(), g = Re(), [b, w] = V(f), x = N(
1575
+ () => qi(g.filters, n.capabilities),
1508
1576
  [g.filters, n.capabilities]
1509
- ), b = ne(C, h), w = Je(b), k = Zs({
1577
+ ), _ = he(x, b), A = yt(_), q = Ki({
1510
1578
  courseId: t,
1511
1579
  adapter: n,
1512
- mode: r,
1513
- inlineThreshold: s,
1514
- pageSize: l,
1515
- filter: w,
1580
+ mode: s,
1581
+ inlineThreshold: r,
1582
+ pageSize: i,
1583
+ filter: A,
1516
1584
  view: o,
1517
- staleTime: u
1518
- }), q = k.resolvedMode, A = Vs({
1585
+ staleTime: c
1586
+ }), B = q.resolvedMode, L = Wi({
1519
1587
  courseId: t,
1520
1588
  adapter: n,
1521
- pageSize: l,
1522
- filter: w,
1589
+ pageSize: i,
1590
+ filter: A,
1523
1591
  view: o,
1524
- staleTime: u,
1525
- includeItems: q === "inline",
1526
- inlineItemsFirst: (Ee = k.inlineShape) == null ? void 0 : Ee.maxItemCount,
1527
- inlineFirst: (x = k.inlineShape) == null ? void 0 : x.moduleCount,
1528
- enabled: q !== null
1529
- }), [D, j] = Le(
1592
+ staleTime: c,
1593
+ includeItems: B === "inline",
1594
+ inlineItemsFirst: (Te = q.inlineShape) == null ? void 0 : Te.maxItemCount,
1595
+ inlineFirst: (Ge = q.inlineShape) == null ? void 0 : Ge.moduleCount,
1596
+ enabled: B !== null
1597
+ }), [k, G] = V(
1530
1598
  () => p ?? []
1531
- ), Q = p === void 0, O = $(!1), R = h !== V && b !== void 0;
1532
- Ie(() => {
1533
- !Q || O.current || R || j((I) => {
1534
- const M = new Set(I), v = [...I];
1535
- for (const W of A.modules)
1536
- W.collapsed === !1 && !M.has(W.id) && v.push(W.id);
1537
- return v.length === I.length ? I : v;
1599
+ ), J = p === void 0, F = $(!1), D = b !== X && _ !== void 0;
1600
+ Z(() => {
1601
+ !J || F.current || D || L.isPlaceholderData || G((h) => {
1602
+ const M = new Set(h), I = [...h];
1603
+ for (const R of L.modules)
1604
+ R.collapsed === !1 && !M.has(R.id) && I.push(R.id);
1605
+ return I.length === h.length ? h : I;
1538
1606
  });
1539
- }, [A.modules, Q, R]);
1540
- const G = N(() => {
1541
- const I = /* @__PURE__ */ new Map();
1542
- for (const M of A.modules) I.set(M.id, M);
1543
- return I;
1544
- }, [A.modules]), se = N(
1545
- () => D.filter((I) => {
1546
- const M = G.get(I);
1607
+ }, [L.modules, L.isPlaceholderData, J, D]);
1608
+ const Y = N(() => {
1609
+ const h = /* @__PURE__ */ new Map();
1610
+ for (const M of L.modules) h.set(M.id, M);
1611
+ return h;
1612
+ }, [L.modules]), se = N(
1613
+ () => k.filter((h) => {
1614
+ const M = Y.get(h);
1547
1615
  return M !== void 0 && M.items === void 0;
1548
1616
  }),
1549
- [D, G]
1550
- ), ie = N(() => new Set(se), [se]), le = N(() => kn(m), [m]), Ue = F(
1551
- (I, M) => gn({
1617
+ [k, Y]
1618
+ ), De = N(() => new Set(se), [se]), Oe = N(() => bo(d), [d]), Me = U(
1619
+ (h, M) => Bn({
1552
1620
  courseId: t,
1553
- moduleId: I,
1621
+ moduleId: h,
1554
1622
  adapter: n,
1555
1623
  pageSize: a,
1556
1624
  view: o,
1557
- staleTime: u,
1625
+ staleTime: c,
1558
1626
  enabled: M,
1559
- limit: le
1627
+ limit: Oe
1560
1628
  }),
1561
- [t, n, a, o, u, le]
1562
- ), K = ei(se, Ue, c), ae = K.fetchNextPage, L = $(/* @__PURE__ */ new Map()), ue = F(
1563
- (I) => {
1564
- let M = L.current.get(I);
1565
- return M || (M = () => ae(I), L.current.set(I, M)), M;
1629
+ [t, n, a, o, c, Oe]
1630
+ ), ee = Zi(se, Me, u), ye = ee.fetchNextPage, qe = $(/* @__PURE__ */ new Map()), re = U(
1631
+ (h) => {
1632
+ let M = qe.current.get(h);
1633
+ return M || (M = () => ye(h), qe.current.set(h, M)), M;
1566
1634
  },
1567
- [ae]
1568
- ), Z = F((I) => {
1569
- O.current = !0, j(
1570
- (M) => M.includes(I) ? M : [...M, I]
1635
+ [ye]
1636
+ ), ie = U((h) => {
1637
+ F.current = !0, G(
1638
+ (M) => M.includes(h) ? M : [...M, h]
1571
1639
  );
1572
- }, []), U = F(
1573
- (I) => {
1574
- O.current = !0, j((M) => M.filter((v) => v !== I)), y.cancelQueries({ queryKey: mn(t, I) });
1640
+ }, []), P = U(
1641
+ (h) => {
1642
+ F.current = !0, G((M) => M.filter((I) => I !== h)), y.cancelQueries({ queryKey: ut(t, h) });
1643
+ },
1644
+ [y, t]
1645
+ ), Fe = U((h) => {
1646
+ F.current = !0, G((M) => {
1647
+ const I = new Set(M), R = h.filter((O) => !I.has(O));
1648
+ return R.length === 0 ? M : [...M, ...R];
1649
+ });
1650
+ }, []), Ue = U(
1651
+ (h) => {
1652
+ F.current = !0;
1653
+ const M = new Set(h);
1654
+ G((I) => {
1655
+ const R = I.filter((O) => !M.has(O));
1656
+ return R.length === I.length ? I : R;
1657
+ });
1658
+ for (const I of M)
1659
+ y.cancelQueries({ queryKey: ut(t, I) });
1575
1660
  },
1576
1661
  [y, t]
1577
- ), Y = $(D);
1578
- Y.current = D;
1579
- const X = F(() => {
1580
- O.current = !0;
1581
- for (const I of Y.current) U(I);
1582
- }, [U]), ce = $(h);
1583
- ce.current = h;
1584
- const z = $(null), de = F(
1585
- (I) => {
1586
- if (I === ce.current) return;
1587
- if (ce.current = I, I !== V && ne(C, I) !== void 0) {
1588
- z.current === null && (z.current = Y.current);
1589
- const v = O.current;
1590
- for (const W of Y.current) U(W);
1591
- O.current = v;
1592
- } else z.current !== null && (j(z.current), Y.current = z.current, z.current = null);
1593
- _(I);
1662
+ ), W = $(k);
1663
+ W.current = k;
1664
+ const Se = U(() => {
1665
+ F.current = !0;
1666
+ for (const h of W.current) P(h);
1667
+ }, [P]), le = $(b);
1668
+ le.current = b;
1669
+ const H = $(null), ze = U(
1670
+ (h) => {
1671
+ if (h === le.current) return;
1672
+ if (le.current = h, h !== X && he(x, h) !== void 0) {
1673
+ H.current === null && (H.current = W.current);
1674
+ const I = F.current;
1675
+ for (const R of W.current) P(R);
1676
+ F.current = I;
1677
+ } else H.current !== null && (G(H.current), W.current = H.current, H.current = null);
1678
+ w(h);
1594
1679
  },
1595
- [C, U]
1596
- ), ze = F(
1597
- (I) => {
1598
- Y.current.includes(I) ? U(I) : Z(I);
1680
+ [x, P]
1681
+ ), ae = U(
1682
+ (h) => {
1683
+ W.current.includes(h) ? P(h) : ie(h);
1599
1684
  },
1600
- [U, Z]
1601
- ), _e = K.results, me = $(/* @__PURE__ */ new Map()), Te = F(
1602
- (I) => {
1603
- var st;
1604
- const M = G.get(I), v = _e.get(I), W = ie.has(I), pe = me.current.get(I);
1605
- if (pe && pe.items === (M == null ? void 0 : M.items) && pe.result === v && pe.active === W)
1606
- return pe.value;
1607
- const ot = (Pe) => (me.current.set(I, { items: M == null ? void 0 : M.items, result: v, active: W, value: Pe }), Pe);
1685
+ [P, ie]
1686
+ ), $e = ee.results, Be = $(/* @__PURE__ */ new Map()), _e = U(
1687
+ (h) => {
1688
+ var ue;
1689
+ const M = Y.get(h), I = $e.get(h), R = De.has(h), O = Be.current.get(h);
1690
+ if (O && O.items === (M == null ? void 0 : M.items) && O.result === I && O.active === R)
1691
+ return O.value;
1692
+ const ce = (Q) => (Be.current.set(h, { items: M == null ? void 0 : M.items, result: I, active: R, value: Q }), Q);
1608
1693
  if ((M == null ? void 0 : M.items) !== void 0)
1609
- return ot({
1694
+ return ce({
1610
1695
  items: M.items,
1611
- pageInfo: xe,
1696
+ pageInfo: Ze,
1612
1697
  hasNextPage: !1,
1613
- fetchNextPage: ni,
1698
+ fetchNextPage: Ji,
1614
1699
  isLoading: !1,
1615
1700
  isFetchingNextPage: !1,
1616
1701
  error: null,
1617
1702
  source: "inline"
1618
1703
  });
1619
- const J = (st = v == null ? void 0 : v.data) == null ? void 0 : st.pages, En = J ? J.flatMap((Pe) => Pe.items) : ti, rt = J && J.length > 0 ? J[J.length - 1].pageInfo : xe;
1620
- return ot({
1621
- items: En,
1622
- pageInfo: rt,
1623
- hasNextPage: rt.hasNextPage,
1624
- fetchNextPage: ue(I),
1625
- isLoading: v ? v.isLoading : W,
1626
- isFetchingNextPage: (v == null ? void 0 : v.isFetchingNextPage) ?? !1,
1627
- error: (v == null ? void 0 : v.error) ?? null,
1704
+ const K = (ue = I == null ? void 0 : I.data) == null ? void 0 : ue.pages, te = K ? K.flatMap((Q) => Q.items) : Xi, Ee = K && K.length > 0 ? K[K.length - 1].pageInfo : Ze;
1705
+ return ce({
1706
+ items: te,
1707
+ pageInfo: Ee,
1708
+ hasNextPage: Ee.hasNextPage,
1709
+ fetchNextPage: re(h),
1710
+ isLoading: I ? I.isLoading : R,
1711
+ isFetchingNextPage: (I == null ? void 0 : I.isFetchingNextPage) ?? !1,
1712
+ error: (I == null ? void 0 : I.error) ?? null,
1628
1713
  source: "onDemand"
1629
1714
  });
1630
1715
  },
1631
- [G, _e, ue, ie]
1716
+ [Y, $e, re, De]
1632
1717
  );
1633
1718
  return {
1634
- modules: A.modules,
1635
- pageInfo: A.pageInfo,
1636
- hasNextPage: A.hasNextPage,
1637
- fetchNextPage: A.fetchNextPage,
1638
- isLoading: k.isResolving || A.isPending,
1639
- isFetchingNextPage: A.isFetchingNextPage,
1640
- error: A.error ?? k.error,
1641
- itemsMode: q,
1642
- getItems: Te,
1643
- expandModule: Z,
1644
- collapseModule: U,
1645
- collapseAllModules: X,
1646
- toggleModule: ze,
1647
- expandedModuleIds: D,
1648
- filter: h,
1649
- setFilter: de,
1650
- filterEntry: b,
1651
- filterPredicate: We(b) ? b == null ? void 0 : b.predicate : void 0,
1652
- filterResultsArePartial: h !== V && We(b) && A.hasNextPage
1719
+ modules: L.modules,
1720
+ pageInfo: L.pageInfo,
1721
+ hasNextPage: L.hasNextPage,
1722
+ fetchNextPage: L.fetchNextPage,
1723
+ isLoading: (q.isResolving || L.isPending) && !L.isPlaceholderData,
1724
+ isRefreshing: L.isPlaceholderData,
1725
+ isFetchingNextPage: L.isFetchingNextPage,
1726
+ error: L.error ?? q.error,
1727
+ itemsMode: B,
1728
+ getItems: _e,
1729
+ expandModule: ie,
1730
+ collapseModule: P,
1731
+ expandModules: Fe,
1732
+ collapseModules: Ue,
1733
+ collapseAllModules: Se,
1734
+ toggleModule: ae,
1735
+ expandedModuleIds: k,
1736
+ filter: b,
1737
+ setFilter: ze,
1738
+ filterEntry: _,
1739
+ filterPredicate: mt(_) ? _ == null ? void 0 : _.predicate : void 0,
1740
+ filterResultsArePartial: b !== X && mt(_) && L.hasNextPage
1653
1741
  };
1654
1742
  }
1655
- function zl(e, t, n, o) {
1656
- const r = o ? Se.items(t, n, o) : mn(t, n);
1657
- return e.invalidateQueries({ queryKey: r });
1658
- }
1659
- function $l(e, t, n) {
1660
- const o = n ? Se.list(t, n) : Hs(t);
1661
- return e.invalidateQueries({ queryKey: o });
1662
- }
1663
- function Bl(e, t) {
1664
- return e.invalidateQueries({ queryKey: Se.course(t) });
1665
- }
1666
- function oi({ value: e, onChange: t, describedBy: n }) {
1667
- const { t: o } = B(), r = ye(), s = N(() => et(r.filters), [r.filters]), l = vt();
1668
- return /* @__PURE__ */ S(E, { as: "div", margin: "medium 0 0 0", children: [
1669
- /* @__PURE__ */ i(E, { as: "div", margin: "0 0 x-small 0", children: /* @__PURE__ */ i(P, { size: "medium", weight: "bold", id: l, children: o("filterGroupLabel") }) }),
1670
- /* @__PURE__ */ i(
1671
- T,
1743
+ function el({ value: e, onChange: t, describedBy: n }) {
1744
+ const { t: o } = j(), s = Re(), r = N(() => Je(s.filters), [s.filters]), i = st();
1745
+ return /* @__PURE__ */ C(T, { as: "div", margin: "medium 0 0 0", children: [
1746
+ /* @__PURE__ */ l(T, { as: "div", margin: "0 0 x-small 0", children: /* @__PURE__ */ l(v, { size: "medium", weight: "bold", id: i, children: o("filterGroupLabel") }) }),
1747
+ /* @__PURE__ */ l(
1748
+ E,
1672
1749
  {
1673
1750
  gap: "space4",
1674
1751
  wrap: "wrap",
1675
1752
  as: "div",
1676
1753
  role: "group",
1677
- "aria-labelledby": l,
1754
+ "aria-labelledby": i,
1678
1755
  "data-testid": "filter-chips",
1679
- children: s.map((a) => {
1680
- const m = a.key === e;
1681
- return /* @__PURE__ */ i(T.Item, { children: /* @__PURE__ */ i(
1682
- he,
1756
+ children: r.map((a) => {
1757
+ const d = a.key === e;
1758
+ return /* @__PURE__ */ l(E.Item, { children: /* @__PURE__ */ l(
1759
+ ve,
1683
1760
  {
1684
1761
  size: "medium",
1685
- color: m ? "primary" : "secondary",
1686
- "aria-pressed": m,
1687
- "aria-describedby": a.key !== V && We(a) ? n : void 0,
1762
+ color: d ? "primary" : "secondary",
1763
+ "aria-pressed": d,
1764
+ "aria-describedby": a.key !== X && mt(a) ? n : void 0,
1688
1765
  onClick: () => t(a.key),
1689
1766
  "data-testid": `filter-chip-${a.key}`,
1690
1767
  themeOverride: { borderRadius: "0.5rem" },
@@ -1696,29 +1773,115 @@ function oi({ value: e, onChange: t, describedBy: n }) {
1696
1773
  )
1697
1774
  ] });
1698
1775
  }
1699
- const ri = "#586874", si = "#D7DADE", hn = (e, t) => {
1700
- var n, o, r, s;
1776
+ const tl = 20, nl = 4.5, jt = 7, ol = 5, sl = 20, Gn = "#000000", jn = "#FFFFFF", Yn = {
1777
+ primary: { semantic: "base", textKey: "baseTextColor", borderKey: "baseBorderColor" },
1778
+ info: { semantic: "info", textKey: "infoTextColor", borderKey: "infoBorderColor" },
1779
+ success: { semantic: "success", textKey: "successTextColor", borderKey: "successBorderColor" },
1780
+ warning: { semantic: "warning", textKey: "warningTextColor", borderKey: "warningBorderColor" }
1781
+ }, rl = {
1782
+ card: {
1783
+ primary: { fill: "#E8EAEC", stroke: "#8D959F", text: "#273540" },
1784
+ info: { fill: "#D5E4F2", stroke: "#2B7ABC", text: "#23649A" },
1785
+ success: { fill: "#CDE7D8", stroke: "#03893D", text: "#02642C" },
1786
+ warning: { fill: "#F5DBCC", stroke: "#CF4A00", text: "#A13900" }
1787
+ },
1788
+ row: {
1789
+ primary: { fill: "#DEE1E4", stroke: "#8D959F", text: "#273540" },
1790
+ info: { fill: "#CADCEA", stroke: "#2B7ABC", text: "#1E5685" },
1791
+ success: { fill: "#C2DFD0", stroke: "#03893D", text: "#02642C" },
1792
+ warning: { fill: "#EBD2C4", stroke: "#CF4A00", text: "#A13900" }
1793
+ }
1794
+ };
1795
+ function il(e, t) {
1796
+ const n = To(
1797
+ at(e),
1798
+ at(Eo(t, tl))
1799
+ );
1800
+ return gn(n);
1801
+ }
1802
+ function ll(e, t, n) {
1803
+ const o = oe(n, t) >= jt ? jt : nl;
1804
+ return Math.min(o, Math.max(oe(e, Gn), oe(e, jn)));
1805
+ }
1806
+ function al(e, t, n) {
1807
+ const o = ll(e, t, n);
1808
+ if (oe(e, t) >= o) return t;
1809
+ const s = oe(e, Gn) > oe(e, jn) ? Co : wo;
1810
+ let r = t;
1811
+ for (let i = 0; i < sl && oe(e, r) < o; i++)
1812
+ r = s(r, ol);
1813
+ return gn(r);
1814
+ }
1815
+ function cl(e) {
1816
+ return lt(e) && at(e).a === 1;
1817
+ }
1818
+ function Yt(e, t) {
1819
+ var n;
1820
+ return t === "card" ? (n = e == null ? void 0 : e.elevatedSurface) == null ? void 0 : n.base : e == null ? void 0 : e.muted;
1821
+ }
1822
+ function Wt(e, t, n, o) {
1823
+ var i, a, d, u;
1824
+ const s = rl[n][e], r = t;
1825
+ try {
1826
+ const c = r == null ? void 0 : r.newTheme, p = (i = c == null ? void 0 : c.semantics) == null ? void 0 : i.call(c, c.primitives);
1827
+ if (!p) return s;
1828
+ const { semantic: f } = Yn[e], y = Yt((u = (d = (a = r == null ? void 0 : r.themeOverride) == null ? void 0 : a.semantics) == null ? void 0 : d.color) == null ? void 0 : u.background, n) ?? Yt(p.color.background, n) ?? "", g = o.stroke ?? p.color.stroke[f], b = o.label ?? p.color.text[f];
1829
+ if (!cl(y) || !lt(g) || !lt(b)) return s;
1830
+ const w = il(y, g);
1831
+ return { fill: w, stroke: g, text: al(w, b, y) };
1832
+ } catch {
1833
+ return s;
1834
+ }
1835
+ }
1836
+ const Ht = /* @__PURE__ */ new WeakMap();
1837
+ function ul(e, t, n, o = {}) {
1838
+ if (typeof t != "object" || t === null)
1839
+ return Wt(e, t, n, o);
1840
+ let s = Ht.get(t);
1841
+ s === void 0 && (s = /* @__PURE__ */ new Map(), Ht.set(t, s));
1842
+ const r = `${n}:${e}:${o.stroke ?? ""}:${o.label ?? ""}`, i = s.get(r);
1843
+ if (i !== void 0) return i;
1844
+ const a = Wt(e, t, n, o);
1845
+ return s.set(r, a), a;
1846
+ }
1847
+ function Ke(e, t) {
1848
+ const { textKey: n, borderKey: o } = Yn[e];
1849
+ return (s, r) => {
1850
+ const i = s, { fill: a, stroke: d, text: u } = ul(e, r, t, {
1851
+ stroke: i == null ? void 0 : i[o],
1852
+ label: i == null ? void 0 : i[n]
1853
+ });
1854
+ return { backgroundColor: a, [n]: u, [o]: d };
1855
+ };
1856
+ }
1857
+ function Kt(e) {
1701
1858
  return {
1702
- baseTextColor: ((o = (n = t.colors) == null ? void 0 : n.contrasts) == null ? void 0 : o.grey5782) ?? ri,
1703
- baseBorderColor: ((s = (r = t.colors) == null ? void 0 : r.contrasts) == null ? void 0 : s.grey1424) ?? si
1859
+ primary: Ke("primary", e),
1860
+ info: Ke("info", e),
1861
+ success: Ke("success", e),
1862
+ warning: Ke("warning", e)
1704
1863
  };
1705
- }, ii = {
1706
- not_started: {},
1707
- in_progress: { color: "info", icon: /* @__PURE__ */ i(Nt, { size: "sm" }) },
1708
- complete: { color: "success", icon: /* @__PURE__ */ i(xt, { size: "sm" }) },
1709
- missing: { color: "error", icon: /* @__PURE__ */ i(ge, { size: "sm" }) },
1710
- incomplete: { color: "error", icon: /* @__PURE__ */ i(ge, { size: "sm" }) },
1711
- missing_and_incomplete: { color: "error", icon: /* @__PURE__ */ i(ge, { size: "sm" }) },
1712
- locked: { icon: /* @__PURE__ */ i(Rt, { size: "sm" }), themeOverride: hn }
1713
- }, li = {
1714
- not_started: {},
1715
- in_progress: { color: "info", icon: /* @__PURE__ */ i(Nt, { size: "sm" }) },
1716
- complete: { color: "success", icon: /* @__PURE__ */ i(xt, { size: "sm" }) },
1717
- incomplete: { color: "error", icon: /* @__PURE__ */ i(ge, { size: "sm" }) },
1718
- missing: { color: "error", icon: /* @__PURE__ */ i(ge, { size: "sm" }) },
1719
- locked: { icon: /* @__PURE__ */ i(Rt, { size: "sm" }), themeOverride: hn }
1864
+ }
1865
+ const dl = {
1866
+ card: Kt("card"),
1867
+ row: Kt("row")
1868
+ }, ml = {
1869
+ not_started: { tone: "primary", icon: /* @__PURE__ */ l(cn, { size: "sm" }) },
1870
+ in_progress: { tone: "info", icon: /* @__PURE__ */ l(an, { size: "sm" }) },
1871
+ complete: { tone: "success", icon: /* @__PURE__ */ l(ln, { size: "sm" }) },
1872
+ missing: { tone: "warning", icon: /* @__PURE__ */ l(Pe, { size: "sm" }) },
1873
+ incomplete: { tone: "warning", icon: /* @__PURE__ */ l(Pe, { size: "sm" }) },
1874
+ missing_and_incomplete: { tone: "warning", icon: /* @__PURE__ */ l(Pe, { size: "sm" }) },
1875
+ locked: { tone: "primary", icon: /* @__PURE__ */ l(rn, { size: "sm" }) }
1876
+ }, pl = {
1877
+ not_started: { tone: "primary", icon: /* @__PURE__ */ l(cn, { size: "sm" }) },
1878
+ in_progress: { tone: "info", icon: /* @__PURE__ */ l(an, { size: "sm" }) },
1879
+ complete: { tone: "success", icon: /* @__PURE__ */ l(ln, { size: "sm" }) },
1880
+ incomplete: { tone: "warning", icon: /* @__PURE__ */ l(Pe, { size: "sm" }) },
1881
+ missing: { tone: "warning", icon: /* @__PURE__ */ l(Pe, { size: "sm" }) },
1882
+ locked: { tone: "primary", icon: /* @__PURE__ */ l(rn, { size: "sm" }) }
1720
1883
  };
1721
- function ai(e, t, n, o) {
1884
+ function Wn(e, t, n, o) {
1722
1885
  switch (t) {
1723
1886
  case "not_started":
1724
1887
  return e("moduleStatusNotStarted");
@@ -1739,7 +1902,7 @@ function ai(e, t, n, o) {
1739
1902
  return e("moduleStatusLocked");
1740
1903
  }
1741
1904
  }
1742
- function ui(e, t) {
1905
+ function fl(e, t) {
1743
1906
  switch (t) {
1744
1907
  case "not_started":
1745
1908
  return e("itemStatusNotStarted");
@@ -1755,85 +1918,87 @@ function ui(e, t) {
1755
1918
  return e("itemStatusLocked");
1756
1919
  }
1757
1920
  }
1758
- function In(e, t, n) {
1759
- return /* @__PURE__ */ i(
1760
- $n,
1921
+ function Hn(e, t, n, o) {
1922
+ return /* @__PURE__ */ l(
1923
+ Po,
1761
1924
  {
1762
- color: e.color,
1925
+ color: e.tone,
1763
1926
  renderIcon: e.icon,
1764
- themeOverride: e.themeOverride,
1927
+ themeOverride: dl[o][e.tone],
1765
1928
  "data-testid": n,
1766
1929
  children: t
1767
1930
  }
1768
1931
  );
1769
1932
  }
1770
- function ci({
1933
+ function gl({
1771
1934
  status: e,
1772
1935
  missingCount: t,
1773
1936
  incompleteCount: n
1774
1937
  }) {
1775
- const { t: o } = B();
1776
- return In(
1777
- ii[e],
1778
- ai(o, e, t, n),
1779
- "module-status-pill"
1938
+ const { t: o } = j();
1939
+ return Hn(
1940
+ ml[e],
1941
+ Wn(o, e, t, n),
1942
+ "module-status-pill",
1943
+ "card"
1780
1944
  );
1781
1945
  }
1782
- function di({ status: e }) {
1783
- const { t } = B();
1784
- return In(
1785
- li[e],
1786
- ui(t, e),
1787
- "item-status-pill"
1946
+ function hl({ status: e }) {
1947
+ const { t } = j();
1948
+ return Hn(
1949
+ pl[e],
1950
+ fl(t, e),
1951
+ "item-status-pill",
1952
+ "row"
1788
1953
  );
1789
1954
  }
1790
- const bn = 2.75, je = `${bn}rem`, mi = { lineHeight: 0, display: "block" }, pi = {
1955
+ const Kn = 2.75, ot = `${Kn}rem`, Il = { lineHeight: 0, display: "block" }, bl = {
1791
1956
  display: "inline-block",
1792
1957
  paddingLeft: "0.5rem",
1793
1958
  marginLeft: "0.5rem"
1794
- }, fi = "#D7DADE", gi = "#6A7883", Mn = { fontSize: 0 };
1795
- function Qe(e) {
1796
- return e == null || typeof e == "boolean" || e === "" ? !0 : Array.isArray(e) ? e.every(Qe) : wt(e) && e.type === At ? Qe(e.props.children) : !1;
1959
+ }, Ml = "#D7DADE", yl = "#6A7883", Qn = { fontSize: 0 };
1960
+ function pt(e) {
1961
+ return e == null || typeof e == "boolean" || e === "" ? !0 : Array.isArray(e) ? e.every(pt) : nn(e) && e.type === sn ? pt(e.props.children) : !1;
1797
1962
  }
1798
- const hi = {
1963
+ const Sl = {
1799
1964
  contentVisibility: "auto",
1800
1965
  containIntrinsicSize: "auto 4.25rem"
1801
- }, Ii = "0.5rem";
1802
- function bi() {
1803
- const e = $t();
1966
+ }, _l = "0.5rem";
1967
+ function Tl() {
1968
+ const e = fn();
1804
1969
  return "key" in e && e.key === "canvas-high-contrast" ? "inline" : "standalone";
1805
1970
  }
1806
- function yn(e, t) {
1807
- var o, r;
1808
- const n = $t();
1809
- return ("colors" in n ? (r = (o = n.colors) == null ? void 0 : o.contrasts) == null ? void 0 : r[e] : void 0) ?? t;
1971
+ function Vn(e, t) {
1972
+ var o, s;
1973
+ const n = fn();
1974
+ return ("colors" in n ? (s = (o = n.colors) == null ? void 0 : o.contrasts) == null ? void 0 : s[e] : void 0) ?? t;
1810
1975
  }
1811
- function Sn() {
1812
- const e = yn("grey1424", fi);
1976
+ function Zn() {
1977
+ const e = Vn("grey1424", Ml);
1813
1978
  return N(
1814
- () => ({ ...pi, borderLeft: `1px solid ${e}` }),
1979
+ () => ({ ...bl, borderLeft: `1px solid ${e}` }),
1815
1980
  [e]
1816
1981
  );
1817
1982
  }
1818
- function Mi({
1983
+ function El({
1819
1984
  item: e,
1820
1985
  today: t,
1821
1986
  navigation: n,
1822
1987
  attachedAbove: o,
1823
- attachedBelow: r
1988
+ attachedBelow: s
1824
1989
  }) {
1825
- var O;
1826
- const { t: s, locale: l, timezone: a } = B(), m = bi(), c = yn("grey4570", gi), u = Sn(), p = De(), f = ye(), y = N(() => et(f.itemMeta), [f.itemMeta]), g = e.title || s("itemUntitled");
1990
+ var F;
1991
+ const { t: r, locale: i, timezone: a } = j(), d = Tl(), u = Vn("grey4570", yl), c = Zn(), p = Ne(), f = Re(), y = N(() => Je(f.itemMeta), [f.itemMeta]), g = e.title || r("itemUntitled");
1827
1992
  if (e.type === "sub_header")
1828
- return /* @__PURE__ */ i(
1829
- E,
1993
+ return /* @__PURE__ */ l(
1994
+ T,
1830
1995
  {
1831
1996
  as: "div",
1832
1997
  padding: "x-small small",
1833
1998
  margin: "x-small 0 0 0",
1834
1999
  "data-testid": `module-item-${e.id}`,
1835
- children: /* @__PURE__ */ i(
1836
- P,
2000
+ children: /* @__PURE__ */ l(
2001
+ v,
1837
2002
  {
1838
2003
  size: "small",
1839
2004
  weight: "bold",
@@ -1846,58 +2011,58 @@ function Mi({
1846
2011
  )
1847
2012
  }
1848
2013
  );
1849
- const h = ((O = n == null ? void 0 : n.getItemHref) == null ? void 0 : O.call(n, e)) ?? e.url ?? null, _ = e.status === "locked", C = n == null ? void 0 : n.onItemClick, b = C ? (R) => C(e, R) : void 0, w = ne(f.itemTypes, e.type), k = w != null && w.renderIcon ? w.renderIcon({ item: e }) : w == null ? void 0 : w.icon, q = { item: e, t: s, today: t, locale: l, timezone: a, formatters: p, config: f }, A = y.map((R) => ({ key: R.key, node: R.render(q) })).filter((R) => !Qe(R.node)), D = A.some((R) => R.key === Ds), j = o ? "none" : "large", Q = r ? "none" : "large";
1850
- return /* @__PURE__ */ i("div", { style: { ...hi, marginTop: o ? void 0 : Ii }, children: /* @__PURE__ */ i(
1851
- E,
2014
+ const b = ((F = n == null ? void 0 : n.getItemHref) == null ? void 0 : F.call(n, e)) ?? e.url ?? null, w = e.status === "locked", x = n == null ? void 0 : n.onItemClick, _ = x ? (D) => x(e, D) : void 0, A = he(f.itemTypes, e.type), q = A != null && A.renderIcon ? A.renderIcon({ item: e }) : A == null ? void 0 : A.icon, B = { item: e, t: r, today: t, locale: i, timezone: a, formatters: p, config: f }, L = y.map((D) => ({ key: D.key, node: D.render(B) })).filter((D) => !pt(D.node)), k = L.some((D) => D.key === ki), G = o ? "none" : "large", J = s ? "none" : "large";
2015
+ return /* @__PURE__ */ l("div", { style: { ...Sl, marginTop: o ? void 0 : _l }, children: /* @__PURE__ */ l(
2016
+ T,
1852
2017
  {
1853
2018
  as: "div",
1854
2019
  background: "secondary",
1855
- borderRadius: `${j} ${j} ${Q} ${Q}`,
2020
+ borderRadius: `${G} ${G} ${J} ${J}`,
1856
2021
  padding: "small",
1857
2022
  "data-testid": `module-item-${e.id}`,
1858
- children: /* @__PURE__ */ i("div", { style: { paddingInlineStart: `${Math.max(e.indent - 1, 0) * bn}rem` }, children: /* @__PURE__ */ S(T, { alignItems: "center", gap: "mediumSmall", children: [
1859
- /* @__PURE__ */ i(T.Item, { children: /* @__PURE__ */ S(T, { alignItems: "center", children: [
1860
- e.indent > 0 ? /* @__PURE__ */ i(T.Item, { size: je, textAlign: "center", "data-testid": "item-nest-arrow", children: /* @__PURE__ */ i("span", { style: { color: c }, children: /* @__PURE__ */ i(xn, { size: "md", color: "inherit" }) }) }) : null,
1861
- /* @__PURE__ */ i(T.Item, { children: /* @__PURE__ */ i(
1862
- E,
2023
+ children: /* @__PURE__ */ l("div", { style: { paddingInlineStart: `${Math.max(e.indent - 1, 0) * Kn}rem` }, children: /* @__PURE__ */ C(E, { alignItems: "center", gap: "mediumSmall", children: [
2024
+ /* @__PURE__ */ l(E.Item, { children: /* @__PURE__ */ C(E, { alignItems: "center", children: [
2025
+ e.indent > 0 ? /* @__PURE__ */ l(E.Item, { size: ot, textAlign: "center", "data-testid": "item-nest-arrow", children: /* @__PURE__ */ l("span", { style: { color: u }, children: /* @__PURE__ */ l(po, { size: "md", color: "inherit" }) }) }) : null,
2026
+ /* @__PURE__ */ l(E.Item, { children: /* @__PURE__ */ l(
2027
+ T,
1863
2028
  {
1864
2029
  as: "div",
1865
2030
  background: "primary",
1866
2031
  borderWidth: "small",
1867
2032
  borderRadius: "large",
1868
- width: je,
1869
- height: je,
1870
- children: /* @__PURE__ */ i(T, { height: "100%", alignItems: "center", justifyItems: "center", children: /* @__PURE__ */ S(T.Item, { children: [
1871
- /* @__PURE__ */ i("span", { style: mi, "data-testid": "item-type-icon", children: k }),
1872
- w && !D ? /* @__PURE__ */ i(lt, { children: s(w.label) }) : null
2033
+ width: ot,
2034
+ height: ot,
2035
+ children: /* @__PURE__ */ l(E, { height: "100%", alignItems: "center", justifyItems: "center", children: /* @__PURE__ */ C(E.Item, { children: [
2036
+ /* @__PURE__ */ l("span", { style: Il, "data-testid": "item-type-icon", children: q }),
2037
+ A && !k ? /* @__PURE__ */ l(it, { children: r(A.label) }) : null
1873
2038
  ] }) })
1874
2039
  }
1875
2040
  ) })
1876
2041
  ] }) }),
1877
- /* @__PURE__ */ S(T.Item, { shouldGrow: !0, shouldShrink: !0, children: [
1878
- /* @__PURE__ */ i(E, { as: "div", children: _ || !h ? /* @__PURE__ */ i(
1879
- P,
2042
+ /* @__PURE__ */ C(E.Item, { shouldGrow: !0, shouldShrink: !0, children: [
2043
+ /* @__PURE__ */ l(T, { as: "div", children: w || !b ? /* @__PURE__ */ l(
2044
+ v,
1880
2045
  {
1881
2046
  weight: "bold",
1882
2047
  size: "medium",
1883
2048
  lineHeight: "condensed",
1884
- color: _ ? "secondary" : "primary",
2049
+ color: w ? "secondary" : "primary",
1885
2050
  "data-testid": "module-item-title",
1886
- "data-locked": _ ? "true" : void 0,
2051
+ "data-locked": w ? "true" : void 0,
1887
2052
  children: g
1888
2053
  }
1889
- ) : /* @__PURE__ */ S(
1890
- zn,
2054
+ ) : /* @__PURE__ */ C(
2055
+ _o,
1891
2056
  {
1892
- href: h,
1893
- onClick: b,
2057
+ href: b,
2058
+ onClick: _,
1894
2059
  forceButtonRole: !1,
1895
- variant: m,
2060
+ variant: d,
1896
2061
  target: e.newTab ? "_blank" : void 0,
1897
2062
  rel: e.newTab ? "noopener noreferrer" : void 0,
1898
2063
  children: [
1899
- /* @__PURE__ */ i(
1900
- P,
2064
+ /* @__PURE__ */ l(
2065
+ v,
1901
2066
  {
1902
2067
  weight: "bold",
1903
2068
  size: "medium",
@@ -1907,139 +2072,148 @@ function Mi({
1907
2072
  children: g
1908
2073
  }
1909
2074
  ),
1910
- e.newTab ? /* @__PURE__ */ i(lt, { children: ` ${s("opensInNewWindow")}` }) : null
2075
+ e.newTab ? /* @__PURE__ */ l(it, { children: ` ${r("opensInNewWindow")}` }) : null
1911
2076
  ]
1912
2077
  }
1913
2078
  ) }),
1914
- /* @__PURE__ */ i(E, { as: "div", children: /* @__PURE__ */ i(P, { size: "x-small", color: "secondary", "data-testid": "module-item-meta", children: A.map((R, G) => /* @__PURE__ */ S(At, { children: [
1915
- G > 0 ? /* @__PURE__ */ i("span", { style: Mn, children: " " }) : null,
1916
- /* @__PURE__ */ i("span", { style: G > 0 ? u : void 0, children: R.node })
1917
- ] }, R.key)) }) })
2079
+ /* @__PURE__ */ l(T, { as: "div", children: /* @__PURE__ */ l(v, { size: "x-small", color: "secondary", "data-testid": "module-item-meta", children: L.map((D, Y) => /* @__PURE__ */ C(sn, { children: [
2080
+ Y > 0 ? /* @__PURE__ */ l("span", { style: Qn, children: " " }) : null,
2081
+ /* @__PURE__ */ l("span", { style: Y > 0 ? c : void 0, children: D.node })
2082
+ ] }, D.key)) }) })
1918
2083
  ] }),
1919
- e.status ? /* @__PURE__ */ i(T.Item, { children: /* @__PURE__ */ i(di, { status: e.status }) }) : null
2084
+ e.status ? /* @__PURE__ */ l(E.Item, { children: /* @__PURE__ */ l(hl, { status: e.status }) }) : null
1920
2085
  ] }) })
1921
2086
  }
1922
2087
  ) });
1923
2088
  }
1924
- const yi = Lt(Mi), yt = "\0", Si = { textDecoration: "underline dotted", cursor: "help" };
1925
- function _i({ names: e }) {
1926
- const { t } = B();
1927
- if (e.length === 1) return /* @__PURE__ */ i(it, { children: t("lockedByPrerequisiteByline", { name: e[0] }) });
2089
+ const Cl = on(El), Qt = "\0", wl = { textDecoration: "underline dotted", cursor: "help" };
2090
+ function Pl({ names: e }) {
2091
+ const { t } = j();
2092
+ if (e.length === 1) return /* @__PURE__ */ l(vt, { children: t("lockedByPrerequisiteByline", { name: e[0] }) });
1928
2093
  const n = t("lockedByPrerequisitesByline", {
1929
2094
  count: e.length,
1930
- prerequisites: yt
1931
- }), [o, ...r] = n.split(yt), s = r.length > 0 ? r.join("") : null;
1932
- return /* @__PURE__ */ S(it, { children: [
1933
- s === null ? null : o,
1934
- /* @__PURE__ */ i(Un, { renderTip: e.join(", "), children: /* @__PURE__ */ i("span", { tabIndex: 0, style: Si, "data-testid": "module-byline-prerequisites", children: s === null ? n : t("lockedByPrerequisitesCount", { count: e.length }) }) }),
1935
- s
2095
+ prerequisites: Qt
2096
+ }), [o, ...s] = n.split(Qt), r = s.length > 0 ? s.join("") : null;
2097
+ return /* @__PURE__ */ C(vt, { children: [
2098
+ r === null ? null : o,
2099
+ /* @__PURE__ */ l(pn, { renderTip: e.join(", "), children: /* @__PURE__ */ l(
2100
+ "span",
2101
+ {
2102
+ tabIndex: 0,
2103
+ style: wl,
2104
+ onClick: (i) => i.stopPropagation(),
2105
+ "data-testid": "module-byline-prerequisites",
2106
+ children: r === null ? n : t("lockedByPrerequisitesCount", { count: e.length })
2107
+ }
2108
+ ) }),
2109
+ r
1936
2110
  ] });
1937
2111
  }
1938
- function Ti({ module: e, today: t }) {
1939
- var u;
1940
- const n = De(), o = Sn(), r = ((u = e.progress) == null ? void 0 : u.status) === "locked", s = e.unlockAt ?? null, l = e.prerequisiteModules.map((p) => p.name.trim()).filter((p) => p !== ""), a = s !== null && new Date(s) > t;
1941
- let m = null;
1942
- s !== null && a && (r || !e.progress) ? m = n.unlockByline(s, t) : s !== null && !a && !e.progress && (m = n.unlockedByline(s, t));
1943
- const c = r && l.length > 0;
1944
- return m === null && !c ? null : /* @__PURE__ */ i(E, { as: "div", margin: "xxx-small 0 0 0", children: /* @__PURE__ */ S(P, { size: "small", color: "secondary", "data-testid": "module-byline", children: [
1945
- m,
1946
- m !== null && c ? /* @__PURE__ */ i("span", { style: Mn, children: " " }) : null,
1947
- c ? /* @__PURE__ */ i("span", { style: m !== null ? o : void 0, children: /* @__PURE__ */ i(_i, { names: l }) }) : null
2112
+ function vl({ module: e, today: t }) {
2113
+ var c;
2114
+ const n = Ne(), o = Zn(), s = ((c = e.progress) == null ? void 0 : c.status) === "locked", r = e.unlockAt ?? null, i = e.prerequisiteModules.map((p) => p.name.trim()).filter((p) => p !== ""), a = r !== null && new Date(r) > t;
2115
+ let d = null;
2116
+ r !== null && a && (s || !e.progress) ? d = n.unlockByline(r, t) : r !== null && !a && !e.progress && (d = n.unlockedByline(r, t));
2117
+ const u = s && i.length > 0;
2118
+ return d === null && !u ? null : /* @__PURE__ */ l(T, { as: "div", margin: "xxx-small 0 0 0", children: /* @__PURE__ */ C(v, { size: "small", color: "secondary", "data-testid": "module-byline", children: [
2119
+ d,
2120
+ d !== null && u ? /* @__PURE__ */ l("span", { style: Qn, children: " " }) : null,
2121
+ u ? /* @__PURE__ */ l("span", { style: d !== null ? o : void 0, children: /* @__PURE__ */ l(Pl, { names: i }) }) : null
1948
2122
  ] }) });
1949
2123
  }
1950
- const Ei = "#273540", Pi = "#D7DADE", Ci = "0.5rem", wi = (e, t) => {
1951
- var n, o, r, s, l;
2124
+ const Al = "#273540", xl = "#D7DADE", Ll = "0.5rem", Rl = (e, t) => {
2125
+ var n, o, s, r, i;
1952
2126
  return {
1953
- meterColorBrand: ((o = (n = t.colors) == null ? void 0 : n.contrasts) == null ? void 0 : o.grey125125) ?? Ei,
1954
- borderRadius: String(((r = t.borders) == null ? void 0 : r.radiusLarge) ?? Ci),
1955
- borderColor: ((l = (s = t.colors) == null ? void 0 : s.contrasts) == null ? void 0 : l.grey1424) ?? Pi,
2127
+ meterColorBrand: ((o = (n = t.colors) == null ? void 0 : n.contrasts) == null ? void 0 : o.grey125125) ?? Al,
2128
+ borderRadius: String(((s = t.borders) == null ? void 0 : s.radiusLarge) ?? Ll),
2129
+ borderColor: ((i = (r = t.colors) == null ? void 0 : r.contrasts) == null ? void 0 : i.grey1424) ?? xl,
1956
2130
  trackBottomBorderColor: "transparent"
1957
2131
  };
1958
- }, vi = "66.667%", Li = "8rem", Ai = 2;
1959
- function Ri({
2132
+ }, kl = "66.667%", Nl = "8rem", Dl = 2;
2133
+ function Ol({
1960
2134
  module: e,
1961
2135
  breakpoints: t
1962
2136
  }) {
1963
- const { t: n } = B(), o = De(), r = e.progress;
1964
- if (!r || r.status === "locked" || r.requirementCount <= 0) return null;
1965
- const s = t.mobileOnly, l = Object.keys(t).length === 0 || t.desktop === !0;
1966
- return /* @__PURE__ */ S(
1967
- T,
2137
+ const { t: n } = j(), o = Ne(), s = e.progress;
2138
+ if (!s || s.status === "locked" || s.requirementCount <= 0) return null;
2139
+ const r = t.mobileOnly, i = Object.keys(t).length === 0 || t.desktop === !0;
2140
+ return /* @__PURE__ */ C(
2141
+ E,
1968
2142
  {
1969
- width: l ? vi : "100%",
1970
- direction: s ? "column" : "row",
1971
- alignItems: s ? "stretch" : "center",
2143
+ width: i ? kl : "100%",
2144
+ direction: r ? "column" : "row",
2145
+ alignItems: r ? "stretch" : "center",
1972
2146
  wrap: "wrap",
1973
2147
  gap: "x-small",
1974
2148
  margin: "small 0 0 0",
1975
2149
  "data-testid": "module-progress",
1976
2150
  children: [
1977
- /* @__PURE__ */ i(T.Item, { size: s ? void 0 : Li, shouldGrow: !0, children: /* @__PURE__ */ i(
1978
- Fn,
2151
+ /* @__PURE__ */ l(E.Item, { size: r ? void 0 : Nl, shouldGrow: !0, children: /* @__PURE__ */ l(
2152
+ So,
1979
2153
  {
1980
2154
  size: "x-small",
1981
2155
  meterColor: "brand",
1982
- valueNow: r.requirementsMet,
1983
- valueMax: r.requirementCount,
2156
+ valueNow: s.requirementsMet,
2157
+ valueMax: s.requirementCount,
1984
2158
  shouldAnimate: !1,
1985
2159
  screenReaderLabel: n("moduleProgressScreenReaderLabel", { name: e.name }),
1986
- formatScreenReaderValue: () => xs(
2160
+ formatScreenReaderValue: () => Ai(
1987
2161
  n,
1988
- r.percentComplete,
1989
- r.requirementsMet,
1990
- r.requirementCount
2162
+ s.percentComplete,
2163
+ s.requirementsMet,
2164
+ s.requirementCount
1991
2165
  ),
1992
- themeOverride: wi
2166
+ themeOverride: Rl
1993
2167
  }
1994
2168
  ) }),
1995
- /* @__PURE__ */ i(T.Item, { shouldShrink: !0, "aria-hidden": "true", children: /* @__PURE__ */ i(P, { size: "small", color: "secondary", children: o.progress(
1996
- r.percentComplete,
1997
- r.requirementsMet,
1998
- r.requirementCount
2169
+ /* @__PURE__ */ l(E.Item, { shouldShrink: !0, "aria-hidden": "true", children: /* @__PURE__ */ l(v, { size: "small", color: "secondary", children: o.progress(
2170
+ s.percentComplete,
2171
+ s.requirementsMet,
2172
+ s.requirementCount
1999
2173
  ) }) })
2000
2174
  ]
2001
2175
  }
2002
2176
  );
2003
2177
  }
2004
- const St = (e) => `platform-modules-panel-${e}`;
2005
- function He(e) {
2178
+ const Vt = (e) => `platform-modules-panel-${e}`;
2179
+ function ft(e) {
2006
2180
  return e !== void 0 && e.type !== "sub_header";
2007
2181
  }
2008
- function _t(e) {
2009
- return He(e) && e.indent > 0;
2182
+ function Zt(e) {
2183
+ return ft(e) && e.indent > 0;
2010
2184
  }
2011
- function xi({
2185
+ function ql({
2012
2186
  module: e,
2013
2187
  state: t,
2014
2188
  today: n,
2015
2189
  navigation: o,
2016
- showDiagnostics: r
2190
+ showDiagnostics: s
2017
2191
  }) {
2018
- const { t: s } = B(), l = $(null), a = t.items.length, m = !t.isLoading && !t.isFetchingNextPage;
2019
- return Ie(() => {
2020
- !m || a === 0 || l.current !== a && (l.current = a, Dt(
2021
- s("itemsLoadedAnnouncement", {
2192
+ const { t: r } = j(), i = $(null), a = t.items.length, d = !t.isLoading && !t.isFetchingNextPage;
2193
+ return Z(() => {
2194
+ !d || a === 0 || i.current !== a && (i.current = a, pe(
2195
+ r("itemsLoadedAnnouncement", {
2022
2196
  loaded: a,
2023
2197
  count: e.itemCount,
2024
2198
  name: e.name
2025
2199
  })
2026
2200
  ));
2027
- }, [m, a, e.itemCount, e.name, s]), t.error ? /* @__PURE__ */ i(E, { as: "div", margin: "small 0 0 0", children: /* @__PURE__ */ i(
2028
- Ft,
2201
+ }, [d, a, e.itemCount, e.name, r]), t.error ? /* @__PURE__ */ l(T, { as: "div", margin: "small 0 0 0", children: /* @__PURE__ */ l(
2202
+ dn,
2029
2203
  {
2030
2204
  variant: "error",
2031
2205
  margin: "0",
2032
- liveRegion: Ot,
2206
+ liveRegion: un,
2033
2207
  liveRegionPoliteness: "assertive",
2034
2208
  "data-testid": "items-error",
2035
- children: s("itemsLoadErrorAlert", { message: t.error.message })
2209
+ children: r("itemsLoadErrorAlert", { message: t.error.message })
2036
2210
  }
2037
- ) }) : t.isLoading ? /* @__PURE__ */ S(E, { as: "div", margin: "small 0 0 0", "data-testid": "items-loading", children: [
2038
- /* @__PURE__ */ i(zt, { size: "x-small", renderTitle: s("itemsLoadingSpinnerLabel") }),
2211
+ ) }) : t.isLoading ? /* @__PURE__ */ C(T, { as: "div", margin: "small 0 0 0", "data-testid": "items-loading", children: [
2212
+ /* @__PURE__ */ l(rt, { size: "x-small", renderTitle: r("itemsLoadingSpinnerLabel") }),
2039
2213
  " ",
2040
- /* @__PURE__ */ i(P, { size: "small", color: "secondary", children: s("itemsLoadingText") })
2041
- ] }) : /* @__PURE__ */ S(E, { as: "div", margin: "small 0 0 0", children: [
2042
- r ? /* @__PURE__ */ S(P, { size: "x-small", color: "secondary", "data-testid": "items-source", children: [
2214
+ /* @__PURE__ */ l(v, { size: "small", color: "secondary", children: r("itemsLoadingText") })
2215
+ ] }) : /* @__PURE__ */ C(T, { as: "div", margin: "small 0 0 0", children: [
2216
+ s ? /* @__PURE__ */ C(v, { size: "x-small", color: "secondary", "data-testid": "items-source", children: [
2043
2217
  "items source: ",
2044
2218
  t.source,
2045
2219
  " · loaded ",
@@ -2047,24 +2221,24 @@ function xi({
2047
2221
  " of ",
2048
2222
  e.itemCount
2049
2223
  ] }) : null,
2050
- t.items.length === 0 ? /* @__PURE__ */ i(E, { as: "div", padding: "small", "data-testid": "items-empty", children: /* @__PURE__ */ i(P, { size: "small", color: "secondary", children: s("noItemsEmptyState") }) }) : /* @__PURE__ */ i("ul", { style: { listStyle: "none", margin: 0, padding: 0 }, "data-testid": "items-list", children: t.items.map((c, u) => /* @__PURE__ */ i("li", { children: /* @__PURE__ */ i(
2051
- yi,
2224
+ t.items.length === 0 ? /* @__PURE__ */ l(T, { as: "div", padding: "small", "data-testid": "items-empty", children: /* @__PURE__ */ l(v, { size: "small", color: "secondary", children: r("noItemsEmptyState") }) }) : /* @__PURE__ */ l("ul", { style: { listStyle: "none", margin: 0, padding: 0 }, "data-testid": "items-list", children: t.items.map((u, c) => /* @__PURE__ */ l("li", { children: /* @__PURE__ */ l(
2225
+ Cl,
2052
2226
  {
2053
- item: c,
2227
+ item: u,
2054
2228
  today: n,
2055
2229
  navigation: o,
2056
- attachedAbove: _t(c) && He(t.items[u - 1]),
2057
- attachedBelow: He(c) && _t(t.items[u + 1])
2230
+ attachedAbove: Zt(u) && ft(t.items[c - 1]),
2231
+ attachedBelow: ft(u) && Zt(t.items[c + 1])
2058
2232
  }
2059
- ) }, c.id)) }),
2060
- t.hasNextPage ? /* @__PURE__ */ i(E, { as: "div", margin: "small 0 0 0", textAlign: "center", children: /* @__PURE__ */ i(
2061
- he,
2233
+ ) }, u.id)) }),
2234
+ t.hasNextPage ? /* @__PURE__ */ l(T, { as: "div", margin: "small 0 0 0", textAlign: "center", children: /* @__PURE__ */ l(
2235
+ ve,
2062
2236
  {
2063
2237
  size: "small",
2064
2238
  onClick: t.fetchNextPage,
2065
2239
  interaction: t.isFetchingNextPage ? "disabled" : "enabled",
2066
2240
  "data-testid": "load-more-items",
2067
- children: t.isFetchingNextPage ? s("loadMoreItemsLoading") : s("loadMoreItems", {
2241
+ children: t.isFetchingNextPage ? r("loadMoreItemsLoading") : r("loadMoreItems", {
2068
2242
  loaded: t.items.length,
2069
2243
  count: e.itemCount
2070
2244
  })
@@ -2072,29 +2246,32 @@ function xi({
2072
2246
  ) }) : null
2073
2247
  ] });
2074
2248
  }
2075
- function Ni({
2249
+ function Fl({
2076
2250
  module: e,
2077
2251
  expanded: t,
2078
2252
  onToggle: n,
2079
2253
  itemsState: o,
2080
- today: r,
2081
- navigation: s,
2082
- showDiagnostics: l = !1,
2254
+ today: s,
2255
+ navigation: r,
2256
+ showDiagnostics: i = !1,
2083
2257
  headingLevel: a = "h3",
2084
- moduleLabel: m,
2085
- breakpoints: c = {}
2258
+ moduleLabel: d,
2259
+ breakpoints: u = {}
2086
2260
  }) {
2087
- var C, b;
2088
- const { t: u } = B(), p = De(), f = ((C = e.progress) == null ? void 0 : C.status) === "locked", y = m === void 0 ? p.moduleLabel(e.position, e) : m, g = (y == null ? void 0 : y.trim()) || null, h = c.mobileOnly === !0, _ = (b = e.progress) != null && b.status ? /* @__PURE__ */ i(
2089
- ci,
2261
+ var _, A;
2262
+ const { t: c } = j(), p = Ne(), f = ((_ = e.progress) == null ? void 0 : _.status) === "locked", y = d === void 0 ? p.moduleLabel(e.position, e) : d, g = (y == null ? void 0 : y.trim()) || null, b = u.mobileOnly === !0, w = () => {
2263
+ var q;
2264
+ (q = window.getSelection()) != null && q.toString().trim() || n(e.id);
2265
+ }, x = (A = e.progress) != null && A.status ? /* @__PURE__ */ l(
2266
+ gl,
2090
2267
  {
2091
2268
  status: e.progress.status,
2092
2269
  missingCount: e.progress.missingCount,
2093
2270
  incompleteCount: e.progress.incompleteCount
2094
2271
  }
2095
2272
  ) : null;
2096
- return /* @__PURE__ */ S(
2097
- E,
2273
+ return /* @__PURE__ */ C(
2274
+ T,
2098
2275
  {
2099
2276
  as: "div",
2100
2277
  background: "primary",
@@ -2105,69 +2282,205 @@ function Ni({
2105
2282
  margin: "0 0 small 0",
2106
2283
  "data-testid": `module-card-${e.id}`,
2107
2284
  children: [
2108
- /* @__PURE__ */ S(T, { alignItems: "start", gap: "mediumSmall", "data-testid": "module-header", children: [
2109
- /* @__PURE__ */ S(T.Item, { shouldGrow: !0, shouldShrink: !0, children: [
2110
- /* @__PURE__ */ S(E, { as: "div", children: [
2111
- /* @__PURE__ */ i(
2112
- Ut,
2113
- {
2114
- level: a,
2115
- variant: "titleCardRegular",
2116
- color: f ? "secondary" : "primary",
2117
- "data-testid": "module-name",
2118
- children: /* @__PURE__ */ i(On, { linesAllowed: Ai, children: g ? u("moduleNameWithLabel", { label: g, name: e.name }) : e.name })
2119
- }
2120
- ),
2121
- e.published ? null : /* @__PURE__ */ S(P, { size: "x-small", color: "secondary", children: [
2122
- " ",
2123
- u("moduleUnpublishedBadge")
2124
- ] })
2125
- ] }),
2126
- /* @__PURE__ */ i(Ti, { module: e, today: r }),
2127
- h && _ ? /* @__PURE__ */ i(E, { as: "div", margin: "x-small 0 0 0", children: _ }) : null,
2128
- /* @__PURE__ */ i(Ri, { module: e, breakpoints: c })
2129
- ] }),
2130
- /* @__PURE__ */ i(T.Item, { children: /* @__PURE__ */ S(T, { alignItems: "center", gap: "mediumSmall", children: [
2131
- !h && _ ? /* @__PURE__ */ i(T.Item, { children: _ }) : null,
2132
- /* @__PURE__ */ i(T.Item, { children: /* @__PURE__ */ i(
2133
- Dn,
2134
- {
2135
- size: "medium",
2136
- withBorder: !0,
2137
- withBackground: !1,
2138
- screenReaderLabel: t ? u("collapseModule", { name: e.name }) : u("expandModule", { name: e.name }),
2139
- "aria-expanded": t,
2140
- "aria-controls": St(e.id),
2141
- onClick: () => n(e.id),
2142
- "data-testid": `toggle-module-${e.id}`,
2143
- children: t ? /* @__PURE__ */ i(Nn, {}) : /* @__PURE__ */ i(qt, {})
2144
- }
2145
- ) })
2146
- ] }) })
2147
- ] }),
2148
- /* @__PURE__ */ i("div", { id: St(e.id), role: "group", "aria-label": e.name, hidden: !t, children: t ? /* @__PURE__ */ i(
2149
- xi,
2285
+ /* @__PURE__ */ l(T, { as: "div", cursor: "pointer", children: /* @__PURE__ */ C(
2286
+ E,
2287
+ {
2288
+ alignItems: "start",
2289
+ gap: "mediumSmall",
2290
+ onClick: w,
2291
+ "data-testid": "module-header",
2292
+ children: [
2293
+ /* @__PURE__ */ C(E.Item, { shouldGrow: !0, shouldShrink: !0, children: [
2294
+ /* @__PURE__ */ C(T, { as: "div", children: [
2295
+ /* @__PURE__ */ l(
2296
+ mn,
2297
+ {
2298
+ level: a,
2299
+ variant: "titleCardRegular",
2300
+ color: f ? "secondary" : "primary",
2301
+ "data-testid": "module-name",
2302
+ children: /* @__PURE__ */ l(yo, { linesAllowed: Dl, children: g ? c("moduleNameWithLabel", { label: g, name: e.name }) : e.name })
2303
+ }
2304
+ ),
2305
+ e.published ? null : /* @__PURE__ */ C(v, { size: "x-small", color: "secondary", children: [
2306
+ " ",
2307
+ c("moduleUnpublishedBadge")
2308
+ ] })
2309
+ ] }),
2310
+ /* @__PURE__ */ l(vl, { module: e, today: s }),
2311
+ b && x ? /* @__PURE__ */ l(T, { as: "div", margin: "x-small 0 0 0", children: x }) : null,
2312
+ /* @__PURE__ */ l(Ol, { module: e, breakpoints: u })
2313
+ ] }),
2314
+ /* @__PURE__ */ l(E.Item, { children: /* @__PURE__ */ C(E, { alignItems: "center", gap: "mediumSmall", children: [
2315
+ !b && x ? /* @__PURE__ */ l(E.Item, { children: x }) : null,
2316
+ /* @__PURE__ */ l(E.Item, { children: /* @__PURE__ */ l(
2317
+ Mo,
2318
+ {
2319
+ size: "medium",
2320
+ withBorder: !0,
2321
+ withBackground: !1,
2322
+ screenReaderLabel: t ? c("collapseModule", { name: e.name }) : c("expandModule", { name: e.name }),
2323
+ "aria-expanded": t,
2324
+ "aria-controls": Vt(e.id),
2325
+ onClick: (q) => {
2326
+ q.stopPropagation(), n(e.id);
2327
+ },
2328
+ "data-testid": `toggle-module-${e.id}`,
2329
+ children: t ? /* @__PURE__ */ l(fo, {}) : /* @__PURE__ */ l(go, {})
2330
+ }
2331
+ ) })
2332
+ ] }) })
2333
+ ]
2334
+ }
2335
+ ) }),
2336
+ /* @__PURE__ */ l("div", { id: Vt(e.id), role: "group", "aria-label": e.name, hidden: !t, children: t ? /* @__PURE__ */ l(
2337
+ ql,
2150
2338
  {
2151
2339
  module: e,
2152
2340
  state: o,
2153
- today: r,
2154
- navigation: s,
2155
- showDiagnostics: l
2341
+ today: s,
2342
+ navigation: r,
2343
+ showDiagnostics: i
2156
2344
  }
2157
2345
  ) : null })
2158
2346
  ]
2159
2347
  }
2160
2348
  );
2161
2349
  }
2162
- const qi = Lt(Ni);
2163
- function ki({
2350
+ const Ul = on(Fl);
2351
+ function zl(e) {
2352
+ switch (e) {
2353
+ case "complete":
2354
+ return "complete";
2355
+ case "locked":
2356
+ return "locked";
2357
+ case void 0:
2358
+ case "not_started":
2359
+ return "notStarted";
2360
+ case "in_progress":
2361
+ case "missing":
2362
+ case "incomplete":
2363
+ case "missing_and_incomplete":
2364
+ return "inProgress";
2365
+ }
2366
+ }
2367
+ function $l(e) {
2368
+ var i, a, d;
2369
+ let t = 0, n = 0, o = 0;
2370
+ for (const u of e)
2371
+ ((i = u.progress) == null ? void 0 : i.status) === "complete" && (t += 1), n += ((a = u.progress) == null ? void 0 : a.requirementCount) ?? 0, o += ((d = u.progress) == null ? void 0 : d.requirementsMet) ?? 0;
2372
+ const s = e.length, r = s === 0 ? 0 : t === s ? 100 : Math.floor(t / s * 100);
2373
+ return {
2374
+ totalModules: s,
2375
+ completedModules: t,
2376
+ totalItems: n,
2377
+ completedItems: o,
2378
+ percent: r
2379
+ };
2380
+ }
2381
+ const Bl = "1.75rem", Gl = "4px", jl = "4px", Yl = "6.5rem";
2382
+ function Wl({
2383
+ module: e,
2384
+ onClick: t
2385
+ }) {
2386
+ var c, p, f, y;
2387
+ const { t: n } = j(), s = Ne().moduleLabel(e.position, e), r = s ? n("moduleNameWithLabel", { label: s, name: e.name }) : e.name, i = ((c = e.progress) == null ? void 0 : c.status) ?? "not_started", a = zl(i), d = n("moduleProgressSegmentLabel", {
2388
+ name: r,
2389
+ status: Wn(
2390
+ n,
2391
+ i,
2392
+ ((p = e.progress) == null ? void 0 : p.missingCount) ?? 0,
2393
+ ((f = e.progress) == null ? void 0 : f.incompleteCount) ?? 0
2394
+ )
2395
+ }), u = a === "complete" ? 100 : a === "inProgress" ? ((y = e.progress) == null ? void 0 : y.percentComplete) ?? 0 : 0;
2396
+ return /* @__PURE__ */ l(E.Item, { shouldShrink: !0, width: Yl, children: /* @__PURE__ */ l(pn, { renderTip: r, children: () => /* @__PURE__ */ C(
2397
+ T,
2398
+ {
2399
+ as: "button",
2400
+ type: "button",
2401
+ display: "block",
2402
+ width: "100%",
2403
+ height: Bl,
2404
+ borderRadius: Gl,
2405
+ borderWidth: a === "complete" ? "none" : "small",
2406
+ borderColor: "secondary",
2407
+ background: a === "locked" ? "secondary" : "primary",
2408
+ position: "relative",
2409
+ overflowX: "hidden",
2410
+ overflowY: "hidden",
2411
+ padding: "0",
2412
+ onClick: t ? () => t(e.id) : void 0,
2413
+ "data-testid": `modules-progress-segment-${e.id}`,
2414
+ children: [
2415
+ u > 0 ? /* @__PURE__ */ l(
2416
+ T,
2417
+ {
2418
+ as: "div",
2419
+ position: "absolute",
2420
+ insetInlineStart: "0",
2421
+ insetInlineEnd: "0",
2422
+ insetBlockEnd: "0",
2423
+ height: `${u}%`,
2424
+ background: "brand"
2425
+ }
2426
+ ) : null,
2427
+ /* @__PURE__ */ l(it, { children: d })
2428
+ ]
2429
+ }
2430
+ ) }) });
2431
+ }
2432
+ function Hl({
2433
+ modules: e,
2434
+ onModuleClick: t
2435
+ }) {
2436
+ const { t: n } = j(), o = N(() => $l(e), [e]);
2437
+ if (!e.some((a) => a.progress !== void 0) || o.totalModules === 0) return null;
2438
+ const r = n("moduleProgressOverviewSummary", {
2439
+ count: o.totalModules,
2440
+ completedModules: o.completedModules,
2441
+ totalModules: o.totalModules
2442
+ }), i = o.totalItems > 0 ? n("moduleProgressOverviewDetail", {
2443
+ itemsSummary: n("moduleProgressOverviewItemsSummary", {
2444
+ count: o.totalItems,
2445
+ completedItems: o.completedItems,
2446
+ totalItems: o.totalItems
2447
+ })
2448
+ }) : null;
2449
+ return /* @__PURE__ */ C(T, { as: "div", margin: "medium 0 small 0", "data-testid": "modules-progress-overview", children: [
2450
+ /* @__PURE__ */ l(E, { wrap: "wrap", children: /* @__PURE__ */ C(E.Item, { children: [
2451
+ /* @__PURE__ */ l(T, { as: "span", margin: "0 x-small 0 0", children: /* @__PURE__ */ l(
2452
+ v,
2453
+ {
2454
+ size: "large",
2455
+ weight: "bold",
2456
+ lineHeight: "condensed",
2457
+ "data-testid": "modules-progress-overview-percent",
2458
+ children: n("moduleProgressOverviewPercentLabel", { percent: o.percent })
2459
+ }
2460
+ ) }),
2461
+ /* @__PURE__ */ l(v, { size: "medium", "data-testid": "modules-progress-overview-summary", children: i ? `${r} ${i}` : r })
2462
+ ] }) }),
2463
+ /* @__PURE__ */ l(
2464
+ E,
2465
+ {
2466
+ margin: "xx-small 0 0 0",
2467
+ gap: jl,
2468
+ role: "group",
2469
+ "aria-label": n("moduleProgressOverviewGroupLabel"),
2470
+ "data-testid": "modules-progress-overview-segments",
2471
+ children: e.map((a) => /* @__PURE__ */ l(Wl, { module: a, onClick: t }, a.id))
2472
+ }
2473
+ )
2474
+ ] });
2475
+ }
2476
+ function Kl({
2164
2477
  counts: e,
2165
2478
  itemsMode: t,
2166
2479
  loadedModules: n
2167
2480
  }) {
2168
2481
  const o = e.listModules + e.listModuleItems;
2169
- return /* @__PURE__ */ i(
2170
- E,
2482
+ return /* @__PURE__ */ l(
2483
+ T,
2171
2484
  {
2172
2485
  as: "div",
2173
2486
  background: "secondary",
@@ -2176,25 +2489,25 @@ function ki({
2176
2489
  padding: "x-small small",
2177
2490
  margin: "0 0 small 0",
2178
2491
  "data-testid": "dev-diagnostics",
2179
- children: /* @__PURE__ */ S(T, { gap: "medium", wrap: "wrap", children: [
2180
- /* @__PURE__ */ i(T.Item, { children: /* @__PURE__ */ i(P, { size: "x-small", weight: "bold", children: "Adapter requests" }) }),
2181
- /* @__PURE__ */ i(T.Item, { children: /* @__PURE__ */ S(P, { size: "x-small", "data-testid": "request-count-list-modules", children: [
2492
+ children: /* @__PURE__ */ C(E, { gap: "medium", wrap: "wrap", children: [
2493
+ /* @__PURE__ */ l(E.Item, { children: /* @__PURE__ */ l(v, { size: "x-small", weight: "bold", children: "Adapter requests" }) }),
2494
+ /* @__PURE__ */ l(E.Item, { children: /* @__PURE__ */ C(v, { size: "x-small", "data-testid": "request-count-list-modules", children: [
2182
2495
  "listModules: ",
2183
2496
  e.listModules
2184
2497
  ] }) }),
2185
- /* @__PURE__ */ i(T.Item, { children: /* @__PURE__ */ S(P, { size: "x-small", "data-testid": "request-count-list-module-items", children: [
2498
+ /* @__PURE__ */ l(E.Item, { children: /* @__PURE__ */ C(v, { size: "x-small", "data-testid": "request-count-list-module-items", children: [
2186
2499
  "listModuleItems: ",
2187
2500
  e.listModuleItems
2188
2501
  ] }) }),
2189
- /* @__PURE__ */ i(T.Item, { children: /* @__PURE__ */ S(P, { size: "x-small", weight: "bold", "data-testid": "request-count-total", children: [
2502
+ /* @__PURE__ */ l(E.Item, { children: /* @__PURE__ */ C(v, { size: "x-small", weight: "bold", "data-testid": "request-count-total", children: [
2190
2503
  "total: ",
2191
2504
  o
2192
2505
  ] }) }),
2193
- /* @__PURE__ */ i(T.Item, { children: /* @__PURE__ */ S(P, { size: "x-small", "data-testid": "resolved-items-mode", children: [
2506
+ /* @__PURE__ */ l(E.Item, { children: /* @__PURE__ */ C(v, { size: "x-small", "data-testid": "resolved-items-mode", children: [
2194
2507
  "itemsMode: ",
2195
2508
  t ?? "probing…"
2196
2509
  ] }) }),
2197
- /* @__PURE__ */ i(T.Item, { children: /* @__PURE__ */ S(P, { size: "x-small", "data-testid": "modules-loaded-count", children: [
2510
+ /* @__PURE__ */ l(E.Item, { children: /* @__PURE__ */ C(v, { size: "x-small", "data-testid": "modules-loaded-count", children: [
2198
2511
  "modules loaded: ",
2199
2512
  n
2200
2513
  ] }) })
@@ -2202,115 +2515,190 @@ function ki({
2202
2515
  }
2203
2516
  );
2204
2517
  }
2205
- function Di({
2518
+ const Ql = 200;
2519
+ function Vl({
2206
2520
  data: e,
2207
2521
  courseName: t,
2208
2522
  courseContext: n,
2209
2523
  today: o,
2210
- requestCounts: r,
2211
- showDiagnostics: s = r !== void 0,
2212
- navigation: l,
2524
+ requestCounts: s,
2525
+ showDiagnostics: r = s !== void 0,
2526
+ navigation: i,
2213
2527
  as: a = "div",
2214
- headingLevel: m = "h2",
2215
- breakpoints: c = {}
2528
+ headingLevel: d = "h2",
2529
+ breakpoints: u = {}
2216
2530
  }) {
2217
- const { miniTablet: u, tablet: p, desktop: f, desktopNavOpen: y, desktopOnly: g, mobileOnly: h, ICEDesktop: _ } = c, C = N(
2218
- () => ({ miniTablet: u, tablet: p, desktop: f, desktopNavOpen: y, desktopOnly: g, mobileOnly: h, ICEDesktop: _ }),
2219
- [u, p, f, y, g, h, _]
2531
+ const { miniTablet: c, tablet: p, desktop: f, desktopNavOpen: y, desktopOnly: g, mobileOnly: b, ICEDesktop: w } = u, x = N(
2532
+ () => ({ miniTablet: c, tablet: p, desktop: f, desktopNavOpen: y, desktopOnly: g, mobileOnly: b, ICEDesktop: w }),
2533
+ [c, p, f, y, g, b, w]
2220
2534
  ), {
2221
- modules: b,
2222
- hasNextPage: w,
2223
- fetchNextPage: k,
2224
- isFetchingNextPage: q,
2225
- isLoading: A,
2226
- error: D,
2227
- itemsMode: j,
2228
- expandedModuleIds: Q,
2229
- toggleModule: O,
2230
- expandModule: R,
2231
- collapseAllModules: G,
2232
- getItems: se,
2233
- filter: ie,
2234
- setFilter: le,
2235
- filterEntry: Ue,
2236
- filterPredicate: K,
2237
- filterResultsArePartial: ae
2238
- } = e, { t: L, timezone: ue } = B(), Z = t ?? L("pageTitle"), U = $(null), Y = vt(), X = $(!1), [ce] = Le(() => /* @__PURE__ */ new Date()), z = o ?? ce;
2239
- Ie(() => {
2240
- var x;
2241
- !X.current || q || (X.current = !1, Dt(L("modulesLoadedAnnouncement", { count: b.length })), (x = U.current) == null || x.focus());
2242
- }, [q, b.length, L]);
2243
- const de = N(
2244
- () => b.filter(
2245
- (x) => K === void 0 || K(x, { today: z, timezone: ue })
2535
+ modules: _,
2536
+ hasNextPage: A,
2537
+ fetchNextPage: q,
2538
+ isFetchingNextPage: B,
2539
+ isLoading: L,
2540
+ isRefreshing: k,
2541
+ error: G,
2542
+ itemsMode: J,
2543
+ expandedModuleIds: F,
2544
+ expandModule: D,
2545
+ collapseModule: Y,
2546
+ toggleModule: se,
2547
+ expandModules: De,
2548
+ collapseModules: Oe,
2549
+ getItems: Me,
2550
+ filter: ee,
2551
+ setFilter: ye,
2552
+ filterEntry: qe,
2553
+ filterPredicate: re,
2554
+ filterResultsArePartial: ie
2555
+ } = e, { t: P, timezone: Fe } = j(), Ue = t ?? P("pageTitle"), W = $(null), Se = $(/* @__PURE__ */ new Map()), le = st(), H = st(), ze = b === !0, ae = $(!1), $e = U((S) => {
2556
+ var z;
2557
+ (z = Se.current.get(S)) == null || z.scrollIntoView({ behavior: "smooth", block: "start" });
2558
+ }, []), [Be] = V(() => /* @__PURE__ */ new Date()), _e = o ?? Be, [Te, Ge] = V(null);
2559
+ Z(() => {
2560
+ !A && !k && ee === X && Ge(_);
2561
+ }, [A, k, ee, _]), Z(() => {
2562
+ var S;
2563
+ !ae.current || B || k || (ae.current = !1, pe(P("modulesLoadedAnnouncement", { count: _.length })), (S = W.current) == null || S.focus());
2564
+ }, [B, k, _.length, P]);
2565
+ const h = N(
2566
+ () => _.filter(
2567
+ (S) => re === void 0 || re(S, { today: _e, timezone: Fe })
2246
2568
  ),
2247
- [b, K, z, ue]
2248
- ), ze = () => {
2249
- for (const x of de) R(x.id);
2250
- }, _e = G, me = Ue !== void 0 && ie !== V, Te = de.length === 0 && !A && !D, Ee = Te && me;
2251
- return /* @__PURE__ */ S(E, { as: a, display: "block", "data-testid": "modules-list", children: [
2252
- n ? /* @__PURE__ */ S(E, { as: "div", children: [
2253
- /* @__PURE__ */ i(P, { size: "small", color: "brand", children: n }),
2254
- /* @__PURE__ */ S(P, { size: "small", color: "secondary", children: [
2569
+ [_, re, _e, Fe]
2570
+ ), M = $({
2571
+ rows: h,
2572
+ expanded: F,
2573
+ items: /* @__PURE__ */ new Map()
2574
+ }), [I, R] = V(null);
2575
+ k ? I === null && R(M.current) : (M.current = {
2576
+ rows: h,
2577
+ expanded: F,
2578
+ items: new Map(F.map((S) => [S, Me(S)]))
2579
+ }, I !== null && R(null));
2580
+ const O = (I == null ? void 0 : I.rows) ?? h, ce = (I == null ? void 0 : I.expanded) ?? F, K = N(() => new Set(ce), [ce]), te = N(
2581
+ () => O.filter((S) => K.has(S.id)).map((S) => S.id),
2582
+ [O, K]
2583
+ ), Ee = te.length > 0, [ue, Q] = V(!1), Ce = te.filter((S) => Me(S).isLoading).length, je = ue ? Ce : 0, de = $(!1);
2584
+ Z(() => {
2585
+ if (ue) {
2586
+ if (Ce > 0 && !de.current) {
2587
+ de.current = !0, pe(P("expandAllLoadingItems", { count: Ce }));
2588
+ return;
2589
+ }
2590
+ Ce === 0 && de.current && (de.current = !1, Q(!1), pe(P("expandAllItemsLoaded")));
2591
+ }
2592
+ }, [ue, Ce, P]);
2593
+ const eo = () => {
2594
+ if (Ee) {
2595
+ const z = new Set(te);
2596
+ Q(!1), de.current = !1, Oe(te), I !== null && R({ ...I, expanded: I.expanded.filter((Ye) => !z.has(Ye)) }), pe(P("modulesCollapsedAnnouncement", { count: te.length }));
2597
+ return;
2598
+ }
2599
+ const S = O.map((z) => z.id);
2600
+ Q(!0), de.current = !1, De(S), I !== null && R({ ...I, expanded: S }), pe(P("modulesExpandedAnnouncement", { count: S.length }));
2601
+ }, Tt = $(I);
2602
+ Tt.current = I;
2603
+ const to = U(
2604
+ (S) => {
2605
+ const z = Tt.current;
2606
+ if (z === null) {
2607
+ se(S);
2608
+ return;
2609
+ }
2610
+ const Ye = z.expanded.includes(S);
2611
+ R({
2612
+ ...z,
2613
+ expanded: Ye ? z.expanded.filter((so) => so !== S) : [...z.expanded, S]
2614
+ }), Ye ? Y(S) : D(S);
2615
+ },
2616
+ [se, Y, D]
2617
+ ), [no, Et] = V(!1);
2618
+ Z(() => {
2619
+ if (!k) {
2620
+ Et(!1);
2621
+ return;
2622
+ }
2623
+ const S = setTimeout(() => Et(!0), Ql);
2624
+ return () => clearTimeout(S);
2625
+ }, [k]);
2626
+ const Ct = qe !== void 0 && ee !== X, wt = L || k && O.length === 0, Pt = O.length === 0 && !wt && !G, oo = Pt && Ct;
2627
+ return /* @__PURE__ */ C(T, { as: a, display: "block", "data-testid": "modules-list", children: [
2628
+ n ? /* @__PURE__ */ C(T, { as: "div", children: [
2629
+ /* @__PURE__ */ l(v, { size: "small", color: "brand", children: n }),
2630
+ /* @__PURE__ */ C(v, { size: "small", color: "secondary", children: [
2255
2631
  " ",
2256
2632
  "/",
2257
2633
  " "
2258
2634
  ] }),
2259
- /* @__PURE__ */ i(P, { size: "small", color: "secondary", children: Z })
2635
+ /* @__PURE__ */ l(v, { size: "small", color: "secondary", children: Ue })
2260
2636
  ] }) : null,
2261
- /* @__PURE__ */ i(Ut, { level: m, margin: "x-small 0 medium 0", children: Z }),
2262
- r ? /* @__PURE__ */ i(
2263
- ki,
2637
+ /* @__PURE__ */ l(mn, { level: d, margin: "x-small 0 medium 0", children: Ue }),
2638
+ Te ? /* @__PURE__ */ l(Hl, { modules: Te, onModuleClick: $e }) : null,
2639
+ r && s ? /* @__PURE__ */ l(
2640
+ Kl,
2264
2641
  {
2265
- counts: r,
2266
- itemsMode: j,
2267
- loadedModules: b.length
2642
+ counts: s,
2643
+ itemsMode: J,
2644
+ loadedModules: _.length
2268
2645
  }
2269
2646
  ) : null,
2270
- /* @__PURE__ */ i(T, { justifyItems: "end", children: /* @__PURE__ */ i(T.Item, { children: /* @__PURE__ */ S(
2271
- $e,
2647
+ /* @__PURE__ */ l(E, { justifyItems: "end", "data-testid": "modules-controls", children: /* @__PURE__ */ l(E.Item, { shouldGrow: ze, children: /* @__PURE__ */ l(
2648
+ ve,
2272
2649
  {
2273
- placement: "bottom end",
2274
- trigger: /* @__PURE__ */ i(he, { renderIcon: /* @__PURE__ */ i(qt, {}), "data-testid": "expand-collapse-trigger", children: L("expandCollapseTrigger") }),
2275
- children: [
2276
- /* @__PURE__ */ i($e.Item, { onSelect: ze, "data-testid": "expand-all", children: L("expandAll") }),
2277
- /* @__PURE__ */ i($e.Item, { onSelect: _e, "data-testid": "collapse-all", children: L("collapseAll") })
2278
- ]
2650
+ display: ze ? "block" : "inline-block",
2651
+ onClick: eo,
2652
+ interaction: O.length === 0 ? "disabled" : "enabled",
2653
+ renderIcon: je > 0 ? /* @__PURE__ */ l(rt, { size: "x-small", renderTitle: P("itemsLoadingSpinnerLabel") }) : void 0,
2654
+ "aria-describedby": je > 0 ? H : void 0,
2655
+ "data-testid": "expand-collapse-all",
2656
+ children: P(Ee ? "collapseAllModules" : "expandAllModules")
2279
2657
  }
2280
2658
  ) }) }),
2281
- /* @__PURE__ */ i(
2282
- oi,
2659
+ je > 0 ? /* @__PURE__ */ l(T, { as: "div", margin: "xx-small 0 0 0", textAlign: "end", children: /* @__PURE__ */ l(
2660
+ v,
2283
2661
  {
2284
- value: ie,
2285
- onChange: le,
2286
- describedBy: ae ? Y : void 0
2662
+ size: "x-small",
2663
+ color: "secondary",
2664
+ id: H,
2665
+ "data-testid": "expand-all-loading-hint",
2666
+ children: P("expandAllLoadingItems", { count: je })
2667
+ }
2668
+ ) }) : null,
2669
+ /* @__PURE__ */ l(
2670
+ el,
2671
+ {
2672
+ value: ee,
2673
+ onChange: ye,
2674
+ describedBy: ie ? le : void 0
2287
2675
  }
2288
2676
  ),
2289
- ae ? /* @__PURE__ */ i(E, { as: "div", margin: "x-small 0 0 0", children: /* @__PURE__ */ i(
2290
- P,
2677
+ ie ? /* @__PURE__ */ l(T, { as: "div", margin: "x-small 0 0 0", children: /* @__PURE__ */ l(
2678
+ v,
2291
2679
  {
2292
2680
  size: "x-small",
2293
2681
  color: "secondary",
2294
- id: Y,
2682
+ id: le,
2295
2683
  "data-testid": "filter-partial-hint",
2296
- children: L("filterScopeHint")
2684
+ children: P("filterScopeHint")
2297
2685
  }
2298
2686
  ) }) : null,
2299
- /* @__PURE__ */ S(E, { as: "div", margin: "medium 0 0 0", children: [
2300
- D ? /* @__PURE__ */ i(
2301
- Ft,
2687
+ /* @__PURE__ */ C(T, { as: "div", margin: "medium 0 0 0", children: [
2688
+ G ? /* @__PURE__ */ l(
2689
+ dn,
2302
2690
  {
2303
2691
  variant: "error",
2304
2692
  margin: "0 0 small 0",
2305
- liveRegion: Ot,
2693
+ liveRegion: un,
2306
2694
  liveRegionPoliteness: "assertive",
2307
2695
  "data-testid": "modules-error",
2308
- children: L("modulesLoadErrorAlert", { message: D.message })
2696
+ children: P("modulesLoadErrorAlert", { message: G.message })
2309
2697
  }
2310
2698
  ) : null,
2311
- A ? /* @__PURE__ */ i(E, { as: "div", padding: "large", textAlign: "center", "data-testid": "modules-loading", children: /* @__PURE__ */ i(zt, { renderTitle: L("modulesLoadingSpinnerLabel") }) }) : null,
2312
- Te && !me ? /* @__PURE__ */ i(
2313
- E,
2699
+ wt ? /* @__PURE__ */ l(T, { as: "div", padding: "large", textAlign: "center", "data-testid": "modules-loading", children: /* @__PURE__ */ l(rt, { renderTitle: P("modulesLoadingSpinnerLabel") }) }) : null,
2700
+ Pt && !Ct ? /* @__PURE__ */ l(
2701
+ T,
2314
2702
  {
2315
2703
  as: "div",
2316
2704
  background: "secondary",
@@ -2318,11 +2706,11 @@ function Di({
2318
2706
  padding: "large",
2319
2707
  textAlign: "center",
2320
2708
  "data-testid": "modules-empty",
2321
- children: /* @__PURE__ */ i(P, { color: "secondary", children: L("noModulesEmptyState") })
2709
+ children: /* @__PURE__ */ l(v, { color: "secondary", children: P("noModulesEmptyState") })
2322
2710
  }
2323
2711
  ) : null,
2324
- Ee ? /* @__PURE__ */ S(
2325
- E,
2712
+ oo ? /* @__PURE__ */ C(
2713
+ T,
2326
2714
  {
2327
2715
  as: "div",
2328
2716
  background: "secondary",
@@ -2331,64 +2719,81 @@ function Di({
2331
2719
  textAlign: "center",
2332
2720
  "data-testid": "modules-filtered-empty",
2333
2721
  children: [
2334
- /* @__PURE__ */ i(E, { as: "div", margin: "0 0 small 0", children: /* @__PURE__ */ i(P, { color: "secondary", children: b.length === 0 ? L("noFilterMatches") : L("filteredEmptyState", { count: b.length }) }) }),
2335
- /* @__PURE__ */ i(
2336
- he,
2722
+ /* @__PURE__ */ l(T, { as: "div", margin: "0 0 small 0", children: /* @__PURE__ */ l(v, { color: "secondary", children: _.length === 0 ? P("noFilterMatches") : P("filteredEmptyState", { count: _.length }) }) }),
2723
+ /* @__PURE__ */ l(
2724
+ ve,
2337
2725
  {
2338
2726
  size: "small",
2339
2727
  onClick: () => {
2340
- le(V), X.current = !0;
2728
+ ye(X), ae.current = !0;
2341
2729
  },
2342
- children: L("clearFilters")
2730
+ children: P("clearFilters")
2343
2731
  }
2344
2732
  )
2345
2733
  ]
2346
2734
  }
2347
2735
  ) : null,
2348
- /* @__PURE__ */ i("ul", { style: { listStyle: "none", margin: 0, padding: 0 }, "data-testid": "modules-stack", children: de.map((x) => /* @__PURE__ */ i("li", { children: /* @__PURE__ */ i(
2349
- qi,
2736
+ /* @__PURE__ */ l(
2737
+ "ul",
2350
2738
  {
2351
- module: x,
2352
- expanded: Q.includes(x.id),
2353
- onToggle: O,
2354
- itemsState: se(x.id),
2355
- today: z,
2356
- showDiagnostics: s,
2357
- navigation: l,
2358
- headingLevel: m === "h1" ? "h2" : "h3",
2359
- breakpoints: C
2739
+ style: { listStyle: "none", margin: 0, padding: 0, opacity: no ? 0.5 : 1 },
2740
+ "aria-busy": k,
2741
+ "data-testid": "modules-stack",
2742
+ children: O.map((S) => /* @__PURE__ */ l(
2743
+ "li",
2744
+ {
2745
+ ref: (z) => {
2746
+ z ? Se.current.set(S.id, z) : Se.current.delete(S.id);
2747
+ },
2748
+ children: /* @__PURE__ */ l(
2749
+ Ul,
2750
+ {
2751
+ module: S,
2752
+ expanded: ce.includes(S.id),
2753
+ onToggle: to,
2754
+ itemsState: (I == null ? void 0 : I.items.get(S.id)) ?? Me(S.id),
2755
+ today: _e,
2756
+ showDiagnostics: r,
2757
+ navigation: i,
2758
+ headingLevel: d === "h1" ? "h2" : "h3",
2759
+ breakpoints: x
2760
+ }
2761
+ )
2762
+ },
2763
+ S.id
2764
+ ))
2360
2765
  }
2361
- ) }, x.id)) })
2766
+ )
2362
2767
  ] }),
2363
- w ? /* @__PURE__ */ i(E, { as: "div", textAlign: "center", margin: "small 0 0 0", children: /* @__PURE__ */ i(
2364
- he,
2768
+ A ? /* @__PURE__ */ l(T, { as: "div", textAlign: "center", margin: "small 0 0 0", children: /* @__PURE__ */ l(
2769
+ ve,
2365
2770
  {
2366
2771
  color: "primary",
2367
2772
  onClick: () => {
2368
- X.current = !0, k();
2773
+ ae.current = !0, q();
2369
2774
  },
2370
- interaction: q ? "disabled" : "enabled",
2775
+ interaction: B || k ? "disabled" : "enabled",
2371
2776
  "data-testid": "load-more-modules",
2372
- children: q ? L("loadMoreModulesLoading") : L("loadMoreModules", { count: b.length })
2777
+ children: B ? P("loadMoreModulesLoading") : P("loadMoreModules", { count: _.length })
2373
2778
  }
2374
- ) }) : b.length > 0 ? /* @__PURE__ */ i(E, { as: "div", textAlign: "center", margin: "small 0 0 0", children: /* @__PURE__ */ i(
2375
- P,
2779
+ ) }) : _.length > 0 ? /* @__PURE__ */ l(T, { as: "div", textAlign: "center", margin: "small 0 0 0", children: /* @__PURE__ */ l(
2780
+ v,
2376
2781
  {
2377
2782
  size: "x-small",
2378
2783
  color: "secondary",
2379
2784
  "data-testid": "modules-all-loaded",
2380
- elementRef: (x) => {
2381
- U.current = x;
2785
+ elementRef: (S) => {
2786
+ W.current = S;
2382
2787
  },
2383
2788
  tabIndex: -1,
2384
- children: L("allModulesLoaded", { count: b.length })
2789
+ children: P("allModulesLoaded", { count: _.length })
2385
2790
  }
2386
2791
  ) }) : null
2387
2792
  ] });
2388
2793
  }
2389
- const jl = Bn(
2390
- Di
2391
- ), be = [
2794
+ const sc = vo(
2795
+ Vl
2796
+ ), Ae = [
2392
2797
  "assignment",
2393
2798
  "quiz",
2394
2799
  "discussion",
@@ -2397,7 +2802,7 @@ const jl = Bn(
2397
2802
  "external_url",
2398
2803
  "external_tool",
2399
2804
  "sub_header"
2400
- ], Ve = [
2805
+ ], gt = [
2401
2806
  "not_started",
2402
2807
  "in_progress",
2403
2808
  "complete",
@@ -2405,30 +2810,30 @@ const jl = Bn(
2405
2810
  "incomplete",
2406
2811
  "missing_and_incomplete",
2407
2812
  "locked"
2408
- ], _n = [
2813
+ ], Xn = [
2409
2814
  "must_view",
2410
2815
  "must_submit",
2411
2816
  "must_contribute",
2412
2817
  "must_mark_done",
2413
2818
  "min_score",
2414
2819
  "min_percentage"
2415
- ], Oi = ["assignment", "quiz", "discussion"], Fi = ["external_url", "external_tool"], Ui = ["assignment", "quiz", "discussion"], zi = Date.UTC(2025, 0, 6), $i = 864e5, re = "1", Tn = (e) => new Date(zi + e * $i).toISOString(), Ne = [
2820
+ ], Zl = ["assignment", "quiz", "discussion"], Xl = ["external_url", "external_tool"], Jl = ["assignment", "quiz", "discussion"], ea = Date.UTC(2025, 0, 6), ta = 864e5, be = "1", Jn = (e) => new Date(ea + e * ta).toISOString(), Xe = [
2416
2821
  "min_score",
2417
2822
  "min_percentage"
2418
- ], Bi = _n.filter(
2419
- (e) => !Ne.includes(e)
2420
- ), ji = [
2823
+ ], na = Xn.filter(
2824
+ (e) => !Xe.includes(e)
2825
+ ), oa = [
2421
2826
  "in_progress",
2422
2827
  "incomplete",
2423
2828
  "missing_and_incomplete"
2424
- ], Gi = (e, t, n, o) => {
2425
- const r = n ? _n : Bi, s = n && o ? Ne[t % Ne.length] : r[Math.floor(t / 3) % r.length];
2426
- return s === "min_score" ? { itemId: e, type: s, minScore: 10 } : s === "min_percentage" ? { itemId: e, type: s, minPercentage: 80 } : { itemId: e, type: s };
2427
- }, Yi = (e, t, n, o) => e === "sub_header" ? !1 : n && o || t % 3 === 0, nt = (e) => Ve[(e - 1) % Ve.length], Wi = (e, t) => !Ui.includes(e) || e === "discussion" && Math.floor(t / be.length) % 2 === 1 ? null : 5 + t % 4 * 5, Qi = (e, t, n, o) => t ? e === "missing" ? n != null || o % 2 === 0 : e === "missing_and_incomplete" ? o % 2 === 1 : !1 : !1, Hi = (e, t, n, o) => {
2829
+ ], sa = (e, t, n, o) => {
2830
+ const s = n ? Xn : na, r = n && o ? Xe[t % Xe.length] : s[Math.floor(t / 3) % s.length];
2831
+ return r === "min_score" ? { itemId: e, type: r, minScore: 10 } : r === "min_percentage" ? { itemId: e, type: r, minPercentage: 80 } : { itemId: e, type: r };
2832
+ }, ra = (e, t, n, o) => e === "sub_header" ? !1 : n && o || t % 3 === 0, _t = (e) => gt[(e - 1) % gt.length], ia = (e, t) => !Jl.includes(e) || e === "discussion" && Math.floor(t / Ae.length) % 2 === 1 ? null : 5 + t % 4 * 5, la = (e, t, n, o) => t ? e === "missing" ? n != null || o % 2 === 0 : e === "missing_and_incomplete" ? o % 2 === 1 : !1 : !1, aa = (e, t, n, o) => {
2428
2833
  if (e === "locked") return "locked";
2429
- if (Qi(e, t, n, o)) return "missing";
2834
+ if (la(e, t, n, o)) return "missing";
2430
2835
  if (!n) return;
2431
- const r = t && Ne.includes(n.type);
2836
+ const s = t && Xe.includes(n.type);
2432
2837
  switch (e) {
2433
2838
  case "not_started":
2434
2839
  case "missing":
@@ -2437,122 +2842,122 @@ const jl = Bn(
2437
2842
  return "complete";
2438
2843
  case "incomplete":
2439
2844
  case "missing_and_incomplete":
2440
- return r && o % 2 === 0 ? "incomplete" : "complete";
2845
+ return s && o % 2 === 0 ? "incomplete" : "complete";
2441
2846
  case "in_progress":
2442
- return r ? o % 3 === 0 ? "complete" : o % 3 === 1 ? "in_progress" : "not_started" : o % 2 === 0 ? "complete" : "not_started";
2847
+ return s ? o % 3 === 0 ? "complete" : o % 3 === 1 ? "in_progress" : "not_started" : o % 2 === 0 ? "complete" : "not_started";
2443
2848
  default:
2444
2849
  return e;
2445
2850
  }
2446
- }, Vi = (e) => e.status === "complete", Ki = (e, t, n, o, r, s, l, a) => {
2447
- const m = String(e), c = be[o % be.length], u = c === "sub_header", p = Oi.includes(c) && (o % 4 === 0 || r === "missing");
2851
+ }, ca = (e) => e.status === "complete", ua = (e, t, n, o, s, r, i, a) => {
2852
+ const d = String(e), u = Ae[o % Ae.length], c = u === "sub_header", p = Zl.includes(u) && (o % 4 === 0 || s === "missing");
2448
2853
  return {
2449
2854
  id: n,
2450
- moduleId: m,
2451
- title: `${c} ${t + 1}`,
2452
- type: c,
2855
+ moduleId: d,
2856
+ title: `${u} ${t + 1}`,
2857
+ type: u,
2453
2858
  position: t + 1,
2454
2859
  indent: t % 5 === 4 ? 1 : 0,
2455
2860
  published: a === "teacher" ? o % 7 !== 0 : !0,
2456
- url: u ? null : `/courses/${re}/modules/items/${n}`,
2457
- newTab: Fi.includes(c) && o % 2 === 0,
2458
- completionRequirement: l,
2459
- dueAt: p ? Tn(o % 90) : null,
2460
- status: r,
2461
- pointsPossible: s,
2462
- extensions: Ze(
2861
+ url: c ? null : `/courses/${be}/modules/items/${n}`,
2862
+ newTab: Xl.includes(u) && o % 2 === 0,
2863
+ completionRequirement: i,
2864
+ dueAt: p ? Jn(o % 90) : null,
2865
+ status: s,
2866
+ pointsPossible: r,
2867
+ extensions: bt(
2463
2868
  void 0,
2464
2869
  o % 37 === 0 ? 5 + o % 4 * 10 : null
2465
2870
  )
2466
2871
  };
2467
- }, Zi = (e, t, n, o) => {
2468
- const r = nt(e), s = ji.includes(r), l = [];
2872
+ }, da = (e, t, n, o) => {
2873
+ const s = _t(e), r = oa.includes(s), i = [];
2469
2874
  let a = 0;
2470
- for (let m = 0; m < t; m += 1) {
2471
- const c = n + m, u = be[c % be.length], p = Wi(u, c), f = p !== null, y = f ? a++ : m, g = String(e * 1e3 + m + 1), h = Yi(u, c, f, s) ? Gi(g, c, f, s) : null, _ = Hi(r, f, h, y);
2472
- l.push(Ki(e, m, g, c, _, p, h, o));
2875
+ for (let d = 0; d < t; d += 1) {
2876
+ const u = n + d, c = Ae[u % Ae.length], p = ia(c, u), f = p !== null, y = f ? a++ : d, g = String(e * 1e3 + d + 1), b = ra(c, u, f, r) ? sa(g, u, f, r) : null, w = aa(s, f, b, y);
2877
+ i.push(ua(e, d, g, u, w, p, b, o));
2473
2878
  }
2474
- return l;
2475
- }, Xi = (e, t, n, o) => {
2476
- const r = nt(e);
2477
- if (r === "locked" || r === "not_started") return r;
2879
+ return i;
2880
+ }, ma = (e, t, n, o) => {
2881
+ const s = _t(e);
2882
+ if (s === "locked" || s === "not_started") return s;
2478
2883
  if (t.length === 0) return "not_started";
2479
- if (!t.some((s) => s.pointsPossible != null) || r === "missing" && n === 0 || r === "incomplete" && o === 0) return "in_progress";
2480
- if (r === "missing_and_incomplete") {
2884
+ if (!t.some((r) => r.pointsPossible != null) || s === "missing" && n === 0 || s === "incomplete" && o === 0) return "in_progress";
2885
+ if (s === "missing_and_incomplete") {
2481
2886
  if (n === 0 && o === 0) return "in_progress";
2482
2887
  if (n === 0) return "incomplete";
2483
2888
  if (o === 0) return "missing";
2484
2889
  }
2485
- return r;
2486
- }, Ji = (e) => e.map((n) => n.dueAt).filter((n) => typeof n == "string").sort()[0] ?? null, el = (e, t, n) => {
2487
- const o = t.filter((c) => c.completionRequirement), r = n ?? o.length, s = Math.min(o.filter(Vi).length, r), l = t.filter((c) => c.status === "missing").length, a = t.filter((c) => c.status === "incomplete").length;
2890
+ return s;
2891
+ }, pa = (e) => e.map((n) => n.dueAt).filter((n) => typeof n == "string").sort()[0] ?? null, fa = (e, t, n) => {
2892
+ const o = t.filter((u) => u.completionRequirement), s = n ?? o.length, r = Math.min(o.filter(ca).length, s), i = t.filter((u) => u.status === "missing").length, a = t.filter((u) => u.status === "incomplete").length;
2488
2893
  return {
2489
- status: Xi(e, t, l, a),
2490
- requirementsMet: s,
2491
- requirementCount: r,
2492
- percentComplete: r > 0 ? Math.round(s / r * 100) : 0,
2493
- nextDueAt: Ji(t),
2494
- missingCount: l,
2894
+ status: ma(e, t, i, a),
2895
+ requirementsMet: r,
2896
+ requirementCount: s,
2897
+ percentComplete: s > 0 ? Math.round(r / s * 100) : 0,
2898
+ nextDueAt: pa(t),
2899
+ missingCount: i,
2495
2900
  incompleteCount: a
2496
2901
  };
2497
- }, tl = (e, t, n) => {
2498
- const o = nt(e), r = e % 2 !== 0 && o !== "incomplete" && o !== "missing_and_incomplete" ? 1 : null;
2902
+ }, ga = (e, t, n) => {
2903
+ const o = _t(e), s = e % 2 !== 0 && o !== "incomplete" && o !== "missing_and_incomplete" ? 1 : null;
2499
2904
  return {
2500
2905
  id: String(e),
2501
2906
  name: `Module ${e}`,
2502
2907
  position: e,
2503
2908
  published: n === "teacher" ? e % 4 !== 0 : !0,
2504
2909
  itemCount: t.length,
2505
- unlockAt: e % 5 === 0 ? Tn(e) : null,
2910
+ unlockAt: e % 5 === 0 ? Jn(e) : null,
2506
2911
  prerequisiteModules: e > 1 && e % 3 === 0 ? [{ id: String(e - 1), name: `Module ${e - 1}` }] : [],
2507
- requirementCount: r,
2912
+ requirementCount: s,
2508
2913
  requireSequentialProgress: e % 6 === 0,
2509
2914
  completionRequirements: t.flatMap(
2510
- (s) => s.completionRequirement ? [s.completionRequirement] : []
2915
+ (r) => r.completionRequirement ? [r.completionRequirement] : []
2511
2916
  ),
2512
- progress: el(e, t, r)
2917
+ progress: fa(e, t, s)
2513
2918
  };
2514
2919
  };
2515
- function nl(e) {
2920
+ function ha(e) {
2516
2921
  return {
2517
2922
  courseId: e.courseId,
2518
2923
  modules: e.modules.map(({ progress: t, ...n }) => n),
2519
2924
  itemsByModuleId: Object.fromEntries(
2520
2925
  Object.entries(e.itemsByModuleId).map(([t, n]) => [
2521
2926
  t,
2522
- n.map(({ status: o, ...r }) => r)
2927
+ n.map(({ status: o, ...s }) => s)
2523
2928
  ])
2524
2929
  )
2525
2930
  };
2526
2931
  }
2527
- function Fe(e, t = {}) {
2528
- const n = t.view ?? "student", o = t.courseId ?? re, r = [], s = {};
2529
- let l = 0;
2530
- e.forEach((m, c) => {
2531
- const u = c + 1, p = Zi(u, m, l, n);
2532
- l += m, r.push(tl(u, p, n)), s[String(u)] = p;
2932
+ function nt(e, t = {}) {
2933
+ const n = t.view ?? "student", o = t.courseId ?? be, s = [], r = {};
2934
+ let i = 0;
2935
+ e.forEach((d, u) => {
2936
+ const c = u + 1, p = da(c, d, i, n);
2937
+ i += d, s.push(ga(c, p, n)), r[String(c)] = p;
2533
2938
  });
2534
- const a = { courseId: o, modules: r, itemsByModuleId: s };
2535
- return n === "teacher" ? nl(a) : a;
2939
+ const a = { courseId: o, modules: s, itemsByModuleId: r };
2940
+ return n === "teacher" ? ha(a) : a;
2536
2941
  }
2537
- const fe = (e) => `/courses/${re}/modules/items/${e}`, Tt = "2099-08-31T06:59:00Z", ol = "2020-01-06T07:00:00Z", rl = Ve.length, sl = 8, il = 120, ll = 25, al = 250, Et = 8;
2538
- function Gl() {
2539
- return Fe(Array.from({ length: rl }, () => sl));
2942
+ const we = (e) => `/courses/${be}/modules/items/${e}`, Xt = "2099-08-31T06:59:00Z", Ia = "2020-01-06T07:00:00Z", ba = gt.length, Ma = 8, ya = 120, Sa = 25, _a = 250, Jt = 8;
2943
+ function rc() {
2944
+ return nt(Array.from({ length: ba }, () => Ma));
2540
2945
  }
2541
- function Yl() {
2542
- return Fe(Array.from({ length: il }, () => ll));
2946
+ function ic() {
2947
+ return nt(Array.from({ length: ya }, () => Sa));
2543
2948
  }
2544
- function Wl() {
2545
- return Fe([
2546
- Et,
2547
- al,
2548
- Et
2949
+ function lc() {
2950
+ return nt([
2951
+ Jt,
2952
+ _a,
2953
+ Jt
2549
2954
  ]);
2550
2955
  }
2551
- function Ql() {
2552
- const e = (r, s, l) => ({
2553
- id: String(r),
2554
- name: s,
2555
- position: r,
2956
+ function ac() {
2957
+ const e = (s, r, i) => ({
2958
+ id: String(s),
2959
+ name: r,
2960
+ position: s,
2556
2961
  published: !0,
2557
2962
  itemCount: 0,
2558
2963
  prerequisiteModules: [],
@@ -2565,29 +2970,29 @@ function Ql() {
2565
2970
  missingCount: 0,
2566
2971
  incompleteCount: 0
2567
2972
  },
2568
- ...l
2973
+ ...i
2569
2974
  }), t = { id: "101", name: "Week 1: Foundations" }, n = { id: "102", name: "Week 2: Derivatives" }, o = [
2570
- e(1, "Locked by a future date", { unlockAt: Tt }),
2975
+ e(1, "Locked by a future date", { unlockAt: Xt }),
2571
2976
  e(2, "Locked by one prerequisite", { prerequisiteModules: [t] }),
2572
2977
  e(3, "Locked by several prerequisites", {
2573
2978
  prerequisiteModules: [t, n]
2574
2979
  }),
2575
2980
  e(4, "Locked by a date and a prerequisite", {
2576
- unlockAt: Tt,
2981
+ unlockAt: Xt,
2577
2982
  prerequisiteModules: [t]
2578
2983
  }),
2579
- e(5, "Locked, and the unlock date has passed", { unlockAt: ol })
2984
+ e(5, "Locked, and the unlock date has passed", { unlockAt: Ia })
2580
2985
  ];
2581
2986
  return {
2582
- courseId: re,
2987
+ courseId: be,
2583
2988
  modules: o,
2584
- itemsByModuleId: Object.fromEntries(o.map((r) => [r.id, []]))
2989
+ itemsByModuleId: Object.fromEntries(o.map((s) => [s.id, []]))
2585
2990
  };
2586
2991
  }
2587
- function Hl() {
2588
- return Fe([]);
2992
+ function cc() {
2993
+ return nt([]);
2589
2994
  }
2590
- function Vl() {
2995
+ function uc() {
2591
2996
  const t = [
2592
2997
  {
2593
2998
  title: "Every fact: type, due date, points, requirement",
@@ -2616,7 +3021,7 @@ function Vl() {
2616
3021
  title: "Career item carrying an estimated duration",
2617
3022
  type: "external_tool",
2618
3023
  completionRequirement: { itemId: "5", type: "must_view" },
2619
- extensions: Ze(void 0, 45)
3024
+ extensions: bt(void 0, 45)
2620
3025
  },
2621
3026
  { title: "A file, ungradeable, so no points at all", type: "file" },
2622
3027
  { title: "External link, opens in a new tab", type: "external_url", newTab: !0 },
@@ -2639,12 +3044,12 @@ function Vl() {
2639
3044
  indent: 0,
2640
3045
  published: !0,
2641
3046
  newTab: !1,
2642
- url: fe(o + 1),
3047
+ url: we(o + 1),
2643
3048
  status: "not_started",
2644
3049
  ...n
2645
3050
  }));
2646
3051
  return {
2647
- courseId: re,
3052
+ courseId: be,
2648
3053
  modules: [
2649
3054
  {
2650
3055
  id: "1",
@@ -2659,13 +3064,13 @@ function Vl() {
2659
3064
  itemsByModuleId: { 1: t }
2660
3065
  };
2661
3066
  }
2662
- function Kl() {
3067
+ function dc() {
2663
3068
  const t = [
2664
- { title: "Reading: limits from the left and the right", type: "page", url: fe(1) },
3069
+ { title: "Reading: limits from the left and the right", type: "page", url: we(1) },
2665
3070
  {
2666
3071
  title: "Desmos: interactive limit explorer",
2667
3072
  type: "external_url",
2668
- url: fe(2),
3073
+ url: we(2),
2669
3074
  newTab: !0
2670
3075
  },
2671
3076
  { title: "Practice", type: "sub_header", url: null },
@@ -2673,9 +3078,9 @@ function Kl() {
2673
3078
  {
2674
3079
  title: "Utilizing Triangle Characteristics: Measuring Distances Through Angles, Elevation and the Practical Limits of Indirect Measurement in the Field",
2675
3080
  type: "assignment",
2676
- url: fe(5)
3081
+ url: we(5)
2677
3082
  },
2678
- { title: "Unit test", type: "quiz", url: fe(6), status: "locked" }
3083
+ { title: "Unit test", type: "quiz", url: we(6), status: "locked" }
2679
3084
  ].map((n, o) => ({
2680
3085
  id: String(o + 1),
2681
3086
  moduleId: "1",
@@ -2687,7 +3092,7 @@ function Kl() {
2687
3092
  ...n
2688
3093
  }));
2689
3094
  return {
2690
- courseId: re,
3095
+ courseId: be,
2691
3096
  modules: [
2692
3097
  {
2693
3098
  id: "1",
@@ -2703,91 +3108,97 @@ function Kl() {
2703
3108
  };
2704
3109
  }
2705
3110
  export {
2706
- V as ALL_FILTER,
2707
- Bt as CompletionRequirementSchema,
2708
- Hn as CompletionRequirementTypeSchema,
2709
- cn as DEFAULT_INLINE_THRESHOLD,
2710
- Qs as DEFAULT_ITEM_CONCURRENCY,
2711
- un as DEFAULT_ITEM_PAGE_SIZE,
2712
- oe as DEFAULT_LOCALE,
2713
- tt as DEFAULT_PAGE_SIZE,
2714
- dn as DEFAULT_RETAIN_COLLAPSED_LIMIT,
2715
- Oe as DEFAULT_STALE_TIME_MS,
2716
- Ns as DUE_THIS_WEEK_DAYS,
2717
- Yt as EXT_CAREER_ESTIMATED_DURATION_MINUTES,
2718
- re as FIXTURE_COURSE_ID,
2719
- oi as FilterChips,
2720
- jn as FilterClauseSchema,
2721
- Gs as FilterEntrySchema,
2722
- vo as GET_MODULES,
2723
- Lo as GET_MODULE_ITEMS,
2724
- Ge as INLINE_ITEM_LIMIT,
2725
- Xe as INLINE_QUERY_NODE_BUDGET,
2726
- to as InMemoryCourseMismatchError,
2727
- Bs as ItemTypeEntrySchema,
2728
- js as MetaFieldEntrySchema,
2729
- qi as ModuleCard,
2730
- yi as ModuleItemRow,
2731
- jt as ModuleItemSchema,
2732
- di as ModuleItemStatusPill,
2733
- Wn as ModuleItemStatusSchema,
2734
- Yn as ModuleItemTypeSchema,
2735
- Jn as ModuleItemsPageSchema,
2736
- Vn as ModuleProgressSchema,
2737
- Zn as ModuleSchema,
2738
- ci as ModuleStatusPill,
2739
- Qn as ModuleStatusSchema,
2740
- kl as ModulesConfigProvider,
2741
- Ys as ModulesConfigSchema,
2742
- ql as ModulesI18nProvider,
2743
- jl as ModulesList,
2744
- Xn as ModulesPageSchema,
2745
- Gt as PageInfoSchema,
2746
- Wt as PartialCanvasResponseError,
2747
- Kn as PrerequisiteModuleSchema,
3111
+ Qa as ACTION_ORDER_LTI_FLOOR,
3112
+ X as ALL_FILTER,
3113
+ Bt as ActionEntrySchema,
3114
+ hn as CompletionRequirementSchema,
3115
+ No as CompletionRequirementTypeSchema,
3116
+ Fn as DEFAULT_INLINE_THRESHOLD,
3117
+ Yi as DEFAULT_ITEM_CONCURRENCY,
3118
+ qn as DEFAULT_ITEM_PAGE_SIZE,
3119
+ Ie as DEFAULT_LOCALE,
3120
+ St as DEFAULT_PAGE_SIZE,
3121
+ Un as DEFAULT_RETAIN_COLLAPSED_LIMIT,
3122
+ tt as DEFAULT_STALE_TIME_MS,
3123
+ xi as DUE_THIS_WEEK_DAYS,
3124
+ Mn as EXT_CAREER_ESTIMATED_DURATION_MINUTES,
3125
+ be as FIXTURE_COURSE_ID,
3126
+ el as FilterChips,
3127
+ Ao as FilterClauseSchema,
3128
+ Bi as FilterEntrySchema,
3129
+ ps as GET_MODULES,
3130
+ fs as GET_MODULE_ITEMS,
3131
+ ct as INLINE_ITEM_LIMIT,
3132
+ Mt as INLINE_QUERY_NODE_BUDGET,
3133
+ $o as InMemoryCourseMismatchError,
3134
+ zi as ItemTypeEntrySchema,
3135
+ $i as MetaFieldEntrySchema,
3136
+ Ul as ModuleCard,
3137
+ Cl as ModuleItemRow,
3138
+ In as ModuleItemSchema,
3139
+ hl as ModuleItemStatusPill,
3140
+ Ro as ModuleItemStatusSchema,
3141
+ Lo as ModuleItemTypeSchema,
3142
+ Uo as ModuleItemsPageSchema,
3143
+ Do as ModuleProgressSchema,
3144
+ qo as ModuleSchema,
3145
+ gl as ModuleStatusPill,
3146
+ ko as ModuleStatusSchema,
3147
+ Xa as ModulesConfigProvider,
3148
+ Gi as ModulesConfigSchema,
3149
+ Za as ModulesI18nProvider,
3150
+ sc as ModulesList,
3151
+ Fo as ModulesPageSchema,
3152
+ Hl as ModulesProgressBar,
3153
+ bn as PageInfoSchema,
3154
+ yn as PartialCanvasResponseError,
3155
+ Oo as PrerequisiteModuleSchema,
2748
3156
  ke as RegistryEntrySchema,
2749
- Ds as TYPE_FIELD,
2750
- qs as baseFilters,
2751
- qe as baseModulesConfig,
2752
- Fe as buildFixture,
2753
- Hl as courseEmpty,
2754
- Wl as courseFatModule,
2755
- Kl as courseItemLinks,
2756
- Vl as courseItemRowVariants,
2757
- Yl as courseLarge,
2758
- Ql as courseLockReasons,
2759
- Gl as courseSmall,
2760
- Nl as createCanvasGraphqlAdapter,
2761
- xl as createInMemoryAdapter,
2762
- nn as createTranslate,
2763
- ks as defaultFormatters,
2764
- ys as defaultTranslate,
2765
- Je as filterClauseOf,
2766
- eo as getEstimatedDurationMinutes,
2767
- zs as hideUnservableFilters,
2768
- Bl as invalidateCourse,
2769
- zl as invalidateModuleItems,
2770
- $l as invalidateModuleList,
2771
- We as isPredicateServed,
2772
- ee as mergeRegistry,
2773
- ui as moduleItemStatusLabel,
2774
- mn as moduleItemsPrefix,
2775
- ai as moduleStatusLabel,
2776
- Se as modulesKeys,
2777
- Hs as modulesListPrefix,
2778
- Ol as partialModulesConfig,
2779
- ve as registrySchema,
2780
- Ws as resolveModulesConfig,
2781
- Gn as servesClause,
2782
- Us as unservableFilters,
2783
- Dl as useFieldVisible,
2784
- De as useFormatters,
2785
- Fl as useModuleItems,
2786
- Vs as useModules,
2787
- ye as useModulesConfig,
2788
- B as useModulesI18n,
2789
- Ul as useModulesPageData,
2790
- et as visibleEntries,
2791
- ne as visibleEntry,
2792
- Ze as withEstimatedDurationMinutes
3157
+ ki as TYPE_FIELD,
3158
+ Li as baseFilters,
3159
+ et as baseModulesConfig,
3160
+ nt as buildFixture,
3161
+ cc as courseEmpty,
3162
+ lc as courseFatModule,
3163
+ dc as courseItemLinks,
3164
+ uc as courseItemRowVariants,
3165
+ ic as courseLarge,
3166
+ ac as courseLockReasons,
3167
+ rc as courseSmall,
3168
+ Ms as createActionContext,
3169
+ Ha as createCanvasGraphqlAdapter,
3170
+ Wa as createInMemoryAdapter,
3171
+ xn as createTranslate,
3172
+ Ri as defaultFormatters,
3173
+ Ii as defaultTranslate,
3174
+ yt as filterClauseOf,
3175
+ zo as getEstimatedDurationMinutes,
3176
+ qi as hideUnservableFilters,
3177
+ Ka as invalidateCourse,
3178
+ bs as invalidateModuleItems,
3179
+ kt as invalidateModuleList,
3180
+ mt as isPredicateServed,
3181
+ me as mergeRegistry,
3182
+ fl as moduleItemStatusLabel,
3183
+ ut as moduleItemsPrefix,
3184
+ Wn as moduleStatusLabel,
3185
+ Le as modulesKeys,
3186
+ Is as modulesListPrefix,
3187
+ ec as partialModulesConfig,
3188
+ fe as registrySchema,
3189
+ ji as resolveModulesConfig,
3190
+ xo as servesClause,
3191
+ Oi as unservableFilters,
3192
+ tc as useActionContext,
3193
+ Ja as useFieldVisible,
3194
+ Ne as useFormatters,
3195
+ nc as useModuleItems,
3196
+ Wi as useModules,
3197
+ Re as useModulesConfig,
3198
+ j as useModulesI18n,
3199
+ oc as useModulesPageData,
3200
+ Va as visibleActions,
3201
+ Je as visibleEntries,
3202
+ he as visibleEntry,
3203
+ bt as withEstimatedDurationMinutes
2793
3204
  };