camox 0.72.0 → 0.74.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/features/preview/components/PageInfo.js +121 -98
  2. package/dist/features/preview/components/SelectionEditor.js +1 -1
  3. package/dist/features/routes/pageRuntime.js +15 -4
  4. package/dist/features/runtime/ClaimCard.js +192 -0
  5. package/dist/features/runtime/pageApp.js +4 -3
  6. package/dist/features/runtime/runtime.js +26 -5
  7. package/dist/features/runtime/worker.js +2 -2
  8. package/dist/features/runtime/workerRequest.d.ts +6 -0
  9. package/dist/features/runtime/workerRequest.js +13 -1
  10. package/dist/features/runtime/workerRuntime.d.ts +2 -2
  11. package/dist/features/runtime/workerRuntime.js +2 -2
  12. package/dist/features/studio/components/AgentSidebar.js +7 -7
  13. package/dist/features/studio/components/ChatWidget.js +142 -106
  14. package/dist/features/studio/components/ContentFindings.js +127 -230
  15. package/dist/features/studio/components/DeleteDraftDialog.js +112 -0
  16. package/dist/features/studio/components/DraftBar.js +98 -53
  17. package/dist/features/studio/components/DraftsControl.js +203 -190
  18. package/dist/features/studio/components/ReviewDraftDialog.js +670 -0
  19. package/dist/features/studio/components/{Patrol.js → Specialists.js} +291 -330
  20. package/dist/features/studio/components/Squareling.js +5 -5
  21. package/dist/features/studio/components/ThreadComposer.js +106 -127
  22. package/dist/features/studio/components/ThreadMessages.js +94 -69
  23. package/dist/features/studio/findingSentence.js +14 -12
  24. package/dist/features/studio/fixMessage.js +23 -0
  25. package/dist/features/studio/reportSentence.js +1 -1
  26. package/dist/features/studio/{patrollerBio.js → specialistBio.js} +8 -5
  27. package/dist/features/studio/studioStore.js +29 -15
  28. package/dist/features/studio/workingSentence.js +1 -1
  29. package/dist/lib/api-client.js +5 -1
  30. package/dist/lib/queries.js +5 -5
  31. package/dist/lib/studio-reads.d.ts +1 -1
  32. package/dist/lib/studio-reads.js +5 -5
  33. package/dist/package.js +1 -1
  34. package/dist/studio.css +1 -1
  35. package/package.json +4 -4
  36. package/dist/features/studio/components/ReviewDraftSheet.js +0 -1587
@@ -5,33 +5,33 @@ import { useNavigate } from "../../navigation/navigation.js";
5
5
  import { AuthContext } from "../../../lib/auth.js";
6
6
  import { reads, useReadQuery } from "../../../lib/studio-reads.js";
7
7
  import { cn } from "../../../lib/utils.js";
8
- import { patrolMutations } from "../../../lib/queries.js";
8
+ import { specialistMutations } from "../../../lib/queries.js";
9
9
  import { AssetLightbox } from "../../preview/components/AssetLightbox.js";
10
10
  import { BOTTOM_CARD_EDGES, CARD_BODY_EDGES } from "../../preview/components/SidebarStack.js";
11
11
  import { editCollectionItemPath } from "../routes.js";
12
12
  import { studioStore } from "../studioStore.js";
13
- import { askAgentMessage, dismissLabel, dismissedSentence, findingSentence, fixLabel } from "../findingSentence.js";
13
+ import { dismissLabel, dismissedSentence, findingSentence, fixWithAgentMessage } from "../findingSentence.js";
14
14
  import { useShowInCanvas } from "../showInCanvas.js";
15
15
  import { Squareling } from "./Squareling.js";
16
- import { aboutSentence, whenTag } from "../patrollerBio.js";
17
16
  import { moreSentence, reportSentence, shortTimeAgo, whereReportLeads } from "../reportSentence.js";
17
+ import { aboutSentence, whenTag } from "../specialistBio.js";
18
18
  import { workingSentence } from "../workingSentence.js";
19
19
  import { c } from "react/compiler-runtime";
20
20
  import * as React from "react";
21
21
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
22
- import { reportLocale } from "@camox/api-contract/patrol";
22
+ import { SPECIALIST_IDS, SPECIALIST_SEARCH_PARAM, reportLocale } from "@camox/api-contract/specialists";
23
23
  import { useMutation } from "@tanstack/react-query";
24
24
  import { Button } from "@camox/ui/button";
25
25
  import { Popover, PopoverContent, PopoverTitle, PopoverTrigger } from "@camox/ui/popover";
26
26
  import { Badge } from "@camox/ui/badge";
27
27
 
28
- //#region src/features/studio/components/Patrol.tsx
28
+ //#region src/features/studio/components/Specialists.tsx
29
29
  /**
30
- * The Agent Sidebar's Patrol, over the Chat widget: every patroller of the project, and what each
31
- * did without being asked in the draft viewed, or on Live (ADR 0024). It fetches the Patrol of the
32
- * scope viewed, and holds which patroller's reports are open.
30
+ * The Agent Sidebar's Specialists, over the Chat widget: every specialist of the project, and what
31
+ * each did without being asked in the draft viewed, or on Live (ADR 0024). It fetches the
32
+ * Specialists of the scope viewed, and holds which specialist's reports are open.
33
33
  */
34
- function Patrol(t0) {
34
+ function Specialists(t0) {
35
35
  const $ = c(14);
36
36
  const { className } = t0;
37
37
  const { projectUuid } = React.useContext(AuthContext);
@@ -56,7 +56,7 @@ function Patrol(t0) {
56
56
  className: cn("bg-background flex h-11 min-w-0 shrink-0 items-center justify-center px-3", BOTTOM_CARD_EDGES),
57
57
  children: /* @__PURE__ */ jsx("h2", {
58
58
  className: "truncate text-sm font-medium",
59
- children: "Patrol"
59
+ children: "Specialists"
60
60
  })
61
61
  });
62
62
  t4 = cn("bg-background flex min-h-0 flex-1 flex-col overflow-y-auto", CARD_BODY_EDGES);
@@ -68,7 +68,7 @@ function Patrol(t0) {
68
68
  }
69
69
  let t5;
70
70
  if ($[6] !== draftId || $[7] !== project) {
71
- t5 = project && /* @__PURE__ */ jsx(ProjectPatrol, {
71
+ t5 = project && /* @__PURE__ */ jsx(ProjectSpecialists, {
72
72
  projectId: project.id,
73
73
  inDraft: draftId !== null
74
74
  });
@@ -88,8 +88,8 @@ function Patrol(t0) {
88
88
  let t7;
89
89
  if ($[11] !== t2 || $[12] !== t6) {
90
90
  t7 = /* @__PURE__ */ jsxs("section", {
91
- "aria-label": "Patrol",
92
- "data-patrol": true,
91
+ "aria-label": "Specialists",
92
+ "data-specialists": true,
93
93
  className: t2,
94
94
  children: [t3, t6]
95
95
  });
@@ -99,12 +99,24 @@ function Patrol(t0) {
99
99
  } else t7 = $[13];
100
100
  return t7;
101
101
  }
102
- function ProjectPatrol(t0) {
103
- const $ = c(33);
102
+ /**
103
+ * The specialist whose findings a link opened the studio on, such as the email about Live's new
104
+ * findings, if any. Dropped from the URL, so that they open once.
105
+ */
106
+ function takeLinkedSpecialist() {
107
+ const url = new URL(window.location.href);
108
+ const linked = url.searchParams.get(SPECIALIST_SEARCH_PARAM);
109
+ if (linked === null) return null;
110
+ url.searchParams.delete(SPECIALIST_SEARCH_PARAM);
111
+ window.history.replaceState(window.history.state, "", url.href);
112
+ return SPECIALIST_IDS.find((id) => id === linked) ?? null;
113
+ }
114
+ function ProjectSpecialists(t0) {
115
+ const $ = c(26);
104
116
  const { projectId, inDraft } = t0;
105
117
  let t1;
106
118
  if ($[0] !== projectId) {
107
- t1 = reads.patrol({ projectId });
119
+ t1 = reads.specialists({ projectId });
108
120
  $[0] = projectId;
109
121
  $[1] = t1;
110
122
  } else t1 = $[1];
@@ -117,135 +129,114 @@ function ProjectPatrol(t0) {
117
129
  } else t2 = $[3];
118
130
  const { data: locales } = useReadQuery(t2);
119
131
  const [open, setOpen] = React.useState(null);
120
- const now = useNow(3e4);
121
- const [openFileId, setOpenFileId] = React.useState(null);
122
- const showReport = useShowReport(inDraft, setOpenFileId);
123
- const navigate = useNavigate();
124
132
  let t3;
133
+ let t4;
125
134
  if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
126
- t3 = patrolMutations.applyFix();
135
+ t3 = () => {
136
+ const linked = takeLinkedSpecialist();
137
+ if (linked) setOpen(linked);
138
+ };
139
+ t4 = [];
127
140
  $[4] = t3;
128
- } else t3 = $[4];
129
- const applyFix = useMutation(t3);
130
- let t4;
131
- if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
132
- t4 = patrolMutations.dismissFinding();
133
141
  $[5] = t4;
134
- } else t4 = $[5];
135
- const dismissFinding = useMutation(t4);
142
+ } else {
143
+ t3 = $[4];
144
+ t4 = $[5];
145
+ }
146
+ React.useEffect(t3, t4);
147
+ const now = useNow(3e4);
148
+ const [openFileId, setOpenFileId] = React.useState(null);
149
+ const showReport = useShowReport(inDraft, setOpenFileId);
150
+ let t5;
151
+ if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
152
+ t5 = specialistMutations.dismissFinding();
153
+ $[6] = t5;
154
+ } else t5 = $[6];
155
+ const dismissFinding = useMutation(t5);
136
156
  if (!view) return null;
137
- const t5 = locales?.length === 1;
138
- let t6;
139
- if ($[6] !== showReport) {
140
- t6 = (shown) => {
157
+ const t6 = locales?.length === 1;
158
+ let t7;
159
+ if ($[7] !== showReport) {
160
+ t7 = (shown) => {
141
161
  setOpen(null);
142
162
  showReport(shown);
143
163
  };
144
- $[6] = showReport;
145
- $[7] = t6;
146
- } else t6 = $[7];
147
- let t7;
148
- if ($[8] !== applyFix || $[9] !== projectId) {
149
- t7 = (finding) => applyFix.mutate({
150
- projectId,
151
- findingId: finding.id
152
- });
153
- $[8] = applyFix;
154
- $[9] = projectId;
155
- $[10] = t7;
156
- } else t7 = $[10];
164
+ $[7] = showReport;
165
+ $[8] = t7;
166
+ } else t7 = $[8];
157
167
  let t8;
158
- if ($[11] === Symbol.for("react.memo_cache_sentinel")) {
159
- t8 = (patroller, finding_0) => {
168
+ if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
169
+ t8 = (specialist, finding) => {
160
170
  setOpen(null);
161
- studioStore.trigger.askAgent({ text: askAgentMessage(finding_0, patroller.role) });
171
+ studioStore.trigger.sendToAgent({ text: fixWithAgentMessage(finding, specialist.role) });
162
172
  };
163
- $[11] = t8;
164
- } else t8 = $[11];
173
+ $[9] = t8;
174
+ } else t8 = $[9];
165
175
  let t9;
166
- if ($[12] !== dismissFinding || $[13] !== projectId) {
167
- t9 = (finding_1) => dismissFinding.mutate({
176
+ if ($[10] !== dismissFinding || $[11] !== projectId) {
177
+ t9 = (finding_0) => dismissFinding.mutate({
168
178
  projectId,
169
- findingId: finding_1.id
179
+ findingId: finding_0.id
170
180
  });
171
- $[12] = dismissFinding;
172
- $[13] = projectId;
173
- $[14] = t9;
174
- } else t9 = $[14];
181
+ $[10] = dismissFinding;
182
+ $[11] = projectId;
183
+ $[12] = t9;
184
+ } else t9 = $[12];
175
185
  let t10;
176
- if ($[15] !== navigate || $[16] !== showReport) {
177
- t10 = (draft, finding_2) => {
178
- setOpen(null);
179
- const kind = finding_2.place?.kind;
180
- if (kind === "page" || kind === "record") showReport({
181
- ...shownOfFinding(finding_2),
182
- draft
183
- });
184
- else navigate({
185
- to: window.location.href,
186
- draft: draft.id
187
- });
188
- };
189
- $[15] = navigate;
190
- $[16] = showReport;
191
- $[17] = t10;
192
- } else t10 = $[17];
193
- let t11;
194
- if ($[18] !== inDraft || $[19] !== now || $[20] !== open || $[21] !== t10 || $[22] !== t5 || $[23] !== t6 || $[24] !== t7 || $[25] !== t9 || $[26] !== view) {
195
- t11 = /* @__PURE__ */ jsx(PatrolRoster, {
186
+ if ($[13] !== inDraft || $[14] !== now || $[15] !== open || $[16] !== t6 || $[17] !== t7 || $[18] !== t9 || $[19] !== view) {
187
+ t10 = /* @__PURE__ */ jsx(SpecialistRoster, {
196
188
  view,
197
189
  now,
198
190
  inDraft,
199
- singleLocale: t5,
191
+ singleLocale: t6,
200
192
  open,
201
193
  onOpenChange: setOpen,
202
- onShow: t6,
203
- onApply: t7,
204
- onAsk: t8,
205
- onDismiss: t9,
206
- onOpenPatrolDraft: t10
207
- });
208
- $[18] = inDraft;
209
- $[19] = now;
210
- $[20] = open;
211
- $[21] = t10;
212
- $[22] = t5;
213
- $[23] = t6;
214
- $[24] = t7;
215
- $[25] = t9;
216
- $[26] = view;
217
- $[27] = t11;
218
- } else t11 = $[27];
219
- let t12;
220
- if ($[28] !== openFileId) {
221
- t12 = openFileId && /* @__PURE__ */ jsx(AssetLightbox, {
194
+ onShow: t7,
195
+ onFix: t8,
196
+ onDismiss: t9
197
+ });
198
+ $[13] = inDraft;
199
+ $[14] = now;
200
+ $[15] = open;
201
+ $[16] = t6;
202
+ $[17] = t7;
203
+ $[18] = t9;
204
+ $[19] = view;
205
+ $[20] = t10;
206
+ } else t10 = $[20];
207
+ let t11;
208
+ if ($[21] !== openFileId) {
209
+ t11 = openFileId && /* @__PURE__ */ jsx(AssetLightbox, {
222
210
  open: true,
223
211
  onOpenChange: (open_0) => {
224
212
  if (!open_0) setOpenFileId(null);
225
213
  },
226
214
  fileId: openFileId
227
215
  });
228
- $[28] = openFileId;
229
- $[29] = t12;
230
- } else t12 = $[29];
231
- let t13;
232
- if ($[30] !== t11 || $[31] !== t12) {
233
- t13 = /* @__PURE__ */ jsxs("div", { children: [t11, t12] });
234
- $[30] = t11;
235
- $[31] = t12;
236
- $[32] = t13;
237
- } else t13 = $[32];
238
- return t13;
216
+ $[21] = openFileId;
217
+ $[22] = t11;
218
+ } else t11 = $[22];
219
+ let t12;
220
+ if ($[23] !== t10 || $[24] !== t11) {
221
+ t12 = /* @__PURE__ */ jsxs("div", { children: [t10, t11] });
222
+ $[23] = t10;
223
+ $[24] = t11;
224
+ $[25] = t12;
225
+ } else t12 = $[25];
226
+ return t12;
239
227
  }
240
- /** A report, as the Patrol shows its subject. */
228
+ /** A report, as the Specialists shows its subject. */
241
229
  const shownOf = (report) => ({
242
230
  ...report,
243
231
  locale: reportLocale(report.summary)
244
232
  });
245
- /** A finding, as the Patrol shows its subject: its field selected. */
233
+ /**
234
+ * A finding, as the Specialists shows its subject: its field selected, where the studio is. A
235
+ * Live finding seen in a draft is about content the draft still holds, fixed there.
236
+ */
246
237
  const shownOfFinding = (finding) => ({
247
238
  place: finding.place,
248
- live: finding.live,
239
+ live: false,
249
240
  locale: finding.locale,
250
241
  field: {
251
242
  name: finding.field,
@@ -253,8 +244,8 @@ const shownOfFinding = (finding) => ({
253
244
  }
254
245
  });
255
246
  /**
256
- * Shows a report's or a finding's subject where it is, in its locale, and on Live for a Live one
257
- * seen from a draft, or in the draft it names: a page, block, item or field selected on the
247
+ * Shows a report's or a finding's subject where it is, in its locale, and on Live for a Live
248
+ * report seen from a draft: a page, block, item or field selected on the
258
249
  * Canvas, a record in its collection, or a file, opened over the Canvas.
259
250
  */
260
251
  function useShowReport(inDraft, openFile) {
@@ -267,7 +258,7 @@ function useShowReport(inDraft, openFile) {
267
258
  t0 = (report) => {
268
259
  const { place } = report;
269
260
  if (!place) return;
270
- const inScope = report.draft ? { draft: report.draft.id } : inDraft && report.live ? { draft: null } : {};
261
+ const inScope = inDraft && report.live ? { draft: null } : {};
271
262
  const tag = report.locale;
272
263
  if (place.kind === "page") {
273
264
  const { pageId, blockId, itemId } = place;
@@ -332,62 +323,53 @@ function _temp() {
332
323
  return Date.now();
333
324
  }
334
325
  /**
335
- * A `PatrolView`, in the order it gives, as avatars in rows of three, each over its role like a
336
- * story. Each opens its reports in a popover to the left, under its role and when it last worked,
326
+ * A `SpecialistsView`, in the order it gives, as avatars in rows of three, each over its role like
327
+ * a story. Each opens its reports in a popover to the left, under its role and when it last worked,
337
328
  * or what it's on. Live's reports carry a tag when a draft is viewed. In a project with a single
338
329
  * locale, the Translator invites the editor to add a language instead.
339
330
  */
340
- function PatrolRoster(t0) {
341
- const $ = c(27);
342
- const { view, now, inDraft, singleLocale, open, onOpenChange, onShow, onApply, onAsk, onDismiss, onOpenPatrolDraft } = t0;
331
+ function SpecialistRoster(t0) {
332
+ const $ = c(21);
333
+ const { view, now, inDraft, singleLocale, open, onOpenChange, onShow, onFix, onDismiss } = t0;
343
334
  let t1;
344
- if ($[0] !== inDraft || $[1] !== now || $[2] !== onApply || $[3] !== onAsk || $[4] !== onDismiss || $[5] !== onOpenChange || $[6] !== onOpenPatrolDraft || $[7] !== onShow || $[8] !== open || $[9] !== singleLocale || $[10] !== view.patrolDraft || $[11] !== view.patrollers) {
335
+ if ($[0] !== inDraft || $[1] !== now || $[2] !== onDismiss || $[3] !== onFix || $[4] !== onOpenChange || $[5] !== onShow || $[6] !== open || $[7] !== singleLocale || $[8] !== view.specialists) {
345
336
  let t2;
346
- if ($[13] !== inDraft || $[14] !== now || $[15] !== onApply || $[16] !== onAsk || $[17] !== onDismiss || $[18] !== onOpenChange || $[19] !== onOpenPatrolDraft || $[20] !== onShow || $[21] !== open || $[22] !== singleLocale || $[23] !== view.patrolDraft) {
347
- t2 = (patroller) => /* @__PURE__ */ jsx(PatrollerRow, {
348
- patroller,
337
+ if ($[10] !== inDraft || $[11] !== now || $[12] !== onDismiss || $[13] !== onFix || $[14] !== onOpenChange || $[15] !== onShow || $[16] !== open || $[17] !== singleLocale) {
338
+ t2 = (specialist) => /* @__PURE__ */ jsx(SpecialistRow, {
339
+ specialist,
349
340
  now,
350
341
  inDraft,
351
342
  singleLocale,
352
- open: open === patroller.id,
353
- onOpenChange: (next) => onOpenChange(next ? patroller.id : null),
343
+ open: open === specialist.id,
344
+ onOpenChange: (next) => onOpenChange(next ? specialist.id : null),
354
345
  onShow,
355
- onApply,
356
- onAsk,
357
- onDismiss,
358
- patrolDraft: view.patrolDraft,
359
- onOpenPatrolDraft
360
- }, patroller.id);
361
- $[13] = inDraft;
362
- $[14] = now;
363
- $[15] = onApply;
364
- $[16] = onAsk;
365
- $[17] = onDismiss;
366
- $[18] = onOpenChange;
367
- $[19] = onOpenPatrolDraft;
368
- $[20] = onShow;
369
- $[21] = open;
370
- $[22] = singleLocale;
371
- $[23] = view.patrolDraft;
372
- $[24] = t2;
373
- } else t2 = $[24];
374
- t1 = view.patrollers.map(t2);
346
+ onFix,
347
+ onDismiss
348
+ }, specialist.id);
349
+ $[10] = inDraft;
350
+ $[11] = now;
351
+ $[12] = onDismiss;
352
+ $[13] = onFix;
353
+ $[14] = onOpenChange;
354
+ $[15] = onShow;
355
+ $[16] = open;
356
+ $[17] = singleLocale;
357
+ $[18] = t2;
358
+ } else t2 = $[18];
359
+ t1 = view.specialists.map(t2);
375
360
  $[0] = inDraft;
376
361
  $[1] = now;
377
- $[2] = onApply;
378
- $[3] = onAsk;
379
- $[4] = onDismiss;
380
- $[5] = onOpenChange;
381
- $[6] = onOpenPatrolDraft;
382
- $[7] = onShow;
383
- $[8] = open;
384
- $[9] = singleLocale;
385
- $[10] = view.patrolDraft;
386
- $[11] = view.patrollers;
387
- $[12] = t1;
388
- } else t1 = $[12];
362
+ $[2] = onDismiss;
363
+ $[3] = onFix;
364
+ $[4] = onOpenChange;
365
+ $[5] = onShow;
366
+ $[6] = open;
367
+ $[7] = singleLocale;
368
+ $[8] = view.specialists;
369
+ $[9] = t1;
370
+ } else t1 = $[9];
389
371
  let t2;
390
- if ($[25] !== t1) {
372
+ if ($[19] !== t1) {
391
373
  t2 = /* @__PURE__ */ jsx("div", {
392
374
  className: "px-1 py-3",
393
375
  children: /* @__PURE__ */ jsx("ul", {
@@ -395,13 +377,13 @@ function PatrolRoster(t0) {
395
377
  children: t1
396
378
  })
397
379
  });
398
- $[25] = t1;
399
- $[26] = t2;
400
- } else t2 = $[26];
380
+ $[19] = t1;
381
+ $[20] = t2;
382
+ } else t2 = $[20];
401
383
  return t2;
402
384
  }
403
385
  /**
404
- * A thin, low-contrast arc travelling around a working patroller's avatar, where its story ring
386
+ * A thin, low-contrast arc travelling around a working specialist's avatar, where its story ring
405
387
  * goes, or the whole ring pulsing slowly under reduced motion. The motion lives in `studio.css`.
406
388
  */
407
389
  function WorkingArc() {
@@ -412,7 +394,7 @@ function WorkingArc() {
412
394
  "data-working-indicator": true,
413
395
  "aria-hidden": true,
414
396
  viewBox: "0 0 36 36",
415
- className: "patrol-working text-foreground/40 pointer-events-none absolute -inset-[3px] size-[calc(100%+6px)]",
397
+ className: "specialist-working text-foreground/40 pointer-events-none absolute -inset-[3px] size-[calc(100%+6px)]",
416
398
  children: /* @__PURE__ */ jsx("circle", {
417
399
  cx: "18",
418
400
  cy: "18",
@@ -422,33 +404,33 @@ function WorkingArc() {
422
404
  stroke: "currentColor",
423
405
  strokeWidth: "1.5",
424
406
  strokeLinecap: "round",
425
- className: "patrol-working-arc"
407
+ className: "specialist-working-arc"
426
408
  })
427
409
  });
428
410
  $[0] = t0;
429
411
  } else t0 = $[0];
430
412
  return t0;
431
413
  }
432
- function PatrollerRow(t0) {
433
- const $ = c(53);
434
- const { patroller, now, inDraft, singleLocale, open, onOpenChange, onShow, onApply, onAsk, onDismiss, patrolDraft, onOpenPatrolDraft } = t0;
414
+ function SpecialistRow(t0) {
415
+ const $ = c(50);
416
+ const { specialist, now, inDraft, singleLocale, open, onOpenChange, onShow, onFix, onDismiss } = t0;
435
417
  const statusId = React.useId();
436
418
  let t1;
437
- if ($[0] !== patroller.id || $[1] !== patroller.working) {
438
- t1 = patroller.working && workingSentence(patroller.id, patroller.working);
439
- $[0] = patroller.id;
440
- $[1] = patroller.working;
419
+ if ($[0] !== specialist.id || $[1] !== specialist.working) {
420
+ t1 = specialist.working && workingSentence(specialist.id, specialist.working);
421
+ $[0] = specialist.id;
422
+ $[1] = specialist.working;
441
423
  $[2] = t1;
442
424
  } else t1 = $[2];
443
425
  const working = t1;
444
- const count = patroller.findings.length;
426
+ const count = specialist.findings.length;
445
427
  const t2 = open || void 0;
446
428
  const t3 = working ? statusId : void 0;
447
429
  let t4;
448
430
  if ($[3] !== count || $[4] !== working) {
449
431
  t4 = !working && /* @__PURE__ */ jsx("span", {
450
432
  "aria-hidden": true,
451
- className: cn("group-focus-visible/patroller:ring-ring/50 pointer-events-none absolute -inset-[3px] rounded-full border group-focus-visible/patroller:ring-[3px]", count > 0 ? "border-foreground border-[1.5px]" : "border-border")
433
+ className: cn("group-focus-visible/specialist:ring-ring/50 pointer-events-none absolute -inset-[3px] rounded-full border group-focus-visible/specialist:ring-[3px]", count > 0 ? "border-foreground border-[1.5px]" : "border-border")
452
434
  });
453
435
  $[3] = count;
454
436
  $[4] = working;
@@ -460,18 +442,18 @@ function PatrollerRow(t0) {
460
442
  $[6] = working;
461
443
  $[7] = t5;
462
444
  } else t5 = $[7];
463
- const t6 = working ? "working" : patroller.duty === "off" ? "asleep" : "idle";
445
+ const t6 = working ? "working" : specialist.duty === "off" ? "asleep" : "idle";
464
446
  let t7;
465
- if ($[8] !== patroller.id || $[9] !== t6) {
447
+ if ($[8] !== specialist.id || $[9] !== t6) {
466
448
  t7 = /* @__PURE__ */ jsx("span", {
467
- className: "bg-muted group-hover/patroller:bg-muted-foreground/15 group-data-popup-open/patroller:bg-muted-foreground/15 flex size-full items-center justify-center rounded-full transition-colors",
449
+ className: "bg-muted group-hover/specialist:bg-muted-foreground/15 group-data-popup-open/specialist:bg-muted-foreground/15 flex size-full items-center justify-center rounded-full transition-colors",
468
450
  children: /* @__PURE__ */ jsx(Squareling, {
469
- variant: patroller.id,
451
+ variant: specialist.id,
470
452
  status: t6,
471
453
  className: "size-6"
472
454
  })
473
455
  });
474
- $[8] = patroller.id;
456
+ $[8] = specialist.id;
475
457
  $[9] = t6;
476
458
  $[10] = t7;
477
459
  } else t7 = $[10];
@@ -489,7 +471,7 @@ function PatrollerRow(t0) {
489
471
  let t9;
490
472
  if ($[13] !== t4 || $[14] !== t5 || $[15] !== t7 || $[16] !== t8) {
491
473
  t9 = /* @__PURE__ */ jsxs("span", {
492
- className: "relative flex size-10 shrink-0 transition-[scale] duration-200 ease-out group-hover/patroller:scale-105 group-active/patroller:scale-95 motion-reduce:transition-none",
474
+ className: "relative flex size-10 shrink-0 transition-[scale] duration-200 ease-out group-hover/specialist:scale-105 group-active/specialist:scale-95 motion-reduce:transition-none",
493
475
  children: [
494
476
  t4,
495
477
  t5,
@@ -504,20 +486,20 @@ function PatrollerRow(t0) {
504
486
  $[17] = t9;
505
487
  } else t9 = $[17];
506
488
  let t10;
507
- if ($[18] !== patroller.role) {
489
+ if ($[18] !== specialist.role) {
508
490
  t10 = /* @__PURE__ */ jsx("span", {
509
- "data-patroller-role": true,
491
+ "data-specialist-role": true,
510
492
  className: "max-w-full truncate text-[11px] leading-4 font-medium",
511
- children: patroller.role
493
+ children: specialist.role
512
494
  });
513
- $[18] = patroller.role;
495
+ $[18] = specialist.role;
514
496
  $[19] = t10;
515
497
  } else t10 = $[19];
516
498
  let t11;
517
499
  if ($[20] !== t10 || $[21] !== t3 || $[22] !== t9) {
518
500
  t11 = /* @__PURE__ */ jsxs(PopoverTrigger, {
519
501
  "aria-describedby": t3,
520
- className: "group/patroller flex max-w-full min-w-0 cursor-pointer flex-col items-center gap-1 pt-[3px] outline-none",
502
+ className: "group/specialist flex max-w-full min-w-0 cursor-pointer flex-col items-center gap-1 pt-[3px] outline-none",
521
503
  children: [t9, t10]
522
504
  });
523
505
  $[20] = t10;
@@ -526,63 +508,57 @@ function PatrollerRow(t0) {
526
508
  $[23] = t11;
527
509
  } else t11 = $[23];
528
510
  let t12;
529
- if ($[24] !== onAsk || $[25] !== patroller) {
530
- t12 = (finding) => onAsk(patroller, finding);
531
- $[24] = onAsk;
532
- $[25] = patroller;
511
+ if ($[24] !== onFix || $[25] !== specialist) {
512
+ t12 = (finding) => onFix(specialist, finding);
513
+ $[24] = onFix;
514
+ $[25] = specialist;
533
515
  $[26] = t12;
534
516
  } else t12 = $[26];
535
517
  let t13;
536
- if ($[27] !== inDraft || $[28] !== now || $[29] !== onApply || $[30] !== onDismiss || $[31] !== onOpenPatrolDraft || $[32] !== onShow || $[33] !== patrolDraft || $[34] !== patroller || $[35] !== singleLocale || $[36] !== t12) {
518
+ if ($[27] !== inDraft || $[28] !== now || $[29] !== onDismiss || $[30] !== onShow || $[31] !== singleLocale || $[32] !== specialist || $[33] !== t12) {
537
519
  t13 = /* @__PURE__ */ jsx(PopoverContent, {
538
520
  sideOffset: 8,
539
521
  className: "w-96 gap-3 p-4",
540
- children: /* @__PURE__ */ jsx(PatrollerCard, {
541
- patroller,
522
+ children: /* @__PURE__ */ jsx(SpecialistCard, {
523
+ specialist,
542
524
  now,
543
525
  inDraft,
544
526
  singleLocale,
545
527
  onShow,
546
- onApply,
547
- onAsk: t12,
548
- onDismiss,
549
- patrolDraft,
550
- onOpenPatrolDraft
528
+ onFix: t12,
529
+ onDismiss
551
530
  })
552
531
  });
553
532
  $[27] = inDraft;
554
533
  $[28] = now;
555
- $[29] = onApply;
556
- $[30] = onDismiss;
557
- $[31] = onOpenPatrolDraft;
558
- $[32] = onShow;
559
- $[33] = patrolDraft;
560
- $[34] = patroller;
561
- $[35] = singleLocale;
562
- $[36] = t12;
563
- $[37] = t13;
564
- } else t13 = $[37];
534
+ $[29] = onDismiss;
535
+ $[30] = onShow;
536
+ $[31] = singleLocale;
537
+ $[32] = specialist;
538
+ $[33] = t12;
539
+ $[34] = t13;
540
+ } else t13 = $[34];
565
541
  let t14;
566
- if ($[38] !== onOpenChange || $[39] !== open || $[40] !== t11 || $[41] !== t13) {
542
+ if ($[35] !== onOpenChange || $[36] !== open || $[37] !== t11 || $[38] !== t13) {
567
543
  t14 = /* @__PURE__ */ jsxs(Popover, {
568
544
  open,
569
545
  onOpenChange,
570
546
  children: [t11, t13]
571
547
  });
572
- $[38] = onOpenChange;
573
- $[39] = open;
574
- $[40] = t11;
575
- $[41] = t13;
576
- $[42] = t14;
577
- } else t14 = $[42];
548
+ $[35] = onOpenChange;
549
+ $[36] = open;
550
+ $[37] = t11;
551
+ $[38] = t13;
552
+ $[39] = t14;
553
+ } else t14 = $[39];
578
554
  let t15;
579
- if ($[43] !== working) {
555
+ if ($[40] !== working) {
580
556
  t15 = working && `Working: ${working.charAt(0).toLowerCase()}${working.slice(1)}`;
581
- $[43] = working;
582
- $[44] = t15;
583
- } else t15 = $[44];
557
+ $[40] = working;
558
+ $[41] = t15;
559
+ } else t15 = $[41];
584
560
  let t16;
585
- if ($[45] !== statusId || $[46] !== t15) {
561
+ if ($[42] !== statusId || $[43] !== t15) {
586
562
  t16 = /* @__PURE__ */ jsx("span", {
587
563
  id: statusId,
588
564
  "data-working-status": true,
@@ -590,31 +566,31 @@ function PatrollerRow(t0) {
590
566
  className: "sr-only",
591
567
  children: t15
592
568
  });
593
- $[45] = statusId;
594
- $[46] = t15;
595
- $[47] = t16;
596
- } else t16 = $[47];
569
+ $[42] = statusId;
570
+ $[43] = t15;
571
+ $[44] = t16;
572
+ } else t16 = $[44];
597
573
  let t17;
598
- if ($[48] !== patroller.id || $[49] !== t14 || $[50] !== t16 || $[51] !== t2) {
574
+ if ($[45] !== specialist.id || $[46] !== t14 || $[47] !== t16 || $[48] !== t2) {
599
575
  t17 = /* @__PURE__ */ jsxs("li", {
600
- "data-patroller": patroller.id,
576
+ "data-specialist": specialist.id,
601
577
  "data-open": t2,
602
578
  className: "flex justify-center",
603
579
  children: [t14, t16]
604
580
  });
605
- $[48] = patroller.id;
606
- $[49] = t14;
607
- $[50] = t16;
608
- $[51] = t2;
609
- $[52] = t17;
610
- } else t17 = $[52];
581
+ $[45] = specialist.id;
582
+ $[46] = t14;
583
+ $[47] = t16;
584
+ $[48] = t2;
585
+ $[49] = t17;
586
+ } else t17 = $[49];
611
587
  return t17;
612
588
  }
613
589
  /**
614
- * A patroller's popover, a profile card: its avatar and role, a tag of when it works where the
590
+ * A specialist's popover, a profile card: its avatar and role, a tag of when it works where the
615
591
  * editor is over what it does, what it's on while it works, then what it did.
616
592
  */
617
- function PatrollerCard(t0) {
593
+ function SpecialistCard(t0) {
618
594
  const $ = c(47);
619
595
  let props;
620
596
  let singleLocale;
@@ -627,34 +603,34 @@ function PatrollerCard(t0) {
627
603
  props = $[1];
628
604
  singleLocale = $[2];
629
605
  }
630
- const { patroller, inDraft } = props;
606
+ const { specialist, inDraft } = props;
631
607
  let t1;
632
- if ($[3] !== patroller.id || $[4] !== patroller.working) {
633
- t1 = patroller.working && workingSentence(patroller.id, patroller.working);
634
- $[3] = patroller.id;
635
- $[4] = patroller.working;
608
+ if ($[3] !== specialist.id || $[4] !== specialist.working) {
609
+ t1 = specialist.working && workingSentence(specialist.id, specialist.working);
610
+ $[3] = specialist.id;
611
+ $[4] = specialist.working;
636
612
  $[5] = t1;
637
613
  } else t1 = $[5];
638
614
  const working = t1;
639
615
  let t2;
640
- if ($[6] !== inDraft || $[7] !== patroller.duty || $[8] !== patroller.id || $[9] !== singleLocale) {
641
- t2 = whenTag(patroller.id, patroller.duty, inDraft, singleLocale);
616
+ if ($[6] !== inDraft || $[7] !== singleLocale || $[8] !== specialist.duty || $[9] !== specialist.id) {
617
+ t2 = whenTag(specialist.id, specialist.duty, inDraft, singleLocale);
642
618
  $[6] = inDraft;
643
- $[7] = patroller.duty;
644
- $[8] = patroller.id;
645
- $[9] = singleLocale;
619
+ $[7] = singleLocale;
620
+ $[8] = specialist.duty;
621
+ $[9] = specialist.id;
646
622
  $[10] = t2;
647
623
  } else t2 = $[10];
648
624
  const when = t2;
649
- const t3 = working ? "working" : patroller.duty === "off" ? "asleep" : "idle";
625
+ const t3 = working ? "working" : specialist.duty === "off" ? "asleep" : "idle";
650
626
  let t4;
651
- if ($[11] !== patroller.id || $[12] !== t3) {
627
+ if ($[11] !== specialist.id || $[12] !== t3) {
652
628
  t4 = /* @__PURE__ */ jsx(Squareling, {
653
- variant: patroller.id,
629
+ variant: specialist.id,
654
630
  status: t3,
655
631
  className: "size-7"
656
632
  });
657
- $[11] = patroller.id;
633
+ $[11] = specialist.id;
658
634
  $[12] = t3;
659
635
  $[13] = t4;
660
636
  } else t4 = $[13];
@@ -675,12 +651,12 @@ function PatrollerCard(t0) {
675
651
  $[18] = t6;
676
652
  } else t6 = $[18];
677
653
  let t7;
678
- if ($[19] !== patroller.role) {
654
+ if ($[19] !== specialist.role) {
679
655
  t7 = /* @__PURE__ */ jsx(PopoverTitle, {
680
656
  className: "min-w-0 text-base",
681
- children: patroller.role
657
+ children: specialist.role
682
658
  });
683
- $[19] = patroller.role;
659
+ $[19] = specialist.role;
684
660
  $[20] = t7;
685
661
  } else t7 = $[20];
686
662
  let t8;
@@ -712,7 +688,7 @@ function PatrollerCard(t0) {
712
688
  let t12;
713
689
  if ($[28] !== t11 || $[29] !== when.label) {
714
690
  t12 = /* @__PURE__ */ jsxs("span", {
715
- "data-patroller-when": true,
691
+ "data-specialist-when": true,
716
692
  className: "bg-muted text-muted-foreground inline-flex items-center gap-1.5 rounded-full py-0.5 pr-2.5 pl-2 text-xs font-medium",
717
693
  children: [t11, when.label]
718
694
  });
@@ -721,15 +697,15 @@ function PatrollerCard(t0) {
721
697
  $[30] = t12;
722
698
  } else t12 = $[30];
723
699
  let t13;
724
- if ($[31] !== patroller.id) {
725
- t13 = aboutSentence(patroller.id);
726
- $[31] = patroller.id;
700
+ if ($[31] !== specialist.id) {
701
+ t13 = aboutSentence(specialist.id);
702
+ $[31] = specialist.id;
727
703
  $[32] = t13;
728
704
  } else t13 = $[32];
729
705
  let t14;
730
706
  if ($[33] !== t13) {
731
707
  t14 = /* @__PURE__ */ jsx("p", {
732
- "data-patroller-about": true,
708
+ "data-specialist-about": true,
733
709
  className: "text-sm",
734
710
  children: t13
735
711
  });
@@ -749,7 +725,7 @@ function PatrollerCard(t0) {
749
725
  let t16;
750
726
  if ($[38] !== working) {
751
727
  t16 = working && /* @__PURE__ */ jsx("p", {
752
- "data-patroller-working": true,
728
+ "data-specialist-working": true,
753
729
  className: "bg-muted rounded-md px-2.5 py-1.5 text-xs",
754
730
  children: working
755
731
  });
@@ -760,7 +736,7 @@ function PatrollerCard(t0) {
760
736
  if ($[40] !== props) {
761
737
  t17 = /* @__PURE__ */ jsx("div", {
762
738
  className: "flex flex-col gap-2 border-t pt-3",
763
- children: /* @__PURE__ */ jsx(PatrollerDetails, { ...props })
739
+ children: /* @__PURE__ */ jsx(SpecialistDetails, { ...props })
764
740
  });
765
741
  $[40] = props;
766
742
  $[41] = t17;
@@ -782,18 +758,18 @@ function PatrollerCard(t0) {
782
758
  return t18;
783
759
  }
784
760
  /**
785
- * What a patroller's popover shows: its open findings with their actions, then its reports, then
761
+ * What a specialist's popover shows: its open findings with their actions, then its reports, then
786
762
  * the history of its dismissals.
787
763
  */
788
- function PatrollerDetails(t0) {
789
- const $ = c(23);
790
- const { patroller, now, inDraft, onShow, onApply, onAsk, onDismiss, patrolDraft, onOpenPatrolDraft } = t0;
764
+ function SpecialistDetails(t0) {
765
+ const $ = c(20);
766
+ const { specialist, now, inDraft, onShow, onFix, onDismiss } = t0;
791
767
  let t1;
792
- if ($[0] !== inDraft || $[1] !== onApply || $[2] !== onAsk || $[3] !== onDismiss || $[4] !== onOpenPatrolDraft || $[5] !== onShow || $[6] !== patrolDraft || $[7] !== patroller.findings || $[8] !== patroller.id) {
793
- t1 = patroller.findings.length > 0 && /* @__PURE__ */ jsx("ul", {
794
- "data-findings": patroller.id,
768
+ if ($[0] !== inDraft || $[1] !== onDismiss || $[2] !== onFix || $[3] !== onShow || $[4] !== specialist.findings || $[5] !== specialist.id) {
769
+ t1 = specialist.findings.length > 0 && /* @__PURE__ */ jsx("ul", {
770
+ "data-findings": specialist.id,
795
771
  className: "flex flex-col gap-2 text-xs",
796
- children: patroller.findings.map((finding) => /* @__PURE__ */ jsxs("li", {
772
+ children: specialist.findings.map((finding) => /* @__PURE__ */ jsxs("li", {
797
773
  "data-finding": true,
798
774
  className: "flex flex-col gap-1",
799
775
  children: [/* @__PURE__ */ jsxs("span", {
@@ -816,23 +792,11 @@ function PatrollerDetails(t0) {
816
792
  onClick: () => onShow(shownOfFinding(finding)),
817
793
  children: "Show"
818
794
  }),
819
- finding.fix && !finding.live && /* @__PURE__ */ jsx(Button, {
820
- variant: "outline",
821
- size: "xs",
822
- onClick: () => onApply(finding),
823
- children: fixLabel(finding.fix)
824
- }),
825
- inDraft && !finding.live && /* @__PURE__ */ jsx(Button, {
826
- variant: "outline",
827
- size: "xs",
828
- onClick: () => onAsk(finding),
829
- children: "Ask the agent"
830
- }),
831
- !inDraft && patrolDraft && /* @__PURE__ */ jsx(Button, {
795
+ /* @__PURE__ */ jsx(Button, {
832
796
  variant: "outline",
833
797
  size: "xs",
834
- onClick: () => onOpenPatrolDraft(patrolDraft, finding),
835
- children: "Open the Patrol Draft"
798
+ onClick: () => onFix(finding),
799
+ children: "Fix with agent"
836
800
  }),
837
801
  /* @__PURE__ */ jsx(Button, {
838
802
  variant: "ghost",
@@ -845,37 +809,34 @@ function PatrollerDetails(t0) {
845
809
  }, finding.id))
846
810
  });
847
811
  $[0] = inDraft;
848
- $[1] = onApply;
849
- $[2] = onAsk;
850
- $[3] = onDismiss;
851
- $[4] = onOpenPatrolDraft;
852
- $[5] = onShow;
853
- $[6] = patrolDraft;
854
- $[7] = patroller.findings;
855
- $[8] = patroller.id;
856
- $[9] = t1;
857
- } else t1 = $[9];
812
+ $[1] = onDismiss;
813
+ $[2] = onFix;
814
+ $[3] = onShow;
815
+ $[4] = specialist.findings;
816
+ $[5] = specialist.id;
817
+ $[6] = t1;
818
+ } else t1 = $[6];
858
819
  let t2;
859
- if ($[10] !== inDraft || $[11] !== now || $[12] !== onShow || $[13] !== patroller) {
860
- t2 = /* @__PURE__ */ jsx(PatrollerReports, {
861
- patroller,
820
+ if ($[7] !== inDraft || $[8] !== now || $[9] !== onShow || $[10] !== specialist) {
821
+ t2 = /* @__PURE__ */ jsx(SpecialistReports, {
822
+ specialist,
862
823
  now,
863
824
  inDraft,
864
825
  onShow
865
826
  });
866
- $[10] = inDraft;
867
- $[11] = now;
868
- $[12] = onShow;
869
- $[13] = patroller;
870
- $[14] = t2;
871
- } else t2 = $[14];
827
+ $[7] = inDraft;
828
+ $[8] = now;
829
+ $[9] = onShow;
830
+ $[10] = specialist;
831
+ $[11] = t2;
832
+ } else t2 = $[11];
872
833
  let t3;
873
- if ($[15] !== now || $[16] !== patroller.dismissals || $[17] !== patroller.id) {
874
- t3 = patroller.dismissals.length > 0 && /* @__PURE__ */ jsx("ul", {
875
- "data-dismissals": patroller.id,
834
+ if ($[12] !== now || $[13] !== specialist.dismissals || $[14] !== specialist.id) {
835
+ t3 = specialist.dismissals.length > 0 && /* @__PURE__ */ jsx("ul", {
836
+ "data-dismissals": specialist.id,
876
837
  "aria-label": "Dismissed",
877
838
  className: "text-muted-foreground flex flex-col gap-1 border-t pt-2 text-xs",
878
- children: patroller.dismissals.map((dismissal) => /* @__PURE__ */ jsxs("li", {
839
+ children: specialist.dismissals.map((dismissal) => /* @__PURE__ */ jsxs("li", {
879
840
  "data-dismissal": true,
880
841
  className: "flex items-baseline gap-2",
881
842
  children: [/* @__PURE__ */ jsx("span", {
@@ -888,34 +849,34 @@ function PatrollerDetails(t0) {
888
849
  })]
889
850
  }, dismissal.id))
890
851
  });
891
- $[15] = now;
892
- $[16] = patroller.dismissals;
893
- $[17] = patroller.id;
894
- $[18] = t3;
895
- } else t3 = $[18];
852
+ $[12] = now;
853
+ $[13] = specialist.dismissals;
854
+ $[14] = specialist.id;
855
+ $[15] = t3;
856
+ } else t3 = $[15];
896
857
  let t4;
897
- if ($[19] !== t1 || $[20] !== t2 || $[21] !== t3) {
858
+ if ($[16] !== t1 || $[17] !== t2 || $[18] !== t3) {
898
859
  t4 = /* @__PURE__ */ jsxs(Fragment, { children: [
899
860
  t1,
900
861
  t2,
901
862
  t3
902
863
  ] });
903
- $[19] = t1;
904
- $[20] = t2;
905
- $[21] = t3;
906
- $[22] = t4;
907
- } else t4 = $[22];
864
+ $[16] = t1;
865
+ $[17] = t2;
866
+ $[18] = t3;
867
+ $[19] = t4;
868
+ } else t4 = $[19];
908
869
  return t4;
909
870
  }
910
871
  /**
911
- * A patroller's reports, latest first, each with a Live tag when a draft is viewed and how long
872
+ * A specialist's reports, latest first, each with a Live tag when a draft is viewed and how long
912
873
  * ago, then how many more there are, by locale.
913
874
  */
914
- function PatrollerReports(t0) {
875
+ function SpecialistReports(t0) {
915
876
  const $ = c(16);
916
- const { patroller, now, inDraft, onShow } = t0;
917
- if (patroller.reports.length === 0 && patroller.more.length === 0) {
918
- if (patroller.findings.length > 0 || patroller.dismissals.length > 0) return null;
877
+ const { specialist, now, inDraft, onShow } = t0;
878
+ if (specialist.reports.length === 0 && specialist.more.length === 0) {
879
+ if (specialist.findings.length > 0 || specialist.dismissals.length > 0) return null;
919
880
  let t1;
920
881
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
921
882
  t1 = /* @__PURE__ */ jsx("p", {
@@ -926,9 +887,9 @@ function PatrollerReports(t0) {
926
887
  } else t1 = $[0];
927
888
  return t1;
928
889
  }
929
- const t1 = patroller.id;
890
+ const t1 = specialist.id;
930
891
  let t2;
931
- if ($[1] !== inDraft || $[2] !== now || $[3] !== onShow || $[4] !== patroller.reports) {
892
+ if ($[1] !== inDraft || $[2] !== now || $[3] !== onShow || $[4] !== specialist.reports) {
932
893
  let t3;
933
894
  if ($[6] !== inDraft || $[7] !== now || $[8] !== onShow) {
934
895
  t3 = (report) => /* @__PURE__ */ jsxs("li", {
@@ -957,31 +918,31 @@ function PatrollerReports(t0) {
957
918
  $[8] = onShow;
958
919
  $[9] = t3;
959
920
  } else t3 = $[9];
960
- t2 = patroller.reports.map(t3);
921
+ t2 = specialist.reports.map(t3);
961
922
  $[1] = inDraft;
962
923
  $[2] = now;
963
924
  $[3] = onShow;
964
- $[4] = patroller.reports;
925
+ $[4] = specialist.reports;
965
926
  $[5] = t2;
966
927
  } else t2 = $[5];
967
928
  let t3;
968
- if ($[10] !== patroller.more) {
969
- t3 = patroller.more.length > 0 && /* @__PURE__ */ jsx("li", {
929
+ if ($[10] !== specialist.more) {
930
+ t3 = specialist.more.length > 0 && /* @__PURE__ */ jsx("li", {
970
931
  "data-more": true,
971
932
  className: "text-muted-foreground",
972
- children: moreSentence(patroller.more)
933
+ children: moreSentence(specialist.more)
973
934
  });
974
- $[10] = patroller.more;
935
+ $[10] = specialist.more;
975
936
  $[11] = t3;
976
937
  } else t3 = $[11];
977
938
  let t4;
978
- if ($[12] !== patroller.id || $[13] !== t2 || $[14] !== t3) {
939
+ if ($[12] !== specialist.id || $[13] !== t2 || $[14] !== t3) {
979
940
  t4 = /* @__PURE__ */ jsxs("ul", {
980
941
  "data-reports": t1,
981
942
  className: "flex flex-col gap-1 text-xs",
982
943
  children: [t2, t3]
983
944
  });
984
- $[12] = patroller.id;
945
+ $[12] = specialist.id;
985
946
  $[13] = t2;
986
947
  $[14] = t3;
987
948
  $[15] = t4;
@@ -1049,4 +1010,4 @@ function ReportSentence(t0) {
1049
1010
  }
1050
1011
 
1051
1012
  //#endregion
1052
- export { Patrol, PatrolRoster, PatrollerCard, PatrollerDetails, PatrollerReports };
1013
+ export { SpecialistCard, SpecialistDetails, SpecialistReports, SpecialistRoster, Specialists };