@parhelia/core 0.1.12939 → 0.1.12940

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 (131) hide show
  1. package/dist/agents-view/AgentCard.js +1 -1
  2. package/dist/agents-view/AgentsView.js +1 -1
  3. package/dist/agents-view/AgentsView.js.map +1 -1
  4. package/dist/agents-view/DateAgentsGroup.js +1 -1
  5. package/dist/agents-view/DateAgentsGroup.js.map +1 -1
  6. package/dist/components/ui/context-menu.js +5 -0
  7. package/dist/components/ui/context-menu.js.map +1 -1
  8. package/dist/components/ui/popover.d.ts +2 -0
  9. package/dist/components/ui/popover.js +62 -1
  10. package/dist/components/ui/popover.js.map +1 -1
  11. package/dist/config/notificationRoutes.js +86 -97
  12. package/dist/config/notificationRoutes.js.map +1 -1
  13. package/dist/editor/ai/Agents.js +24 -1
  14. package/dist/editor/ai/Agents.js.map +1 -1
  15. package/dist/editor/ai/terminal/components/AgentFullPromptControls.js +2 -10
  16. package/dist/editor/ai/terminal/components/AgentFullPromptControls.js.map +1 -1
  17. package/dist/editor/ai/terminal/components/AgentGreeting.js +2 -2
  18. package/dist/editor/ai/terminal/components/AgentGreeting.js.map +1 -1
  19. package/dist/editor/ai/terminal/components/AgentProfileSwitcher.d.ts +4 -0
  20. package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js +76 -11
  21. package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js.map +1 -1
  22. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +18 -5
  23. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js.map +1 -1
  24. package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.d.ts +0 -2
  25. package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.js.map +1 -1
  26. package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.d.ts +3 -1
  27. package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js +2 -2
  28. package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js.map +1 -1
  29. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.d.ts +1 -1
  30. package/dist/editor/ai/terminal/components/AgentTerminalView.d.ts +2 -1
  31. package/dist/editor/ai/terminal/components/AgentTerminalView.js +3 -3
  32. package/dist/editor/ai/terminal/components/AgentTerminalView.js.map +1 -1
  33. package/dist/editor/ai/terminal/components/AiResponseMessage.d.ts +0 -2
  34. package/dist/editor/ai/terminal/components/AiResponseMessage.js +10 -42
  35. package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
  36. package/dist/editor/ai/terminal/types.d.ts +2 -0
  37. package/dist/editor/ai/terminal/useAgentAutoStartOnCreate.d.ts +1 -0
  38. package/dist/editor/ai/terminal/useAgentAutoStartOnCreate.js +3 -1
  39. package/dist/editor/ai/terminal/useAgentAutoStartOnCreate.js.map +1 -1
  40. package/dist/editor/ai/terminal/useAgentDraftInitializer.js +19 -2
  41. package/dist/editor/ai/terminal/useAgentDraftInitializer.js.map +1 -1
  42. package/dist/editor/ai/terminal/useAgentInitialPrompt.d.ts +1 -0
  43. package/dist/editor/ai/terminal/useAgentInitialPrompt.js +3 -1
  44. package/dist/editor/ai/terminal/useAgentInitialPrompt.js.map +1 -1
  45. package/dist/editor/ai/terminal/useAgentPendingInitialPrompt.d.ts +1 -0
  46. package/dist/editor/ai/terminal/useAgentPendingInitialPrompt.js +3 -1
  47. package/dist/editor/ai/terminal/useAgentPendingInitialPrompt.js.map +1 -1
  48. package/dist/editor/ai/terminal/useAgentProfileSelection.d.ts +18 -0
  49. package/dist/editor/ai/terminal/useAgentProfileSelection.js +37 -7
  50. package/dist/editor/ai/terminal/useAgentProfileSelection.js.map +1 -1
  51. package/dist/editor/ai/terminal/useAgentPromptComposerSurface.d.ts +2 -2
  52. package/dist/editor/ai/terminal/useAgentQuickActions.d.ts +2 -2
  53. package/dist/editor/ai/terminal/useAgentQuickActions.js +3 -61
  54. package/dist/editor/ai/terminal/useAgentQuickActions.js.map +1 -1
  55. package/dist/editor/ai/terminal/useAgentSettingsCommands.d.ts +10 -0
  56. package/dist/editor/ai/terminal/useAgentSettingsCommands.js +65 -23
  57. package/dist/editor/ai/terminal/useAgentSettingsCommands.js.map +1 -1
  58. package/dist/editor/ai/terminal/useAgentSettingsPanel.d.ts +1 -1
  59. package/dist/editor/ai/terminal/useAgentSettingsPanel.js +4 -3
  60. package/dist/editor/ai/terminal/useAgentSettingsPanel.js.map +1 -1
  61. package/dist/editor/ai/terminal/useAgentSubmitHandlers.d.ts +1 -0
  62. package/dist/editor/ai/terminal/useAgentSubmitHandlers.js +6 -1
  63. package/dist/editor/ai/terminal/useAgentSubmitHandlers.js.map +1 -1
  64. package/dist/editor/ai/terminal/useAgentTerminalController.d.ts +1 -1
  65. package/dist/editor/ai/terminal/useAgentTerminalController.js +29 -3
  66. package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
  67. package/dist/editor/ai/terminal/useAgentTerminalViewProps.d.ts +1 -0
  68. package/dist/editor/ai/terminal/useAgentTerminalViewProps.js +2 -1
  69. package/dist/editor/ai/terminal/useAgentTerminalViewProps.js.map +1 -1
  70. package/dist/editor/bridge/protocol.d.ts +4 -0
  71. package/dist/editor/bridge/protocol.js.map +1 -1
  72. package/dist/editor/menubar/PageSelector.js +7 -16
  73. package/dist/editor/menubar/PageSelector.js.map +1 -1
  74. package/dist/editor/menubar/pageSelectorHistoryFilter.d.ts +2 -0
  75. package/dist/editor/menubar/pageSelectorHistoryFilter.js +15 -0
  76. package/dist/editor/menubar/pageSelectorHistoryFilter.js.map +1 -0
  77. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +11 -3
  78. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -1
  79. package/dist/editor/page-viewer/MiniMap.d.ts +3 -0
  80. package/dist/editor/page-viewer/MiniMap.js +9 -2
  81. package/dist/editor/page-viewer/MiniMap.js.map +1 -1
  82. package/dist/editor/page-viewer/PageViewerFrame.js +72 -76
  83. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  84. package/dist/editor/page-viewer/bridgeFieldPatch.d.ts +12 -0
  85. package/dist/editor/page-viewer/bridgeFieldPatch.js +34 -0
  86. package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -1
  87. package/dist/editor/page-viewer/bridgeTextCompletion.d.ts +25 -0
  88. package/dist/editor/page-viewer/bridgeTextCompletion.js +98 -0
  89. package/dist/editor/page-viewer/bridgeTextCompletion.js.map +1 -0
  90. package/dist/editor/reviews/Comments.js +31 -2
  91. package/dist/editor/reviews/Comments.js.map +1 -1
  92. package/dist/editor/reviews/CreateReviewDialog.js +3 -1
  93. package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
  94. package/dist/editor/reviews/EditReviewSettingsDialog.js +52 -96
  95. package/dist/editor/reviews/EditReviewSettingsDialog.js.map +1 -1
  96. package/dist/editor/reviews/ReviewCard.d.ts +6 -3
  97. package/dist/editor/reviews/ReviewCard.js +62 -35
  98. package/dist/editor/reviews/ReviewCard.js.map +1 -1
  99. package/dist/editor/reviews/ReviewDetail.d.ts +1 -1
  100. package/dist/editor/reviews/ReviewDetail.js +83 -93
  101. package/dist/editor/reviews/ReviewDetail.js.map +1 -1
  102. package/dist/editor/reviews/ReviewItemsPanel.d.ts +29 -0
  103. package/dist/editor/reviews/ReviewItemsPanel.js +176 -0
  104. package/dist/editor/reviews/ReviewItemsPanel.js.map +1 -0
  105. package/dist/editor/reviews/ReviewersPanel.d.ts +1 -1
  106. package/dist/editor/reviews/ReviewersPanel.js +108 -235
  107. package/dist/editor/reviews/ReviewersPanel.js.map +1 -1
  108. package/dist/editor/reviews/ReviewsList.d.ts +1 -1
  109. package/dist/editor/reviews/ReviewsList.js +116 -67
  110. package/dist/editor/reviews/ReviewsList.js.map +1 -1
  111. package/dist/editor/reviews/SuggestedEdit.js +2 -16
  112. package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
  113. package/dist/editor/reviews/feedbackSelection.d.ts +2 -1
  114. package/dist/editor/reviews/feedbackSelection.js +18 -1
  115. package/dist/editor/reviews/feedbackSelection.js.map +1 -1
  116. package/dist/editor/reviews/pendingFeedbackFocus.d.ts +19 -0
  117. package/dist/editor/reviews/pendingFeedbackFocus.js +36 -0
  118. package/dist/editor/reviews/pendingFeedbackFocus.js.map +1 -0
  119. package/dist/editor/reviews/reviewListPresentation.d.ts +19 -0
  120. package/dist/editor/reviews/reviewListPresentation.js +78 -0
  121. package/dist/editor/reviews/reviewListPresentation.js.map +1 -0
  122. package/dist/editor/services/agentService.js.map +1 -1
  123. package/dist/editor/services/contentService.js +16 -0
  124. package/dist/editor/services/contentService.js.map +1 -1
  125. package/dist/revision.d.ts +2 -2
  126. package/dist/revision.js +2 -2
  127. package/dist/splash-screen/NewPage.d.ts +7 -0
  128. package/dist/splash-screen/NewPage.js +11 -6
  129. package/dist/splash-screen/NewPage.js.map +1 -1
  130. package/dist/types.d.ts +6 -0
  131. package/package.json +1 -1
@@ -1,20 +1,54 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useEffect, useState, useRef } from "react";
3
- import { ReviewersPanel } from "./ReviewersPanel";
4
- import { DecisionsMatrix } from "./DecisionsMatrix";
5
- import { SimpleToolbar } from "../ui/SimpleToolbar";
6
- import { SimpleIconButton } from "../ui/SimpleIconButton";
7
- import { Splitter } from "../ui/Splitter";
8
- import { ArrowLeft, Loader2, Lock, Settings } from "lucide-react";
9
- import { formatDate } from "../utils";
10
- import { Badge } from "../../components/ui/badge";
11
- import { useEditContext } from "../client/editContext";
2
+ import { useEffect, useRef, useState } from "react";
3
+ import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from "../../components/ui/accordion";
4
+ import { CountBadge } from "../../components/ui/badge";
12
5
  import { Button } from "../../components/ui/button";
13
6
  import { Input } from "../../components/ui/input";
14
- import { unlockReview } from "../services/reviewsService";
15
- import { EditReviewSettingsDialog } from "./EditReviewSettingsDialog";
7
+ import { ChevronLeft, Loader2, Lock, Settings } from "lucide-react";
16
8
  import { loadAiProfiles } from "../services/aiService";
9
+ import { unlockReview } from "../services/reviewsService";
10
+ import { formatDate } from "../utils";
11
+ import { useEditContext } from "../client/editContext";
17
12
  import { WatchButton } from "../notifications/WatchButton";
13
+ import { EditReviewSettingsDialog } from "./EditReviewSettingsDialog";
14
+ import { ReviewItemsPanel } from "./ReviewItemsPanel";
15
+ import { ReviewersPanel } from "./ReviewersPanel";
16
+ function ReviewBackButton({ onBack }) {
17
+ return (_jsx("div", { className: "border-border-default shrink-0 border-b px-3 py-1 shadow-xs", children: _jsxs(Button, { variant: "ghost", size: "sm", onClick: onBack, className: "justify-start px-1 text-sm font-medium", "data-testid": "review-detail-back-button", children: [_jsx(ChevronLeft, { className: "h-5 w-5", strokeWidth: 1.25 }), "Back"] }) }));
18
+ }
19
+ function getReviewStatusPresentation(review, assignments, isExpired) {
20
+ if (review.finalDecision === "Approved") {
21
+ return {
22
+ label: "Approved",
23
+ className: "bg-feedback-green-light text-feedback-green",
24
+ };
25
+ }
26
+ if (review.finalDecision === "Rejected") {
27
+ return {
28
+ label: "Rejected",
29
+ className: "bg-feedback-red-light text-feedback-red",
30
+ };
31
+ }
32
+ if (isExpired) {
33
+ return {
34
+ label: "Expired",
35
+ className: "bg-neutral-grey-10 text-neutral-grey-50",
36
+ };
37
+ }
38
+ const hasStarted = assignments.some((assignment) => !!assignment.invitationSentDate ||
39
+ (assignment.decisions?.length ?? 0) > 0);
40
+ return {
41
+ label: hasStarted ? "In progress" : "Pending review",
42
+ className: "bg-feedback-orange-light text-feedback-orange",
43
+ };
44
+ }
45
+ function getLanguageLabel(language) {
46
+ if (language === "*")
47
+ return "All languages";
48
+ if (language === "mixed")
49
+ return "Multiple languages";
50
+ return language;
51
+ }
18
52
  export function ReviewDetail({ reviewId, onBack, multiReview, }) {
19
53
  const editContext = useEditContext();
20
54
  const [selectedReviewerId, setSelectedReviewerId] = useState(null);
@@ -22,20 +56,18 @@ export function ReviewDetail({ reviewId, onBack, multiReview, }) {
22
56
  const [unlocking, setUnlocking] = useState(false);
23
57
  const [unlockError, setUnlockError] = useState(null);
24
58
  const [editSettingsOpen, setEditSettingsOpen] = useState(false);
59
+ const [openSection, setOpenSection] = useState("reviewers");
25
60
  const agentLaunchedRef = useRef(null);
26
61
  useEffect(() => {
27
62
  if (reviewId && !multiReview.reviewDetail) {
28
63
  multiReview.setSelectedReviewId(reviewId);
29
64
  }
30
- // Reset agent launch flag when review ID changes (not when reviewDetail updates)
31
65
  if (agentLaunchedRef.current !== reviewId) {
32
66
  agentLaunchedRef.current = null;
33
67
  }
34
68
  }, [reviewId, multiReview]);
35
- // Auto-launch agent when review is opened/unlocked
36
69
  useEffect(() => {
37
70
  const launchAgentForReview = async () => {
38
- // Only launch once per review ID
39
71
  if (agentLaunchedRef.current === reviewId || !multiReview.reviewDetail) {
40
72
  return;
41
73
  }
@@ -44,37 +76,23 @@ export function ReviewDetail({ reviewId, onBack, multiReview, }) {
44
76
  review.requiresSecret ??
45
77
  false;
46
78
  const secretValidated = multiReview.reviewDetail.secretValidated ?? false;
47
- // Only launch if review is accessible (no secret required, or secret validated, and items are loaded)
48
- if (items.length === 0) {
49
- return; // Items not loaded yet
50
- }
51
- if (requiresSecret && !secretValidated) {
52
- return; // Still needs unlock
53
- }
54
- // Check if user is a preview user (review link context)
55
79
  const isPreviewUser = editContext?.user?.isLimitedPreviewUser ?? false;
56
- if (!isPreviewUser) {
57
- return; // Only auto-launch for preview users accessing via review link
80
+ if (items.length === 0 ||
81
+ (requiresSecret && !secretValidated) ||
82
+ !isPreviewUser) {
83
+ return;
58
84
  }
59
85
  try {
60
- // Load available profiles (will be filtered by backend policy)
61
86
  const profiles = await loadAiProfiles();
62
- if (!profiles || profiles.length === 0) {
63
- return; // No profiles available
64
- }
65
- // Use first available profile
66
- const firstProfile = profiles[0];
67
- if (!firstProfile) {
68
- return; // No profile available
69
- }
70
- // Open agents panel
87
+ const firstProfile = profiles?.[0];
88
+ if (!firstProfile)
89
+ return;
71
90
  editContext?.setShowAgentsPanel?.(true);
72
- // Create agent metadata with review context
73
91
  const metadata = {
74
92
  items: items.map((item) => ({
75
93
  id: item.itemId,
76
94
  language: item.language,
77
- version: 0, // Review items don't have version, default to 0
95
+ version: 0,
78
96
  name: item.name,
79
97
  })),
80
98
  additionalData: {
@@ -83,42 +101,34 @@ export function ReviewDetail({ reviewId, onBack, multiReview, }) {
83
101
  initialPrompt: `This agent is assisting with review: ${review.title || review.reviewId.slice(0, 8)}`,
84
102
  },
85
103
  };
86
- // Dispatch event to create agent
87
104
  setTimeout(() => {
88
- try {
89
- window.dispatchEvent(new CustomEvent("editor:addNewAgent", {
90
- detail: { metadata },
91
- }));
92
- agentLaunchedRef.current = reviewId;
93
- }
94
- catch (e) {
95
- console.error("Failed to launch agent for review:", e);
96
- }
105
+ window.dispatchEvent(new CustomEvent("editor:addNewAgent", {
106
+ detail: { metadata },
107
+ }));
108
+ agentLaunchedRef.current = reviewId;
97
109
  }, 100);
98
110
  }
99
111
  catch (error) {
100
112
  console.error("Failed to launch agent for review:", error);
101
113
  }
102
114
  };
103
- launchAgentForReview();
115
+ void launchAgentForReview();
104
116
  }, [reviewId, multiReview.reviewDetail, editContext]);
105
117
  if (multiReview.loading && !multiReview.reviewDetail) {
106
- return (_jsx("div", { className: "flex h-full items-center justify-center", children: _jsx(Loader2, { className: "h-8 w-8 animate-spin" }) }));
118
+ return (_jsx("div", { className: "flex h-full items-center justify-center", children: _jsx(Loader2, { className: "text-neutral-grey-50 h-7 w-7 animate-spin" }) }));
107
119
  }
108
120
  if (multiReview.error && !multiReview.reviewDetail) {
109
- return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(SimpleToolbar, { children: _jsx(SimpleIconButton, { label: "Back", icon: _jsx(ArrowLeft, { className: "h-4 w-4" }), onClick: onBack }) }), _jsx("div", { className: "flex flex-1 items-center justify-center", children: _jsx("div", { className: "bg-feedback-red-light text-feedback-red rounded p-4", children: multiReview.error }) })] }));
121
+ return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(ReviewBackButton, { onBack: onBack }), _jsx("div", { className: "flex flex-1 items-center justify-center p-4", children: _jsx("div", { className: "bg-feedback-red-light text-feedback-red rounded-lg p-4 text-sm", children: multiReview.error }) })] }));
110
122
  }
111
123
  if (!multiReview.reviewDetail) {
112
- return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(SimpleToolbar, { children: _jsx(SimpleIconButton, { label: "Back", icon: _jsx(ArrowLeft, { className: "h-4 w-4" }), onClick: onBack }) }), _jsx("div", { className: "flex flex-1 items-center justify-center", children: _jsx("div", { className: "text-neutral-grey-50", children: "Review not found" }) })] }));
124
+ return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(ReviewBackButton, { onBack: onBack }), _jsx("div", { className: "text-neutral-grey-50 flex flex-1 items-center justify-center text-sm", children: "Review not found" })] }));
113
125
  }
114
126
  const { review, assignments, items } = multiReview.reviewDetail;
115
- // Extract item IDs for predefined reviewer selector
116
127
  const itemIds = items.map((item) => item.itemId);
117
- // Check if unlock is needed (from the status response, not just review object)
118
128
  const requiresSecret = multiReview.reviewDetail.requiresSecret ?? review.requiresSecret ?? false;
119
129
  const secretValidated = multiReview.reviewDetail.secretValidated ?? false;
120
130
  const isExpired = review.isExpired ?? multiReview.reviewDetail.expired ?? false;
121
- const needsUnlock = requiresSecret && !secretValidated && items.length === 0;
131
+ const needsUnlock = requiresSecret && !secretValidated;
122
132
  const handleUnlock = async () => {
123
133
  if (!secret.trim()) {
124
134
  setUnlockError("Please enter the secret");
@@ -129,10 +139,8 @@ export function ReviewDetail({ reviewId, onBack, multiReview, }) {
129
139
  try {
130
140
  const result = await unlockReview(reviewId, secret);
131
141
  if (result.data?.secretValid) {
132
- // Refresh the review detail to get the items
133
142
  await multiReview.refreshReviewDetail?.();
134
143
  setSecret("");
135
- // Reset agent launch flag so agent can be launched after unlock
136
144
  agentLaunchedRef.current = null;
137
145
  }
138
146
  else if (result.data?.expired) {
@@ -142,50 +150,32 @@ export function ReviewDetail({ reviewId, onBack, multiReview, }) {
142
150
  setUnlockError("Invalid secret. Please try again.");
143
151
  }
144
152
  }
145
- catch (err) {
146
- setUnlockError(err instanceof Error ? err.message : "Failed to unlock review");
153
+ catch (error) {
154
+ setUnlockError(error instanceof Error ? error.message : "Failed to unlock review");
147
155
  }
148
156
  finally {
149
157
  setUnlocking(false);
150
158
  }
151
159
  };
152
- // Show unlock panel if secret is required and not validated
153
- if (needsUnlock || (requiresSecret && !secretValidated)) {
154
- return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(SimpleToolbar, { children: _jsx(SimpleIconButton, { label: "Back", icon: _jsx(ArrowLeft, { className: "h-4 w-4" }), onClick: onBack }) }), _jsx("div", { className: "flex flex-1 items-center justify-center", children: _jsxs("div", { className: "flex w-full max-w-md flex-col items-center gap-4 p-8", children: [_jsx(Lock, { className: "text-neutral-grey-50 h-12 w-12" }), _jsx("h2", { "data-testid": "review-detail-title", className: "text-xl font-medium", children: review.title || `Review ${review.reviewId.slice(0, 8)}` }), _jsx("p", { className: "text-neutral-grey-50 text-center text-sm", children: "This review requires a secret to access. Please enter the secret provided by the review creator." }), isExpired && (_jsx("div", { className: "bg-feedback-red-light text-feedback-red rounded p-3 text-sm", children: "This review has expired and is no longer accessible." })), !isExpired && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex w-full flex-col gap-2", children: [_jsx(Input, { "data-testid": "unlock-secret-input", type: "password", placeholder: "Enter secret", value: secret, onChange: (e) => {
155
- setSecret(e.target.value);
156
- setUnlockError(null);
157
- }, onKeyDown: (e) => {
158
- if (e.key === "Enter") {
159
- handleUnlock();
160
- }
161
- }, disabled: unlocking, autoComplete: "off" }), unlockError && (_jsx("div", { "data-testid": "unlock-error-message", className: "text-feedback-red text-sm", children: unlockError }))] }), _jsx(Button, { "data-testid": "unlock-review-button", onClick: handleUnlock, disabled: unlocking || !secret.trim(), className: "w-full", children: unlocking ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), "Unlocking..."] })) : ("Unlock Review") })] }))] }) })] }));
160
+ if (needsUnlock) {
161
+ return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(ReviewBackButton, { onBack: onBack }), _jsx("div", { className: "flex flex-1 items-center justify-center", children: _jsxs("div", { className: "flex w-full max-w-sm flex-col items-center gap-4 p-6", children: [_jsx(Lock, { className: "text-neutral-grey-50 h-10 w-10", strokeWidth: 1 }), _jsx("h2", { "data-testid": "review-detail-title", className: "text-neutral-grey-100 text-center text-lg font-medium", children: review.title || `Review ${review.reviewId.slice(0, 8)}` }), _jsx("p", { className: "text-neutral-grey-50 text-center text-xs", children: "Enter the secret provided by the review creator to access this review." }), isExpired ? (_jsx("div", { className: "bg-feedback-red-light text-feedback-red w-full rounded-lg p-3 text-center text-xs", children: "This review has expired and is no longer accessible." })) : (_jsxs(_Fragment, { children: [_jsx(Input, { "data-testid": "unlock-secret-input", type: "password", placeholder: "Enter secret", value: secret, onChange: (event) => {
162
+ setSecret(event.target.value);
163
+ setUnlockError(null);
164
+ }, onKeyDown: (event) => {
165
+ if (event.key === "Enter")
166
+ void handleUnlock();
167
+ }, disabled: unlocking, autoComplete: "off" }), unlockError && (_jsx("div", { "data-testid": "unlock-error-message", className: "text-feedback-red text-xs", children: unlockError })), _jsxs(Button, { "data-testid": "unlock-review-button", onClick: handleUnlock, disabled: unlocking || !secret.trim(), className: "w-full", children: [unlocking && _jsx(Loader2, { className: "animate-spin" }), "Unlock review"] })] }))] }) })] }));
162
168
  }
163
- const allReviewersResponded = assignments.every((assignment) => {
164
- const decisionsCount = assignment.decisions?.length || 0;
165
- return decisionsCount === items.length;
166
- });
167
- // Check if current user is the review creator
168
- const isCreator = review.createdBy === editContext?.user?.name;
169
+ const allReviewersResponded = assignments.length > 0 &&
170
+ assignments.every((assignment) => (assignment.decisions?.length ?? 0) === items.length);
169
171
  const isLimitedPreviewUser = editContext?.user?.isLimitedPreviewUser ?? false;
170
- // Build panels array - exclude reviewers panel for limited preview users
171
- const panels = [
172
- ...(isLimitedPreviewUser
173
- ? []
174
- : [
175
- {
176
- name: "reviewers",
177
- defaultSize: 200,
178
- content: (_jsx(ReviewersPanel, { assignments: assignments, onAddReviewer: (reviewers) => multiReview.addReviewersToReview(reviewId, reviewers), onRemoveReviewer: (assignmentId) => multiReview.removeReviewerFromReview(assignmentId), onSendInvitations: (assignmentIds) => multiReview.sendReviewInvitations(assignmentIds), loading: multiReview.loading, selectedReviewerId: selectedReviewerId, onSelectReviewer: setSelectedReviewerId, itemIds: itemIds, language: review.language })),
179
- },
180
- ]),
181
- {
182
- name: "decisions",
183
- defaultSize: "auto",
184
- content: (_jsx(DecisionsMatrix, { items: items, assignments: assignments, onMakeDecision: multiReview.makeItemDecision, loading: multiReview.loading, reviewId: reviewId, language: review.language, finalDecision: review.finalDecision, onSetFinalDecision: (decision) => multiReview.setReviewFinalDecision(reviewId, decision), onAddPages: (items) => multiReview.addPages(reviewId, items), onRemovePages: (items) => multiReview.removePages(reviewId, items), allReviewersResponded: allReviewersResponded, selectedReviewerId: selectedReviewerId, onSelectReviewer: setSelectedReviewerId, currentUserEmail: editContext?.user?.email, requiredApprovals: review.requiredApprovals })),
185
- },
186
- ];
187
- return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(SimpleToolbar, { children: _jsx(SimpleIconButton, { label: "Back", icon: _jsx(ArrowLeft, { className: "h-4 w-4" }), onClick: onBack }) }), _jsx("div", { className: "border-b p-4", children: _jsxs("div", { className: "flex items-start justify-between", children: [_jsxs("div", { className: "flex-1", children: [_jsx("h2", { "data-testid": "review-detail-title", className: "text-lg font-medium", children: review.title || `Review ${review.reviewId.slice(0, 8)}` }), _jsxs("div", { className: "text-neutral-grey-50 mt-2 flex items-center gap-4 text-xs", children: [_jsxs("span", { children: ["Created: ", formatDate(new Date(review.createdAt))] }), _jsxs("span", { children: ["By: ", review.createdBy] }), _jsxs("span", { className: "flex items-center gap-1", children: ["Language:", " ", review.language === "*" ? (_jsx(Badge, { variant: "outline", children: "All Languages" })) : review.language === "mixed" ? (_jsx("span", { children: "Multiple Languages" })) : (review.language)] })] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(WatchButton, { targetType: "review", targetId: reviewId }), isCreator && (_jsx(SimpleIconButton, { "data-testid": "review-edit-settings-button", label: "Edit Settings", icon: _jsx(Settings, { className: "h-4 w-4" }), onClick: () => setEditSettingsOpen(true) }))] })] }) }), _jsx(Splitter, { direction: "vertical", localStorageKey: `review-detail-splitter-${reviewId}`, panels: panels }), _jsx(EditReviewSettingsDialog, { open: editSettingsOpen, onOpenChange: setEditSettingsOpen, review: review, items: items, reviewersCount: assignments.length, onUpdated: async () => {
188
- // Refresh review detail after settings update
172
+ const isCreator = [editContext?.user?.name, editContext?.user?.fullName].some((identity) => !!identity &&
173
+ review.createdBy.localeCompare(identity, undefined, {
174
+ sensitivity: "accent",
175
+ }) === 0);
176
+ const status = getReviewStatusPresentation(review, assignments, isExpired);
177
+ const resolvedOpenSection = isLimitedPreviewUser && openSection === "reviewers" ? "items" : openSection;
178
+ return (_jsxs("div", { className: "flex h-full flex-col bg-white", children: [_jsx(ReviewBackButton, { onBack: onBack }), _jsxs("div", { className: "min-h-0 flex-1 overflow-y-auto px-3 py-2.5", children: [_jsxs("div", { className: "group mb-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: `rounded-[5px] px-2 py-1 text-[11px] leading-none font-semibold ${status.className}`, children: status.label }), _jsxs("div", { className: "ml-auto flex items-center gap-1 opacity-0 transition-opacity group-hover:opacity-100 focus-within:opacity-100", children: [_jsx(WatchButton, { targetType: "review", targetId: reviewId }), isCreator && (_jsx(Button, { variant: "ghost", size: "iconXs", onClick: () => setEditSettingsOpen(true), "data-testid": "review-edit-settings-button", title: "Edit review settings", children: _jsx(Settings, {}) }))] })] }), _jsx("h2", { "data-testid": "review-detail-title", className: "text-neutral-grey-100 mt-1 truncate text-base leading-tight font-medium", children: review.title || `Review ${review.reviewId.slice(0, 8)}` }), _jsxs("div", { className: "text-neutral-grey-50 mt-1 text-xs leading-5", children: [_jsxs("div", { children: ["Created: ", formatDate(new Date(review.createdAt)), " by", " ", review.createdBy] }), _jsxs("div", { children: ["Language: ", getLanguageLabel(review.language)] })] })] }), _jsxs(Accordion, { type: "single", collapsible: true, value: resolvedOpenSection, onValueChange: setOpenSection, className: "space-y-2", children: [!isLimitedPreviewUser && (_jsxs(AccordionItem, { value: "reviewers", className: "border-border-default data-[state=closed]:bg-neutral-grey-5 overflow-hidden rounded-xl border", children: [_jsx(AccordionTrigger, { className: "px-3 py-2.5 text-xs font-medium hover:no-underline", children: _jsxs("span", { className: "flex items-center gap-2", children: ["Reviewers", resolvedOpenSection === "reviewers" && (_jsx(CountBadge, { children: assignments.length }))] }) }), _jsx(AccordionContent, { children: _jsx("div", { className: "px-3 pb-3", children: _jsx(ReviewersPanel, { assignments: assignments, onAddReviewer: (reviewers) => multiReview.addReviewersToReview(reviewId, reviewers), onRemoveReviewer: (assignmentId) => multiReview.removeReviewerFromReview(assignmentId), onSendInvitations: (assignmentIds) => multiReview.sendReviewInvitations(assignmentIds), loading: multiReview.loading, selectedReviewerId: selectedReviewerId, onSelectReviewer: setSelectedReviewerId, itemIds: itemIds, language: review.language }) }) })] })), _jsxs(AccordionItem, { value: "items", className: "border-border-default data-[state=closed]:bg-neutral-grey-5 overflow-hidden rounded-xl border", children: [_jsx(AccordionTrigger, { className: "px-3 py-2.5 text-xs font-medium hover:no-underline", children: _jsxs("span", { className: "flex items-center gap-2", children: ["Review Items", resolvedOpenSection === "items" && (_jsx(CountBadge, { children: items.length }))] }) }), _jsx(AccordionContent, { children: _jsx("div", { className: "px-3 pb-3", children: _jsx(ReviewItemsPanel, { review: review, items: items, assignments: assignments, onMakeDecision: multiReview.makeItemDecision, loading: multiReview.loading, onSetFinalDecision: (decision) => multiReview.setReviewFinalDecision(reviewId, decision), onAddPages: (pages) => multiReview.addPages(reviewId, pages), onRemovePages: (pages) => multiReview.removePages(reviewId, pages), allReviewersResponded: allReviewersResponded, selectedReviewerId: selectedReviewerId, onSelectReviewer: setSelectedReviewerId, currentUserEmail: editContext?.user?.email, requiredApprovals: review.requiredApprovals }) }) })] })] })] }), _jsx(EditReviewSettingsDialog, { open: editSettingsOpen, onOpenChange: setEditSettingsOpen, review: review, items: items, reviewersCount: assignments.length, onUpdated: async () => {
189
179
  await multiReview.refreshReviewDetail?.();
190
180
  } })] }));
191
181
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ReviewDetail.js","sourceRoot":"","sources":["../../../src/editor/reviews/ReviewDetail.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReviewDetail.js","sourceRoot":"","sources":["../../../src/editor/reviews/ReviewDetail.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { ItemWithSubtree, ReviewAssignment, ReviewWithPages } from "../../types";
2
+ import type { ItemDescriptor } from "../pageModel";
3
+ type ReviewItem = {
4
+ itemId: string;
5
+ language: string;
6
+ includeSubitems: boolean;
7
+ name?: string;
8
+ path?: string;
9
+ decisionsCount?: number;
10
+ commentsCount?: number;
11
+ suggestionsCount?: number;
12
+ };
13
+ type ReviewItemsPanelProps = {
14
+ review: ReviewWithPages;
15
+ items: ReviewItem[];
16
+ assignments: ReviewAssignment[];
17
+ onMakeDecision: (assignmentId: string, itemId: string, itemLanguage: string, itemVersion: number | undefined, decision: "Approved" | "Rejected") => Promise<void>;
18
+ loading: boolean;
19
+ onSetFinalDecision: (decision: "Approved" | "Rejected") => Promise<void>;
20
+ onAddPages: (items: ItemWithSubtree[]) => Promise<void>;
21
+ onRemovePages: (items: ItemDescriptor[]) => Promise<void>;
22
+ allReviewersResponded: boolean;
23
+ selectedReviewerId?: string | null;
24
+ onSelectReviewer: (assignmentId: string | null) => void;
25
+ currentUserEmail?: string;
26
+ requiredApprovals?: number;
27
+ };
28
+ export declare function ReviewItemsPanel({ review, items, assignments, onMakeDecision, loading, onSetFinalDecision, onAddPages, onRemovePages, allReviewersResponded, selectedReviewerId, onSelectReviewer, currentUserEmail, requiredApprovals, }: ReviewItemsPanelProps): import("react").JSX.Element;
29
+ export {};
@@ -0,0 +1,176 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo, useState } from "react";
3
+ import { Avatar } from "../../components/ui/avatar";
4
+ import { Button } from "../../components/ui/button";
5
+ import { Checkbox } from "../../components/ui/checkbox";
6
+ import { Popover, PopoverContent, PopoverTrigger, } from "../../components/ui/popover";
7
+ import { Select } from "../../components/ui/select";
8
+ import { cn } from "../../lib/utils";
9
+ import { Check, Lightbulb, Loader2, MessageSquare, Plus, Trash2, X, } from "lucide-react";
10
+ import { useEditContext } from "../client/editContext";
11
+ import { ItemTreeSelector } from "./ItemTreeSelector";
12
+ const reviewerAvatarClasses = [
13
+ "bg-feedback-blue text-white",
14
+ "bg-feedback-orange text-white",
15
+ "bg-highlight-100 text-white",
16
+ "bg-feedback-green text-white",
17
+ "bg-feedback-red text-white",
18
+ ];
19
+ function getReviewerAvatarClassName(index) {
20
+ return reviewerAvatarClasses[index];
21
+ }
22
+ export function ReviewItemsPanel({ review, items, assignments, onMakeDecision, loading, onSetFinalDecision, onAddPages, onRemovePages, allReviewersResponded, selectedReviewerId, onSelectReviewer, currentUserEmail, requiredApprovals = 1, }) {
23
+ const editContext = useEditContext();
24
+ const isLimitedPreviewUser = editContext?.user?.isLimitedPreviewUser ?? false;
25
+ const [filter, setFilter] = useState("all");
26
+ const [isAddPopoverOpen, setIsAddPopoverOpen] = useState(false);
27
+ const [selectedItems, setSelectedItems] = useState([]);
28
+ const [selectedForRemoval, setSelectedForRemoval] = useState(new Set());
29
+ const approvalThreshold = Math.max(requiredApprovals, 1);
30
+ const displayAssignments = useMemo(() => {
31
+ let filtered = assignments;
32
+ if (isLimitedPreviewUser && currentUserEmail) {
33
+ filtered = filtered.filter((assignment) => assignment.reviewerEmail.toLowerCase() ===
34
+ currentUserEmail.toLowerCase());
35
+ }
36
+ if (selectedReviewerId) {
37
+ filtered = filtered.filter((assignment) => assignment.assignmentId === selectedReviewerId);
38
+ }
39
+ return filtered;
40
+ }, [assignments, currentUserEmail, isLimitedPreviewUser, selectedReviewerId]);
41
+ const userAssignment = assignments.find((assignment) => currentUserEmail &&
42
+ assignment.reviewerEmail.toLowerCase() === currentUserEmail.toLowerCase());
43
+ const getDecision = (assignment, item) => assignment.decisions?.find((decision) => decision.itemId === item.itemId &&
44
+ decision.itemLanguage === item.language);
45
+ const getApprovalCount = (item) => assignments.filter((assignment) => getDecision(assignment, item)?.decision === "Approved").length;
46
+ const getItemStatus = (item) => {
47
+ const approvalCount = getApprovalCount(item);
48
+ const rejectionCount = assignments.filter((assignment) => getDecision(assignment, item)?.decision === "Rejected").length;
49
+ const pendingCount = assignments.length - approvalCount - rejectionCount;
50
+ if (approvalCount >= approvalThreshold)
51
+ return "approved";
52
+ if (approvalCount + pendingCount < approvalThreshold)
53
+ return "rejected";
54
+ return "pending";
55
+ };
56
+ const filteredItems = items.filter((item) => filter === "all" || getItemStatus(item) === filter);
57
+ const handleAddSelectedPages = async () => {
58
+ if (selectedItems.length === 0)
59
+ return;
60
+ await onAddPages(selectedItems.map((descriptor) => ({
61
+ descriptor,
62
+ includeSubitems: false,
63
+ })));
64
+ setSelectedItems([]);
65
+ setIsAddPopoverOpen(false);
66
+ };
67
+ const handleMakeDecision = async (assignment, item, decision) => {
68
+ let itemVersion;
69
+ const currentItem = editContext?.currentItemDescriptor;
70
+ if (currentItem?.id === item.itemId &&
71
+ (currentItem.language === item.language || item.language === "*") &&
72
+ currentItem.version !== 0) {
73
+ itemVersion = currentItem.version;
74
+ }
75
+ await onMakeDecision(assignment.assignmentId, item.itemId, item.language, itemVersion, decision);
76
+ };
77
+ const handleLoadItem = (item) => {
78
+ editContext?.loadItem?.({
79
+ id: item.itemId,
80
+ language: item.language === "*"
81
+ ? editContext.currentItemDescriptor?.language || "en"
82
+ : item.language,
83
+ version: 0,
84
+ });
85
+ };
86
+ const handleRemoveSelected = () => {
87
+ if (selectedForRemoval.size === 0)
88
+ return;
89
+ const pages = items
90
+ .filter((item) => selectedForRemoval.has(`${item.itemId}:${item.language}`))
91
+ .map((item) => ({
92
+ id: item.itemId,
93
+ language: item.language,
94
+ version: 0,
95
+ }));
96
+ const remove = async () => {
97
+ await onRemovePages(pages);
98
+ setSelectedForRemoval(new Set());
99
+ };
100
+ if (editContext?.confirm) {
101
+ editContext.confirm({
102
+ header: "Remove Review Items",
103
+ message: `Remove ${pages.length} item${pages.length === 1 ? "" : "s"} from this review?`,
104
+ acceptLabel: "Remove",
105
+ showCancel: true,
106
+ accept: remove,
107
+ });
108
+ }
109
+ else {
110
+ void remove();
111
+ }
112
+ };
113
+ return (_jsxs("div", { className: "flex flex-col gap-2.5", "data-testid": "review-items-panel", children: [!isLimitedPreviewUser && (_jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Popover, { open: isAddPopoverOpen, onOpenChange: setIsAddPopoverOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", size: "lg", className: "h-10 flex-1 rounded-lg text-xs font-medium focus-visible:ring-0", "data-testid": "add-pages-button", children: ["Add review item", _jsx(Plus, { className: "h-5 w-5", strokeWidth: 1.25 })] }) }), _jsx(PopoverContent, { className: "m-2 w-[min(600px,calc(100vw-32px))] p-0", align: "start", "data-testid": "page-selector-popover", children: _jsxs("div", { className: "flex flex-col gap-2 p-3", children: [_jsx("div", { className: "text-sm font-medium", children: "Select pages" }), _jsx(ItemTreeSelector, { selectedItems: selectedItems, onItemsChange: setSelectedItems, language: review.language, height: "350px" }), _jsxs("div", { className: "border-border-default flex justify-end gap-2 border-t pt-2", children: [_jsx(Button, { variant: "outline", size: "sm", onClick: () => {
114
+ setSelectedItems([]);
115
+ setIsAddPopoverOpen(false);
116
+ }, children: "Cancel" }), _jsxs(Button, { size: "sm", onClick: handleAddSelectedPages, disabled: selectedItems.length === 0 || loading, children: [_jsx(Plus, {}), "Add ", selectedItems.length || "", " item", selectedItems.length === 1 ? "" : "s"] })] })] }) })] }), selectedForRemoval.size > 0 && (_jsx(Button, { variant: "destructive", size: "icon", onClick: handleRemoveSelected, disabled: loading, title: "Remove selected review items", children: _jsx(Trash2, {}) }))] })), _jsxs("div", { className: "grid grid-cols-2 gap-2", children: [_jsx(Select, { value: filter, onValueChange: (value) => setFilter(value), options: [
117
+ { value: "all", label: "All status" },
118
+ { value: "pending", label: "In progress" },
119
+ { value: "approved", label: "Approved" },
120
+ { value: "rejected", label: "Rejected" },
121
+ ], className: "h-8 rounded-lg px-3", "data-testid": "review-items-status-filter" }), _jsx(Select, { value: selectedReviewerId || "all", onValueChange: (value) => onSelectReviewer(value === "all" ? null : value), options: [
122
+ { value: "all", label: "All reviewers" },
123
+ ...assignments.map((assignment) => ({
124
+ value: assignment.assignmentId,
125
+ label: assignment.reviewerName || assignment.reviewerEmail,
126
+ })),
127
+ ], className: "h-8 rounded-lg px-3", disabled: isLimitedPreviewUser, "data-testid": "review-items-reviewer-filter" })] }), allReviewersResponded &&
128
+ !review.finalDecision &&
129
+ !isLimitedPreviewUser && (_jsxs("div", { className: "bg-neutral-grey-5 flex items-center justify-between gap-2 rounded-lg p-2", children: [_jsx("span", { className: "text-neutral-grey-50 text-[11px]", children: "All reviewers responded" }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsxs(Button, { variant: "ghost", size: "xs", className: "text-feedback-green hover:bg-feedback-green-light", onClick: () => onSetFinalDecision("Approved"), children: [_jsx(Check, {}), " Approve"] }), _jsxs(Button, { variant: "ghost", size: "xs", className: "text-feedback-red hover:bg-feedback-red-light", onClick: () => onSetFinalDecision("Rejected"), children: [_jsx(X, {}), " Reject"] })] })] })), filteredItems.length === 0 ? (_jsx("div", { className: "text-neutral-grey-50 py-5 text-center text-xs", children: "No review items match these filters" })) : (_jsx("div", { className: "space-y-1", children: filteredItems.map((item) => {
130
+ const approvalCount = getApprovalCount(item);
131
+ const status = getItemStatus(item);
132
+ const itemKey = `${item.itemId}:${item.language}`;
133
+ const isCurrentItem = editContext?.currentItemDescriptor?.id === item.itemId &&
134
+ (item.language === "*" ||
135
+ editContext.currentItemDescriptor.language === item.language);
136
+ const commentCount = item.commentsCount ?? 0;
137
+ const suggestionCount = item.suggestionsCount ?? 0;
138
+ const assignmentsWithDecisions = displayAssignments.filter((assignment) => !!getDecision(assignment, item));
139
+ const visibleAssignments = assignmentsWithDecisions.slice(0, 3);
140
+ const remainingAssignments = Math.max(assignmentsWithDecisions.length - visibleAssignments.length, 0);
141
+ const currentUserDecision = userAssignment
142
+ ? getDecision(userAssignment, item)
143
+ : undefined;
144
+ return (_jsxs("div", { className: cn("group hover:bg-neutral-grey-5 flex cursor-pointer items-center gap-2 rounded-xl px-2 py-2 transition-colors", isCurrentItem && "bg-neutral-grey-5"), onClick: () => handleLoadItem(item), "data-testid": `review-item-row-${item.itemId}-${item.language}`, children: [!isLimitedPreviewUser && (_jsx(Checkbox, { checked: selectedForRemoval.has(itemKey), onCheckedChange: (checked) => {
145
+ setSelectedForRemoval((current) => {
146
+ const next = new Set(current);
147
+ if (checked)
148
+ next.add(itemKey);
149
+ else
150
+ next.delete(itemKey);
151
+ return next;
152
+ });
153
+ }, onClick: (event) => event.stopPropagation(), className: cn("shrink-0 transition-opacity", selectedForRemoval.has(itemKey)
154
+ ? "opacity-100"
155
+ : "opacity-0 group-hover:opacity-100"), "aria-label": `Select ${item.name || item.path || "review item"}` })), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "text-neutral-grey-100 truncate text-xs font-medium", children: [item.name || item.path || item.itemId, " (", item.language, ")"] }), _jsxs("div", { className: cn("mt-0.5 text-xs", status === "approved"
156
+ ? "text-feedback-green"
157
+ : status === "rejected"
158
+ ? "text-feedback-red"
159
+ : "text-neutral-grey-50"), children: [approvalCount, "/", approvalThreshold, " approvals", item.includeSubitems && " · includes subitems"] })] }), _jsxs("div", { className: "flex shrink-0 flex-col items-end gap-1", children: [_jsxs("div", { className: "flex items-center", children: [_jsx("div", { className: "flex -space-x-1.5", children: visibleAssignments.map((assignment) => {
160
+ const decision = getDecision(assignment, item);
161
+ const displayName = assignment.reviewerName ||
162
+ assignment.reviewerEmail ||
163
+ "Reviewer";
164
+ const assignmentIndex = Math.max(assignments.findIndex((candidate) => candidate.assignmentId ===
165
+ assignment.assignmentId), 0);
166
+ return (_jsxs("div", { className: "relative", title: `${displayName}: ${decision?.decision || "Pending"}`, children: [_jsx(Avatar, { name: displayName, fallbackClassName: getReviewerAvatarClassName(assignmentIndex % reviewerAvatarClasses.length), bordered: true, className: "size-7 text-[10px]" }), decision && (_jsx("span", { className: cn("absolute -right-0.5 -bottom-0.5 grid size-3.5 place-items-center rounded-full border border-white text-white", decision.decision === "Approved"
167
+ ? "bg-feedback-green"
168
+ : "bg-feedback-red"), children: decision.decision === "Approved" ? (_jsx(Check, { className: "size-2.5", strokeWidth: 3 })) : (_jsx(X, { className: "size-2.5", strokeWidth: 3 })) }))] }, assignment.assignmentId));
169
+ }) }), remainingAssignments > 0 && (_jsxs("span", { className: "text-neutral-grey-50 ml-1 text-[10px]", children: ["+", remainingAssignments] }))] }), (commentCount > 0 || suggestionCount > 0) && (_jsxs("div", { className: "text-neutral-grey-50 flex items-center gap-2 text-[11px]", children: [commentCount > 0 && (_jsxs("span", { className: "flex items-center gap-1", children: [_jsx(MessageSquare, { className: "h-3 w-3" }), commentCount, " comment", commentCount === 1 ? "" : "s"] })), suggestionCount > 0 && (_jsxs("span", { className: "flex items-center gap-1", children: [_jsx(Lightbulb, { className: "h-3 w-3" }), suggestionCount] }))] })), userAssignment && (_jsxs("div", { className: cn("flex items-center gap-0.5 transition-opacity", isLimitedPreviewUser
170
+ ? "opacity-100"
171
+ : "opacity-0 group-hover:opacity-100 focus-visible:opacity-100"), onClick: (event) => event.stopPropagation(), children: [_jsx(Button, { variant: "ghost", size: "iconXs", className: cn("hover:bg-feedback-green-light hover:text-feedback-green", currentUserDecision?.decision === "Approved" &&
172
+ "bg-feedback-green-light text-feedback-green"), onClick: () => handleMakeDecision(userAssignment, item, "Approved"), disabled: loading, title: "Approve this item", children: _jsx(Check, {}) }), _jsx(Button, { variant: "ghost", size: "iconXs", className: cn("hover:bg-feedback-red-light hover:text-feedback-red", currentUserDecision?.decision === "Rejected" &&
173
+ "bg-feedback-red-light text-feedback-red"), onClick: () => handleMakeDecision(userAssignment, item, "Rejected"), disabled: loading, title: "Reject this item", children: _jsx(X, {}) })] }))] })] }, itemKey));
174
+ }) })), loading && (_jsxs("div", { className: "text-neutral-grey-50 flex items-center justify-center gap-2 py-2 text-[11px]", children: [_jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin" }), "Updating review"] }))] }));
175
+ }
176
+ //# sourceMappingURL=ReviewItemsPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewItemsPanel.js","sourceRoot":"","sources":["../../../src/editor/reviews/ReviewItemsPanel.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { ReviewAssignment, ReviewerInfo } from "../../types";
1
+ import type { ReviewAssignment, ReviewerInfo } from "../../types";
2
2
  type ReviewersPanelProps = {
3
3
  assignments: ReviewAssignment[];
4
4
  onAddReviewer: (reviewers: ReviewerInfo[]) => Promise<void>;