@burdenoff/microfe-workspaces 2026.625.1 → 2026.625.2
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/components/MemberListItem.js +7 -6
- package/dist/components/MemberListItem.js.map +1 -1
- package/dist/components/ProjectCard.js +13 -12
- package/dist/components/ProjectCard.js.map +1 -1
- package/dist/components/WorkspaceCard.js +8 -7
- package/dist/components/WorkspaceCard.js.map +1 -1
- package/dist/pages/ActivityListPage.js +67 -55
- package/dist/pages/ActivityListPage.js.map +1 -1
- package/dist/pages/CreateWorkspacePage.js +5 -4
- package/dist/pages/CreateWorkspacePage.js.map +1 -1
- package/dist/pages/InviteAcceptancePage.js +45 -36
- package/dist/pages/InviteAcceptancePage.js.map +1 -1
- package/dist/pages/MembersListPage.js +2 -2
- package/dist/pages/MembersListPage.js.map +1 -1
- package/dist/pages/PendingInvitesPage.js +68 -67
- package/dist/pages/PendingInvitesPage.js.map +1 -1
- package/dist/pages/ProjectDetailPage.js +333 -302
- package/dist/pages/ProjectDetailPage.js.map +1 -1
- package/dist/pages/ProjectMembersPage.js +4 -4
- package/dist/pages/ProjectMembersPage.js.map +1 -1
- package/dist/pages/ProjectsListPage.js +234 -226
- package/dist/pages/ProjectsListPage.js.map +1 -1
- package/dist/pages/WorkspaceDetailPage.js +196 -178
- package/dist/pages/WorkspaceDetailPage.js.map +1 -1
- package/dist/pages/WorkspaceInvitePage.js +372 -353
- package/dist/pages/WorkspaceInvitePage.js.map +1 -1
- package/dist/pages/WorkspaceSettingsPage.js +98 -90
- package/dist/pages/WorkspaceSettingsPage.js.map +1 -1
- package/dist/pages/WorkspacesListPage.js +132 -121
- package/dist/pages/WorkspacesListPage.js.map +1 -1
- package/dist/pages/dashboard/WidgetWrapper.js +7 -6
- package/dist/pages/dashboard/WidgetWrapper.js.map +1 -1
- package/dist/pages/dashboard/widgets/MembersWidget.js +1 -1
- package/dist/pages/dashboard/widgets/MembersWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/WelcomeWidget.js +45 -37
- package/dist/pages/dashboard/widgets/WelcomeWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/WorkflowStatsWidget.js +2 -2
- package/dist/pages/dashboard/widgets/WorkflowStatsWidget.js.map +1 -1
- package/package.json +2 -2
|
@@ -14,7 +14,7 @@ import { useMemo as s, useRef as ue, useState as c } from "react";
|
|
|
14
14
|
import { AlertCircle as l, ArrowLeft as de, CheckCircle2 as u, Download as fe, Loader2 as d, Mail as pe, RefreshCw as me, Send as he, Upload as ge, UserPlus as _e, XCircle as f } from "lucide-react";
|
|
15
15
|
import { PermissionProvider as ve } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
16
16
|
import { Fragment as ye, jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
17
|
-
import { AlertDialog as be, AlertDialogAction as xe, AlertDialogCancel as Se, AlertDialogContent as Ce, AlertDialogDescription as we, AlertDialogFooter as Te, AlertDialogHeader as Ee, AlertDialogTitle as De, Badge as h, Button as g,
|
|
17
|
+
import { AlertDialog as be, AlertDialogAction as xe, AlertDialogCancel as Se, AlertDialogContent as Ce, AlertDialogDescription as we, AlertDialogFooter as Te, AlertDialogHeader as Ee, AlertDialogTitle as De, Badge as h, Button as g, CardContent as _, CardHeader as v, CardTitle as y, Checkbox as b, GlassCard as x, Input as Oe, ResponsiveTable as ke, Skeleton as S, Tabs as Ae, TabsContent as je, TabsList as Me, TabsTrigger as Ne, Tooltip as C, TooltipContent as w, TooltipProvider as Pe, TooltipTrigger as T } from "@burdenoff/fe-libs/ui";
|
|
18
18
|
import { useNavigate as Fe, useParams as Ie } from "react-router-dom";
|
|
19
19
|
import { useI18n as Le } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
20
20
|
//#region src/pages/WorkspaceInvitePage.tsx
|
|
@@ -137,7 +137,7 @@ function We({ selectedRoleIds: e, onRoleToggle: t, selectedProjectIds: n, onProj
|
|
|
137
137
|
children: [/* @__PURE__ */ p("span", {
|
|
138
138
|
className: "min-w-0 flex-1 truncate",
|
|
139
139
|
children: n.name
|
|
140
|
-
}), /* @__PURE__ */ p(
|
|
140
|
+
}), /* @__PURE__ */ p(b, {
|
|
141
141
|
checked: r,
|
|
142
142
|
disabled: o,
|
|
143
143
|
onCheckedChange: (e) => t(n.id, !!e),
|
|
@@ -207,7 +207,7 @@ function We({ selectedRoleIds: e, onRoleToggle: t, selectedProjectIds: n, onProj
|
|
|
207
207
|
children: e.status
|
|
208
208
|
})]
|
|
209
209
|
})]
|
|
210
|
-
}), /* @__PURE__ */ p(
|
|
210
|
+
}), /* @__PURE__ */ p(b, {
|
|
211
211
|
checked: t,
|
|
212
212
|
disabled: o,
|
|
213
213
|
onCheckedChange: (t) => r(e.id, !!t),
|
|
@@ -220,7 +220,7 @@ function We({ selectedRoleIds: e, onRoleToggle: t, selectedProjectIds: n, onProj
|
|
|
220
220
|
});
|
|
221
221
|
}
|
|
222
222
|
function O() {
|
|
223
|
-
let { workspaceId: ve } = Ie(), { t:
|
|
223
|
+
let { workspaceId: ve } = Ie(), { t: b } = Le(), C = Fe(), { basePath: w = "/workspaces", workspaceId: Pe } = e(), { withCurrentSearch: T } = n(), O = ve || Pe || "";
|
|
224
224
|
i("workspaces.invite", { workspaceId: O || void 0 });
|
|
225
225
|
let { canInviteMember: Ge, isLoading: Ke } = ae(), { data: qe, isLoading: Je, error: Ye } = t(O), { data: k = [], isLoading: Xe } = oe(O), { data: A, isLoading: Ze } = se({ archived: !1 }, { limit: 100 }, O), { data: Qe, isLoading: $e, isFetching: j, error: et, refetch: tt } = a(O, "PENDING", { limit: 50 }, { retry: !1 }), M = s(() => (A?.items ?? []).filter((e) => !e.archived), [A?.items]), [nt, rt] = c("single"), [N, it] = c(""), [P, at] = c([]), [F, ot] = c([]), [st, I] = c(null), [ct, lt] = c(null), [ut, L] = c(null), [dt, R] = c(null), [z, B] = c(null), [V, H] = c([]), [ft, pt] = c(null), [mt, U] = c(!1), [W, ht] = c(!1), gt = ue(null), [G, K] = c(null), { mutateAsync: _t, isPending: q } = o(O), { mutateAsync: vt, isPending: yt } = ee(), { mutate: bt, isPending: J } = ne(O), { mutate: xt, isPending: Y } = te(O), [St, X] = c(null), Z = Qe?.items ?? [], Ct = q || yt || W, wt = s(() => k.filter((e) => P.includes(e.id)).map((e) => e.name), [k, P]), Tt = s(() => M.filter((e) => F.includes(e.id)).map((e) => e.name), [M, F]), Q = s(() => V.filter((e) => e.errors.length === 0 && e.status.kind !== "invited"), [V]), $ = s(() => V.filter((e) => e.errors.length > 0), [V]);
|
|
226
226
|
if (!O) return /* @__PURE__ */ p("div", {
|
|
@@ -230,18 +230,18 @@ function O() {
|
|
|
230
230
|
children: [
|
|
231
231
|
/* @__PURE__ */ p("h1", {
|
|
232
232
|
className: "text-2xl font-bold",
|
|
233
|
-
children: r(
|
|
233
|
+
children: r(b, "workspaceInvite.noWorkspaceTitle", "Select a workspace first")
|
|
234
234
|
}),
|
|
235
235
|
/* @__PURE__ */ p("p", {
|
|
236
236
|
className: "mt-2 text-text-secondary",
|
|
237
|
-
children: r(
|
|
237
|
+
children: r(b, "workspaceInvite.noWorkspaceDescription", "Choose a current workspace from the header or open a workspace detail page before inviting members.")
|
|
238
238
|
}),
|
|
239
239
|
/* @__PURE__ */ p("div", {
|
|
240
240
|
className: "mt-4",
|
|
241
241
|
children: /* @__PURE__ */ p(g, {
|
|
242
242
|
onClick: () => C(T(`${w}/list`)),
|
|
243
243
|
variant: "outline",
|
|
244
|
-
children: r(
|
|
244
|
+
children: r(b, "workspaceInvite.backToWorkspaces", "Back to Workspaces")
|
|
245
245
|
})
|
|
246
246
|
})
|
|
247
247
|
]
|
|
@@ -261,10 +261,10 @@ function O() {
|
|
|
261
261
|
className: "space-y-2 text-center",
|
|
262
262
|
children: [/* @__PURE__ */ p("h2", {
|
|
263
263
|
className: "text-lg font-semibold",
|
|
264
|
-
children: r(
|
|
264
|
+
children: r(b, "workspaceInvite.accessDenied", "Access Denied")
|
|
265
265
|
}), /* @__PURE__ */ p("p", {
|
|
266
266
|
className: "text-sm text-text-secondary",
|
|
267
|
-
children: r(
|
|
267
|
+
children: r(b, "workspaceInvite.accessDeniedDescription", "You don't have permission to invite members into this workspace.")
|
|
268
268
|
})]
|
|
269
269
|
})
|
|
270
270
|
});
|
|
@@ -274,10 +274,10 @@ function O() {
|
|
|
274
274
|
variant: "ghost",
|
|
275
275
|
onClick: () => C(T(`${w}/list`)),
|
|
276
276
|
className: "gap-2",
|
|
277
|
-
children: [/* @__PURE__ */ p(de, { size: 18 }), r(
|
|
277
|
+
children: [/* @__PURE__ */ p(de, { size: 18 }), r(b, "workspaceInvite.backToWorkspaces", "Back to Workspaces")]
|
|
278
278
|
}), /* @__PURE__ */ p("div", {
|
|
279
279
|
className: "rounded-xl border bg-bg-surface p-8 text-center text-status-error-text",
|
|
280
|
-
children: r(
|
|
280
|
+
children: r(b, "workspaceInvite.workspaceLoadError", "Unable to load workspace invite details.")
|
|
281
281
|
})]
|
|
282
282
|
});
|
|
283
283
|
let Et = (e, t) => {
|
|
@@ -391,7 +391,7 @@ function O() {
|
|
|
391
391
|
variant: "ghost",
|
|
392
392
|
onClick: () => C(T(`${w}/${O}`)),
|
|
393
393
|
className: "-ml-2 mb-2 gap-2",
|
|
394
|
-
children: [/* @__PURE__ */ p(de, { size: 18 }), r(
|
|
394
|
+
children: [/* @__PURE__ */ p(de, { size: 18 }), r(b, "workspaceInvite.backToWorkspace", "Back to Workspace")]
|
|
395
395
|
}),
|
|
396
396
|
/* @__PURE__ */ m("div", {
|
|
397
397
|
className: "flex items-center gap-2",
|
|
@@ -400,7 +400,7 @@ function O() {
|
|
|
400
400
|
size: 24
|
|
401
401
|
}), /* @__PURE__ */ p("h1", {
|
|
402
402
|
className: "text-2xl font-bold sm:text-3xl",
|
|
403
|
-
children: r(
|
|
403
|
+
children: r(b, "workspaceInvite.title", "Invite Members")
|
|
404
404
|
})]
|
|
405
405
|
}),
|
|
406
406
|
/* @__PURE__ */ m("p", {
|
|
@@ -409,294 +409,293 @@ function O() {
|
|
|
409
409
|
qe.name,
|
|
410
410
|
" —",
|
|
411
411
|
" ",
|
|
412
|
-
r(
|
|
412
|
+
r(b, "workspaceInvite.subtitle", "Invite people into this workspace and optionally grant project access.")
|
|
413
413
|
]
|
|
414
414
|
})
|
|
415
415
|
] })
|
|
416
416
|
}),
|
|
417
|
-
/* @__PURE__ */ m(
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
417
|
+
/* @__PURE__ */ m(x, {
|
|
418
|
+
treatment: "plain",
|
|
419
|
+
className: "border-border-seam",
|
|
420
|
+
children: [/* @__PURE__ */ p(v, { children: /* @__PURE__ */ p(y, { children: r(b, "workspaceInvite.setupTitle", "Access to grant on acceptance") }) }), /* @__PURE__ */ p(_, { children: /* @__PURE__ */ p(We, {
|
|
421
|
+
selectedRoleIds: P,
|
|
422
|
+
onRoleToggle: Et,
|
|
423
|
+
selectedProjectIds: F,
|
|
424
|
+
onProjectToggle: Dt,
|
|
425
|
+
availableRoles: k,
|
|
426
|
+
availableProjects: M,
|
|
427
|
+
isLoadingRoles: Xe,
|
|
428
|
+
isLoadingProjects: Ze,
|
|
429
|
+
disabled: Ct
|
|
430
|
+
}) })]
|
|
431
|
+
}),
|
|
432
|
+
/* @__PURE__ */ m(x, {
|
|
433
|
+
treatment: "metric",
|
|
434
|
+
className: "border-border-seam",
|
|
435
|
+
children: [/* @__PURE__ */ p(v, { children: /* @__PURE__ */ p(y, { children: "Selection summary" }) }), /* @__PURE__ */ m(_, {
|
|
436
|
+
className: "grid gap-4 md:grid-cols-2",
|
|
432
437
|
children: [/* @__PURE__ */ m("div", {
|
|
433
|
-
className: "
|
|
434
|
-
children: [/* @__PURE__ */
|
|
435
|
-
className: "
|
|
436
|
-
children: "
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
438
|
+
className: "space-y-2 rounded-lg border border-border-seam bg-bg-surface p-4",
|
|
439
|
+
children: [/* @__PURE__ */ m("div", {
|
|
440
|
+
className: "flex items-center justify-between gap-2",
|
|
441
|
+
children: [/* @__PURE__ */ p("p", {
|
|
442
|
+
className: "text-sm font-medium",
|
|
443
|
+
children: "Roles"
|
|
444
|
+
}), /* @__PURE__ */ p(h, {
|
|
445
|
+
variant: "secondary",
|
|
446
|
+
className: "tabular-nums",
|
|
447
|
+
children: wt.length
|
|
448
|
+
})]
|
|
449
|
+
}), /* @__PURE__ */ p("p", {
|
|
450
|
+
className: "text-sm text-text-muted",
|
|
451
|
+
children: He(wt, "No roles selected")
|
|
440
452
|
})]
|
|
441
|
-
}), /* @__PURE__ */
|
|
442
|
-
className: "
|
|
443
|
-
children:
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
453
|
+
}), /* @__PURE__ */ m("div", {
|
|
454
|
+
className: "space-y-2 rounded-lg border border-border-seam bg-bg-surface p-4",
|
|
455
|
+
children: [/* @__PURE__ */ m("div", {
|
|
456
|
+
className: "flex items-center justify-between gap-2",
|
|
457
|
+
children: [/* @__PURE__ */ p("p", {
|
|
458
|
+
className: "text-sm font-medium",
|
|
459
|
+
children: "Projects"
|
|
460
|
+
}), /* @__PURE__ */ p(h, {
|
|
461
|
+
variant: "secondary",
|
|
462
|
+
className: "tabular-nums",
|
|
463
|
+
children: Tt.length
|
|
464
|
+
})]
|
|
465
|
+
}), /* @__PURE__ */ p("p", {
|
|
466
|
+
className: "text-sm text-text-muted",
|
|
467
|
+
children: He(Tt, "No project access will be granted automatically")
|
|
455
468
|
})]
|
|
456
|
-
}), /* @__PURE__ */ p("p", {
|
|
457
|
-
className: "text-sm text-text-secondary",
|
|
458
|
-
children: He(Tt, "No project access will be granted automatically")
|
|
459
469
|
})]
|
|
460
470
|
})]
|
|
461
|
-
})
|
|
462
|
-
/* @__PURE__ */ m(
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
className: "
|
|
494
|
-
children:
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
471
|
+
}),
|
|
472
|
+
/* @__PURE__ */ m(x, {
|
|
473
|
+
treatment: "plain",
|
|
474
|
+
className: "border-border-seam",
|
|
475
|
+
children: [/* @__PURE__ */ p(v, { children: /* @__PURE__ */ p(y, { children: r(b, "workspaceInvite.sendTitle", "Send invitations") }) }), /* @__PURE__ */ p(_, { children: /* @__PURE__ */ m(Ae, {
|
|
476
|
+
value: nt,
|
|
477
|
+
onValueChange: (e) => rt(e),
|
|
478
|
+
className: "space-y-5",
|
|
479
|
+
children: [
|
|
480
|
+
/* @__PURE__ */ m(Me, { children: [/* @__PURE__ */ p(Ne, {
|
|
481
|
+
value: "single",
|
|
482
|
+
children: r(b, "workspaceInvite.modeSingle", "Single")
|
|
483
|
+
}), /* @__PURE__ */ p(Ne, {
|
|
484
|
+
value: "bulk",
|
|
485
|
+
children: r(b, "workspaceInvite.modeBulk", "Bulk CSV")
|
|
486
|
+
})] }),
|
|
487
|
+
/* @__PURE__ */ m(je, {
|
|
488
|
+
value: "single",
|
|
489
|
+
className: "space-y-4",
|
|
490
|
+
children: [
|
|
491
|
+
st ? /* @__PURE__ */ m("div", {
|
|
492
|
+
className: "flex items-center gap-2 rounded-md border border-status-error-border/20 bg-status-error-bg/10 p-3 text-sm text-status-error-text",
|
|
493
|
+
children: [/* @__PURE__ */ p(l, { className: "size-4 shrink-0" }), /* @__PURE__ */ p("span", { children: st })]
|
|
494
|
+
}) : null,
|
|
495
|
+
ct ? /* @__PURE__ */ m("div", {
|
|
496
|
+
className: "flex items-center gap-2 rounded-md border border-green-500/20 bg-green-500/10 p-3 text-sm text-green-700 dark:text-green-400",
|
|
497
|
+
children: [/* @__PURE__ */ p(u, { className: "size-4 shrink-0" }), /* @__PURE__ */ p("span", { children: ct })]
|
|
498
|
+
}) : null,
|
|
499
|
+
/* @__PURE__ */ m("form", {
|
|
500
|
+
onSubmit: Ot,
|
|
501
|
+
className: "space-y-4",
|
|
502
|
+
children: [/* @__PURE__ */ m("div", {
|
|
503
|
+
className: "space-y-2",
|
|
504
|
+
children: [/* @__PURE__ */ p("label", {
|
|
505
|
+
htmlFor: "workspace-invite-email",
|
|
506
|
+
className: "text-sm font-medium",
|
|
507
|
+
children: r(b, "workspaceInvite.emailLabel", "Email Address")
|
|
508
|
+
}), /* @__PURE__ */ p(Oe, {
|
|
509
|
+
id: "workspace-invite-email",
|
|
510
|
+
type: "email",
|
|
511
|
+
placeholder: "member@example.com",
|
|
512
|
+
value: N,
|
|
513
|
+
onChange: (e) => it(e.target.value),
|
|
514
|
+
disabled: q
|
|
515
|
+
})]
|
|
516
|
+
}), /* @__PURE__ */ p("div", {
|
|
517
|
+
className: "flex justify-end",
|
|
518
|
+
children: /* @__PURE__ */ m(g, {
|
|
519
|
+
type: "submit",
|
|
520
|
+
disabled: q,
|
|
521
|
+
className: "gap-2",
|
|
522
|
+
children: [q ? /* @__PURE__ */ p(d, { className: "size-4 animate-spin" }) : /* @__PURE__ */ p(he, { className: "size-4" }), r(b, "workspaceInvite.sendSingleButton", "Send Invitation")]
|
|
523
|
+
})
|
|
502
524
|
})]
|
|
503
|
-
})
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
525
|
+
})
|
|
526
|
+
]
|
|
527
|
+
}),
|
|
528
|
+
/* @__PURE__ */ m(je, {
|
|
529
|
+
value: "bulk",
|
|
530
|
+
className: "space-y-5",
|
|
531
|
+
children: [
|
|
532
|
+
ut ? /* @__PURE__ */ m("div", {
|
|
533
|
+
className: "flex items-center gap-2 rounded-md border border-status-error-border/20 bg-status-error-bg/10 p-3 text-sm text-status-error-text",
|
|
534
|
+
children: [/* @__PURE__ */ p(l, { className: "size-4 shrink-0" }), /* @__PURE__ */ p("span", { children: ut })]
|
|
535
|
+
}) : null,
|
|
536
|
+
dt ? /* @__PURE__ */ m("div", {
|
|
537
|
+
className: "flex items-center gap-2 rounded-md border border-green-500/20 bg-green-500/10 p-3 text-sm text-green-700 dark:text-green-400",
|
|
538
|
+
children: [/* @__PURE__ */ p(u, { className: "size-4 shrink-0" }), /* @__PURE__ */ p("span", { children: dt })]
|
|
539
|
+
}) : null,
|
|
540
|
+
/* @__PURE__ */ m("div", {
|
|
541
|
+
className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",
|
|
542
|
+
children: [/* @__PURE__ */ m("div", {
|
|
543
|
+
className: "space-y-1",
|
|
544
|
+
children: [
|
|
545
|
+
/* @__PURE__ */ p("p", {
|
|
546
|
+
className: "text-sm text-text-secondary",
|
|
547
|
+
children: r(b, "workspaceInvite.bulkDescription", "Upload a CSV with one email column. All valid rows will receive the currently selected roles and projects.")
|
|
548
|
+
}),
|
|
549
|
+
/* @__PURE__ */ m("div", {
|
|
550
|
+
className: "rounded-md border bg-bg-sunken/30 px-3 py-2 text-xs text-text-secondary",
|
|
551
|
+
children: [/* @__PURE__ */ p("p", {
|
|
552
|
+
className: "font-medium text-text-primary",
|
|
553
|
+
children: "Sample format"
|
|
554
|
+
}), /* @__PURE__ */ m("pre", {
|
|
555
|
+
className: "mt-1 whitespace-pre-wrap",
|
|
556
|
+
children: [
|
|
557
|
+
"email",
|
|
558
|
+
"\n",
|
|
559
|
+
"alice@example.com",
|
|
560
|
+
"\n",
|
|
561
|
+
"bob@example.com"
|
|
562
|
+
]
|
|
563
|
+
})]
|
|
564
|
+
}),
|
|
565
|
+
(A?.total ?? 0) > M.length ? /* @__PURE__ */ m("p", {
|
|
566
|
+
className: "text-xs text-text-secondary",
|
|
567
|
+
children: [
|
|
568
|
+
"Showing the first ",
|
|
569
|
+
M.length,
|
|
570
|
+
" active projects. Narrow the workspace project list if you need to invite into more."
|
|
571
|
+
]
|
|
572
|
+
}) : null
|
|
573
|
+
]
|
|
574
|
+
}), /* @__PURE__ */ m(g, {
|
|
575
|
+
type: "button",
|
|
576
|
+
variant: "outline",
|
|
577
|
+
onClick: ce,
|
|
508
578
|
className: "gap-2",
|
|
509
|
-
children: [
|
|
510
|
-
})
|
|
511
|
-
})
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
dt ? /* @__PURE__ */ m("div", {
|
|
524
|
-
className: "flex items-center gap-2 rounded-md border border-green-500/20 bg-green-500/10 p-3 text-sm text-green-700 dark:text-green-400",
|
|
525
|
-
children: [/* @__PURE__ */ p(u, { className: "size-4 shrink-0" }), /* @__PURE__ */ p("span", { children: dt })]
|
|
526
|
-
}) : null,
|
|
527
|
-
/* @__PURE__ */ m("div", {
|
|
528
|
-
className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",
|
|
529
|
-
children: [/* @__PURE__ */ m("div", {
|
|
530
|
-
className: "space-y-1",
|
|
579
|
+
children: [/* @__PURE__ */ p(fe, { size: 16 }), r(b, "workspaceInvite.downloadTemplate", "Download template")]
|
|
580
|
+
})]
|
|
581
|
+
}),
|
|
582
|
+
/* @__PURE__ */ m("div", {
|
|
583
|
+
onDragOver: (e) => {
|
|
584
|
+
e.preventDefault(), U(!0);
|
|
585
|
+
},
|
|
586
|
+
onDragLeave: () => U(!1),
|
|
587
|
+
onDrop: (e) => {
|
|
588
|
+
e.preventDefault(), U(!1);
|
|
589
|
+
let t = e.dataTransfer.files?.[0];
|
|
590
|
+
t ? kt(t) : L("Please upload a .csv file.");
|
|
591
|
+
},
|
|
592
|
+
className: `flex flex-col items-center justify-center gap-3 rounded-xl border-2 border-dashed p-8 transition-colors ${mt ? "border-primary bg-action-primary-bg/5" : "border-border-subtle bg-bg-surface"}`,
|
|
531
593
|
children: [
|
|
532
|
-
/* @__PURE__ */ p(
|
|
533
|
-
|
|
534
|
-
|
|
594
|
+
/* @__PURE__ */ p(ge, {
|
|
595
|
+
size: 28,
|
|
596
|
+
className: "text-text-secondary"
|
|
535
597
|
}),
|
|
536
598
|
/* @__PURE__ */ m("div", {
|
|
537
|
-
className: "
|
|
599
|
+
className: "text-center",
|
|
538
600
|
children: [/* @__PURE__ */ p("p", {
|
|
539
|
-
className: "font-medium
|
|
540
|
-
children: "
|
|
541
|
-
}), /* @__PURE__ */
|
|
542
|
-
className: "mt-1
|
|
543
|
-
children:
|
|
544
|
-
"email",
|
|
545
|
-
"\n",
|
|
546
|
-
"alice@example.com",
|
|
547
|
-
"\n",
|
|
548
|
-
"bob@example.com"
|
|
549
|
-
]
|
|
601
|
+
className: "text-sm font-medium",
|
|
602
|
+
children: ft || "Drop a CSV file here or click to browse"
|
|
603
|
+
}), /* @__PURE__ */ p("p", {
|
|
604
|
+
className: "mt-1 text-xs text-text-secondary",
|
|
605
|
+
children: "CSV files only. Required column: email."
|
|
550
606
|
})]
|
|
551
607
|
}),
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
608
|
+
/* @__PURE__ */ p("input", {
|
|
609
|
+
ref: gt,
|
|
610
|
+
type: "file",
|
|
611
|
+
accept: ".csv,text/csv",
|
|
612
|
+
onChange: (e) => {
|
|
613
|
+
let t = e.target.files?.[0];
|
|
614
|
+
t && kt(t), e.target.value = "";
|
|
615
|
+
},
|
|
616
|
+
className: "hidden",
|
|
617
|
+
"aria-label": "Choose CSV file"
|
|
618
|
+
}),
|
|
619
|
+
/* @__PURE__ */ p(g, {
|
|
620
|
+
type: "button",
|
|
621
|
+
onClick: () => gt.current?.click(),
|
|
622
|
+
children: r(b, "workspaceInvite.chooseFile", "Choose file")
|
|
623
|
+
})
|
|
560
624
|
]
|
|
561
|
-
}),
|
|
562
|
-
|
|
563
|
-
variant: "outline",
|
|
564
|
-
onClick: ce,
|
|
565
|
-
className: "gap-2",
|
|
566
|
-
children: [/* @__PURE__ */ p(fe, { size: 16 }), r(x, "workspaceInvite.downloadTemplate", "Download template")]
|
|
567
|
-
})]
|
|
568
|
-
}),
|
|
569
|
-
/* @__PURE__ */ m("div", {
|
|
570
|
-
onDragOver: (e) => {
|
|
571
|
-
e.preventDefault(), U(!0);
|
|
572
|
-
},
|
|
573
|
-
onDragLeave: () => U(!1),
|
|
574
|
-
onDrop: (e) => {
|
|
575
|
-
e.preventDefault(), U(!1);
|
|
576
|
-
let t = e.dataTransfer.files?.[0];
|
|
577
|
-
t ? kt(t) : L("Please upload a .csv file.");
|
|
578
|
-
},
|
|
579
|
-
className: `flex flex-col items-center justify-center gap-3 rounded-xl border-2 border-dashed p-8 transition-colors ${mt ? "border-primary bg-action-primary-bg/5" : "border-border-subtle bg-bg-surface"}`,
|
|
580
|
-
children: [
|
|
581
|
-
/* @__PURE__ */ p(ge, {
|
|
582
|
-
size: 28,
|
|
583
|
-
className: "text-text-secondary"
|
|
584
|
-
}),
|
|
625
|
+
}),
|
|
626
|
+
V.length > 0 ? /* @__PURE__ */ m(ye, { children: [
|
|
585
627
|
/* @__PURE__ */ m("div", {
|
|
586
|
-
className: "text-
|
|
587
|
-
children: [
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
ref: gt,
|
|
597
|
-
type: "file",
|
|
598
|
-
accept: ".csv,text/csv",
|
|
599
|
-
onChange: (e) => {
|
|
600
|
-
let t = e.target.files?.[0];
|
|
601
|
-
t && kt(t), e.target.value = "";
|
|
602
|
-
},
|
|
603
|
-
className: "hidden",
|
|
604
|
-
"aria-label": "Choose CSV file"
|
|
628
|
+
className: "flex flex-wrap gap-4 text-xs text-text-secondary",
|
|
629
|
+
children: [
|
|
630
|
+
/* @__PURE__ */ m("span", { children: ["Total rows: ", V.length] }),
|
|
631
|
+
/* @__PURE__ */ m("span", { children: ["Ready: ", Q.length] }),
|
|
632
|
+
/* @__PURE__ */ m("span", { children: ["With errors: ", $.length] }),
|
|
633
|
+
$.length > 0 ? /* @__PURE__ */ p(h, {
|
|
634
|
+
variant: "destructive",
|
|
635
|
+
children: "Invalid rows will be skipped"
|
|
636
|
+
}) : null
|
|
637
|
+
]
|
|
605
638
|
}),
|
|
606
|
-
/* @__PURE__ */
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
639
|
+
$.length > 0 ? /* @__PURE__ */ m("div", {
|
|
640
|
+
className: "rounded-md border border-status-error-border/20 bg-status-error-bg/10 px-3 py-2 text-sm text-status-error-text",
|
|
641
|
+
children: [
|
|
642
|
+
$.length,
|
|
643
|
+
" row",
|
|
644
|
+
$.length === 1 ? "" : "s",
|
|
645
|
+
" need attention. Only valid rows can be invited."
|
|
646
|
+
]
|
|
647
|
+
}) : null,
|
|
648
|
+
/* @__PURE__ */ p("div", {
|
|
649
|
+
className: "overflow-hidden rounded-xl border",
|
|
650
|
+
children: /* @__PURE__ */ p(ke, {
|
|
651
|
+
columns: ze,
|
|
652
|
+
data: V,
|
|
653
|
+
rowKey: (e) => `${e.rowNumber}-${e.email}`
|
|
654
|
+
})
|
|
610
655
|
})
|
|
611
|
-
]
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
/* @__PURE__ */ m("div", {
|
|
615
|
-
className: "flex flex-wrap gap-4 text-xs text-text-secondary",
|
|
616
|
-
children: [
|
|
617
|
-
/* @__PURE__ */ m("span", { children: ["Total rows: ", V.length] }),
|
|
618
|
-
/* @__PURE__ */ m("span", { children: ["Ready: ", Q.length] }),
|
|
619
|
-
/* @__PURE__ */ m("span", { children: ["With errors: ", $.length] }),
|
|
620
|
-
$.length > 0 ? /* @__PURE__ */ p(h, {
|
|
621
|
-
variant: "destructive",
|
|
622
|
-
children: "Invalid rows will be skipped"
|
|
623
|
-
}) : null
|
|
624
|
-
]
|
|
656
|
+
] }) : /* @__PURE__ */ p("div", {
|
|
657
|
+
className: "rounded-xl border border-dashed p-6 text-center text-sm text-text-secondary",
|
|
658
|
+
children: "Upload a CSV to preview invite rows here before sending."
|
|
625
659
|
}),
|
|
626
|
-
$.length > 0 ? /* @__PURE__ */ m("div", {
|
|
627
|
-
className: "rounded-md border border-status-error-border/20 bg-status-error-bg/10 px-3 py-2 text-sm text-status-error-text",
|
|
628
|
-
children: [
|
|
629
|
-
$.length,
|
|
630
|
-
" row",
|
|
631
|
-
$.length === 1 ? "" : "s",
|
|
632
|
-
" need attention. Only valid rows can be invited."
|
|
633
|
-
]
|
|
634
|
-
}) : null,
|
|
635
660
|
/* @__PURE__ */ p("div", {
|
|
636
|
-
className: "
|
|
637
|
-
children: /* @__PURE__ */
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
661
|
+
className: "flex justify-end",
|
|
662
|
+
children: /* @__PURE__ */ m(g, {
|
|
663
|
+
type: "button",
|
|
664
|
+
onClick: At,
|
|
665
|
+
disabled: Q.length === 0 || yt || W,
|
|
666
|
+
className: "gap-2",
|
|
667
|
+
children: [yt || W ? /* @__PURE__ */ p(d, { className: "size-4 animate-spin" }) : /* @__PURE__ */ p(he, { className: "size-4" }), r(b, "workspaceInvite.sendBulkButton", "Send Bulk Invites")]
|
|
641
668
|
})
|
|
642
669
|
})
|
|
643
|
-
]
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
/* @__PURE__ */ p(
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
})
|
|
670
|
-
]
|
|
671
|
-
}) }), /* @__PURE__ */ m(v, { children: [z ? /* @__PURE__ */ m("div", {
|
|
672
|
-
className: `mb-4 flex items-center gap-2 rounded-md border p-3 text-sm ${z.tone === "success" ? "border-green-500/20 bg-green-500/10 text-green-700 dark:text-green-400" : "border-status-error-border/20 bg-status-error-bg/10 text-status-error-text"}`,
|
|
673
|
-
children: [z.tone === "success" ? /* @__PURE__ */ p(u, { className: "size-4 shrink-0" }) : /* @__PURE__ */ p(l, { className: "size-4 shrink-0" }), /* @__PURE__ */ p("span", { children: z.message })]
|
|
674
|
-
}) : null, $e ? /* @__PURE__ */ m("div", {
|
|
675
|
-
className: "space-y-3",
|
|
676
|
-
children: [/* @__PURE__ */ p(S, { className: "h-20 w-full" }), /* @__PURE__ */ p(S, { className: "h-20 w-full" })]
|
|
677
|
-
}) : et && Z.length === 0 ? /* @__PURE__ */ m("div", {
|
|
678
|
-
role: "alert",
|
|
679
|
-
className: "space-y-3 rounded-md border border-status-error-border/20 bg-status-error-bg/10 p-3 text-sm text-status-error-text",
|
|
680
|
-
children: [/* @__PURE__ */ p("p", { children: r(x, "workspaceInvite.pendingLoadFailed", "Failed to load pending invitations for this workspace.") }), /* @__PURE__ */ p(g, {
|
|
681
|
-
type: "button",
|
|
682
|
-
variant: "outline",
|
|
683
|
-
size: "sm",
|
|
684
|
-
className: "w-fit",
|
|
685
|
-
disabled: j,
|
|
686
|
-
onClick: () => {
|
|
687
|
-
tt();
|
|
688
|
-
},
|
|
689
|
-
children: j ? r(x, "workspaceInvite.retrying", "Retrying…") : r(x, "workspaceInvite.tryAgain", "Try again")
|
|
690
|
-
})]
|
|
691
|
-
}) : Z.length === 0 ? /* @__PURE__ */ p("p", {
|
|
692
|
-
className: "text-sm text-text-secondary",
|
|
693
|
-
children: r(x, "workspaceInvite.pendingEmpty", "No pending invitations for this workspace.")
|
|
694
|
-
}) : /* @__PURE__ */ m("div", {
|
|
695
|
-
className: "space-y-3",
|
|
696
|
-
children: [et ? /* @__PURE__ */ m("div", {
|
|
670
|
+
]
|
|
671
|
+
})
|
|
672
|
+
]
|
|
673
|
+
}) })]
|
|
674
|
+
}),
|
|
675
|
+
/* @__PURE__ */ m(x, {
|
|
676
|
+
treatment: "plain",
|
|
677
|
+
className: "border-border-seam",
|
|
678
|
+
children: [/* @__PURE__ */ p(v, { children: /* @__PURE__ */ m(y, {
|
|
679
|
+
className: "flex items-center gap-2",
|
|
680
|
+
children: [
|
|
681
|
+
/* @__PURE__ */ p(pe, { className: "size-5 text-primary" }),
|
|
682
|
+
r(b, "workspaceInvite.pendingTitle", "Pending Invitations"),
|
|
683
|
+
/* @__PURE__ */ p(h, {
|
|
684
|
+
variant: "secondary",
|
|
685
|
+
className: "tabular-nums",
|
|
686
|
+
children: Z.length
|
|
687
|
+
})
|
|
688
|
+
]
|
|
689
|
+
}) }), /* @__PURE__ */ m(_, { children: [z ? /* @__PURE__ */ m("div", {
|
|
690
|
+
className: `mb-4 flex items-center gap-2 rounded-md border p-3 text-sm ${z.tone === "success" ? "border-green-500/20 bg-green-500/10 text-green-700 dark:text-green-400" : "border-status-error-border/20 bg-status-error-bg/10 text-status-error-text"}`,
|
|
691
|
+
children: [z.tone === "success" ? /* @__PURE__ */ p(u, { className: "size-4 shrink-0" }) : /* @__PURE__ */ p(l, { className: "size-4 shrink-0" }), /* @__PURE__ */ p("span", { children: z.message })]
|
|
692
|
+
}) : null, $e ? /* @__PURE__ */ m("div", {
|
|
693
|
+
className: "space-y-3",
|
|
694
|
+
children: [/* @__PURE__ */ p(S, { className: "h-20 w-full" }), /* @__PURE__ */ p(S, { className: "h-20 w-full" })]
|
|
695
|
+
}) : et && Z.length === 0 ? /* @__PURE__ */ m("div", {
|
|
697
696
|
role: "alert",
|
|
698
|
-
className: "
|
|
699
|
-
children: [/* @__PURE__ */ p("
|
|
697
|
+
className: "space-y-3 rounded-md border border-status-error-border/20 bg-status-error-bg/10 p-3 text-sm text-status-error-text",
|
|
698
|
+
children: [/* @__PURE__ */ p("p", { children: r(b, "workspaceInvite.pendingLoadFailed", "Failed to load pending invitations for this workspace.") }), /* @__PURE__ */ p(g, {
|
|
700
699
|
type: "button",
|
|
701
700
|
variant: "outline",
|
|
702
701
|
size: "sm",
|
|
@@ -705,86 +704,106 @@ function O() {
|
|
|
705
704
|
onClick: () => {
|
|
706
705
|
tt();
|
|
707
706
|
},
|
|
708
|
-
children: j ? r(
|
|
707
|
+
children: j ? r(b, "workspaceInvite.retrying", "Retrying…") : r(b, "workspaceInvite.tryAgain", "Try again")
|
|
709
708
|
})]
|
|
710
|
-
}) :
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
}
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
709
|
+
}) : Z.length === 0 ? /* @__PURE__ */ p("p", {
|
|
710
|
+
className: "text-sm text-text-secondary",
|
|
711
|
+
children: r(b, "workspaceInvite.pendingEmpty", "No pending invitations for this workspace.")
|
|
712
|
+
}) : /* @__PURE__ */ m("div", {
|
|
713
|
+
className: "space-y-3",
|
|
714
|
+
children: [et ? /* @__PURE__ */ m("div", {
|
|
715
|
+
role: "alert",
|
|
716
|
+
className: "flex flex-wrap items-center justify-between gap-3 rounded-md border border-status-error-border/20 bg-status-error-bg/10 p-3 text-sm text-status-error-text",
|
|
717
|
+
children: [/* @__PURE__ */ p("span", { children: r(b, "workspaceInvite.pendingStaleWarning", "Pending invitations may be outdated. Try again to refresh this list.") }), /* @__PURE__ */ p(g, {
|
|
718
|
+
type: "button",
|
|
719
|
+
variant: "outline",
|
|
720
|
+
size: "sm",
|
|
721
|
+
className: "w-fit",
|
|
722
|
+
disabled: j,
|
|
723
|
+
onClick: () => {
|
|
724
|
+
tt();
|
|
725
|
+
},
|
|
726
|
+
children: j ? r(b, "workspaceInvite.retrying", "Retrying…") : r(b, "workspaceInvite.tryAgain", "Try again")
|
|
727
|
+
})]
|
|
728
|
+
}) : null, Z.map((e) => {
|
|
729
|
+
let t = ie(e), n = re(e), r = St === e.id && (J || Y);
|
|
730
|
+
return /* @__PURE__ */ p("div", {
|
|
731
|
+
className: "rounded-lg border p-4",
|
|
732
|
+
children: /* @__PURE__ */ m("div", {
|
|
733
|
+
className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between",
|
|
734
|
+
children: [/* @__PURE__ */ m("div", {
|
|
735
|
+
className: "space-y-3",
|
|
736
|
+
children: [
|
|
737
|
+
/* @__PURE__ */ m("div", {
|
|
738
|
+
className: "flex flex-wrap items-center gap-2",
|
|
739
|
+
children: [/* @__PURE__ */ p("p", {
|
|
740
|
+
className: "font-semibold",
|
|
741
|
+
children: e.email
|
|
742
|
+
}), /* @__PURE__ */ p(h, {
|
|
743
|
+
variant: "outline",
|
|
744
|
+
children: e.status
|
|
745
|
+
})]
|
|
746
|
+
}),
|
|
747
|
+
/* @__PURE__ */ m("div", {
|
|
748
|
+
className: "grid gap-3 text-sm text-text-secondary sm:grid-cols-2",
|
|
749
|
+
children: [/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
|
|
750
|
+
className: "font-medium text-text-primary",
|
|
751
|
+
children: "Received"
|
|
752
|
+
}), /* @__PURE__ */ p("p", { children: Ve(e.createdAt) ?? "—" })] }), /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
|
|
753
|
+
className: "font-medium text-text-primary",
|
|
754
|
+
children: "Expires"
|
|
755
|
+
}), /* @__PURE__ */ p("p", { children: Ve(e.expiresAt) ?? "—" })] })]
|
|
756
|
+
}),
|
|
757
|
+
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
|
|
758
|
+
className: "mb-2 text-sm font-medium text-text-primary",
|
|
759
|
+
children: "Roles"
|
|
760
|
+
}), /* @__PURE__ */ p("div", {
|
|
761
|
+
className: "flex flex-wrap gap-2",
|
|
762
|
+
children: t.length > 0 ? t.map((t, n) => /* @__PURE__ */ p(h, {
|
|
763
|
+
variant: "outline",
|
|
764
|
+
children: t
|
|
765
|
+
}, `${e.id}-${e.roleIds[n] ?? t}`)) : /* @__PURE__ */ p("span", {
|
|
766
|
+
className: "text-sm text-text-secondary",
|
|
767
|
+
children: "No roles selected"
|
|
768
|
+
})
|
|
769
|
+
})] }),
|
|
770
|
+
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
|
|
771
|
+
className: "mb-2 text-sm font-medium text-text-primary",
|
|
772
|
+
children: "Projects"
|
|
773
|
+
}), /* @__PURE__ */ p("div", {
|
|
774
|
+
className: "flex flex-wrap gap-2",
|
|
775
|
+
children: n.length > 0 ? n.map((t, n) => /* @__PURE__ */ p(h, {
|
|
776
|
+
variant: "secondary",
|
|
777
|
+
children: t
|
|
778
|
+
}, `${e.id}-project-${t}-${n}`)) : /* @__PURE__ */ p("span", {
|
|
779
|
+
className: "text-sm text-text-secondary",
|
|
780
|
+
children: "No project access will be granted automatically"
|
|
781
|
+
})
|
|
782
|
+
})] })
|
|
783
|
+
]
|
|
784
|
+
}), /* @__PURE__ */ m("div", {
|
|
785
|
+
className: "flex gap-2",
|
|
786
|
+
children: [/* @__PURE__ */ m(g, {
|
|
787
|
+
type: "button",
|
|
788
|
+
variant: "outline",
|
|
789
|
+
disabled: J || Y,
|
|
790
|
+
onClick: () => jt(e),
|
|
791
|
+
className: "gap-2",
|
|
792
|
+
children: [r && J ? /* @__PURE__ */ p(me, { className: "size-4 animate-spin" }) : /* @__PURE__ */ p(me, { className: "size-4" }), "Resend"]
|
|
793
|
+
}), /* @__PURE__ */ m(g, {
|
|
794
|
+
type: "button",
|
|
795
|
+
variant: "outline",
|
|
796
|
+
disabled: J || Y,
|
|
797
|
+
onClick: () => K(e),
|
|
798
|
+
className: "gap-2",
|
|
799
|
+
children: [r && Y ? /* @__PURE__ */ p(d, { className: "size-4 animate-spin" }) : /* @__PURE__ */ p(f, { className: "size-4" }), "Cancel"]
|
|
800
|
+
})]
|
|
782
801
|
})]
|
|
783
|
-
})
|
|
784
|
-
})
|
|
785
|
-
}
|
|
786
|
-
})]
|
|
787
|
-
})
|
|
802
|
+
})
|
|
803
|
+
}, e.id);
|
|
804
|
+
})]
|
|
805
|
+
})] })]
|
|
806
|
+
})
|
|
788
807
|
]
|
|
789
808
|
})] });
|
|
790
809
|
}
|