@flamingo-stack/openframe-frontend-core 0.0.691 → 0.0.692-2509.7676.1

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