@flamingo-stack/openframe-frontend-core 0.0.691 → 0.0.692
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-LCENRN2N.cjs → chunk-5XPK2QGU.cjs} +3 -3
- package/dist/{chunk-LCENRN2N.cjs.map → chunk-5XPK2QGU.cjs.map} +1 -1
- package/dist/{chunk-SA4KQCNB.cjs → chunk-7BNWMOPM.cjs} +36 -36
- package/dist/{chunk-SA4KQCNB.cjs.map → chunk-7BNWMOPM.cjs.map} +1 -1
- package/dist/{chunk-6Z26ZMR4.js → chunk-A5NHAHV6.js} +2 -2
- package/dist/{chunk-Y3Q76RAA.cjs → chunk-ATREVNIN.cjs} +33 -33
- package/dist/{chunk-Y3Q76RAA.cjs.map → chunk-ATREVNIN.cjs.map} +1 -1
- package/dist/{chunk-FNMQ2J44.js → chunk-AVAZ6BD6.js} +2 -2
- package/dist/{chunk-DDWLF2JV.cjs → chunk-CG7OWW7X.cjs} +4 -4
- package/dist/{chunk-DDWLF2JV.cjs.map → chunk-CG7OWW7X.cjs.map} +1 -1
- package/dist/{chunk-KMW2PXBU.js → chunk-CKO6NKNE.js} +750 -212
- package/dist/chunk-CKO6NKNE.js.map +1 -0
- package/dist/{chunk-ZLYLHP64.cjs → chunk-CKUPANVU.cjs} +4 -4
- package/dist/{chunk-ZLYLHP64.cjs.map → chunk-CKUPANVU.cjs.map} +1 -1
- package/dist/{chunk-H54RDLVC.cjs → chunk-DKJDO7YM.cjs} +18 -18
- package/dist/{chunk-H54RDLVC.cjs.map → chunk-DKJDO7YM.cjs.map} +1 -1
- package/dist/{chunk-N4S7RBUM.cjs → chunk-DUURFYGS.cjs} +3 -3
- package/dist/{chunk-N4S7RBUM.cjs.map → chunk-DUURFYGS.cjs.map} +1 -1
- package/dist/{chunk-CWXRZVDI.cjs → chunk-EXWS2QSD.cjs} +588 -50
- package/dist/chunk-EXWS2QSD.cjs.map +1 -0
- package/dist/{chunk-WZYIAKIH.cjs → chunk-F6LXGP6S.cjs} +3 -3
- package/dist/{chunk-WZYIAKIH.cjs.map → chunk-F6LXGP6S.cjs.map} +1 -1
- package/dist/{chunk-4N2JOPAQ.cjs → chunk-FTK3S57R.cjs} +13 -13
- package/dist/{chunk-4N2JOPAQ.cjs.map → chunk-FTK3S57R.cjs.map} +1 -1
- package/dist/{chunk-MJI5GVT7.js → chunk-IQTQIBZ3.js} +4 -4
- package/dist/{chunk-BXE2RZEV.cjs → chunk-KDCIYRZV.cjs} +17 -17
- package/dist/{chunk-BXE2RZEV.cjs.map → chunk-KDCIYRZV.cjs.map} +1 -1
- package/dist/{chunk-ESFPY5FF.cjs → chunk-KQZMM3QJ.cjs} +51 -51
- package/dist/{chunk-ESFPY5FF.cjs.map → chunk-KQZMM3QJ.cjs.map} +1 -1
- package/dist/{chunk-Y7ZQZOE6.js → chunk-LYJJH4D6.js} +2 -2
- package/dist/{chunk-TSNGVWQO.js → chunk-LYQULSK4.js} +5 -5
- package/dist/{chunk-KVDLL4LU.js → chunk-MCNQKS6I.js} +2 -2
- package/dist/{chunk-DC3G4XGP.js → chunk-PKZGXRU2.js} +3 -3
- package/dist/{chunk-Y3BC7TOJ.cjs → chunk-Q25VYAEL.cjs} +17 -17
- package/dist/{chunk-Y3BC7TOJ.cjs.map → chunk-Q25VYAEL.cjs.map} +1 -1
- package/dist/{chunk-JSG7WZKV.js → chunk-RK47E3PP.js} +2 -2
- package/dist/{chunk-4HZXOQRM.js → chunk-RLNNV46K.js} +2 -2
- package/dist/{chunk-BXAGR3PO.cjs → chunk-RTKF5AYA.cjs} +3 -3
- package/dist/{chunk-BXAGR3PO.cjs.map → chunk-RTKF5AYA.cjs.map} +1 -1
- package/dist/{chunk-Z5FHXCXF.js → chunk-TEIHEFXP.js} +4 -4
- package/dist/{chunk-XBYF4SGD.js → chunk-TXFGG47A.js} +2 -2
- package/dist/{chunk-5N2ZSB42.cjs → chunk-WTYQCT4A.cjs} +10 -10
- package/dist/{chunk-5N2ZSB42.cjs.map → chunk-WTYQCT4A.cjs.map} +1 -1
- package/dist/{chunk-CMYDGVTZ.js → chunk-X5XFKI6N.js} +2 -2
- package/dist/{chunk-7WYWPELF.js → chunk-Z7QCNCBN.js} +5 -5
- package/dist/{chunk-DZMDG7PC.js → chunk-ZAV2F4VX.js} +2 -2
- 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 +34 -2
- package/dist/components/features/index.cjs.map +1 -1
- package/dist/components/features/index.d.ts +1 -0
- package/dist/components/features/index.d.ts.map +1 -1
- package/dist/components/features/index.js +33 -1
- package/dist/components/features/remote-session/index.d.ts +13 -0
- package/dist/components/features/remote-session/index.d.ts.map +1 -0
- package/dist/components/features/remote-session/remote-access-request-card.d.ts +19 -0
- package/dist/components/features/remote-session/remote-access-request-card.d.ts.map +1 -0
- package/dist/components/features/remote-session/remote-session-block.d.ts +41 -0
- package/dist/components/features/remote-session/remote-session-block.d.ts.map +1 -0
- package/dist/components/features/remote-session/remote-session-chat-panel.d.ts +23 -0
- package/dist/components/features/remote-session/remote-session-chat-panel.d.ts.map +1 -0
- package/dist/components/features/remote-session/remote-session-dialog.d.ts +15 -0
- package/dist/components/features/remote-session/remote-session-dialog.d.ts.map +1 -0
- package/dist/components/features/remote-session/remote-session-overlay.d.ts +12 -0
- package/dist/components/features/remote-session/remote-session-overlay.d.ts.map +1 -0
- package/dist/components/features/remote-session/remote-session-parts.d.ts +34 -0
- package/dist/components/features/remote-session/remote-session-parts.d.ts.map +1 -0
- package/dist/components/features/remote-session/types.d.ts +33 -0
- package/dist/components/features/remote-session/types.d.ts.map +1 -0
- 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 +64 -32
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +44 -12
- package/dist/components/index.js.map +1 -1
- 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 +38 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +37 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/features/__tests__/remote-session.test.tsx +97 -0
- package/src/components/features/index.ts +1 -0
- package/src/components/features/remote-session/index.ts +36 -0
- package/src/components/features/remote-session/remote-access-request-card.tsx +102 -0
- package/src/components/features/remote-session/remote-session-block.tsx +182 -0
- package/src/components/features/remote-session/remote-session-chat-panel.tsx +178 -0
- package/src/components/features/remote-session/remote-session-dialog.tsx +77 -0
- package/src/components/features/remote-session/remote-session-overlay.tsx +33 -0
- package/src/components/features/remote-session/remote-session-parts.tsx +138 -0
- package/src/components/features/remote-session/types.ts +41 -0
- package/src/stories/RemoteSessionAccessRequest.stories.tsx +71 -0
- package/src/stories/RemoteSessionBlock.stories.tsx +164 -0
- package/src/stories/RemoteSessionDialog.stories.tsx +49 -0
- package/src/stories/RemoteSessionIndicator.stories.tsx +44 -0
- package/dist/chunk-CWXRZVDI.cjs.map +0 -1
- package/dist/chunk-KMW2PXBU.js.map +0 -1
- /package/dist/{chunk-6Z26ZMR4.js.map → chunk-A5NHAHV6.js.map} +0 -0
- /package/dist/{chunk-FNMQ2J44.js.map → chunk-AVAZ6BD6.js.map} +0 -0
- /package/dist/{chunk-MJI5GVT7.js.map → chunk-IQTQIBZ3.js.map} +0 -0
- /package/dist/{chunk-Y7ZQZOE6.js.map → chunk-LYJJH4D6.js.map} +0 -0
- /package/dist/{chunk-TSNGVWQO.js.map → chunk-LYQULSK4.js.map} +0 -0
- /package/dist/{chunk-KVDLL4LU.js.map → chunk-MCNQKS6I.js.map} +0 -0
- /package/dist/{chunk-DC3G4XGP.js.map → chunk-PKZGXRU2.js.map} +0 -0
- /package/dist/{chunk-JSG7WZKV.js.map → chunk-RK47E3PP.js.map} +0 -0
- /package/dist/{chunk-4HZXOQRM.js.map → chunk-RLNNV46K.js.map} +0 -0
- /package/dist/{chunk-Z5FHXCXF.js.map → chunk-TEIHEFXP.js.map} +0 -0
- /package/dist/{chunk-XBYF4SGD.js.map → chunk-TXFGG47A.js.map} +0 -0
- /package/dist/{chunk-CMYDGVTZ.js.map → chunk-X5XFKI6N.js.map} +0 -0
- /package/dist/{chunk-7WYWPELF.js.map → chunk-Z7QCNCBN.js.map} +0 -0
- /package/dist/{chunk-DZMDG7PC.js.map → chunk-ZAV2F4VX.js.map} +0 -0
|
@@ -164,12 +164,15 @@ import {
|
|
|
164
164
|
ArrowRightUpIcon,
|
|
165
165
|
BellOffIcon,
|
|
166
166
|
BoxArchiveIcon,
|
|
167
|
+
ChatsIcon,
|
|
167
168
|
CheckCircleIcon,
|
|
168
169
|
CheckIcon,
|
|
169
170
|
Chevron02DownIcon,
|
|
170
171
|
Chevron02LeftIcon,
|
|
171
172
|
Chevron02RightIcon,
|
|
172
173
|
Chevron02UpIcon,
|
|
174
|
+
Chevrons03LeftIcon,
|
|
175
|
+
Chevrons03RightIcon,
|
|
173
176
|
ClockHistoryIcon,
|
|
174
177
|
ClockIcon,
|
|
175
178
|
CmmcLogoIcon,
|
|
@@ -181,6 +184,7 @@ import {
|
|
|
181
184
|
DraggerIcon,
|
|
182
185
|
Ellipsis01Icon,
|
|
183
186
|
EuLogoIcon,
|
|
187
|
+
ExternalLinkIcon,
|
|
184
188
|
EyeIcon as EyeIcon2,
|
|
185
189
|
EyeOffIcon,
|
|
186
190
|
FigmaIcon,
|
|
@@ -199,8 +203,10 @@ import {
|
|
|
199
203
|
IsoLogoIcon,
|
|
200
204
|
LinkedinIcon,
|
|
201
205
|
LinuxLogoIcon,
|
|
206
|
+
MessageOffIcon,
|
|
202
207
|
MessagesIcon,
|
|
203
208
|
MicrosoftLogoIcon,
|
|
209
|
+
MonitorOffIcon,
|
|
204
210
|
NistLogoIcon,
|
|
205
211
|
PauseIcon,
|
|
206
212
|
PenEditIcon,
|
|
@@ -211,6 +217,7 @@ import {
|
|
|
211
217
|
PowershellLogoIcon,
|
|
212
218
|
PythonLogoIcon,
|
|
213
219
|
QuestionCircleIcon,
|
|
220
|
+
RecordingIcon,
|
|
214
221
|
Refresh02VrIcon,
|
|
215
222
|
Send03Icon,
|
|
216
223
|
ShieldCheckIcon,
|
|
@@ -6436,7 +6443,7 @@ function getDomain(urlStr) {
|
|
|
6436
6443
|
function domainToTitle(domain) {
|
|
6437
6444
|
return domain.split(".")[0].replace(/-/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
|
|
6438
6445
|
}
|
|
6439
|
-
var
|
|
6446
|
+
var ExternalLinkIcon2 = ({ size = 16 }) => /* @__PURE__ */ jsx60(
|
|
6440
6447
|
"svg",
|
|
6441
6448
|
{
|
|
6442
6449
|
width: size,
|
|
@@ -6618,7 +6625,7 @@ var OGLinkPreview = ({
|
|
|
6618
6625
|
className: "inline-flex items-center gap-2 text-ods-accent transition-colors hover:text-ods-accent-hover",
|
|
6619
6626
|
children: [
|
|
6620
6627
|
/* @__PURE__ */ jsx60("span", { className: "underline", children: url }),
|
|
6621
|
-
/* @__PURE__ */ jsx60(
|
|
6628
|
+
/* @__PURE__ */ jsx60(ExternalLinkIcon2, { size: 14 })
|
|
6622
6629
|
]
|
|
6623
6630
|
}
|
|
6624
6631
|
) });
|
|
@@ -6681,7 +6688,7 @@ var OGLinkPreview = ({
|
|
|
6681
6688
|
/* @__PURE__ */ jsx60("h3", { className: "truncate font-semibold text-ods-text-primary transition-colors text-h6 group-hover:text-ods-accent", children: title }),
|
|
6682
6689
|
description && /* @__PURE__ */ jsx60("p", { className: "truncate text-ods-text-secondary text-h6", children: description })
|
|
6683
6690
|
] }),
|
|
6684
|
-
/* @__PURE__ */ jsx60(
|
|
6691
|
+
/* @__PURE__ */ jsx60(ExternalLinkIcon2, { size: 14 })
|
|
6685
6692
|
]
|
|
6686
6693
|
}
|
|
6687
6694
|
) });
|
|
@@ -6739,7 +6746,7 @@ var OGLinkPreview = ({
|
|
|
6739
6746
|
/* @__PURE__ */ jsx60("h3", { className: "truncate font-semibold text-ods-text-primary transition-colors text-h6 group-hover:text-ods-accent", children: title }),
|
|
6740
6747
|
description && /* @__PURE__ */ jsx60("p", { className: "truncate text-ods-text-secondary text-h6", children: description })
|
|
6741
6748
|
] }),
|
|
6742
|
-
/* @__PURE__ */ jsx60(
|
|
6749
|
+
/* @__PURE__ */ jsx60(ExternalLinkIcon2, {})
|
|
6743
6750
|
]
|
|
6744
6751
|
}
|
|
6745
6752
|
) });
|
|
@@ -7111,7 +7118,7 @@ var MediaCarousel = memo2(function MediaCarouselImpl({
|
|
|
7111
7118
|
// src/components/embeds/reddit-embed-client.tsx
|
|
7112
7119
|
import { jsx as jsx62, jsxs as jsxs46 } from "react/jsx-runtime";
|
|
7113
7120
|
var MessageCircleIcon2 = () => /* @__PURE__ */ jsx62("svg", { width: "16", height: "16", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx62("path", { d: "M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z" }) });
|
|
7114
|
-
var
|
|
7121
|
+
var ExternalLinkIcon3 = () => /* @__PURE__ */ jsxs46("svg", { width: "16", height: "16", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: [
|
|
7115
7122
|
/* @__PURE__ */ jsx62("path", { d: "M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6" }),
|
|
7116
7123
|
/* @__PURE__ */ jsx62("polyline", { points: "15,3 21,3 21,9" }),
|
|
7117
7124
|
/* @__PURE__ */ jsx62("line", { x1: "10", y1: "14", x2: "21", y2: "3" })
|
|
@@ -7447,7 +7454,7 @@ function RedditEmbedClient({ url, maxWidth = 700 }) {
|
|
|
7447
7454
|
rel: "noopener noreferrer",
|
|
7448
7455
|
className: "inline-flex items-center space-x-2 text-ods-accent transition-colors text-h6 hover:opacity-80",
|
|
7449
7456
|
children: [
|
|
7450
|
-
/* @__PURE__ */ jsx62(
|
|
7457
|
+
/* @__PURE__ */ jsx62(ExternalLinkIcon3, {}),
|
|
7451
7458
|
/* @__PURE__ */ jsx62("span", { children: "View on Reddit" })
|
|
7452
7459
|
]
|
|
7453
7460
|
}
|
|
@@ -7459,7 +7466,7 @@ function RedditEmbedClient({ url, maxWidth = 700 }) {
|
|
|
7459
7466
|
import { useState as useState24, useEffect as useEffect13, useRef as useRef13 } from "react";
|
|
7460
7467
|
import { jsx as jsx63, jsxs as jsxs47 } from "react/jsx-runtime";
|
|
7461
7468
|
var MessageCircleIcon3 = () => /* @__PURE__ */ jsx63("svg", { width: "16", height: "16", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx63("path", { d: "M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z" }) });
|
|
7462
|
-
var
|
|
7469
|
+
var ExternalLinkIcon4 = () => /* @__PURE__ */ jsxs47("svg", { width: "16", height: "16", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: [
|
|
7463
7470
|
/* @__PURE__ */ jsx63("path", { d: "M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6" }),
|
|
7464
7471
|
/* @__PURE__ */ jsx63("polyline", { points: "15,3 21,3 21,9" }),
|
|
7465
7472
|
/* @__PURE__ */ jsx63("line", { x1: "10", y1: "14", x2: "21", y2: "3" })
|
|
@@ -7565,7 +7572,7 @@ function TwitterEmbedClient({ url, tweetId, maxWidth = 700 }) {
|
|
|
7565
7572
|
url: link.href,
|
|
7566
7573
|
text: link.textContent || link.href
|
|
7567
7574
|
})).filter((link) => !link.url.includes("twitter.com") && !link.url.includes("x.com"));
|
|
7568
|
-
const
|
|
7575
|
+
const formatTime3 = () => {
|
|
7569
7576
|
return "on X";
|
|
7570
7577
|
};
|
|
7571
7578
|
const truncateText = (text, maxLength = 600) => {
|
|
@@ -7602,7 +7609,7 @@ function TwitterEmbedClient({ url, tweetId, maxWidth = 700 }) {
|
|
|
7602
7609
|
/* @__PURE__ */ jsx63(UserIcon3, {}),
|
|
7603
7610
|
/* @__PURE__ */ jsx63("span", { children: tweetData.author_name }),
|
|
7604
7611
|
/* @__PURE__ */ jsx63(ClockIcon3, {}),
|
|
7605
|
-
/* @__PURE__ */ jsx63("span", { children:
|
|
7612
|
+
/* @__PURE__ */ jsx63("span", { children: formatTime3() })
|
|
7606
7613
|
] })
|
|
7607
7614
|
] })
|
|
7608
7615
|
] }) }) }),
|
|
@@ -7623,7 +7630,7 @@ function TwitterEmbedClient({ url, tweetId, maxWidth = 700 }) {
|
|
|
7623
7630
|
rel: "noopener noreferrer",
|
|
7624
7631
|
className: "inline-flex items-center space-x-2 text-[#1DA1F2] transition-colors text-h6 hover:text-ods-accent",
|
|
7625
7632
|
children: [
|
|
7626
|
-
/* @__PURE__ */ jsx63(
|
|
7633
|
+
/* @__PURE__ */ jsx63(ExternalLinkIcon4, {}),
|
|
7627
7634
|
/* @__PURE__ */ jsx63("span", { className: "underline", children: link.text })
|
|
7628
7635
|
]
|
|
7629
7636
|
},
|
|
@@ -7652,7 +7659,7 @@ function TwitterEmbedClient({ url, tweetId, maxWidth = 700 }) {
|
|
|
7652
7659
|
rel: "noopener noreferrer",
|
|
7653
7660
|
className: "inline-flex items-center space-x-2 text-ods-accent transition-colors text-h6 hover:opacity-80",
|
|
7654
7661
|
children: [
|
|
7655
|
-
/* @__PURE__ */ jsx63(
|
|
7662
|
+
/* @__PURE__ */ jsx63(ExternalLinkIcon4, {}),
|
|
7656
7663
|
/* @__PURE__ */ jsx63("span", { children: "View on X" })
|
|
7657
7664
|
]
|
|
7658
7665
|
}
|
|
@@ -29506,11 +29513,526 @@ function TimeTrackerHeaderButton({ className, disabled }) {
|
|
|
29506
29513
|
] });
|
|
29507
29514
|
}
|
|
29508
29515
|
|
|
29516
|
+
// src/components/features/remote-session/remote-session-parts.tsx
|
|
29517
|
+
import { useEffect as useEffect41, useState as useState74 } from "react";
|
|
29518
|
+
import { jsx as jsx260, jsxs as jsxs207 } from "react/jsx-runtime";
|
|
29519
|
+
var DESKTOP_SCALE = {
|
|
29520
|
+
"--spacing-system-xs": "0.5rem",
|
|
29521
|
+
"--spacing-system-s": "0.75rem",
|
|
29522
|
+
"--spacing-system-m": "1rem",
|
|
29523
|
+
"--spacing-system-l": "1.5rem",
|
|
29524
|
+
"--spacing-system-xl": "2.5rem",
|
|
29525
|
+
"--font-size-h1-title": "3.5rem",
|
|
29526
|
+
"--font-size-h2-sub-title": "2rem",
|
|
29527
|
+
"--font-size-h3-body": "1.125rem",
|
|
29528
|
+
"--font-size-h4-body": "1.125rem",
|
|
29529
|
+
"--font-size-h5-caption": "0.875rem",
|
|
29530
|
+
"--font-size-h6-caption": "0.875rem",
|
|
29531
|
+
"--font-line-space-h1-main-title": "4rem",
|
|
29532
|
+
"--font-line-space-h2-sub-title": "2.5rem",
|
|
29533
|
+
"--font-line-space-h3-body": "1.5rem",
|
|
29534
|
+
"--font-line-space-h4-body": "1.5rem",
|
|
29535
|
+
"--font-line-space-h5-caption": "1.25rem",
|
|
29536
|
+
"--font-line-space-h6-caption": "1.25rem"
|
|
29537
|
+
};
|
|
29538
|
+
function RemoteSessionScope({ children, className }) {
|
|
29539
|
+
return /* @__PURE__ */ jsx260("div", { "data-app-type": "openframe", style: DESKTOP_SCALE, className, children });
|
|
29540
|
+
}
|
|
29541
|
+
function RemoteSessionOrgLogo({ name, logoUrl, sizePx, className }) {
|
|
29542
|
+
if (logoUrl) {
|
|
29543
|
+
return /* @__PURE__ */ jsx260(
|
|
29544
|
+
SquareAvatar,
|
|
29545
|
+
{
|
|
29546
|
+
variant: "square",
|
|
29547
|
+
fit: "contain",
|
|
29548
|
+
sizePx,
|
|
29549
|
+
src: logoUrl,
|
|
29550
|
+
alt: name,
|
|
29551
|
+
fallback: name,
|
|
29552
|
+
className: cn("shrink-0 rounded-md border border-ods-border bg-ods-card", className)
|
|
29553
|
+
}
|
|
29554
|
+
);
|
|
29555
|
+
}
|
|
29556
|
+
return /* @__PURE__ */ jsx260(
|
|
29557
|
+
"div",
|
|
29558
|
+
{
|
|
29559
|
+
role: "img",
|
|
29560
|
+
"aria-label": name,
|
|
29561
|
+
style: { width: sizePx, height: sizePx },
|
|
29562
|
+
className: cn(
|
|
29563
|
+
"flex shrink-0 items-center justify-center rounded-md border border-ods-border bg-ods-card",
|
|
29564
|
+
className
|
|
29565
|
+
),
|
|
29566
|
+
children: /* @__PURE__ */ jsx260(OpenFrameLogo, { className: "size-1/2" })
|
|
29567
|
+
}
|
|
29568
|
+
);
|
|
29569
|
+
}
|
|
29570
|
+
function RemoteSessionRecordingTag() {
|
|
29571
|
+
return /* @__PURE__ */ jsxs207("div", { className: "flex h-8 items-center gap-[var(--spacing-system-xs)] self-start rounded-md bg-ods-success-secondary p-[var(--spacing-system-xsf)]", children: [
|
|
29572
|
+
/* @__PURE__ */ jsx260(RecordingIcon, { size: 16, color: "currentColor", className: "text-ods-success" }),
|
|
29573
|
+
/* @__PURE__ */ jsx260("span", { className: "text-ods-success text-h5", children: "Session Recording" })
|
|
29574
|
+
] });
|
|
29575
|
+
}
|
|
29576
|
+
var REMOTE_SESSION_DRAG_HANDLE_CLASS = "cursor-grab active:cursor-grabbing";
|
|
29577
|
+
function RemoteSessionDragger({ dragHandlers }) {
|
|
29578
|
+
return /* @__PURE__ */ jsx260(
|
|
29579
|
+
"span",
|
|
29580
|
+
{
|
|
29581
|
+
"aria-hidden": true,
|
|
29582
|
+
className: cn(
|
|
29583
|
+
"absolute right-[var(--spacing-system-xsf)] top-[var(--spacing-system-xsf)] text-ods-text-secondary",
|
|
29584
|
+
dragHandlers && REMOTE_SESSION_DRAG_HANDLE_CLASS
|
|
29585
|
+
),
|
|
29586
|
+
...dragHandlers,
|
|
29587
|
+
children: /* @__PURE__ */ jsx260(DraggerIcon, { size: 24, color: "currentColor" })
|
|
29588
|
+
}
|
|
29589
|
+
);
|
|
29590
|
+
}
|
|
29591
|
+
function formatRemoteSessionElapsed(elapsedMs) {
|
|
29592
|
+
const total = Math.max(0, Math.floor(elapsedMs / 1e3));
|
|
29593
|
+
const hours = Math.floor(total / 3600);
|
|
29594
|
+
const minutes = Math.floor(total % 3600 / 60);
|
|
29595
|
+
const seconds = String(total % 60).padStart(2, "0");
|
|
29596
|
+
return hours > 0 ? `${hours}:${String(minutes).padStart(2, "0")}:${seconds}` : `${minutes}:${seconds}`;
|
|
29597
|
+
}
|
|
29598
|
+
function useRemoteSessionTimer(startedAt) {
|
|
29599
|
+
const [nowMs, setNowMs] = useState74(() => Date.now());
|
|
29600
|
+
useEffect41(() => {
|
|
29601
|
+
const timer = setInterval(() => setNowMs(Date.now()), 1e3);
|
|
29602
|
+
return () => clearInterval(timer);
|
|
29603
|
+
}, []);
|
|
29604
|
+
return formatRemoteSessionElapsed(nowMs - Date.parse(startedAt));
|
|
29605
|
+
}
|
|
29606
|
+
|
|
29607
|
+
// src/components/features/remote-session/remote-access-request-card.tsx
|
|
29608
|
+
import { jsx as jsx261, jsxs as jsxs208 } from "react/jsx-runtime";
|
|
29609
|
+
function displaySiteUrl(url) {
|
|
29610
|
+
return url.replace(/^https?:\/\//, "").replace(/\/$/, "");
|
|
29611
|
+
}
|
|
29612
|
+
function RemoteAccessRequestCard({
|
|
29613
|
+
party,
|
|
29614
|
+
showRecordingNotice = false,
|
|
29615
|
+
deciding = null,
|
|
29616
|
+
error,
|
|
29617
|
+
onDecide,
|
|
29618
|
+
onOpenSite
|
|
29619
|
+
}) {
|
|
29620
|
+
const { organizationName } = party;
|
|
29621
|
+
const siteUrl = party.organizationSiteUrl ?? void 0;
|
|
29622
|
+
const openableSite = siteUrl?.startsWith("https://") ? siteUrl : void 0;
|
|
29623
|
+
return /* @__PURE__ */ jsxs208("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: [
|
|
29624
|
+
/* @__PURE__ */ jsx261("h1", { className: "w-full text-ods-text-primary text-h2", children: "Your IT support team is requesting remote access" }),
|
|
29625
|
+
/* @__PURE__ */ jsxs208("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: [
|
|
29626
|
+
/* @__PURE__ */ jsx261(RemoteSessionOrgLogo, { name: organizationName, logoUrl: party.organizationLogoUrl, sizePx: 64 }),
|
|
29627
|
+
/* @__PURE__ */ jsxs208("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
29628
|
+
/* @__PURE__ */ jsx261("p", { className: "w-full truncate text-ods-text-primary text-h3", children: organizationName }),
|
|
29629
|
+
siteUrl && /* @__PURE__ */ jsx261("p", { className: "w-full truncate text-ods-text-secondary text-h4", children: displaySiteUrl(siteUrl) })
|
|
29630
|
+
] }),
|
|
29631
|
+
openableSite && onOpenSite && /* @__PURE__ */ jsx261(Button, { variant: "outline", size: "icon", "aria-label": "Open website", onClick: () => onOpenSite(openableSite), children: /* @__PURE__ */ jsx261(ExternalLinkIcon, { size: 24, color: "currentColor" }) })
|
|
29632
|
+
] }),
|
|
29633
|
+
/* @__PURE__ */ jsxs208("p", { className: "w-full text-ods-text-primary text-h4", children: [
|
|
29634
|
+
"A technician from ",
|
|
29635
|
+
/* @__PURE__ */ jsx261("span", { className: "text-ods-accent", children: organizationName }),
|
|
29636
|
+
" will be able to view your screen and control your mouse and keyboard during this session."
|
|
29637
|
+
] }),
|
|
29638
|
+
/* @__PURE__ */ jsxs208("div", { className: "flex w-full flex-col gap-[var(--spacing-system-xs)]", children: [
|
|
29639
|
+
showRecordingNotice && /* @__PURE__ */ jsxs208("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: [
|
|
29640
|
+
/* @__PURE__ */ jsx261(InfoCircleIcon, { size: 24, color: "currentColor", className: "shrink-0 text-ods-accent" }),
|
|
29641
|
+
/* @__PURE__ */ jsx261("p", { className: "min-w-0 flex-1 text-ods-text-primary text-h6", children: "This session will be recorded and available upon request." })
|
|
29642
|
+
] }),
|
|
29643
|
+
error ? /* @__PURE__ */ jsx261("p", { className: "w-full text-ods-text-primary text-h6", children: error }) : /* @__PURE__ */ jsx261("p", { className: "w-full text-ods-text-secondary text-h6", children: "You can end the session at any time." })
|
|
29644
|
+
] }),
|
|
29645
|
+
/* @__PURE__ */ jsxs208("div", { className: "flex w-full items-stretch gap-[var(--spacing-system-l)]", children: [
|
|
29646
|
+
/* @__PURE__ */ jsx261(
|
|
29647
|
+
Button,
|
|
29648
|
+
{
|
|
29649
|
+
variant: "outline",
|
|
29650
|
+
fullWidth: true,
|
|
29651
|
+
loading: deciding === "DENIED",
|
|
29652
|
+
disabled: deciding !== null,
|
|
29653
|
+
onClick: () => onDecide("DENIED"),
|
|
29654
|
+
children: "Decline"
|
|
29655
|
+
}
|
|
29656
|
+
),
|
|
29657
|
+
/* @__PURE__ */ jsx261(
|
|
29658
|
+
Button,
|
|
29659
|
+
{
|
|
29660
|
+
variant: "accent",
|
|
29661
|
+
fullWidth: true,
|
|
29662
|
+
loading: deciding === "APPROVED",
|
|
29663
|
+
disabled: deciding !== null,
|
|
29664
|
+
onClick: () => onDecide("APPROVED"),
|
|
29665
|
+
children: "Allow Access"
|
|
29666
|
+
}
|
|
29667
|
+
)
|
|
29668
|
+
] })
|
|
29669
|
+
] });
|
|
29670
|
+
}
|
|
29671
|
+
|
|
29672
|
+
// src/components/features/remote-session/remote-session-block.tsx
|
|
29673
|
+
import { forwardRef as forwardRef31 } from "react";
|
|
29674
|
+
import { jsx as jsx262, jsxs as jsxs209 } from "react/jsx-runtime";
|
|
29675
|
+
var RemoteSessionBlockFrame = forwardRef31(
|
|
29676
|
+
({ children, expanded = false, onHide, className }, ref) => {
|
|
29677
|
+
return /* @__PURE__ */ jsxs209(
|
|
29678
|
+
"div",
|
|
29679
|
+
{
|
|
29680
|
+
ref,
|
|
29681
|
+
className: cn(
|
|
29682
|
+
"flex w-[440px] shrink-0 flex-col overflow-hidden rounded-md border border-ods-border bg-ods-bg",
|
|
29683
|
+
expanded && "h-[680px]",
|
|
29684
|
+
className
|
|
29685
|
+
),
|
|
29686
|
+
children: [
|
|
29687
|
+
children,
|
|
29688
|
+
/* @__PURE__ */ jsxs209(
|
|
29689
|
+
"button",
|
|
29690
|
+
{
|
|
29691
|
+
type: "button",
|
|
29692
|
+
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)]",
|
|
29693
|
+
onClick: onHide,
|
|
29694
|
+
children: [
|
|
29695
|
+
/* @__PURE__ */ jsx262(Chevrons03RightIcon, { size: 24 }),
|
|
29696
|
+
/* @__PURE__ */ jsx262("span", { className: "min-w-0 flex-1 truncate text-left text-ods-text-secondary text-h4", children: "Hide this Block" }),
|
|
29697
|
+
/* @__PURE__ */ jsx262(OpenFrameLogo, { className: "size-6 shrink-0" })
|
|
29698
|
+
]
|
|
29699
|
+
}
|
|
29700
|
+
)
|
|
29701
|
+
]
|
|
29702
|
+
}
|
|
29703
|
+
);
|
|
29704
|
+
}
|
|
29705
|
+
);
|
|
29706
|
+
RemoteSessionBlockFrame.displayName = "RemoteSessionBlockFrame";
|
|
29707
|
+
function RemoteSessionEndButton({ onEndSession }) {
|
|
29708
|
+
return /* @__PURE__ */ jsx262(
|
|
29709
|
+
Button,
|
|
29710
|
+
{
|
|
29711
|
+
variant: "outline",
|
|
29712
|
+
fullWidth: true,
|
|
29713
|
+
leftIcon: /* @__PURE__ */ jsx262(MonitorOffIcon, { size: 24, color: "currentColor", className: "text-ods-error" }),
|
|
29714
|
+
onClick: onEndSession,
|
|
29715
|
+
children: "End Session"
|
|
29716
|
+
}
|
|
29717
|
+
);
|
|
29718
|
+
}
|
|
29719
|
+
function RemoteSessionSummary({
|
|
29720
|
+
party,
|
|
29721
|
+
elapsed,
|
|
29722
|
+
showRecordingTag = false,
|
|
29723
|
+
onOpenChat,
|
|
29724
|
+
onEndSession,
|
|
29725
|
+
dragHandlers
|
|
29726
|
+
}) {
|
|
29727
|
+
const technician = party.technicianName;
|
|
29728
|
+
return /* @__PURE__ */ jsxs209("div", { className: "relative flex flex-col gap-[var(--spacing-system-m)] p-[var(--spacing-system-m)]", children: [
|
|
29729
|
+
/* @__PURE__ */ jsx262(RemoteSessionDragger, { dragHandlers }),
|
|
29730
|
+
/* @__PURE__ */ jsxs209(
|
|
29731
|
+
"div",
|
|
29732
|
+
{
|
|
29733
|
+
className: cn(
|
|
29734
|
+
"flex w-full items-center gap-[var(--spacing-system-xs)] pr-[var(--spacing-system-mf)]",
|
|
29735
|
+
dragHandlers && REMOTE_SESSION_DRAG_HANDLE_CLASS
|
|
29736
|
+
),
|
|
29737
|
+
...dragHandlers,
|
|
29738
|
+
children: [
|
|
29739
|
+
technician ? /* @__PURE__ */ jsx262(
|
|
29740
|
+
SquareAvatar,
|
|
29741
|
+
{
|
|
29742
|
+
variant: "round",
|
|
29743
|
+
sizePx: 48,
|
|
29744
|
+
src: party.technicianAvatarUrl ?? void 0,
|
|
29745
|
+
fallback: technician
|
|
29746
|
+
}
|
|
29747
|
+
) : /* @__PURE__ */ jsx262(RemoteSessionOrgLogo, { name: party.organizationName, logoUrl: party.organizationLogoUrl, sizePx: 48 }),
|
|
29748
|
+
/* @__PURE__ */ jsxs209("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
29749
|
+
/* @__PURE__ */ jsxs209("p", { className: "w-full truncate text-ods-text-primary text-h4", children: [
|
|
29750
|
+
technician ? `${technician} connected` : "IT support team is connected",
|
|
29751
|
+
" ",
|
|
29752
|
+
/* @__PURE__ */ jsxs209("span", { className: "text-ods-text-secondary", children: [
|
|
29753
|
+
"(",
|
|
29754
|
+
elapsed,
|
|
29755
|
+
")"
|
|
29756
|
+
] })
|
|
29757
|
+
] }),
|
|
29758
|
+
/* @__PURE__ */ jsx262("p", { className: "w-full truncate text-ods-text-secondary text-h4", children: party.organizationName })
|
|
29759
|
+
] })
|
|
29760
|
+
]
|
|
29761
|
+
}
|
|
29762
|
+
),
|
|
29763
|
+
showRecordingTag && /* @__PURE__ */ jsx262(RemoteSessionRecordingTag, {}),
|
|
29764
|
+
/* @__PURE__ */ jsxs209("div", { className: "flex w-full items-stretch gap-[var(--spacing-system-m)]", children: [
|
|
29765
|
+
/* @__PURE__ */ jsx262(
|
|
29766
|
+
Button,
|
|
29767
|
+
{
|
|
29768
|
+
variant: "outline",
|
|
29769
|
+
fullWidth: true,
|
|
29770
|
+
leftIcon: /* @__PURE__ */ jsx262(ChatsIcon, { size: 24, color: "currentColor" }),
|
|
29771
|
+
onClick: onOpenChat,
|
|
29772
|
+
children: "Open Chat"
|
|
29773
|
+
}
|
|
29774
|
+
),
|
|
29775
|
+
/* @__PURE__ */ jsx262(RemoteSessionEndButton, { onEndSession })
|
|
29776
|
+
] })
|
|
29777
|
+
] });
|
|
29778
|
+
}
|
|
29779
|
+
var RemoteSessionMinimizedChip = forwardRef31(
|
|
29780
|
+
({ party, onExpand, dragHandlers }, ref) => {
|
|
29781
|
+
const technician = party.technicianName;
|
|
29782
|
+
return /* @__PURE__ */ jsxs209(
|
|
29783
|
+
"button",
|
|
29784
|
+
{
|
|
29785
|
+
ref,
|
|
29786
|
+
type: "button",
|
|
29787
|
+
"aria-label": "Show session block",
|
|
29788
|
+
className: cn(
|
|
29789
|
+
"flex shrink-0 flex-col overflow-hidden rounded-md border border-ods-border",
|
|
29790
|
+
dragHandlers && REMOTE_SESSION_DRAG_HANDLE_CLASS
|
|
29791
|
+
),
|
|
29792
|
+
onClick: onExpand,
|
|
29793
|
+
...dragHandlers,
|
|
29794
|
+
children: [
|
|
29795
|
+
technician ? /* @__PURE__ */ jsx262(
|
|
29796
|
+
SquareAvatar,
|
|
29797
|
+
{
|
|
29798
|
+
sizePx: 48,
|
|
29799
|
+
src: party.technicianAvatarUrl ?? void 0,
|
|
29800
|
+
fallback: technician,
|
|
29801
|
+
className: "rounded-none"
|
|
29802
|
+
}
|
|
29803
|
+
) : /* @__PURE__ */ jsx262(
|
|
29804
|
+
RemoteSessionOrgLogo,
|
|
29805
|
+
{
|
|
29806
|
+
name: party.organizationName,
|
|
29807
|
+
logoUrl: party.organizationLogoUrl,
|
|
29808
|
+
sizePx: 48,
|
|
29809
|
+
className: "rounded-none border-0"
|
|
29810
|
+
}
|
|
29811
|
+
),
|
|
29812
|
+
/* @__PURE__ */ jsx262("span", { className: "flex h-9 w-12 items-center justify-center border-t border-ods-border bg-ods-card", children: /* @__PURE__ */ jsx262(Chevrons03LeftIcon, { size: 24 }) })
|
|
29813
|
+
]
|
|
29814
|
+
}
|
|
29815
|
+
);
|
|
29816
|
+
}
|
|
29817
|
+
);
|
|
29818
|
+
RemoteSessionMinimizedChip.displayName = "RemoteSessionMinimizedChip";
|
|
29819
|
+
|
|
29820
|
+
// src/components/features/remote-session/remote-session-chat-panel.tsx
|
|
29821
|
+
import { useEffect as useEffect42, useRef as useRef39 } from "react";
|
|
29822
|
+
import { jsx as jsx263, jsxs as jsxs210 } from "react/jsx-runtime";
|
|
29823
|
+
function formatTime2(at) {
|
|
29824
|
+
return at.toLocaleTimeString([], { hour: "numeric", minute: "2-digit" });
|
|
29825
|
+
}
|
|
29826
|
+
function RemoteSessionChatPanel({
|
|
29827
|
+
party,
|
|
29828
|
+
elapsed,
|
|
29829
|
+
messages,
|
|
29830
|
+
showRecordingTag = false,
|
|
29831
|
+
draft,
|
|
29832
|
+
onDraftChange,
|
|
29833
|
+
onSend,
|
|
29834
|
+
ready = true,
|
|
29835
|
+
error,
|
|
29836
|
+
onCloseChat,
|
|
29837
|
+
onEndSession,
|
|
29838
|
+
dragHandlers
|
|
29839
|
+
}) {
|
|
29840
|
+
const listRef = useRef39(null);
|
|
29841
|
+
useEffect42(() => {
|
|
29842
|
+
const list = listRef.current;
|
|
29843
|
+
if (list) list.scrollTop = list.scrollHeight;
|
|
29844
|
+
}, [messages]);
|
|
29845
|
+
const handleSend = () => {
|
|
29846
|
+
const text = draft.trim();
|
|
29847
|
+
if (!text) return;
|
|
29848
|
+
onSend(text);
|
|
29849
|
+
onDraftChange("");
|
|
29850
|
+
};
|
|
29851
|
+
return /* @__PURE__ */ jsxs210("div", { className: "flex min-h-0 flex-1 flex-col", children: [
|
|
29852
|
+
/* @__PURE__ */ jsxs210("div", { className: "relative flex flex-col gap-[var(--spacing-system-m)] p-[var(--spacing-system-m)]", children: [
|
|
29853
|
+
/* @__PURE__ */ jsx263(RemoteSessionDragger, { dragHandlers }),
|
|
29854
|
+
/* @__PURE__ */ jsxs210(
|
|
29855
|
+
"div",
|
|
29856
|
+
{
|
|
29857
|
+
className: cn(
|
|
29858
|
+
"flex w-full flex-col pr-[var(--spacing-system-mf)]",
|
|
29859
|
+
dragHandlers && REMOTE_SESSION_DRAG_HANDLE_CLASS
|
|
29860
|
+
),
|
|
29861
|
+
...dragHandlers,
|
|
29862
|
+
children: [
|
|
29863
|
+
/* @__PURE__ */ jsxs210("p", { className: "w-full truncate text-ods-text-primary text-h4", children: [
|
|
29864
|
+
"Your IT support team is connected ",
|
|
29865
|
+
/* @__PURE__ */ jsxs210("span", { className: "text-ods-text-secondary", children: [
|
|
29866
|
+
"(",
|
|
29867
|
+
elapsed,
|
|
29868
|
+
")"
|
|
29869
|
+
] })
|
|
29870
|
+
] }),
|
|
29871
|
+
/* @__PURE__ */ jsx263("p", { className: "w-full truncate text-ods-text-secondary text-h4", children: "You can end this session at any time" })
|
|
29872
|
+
]
|
|
29873
|
+
}
|
|
29874
|
+
),
|
|
29875
|
+
showRecordingTag && /* @__PURE__ */ jsx263(RemoteSessionRecordingTag, {}),
|
|
29876
|
+
/* @__PURE__ */ jsxs210("div", { className: "flex w-full items-stretch gap-[var(--spacing-system-m)]", children: [
|
|
29877
|
+
/* @__PURE__ */ jsx263(
|
|
29878
|
+
Button,
|
|
29879
|
+
{
|
|
29880
|
+
variant: "outline",
|
|
29881
|
+
fullWidth: true,
|
|
29882
|
+
leftIcon: /* @__PURE__ */ jsx263(MessageOffIcon, { size: 24, color: "currentColor" }),
|
|
29883
|
+
onClick: onCloseChat,
|
|
29884
|
+
children: "Close Chat"
|
|
29885
|
+
}
|
|
29886
|
+
),
|
|
29887
|
+
/* @__PURE__ */ jsx263(RemoteSessionEndButton, { onEndSession })
|
|
29888
|
+
] })
|
|
29889
|
+
] }),
|
|
29890
|
+
/* @__PURE__ */ jsx263(
|
|
29891
|
+
"div",
|
|
29892
|
+
{
|
|
29893
|
+
ref: listRef,
|
|
29894
|
+
className: "flex min-h-0 flex-1 flex-col overflow-y-auto bg-ods-card p-[var(--spacing-system-m)]",
|
|
29895
|
+
children: /* @__PURE__ */ jsx263("div", { className: "mt-auto flex flex-col gap-[var(--spacing-system-s)]", children: messages.map(
|
|
29896
|
+
(message) => message.author === "system" ? /* @__PURE__ */ jsx263("p", { className: "w-full text-center text-ods-text-secondary text-h6", children: message.text }, message.id) : /* @__PURE__ */ jsx263(RemoteSessionChatMessageRow, { message, party }, message.id)
|
|
29897
|
+
) })
|
|
29898
|
+
}
|
|
29899
|
+
),
|
|
29900
|
+
error && /* @__PURE__ */ jsx263("p", { className: "bg-ods-card px-[var(--spacing-system-m)] text-ods-error text-h6", children: error }),
|
|
29901
|
+
/* @__PURE__ */ jsxs210(
|
|
29902
|
+
"form",
|
|
29903
|
+
{
|
|
29904
|
+
className: "flex items-center gap-[var(--spacing-system-xs)] bg-ods-card px-[var(--spacing-system-m)] pb-[var(--spacing-system-m)]",
|
|
29905
|
+
onSubmit: (event) => {
|
|
29906
|
+
event.preventDefault();
|
|
29907
|
+
handleSend();
|
|
29908
|
+
},
|
|
29909
|
+
children: [
|
|
29910
|
+
/* @__PURE__ */ jsx263(
|
|
29911
|
+
"input",
|
|
29912
|
+
{
|
|
29913
|
+
value: draft,
|
|
29914
|
+
onChange: (event) => onDraftChange(event.target.value),
|
|
29915
|
+
disabled: !ready,
|
|
29916
|
+
placeholder: ready ? "Enter your Message..." : "Loading chat...",
|
|
29917
|
+
"aria-label": "Message",
|
|
29918
|
+
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"
|
|
29919
|
+
}
|
|
29920
|
+
),
|
|
29921
|
+
/* @__PURE__ */ jsx263(
|
|
29922
|
+
"button",
|
|
29923
|
+
{
|
|
29924
|
+
type: "submit",
|
|
29925
|
+
"aria-label": "Send message",
|
|
29926
|
+
disabled: !ready,
|
|
29927
|
+
className: "flex size-12 shrink-0 items-center justify-center",
|
|
29928
|
+
children: /* @__PURE__ */ jsx263(Send03Icon, { size: 24, color: "currentColor", className: "text-ods-text-primary" })
|
|
29929
|
+
}
|
|
29930
|
+
)
|
|
29931
|
+
]
|
|
29932
|
+
}
|
|
29933
|
+
)
|
|
29934
|
+
] });
|
|
29935
|
+
}
|
|
29936
|
+
function RemoteSessionChatMessageRow({
|
|
29937
|
+
message,
|
|
29938
|
+
party
|
|
29939
|
+
}) {
|
|
29940
|
+
const isTechnician = message.author === "technician";
|
|
29941
|
+
const technician = message.name ?? party.technicianName ?? "Technician";
|
|
29942
|
+
return /* @__PURE__ */ jsxs210("div", { className: "flex w-full flex-col", children: [
|
|
29943
|
+
/* @__PURE__ */ jsxs210("div", { className: "flex w-full items-center gap-[var(--spacing-system-xs)]", children: [
|
|
29944
|
+
isTechnician && /* @__PURE__ */ jsx263(
|
|
29945
|
+
SquareAvatar,
|
|
29946
|
+
{
|
|
29947
|
+
variant: "round",
|
|
29948
|
+
sizePx: 16,
|
|
29949
|
+
src: party.technicianAvatarUrl ?? void 0,
|
|
29950
|
+
fallback: technician
|
|
29951
|
+
}
|
|
29952
|
+
),
|
|
29953
|
+
/* @__PURE__ */ jsx263(
|
|
29954
|
+
"span",
|
|
29955
|
+
{
|
|
29956
|
+
className: cn(
|
|
29957
|
+
"min-w-0 flex-1 truncate text-code",
|
|
29958
|
+
isTechnician ? "text-ods-accent" : "text-ods-text-secondary"
|
|
29959
|
+
),
|
|
29960
|
+
children: isTechnician ? technician : "User"
|
|
29961
|
+
}
|
|
29962
|
+
),
|
|
29963
|
+
/* @__PURE__ */ jsx263("span", { className: "shrink-0 text-ods-text-secondary text-h6", children: formatTime2(message.at) })
|
|
29964
|
+
] }),
|
|
29965
|
+
/* @__PURE__ */ jsx263("p", { className: "w-full break-words text-ods-text-primary text-h6", children: message.text })
|
|
29966
|
+
] });
|
|
29967
|
+
}
|
|
29968
|
+
|
|
29969
|
+
// src/components/features/remote-session/remote-session-dialog.tsx
|
|
29970
|
+
import { jsx as jsx264, jsxs as jsxs211 } from "react/jsx-runtime";
|
|
29971
|
+
var NOTICE_COPY = {
|
|
29972
|
+
"session-ended": { title: "Remote session ended", suffix: "has disconnected from your device." },
|
|
29973
|
+
"connection-lost": { title: "Connection lost", suffix: "lost the connection to your device." }
|
|
29974
|
+
};
|
|
29975
|
+
function RemoteSessionDialog({
|
|
29976
|
+
variant,
|
|
29977
|
+
organizationName,
|
|
29978
|
+
ending = false,
|
|
29979
|
+
onEndSession,
|
|
29980
|
+
onClose
|
|
29981
|
+
}) {
|
|
29982
|
+
if (variant === "end-confirm") {
|
|
29983
|
+
return /* @__PURE__ */ jsxs211(DialogCard, { children: [
|
|
29984
|
+
/* @__PURE__ */ jsxs211("div", { className: "flex w-full flex-col gap-[var(--spacing-system-xs)]", children: [
|
|
29985
|
+
/* @__PURE__ */ jsx264("h1", { className: "w-full text-ods-text-primary text-h2", children: "End remote session?" }),
|
|
29986
|
+
/* @__PURE__ */ jsx264("p", { className: "w-full text-ods-text-primary text-h4", children: "The technician will lose access to your device immediately." })
|
|
29987
|
+
] }),
|
|
29988
|
+
/* @__PURE__ */ jsxs211("div", { className: "flex w-full items-stretch gap-[var(--spacing-system-l)]", children: [
|
|
29989
|
+
/* @__PURE__ */ jsx264(Button, { variant: "outline", fullWidth: true, disabled: ending, onClick: onClose, children: "Cancel" }),
|
|
29990
|
+
/* @__PURE__ */ jsx264(Button, { variant: "destructive", fullWidth: true, loading: ending, onClick: onEndSession, children: "End Session" })
|
|
29991
|
+
] })
|
|
29992
|
+
] });
|
|
29993
|
+
}
|
|
29994
|
+
const copy = NOTICE_COPY[variant];
|
|
29995
|
+
return /* @__PURE__ */ jsxs211(DialogCard, { children: [
|
|
29996
|
+
/* @__PURE__ */ jsxs211("div", { className: "flex w-full flex-col gap-[var(--spacing-system-xs)]", children: [
|
|
29997
|
+
/* @__PURE__ */ jsx264("h1", { className: "w-full text-ods-text-primary text-h2", children: copy.title }),
|
|
29998
|
+
/* @__PURE__ */ jsxs211("p", { className: "w-full text-ods-text-primary text-h4", children: [
|
|
29999
|
+
/* @__PURE__ */ jsx264("span", { className: "text-ods-accent", children: organizationName }),
|
|
30000
|
+
" ",
|
|
30001
|
+
copy.suffix
|
|
30002
|
+
] })
|
|
30003
|
+
] }),
|
|
30004
|
+
/* @__PURE__ */ jsx264("div", { className: "flex w-full justify-end", children: /* @__PURE__ */ jsx264(Button, { variant: "outline", className: "w-1/2", onClick: onClose, children: "Close" }) })
|
|
30005
|
+
] });
|
|
30006
|
+
}
|
|
30007
|
+
function DialogCard({ children }) {
|
|
30008
|
+
return /* @__PURE__ */ jsx264("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 });
|
|
30009
|
+
}
|
|
30010
|
+
|
|
30011
|
+
// src/components/features/remote-session/remote-session-overlay.tsx
|
|
30012
|
+
import { jsx as jsx265, jsxs as jsxs212 } from "react/jsx-runtime";
|
|
30013
|
+
function RemoteSessionBorder({ className }) {
|
|
30014
|
+
return /* @__PURE__ */ jsx265("div", { className: cn("pointer-events-none size-full border-4 border-ods-warning", className) });
|
|
30015
|
+
}
|
|
30016
|
+
function RemoteSessionPill({ onEndSession }) {
|
|
30017
|
+
return /* @__PURE__ */ jsxs212(
|
|
30018
|
+
"button",
|
|
30019
|
+
{
|
|
30020
|
+
type: "button",
|
|
30021
|
+
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",
|
|
30022
|
+
onClick: onEndSession,
|
|
30023
|
+
children: [
|
|
30024
|
+
/* @__PURE__ */ jsx265(MonitorOffIcon, { size: 24, color: "currentColor" }),
|
|
30025
|
+
/* @__PURE__ */ jsx265("span", { className: "whitespace-nowrap text-h3", children: "End Session" })
|
|
30026
|
+
]
|
|
30027
|
+
}
|
|
30028
|
+
);
|
|
30029
|
+
}
|
|
30030
|
+
|
|
29509
30031
|
// src/components/features/board/board.tsx
|
|
29510
30032
|
import { combine as combine3 } from "@atlaskit/pragmatic-drag-and-drop/combine";
|
|
29511
30033
|
import { monitorForElements } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
|
|
29512
30034
|
import { preventUnhandled } from "@atlaskit/pragmatic-drag-and-drop/utils/prevent-unhandled";
|
|
29513
|
-
import { Fragment as Fragment46, useCallback as useCallback28, useEffect as
|
|
30035
|
+
import { Fragment as Fragment46, useCallback as useCallback28, useEffect as useEffect46, useMemo as useMemo23, useRef as useRef44, useState as useState79 } from "react";
|
|
29514
30036
|
import { createPortal } from "react-dom";
|
|
29515
30037
|
|
|
29516
30038
|
// src/utils/auto-scroll-ancestors.ts
|
|
@@ -29623,10 +30145,10 @@ function aimToChange(columns, ticketId, aim) {
|
|
|
29623
30145
|
// src/components/features/board/board-column.tsx
|
|
29624
30146
|
import { attachClosestEdge as attachClosestEdge2 } from "@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge";
|
|
29625
30147
|
import { dropTargetForElements as dropTargetForElements2 } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
|
|
29626
|
-
import { memo as memo6, useCallback as useCallback26, useEffect as
|
|
30148
|
+
import { memo as memo6, useCallback as useCallback26, useEffect as useEffect44, useRef as useRef42, useState as useState77 } from "react";
|
|
29627
30149
|
|
|
29628
30150
|
// src/components/features/board/board-column-header.tsx
|
|
29629
|
-
import { jsx as
|
|
30151
|
+
import { jsx as jsx266, jsxs as jsxs213 } from "react/jsx-runtime";
|
|
29630
30152
|
function BoardColumnHeader({
|
|
29631
30153
|
column,
|
|
29632
30154
|
collapsed = false,
|
|
@@ -29639,8 +30161,8 @@ function BoardColumnHeader({
|
|
|
29639
30161
|
const useStatusVariant = resolveTicketStatus(tagStatus) !== null;
|
|
29640
30162
|
const actionClass = "h-8 w-8 p-0 md:h-8 md:w-8";
|
|
29641
30163
|
if (collapsed) {
|
|
29642
|
-
return /* @__PURE__ */
|
|
29643
|
-
onToggleCollapse && /* @__PURE__ */
|
|
30164
|
+
return /* @__PURE__ */ jsxs213("div", { className: "flex h-full flex-col items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
30165
|
+
onToggleCollapse && /* @__PURE__ */ jsx266(
|
|
29644
30166
|
Button,
|
|
29645
30167
|
{
|
|
29646
30168
|
variant: "transparent",
|
|
@@ -29648,10 +30170,10 @@ function BoardColumnHeader({
|
|
|
29648
30170
|
className: actionClass,
|
|
29649
30171
|
onClick: onToggleCollapse,
|
|
29650
30172
|
"aria-label": "Expand column",
|
|
29651
|
-
children: /* @__PURE__ */
|
|
30173
|
+
children: /* @__PURE__ */ jsx266(Arrow02RightIcon, { className: "h-6 w-6 text-ods-text-secondary" })
|
|
29652
30174
|
}
|
|
29653
30175
|
),
|
|
29654
|
-
/* @__PURE__ */
|
|
30176
|
+
/* @__PURE__ */ jsx266(
|
|
29655
30177
|
TicketStatusTag,
|
|
29656
30178
|
{
|
|
29657
30179
|
status: tagStatus,
|
|
@@ -29660,17 +30182,17 @@ function BoardColumnHeader({
|
|
|
29660
30182
|
className: "h-auto [writing-mode:vertical-rl]"
|
|
29661
30183
|
}
|
|
29662
30184
|
),
|
|
29663
|
-
/* @__PURE__ */
|
|
30185
|
+
/* @__PURE__ */ jsx266("span", { className: "text-h5", style: { color: column.color }, children: count })
|
|
29664
30186
|
] });
|
|
29665
30187
|
}
|
|
29666
|
-
return /* @__PURE__ */
|
|
29667
|
-
/* @__PURE__ */
|
|
29668
|
-
/* @__PURE__ */
|
|
29669
|
-
/* @__PURE__ */
|
|
30188
|
+
return /* @__PURE__ */ jsxs213("div", { className: "flex items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
30189
|
+
/* @__PURE__ */ jsxs213("div", { className: "flex min-w-0 flex-1 items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
30190
|
+
/* @__PURE__ */ jsx266(TicketStatusTag, { status: tagStatus, label: column.label, color: useStatusVariant ? void 0 : column.color }),
|
|
30191
|
+
/* @__PURE__ */ jsx266("span", { className: "text-h5", style: useStatusVariant ? void 0 : { color: column.color }, children: count })
|
|
29670
30192
|
] }),
|
|
29671
|
-
/* @__PURE__ */
|
|
29672
|
-
column.tooltip && /* @__PURE__ */
|
|
29673
|
-
onToggleCollapse && /* @__PURE__ */
|
|
30193
|
+
/* @__PURE__ */ jsxs213("div", { className: "flex shrink-0 items-center gap-[var(--spacing-system-xxs)]", children: [
|
|
30194
|
+
column.tooltip && /* @__PURE__ */ jsx266(TouchFriendlyTooltip, { content: column.tooltip, side: "bottom", children: /* @__PURE__ */ jsx266(Button, { variant: "transparent", size: "icon", className: actionClass, "aria-label": column.tooltip, children: /* @__PURE__ */ jsx266(InfoCircleIcon, { className: "h-6 w-6 text-ods-text-secondary" }) }) }),
|
|
30195
|
+
onToggleCollapse && /* @__PURE__ */ jsx266(
|
|
29674
30196
|
Button,
|
|
29675
30197
|
{
|
|
29676
30198
|
variant: "transparent",
|
|
@@ -29678,10 +30200,10 @@ function BoardColumnHeader({
|
|
|
29678
30200
|
className: actionClass,
|
|
29679
30201
|
onClick: onToggleCollapse,
|
|
29680
30202
|
"aria-label": "Collapse column",
|
|
29681
|
-
children: /* @__PURE__ */
|
|
30203
|
+
children: /* @__PURE__ */ jsx266(Arrow02LeftIcon, { className: "h-6 w-6 text-ods-text-secondary" })
|
|
29682
30204
|
}
|
|
29683
30205
|
),
|
|
29684
|
-
onArchive && /* @__PURE__ */
|
|
30206
|
+
onArchive && /* @__PURE__ */ jsx266(
|
|
29685
30207
|
Button,
|
|
29686
30208
|
{
|
|
29687
30209
|
variant: "transparent",
|
|
@@ -29689,10 +30211,10 @@ function BoardColumnHeader({
|
|
|
29689
30211
|
className: actionClass,
|
|
29690
30212
|
onClick: onArchive,
|
|
29691
30213
|
"aria-label": "Archive resolved tickets",
|
|
29692
|
-
children: /* @__PURE__ */
|
|
30214
|
+
children: /* @__PURE__ */ jsx266(BoxArchiveIcon, { className: "h-6 w-6 text-ods-text-secondary" })
|
|
29693
30215
|
}
|
|
29694
30216
|
),
|
|
29695
|
-
onAddTicket && /* @__PURE__ */
|
|
30217
|
+
onAddTicket && /* @__PURE__ */ jsx266(
|
|
29696
30218
|
Button,
|
|
29697
30219
|
{
|
|
29698
30220
|
variant: "transparent",
|
|
@@ -29700,7 +30222,7 @@ function BoardColumnHeader({
|
|
|
29700
30222
|
className: actionClass,
|
|
29701
30223
|
onClick: onAddTicket,
|
|
29702
30224
|
"aria-label": "Add ticket",
|
|
29703
|
-
children: /* @__PURE__ */
|
|
30225
|
+
children: /* @__PURE__ */ jsx266(PlusIcon, { className: "h-6 w-6 text-ods-text-secondary" })
|
|
29704
30226
|
}
|
|
29705
30227
|
)
|
|
29706
30228
|
] })
|
|
@@ -29735,7 +30257,7 @@ function isSameAim(a, b) {
|
|
|
29735
30257
|
}
|
|
29736
30258
|
|
|
29737
30259
|
// src/components/features/board/use-lane-scroll-anchor.ts
|
|
29738
|
-
import { useRef as
|
|
30260
|
+
import { useRef as useRef40 } from "react";
|
|
29739
30261
|
var TICKET_ID_ATTRIBUTE = "data-ticket-id";
|
|
29740
30262
|
function cardPositions(root) {
|
|
29741
30263
|
return Array.from(root.querySelectorAll(`[${TICKET_ID_ATTRIBUTE}]`)).map((element) => ({
|
|
@@ -29744,7 +30266,7 @@ function cardPositions(root) {
|
|
|
29744
30266
|
}));
|
|
29745
30267
|
}
|
|
29746
30268
|
function useLaneScrollAnchor(scrollRef, tickets) {
|
|
29747
|
-
const positionsRef =
|
|
30269
|
+
const positionsRef = useRef40([]);
|
|
29748
30270
|
useIsomorphicLayoutEffect(() => {
|
|
29749
30271
|
const root = scrollRef.current;
|
|
29750
30272
|
if (!root) return;
|
|
@@ -29796,10 +30318,10 @@ import { setCustomNativeDragPreview } from "@atlaskit/pragmatic-drag-and-drop/el
|
|
|
29796
30318
|
import {
|
|
29797
30319
|
memo as memo5,
|
|
29798
30320
|
useCallback as useCallback25,
|
|
29799
|
-
useEffect as
|
|
30321
|
+
useEffect as useEffect43,
|
|
29800
30322
|
useMemo as useMemo22,
|
|
29801
|
-
useRef as
|
|
29802
|
-
useState as
|
|
30323
|
+
useRef as useRef41,
|
|
30324
|
+
useState as useState76
|
|
29803
30325
|
} from "react";
|
|
29804
30326
|
|
|
29805
30327
|
// src/utils/drag-effect.ts
|
|
@@ -29813,14 +30335,14 @@ function holdMoveDragEffect(element) {
|
|
|
29813
30335
|
}
|
|
29814
30336
|
|
|
29815
30337
|
// src/components/features/board/board-ticket-approval.tsx
|
|
29816
|
-
import { useState as
|
|
29817
|
-
import { jsx as
|
|
30338
|
+
import { useState as useState75 } from "react";
|
|
30339
|
+
import { jsx as jsx267, jsxs as jsxs214 } from "react/jsx-runtime";
|
|
29818
30340
|
function BoardTicketApproval({ pendingApproval, onApprove, onReject }) {
|
|
29819
|
-
const [expanded, setExpanded] =
|
|
30341
|
+
const [expanded, setExpanded] = useState75(false);
|
|
29820
30342
|
const { innerRef, containerStyle } = useCollapsible({ expanded });
|
|
29821
30343
|
const isAdmin = pendingApproval.approvalType === "ADMIN";
|
|
29822
|
-
return /* @__PURE__ */
|
|
29823
|
-
/* @__PURE__ */
|
|
30344
|
+
return /* @__PURE__ */ jsxs214("div", { className: "pointer-events-auto flex flex-col", children: [
|
|
30345
|
+
/* @__PURE__ */ jsxs214(
|
|
29824
30346
|
"button",
|
|
29825
30347
|
{
|
|
29826
30348
|
type: "button",
|
|
@@ -29828,7 +30350,7 @@ function BoardTicketApproval({ pendingApproval, onApprove, onReject }) {
|
|
|
29828
30350
|
"aria-expanded": expanded,
|
|
29829
30351
|
className: "flex w-full cursor-pointer items-center gap-[var(--spacing-system-xxs)] text-h6",
|
|
29830
30352
|
children: [
|
|
29831
|
-
/* @__PURE__ */
|
|
30353
|
+
/* @__PURE__ */ jsxs214(
|
|
29832
30354
|
"span",
|
|
29833
30355
|
{
|
|
29834
30356
|
className: cn(
|
|
@@ -29836,16 +30358,16 @@ function BoardTicketApproval({ pendingApproval, onApprove, onReject }) {
|
|
|
29836
30358
|
isAdmin ? "text-ods-open-yellow" : "text-ods-text-secondary"
|
|
29837
30359
|
),
|
|
29838
30360
|
children: [
|
|
29839
|
-
isAdmin ? /* @__PURE__ */
|
|
29840
|
-
/* @__PURE__ */
|
|
30361
|
+
isAdmin ? /* @__PURE__ */ jsx267(ShieldCheckIcon, { className: "size-4 shrink-0" }) : /* @__PURE__ */ jsx267(DotsLoaderIcon, { size: 16, className: "shrink-0" }),
|
|
30362
|
+
/* @__PURE__ */ jsx267("span", { className: "flex-1 truncate text-left", children: isAdmin ? "Technician approval required" : "Pending client approval" })
|
|
29841
30363
|
]
|
|
29842
30364
|
}
|
|
29843
30365
|
),
|
|
29844
|
-
expanded ? /* @__PURE__ */
|
|
30366
|
+
expanded ? /* @__PURE__ */ jsx267(Chevron02UpIcon, { className: "size-4 shrink-0 text-ods-text-secondary" }) : /* @__PURE__ */ jsx267(Chevron02DownIcon, { className: "size-4 shrink-0 text-ods-text-secondary" })
|
|
29845
30367
|
]
|
|
29846
30368
|
}
|
|
29847
30369
|
),
|
|
29848
|
-
/* @__PURE__ */
|
|
30370
|
+
/* @__PURE__ */ jsx267("div", { style: containerStyle, children: /* @__PURE__ */ jsx267("div", { ref: innerRef, className: "pt-[var(--spacing-system-xs)]", children: /* @__PURE__ */ jsx267(
|
|
29849
30371
|
ApprovalBatchMessage,
|
|
29850
30372
|
{
|
|
29851
30373
|
className: "mb-0",
|
|
@@ -29898,7 +30420,7 @@ function hasMoveSettled(columns, move) {
|
|
|
29898
30420
|
}
|
|
29899
30421
|
|
|
29900
30422
|
// src/components/features/board/ticket-card.tsx
|
|
29901
|
-
import { Fragment as Fragment44, jsx as
|
|
30423
|
+
import { Fragment as Fragment44, jsx as jsx268, jsxs as jsxs215 } from "react/jsx-runtime";
|
|
29902
30424
|
var PRIORITY_COLOR_CLASS = {
|
|
29903
30425
|
low: "text-ods-text-secondary",
|
|
29904
30426
|
medium: "text-ods-info",
|
|
@@ -29930,24 +30452,24 @@ function TicketCardBody({
|
|
|
29930
30452
|
const showDeviceRow = !!(ticket.deviceHostnames?.length || ticket.organizationName);
|
|
29931
30453
|
const deviceText = [ticket.deviceHostnames?.join(", "), ticket.organizationName].filter(Boolean).join(", ");
|
|
29932
30454
|
const hasRightSection = !!(ticket.priority || ticket.assignees?.length || renderAssignSlot);
|
|
29933
|
-
const rightSection = hasRightSection ? /* @__PURE__ */
|
|
29934
|
-
ticket.priority && /* @__PURE__ */
|
|
30455
|
+
const rightSection = hasRightSection ? /* @__PURE__ */ jsxs215("div", { className: "pointer-events-auto flex shrink-0 items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
30456
|
+
ticket.priority && /* @__PURE__ */ jsx268(
|
|
29935
30457
|
Flag02Icon,
|
|
29936
30458
|
{
|
|
29937
30459
|
className: cn("size-4", PRIORITY_COLOR_CLASS[ticket.priority]),
|
|
29938
30460
|
"aria-label": `Priority: ${ticket.priority}`
|
|
29939
30461
|
}
|
|
29940
30462
|
),
|
|
29941
|
-
renderAssignSlot ? renderAssignSlot(ticket) : ticket.assignees?.length ? /* @__PURE__ */
|
|
30463
|
+
renderAssignSlot ? renderAssignSlot(ticket) : ticket.assignees?.length ? /* @__PURE__ */ jsxs215("div", { className: "flex -space-x-2", children: [
|
|
29942
30464
|
ticket.assignees.slice(0, MAX_VISIBLE_ASSIGNEES).map(
|
|
29943
|
-
(a) => a.deleted ? /* @__PURE__ */
|
|
30465
|
+
(a) => a.deleted ? /* @__PURE__ */ jsx268(
|
|
29944
30466
|
DeletedUserAvatar,
|
|
29945
30467
|
{
|
|
29946
30468
|
size: "sm",
|
|
29947
30469
|
accessibleLabel: `Deleted user: ${a.name ?? a.initials ?? a.id}`
|
|
29948
30470
|
},
|
|
29949
30471
|
a.id
|
|
29950
|
-
) : /* @__PURE__ */
|
|
30472
|
+
) : /* @__PURE__ */ jsx268(
|
|
29951
30473
|
SquareAvatar,
|
|
29952
30474
|
{
|
|
29953
30475
|
src: a.avatarUrl,
|
|
@@ -29959,7 +30481,7 @@ function TicketCardBody({
|
|
|
29959
30481
|
a.id
|
|
29960
30482
|
)
|
|
29961
30483
|
),
|
|
29962
|
-
ticket.assignees.length > MAX_VISIBLE_ASSIGNEES && /* @__PURE__ */
|
|
30484
|
+
ticket.assignees.length > MAX_VISIBLE_ASSIGNEES && /* @__PURE__ */ jsxs215("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: [
|
|
29963
30485
|
"+",
|
|
29964
30486
|
ticket.assignees.length - MAX_VISIBLE_ASSIGNEES
|
|
29965
30487
|
] })
|
|
@@ -29969,7 +30491,7 @@ function TicketCardBody({
|
|
|
29969
30491
|
const tooltipLabel = ticket.createdAt ? formatTicketFullTimestamp(ticket.createdAt) : null;
|
|
29970
30492
|
const metaLabel = [ticket.ticketNumber || null, timestampLabel].filter(Boolean).join(" \u2022 ");
|
|
29971
30493
|
const metaClass = "truncate text-ods-text-secondary text-h6";
|
|
29972
|
-
const meta = href ? /* @__PURE__ */
|
|
30494
|
+
const meta = href ? /* @__PURE__ */ jsx268(
|
|
29973
30495
|
next_link_default,
|
|
29974
30496
|
{
|
|
29975
30497
|
href,
|
|
@@ -29980,28 +30502,28 @@ function TicketCardBody({
|
|
|
29980
30502
|
className: cn("pointer-events-auto block", metaClass),
|
|
29981
30503
|
children: metaLabel
|
|
29982
30504
|
}
|
|
29983
|
-
) : /* @__PURE__ */
|
|
29984
|
-
return /* @__PURE__ */
|
|
29985
|
-
/* @__PURE__ */
|
|
29986
|
-
/* @__PURE__ */
|
|
29987
|
-
/* @__PURE__ */
|
|
29988
|
-
showDeviceRow && /* @__PURE__ */
|
|
29989
|
-
/* @__PURE__ */
|
|
29990
|
-
/* @__PURE__ */
|
|
30505
|
+
) : /* @__PURE__ */ jsx268("p", { className: cn(tooltipLabel && "pointer-events-auto", metaClass), children: metaLabel });
|
|
30506
|
+
return /* @__PURE__ */ jsxs215(Fragment44, { children: [
|
|
30507
|
+
/* @__PURE__ */ jsxs215("div", { className: "flex items-start gap-[var(--spacing-system-sf)]", children: [
|
|
30508
|
+
/* @__PURE__ */ jsxs215("div", { className: "flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-zero)]", title: ticket.title, children: [
|
|
30509
|
+
/* @__PURE__ */ jsx268("p", { className: "truncate text-ods-text-primary text-h3", children: ticket.title }),
|
|
30510
|
+
showDeviceRow && /* @__PURE__ */ jsxs215("div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xxs)] text-ods-text-secondary text-h6", children: [
|
|
30511
|
+
/* @__PURE__ */ jsx268(LaptopIcon, { className: "size-4 shrink-0" }),
|
|
30512
|
+
/* @__PURE__ */ jsx268("span", { className: "truncate", title: deviceText, children: deviceText })
|
|
29991
30513
|
] })
|
|
29992
30514
|
] }),
|
|
29993
30515
|
rightSection
|
|
29994
30516
|
] }),
|
|
29995
|
-
ticket.tags?.length ? /* @__PURE__ */
|
|
29996
|
-
metaLabel && (tooltipLabel ? /* @__PURE__ */
|
|
29997
|
-
/* @__PURE__ */
|
|
29998
|
-
/* @__PURE__ */
|
|
30517
|
+
ticket.tags?.length ? /* @__PURE__ */ jsx268(TicketTagRow, { tags: ticket.tags }) : null,
|
|
30518
|
+
metaLabel && (tooltipLabel ? /* @__PURE__ */ jsx268(TooltipProvider, { children: /* @__PURE__ */ jsxs215(Tooltip, { children: [
|
|
30519
|
+
/* @__PURE__ */ jsx268(TooltipTrigger, { asChild: true, children: meta }),
|
|
30520
|
+
/* @__PURE__ */ jsx268(TooltipContent, { children: tooltipLabel })
|
|
29999
30521
|
] }) }) : meta),
|
|
30000
|
-
ticket.escalatedByUser && /* @__PURE__ */
|
|
30001
|
-
/* @__PURE__ */
|
|
30002
|
-
/* @__PURE__ */
|
|
30522
|
+
ticket.escalatedByUser && /* @__PURE__ */ jsxs215("div", { className: "flex items-center gap-[var(--spacing-system-xxs)] text-ods-open-yellow text-h6", children: [
|
|
30523
|
+
/* @__PURE__ */ jsx268(UserCheckIcon, { className: "size-4 shrink-0" }),
|
|
30524
|
+
/* @__PURE__ */ jsx268("span", { className: "truncate", children: "Escalated by User" })
|
|
30003
30525
|
] }),
|
|
30004
|
-
ticket.activity && /* @__PURE__ */
|
|
30526
|
+
ticket.activity && /* @__PURE__ */ jsxs215(
|
|
30005
30527
|
"div",
|
|
30006
30528
|
{
|
|
30007
30529
|
className: cn(
|
|
@@ -30009,32 +30531,32 @@ function TicketCardBody({
|
|
|
30009
30531
|
ticket.activity.kind === "stale" ? "text-ods-open-yellow" : "text-ods-text-secondary"
|
|
30010
30532
|
),
|
|
30011
30533
|
children: [
|
|
30012
|
-
ticket.activity.kind === "stale" ? /* @__PURE__ */
|
|
30013
|
-
/* @__PURE__ */
|
|
30534
|
+
ticket.activity.kind === "stale" ? /* @__PURE__ */ jsx268(ClockIcon, { className: "size-4 shrink-0" }) : /* @__PURE__ */ jsx268(DotsLoaderIcon, { className: "size-4 shrink-0" }),
|
|
30535
|
+
/* @__PURE__ */ jsx268("span", { className: "truncate", children: ticket.activity.label ?? ACTIVITY_DEFAULT_LABEL[ticket.activity.kind] })
|
|
30014
30536
|
]
|
|
30015
30537
|
}
|
|
30016
30538
|
),
|
|
30017
|
-
showNewMessage && /* @__PURE__ */
|
|
30539
|
+
showNewMessage && /* @__PURE__ */ jsx268(
|
|
30018
30540
|
Tag,
|
|
30019
30541
|
{
|
|
30020
30542
|
label: "New Message",
|
|
30021
|
-
icon: /* @__PURE__ */
|
|
30543
|
+
icon: /* @__PURE__ */ jsx268(MessagesIcon, { size: 16, color: newMessageTextColor }),
|
|
30022
30544
|
className: "w-fit shrink-0",
|
|
30023
30545
|
style: { backgroundColor: columnColor, color: newMessageTextColor }
|
|
30024
30546
|
}
|
|
30025
30547
|
),
|
|
30026
|
-
ticket.pendingApproval && /* @__PURE__ */
|
|
30548
|
+
ticket.pendingApproval && /* @__PURE__ */ jsx268(BoardTicketApproval, { pendingApproval: ticket.pendingApproval, onApprove, onReject })
|
|
30027
30549
|
] });
|
|
30028
30550
|
}
|
|
30029
30551
|
function TicketCardView({ className, style, ...bodyProps }) {
|
|
30030
30552
|
const { ticket, columnColor } = bodyProps;
|
|
30031
30553
|
const showNewMessage = !!ticket.hasNewMessage && !!columnColor;
|
|
30032
|
-
return /* @__PURE__ */
|
|
30554
|
+
return /* @__PURE__ */ jsx268(
|
|
30033
30555
|
"div",
|
|
30034
30556
|
{
|
|
30035
30557
|
className: cn(TICKET_CARD_SHELL, className),
|
|
30036
30558
|
style: showNewMessage ? { borderColor: columnColor, ...style } : style,
|
|
30037
|
-
children: /* @__PURE__ */
|
|
30559
|
+
children: /* @__PURE__ */ jsx268("div", { className: "relative z-10 flex flex-col gap-[var(--spacing-system-sf)]", children: /* @__PURE__ */ jsx268(TicketCardBody, { ...bodyProps }) })
|
|
30038
30560
|
}
|
|
30039
30561
|
);
|
|
30040
30562
|
}
|
|
@@ -30050,12 +30572,12 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
30050
30572
|
onApprove,
|
|
30051
30573
|
onReject
|
|
30052
30574
|
}) {
|
|
30053
|
-
const ref =
|
|
30054
|
-
const ticketRef =
|
|
30055
|
-
|
|
30575
|
+
const ref = useRef41(null);
|
|
30576
|
+
const ticketRef = useRef41(ticket);
|
|
30577
|
+
useEffect43(() => {
|
|
30056
30578
|
ticketRef.current = ticket;
|
|
30057
30579
|
});
|
|
30058
|
-
const [isDragging, setIsDragging] =
|
|
30580
|
+
const [isDragging, setIsDragging] = useState76(false);
|
|
30059
30581
|
const isLanding = useIsLanding(ticket.id);
|
|
30060
30582
|
const aim = useDropAim();
|
|
30061
30583
|
const closestEdge = aim && aim.columnId === columnId && aim.ticketId === ticket.id ? aim.edge : null;
|
|
@@ -30067,7 +30589,7 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
30067
30589
|
lift(ticket.id);
|
|
30068
30590
|
};
|
|
30069
30591
|
const keyShortcuts = dragDisabled || !lift ? void 0 : "Space";
|
|
30070
|
-
|
|
30592
|
+
useEffect43(() => {
|
|
30071
30593
|
const element = ref.current;
|
|
30072
30594
|
if (!element || dragDisabled) return void 0;
|
|
30073
30595
|
const identity = { type: "ticket", ticketId: ticket.id, columnId };
|
|
@@ -30149,7 +30671,7 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
30149
30671
|
[isDragging]
|
|
30150
30672
|
);
|
|
30151
30673
|
const body = useMemo22(
|
|
30152
|
-
() => /* @__PURE__ */
|
|
30674
|
+
() => /* @__PURE__ */ jsx268(
|
|
30153
30675
|
TicketCardBody,
|
|
30154
30676
|
{
|
|
30155
30677
|
ticket,
|
|
@@ -30178,7 +30700,7 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
30178
30700
|
} else if (isLanding) {
|
|
30179
30701
|
style.visibility = "hidden";
|
|
30180
30702
|
}
|
|
30181
|
-
const insertionLine = closestEdge ? /* @__PURE__ */
|
|
30703
|
+
const insertionLine = closestEdge ? /* @__PURE__ */ jsx268(
|
|
30182
30704
|
"span",
|
|
30183
30705
|
{
|
|
30184
30706
|
"aria-hidden": true,
|
|
@@ -30197,9 +30719,9 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
30197
30719
|
}
|
|
30198
30720
|
) : null;
|
|
30199
30721
|
if (href) {
|
|
30200
|
-
return /* @__PURE__ */
|
|
30722
|
+
return /* @__PURE__ */ jsxs215("div", { ...outerProps, children: [
|
|
30201
30723
|
insertionLine,
|
|
30202
|
-
/* @__PURE__ */
|
|
30724
|
+
/* @__PURE__ */ jsx268(
|
|
30203
30725
|
next_link_default,
|
|
30204
30726
|
{
|
|
30205
30727
|
href,
|
|
@@ -30212,12 +30734,12 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
30212
30734
|
className: "absolute inset-0 z-0 rounded-md focus-visible:outline-none"
|
|
30213
30735
|
}
|
|
30214
30736
|
),
|
|
30215
|
-
/* @__PURE__ */
|
|
30737
|
+
/* @__PURE__ */ jsx268("div", { className: cn("pointer-events-none", innerWrapperClass), children: body })
|
|
30216
30738
|
] });
|
|
30217
30739
|
}
|
|
30218
|
-
return /* @__PURE__ */
|
|
30740
|
+
return /* @__PURE__ */ jsxs215("div", { ...outerProps, children: [
|
|
30219
30741
|
insertionLine,
|
|
30220
|
-
/* @__PURE__ */
|
|
30742
|
+
/* @__PURE__ */ jsx268(
|
|
30221
30743
|
"button",
|
|
30222
30744
|
{
|
|
30223
30745
|
type: "button",
|
|
@@ -30228,23 +30750,23 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
30228
30750
|
className: "absolute inset-0 z-0 cursor-pointer rounded-md focus-visible:outline-none"
|
|
30229
30751
|
}
|
|
30230
30752
|
),
|
|
30231
|
-
/* @__PURE__ */
|
|
30753
|
+
/* @__PURE__ */ jsx268("div", { className: cn("pointer-events-none", innerWrapperClass), children: body })
|
|
30232
30754
|
] });
|
|
30233
30755
|
});
|
|
30234
30756
|
function TicketTagRow({ tags }) {
|
|
30235
30757
|
const visible = tags.slice(0, MAX_VISIBLE_TAGS);
|
|
30236
30758
|
const hidden = tags.length - visible.length;
|
|
30237
|
-
return /* @__PURE__ */
|
|
30238
|
-
visible.map((tag) => /* @__PURE__ */
|
|
30239
|
-
hidden > 0 && /* @__PURE__ */
|
|
30759
|
+
return /* @__PURE__ */ jsxs215("div", { className: "flex h-8 flex-wrap items-start gap-[var(--spacing-system-xxs)] overflow-clip", children: [
|
|
30760
|
+
visible.map((tag) => /* @__PURE__ */ jsx268(Tag, { variant: "outline", label: tag }, tag)),
|
|
30761
|
+
hidden > 0 && /* @__PURE__ */ jsx268(Tag, { variant: "outline", label: `+${hidden}` })
|
|
30240
30762
|
] });
|
|
30241
30763
|
}
|
|
30242
30764
|
|
|
30243
30765
|
// src/components/features/board/ticket-card-skeleton.tsx
|
|
30244
|
-
import { forwardRef as
|
|
30245
|
-
import { jsx as
|
|
30246
|
-
var TicketCardSkeleton =
|
|
30247
|
-
({ className, ...props }, ref) => /* @__PURE__ */
|
|
30766
|
+
import { forwardRef as forwardRef32 } from "react";
|
|
30767
|
+
import { jsx as jsx269, jsxs as jsxs216 } from "react/jsx-runtime";
|
|
30768
|
+
var TicketCardSkeleton = forwardRef32(
|
|
30769
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxs216(
|
|
30248
30770
|
"div",
|
|
30249
30771
|
{
|
|
30250
30772
|
ref,
|
|
@@ -30254,22 +30776,22 @@ var TicketCardSkeleton = forwardRef31(
|
|
|
30254
30776
|
),
|
|
30255
30777
|
...props,
|
|
30256
30778
|
children: [
|
|
30257
|
-
/* @__PURE__ */
|
|
30258
|
-
/* @__PURE__ */
|
|
30259
|
-
/* @__PURE__ */
|
|
30260
|
-
/* @__PURE__ */
|
|
30261
|
-
/* @__PURE__ */
|
|
30262
|
-
/* @__PURE__ */
|
|
30779
|
+
/* @__PURE__ */ jsxs216("div", { className: "flex items-start gap-[var(--spacing-system-sf)]", children: [
|
|
30780
|
+
/* @__PURE__ */ jsxs216("div", { className: "flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-xxs)]", children: [
|
|
30781
|
+
/* @__PURE__ */ jsx269("div", { className: "flex items-center text-h3", children: /* @__PURE__ */ jsx269(Skeleton, { className: "h-4 w-3/4" }) }),
|
|
30782
|
+
/* @__PURE__ */ jsxs216("div", { className: "flex items-center gap-[var(--spacing-system-xxs)] text-h6", children: [
|
|
30783
|
+
/* @__PURE__ */ jsx269(Skeleton, { className: "size-4 shrink-0 rounded-sm" }),
|
|
30784
|
+
/* @__PURE__ */ jsx269(Skeleton, { className: "h-3 w-1/2" })
|
|
30263
30785
|
] })
|
|
30264
30786
|
] }),
|
|
30265
|
-
/* @__PURE__ */
|
|
30266
|
-
/* @__PURE__ */
|
|
30267
|
-
/* @__PURE__ */
|
|
30787
|
+
/* @__PURE__ */ jsxs216("div", { className: "flex shrink-0 items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
30788
|
+
/* @__PURE__ */ jsx269(Skeleton, { className: "size-4 rounded-sm" }),
|
|
30789
|
+
/* @__PURE__ */ jsx269(Skeleton, { className: "size-8 rounded-full" })
|
|
30268
30790
|
] })
|
|
30269
30791
|
] }),
|
|
30270
|
-
/* @__PURE__ */
|
|
30271
|
-
/* @__PURE__ */
|
|
30272
|
-
/* @__PURE__ */
|
|
30792
|
+
/* @__PURE__ */ jsxs216("div", { className: "flex h-8 items-center gap-[var(--spacing-system-xxs)]", children: [
|
|
30793
|
+
/* @__PURE__ */ jsx269(Skeleton, { className: "h-8 w-16 rounded-md" }),
|
|
30794
|
+
/* @__PURE__ */ jsx269(Skeleton, { className: "h-8 w-12 rounded-md" })
|
|
30273
30795
|
] })
|
|
30274
30796
|
]
|
|
30275
30797
|
}
|
|
@@ -30278,7 +30800,7 @@ var TicketCardSkeleton = forwardRef31(
|
|
|
30278
30800
|
TicketCardSkeleton.displayName = "TicketCardSkeleton";
|
|
30279
30801
|
|
|
30280
30802
|
// src/components/features/board/board-column.tsx
|
|
30281
|
-
import { Fragment as Fragment45, jsx as
|
|
30803
|
+
import { Fragment as Fragment45, jsx as jsx270, jsxs as jsxs217 } from "react/jsx-runtime";
|
|
30282
30804
|
var BoardColumn = memo6(function BoardColumnImpl({
|
|
30283
30805
|
column,
|
|
30284
30806
|
collapsed = false,
|
|
@@ -30296,9 +30818,9 @@ var BoardColumn = memo6(function BoardColumnImpl({
|
|
|
30296
30818
|
touchMode = false,
|
|
30297
30819
|
className
|
|
30298
30820
|
}) {
|
|
30299
|
-
const laneRef =
|
|
30300
|
-
const [isOver, setIsOver] =
|
|
30301
|
-
|
|
30821
|
+
const laneRef = useRef42(null);
|
|
30822
|
+
const [isOver, setIsOver] = useState77(false);
|
|
30823
|
+
useEffect44(() => {
|
|
30302
30824
|
const element = laneRef.current;
|
|
30303
30825
|
if (!element || collapsed || touchMode || column.dropDisabled) return void 0;
|
|
30304
30826
|
return dropTargetForElements2({
|
|
@@ -30330,7 +30852,7 @@ var BoardColumn = memo6(function BoardColumnImpl({
|
|
|
30330
30852
|
});
|
|
30331
30853
|
}, [column.id, column.dropDisabled, column.allowedFromColumns, collapsed, touchMode]);
|
|
30332
30854
|
const handleToggleCollapse = useCallback26(() => onToggleCollapse?.(column.id), [onToggleCollapse, column.id]);
|
|
30333
|
-
return /* @__PURE__ */
|
|
30855
|
+
return /* @__PURE__ */ jsxs217(
|
|
30334
30856
|
"div",
|
|
30335
30857
|
{
|
|
30336
30858
|
ref: laneRef,
|
|
@@ -30346,7 +30868,7 @@ var BoardColumn = memo6(function BoardColumnImpl({
|
|
|
30346
30868
|
),
|
|
30347
30869
|
style: column.system ? void 0 : { backgroundColor: tintOnDark(column.color) },
|
|
30348
30870
|
children: [
|
|
30349
|
-
/* @__PURE__ */
|
|
30871
|
+
/* @__PURE__ */ jsx270(
|
|
30350
30872
|
BoardColumnHeader,
|
|
30351
30873
|
{
|
|
30352
30874
|
column,
|
|
@@ -30356,9 +30878,9 @@ var BoardColumn = memo6(function BoardColumnImpl({
|
|
|
30356
30878
|
onArchive: !collapsed && column.archivable && onArchive ? () => onArchive(column.id) : void 0
|
|
30357
30879
|
}
|
|
30358
30880
|
),
|
|
30359
|
-
!collapsed && /* @__PURE__ */
|
|
30360
|
-
/* @__PURE__ */
|
|
30361
|
-
/* @__PURE__ */
|
|
30881
|
+
!collapsed && /* @__PURE__ */ jsxs217(Fragment45, { children: [
|
|
30882
|
+
/* @__PURE__ */ jsx270("div", { "aria-hidden": true, className: "-mx-[var(--spacing-system-sf)] h-px shrink-0 bg-ods-border" }),
|
|
30883
|
+
/* @__PURE__ */ jsx270(
|
|
30362
30884
|
ColumnBody,
|
|
30363
30885
|
{
|
|
30364
30886
|
column,
|
|
@@ -30386,21 +30908,21 @@ function ColumnBody({
|
|
|
30386
30908
|
loadMoreRootMargin,
|
|
30387
30909
|
touchMode
|
|
30388
30910
|
}) {
|
|
30389
|
-
const scrollRef =
|
|
30390
|
-
const sentinelRef =
|
|
30911
|
+
const scrollRef = useRef42(null);
|
|
30912
|
+
const sentinelRef = useRef42(null);
|
|
30391
30913
|
useLaneScrollAnchor(scrollRef, column.tickets);
|
|
30392
|
-
|
|
30914
|
+
useEffect44(() => {
|
|
30393
30915
|
const element = scrollRef.current;
|
|
30394
30916
|
if (!element || touchMode) return void 0;
|
|
30395
30917
|
return autoScrollColumn(element);
|
|
30396
30918
|
}, [touchMode]);
|
|
30397
|
-
const loadMoreRef =
|
|
30398
|
-
const columnIdRef =
|
|
30399
|
-
|
|
30919
|
+
const loadMoreRef = useRef42(onLoadMore);
|
|
30920
|
+
const columnIdRef = useRef42(column.id);
|
|
30921
|
+
useEffect44(() => {
|
|
30400
30922
|
loadMoreRef.current = onLoadMore;
|
|
30401
30923
|
columnIdRef.current = column.id;
|
|
30402
30924
|
});
|
|
30403
|
-
|
|
30925
|
+
useEffect44(() => {
|
|
30404
30926
|
if (!column.hasMore || column.isLoadingMore) return void 0;
|
|
30405
30927
|
const sentinel = sentinelRef.current;
|
|
30406
30928
|
const root = scrollRef.current;
|
|
@@ -30421,13 +30943,13 @@ function ColumnBody({
|
|
|
30421
30943
|
// wholesale. The browser's own anchoring is unusable here — it silently
|
|
30422
30944
|
// skips transformed elements, so it works between drags and does nothing
|
|
30423
30945
|
// during one — and leaving both on double-corrects every insertion.
|
|
30424
|
-
/* @__PURE__ */
|
|
30946
|
+
/* @__PURE__ */ jsxs217(
|
|
30425
30947
|
"div",
|
|
30426
30948
|
{
|
|
30427
30949
|
ref: scrollRef,
|
|
30428
30950
|
className: "flex min-h-0 flex-1 flex-col gap-[var(--spacing-system-xs)] overflow-y-auto py-[5px] [overflow-anchor:none]",
|
|
30429
30951
|
children: [
|
|
30430
|
-
column.isLoading ? /* @__PURE__ */
|
|
30952
|
+
column.isLoading ? /* @__PURE__ */ jsx270(SkeletonStack, {}) : column.tickets.length === 0 ? /* @__PURE__ */ jsx270(EmptyState2, { columnId: column.id, touchMode }) : column.tickets.map((t) => /* @__PURE__ */ jsx270(
|
|
30431
30953
|
TicketCard,
|
|
30432
30954
|
{
|
|
30433
30955
|
ticket: t,
|
|
@@ -30443,26 +30965,26 @@ function ColumnBody({
|
|
|
30443
30965
|
},
|
|
30444
30966
|
t.id
|
|
30445
30967
|
)),
|
|
30446
|
-
column.isLoadingMore && !column.isLoading && /* @__PURE__ */
|
|
30447
|
-
column.hasMore && /* @__PURE__ */
|
|
30968
|
+
column.isLoadingMore && !column.isLoading && /* @__PURE__ */ jsx270(TicketCardSkeleton, {}),
|
|
30969
|
+
column.hasMore && /* @__PURE__ */ jsx270("div", { ref: sentinelRef, "aria-hidden": true, className: "h-1 shrink-0" })
|
|
30448
30970
|
]
|
|
30449
30971
|
}
|
|
30450
30972
|
)
|
|
30451
30973
|
);
|
|
30452
30974
|
}
|
|
30453
30975
|
function SkeletonStack({ count = 4 }) {
|
|
30454
|
-
return /* @__PURE__ */
|
|
30976
|
+
return /* @__PURE__ */ jsx270(Fragment45, { children: Array.from({ length: count }, (_, i) => /* @__PURE__ */ jsx270(TicketCardSkeleton, {}, `skeleton-${i}`)) });
|
|
30455
30977
|
}
|
|
30456
30978
|
function EmptyState2({ columnId, touchMode }) {
|
|
30457
30979
|
const aim = useDropAim();
|
|
30458
30980
|
if (aim && aim.columnId === columnId) {
|
|
30459
|
-
return /* @__PURE__ */
|
|
30981
|
+
return /* @__PURE__ */ jsx270("div", { "aria-hidden": true, ...{ [DROP_LINE_ATTRIBUTE]: "" }, className: "h-0.5 shrink-0 rounded-full bg-ods-accent" });
|
|
30460
30982
|
}
|
|
30461
|
-
return /* @__PURE__ */
|
|
30462
|
-
/* @__PURE__ */
|
|
30463
|
-
/* @__PURE__ */
|
|
30464
|
-
/* @__PURE__ */
|
|
30465
|
-
/* @__PURE__ */
|
|
30983
|
+
return /* @__PURE__ */ jsxs217("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: [
|
|
30984
|
+
/* @__PURE__ */ jsx270(TagIcon, { className: "h-6 w-6 shrink-0" }),
|
|
30985
|
+
/* @__PURE__ */ jsxs217("div", { className: "flex w-full flex-col", children: [
|
|
30986
|
+
/* @__PURE__ */ jsx270("p", { className: "text-h4", children: "No tickets here" }),
|
|
30987
|
+
/* @__PURE__ */ jsx270("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" })
|
|
30466
30988
|
] })
|
|
30467
30989
|
] });
|
|
30468
30990
|
}
|
|
@@ -30476,14 +30998,14 @@ function resolveBoardDrop(columns, { source, target }) {
|
|
|
30476
30998
|
}
|
|
30477
30999
|
|
|
30478
31000
|
// src/components/features/board/use-board-collapse.ts
|
|
30479
|
-
import { useCallback as useCallback27, useEffect as
|
|
31001
|
+
import { useCallback as useCallback27, useEffect as useEffect45, useRef as useRef43, useState as useState78 } from "react";
|
|
30480
31002
|
function useBoardCollapse(storageKey) {
|
|
30481
31003
|
const [persisted, setPersisted] = useLocalStorage(storageKey ?? "__board_collapse_unused__", {});
|
|
30482
|
-
const [memory, setMemory] =
|
|
31004
|
+
const [memory, setMemory] = useState78({});
|
|
30483
31005
|
const collapsed = storageKey ? persisted : memory;
|
|
30484
31006
|
const setMap = storageKey ? setPersisted : setMemory;
|
|
30485
|
-
const setMapRef =
|
|
30486
|
-
|
|
31007
|
+
const setMapRef = useRef43(setMap);
|
|
31008
|
+
useEffect45(() => {
|
|
30487
31009
|
setMapRef.current = setMap;
|
|
30488
31010
|
});
|
|
30489
31011
|
const toggle = useCallback27((columnId) => {
|
|
@@ -30496,7 +31018,7 @@ function useBoardCollapse(storageKey) {
|
|
|
30496
31018
|
}
|
|
30497
31019
|
|
|
30498
31020
|
// src/components/features/board/touch-board.tsx
|
|
30499
|
-
import { jsx as
|
|
31021
|
+
import { jsx as jsx271 } from "react/jsx-runtime";
|
|
30500
31022
|
function TouchBoard({
|
|
30501
31023
|
columns,
|
|
30502
31024
|
onLoadMore,
|
|
@@ -30511,11 +31033,11 @@ function TouchBoard({
|
|
|
30511
31033
|
className
|
|
30512
31034
|
}) {
|
|
30513
31035
|
const { collapsed, toggle } = useBoardCollapse(collapseStorageKey);
|
|
30514
|
-
return /* @__PURE__ */
|
|
31036
|
+
return /* @__PURE__ */ jsx271("div", { className: cn("flex h-full min-h-0 flex-col", className), children: /* @__PURE__ */ jsx271(
|
|
30515
31037
|
"div",
|
|
30516
31038
|
{
|
|
30517
31039
|
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",
|
|
30518
|
-
children: columns.map((column) => /* @__PURE__ */
|
|
31040
|
+
children: columns.map((column) => /* @__PURE__ */ jsx271(
|
|
30519
31041
|
BoardColumn,
|
|
30520
31042
|
{
|
|
30521
31043
|
column,
|
|
@@ -30542,7 +31064,7 @@ function TouchBoard({
|
|
|
30542
31064
|
}
|
|
30543
31065
|
|
|
30544
31066
|
// src/components/features/board/board.tsx
|
|
30545
|
-
import { jsx as
|
|
31067
|
+
import { jsx as jsx272, jsxs as jsxs218 } from "react/jsx-runtime";
|
|
30546
31068
|
var PENDING_MOVE_TIMEOUT_MS = 2e3;
|
|
30547
31069
|
var DROP_MS = 160;
|
|
30548
31070
|
var DROP_EASING = "cubic-bezier(0.2, 0, 0, 1)";
|
|
@@ -30551,9 +31073,9 @@ var ARROW_KEYS = ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"];
|
|
|
30551
31073
|
function Board(props) {
|
|
30552
31074
|
const dragAndDropEnabled = useMediaQuery(DRAG_AND_DROP_MEDIA_QUERY);
|
|
30553
31075
|
if (dragAndDropEnabled === void 0) {
|
|
30554
|
-
return /* @__PURE__ */
|
|
31076
|
+
return /* @__PURE__ */ jsx272("div", { "aria-hidden": true, className: cn("flex h-full min-h-0 flex-col", props.className) });
|
|
30555
31077
|
}
|
|
30556
|
-
return dragAndDropEnabled ? /* @__PURE__ */
|
|
31078
|
+
return dragAndDropEnabled ? /* @__PURE__ */ jsx272(DragBoard, { ...props }) : /* @__PURE__ */ jsx272(TouchBoard, { ...props });
|
|
30557
31079
|
}
|
|
30558
31080
|
function DragBoard({
|
|
30559
31081
|
columns,
|
|
@@ -30583,10 +31105,10 @@ function DragBoard({
|
|
|
30583
31105
|
onThumbPointerUp,
|
|
30584
31106
|
onThumbPointerCancel
|
|
30585
31107
|
} = useHorizontalScrollbar();
|
|
30586
|
-
const columnsRef =
|
|
30587
|
-
const onChangeRef =
|
|
30588
|
-
const boardRef =
|
|
30589
|
-
const scrollerRef =
|
|
31108
|
+
const columnsRef = useRef44(columns);
|
|
31109
|
+
const onChangeRef = useRef44(onChange);
|
|
31110
|
+
const boardRef = useRef44(null);
|
|
31111
|
+
const scrollerRef = useRef44(null);
|
|
30590
31112
|
const setScroller = useCallback28(
|
|
30591
31113
|
(node) => {
|
|
30592
31114
|
scrollerRef.current = node;
|
|
@@ -30594,22 +31116,22 @@ function DragBoard({
|
|
|
30594
31116
|
},
|
|
30595
31117
|
[scrollRef]
|
|
30596
31118
|
);
|
|
30597
|
-
const [aim, setAim] =
|
|
30598
|
-
const [lifted, setLifted] =
|
|
30599
|
-
const [announcement, setAnnouncement] =
|
|
30600
|
-
const dragGeometry =
|
|
30601
|
-
const [landingPreview, setLandingPreview] =
|
|
30602
|
-
const previewRef =
|
|
30603
|
-
const [reportedMove, setPendingMove] =
|
|
31119
|
+
const [aim, setAim] = useState79(null);
|
|
31120
|
+
const [lifted, setLifted] = useState79(null);
|
|
31121
|
+
const [announcement, setAnnouncement] = useState79("");
|
|
31122
|
+
const dragGeometry = useRef44(null);
|
|
31123
|
+
const [landingPreview, setLandingPreview] = useState79(null);
|
|
31124
|
+
const previewRef = useRef44(null);
|
|
31125
|
+
const [reportedMove, setPendingMove] = useState79(null);
|
|
30604
31126
|
const pendingMove = reportedMove && !hasMoveSettled(columns, reportedMove) ? reportedMove : null;
|
|
30605
31127
|
const view = useMemo23(() => pendingMove ? applyPendingMove(columns, pendingMove) : columns, [columns, pendingMove]);
|
|
30606
|
-
|
|
31128
|
+
useEffect46(() => {
|
|
30607
31129
|
columnsRef.current = view;
|
|
30608
31130
|
onChangeRef.current = onChange;
|
|
30609
31131
|
});
|
|
30610
|
-
const [landing, setLanding] =
|
|
30611
|
-
const landingTimer =
|
|
30612
|
-
const pointRef =
|
|
31132
|
+
const [landing, setLanding] = useState79(null);
|
|
31133
|
+
const landingTimer = useRef44(null);
|
|
31134
|
+
const pointRef = useRef44({ x: 0, y: 0 });
|
|
30613
31135
|
const laneLabel = useCallback28((columnId) => view.find((c) => c.id === columnId)?.label ?? columnId, [view]);
|
|
30614
31136
|
const acceptsLifted = useCallback28(
|
|
30615
31137
|
(fromColumnId) => (column) => {
|
|
@@ -30660,7 +31182,7 @@ function DragBoard({
|
|
|
30660
31182
|
},
|
|
30661
31183
|
[lifted, view, acceptsLifted, laneLabel]
|
|
30662
31184
|
);
|
|
30663
|
-
|
|
31185
|
+
useEffect46(() => {
|
|
30664
31186
|
if (!lifted) return void 0;
|
|
30665
31187
|
const onKeyDown = (event) => {
|
|
30666
31188
|
if (event.key === "Escape") {
|
|
@@ -30678,7 +31200,7 @@ function DragBoard({
|
|
|
30678
31200
|
window.addEventListener("keydown", onKeyDown);
|
|
30679
31201
|
return () => window.removeEventListener("keydown", onKeyDown);
|
|
30680
31202
|
}, [lifted, drop, walk]);
|
|
30681
|
-
|
|
31203
|
+
useEffect46(() => {
|
|
30682
31204
|
if (!lifted) return;
|
|
30683
31205
|
boardRef.current?.querySelector(`[${DROP_LINE_ATTRIBUTE}]`)?.scrollIntoView({ block: "nearest", inline: "nearest" });
|
|
30684
31206
|
}, [lifted]);
|
|
@@ -30689,12 +31211,12 @@ function DragBoard({
|
|
|
30689
31211
|
const anchor = aimToChange(view, lifted.ticketId, lifted.aim) ? aimAnchor(view, lifted.ticketId, lifted.aim) : { ticketId: null, edge: null };
|
|
30690
31212
|
return { columnId: lifted.aim.columnId, ...anchor, ticket };
|
|
30691
31213
|
}, [lifted, view]);
|
|
30692
|
-
|
|
31214
|
+
useEffect46(() => {
|
|
30693
31215
|
if (!pendingMove) return void 0;
|
|
30694
31216
|
const timer = setTimeout(() => setPendingMove(null), PENDING_MOVE_TIMEOUT_MS);
|
|
30695
31217
|
return () => clearTimeout(timer);
|
|
30696
31218
|
}, [pendingMove]);
|
|
30697
|
-
|
|
31219
|
+
useEffect46(() => {
|
|
30698
31220
|
const scroller = scrollerRef.current;
|
|
30699
31221
|
const readAim = (source, target) => {
|
|
30700
31222
|
const ticket = source.data.ticket;
|
|
@@ -30806,7 +31328,7 @@ function DragBoard({
|
|
|
30806
31328
|
};
|
|
30807
31329
|
}, [landing, landingPreview]);
|
|
30808
31330
|
const preview = landingPreview && createPortal(
|
|
30809
|
-
/* @__PURE__ */
|
|
31331
|
+
/* @__PURE__ */ jsx272(
|
|
30810
31332
|
"div",
|
|
30811
31333
|
{
|
|
30812
31334
|
ref: previewRef,
|
|
@@ -30819,7 +31341,7 @@ function DragBoard({
|
|
|
30819
31341
|
// translate in pointer coordinates and nothing else.
|
|
30820
31342
|
margin: `${-landingPreview.grabY}px 0 0 ${-landingPreview.grabX}px`
|
|
30821
31343
|
},
|
|
30822
|
-
children: /* @__PURE__ */
|
|
31344
|
+
children: /* @__PURE__ */ jsx272(
|
|
30823
31345
|
TicketCardView,
|
|
30824
31346
|
{
|
|
30825
31347
|
ticket: landingPreview.ticket,
|
|
@@ -30832,10 +31354,10 @@ function DragBoard({
|
|
|
30832
31354
|
),
|
|
30833
31355
|
document.body
|
|
30834
31356
|
);
|
|
30835
|
-
return /* @__PURE__ */
|
|
31357
|
+
return /* @__PURE__ */ jsx272(LandingCardContext.Provider, { value: landing, children: /* @__PURE__ */ jsx272(DropAimContext.Provider, { value: aim ?? keyboardAim, children: /* @__PURE__ */ jsxs218(BoardLiftContext.Provider, { value: lift, children: [
|
|
30836
31358
|
preview,
|
|
30837
|
-
/* @__PURE__ */
|
|
30838
|
-
/* @__PURE__ */
|
|
31359
|
+
/* @__PURE__ */ jsxs218("div", { ref: boardRef, className: cn("flex h-full flex-col", className), children: [
|
|
31360
|
+
/* @__PURE__ */ jsx272(
|
|
30839
31361
|
"div",
|
|
30840
31362
|
{
|
|
30841
31363
|
ref: setScroller,
|
|
@@ -30847,9 +31369,9 @@ function DragBoard({
|
|
|
30847
31369
|
const joinLeft = !!(column.system && prev?.system);
|
|
30848
31370
|
const joinRight = !!(column.system && next?.system);
|
|
30849
31371
|
const showGap = i > 0 && !joinLeft;
|
|
30850
|
-
return /* @__PURE__ */
|
|
30851
|
-
showGap && /* @__PURE__ */
|
|
30852
|
-
/* @__PURE__ */
|
|
31372
|
+
return /* @__PURE__ */ jsxs218(Fragment46, { children: [
|
|
31373
|
+
showGap && /* @__PURE__ */ jsx272("div", { "aria-hidden": true, className: "w-[var(--spacing-system-mf)] shrink-0" }),
|
|
31374
|
+
/* @__PURE__ */ jsx272(
|
|
30853
31375
|
BoardColumn,
|
|
30854
31376
|
{
|
|
30855
31377
|
column,
|
|
@@ -30871,15 +31393,15 @@ function DragBoard({
|
|
|
30871
31393
|
})
|
|
30872
31394
|
}
|
|
30873
31395
|
),
|
|
30874
|
-
/* @__PURE__ */
|
|
30875
|
-
thumbRatio > 0 && /* @__PURE__ */
|
|
31396
|
+
/* @__PURE__ */ jsx272("p", { "aria-live": "polite", className: "sr-only", children: announcement }),
|
|
31397
|
+
thumbRatio > 0 && /* @__PURE__ */ jsx272(
|
|
30876
31398
|
"div",
|
|
30877
31399
|
{
|
|
30878
31400
|
ref: trackRef,
|
|
30879
31401
|
onClick: onTrackClick,
|
|
30880
31402
|
onWheel: onTrackWheel,
|
|
30881
31403
|
className: "relative mt-[var(--spacing-system-mf)] h-2 shrink-0 cursor-pointer rounded-full bg-ods-border",
|
|
30882
|
-
children: /* @__PURE__ */
|
|
31404
|
+
children: /* @__PURE__ */ jsx272(
|
|
30883
31405
|
"div",
|
|
30884
31406
|
{
|
|
30885
31407
|
ref: thumbRef,
|
|
@@ -30994,13 +31516,13 @@ import {
|
|
|
30994
31516
|
createContext as createContext13,
|
|
30995
31517
|
useCallback as useCallback29,
|
|
30996
31518
|
useContext as useContext13,
|
|
30997
|
-
useEffect as
|
|
31519
|
+
useEffect as useEffect47,
|
|
30998
31520
|
useId as useId5,
|
|
30999
31521
|
useMemo as useMemo24,
|
|
31000
|
-
useRef as
|
|
31001
|
-
useState as
|
|
31522
|
+
useRef as useRef45,
|
|
31523
|
+
useState as useState80
|
|
31002
31524
|
} from "react";
|
|
31003
|
-
import { jsx as
|
|
31525
|
+
import { jsx as jsx273, jsxs as jsxs219 } from "react/jsx-runtime";
|
|
31004
31526
|
var SORTABLE_ITEM_ATTRIBUTE = "data-sortable-item";
|
|
31005
31527
|
var SHIFT_MS = 200;
|
|
31006
31528
|
var DROP_MS2 = 150;
|
|
@@ -31012,19 +31534,19 @@ function useSortableListContext() {
|
|
|
31012
31534
|
return context;
|
|
31013
31535
|
}
|
|
31014
31536
|
function SortableList({ onReorder, getItemLabel, disabled = false, className, children }) {
|
|
31015
|
-
const listRef =
|
|
31537
|
+
const listRef = useRef45(null);
|
|
31016
31538
|
const dragAndDropEnabled = useDragAndDropEnabled();
|
|
31017
31539
|
const dragType = useId5();
|
|
31018
|
-
const [announcement, setAnnouncement] =
|
|
31019
|
-
const onReorderRef =
|
|
31020
|
-
const getItemLabelRef =
|
|
31021
|
-
|
|
31540
|
+
const [announcement, setAnnouncement] = useState80("");
|
|
31541
|
+
const onReorderRef = useRef45(onReorder);
|
|
31542
|
+
const getItemLabelRef = useRef45(getItemLabel);
|
|
31543
|
+
useEffect47(() => {
|
|
31022
31544
|
onReorderRef.current = onReorder;
|
|
31023
31545
|
getItemLabelRef.current = getItemLabel;
|
|
31024
31546
|
});
|
|
31025
|
-
const flipFrom =
|
|
31026
|
-
const [flipTick, setFlipTick] =
|
|
31027
|
-
const flipTimer =
|
|
31547
|
+
const flipFrom = useRef45(null);
|
|
31548
|
+
const [flipTick, setFlipTick] = useState80(0);
|
|
31549
|
+
const flipTimer = useRef45(null);
|
|
31028
31550
|
const readItems = useCallback29(
|
|
31029
31551
|
() => [...listRef.current?.querySelectorAll(`[${SORTABLE_ITEM_ATTRIBUTE}]`) ?? []],
|
|
31030
31552
|
[]
|
|
@@ -31038,7 +31560,7 @@ function SortableList({ onReorder, getItemLabel, disabled = false, className, ch
|
|
|
31038
31560
|
},
|
|
31039
31561
|
[readItems]
|
|
31040
31562
|
);
|
|
31041
|
-
|
|
31563
|
+
useEffect47(() => {
|
|
31042
31564
|
const list = listRef.current;
|
|
31043
31565
|
if (!list || disabled || !dragAndDropEnabled) return void 0;
|
|
31044
31566
|
let drag = null;
|
|
@@ -31129,7 +31651,7 @@ function SortableList({ onReorder, getItemLabel, disabled = false, className, ch
|
|
|
31129
31651
|
for (const item of moving) item.style.transition = "";
|
|
31130
31652
|
}, DROP_MS2);
|
|
31131
31653
|
}, [flipTick, readItems]);
|
|
31132
|
-
|
|
31654
|
+
useEffect47(
|
|
31133
31655
|
() => () => {
|
|
31134
31656
|
if (flipTimer.current) clearTimeout(flipTimer.current);
|
|
31135
31657
|
},
|
|
@@ -31139,19 +31661,19 @@ function SortableList({ onReorder, getItemLabel, disabled = false, className, ch
|
|
|
31139
31661
|
() => ({ dragType, disabled, dragAndDropEnabled, reorder, readItems }),
|
|
31140
31662
|
[dragType, disabled, dragAndDropEnabled, reorder, readItems]
|
|
31141
31663
|
);
|
|
31142
|
-
return /* @__PURE__ */
|
|
31664
|
+
return /* @__PURE__ */ jsx273(SortableListContext.Provider, { value: context, children: /* @__PURE__ */ jsxs219("div", { ref: listRef, className, children: [
|
|
31143
31665
|
children,
|
|
31144
|
-
/* @__PURE__ */
|
|
31666
|
+
/* @__PURE__ */ jsx273("p", { "aria-live": "polite", className: "sr-only", children: announcement })
|
|
31145
31667
|
] }) });
|
|
31146
31668
|
}
|
|
31147
31669
|
|
|
31148
31670
|
// src/components/features/sortable-list/sortable-move-buttons.tsx
|
|
31149
|
-
import { useRef as
|
|
31150
|
-
import { jsx as
|
|
31671
|
+
import { useRef as useRef46 } from "react";
|
|
31672
|
+
import { jsx as jsx274, jsxs as jsxs220 } from "react/jsx-runtime";
|
|
31151
31673
|
function SortableMoveButtons({ index, count, label, className }) {
|
|
31152
31674
|
const { disabled, reorder } = useSortableListContext();
|
|
31153
|
-
const upRef =
|
|
31154
|
-
const downRef =
|
|
31675
|
+
const upRef = useRef46(null);
|
|
31676
|
+
const downRef = useRef46(null);
|
|
31155
31677
|
const move = (step) => {
|
|
31156
31678
|
const to = index + step;
|
|
31157
31679
|
if (to < 0 || to >= count) return;
|
|
@@ -31162,8 +31684,8 @@ function SortableMoveButtons({ index, count, label, className }) {
|
|
|
31162
31684
|
});
|
|
31163
31685
|
};
|
|
31164
31686
|
const subject = label ?? "item";
|
|
31165
|
-
return /* @__PURE__ */
|
|
31166
|
-
/* @__PURE__ */
|
|
31687
|
+
return /* @__PURE__ */ jsxs220("div", { className: cn("inline-flex shrink-0", className), children: [
|
|
31688
|
+
/* @__PURE__ */ jsx274(
|
|
31167
31689
|
Button,
|
|
31168
31690
|
{
|
|
31169
31691
|
ref: upRef,
|
|
@@ -31174,10 +31696,10 @@ function SortableMoveButtons({ index, count, label, className }) {
|
|
|
31174
31696
|
disabled: disabled || index <= 0,
|
|
31175
31697
|
onClick: () => move(-1),
|
|
31176
31698
|
className: "rounded-r-none border-r-0",
|
|
31177
|
-
children: /* @__PURE__ */
|
|
31699
|
+
children: /* @__PURE__ */ jsx274(Arrow01UpIcon, {})
|
|
31178
31700
|
}
|
|
31179
31701
|
),
|
|
31180
|
-
/* @__PURE__ */
|
|
31702
|
+
/* @__PURE__ */ jsx274(
|
|
31181
31703
|
Button,
|
|
31182
31704
|
{
|
|
31183
31705
|
ref: downRef,
|
|
@@ -31188,7 +31710,7 @@ function SortableMoveButtons({ index, count, label, className }) {
|
|
|
31188
31710
|
disabled: disabled || index >= count - 1,
|
|
31189
31711
|
onClick: () => move(1),
|
|
31190
31712
|
className: "rounded-l-none",
|
|
31191
|
-
children: /* @__PURE__ */
|
|
31713
|
+
children: /* @__PURE__ */ jsx274(Arrow01DownIcon, {})
|
|
31192
31714
|
}
|
|
31193
31715
|
)
|
|
31194
31716
|
] });
|
|
@@ -31198,18 +31720,18 @@ function SortableMoveButtons({ index, count, label, className }) {
|
|
|
31198
31720
|
import { combine as combine5 } from "@atlaskit/pragmatic-drag-and-drop/combine";
|
|
31199
31721
|
import { draggable as draggable2 } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
|
|
31200
31722
|
import { disableNativeDragPreview } from "@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview";
|
|
31201
|
-
import { useCallback as useCallback30, useEffect as
|
|
31723
|
+
import { useCallback as useCallback30, useEffect as useEffect48, useState as useState81 } from "react";
|
|
31202
31724
|
function useSortableItem() {
|
|
31203
31725
|
const { dragType, disabled, dragAndDropEnabled, reorder, readItems } = useSortableListContext();
|
|
31204
31726
|
const inert = disabled || !dragAndDropEnabled;
|
|
31205
|
-
const [item, setItem] =
|
|
31206
|
-
const [handle, setHandle] =
|
|
31207
|
-
const [isDragging, setIsDragging] =
|
|
31727
|
+
const [item, setItem] = useState81(null);
|
|
31728
|
+
const [handle, setHandle] = useState81(null);
|
|
31729
|
+
const [isDragging, setIsDragging] = useState81(false);
|
|
31208
31730
|
const itemRef = useCallback30((node) => {
|
|
31209
31731
|
node?.setAttribute(SORTABLE_ITEM_ATTRIBUTE, "");
|
|
31210
31732
|
setItem(node);
|
|
31211
31733
|
}, []);
|
|
31212
|
-
|
|
31734
|
+
useEffect48(() => {
|
|
31213
31735
|
if (!item || !handle || inert) return void 0;
|
|
31214
31736
|
return combine5(
|
|
31215
31737
|
// The drag has to start as a "move", or its first frame is drawn with the
|
|
@@ -31244,7 +31766,7 @@ function useSortableItem() {
|
|
|
31244
31766
|
}
|
|
31245
31767
|
|
|
31246
31768
|
// src/components/features/ticket-status-config-list/ticket-status-config-list.tsx
|
|
31247
|
-
import { jsx as
|
|
31769
|
+
import { jsx as jsx275 } from "react/jsx-runtime";
|
|
31248
31770
|
function TicketStatusConfigList({
|
|
31249
31771
|
items,
|
|
31250
31772
|
onReorder,
|
|
@@ -31252,13 +31774,13 @@ function TicketStatusConfigList({
|
|
|
31252
31774
|
getItemLabel,
|
|
31253
31775
|
className
|
|
31254
31776
|
}) {
|
|
31255
|
-
return /* @__PURE__ */
|
|
31777
|
+
return /* @__PURE__ */ jsx275(
|
|
31256
31778
|
SortableList,
|
|
31257
31779
|
{
|
|
31258
31780
|
onReorder,
|
|
31259
31781
|
getItemLabel,
|
|
31260
31782
|
className: cn("flex w-full flex-col gap-[var(--spacing-system-xs)]", className),
|
|
31261
|
-
children: items.map((item, index) => /* @__PURE__ */
|
|
31783
|
+
children: items.map((item, index) => /* @__PURE__ */ jsx275(SortableRow, { index, count: items.length, label: getItemLabel?.(index), children: (args) => renderRow(item, args) }, item.id))
|
|
31262
31784
|
}
|
|
31263
31785
|
);
|
|
31264
31786
|
}
|
|
@@ -31269,7 +31791,7 @@ function SortableRow({
|
|
|
31269
31791
|
children
|
|
31270
31792
|
}) {
|
|
31271
31793
|
const { itemRef, dragHandleProps, isDragging, dragAndDropEnabled } = useSortableItem();
|
|
31272
|
-
return /* @__PURE__ */
|
|
31794
|
+
return /* @__PURE__ */ jsx275(
|
|
31273
31795
|
"div",
|
|
31274
31796
|
{
|
|
31275
31797
|
ref: itemRef,
|
|
@@ -31277,7 +31799,7 @@ function SortableRow({
|
|
|
31277
31799
|
children: children({
|
|
31278
31800
|
dragHandleProps,
|
|
31279
31801
|
isDragging,
|
|
31280
|
-
moveButtons: dragAndDropEnabled ? null : /* @__PURE__ */
|
|
31802
|
+
moveButtons: dragAndDropEnabled ? null : /* @__PURE__ */ jsx275(SortableMoveButtons, { index, count, label })
|
|
31281
31803
|
})
|
|
31282
31804
|
}
|
|
31283
31805
|
);
|
|
@@ -31847,6 +32369,22 @@ export {
|
|
|
31847
32369
|
UnreadCountBadge,
|
|
31848
32370
|
HeaderButton,
|
|
31849
32371
|
TimeTrackerHeaderButton,
|
|
32372
|
+
RemoteSessionScope,
|
|
32373
|
+
RemoteSessionOrgLogo,
|
|
32374
|
+
RemoteSessionRecordingTag,
|
|
32375
|
+
REMOTE_SESSION_DRAG_HANDLE_CLASS,
|
|
32376
|
+
RemoteSessionDragger,
|
|
32377
|
+
formatRemoteSessionElapsed,
|
|
32378
|
+
useRemoteSessionTimer,
|
|
32379
|
+
RemoteAccessRequestCard,
|
|
32380
|
+
RemoteSessionBlockFrame,
|
|
32381
|
+
RemoteSessionEndButton,
|
|
32382
|
+
RemoteSessionSummary,
|
|
32383
|
+
RemoteSessionMinimizedChip,
|
|
32384
|
+
RemoteSessionChatPanel,
|
|
32385
|
+
RemoteSessionDialog,
|
|
32386
|
+
RemoteSessionBorder,
|
|
32387
|
+
RemoteSessionPill,
|
|
31850
32388
|
BoardColumnHeader,
|
|
31851
32389
|
tintOnDark,
|
|
31852
32390
|
BoardTicketApproval,
|
|
@@ -31932,4 +32470,4 @@ export {
|
|
|
31932
32470
|
LazyMount,
|
|
31933
32471
|
IconTile
|
|
31934
32472
|
};
|
|
31935
|
-
//# sourceMappingURL=chunk-
|
|
32473
|
+
//# sourceMappingURL=chunk-CKO6NKNE.js.map
|