@parhelia/core 0.1.12798 → 0.1.12800
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.
- package/dist/config/config.js +9 -2
- package/dist/config/config.js.map +1 -1
- package/dist/editor/ai/AgentPanesGrid.js +8 -7
- package/dist/editor/ai/AgentPanesGrid.js.map +1 -1
- package/dist/editor/menubar/ActiveUsers.js +1 -1
- package/dist/editor/menubar/ActiveUsers.js.map +1 -1
- package/dist/editor/notifications/WatchButton.d.ts +1 -2
- package/dist/editor/notifications/WatchButton.js +24 -40
- package/dist/editor/notifications/WatchButton.js.map +1 -1
- package/dist/editor/notifications/useNotificationSubscriptions.d.ts +8 -0
- package/dist/editor/notifications/useNotificationSubscriptions.js +25 -1
- package/dist/editor/notifications/useNotificationSubscriptions.js.map +1 -1
- package/dist/editor/notifications/watchEventOptions.d.ts +13 -0
- package/dist/editor/notifications/watchEventOptions.js +108 -0
- package/dist/editor/notifications/watchEventOptions.js.map +1 -0
- package/dist/editor/services/notificationService.d.ts +3 -0
- package/dist/editor/services/notificationService.js.map +1 -1
- package/dist/editor/services/reviewsService.d.ts +3 -0
- package/dist/editor/services/reviewsService.js +4 -0
- package/dist/editor/services/reviewsService.js.map +1 -1
- package/dist/editor/settings/SettingsView.js +2 -2
- package/dist/editor/settings/panels/NotificationSubscriptionsPanel.d.ts +2 -0
- package/dist/editor/settings/panels/NotificationSubscriptionsPanel.js +137 -0
- package/dist/editor/settings/panels/NotificationSubscriptionsPanel.js.map +1 -0
- package/dist/editor/settings/panels/index.d.ts +1 -0
- package/dist/editor/settings/panels/index.js +1 -0
- package/dist/editor/settings/panels/index.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/splash-screen/ModernSplashScreen.js +135 -4
- package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
- package/dist/splash-screen/OpenPage.js +9 -16
- package/dist/splash-screen/OpenPage.js.map +1 -1
- package/dist/task-board/components/TaskBoardMyTasksSidebar.js +20 -23
- package/dist/task-board/components/TaskBoardMyTasksSidebar.js.map +1 -1
- package/dist/task-board/services/taskService.d.ts +7 -0
- package/dist/task-board/services/taskService.js +4 -0
- package/dist/task-board/services/taskService.js.map +1 -1
- package/dist/tour/Tour.js +3 -3
- package/dist/tour/Tour.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { AlertTriangle, Bot, Check, Flag, ListChecks, MessageSquare, PenLine, UserCheck, UserPlus, X, } from "lucide-react";
|
|
2
|
+
import { notificationEventTypes } from "../services/notificationService";
|
|
3
|
+
const itemWatchEventOptions = [
|
|
4
|
+
{
|
|
5
|
+
eventType: notificationEventTypes.itemChanged,
|
|
6
|
+
label: "Modifications",
|
|
7
|
+
icon: PenLine,
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
eventType: notificationEventTypes.feedback,
|
|
11
|
+
label: "Feedback",
|
|
12
|
+
icon: MessageSquare,
|
|
13
|
+
},
|
|
14
|
+
];
|
|
15
|
+
const projectWatchEventOptions = [
|
|
16
|
+
{
|
|
17
|
+
eventType: notificationEventTypes.projectAttentionRequired,
|
|
18
|
+
label: "Attention required",
|
|
19
|
+
icon: AlertTriangle,
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
eventType: notificationEventTypes.projectTaskCompleted,
|
|
23
|
+
label: "Task completed",
|
|
24
|
+
icon: Check,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
eventType: notificationEventTypes.projectFinished,
|
|
28
|
+
label: "Project finished",
|
|
29
|
+
icon: Flag,
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
const reviewWatchEventOptions = [
|
|
33
|
+
{
|
|
34
|
+
eventType: notificationEventTypes.reviewInvitation,
|
|
35
|
+
label: "Review invitation",
|
|
36
|
+
icon: UserPlus,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
eventType: notificationEventTypes.reviewCompleted,
|
|
40
|
+
label: "Review completed",
|
|
41
|
+
icon: UserCheck,
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
eventType: notificationEventTypes.reviewRejected,
|
|
45
|
+
label: "Review rejected",
|
|
46
|
+
icon: X,
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
const agentRunWatchEventOptions = [
|
|
50
|
+
{
|
|
51
|
+
eventType: notificationEventTypes.agentNotification,
|
|
52
|
+
label: "Agent notification",
|
|
53
|
+
icon: Bot,
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
// Additional event types that may appear on subscriptions but are not part of
|
|
57
|
+
// the per-target-type default option lists (e.g. project task assignments).
|
|
58
|
+
// Provided so the settings panel can label any event type emitted by the
|
|
59
|
+
// backend, even when it's not selectable from the WatchButton dropdown.
|
|
60
|
+
const extraEventLabels = {
|
|
61
|
+
[notificationEventTypes.taskAssigned]: { label: "Task assigned", icon: ListChecks },
|
|
62
|
+
[notificationEventTypes.taskStatusChanged]: {
|
|
63
|
+
label: "Task status changed",
|
|
64
|
+
icon: ListChecks,
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
export function getWatchEventOptions(targetType) {
|
|
68
|
+
switch (targetType) {
|
|
69
|
+
case "item":
|
|
70
|
+
return itemWatchEventOptions;
|
|
71
|
+
case "project":
|
|
72
|
+
return projectWatchEventOptions;
|
|
73
|
+
case "review":
|
|
74
|
+
return reviewWatchEventOptions;
|
|
75
|
+
case "agent-run":
|
|
76
|
+
return agentRunWatchEventOptions;
|
|
77
|
+
default:
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const allOptions = [
|
|
82
|
+
...itemWatchEventOptions,
|
|
83
|
+
...projectWatchEventOptions,
|
|
84
|
+
...reviewWatchEventOptions,
|
|
85
|
+
...agentRunWatchEventOptions,
|
|
86
|
+
];
|
|
87
|
+
const optionByEventType = new Map(allOptions.map((option) => [option.eventType, option]));
|
|
88
|
+
export function getEventTypeLabel(eventType) {
|
|
89
|
+
const option = optionByEventType.get(eventType);
|
|
90
|
+
if (option)
|
|
91
|
+
return option.label;
|
|
92
|
+
const extra = extraEventLabels[eventType];
|
|
93
|
+
if (extra)
|
|
94
|
+
return extra.label;
|
|
95
|
+
return eventType;
|
|
96
|
+
}
|
|
97
|
+
export function getEventTypeIcon(eventType) {
|
|
98
|
+
const option = optionByEventType.get(eventType);
|
|
99
|
+
if (option)
|
|
100
|
+
return option.icon;
|
|
101
|
+
const extra = extraEventLabels[eventType];
|
|
102
|
+
if (extra)
|
|
103
|
+
return extra.icon;
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
// Re-export for legacy importers in WatchButton.tsx.
|
|
107
|
+
export { itemWatchEventOptions, projectWatchEventOptions };
|
|
108
|
+
//# sourceMappingURL=watchEventOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watchEventOptions.js","sourceRoot":"","sources":["../../../src/editor/notifications/watchEventOptions.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,9 @@ export type NotificationSubscription = {
|
|
|
35
35
|
isAuto: boolean;
|
|
36
36
|
isMuted: boolean;
|
|
37
37
|
createdAt: string;
|
|
38
|
+
displayName?: string | null;
|
|
39
|
+
path?: string | null;
|
|
40
|
+
exists?: boolean;
|
|
38
41
|
};
|
|
39
42
|
export type SubscribeNotificationRequest = {
|
|
40
43
|
targetType: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notificationService.js","sourceRoot":"","sources":["../../../src/editor/services/notificationService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAwB,MAAM,iBAAiB,CAAC;AAElE,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,WAAW,EAAE,cAAc;IAC3B,QAAQ,EAAE,UAAU;IACpB,gBAAgB,EAAE,mBAAmB;IACrC,eAAe,EAAE,kBAAkB;IACnC,cAAc,EAAE,iBAAiB;IACjC,YAAY,EAAE,eAAe;IAC7B,iBAAiB,EAAE,qBAAqB;IACxC,wBAAwB,EAAE,4BAA4B;IACtD,oBAAoB,EAAE,wBAAwB;IAC9C,eAAe,EAAE,kBAAkB;IACnC,iBAAiB,EAAE,oBAAoB;CAC/B,CAAC;AAEX,MAAM,UAAU,gCAAgC,CAAC,UAAkB;IACjE,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,CAAC,sBAAsB,CAAC,WAAW,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAC/E,KAAK,QAAQ;YACX,OAAO;gBACL,sBAAsB,CAAC,gBAAgB;gBACvC,sBAAsB,CAAC,eAAe;gBACtC,sBAAsB,CAAC,cAAc;aACtC,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO;gBACL,sBAAsB,CAAC,wBAAwB;gBAC/C,sBAAsB,CAAC,oBAAoB;gBAC3C,sBAAsB,CAAC,eAAe;aACvC,CAAC;QACJ,KAAK,WAAW;YACd,OAAO,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;QACpD;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"notificationService.js","sourceRoot":"","sources":["../../../src/editor/services/notificationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,9 @@ export declare function createReview(request: CreateReviewRequest): Promise<impo
|
|
|
13
13
|
reviewId: string;
|
|
14
14
|
}>>;
|
|
15
15
|
export declare function getAllReviews(language?: string): Promise<import("./serviceHelper").ExecutionResult<ReviewListItem[]>>;
|
|
16
|
+
export declare function getMyReviews(options?: {
|
|
17
|
+
excludeFinished?: boolean;
|
|
18
|
+
}): Promise<import("./serviceHelper").ExecutionResult<ReviewListItem[]>>;
|
|
16
19
|
export declare function getReviewStatus(reviewId: string): Promise<import("./serviceHelper").ExecutionResult<{
|
|
17
20
|
review: ReviewWithPages;
|
|
18
21
|
assignments: ReviewAssignment[];
|
|
@@ -49,6 +49,10 @@ export function getAllReviews(language) {
|
|
|
49
49
|
// Don't filter by language in the reviews list - show all reviews
|
|
50
50
|
return get(`/parhelia/reviews/all`);
|
|
51
51
|
}
|
|
52
|
+
export function getMyReviews(options) {
|
|
53
|
+
const excludeFinished = options?.excludeFinished !== false;
|
|
54
|
+
return get(`/parhelia/reviews/mine?excludeFinished=${excludeFinished ? "true" : "false"}`);
|
|
55
|
+
}
|
|
52
56
|
export function getReviewStatus(reviewId) {
|
|
53
57
|
return get(`/parhelia/reviews/status?reviewId=${reviewId}`);
|
|
54
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewsService.js","sourceRoot":"","sources":["../../../src/editor/services/reviewsService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reviewsService.js","sourceRoot":"","sources":["../../../src/editor/services/reviewsService.ts"],"names":[],"mappings":"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"}
|
|
@@ -138,9 +138,9 @@ export function SettingsView() {
|
|
|
138
138
|
: "Open settings navigation", title: mobileSidebarOpen
|
|
139
139
|
? "Close settings navigation"
|
|
140
140
|
: "Open settings navigation", children: _jsx(Menu, { className: "h-4 w-4", strokeWidth: 1.75 }) }))] }), _jsx(SettingsMainContentRefContext.Provider, { value: settingsMainContentRef, children: _jsxs("div", { ref: settingsMainContentRef, className: "relative flex min-h-0 flex-1 overflow-hidden", "data-testid": "settings-view-main-content", children: [!isDesktop && mobileSidebarOpen && (_jsx("button", { type: "button", className: "absolute inset-0 z-10 bg-black/20", "aria-label": "Close settings navigation", onClick: () => setMobileSidebarOpen(false) })), _jsxs("div", { className: cn("z-20 flex min-h-0 flex-col border-r border-gray-200 bg-gray-50", "transition-[width,transform,box-shadow] duration-300 ease-out", isDesktop
|
|
141
|
-
? "relative w-
|
|
141
|
+
? "relative w-72"
|
|
142
142
|
: mobileSidebarOpen
|
|
143
|
-
? "absolute inset-y-0 left-0 w-
|
|
143
|
+
? "absolute inset-y-0 left-0 w-72 shadow-xl"
|
|
144
144
|
: "absolute inset-y-0 left-0 w-0 -translate-x-full overflow-hidden border-r-0"), children: [_jsx(StatusSummary, { onNavigate: handleNavigateToStatus, collapsed: !isDesktop && !mobileSidebarOpen }), _jsx("div", { className: "min-h-0 flex-1 overflow-auto", children: _jsx(SimpleMenu, { items: items, activeItemKey: activeItemKey, collapsed: !isDesktop && !mobileSidebarOpen, onItemClick: (item) => {
|
|
145
145
|
setActiveItemKey(item.id);
|
|
146
146
|
updateUrl(item.id);
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useState } from "react";
|
|
3
|
+
import { Bell, BellOff, FileText, FolderTree, Globe, Loader2, Sparkles, Trash2, Wand2, } from "lucide-react";
|
|
4
|
+
import { Badge } from "../../../components/ui/badge";
|
|
5
|
+
import { Button } from "../../../components/ui/button";
|
|
6
|
+
import { Card } from "../../../components/ui/card";
|
|
7
|
+
import { Tooltip, TooltipContent, TooltipTrigger, } from "../../../components/ui/tooltip";
|
|
8
|
+
import { cn } from "../../../lib/utils";
|
|
9
|
+
import { useNotificationSubscriptions } from "../../notifications/useNotificationSubscriptions";
|
|
10
|
+
import { getEventTypeLabel } from "../../notifications/watchEventOptions";
|
|
11
|
+
import { SecretAgentIcon } from "../../ui/Icons";
|
|
12
|
+
const GROUPS = [
|
|
13
|
+
{
|
|
14
|
+
key: "item",
|
|
15
|
+
title: "Items",
|
|
16
|
+
icon: _jsx(FileText, { strokeWidth: 1, className: "h-5 w-5" }),
|
|
17
|
+
targetTypes: ["item"],
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
key: "project",
|
|
21
|
+
title: "Projects",
|
|
22
|
+
icon: _jsx(Sparkles, { strokeWidth: 1, className: "h-5 w-5" }),
|
|
23
|
+
targetTypes: ["project"],
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
key: "review",
|
|
27
|
+
title: "Reviews",
|
|
28
|
+
icon: _jsx(Wand2, { strokeWidth: 1, className: "h-5 w-5" }),
|
|
29
|
+
targetTypes: ["review"],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
key: "agent-run",
|
|
33
|
+
title: "Agent runs",
|
|
34
|
+
icon: _jsx(SecretAgentIcon, { size: 20, strokeWidth: 1 }),
|
|
35
|
+
targetTypes: ["agent-run"],
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
function groupSubscriptions(subscriptions) {
|
|
39
|
+
const buckets = new Map();
|
|
40
|
+
const knownTypes = new Set(GROUPS.flatMap((g) => g.targetTypes));
|
|
41
|
+
const others = [];
|
|
42
|
+
for (const subscription of subscriptions) {
|
|
43
|
+
const type = (subscription.targetType ?? "").toLowerCase();
|
|
44
|
+
if (knownTypes.has(type)) {
|
|
45
|
+
const list = buckets.get(type) ?? [];
|
|
46
|
+
list.push(subscription);
|
|
47
|
+
buckets.set(type, list);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
others.push(subscription);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const sortedGroups = GROUPS.map((group) => ({
|
|
54
|
+
config: group,
|
|
55
|
+
items: group.targetTypes.flatMap((type) => buckets.get(type) ?? []),
|
|
56
|
+
})).filter((group) => group.items.length > 0);
|
|
57
|
+
if (others.length > 0) {
|
|
58
|
+
sortedGroups.push({
|
|
59
|
+
config: {
|
|
60
|
+
key: "other",
|
|
61
|
+
title: "Other",
|
|
62
|
+
icon: _jsx(Bell, { strokeWidth: 1, className: "h-5 w-5" }),
|
|
63
|
+
targetTypes: [],
|
|
64
|
+
},
|
|
65
|
+
items: others,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
return sortedGroups;
|
|
69
|
+
}
|
|
70
|
+
function formatTargetIdShort(targetId) {
|
|
71
|
+
if (!targetId)
|
|
72
|
+
return "";
|
|
73
|
+
if (targetId.length <= 12)
|
|
74
|
+
return targetId;
|
|
75
|
+
return `${targetId.slice(0, 8)}…`;
|
|
76
|
+
}
|
|
77
|
+
function SubscriptionRow({ subscription, }) {
|
|
78
|
+
const { muteTarget, unmuteTarget, unsubscribeFromTarget } = useNotificationSubscriptions();
|
|
79
|
+
const [pending, setPending] = useState(null);
|
|
80
|
+
const targetType = (subscription.targetType ?? "").toLowerCase();
|
|
81
|
+
const displayName = subscription.displayName && subscription.displayName.trim().length > 0
|
|
82
|
+
? subscription.displayName
|
|
83
|
+
: `${subscription.targetType} ${formatTargetIdShort(subscription.targetId)}`.trim();
|
|
84
|
+
const subtitle = subscription.path ?? null;
|
|
85
|
+
const deleted = subscription.exists === false;
|
|
86
|
+
const eventTypes = Array.isArray(subscription.eventTypes)
|
|
87
|
+
? subscription.eventTypes
|
|
88
|
+
: [];
|
|
89
|
+
const handleMuteToggle = async () => {
|
|
90
|
+
if (pending)
|
|
91
|
+
return;
|
|
92
|
+
setPending("mute");
|
|
93
|
+
try {
|
|
94
|
+
if (subscription.isMuted) {
|
|
95
|
+
await unmuteTarget({
|
|
96
|
+
targetType: subscription.targetType,
|
|
97
|
+
targetId: subscription.targetId,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
await muteTarget({
|
|
102
|
+
targetType: subscription.targetType,
|
|
103
|
+
targetId: subscription.targetId,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
finally {
|
|
108
|
+
setPending(null);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
const handleUnsubscribe = async () => {
|
|
112
|
+
if (pending)
|
|
113
|
+
return;
|
|
114
|
+
setPending("unsubscribe");
|
|
115
|
+
try {
|
|
116
|
+
await unsubscribeFromTarget({
|
|
117
|
+
targetType: subscription.targetType,
|
|
118
|
+
targetId: subscription.targetId,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
setPending(null);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
return (_jsxs("div", { className: "flex items-start justify-between gap-4 border-b border-gray-100 py-3 last:border-b-0", "data-testid": `notification-subscription-${targetType}-${subscription.targetId}`, children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("div", { className: cn("truncate text-sm font-medium", deleted ? "text-gray-400 line-through" : "text-gray-900"), title: displayName, children: displayName }), subscription.isAuto && (_jsx(Badge, { variant: "secondary", className: "shrink-0", children: "Auto" })), subscription.isMuted && (_jsx(Badge, { variant: "outline", className: "shrink-0 border-amber-300 text-amber-700", children: "Muted" })), subscription.includeDescendants && (_jsxs(Badge, { variant: "outline", className: "shrink-0 gap-1", children: [_jsx(FolderTree, { className: "size-3" }), "Subtree"] })), subscription.language && (_jsxs(Badge, { variant: "outline", className: "shrink-0 gap-1", children: [_jsx(Globe, { className: "size-3" }), subscription.language.toUpperCase()] }))] }), subtitle && (_jsx("div", { className: "mt-0.5 truncate text-xs text-gray-500", title: subtitle, children: subtitle })), eventTypes.length > 0 && (_jsx("div", { className: "mt-1.5 flex flex-wrap gap-1", children: eventTypes.map((eventType) => (_jsx(Badge, { variant: "secondary", className: "text-[10px] font-normal", children: getEventTypeLabel(eventType) }, eventType))) }))] }), _jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "iconSm", onClick: () => void handleMuteToggle(), disabled: pending !== null, "aria-label": subscription.isMuted ? "Unmute" : "Mute", "data-testid": `notification-subscription-${targetType}-${subscription.targetId}-mute`, children: pending === "mute" ? (_jsx(Loader2, { className: "size-4 animate-spin" })) : subscription.isMuted ? (_jsx(Bell, { className: "size-4" })) : (_jsx(BellOff, { className: "size-4" })) }) }), _jsx(TooltipContent, { children: subscription.isMuted ? "Unmute" : "Mute" })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "iconSm", onClick: () => void handleUnsubscribe(), disabled: pending !== null, "aria-label": "Unsubscribe", "data-testid": `notification-subscription-${targetType}-${subscription.targetId}-unsubscribe`, children: pending === "unsubscribe" ? (_jsx(Loader2, { className: "size-4 animate-spin" })) : (_jsx(Trash2, { className: "size-4 text-red-600" })) }) }), _jsx(TooltipContent, { children: "Unsubscribe" })] })] })] }));
|
|
126
|
+
}
|
|
127
|
+
export function NotificationSubscriptionsPanel() {
|
|
128
|
+
const { subscriptions, initialized, refreshing } = useNotificationSubscriptions();
|
|
129
|
+
const groups = useMemo(() => groupSubscriptions(subscriptions), [subscriptions]);
|
|
130
|
+
const isLoading = !initialized && refreshing;
|
|
131
|
+
const isEmpty = initialized && subscriptions.length === 0;
|
|
132
|
+
return (_jsx("div", { className: "h-full overflow-auto p-4", "data-testid": "notification-subscriptions-panel", children: _jsx("div", { className: "mx-auto max-w-3xl", children: isLoading ? (_jsxs("div", { className: "flex items-center justify-center py-12 text-sm text-gray-500", children: [_jsx(Loader2, { className: "mr-2 size-4 animate-spin" }), "Loading subscriptions\u2026"] })) : isEmpty ? (_jsx(Card, { icon: _jsx(Bell, { strokeWidth: 1, className: "h-5 w-5" }), title: "No subscriptions yet", description: "You're not watching anything right now.", children: _jsx("p", { className: "py-2 text-sm text-gray-500", children: "Use the watch button on items, projects, reviews, or agent runs to subscribe to notifications. They'll show up here so you can mute or unsubscribe at any time." }) })) : (_jsx("div", { className: "space-y-4", children: groups.map((group) => {
|
|
133
|
+
return (_jsx(Card, { icon: group.config.icon, title: group.config.title, description: `${group.items.length} subscription${group.items.length === 1 ? "" : "s"}`, children: _jsx("div", { className: "divide-y-0", children: group.items.map((subscription) => (_jsx(SubscriptionRow, { subscription: subscription }, subscription.id))) }) }, group.config.key));
|
|
134
|
+
}) })) }) }));
|
|
135
|
+
}
|
|
136
|
+
export default NotificationSubscriptionsPanel;
|
|
137
|
+
//# sourceMappingURL=NotificationSubscriptionsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotificationSubscriptionsPanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/NotificationSubscriptionsPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -15,3 +15,4 @@ export { SettingsPanel } from "./SettingsPanel";
|
|
|
15
15
|
export { StatusPanel } from "./StatusPanel";
|
|
16
16
|
export { ClusterInstancesPanel } from "./ClusterInstancesPanel";
|
|
17
17
|
export { UserPreferencesPanel } from "./UserPreferencesPanel";
|
|
18
|
+
export { NotificationSubscriptionsPanel } from "./NotificationSubscriptionsPanel";
|
|
@@ -15,4 +15,5 @@ export { SettingsPanel } from "./SettingsPanel";
|
|
|
15
15
|
export { StatusPanel } from "./StatusPanel";
|
|
16
16
|
export { ClusterInstancesPanel } from "./ClusterInstancesPanel";
|
|
17
17
|
export { UserPreferencesPanel } from "./UserPreferencesPanel";
|
|
18
|
+
export { NotificationSubscriptionsPanel } from "./NotificationSubscriptionsPanel";
|
|
18
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC"}
|
package/dist/revision.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "0.1.
|
|
2
|
-
export declare const buildDate = "2026-05-19
|
|
1
|
+
export declare const version = "0.1.12800";
|
|
2
|
+
export declare const buildDate = "2026-05-19 14:29:51";
|
package/dist/revision.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export const version = "0.1.
|
|
2
|
-
export const buildDate = "2026-05-19
|
|
1
|
+
export const version = "0.1.12800";
|
|
2
|
+
export const buildDate = "2026-05-19 14:29:51";
|
|
3
3
|
//# sourceMappingURL=revision.js.map
|
|
@@ -10,6 +10,11 @@ import { cn } from "../lib/utils";
|
|
|
10
10
|
import { executeCustomCommand, isCustomCommandDisabled, renderCustomCommandIcon, } from "../editor/commands/customCommandConverter";
|
|
11
11
|
import { getHomeQuickActions, getSystemStatus, } from "../editor/services/systemService";
|
|
12
12
|
import { getAgentsGrouped } from "../editor/services/agentService";
|
|
13
|
+
import { getMyTasks } from "../task-board/services/taskService";
|
|
14
|
+
import { getTaskBoardNavSnapshot, setTaskBoardNavState, } from "../task-board/taskBoardNavStore";
|
|
15
|
+
import { normalizeTaskStatus } from "../task-board/taskStatus";
|
|
16
|
+
import { getMyReviews } from "../editor/services/reviewsService";
|
|
17
|
+
import { ClipboardCheck, ClipboardList } from "lucide-react";
|
|
13
18
|
import { useNotifications } from "../editor/notifications/useNotifications";
|
|
14
19
|
import { resolveNotificationAction } from "../editor/notifications/notificationRoutes";
|
|
15
20
|
import { tourScrollIntoViewMarginClass } from "../tour/Tour";
|
|
@@ -48,6 +53,8 @@ export function ModernSplashScreen() {
|
|
|
48
53
|
const [statusWarningDismissed, setStatusWarningDismissed] = useState(false);
|
|
49
54
|
const [homeQuickActions, setHomeQuickActions] = useState([]);
|
|
50
55
|
const [activeAgents, setActiveAgents] = useState([]);
|
|
56
|
+
const [myTasks, setMyTasks] = useState([]);
|
|
57
|
+
const [myReviews, setMyReviews] = useState([]);
|
|
51
58
|
const { notifications, unreadCount, markRead } = useNotifications(editContext, { showAll: false });
|
|
52
59
|
const [activeListTab, setActiveListTab] = useState(0);
|
|
53
60
|
const greeting = useMemo(() => {
|
|
@@ -196,6 +203,92 @@ export function ModernSplashScreen() {
|
|
|
196
203
|
mounted = false;
|
|
197
204
|
};
|
|
198
205
|
}, [canUseAi]);
|
|
206
|
+
useEffect(() => {
|
|
207
|
+
if (!editContext?.user?.name) {
|
|
208
|
+
setMyTasks([]);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
let cancelled = false;
|
|
212
|
+
(async () => {
|
|
213
|
+
const res = await getMyTasks({ excludeDone: true });
|
|
214
|
+
if (cancelled)
|
|
215
|
+
return;
|
|
216
|
+
if (res.type !== "success") {
|
|
217
|
+
setMyTasks([]);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
const list = (res.data ?? [])
|
|
221
|
+
.map((item) => ({
|
|
222
|
+
taskId: item.task.taskId,
|
|
223
|
+
projectId: item.task.projectId,
|
|
224
|
+
title: item.task.title,
|
|
225
|
+
projectTitle: item.projectTitle ?? "",
|
|
226
|
+
status: normalizeTaskStatus(item.task.status, item.task.executionState),
|
|
227
|
+
updatedAt: item.task.updatedAt,
|
|
228
|
+
}))
|
|
229
|
+
.sort((a, b) => {
|
|
230
|
+
const aTime = a.updatedAt ? new Date(a.updatedAt).getTime() : 0;
|
|
231
|
+
const bTime = b.updatedAt ? new Date(b.updatedAt).getTime() : 0;
|
|
232
|
+
return bTime - aTime;
|
|
233
|
+
});
|
|
234
|
+
setMyTasks(list);
|
|
235
|
+
})().catch(() => {
|
|
236
|
+
if (!cancelled)
|
|
237
|
+
setMyTasks([]);
|
|
238
|
+
});
|
|
239
|
+
return () => {
|
|
240
|
+
cancelled = true;
|
|
241
|
+
};
|
|
242
|
+
}, [editContext?.user?.name]);
|
|
243
|
+
useEffect(() => {
|
|
244
|
+
if (!editContext?.user?.name && !editContext?.user?.email) {
|
|
245
|
+
setMyReviews([]);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
let cancelled = false;
|
|
249
|
+
(async () => {
|
|
250
|
+
const res = await getMyReviews({ excludeFinished: true });
|
|
251
|
+
if (cancelled)
|
|
252
|
+
return;
|
|
253
|
+
if (res.type !== "success") {
|
|
254
|
+
setMyReviews([]);
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
const list = [...(res.data ?? [])].sort((a, b) => {
|
|
258
|
+
const aTime = a.createdAt ? new Date(a.createdAt).getTime() : 0;
|
|
259
|
+
const bTime = b.createdAt ? new Date(b.createdAt).getTime() : 0;
|
|
260
|
+
return bTime - aTime;
|
|
261
|
+
});
|
|
262
|
+
setMyReviews(list);
|
|
263
|
+
})().catch(() => {
|
|
264
|
+
if (!cancelled)
|
|
265
|
+
setMyReviews([]);
|
|
266
|
+
});
|
|
267
|
+
return () => {
|
|
268
|
+
cancelled = true;
|
|
269
|
+
};
|
|
270
|
+
}, [editContext?.user?.name, editContext?.user?.email]);
|
|
271
|
+
const handleOpenReview = useCallback((review) => {
|
|
272
|
+
editContext?.updateUrl({ reviewId: review.reviewId });
|
|
273
|
+
editContext?.openSidebar?.("reviews");
|
|
274
|
+
editContext?.switchWorkspace("editor");
|
|
275
|
+
}, [editContext]);
|
|
276
|
+
const handleOpenTask = useCallback((task) => {
|
|
277
|
+
editContext?.switchWorkspace("taskboard");
|
|
278
|
+
const snap = getTaskBoardNavSnapshot();
|
|
279
|
+
if (snap.onSelectMyTask) {
|
|
280
|
+
snap.onSelectMyTask({
|
|
281
|
+
projectId: task.projectId,
|
|
282
|
+
taskId: task.taskId,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
setTaskBoardNavState({
|
|
287
|
+
selectedProjectId: task.projectId,
|
|
288
|
+
selectedTaskId: task.taskId,
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
}, [editContext]);
|
|
199
292
|
const handleOpenAgent = useCallback((agentId) => {
|
|
200
293
|
editContext?.switchWorkspace("agents");
|
|
201
294
|
window.dispatchEvent(new CustomEvent("editor:openAgent", { detail: { agentId } }));
|
|
@@ -338,7 +431,7 @@ export function ModernSplashScreen() {
|
|
|
338
431
|
}, []);
|
|
339
432
|
return (_jsxs("div", { className: cn(
|
|
340
433
|
// Keep a scroll container, but make the background move with content (not fixed to viewport).
|
|
341
|
-
"relative flex h-
|
|
434
|
+
"relative flex h-full min-h-0 w-full flex-col overflow-y-auto bg-local transition-colors duration-1000", isDark ? "bg-black text-stone-200" : "text-stone-900"), style: isDark
|
|
342
435
|
? undefined
|
|
343
436
|
: {
|
|
344
437
|
backgroundColor: "#f5f5f5",
|
|
@@ -368,7 +461,7 @@ export function ModernSplashScreen() {
|
|
|
368
461
|
animation: content-fade-in 0.8s cubic-bezier(0.2, 0.8, 0.2, 1) forwards;
|
|
369
462
|
}
|
|
370
463
|
`,
|
|
371
|
-
} }), _jsxs("div", { className: "relative z-10 flex flex-1 flex-col items-center px-4 py-8 md:py-10", children: [_jsxs("div", { className: "animate-content-entrance mt-6 mb-16 w-full max-w-7xl", style: { animationDelay: "0.6s" }, children: [_jsxs("p", { className: "text-base font-normal text-stone-500", children: [greeting.label, userFirstName ? `, ${userFirstName}` : "", _jsx("span", { className: "text-stone-400", children: "." })] }), _jsx("h1", { className: "mt-3 text-[40px] leading-tight font-semibold tracking-tight text-stone-900", children: greeting.subtitle })] }), _jsx("div", { className: "animate-content-entrance mb-12 w-full max-w-7xl", style: {
|
|
464
|
+
} }), _jsxs("div", { className: "relative z-10 flex flex-1 flex-col items-center px-4 py-8 md:py-10", "data-testid": "modern-splash-screen-main-content", children: [_jsxs("div", { className: "animate-content-entrance mt-6 mb-16 w-full max-w-7xl", style: { animationDelay: "0.6s" }, children: [_jsxs("p", { className: "text-base font-normal text-stone-500", children: [greeting.label, userFirstName ? `, ${userFirstName}` : "", _jsx("span", { className: "text-stone-400", children: "." })] }), _jsx("h1", { className: "mt-3 text-[40px] leading-tight font-semibold tracking-tight text-stone-900", children: greeting.subtitle })] }), _jsx("div", { className: "animate-content-entrance mb-12 w-full max-w-7xl", style: {
|
|
372
465
|
animationDelay: "0.9s",
|
|
373
466
|
viewTransitionName: "splash-search",
|
|
374
467
|
}, children: _jsxs("div", { className: "relative flex flex-col rounded-xl border border-stone-200 bg-white p-3 [&_input]:!border-transparent [&_input]:!bg-transparent [&_input]:!pl-9 [&_input]:!ring-0 [&_input]:focus:!border-transparent [&_input]:focus:!ring-0 [&_.lucide-search:not([data-splash-search])]:!hidden", children: [_jsx(Search, { "data-splash-search": true, className: "pointer-events-none absolute top-[1.25rem] left-6 z-10 h-4 w-4 text-stone-700", strokeWidth: 2 }), _jsx(ItemSearch, { itemSelected: (item) => handleLoadSearchItem(item), resultClassName: "max-h-80", placeholder: "Search content" })] }) }), statusIssues.length > 0 && !statusWarningDismissed && (_jsx("div", { className: "animate-content-entrance mb-6 w-full max-w-7xl md:mb-8", style: {
|
|
@@ -405,8 +498,46 @@ export function ModernSplashScreen() {
|
|
|
405
498
|
: n.priority === "high"
|
|
406
499
|
? "bg-rose-500"
|
|
407
500
|
: "bg-stone-500") }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "truncate text-sm font-semibold text-stone-900", children: n.title }), n.message && (_jsx("div", { className: "mt-0.5 line-clamp-2 text-xs text-stone-500", children: n.message }))] })] }, n.id))) })) }));
|
|
501
|
+
const myTasksContent = (_jsx("div", { className: listCardClass, children: myTasks.length === 0 ? (_jsxs("div", { className: "flex flex-col items-center gap-2 p-12 text-center text-sm text-stone-500", children: [_jsx(ClipboardCheck, { className: "h-5 w-5 text-stone-400", strokeWidth: 1.5 }), "No tasks assigned to you"] })) : (_jsx("div", { className: "divide-y divide-stone-200", children: myTasks.slice(0, 12).map((task) => (_jsxs("button", { onClick: () => handleOpenTask(task), className: "group relative flex w-full cursor-pointer items-center gap-3 px-5 py-3 text-left transition-colors duration-200 hover:bg-stone-50", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "truncate text-sm font-semibold text-stone-900", children: task.title }), _jsx("div", { className: "mt-0.5 truncate text-xs text-stone-500", children: task.projectTitle })] }), _jsx("span", { className: cn("shrink-0 rounded-[4px] px-2 py-1 text-[11px] font-normal capitalize", task.status === "Done"
|
|
502
|
+
? "bg-[#DDF9ED] text-[#1A8B5D]"
|
|
503
|
+
: task.status === "InProgress"
|
|
504
|
+
? "bg-emerald-100 text-emerald-700"
|
|
505
|
+
: task.status === "Review"
|
|
506
|
+
? "bg-yellow-100 text-yellow-800"
|
|
507
|
+
: task.status === "Waiting"
|
|
508
|
+
? "bg-yellow-100 text-yellow-800"
|
|
509
|
+
: "bg-stone-100 text-stone-700"), children: task.status })] }, `${task.projectId}:${task.taskId}`))) })) }));
|
|
510
|
+
const myReviewsContent = (_jsx("div", { className: listCardClass, children: myReviews.length === 0 ? (_jsxs("div", { className: "flex flex-col items-center gap-2 p-12 text-center text-sm text-stone-500", children: [_jsx(ClipboardList, { className: "h-5 w-5 text-stone-400", strokeWidth: 1.5 }), "No reviews waiting for you"] })) : (_jsx("div", { className: "divide-y divide-stone-200", children: myReviews.slice(0, 12).map((review) => {
|
|
511
|
+
const status = review.finalDecision ??
|
|
512
|
+
review.status ??
|
|
513
|
+
(review.isExpired ? "Expired" : "Pending");
|
|
514
|
+
return (_jsxs("button", { onClick: () => handleOpenReview(review), className: "group relative flex w-full cursor-pointer items-center gap-3 px-5 py-3 text-left transition-colors duration-200 hover:bg-stone-50", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "truncate text-sm font-semibold text-stone-900", children: review.title || "Untitled review" }), _jsxs("div", { className: "mt-0.5 truncate text-xs text-stone-500", children: [review.pagesCount, " page", review.pagesCount !== 1 ? "s" : "", review.reviewersCount > 0
|
|
515
|
+
? ` · ${review.reviewersCount} reviewer${review.reviewersCount !== 1 ? "s" : ""}`
|
|
516
|
+
: ""] })] }), _jsx("span", { className: cn("shrink-0 rounded-[4px] px-2 py-1 text-[11px] font-normal capitalize", status === "Approved"
|
|
517
|
+
? "bg-[#DDF9ED] text-[#1A8B5D]"
|
|
518
|
+
: status === "Rejected"
|
|
519
|
+
? "bg-[#FAE0DD] text-[#A73E2C]"
|
|
520
|
+
: status === "Expired"
|
|
521
|
+
? "bg-stone-100 text-stone-700"
|
|
522
|
+
: "bg-yellow-100 text-yellow-800"), children: status })] }, review.reviewId));
|
|
523
|
+
}) })) }));
|
|
524
|
+
const renderCountBadge = (count) => (_jsx("span", { className: "rounded-[2px] bg-stone-200 px-1.5 py-0.5 text-[10px] font-semibold text-stone-700", children: count }));
|
|
408
525
|
const tabs = [
|
|
409
526
|
{ id: "recent", label: "Recent Items", content: recentContent },
|
|
527
|
+
{
|
|
528
|
+
id: "my-tasks",
|
|
529
|
+
label: "My Tasks",
|
|
530
|
+
content: myTasksContent,
|
|
531
|
+
badge: myTasks.length > 0 ? renderCountBadge(myTasks.length) : undefined,
|
|
532
|
+
},
|
|
533
|
+
{
|
|
534
|
+
id: "my-reviews",
|
|
535
|
+
label: "My Reviews",
|
|
536
|
+
content: myReviewsContent,
|
|
537
|
+
badge: myReviews.length > 0
|
|
538
|
+
? renderCountBadge(myReviews.length)
|
|
539
|
+
: undefined,
|
|
540
|
+
},
|
|
410
541
|
];
|
|
411
542
|
if (canUseAi) {
|
|
412
543
|
tabs.push({ id: "agents", label: "Agents", content: agentsContent });
|
|
@@ -415,12 +546,12 @@ export function ModernSplashScreen() {
|
|
|
415
546
|
id: "notifications",
|
|
416
547
|
label: "Notifications",
|
|
417
548
|
content: notificationsContent,
|
|
418
|
-
badge: unreadCount > 0 ? (
|
|
549
|
+
badge: unreadCount > 0 ? renderCountBadge(unreadCount) : undefined,
|
|
419
550
|
});
|
|
420
551
|
return (_jsxs("div", { className: "animate-content-entrance grid w-full max-w-7xl gap-x-8 md:grid-cols-[1fr_3fr]", style: {
|
|
421
552
|
animationDelay: "1.3s",
|
|
422
553
|
viewTransitionName: "splash-quick-actions",
|
|
423
|
-
}, children: [quickActionCommands.length > 0 ? (_jsxs("section", { children: [_jsx("h2", { className: "mb-6 border-b border-stone-200 px-4 pt-3 pb-3 text-[14px] font-medium tracking-tight text-stone-900", children: "Quick Actions" }), _jsx("div", { className: "flex flex-col gap-3", children: quickActionCommands.map((command) => {
|
|
554
|
+
}, children: [quickActionCommands.length > 0 ? (_jsxs("section", { "data-testid": "modern-splash-screen-quick-actions", children: [_jsx("h2", { className: "mb-6 border-b border-stone-200 px-4 pt-3 pb-3 text-[14px] font-medium tracking-tight text-stone-900", children: "Quick Actions" }), _jsx("div", { className: "flex flex-col gap-3", children: quickActionCommands.map((command) => {
|
|
424
555
|
const quickActionTestId = getQuickActionTestId(command);
|
|
425
556
|
return (_jsx(BentoTile, { icon: getQuickActionIcon(command), title: command.label, description: command.description, onClick: () => handleQuickActionClick(command), dataTestId: quickActionTestId, className: quickActionTestId === "create-new-page-button"
|
|
426
557
|
? tourScrollIntoViewMarginClass
|