@flamingo-stack/openframe-frontend-core 0.0.701 → 0.0.702-snapshot.20261005191338
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-DJLZXJYB.js → chunk-2NE3DNXY.js} +1 -1
- package/dist/{chunk-V5QNDOEL.js → chunk-53AC23ZN.js} +4 -4
- package/dist/{chunk-BQ34PIFC.cjs → chunk-5VPIC5MD.cjs} +3 -3
- package/dist/{chunk-BRQY2HKD.cjs → chunk-67CXGPTW.cjs} +24 -24
- package/dist/{chunk-BZYMGI4L.js → chunk-7632TNE7.js} +1 -1
- package/dist/{chunk-QPNR4N7N.cjs → chunk-BMJUKS6S.cjs} +20 -20
- package/dist/{chunk-GD4JALTR.js → chunk-BOUPNYUV.js} +2 -2
- package/dist/{chunk-BPS7JQCI.cjs → chunk-BSEIEWM5.cjs} +2 -2
- package/dist/{chunk-6JG75WVO.js → chunk-DAW6TDZB.js} +4 -4
- package/dist/{chunk-B7M6QEEM.js → chunk-ENGBNKUJ.js} +673 -432
- package/dist/{chunk-N7HMUQRV.js → chunk-G55W76S6.js} +1 -1
- package/dist/{chunk-65YVUYWJ.cjs → chunk-GX3OUTFO.cjs} +32 -32
- package/dist/{chunk-S4ADN25W.js → chunk-GZYLZ4MB.js} +2 -2
- package/dist/{chunk-A5ZGKBN2.js → chunk-HHFPQNP3.js} +1 -1
- package/dist/{chunk-RTGPIHVO.cjs → chunk-HY5YL3U5.cjs} +247 -173
- package/dist/{chunk-DG2I57UM.cjs → chunk-HYLIQMZH.cjs} +21 -21
- package/dist/{chunk-N7DPIH57.js → chunk-J4K5JOLI.js} +1 -1
- package/dist/{chunk-4H5Q6MQG.cjs → chunk-KFDP3DUL.cjs} +44 -44
- package/dist/{chunk-QDIX2ZRL.cjs → chunk-MXHJROXJ.cjs} +754 -513
- package/dist/{chunk-CUPJCGLB.js → chunk-NCTYD7HL.js} +2 -2
- package/dist/{chunk-MFORWVGD.js → chunk-NMGX2ZTU.js} +5 -5
- package/dist/{chunk-QZGFJBG5.cjs → chunk-NU724ZVN.cjs} +70 -70
- package/dist/{chunk-ZSPHOHOW.cjs → chunk-NYSYSKSH.cjs} +9 -9
- package/dist/{chunk-PNWIVND4.js → chunk-PJP5SMOU.js} +3 -3
- package/dist/{chunk-6JPQDYYY.js → chunk-QGTDWFT6.js} +419 -345
- package/dist/{chunk-GFXZMFDX.cjs → chunk-RLDAYA2A.cjs} +9 -9
- package/dist/{chunk-2CSYUMNM.cjs → chunk-RTXTGLGB.cjs} +2 -2
- package/dist/{chunk-YBC346FY.cjs → chunk-S6V7A5FS.cjs} +12 -12
- package/dist/{chunk-7ZDTAABP.cjs → chunk-SFGXIFYO.cjs} +7 -7
- package/dist/{chunk-JPVDJB27.js → chunk-SL2FOFT2.js} +4 -4
- package/dist/{chunk-EONNPRAW.js → chunk-UTW4SQDI.js} +2 -2
- package/dist/{chunk-NIT257DV.cjs → chunk-YBGEPKC2.cjs} +4 -4
- package/dist/components/case-studies/index.cjs +14 -14
- package/dist/components/case-studies/index.js +3 -3
- package/dist/components/chat/embeddable-chat.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +2 -2
- package/dist/components/chat/index.js +1 -1
- package/dist/components/contact/index.cjs +4 -4
- package/dist/components/contact/index.js +3 -3
- package/dist/components/docs/index.cjs +7 -7
- package/dist/components/docs/index.js +6 -6
- package/dist/components/embeds/index.cjs +4 -4
- package/dist/components/embeds/index.js +3 -3
- package/dist/components/faq/index.cjs +4 -4
- package/dist/components/faq/index.js +3 -3
- package/dist/components/features/index.cjs +23 -3
- package/dist/components/features/index.js +22 -2
- package/dist/components/features/remote-session/index.d.ts +9 -1
- package/dist/components/features/remote-session/index.d.ts.map +1 -1
- package/dist/components/features/remote-session/remote-session-block.d.ts +4 -2
- package/dist/components/features/remote-session/remote-session-block.d.ts.map +1 -1
- package/dist/components/features/remote-session/remote-session-chat-panel.d.ts +4 -2
- package/dist/components/features/remote-session/remote-session-chat-panel.d.ts.map +1 -1
- package/dist/components/features/remote-session/remote-session-events.d.ts +24 -0
- package/dist/components/features/remote-session/remote-session-events.d.ts.map +1 -0
- package/dist/components/features/remote-session/remote-session-keep-modals.d.ts +41 -0
- package/dist/components/features/remote-session/remote-session-keep-modals.d.ts.map +1 -0
- package/dist/components/features/remote-session/remote-session-parts.d.ts +13 -2
- package/dist/components/features/remote-session/remote-session-parts.d.ts.map +1 -1
- package/dist/components/features/remote-session/remote-session-status.d.ts +34 -0
- package/dist/components/features/remote-session/remote-session-status.d.ts.map +1 -0
- package/dist/components/features/remote-session/remote-session-viewers.d.ts +15 -0
- package/dist/components/features/remote-session/remote-session-viewers.d.ts.map +1 -0
- package/dist/components/features/remote-session/types.d.ts +22 -0
- package/dist/components/features/remote-session/types.d.ts.map +1 -1
- package/dist/components/help-center-pages/index.cjs +71 -71
- package/dist/components/help-center-pages/index.js +14 -14
- package/dist/components/index.cjs +61 -41
- package/dist/components/index.js +33 -13
- package/dist/components/meeting-scheduler/index.cjs +25 -25
- package/dist/components/meeting-scheduler/index.js +2 -2
- package/dist/components/navigation/app-layout-drawer.d.ts.map +1 -1
- package/dist/components/navigation/index.cjs +6 -6
- package/dist/components/navigation/index.js +5 -5
- package/dist/components/onboarding-guides/index.cjs +6 -6
- package/dist/components/onboarding-guides/index.js +5 -5
- package/dist/components/tickets/index.cjs +7 -7
- package/dist/components/tickets/index.js +6 -6
- package/dist/components/ui/drawer.d.ts +7 -3
- package/dist/components/ui/drawer.d.ts.map +1 -1
- package/dist/components/ui/index.cjs +3 -3
- package/dist/components/ui/index.js +2 -2
- package/dist/components/ui/panel-resize-handle.d.ts +25 -0
- package/dist/components/ui/panel-resize-handle.d.ts.map +1 -0
- package/dist/hooks/ui/use-resizable-panel-size.d.ts +46 -0
- package/dist/hooks/ui/use-resizable-panel-size.d.ts.map +1 -0
- package/dist/index.cjs +27 -7
- package/dist/index.js +26 -6
- package/dist/tailwind.config.cjs +7 -1
- package/dist/tailwind.config.js +7 -1
- package/package.json +1 -1
- package/src/components/chat/embeddable-chat.tsx +11 -9
- package/src/components/features/remote-session/index.ts +28 -0
- package/src/components/features/remote-session/remote-session-block.tsx +6 -3
- package/src/components/features/remote-session/remote-session-chat-panel.tsx +11 -7
- package/src/components/features/remote-session/remote-session-events.tsx +93 -0
- package/src/components/features/remote-session/remote-session-keep-modals.tsx +208 -0
- package/src/components/features/remote-session/remote-session-parts.tsx +32 -3
- package/src/components/features/remote-session/remote-session-status.tsx +102 -0
- package/src/components/features/remote-session/remote-session-viewers.tsx +103 -0
- package/src/components/features/remote-session/types.ts +26 -0
- package/src/components/navigation/app-layout-drawer.tsx +14 -237
- package/src/components/ui/drawer.tsx +41 -188
- package/src/components/ui/panel-resize-handle.tsx +184 -0
- package/src/hooks/ui/use-resizable-panel-size.ts +114 -0
- package/tailwind.config.ts +6 -0
|
@@ -60,6 +60,7 @@ import {
|
|
|
60
60
|
ModalTwoColumn,
|
|
61
61
|
NO_BROKEN_LINKS,
|
|
62
62
|
OVERLAY_BACKDROP_CLASS,
|
|
63
|
+
PanelResizeHandle,
|
|
63
64
|
ScrollFadeOverlay,
|
|
64
65
|
ScrollShadow,
|
|
65
66
|
SimpleMarkdownRenderer,
|
|
@@ -94,12 +95,12 @@ import {
|
|
|
94
95
|
useCaptions,
|
|
95
96
|
useCollapsible,
|
|
96
97
|
useIsHydrated,
|
|
98
|
+
useResizablePanelSize,
|
|
97
99
|
useScrollFade
|
|
98
|
-
} from "./chunk-
|
|
100
|
+
} from "./chunk-QGTDWFT6.js";
|
|
99
101
|
import {
|
|
100
102
|
NEAR_VIEWPORT_ROOT_MARGIN,
|
|
101
103
|
ToolIcon,
|
|
102
|
-
clamp,
|
|
103
104
|
createHeadingIdDeduper,
|
|
104
105
|
scanHeadings,
|
|
105
106
|
slugifyHeadingBase,
|
|
@@ -194,6 +195,7 @@ import {
|
|
|
194
195
|
FlaskVialIcon,
|
|
195
196
|
GoogleLogoIcon,
|
|
196
197
|
HhsLogoIcon,
|
|
198
|
+
HourglassIcon,
|
|
197
199
|
ImageOffIcon,
|
|
198
200
|
ImagePlusIcon,
|
|
199
201
|
InfoCircleIcon,
|
|
@@ -201,6 +203,7 @@ import {
|
|
|
201
203
|
IsoLogoIcon,
|
|
202
204
|
LinkedinIcon,
|
|
203
205
|
LinuxLogoIcon,
|
|
206
|
+
LockIcon,
|
|
204
207
|
MessageOffIcon,
|
|
205
208
|
MessagesIcon,
|
|
206
209
|
MicrosoftLogoIcon,
|
|
@@ -28821,15 +28824,7 @@ var appLayoutDrawerPanelVariants = cva7(
|
|
|
28821
28824
|
);
|
|
28822
28825
|
var HORIZONTAL_SIDES = /* @__PURE__ */ new Set(["left", "right"]);
|
|
28823
28826
|
var PERSIST_CLOSED_HOLD = "data-[state=closed]:fill-mode-forwards";
|
|
28824
|
-
function
|
|
28825
|
-
enabled,
|
|
28826
|
-
isHorizontal,
|
|
28827
|
-
minSize,
|
|
28828
|
-
maxSize,
|
|
28829
|
-
defaultSize,
|
|
28830
|
-
storageKey,
|
|
28831
|
-
container
|
|
28832
|
-
}) {
|
|
28827
|
+
function useContainerExtent(enabled, isHorizontal, container) {
|
|
28833
28828
|
const [available, setAvailable] = useState69(0);
|
|
28834
28829
|
useEffect39(() => {
|
|
28835
28830
|
if (!enabled || !container) return void 0;
|
|
@@ -28841,147 +28836,7 @@ function useContainedResizableSize({
|
|
|
28841
28836
|
ro.observe(container);
|
|
28842
28837
|
return () => ro.disconnect();
|
|
28843
28838
|
}, [enabled, container, isHorizontal]);
|
|
28844
|
-
|
|
28845
|
-
(value) => {
|
|
28846
|
-
const effectiveMax = available > 0 ? Math.min(maxSize, available - 40) : maxSize;
|
|
28847
|
-
return clamp(value, minSize, Math.max(minSize, effectiveMax));
|
|
28848
|
-
},
|
|
28849
|
-
[available, minSize, maxSize]
|
|
28850
|
-
);
|
|
28851
|
-
const readInitial = useCallback24(() => {
|
|
28852
|
-
if (!enabled) return defaultSize;
|
|
28853
|
-
if (typeof window === "undefined") return defaultSize;
|
|
28854
|
-
if (!storageKey) return defaultSize;
|
|
28855
|
-
try {
|
|
28856
|
-
const raw = window.localStorage.getItem(storageKey);
|
|
28857
|
-
if (!raw) return defaultSize;
|
|
28858
|
-
const parsed = parseFloat(raw);
|
|
28859
|
-
if (!Number.isFinite(parsed)) return defaultSize;
|
|
28860
|
-
return parsed;
|
|
28861
|
-
} catch {
|
|
28862
|
-
return defaultSize;
|
|
28863
|
-
}
|
|
28864
|
-
}, [enabled, storageKey, defaultSize]);
|
|
28865
|
-
const [rawSize, setSizeRaw] = useState69(readInitial);
|
|
28866
|
-
const size = enabled ? clampToContainer(rawSize) : rawSize;
|
|
28867
|
-
const setSize = useCallback24((next) => setSizeRaw(clampToContainer(next)), [clampToContainer]);
|
|
28868
|
-
useEffect39(() => {
|
|
28869
|
-
if (!enabled || !storageKey || typeof window === "undefined") return;
|
|
28870
|
-
try {
|
|
28871
|
-
window.localStorage.setItem(storageKey, String(Math.round(size)));
|
|
28872
|
-
} catch {
|
|
28873
|
-
}
|
|
28874
|
-
}, [enabled, size, storageKey]);
|
|
28875
|
-
return { size, setSize, clampSize: clampToContainer };
|
|
28876
|
-
}
|
|
28877
|
-
function finishDrag(startRef, dragSizeRef, commit) {
|
|
28878
|
-
if (!startRef.current) return;
|
|
28879
|
-
startRef.current = null;
|
|
28880
|
-
if (dragSizeRef.current !== null) commit(dragSizeRef.current);
|
|
28881
|
-
dragSizeRef.current = null;
|
|
28882
|
-
document.body.style.cursor = "";
|
|
28883
|
-
document.body.style.userSelect = "";
|
|
28884
|
-
}
|
|
28885
|
-
function AppLayoutDrawerResizeHandle({
|
|
28886
|
-
side,
|
|
28887
|
-
size,
|
|
28888
|
-
minSize,
|
|
28889
|
-
maxSize,
|
|
28890
|
-
onSize,
|
|
28891
|
-
clampSize,
|
|
28892
|
-
panelRef,
|
|
28893
|
-
ariaLabel
|
|
28894
|
-
}) {
|
|
28895
|
-
const isHorizontal = HORIZONTAL_SIDES.has(side);
|
|
28896
|
-
const startRef = useRef37(null);
|
|
28897
|
-
const dragSizeRef = useRef37(null);
|
|
28898
|
-
const onSizeRef = useRef37(onSize);
|
|
28899
|
-
useEffect39(() => {
|
|
28900
|
-
onSizeRef.current = onSize;
|
|
28901
|
-
}, [onSize]);
|
|
28902
|
-
useEffect39(() => () => finishDrag(startRef, dragSizeRef, onSizeRef.current), []);
|
|
28903
|
-
const direction = side === "right" || side === "bottom" ? -1 : 1;
|
|
28904
|
-
const handlePointerDown = (e) => {
|
|
28905
|
-
if (e.button !== 0 && e.pointerType === "mouse") return;
|
|
28906
|
-
e.preventDefault();
|
|
28907
|
-
startRef.current = { x: e.clientX, y: e.clientY, size };
|
|
28908
|
-
e.currentTarget.setPointerCapture(e.pointerId);
|
|
28909
|
-
document.body.style.cursor = isHorizontal ? "col-resize" : "row-resize";
|
|
28910
|
-
document.body.style.userSelect = "none";
|
|
28911
|
-
};
|
|
28912
|
-
const handlePointerMove = (e) => {
|
|
28913
|
-
const start = startRef.current;
|
|
28914
|
-
const panel = panelRef.current;
|
|
28915
|
-
if (!start || !panel) return;
|
|
28916
|
-
const delta = isHorizontal ? e.clientX - start.x : e.clientY - start.y;
|
|
28917
|
-
const next = clampSize(start.size + delta * direction);
|
|
28918
|
-
dragSizeRef.current = next;
|
|
28919
|
-
panel.style[isHorizontal ? "width" : "height"] = `${next}px`;
|
|
28920
|
-
e.currentTarget.setAttribute("aria-valuenow", String(Math.round(next)));
|
|
28921
|
-
};
|
|
28922
|
-
const endDrag = (e) => {
|
|
28923
|
-
if (!startRef.current) return;
|
|
28924
|
-
finishDrag(startRef, dragSizeRef, onSize);
|
|
28925
|
-
try {
|
|
28926
|
-
e.currentTarget.releasePointerCapture(e.pointerId);
|
|
28927
|
-
} catch {
|
|
28928
|
-
}
|
|
28929
|
-
};
|
|
28930
|
-
const handleKeyDown = (e) => {
|
|
28931
|
-
const step = e.shiftKey ? 40 : 16;
|
|
28932
|
-
if (isHorizontal) {
|
|
28933
|
-
if (e.key === "ArrowLeft") {
|
|
28934
|
-
e.preventDefault();
|
|
28935
|
-
onSize(size + step * (side === "right" ? 1 : -1));
|
|
28936
|
-
} else if (e.key === "ArrowRight") {
|
|
28937
|
-
e.preventDefault();
|
|
28938
|
-
onSize(size + step * (side === "right" ? -1 : 1));
|
|
28939
|
-
}
|
|
28940
|
-
} else {
|
|
28941
|
-
if (e.key === "ArrowUp") {
|
|
28942
|
-
e.preventDefault();
|
|
28943
|
-
onSize(size + step * (side === "bottom" ? 1 : -1));
|
|
28944
|
-
} else if (e.key === "ArrowDown") {
|
|
28945
|
-
e.preventDefault();
|
|
28946
|
-
onSize(size + step * (side === "bottom" ? -1 : 1));
|
|
28947
|
-
}
|
|
28948
|
-
}
|
|
28949
|
-
if (e.key === "Home") {
|
|
28950
|
-
e.preventDefault();
|
|
28951
|
-
onSize(minSize);
|
|
28952
|
-
} else if (e.key === "End") {
|
|
28953
|
-
e.preventDefault();
|
|
28954
|
-
onSize(maxSize);
|
|
28955
|
-
}
|
|
28956
|
-
};
|
|
28957
|
-
const trackPosition = side === "right" ? "right-full top-4 bottom-4 w-6 items-center justify-end pr-1" : side === "left" ? "left-full top-4 bottom-4 w-6 items-center justify-start pl-1" : side === "bottom" ? "bottom-full left-4 right-4 h-6 justify-center items-end pb-1" : "top-full left-4 right-4 h-6 justify-center items-start pt-1";
|
|
28958
|
-
const cursorClass = isHorizontal ? "cursor-col-resize" : "cursor-row-resize";
|
|
28959
|
-
const gripClass = isHorizontal ? "h-10 w-1" : "w-10 h-1";
|
|
28960
|
-
return /* @__PURE__ */ jsx258(
|
|
28961
|
-
"div",
|
|
28962
|
-
{
|
|
28963
|
-
role: "separator",
|
|
28964
|
-
tabIndex: 0,
|
|
28965
|
-
"aria-orientation": isHorizontal ? "vertical" : "horizontal",
|
|
28966
|
-
"aria-valuenow": Math.round(size),
|
|
28967
|
-
"aria-valuemin": minSize,
|
|
28968
|
-
"aria-valuemax": maxSize,
|
|
28969
|
-
"aria-label": ariaLabel ?? (isHorizontal ? "Resize panel width" : "Resize panel height"),
|
|
28970
|
-
onPointerDown: handlePointerDown,
|
|
28971
|
-
onPointerMove: handlePointerMove,
|
|
28972
|
-
onPointerUp: endDrag,
|
|
28973
|
-
onPointerCancel: endDrag,
|
|
28974
|
-
onLostPointerCapture: endDrag,
|
|
28975
|
-
onKeyDown: handleKeyDown,
|
|
28976
|
-
className: cn(
|
|
28977
|
-
"group absolute z-20 flex touch-none select-none",
|
|
28978
|
-
"outline-none ring-0 focus:outline-none focus:ring-0 focus-visible:outline-none focus-visible:ring-0",
|
|
28979
|
-
trackPosition,
|
|
28980
|
-
cursorClass
|
|
28981
|
-
),
|
|
28982
|
-
children: /* @__PURE__ */ jsx258("div", { "aria-hidden": true, className: cn("rounded-full bg-ods-border", gripClass) })
|
|
28983
|
-
}
|
|
28984
|
-
);
|
|
28839
|
+
return available;
|
|
28985
28840
|
}
|
|
28986
28841
|
var AppLayoutDrawerContent = forwardRef30(
|
|
28987
28842
|
({
|
|
@@ -29076,14 +28931,15 @@ var AppLayoutDrawerContent = forwardRef30(
|
|
|
29076
28931
|
return () => mq.removeEventListener("change", update);
|
|
29077
28932
|
}, [mobileBreakpoint]);
|
|
29078
28933
|
const panelRef = useRef37(null);
|
|
29079
|
-
const
|
|
28934
|
+
const available = useContainerExtent(resizable, isHorizontal, portalContainer);
|
|
28935
|
+
const { size, setSize, clampSize } = useResizablePanelSize({
|
|
29080
28936
|
enabled: resizable,
|
|
29081
|
-
isHorizontal,
|
|
29082
28937
|
minSize,
|
|
29083
28938
|
maxSize,
|
|
29084
28939
|
defaultSize: initialSize,
|
|
29085
|
-
|
|
29086
|
-
|
|
28940
|
+
available,
|
|
28941
|
+
reserve: 40,
|
|
28942
|
+
storageKey
|
|
29087
28943
|
});
|
|
29088
28944
|
const applyInlineSize = resizable && !isMobile;
|
|
29089
28945
|
const sizeStyle = applyInlineSize ? isHorizontal ? { width: size } : { height: size } : {};
|
|
@@ -29137,8 +28993,9 @@ var AppLayoutDrawerContent = forwardRef30(
|
|
|
29137
28993
|
...props,
|
|
29138
28994
|
children: [
|
|
29139
28995
|
applyInlineSize && (!persist || open) ? /* @__PURE__ */ jsx258(
|
|
29140
|
-
|
|
28996
|
+
PanelResizeHandle,
|
|
29141
28997
|
{
|
|
28998
|
+
variant: "inLayout",
|
|
29142
28999
|
side: resolvedSide,
|
|
29143
29000
|
size,
|
|
29144
29001
|
minSize,
|
|
@@ -30417,8 +30274,93 @@ function TimeTrackerHeaderButton({ className, disabled }) {
|
|
|
30417
30274
|
}
|
|
30418
30275
|
|
|
30419
30276
|
// src/components/features/remote-session/remote-session-parts.tsx
|
|
30420
|
-
import { useEffect as useEffect45, useState as
|
|
30277
|
+
import { useEffect as useEffect45, useState as useState78 } from "react";
|
|
30278
|
+
|
|
30279
|
+
// src/components/features/remote-session/remote-session-viewers.tsx
|
|
30280
|
+
import { useState as useState77 } from "react";
|
|
30421
30281
|
import { jsx as jsx268, jsxs as jsxs211 } from "react/jsx-runtime";
|
|
30282
|
+
function viewerLabel(viewer) {
|
|
30283
|
+
if (viewer.isHost) return `${viewer.name} (host)`;
|
|
30284
|
+
if (viewer.isYou) return `${viewer.name} (you)`;
|
|
30285
|
+
return viewer.name;
|
|
30286
|
+
}
|
|
30287
|
+
function hostFirst(viewers) {
|
|
30288
|
+
return [...viewers.filter((viewer) => viewer.isHost), ...viewers.filter((viewer) => !viewer.isHost)];
|
|
30289
|
+
}
|
|
30290
|
+
function RemoteSessionViewers({ viewers, max = 4, className }) {
|
|
30291
|
+
const [open, setOpen] = useState77(false);
|
|
30292
|
+
if (viewers.length === 0) return null;
|
|
30293
|
+
const ordered = hostFirst(viewers);
|
|
30294
|
+
const faces = ordered.slice(0, max);
|
|
30295
|
+
const overflow2 = ordered.length - faces.length;
|
|
30296
|
+
const Chevron = open ? Chevron02UpIcon : Chevron02DownIcon;
|
|
30297
|
+
return /* @__PURE__ */ jsxs211(DropdownMenu, { open, onOpenChange: setOpen, children: [
|
|
30298
|
+
/* @__PURE__ */ jsxs211(
|
|
30299
|
+
DropdownMenuTrigger,
|
|
30300
|
+
{
|
|
30301
|
+
"aria-label": `In this session: ${ordered.map(viewerLabel).join(", ")}`,
|
|
30302
|
+
className: cn(
|
|
30303
|
+
"flex shrink-0 items-center gap-[var(--spacing-system-xxs)] rounded-md outline-none",
|
|
30304
|
+
"focus-visible:ring-2 focus-visible:ring-ods-focus",
|
|
30305
|
+
className
|
|
30306
|
+
),
|
|
30307
|
+
children: [
|
|
30308
|
+
/* @__PURE__ */ jsxs211("span", { className: "flex items-center", children: [
|
|
30309
|
+
faces.map((viewer, index) => /* @__PURE__ */ jsx268(
|
|
30310
|
+
SquareAvatar,
|
|
30311
|
+
{
|
|
30312
|
+
variant: "round",
|
|
30313
|
+
sizePx: 32,
|
|
30314
|
+
src: viewer.avatarUrl ?? void 0,
|
|
30315
|
+
alt: viewer.name,
|
|
30316
|
+
fallback: viewer.name,
|
|
30317
|
+
className: cn(
|
|
30318
|
+
"relative bg-ods-bg",
|
|
30319
|
+
viewer.isHost ? "ring-2 ring-ods-accent" : "ring-1 ring-ods-border",
|
|
30320
|
+
index > 0 && "-ml-2"
|
|
30321
|
+
),
|
|
30322
|
+
style: { zIndex: faces.length - index + 1 }
|
|
30323
|
+
},
|
|
30324
|
+
viewer.id
|
|
30325
|
+
)),
|
|
30326
|
+
overflow2 > 0 && /* @__PURE__ */ jsxs211("span", { className: "relative -ml-2 flex size-8 shrink-0 items-center justify-center rounded-full bg-ods-bg text-ods-text-secondary ring-1 ring-ods-border text-h6", children: [
|
|
30327
|
+
"+",
|
|
30328
|
+
overflow2
|
|
30329
|
+
] })
|
|
30330
|
+
] }),
|
|
30331
|
+
/* @__PURE__ */ jsx268("span", { className: "flex size-8 items-center justify-center rounded-md text-ods-text-primary", children: /* @__PURE__ */ jsx268(Chevron, { size: 16, color: "currentColor" }) })
|
|
30332
|
+
]
|
|
30333
|
+
}
|
|
30334
|
+
),
|
|
30335
|
+
/* @__PURE__ */ jsx268(DropdownMenuContent, { align: "end", className: "w-[280px] p-0", children: ordered.map((viewer) => /* @__PURE__ */ jsxs211(
|
|
30336
|
+
DropdownMenuItem,
|
|
30337
|
+
{
|
|
30338
|
+
className: cn(
|
|
30339
|
+
"gap-[var(--spacing-system-xsf)] rounded-none border-b border-ods-border bg-ods-bg last:border-b-0",
|
|
30340
|
+
"py-[var(--spacing-system-s)] pl-[var(--spacing-system-mf)] pr-[var(--spacing-system-xs)] text-h4"
|
|
30341
|
+
),
|
|
30342
|
+
children: [
|
|
30343
|
+
/* @__PURE__ */ jsx268(
|
|
30344
|
+
SquareAvatar,
|
|
30345
|
+
{
|
|
30346
|
+
variant: "round",
|
|
30347
|
+
sizePx: 24,
|
|
30348
|
+
src: viewer.avatarUrl ?? void 0,
|
|
30349
|
+
alt: "",
|
|
30350
|
+
fallback: viewer.name,
|
|
30351
|
+
className: "shrink-0"
|
|
30352
|
+
}
|
|
30353
|
+
),
|
|
30354
|
+
/* @__PURE__ */ jsx268("span", { className: "min-w-0 flex-1 truncate", children: viewerLabel(viewer) })
|
|
30355
|
+
]
|
|
30356
|
+
},
|
|
30357
|
+
viewer.id
|
|
30358
|
+
)) })
|
|
30359
|
+
] });
|
|
30360
|
+
}
|
|
30361
|
+
|
|
30362
|
+
// src/components/features/remote-session/remote-session-parts.tsx
|
|
30363
|
+
import { jsx as jsx269, jsxs as jsxs212 } from "react/jsx-runtime";
|
|
30422
30364
|
var DESKTOP_SCALE = {
|
|
30423
30365
|
"--spacing-system-xs": "0.5rem",
|
|
30424
30366
|
"--spacing-system-s": "0.75rem",
|
|
@@ -30439,11 +30381,11 @@ var DESKTOP_SCALE = {
|
|
|
30439
30381
|
"--font-line-space-h6-caption": "1.25rem"
|
|
30440
30382
|
};
|
|
30441
30383
|
function RemoteSessionScope({ children, className }) {
|
|
30442
|
-
return /* @__PURE__ */
|
|
30384
|
+
return /* @__PURE__ */ jsx269("div", { "data-app-type": "openframe", style: DESKTOP_SCALE, className, children });
|
|
30443
30385
|
}
|
|
30444
30386
|
function RemoteSessionOrgLogo({ name, logoUrl, sizePx, className }) {
|
|
30445
30387
|
if (logoUrl) {
|
|
30446
|
-
return /* @__PURE__ */
|
|
30388
|
+
return /* @__PURE__ */ jsx269(
|
|
30447
30389
|
SquareAvatar,
|
|
30448
30390
|
{
|
|
30449
30391
|
variant: "square",
|
|
@@ -30456,7 +30398,7 @@ function RemoteSessionOrgLogo({ name, logoUrl, sizePx, className }) {
|
|
|
30456
30398
|
}
|
|
30457
30399
|
);
|
|
30458
30400
|
}
|
|
30459
|
-
return /* @__PURE__ */
|
|
30401
|
+
return /* @__PURE__ */ jsx269(
|
|
30460
30402
|
"div",
|
|
30461
30403
|
{
|
|
30462
30404
|
role: "img",
|
|
@@ -30466,19 +30408,40 @@ function RemoteSessionOrgLogo({ name, logoUrl, sizePx, className }) {
|
|
|
30466
30408
|
"flex shrink-0 items-center justify-center rounded-md border border-ods-border bg-ods-card",
|
|
30467
30409
|
className
|
|
30468
30410
|
),
|
|
30469
|
-
children: /* @__PURE__ */
|
|
30411
|
+
children: /* @__PURE__ */ jsx269(OpenFrameLogo, { className: "size-1/2" })
|
|
30412
|
+
}
|
|
30413
|
+
);
|
|
30414
|
+
}
|
|
30415
|
+
function RemoteSessionRecordingTag({ className }) {
|
|
30416
|
+
return /* @__PURE__ */ jsxs212(
|
|
30417
|
+
"div",
|
|
30418
|
+
{
|
|
30419
|
+
className: cn(
|
|
30420
|
+
"flex h-8 items-center gap-[var(--spacing-system-xs)] self-start rounded-md bg-ods-success-secondary p-[var(--spacing-system-xsf)]",
|
|
30421
|
+
className
|
|
30422
|
+
),
|
|
30423
|
+
children: [
|
|
30424
|
+
/* @__PURE__ */ jsx269(RecordingIcon, { size: 16, color: "currentColor", className: "text-ods-success" }),
|
|
30425
|
+
/* @__PURE__ */ jsx269("span", { className: "text-ods-success text-h5", children: "Session Recording" })
|
|
30426
|
+
]
|
|
30470
30427
|
}
|
|
30471
30428
|
);
|
|
30472
30429
|
}
|
|
30473
|
-
function
|
|
30474
|
-
|
|
30475
|
-
|
|
30476
|
-
|
|
30430
|
+
function RemoteSessionStatusRow({
|
|
30431
|
+
showRecordingTag,
|
|
30432
|
+
viewers
|
|
30433
|
+
}) {
|
|
30434
|
+
const hasViewers = !!viewers && viewers.length > 0;
|
|
30435
|
+
if (!showRecordingTag && !hasViewers) return null;
|
|
30436
|
+
if (!hasViewers) return /* @__PURE__ */ jsx269(RemoteSessionRecordingTag, {});
|
|
30437
|
+
return /* @__PURE__ */ jsxs212("div", { className: "flex w-full items-center gap-[var(--spacing-system-m)]", children: [
|
|
30438
|
+
showRecordingTag && /* @__PURE__ */ jsx269(RemoteSessionRecordingTag, { className: "flex-1 justify-center self-auto" }),
|
|
30439
|
+
/* @__PURE__ */ jsx269(RemoteSessionViewers, { viewers, className: "ml-auto" })
|
|
30477
30440
|
] });
|
|
30478
30441
|
}
|
|
30479
30442
|
var REMOTE_SESSION_DRAG_HANDLE_CLASS = "cursor-grab active:cursor-grabbing";
|
|
30480
30443
|
function RemoteSessionDragger({ dragHandlers }) {
|
|
30481
|
-
return /* @__PURE__ */
|
|
30444
|
+
return /* @__PURE__ */ jsx269(
|
|
30482
30445
|
"span",
|
|
30483
30446
|
{
|
|
30484
30447
|
"aria-hidden": true,
|
|
@@ -30487,7 +30450,7 @@ function RemoteSessionDragger({ dragHandlers }) {
|
|
|
30487
30450
|
dragHandlers && REMOTE_SESSION_DRAG_HANDLE_CLASS
|
|
30488
30451
|
),
|
|
30489
30452
|
...dragHandlers,
|
|
30490
|
-
children: /* @__PURE__ */
|
|
30453
|
+
children: /* @__PURE__ */ jsx269(DraggerIcon, { size: 24, color: "currentColor" })
|
|
30491
30454
|
}
|
|
30492
30455
|
);
|
|
30493
30456
|
}
|
|
@@ -30499,7 +30462,7 @@ function formatRemoteSessionElapsed(elapsedMs) {
|
|
|
30499
30462
|
return hours > 0 ? `${hours}:${String(minutes).padStart(2, "0")}:${seconds}` : `${minutes}:${seconds}`;
|
|
30500
30463
|
}
|
|
30501
30464
|
function useRemoteSessionTimer(startedAt) {
|
|
30502
|
-
const [nowMs, setNowMs] =
|
|
30465
|
+
const [nowMs, setNowMs] = useState78(() => Date.now());
|
|
30503
30466
|
useEffect45(() => {
|
|
30504
30467
|
const timer = setInterval(() => setNowMs(Date.now()), 1e3);
|
|
30505
30468
|
return () => clearInterval(timer);
|
|
@@ -30508,7 +30471,7 @@ function useRemoteSessionTimer(startedAt) {
|
|
|
30508
30471
|
}
|
|
30509
30472
|
|
|
30510
30473
|
// src/components/features/remote-session/remote-access-request-card.tsx
|
|
30511
|
-
import { jsx as
|
|
30474
|
+
import { jsx as jsx270, jsxs as jsxs213 } from "react/jsx-runtime";
|
|
30512
30475
|
function displaySiteUrl(url) {
|
|
30513
30476
|
return url.replace(/^https?:\/\//, "").replace(/\/$/, "");
|
|
30514
30477
|
}
|
|
@@ -30523,30 +30486,30 @@ function RemoteAccessRequestCard({
|
|
|
30523
30486
|
const { organizationName } = party;
|
|
30524
30487
|
const siteUrl = party.organizationSiteUrl ?? void 0;
|
|
30525
30488
|
const openableSite = siteUrl?.startsWith("https://") ? siteUrl : void 0;
|
|
30526
|
-
return /* @__PURE__ */
|
|
30527
|
-
/* @__PURE__ */
|
|
30528
|
-
/* @__PURE__ */
|
|
30529
|
-
/* @__PURE__ */
|
|
30530
|
-
/* @__PURE__ */
|
|
30531
|
-
/* @__PURE__ */
|
|
30532
|
-
siteUrl && /* @__PURE__ */
|
|
30489
|
+
return /* @__PURE__ */ jsxs213("div", { className: "flex w-full flex-col gap-[var(--spacing-system-l)] rounded-md border border-ods-border bg-ods-card p-[var(--spacing-system-xl)]", children: [
|
|
30490
|
+
/* @__PURE__ */ jsx270("h1", { className: "w-full text-ods-text-primary text-h2", children: "Your IT support team is requesting remote access" }),
|
|
30491
|
+
/* @__PURE__ */ jsxs213("div", { className: "flex w-full items-center gap-[var(--spacing-system-m)] rounded-md border border-ods-border bg-ods-bg p-[var(--spacing-system-m)]", children: [
|
|
30492
|
+
/* @__PURE__ */ jsx270(RemoteSessionOrgLogo, { name: organizationName, logoUrl: party.organizationLogoUrl, sizePx: 64 }),
|
|
30493
|
+
/* @__PURE__ */ jsxs213("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
30494
|
+
/* @__PURE__ */ jsx270("p", { className: "w-full truncate text-ods-text-primary text-h3", children: organizationName }),
|
|
30495
|
+
siteUrl && /* @__PURE__ */ jsx270("p", { className: "w-full truncate text-ods-text-secondary text-h4", children: displaySiteUrl(siteUrl) })
|
|
30533
30496
|
] }),
|
|
30534
|
-
openableSite && onOpenSite && /* @__PURE__ */
|
|
30497
|
+
openableSite && onOpenSite && /* @__PURE__ */ jsx270(Button, { variant: "outline", size: "icon", "aria-label": "Open website", onClick: () => onOpenSite(openableSite), children: /* @__PURE__ */ jsx270(ExternalLinkIcon, { size: 24, color: "currentColor" }) })
|
|
30535
30498
|
] }),
|
|
30536
|
-
/* @__PURE__ */
|
|
30499
|
+
/* @__PURE__ */ jsxs213("p", { className: "w-full text-ods-text-primary text-h4", children: [
|
|
30537
30500
|
"A technician from ",
|
|
30538
|
-
/* @__PURE__ */
|
|
30501
|
+
/* @__PURE__ */ jsx270("span", { className: "text-ods-accent", children: organizationName }),
|
|
30539
30502
|
" will be able to view your screen and control your mouse and keyboard during this session."
|
|
30540
30503
|
] }),
|
|
30541
|
-
/* @__PURE__ */
|
|
30542
|
-
showRecordingNotice && /* @__PURE__ */
|
|
30543
|
-
/* @__PURE__ */
|
|
30544
|
-
/* @__PURE__ */
|
|
30504
|
+
/* @__PURE__ */ jsxs213("div", { className: "flex w-full flex-col gap-[var(--spacing-system-xs)]", children: [
|
|
30505
|
+
showRecordingNotice && /* @__PURE__ */ jsxs213("div", { className: "flex w-full items-center gap-[var(--spacing-system-xs)] rounded-md border border-ods-border bg-ods-bg p-[var(--spacing-system-s)]", children: [
|
|
30506
|
+
/* @__PURE__ */ jsx270(InfoCircleIcon, { size: 24, color: "currentColor", className: "shrink-0 text-ods-accent" }),
|
|
30507
|
+
/* @__PURE__ */ jsx270("p", { className: "min-w-0 flex-1 text-ods-text-primary text-h6", children: "This session will be recorded and available upon request." })
|
|
30545
30508
|
] }),
|
|
30546
|
-
error ? /* @__PURE__ */
|
|
30509
|
+
error ? /* @__PURE__ */ jsx270("p", { className: "w-full text-ods-text-primary text-h6", children: error }) : /* @__PURE__ */ jsx270("p", { className: "w-full text-ods-text-secondary text-h6", children: "You can end the session at any time." })
|
|
30547
30510
|
] }),
|
|
30548
|
-
/* @__PURE__ */
|
|
30549
|
-
/* @__PURE__ */
|
|
30511
|
+
/* @__PURE__ */ jsxs213("div", { className: "flex w-full items-stretch gap-[var(--spacing-system-l)]", children: [
|
|
30512
|
+
/* @__PURE__ */ jsx270(
|
|
30550
30513
|
Button,
|
|
30551
30514
|
{
|
|
30552
30515
|
variant: "outline",
|
|
@@ -30557,7 +30520,7 @@ function RemoteAccessRequestCard({
|
|
|
30557
30520
|
children: "Decline"
|
|
30558
30521
|
}
|
|
30559
30522
|
),
|
|
30560
|
-
/* @__PURE__ */
|
|
30523
|
+
/* @__PURE__ */ jsx270(
|
|
30561
30524
|
Button,
|
|
30562
30525
|
{
|
|
30563
30526
|
variant: "accent",
|
|
@@ -30574,10 +30537,10 @@ function RemoteAccessRequestCard({
|
|
|
30574
30537
|
|
|
30575
30538
|
// src/components/features/remote-session/remote-session-block.tsx
|
|
30576
30539
|
import { forwardRef as forwardRef31 } from "react";
|
|
30577
|
-
import { jsx as
|
|
30540
|
+
import { jsx as jsx271, jsxs as jsxs214 } from "react/jsx-runtime";
|
|
30578
30541
|
var RemoteSessionBlockFrame = forwardRef31(
|
|
30579
30542
|
({ children, expanded = false, onHide, className }, ref) => {
|
|
30580
|
-
return /* @__PURE__ */
|
|
30543
|
+
return /* @__PURE__ */ jsxs214(
|
|
30581
30544
|
"div",
|
|
30582
30545
|
{
|
|
30583
30546
|
ref,
|
|
@@ -30588,16 +30551,16 @@ var RemoteSessionBlockFrame = forwardRef31(
|
|
|
30588
30551
|
),
|
|
30589
30552
|
children: [
|
|
30590
30553
|
children,
|
|
30591
|
-
/* @__PURE__ */
|
|
30554
|
+
/* @__PURE__ */ jsxs214(
|
|
30592
30555
|
"button",
|
|
30593
30556
|
{
|
|
30594
30557
|
type: "button",
|
|
30595
30558
|
className: "flex h-12 w-full shrink-0 items-center gap-[var(--spacing-system-xs)] border-t border-ods-border bg-ods-card px-[var(--spacing-system-m)]",
|
|
30596
30559
|
onClick: onHide,
|
|
30597
30560
|
children: [
|
|
30598
|
-
/* @__PURE__ */
|
|
30599
|
-
/* @__PURE__ */
|
|
30600
|
-
/* @__PURE__ */
|
|
30561
|
+
/* @__PURE__ */ jsx271(Chevrons03RightIcon, { size: 24 }),
|
|
30562
|
+
/* @__PURE__ */ jsx271("span", { className: "min-w-0 flex-1 truncate text-left text-ods-text-secondary text-h4", children: "Hide this Block" }),
|
|
30563
|
+
/* @__PURE__ */ jsx271(OpenFrameLogo, { className: "size-6 shrink-0" })
|
|
30601
30564
|
]
|
|
30602
30565
|
}
|
|
30603
30566
|
)
|
|
@@ -30608,12 +30571,12 @@ var RemoteSessionBlockFrame = forwardRef31(
|
|
|
30608
30571
|
);
|
|
30609
30572
|
RemoteSessionBlockFrame.displayName = "RemoteSessionBlockFrame";
|
|
30610
30573
|
function RemoteSessionEndButton({ onEndSession }) {
|
|
30611
|
-
return /* @__PURE__ */
|
|
30574
|
+
return /* @__PURE__ */ jsx271(
|
|
30612
30575
|
Button,
|
|
30613
30576
|
{
|
|
30614
30577
|
variant: "outline",
|
|
30615
30578
|
fullWidth: true,
|
|
30616
|
-
leftIcon: /* @__PURE__ */
|
|
30579
|
+
leftIcon: /* @__PURE__ */ jsx271(MonitorOffIcon, { size: 24, color: "currentColor", className: "text-ods-error" }),
|
|
30617
30580
|
onClick: onEndSession,
|
|
30618
30581
|
children: "End Session"
|
|
30619
30582
|
}
|
|
@@ -30623,14 +30586,15 @@ function RemoteSessionSummary({
|
|
|
30623
30586
|
party,
|
|
30624
30587
|
elapsed,
|
|
30625
30588
|
showRecordingTag = false,
|
|
30589
|
+
viewers,
|
|
30626
30590
|
onOpenChat,
|
|
30627
30591
|
onEndSession,
|
|
30628
30592
|
dragHandlers
|
|
30629
30593
|
}) {
|
|
30630
30594
|
const technician = party.technicianName;
|
|
30631
|
-
return /* @__PURE__ */
|
|
30632
|
-
/* @__PURE__ */
|
|
30633
|
-
/* @__PURE__ */
|
|
30595
|
+
return /* @__PURE__ */ jsxs214("div", { className: "relative flex flex-col gap-[var(--spacing-system-m)] p-[var(--spacing-system-m)]", children: [
|
|
30596
|
+
/* @__PURE__ */ jsx271(RemoteSessionDragger, { dragHandlers }),
|
|
30597
|
+
/* @__PURE__ */ jsxs214(
|
|
30634
30598
|
"div",
|
|
30635
30599
|
{
|
|
30636
30600
|
className: cn(
|
|
@@ -30639,7 +30603,7 @@ function RemoteSessionSummary({
|
|
|
30639
30603
|
),
|
|
30640
30604
|
...dragHandlers,
|
|
30641
30605
|
children: [
|
|
30642
|
-
technician ? /* @__PURE__ */
|
|
30606
|
+
technician ? /* @__PURE__ */ jsx271(
|
|
30643
30607
|
SquareAvatar,
|
|
30644
30608
|
{
|
|
30645
30609
|
variant: "round",
|
|
@@ -30647,42 +30611,42 @@ function RemoteSessionSummary({
|
|
|
30647
30611
|
src: party.technicianAvatarUrl ?? void 0,
|
|
30648
30612
|
fallback: technician
|
|
30649
30613
|
}
|
|
30650
|
-
) : /* @__PURE__ */
|
|
30651
|
-
/* @__PURE__ */
|
|
30652
|
-
/* @__PURE__ */
|
|
30614
|
+
) : /* @__PURE__ */ jsx271(RemoteSessionOrgLogo, { name: party.organizationName, logoUrl: party.organizationLogoUrl, sizePx: 48 }),
|
|
30615
|
+
/* @__PURE__ */ jsxs214("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
30616
|
+
/* @__PURE__ */ jsxs214("p", { className: "w-full truncate text-ods-text-primary text-h4", children: [
|
|
30653
30617
|
technician ? `${technician} connected` : "IT support team is connected",
|
|
30654
30618
|
" ",
|
|
30655
|
-
/* @__PURE__ */
|
|
30619
|
+
/* @__PURE__ */ jsxs214("span", { className: "text-ods-text-secondary", children: [
|
|
30656
30620
|
"(",
|
|
30657
30621
|
elapsed,
|
|
30658
30622
|
")"
|
|
30659
30623
|
] })
|
|
30660
30624
|
] }),
|
|
30661
|
-
/* @__PURE__ */
|
|
30625
|
+
/* @__PURE__ */ jsx271("p", { className: "w-full truncate text-ods-text-secondary text-h4", children: party.organizationName })
|
|
30662
30626
|
] })
|
|
30663
30627
|
]
|
|
30664
30628
|
}
|
|
30665
30629
|
),
|
|
30666
|
-
|
|
30667
|
-
/* @__PURE__ */
|
|
30668
|
-
/* @__PURE__ */
|
|
30630
|
+
/* @__PURE__ */ jsx271(RemoteSessionStatusRow, { showRecordingTag, viewers }),
|
|
30631
|
+
/* @__PURE__ */ jsxs214("div", { className: "flex w-full items-stretch gap-[var(--spacing-system-m)]", children: [
|
|
30632
|
+
/* @__PURE__ */ jsx271(
|
|
30669
30633
|
Button,
|
|
30670
30634
|
{
|
|
30671
30635
|
variant: "outline",
|
|
30672
30636
|
fullWidth: true,
|
|
30673
|
-
leftIcon: /* @__PURE__ */
|
|
30637
|
+
leftIcon: /* @__PURE__ */ jsx271(ChatsIcon, { size: 24, color: "currentColor" }),
|
|
30674
30638
|
onClick: onOpenChat,
|
|
30675
30639
|
children: "Open Chat"
|
|
30676
30640
|
}
|
|
30677
30641
|
),
|
|
30678
|
-
/* @__PURE__ */
|
|
30642
|
+
/* @__PURE__ */ jsx271(RemoteSessionEndButton, { onEndSession })
|
|
30679
30643
|
] })
|
|
30680
30644
|
] });
|
|
30681
30645
|
}
|
|
30682
30646
|
var RemoteSessionMinimizedChip = forwardRef31(
|
|
30683
30647
|
({ party, onExpand, dragHandlers }, ref) => {
|
|
30684
30648
|
const technician = party.technicianName;
|
|
30685
|
-
return /* @__PURE__ */
|
|
30649
|
+
return /* @__PURE__ */ jsxs214(
|
|
30686
30650
|
"button",
|
|
30687
30651
|
{
|
|
30688
30652
|
ref,
|
|
@@ -30695,7 +30659,7 @@ var RemoteSessionMinimizedChip = forwardRef31(
|
|
|
30695
30659
|
onClick: onExpand,
|
|
30696
30660
|
...dragHandlers,
|
|
30697
30661
|
children: [
|
|
30698
|
-
technician ? /* @__PURE__ */
|
|
30662
|
+
technician ? /* @__PURE__ */ jsx271(
|
|
30699
30663
|
SquareAvatar,
|
|
30700
30664
|
{
|
|
30701
30665
|
sizePx: 48,
|
|
@@ -30703,7 +30667,7 @@ var RemoteSessionMinimizedChip = forwardRef31(
|
|
|
30703
30667
|
fallback: technician,
|
|
30704
30668
|
className: "rounded-none"
|
|
30705
30669
|
}
|
|
30706
|
-
) : /* @__PURE__ */
|
|
30670
|
+
) : /* @__PURE__ */ jsx271(
|
|
30707
30671
|
RemoteSessionOrgLogo,
|
|
30708
30672
|
{
|
|
30709
30673
|
name: party.organizationName,
|
|
@@ -30712,7 +30676,7 @@ var RemoteSessionMinimizedChip = forwardRef31(
|
|
|
30712
30676
|
className: "rounded-none border-0"
|
|
30713
30677
|
}
|
|
30714
30678
|
),
|
|
30715
|
-
/* @__PURE__ */
|
|
30679
|
+
/* @__PURE__ */ jsx271("span", { className: "flex h-9 w-12 items-center justify-center border-t border-ods-border bg-ods-card", children: /* @__PURE__ */ jsx271(Chevrons03LeftIcon, { size: 24 }) })
|
|
30716
30680
|
]
|
|
30717
30681
|
}
|
|
30718
30682
|
);
|
|
@@ -30722,7 +30686,7 @@ RemoteSessionMinimizedChip.displayName = "RemoteSessionMinimizedChip";
|
|
|
30722
30686
|
|
|
30723
30687
|
// src/components/features/remote-session/remote-session-chat-panel.tsx
|
|
30724
30688
|
import { useEffect as useEffect46, useRef as useRef40 } from "react";
|
|
30725
|
-
import { jsx as
|
|
30689
|
+
import { jsx as jsx272, jsxs as jsxs215 } from "react/jsx-runtime";
|
|
30726
30690
|
function formatTime2(at) {
|
|
30727
30691
|
return at.toLocaleTimeString([], { hour: "numeric", minute: "2-digit" });
|
|
30728
30692
|
}
|
|
@@ -30731,6 +30695,7 @@ function RemoteSessionChatPanel({
|
|
|
30731
30695
|
elapsed,
|
|
30732
30696
|
messages,
|
|
30733
30697
|
showRecordingTag = false,
|
|
30698
|
+
viewers,
|
|
30734
30699
|
draft,
|
|
30735
30700
|
onDraftChange,
|
|
30736
30701
|
onSend,
|
|
@@ -30751,10 +30716,10 @@ function RemoteSessionChatPanel({
|
|
|
30751
30716
|
onSend(text);
|
|
30752
30717
|
onDraftChange("");
|
|
30753
30718
|
};
|
|
30754
|
-
return /* @__PURE__ */
|
|
30755
|
-
/* @__PURE__ */
|
|
30756
|
-
/* @__PURE__ */
|
|
30757
|
-
/* @__PURE__ */
|
|
30719
|
+
return /* @__PURE__ */ jsxs215("div", { className: "flex min-h-0 flex-1 flex-col", children: [
|
|
30720
|
+
/* @__PURE__ */ jsxs215("div", { className: "relative flex flex-col gap-[var(--spacing-system-m)] p-[var(--spacing-system-m)]", children: [
|
|
30721
|
+
/* @__PURE__ */ jsx272(RemoteSessionDragger, { dragHandlers }),
|
|
30722
|
+
/* @__PURE__ */ jsxs215(
|
|
30758
30723
|
"div",
|
|
30759
30724
|
{
|
|
30760
30725
|
className: cn(
|
|
@@ -30763,45 +30728,45 @@ function RemoteSessionChatPanel({
|
|
|
30763
30728
|
),
|
|
30764
30729
|
...dragHandlers,
|
|
30765
30730
|
children: [
|
|
30766
|
-
/* @__PURE__ */
|
|
30731
|
+
/* @__PURE__ */ jsxs215("p", { className: "w-full truncate text-ods-text-primary text-h4", children: [
|
|
30767
30732
|
"Your IT support team is connected ",
|
|
30768
|
-
/* @__PURE__ */
|
|
30733
|
+
/* @__PURE__ */ jsxs215("span", { className: "text-ods-text-secondary", children: [
|
|
30769
30734
|
"(",
|
|
30770
30735
|
elapsed,
|
|
30771
30736
|
")"
|
|
30772
30737
|
] })
|
|
30773
30738
|
] }),
|
|
30774
|
-
/* @__PURE__ */
|
|
30739
|
+
/* @__PURE__ */ jsx272("p", { className: "w-full truncate text-ods-text-secondary text-h4", children: "You can end this session at any time" })
|
|
30775
30740
|
]
|
|
30776
30741
|
}
|
|
30777
30742
|
),
|
|
30778
|
-
|
|
30779
|
-
/* @__PURE__ */
|
|
30780
|
-
/* @__PURE__ */
|
|
30743
|
+
/* @__PURE__ */ jsx272(RemoteSessionStatusRow, { showRecordingTag, viewers }),
|
|
30744
|
+
/* @__PURE__ */ jsxs215("div", { className: "flex w-full items-stretch gap-[var(--spacing-system-m)]", children: [
|
|
30745
|
+
/* @__PURE__ */ jsx272(
|
|
30781
30746
|
Button,
|
|
30782
30747
|
{
|
|
30783
30748
|
variant: "outline",
|
|
30784
30749
|
fullWidth: true,
|
|
30785
|
-
leftIcon: /* @__PURE__ */
|
|
30750
|
+
leftIcon: /* @__PURE__ */ jsx272(MessageOffIcon, { size: 24, color: "currentColor" }),
|
|
30786
30751
|
onClick: onCloseChat,
|
|
30787
30752
|
children: "Close Chat"
|
|
30788
30753
|
}
|
|
30789
30754
|
),
|
|
30790
|
-
/* @__PURE__ */
|
|
30755
|
+
/* @__PURE__ */ jsx272(RemoteSessionEndButton, { onEndSession })
|
|
30791
30756
|
] })
|
|
30792
30757
|
] }),
|
|
30793
|
-
/* @__PURE__ */
|
|
30758
|
+
/* @__PURE__ */ jsx272(
|
|
30794
30759
|
"div",
|
|
30795
30760
|
{
|
|
30796
30761
|
ref: listRef,
|
|
30797
30762
|
className: "flex min-h-0 flex-1 flex-col overflow-y-auto bg-ods-card p-[var(--spacing-system-m)]",
|
|
30798
|
-
children: /* @__PURE__ */
|
|
30799
|
-
(message) => message.author === "system" ? /* @__PURE__ */
|
|
30763
|
+
children: /* @__PURE__ */ jsx272("div", { className: "mt-auto flex flex-col gap-[var(--spacing-system-s)]", children: messages.map(
|
|
30764
|
+
(message) => message.author === "system" ? /* @__PURE__ */ jsx272("p", { className: "w-full text-center text-ods-text-secondary text-h6", children: message.text }, message.id) : /* @__PURE__ */ jsx272(RemoteSessionChatMessageRow, { message, party }, message.id)
|
|
30800
30765
|
) })
|
|
30801
30766
|
}
|
|
30802
30767
|
),
|
|
30803
|
-
error && /* @__PURE__ */
|
|
30804
|
-
/* @__PURE__ */
|
|
30768
|
+
error && /* @__PURE__ */ jsx272("p", { className: "bg-ods-card px-[var(--spacing-system-m)] text-ods-error text-h6", children: error }),
|
|
30769
|
+
/* @__PURE__ */ jsxs215(
|
|
30805
30770
|
"form",
|
|
30806
30771
|
{
|
|
30807
30772
|
className: "flex items-center gap-[var(--spacing-system-xs)] bg-ods-card px-[var(--spacing-system-m)] pb-[var(--spacing-system-m)]",
|
|
@@ -30810,7 +30775,7 @@ function RemoteSessionChatPanel({
|
|
|
30810
30775
|
handleSend();
|
|
30811
30776
|
},
|
|
30812
30777
|
children: [
|
|
30813
|
-
/* @__PURE__ */
|
|
30778
|
+
/* @__PURE__ */ jsx272(
|
|
30814
30779
|
"input",
|
|
30815
30780
|
{
|
|
30816
30781
|
value: draft,
|
|
@@ -30821,14 +30786,14 @@ function RemoteSessionChatPanel({
|
|
|
30821
30786
|
className: "h-12 min-w-0 flex-1 rounded-md border border-ods-border bg-ods-bg px-[var(--spacing-system-s)] text-ods-text-primary outline-none text-h6 placeholder:text-ods-text-secondary"
|
|
30822
30787
|
}
|
|
30823
30788
|
),
|
|
30824
|
-
/* @__PURE__ */
|
|
30789
|
+
/* @__PURE__ */ jsx272(
|
|
30825
30790
|
"button",
|
|
30826
30791
|
{
|
|
30827
30792
|
type: "submit",
|
|
30828
30793
|
"aria-label": "Send message",
|
|
30829
30794
|
disabled: !ready,
|
|
30830
30795
|
className: "flex size-12 shrink-0 items-center justify-center",
|
|
30831
|
-
children: /* @__PURE__ */
|
|
30796
|
+
children: /* @__PURE__ */ jsx272(Send03Icon, { size: 24, color: "currentColor", className: "text-ods-text-primary" })
|
|
30832
30797
|
}
|
|
30833
30798
|
)
|
|
30834
30799
|
]
|
|
@@ -30842,9 +30807,9 @@ function RemoteSessionChatMessageRow({
|
|
|
30842
30807
|
}) {
|
|
30843
30808
|
const isTechnician = message.author === "technician";
|
|
30844
30809
|
const technician = message.name ?? party.technicianName ?? "Technician";
|
|
30845
|
-
return /* @__PURE__ */
|
|
30846
|
-
/* @__PURE__ */
|
|
30847
|
-
isTechnician && /* @__PURE__ */
|
|
30810
|
+
return /* @__PURE__ */ jsxs215("div", { className: "flex w-full flex-col", children: [
|
|
30811
|
+
/* @__PURE__ */ jsxs215("div", { className: "flex w-full items-center gap-[var(--spacing-system-xs)]", children: [
|
|
30812
|
+
isTechnician && /* @__PURE__ */ jsx272(
|
|
30848
30813
|
SquareAvatar,
|
|
30849
30814
|
{
|
|
30850
30815
|
variant: "round",
|
|
@@ -30853,7 +30818,7 @@ function RemoteSessionChatMessageRow({
|
|
|
30853
30818
|
fallback: technician
|
|
30854
30819
|
}
|
|
30855
30820
|
),
|
|
30856
|
-
/* @__PURE__ */
|
|
30821
|
+
/* @__PURE__ */ jsx272(
|
|
30857
30822
|
"span",
|
|
30858
30823
|
{
|
|
30859
30824
|
className: cn(
|
|
@@ -30863,14 +30828,14 @@ function RemoteSessionChatMessageRow({
|
|
|
30863
30828
|
children: isTechnician ? technician : "User"
|
|
30864
30829
|
}
|
|
30865
30830
|
),
|
|
30866
|
-
/* @__PURE__ */
|
|
30831
|
+
/* @__PURE__ */ jsx272("span", { className: "shrink-0 text-ods-text-secondary text-h6", children: formatTime2(message.at) })
|
|
30867
30832
|
] }),
|
|
30868
|
-
/* @__PURE__ */
|
|
30833
|
+
/* @__PURE__ */ jsx272("p", { className: "w-full break-words text-ods-text-primary text-h6", children: message.text })
|
|
30869
30834
|
] });
|
|
30870
30835
|
}
|
|
30871
30836
|
|
|
30872
30837
|
// src/components/features/remote-session/remote-session-dialog.tsx
|
|
30873
|
-
import { jsx as
|
|
30838
|
+
import { jsx as jsx273, jsxs as jsxs216 } from "react/jsx-runtime";
|
|
30874
30839
|
var NOTICE_COPY = {
|
|
30875
30840
|
"session-ended": { title: "Remote session ended", suffix: "has disconnected from your device." },
|
|
30876
30841
|
"connection-lost": { title: "Connection lost", suffix: "lost the connection to your device." }
|
|
@@ -30883,49 +30848,315 @@ function RemoteSessionDialog({
|
|
|
30883
30848
|
onClose
|
|
30884
30849
|
}) {
|
|
30885
30850
|
if (variant === "end-confirm") {
|
|
30886
|
-
return /* @__PURE__ */
|
|
30887
|
-
/* @__PURE__ */
|
|
30888
|
-
/* @__PURE__ */
|
|
30889
|
-
/* @__PURE__ */
|
|
30851
|
+
return /* @__PURE__ */ jsxs216(DialogCard, { children: [
|
|
30852
|
+
/* @__PURE__ */ jsxs216("div", { className: "flex w-full flex-col gap-[var(--spacing-system-xs)]", children: [
|
|
30853
|
+
/* @__PURE__ */ jsx273("h1", { className: "w-full text-ods-text-primary text-h2", children: "End remote session?" }),
|
|
30854
|
+
/* @__PURE__ */ jsx273("p", { className: "w-full text-ods-text-primary text-h4", children: "The technician will lose access to your device immediately." })
|
|
30890
30855
|
] }),
|
|
30891
|
-
/* @__PURE__ */
|
|
30892
|
-
/* @__PURE__ */
|
|
30893
|
-
/* @__PURE__ */
|
|
30856
|
+
/* @__PURE__ */ jsxs216("div", { className: "flex w-full items-stretch gap-[var(--spacing-system-l)]", children: [
|
|
30857
|
+
/* @__PURE__ */ jsx273(Button, { variant: "outline", fullWidth: true, disabled: ending, onClick: onClose, children: "Cancel" }),
|
|
30858
|
+
/* @__PURE__ */ jsx273(Button, { variant: "destructive", fullWidth: true, loading: ending, onClick: onEndSession, children: "End Session" })
|
|
30894
30859
|
] })
|
|
30895
30860
|
] });
|
|
30896
30861
|
}
|
|
30897
30862
|
const copy = NOTICE_COPY[variant];
|
|
30898
|
-
return /* @__PURE__ */
|
|
30899
|
-
/* @__PURE__ */
|
|
30900
|
-
/* @__PURE__ */
|
|
30901
|
-
/* @__PURE__ */
|
|
30902
|
-
/* @__PURE__ */
|
|
30863
|
+
return /* @__PURE__ */ jsxs216(DialogCard, { children: [
|
|
30864
|
+
/* @__PURE__ */ jsxs216("div", { className: "flex w-full flex-col gap-[var(--spacing-system-xs)]", children: [
|
|
30865
|
+
/* @__PURE__ */ jsx273("h1", { className: "w-full text-ods-text-primary text-h2", children: copy.title }),
|
|
30866
|
+
/* @__PURE__ */ jsxs216("p", { className: "w-full text-ods-text-primary text-h4", children: [
|
|
30867
|
+
/* @__PURE__ */ jsx273("span", { className: "text-ods-accent", children: organizationName }),
|
|
30903
30868
|
" ",
|
|
30904
30869
|
copy.suffix
|
|
30905
30870
|
] })
|
|
30906
30871
|
] }),
|
|
30907
|
-
/* @__PURE__ */
|
|
30872
|
+
/* @__PURE__ */ jsx273("div", { className: "flex w-full justify-end", children: /* @__PURE__ */ jsx273(Button, { variant: "outline", className: "w-1/2", onClick: onClose, children: "Close" }) })
|
|
30908
30873
|
] });
|
|
30909
30874
|
}
|
|
30910
30875
|
function DialogCard({ children }) {
|
|
30911
|
-
return /* @__PURE__ */
|
|
30876
|
+
return /* @__PURE__ */ jsx273("div", { className: "flex w-full flex-col gap-[var(--spacing-system-l)] rounded-md border border-ods-border bg-ods-card p-[var(--spacing-system-xl)]", children });
|
|
30912
30877
|
}
|
|
30913
30878
|
|
|
30914
30879
|
// src/components/features/remote-session/remote-session-overlay.tsx
|
|
30915
|
-
import { jsx as
|
|
30880
|
+
import { jsx as jsx274, jsxs as jsxs217 } from "react/jsx-runtime";
|
|
30916
30881
|
function RemoteSessionBorder({ className }) {
|
|
30917
|
-
return /* @__PURE__ */
|
|
30882
|
+
return /* @__PURE__ */ jsx274("div", { className: cn("pointer-events-none size-full border-4 border-ods-warning", className) });
|
|
30918
30883
|
}
|
|
30919
30884
|
function RemoteSessionPill({ onEndSession }) {
|
|
30920
|
-
return /* @__PURE__ */
|
|
30885
|
+
return /* @__PURE__ */ jsxs217(
|
|
30921
30886
|
"button",
|
|
30922
30887
|
{
|
|
30923
30888
|
type: "button",
|
|
30924
30889
|
className: "flex items-center gap-[var(--spacing-system-xsf)] rounded-b-md bg-ods-warning px-[var(--spacing-system-m)] py-[var(--spacing-system-xs)] text-ods-text-on-accent",
|
|
30925
30890
|
onClick: onEndSession,
|
|
30926
30891
|
children: [
|
|
30927
|
-
/* @__PURE__ */
|
|
30928
|
-
/* @__PURE__ */
|
|
30892
|
+
/* @__PURE__ */ jsx274(MonitorOffIcon, { size: 24, color: "currentColor" }),
|
|
30893
|
+
/* @__PURE__ */ jsx274("span", { className: "whitespace-nowrap text-h3", children: "End Session" })
|
|
30894
|
+
]
|
|
30895
|
+
}
|
|
30896
|
+
);
|
|
30897
|
+
}
|
|
30898
|
+
|
|
30899
|
+
// src/components/features/remote-session/remote-session-keep-modals.tsx
|
|
30900
|
+
import { useState as useState79 } from "react";
|
|
30901
|
+
import { jsx as jsx275, jsxs as jsxs218 } from "react/jsx-runtime";
|
|
30902
|
+
var REMOTE_SESSION_KEEP_REASON_LABELS = {
|
|
30903
|
+
CLIENT_DISPUTE: "Client dispute",
|
|
30904
|
+
INTERNAL_REVIEW: "Internal review",
|
|
30905
|
+
LEGAL_OR_COMPLIANCE: "Legal or compliance request",
|
|
30906
|
+
OTHER: "Other"
|
|
30907
|
+
};
|
|
30908
|
+
var KEEP_REASONS = Object.keys(REMOTE_SESSION_KEEP_REASON_LABELS);
|
|
30909
|
+
var DESCRIPTION_MAX_LENGTH = 500;
|
|
30910
|
+
function KeepNotice({ icon, title, children }) {
|
|
30911
|
+
return /* @__PURE__ */ jsxs218("div", { className: "flex w-full items-start gap-[var(--spacing-system-m)] rounded-md border border-ods-border bg-ods-card p-[var(--spacing-system-m)]", children: [
|
|
30912
|
+
/* @__PURE__ */ jsx275("span", { className: "flex shrink-0 text-ods-text-secondary", children: icon }),
|
|
30913
|
+
/* @__PURE__ */ jsxs218("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
30914
|
+
/* @__PURE__ */ jsx275("p", { className: "text-ods-text-primary text-h3", children: title }),
|
|
30915
|
+
/* @__PURE__ */ jsx275("p", { className: "text-ods-text-secondary text-h4", children })
|
|
30916
|
+
] })
|
|
30917
|
+
] });
|
|
30918
|
+
}
|
|
30919
|
+
function KeepRecordingModal({
|
|
30920
|
+
isOpen,
|
|
30921
|
+
onClose,
|
|
30922
|
+
keptUsage,
|
|
30923
|
+
isPending = false,
|
|
30924
|
+
onConfirm
|
|
30925
|
+
}) {
|
|
30926
|
+
const [reason, setReason] = useState79("");
|
|
30927
|
+
const [description, setDescription] = useState79("");
|
|
30928
|
+
const [seededOpen, setSeededOpen] = useState79(isOpen);
|
|
30929
|
+
if (seededOpen !== isOpen) {
|
|
30930
|
+
setSeededOpen(isOpen);
|
|
30931
|
+
if (isOpen) {
|
|
30932
|
+
setReason("");
|
|
30933
|
+
setDescription("");
|
|
30934
|
+
}
|
|
30935
|
+
}
|
|
30936
|
+
const trimmed = description.trim();
|
|
30937
|
+
const canKeep = reason !== "" && (reason !== "OTHER" || trimmed !== "");
|
|
30938
|
+
const handleKeep = () => {
|
|
30939
|
+
if (!canKeep || isPending) return;
|
|
30940
|
+
onConfirm({ reason, description: reason === "OTHER" ? trimmed : null });
|
|
30941
|
+
};
|
|
30942
|
+
return /* @__PURE__ */ jsxs218(Modal, { isOpen, onClose: isPending ? () => {
|
|
30943
|
+
} : onClose, className: "text-left md:max-w-[600px]", children: [
|
|
30944
|
+
/* @__PURE__ */ jsx275(ModalHeader, { children: /* @__PURE__ */ jsx275(ModalTitle, { children: "Keep this recording" }) }),
|
|
30945
|
+
/* @__PURE__ */ jsxs218(
|
|
30946
|
+
KeepNotice,
|
|
30947
|
+
{
|
|
30948
|
+
icon: /* @__PURE__ */ jsx275(InfoCircleIcon, { size: 24, color: "currentColor" }),
|
|
30949
|
+
title: "This recording won't be deleted automatically",
|
|
30950
|
+
children: [
|
|
30951
|
+
"It stays until you stop keeping it. Kept recordings use ",
|
|
30952
|
+
keptUsage,
|
|
30953
|
+
"."
|
|
30954
|
+
]
|
|
30955
|
+
}
|
|
30956
|
+
),
|
|
30957
|
+
/* @__PURE__ */ jsxs218("div", { className: "flex w-full flex-col gap-[var(--spacing-system-xs)]", children: [
|
|
30958
|
+
/* @__PURE__ */ jsxs218(
|
|
30959
|
+
Select,
|
|
30960
|
+
{
|
|
30961
|
+
value: reason,
|
|
30962
|
+
onValueChange: (value) => setReason(value),
|
|
30963
|
+
disabled: isPending,
|
|
30964
|
+
children: [
|
|
30965
|
+
/* @__PURE__ */ jsx275(SelectTrigger, { label: "Reason", labelVariant: "large", children: /* @__PURE__ */ jsx275(SelectValue, { placeholder: "Select Reason" }) }),
|
|
30966
|
+
/* @__PURE__ */ jsx275(SelectContent, { children: KEEP_REASONS.map((value) => /* @__PURE__ */ jsx275(SelectItem, { value, children: REMOTE_SESSION_KEEP_REASON_LABELS[value] }, value)) })
|
|
30967
|
+
]
|
|
30968
|
+
}
|
|
30969
|
+
),
|
|
30970
|
+
reason === "OTHER" && /* @__PURE__ */ jsx275(
|
|
30971
|
+
Input,
|
|
30972
|
+
{
|
|
30973
|
+
"aria-label": "Reason description",
|
|
30974
|
+
value: description,
|
|
30975
|
+
onChange: (event) => setDescription(event.target.value),
|
|
30976
|
+
placeholder: "Briefly describe what's going on",
|
|
30977
|
+
maxLength: DESCRIPTION_MAX_LENGTH,
|
|
30978
|
+
disabled: isPending
|
|
30979
|
+
}
|
|
30980
|
+
)
|
|
30981
|
+
] }),
|
|
30982
|
+
/* @__PURE__ */ jsxs218(ModalFooter, { children: [
|
|
30983
|
+
/* @__PURE__ */ jsx275(Button, { type: "button", variant: "outline", onClick: onClose, disabled: isPending, className: "flex-1 md:hidden", children: "Cancel" }),
|
|
30984
|
+
/* @__PURE__ */ jsx275("div", { className: "hidden flex-1 md:block" }),
|
|
30985
|
+
/* @__PURE__ */ jsx275(
|
|
30986
|
+
Button,
|
|
30987
|
+
{
|
|
30988
|
+
type: "button",
|
|
30989
|
+
variant: "accent",
|
|
30990
|
+
onClick: handleKeep,
|
|
30991
|
+
loading: isPending,
|
|
30992
|
+
disabled: !canKeep,
|
|
30993
|
+
className: "flex-1",
|
|
30994
|
+
children: "Keep"
|
|
30995
|
+
}
|
|
30996
|
+
)
|
|
30997
|
+
] })
|
|
30998
|
+
] });
|
|
30999
|
+
}
|
|
31000
|
+
function ReleaseKeepingModal({
|
|
31001
|
+
isOpen,
|
|
31002
|
+
onClose,
|
|
31003
|
+
keptBy,
|
|
31004
|
+
keptOn,
|
|
31005
|
+
reason,
|
|
31006
|
+
ticket,
|
|
31007
|
+
expiresOn,
|
|
31008
|
+
dueOn,
|
|
31009
|
+
isPending = false,
|
|
31010
|
+
onConfirm
|
|
31011
|
+
}) {
|
|
31012
|
+
return /* @__PURE__ */ jsxs218(Modal, { isOpen, onClose: isPending ? () => {
|
|
31013
|
+
} : onClose, className: "text-left md:max-w-[600px]", children: [
|
|
31014
|
+
/* @__PURE__ */ jsx275(ModalHeader, { children: /* @__PURE__ */ jsx275(ModalTitle, { children: "Release Keeping" }) }),
|
|
31015
|
+
/* @__PURE__ */ jsxs218("div", { className: "flex w-full flex-col gap-[var(--spacing-system-xsf)] text-ods-text-primary text-h4", children: [
|
|
31016
|
+
/* @__PURE__ */ jsxs218("p", { children: [
|
|
31017
|
+
"Kept by ",
|
|
31018
|
+
keptBy,
|
|
31019
|
+
" on ",
|
|
31020
|
+
keptOn,
|
|
31021
|
+
" for ",
|
|
31022
|
+
reason,
|
|
31023
|
+
"."
|
|
31024
|
+
] }),
|
|
31025
|
+
ticket && /* @__PURE__ */ jsxs218("p", { children: [
|
|
31026
|
+
"Ticket: ",
|
|
31027
|
+
ticket
|
|
31028
|
+
] })
|
|
31029
|
+
] }),
|
|
31030
|
+
/* @__PURE__ */ jsx275(KeepNotice, { icon: /* @__PURE__ */ jsx275(HourglassIcon, { size: 24, color: "currentColor" }), title: `It will expire on ${expiresOn}`, children: dueOn ? `It was due to expire on ${dueOn}. Releasing gives it 3 days' grace, and it shows amber until then. Whoever placed the Keep is reminded the day before it goes. Nothing is deleted now.` : "Nothing is deleted now." }),
|
|
31031
|
+
/* @__PURE__ */ jsxs218(ModalFooter, { children: [
|
|
31032
|
+
/* @__PURE__ */ jsx275(Button, { type: "button", variant: "outline", onClick: onClose, disabled: isPending, className: "flex-1 md:hidden", children: "Cancel" }),
|
|
31033
|
+
/* @__PURE__ */ jsx275("div", { className: "hidden flex-1 md:block" }),
|
|
31034
|
+
/* @__PURE__ */ jsx275(Button, { type: "button", variant: "accent", onClick: onConfirm, loading: isPending, className: "flex-1", children: "Release Keeping" })
|
|
31035
|
+
] })
|
|
31036
|
+
] });
|
|
31037
|
+
}
|
|
31038
|
+
|
|
31039
|
+
// src/components/features/remote-session/remote-session-events.tsx
|
|
31040
|
+
import { jsx as jsx276, jsxs as jsxs219 } from "react/jsx-runtime";
|
|
31041
|
+
function formatRemoteSessionOffset(offsetMs) {
|
|
31042
|
+
const total = Math.max(0, Math.floor(offsetMs / 1e3));
|
|
31043
|
+
const hours = Math.floor(total / 3600);
|
|
31044
|
+
const minutes = String(Math.floor(total % 3600 / 60)).padStart(2, "0");
|
|
31045
|
+
const seconds = String(total % 60).padStart(2, "0");
|
|
31046
|
+
return hours > 0 ? `${hours}:${minutes}:${seconds}` : `${minutes}:${seconds}`;
|
|
31047
|
+
}
|
|
31048
|
+
function RemoteSessionEventList({ events, activeEventId, onSelect, className }) {
|
|
31049
|
+
return /* @__PURE__ */ jsxs219("section", { className: cn("flex w-full flex-col gap-[var(--spacing-system-xxs)]", className), children: [
|
|
31050
|
+
/* @__PURE__ */ jsx276("h2", { className: "text-ods-text-secondary text-h5", children: "Session Events" }),
|
|
31051
|
+
/* @__PURE__ */ jsx276("ol", { className: "flex w-full flex-col gap-[var(--spacing-system-xxs)] rounded-md border border-ods-border bg-ods-card p-[var(--spacing-system-m)]", children: events.map((event) => /* @__PURE__ */ jsx276("li", { children: /* @__PURE__ */ jsxs219(
|
|
31052
|
+
"button",
|
|
31053
|
+
{
|
|
31054
|
+
type: "button",
|
|
31055
|
+
"aria-current": event.id === activeEventId || void 0,
|
|
31056
|
+
onClick: () => onSelect?.(event),
|
|
31057
|
+
className: cn(
|
|
31058
|
+
"flex w-full items-start gap-[var(--spacing-system-xxs)] rounded-md p-[var(--spacing-system-xxs)] text-left outline-none transition-colors",
|
|
31059
|
+
"hover:bg-ods-bg-hover focus-visible:ring-2 focus-visible:ring-ods-focus",
|
|
31060
|
+
event.id === activeEventId && "bg-ods-border hover:bg-ods-border"
|
|
31061
|
+
),
|
|
31062
|
+
children: [
|
|
31063
|
+
/* @__PURE__ */ jsx276("span", { className: "w-[84px] shrink-0 text-ods-text-secondary text-h4", children: formatRemoteSessionOffset(event.offsetMs) }),
|
|
31064
|
+
/* @__PURE__ */ jsxs219("span", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
31065
|
+
/* @__PURE__ */ jsx276("span", { className: "text-ods-text-primary text-h4", children: event.title }),
|
|
31066
|
+
event.detail && /* @__PURE__ */ jsx276("span", { className: "text-ods-text-secondary text-h6", children: event.detail })
|
|
31067
|
+
] })
|
|
31068
|
+
]
|
|
31069
|
+
}
|
|
31070
|
+
) }, event.id)) })
|
|
31071
|
+
] });
|
|
31072
|
+
}
|
|
31073
|
+
function RemoteSessionTimelineMarkers({
|
|
31074
|
+
events,
|
|
31075
|
+
durationMs,
|
|
31076
|
+
onSelect,
|
|
31077
|
+
className
|
|
31078
|
+
}) {
|
|
31079
|
+
if (durationMs <= 0) return null;
|
|
31080
|
+
return /* @__PURE__ */ jsx276("div", { className: cn("relative h-4 w-full", className), children: events.map((event) => {
|
|
31081
|
+
const share = Math.min(1, Math.max(0, event.offsetMs / durationMs));
|
|
31082
|
+
const label = `${event.title} at ${formatRemoteSessionOffset(event.offsetMs)}`;
|
|
31083
|
+
return /* @__PURE__ */ jsx276(
|
|
31084
|
+
"button",
|
|
31085
|
+
{
|
|
31086
|
+
type: "button",
|
|
31087
|
+
"aria-label": label,
|
|
31088
|
+
title: label,
|
|
31089
|
+
onClick: () => onSelect?.(event),
|
|
31090
|
+
style: { left: `${share * 100}%` },
|
|
31091
|
+
className: "absolute top-0 h-4 w-1 -translate-x-1/2 rounded-md bg-ods-text-secondary outline-none transition-colors hover:bg-ods-text-primary focus-visible:ring-2 focus-visible:ring-ods-focus"
|
|
31092
|
+
},
|
|
31093
|
+
event.id
|
|
31094
|
+
);
|
|
31095
|
+
}) });
|
|
31096
|
+
}
|
|
31097
|
+
|
|
31098
|
+
// src/components/features/remote-session/remote-session-status.tsx
|
|
31099
|
+
import { jsx as jsx277, jsxs as jsxs220 } from "react/jsx-runtime";
|
|
31100
|
+
function LiveDot() {
|
|
31101
|
+
return /* @__PURE__ */ jsx277("span", { "aria-hidden": true, className: "size-2 animate-live-pulse rounded-full bg-current motion-reduce:animate-none" });
|
|
31102
|
+
}
|
|
31103
|
+
var STATUS_TAG = {
|
|
31104
|
+
live: { label: "Live", variant: "critical" },
|
|
31105
|
+
processing: { label: "Processing", variant: "warning" },
|
|
31106
|
+
failed: { label: "Failed", variant: "error" }
|
|
31107
|
+
};
|
|
31108
|
+
function RemoteSessionStatusTag({ status, className }) {
|
|
31109
|
+
const { label, variant } = STATUS_TAG[status];
|
|
31110
|
+
return /* @__PURE__ */ jsx277(
|
|
31111
|
+
Tag,
|
|
31112
|
+
{
|
|
31113
|
+
label,
|
|
31114
|
+
variant,
|
|
31115
|
+
icon: status === "live" ? /* @__PURE__ */ jsx277(LiveDot, {}) : void 0,
|
|
31116
|
+
className: cn("pointer-events-none shrink-0", className)
|
|
31117
|
+
}
|
|
31118
|
+
);
|
|
31119
|
+
}
|
|
31120
|
+
function RemoteSessionExpiry(props) {
|
|
31121
|
+
const { className } = props;
|
|
31122
|
+
if (props.state === "none") {
|
|
31123
|
+
return /* @__PURE__ */ jsx277("p", { className: cn("text-ods-text-primary text-h4", className), children: "-" });
|
|
31124
|
+
}
|
|
31125
|
+
if (props.state === "expired") {
|
|
31126
|
+
return /* @__PURE__ */ jsx277("p", { className: cn("text-ods-text-secondary text-h4", className), children: "Expired" });
|
|
31127
|
+
}
|
|
31128
|
+
if (props.state === "kept") {
|
|
31129
|
+
return /* @__PURE__ */ jsxs220("div", { className: cn("flex min-w-0 flex-col", className), children: [
|
|
31130
|
+
/* @__PURE__ */ jsxs220("p", { className: "flex items-center gap-[var(--spacing-system-xxs)] text-ods-text-primary text-h4", children: [
|
|
31131
|
+
/* @__PURE__ */ jsx277(LockIcon, { size: 24, color: "currentColor", className: "shrink-0" }),
|
|
31132
|
+
"Kept"
|
|
31133
|
+
] }),
|
|
31134
|
+
/* @__PURE__ */ jsxs220("p", { className: "truncate text-ods-text-secondary text-h6", children: [
|
|
31135
|
+
"Kept by ",
|
|
31136
|
+
props.keptBy,
|
|
31137
|
+
" \xB7 ",
|
|
31138
|
+
props.reason
|
|
31139
|
+
] })
|
|
31140
|
+
] });
|
|
31141
|
+
}
|
|
31142
|
+
return /* @__PURE__ */ jsxs220("div", { className: cn("flex min-w-0 flex-col", className), children: [
|
|
31143
|
+
/* @__PURE__ */ jsx277("p", { className: "text-ods-text-primary text-h4", children: props.date }),
|
|
31144
|
+
props.remaining && /* @__PURE__ */ jsx277("p", { className: "truncate text-ods-text-secondary text-h6", children: props.remaining })
|
|
31145
|
+
] });
|
|
31146
|
+
}
|
|
31147
|
+
function RemoteSessionStorageAlert({ scope, capacity, className }) {
|
|
31148
|
+
const message = scope === "session" ? "This session isn't being recorded. Recording storage is full. New sessions aren't recorded until space is freed." : `Recording storage full. New sessions aren't recorded.${capacity ? ` All ${capacity} of recording storage is used.` : ""}`;
|
|
31149
|
+
return /* @__PURE__ */ jsxs220(
|
|
31150
|
+
"div",
|
|
31151
|
+
{
|
|
31152
|
+
role: "alert",
|
|
31153
|
+
className: cn(
|
|
31154
|
+
"flex w-full items-start gap-[var(--spacing-system-m)] rounded-md bg-ods-warning-secondary p-[var(--spacing-system-s)] text-ods-warning",
|
|
31155
|
+
className
|
|
31156
|
+
),
|
|
31157
|
+
children: [
|
|
31158
|
+
/* @__PURE__ */ jsx277(AlertTriangleIcon, { size: 24, color: "currentColor", className: "shrink-0" }),
|
|
31159
|
+
/* @__PURE__ */ jsx277("p", { className: "min-w-0 flex-1 text-h3", children: message })
|
|
30929
31160
|
]
|
|
30930
31161
|
}
|
|
30931
31162
|
);
|
|
@@ -30935,7 +31166,7 @@ function RemoteSessionPill({ onEndSession }) {
|
|
|
30935
31166
|
import { combine as combine3 } from "@atlaskit/pragmatic-drag-and-drop/combine";
|
|
30936
31167
|
import { monitorForElements } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
|
|
30937
31168
|
import { preventUnhandled } from "@atlaskit/pragmatic-drag-and-drop/utils/prevent-unhandled";
|
|
30938
|
-
import { Fragment as Fragment50, useCallback as useCallback29, useEffect as useEffect50, useMemo as useMemo25, useRef as useRef45, useState as
|
|
31169
|
+
import { Fragment as Fragment50, useCallback as useCallback29, useEffect as useEffect50, useMemo as useMemo25, useRef as useRef45, useState as useState84 } from "react";
|
|
30939
31170
|
import { createPortal } from "react-dom";
|
|
30940
31171
|
|
|
30941
31172
|
// src/utils/auto-scroll-ancestors.ts
|
|
@@ -31048,10 +31279,10 @@ function aimToChange(columns, ticketId, aim) {
|
|
|
31048
31279
|
// src/components/features/board/board-column.tsx
|
|
31049
31280
|
import { attachClosestEdge as attachClosestEdge2 } from "@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge";
|
|
31050
31281
|
import { dropTargetForElements as dropTargetForElements2 } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
|
|
31051
|
-
import { memo as memo6, useCallback as useCallback27, useEffect as useEffect48, useRef as useRef43, useState as
|
|
31282
|
+
import { memo as memo6, useCallback as useCallback27, useEffect as useEffect48, useRef as useRef43, useState as useState82 } from "react";
|
|
31052
31283
|
|
|
31053
31284
|
// src/components/features/board/board-column-header.tsx
|
|
31054
|
-
import { jsx as
|
|
31285
|
+
import { jsx as jsx278, jsxs as jsxs221 } from "react/jsx-runtime";
|
|
31055
31286
|
function BoardColumnHeader({
|
|
31056
31287
|
column,
|
|
31057
31288
|
collapsed = false,
|
|
@@ -31064,8 +31295,8 @@ function BoardColumnHeader({
|
|
|
31064
31295
|
const useStatusVariant = resolveTicketStatus(tagStatus) !== null;
|
|
31065
31296
|
const actionClass = "h-8 w-8 p-0 md:h-8 md:w-8";
|
|
31066
31297
|
if (collapsed) {
|
|
31067
|
-
return /* @__PURE__ */
|
|
31068
|
-
onToggleCollapse && /* @__PURE__ */
|
|
31298
|
+
return /* @__PURE__ */ jsxs221("div", { className: "flex h-full flex-col items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
31299
|
+
onToggleCollapse && /* @__PURE__ */ jsx278(
|
|
31069
31300
|
Button,
|
|
31070
31301
|
{
|
|
31071
31302
|
variant: "transparent",
|
|
@@ -31073,10 +31304,10 @@ function BoardColumnHeader({
|
|
|
31073
31304
|
className: actionClass,
|
|
31074
31305
|
onClick: onToggleCollapse,
|
|
31075
31306
|
"aria-label": "Expand column",
|
|
31076
|
-
children: /* @__PURE__ */
|
|
31307
|
+
children: /* @__PURE__ */ jsx278(Arrow02RightIcon, { className: "h-6 w-6 text-ods-text-secondary" })
|
|
31077
31308
|
}
|
|
31078
31309
|
),
|
|
31079
|
-
/* @__PURE__ */
|
|
31310
|
+
/* @__PURE__ */ jsx278(
|
|
31080
31311
|
TicketStatusTag,
|
|
31081
31312
|
{
|
|
31082
31313
|
status: tagStatus,
|
|
@@ -31085,17 +31316,17 @@ function BoardColumnHeader({
|
|
|
31085
31316
|
className: "h-auto [writing-mode:vertical-rl]"
|
|
31086
31317
|
}
|
|
31087
31318
|
),
|
|
31088
|
-
/* @__PURE__ */
|
|
31319
|
+
/* @__PURE__ */ jsx278("span", { className: "text-h5", style: { color: column.color }, children: count })
|
|
31089
31320
|
] });
|
|
31090
31321
|
}
|
|
31091
|
-
return /* @__PURE__ */
|
|
31092
|
-
/* @__PURE__ */
|
|
31093
|
-
/* @__PURE__ */
|
|
31094
|
-
/* @__PURE__ */
|
|
31322
|
+
return /* @__PURE__ */ jsxs221("div", { className: "flex items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
31323
|
+
/* @__PURE__ */ jsxs221("div", { className: "flex min-w-0 flex-1 items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
31324
|
+
/* @__PURE__ */ jsx278(TicketStatusTag, { status: tagStatus, label: column.label, color: useStatusVariant ? void 0 : column.color }),
|
|
31325
|
+
/* @__PURE__ */ jsx278("span", { className: "text-h5", style: useStatusVariant ? void 0 : { color: column.color }, children: count })
|
|
31095
31326
|
] }),
|
|
31096
|
-
/* @__PURE__ */
|
|
31097
|
-
column.tooltip && /* @__PURE__ */
|
|
31098
|
-
onToggleCollapse && /* @__PURE__ */
|
|
31327
|
+
/* @__PURE__ */ jsxs221("div", { className: "flex shrink-0 items-center gap-[var(--spacing-system-xxs)]", children: [
|
|
31328
|
+
column.tooltip && /* @__PURE__ */ jsx278(TouchFriendlyTooltip, { content: column.tooltip, side: "bottom", children: /* @__PURE__ */ jsx278(Button, { variant: "transparent", size: "icon", className: actionClass, "aria-label": column.tooltip, children: /* @__PURE__ */ jsx278(InfoCircleIcon, { className: "h-6 w-6 text-ods-text-secondary" }) }) }),
|
|
31329
|
+
onToggleCollapse && /* @__PURE__ */ jsx278(
|
|
31099
31330
|
Button,
|
|
31100
31331
|
{
|
|
31101
31332
|
variant: "transparent",
|
|
@@ -31103,10 +31334,10 @@ function BoardColumnHeader({
|
|
|
31103
31334
|
className: actionClass,
|
|
31104
31335
|
onClick: onToggleCollapse,
|
|
31105
31336
|
"aria-label": "Collapse column",
|
|
31106
|
-
children: /* @__PURE__ */
|
|
31337
|
+
children: /* @__PURE__ */ jsx278(Arrow02LeftIcon, { className: "h-6 w-6 text-ods-text-secondary" })
|
|
31107
31338
|
}
|
|
31108
31339
|
),
|
|
31109
|
-
onArchive && /* @__PURE__ */
|
|
31340
|
+
onArchive && /* @__PURE__ */ jsx278(
|
|
31110
31341
|
Button,
|
|
31111
31342
|
{
|
|
31112
31343
|
variant: "transparent",
|
|
@@ -31114,10 +31345,10 @@ function BoardColumnHeader({
|
|
|
31114
31345
|
className: actionClass,
|
|
31115
31346
|
onClick: onArchive,
|
|
31116
31347
|
"aria-label": "Archive resolved tickets",
|
|
31117
|
-
children: /* @__PURE__ */
|
|
31348
|
+
children: /* @__PURE__ */ jsx278(BoxArchiveIcon, { className: "h-6 w-6 text-ods-text-secondary" })
|
|
31118
31349
|
}
|
|
31119
31350
|
),
|
|
31120
|
-
onAddTicket && /* @__PURE__ */
|
|
31351
|
+
onAddTicket && /* @__PURE__ */ jsx278(
|
|
31121
31352
|
Button,
|
|
31122
31353
|
{
|
|
31123
31354
|
variant: "transparent",
|
|
@@ -31125,7 +31356,7 @@ function BoardColumnHeader({
|
|
|
31125
31356
|
className: actionClass,
|
|
31126
31357
|
onClick: onAddTicket,
|
|
31127
31358
|
"aria-label": "Add ticket",
|
|
31128
|
-
children: /* @__PURE__ */
|
|
31359
|
+
children: /* @__PURE__ */ jsx278(PlusIcon, { className: "h-6 w-6 text-ods-text-secondary" })
|
|
31129
31360
|
}
|
|
31130
31361
|
)
|
|
31131
31362
|
] })
|
|
@@ -31224,7 +31455,7 @@ import {
|
|
|
31224
31455
|
useEffect as useEffect47,
|
|
31225
31456
|
useMemo as useMemo24,
|
|
31226
31457
|
useRef as useRef42,
|
|
31227
|
-
useState as
|
|
31458
|
+
useState as useState81
|
|
31228
31459
|
} from "react";
|
|
31229
31460
|
|
|
31230
31461
|
// src/utils/drag-effect.ts
|
|
@@ -31238,14 +31469,14 @@ function holdMoveDragEffect(element) {
|
|
|
31238
31469
|
}
|
|
31239
31470
|
|
|
31240
31471
|
// src/components/features/board/board-ticket-approval.tsx
|
|
31241
|
-
import { useState as
|
|
31242
|
-
import { jsx as
|
|
31472
|
+
import { useState as useState80 } from "react";
|
|
31473
|
+
import { jsx as jsx279, jsxs as jsxs222 } from "react/jsx-runtime";
|
|
31243
31474
|
function BoardTicketApproval({ pendingApproval, onApprove, onReject }) {
|
|
31244
|
-
const [expanded, setExpanded] =
|
|
31475
|
+
const [expanded, setExpanded] = useState80(false);
|
|
31245
31476
|
const { innerRef, containerStyle } = useCollapsible({ expanded });
|
|
31246
31477
|
const isAdmin = pendingApproval.approvalType === "ADMIN";
|
|
31247
|
-
return /* @__PURE__ */
|
|
31248
|
-
/* @__PURE__ */
|
|
31478
|
+
return /* @__PURE__ */ jsxs222("div", { className: "pointer-events-auto flex flex-col", children: [
|
|
31479
|
+
/* @__PURE__ */ jsxs222(
|
|
31249
31480
|
"button",
|
|
31250
31481
|
{
|
|
31251
31482
|
type: "button",
|
|
@@ -31253,7 +31484,7 @@ function BoardTicketApproval({ pendingApproval, onApprove, onReject }) {
|
|
|
31253
31484
|
"aria-expanded": expanded,
|
|
31254
31485
|
className: "flex w-full cursor-pointer items-center gap-[var(--spacing-system-xxs)] text-h6",
|
|
31255
31486
|
children: [
|
|
31256
|
-
/* @__PURE__ */
|
|
31487
|
+
/* @__PURE__ */ jsxs222(
|
|
31257
31488
|
"span",
|
|
31258
31489
|
{
|
|
31259
31490
|
className: cn(
|
|
@@ -31261,16 +31492,16 @@ function BoardTicketApproval({ pendingApproval, onApprove, onReject }) {
|
|
|
31261
31492
|
isAdmin ? "text-ods-open-yellow" : "text-ods-text-secondary"
|
|
31262
31493
|
),
|
|
31263
31494
|
children: [
|
|
31264
|
-
isAdmin ? /* @__PURE__ */
|
|
31265
|
-
/* @__PURE__ */
|
|
31495
|
+
isAdmin ? /* @__PURE__ */ jsx279(ShieldCheckIcon, { className: "size-4 shrink-0" }) : /* @__PURE__ */ jsx279(DotsLoaderIcon, { size: 16, className: "shrink-0" }),
|
|
31496
|
+
/* @__PURE__ */ jsx279("span", { className: "flex-1 truncate text-left", children: isAdmin ? "Technician approval required" : "Pending client approval" })
|
|
31266
31497
|
]
|
|
31267
31498
|
}
|
|
31268
31499
|
),
|
|
31269
|
-
expanded ? /* @__PURE__ */
|
|
31500
|
+
expanded ? /* @__PURE__ */ jsx279(Chevron02UpIcon, { className: "size-4 shrink-0 text-ods-text-secondary" }) : /* @__PURE__ */ jsx279(Chevron02DownIcon, { className: "size-4 shrink-0 text-ods-text-secondary" })
|
|
31270
31501
|
]
|
|
31271
31502
|
}
|
|
31272
31503
|
),
|
|
31273
|
-
/* @__PURE__ */
|
|
31504
|
+
/* @__PURE__ */ jsx279("div", { style: containerStyle, children: /* @__PURE__ */ jsx279("div", { ref: innerRef, className: "pt-[var(--spacing-system-xs)]", children: /* @__PURE__ */ jsx279(
|
|
31274
31505
|
ApprovalBatchMessage,
|
|
31275
31506
|
{
|
|
31276
31507
|
className: "mb-0",
|
|
@@ -31323,7 +31554,7 @@ function hasMoveSettled(columns, move) {
|
|
|
31323
31554
|
}
|
|
31324
31555
|
|
|
31325
31556
|
// src/components/features/board/ticket-card.tsx
|
|
31326
|
-
import { Fragment as Fragment48, jsx as
|
|
31557
|
+
import { Fragment as Fragment48, jsx as jsx280, jsxs as jsxs223 } from "react/jsx-runtime";
|
|
31327
31558
|
var PRIORITY_COLOR_CLASS = {
|
|
31328
31559
|
low: "text-ods-text-secondary",
|
|
31329
31560
|
medium: "text-ods-info",
|
|
@@ -31355,24 +31586,24 @@ function TicketCardBody({
|
|
|
31355
31586
|
const showDeviceRow = !!(ticket.deviceHostnames?.length || ticket.organizationName);
|
|
31356
31587
|
const deviceText = [ticket.deviceHostnames?.join(", "), ticket.organizationName].filter(Boolean).join(", ");
|
|
31357
31588
|
const hasRightSection = !!(ticket.priority || ticket.assignees?.length || renderAssignSlot);
|
|
31358
|
-
const rightSection = hasRightSection ? /* @__PURE__ */
|
|
31359
|
-
ticket.priority && /* @__PURE__ */
|
|
31589
|
+
const rightSection = hasRightSection ? /* @__PURE__ */ jsxs223("div", { className: "pointer-events-auto flex shrink-0 items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
31590
|
+
ticket.priority && /* @__PURE__ */ jsx280(
|
|
31360
31591
|
Flag02Icon,
|
|
31361
31592
|
{
|
|
31362
31593
|
className: cn("size-4", PRIORITY_COLOR_CLASS[ticket.priority]),
|
|
31363
31594
|
"aria-label": `Priority: ${ticket.priority}`
|
|
31364
31595
|
}
|
|
31365
31596
|
),
|
|
31366
|
-
renderAssignSlot ? renderAssignSlot(ticket) : ticket.assignees?.length ? /* @__PURE__ */
|
|
31597
|
+
renderAssignSlot ? renderAssignSlot(ticket) : ticket.assignees?.length ? /* @__PURE__ */ jsxs223("div", { className: "flex -space-x-2", children: [
|
|
31367
31598
|
ticket.assignees.slice(0, MAX_VISIBLE_ASSIGNEES).map(
|
|
31368
|
-
(a) => a.deleted ? /* @__PURE__ */
|
|
31599
|
+
(a) => a.deleted ? /* @__PURE__ */ jsx280(
|
|
31369
31600
|
DeletedUserAvatar,
|
|
31370
31601
|
{
|
|
31371
31602
|
size: "sm",
|
|
31372
31603
|
accessibleLabel: `Deleted user: ${a.name ?? a.initials ?? a.id}`
|
|
31373
31604
|
},
|
|
31374
31605
|
a.id
|
|
31375
|
-
) : /* @__PURE__ */
|
|
31606
|
+
) : /* @__PURE__ */ jsx280(
|
|
31376
31607
|
SquareAvatar,
|
|
31377
31608
|
{
|
|
31378
31609
|
src: a.avatarUrl,
|
|
@@ -31384,7 +31615,7 @@ function TicketCardBody({
|
|
|
31384
31615
|
a.id
|
|
31385
31616
|
)
|
|
31386
31617
|
),
|
|
31387
|
-
ticket.assignees.length > MAX_VISIBLE_ASSIGNEES && /* @__PURE__ */
|
|
31618
|
+
ticket.assignees.length > MAX_VISIBLE_ASSIGNEES && /* @__PURE__ */ jsxs223("div", { className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-full border border-ods-border bg-ods-bg text-ods-text-secondary text-h6", children: [
|
|
31388
31619
|
"+",
|
|
31389
31620
|
ticket.assignees.length - MAX_VISIBLE_ASSIGNEES
|
|
31390
31621
|
] })
|
|
@@ -31394,7 +31625,7 @@ function TicketCardBody({
|
|
|
31394
31625
|
const tooltipLabel = ticket.createdAt ? formatTicketFullTimestamp(ticket.createdAt) : null;
|
|
31395
31626
|
const metaLabel = [ticket.ticketNumber || null, timestampLabel].filter(Boolean).join(" \u2022 ");
|
|
31396
31627
|
const metaClass = "truncate text-ods-text-secondary text-h6";
|
|
31397
|
-
const meta = href ? /* @__PURE__ */
|
|
31628
|
+
const meta = href ? /* @__PURE__ */ jsx280(
|
|
31398
31629
|
next_link_default,
|
|
31399
31630
|
{
|
|
31400
31631
|
href,
|
|
@@ -31405,28 +31636,28 @@ function TicketCardBody({
|
|
|
31405
31636
|
className: cn("pointer-events-auto block", metaClass),
|
|
31406
31637
|
children: metaLabel
|
|
31407
31638
|
}
|
|
31408
|
-
) : /* @__PURE__ */
|
|
31409
|
-
return /* @__PURE__ */
|
|
31410
|
-
/* @__PURE__ */
|
|
31411
|
-
/* @__PURE__ */
|
|
31412
|
-
/* @__PURE__ */
|
|
31413
|
-
showDeviceRow && /* @__PURE__ */
|
|
31414
|
-
/* @__PURE__ */
|
|
31415
|
-
/* @__PURE__ */
|
|
31639
|
+
) : /* @__PURE__ */ jsx280("p", { className: cn(tooltipLabel && "pointer-events-auto", metaClass), children: metaLabel });
|
|
31640
|
+
return /* @__PURE__ */ jsxs223(Fragment48, { children: [
|
|
31641
|
+
/* @__PURE__ */ jsxs223("div", { className: "flex items-start gap-[var(--spacing-system-sf)]", children: [
|
|
31642
|
+
/* @__PURE__ */ jsxs223("div", { className: "flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-zero)]", title: ticket.title, children: [
|
|
31643
|
+
/* @__PURE__ */ jsx280("p", { className: "truncate text-ods-text-primary text-h3", children: ticket.title }),
|
|
31644
|
+
showDeviceRow && /* @__PURE__ */ jsxs223("div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xxs)] text-ods-text-secondary text-h6", children: [
|
|
31645
|
+
/* @__PURE__ */ jsx280(LaptopIcon, { className: "size-4 shrink-0" }),
|
|
31646
|
+
/* @__PURE__ */ jsx280("span", { className: "truncate", title: deviceText, children: deviceText })
|
|
31416
31647
|
] })
|
|
31417
31648
|
] }),
|
|
31418
31649
|
rightSection
|
|
31419
31650
|
] }),
|
|
31420
|
-
ticket.tags?.length ? /* @__PURE__ */
|
|
31421
|
-
metaLabel && (tooltipLabel ? /* @__PURE__ */
|
|
31422
|
-
/* @__PURE__ */
|
|
31423
|
-
/* @__PURE__ */
|
|
31651
|
+
ticket.tags?.length ? /* @__PURE__ */ jsx280(TicketTagRow, { tags: ticket.tags }) : null,
|
|
31652
|
+
metaLabel && (tooltipLabel ? /* @__PURE__ */ jsx280(TooltipProvider, { children: /* @__PURE__ */ jsxs223(Tooltip, { children: [
|
|
31653
|
+
/* @__PURE__ */ jsx280(TooltipTrigger, { asChild: true, children: meta }),
|
|
31654
|
+
/* @__PURE__ */ jsx280(TooltipContent, { children: tooltipLabel })
|
|
31424
31655
|
] }) }) : meta),
|
|
31425
|
-
ticket.escalatedByUser && /* @__PURE__ */
|
|
31426
|
-
/* @__PURE__ */
|
|
31427
|
-
/* @__PURE__ */
|
|
31656
|
+
ticket.escalatedByUser && /* @__PURE__ */ jsxs223("div", { className: "flex items-center gap-[var(--spacing-system-xxs)] text-ods-open-yellow text-h6", children: [
|
|
31657
|
+
/* @__PURE__ */ jsx280(UserCheckIcon, { className: "size-4 shrink-0" }),
|
|
31658
|
+
/* @__PURE__ */ jsx280("span", { className: "truncate", children: "Escalated by User" })
|
|
31428
31659
|
] }),
|
|
31429
|
-
ticket.activity && /* @__PURE__ */
|
|
31660
|
+
ticket.activity && /* @__PURE__ */ jsxs223(
|
|
31430
31661
|
"div",
|
|
31431
31662
|
{
|
|
31432
31663
|
className: cn(
|
|
@@ -31434,32 +31665,32 @@ function TicketCardBody({
|
|
|
31434
31665
|
ticket.activity.kind === "stale" ? "text-ods-open-yellow" : "text-ods-text-secondary"
|
|
31435
31666
|
),
|
|
31436
31667
|
children: [
|
|
31437
|
-
ticket.activity.kind === "stale" ? /* @__PURE__ */
|
|
31438
|
-
/* @__PURE__ */
|
|
31668
|
+
ticket.activity.kind === "stale" ? /* @__PURE__ */ jsx280(ClockIcon, { className: "size-4 shrink-0" }) : /* @__PURE__ */ jsx280(DotsLoaderIcon, { className: "size-4 shrink-0" }),
|
|
31669
|
+
/* @__PURE__ */ jsx280("span", { className: "truncate", children: ticket.activity.label ?? ACTIVITY_DEFAULT_LABEL[ticket.activity.kind] })
|
|
31439
31670
|
]
|
|
31440
31671
|
}
|
|
31441
31672
|
),
|
|
31442
|
-
showNewMessage && /* @__PURE__ */
|
|
31673
|
+
showNewMessage && /* @__PURE__ */ jsx280(
|
|
31443
31674
|
Tag,
|
|
31444
31675
|
{
|
|
31445
31676
|
label: "New Message",
|
|
31446
|
-
icon: /* @__PURE__ */
|
|
31677
|
+
icon: /* @__PURE__ */ jsx280(MessagesIcon, { size: 16, color: newMessageTextColor }),
|
|
31447
31678
|
className: "w-fit shrink-0",
|
|
31448
31679
|
style: { backgroundColor: columnColor, color: newMessageTextColor }
|
|
31449
31680
|
}
|
|
31450
31681
|
),
|
|
31451
|
-
ticket.pendingApproval && /* @__PURE__ */
|
|
31682
|
+
ticket.pendingApproval && /* @__PURE__ */ jsx280(BoardTicketApproval, { pendingApproval: ticket.pendingApproval, onApprove, onReject })
|
|
31452
31683
|
] });
|
|
31453
31684
|
}
|
|
31454
31685
|
function TicketCardView({ className, style, ...bodyProps }) {
|
|
31455
31686
|
const { ticket, columnColor } = bodyProps;
|
|
31456
31687
|
const showNewMessage = !!ticket.hasNewMessage && !!columnColor;
|
|
31457
|
-
return /* @__PURE__ */
|
|
31688
|
+
return /* @__PURE__ */ jsx280(
|
|
31458
31689
|
"div",
|
|
31459
31690
|
{
|
|
31460
31691
|
className: cn(TICKET_CARD_SHELL, className),
|
|
31461
31692
|
style: showNewMessage ? { borderColor: columnColor, ...style } : style,
|
|
31462
|
-
children: /* @__PURE__ */
|
|
31693
|
+
children: /* @__PURE__ */ jsx280("div", { className: "relative z-10 flex flex-col gap-[var(--spacing-system-sf)]", children: /* @__PURE__ */ jsx280(TicketCardBody, { ...bodyProps }) })
|
|
31463
31694
|
}
|
|
31464
31695
|
);
|
|
31465
31696
|
}
|
|
@@ -31480,7 +31711,7 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
31480
31711
|
useEffect47(() => {
|
|
31481
31712
|
ticketRef.current = ticket;
|
|
31482
31713
|
});
|
|
31483
|
-
const [isDragging, setIsDragging] =
|
|
31714
|
+
const [isDragging, setIsDragging] = useState81(false);
|
|
31484
31715
|
const isLanding = useIsLanding(ticket.id);
|
|
31485
31716
|
const aim = useDropAim();
|
|
31486
31717
|
const closestEdge = aim && aim.columnId === columnId && aim.ticketId === ticket.id ? aim.edge : null;
|
|
@@ -31574,7 +31805,7 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
31574
31805
|
[isDragging]
|
|
31575
31806
|
);
|
|
31576
31807
|
const body = useMemo24(
|
|
31577
|
-
() => /* @__PURE__ */
|
|
31808
|
+
() => /* @__PURE__ */ jsx280(
|
|
31578
31809
|
TicketCardBody,
|
|
31579
31810
|
{
|
|
31580
31811
|
ticket,
|
|
@@ -31603,7 +31834,7 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
31603
31834
|
} else if (isLanding) {
|
|
31604
31835
|
style.visibility = "hidden";
|
|
31605
31836
|
}
|
|
31606
|
-
const insertionLine = closestEdge ? /* @__PURE__ */
|
|
31837
|
+
const insertionLine = closestEdge ? /* @__PURE__ */ jsx280(
|
|
31607
31838
|
"span",
|
|
31608
31839
|
{
|
|
31609
31840
|
"aria-hidden": true,
|
|
@@ -31622,9 +31853,9 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
31622
31853
|
}
|
|
31623
31854
|
) : null;
|
|
31624
31855
|
if (href) {
|
|
31625
|
-
return /* @__PURE__ */
|
|
31856
|
+
return /* @__PURE__ */ jsxs223("div", { ...outerProps, children: [
|
|
31626
31857
|
insertionLine,
|
|
31627
|
-
/* @__PURE__ */
|
|
31858
|
+
/* @__PURE__ */ jsx280(
|
|
31628
31859
|
next_link_default,
|
|
31629
31860
|
{
|
|
31630
31861
|
href,
|
|
@@ -31637,12 +31868,12 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
31637
31868
|
className: "absolute inset-0 z-0 rounded-md focus-visible:outline-none"
|
|
31638
31869
|
}
|
|
31639
31870
|
),
|
|
31640
|
-
/* @__PURE__ */
|
|
31871
|
+
/* @__PURE__ */ jsx280("div", { className: cn("pointer-events-none", innerWrapperClass), children: body })
|
|
31641
31872
|
] });
|
|
31642
31873
|
}
|
|
31643
|
-
return /* @__PURE__ */
|
|
31874
|
+
return /* @__PURE__ */ jsxs223("div", { ...outerProps, children: [
|
|
31644
31875
|
insertionLine,
|
|
31645
|
-
/* @__PURE__ */
|
|
31876
|
+
/* @__PURE__ */ jsx280(
|
|
31646
31877
|
"button",
|
|
31647
31878
|
{
|
|
31648
31879
|
type: "button",
|
|
@@ -31653,23 +31884,23 @@ var TicketCard = memo5(function TicketCardImpl({
|
|
|
31653
31884
|
className: "absolute inset-0 z-0 cursor-pointer rounded-md focus-visible:outline-none"
|
|
31654
31885
|
}
|
|
31655
31886
|
),
|
|
31656
|
-
/* @__PURE__ */
|
|
31887
|
+
/* @__PURE__ */ jsx280("div", { className: cn("pointer-events-none", innerWrapperClass), children: body })
|
|
31657
31888
|
] });
|
|
31658
31889
|
});
|
|
31659
31890
|
function TicketTagRow({ tags }) {
|
|
31660
31891
|
const visible = tags.slice(0, MAX_VISIBLE_TAGS);
|
|
31661
31892
|
const hidden = tags.length - visible.length;
|
|
31662
|
-
return /* @__PURE__ */
|
|
31663
|
-
visible.map((tag) => /* @__PURE__ */
|
|
31664
|
-
hidden > 0 && /* @__PURE__ */
|
|
31893
|
+
return /* @__PURE__ */ jsxs223("div", { className: "flex h-8 flex-wrap items-start gap-[var(--spacing-system-xxs)] overflow-clip", children: [
|
|
31894
|
+
visible.map((tag) => /* @__PURE__ */ jsx280(Tag, { variant: "outline", label: tag }, tag)),
|
|
31895
|
+
hidden > 0 && /* @__PURE__ */ jsx280(Tag, { variant: "outline", label: `+${hidden}` })
|
|
31665
31896
|
] });
|
|
31666
31897
|
}
|
|
31667
31898
|
|
|
31668
31899
|
// src/components/features/board/ticket-card-skeleton.tsx
|
|
31669
31900
|
import { forwardRef as forwardRef32 } from "react";
|
|
31670
|
-
import { jsx as
|
|
31901
|
+
import { jsx as jsx281, jsxs as jsxs224 } from "react/jsx-runtime";
|
|
31671
31902
|
var TicketCardSkeleton = forwardRef32(
|
|
31672
|
-
({ className, ...props }, ref) => /* @__PURE__ */
|
|
31903
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxs224(
|
|
31673
31904
|
"div",
|
|
31674
31905
|
{
|
|
31675
31906
|
ref,
|
|
@@ -31679,22 +31910,22 @@ var TicketCardSkeleton = forwardRef32(
|
|
|
31679
31910
|
),
|
|
31680
31911
|
...props,
|
|
31681
31912
|
children: [
|
|
31682
|
-
/* @__PURE__ */
|
|
31683
|
-
/* @__PURE__ */
|
|
31684
|
-
/* @__PURE__ */
|
|
31685
|
-
/* @__PURE__ */
|
|
31686
|
-
/* @__PURE__ */
|
|
31687
|
-
/* @__PURE__ */
|
|
31913
|
+
/* @__PURE__ */ jsxs224("div", { className: "flex items-start gap-[var(--spacing-system-sf)]", children: [
|
|
31914
|
+
/* @__PURE__ */ jsxs224("div", { className: "flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-xxs)]", children: [
|
|
31915
|
+
/* @__PURE__ */ jsx281("div", { className: "flex items-center text-h3", children: /* @__PURE__ */ jsx281(Skeleton, { className: "h-4 w-3/4" }) }),
|
|
31916
|
+
/* @__PURE__ */ jsxs224("div", { className: "flex items-center gap-[var(--spacing-system-xxs)] text-h6", children: [
|
|
31917
|
+
/* @__PURE__ */ jsx281(Skeleton, { className: "size-4 shrink-0 rounded-sm" }),
|
|
31918
|
+
/* @__PURE__ */ jsx281(Skeleton, { className: "h-3 w-1/2" })
|
|
31688
31919
|
] })
|
|
31689
31920
|
] }),
|
|
31690
|
-
/* @__PURE__ */
|
|
31691
|
-
/* @__PURE__ */
|
|
31692
|
-
/* @__PURE__ */
|
|
31921
|
+
/* @__PURE__ */ jsxs224("div", { className: "flex shrink-0 items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
31922
|
+
/* @__PURE__ */ jsx281(Skeleton, { className: "size-4 rounded-sm" }),
|
|
31923
|
+
/* @__PURE__ */ jsx281(Skeleton, { className: "size-8 rounded-full" })
|
|
31693
31924
|
] })
|
|
31694
31925
|
] }),
|
|
31695
|
-
/* @__PURE__ */
|
|
31696
|
-
/* @__PURE__ */
|
|
31697
|
-
/* @__PURE__ */
|
|
31926
|
+
/* @__PURE__ */ jsxs224("div", { className: "flex h-8 items-center gap-[var(--spacing-system-xxs)]", children: [
|
|
31927
|
+
/* @__PURE__ */ jsx281(Skeleton, { className: "h-8 w-16 rounded-md" }),
|
|
31928
|
+
/* @__PURE__ */ jsx281(Skeleton, { className: "h-8 w-12 rounded-md" })
|
|
31698
31929
|
] })
|
|
31699
31930
|
]
|
|
31700
31931
|
}
|
|
@@ -31703,7 +31934,7 @@ var TicketCardSkeleton = forwardRef32(
|
|
|
31703
31934
|
TicketCardSkeleton.displayName = "TicketCardSkeleton";
|
|
31704
31935
|
|
|
31705
31936
|
// src/components/features/board/board-column.tsx
|
|
31706
|
-
import { Fragment as Fragment49, jsx as
|
|
31937
|
+
import { Fragment as Fragment49, jsx as jsx282, jsxs as jsxs225 } from "react/jsx-runtime";
|
|
31707
31938
|
var BoardColumn = memo6(function BoardColumnImpl({
|
|
31708
31939
|
column,
|
|
31709
31940
|
collapsed = false,
|
|
@@ -31722,7 +31953,7 @@ var BoardColumn = memo6(function BoardColumnImpl({
|
|
|
31722
31953
|
className
|
|
31723
31954
|
}) {
|
|
31724
31955
|
const laneRef = useRef43(null);
|
|
31725
|
-
const [isOver, setIsOver] =
|
|
31956
|
+
const [isOver, setIsOver] = useState82(false);
|
|
31726
31957
|
useEffect48(() => {
|
|
31727
31958
|
const element = laneRef.current;
|
|
31728
31959
|
if (!element || collapsed || touchMode || column.dropDisabled) return void 0;
|
|
@@ -31755,7 +31986,7 @@ var BoardColumn = memo6(function BoardColumnImpl({
|
|
|
31755
31986
|
});
|
|
31756
31987
|
}, [column.id, column.dropDisabled, column.allowedFromColumns, collapsed, touchMode]);
|
|
31757
31988
|
const handleToggleCollapse = useCallback27(() => onToggleCollapse?.(column.id), [onToggleCollapse, column.id]);
|
|
31758
|
-
return /* @__PURE__ */
|
|
31989
|
+
return /* @__PURE__ */ jsxs225(
|
|
31759
31990
|
"div",
|
|
31760
31991
|
{
|
|
31761
31992
|
ref: laneRef,
|
|
@@ -31771,7 +32002,7 @@ var BoardColumn = memo6(function BoardColumnImpl({
|
|
|
31771
32002
|
),
|
|
31772
32003
|
style: column.system ? void 0 : { backgroundColor: tintOnDark(column.color) },
|
|
31773
32004
|
children: [
|
|
31774
|
-
/* @__PURE__ */
|
|
32005
|
+
/* @__PURE__ */ jsx282(
|
|
31775
32006
|
BoardColumnHeader,
|
|
31776
32007
|
{
|
|
31777
32008
|
column,
|
|
@@ -31781,9 +32012,9 @@ var BoardColumn = memo6(function BoardColumnImpl({
|
|
|
31781
32012
|
onArchive: !collapsed && column.archivable && onArchive ? () => onArchive(column.id) : void 0
|
|
31782
32013
|
}
|
|
31783
32014
|
),
|
|
31784
|
-
!collapsed && /* @__PURE__ */
|
|
31785
|
-
/* @__PURE__ */
|
|
31786
|
-
/* @__PURE__ */
|
|
32015
|
+
!collapsed && /* @__PURE__ */ jsxs225(Fragment49, { children: [
|
|
32016
|
+
/* @__PURE__ */ jsx282("div", { "aria-hidden": true, className: "-mx-[var(--spacing-system-sf)] h-px shrink-0 bg-ods-border" }),
|
|
32017
|
+
/* @__PURE__ */ jsx282(
|
|
31787
32018
|
ColumnBody,
|
|
31788
32019
|
{
|
|
31789
32020
|
column,
|
|
@@ -31846,13 +32077,13 @@ function ColumnBody({
|
|
|
31846
32077
|
// wholesale. The browser's own anchoring is unusable here — it silently
|
|
31847
32078
|
// skips transformed elements, so it works between drags and does nothing
|
|
31848
32079
|
// during one — and leaving both on double-corrects every insertion.
|
|
31849
|
-
/* @__PURE__ */
|
|
32080
|
+
/* @__PURE__ */ jsxs225(
|
|
31850
32081
|
"div",
|
|
31851
32082
|
{
|
|
31852
32083
|
ref: scrollRef,
|
|
31853
32084
|
className: "flex min-h-0 flex-1 flex-col gap-[var(--spacing-system-xs)] overflow-y-auto py-[5px] [overflow-anchor:none]",
|
|
31854
32085
|
children: [
|
|
31855
|
-
column.isLoading ? /* @__PURE__ */
|
|
32086
|
+
column.isLoading ? /* @__PURE__ */ jsx282(SkeletonStack, {}) : column.tickets.length === 0 ? /* @__PURE__ */ jsx282(EmptyState2, { columnId: column.id, touchMode }) : column.tickets.map((t) => /* @__PURE__ */ jsx282(
|
|
31856
32087
|
TicketCard,
|
|
31857
32088
|
{
|
|
31858
32089
|
ticket: t,
|
|
@@ -31868,26 +32099,26 @@ function ColumnBody({
|
|
|
31868
32099
|
},
|
|
31869
32100
|
t.id
|
|
31870
32101
|
)),
|
|
31871
|
-
column.isLoadingMore && !column.isLoading && /* @__PURE__ */
|
|
31872
|
-
column.hasMore && /* @__PURE__ */
|
|
32102
|
+
column.isLoadingMore && !column.isLoading && /* @__PURE__ */ jsx282(TicketCardSkeleton, {}),
|
|
32103
|
+
column.hasMore && /* @__PURE__ */ jsx282("div", { ref: sentinelRef, "aria-hidden": true, className: "h-1 shrink-0" })
|
|
31873
32104
|
]
|
|
31874
32105
|
}
|
|
31875
32106
|
)
|
|
31876
32107
|
);
|
|
31877
32108
|
}
|
|
31878
32109
|
function SkeletonStack({ count = 4 }) {
|
|
31879
|
-
return /* @__PURE__ */
|
|
32110
|
+
return /* @__PURE__ */ jsx282(Fragment49, { children: Array.from({ length: count }, (_, i) => /* @__PURE__ */ jsx282(TicketCardSkeleton, {}, `skeleton-${i}`)) });
|
|
31880
32111
|
}
|
|
31881
32112
|
function EmptyState2({ columnId, touchMode }) {
|
|
31882
32113
|
const aim = useDropAim();
|
|
31883
32114
|
if (aim && aim.columnId === columnId) {
|
|
31884
|
-
return /* @__PURE__ */
|
|
32115
|
+
return /* @__PURE__ */ jsx282("div", { "aria-hidden": true, ...{ [DROP_LINE_ATTRIBUTE]: "" }, className: "h-0.5 shrink-0 rounded-full bg-ods-accent" });
|
|
31885
32116
|
}
|
|
31886
|
-
return /* @__PURE__ */
|
|
31887
|
-
/* @__PURE__ */
|
|
31888
|
-
/* @__PURE__ */
|
|
31889
|
-
/* @__PURE__ */
|
|
31890
|
-
/* @__PURE__ */
|
|
32117
|
+
return /* @__PURE__ */ jsxs225("div", { className: "flex flex-1 flex-col items-center justify-center gap-[var(--spacing-system-lf)] p-[var(--spacing-system-lf)] text-center text-ods-text-secondary", children: [
|
|
32118
|
+
/* @__PURE__ */ jsx282(TagIcon, { className: "h-6 w-6 shrink-0" }),
|
|
32119
|
+
/* @__PURE__ */ jsxs225("div", { className: "flex w-full flex-col", children: [
|
|
32120
|
+
/* @__PURE__ */ jsx282("p", { className: "text-h4", children: "No tickets here" }),
|
|
32121
|
+
/* @__PURE__ */ jsx282("p", { className: "text-h6", children: touchMode ? "Change a ticket's status to move it to this column" : "Drag a ticket here or change its status to move it to this column" })
|
|
31891
32122
|
] })
|
|
31892
32123
|
] });
|
|
31893
32124
|
}
|
|
@@ -31901,10 +32132,10 @@ function resolveBoardDrop(columns, { source, target }) {
|
|
|
31901
32132
|
}
|
|
31902
32133
|
|
|
31903
32134
|
// src/components/features/board/use-board-collapse.ts
|
|
31904
|
-
import { useCallback as useCallback28, useEffect as useEffect49, useRef as useRef44, useState as
|
|
32135
|
+
import { useCallback as useCallback28, useEffect as useEffect49, useRef as useRef44, useState as useState83 } from "react";
|
|
31905
32136
|
function useBoardCollapse(storageKey) {
|
|
31906
32137
|
const [persisted, setPersisted] = useLocalStorage(storageKey ?? "__board_collapse_unused__", {});
|
|
31907
|
-
const [memory, setMemory] =
|
|
32138
|
+
const [memory, setMemory] = useState83({});
|
|
31908
32139
|
const collapsed = storageKey ? persisted : memory;
|
|
31909
32140
|
const setMap = storageKey ? setPersisted : setMemory;
|
|
31910
32141
|
const setMapRef = useRef44(setMap);
|
|
@@ -31921,7 +32152,7 @@ function useBoardCollapse(storageKey) {
|
|
|
31921
32152
|
}
|
|
31922
32153
|
|
|
31923
32154
|
// src/components/features/board/touch-board.tsx
|
|
31924
|
-
import { jsx as
|
|
32155
|
+
import { jsx as jsx283 } from "react/jsx-runtime";
|
|
31925
32156
|
function TouchBoard({
|
|
31926
32157
|
columns,
|
|
31927
32158
|
onLoadMore,
|
|
@@ -31936,11 +32167,11 @@ function TouchBoard({
|
|
|
31936
32167
|
className
|
|
31937
32168
|
}) {
|
|
31938
32169
|
const { collapsed, toggle } = useBoardCollapse(collapseStorageKey);
|
|
31939
|
-
return /* @__PURE__ */
|
|
32170
|
+
return /* @__PURE__ */ jsx283("div", { className: cn("flex h-full min-h-0 flex-col", className), children: /* @__PURE__ */ jsx283(
|
|
31940
32171
|
"div",
|
|
31941
32172
|
{
|
|
31942
32173
|
className: "flex min-h-0 flex-1 snap-x snap-mandatory gap-[var(--spacing-system-mf)] overflow-x-auto overscroll-x-contain [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
|
|
31943
|
-
children: columns.map((column) => /* @__PURE__ */
|
|
32174
|
+
children: columns.map((column) => /* @__PURE__ */ jsx283(
|
|
31944
32175
|
BoardColumn,
|
|
31945
32176
|
{
|
|
31946
32177
|
column,
|
|
@@ -31967,7 +32198,7 @@ function TouchBoard({
|
|
|
31967
32198
|
}
|
|
31968
32199
|
|
|
31969
32200
|
// src/components/features/board/board.tsx
|
|
31970
|
-
import { jsx as
|
|
32201
|
+
import { jsx as jsx284, jsxs as jsxs226 } from "react/jsx-runtime";
|
|
31971
32202
|
var PENDING_MOVE_TIMEOUT_MS = 2e3;
|
|
31972
32203
|
var DROP_MS = 160;
|
|
31973
32204
|
var DROP_EASING = "cubic-bezier(0.2, 0, 0, 1)";
|
|
@@ -31976,9 +32207,9 @@ var ARROW_KEYS = ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"];
|
|
|
31976
32207
|
function Board(props) {
|
|
31977
32208
|
const dragAndDropEnabled = useMediaQuery(DRAG_AND_DROP_MEDIA_QUERY);
|
|
31978
32209
|
if (dragAndDropEnabled === void 0) {
|
|
31979
|
-
return /* @__PURE__ */
|
|
32210
|
+
return /* @__PURE__ */ jsx284("div", { "aria-hidden": true, className: cn("flex h-full min-h-0 flex-col", props.className) });
|
|
31980
32211
|
}
|
|
31981
|
-
return dragAndDropEnabled ? /* @__PURE__ */
|
|
32212
|
+
return dragAndDropEnabled ? /* @__PURE__ */ jsx284(DragBoard, { ...props }) : /* @__PURE__ */ jsx284(TouchBoard, { ...props });
|
|
31982
32213
|
}
|
|
31983
32214
|
function DragBoard({
|
|
31984
32215
|
columns,
|
|
@@ -32019,20 +32250,20 @@ function DragBoard({
|
|
|
32019
32250
|
},
|
|
32020
32251
|
[scrollRef]
|
|
32021
32252
|
);
|
|
32022
|
-
const [aim, setAim] =
|
|
32023
|
-
const [lifted, setLifted] =
|
|
32024
|
-
const [announcement, setAnnouncement] =
|
|
32253
|
+
const [aim, setAim] = useState84(null);
|
|
32254
|
+
const [lifted, setLifted] = useState84(null);
|
|
32255
|
+
const [announcement, setAnnouncement] = useState84("");
|
|
32025
32256
|
const dragGeometry = useRef45(null);
|
|
32026
|
-
const [landingPreview, setLandingPreview] =
|
|
32257
|
+
const [landingPreview, setLandingPreview] = useState84(null);
|
|
32027
32258
|
const previewRef = useRef45(null);
|
|
32028
|
-
const [reportedMove, setPendingMove] =
|
|
32259
|
+
const [reportedMove, setPendingMove] = useState84(null);
|
|
32029
32260
|
const pendingMove = reportedMove && !hasMoveSettled(columns, reportedMove) ? reportedMove : null;
|
|
32030
32261
|
const view = useMemo25(() => pendingMove ? applyPendingMove(columns, pendingMove) : columns, [columns, pendingMove]);
|
|
32031
32262
|
useEffect50(() => {
|
|
32032
32263
|
columnsRef.current = view;
|
|
32033
32264
|
onChangeRef.current = onChange;
|
|
32034
32265
|
});
|
|
32035
|
-
const [landing, setLanding] =
|
|
32266
|
+
const [landing, setLanding] = useState84(null);
|
|
32036
32267
|
const landingTimer = useRef45(null);
|
|
32037
32268
|
const pointRef = useRef45({ x: 0, y: 0 });
|
|
32038
32269
|
const laneLabel = useCallback29((columnId) => view.find((c) => c.id === columnId)?.label ?? columnId, [view]);
|
|
@@ -32231,7 +32462,7 @@ function DragBoard({
|
|
|
32231
32462
|
};
|
|
32232
32463
|
}, [landing, landingPreview]);
|
|
32233
32464
|
const preview = landingPreview && createPortal(
|
|
32234
|
-
/* @__PURE__ */
|
|
32465
|
+
/* @__PURE__ */ jsx284(
|
|
32235
32466
|
"div",
|
|
32236
32467
|
{
|
|
32237
32468
|
ref: previewRef,
|
|
@@ -32244,7 +32475,7 @@ function DragBoard({
|
|
|
32244
32475
|
// translate in pointer coordinates and nothing else.
|
|
32245
32476
|
margin: `${-landingPreview.grabY}px 0 0 ${-landingPreview.grabX}px`
|
|
32246
32477
|
},
|
|
32247
|
-
children: /* @__PURE__ */
|
|
32478
|
+
children: /* @__PURE__ */ jsx284(
|
|
32248
32479
|
TicketCardView,
|
|
32249
32480
|
{
|
|
32250
32481
|
ticket: landingPreview.ticket,
|
|
@@ -32257,10 +32488,10 @@ function DragBoard({
|
|
|
32257
32488
|
),
|
|
32258
32489
|
document.body
|
|
32259
32490
|
);
|
|
32260
|
-
return /* @__PURE__ */
|
|
32491
|
+
return /* @__PURE__ */ jsx284(LandingCardContext.Provider, { value: landing, children: /* @__PURE__ */ jsx284(DropAimContext.Provider, { value: aim ?? keyboardAim, children: /* @__PURE__ */ jsxs226(BoardLiftContext.Provider, { value: lift, children: [
|
|
32261
32492
|
preview,
|
|
32262
|
-
/* @__PURE__ */
|
|
32263
|
-
/* @__PURE__ */
|
|
32493
|
+
/* @__PURE__ */ jsxs226("div", { ref: boardRef, className: cn("flex h-full flex-col", className), children: [
|
|
32494
|
+
/* @__PURE__ */ jsx284(
|
|
32264
32495
|
"div",
|
|
32265
32496
|
{
|
|
32266
32497
|
ref: setScroller,
|
|
@@ -32272,9 +32503,9 @@ function DragBoard({
|
|
|
32272
32503
|
const joinLeft = !!(column.system && prev?.system);
|
|
32273
32504
|
const joinRight = !!(column.system && next?.system);
|
|
32274
32505
|
const showGap = i > 0 && !joinLeft;
|
|
32275
|
-
return /* @__PURE__ */
|
|
32276
|
-
showGap && /* @__PURE__ */
|
|
32277
|
-
/* @__PURE__ */
|
|
32506
|
+
return /* @__PURE__ */ jsxs226(Fragment50, { children: [
|
|
32507
|
+
showGap && /* @__PURE__ */ jsx284("div", { "aria-hidden": true, className: "w-[var(--spacing-system-mf)] shrink-0" }),
|
|
32508
|
+
/* @__PURE__ */ jsx284(
|
|
32278
32509
|
BoardColumn,
|
|
32279
32510
|
{
|
|
32280
32511
|
column,
|
|
@@ -32296,15 +32527,15 @@ function DragBoard({
|
|
|
32296
32527
|
})
|
|
32297
32528
|
}
|
|
32298
32529
|
),
|
|
32299
|
-
/* @__PURE__ */
|
|
32300
|
-
thumbRatio > 0 && /* @__PURE__ */
|
|
32530
|
+
/* @__PURE__ */ jsx284("p", { "aria-live": "polite", className: "sr-only", children: announcement }),
|
|
32531
|
+
thumbRatio > 0 && /* @__PURE__ */ jsx284(
|
|
32301
32532
|
"div",
|
|
32302
32533
|
{
|
|
32303
32534
|
ref: trackRef,
|
|
32304
32535
|
onClick: onTrackClick,
|
|
32305
32536
|
onWheel: onTrackWheel,
|
|
32306
32537
|
className: "relative mt-[var(--spacing-system-mf)] h-2 shrink-0 cursor-pointer rounded-full bg-ods-border",
|
|
32307
|
-
children: /* @__PURE__ */
|
|
32538
|
+
children: /* @__PURE__ */ jsx284(
|
|
32308
32539
|
"div",
|
|
32309
32540
|
{
|
|
32310
32541
|
ref: thumbRef,
|
|
@@ -32423,9 +32654,9 @@ import {
|
|
|
32423
32654
|
useId as useId6,
|
|
32424
32655
|
useMemo as useMemo26,
|
|
32425
32656
|
useRef as useRef46,
|
|
32426
|
-
useState as
|
|
32657
|
+
useState as useState85
|
|
32427
32658
|
} from "react";
|
|
32428
|
-
import { jsx as
|
|
32659
|
+
import { jsx as jsx285, jsxs as jsxs227 } from "react/jsx-runtime";
|
|
32429
32660
|
var SORTABLE_ITEM_ATTRIBUTE = "data-sortable-item";
|
|
32430
32661
|
var SHIFT_MS = 200;
|
|
32431
32662
|
var DROP_MS2 = 150;
|
|
@@ -32440,7 +32671,7 @@ function SortableList({ onReorder, getItemLabel, disabled = false, className, ch
|
|
|
32440
32671
|
const listRef = useRef46(null);
|
|
32441
32672
|
const dragAndDropEnabled = useDragAndDropEnabled();
|
|
32442
32673
|
const dragType = useId6();
|
|
32443
|
-
const [announcement, setAnnouncement] =
|
|
32674
|
+
const [announcement, setAnnouncement] = useState85("");
|
|
32444
32675
|
const onReorderRef = useRef46(onReorder);
|
|
32445
32676
|
const getItemLabelRef = useRef46(getItemLabel);
|
|
32446
32677
|
useEffect51(() => {
|
|
@@ -32448,7 +32679,7 @@ function SortableList({ onReorder, getItemLabel, disabled = false, className, ch
|
|
|
32448
32679
|
getItemLabelRef.current = getItemLabel;
|
|
32449
32680
|
});
|
|
32450
32681
|
const flipFrom = useRef46(null);
|
|
32451
|
-
const [flipTick, setFlipTick] =
|
|
32682
|
+
const [flipTick, setFlipTick] = useState85(0);
|
|
32452
32683
|
const flipTimer = useRef46(null);
|
|
32453
32684
|
const readItems = useCallback30(
|
|
32454
32685
|
() => [...listRef.current?.querySelectorAll(`[${SORTABLE_ITEM_ATTRIBUTE}]`) ?? []],
|
|
@@ -32564,15 +32795,15 @@ function SortableList({ onReorder, getItemLabel, disabled = false, className, ch
|
|
|
32564
32795
|
() => ({ dragType, disabled, dragAndDropEnabled, reorder, readItems }),
|
|
32565
32796
|
[dragType, disabled, dragAndDropEnabled, reorder, readItems]
|
|
32566
32797
|
);
|
|
32567
|
-
return /* @__PURE__ */
|
|
32798
|
+
return /* @__PURE__ */ jsx285(SortableListContext.Provider, { value: context, children: /* @__PURE__ */ jsxs227("div", { ref: listRef, className, children: [
|
|
32568
32799
|
children,
|
|
32569
|
-
/* @__PURE__ */
|
|
32800
|
+
/* @__PURE__ */ jsx285("p", { "aria-live": "polite", className: "sr-only", children: announcement })
|
|
32570
32801
|
] }) });
|
|
32571
32802
|
}
|
|
32572
32803
|
|
|
32573
32804
|
// src/components/features/sortable-list/sortable-move-buttons.tsx
|
|
32574
32805
|
import { useRef as useRef47 } from "react";
|
|
32575
|
-
import { jsx as
|
|
32806
|
+
import { jsx as jsx286, jsxs as jsxs228 } from "react/jsx-runtime";
|
|
32576
32807
|
function SortableMoveButtons({ index, count, label, className }) {
|
|
32577
32808
|
const { disabled, reorder } = useSortableListContext();
|
|
32578
32809
|
const upRef = useRef47(null);
|
|
@@ -32587,8 +32818,8 @@ function SortableMoveButtons({ index, count, label, className }) {
|
|
|
32587
32818
|
});
|
|
32588
32819
|
};
|
|
32589
32820
|
const subject = label ?? "item";
|
|
32590
|
-
return /* @__PURE__ */
|
|
32591
|
-
/* @__PURE__ */
|
|
32821
|
+
return /* @__PURE__ */ jsxs228("div", { className: cn("inline-flex shrink-0", className), children: [
|
|
32822
|
+
/* @__PURE__ */ jsx286(
|
|
32592
32823
|
Button,
|
|
32593
32824
|
{
|
|
32594
32825
|
ref: upRef,
|
|
@@ -32599,10 +32830,10 @@ function SortableMoveButtons({ index, count, label, className }) {
|
|
|
32599
32830
|
disabled: disabled || index <= 0,
|
|
32600
32831
|
onClick: () => move(-1),
|
|
32601
32832
|
className: "rounded-r-none border-r-0",
|
|
32602
|
-
children: /* @__PURE__ */
|
|
32833
|
+
children: /* @__PURE__ */ jsx286(Arrow01UpIcon, {})
|
|
32603
32834
|
}
|
|
32604
32835
|
),
|
|
32605
|
-
/* @__PURE__ */
|
|
32836
|
+
/* @__PURE__ */ jsx286(
|
|
32606
32837
|
Button,
|
|
32607
32838
|
{
|
|
32608
32839
|
ref: downRef,
|
|
@@ -32613,7 +32844,7 @@ function SortableMoveButtons({ index, count, label, className }) {
|
|
|
32613
32844
|
disabled: disabled || index >= count - 1,
|
|
32614
32845
|
onClick: () => move(1),
|
|
32615
32846
|
className: "rounded-l-none",
|
|
32616
|
-
children: /* @__PURE__ */
|
|
32847
|
+
children: /* @__PURE__ */ jsx286(Arrow01DownIcon, {})
|
|
32617
32848
|
}
|
|
32618
32849
|
)
|
|
32619
32850
|
] });
|
|
@@ -32623,13 +32854,13 @@ function SortableMoveButtons({ index, count, label, className }) {
|
|
|
32623
32854
|
import { combine as combine5 } from "@atlaskit/pragmatic-drag-and-drop/combine";
|
|
32624
32855
|
import { draggable as draggable2 } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
|
|
32625
32856
|
import { disableNativeDragPreview } from "@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview";
|
|
32626
|
-
import { useCallback as useCallback31, useEffect as useEffect52, useState as
|
|
32857
|
+
import { useCallback as useCallback31, useEffect as useEffect52, useState as useState86 } from "react";
|
|
32627
32858
|
function useSortableItem() {
|
|
32628
32859
|
const { dragType, disabled, dragAndDropEnabled, reorder, readItems } = useSortableListContext();
|
|
32629
32860
|
const inert = disabled || !dragAndDropEnabled;
|
|
32630
|
-
const [item, setItem] =
|
|
32631
|
-
const [handle, setHandle] =
|
|
32632
|
-
const [isDragging, setIsDragging] =
|
|
32861
|
+
const [item, setItem] = useState86(null);
|
|
32862
|
+
const [handle, setHandle] = useState86(null);
|
|
32863
|
+
const [isDragging, setIsDragging] = useState86(false);
|
|
32633
32864
|
const itemRef = useCallback31((node) => {
|
|
32634
32865
|
node?.setAttribute(SORTABLE_ITEM_ATTRIBUTE, "");
|
|
32635
32866
|
setItem(node);
|
|
@@ -32669,7 +32900,7 @@ function useSortableItem() {
|
|
|
32669
32900
|
}
|
|
32670
32901
|
|
|
32671
32902
|
// src/components/features/ticket-status-config-list/ticket-status-config-list.tsx
|
|
32672
|
-
import { jsx as
|
|
32903
|
+
import { jsx as jsx287 } from "react/jsx-runtime";
|
|
32673
32904
|
function TicketStatusConfigList({
|
|
32674
32905
|
items,
|
|
32675
32906
|
onReorder,
|
|
@@ -32677,13 +32908,13 @@ function TicketStatusConfigList({
|
|
|
32677
32908
|
getItemLabel,
|
|
32678
32909
|
className
|
|
32679
32910
|
}) {
|
|
32680
|
-
return /* @__PURE__ */
|
|
32911
|
+
return /* @__PURE__ */ jsx287(
|
|
32681
32912
|
SortableList,
|
|
32682
32913
|
{
|
|
32683
32914
|
onReorder,
|
|
32684
32915
|
getItemLabel,
|
|
32685
32916
|
className: cn("flex w-full flex-col gap-[var(--spacing-system-xs)]", className),
|
|
32686
|
-
children: items.map((item, index) => /* @__PURE__ */
|
|
32917
|
+
children: items.map((item, index) => /* @__PURE__ */ jsx287(SortableRow, { index, count: items.length, label: getItemLabel?.(index), children: (args) => renderRow(item, args) }, item.id))
|
|
32687
32918
|
}
|
|
32688
32919
|
);
|
|
32689
32920
|
}
|
|
@@ -32694,7 +32925,7 @@ function SortableRow({
|
|
|
32694
32925
|
children
|
|
32695
32926
|
}) {
|
|
32696
32927
|
const { itemRef, dragHandleProps, isDragging, dragAndDropEnabled } = useSortableItem();
|
|
32697
|
-
return /* @__PURE__ */
|
|
32928
|
+
return /* @__PURE__ */ jsx287(
|
|
32698
32929
|
"div",
|
|
32699
32930
|
{
|
|
32700
32931
|
ref: itemRef,
|
|
@@ -32702,18 +32933,18 @@ function SortableRow({
|
|
|
32702
32933
|
children: children({
|
|
32703
32934
|
dragHandleProps,
|
|
32704
32935
|
isDragging,
|
|
32705
|
-
moveButtons: dragAndDropEnabled ? null : /* @__PURE__ */
|
|
32936
|
+
moveButtons: dragAndDropEnabled ? null : /* @__PURE__ */ jsx287(SortableMoveButtons, { index, count, label })
|
|
32706
32937
|
})
|
|
32707
32938
|
}
|
|
32708
32939
|
);
|
|
32709
32940
|
}
|
|
32710
32941
|
|
|
32711
32942
|
// src/components/features/conversation-card.tsx
|
|
32712
|
-
import { jsx as
|
|
32943
|
+
import { jsx as jsx288, jsxs as jsxs229 } from "react/jsx-runtime";
|
|
32713
32944
|
function Who({ speaker }) {
|
|
32714
|
-
return /* @__PURE__ */
|
|
32945
|
+
return /* @__PURE__ */ jsxs229("div", { className: "flex items-baseline gap-2 text-ods-text-primary text-h4", children: [
|
|
32715
32946
|
speaker.name,
|
|
32716
|
-
speaker.meta && /* @__PURE__ */
|
|
32947
|
+
speaker.meta && /* @__PURE__ */ jsx288("span", { className: "text-ods-text-secondary text-h6", children: speaker.meta })
|
|
32717
32948
|
] });
|
|
32718
32949
|
}
|
|
32719
32950
|
function ConversationCard({
|
|
@@ -32727,36 +32958,36 @@ function ConversationCard({
|
|
|
32727
32958
|
footerTone = "default",
|
|
32728
32959
|
className
|
|
32729
32960
|
}) {
|
|
32730
|
-
return /* @__PURE__ */
|
|
32961
|
+
return /* @__PURE__ */ jsxs229(
|
|
32731
32962
|
"div",
|
|
32732
32963
|
{
|
|
32733
32964
|
className: cn("flex h-full flex-col gap-4 rounded-xl border border-ods-border bg-ods-card p-5 md:p-7", className),
|
|
32734
32965
|
children: [
|
|
32735
|
-
/* @__PURE__ */
|
|
32736
|
-
/* @__PURE__ */
|
|
32737
|
-
/* @__PURE__ */
|
|
32738
|
-
/* @__PURE__ */
|
|
32739
|
-
/* @__PURE__ */
|
|
32966
|
+
/* @__PURE__ */ jsxs229("div", { className: "flex items-start gap-3", children: [
|
|
32967
|
+
/* @__PURE__ */ jsx288("span", { className: "shrink-0", children: requester.avatar }),
|
|
32968
|
+
/* @__PURE__ */ jsxs229("div", { className: "min-w-0 flex-1", children: [
|
|
32969
|
+
/* @__PURE__ */ jsx288(Who, { speaker: requester }),
|
|
32970
|
+
/* @__PURE__ */ jsxs229("p", { className: "m-0 mt-1 line-clamp-2 min-h-[2lh] text-ods-text-primary text-h3", title: request, children: [
|
|
32740
32971
|
"\u201C",
|
|
32741
32972
|
request,
|
|
32742
32973
|
"\u201D"
|
|
32743
32974
|
] })
|
|
32744
32975
|
] })
|
|
32745
32976
|
] }),
|
|
32746
|
-
/* @__PURE__ */
|
|
32747
|
-
/* @__PURE__ */
|
|
32748
|
-
/* @__PURE__ */
|
|
32749
|
-
/* @__PURE__ */
|
|
32750
|
-
/* @__PURE__ */
|
|
32751
|
-
/* @__PURE__ */
|
|
32752
|
-
/* @__PURE__ */
|
|
32977
|
+
/* @__PURE__ */ jsxs229("div", { className: "flex items-start gap-3 rounded-md border border-ods-border bg-ods-bg p-3.5", children: [
|
|
32978
|
+
/* @__PURE__ */ jsx288("span", { className: "shrink-0", children: responder.avatar }),
|
|
32979
|
+
/* @__PURE__ */ jsxs229("div", { className: "min-w-0 flex-1", children: [
|
|
32980
|
+
/* @__PURE__ */ jsx288(Who, { speaker: responder }),
|
|
32981
|
+
/* @__PURE__ */ jsxs229("div", { className: "mt-1 flex items-start gap-2 text-ods-text-secondary text-h4", children: [
|
|
32982
|
+
/* @__PURE__ */ jsx288(CheckCircleIcon, { size: 16, className: "mt-1 shrink-0 text-ods-success", "aria-hidden": true }),
|
|
32983
|
+
/* @__PURE__ */ jsx288("span", { className: "line-clamp-3 min-h-[3lh] min-w-0 flex-1", title: outcome, children: outcome }),
|
|
32753
32984
|
outcomeAside
|
|
32754
32985
|
] })
|
|
32755
32986
|
] })
|
|
32756
32987
|
] }),
|
|
32757
|
-
/* @__PURE__ */
|
|
32758
|
-
/* @__PURE__ */
|
|
32759
|
-
/* @__PURE__ */
|
|
32988
|
+
/* @__PURE__ */ jsxs229("div", { className: "mt-auto flex items-center justify-between gap-3 border-t border-ods-border pt-3.5 text-ods-text-secondary text-h6", children: [
|
|
32989
|
+
/* @__PURE__ */ jsx288("span", { children: footerLabel }),
|
|
32990
|
+
/* @__PURE__ */ jsx288(
|
|
32760
32991
|
"span",
|
|
32761
32992
|
{
|
|
32762
32993
|
className: cn(
|
|
@@ -33346,6 +33577,7 @@ export {
|
|
|
33346
33577
|
UnreadCountBadge,
|
|
33347
33578
|
HeaderButton,
|
|
33348
33579
|
TimeTrackerHeaderButton,
|
|
33580
|
+
RemoteSessionViewers,
|
|
33349
33581
|
RemoteSessionScope,
|
|
33350
33582
|
RemoteSessionOrgLogo,
|
|
33351
33583
|
RemoteSessionRecordingTag,
|
|
@@ -33362,6 +33594,15 @@ export {
|
|
|
33362
33594
|
RemoteSessionDialog,
|
|
33363
33595
|
RemoteSessionBorder,
|
|
33364
33596
|
RemoteSessionPill,
|
|
33597
|
+
REMOTE_SESSION_KEEP_REASON_LABELS,
|
|
33598
|
+
KeepRecordingModal,
|
|
33599
|
+
ReleaseKeepingModal,
|
|
33600
|
+
formatRemoteSessionOffset,
|
|
33601
|
+
RemoteSessionEventList,
|
|
33602
|
+
RemoteSessionTimelineMarkers,
|
|
33603
|
+
RemoteSessionStatusTag,
|
|
33604
|
+
RemoteSessionExpiry,
|
|
33605
|
+
RemoteSessionStorageAlert,
|
|
33365
33606
|
BoardColumnHeader,
|
|
33366
33607
|
tintOnDark,
|
|
33367
33608
|
BoardTicketApproval,
|