camox 0.77.0 → 0.79.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 (32) hide show
  1. package/dist/features/canvas/CamoxCanvas.js +187 -197
  2. package/dist/features/canvas/canvasCameraController.js +1 -1
  3. package/dist/features/canvas/canvasItems.js +40 -9
  4. package/dist/features/canvas/sidebar/ContentSidebarFrame.js +15 -11
  5. package/dist/features/canvas/useCanvasLayout.js +34 -0
  6. package/dist/features/memory/CamoxMemory.js +756 -0
  7. package/dist/features/memory/VoiceGroup.js +350 -0
  8. package/dist/features/preview/EditablePageExperience.js +2 -0
  9. package/dist/features/runtime/publicCache.d.ts +2 -0
  10. package/dist/features/runtime/publicCache.js +27 -4
  11. package/dist/features/runtime/runtime.d.ts +1 -1
  12. package/dist/features/runtime/runtime.js +34 -15
  13. package/dist/features/studio/FollowAgentProvider.js +1 -1
  14. package/dist/features/studio/components/AgentSidebar.js +22 -16
  15. package/dist/features/studio/components/DraftBar.js +167 -103
  16. package/dist/features/studio/components/{ReviewDraftDialog.js → DraftReview.js} +214 -218
  17. package/dist/features/studio/components/DraftsControl.js +174 -202
  18. package/dist/features/studio/components/DraftsSheet.js +102 -94
  19. package/dist/features/studio/components/Navbar.js +121 -84
  20. package/dist/features/studio/components/PublishedTab.js +21 -20
  21. package/dist/features/studio/routes.js +3 -1
  22. package/dist/features/studio/studioStore.js +12 -9
  23. package/dist/features/studio/usePublishDraft.js +116 -0
  24. package/dist/features/studio/viewSwitch.js +10 -7
  25. package/dist/features/vite/vite.js +1 -0
  26. package/dist/lib/queries.js +11 -1
  27. package/dist/lib/studio-reads.d.ts +1 -0
  28. package/dist/lib/studio-reads.js +12 -0
  29. package/dist/package.js +1 -1
  30. package/dist/studio.css +1 -1
  31. package/package.json +5 -5
  32. package/LICENSE.md +0 -21
@@ -4,24 +4,28 @@ import { draftMutations } from "../../../lib/queries.js";
4
4
  import { studioStore } from "../studioStore.js";
5
5
  import { localeName } from "../localeOptions.js";
6
6
  import { fixMessage, whereSentence } from "../fixMessage.js";
7
- import { useLeaveDraft } from "../viewSwitch.js";
8
7
  import { draftLabel, plural } from "../draftLabel.js";
8
+ import { PUBLISH_STOPPED } from "../usePublishDraft.js";
9
9
  import { useShowInCanvas } from "../showInCanvas.js";
10
10
  import { c } from "react/compiler-runtime";
11
- import { useState } from "react";
12
- import { PUBLISH_BLOCKED_ERROR } from "@camox/api-contract/drafts";
13
11
  import { jsx, jsxs } from "react/jsx-runtime";
14
12
  import { useMutation } from "@tanstack/react-query";
15
13
  import { Button } from "@camox/ui/button";
16
14
  import { OctagonX } from "lucide-react";
17
- import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from "@camox/ui/dialog";
18
15
  import { toast } from "@camox/ui/toaster";
19
16
  import { Skeleton } from "@camox/ui/skeleton";
20
17
  import { Spinner } from "@camox/ui/spinner";
18
+ import { Popover, PopoverContent, PopoverHeader, PopoverTitle, PopoverTrigger } from "@camox/ui/popover";
19
+ import { voiceAxis, voiceStep } from "@camox/api-contract/voice";
21
20
 
22
- //#region src/features/studio/components/ReviewDraftDialog.tsx
23
- /** Where a subject sits: its page or layout, or the files, which belong to neither. */
21
+ //#region src/features/studio/components/DraftReview.tsx
22
+ /**
23
+ * Where a subject sits: its page or layout, or the files, the languages or memory (the Voice
24
+ * included), which belong to none.
25
+ */
24
26
  function ownerName(owner, entity) {
27
+ if (entity === "locale") return "Languages";
28
+ if (entity === "memory" || entity === "voiceAxis") return "Memory";
25
29
  if (!owner) return entity === "file" ? "Files" : "Elsewhere";
26
30
  if (owner.kind === "layout") return `Layout ${owner.name}`;
27
31
  if (owner.kind === "syncedBlock") return `Synced block ${owner.title}`;
@@ -201,25 +205,6 @@ function _temp3(problem) {
201
205
  const place = problemPlace(problem);
202
206
  return place ? `${problem.label} · ${place}` : problem.label;
203
207
  }
204
- const PUBLISH_FAILED = "The publish couldn't finish on Camox's side, and Live is as it was. Try again.";
205
- /**
206
- * Whether a publish request failed on Camox's side rather than being refused: a server error,
207
- * or no answer at all. Either way the publish applied nothing.
208
- */
209
- const failedOnCamoxSide = (error) => {
210
- const status = error.status;
211
- return typeof status !== "number" || status >= 500;
212
- };
213
- /**
214
- * Why the last publish with code stopped, when it isn't a blocker, which the review shows
215
- * instead.
216
- */
217
- const PUBLISH_STOPPED = {
218
- revisionChanged: "The draft's code changed while publishing, so the publish stopped and Live is as it was. Publish again.",
219
- liveCodeMoved: "Live's code changed while publishing, and the draft took too long to take it in, so the publish stopped and Live is as it was. Try again.",
220
- conflictsChanged: PUBLISH_FAILED,
221
- failed: PUBLISH_FAILED
222
- };
223
208
  /**
224
209
  * The review's plain lines under the blockers: each language the publish holds off Live until
225
210
  * it's translated, and why the last publish stopped.
@@ -230,11 +215,86 @@ function reviewLines(preview) {
230
215
  const stopped = code?.publishAborted && !code.publishing ? code.publishAborted : null;
231
216
  return [...held, ...stopped && PUBLISH_STOPPED[stopped] ? [PUBLISH_STOPPED[stopped]] : []];
232
217
  }
233
- /** What Publish sends: the revision a draft with code shows, which publishing ships. */
234
- const publishInput = (projectId, shown) => ({
235
- projectId,
236
- ...shown.code?.revision && { revision: shown.code.revision }
237
- });
218
+ const MEMORY_CHANGE_LABELS = {
219
+ added: "Added",
220
+ changed: "Changed",
221
+ deleted: "Deleted"
222
+ };
223
+ /** A Voice Axis the draft moves, as it reads: "Humor: Earnest → Light". */
224
+ function voiceLine({ axis, before, after }) {
225
+ const stepName = (key) => voiceStep(axis, key).name;
226
+ return `${voiceAxis(axis).name}: ${stepName(before)} → ${stepName(after)}`;
227
+ }
228
+ /**
229
+ * What publishing the draft changes in memory: each Voice Axis it moves, from Live's step to the
230
+ * draft's, then the memories it adds, changes and deletes, each with its text, and Live's before a
231
+ * change. Nothing when it changes neither.
232
+ */
233
+ function MemoryChanges(t0) {
234
+ const $ = c(8);
235
+ const { voice, changes } = t0;
236
+ if (voice.length === 0 && changes.length === 0) return null;
237
+ let t1;
238
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
239
+ t1 = /* @__PURE__ */ jsx("h3", {
240
+ className: "text-sm font-medium",
241
+ children: "Memory"
242
+ });
243
+ $[0] = t1;
244
+ } else t1 = $[0];
245
+ let t2;
246
+ if ($[1] !== voice) {
247
+ t2 = voice.map(_temp4);
248
+ $[1] = voice;
249
+ $[2] = t2;
250
+ } else t2 = $[2];
251
+ let t3;
252
+ if ($[3] !== changes) {
253
+ t3 = changes.map(_temp5);
254
+ $[3] = changes;
255
+ $[4] = t3;
256
+ } else t3 = $[4];
257
+ let t4;
258
+ if ($[5] !== t2 || $[6] !== t3) {
259
+ t4 = /* @__PURE__ */ jsxs("section", {
260
+ "data-memory-changes": true,
261
+ className: "flex flex-col gap-2",
262
+ children: [t1, /* @__PURE__ */ jsxs("ul", {
263
+ className: "flex flex-col gap-2",
264
+ children: [t2, t3]
265
+ })]
266
+ });
267
+ $[5] = t2;
268
+ $[6] = t3;
269
+ $[7] = t4;
270
+ } else t4 = $[7];
271
+ return t4;
272
+ }
273
+ function _temp5(memory) {
274
+ return /* @__PURE__ */ jsxs("li", {
275
+ className: "flex flex-col gap-0.5 rounded-lg border p-3 text-sm",
276
+ children: [
277
+ /* @__PURE__ */ jsx("span", {
278
+ className: "text-muted-foreground text-xs",
279
+ children: MEMORY_CHANGE_LABELS[memory.change]
280
+ }),
281
+ /* @__PURE__ */ jsx("p", {
282
+ className: cn(memory.change === "deleted" && "text-muted-foreground line-through"),
283
+ children: memory.text
284
+ }),
285
+ memory.before !== void 0 && /* @__PURE__ */ jsxs("p", {
286
+ className: "text-muted-foreground text-xs",
287
+ children: ["Was: ", memory.before]
288
+ })
289
+ ]
290
+ }, memory.id);
291
+ }
292
+ function _temp4(change) {
293
+ return /* @__PURE__ */ jsx("li", {
294
+ className: "rounded-lg border p-3 text-sm",
295
+ children: /* @__PURE__ */ jsx("p", { children: voiceLine(change) })
296
+ }, change.axis);
297
+ }
238
298
  /**
239
299
  * The draft's overview: the bullets AI wrote about its changes, in full, saying it's updating
240
300
  * while they describe an older version of the draft. While
@@ -250,7 +310,7 @@ function DraftOverview(t0) {
250
310
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
251
311
  t1 = {
252
312
  ...draftMutations.retryOverview(),
253
- onError: _temp4
313
+ onError: _temp6
254
314
  };
255
315
  $[0] = t1;
256
316
  } else t1 = $[0];
@@ -271,7 +331,7 @@ function DraftOverview(t0) {
271
331
  if (overview.status === "ready") {
272
332
  let t2;
273
333
  if ($[3] !== overview.bullets) {
274
- t2 = overview.bullets.map(_temp5);
334
+ t2 = overview.bullets.map(_temp7);
275
335
  $[3] = overview.bullets;
276
336
  $[4] = t2;
277
337
  } else t2 = $[4];
@@ -312,7 +372,7 @@ function DraftOverview(t0) {
312
372
  if (overview.status === "failed") {
313
373
  let t2;
314
374
  if ($[12] !== changes) {
315
- t2 = new Set(changes.map(_temp6));
375
+ t2 = new Set(changes.map(_temp8));
316
376
  $[12] = changes;
317
377
  $[13] = t2;
318
378
  } else t2 = $[13];
@@ -415,28 +475,28 @@ function DraftOverview(t0) {
415
475
  } else t2 = $[34];
416
476
  return t2;
417
477
  }
418
- function _temp6(change) {
419
- return change.entity === "locale" ? "Languages" : ownerName(change.owner, change.entity);
478
+ function _temp8(change) {
479
+ return ownerName(change.owner, change.entity);
420
480
  }
421
- function _temp5(bullet, index) {
481
+ function _temp7(bullet, index) {
422
482
  return /* @__PURE__ */ jsx("li", { children: bullet }, index);
423
483
  }
424
- function _temp4(error) {
484
+ function _temp6(error) {
425
485
  return toast.error(error.message || "Could not summarize the draft");
426
486
  }
427
487
  /**
428
- * The review's body is tall enough for a typical overview from the start, so the dialog doesn't
429
- * grow once it's written. A longer one scrolls within the dialog's own limit.
488
+ * The review's body is tall enough for a typical overview from the start, so the popover doesn't
489
+ * grow once it's written. A longer one scrolls within the space above the bar.
430
490
  */
431
- const REVIEW_BODY_HEIGHT = "min-h-52";
491
+ const REVIEW_BODY_HEIGHT = "min-h-40";
432
492
  /**
433
- * Reviews a draft before publishing it whole (ADR 0009, ADR 0043). Publish is held only by
434
- * blockers or an empty draft, never by work Camox still runs. Once the draft ends, the studio
435
- * switches to Live.
493
+ * Reviews a draft's pending changes (ADR 0009, ADR 0043) in a popover above `trigger`, the Draft
494
+ * Bar's count of them. The bar's Publish opens it too, when blockers or a stopped publish left the
495
+ * draft as it was. It publishes nothing itself.
436
496
  */
437
- function ReviewDraftDialog(t0) {
438
- const $ = c(66);
439
- const { projectId, draftId, open, onOpenChange } = t0;
497
+ function DraftReview(t0) {
498
+ const $ = c(51);
499
+ const { projectId, draftId, open, onOpenChange, trigger, anchor } = t0;
440
500
  let t1;
441
501
  if ($[0] !== draftId || $[1] !== projectId) {
442
502
  t1 = reads.publishPreview({
@@ -471,62 +531,8 @@ function ReviewDraftDialog(t0) {
471
531
  $[9] = t4;
472
532
  } else t4 = $[9];
473
533
  const draft = useReadQuery(t3, t4);
474
- const leaveDraft = useLeaveDraft();
475
534
  const showInCanvas = useShowInCanvas();
476
- const [failed, setFailed] = useState(false);
477
- let t5;
478
- let t6;
479
- if ($[10] === Symbol.for("react.memo_cache_sentinel")) {
480
- t5 = draftMutations.publish();
481
- t6 = () => setFailed(false);
482
- $[10] = t5;
483
- $[11] = t6;
484
- } else {
485
- t5 = $[10];
486
- t6 = $[11];
487
- }
488
- let t7;
489
- if ($[12] !== leaveDraft || $[13] !== onOpenChange || $[14] !== preview) {
490
- t7 = (result) => {
491
- if ("publishing" in result && result.publishing) return preview.refetch();
492
- if (!result.empty) {
493
- onOpenChange(false);
494
- return leaveDraft(result.ended);
495
- }
496
- toast.info("This draft has no changes, so there is nothing to publish.");
497
- preview.refetch();
498
- };
499
- $[12] = leaveDraft;
500
- $[13] = onOpenChange;
501
- $[14] = preview;
502
- $[15] = t7;
503
- } else t7 = $[15];
504
- let t8;
505
- if ($[16] !== preview) {
506
- t8 = (error) => {
507
- if (failedOnCamoxSide(error)) setFailed(true);
508
- else if (error.code !== PUBLISH_BLOCKED_ERROR) toast.error(error.message);
509
- preview.refetch();
510
- };
511
- $[16] = preview;
512
- $[17] = t8;
513
- } else t8 = $[17];
514
- let t9;
515
- if ($[18] !== t7 || $[19] !== t8) {
516
- t9 = {
517
- ...t5,
518
- onMutate: t6,
519
- onSuccess: t7,
520
- onError: t8
521
- };
522
- $[18] = t7;
523
- $[19] = t8;
524
- $[20] = t9;
525
- } else t9 = $[20];
526
- const publish = useMutation(t9);
527
535
  const data = preview.data;
528
- const empty = !!data && data.changes.length === 0 && !data.code;
529
- const publishing = publish.isPending || !!data?.code?.publishing;
530
536
  let T0;
531
537
  let T1;
532
538
  let t10;
@@ -534,40 +540,43 @@ function ReviewDraftDialog(t0) {
534
540
  let t12;
535
541
  let t13;
536
542
  let t14;
537
- let t15;
538
- if ($[21] !== data || $[22] !== draft.data || $[23] !== failed || $[24] !== onOpenChange || $[25] !== open || $[26] !== projectId || $[27] !== publishing || $[28] !== showInCanvas) {
543
+ let t5;
544
+ let t6;
545
+ let t7;
546
+ let t8;
547
+ let t9;
548
+ if ($[10] !== anchor || $[11] !== data || $[12] !== draft.data || $[13] !== onOpenChange || $[14] !== open || $[15] !== projectId || $[16] !== showInCanvas || $[17] !== trigger) {
539
549
  const lines = data ? reviewLines(data) : [];
540
- if (failed && !lines.includes(PUBLISH_FAILED)) lines.push(PUBLISH_FAILED);
541
- T1 = Dialog;
542
- t14 = open;
543
- if ($[37] !== onOpenChange || $[38] !== publishing) {
544
- t15 = (next) => (next || !publishing) && onOpenChange(next);
545
- $[37] = onOpenChange;
546
- $[38] = publishing;
547
- $[39] = t15;
548
- } else t15 = $[39];
549
- T0 = DialogContent;
550
- t10 = "flex max-h-[85vh] flex-col gap-4 sm:max-w-xl";
551
- t11 = !publishing;
552
- let t16;
553
- if ($[40] !== draft.data) {
554
- t16 = draft.data ? draftLabel(draft.data) : "Draft";
555
- $[40] = draft.data;
556
- $[41] = t16;
557
- } else t16 = $[41];
558
- if ($[42] !== t16) {
559
- t12 = /* @__PURE__ */ jsx(DialogHeader, {
560
- className: "pr-8",
561
- children: /* @__PURE__ */ jsx(DialogTitle, {
562
- className: "truncate text-base",
563
- children: t16
564
- })
565
- });
566
- $[42] = t16;
567
- $[43] = t12;
568
- } else t12 = $[43];
569
- t13 = data ? /* @__PURE__ */ jsxs("div", {
570
- className: cn("-mx-6 flex flex-col gap-4 overflow-y-auto px-6", REVIEW_BODY_HEIGHT),
550
+ T1 = Popover;
551
+ t12 = open;
552
+ t13 = onOpenChange;
553
+ if ($[30] !== trigger) {
554
+ t14 = /* @__PURE__ */ jsx(PopoverTrigger, { render: trigger });
555
+ $[30] = trigger;
556
+ $[31] = t14;
557
+ } else t14 = $[31];
558
+ T0 = PopoverContent;
559
+ t5 = "top";
560
+ t6 = "start";
561
+ t7 = 8;
562
+ t8 = anchor;
563
+ t9 = "max-h-[min(36rem,var(--available-height))] w-[min(28rem,calc(100vw-2rem))] gap-3 overflow-y-auto";
564
+ let t15;
565
+ if ($[32] !== draft.data) {
566
+ t15 = draft.data ? draftLabel(draft.data) : "Draft";
567
+ $[32] = draft.data;
568
+ $[33] = t15;
569
+ } else t15 = $[33];
570
+ if ($[34] !== t15) {
571
+ t10 = /* @__PURE__ */ jsx(PopoverHeader, { children: /* @__PURE__ */ jsx(PopoverTitle, {
572
+ className: "truncate",
573
+ children: t15
574
+ }) });
575
+ $[34] = t15;
576
+ $[35] = t10;
577
+ } else t10 = $[35];
578
+ t11 = data ? /* @__PURE__ */ jsxs("div", {
579
+ className: cn("flex flex-col gap-4", REVIEW_BODY_HEIGHT),
571
580
  children: [
572
581
  /* @__PURE__ */ jsx(DraftOverview, {
573
582
  projectId,
@@ -580,100 +589,87 @@ function ReviewDraftDialog(t0) {
580
589
  showInCanvas(target);
581
590
  }
582
591
  }),
583
- lines.map(_temp7)
592
+ lines.map(_temp9),
593
+ /* @__PURE__ */ jsx(MemoryChanges, {
594
+ voice: data.voiceChanges,
595
+ changes: data.memoryChanges
596
+ })
584
597
  ]
585
598
  }) : /* @__PURE__ */ jsx("div", {
586
599
  className: cn("flex items-center justify-center", REVIEW_BODY_HEIGHT),
587
600
  children: /* @__PURE__ */ jsx(Spinner, { className: "text-muted-foreground" })
588
601
  });
589
- $[21] = data;
590
- $[22] = draft.data;
591
- $[23] = failed;
592
- $[24] = onOpenChange;
593
- $[25] = open;
594
- $[26] = projectId;
595
- $[27] = publishing;
596
- $[28] = showInCanvas;
597
- $[29] = T0;
598
- $[30] = T1;
599
- $[31] = t10;
600
- $[32] = t11;
601
- $[33] = t12;
602
- $[34] = t13;
603
- $[35] = t14;
604
- $[36] = t15;
602
+ $[10] = anchor;
603
+ $[11] = data;
604
+ $[12] = draft.data;
605
+ $[13] = onOpenChange;
606
+ $[14] = open;
607
+ $[15] = projectId;
608
+ $[16] = showInCanvas;
609
+ $[17] = trigger;
610
+ $[18] = T0;
611
+ $[19] = T1;
612
+ $[20] = t10;
613
+ $[21] = t11;
614
+ $[22] = t12;
615
+ $[23] = t13;
616
+ $[24] = t14;
617
+ $[25] = t5;
618
+ $[26] = t6;
619
+ $[27] = t7;
620
+ $[28] = t8;
621
+ $[29] = t9;
605
622
  } else {
606
- T0 = $[29];
607
- T1 = $[30];
608
- t10 = $[31];
609
- t11 = $[32];
610
- t12 = $[33];
611
- t13 = $[34];
612
- t14 = $[35];
613
- t15 = $[36];
623
+ T0 = $[18];
624
+ T1 = $[19];
625
+ t10 = $[20];
626
+ t11 = $[21];
627
+ t12 = $[22];
628
+ t13 = $[23];
629
+ t14 = $[24];
630
+ t5 = $[25];
631
+ t6 = $[26];
632
+ t7 = $[27];
633
+ t8 = $[28];
634
+ t9 = $[29];
614
635
  }
615
- const t16 = !data || data.blockers.length > 0 || empty || publishing;
616
- let t17;
617
- if ($[44] !== data || $[45] !== projectId || $[46] !== publish) {
618
- t17 = () => data && publish.mutate(publishInput(projectId, data));
619
- $[44] = data;
620
- $[45] = projectId;
621
- $[46] = publish;
622
- $[47] = t17;
623
- } else t17 = $[47];
624
- let t18;
625
- if ($[48] !== publishing) {
626
- t18 = publishing ? /* @__PURE__ */ jsx(Spinner, {}) : null;
627
- $[48] = publishing;
628
- $[49] = t18;
629
- } else t18 = $[49];
630
- let t19;
631
- if ($[50] !== t16 || $[51] !== t17 || $[52] !== t18) {
632
- t19 = /* @__PURE__ */ jsx(DialogFooter, { children: /* @__PURE__ */ jsxs(Button, {
633
- disabled: t16,
634
- onClick: t17,
635
- children: [t18, "Publish"]
636
- }) });
637
- $[50] = t16;
638
- $[51] = t17;
639
- $[52] = t18;
640
- $[53] = t19;
641
- } else t19 = $[53];
642
- let t20;
643
- if ($[54] !== T0 || $[55] !== t10 || $[56] !== t11 || $[57] !== t12 || $[58] !== t13 || $[59] !== t19) {
644
- t20 = /* @__PURE__ */ jsxs(T0, {
645
- className: t10,
646
- showCloseButton: t11,
647
- children: [
648
- t12,
649
- t13,
650
- t19
651
- ]
636
+ let t15;
637
+ if ($[36] !== T0 || $[37] !== t10 || $[38] !== t11 || $[39] !== t5 || $[40] !== t6 || $[41] !== t7 || $[42] !== t8 || $[43] !== t9) {
638
+ t15 = /* @__PURE__ */ jsxs(T0, {
639
+ side: t5,
640
+ align: t6,
641
+ sideOffset: t7,
642
+ anchor: t8,
643
+ className: t9,
644
+ children: [t10, t11]
652
645
  });
653
- $[54] = T0;
654
- $[55] = t10;
655
- $[56] = t11;
656
- $[57] = t12;
657
- $[58] = t13;
658
- $[59] = t19;
659
- $[60] = t20;
660
- } else t20 = $[60];
661
- let t21;
662
- if ($[61] !== T1 || $[62] !== t14 || $[63] !== t15 || $[64] !== t20) {
663
- t21 = /* @__PURE__ */ jsx(T1, {
664
- open: t14,
665
- onOpenChange: t15,
666
- children: t20
646
+ $[36] = T0;
647
+ $[37] = t10;
648
+ $[38] = t11;
649
+ $[39] = t5;
650
+ $[40] = t6;
651
+ $[41] = t7;
652
+ $[42] = t8;
653
+ $[43] = t9;
654
+ $[44] = t15;
655
+ } else t15 = $[44];
656
+ let t16;
657
+ if ($[45] !== T1 || $[46] !== t12 || $[47] !== t13 || $[48] !== t14 || $[49] !== t15) {
658
+ t16 = /* @__PURE__ */ jsxs(T1, {
659
+ open: t12,
660
+ onOpenChange: t13,
661
+ children: [t14, t15]
667
662
  });
668
- $[61] = T1;
669
- $[62] = t14;
670
- $[63] = t15;
671
- $[64] = t20;
672
- $[65] = t21;
673
- } else t21 = $[65];
674
- return t21;
663
+ $[45] = T1;
664
+ $[46] = t12;
665
+ $[47] = t13;
666
+ $[48] = t14;
667
+ $[49] = t15;
668
+ $[50] = t16;
669
+ } else t16 = $[50];
670
+ return t16;
675
671
  }
676
- function _temp7(line) {
672
+ function _temp9(line) {
677
673
  return /* @__PURE__ */ jsx("p", {
678
674
  className: "text-sm text-amber-700 dark:text-amber-400",
679
675
  "data-review-line": true,
@@ -682,4 +678,4 @@ function _temp7(line) {
682
678
  }
683
679
 
684
680
  //#endregion
685
- export { ReviewDraftDialog, fixBlockersMessage };
681
+ export { DraftReview, fixBlockersMessage };