@flamingo-stack/openframe-frontend-core 0.0.701 → 0.0.702
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/{chunk-MFORWVGD.js → chunk-2V4Z44G6.js} +4 -4
- package/dist/{chunk-GFXZMFDX.cjs → chunk-3G76LRGL.cjs} +9 -9
- package/dist/{chunk-65YVUYWJ.cjs → chunk-3WSFIV5G.cjs} +32 -32
- package/dist/{chunk-GD4JALTR.js → chunk-446KS5BG.js} +1 -1
- package/dist/{chunk-BRQY2HKD.cjs → chunk-AEQANLBW.cjs} +17 -17
- package/dist/{chunk-ZSPHOHOW.cjs → chunk-ASN65P3F.cjs} +2 -2
- package/dist/{chunk-YBC346FY.cjs → chunk-B3LZJ6J3.cjs} +12 -12
- package/dist/{chunk-JPVDJB27.js → chunk-BO5ZHDA4.js} +3 -3
- package/dist/{chunk-2CSYUMNM.cjs → chunk-CXDJUKC6.cjs} +2 -2
- package/dist/{chunk-QPNR4N7N.cjs → chunk-CYYTD5ZK.cjs} +16 -16
- package/dist/{chunk-B7M6QEEM.js → chunk-CZ34HXDW.js} +661 -275
- package/dist/{chunk-4H5Q6MQG.cjs → chunk-E3DH543A.cjs} +35 -35
- package/dist/{chunk-BZYMGI4L.js → chunk-ETFFEA3J.js} +1 -1
- package/dist/{chunk-QDIX2ZRL.cjs → chunk-FD4DBTFO.cjs} +430 -44
- package/dist/{chunk-BPS7JQCI.cjs → chunk-FHM7GD5B.cjs} +2 -2
- package/dist/{chunk-QZGFJBG5.cjs → chunk-HIXGAY2L.cjs} +50 -50
- package/dist/{chunk-V5QNDOEL.js → chunk-HPJ4XS2L.js} +3 -3
- package/dist/{chunk-DJLZXJYB.js → chunk-HYFLTFFB.js} +1 -1
- package/dist/{chunk-CUPJCGLB.js → chunk-IZKOQVXO.js} +1 -1
- package/dist/{chunk-N7DPIH57.js → chunk-JOY6HVPV.js} +1 -1
- package/dist/{chunk-NIT257DV.cjs → chunk-L7KZA7ZD.cjs} +2 -2
- package/dist/{chunk-BQ34PIFC.cjs → chunk-LZNJH23A.cjs} +3 -3
- package/dist/{chunk-EONNPRAW.js → chunk-MWUBBBWZ.js} +1 -1
- package/dist/{chunk-N7HMUQRV.js → chunk-PLK6GHN7.js} +1 -1
- package/dist/{chunk-DG2I57UM.cjs → chunk-QFW3RUZS.cjs} +16 -16
- package/dist/{chunk-S4ADN25W.js → chunk-RS7HWAYX.js} +1 -1
- package/dist/{chunk-PNWIVND4.js → chunk-SAA7B3DA.js} +2 -2
- package/dist/{chunk-6JG75WVO.js → chunk-UJJWTJ6S.js} +4 -4
- package/dist/{chunk-7ZDTAABP.cjs → chunk-YGRHITPY.cjs} +3 -3
- package/dist/{chunk-A5ZGKBN2.js → chunk-Z5HDCZAS.js} +1 -1
- package/dist/components/case-studies/index.cjs +11 -11
- package/dist/components/case-studies/index.js +2 -2
- package/dist/components/contact/index.cjs +3 -3
- package/dist/components/contact/index.js +2 -2
- package/dist/components/docs/index.cjs +6 -6
- package/dist/components/docs/index.js +5 -5
- package/dist/components/embeds/index.cjs +3 -3
- package/dist/components/embeds/index.js +2 -2
- package/dist/components/faq/index.cjs +3 -3
- package/dist/components/faq/index.js +2 -2
- package/dist/components/features/index.cjs +22 -2
- package/dist/components/features/index.js +21 -1
- package/dist/components/features/remote-session/index.d.ts +9 -1
- package/dist/components/features/remote-session/index.d.ts.map +1 -1
- package/dist/components/features/remote-session/remote-session-block.d.ts +4 -2
- package/dist/components/features/remote-session/remote-session-block.d.ts.map +1 -1
- package/dist/components/features/remote-session/remote-session-chat-panel.d.ts +4 -2
- package/dist/components/features/remote-session/remote-session-chat-panel.d.ts.map +1 -1
- package/dist/components/features/remote-session/remote-session-events.d.ts +24 -0
- package/dist/components/features/remote-session/remote-session-events.d.ts.map +1 -0
- package/dist/components/features/remote-session/remote-session-keep-modals.d.ts +41 -0
- package/dist/components/features/remote-session/remote-session-keep-modals.d.ts.map +1 -0
- package/dist/components/features/remote-session/remote-session-parts.d.ts +13 -2
- package/dist/components/features/remote-session/remote-session-parts.d.ts.map +1 -1
- package/dist/components/features/remote-session/remote-session-status.d.ts +34 -0
- package/dist/components/features/remote-session/remote-session-status.d.ts.map +1 -0
- package/dist/components/features/remote-session/remote-session-viewers.d.ts +15 -0
- package/dist/components/features/remote-session/remote-session-viewers.d.ts.map +1 -0
- package/dist/components/features/remote-session/types.d.ts +22 -0
- package/dist/components/features/remote-session/types.d.ts.map +1 -1
- package/dist/components/help-center-pages/index.cjs +49 -49
- package/dist/components/help-center-pages/index.js +13 -13
- package/dist/components/index.cjs +53 -33
- package/dist/components/index.js +32 -12
- package/dist/components/meeting-scheduler/index.cjs +22 -22
- package/dist/components/meeting-scheduler/index.js +1 -1
- package/dist/components/navigation/index.cjs +5 -5
- package/dist/components/navigation/index.js +4 -4
- package/dist/components/onboarding-guides/index.cjs +5 -5
- package/dist/components/onboarding-guides/index.js +4 -4
- package/dist/components/tickets/index.cjs +6 -6
- package/dist/components/tickets/index.js +5 -5
- package/dist/components/ui/index.cjs +2 -2
- package/dist/components/ui/index.js +1 -1
- package/dist/index.cjs +26 -6
- package/dist/index.js +25 -5
- package/dist/tailwind.config.cjs +7 -1
- package/dist/tailwind.config.js +7 -1
- package/package.json +1 -1
- package/src/components/features/remote-session/index.ts +28 -0
- package/src/components/features/remote-session/remote-session-block.tsx +6 -3
- package/src/components/features/remote-session/remote-session-chat-panel.tsx +11 -7
- package/src/components/features/remote-session/remote-session-events.tsx +93 -0
- package/src/components/features/remote-session/remote-session-keep-modals.tsx +208 -0
- package/src/components/features/remote-session/remote-session-parts.tsx +32 -3
- package/src/components/features/remote-session/remote-session-status.tsx +102 -0
- package/src/components/features/remote-session/remote-session-viewers.tsx +103 -0
- package/src/components/features/remote-session/types.ts +26 -0
- package/tailwind.config.ts +6 -0
|
@@ -194,6 +194,7 @@ import {
|
|
|
194
194
|
FlaskVialIcon,
|
|
195
195
|
GoogleLogoIcon,
|
|
196
196
|
HhsLogoIcon,
|
|
197
|
+
HourglassIcon,
|
|
197
198
|
ImageOffIcon,
|
|
198
199
|
ImagePlusIcon,
|
|
199
200
|
InfoCircleIcon,
|
|
@@ -201,6 +202,7 @@ import {
|
|
|
201
202
|
IsoLogoIcon,
|
|
202
203
|
LinkedinIcon,
|
|
203
204
|
LinuxLogoIcon,
|
|
205
|
+
LockIcon,
|
|
204
206
|
MessageOffIcon,
|
|
205
207
|
MessagesIcon,
|
|
206
208
|
MicrosoftLogoIcon,
|
|
@@ -30417,8 +30419,93 @@ function TimeTrackerHeaderButton({ className, disabled }) {
|
|
|
30417
30419
|
}
|
|
30418
30420
|
|
|
30419
30421
|
// src/components/features/remote-session/remote-session-parts.tsx
|
|
30420
|
-
import { useEffect as useEffect45, useState as
|
|
30422
|
+
import { useEffect as useEffect45, useState as useState78 } from "react";
|
|
30423
|
+
|
|
30424
|
+
// src/components/features/remote-session/remote-session-viewers.tsx
|
|
30425
|
+
import { useState as useState77 } from "react";
|
|
30421
30426
|
import { jsx as jsx268, jsxs as jsxs211 } from "react/jsx-runtime";
|
|
30427
|
+
function viewerLabel(viewer) {
|
|
30428
|
+
if (viewer.isHost) return `${viewer.name} (host)`;
|
|
30429
|
+
if (viewer.isYou) return `${viewer.name} (you)`;
|
|
30430
|
+
return viewer.name;
|
|
30431
|
+
}
|
|
30432
|
+
function hostFirst(viewers) {
|
|
30433
|
+
return [...viewers.filter((viewer) => viewer.isHost), ...viewers.filter((viewer) => !viewer.isHost)];
|
|
30434
|
+
}
|
|
30435
|
+
function RemoteSessionViewers({ viewers, max = 4, className }) {
|
|
30436
|
+
const [open, setOpen] = useState77(false);
|
|
30437
|
+
if (viewers.length === 0) return null;
|
|
30438
|
+
const ordered = hostFirst(viewers);
|
|
30439
|
+
const faces = ordered.slice(0, max);
|
|
30440
|
+
const overflow2 = ordered.length - faces.length;
|
|
30441
|
+
const Chevron = open ? Chevron02UpIcon : Chevron02DownIcon;
|
|
30442
|
+
return /* @__PURE__ */ jsxs211(DropdownMenu, { open, onOpenChange: setOpen, children: [
|
|
30443
|
+
/* @__PURE__ */ jsxs211(
|
|
30444
|
+
DropdownMenuTrigger,
|
|
30445
|
+
{
|
|
30446
|
+
"aria-label": `In this session: ${ordered.map(viewerLabel).join(", ")}`,
|
|
30447
|
+
className: cn(
|
|
30448
|
+
"flex shrink-0 items-center gap-[var(--spacing-system-xxs)] rounded-md outline-none",
|
|
30449
|
+
"focus-visible:ring-2 focus-visible:ring-ods-focus",
|
|
30450
|
+
className
|
|
30451
|
+
),
|
|
30452
|
+
children: [
|
|
30453
|
+
/* @__PURE__ */ jsxs211("span", { className: "flex items-center", children: [
|
|
30454
|
+
faces.map((viewer, index) => /* @__PURE__ */ jsx268(
|
|
30455
|
+
SquareAvatar,
|
|
30456
|
+
{
|
|
30457
|
+
variant: "round",
|
|
30458
|
+
sizePx: 32,
|
|
30459
|
+
src: viewer.avatarUrl ?? void 0,
|
|
30460
|
+
alt: viewer.name,
|
|
30461
|
+
fallback: viewer.name,
|
|
30462
|
+
className: cn(
|
|
30463
|
+
"relative bg-ods-bg",
|
|
30464
|
+
viewer.isHost ? "ring-2 ring-ods-accent" : "ring-1 ring-ods-border",
|
|
30465
|
+
index > 0 && "-ml-2"
|
|
30466
|
+
),
|
|
30467
|
+
style: { zIndex: faces.length - index + 1 }
|
|
30468
|
+
},
|
|
30469
|
+
viewer.id
|
|
30470
|
+
)),
|
|
30471
|
+
overflow2 > 0 && /* @__PURE__ */ jsxs211("span", { className: "relative -ml-2 flex size-8 shrink-0 items-center justify-center rounded-full bg-ods-bg text-ods-text-secondary ring-1 ring-ods-border text-h6", children: [
|
|
30472
|
+
"+",
|
|
30473
|
+
overflow2
|
|
30474
|
+
] })
|
|
30475
|
+
] }),
|
|
30476
|
+
/* @__PURE__ */ jsx268("span", { className: "flex size-8 items-center justify-center rounded-md text-ods-text-primary", children: /* @__PURE__ */ jsx268(Chevron, { size: 16, color: "currentColor" }) })
|
|
30477
|
+
]
|
|
30478
|
+
}
|
|
30479
|
+
),
|
|
30480
|
+
/* @__PURE__ */ jsx268(DropdownMenuContent, { align: "end", className: "w-[280px] p-0", children: ordered.map((viewer) => /* @__PURE__ */ jsxs211(
|
|
30481
|
+
DropdownMenuItem,
|
|
30482
|
+
{
|
|
30483
|
+
className: cn(
|
|
30484
|
+
"gap-[var(--spacing-system-xsf)] rounded-none border-b border-ods-border bg-ods-bg last:border-b-0",
|
|
30485
|
+
"py-[var(--spacing-system-s)] pl-[var(--spacing-system-mf)] pr-[var(--spacing-system-xs)] text-h4"
|
|
30486
|
+
),
|
|
30487
|
+
children: [
|
|
30488
|
+
/* @__PURE__ */ jsx268(
|
|
30489
|
+
SquareAvatar,
|
|
30490
|
+
{
|
|
30491
|
+
variant: "round",
|
|
30492
|
+
sizePx: 24,
|
|
30493
|
+
src: viewer.avatarUrl ?? void 0,
|
|
30494
|
+
alt: "",
|
|
30495
|
+
fallback: viewer.name,
|
|
30496
|
+
className: "shrink-0"
|
|
30497
|
+
}
|
|
30498
|
+
),
|
|
30499
|
+
/* @__PURE__ */ jsx268("span", { className: "min-w-0 flex-1 truncate", children: viewerLabel(viewer) })
|
|
30500
|
+
]
|
|
30501
|
+
},
|
|
30502
|
+
viewer.id
|
|
30503
|
+
)) })
|
|
30504
|
+
] });
|
|
30505
|
+
}
|
|
30506
|
+
|
|
30507
|
+
// src/components/features/remote-session/remote-session-parts.tsx
|
|
30508
|
+
import { jsx as jsx269, jsxs as jsxs212 } from "react/jsx-runtime";
|
|
30422
30509
|
var DESKTOP_SCALE = {
|
|
30423
30510
|
"--spacing-system-xs": "0.5rem",
|
|
30424
30511
|
"--spacing-system-s": "0.75rem",
|
|
@@ -30439,11 +30526,11 @@ var DESKTOP_SCALE = {
|
|
|
30439
30526
|
"--font-line-space-h6-caption": "1.25rem"
|
|
30440
30527
|
};
|
|
30441
30528
|
function RemoteSessionScope({ children, className }) {
|
|
30442
|
-
return /* @__PURE__ */
|
|
30529
|
+
return /* @__PURE__ */ jsx269("div", { "data-app-type": "openframe", style: DESKTOP_SCALE, className, children });
|
|
30443
30530
|
}
|
|
30444
30531
|
function RemoteSessionOrgLogo({ name, logoUrl, sizePx, className }) {
|
|
30445
30532
|
if (logoUrl) {
|
|
30446
|
-
return /* @__PURE__ */
|
|
30533
|
+
return /* @__PURE__ */ jsx269(
|
|
30447
30534
|
SquareAvatar,
|
|
30448
30535
|
{
|
|
30449
30536
|
variant: "square",
|
|
@@ -30456,7 +30543,7 @@ function RemoteSessionOrgLogo({ name, logoUrl, sizePx, className }) {
|
|
|
30456
30543
|
}
|
|
30457
30544
|
);
|
|
30458
30545
|
}
|
|
30459
|
-
return /* @__PURE__ */
|
|
30546
|
+
return /* @__PURE__ */ jsx269(
|
|
30460
30547
|
"div",
|
|
30461
30548
|
{
|
|
30462
30549
|
role: "img",
|
|
@@ -30466,19 +30553,40 @@ function RemoteSessionOrgLogo({ name, logoUrl, sizePx, className }) {
|
|
|
30466
30553
|
"flex shrink-0 items-center justify-center rounded-md border border-ods-border bg-ods-card",
|
|
30467
30554
|
className
|
|
30468
30555
|
),
|
|
30469
|
-
children: /* @__PURE__ */
|
|
30556
|
+
children: /* @__PURE__ */ jsx269(OpenFrameLogo, { className: "size-1/2" })
|
|
30557
|
+
}
|
|
30558
|
+
);
|
|
30559
|
+
}
|
|
30560
|
+
function RemoteSessionRecordingTag({ className }) {
|
|
30561
|
+
return /* @__PURE__ */ jsxs212(
|
|
30562
|
+
"div",
|
|
30563
|
+
{
|
|
30564
|
+
className: cn(
|
|
30565
|
+
"flex h-8 items-center gap-[var(--spacing-system-xs)] self-start rounded-md bg-ods-success-secondary p-[var(--spacing-system-xsf)]",
|
|
30566
|
+
className
|
|
30567
|
+
),
|
|
30568
|
+
children: [
|
|
30569
|
+
/* @__PURE__ */ jsx269(RecordingIcon, { size: 16, color: "currentColor", className: "text-ods-success" }),
|
|
30570
|
+
/* @__PURE__ */ jsx269("span", { className: "text-ods-success text-h5", children: "Session Recording" })
|
|
30571
|
+
]
|
|
30470
30572
|
}
|
|
30471
30573
|
);
|
|
30472
30574
|
}
|
|
30473
|
-
function
|
|
30474
|
-
|
|
30475
|
-
|
|
30476
|
-
|
|
30575
|
+
function RemoteSessionStatusRow({
|
|
30576
|
+
showRecordingTag,
|
|
30577
|
+
viewers
|
|
30578
|
+
}) {
|
|
30579
|
+
const hasViewers = !!viewers && viewers.length > 0;
|
|
30580
|
+
if (!showRecordingTag && !hasViewers) return null;
|
|
30581
|
+
if (!hasViewers) return /* @__PURE__ */ jsx269(RemoteSessionRecordingTag, {});
|
|
30582
|
+
return /* @__PURE__ */ jsxs212("div", { className: "flex w-full items-center gap-[var(--spacing-system-m)]", children: [
|
|
30583
|
+
showRecordingTag && /* @__PURE__ */ jsx269(RemoteSessionRecordingTag, { className: "flex-1 justify-center self-auto" }),
|
|
30584
|
+
/* @__PURE__ */ jsx269(RemoteSessionViewers, { viewers, className: "ml-auto" })
|
|
30477
30585
|
] });
|
|
30478
30586
|
}
|
|
30479
30587
|
var REMOTE_SESSION_DRAG_HANDLE_CLASS = "cursor-grab active:cursor-grabbing";
|
|
30480
30588
|
function RemoteSessionDragger({ dragHandlers }) {
|
|
30481
|
-
return /* @__PURE__ */
|
|
30589
|
+
return /* @__PURE__ */ jsx269(
|
|
30482
30590
|
"span",
|
|
30483
30591
|
{
|
|
30484
30592
|
"aria-hidden": true,
|
|
@@ -30487,7 +30595,7 @@ function RemoteSessionDragger({ dragHandlers }) {
|
|
|
30487
30595
|
dragHandlers && REMOTE_SESSION_DRAG_HANDLE_CLASS
|
|
30488
30596
|
),
|
|
30489
30597
|
...dragHandlers,
|
|
30490
|
-
children: /* @__PURE__ */
|
|
30598
|
+
children: /* @__PURE__ */ jsx269(DraggerIcon, { size: 24, color: "currentColor" })
|
|
30491
30599
|
}
|
|
30492
30600
|
);
|
|
30493
30601
|
}
|
|
@@ -30499,7 +30607,7 @@ function formatRemoteSessionElapsed(elapsedMs) {
|
|
|
30499
30607
|
return hours > 0 ? `${hours}:${String(minutes).padStart(2, "0")}:${seconds}` : `${minutes}:${seconds}`;
|
|
30500
30608
|
}
|
|
30501
30609
|
function useRemoteSessionTimer(startedAt) {
|
|
30502
|
-
const [nowMs, setNowMs] =
|
|
30610
|
+
const [nowMs, setNowMs] = useState78(() => Date.now());
|
|
30503
30611
|
useEffect45(() => {
|
|
30504
30612
|
const timer = setInterval(() => setNowMs(Date.now()), 1e3);
|
|
30505
30613
|
return () => clearInterval(timer);
|
|
@@ -30508,7 +30616,7 @@ function useRemoteSessionTimer(startedAt) {
|
|
|
30508
30616
|
}
|
|
30509
30617
|
|
|
30510
30618
|
// src/components/features/remote-session/remote-access-request-card.tsx
|
|
30511
|
-
import { jsx as
|
|
30619
|
+
import { jsx as jsx270, jsxs as jsxs213 } from "react/jsx-runtime";
|
|
30512
30620
|
function displaySiteUrl(url) {
|
|
30513
30621
|
return url.replace(/^https?:\/\//, "").replace(/\/$/, "");
|
|
30514
30622
|
}
|
|
@@ -30523,30 +30631,30 @@ function RemoteAccessRequestCard({
|
|
|
30523
30631
|
const { organizationName } = party;
|
|
30524
30632
|
const siteUrl = party.organizationSiteUrl ?? void 0;
|
|
30525
30633
|
const openableSite = siteUrl?.startsWith("https://") ? siteUrl : void 0;
|
|
30526
|
-
return /* @__PURE__ */
|
|
30527
|
-
/* @__PURE__ */
|
|
30528
|
-
/* @__PURE__ */
|
|
30529
|
-
/* @__PURE__ */
|
|
30530
|
-
/* @__PURE__ */
|
|
30531
|
-
/* @__PURE__ */
|
|
30532
|
-
siteUrl && /* @__PURE__ */
|
|
30634
|
+
return /* @__PURE__ */ jsxs213("div", { className: "flex w-full flex-col gap-[var(--spacing-system-l)] rounded-md border border-ods-border bg-ods-card p-[var(--spacing-system-xl)]", children: [
|
|
30635
|
+
/* @__PURE__ */ jsx270("h1", { className: "w-full text-ods-text-primary text-h2", children: "Your IT support team is requesting remote access" }),
|
|
30636
|
+
/* @__PURE__ */ jsxs213("div", { className: "flex w-full items-center gap-[var(--spacing-system-m)] rounded-md border border-ods-border bg-ods-bg p-[var(--spacing-system-m)]", children: [
|
|
30637
|
+
/* @__PURE__ */ jsx270(RemoteSessionOrgLogo, { name: organizationName, logoUrl: party.organizationLogoUrl, sizePx: 64 }),
|
|
30638
|
+
/* @__PURE__ */ jsxs213("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
30639
|
+
/* @__PURE__ */ jsx270("p", { className: "w-full truncate text-ods-text-primary text-h3", children: organizationName }),
|
|
30640
|
+
siteUrl && /* @__PURE__ */ jsx270("p", { className: "w-full truncate text-ods-text-secondary text-h4", children: displaySiteUrl(siteUrl) })
|
|
30533
30641
|
] }),
|
|
30534
|
-
openableSite && onOpenSite && /* @__PURE__ */
|
|
30642
|
+
openableSite && onOpenSite && /* @__PURE__ */ jsx270(Button, { variant: "outline", size: "icon", "aria-label": "Open website", onClick: () => onOpenSite(openableSite), children: /* @__PURE__ */ jsx270(ExternalLinkIcon, { size: 24, color: "currentColor" }) })
|
|
30535
30643
|
] }),
|
|
30536
|
-
/* @__PURE__ */
|
|
30644
|
+
/* @__PURE__ */ jsxs213("p", { className: "w-full text-ods-text-primary text-h4", children: [
|
|
30537
30645
|
"A technician from ",
|
|
30538
|
-
/* @__PURE__ */
|
|
30646
|
+
/* @__PURE__ */ jsx270("span", { className: "text-ods-accent", children: organizationName }),
|
|
30539
30647
|
" will be able to view your screen and control your mouse and keyboard during this session."
|
|
30540
30648
|
] }),
|
|
30541
|
-
/* @__PURE__ */
|
|
30542
|
-
showRecordingNotice && /* @__PURE__ */
|
|
30543
|
-
/* @__PURE__ */
|
|
30544
|
-
/* @__PURE__ */
|
|
30649
|
+
/* @__PURE__ */ jsxs213("div", { className: "flex w-full flex-col gap-[var(--spacing-system-xs)]", children: [
|
|
30650
|
+
showRecordingNotice && /* @__PURE__ */ jsxs213("div", { className: "flex w-full items-center gap-[var(--spacing-system-xs)] rounded-md border border-ods-border bg-ods-bg p-[var(--spacing-system-s)]", children: [
|
|
30651
|
+
/* @__PURE__ */ jsx270(InfoCircleIcon, { size: 24, color: "currentColor", className: "shrink-0 text-ods-accent" }),
|
|
30652
|
+
/* @__PURE__ */ jsx270("p", { className: "min-w-0 flex-1 text-ods-text-primary text-h6", children: "This session will be recorded and available upon request." })
|
|
30545
30653
|
] }),
|
|
30546
|
-
error ? /* @__PURE__ */
|
|
30654
|
+
error ? /* @__PURE__ */ jsx270("p", { className: "w-full text-ods-text-primary text-h6", children: error }) : /* @__PURE__ */ jsx270("p", { className: "w-full text-ods-text-secondary text-h6", children: "You can end the session at any time." })
|
|
30547
30655
|
] }),
|
|
30548
|
-
/* @__PURE__ */
|
|
30549
|
-
/* @__PURE__ */
|
|
30656
|
+
/* @__PURE__ */ jsxs213("div", { className: "flex w-full items-stretch gap-[var(--spacing-system-l)]", children: [
|
|
30657
|
+
/* @__PURE__ */ jsx270(
|
|
30550
30658
|
Button,
|
|
30551
30659
|
{
|
|
30552
30660
|
variant: "outline",
|
|
@@ -30557,7 +30665,7 @@ function RemoteAccessRequestCard({
|
|
|
30557
30665
|
children: "Decline"
|
|
30558
30666
|
}
|
|
30559
30667
|
),
|
|
30560
|
-
/* @__PURE__ */
|
|
30668
|
+
/* @__PURE__ */ jsx270(
|
|
30561
30669
|
Button,
|
|
30562
30670
|
{
|
|
30563
30671
|
variant: "accent",
|
|
@@ -30574,10 +30682,10 @@ function RemoteAccessRequestCard({
|
|
|
30574
30682
|
|
|
30575
30683
|
// src/components/features/remote-session/remote-session-block.tsx
|
|
30576
30684
|
import { forwardRef as forwardRef31 } from "react";
|
|
30577
|
-
import { jsx as
|
|
30685
|
+
import { jsx as jsx271, jsxs as jsxs214 } from "react/jsx-runtime";
|
|
30578
30686
|
var RemoteSessionBlockFrame = forwardRef31(
|
|
30579
30687
|
({ children, expanded = false, onHide, className }, ref) => {
|
|
30580
|
-
return /* @__PURE__ */
|
|
30688
|
+
return /* @__PURE__ */ jsxs214(
|
|
30581
30689
|
"div",
|
|
30582
30690
|
{
|
|
30583
30691
|
ref,
|
|
@@ -30588,16 +30696,16 @@ var RemoteSessionBlockFrame = forwardRef31(
|
|
|
30588
30696
|
),
|
|
30589
30697
|
children: [
|
|
30590
30698
|
children,
|
|
30591
|
-
/* @__PURE__ */
|
|
30699
|
+
/* @__PURE__ */ jsxs214(
|
|
30592
30700
|
"button",
|
|
30593
30701
|
{
|
|
30594
30702
|
type: "button",
|
|
30595
30703
|
className: "flex h-12 w-full shrink-0 items-center gap-[var(--spacing-system-xs)] border-t border-ods-border bg-ods-card px-[var(--spacing-system-m)]",
|
|
30596
30704
|
onClick: onHide,
|
|
30597
30705
|
children: [
|
|
30598
|
-
/* @__PURE__ */
|
|
30599
|
-
/* @__PURE__ */
|
|
30600
|
-
/* @__PURE__ */
|
|
30706
|
+
/* @__PURE__ */ jsx271(Chevrons03RightIcon, { size: 24 }),
|
|
30707
|
+
/* @__PURE__ */ jsx271("span", { className: "min-w-0 flex-1 truncate text-left text-ods-text-secondary text-h4", children: "Hide this Block" }),
|
|
30708
|
+
/* @__PURE__ */ jsx271(OpenFrameLogo, { className: "size-6 shrink-0" })
|
|
30601
30709
|
]
|
|
30602
30710
|
}
|
|
30603
30711
|
)
|
|
@@ -30608,12 +30716,12 @@ var RemoteSessionBlockFrame = forwardRef31(
|
|
|
30608
30716
|
);
|
|
30609
30717
|
RemoteSessionBlockFrame.displayName = "RemoteSessionBlockFrame";
|
|
30610
30718
|
function RemoteSessionEndButton({ onEndSession }) {
|
|
30611
|
-
return /* @__PURE__ */
|
|
30719
|
+
return /* @__PURE__ */ jsx271(
|
|
30612
30720
|
Button,
|
|
30613
30721
|
{
|
|
30614
30722
|
variant: "outline",
|
|
30615
30723
|
fullWidth: true,
|
|
30616
|
-
leftIcon: /* @__PURE__ */
|
|
30724
|
+
leftIcon: /* @__PURE__ */ jsx271(MonitorOffIcon, { size: 24, color: "currentColor", className: "text-ods-error" }),
|
|
30617
30725
|
onClick: onEndSession,
|
|
30618
30726
|
children: "End Session"
|
|
30619
30727
|
}
|
|
@@ -30623,14 +30731,15 @@ function RemoteSessionSummary({
|
|
|
30623
30731
|
party,
|
|
30624
30732
|
elapsed,
|
|
30625
30733
|
showRecordingTag = false,
|
|
30734
|
+
viewers,
|
|
30626
30735
|
onOpenChat,
|
|
30627
30736
|
onEndSession,
|
|
30628
30737
|
dragHandlers
|
|
30629
30738
|
}) {
|
|
30630
30739
|
const technician = party.technicianName;
|
|
30631
|
-
return /* @__PURE__ */
|
|
30632
|
-
/* @__PURE__ */
|
|
30633
|
-
/* @__PURE__ */
|
|
30740
|
+
return /* @__PURE__ */ jsxs214("div", { className: "relative flex flex-col gap-[var(--spacing-system-m)] p-[var(--spacing-system-m)]", children: [
|
|
30741
|
+
/* @__PURE__ */ jsx271(RemoteSessionDragger, { dragHandlers }),
|
|
30742
|
+
/* @__PURE__ */ jsxs214(
|
|
30634
30743
|
"div",
|
|
30635
30744
|
{
|
|
30636
30745
|
className: cn(
|
|
@@ -30639,7 +30748,7 @@ function RemoteSessionSummary({
|
|
|
30639
30748
|
),
|
|
30640
30749
|
...dragHandlers,
|
|
30641
30750
|
children: [
|
|
30642
|
-
technician ? /* @__PURE__ */
|
|
30751
|
+
technician ? /* @__PURE__ */ jsx271(
|
|
30643
30752
|
SquareAvatar,
|
|
30644
30753
|
{
|
|
30645
30754
|
variant: "round",
|
|
@@ -30647,42 +30756,42 @@ function RemoteSessionSummary({
|
|
|
30647
30756
|
src: party.technicianAvatarUrl ?? void 0,
|
|
30648
30757
|
fallback: technician
|
|
30649
30758
|
}
|
|
30650
|
-
) : /* @__PURE__ */
|
|
30651
|
-
/* @__PURE__ */
|
|
30652
|
-
/* @__PURE__ */
|
|
30759
|
+
) : /* @__PURE__ */ jsx271(RemoteSessionOrgLogo, { name: party.organizationName, logoUrl: party.organizationLogoUrl, sizePx: 48 }),
|
|
30760
|
+
/* @__PURE__ */ jsxs214("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
30761
|
+
/* @__PURE__ */ jsxs214("p", { className: "w-full truncate text-ods-text-primary text-h4", children: [
|
|
30653
30762
|
technician ? `${technician} connected` : "IT support team is connected",
|
|
30654
30763
|
" ",
|
|
30655
|
-
/* @__PURE__ */
|
|
30764
|
+
/* @__PURE__ */ jsxs214("span", { className: "text-ods-text-secondary", children: [
|
|
30656
30765
|
"(",
|
|
30657
30766
|
elapsed,
|
|
30658
30767
|
")"
|
|
30659
30768
|
] })
|
|
30660
30769
|
] }),
|
|
30661
|
-
/* @__PURE__ */
|
|
30770
|
+
/* @__PURE__ */ jsx271("p", { className: "w-full truncate text-ods-text-secondary text-h4", children: party.organizationName })
|
|
30662
30771
|
] })
|
|
30663
30772
|
]
|
|
30664
30773
|
}
|
|
30665
30774
|
),
|
|
30666
|
-
|
|
30667
|
-
/* @__PURE__ */
|
|
30668
|
-
/* @__PURE__ */
|
|
30775
|
+
/* @__PURE__ */ jsx271(RemoteSessionStatusRow, { showRecordingTag, viewers }),
|
|
30776
|
+
/* @__PURE__ */ jsxs214("div", { className: "flex w-full items-stretch gap-[var(--spacing-system-m)]", children: [
|
|
30777
|
+
/* @__PURE__ */ jsx271(
|
|
30669
30778
|
Button,
|
|
30670
30779
|
{
|
|
30671
30780
|
variant: "outline",
|
|
30672
30781
|
fullWidth: true,
|
|
30673
|
-
leftIcon: /* @__PURE__ */
|
|
30782
|
+
leftIcon: /* @__PURE__ */ jsx271(ChatsIcon, { size: 24, color: "currentColor" }),
|
|
30674
30783
|
onClick: onOpenChat,
|
|
30675
30784
|
children: "Open Chat"
|
|
30676
30785
|
}
|
|
30677
30786
|
),
|
|
30678
|
-
/* @__PURE__ */
|
|
30787
|
+
/* @__PURE__ */ jsx271(RemoteSessionEndButton, { onEndSession })
|
|
30679
30788
|
] })
|
|
30680
30789
|
] });
|
|
30681
30790
|
}
|
|
30682
30791
|
var RemoteSessionMinimizedChip = forwardRef31(
|
|
30683
30792
|
({ party, onExpand, dragHandlers }, ref) => {
|
|
30684
30793
|
const technician = party.technicianName;
|
|
30685
|
-
return /* @__PURE__ */
|
|
30794
|
+
return /* @__PURE__ */ jsxs214(
|
|
30686
30795
|
"button",
|
|
30687
30796
|
{
|
|
30688
30797
|
ref,
|
|
@@ -30695,7 +30804,7 @@ var RemoteSessionMinimizedChip = forwardRef31(
|
|
|
30695
30804
|
onClick: onExpand,
|
|
30696
30805
|
...dragHandlers,
|
|
30697
30806
|
children: [
|
|
30698
|
-
technician ? /* @__PURE__ */
|
|
30807
|
+
technician ? /* @__PURE__ */ jsx271(
|
|
30699
30808
|
SquareAvatar,
|
|
30700
30809
|
{
|
|
30701
30810
|
sizePx: 48,
|
|
@@ -30703,7 +30812,7 @@ var RemoteSessionMinimizedChip = forwardRef31(
|
|
|
30703
30812
|
fallback: technician,
|
|
30704
30813
|
className: "rounded-none"
|
|
30705
30814
|
}
|
|
30706
|
-
) : /* @__PURE__ */
|
|
30815
|
+
) : /* @__PURE__ */ jsx271(
|
|
30707
30816
|
RemoteSessionOrgLogo,
|
|
30708
30817
|
{
|
|
30709
30818
|
name: party.organizationName,
|
|
@@ -30712,7 +30821,7 @@ var RemoteSessionMinimizedChip = forwardRef31(
|
|
|
30712
30821
|
className: "rounded-none border-0"
|
|
30713
30822
|
}
|
|
30714
30823
|
),
|
|
30715
|
-
/* @__PURE__ */
|
|
30824
|
+
/* @__PURE__ */ jsx271("span", { className: "flex h-9 w-12 items-center justify-center border-t border-ods-border bg-ods-card", children: /* @__PURE__ */ jsx271(Chevrons03LeftIcon, { size: 24 }) })
|
|
30716
30825
|
]
|
|
30717
30826
|
}
|
|
30718
30827
|
);
|
|
@@ -30722,7 +30831,7 @@ RemoteSessionMinimizedChip.displayName = "RemoteSessionMinimizedChip";
|
|
|
30722
30831
|
|
|
30723
30832
|
// src/components/features/remote-session/remote-session-chat-panel.tsx
|
|
30724
30833
|
import { useEffect as useEffect46, useRef as useRef40 } from "react";
|
|
30725
|
-
import { jsx as
|
|
30834
|
+
import { jsx as jsx272, jsxs as jsxs215 } from "react/jsx-runtime";
|
|
30726
30835
|
function formatTime2(at) {
|
|
30727
30836
|
return at.toLocaleTimeString([], { hour: "numeric", minute: "2-digit" });
|
|
30728
30837
|
}
|
|
@@ -30731,6 +30840,7 @@ function RemoteSessionChatPanel({
|
|
|
30731
30840
|
elapsed,
|
|
30732
30841
|
messages,
|
|
30733
30842
|
showRecordingTag = false,
|
|
30843
|
+
viewers,
|
|
30734
30844
|
draft,
|
|
30735
30845
|
onDraftChange,
|
|
30736
30846
|
onSend,
|
|
@@ -30751,10 +30861,10 @@ function RemoteSessionChatPanel({
|
|
|
30751
30861
|
onSend(text);
|
|
30752
30862
|
onDraftChange("");
|
|
30753
30863
|
};
|
|
30754
|
-
return /* @__PURE__ */
|
|
30755
|
-
/* @__PURE__ */
|
|
30756
|
-
/* @__PURE__ */
|
|
30757
|
-
/* @__PURE__ */
|
|
30864
|
+
return /* @__PURE__ */ jsxs215("div", { className: "flex min-h-0 flex-1 flex-col", children: [
|
|
30865
|
+
/* @__PURE__ */ jsxs215("div", { className: "relative flex flex-col gap-[var(--spacing-system-m)] p-[var(--spacing-system-m)]", children: [
|
|
30866
|
+
/* @__PURE__ */ jsx272(RemoteSessionDragger, { dragHandlers }),
|
|
30867
|
+
/* @__PURE__ */ jsxs215(
|
|
30758
30868
|
"div",
|
|
30759
30869
|
{
|
|
30760
30870
|
className: cn(
|
|
@@ -30763,45 +30873,45 @@ function RemoteSessionChatPanel({
|
|
|
30763
30873
|
),
|
|
30764
30874
|
...dragHandlers,
|
|
30765
30875
|
children: [
|
|
30766
|
-
/* @__PURE__ */
|
|
30876
|
+
/* @__PURE__ */ jsxs215("p", { className: "w-full truncate text-ods-text-primary text-h4", children: [
|
|
30767
30877
|
"Your IT support team is connected ",
|
|
30768
|
-
/* @__PURE__ */
|
|
30878
|
+
/* @__PURE__ */ jsxs215("span", { className: "text-ods-text-secondary", children: [
|
|
30769
30879
|
"(",
|
|
30770
30880
|
elapsed,
|
|
30771
30881
|
")"
|
|
30772
30882
|
] })
|
|
30773
30883
|
] }),
|
|
30774
|
-
/* @__PURE__ */
|
|
30884
|
+
/* @__PURE__ */ jsx272("p", { className: "w-full truncate text-ods-text-secondary text-h4", children: "You can end this session at any time" })
|
|
30775
30885
|
]
|
|
30776
30886
|
}
|
|
30777
30887
|
),
|
|
30778
|
-
|
|
30779
|
-
/* @__PURE__ */
|
|
30780
|
-
/* @__PURE__ */
|
|
30888
|
+
/* @__PURE__ */ jsx272(RemoteSessionStatusRow, { showRecordingTag, viewers }),
|
|
30889
|
+
/* @__PURE__ */ jsxs215("div", { className: "flex w-full items-stretch gap-[var(--spacing-system-m)]", children: [
|
|
30890
|
+
/* @__PURE__ */ jsx272(
|
|
30781
30891
|
Button,
|
|
30782
30892
|
{
|
|
30783
30893
|
variant: "outline",
|
|
30784
30894
|
fullWidth: true,
|
|
30785
|
-
leftIcon: /* @__PURE__ */
|
|
30895
|
+
leftIcon: /* @__PURE__ */ jsx272(MessageOffIcon, { size: 24, color: "currentColor" }),
|
|
30786
30896
|
onClick: onCloseChat,
|
|
30787
30897
|
children: "Close Chat"
|
|
30788
30898
|
}
|
|
30789
30899
|
),
|
|
30790
|
-
/* @__PURE__ */
|
|
30900
|
+
/* @__PURE__ */ jsx272(RemoteSessionEndButton, { onEndSession })
|
|
30791
30901
|
] })
|
|
30792
30902
|
] }),
|
|
30793
|
-
/* @__PURE__ */
|
|
30903
|
+
/* @__PURE__ */ jsx272(
|
|
30794
30904
|
"div",
|
|
30795
30905
|
{
|
|
30796
30906
|
ref: listRef,
|
|
30797
30907
|
className: "flex min-h-0 flex-1 flex-col overflow-y-auto bg-ods-card p-[var(--spacing-system-m)]",
|
|
30798
|
-
children: /* @__PURE__ */
|
|
30799
|
-
(message) => message.author === "system" ? /* @__PURE__ */
|
|
30908
|
+
children: /* @__PURE__ */ jsx272("div", { className: "mt-auto flex flex-col gap-[var(--spacing-system-s)]", children: messages.map(
|
|
30909
|
+
(message) => message.author === "system" ? /* @__PURE__ */ jsx272("p", { className: "w-full text-center text-ods-text-secondary text-h6", children: message.text }, message.id) : /* @__PURE__ */ jsx272(RemoteSessionChatMessageRow, { message, party }, message.id)
|
|
30800
30910
|
) })
|
|
30801
30911
|
}
|
|
30802
30912
|
),
|
|
30803
|
-
error && /* @__PURE__ */
|
|
30804
|
-
/* @__PURE__ */
|
|
30913
|
+
error && /* @__PURE__ */ jsx272("p", { className: "bg-ods-card px-[var(--spacing-system-m)] text-ods-error text-h6", children: error }),
|
|
30914
|
+
/* @__PURE__ */ jsxs215(
|
|
30805
30915
|
"form",
|
|
30806
30916
|
{
|
|
30807
30917
|
className: "flex items-center gap-[var(--spacing-system-xs)] bg-ods-card px-[var(--spacing-system-m)] pb-[var(--spacing-system-m)]",
|
|
@@ -30810,7 +30920,7 @@ function RemoteSessionChatPanel({
|
|
|
30810
30920
|
handleSend();
|
|
30811
30921
|
},
|
|
30812
30922
|
children: [
|
|
30813
|
-
/* @__PURE__ */
|
|
30923
|
+
/* @__PURE__ */ jsx272(
|
|
30814
30924
|
"input",
|
|
30815
30925
|
{
|
|
30816
30926
|
value: draft,
|
|
@@ -30821,14 +30931,14 @@ function RemoteSessionChatPanel({
|
|
|
30821
30931
|
className: "h-12 min-w-0 flex-1 rounded-md border border-ods-border bg-ods-bg px-[var(--spacing-system-s)] text-ods-text-primary outline-none text-h6 placeholder:text-ods-text-secondary"
|
|
30822
30932
|
}
|
|
30823
30933
|
),
|
|
30824
|
-
/* @__PURE__ */
|
|
30934
|
+
/* @__PURE__ */ jsx272(
|
|
30825
30935
|
"button",
|
|
30826
30936
|
{
|
|
30827
30937
|
type: "submit",
|
|
30828
30938
|
"aria-label": "Send message",
|
|
30829
30939
|
disabled: !ready,
|
|
30830
30940
|
className: "flex size-12 shrink-0 items-center justify-center",
|
|
30831
|
-
children: /* @__PURE__ */
|
|
30941
|
+
children: /* @__PURE__ */ jsx272(Send03Icon, { size: 24, color: "currentColor", className: "text-ods-text-primary" })
|
|
30832
30942
|
}
|
|
30833
30943
|
)
|
|
30834
30944
|
]
|
|
@@ -30842,9 +30952,9 @@ function RemoteSessionChatMessageRow({
|
|
|
30842
30952
|
}) {
|
|
30843
30953
|
const isTechnician = message.author === "technician";
|
|
30844
30954
|
const technician = message.name ?? party.technicianName ?? "Technician";
|
|
30845
|
-
return /* @__PURE__ */
|
|
30846
|
-
/* @__PURE__ */
|
|
30847
|
-
isTechnician && /* @__PURE__ */
|
|
30955
|
+
return /* @__PURE__ */ jsxs215("div", { className: "flex w-full flex-col", children: [
|
|
30956
|
+
/* @__PURE__ */ jsxs215("div", { className: "flex w-full items-center gap-[var(--spacing-system-xs)]", children: [
|
|
30957
|
+
isTechnician && /* @__PURE__ */ jsx272(
|
|
30848
30958
|
SquareAvatar,
|
|
30849
30959
|
{
|
|
30850
30960
|
variant: "round",
|
|
@@ -30853,7 +30963,7 @@ function RemoteSessionChatMessageRow({
|
|
|
30853
30963
|
fallback: technician
|
|
30854
30964
|
}
|
|
30855
30965
|
),
|
|
30856
|
-
/* @__PURE__ */
|
|
30966
|
+
/* @__PURE__ */ jsx272(
|
|
30857
30967
|
"span",
|
|
30858
30968
|
{
|
|
30859
30969
|
className: cn(
|
|
@@ -30863,14 +30973,14 @@ function RemoteSessionChatMessageRow({
|
|
|
30863
30973
|
children: isTechnician ? technician : "User"
|
|
30864
30974
|
}
|
|
30865
30975
|
),
|
|
30866
|
-
/* @__PURE__ */
|
|
30976
|
+
/* @__PURE__ */ jsx272("span", { className: "shrink-0 text-ods-text-secondary text-h6", children: formatTime2(message.at) })
|
|
30867
30977
|
] }),
|
|
30868
|
-
/* @__PURE__ */
|
|
30978
|
+
/* @__PURE__ */ jsx272("p", { className: "w-full break-words text-ods-text-primary text-h6", children: message.text })
|
|
30869
30979
|
] });
|
|
30870
30980
|
}
|
|
30871
30981
|
|
|
30872
30982
|
// src/components/features/remote-session/remote-session-dialog.tsx
|
|
30873
|
-
import { jsx as
|
|
30983
|
+
import { jsx as jsx273, jsxs as jsxs216 } from "react/jsx-runtime";
|
|
30874
30984
|
var NOTICE_COPY = {
|
|
30875
30985
|
"session-ended": { title: "Remote session ended", suffix: "has disconnected from your device." },
|
|
30876
30986
|
"connection-lost": { title: "Connection lost", suffix: "lost the connection to your device." }
|
|
@@ -30883,49 +30993,315 @@ function RemoteSessionDialog({
|
|
|
30883
30993
|
onClose
|
|
30884
30994
|
}) {
|
|
30885
30995
|
if (variant === "end-confirm") {
|
|
30886
|
-
return /* @__PURE__ */
|
|
30887
|
-
/* @__PURE__ */
|
|
30888
|
-
/* @__PURE__ */
|
|
30889
|
-
/* @__PURE__ */
|
|
30996
|
+
return /* @__PURE__ */ jsxs216(DialogCard, { children: [
|
|
30997
|
+
/* @__PURE__ */ jsxs216("div", { className: "flex w-full flex-col gap-[var(--spacing-system-xs)]", children: [
|
|
30998
|
+
/* @__PURE__ */ jsx273("h1", { className: "w-full text-ods-text-primary text-h2", children: "End remote session?" }),
|
|
30999
|
+
/* @__PURE__ */ jsx273("p", { className: "w-full text-ods-text-primary text-h4", children: "The technician will lose access to your device immediately." })
|
|
30890
31000
|
] }),
|
|
30891
|
-
/* @__PURE__ */
|
|
30892
|
-
/* @__PURE__ */
|
|
30893
|
-
/* @__PURE__ */
|
|
31001
|
+
/* @__PURE__ */ jsxs216("div", { className: "flex w-full items-stretch gap-[var(--spacing-system-l)]", children: [
|
|
31002
|
+
/* @__PURE__ */ jsx273(Button, { variant: "outline", fullWidth: true, disabled: ending, onClick: onClose, children: "Cancel" }),
|
|
31003
|
+
/* @__PURE__ */ jsx273(Button, { variant: "destructive", fullWidth: true, loading: ending, onClick: onEndSession, children: "End Session" })
|
|
30894
31004
|
] })
|
|
30895
31005
|
] });
|
|
30896
31006
|
}
|
|
30897
31007
|
const copy = NOTICE_COPY[variant];
|
|
30898
|
-
return /* @__PURE__ */
|
|
30899
|
-
/* @__PURE__ */
|
|
30900
|
-
/* @__PURE__ */
|
|
30901
|
-
/* @__PURE__ */
|
|
30902
|
-
/* @__PURE__ */
|
|
31008
|
+
return /* @__PURE__ */ jsxs216(DialogCard, { children: [
|
|
31009
|
+
/* @__PURE__ */ jsxs216("div", { className: "flex w-full flex-col gap-[var(--spacing-system-xs)]", children: [
|
|
31010
|
+
/* @__PURE__ */ jsx273("h1", { className: "w-full text-ods-text-primary text-h2", children: copy.title }),
|
|
31011
|
+
/* @__PURE__ */ jsxs216("p", { className: "w-full text-ods-text-primary text-h4", children: [
|
|
31012
|
+
/* @__PURE__ */ jsx273("span", { className: "text-ods-accent", children: organizationName }),
|
|
30903
31013
|
" ",
|
|
30904
31014
|
copy.suffix
|
|
30905
31015
|
] })
|
|
30906
31016
|
] }),
|
|
30907
|
-
/* @__PURE__ */
|
|
31017
|
+
/* @__PURE__ */ jsx273("div", { className: "flex w-full justify-end", children: /* @__PURE__ */ jsx273(Button, { variant: "outline", className: "w-1/2", onClick: onClose, children: "Close" }) })
|
|
30908
31018
|
] });
|
|
30909
31019
|
}
|
|
30910
31020
|
function DialogCard({ children }) {
|
|
30911
|
-
return /* @__PURE__ */
|
|
31021
|
+
return /* @__PURE__ */ jsx273("div", { className: "flex w-full flex-col gap-[var(--spacing-system-l)] rounded-md border border-ods-border bg-ods-card p-[var(--spacing-system-xl)]", children });
|
|
30912
31022
|
}
|
|
30913
31023
|
|
|
30914
31024
|
// src/components/features/remote-session/remote-session-overlay.tsx
|
|
30915
|
-
import { jsx as
|
|
31025
|
+
import { jsx as jsx274, jsxs as jsxs217 } from "react/jsx-runtime";
|
|
30916
31026
|
function RemoteSessionBorder({ className }) {
|
|
30917
|
-
return /* @__PURE__ */
|
|
31027
|
+
return /* @__PURE__ */ jsx274("div", { className: cn("pointer-events-none size-full border-4 border-ods-warning", className) });
|
|
30918
31028
|
}
|
|
30919
31029
|
function RemoteSessionPill({ onEndSession }) {
|
|
30920
|
-
return /* @__PURE__ */
|
|
31030
|
+
return /* @__PURE__ */ jsxs217(
|
|
30921
31031
|
"button",
|
|
30922
31032
|
{
|
|
30923
31033
|
type: "button",
|
|
30924
31034
|
className: "flex items-center gap-[var(--spacing-system-xsf)] rounded-b-md bg-ods-warning px-[var(--spacing-system-m)] py-[var(--spacing-system-xs)] text-ods-text-on-accent",
|
|
30925
31035
|
onClick: onEndSession,
|
|
30926
31036
|
children: [
|
|
30927
|
-
/* @__PURE__ */
|
|
30928
|
-
/* @__PURE__ */
|
|
31037
|
+
/* @__PURE__ */ jsx274(MonitorOffIcon, { size: 24, color: "currentColor" }),
|
|
31038
|
+
/* @__PURE__ */ jsx274("span", { className: "whitespace-nowrap text-h3", children: "End Session" })
|
|
31039
|
+
]
|
|
31040
|
+
}
|
|
31041
|
+
);
|
|
31042
|
+
}
|
|
31043
|
+
|
|
31044
|
+
// src/components/features/remote-session/remote-session-keep-modals.tsx
|
|
31045
|
+
import { useState as useState79 } from "react";
|
|
31046
|
+
import { jsx as jsx275, jsxs as jsxs218 } from "react/jsx-runtime";
|
|
31047
|
+
var REMOTE_SESSION_KEEP_REASON_LABELS = {
|
|
31048
|
+
CLIENT_DISPUTE: "Client dispute",
|
|
31049
|
+
INTERNAL_REVIEW: "Internal review",
|
|
31050
|
+
LEGAL_OR_COMPLIANCE: "Legal or compliance request",
|
|
31051
|
+
OTHER: "Other"
|
|
31052
|
+
};
|
|
31053
|
+
var KEEP_REASONS = Object.keys(REMOTE_SESSION_KEEP_REASON_LABELS);
|
|
31054
|
+
var DESCRIPTION_MAX_LENGTH = 500;
|
|
31055
|
+
function KeepNotice({ icon, title, children }) {
|
|
31056
|
+
return /* @__PURE__ */ jsxs218("div", { className: "flex w-full items-start gap-[var(--spacing-system-m)] rounded-md border border-ods-border bg-ods-card p-[var(--spacing-system-m)]", children: [
|
|
31057
|
+
/* @__PURE__ */ jsx275("span", { className: "flex shrink-0 text-ods-text-secondary", children: icon }),
|
|
31058
|
+
/* @__PURE__ */ jsxs218("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
31059
|
+
/* @__PURE__ */ jsx275("p", { className: "text-ods-text-primary text-h3", children: title }),
|
|
31060
|
+
/* @__PURE__ */ jsx275("p", { className: "text-ods-text-secondary text-h4", children })
|
|
31061
|
+
] })
|
|
31062
|
+
] });
|
|
31063
|
+
}
|
|
31064
|
+
function KeepRecordingModal({
|
|
31065
|
+
isOpen,
|
|
31066
|
+
onClose,
|
|
31067
|
+
keptUsage,
|
|
31068
|
+
isPending = false,
|
|
31069
|
+
onConfirm
|
|
31070
|
+
}) {
|
|
31071
|
+
const [reason, setReason] = useState79("");
|
|
31072
|
+
const [description, setDescription] = useState79("");
|
|
31073
|
+
const [seededOpen, setSeededOpen] = useState79(isOpen);
|
|
31074
|
+
if (seededOpen !== isOpen) {
|
|
31075
|
+
setSeededOpen(isOpen);
|
|
31076
|
+
if (isOpen) {
|
|
31077
|
+
setReason("");
|
|
31078
|
+
setDescription("");
|
|
31079
|
+
}
|
|
31080
|
+
}
|
|
31081
|
+
const trimmed = description.trim();
|
|
31082
|
+
const canKeep = reason !== "" && (reason !== "OTHER" || trimmed !== "");
|
|
31083
|
+
const handleKeep = () => {
|
|
31084
|
+
if (!canKeep || isPending) return;
|
|
31085
|
+
onConfirm({ reason, description: reason === "OTHER" ? trimmed : null });
|
|
31086
|
+
};
|
|
31087
|
+
return /* @__PURE__ */ jsxs218(Modal, { isOpen, onClose: isPending ? () => {
|
|
31088
|
+
} : onClose, className: "text-left md:max-w-[600px]", children: [
|
|
31089
|
+
/* @__PURE__ */ jsx275(ModalHeader, { children: /* @__PURE__ */ jsx275(ModalTitle, { children: "Keep this recording" }) }),
|
|
31090
|
+
/* @__PURE__ */ jsxs218(
|
|
31091
|
+
KeepNotice,
|
|
31092
|
+
{
|
|
31093
|
+
icon: /* @__PURE__ */ jsx275(InfoCircleIcon, { size: 24, color: "currentColor" }),
|
|
31094
|
+
title: "This recording won't be deleted automatically",
|
|
31095
|
+
children: [
|
|
31096
|
+
"It stays until you stop keeping it. Kept recordings use ",
|
|
31097
|
+
keptUsage,
|
|
31098
|
+
"."
|
|
31099
|
+
]
|
|
31100
|
+
}
|
|
31101
|
+
),
|
|
31102
|
+
/* @__PURE__ */ jsxs218("div", { className: "flex w-full flex-col gap-[var(--spacing-system-xs)]", children: [
|
|
31103
|
+
/* @__PURE__ */ jsxs218(
|
|
31104
|
+
Select,
|
|
31105
|
+
{
|
|
31106
|
+
value: reason,
|
|
31107
|
+
onValueChange: (value) => setReason(value),
|
|
31108
|
+
disabled: isPending,
|
|
31109
|
+
children: [
|
|
31110
|
+
/* @__PURE__ */ jsx275(SelectTrigger, { label: "Reason", labelVariant: "large", children: /* @__PURE__ */ jsx275(SelectValue, { placeholder: "Select Reason" }) }),
|
|
31111
|
+
/* @__PURE__ */ jsx275(SelectContent, { children: KEEP_REASONS.map((value) => /* @__PURE__ */ jsx275(SelectItem, { value, children: REMOTE_SESSION_KEEP_REASON_LABELS[value] }, value)) })
|
|
31112
|
+
]
|
|
31113
|
+
}
|
|
31114
|
+
),
|
|
31115
|
+
reason === "OTHER" && /* @__PURE__ */ jsx275(
|
|
31116
|
+
Input,
|
|
31117
|
+
{
|
|
31118
|
+
"aria-label": "Reason description",
|
|
31119
|
+
value: description,
|
|
31120
|
+
onChange: (event) => setDescription(event.target.value),
|
|
31121
|
+
placeholder: "Briefly describe what's going on",
|
|
31122
|
+
maxLength: DESCRIPTION_MAX_LENGTH,
|
|
31123
|
+
disabled: isPending
|
|
31124
|
+
}
|
|
31125
|
+
)
|
|
31126
|
+
] }),
|
|
31127
|
+
/* @__PURE__ */ jsxs218(ModalFooter, { children: [
|
|
31128
|
+
/* @__PURE__ */ jsx275(Button, { type: "button", variant: "outline", onClick: onClose, disabled: isPending, className: "flex-1 md:hidden", children: "Cancel" }),
|
|
31129
|
+
/* @__PURE__ */ jsx275("div", { className: "hidden flex-1 md:block" }),
|
|
31130
|
+
/* @__PURE__ */ jsx275(
|
|
31131
|
+
Button,
|
|
31132
|
+
{
|
|
31133
|
+
type: "button",
|
|
31134
|
+
variant: "accent",
|
|
31135
|
+
onClick: handleKeep,
|
|
31136
|
+
loading: isPending,
|
|
31137
|
+
disabled: !canKeep,
|
|
31138
|
+
className: "flex-1",
|
|
31139
|
+
children: "Keep"
|
|
31140
|
+
}
|
|
31141
|
+
)
|
|
31142
|
+
] })
|
|
31143
|
+
] });
|
|
31144
|
+
}
|
|
31145
|
+
function ReleaseKeepingModal({
|
|
31146
|
+
isOpen,
|
|
31147
|
+
onClose,
|
|
31148
|
+
keptBy,
|
|
31149
|
+
keptOn,
|
|
31150
|
+
reason,
|
|
31151
|
+
ticket,
|
|
31152
|
+
expiresOn,
|
|
31153
|
+
dueOn,
|
|
31154
|
+
isPending = false,
|
|
31155
|
+
onConfirm
|
|
31156
|
+
}) {
|
|
31157
|
+
return /* @__PURE__ */ jsxs218(Modal, { isOpen, onClose: isPending ? () => {
|
|
31158
|
+
} : onClose, className: "text-left md:max-w-[600px]", children: [
|
|
31159
|
+
/* @__PURE__ */ jsx275(ModalHeader, { children: /* @__PURE__ */ jsx275(ModalTitle, { children: "Release Keeping" }) }),
|
|
31160
|
+
/* @__PURE__ */ jsxs218("div", { className: "flex w-full flex-col gap-[var(--spacing-system-xsf)] text-ods-text-primary text-h4", children: [
|
|
31161
|
+
/* @__PURE__ */ jsxs218("p", { children: [
|
|
31162
|
+
"Kept by ",
|
|
31163
|
+
keptBy,
|
|
31164
|
+
" on ",
|
|
31165
|
+
keptOn,
|
|
31166
|
+
" for ",
|
|
31167
|
+
reason,
|
|
31168
|
+
"."
|
|
31169
|
+
] }),
|
|
31170
|
+
ticket && /* @__PURE__ */ jsxs218("p", { children: [
|
|
31171
|
+
"Ticket: ",
|
|
31172
|
+
ticket
|
|
31173
|
+
] })
|
|
31174
|
+
] }),
|
|
31175
|
+
/* @__PURE__ */ jsx275(KeepNotice, { icon: /* @__PURE__ */ jsx275(HourglassIcon, { size: 24, color: "currentColor" }), title: `It will expire on ${expiresOn}`, children: dueOn ? `It was due to expire on ${dueOn}. Releasing gives it 3 days' grace, and it shows amber until then. Whoever placed the Keep is reminded the day before it goes. Nothing is deleted now.` : "Nothing is deleted now." }),
|
|
31176
|
+
/* @__PURE__ */ jsxs218(ModalFooter, { children: [
|
|
31177
|
+
/* @__PURE__ */ jsx275(Button, { type: "button", variant: "outline", onClick: onClose, disabled: isPending, className: "flex-1 md:hidden", children: "Cancel" }),
|
|
31178
|
+
/* @__PURE__ */ jsx275("div", { className: "hidden flex-1 md:block" }),
|
|
31179
|
+
/* @__PURE__ */ jsx275(Button, { type: "button", variant: "accent", onClick: onConfirm, loading: isPending, className: "flex-1", children: "Release Keeping" })
|
|
31180
|
+
] })
|
|
31181
|
+
] });
|
|
31182
|
+
}
|
|
31183
|
+
|
|
31184
|
+
// src/components/features/remote-session/remote-session-events.tsx
|
|
31185
|
+
import { jsx as jsx276, jsxs as jsxs219 } from "react/jsx-runtime";
|
|
31186
|
+
function formatRemoteSessionOffset(offsetMs) {
|
|
31187
|
+
const total = Math.max(0, Math.floor(offsetMs / 1e3));
|
|
31188
|
+
const hours = Math.floor(total / 3600);
|
|
31189
|
+
const minutes = String(Math.floor(total % 3600 / 60)).padStart(2, "0");
|
|
31190
|
+
const seconds = String(total % 60).padStart(2, "0");
|
|
31191
|
+
return hours > 0 ? `${hours}:${minutes}:${seconds}` : `${minutes}:${seconds}`;
|
|
31192
|
+
}
|
|
31193
|
+
function RemoteSessionEventList({ events, activeEventId, onSelect, className }) {
|
|
31194
|
+
return /* @__PURE__ */ jsxs219("section", { className: cn("flex w-full flex-col gap-[var(--spacing-system-xxs)]", className), children: [
|
|
31195
|
+
/* @__PURE__ */ jsx276("h2", { className: "text-ods-text-secondary text-h5", children: "Session Events" }),
|
|
31196
|
+
/* @__PURE__ */ jsx276("ol", { className: "flex w-full flex-col gap-[var(--spacing-system-xxs)] rounded-md border border-ods-border bg-ods-card p-[var(--spacing-system-m)]", children: events.map((event) => /* @__PURE__ */ jsx276("li", { children: /* @__PURE__ */ jsxs219(
|
|
31197
|
+
"button",
|
|
31198
|
+
{
|
|
31199
|
+
type: "button",
|
|
31200
|
+
"aria-current": event.id === activeEventId || void 0,
|
|
31201
|
+
onClick: () => onSelect?.(event),
|
|
31202
|
+
className: cn(
|
|
31203
|
+
"flex w-full items-start gap-[var(--spacing-system-xxs)] rounded-md p-[var(--spacing-system-xxs)] text-left outline-none transition-colors",
|
|
31204
|
+
"hover:bg-ods-bg-hover focus-visible:ring-2 focus-visible:ring-ods-focus",
|
|
31205
|
+
event.id === activeEventId && "bg-ods-border hover:bg-ods-border"
|
|
31206
|
+
),
|
|
31207
|
+
children: [
|
|
31208
|
+
/* @__PURE__ */ jsx276("span", { className: "w-[84px] shrink-0 text-ods-text-secondary text-h4", children: formatRemoteSessionOffset(event.offsetMs) }),
|
|
31209
|
+
/* @__PURE__ */ jsxs219("span", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
31210
|
+
/* @__PURE__ */ jsx276("span", { className: "text-ods-text-primary text-h4", children: event.title }),
|
|
31211
|
+
event.detail && /* @__PURE__ */ jsx276("span", { className: "text-ods-text-secondary text-h6", children: event.detail })
|
|
31212
|
+
] })
|
|
31213
|
+
]
|
|
31214
|
+
}
|
|
31215
|
+
) }, event.id)) })
|
|
31216
|
+
] });
|
|
31217
|
+
}
|
|
31218
|
+
function RemoteSessionTimelineMarkers({
|
|
31219
|
+
events,
|
|
31220
|
+
durationMs,
|
|
31221
|
+
onSelect,
|
|
31222
|
+
className
|
|
31223
|
+
}) {
|
|
31224
|
+
if (durationMs <= 0) return null;
|
|
31225
|
+
return /* @__PURE__ */ jsx276("div", { className: cn("relative h-4 w-full", className), children: events.map((event) => {
|
|
31226
|
+
const share = Math.min(1, Math.max(0, event.offsetMs / durationMs));
|
|
31227
|
+
const label = `${event.title} at ${formatRemoteSessionOffset(event.offsetMs)}`;
|
|
31228
|
+
return /* @__PURE__ */ jsx276(
|
|
31229
|
+
"button",
|
|
31230
|
+
{
|
|
31231
|
+
type: "button",
|
|
31232
|
+
"aria-label": label,
|
|
31233
|
+
title: label,
|
|
31234
|
+
onClick: () => onSelect?.(event),
|
|
31235
|
+
style: { left: `${share * 100}%` },
|
|
31236
|
+
className: "absolute top-0 h-4 w-1 -translate-x-1/2 rounded-md bg-ods-text-secondary outline-none transition-colors hover:bg-ods-text-primary focus-visible:ring-2 focus-visible:ring-ods-focus"
|
|
31237
|
+
},
|
|
31238
|
+
event.id
|
|
31239
|
+
);
|
|
31240
|
+
}) });
|
|
31241
|
+
}
|
|
31242
|
+
|
|
31243
|
+
// src/components/features/remote-session/remote-session-status.tsx
|
|
31244
|
+
import { jsx as jsx277, jsxs as jsxs220 } from "react/jsx-runtime";
|
|
31245
|
+
function LiveDot() {
|
|
31246
|
+
return /* @__PURE__ */ jsx277("span", { "aria-hidden": true, className: "size-2 animate-live-pulse rounded-full bg-current motion-reduce:animate-none" });
|
|
31247
|
+
}
|
|
31248
|
+
var STATUS_TAG = {
|
|
31249
|
+
live: { label: "Live", variant: "critical" },
|
|
31250
|
+
processing: { label: "Processing", variant: "warning" },
|
|
31251
|
+
failed: { label: "Failed", variant: "error" }
|
|
31252
|
+
};
|
|
31253
|
+
function RemoteSessionStatusTag({ status, className }) {
|
|
31254
|
+
const { label, variant } = STATUS_TAG[status];
|
|
31255
|
+
return /* @__PURE__ */ jsx277(
|
|
31256
|
+
Tag,
|
|
31257
|
+
{
|
|
31258
|
+
label,
|
|
31259
|
+
variant,
|
|
31260
|
+
icon: status === "live" ? /* @__PURE__ */ jsx277(LiveDot, {}) : void 0,
|
|
31261
|
+
className: cn("pointer-events-none shrink-0", className)
|
|
31262
|
+
}
|
|
31263
|
+
);
|
|
31264
|
+
}
|
|
31265
|
+
function RemoteSessionExpiry(props) {
|
|
31266
|
+
const { className } = props;
|
|
31267
|
+
if (props.state === "none") {
|
|
31268
|
+
return /* @__PURE__ */ jsx277("p", { className: cn("text-ods-text-primary text-h4", className), children: "-" });
|
|
31269
|
+
}
|
|
31270
|
+
if (props.state === "expired") {
|
|
31271
|
+
return /* @__PURE__ */ jsx277("p", { className: cn("text-ods-text-secondary text-h4", className), children: "Expired" });
|
|
31272
|
+
}
|
|
31273
|
+
if (props.state === "kept") {
|
|
31274
|
+
return /* @__PURE__ */ jsxs220("div", { className: cn("flex min-w-0 flex-col", className), children: [
|
|
31275
|
+
/* @__PURE__ */ jsxs220("p", { className: "flex items-center gap-[var(--spacing-system-xxs)] text-ods-text-primary text-h4", children: [
|
|
31276
|
+
/* @__PURE__ */ jsx277(LockIcon, { size: 24, color: "currentColor", className: "shrink-0" }),
|
|
31277
|
+
"Kept"
|
|
31278
|
+
] }),
|
|
31279
|
+
/* @__PURE__ */ jsxs220("p", { className: "truncate text-ods-text-secondary text-h6", children: [
|
|
31280
|
+
"Kept by ",
|
|
31281
|
+
props.keptBy,
|
|
31282
|
+
" \xB7 ",
|
|
31283
|
+
props.reason
|
|
31284
|
+
] })
|
|
31285
|
+
] });
|
|
31286
|
+
}
|
|
31287
|
+
return /* @__PURE__ */ jsxs220("div", { className: cn("flex min-w-0 flex-col", className), children: [
|
|
31288
|
+
/* @__PURE__ */ jsx277("p", { className: "text-ods-text-primary text-h4", children: props.date }),
|
|
31289
|
+
props.remaining && /* @__PURE__ */ jsx277("p", { className: "truncate text-ods-text-secondary text-h6", children: props.remaining })
|
|
31290
|
+
] });
|
|
31291
|
+
}
|
|
31292
|
+
function RemoteSessionStorageAlert({ scope, capacity, className }) {
|
|
31293
|
+
const message = scope === "session" ? "This session isn't being recorded. Recording storage is full. New sessions aren't recorded until space is freed." : `Recording storage full. New sessions aren't recorded.${capacity ? ` All ${capacity} of recording storage is used.` : ""}`;
|
|
31294
|
+
return /* @__PURE__ */ jsxs220(
|
|
31295
|
+
"div",
|
|
31296
|
+
{
|
|
31297
|
+
role: "alert",
|
|
31298
|
+
className: cn(
|
|
31299
|
+
"flex w-full items-start gap-[var(--spacing-system-m)] rounded-md bg-ods-warning-secondary p-[var(--spacing-system-s)] text-ods-warning",
|
|
31300
|
+
className
|
|
31301
|
+
),
|
|
31302
|
+
children: [
|
|
31303
|
+
/* @__PURE__ */ jsx277(AlertTriangleIcon, { size: 24, color: "currentColor", className: "shrink-0" }),
|
|
31304
|
+
/* @__PURE__ */ jsx277("p", { className: "min-w-0 flex-1 text-h3", children: message })
|
|
30929
31305
|
]
|
|
30930
31306
|
}
|
|
30931
31307
|
);
|
|
@@ -30935,7 +31311,7 @@ function RemoteSessionPill({ onEndSession }) {
|
|
|
30935
31311
|
import { combine as combine3 } from "@atlaskit/pragmatic-drag-and-drop/combine";
|
|
30936
31312
|
import { monitorForElements } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
|
|
30937
31313
|
import { preventUnhandled } from "@atlaskit/pragmatic-drag-and-drop/utils/prevent-unhandled";
|
|
30938
|
-
import { Fragment as Fragment50, useCallback as useCallback29, useEffect as useEffect50, useMemo as useMemo25, useRef as useRef45, useState as
|
|
31314
|
+
import { Fragment as Fragment50, useCallback as useCallback29, useEffect as useEffect50, useMemo as useMemo25, useRef as useRef45, useState as useState84 } from "react";
|
|
30939
31315
|
import { createPortal } from "react-dom";
|
|
30940
31316
|
|
|
30941
31317
|
// src/utils/auto-scroll-ancestors.ts
|
|
@@ -31048,10 +31424,10 @@ function aimToChange(columns, ticketId, aim) {
|
|
|
31048
31424
|
// src/components/features/board/board-column.tsx
|
|
31049
31425
|
import { attachClosestEdge as attachClosestEdge2 } from "@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge";
|
|
31050
31426
|
import { dropTargetForElements as dropTargetForElements2 } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
|
|
31051
|
-
import { memo as memo6, useCallback as useCallback27, useEffect as useEffect48, useRef as useRef43, useState as
|
|
31427
|
+
import { memo as memo6, useCallback as useCallback27, useEffect as useEffect48, useRef as useRef43, useState as useState82 } from "react";
|
|
31052
31428
|
|
|
31053
31429
|
// src/components/features/board/board-column-header.tsx
|
|
31054
|
-
import { jsx as
|
|
31430
|
+
import { jsx as jsx278, jsxs as jsxs221 } from "react/jsx-runtime";
|
|
31055
31431
|
function BoardColumnHeader({
|
|
31056
31432
|
column,
|
|
31057
31433
|
collapsed = false,
|
|
@@ -31064,8 +31440,8 @@ function BoardColumnHeader({
|
|
|
31064
31440
|
const useStatusVariant = resolveTicketStatus(tagStatus) !== null;
|
|
31065
31441
|
const actionClass = "h-8 w-8 p-0 md:h-8 md:w-8";
|
|
31066
31442
|
if (collapsed) {
|
|
31067
|
-
return /* @__PURE__ */
|
|
31068
|
-
onToggleCollapse && /* @__PURE__ */
|
|
31443
|
+
return /* @__PURE__ */ jsxs221("div", { className: "flex h-full flex-col items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
31444
|
+
onToggleCollapse && /* @__PURE__ */ jsx278(
|
|
31069
31445
|
Button,
|
|
31070
31446
|
{
|
|
31071
31447
|
variant: "transparent",
|
|
@@ -31073,10 +31449,10 @@ function BoardColumnHeader({
|
|
|
31073
31449
|
className: actionClass,
|
|
31074
31450
|
onClick: onToggleCollapse,
|
|
31075
31451
|
"aria-label": "Expand column",
|
|
31076
|
-
children: /* @__PURE__ */
|
|
31452
|
+
children: /* @__PURE__ */ jsx278(Arrow02RightIcon, { className: "h-6 w-6 text-ods-text-secondary" })
|
|
31077
31453
|
}
|
|
31078
31454
|
),
|
|
31079
|
-
/* @__PURE__ */
|
|
31455
|
+
/* @__PURE__ */ jsx278(
|
|
31080
31456
|
TicketStatusTag,
|
|
31081
31457
|
{
|
|
31082
31458
|
status: tagStatus,
|
|
@@ -31085,17 +31461,17 @@ function BoardColumnHeader({
|
|
|
31085
31461
|
className: "h-auto [writing-mode:vertical-rl]"
|
|
31086
31462
|
}
|
|
31087
31463
|
),
|
|
31088
|
-
/* @__PURE__ */
|
|
31464
|
+
/* @__PURE__ */ jsx278("span", { className: "text-h5", style: { color: column.color }, children: count })
|
|
31089
31465
|
] });
|
|
31090
31466
|
}
|
|
31091
|
-
return /* @__PURE__ */
|
|
31092
|
-
/* @__PURE__ */
|
|
31093
|
-
/* @__PURE__ */
|
|
31094
|
-
/* @__PURE__ */
|
|
31467
|
+
return /* @__PURE__ */ jsxs221("div", { className: "flex items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
31468
|
+
/* @__PURE__ */ jsxs221("div", { className: "flex min-w-0 flex-1 items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
31469
|
+
/* @__PURE__ */ jsx278(TicketStatusTag, { status: tagStatus, label: column.label, color: useStatusVariant ? void 0 : column.color }),
|
|
31470
|
+
/* @__PURE__ */ jsx278("span", { className: "text-h5", style: useStatusVariant ? void 0 : { color: column.color }, children: count })
|
|
31095
31471
|
] }),
|
|
31096
|
-
/* @__PURE__ */
|
|
31097
|
-
column.tooltip && /* @__PURE__ */
|
|
31098
|
-
onToggleCollapse && /* @__PURE__ */
|
|
31472
|
+
/* @__PURE__ */ jsxs221("div", { className: "flex shrink-0 items-center gap-[var(--spacing-system-xxs)]", children: [
|
|
31473
|
+
column.tooltip && /* @__PURE__ */ jsx278(TouchFriendlyTooltip, { content: column.tooltip, side: "bottom", children: /* @__PURE__ */ jsx278(Button, { variant: "transparent", size: "icon", className: actionClass, "aria-label": column.tooltip, children: /* @__PURE__ */ jsx278(InfoCircleIcon, { className: "h-6 w-6 text-ods-text-secondary" }) }) }),
|
|
31474
|
+
onToggleCollapse && /* @__PURE__ */ jsx278(
|
|
31099
31475
|
Button,
|
|
31100
31476
|
{
|
|
31101
31477
|
variant: "transparent",
|
|
@@ -31103,10 +31479,10 @@ function BoardColumnHeader({
|
|
|
31103
31479
|
className: actionClass,
|
|
31104
31480
|
onClick: onToggleCollapse,
|
|
31105
31481
|
"aria-label": "Collapse column",
|
|
31106
|
-
children: /* @__PURE__ */
|
|
31482
|
+
children: /* @__PURE__ */ jsx278(Arrow02LeftIcon, { className: "h-6 w-6 text-ods-text-secondary" })
|
|
31107
31483
|
}
|
|
31108
31484
|
),
|
|
31109
|
-
onArchive && /* @__PURE__ */
|
|
31485
|
+
onArchive && /* @__PURE__ */ jsx278(
|
|
31110
31486
|
Button,
|
|
31111
31487
|
{
|
|
31112
31488
|
variant: "transparent",
|
|
@@ -31114,10 +31490,10 @@ function BoardColumnHeader({
|
|
|
31114
31490
|
className: actionClass,
|
|
31115
31491
|
onClick: onArchive,
|
|
31116
31492
|
"aria-label": "Archive resolved tickets",
|
|
31117
|
-
children: /* @__PURE__ */
|
|
31493
|
+
children: /* @__PURE__ */ jsx278(BoxArchiveIcon, { className: "h-6 w-6 text-ods-text-secondary" })
|
|
31118
31494
|
}
|
|
31119
31495
|
),
|
|
31120
|
-
onAddTicket && /* @__PURE__ */
|
|
31496
|
+
onAddTicket && /* @__PURE__ */ jsx278(
|
|
31121
31497
|
Button,
|
|
31122
31498
|
{
|
|
31123
31499
|
variant: "transparent",
|
|
@@ -31125,7 +31501,7 @@ function BoardColumnHeader({
|
|
|
31125
31501
|
className: actionClass,
|
|
31126
31502
|
onClick: onAddTicket,
|
|
31127
31503
|
"aria-label": "Add ticket",
|
|
31128
|
-
children: /* @__PURE__ */
|
|
31504
|
+
children: /* @__PURE__ */ jsx278(PlusIcon, { className: "h-6 w-6 text-ods-text-secondary" })
|
|
31129
31505
|
}
|
|
31130
31506
|
)
|
|
31131
31507
|
] })
|
|
@@ -31224,7 +31600,7 @@ import {
|
|
|
31224
31600
|
useEffect as useEffect47,
|
|
31225
31601
|
useMemo as useMemo24,
|
|
31226
31602
|
useRef as useRef42,
|
|
31227
|
-
useState as
|
|
31603
|
+
useState as useState81
|
|
31228
31604
|
} from "react";
|
|
31229
31605
|
|
|
31230
31606
|
// src/utils/drag-effect.ts
|
|
@@ -31238,14 +31614,14 @@ function holdMoveDragEffect(element) {
|
|
|
31238
31614
|
}
|
|
31239
31615
|
|
|
31240
31616
|
// src/components/features/board/board-ticket-approval.tsx
|
|
31241
|
-
import { useState as
|
|
31242
|
-
import { jsx as
|
|
31617
|
+
import { useState as useState80 } from "react";
|
|
31618
|
+
import { jsx as jsx279, jsxs as jsxs222 } from "react/jsx-runtime";
|
|
31243
31619
|
function BoardTicketApproval({ pendingApproval, onApprove, onReject }) {
|
|
31244
|
-
const [expanded, setExpanded] =
|
|
31620
|
+
const [expanded, setExpanded] = useState80(false);
|
|
31245
31621
|
const { innerRef, containerStyle } = useCollapsible({ expanded });
|
|
31246
31622
|
const isAdmin = pendingApproval.approvalType === "ADMIN";
|
|
31247
|
-
return /* @__PURE__ */
|
|
31248
|
-
/* @__PURE__ */
|
|
31623
|
+
return /* @__PURE__ */ jsxs222("div", { className: "pointer-events-auto flex flex-col", children: [
|
|
31624
|
+
/* @__PURE__ */ jsxs222(
|
|
31249
31625
|
"button",
|
|
31250
31626
|
{
|
|
31251
31627
|
type: "button",
|
|
@@ -31253,7 +31629,7 @@ function BoardTicketApproval({ pendingApproval, onApprove, onReject }) {
|
|
|
31253
31629
|
"aria-expanded": expanded,
|
|
31254
31630
|
className: "flex w-full cursor-pointer items-center gap-[var(--spacing-system-xxs)] text-h6",
|
|
31255
31631
|
children: [
|
|
31256
|
-
/* @__PURE__ */
|
|
31632
|
+
/* @__PURE__ */ jsxs222(
|
|
31257
31633
|
"span",
|
|
31258
31634
|
{
|
|
31259
31635
|
className: cn(
|
|
@@ -31261,16 +31637,16 @@ function BoardTicketApproval({ pendingApproval, onApprove, onReject }) {
|
|
|
31261
31637
|
isAdmin ? "text-ods-open-yellow" : "text-ods-text-secondary"
|
|
31262
31638
|
),
|
|
31263
31639
|
children: [
|
|
31264
|
-
isAdmin ? /* @__PURE__ */
|
|
31265
|
-
/* @__PURE__ */
|
|
31640
|
+
isAdmin ? /* @__PURE__ */ jsx279(ShieldCheckIcon, { className: "size-4 shrink-0" }) : /* @__PURE__ */ jsx279(DotsLoaderIcon, { size: 16, className: "shrink-0" }),
|
|
31641
|
+
/* @__PURE__ */ jsx279("span", { className: "flex-1 truncate text-left", children: isAdmin ? "Technician approval required" : "Pending client approval" })
|
|
31266
31642
|
]
|
|
31267
31643
|
}
|
|
31268
31644
|
),
|
|
31269
|
-
expanded ? /* @__PURE__ */
|
|
31645
|
+
expanded ? /* @__PURE__ */ jsx279(Chevron02UpIcon, { className: "size-4 shrink-0 text-ods-text-secondary" }) : /* @__PURE__ */ jsx279(Chevron02DownIcon, { className: "size-4 shrink-0 text-ods-text-secondary" })
|
|
31270
31646
|
]
|
|
31271
31647
|
}
|
|
31272
31648
|
),
|
|
31273
|
-
/* @__PURE__ */
|
|
31649
|
+
/* @__PURE__ */ jsx279("div", { style: containerStyle, children: /* @__PURE__ */ jsx279("div", { ref: innerRef, className: "pt-[var(--spacing-system-xs)]", children: /* @__PURE__ */ jsx279(
|
|
31274
31650
|
ApprovalBatchMessage,
|
|
31275
31651
|
{
|
|
31276
31652
|
className: "mb-0",
|
|
@@ -31323,7 +31699,7 @@ function hasMoveSettled(columns, move) {
|
|
|
31323
31699
|
}
|
|
31324
31700
|
|
|
31325
31701
|
// src/components/features/board/ticket-card.tsx
|
|
31326
|
-
import { Fragment as Fragment48, jsx as
|
|
31702
|
+
import { Fragment as Fragment48, jsx as jsx280, jsxs as jsxs223 } from "react/jsx-runtime";
|
|
31327
31703
|
var PRIORITY_COLOR_CLASS = {
|
|
31328
31704
|
low: "text-ods-text-secondary",
|
|
31329
31705
|
medium: "text-ods-info",
|
|
@@ -31355,24 +31731,24 @@ function TicketCardBody({
|
|
|
31355
31731
|
const showDeviceRow = !!(ticket.deviceHostnames?.length || ticket.organizationName);
|
|
31356
31732
|
const deviceText = [ticket.deviceHostnames?.join(", "), ticket.organizationName].filter(Boolean).join(", ");
|
|
31357
31733
|
const hasRightSection = !!(ticket.priority || ticket.assignees?.length || renderAssignSlot);
|
|
31358
|
-
const rightSection = hasRightSection ? /* @__PURE__ */
|
|
31359
|
-
ticket.priority && /* @__PURE__ */
|
|
31734
|
+
const rightSection = hasRightSection ? /* @__PURE__ */ jsxs223("div", { className: "pointer-events-auto flex shrink-0 items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
31735
|
+
ticket.priority && /* @__PURE__ */ jsx280(
|
|
31360
31736
|
Flag02Icon,
|
|
31361
31737
|
{
|
|
31362
31738
|
className: cn("size-4", PRIORITY_COLOR_CLASS[ticket.priority]),
|
|
31363
31739
|
"aria-label": `Priority: ${ticket.priority}`
|
|
31364
31740
|
}
|
|
31365
31741
|
),
|
|
31366
|
-
renderAssignSlot ? renderAssignSlot(ticket) : ticket.assignees?.length ? /* @__PURE__ */
|
|
31742
|
+
renderAssignSlot ? renderAssignSlot(ticket) : ticket.assignees?.length ? /* @__PURE__ */ jsxs223("div", { className: "flex -space-x-2", children: [
|
|
31367
31743
|
ticket.assignees.slice(0, MAX_VISIBLE_ASSIGNEES).map(
|
|
31368
|
-
(a) => a.deleted ? /* @__PURE__ */
|
|
31744
|
+
(a) => a.deleted ? /* @__PURE__ */ jsx280(
|
|
31369
31745
|
DeletedUserAvatar,
|
|
31370
31746
|
{
|
|
31371
31747
|
size: "sm",
|
|
31372
31748
|
accessibleLabel: `Deleted user: ${a.name ?? a.initials ?? a.id}`
|
|
31373
31749
|
},
|
|
31374
31750
|
a.id
|
|
31375
|
-
) : /* @__PURE__ */
|
|
31751
|
+
) : /* @__PURE__ */ jsx280(
|
|
31376
31752
|
SquareAvatar,
|
|
31377
31753
|
{
|
|
31378
31754
|
src: a.avatarUrl,
|
|
@@ -31384,7 +31760,7 @@ function TicketCardBody({
|
|
|
31384
31760
|
a.id
|
|
31385
31761
|
)
|
|
31386
31762
|
),
|
|
31387
|
-
ticket.assignees.length > MAX_VISIBLE_ASSIGNEES && /* @__PURE__ */
|
|
31763
|
+
ticket.assignees.length > MAX_VISIBLE_ASSIGNEES && /* @__PURE__ */ jsxs223("div", { className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-full border border-ods-border bg-ods-bg text-ods-text-secondary text-h6", children: [
|
|
31388
31764
|
"+",
|
|
31389
31765
|
ticket.assignees.length - MAX_VISIBLE_ASSIGNEES
|
|
31390
31766
|
] })
|
|
@@ -31394,7 +31770,7 @@ function TicketCardBody({
|
|
|
31394
31770
|
const tooltipLabel = ticket.createdAt ? formatTicketFullTimestamp(ticket.createdAt) : null;
|
|
31395
31771
|
const metaLabel = [ticket.ticketNumber || null, timestampLabel].filter(Boolean).join(" \u2022 ");
|
|
31396
31772
|
const metaClass = "truncate text-ods-text-secondary text-h6";
|
|
31397
|
-
const meta = href ? /* @__PURE__ */
|
|
31773
|
+
const meta = href ? /* @__PURE__ */ jsx280(
|
|
31398
31774
|
next_link_default,
|
|
31399
31775
|
{
|
|
31400
31776
|
href,
|
|
@@ -31405,28 +31781,28 @@ function TicketCardBody({
|
|
|
31405
31781
|
className: cn("pointer-events-auto block", metaClass),
|
|
31406
31782
|
children: metaLabel
|
|
31407
31783
|
}
|
|
31408
|
-
) : /* @__PURE__ */
|
|
31409
|
-
return /* @__PURE__ */
|
|
31410
|
-
/* @__PURE__ */
|
|
31411
|
-
/* @__PURE__ */
|
|
31412
|
-
/* @__PURE__ */
|
|
31413
|
-
showDeviceRow && /* @__PURE__ */
|
|
31414
|
-
/* @__PURE__ */
|
|
31415
|
-
/* @__PURE__ */
|
|
31784
|
+
) : /* @__PURE__ */ jsx280("p", { className: cn(tooltipLabel && "pointer-events-auto", metaClass), children: metaLabel });
|
|
31785
|
+
return /* @__PURE__ */ jsxs223(Fragment48, { children: [
|
|
31786
|
+
/* @__PURE__ */ jsxs223("div", { className: "flex items-start gap-[var(--spacing-system-sf)]", children: [
|
|
31787
|
+
/* @__PURE__ */ jsxs223("div", { className: "flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-zero)]", title: ticket.title, children: [
|
|
31788
|
+
/* @__PURE__ */ jsx280("p", { className: "truncate text-ods-text-primary text-h3", children: ticket.title }),
|
|
31789
|
+
showDeviceRow && /* @__PURE__ */ jsxs223("div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xxs)] text-ods-text-secondary text-h6", children: [
|
|
31790
|
+
/* @__PURE__ */ jsx280(LaptopIcon, { className: "size-4 shrink-0" }),
|
|
31791
|
+
/* @__PURE__ */ jsx280("span", { className: "truncate", title: deviceText, children: deviceText })
|
|
31416
31792
|
] })
|
|
31417
31793
|
] }),
|
|
31418
31794
|
rightSection
|
|
31419
31795
|
] }),
|
|
31420
|
-
ticket.tags?.length ? /* @__PURE__ */
|
|
31421
|
-
metaLabel && (tooltipLabel ? /* @__PURE__ */
|
|
31422
|
-
/* @__PURE__ */
|
|
31423
|
-
/* @__PURE__ */
|
|
31796
|
+
ticket.tags?.length ? /* @__PURE__ */ jsx280(TicketTagRow, { tags: ticket.tags }) : null,
|
|
31797
|
+
metaLabel && (tooltipLabel ? /* @__PURE__ */ jsx280(TooltipProvider, { children: /* @__PURE__ */ jsxs223(Tooltip, { children: [
|
|
31798
|
+
/* @__PURE__ */ jsx280(TooltipTrigger, { asChild: true, children: meta }),
|
|
31799
|
+
/* @__PURE__ */ jsx280(TooltipContent, { children: tooltipLabel })
|
|
31424
31800
|
] }) }) : meta),
|
|
31425
|
-
ticket.escalatedByUser && /* @__PURE__ */
|
|
31426
|
-
/* @__PURE__ */
|
|
31427
|
-
/* @__PURE__ */
|
|
31801
|
+
ticket.escalatedByUser && /* @__PURE__ */ jsxs223("div", { className: "flex items-center gap-[var(--spacing-system-xxs)] text-ods-open-yellow text-h6", children: [
|
|
31802
|
+
/* @__PURE__ */ jsx280(UserCheckIcon, { className: "size-4 shrink-0" }),
|
|
31803
|
+
/* @__PURE__ */ jsx280("span", { className: "truncate", children: "Escalated by User" })
|
|
31428
31804
|
] }),
|
|
31429
|
-
ticket.activity && /* @__PURE__ */
|
|
31805
|
+
ticket.activity && /* @__PURE__ */ jsxs223(
|
|
31430
31806
|
"div",
|
|
31431
31807
|
{
|
|
31432
31808
|
className: cn(
|
|
@@ -31434,32 +31810,32 @@ function TicketCardBody({
|
|
|
31434
31810
|
ticket.activity.kind === "stale" ? "text-ods-open-yellow" : "text-ods-text-secondary"
|
|
31435
31811
|
),
|
|
31436
31812
|
children: [
|
|
31437
|
-
ticket.activity.kind === "stale" ? /* @__PURE__ */
|
|
31438
|
-
/* @__PURE__ */
|
|
31813
|
+
ticket.activity.kind === "stale" ? /* @__PURE__ */ jsx280(ClockIcon, { className: "size-4 shrink-0" }) : /* @__PURE__ */ jsx280(DotsLoaderIcon, { className: "size-4 shrink-0" }),
|
|
31814
|
+
/* @__PURE__ */ jsx280("span", { className: "truncate", children: ticket.activity.label ?? ACTIVITY_DEFAULT_LABEL[ticket.activity.kind] })
|
|
31439
31815
|
]
|
|
31440
31816
|
}
|
|
31441
31817
|
),
|
|
31442
|
-
showNewMessage && /* @__PURE__ */
|
|
31818
|
+
showNewMessage && /* @__PURE__ */ jsx280(
|
|
31443
31819
|
Tag,
|
|
31444
31820
|
{
|
|
31445
31821
|
label: "New Message",
|
|
31446
|
-
icon: /* @__PURE__ */
|
|
31822
|
+
icon: /* @__PURE__ */ jsx280(MessagesIcon, { size: 16, color: newMessageTextColor }),
|
|
31447
31823
|
className: "w-fit shrink-0",
|
|
31448
31824
|
style: { backgroundColor: columnColor, color: newMessageTextColor }
|
|
31449
31825
|
}
|
|
31450
31826
|
),
|
|
31451
|
-
ticket.pendingApproval && /* @__PURE__ */
|
|
31827
|
+
ticket.pendingApproval && /* @__PURE__ */ jsx280(BoardTicketApproval, { pendingApproval: ticket.pendingApproval, onApprove, onReject })
|
|
31452
31828
|
] });
|
|
31453
31829
|
}
|
|
31454
31830
|
function TicketCardView({ className, style, ...bodyProps }) {
|
|
31455
31831
|
const { ticket, columnColor } = bodyProps;
|
|
31456
31832
|
const showNewMessage = !!ticket.hasNewMessage && !!columnColor;
|
|
31457
|
-
return /* @__PURE__ */
|
|
31833
|
+
return /* @__PURE__ */ jsx280(
|
|
31458
31834
|
"div",
|
|
31459
31835
|
{
|
|
31460
31836
|
className: cn(TICKET_CARD_SHELL, className),
|
|
31461
31837
|
style: showNewMessage ? { borderColor: columnColor, ...style } : style,
|
|
31462
|
-
children: /* @__PURE__ */
|
|
31838
|
+
children: /* @__PURE__ */ jsx280("div", { className: "relative z-10 flex flex-col gap-[var(--spacing-system-sf)]", children: /* @__PURE__ */ jsx280(TicketCardBody, { ...bodyProps }) })
|
|
31463
31839
|
}
|
|
31464
31840
|
);
|
|
31465
31841
|
}
|
|
@@ -31480,7 +31856,7 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
31480
31856
|
useEffect47(() => {
|
|
31481
31857
|
ticketRef.current = ticket;
|
|
31482
31858
|
});
|
|
31483
|
-
const [isDragging, setIsDragging] =
|
|
31859
|
+
const [isDragging, setIsDragging] = useState81(false);
|
|
31484
31860
|
const isLanding = useIsLanding(ticket.id);
|
|
31485
31861
|
const aim = useDropAim();
|
|
31486
31862
|
const closestEdge = aim && aim.columnId === columnId && aim.ticketId === ticket.id ? aim.edge : null;
|
|
@@ -31574,7 +31950,7 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
31574
31950
|
[isDragging]
|
|
31575
31951
|
);
|
|
31576
31952
|
const body = useMemo24(
|
|
31577
|
-
() => /* @__PURE__ */
|
|
31953
|
+
() => /* @__PURE__ */ jsx280(
|
|
31578
31954
|
TicketCardBody,
|
|
31579
31955
|
{
|
|
31580
31956
|
ticket,
|
|
@@ -31603,7 +31979,7 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
31603
31979
|
} else if (isLanding) {
|
|
31604
31980
|
style.visibility = "hidden";
|
|
31605
31981
|
}
|
|
31606
|
-
const insertionLine = closestEdge ? /* @__PURE__ */
|
|
31982
|
+
const insertionLine = closestEdge ? /* @__PURE__ */ jsx280(
|
|
31607
31983
|
"span",
|
|
31608
31984
|
{
|
|
31609
31985
|
"aria-hidden": true,
|
|
@@ -31622,9 +31998,9 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
31622
31998
|
}
|
|
31623
31999
|
) : null;
|
|
31624
32000
|
if (href) {
|
|
31625
|
-
return /* @__PURE__ */
|
|
32001
|
+
return /* @__PURE__ */ jsxs223("div", { ...outerProps, children: [
|
|
31626
32002
|
insertionLine,
|
|
31627
|
-
/* @__PURE__ */
|
|
32003
|
+
/* @__PURE__ */ jsx280(
|
|
31628
32004
|
next_link_default,
|
|
31629
32005
|
{
|
|
31630
32006
|
href,
|
|
@@ -31637,12 +32013,12 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
31637
32013
|
className: "absolute inset-0 z-0 rounded-md focus-visible:outline-none"
|
|
31638
32014
|
}
|
|
31639
32015
|
),
|
|
31640
|
-
/* @__PURE__ */
|
|
32016
|
+
/* @__PURE__ */ jsx280("div", { className: cn("pointer-events-none", innerWrapperClass), children: body })
|
|
31641
32017
|
] });
|
|
31642
32018
|
}
|
|
31643
|
-
return /* @__PURE__ */
|
|
32019
|
+
return /* @__PURE__ */ jsxs223("div", { ...outerProps, children: [
|
|
31644
32020
|
insertionLine,
|
|
31645
|
-
/* @__PURE__ */
|
|
32021
|
+
/* @__PURE__ */ jsx280(
|
|
31646
32022
|
"button",
|
|
31647
32023
|
{
|
|
31648
32024
|
type: "button",
|
|
@@ -31653,23 +32029,23 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
31653
32029
|
className: "absolute inset-0 z-0 cursor-pointer rounded-md focus-visible:outline-none"
|
|
31654
32030
|
}
|
|
31655
32031
|
),
|
|
31656
|
-
/* @__PURE__ */
|
|
32032
|
+
/* @__PURE__ */ jsx280("div", { className: cn("pointer-events-none", innerWrapperClass), children: body })
|
|
31657
32033
|
] });
|
|
31658
32034
|
});
|
|
31659
32035
|
function TicketTagRow({ tags }) {
|
|
31660
32036
|
const visible = tags.slice(0, MAX_VISIBLE_TAGS);
|
|
31661
32037
|
const hidden = tags.length - visible.length;
|
|
31662
|
-
return /* @__PURE__ */
|
|
31663
|
-
visible.map((tag) => /* @__PURE__ */
|
|
31664
|
-
hidden > 0 && /* @__PURE__ */
|
|
32038
|
+
return /* @__PURE__ */ jsxs223("div", { className: "flex h-8 flex-wrap items-start gap-[var(--spacing-system-xxs)] overflow-clip", children: [
|
|
32039
|
+
visible.map((tag) => /* @__PURE__ */ jsx280(Tag, { variant: "outline", label: tag }, tag)),
|
|
32040
|
+
hidden > 0 && /* @__PURE__ */ jsx280(Tag, { variant: "outline", label: `+${hidden}` })
|
|
31665
32041
|
] });
|
|
31666
32042
|
}
|
|
31667
32043
|
|
|
31668
32044
|
// src/components/features/board/ticket-card-skeleton.tsx
|
|
31669
32045
|
import { forwardRef as forwardRef32 } from "react";
|
|
31670
|
-
import { jsx as
|
|
32046
|
+
import { jsx as jsx281, jsxs as jsxs224 } from "react/jsx-runtime";
|
|
31671
32047
|
var TicketCardSkeleton = forwardRef32(
|
|
31672
|
-
({ className, ...props }, ref) => /* @__PURE__ */
|
|
32048
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxs224(
|
|
31673
32049
|
"div",
|
|
31674
32050
|
{
|
|
31675
32051
|
ref,
|
|
@@ -31679,22 +32055,22 @@ var TicketCardSkeleton = forwardRef32(
|
|
|
31679
32055
|
),
|
|
31680
32056
|
...props,
|
|
31681
32057
|
children: [
|
|
31682
|
-
/* @__PURE__ */
|
|
31683
|
-
/* @__PURE__ */
|
|
31684
|
-
/* @__PURE__ */
|
|
31685
|
-
/* @__PURE__ */
|
|
31686
|
-
/* @__PURE__ */
|
|
31687
|
-
/* @__PURE__ */
|
|
32058
|
+
/* @__PURE__ */ jsxs224("div", { className: "flex items-start gap-[var(--spacing-system-sf)]", children: [
|
|
32059
|
+
/* @__PURE__ */ jsxs224("div", { className: "flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-xxs)]", children: [
|
|
32060
|
+
/* @__PURE__ */ jsx281("div", { className: "flex items-center text-h3", children: /* @__PURE__ */ jsx281(Skeleton, { className: "h-4 w-3/4" }) }),
|
|
32061
|
+
/* @__PURE__ */ jsxs224("div", { className: "flex items-center gap-[var(--spacing-system-xxs)] text-h6", children: [
|
|
32062
|
+
/* @__PURE__ */ jsx281(Skeleton, { className: "size-4 shrink-0 rounded-sm" }),
|
|
32063
|
+
/* @__PURE__ */ jsx281(Skeleton, { className: "h-3 w-1/2" })
|
|
31688
32064
|
] })
|
|
31689
32065
|
] }),
|
|
31690
|
-
/* @__PURE__ */
|
|
31691
|
-
/* @__PURE__ */
|
|
31692
|
-
/* @__PURE__ */
|
|
32066
|
+
/* @__PURE__ */ jsxs224("div", { className: "flex shrink-0 items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
32067
|
+
/* @__PURE__ */ jsx281(Skeleton, { className: "size-4 rounded-sm" }),
|
|
32068
|
+
/* @__PURE__ */ jsx281(Skeleton, { className: "size-8 rounded-full" })
|
|
31693
32069
|
] })
|
|
31694
32070
|
] }),
|
|
31695
|
-
/* @__PURE__ */
|
|
31696
|
-
/* @__PURE__ */
|
|
31697
|
-
/* @__PURE__ */
|
|
32071
|
+
/* @__PURE__ */ jsxs224("div", { className: "flex h-8 items-center gap-[var(--spacing-system-xxs)]", children: [
|
|
32072
|
+
/* @__PURE__ */ jsx281(Skeleton, { className: "h-8 w-16 rounded-md" }),
|
|
32073
|
+
/* @__PURE__ */ jsx281(Skeleton, { className: "h-8 w-12 rounded-md" })
|
|
31698
32074
|
] })
|
|
31699
32075
|
]
|
|
31700
32076
|
}
|
|
@@ -31703,7 +32079,7 @@ var TicketCardSkeleton = forwardRef32(
|
|
|
31703
32079
|
TicketCardSkeleton.displayName = "TicketCardSkeleton";
|
|
31704
32080
|
|
|
31705
32081
|
// src/components/features/board/board-column.tsx
|
|
31706
|
-
import { Fragment as Fragment49, jsx as
|
|
32082
|
+
import { Fragment as Fragment49, jsx as jsx282, jsxs as jsxs225 } from "react/jsx-runtime";
|
|
31707
32083
|
var BoardColumn = memo6(function BoardColumnImpl({
|
|
31708
32084
|
column,
|
|
31709
32085
|
collapsed = false,
|
|
@@ -31722,7 +32098,7 @@ var BoardColumn = memo6(function BoardColumnImpl({
|
|
|
31722
32098
|
className
|
|
31723
32099
|
}) {
|
|
31724
32100
|
const laneRef = useRef43(null);
|
|
31725
|
-
const [isOver, setIsOver] =
|
|
32101
|
+
const [isOver, setIsOver] = useState82(false);
|
|
31726
32102
|
useEffect48(() => {
|
|
31727
32103
|
const element = laneRef.current;
|
|
31728
32104
|
if (!element || collapsed || touchMode || column.dropDisabled) return void 0;
|
|
@@ -31755,7 +32131,7 @@ var BoardColumn = memo6(function BoardColumnImpl({
|
|
|
31755
32131
|
});
|
|
31756
32132
|
}, [column.id, column.dropDisabled, column.allowedFromColumns, collapsed, touchMode]);
|
|
31757
32133
|
const handleToggleCollapse = useCallback27(() => onToggleCollapse?.(column.id), [onToggleCollapse, column.id]);
|
|
31758
|
-
return /* @__PURE__ */
|
|
32134
|
+
return /* @__PURE__ */ jsxs225(
|
|
31759
32135
|
"div",
|
|
31760
32136
|
{
|
|
31761
32137
|
ref: laneRef,
|
|
@@ -31771,7 +32147,7 @@ var BoardColumn = memo6(function BoardColumnImpl({
|
|
|
31771
32147
|
),
|
|
31772
32148
|
style: column.system ? void 0 : { backgroundColor: tintOnDark(column.color) },
|
|
31773
32149
|
children: [
|
|
31774
|
-
/* @__PURE__ */
|
|
32150
|
+
/* @__PURE__ */ jsx282(
|
|
31775
32151
|
BoardColumnHeader,
|
|
31776
32152
|
{
|
|
31777
32153
|
column,
|
|
@@ -31781,9 +32157,9 @@ var BoardColumn = memo6(function BoardColumnImpl({
|
|
|
31781
32157
|
onArchive: !collapsed && column.archivable && onArchive ? () => onArchive(column.id) : void 0
|
|
31782
32158
|
}
|
|
31783
32159
|
),
|
|
31784
|
-
!collapsed && /* @__PURE__ */
|
|
31785
|
-
/* @__PURE__ */
|
|
31786
|
-
/* @__PURE__ */
|
|
32160
|
+
!collapsed && /* @__PURE__ */ jsxs225(Fragment49, { children: [
|
|
32161
|
+
/* @__PURE__ */ jsx282("div", { "aria-hidden": true, className: "-mx-[var(--spacing-system-sf)] h-px shrink-0 bg-ods-border" }),
|
|
32162
|
+
/* @__PURE__ */ jsx282(
|
|
31787
32163
|
ColumnBody,
|
|
31788
32164
|
{
|
|
31789
32165
|
column,
|
|
@@ -31846,13 +32222,13 @@ function ColumnBody({
|
|
|
31846
32222
|
// wholesale. The browser's own anchoring is unusable here — it silently
|
|
31847
32223
|
// skips transformed elements, so it works between drags and does nothing
|
|
31848
32224
|
// during one — and leaving both on double-corrects every insertion.
|
|
31849
|
-
/* @__PURE__ */
|
|
32225
|
+
/* @__PURE__ */ jsxs225(
|
|
31850
32226
|
"div",
|
|
31851
32227
|
{
|
|
31852
32228
|
ref: scrollRef,
|
|
31853
32229
|
className: "flex min-h-0 flex-1 flex-col gap-[var(--spacing-system-xs)] overflow-y-auto py-[5px] [overflow-anchor:none]",
|
|
31854
32230
|
children: [
|
|
31855
|
-
column.isLoading ? /* @__PURE__ */
|
|
32231
|
+
column.isLoading ? /* @__PURE__ */ jsx282(SkeletonStack, {}) : column.tickets.length === 0 ? /* @__PURE__ */ jsx282(EmptyState2, { columnId: column.id, touchMode }) : column.tickets.map((t) => /* @__PURE__ */ jsx282(
|
|
31856
32232
|
TicketCard,
|
|
31857
32233
|
{
|
|
31858
32234
|
ticket: t,
|
|
@@ -31868,26 +32244,26 @@ function ColumnBody({
|
|
|
31868
32244
|
},
|
|
31869
32245
|
t.id
|
|
31870
32246
|
)),
|
|
31871
|
-
column.isLoadingMore && !column.isLoading && /* @__PURE__ */
|
|
31872
|
-
column.hasMore && /* @__PURE__ */
|
|
32247
|
+
column.isLoadingMore && !column.isLoading && /* @__PURE__ */ jsx282(TicketCardSkeleton, {}),
|
|
32248
|
+
column.hasMore && /* @__PURE__ */ jsx282("div", { ref: sentinelRef, "aria-hidden": true, className: "h-1 shrink-0" })
|
|
31873
32249
|
]
|
|
31874
32250
|
}
|
|
31875
32251
|
)
|
|
31876
32252
|
);
|
|
31877
32253
|
}
|
|
31878
32254
|
function SkeletonStack({ count = 4 }) {
|
|
31879
|
-
return /* @__PURE__ */
|
|
32255
|
+
return /* @__PURE__ */ jsx282(Fragment49, { children: Array.from({ length: count }, (_, i) => /* @__PURE__ */ jsx282(TicketCardSkeleton, {}, `skeleton-${i}`)) });
|
|
31880
32256
|
}
|
|
31881
32257
|
function EmptyState2({ columnId, touchMode }) {
|
|
31882
32258
|
const aim = useDropAim();
|
|
31883
32259
|
if (aim && aim.columnId === columnId) {
|
|
31884
|
-
return /* @__PURE__ */
|
|
32260
|
+
return /* @__PURE__ */ jsx282("div", { "aria-hidden": true, ...{ [DROP_LINE_ATTRIBUTE]: "" }, className: "h-0.5 shrink-0 rounded-full bg-ods-accent" });
|
|
31885
32261
|
}
|
|
31886
|
-
return /* @__PURE__ */
|
|
31887
|
-
/* @__PURE__ */
|
|
31888
|
-
/* @__PURE__ */
|
|
31889
|
-
/* @__PURE__ */
|
|
31890
|
-
/* @__PURE__ */
|
|
32262
|
+
return /* @__PURE__ */ jsxs225("div", { className: "flex flex-1 flex-col items-center justify-center gap-[var(--spacing-system-lf)] p-[var(--spacing-system-lf)] text-center text-ods-text-secondary", children: [
|
|
32263
|
+
/* @__PURE__ */ jsx282(TagIcon, { className: "h-6 w-6 shrink-0" }),
|
|
32264
|
+
/* @__PURE__ */ jsxs225("div", { className: "flex w-full flex-col", children: [
|
|
32265
|
+
/* @__PURE__ */ jsx282("p", { className: "text-h4", children: "No tickets here" }),
|
|
32266
|
+
/* @__PURE__ */ jsx282("p", { className: "text-h6", children: touchMode ? "Change a ticket's status to move it to this column" : "Drag a ticket here or change its status to move it to this column" })
|
|
31891
32267
|
] })
|
|
31892
32268
|
] });
|
|
31893
32269
|
}
|
|
@@ -31901,10 +32277,10 @@ function resolveBoardDrop(columns, { source, target }) {
|
|
|
31901
32277
|
}
|
|
31902
32278
|
|
|
31903
32279
|
// src/components/features/board/use-board-collapse.ts
|
|
31904
|
-
import { useCallback as useCallback28, useEffect as useEffect49, useRef as useRef44, useState as
|
|
32280
|
+
import { useCallback as useCallback28, useEffect as useEffect49, useRef as useRef44, useState as useState83 } from "react";
|
|
31905
32281
|
function useBoardCollapse(storageKey) {
|
|
31906
32282
|
const [persisted, setPersisted] = useLocalStorage(storageKey ?? "__board_collapse_unused__", {});
|
|
31907
|
-
const [memory, setMemory] =
|
|
32283
|
+
const [memory, setMemory] = useState83({});
|
|
31908
32284
|
const collapsed = storageKey ? persisted : memory;
|
|
31909
32285
|
const setMap = storageKey ? setPersisted : setMemory;
|
|
31910
32286
|
const setMapRef = useRef44(setMap);
|
|
@@ -31921,7 +32297,7 @@ function useBoardCollapse(storageKey) {
|
|
|
31921
32297
|
}
|
|
31922
32298
|
|
|
31923
32299
|
// src/components/features/board/touch-board.tsx
|
|
31924
|
-
import { jsx as
|
|
32300
|
+
import { jsx as jsx283 } from "react/jsx-runtime";
|
|
31925
32301
|
function TouchBoard({
|
|
31926
32302
|
columns,
|
|
31927
32303
|
onLoadMore,
|
|
@@ -31936,11 +32312,11 @@ function TouchBoard({
|
|
|
31936
32312
|
className
|
|
31937
32313
|
}) {
|
|
31938
32314
|
const { collapsed, toggle } = useBoardCollapse(collapseStorageKey);
|
|
31939
|
-
return /* @__PURE__ */
|
|
32315
|
+
return /* @__PURE__ */ jsx283("div", { className: cn("flex h-full min-h-0 flex-col", className), children: /* @__PURE__ */ jsx283(
|
|
31940
32316
|
"div",
|
|
31941
32317
|
{
|
|
31942
32318
|
className: "flex min-h-0 flex-1 snap-x snap-mandatory gap-[var(--spacing-system-mf)] overflow-x-auto overscroll-x-contain [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
|
|
31943
|
-
children: columns.map((column) => /* @__PURE__ */
|
|
32319
|
+
children: columns.map((column) => /* @__PURE__ */ jsx283(
|
|
31944
32320
|
BoardColumn,
|
|
31945
32321
|
{
|
|
31946
32322
|
column,
|
|
@@ -31967,7 +32343,7 @@ function TouchBoard({
|
|
|
31967
32343
|
}
|
|
31968
32344
|
|
|
31969
32345
|
// src/components/features/board/board.tsx
|
|
31970
|
-
import { jsx as
|
|
32346
|
+
import { jsx as jsx284, jsxs as jsxs226 } from "react/jsx-runtime";
|
|
31971
32347
|
var PENDING_MOVE_TIMEOUT_MS = 2e3;
|
|
31972
32348
|
var DROP_MS = 160;
|
|
31973
32349
|
var DROP_EASING = "cubic-bezier(0.2, 0, 0, 1)";
|
|
@@ -31976,9 +32352,9 @@ var ARROW_KEYS = ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"];
|
|
|
31976
32352
|
function Board(props) {
|
|
31977
32353
|
const dragAndDropEnabled = useMediaQuery(DRAG_AND_DROP_MEDIA_QUERY);
|
|
31978
32354
|
if (dragAndDropEnabled === void 0) {
|
|
31979
|
-
return /* @__PURE__ */
|
|
32355
|
+
return /* @__PURE__ */ jsx284("div", { "aria-hidden": true, className: cn("flex h-full min-h-0 flex-col", props.className) });
|
|
31980
32356
|
}
|
|
31981
|
-
return dragAndDropEnabled ? /* @__PURE__ */
|
|
32357
|
+
return dragAndDropEnabled ? /* @__PURE__ */ jsx284(DragBoard, { ...props }) : /* @__PURE__ */ jsx284(TouchBoard, { ...props });
|
|
31982
32358
|
}
|
|
31983
32359
|
function DragBoard({
|
|
31984
32360
|
columns,
|
|
@@ -32019,20 +32395,20 @@ function DragBoard({
|
|
|
32019
32395
|
},
|
|
32020
32396
|
[scrollRef]
|
|
32021
32397
|
);
|
|
32022
|
-
const [aim, setAim] =
|
|
32023
|
-
const [lifted, setLifted] =
|
|
32024
|
-
const [announcement, setAnnouncement] =
|
|
32398
|
+
const [aim, setAim] = useState84(null);
|
|
32399
|
+
const [lifted, setLifted] = useState84(null);
|
|
32400
|
+
const [announcement, setAnnouncement] = useState84("");
|
|
32025
32401
|
const dragGeometry = useRef45(null);
|
|
32026
|
-
const [landingPreview, setLandingPreview] =
|
|
32402
|
+
const [landingPreview, setLandingPreview] = useState84(null);
|
|
32027
32403
|
const previewRef = useRef45(null);
|
|
32028
|
-
const [reportedMove, setPendingMove] =
|
|
32404
|
+
const [reportedMove, setPendingMove] = useState84(null);
|
|
32029
32405
|
const pendingMove = reportedMove && !hasMoveSettled(columns, reportedMove) ? reportedMove : null;
|
|
32030
32406
|
const view = useMemo25(() => pendingMove ? applyPendingMove(columns, pendingMove) : columns, [columns, pendingMove]);
|
|
32031
32407
|
useEffect50(() => {
|
|
32032
32408
|
columnsRef.current = view;
|
|
32033
32409
|
onChangeRef.current = onChange;
|
|
32034
32410
|
});
|
|
32035
|
-
const [landing, setLanding] =
|
|
32411
|
+
const [landing, setLanding] = useState84(null);
|
|
32036
32412
|
const landingTimer = useRef45(null);
|
|
32037
32413
|
const pointRef = useRef45({ x: 0, y: 0 });
|
|
32038
32414
|
const laneLabel = useCallback29((columnId) => view.find((c) => c.id === columnId)?.label ?? columnId, [view]);
|
|
@@ -32231,7 +32607,7 @@ function DragBoard({
|
|
|
32231
32607
|
};
|
|
32232
32608
|
}, [landing, landingPreview]);
|
|
32233
32609
|
const preview = landingPreview && createPortal(
|
|
32234
|
-
/* @__PURE__ */
|
|
32610
|
+
/* @__PURE__ */ jsx284(
|
|
32235
32611
|
"div",
|
|
32236
32612
|
{
|
|
32237
32613
|
ref: previewRef,
|
|
@@ -32244,7 +32620,7 @@ function DragBoard({
|
|
|
32244
32620
|
// translate in pointer coordinates and nothing else.
|
|
32245
32621
|
margin: `${-landingPreview.grabY}px 0 0 ${-landingPreview.grabX}px`
|
|
32246
32622
|
},
|
|
32247
|
-
children: /* @__PURE__ */
|
|
32623
|
+
children: /* @__PURE__ */ jsx284(
|
|
32248
32624
|
TicketCardView,
|
|
32249
32625
|
{
|
|
32250
32626
|
ticket: landingPreview.ticket,
|
|
@@ -32257,10 +32633,10 @@ function DragBoard({
|
|
|
32257
32633
|
),
|
|
32258
32634
|
document.body
|
|
32259
32635
|
);
|
|
32260
|
-
return /* @__PURE__ */
|
|
32636
|
+
return /* @__PURE__ */ jsx284(LandingCardContext.Provider, { value: landing, children: /* @__PURE__ */ jsx284(DropAimContext.Provider, { value: aim ?? keyboardAim, children: /* @__PURE__ */ jsxs226(BoardLiftContext.Provider, { value: lift, children: [
|
|
32261
32637
|
preview,
|
|
32262
|
-
/* @__PURE__ */
|
|
32263
|
-
/* @__PURE__ */
|
|
32638
|
+
/* @__PURE__ */ jsxs226("div", { ref: boardRef, className: cn("flex h-full flex-col", className), children: [
|
|
32639
|
+
/* @__PURE__ */ jsx284(
|
|
32264
32640
|
"div",
|
|
32265
32641
|
{
|
|
32266
32642
|
ref: setScroller,
|
|
@@ -32272,9 +32648,9 @@ function DragBoard({
|
|
|
32272
32648
|
const joinLeft = !!(column.system && prev?.system);
|
|
32273
32649
|
const joinRight = !!(column.system && next?.system);
|
|
32274
32650
|
const showGap = i > 0 && !joinLeft;
|
|
32275
|
-
return /* @__PURE__ */
|
|
32276
|
-
showGap && /* @__PURE__ */
|
|
32277
|
-
/* @__PURE__ */
|
|
32651
|
+
return /* @__PURE__ */ jsxs226(Fragment50, { children: [
|
|
32652
|
+
showGap && /* @__PURE__ */ jsx284("div", { "aria-hidden": true, className: "w-[var(--spacing-system-mf)] shrink-0" }),
|
|
32653
|
+
/* @__PURE__ */ jsx284(
|
|
32278
32654
|
BoardColumn,
|
|
32279
32655
|
{
|
|
32280
32656
|
column,
|
|
@@ -32296,15 +32672,15 @@ function DragBoard({
|
|
|
32296
32672
|
})
|
|
32297
32673
|
}
|
|
32298
32674
|
),
|
|
32299
|
-
/* @__PURE__ */
|
|
32300
|
-
thumbRatio > 0 && /* @__PURE__ */
|
|
32675
|
+
/* @__PURE__ */ jsx284("p", { "aria-live": "polite", className: "sr-only", children: announcement }),
|
|
32676
|
+
thumbRatio > 0 && /* @__PURE__ */ jsx284(
|
|
32301
32677
|
"div",
|
|
32302
32678
|
{
|
|
32303
32679
|
ref: trackRef,
|
|
32304
32680
|
onClick: onTrackClick,
|
|
32305
32681
|
onWheel: onTrackWheel,
|
|
32306
32682
|
className: "relative mt-[var(--spacing-system-mf)] h-2 shrink-0 cursor-pointer rounded-full bg-ods-border",
|
|
32307
|
-
children: /* @__PURE__ */
|
|
32683
|
+
children: /* @__PURE__ */ jsx284(
|
|
32308
32684
|
"div",
|
|
32309
32685
|
{
|
|
32310
32686
|
ref: thumbRef,
|
|
@@ -32423,9 +32799,9 @@ import {
|
|
|
32423
32799
|
useId as useId6,
|
|
32424
32800
|
useMemo as useMemo26,
|
|
32425
32801
|
useRef as useRef46,
|
|
32426
|
-
useState as
|
|
32802
|
+
useState as useState85
|
|
32427
32803
|
} from "react";
|
|
32428
|
-
import { jsx as
|
|
32804
|
+
import { jsx as jsx285, jsxs as jsxs227 } from "react/jsx-runtime";
|
|
32429
32805
|
var SORTABLE_ITEM_ATTRIBUTE = "data-sortable-item";
|
|
32430
32806
|
var SHIFT_MS = 200;
|
|
32431
32807
|
var DROP_MS2 = 150;
|
|
@@ -32440,7 +32816,7 @@ function SortableList({ onReorder, getItemLabel, disabled = false, className, ch
|
|
|
32440
32816
|
const listRef = useRef46(null);
|
|
32441
32817
|
const dragAndDropEnabled = useDragAndDropEnabled();
|
|
32442
32818
|
const dragType = useId6();
|
|
32443
|
-
const [announcement, setAnnouncement] =
|
|
32819
|
+
const [announcement, setAnnouncement] = useState85("");
|
|
32444
32820
|
const onReorderRef = useRef46(onReorder);
|
|
32445
32821
|
const getItemLabelRef = useRef46(getItemLabel);
|
|
32446
32822
|
useEffect51(() => {
|
|
@@ -32448,7 +32824,7 @@ function SortableList({ onReorder, getItemLabel, disabled = false, className, ch
|
|
|
32448
32824
|
getItemLabelRef.current = getItemLabel;
|
|
32449
32825
|
});
|
|
32450
32826
|
const flipFrom = useRef46(null);
|
|
32451
|
-
const [flipTick, setFlipTick] =
|
|
32827
|
+
const [flipTick, setFlipTick] = useState85(0);
|
|
32452
32828
|
const flipTimer = useRef46(null);
|
|
32453
32829
|
const readItems = useCallback30(
|
|
32454
32830
|
() => [...listRef.current?.querySelectorAll(`[${SORTABLE_ITEM_ATTRIBUTE}]`) ?? []],
|
|
@@ -32564,15 +32940,15 @@ function SortableList({ onReorder, getItemLabel, disabled = false, className, ch
|
|
|
32564
32940
|
() => ({ dragType, disabled, dragAndDropEnabled, reorder, readItems }),
|
|
32565
32941
|
[dragType, disabled, dragAndDropEnabled, reorder, readItems]
|
|
32566
32942
|
);
|
|
32567
|
-
return /* @__PURE__ */
|
|
32943
|
+
return /* @__PURE__ */ jsx285(SortableListContext.Provider, { value: context, children: /* @__PURE__ */ jsxs227("div", { ref: listRef, className, children: [
|
|
32568
32944
|
children,
|
|
32569
|
-
/* @__PURE__ */
|
|
32945
|
+
/* @__PURE__ */ jsx285("p", { "aria-live": "polite", className: "sr-only", children: announcement })
|
|
32570
32946
|
] }) });
|
|
32571
32947
|
}
|
|
32572
32948
|
|
|
32573
32949
|
// src/components/features/sortable-list/sortable-move-buttons.tsx
|
|
32574
32950
|
import { useRef as useRef47 } from "react";
|
|
32575
|
-
import { jsx as
|
|
32951
|
+
import { jsx as jsx286, jsxs as jsxs228 } from "react/jsx-runtime";
|
|
32576
32952
|
function SortableMoveButtons({ index, count, label, className }) {
|
|
32577
32953
|
const { disabled, reorder } = useSortableListContext();
|
|
32578
32954
|
const upRef = useRef47(null);
|
|
@@ -32587,8 +32963,8 @@ function SortableMoveButtons({ index, count, label, className }) {
|
|
|
32587
32963
|
});
|
|
32588
32964
|
};
|
|
32589
32965
|
const subject = label ?? "item";
|
|
32590
|
-
return /* @__PURE__ */
|
|
32591
|
-
/* @__PURE__ */
|
|
32966
|
+
return /* @__PURE__ */ jsxs228("div", { className: cn("inline-flex shrink-0", className), children: [
|
|
32967
|
+
/* @__PURE__ */ jsx286(
|
|
32592
32968
|
Button,
|
|
32593
32969
|
{
|
|
32594
32970
|
ref: upRef,
|
|
@@ -32599,10 +32975,10 @@ function SortableMoveButtons({ index, count, label, className }) {
|
|
|
32599
32975
|
disabled: disabled || index <= 0,
|
|
32600
32976
|
onClick: () => move(-1),
|
|
32601
32977
|
className: "rounded-r-none border-r-0",
|
|
32602
|
-
children: /* @__PURE__ */
|
|
32978
|
+
children: /* @__PURE__ */ jsx286(Arrow01UpIcon, {})
|
|
32603
32979
|
}
|
|
32604
32980
|
),
|
|
32605
|
-
/* @__PURE__ */
|
|
32981
|
+
/* @__PURE__ */ jsx286(
|
|
32606
32982
|
Button,
|
|
32607
32983
|
{
|
|
32608
32984
|
ref: downRef,
|
|
@@ -32613,7 +32989,7 @@ function SortableMoveButtons({ index, count, label, className }) {
|
|
|
32613
32989
|
disabled: disabled || index >= count - 1,
|
|
32614
32990
|
onClick: () => move(1),
|
|
32615
32991
|
className: "rounded-l-none",
|
|
32616
|
-
children: /* @__PURE__ */
|
|
32992
|
+
children: /* @__PURE__ */ jsx286(Arrow01DownIcon, {})
|
|
32617
32993
|
}
|
|
32618
32994
|
)
|
|
32619
32995
|
] });
|
|
@@ -32623,13 +32999,13 @@ function SortableMoveButtons({ index, count, label, className }) {
|
|
|
32623
32999
|
import { combine as combine5 } from "@atlaskit/pragmatic-drag-and-drop/combine";
|
|
32624
33000
|
import { draggable as draggable2 } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
|
|
32625
33001
|
import { disableNativeDragPreview } from "@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview";
|
|
32626
|
-
import { useCallback as useCallback31, useEffect as useEffect52, useState as
|
|
33002
|
+
import { useCallback as useCallback31, useEffect as useEffect52, useState as useState86 } from "react";
|
|
32627
33003
|
function useSortableItem() {
|
|
32628
33004
|
const { dragType, disabled, dragAndDropEnabled, reorder, readItems } = useSortableListContext();
|
|
32629
33005
|
const inert = disabled || !dragAndDropEnabled;
|
|
32630
|
-
const [item, setItem] =
|
|
32631
|
-
const [handle, setHandle] =
|
|
32632
|
-
const [isDragging, setIsDragging] =
|
|
33006
|
+
const [item, setItem] = useState86(null);
|
|
33007
|
+
const [handle, setHandle] = useState86(null);
|
|
33008
|
+
const [isDragging, setIsDragging] = useState86(false);
|
|
32633
33009
|
const itemRef = useCallback31((node) => {
|
|
32634
33010
|
node?.setAttribute(SORTABLE_ITEM_ATTRIBUTE, "");
|
|
32635
33011
|
setItem(node);
|
|
@@ -32669,7 +33045,7 @@ function useSortableItem() {
|
|
|
32669
33045
|
}
|
|
32670
33046
|
|
|
32671
33047
|
// src/components/features/ticket-status-config-list/ticket-status-config-list.tsx
|
|
32672
|
-
import { jsx as
|
|
33048
|
+
import { jsx as jsx287 } from "react/jsx-runtime";
|
|
32673
33049
|
function TicketStatusConfigList({
|
|
32674
33050
|
items,
|
|
32675
33051
|
onReorder,
|
|
@@ -32677,13 +33053,13 @@ function TicketStatusConfigList({
|
|
|
32677
33053
|
getItemLabel,
|
|
32678
33054
|
className
|
|
32679
33055
|
}) {
|
|
32680
|
-
return /* @__PURE__ */
|
|
33056
|
+
return /* @__PURE__ */ jsx287(
|
|
32681
33057
|
SortableList,
|
|
32682
33058
|
{
|
|
32683
33059
|
onReorder,
|
|
32684
33060
|
getItemLabel,
|
|
32685
33061
|
className: cn("flex w-full flex-col gap-[var(--spacing-system-xs)]", className),
|
|
32686
|
-
children: items.map((item, index) => /* @__PURE__ */
|
|
33062
|
+
children: items.map((item, index) => /* @__PURE__ */ jsx287(SortableRow, { index, count: items.length, label: getItemLabel?.(index), children: (args) => renderRow(item, args) }, item.id))
|
|
32687
33063
|
}
|
|
32688
33064
|
);
|
|
32689
33065
|
}
|
|
@@ -32694,7 +33070,7 @@ function SortableRow({
|
|
|
32694
33070
|
children
|
|
32695
33071
|
}) {
|
|
32696
33072
|
const { itemRef, dragHandleProps, isDragging, dragAndDropEnabled } = useSortableItem();
|
|
32697
|
-
return /* @__PURE__ */
|
|
33073
|
+
return /* @__PURE__ */ jsx287(
|
|
32698
33074
|
"div",
|
|
32699
33075
|
{
|
|
32700
33076
|
ref: itemRef,
|
|
@@ -32702,18 +33078,18 @@ function SortableRow({
|
|
|
32702
33078
|
children: children({
|
|
32703
33079
|
dragHandleProps,
|
|
32704
33080
|
isDragging,
|
|
32705
|
-
moveButtons: dragAndDropEnabled ? null : /* @__PURE__ */
|
|
33081
|
+
moveButtons: dragAndDropEnabled ? null : /* @__PURE__ */ jsx287(SortableMoveButtons, { index, count, label })
|
|
32706
33082
|
})
|
|
32707
33083
|
}
|
|
32708
33084
|
);
|
|
32709
33085
|
}
|
|
32710
33086
|
|
|
32711
33087
|
// src/components/features/conversation-card.tsx
|
|
32712
|
-
import { jsx as
|
|
33088
|
+
import { jsx as jsx288, jsxs as jsxs229 } from "react/jsx-runtime";
|
|
32713
33089
|
function Who({ speaker }) {
|
|
32714
|
-
return /* @__PURE__ */
|
|
33090
|
+
return /* @__PURE__ */ jsxs229("div", { className: "flex items-baseline gap-2 text-ods-text-primary text-h4", children: [
|
|
32715
33091
|
speaker.name,
|
|
32716
|
-
speaker.meta && /* @__PURE__ */
|
|
33092
|
+
speaker.meta && /* @__PURE__ */ jsx288("span", { className: "text-ods-text-secondary text-h6", children: speaker.meta })
|
|
32717
33093
|
] });
|
|
32718
33094
|
}
|
|
32719
33095
|
function ConversationCard({
|
|
@@ -32727,36 +33103,36 @@ function ConversationCard({
|
|
|
32727
33103
|
footerTone = "default",
|
|
32728
33104
|
className
|
|
32729
33105
|
}) {
|
|
32730
|
-
return /* @__PURE__ */
|
|
33106
|
+
return /* @__PURE__ */ jsxs229(
|
|
32731
33107
|
"div",
|
|
32732
33108
|
{
|
|
32733
33109
|
className: cn("flex h-full flex-col gap-4 rounded-xl border border-ods-border bg-ods-card p-5 md:p-7", className),
|
|
32734
33110
|
children: [
|
|
32735
|
-
/* @__PURE__ */
|
|
32736
|
-
/* @__PURE__ */
|
|
32737
|
-
/* @__PURE__ */
|
|
32738
|
-
/* @__PURE__ */
|
|
32739
|
-
/* @__PURE__ */
|
|
33111
|
+
/* @__PURE__ */ jsxs229("div", { className: "flex items-start gap-3", children: [
|
|
33112
|
+
/* @__PURE__ */ jsx288("span", { className: "shrink-0", children: requester.avatar }),
|
|
33113
|
+
/* @__PURE__ */ jsxs229("div", { className: "min-w-0 flex-1", children: [
|
|
33114
|
+
/* @__PURE__ */ jsx288(Who, { speaker: requester }),
|
|
33115
|
+
/* @__PURE__ */ jsxs229("p", { className: "m-0 mt-1 line-clamp-2 min-h-[2lh] text-ods-text-primary text-h3", title: request, children: [
|
|
32740
33116
|
"\u201C",
|
|
32741
33117
|
request,
|
|
32742
33118
|
"\u201D"
|
|
32743
33119
|
] })
|
|
32744
33120
|
] })
|
|
32745
33121
|
] }),
|
|
32746
|
-
/* @__PURE__ */
|
|
32747
|
-
/* @__PURE__ */
|
|
32748
|
-
/* @__PURE__ */
|
|
32749
|
-
/* @__PURE__ */
|
|
32750
|
-
/* @__PURE__ */
|
|
32751
|
-
/* @__PURE__ */
|
|
32752
|
-
/* @__PURE__ */
|
|
33122
|
+
/* @__PURE__ */ jsxs229("div", { className: "flex items-start gap-3 rounded-md border border-ods-border bg-ods-bg p-3.5", children: [
|
|
33123
|
+
/* @__PURE__ */ jsx288("span", { className: "shrink-0", children: responder.avatar }),
|
|
33124
|
+
/* @__PURE__ */ jsxs229("div", { className: "min-w-0 flex-1", children: [
|
|
33125
|
+
/* @__PURE__ */ jsx288(Who, { speaker: responder }),
|
|
33126
|
+
/* @__PURE__ */ jsxs229("div", { className: "mt-1 flex items-start gap-2 text-ods-text-secondary text-h4", children: [
|
|
33127
|
+
/* @__PURE__ */ jsx288(CheckCircleIcon, { size: 16, className: "mt-1 shrink-0 text-ods-success", "aria-hidden": true }),
|
|
33128
|
+
/* @__PURE__ */ jsx288("span", { className: "line-clamp-3 min-h-[3lh] min-w-0 flex-1", title: outcome, children: outcome }),
|
|
32753
33129
|
outcomeAside
|
|
32754
33130
|
] })
|
|
32755
33131
|
] })
|
|
32756
33132
|
] }),
|
|
32757
|
-
/* @__PURE__ */
|
|
32758
|
-
/* @__PURE__ */
|
|
32759
|
-
/* @__PURE__ */
|
|
33133
|
+
/* @__PURE__ */ jsxs229("div", { className: "mt-auto flex items-center justify-between gap-3 border-t border-ods-border pt-3.5 text-ods-text-secondary text-h6", children: [
|
|
33134
|
+
/* @__PURE__ */ jsx288("span", { children: footerLabel }),
|
|
33135
|
+
/* @__PURE__ */ jsx288(
|
|
32760
33136
|
"span",
|
|
32761
33137
|
{
|
|
32762
33138
|
className: cn(
|
|
@@ -33346,6 +33722,7 @@ export {
|
|
|
33346
33722
|
UnreadCountBadge,
|
|
33347
33723
|
HeaderButton,
|
|
33348
33724
|
TimeTrackerHeaderButton,
|
|
33725
|
+
RemoteSessionViewers,
|
|
33349
33726
|
RemoteSessionScope,
|
|
33350
33727
|
RemoteSessionOrgLogo,
|
|
33351
33728
|
RemoteSessionRecordingTag,
|
|
@@ -33362,6 +33739,15 @@ export {
|
|
|
33362
33739
|
RemoteSessionDialog,
|
|
33363
33740
|
RemoteSessionBorder,
|
|
33364
33741
|
RemoteSessionPill,
|
|
33742
|
+
REMOTE_SESSION_KEEP_REASON_LABELS,
|
|
33743
|
+
KeepRecordingModal,
|
|
33744
|
+
ReleaseKeepingModal,
|
|
33745
|
+
formatRemoteSessionOffset,
|
|
33746
|
+
RemoteSessionEventList,
|
|
33747
|
+
RemoteSessionTimelineMarkers,
|
|
33748
|
+
RemoteSessionStatusTag,
|
|
33749
|
+
RemoteSessionExpiry,
|
|
33750
|
+
RemoteSessionStorageAlert,
|
|
33365
33751
|
BoardColumnHeader,
|
|
33366
33752
|
tintOnDark,
|
|
33367
33753
|
BoardTicketApproval,
|