@flamingo-stack/openframe-frontend-core 0.0.210-snapshot.20260528032637 → 0.0.210

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 (72) hide show
  1. package/dist/{chunk-P5EE2VJX.cjs → chunk-6RZYJICV.cjs} +1 -1
  2. package/dist/chunk-6RZYJICV.cjs.map +1 -0
  3. package/dist/{chunk-ZG2YY5E7.js → chunk-7L4DWM7P.js} +1 -1
  4. package/dist/chunk-7L4DWM7P.js.map +1 -0
  5. package/dist/{chunk-QKFBZLIR.js → chunk-ATEUJQKU.js} +2 -2
  6. package/dist/{chunk-VTUIMMHO.cjs → chunk-MDTIOPVS.cjs} +24 -24
  7. package/dist/{chunk-VTUIMMHO.cjs.map → chunk-MDTIOPVS.cjs.map} +1 -1
  8. package/dist/{chunk-3E5ANY55.js → chunk-R5RNRH62.js} +5 -14
  9. package/dist/chunk-R5RNRH62.js.map +1 -0
  10. package/dist/{chunk-WI76ZUBE.cjs → chunk-TWKPYZNQ.cjs} +17 -26
  11. package/dist/chunk-TWKPYZNQ.cjs.map +1 -0
  12. package/dist/{chunk-ZFBLC5GV.cjs → chunk-VBFOCTMD.cjs} +17 -17
  13. package/dist/{chunk-ZFBLC5GV.cjs.map → chunk-VBFOCTMD.cjs.map} +1 -1
  14. package/dist/{chunk-5BNWGK6D.js → chunk-WJBPLMBX.js} +2 -2
  15. package/dist/components/chat/hooks/use-chat-identity.d.ts +3 -3
  16. package/dist/components/chat/hooks/use-chat-identity.d.ts.map +1 -1
  17. package/dist/components/chat/index.cjs +3 -3
  18. package/dist/components/chat/index.js +2 -2
  19. package/dist/components/contact/index.cjs +4 -4
  20. package/dist/components/contact/index.js +3 -3
  21. package/dist/components/features/index.cjs +3 -3
  22. package/dist/components/features/index.js +2 -2
  23. package/dist/components/footer-waitlist-button.d.ts +2 -21
  24. package/dist/components/footer-waitlist-button.d.ts.map +1 -1
  25. package/dist/components/index.cjs +91 -87
  26. package/dist/components/index.cjs.map +1 -1
  27. package/dist/components/index.js +16 -12
  28. package/dist/components/index.js.map +1 -1
  29. package/dist/components/navigation/index.cjs +3 -3
  30. package/dist/components/navigation/index.js +2 -2
  31. package/dist/components/navigation/sticky-section-nav.d.ts.map +1 -1
  32. package/dist/components/tickets/help-center-card.d.ts.map +1 -1
  33. package/dist/components/tickets/index.cjs +98 -139
  34. package/dist/components/tickets/index.cjs.map +1 -1
  35. package/dist/components/tickets/index.js +54 -95
  36. package/dist/components/tickets/index.js.map +1 -1
  37. package/dist/components/tickets/ticket-row.d.ts.map +1 -1
  38. package/dist/components/ui/index.cjs +3 -3
  39. package/dist/components/ui/index.js +2 -2
  40. package/dist/contexts/chat-runtime-context.d.ts +3 -6
  41. package/dist/contexts/chat-runtime-context.d.ts.map +1 -1
  42. package/dist/contexts/index.cjs +2 -2
  43. package/dist/contexts/index.js +1 -1
  44. package/dist/index.cjs +3 -5
  45. package/dist/index.cjs.map +1 -1
  46. package/dist/index.js +2 -4
  47. package/dist/utils/index.cjs +0 -10
  48. package/dist/utils/index.cjs.map +1 -1
  49. package/dist/utils/index.d.ts +0 -1
  50. package/dist/utils/index.d.ts.map +1 -1
  51. package/dist/utils/index.js +1 -10
  52. package/dist/utils/index.js.map +1 -1
  53. package/package.json +1 -1
  54. package/src/components/chat/hooks/use-chat-identity.ts +7 -8
  55. package/src/components/footer-waitlist-button.tsx +16 -33
  56. package/src/components/navigation/sticky-section-nav.tsx +4 -6
  57. package/src/components/tickets/help-center-card.tsx +1 -55
  58. package/src/components/tickets/help-center-list.tsx +1 -9
  59. package/src/components/tickets/ticket-detail-drawer.tsx +4 -19
  60. package/src/components/tickets/ticket-row.tsx +19 -30
  61. package/src/contexts/chat-runtime-context.tsx +3 -6
  62. package/src/stories/EmbeddableChat.stories.tsx +1 -1
  63. package/src/utils/index.ts +0 -12
  64. package/dist/chunk-3E5ANY55.js.map +0 -1
  65. package/dist/chunk-P5EE2VJX.cjs.map +0 -1
  66. package/dist/chunk-WI76ZUBE.cjs.map +0 -1
  67. package/dist/chunk-ZG2YY5E7.js.map +0 -1
  68. package/dist/utils/scroll-into-view.d.ts +0 -63
  69. package/dist/utils/scroll-into-view.d.ts.map +0 -1
  70. package/src/utils/scroll-into-view.ts +0 -74
  71. /package/dist/{chunk-QKFBZLIR.js.map → chunk-ATEUJQKU.js.map} +0 -0
  72. /package/dist/{chunk-5BNWGK6D.js.map → chunk-WJBPLMBX.js.map} +0 -0
@@ -9,11 +9,11 @@
9
9
 
10
10
 
11
11
 
12
- var _chunkZFBLC5GVcjs = require('../../chunk-ZFBLC5GV.cjs');
12
+ var _chunkVBFOCTMDcjs = require('../../chunk-VBFOCTMD.cjs');
13
13
  require('../../chunk-VFKQMAUF.cjs');
14
14
 
15
15
 
16
- var _chunkVTUIMMHOcjs = require('../../chunk-VTUIMMHO.cjs');
16
+ var _chunkMDTIOPVScjs = require('../../chunk-MDTIOPVS.cjs');
17
17
 
18
18
 
19
19
 
@@ -35,15 +35,14 @@ var _chunkVTUIMMHOcjs = require('../../chunk-VTUIMMHO.cjs');
35
35
 
36
36
 
37
37
 
38
-
39
- var _chunkWI76ZUBEcjs = require('../../chunk-WI76ZUBE.cjs');
38
+ var _chunkTWKPYZNQcjs = require('../../chunk-TWKPYZNQ.cjs');
40
39
 
41
40
 
42
41
  var _chunkEH3RWVF3cjs = require('../../chunk-EH3RWVF3.cjs');
43
42
  require('../../chunk-24KCAECR.cjs');
44
43
  require('../../chunk-65CPJ4SX.cjs');
45
44
  require('../../chunk-XQFFGR6U.cjs');
46
- require('../../chunk-P5EE2VJX.cjs');
45
+ require('../../chunk-6RZYJICV.cjs');
47
46
  require('../../chunk-27APPAJN.cjs');
48
47
  require('../../chunk-BZFW3FOF.cjs');
49
48
 
@@ -98,7 +97,7 @@ function TicketOpenForm({
98
97
  }) {
99
98
  const [subject, setSubject] = _react.useState.call(void 0, "");
100
99
  const [content, setContent] = _react.useState.call(void 0, "");
101
- const { attachments, readyAttachments, hasInflightUploads, addFiles, removeAttachment, clear } = _chunkWI76ZUBEcjs.useChatAttachments.call(void 0, );
100
+ const { attachments, readyAttachments, hasInflightUploads, addFiles, removeAttachment, clear } = _chunkTWKPYZNQcjs.useChatAttachments.call(void 0, );
102
101
  const trimmedSubject = subject.trim();
103
102
  const trimmedContent = content.trim();
104
103
  const overCap = content.length > TICKET_TEXT_MAX_CHARS;
@@ -118,7 +117,7 @@ function TicketOpenForm({
118
117
  clear();
119
118
  }
120
119
  };
121
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWI76ZUBEcjs.Card, { className: "p-6", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "form", { onSubmit: handleSubmit, className: "flex flex-col md:flex-row gap-6", children: [
120
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTWKPYZNQcjs.Card, { className: "p-6", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "form", { onSubmit: handleSubmit, className: "flex flex-col md:flex-row gap-6", children: [
122
121
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex-1 min-w-0 md:max-w-md", children: [
123
122
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: "text-2xl font-semibold text-ods-text-primary mb-2", children: "Need Support?" }),
124
123
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary text-sm", children: "Can't find what you're looking for? Submit a support ticket below \u2014 we'll follow up shortly." }),
@@ -157,7 +156,7 @@ function TicketOpenForm({
157
156
  }
158
157
  ),
159
158
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
160
- _chunkWI76ZUBEcjs.Textarea,
159
+ _chunkTWKPYZNQcjs.Textarea,
161
160
  {
162
161
  id: "ticket-content",
163
162
  placeholder: "Describe your issue or question in detail...",
@@ -181,7 +180,7 @@ function TicketOpenForm({
181
180
  )
182
181
  ] }),
183
182
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
184
- _chunkWI76ZUBEcjs.ChatAttachmentChipStrip,
183
+ _chunkTWKPYZNQcjs.ChatAttachmentChipStrip,
185
184
  {
186
185
  attachments,
187
186
  onRemove: removeAttachment,
@@ -190,7 +189,7 @@ function TicketOpenForm({
190
189
  ),
191
190
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center justify-between gap-3", children: [
192
191
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
193
- _chunkWI76ZUBEcjs.ChatAttachmentAddButton,
192
+ _chunkTWKPYZNQcjs.ChatAttachmentAddButton,
194
193
  {
195
194
  attachmentsEnabled: !supportSystemDown,
196
195
  attachmentsCount: attachments.length,
@@ -228,7 +227,7 @@ _chunkUXZ3ZJ3Mcjs.init_button2.call(void 0, );
228
227
 
229
228
  var LIST_ENGAGEMENTS_ENDPOINT = "/api/chat/agent/list-engagements";
230
229
  function useTicketEngagements(externalTicketId, enabled = true) {
231
- const identity = _chunkWI76ZUBEcjs.useChatIdentity.call(void 0, );
230
+ const identity = _chunkTWKPYZNQcjs.useChatIdentity.call(void 0, );
232
231
  const identityKey = _nullishCoalesce(_optionalChain([identity, 'access', _ => _.user, 'optionalAccess', _2 => _2.email]), () => ( "anon"));
233
232
  const queryEnabled = enabled && identity.authTier !== "anon" && !!_optionalChain([identity, 'access', _3 => _3.user, 'optionalAccess', _4 => _4.email]) && !!externalTicketId && !externalTicketId.startsWith("temp-");
234
233
  const query = _reactquery.useQuery.call(void 0, {
@@ -242,7 +241,7 @@ function useTicketEngagements(externalTicketId, enabled = true) {
242
241
  refetchOnMount: "always",
243
242
  refetchOnWindowFocus: true,
244
243
  queryFn: async () => {
245
- const response = await _chunkWI76ZUBEcjs.embedAuthedFetch.call(void 0, LIST_ENGAGEMENTS_ENDPOINT, {
244
+ const response = await _chunkTWKPYZNQcjs.embedAuthedFetch.call(void 0, LIST_ENGAGEMENTS_ENDPOINT, {
246
245
  method: "POST",
247
246
  body: JSON.stringify({ ticket_id: externalTicketId })
248
247
  });
@@ -290,7 +289,7 @@ function TicketLinkedDeliveryCard({
290
289
  {
291
290
  className: `rounded-md border border-ods-border bg-ods-bg overflow-hidden ${_nullishCoalesce(className, () => ( ""))}`,
292
291
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
293
- _chunkZFBLC5GVcjs.DeliveryRow,
292
+ _chunkVBFOCTMDcjs.DeliveryRow,
294
293
  {
295
294
  item,
296
295
  href: clickup.delivery_href,
@@ -343,7 +342,7 @@ function TicketDetailDrawer({
343
342
  }
344
343
  var TURN_SEPARATOR_RE = /[\s]{1,16}---[\s]{1,16}/g;
345
344
  function TicketTimelinePanel({ ticket }) {
346
- const identity = _chunkWI76ZUBEcjs.useChatIdentity.call(void 0, );
345
+ const identity = _chunkTWKPYZNQcjs.useChatIdentity.call(void 0, );
347
346
  const externalId = isOptimistic(ticket) ? null : ticket.external_id;
348
347
  const { engagements, isLoading } = useTicketEngagements(externalId, !!externalId);
349
348
  const bodyTurns = ticket.body ? ticket.body.split(TURN_SEPARATOR_RE).map((t) => t.trim()).filter(Boolean) : [];
@@ -355,10 +354,10 @@ function TicketTimelinePanel({ ticket }) {
355
354
  const customerAvatar = isViewerTheCustomer ? _nullishCoalesce(_optionalChain([identity, 'access', _20 => _20.user, 'optionalAccess', _21 => _21.avatarUrl]), () => ( void 0)) : void 0;
356
355
  if (bodyTurns.length === 0 && engagements.length === 0) {
357
356
  if (isLoading) {
358
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZFBLC5GVcjs.ConversationCardRowSkeletonList, { rows: 2 });
357
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBFOCTMDcjs.ConversationCardRowSkeletonList, { rows: 2 });
359
358
  }
360
359
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
361
- _chunkZFBLC5GVcjs.EmptyState,
360
+ _chunkVBFOCTMDcjs.EmptyState,
362
361
  {
363
362
  type: "generic",
364
363
  title: "No conversation yet",
@@ -373,7 +372,7 @@ function TicketTimelinePanel({ ticket }) {
373
372
  const role = i === 0 ? "Original message" : isResolution ? "Resolution" : `Update ${i}`;
374
373
  const text = isResolution ? turn.replace(/^\[Resolution\]\s*/, "") : turn;
375
374
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
376
- _chunkZFBLC5GVcjs.ConversationCardRow,
375
+ _chunkVBFOCTMDcjs.ConversationCardRow,
377
376
  {
378
377
  author: customerName,
379
378
  role,
@@ -403,10 +402,10 @@ function TicketTimelinePanel({ ticket }) {
403
402
  avatarSrc = void 0;
404
403
  }
405
404
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
406
- _chunkZFBLC5GVcjs.ConversationCardRow,
405
+ _chunkVBFOCTMDcjs.ConversationCardRow,
407
406
  {
408
407
  author,
409
- role: "Reply",
408
+ role: isCustomer ? "Reply" : "Note",
410
409
  avatarSrc,
411
410
  timestamp: eng.createdAt,
412
411
  body: stripAttachmentsPreamble(_nullishCoalesce(eng.body, () => ( ""))),
@@ -420,7 +419,7 @@ function TicketTimelinePanel({ ticket }) {
420
419
  // content rendered — drawer is showing the customer's body
421
420
  // turns + cached engagements while a background refetch is
422
421
  // in flight. Single row keeps the placeholder modest.
423
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZFBLC5GVcjs.ConversationCardRowSkeletonList, { rows: 1 })
422
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBFOCTMDcjs.ConversationCardRowSkeletonList, { rows: 1 })
424
423
  ] });
425
424
  }
426
425
  function mapEngagementAttachments(files) {
@@ -473,7 +472,7 @@ function OpenActions({
473
472
  const [messageText, setMessageText] = _react.useState.call(void 0, "");
474
473
  const [resolution, setResolution] = _react.useState.call(void 0, "");
475
474
  const [closeDialogOpen, setCloseDialogOpen] = _react.useState.call(void 0, false);
476
- const attachments = _chunkWI76ZUBEcjs.useChatAttachments.call(void 0, );
475
+ const attachments = _chunkTWKPYZNQcjs.useChatAttachments.call(void 0, );
477
476
  const disabled = busy || supportSystemDown;
478
477
  const ticketRef = { id: ticket.id, external_id: ticket.external_id };
479
478
  const hasText = messageText.trim().length > 0;
@@ -496,7 +495,7 @@ function OpenActions({
496
495
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-3", children: [
497
496
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-2", children: [
498
497
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
499
- _chunkWI76ZUBEcjs.Textarea,
498
+ _chunkTWKPYZNQcjs.Textarea,
500
499
  {
501
500
  value: messageText,
502
501
  onChange: (e) => setMessageText(e.target.value),
@@ -507,7 +506,7 @@ function OpenActions({
507
506
  }
508
507
  ),
509
508
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
510
- _chunkWI76ZUBEcjs.ChatAttachmentChipStrip,
509
+ _chunkTWKPYZNQcjs.ChatAttachmentChipStrip,
511
510
  {
512
511
  attachments: attachments.attachments,
513
512
  onRemove: attachments.removeAttachment,
@@ -517,7 +516,7 @@ function OpenActions({
517
516
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between items-center gap-2 flex-wrap", children: [
518
517
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2", children: [
519
518
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
520
- _chunkWI76ZUBEcjs.ChatAttachmentAddButton,
519
+ _chunkTWKPYZNQcjs.ChatAttachmentAddButton,
521
520
  {
522
521
  attachmentsEnabled: !supportSystemDown,
523
522
  attachmentsCount: attachments.attachments.length,
@@ -552,13 +551,13 @@ function OpenActions({
552
551
  ] })
553
552
  ] })
554
553
  ] }),
555
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWI76ZUBEcjs.AlertDialog, { open: closeDialogOpen, onOpenChange: setCloseDialogOpen, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkWI76ZUBEcjs.AlertDialogContent, { className: "bg-ods-card border-ods-border", children: [
556
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkWI76ZUBEcjs.AlertDialogHeader, { children: [
557
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWI76ZUBEcjs.AlertDialogTitle, { className: "text-ods-text-primary font-['DM_Sans'] text-[20px] font-semibold", children: "Close this ticket?" }),
558
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWI76ZUBEcjs.AlertDialogDescription, { className: "text-ods-text-secondary font-['DM_Sans'] text-[14px]", children: "Add an optional resolution note below. You can reopen the ticket later if needed." })
554
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTWKPYZNQcjs.AlertDialog, { open: closeDialogOpen, onOpenChange: setCloseDialogOpen, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkTWKPYZNQcjs.AlertDialogContent, { className: "bg-ods-card border-ods-border", children: [
555
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkTWKPYZNQcjs.AlertDialogHeader, { children: [
556
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTWKPYZNQcjs.AlertDialogTitle, { className: "text-ods-text-primary font-['DM_Sans'] text-[20px] font-semibold", children: "Close this ticket?" }),
557
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTWKPYZNQcjs.AlertDialogDescription, { className: "text-ods-text-secondary font-['DM_Sans'] text-[14px]", children: "Add an optional resolution note below. You can reopen the ticket later if needed." })
559
558
  ] }),
560
559
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
561
- _chunkWI76ZUBEcjs.Textarea,
560
+ _chunkTWKPYZNQcjs.Textarea,
562
561
  {
563
562
  value: resolution,
564
563
  onChange: (e) => setResolution(e.target.value),
@@ -568,9 +567,9 @@ function OpenActions({
568
567
  className: "mt-2"
569
568
  }
570
569
  ),
571
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkWI76ZUBEcjs.AlertDialogFooter, { children: [
570
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkTWKPYZNQcjs.AlertDialogFooter, { children: [
572
571
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
573
- _chunkWI76ZUBEcjs.AlertDialogCancel,
572
+ _chunkTWKPYZNQcjs.AlertDialogCancel,
574
573
  {
575
574
  disabled: busy,
576
575
  className: "bg-transparent border-ods-border text-ods-text-primary hover:bg-ods-border",
@@ -578,7 +577,7 @@ function OpenActions({
578
577
  }
579
578
  ),
580
579
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
581
- _chunkWI76ZUBEcjs.AlertDialogAction,
580
+ _chunkTWKPYZNQcjs.AlertDialogAction,
582
581
  {
583
582
  onClick: () => void confirmClose(),
584
583
  disabled: busy,
@@ -606,22 +605,14 @@ function TicketRow({
606
605
  }) {
607
606
  const optimistic = isOptimistic(ticket);
608
607
  const rowRef = _react.useRef.call(void 0, null);
609
- const handleClick = _react.useCallback.call(void 0, () => {
610
- onToggle(ticket.id);
611
- _chunkWI76ZUBEcjs.scrollElementIntoView.call(void 0, rowRef.current, {
612
- adjustTargetY: (raw) => {
613
- if (!rowRef.current) return raw;
614
- const expandedDrawer = document.querySelector(
615
- 'div[id^="ticket-drawer-"]'
616
- );
617
- if (!(expandedDrawer instanceof HTMLElement)) return raw;
618
- const drawerRect = expandedDrawer.getBoundingClientRect();
619
- const myRect = rowRef.current.getBoundingClientRect();
620
- if (drawerRect.bottom > myRect.top) return raw;
621
- return raw - drawerRect.height;
622
- }
608
+ _react.useEffect.call(void 0, () => {
609
+ if (!expanded || optimistic) return;
610
+ requestAnimationFrame(() => {
611
+ requestAnimationFrame(() => {
612
+ _optionalChain([rowRef, 'access', _30 => _30.current, 'optionalAccess', _31 => _31.scrollIntoView, 'call', _32 => _32({ behavior: "smooth", block: "start" })]);
613
+ });
623
614
  });
624
- }, [onToggle, ticket.id]);
615
+ }, [expanded, optimistic]);
625
616
  const tileData = {
626
617
  id: ticket.id,
627
618
  title: _nullishCoalesce(ticket.subject, () => ( "(untitled)")),
@@ -634,7 +625,7 @@ function TicketRow({
634
625
  // so the badge accurately reflects "Closed" with a checkmark.
635
626
  statusLabel: _nullishCoalesce(ticket.pipeline_stage_label, () => ( void 0)),
636
627
  category: _nullishCoalesce(ticket.customer_company, () => ( void 0)),
637
- timeAgo: ticket.hubspot_updated_at ? _chunkWI76ZUBEcjs.formatRelativeTime.call(void 0, ticket.hubspot_updated_at) : void 0,
628
+ timeAgo: ticket.hubspot_updated_at ? _chunkTWKPYZNQcjs.formatRelativeTime.call(void 0, ticket.hubspot_updated_at) : void 0,
638
629
  // Linked-work chip: surfaced whenever the ticket has a linked
639
630
  // ClickUp task. Uses the linked task's own status so the chip text
640
631
  // reads "Working" / "Waiting on version release" / etc. — useful
@@ -642,17 +633,17 @@ function TicketRow({
642
633
  // when the task exists but its status hasn't synced yet.
643
634
  linkedTaskLabel: ticket.clickup ? ticket.clickup.status ? ticket.clickup.status.replace(/\b\w/g, (c) => c.toUpperCase()) : "Linked work" : void 0
644
635
  };
645
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: rowRef, className: "scroll-mt-24", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
636
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: rowRef, className: "scroll-mt-4", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
646
637
  Collapsible,
647
638
  {
648
639
  open: expanded && !optimistic,
649
640
  className: "border-b border-ods-border last:border-b-0",
650
641
  children: [
651
642
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
652
- _chunkWI76ZUBEcjs.ChatTicketItem,
643
+ _chunkTWKPYZNQcjs.ChatTicketItem,
653
644
  {
654
645
  ticket: tileData,
655
- onClick: optimistic ? void 0 : handleClick,
646
+ onClick: optimistic ? void 0 : onToggle,
656
647
  "aria-expanded": expanded && !optimistic,
657
648
  "aria-controls": `ticket-drawer-${ticket.id}`
658
649
  }
@@ -713,7 +704,7 @@ function useTicketsList(filters) {
713
704
  pageSize
714
705
  };
715
706
  if (statusFilter) body.status = statusFilter;
716
- const response = await _chunkWI76ZUBEcjs.embedAuthedFetch.call(void 0, FIND_TICKET_ENDPOINT, {
707
+ const response = await _chunkTWKPYZNQcjs.embedAuthedFetch.call(void 0, FIND_TICKET_ENDPOINT, {
717
708
  method: "POST",
718
709
  body: JSON.stringify(body)
719
710
  });
@@ -725,12 +716,12 @@ function useTicketsList(filters) {
725
716
  }
726
717
  });
727
718
  const data = query.data;
728
- const totalCount = _nullishCoalesce(_nullishCoalesce(_optionalChain([data, 'optionalAccess', _30 => _30.totalCount]), () => ( _optionalChain([data, 'optionalAccess', _31 => _31.count]))), () => ( (_nullishCoalesce(_optionalChain([data, 'optionalAccess', _32 => _32.tickets, 'optionalAccess', _33 => _33.length]), () => ( 0)))));
729
- const echoedPage = _nullishCoalesce(_optionalChain([data, 'optionalAccess', _34 => _34.page]), () => ( page));
730
- const echoedPageSize = _nullishCoalesce(_optionalChain([data, 'optionalAccess', _35 => _35.pageSize]), () => ( pageSize));
731
- const totalPages = _nullishCoalesce(_optionalChain([data, 'optionalAccess', _36 => _36.totalPages]), () => ( Math.max(1, Math.ceil(totalCount / echoedPageSize))));
719
+ const totalCount = _nullishCoalesce(_nullishCoalesce(_optionalChain([data, 'optionalAccess', _33 => _33.totalCount]), () => ( _optionalChain([data, 'optionalAccess', _34 => _34.count]))), () => ( (_nullishCoalesce(_optionalChain([data, 'optionalAccess', _35 => _35.tickets, 'optionalAccess', _36 => _36.length]), () => ( 0)))));
720
+ const echoedPage = _nullishCoalesce(_optionalChain([data, 'optionalAccess', _37 => _37.page]), () => ( page));
721
+ const echoedPageSize = _nullishCoalesce(_optionalChain([data, 'optionalAccess', _38 => _38.pageSize]), () => ( pageSize));
722
+ const totalPages = _nullishCoalesce(_optionalChain([data, 'optionalAccess', _39 => _39.totalPages]), () => ( Math.max(1, Math.ceil(totalCount / echoedPageSize))));
732
723
  return {
733
- tickets: _nullishCoalesce(_optionalChain([data, 'optionalAccess', _37 => _37.tickets]), () => ( [])),
724
+ tickets: _nullishCoalesce(_optionalChain([data, 'optionalAccess', _40 => _40.tickets]), () => ( [])),
734
725
  // Loading-state-truth = `data === undefined`. TanStack v5's
735
726
  // `isPending` / `isLoading` flags can be `false` in transient
736
727
  // windows where the query is enabled-but-fetch-not-yet-fired
@@ -752,7 +743,7 @@ function useTicketsList(filters) {
752
743
  // - Background refetch with existing data: data !== undefined → no load
753
744
  // - Filter-change refetch landing on empty results: data?.tickets===[]
754
745
  // + isFetching → bridge skeleton (the `||` branch)
755
- isLoading: enabled && (data === void 0 || query.isFetching && (_nullishCoalesce(_optionalChain([data, 'optionalAccess', _38 => _38.tickets]), () => ( []))).length === 0),
746
+ isLoading: enabled && (data === void 0 || query.isFetching && (_nullishCoalesce(_optionalChain([data, 'optionalAccess', _41 => _41.tickets]), () => ( []))).length === 0),
756
747
  isFetching: query.isFetching,
757
748
  error: _nullishCoalesce(query.error, () => ( null)),
758
749
  refetch: () => {
@@ -801,7 +792,7 @@ function useTicketActions(options) {
801
792
  }, []);
802
793
  const executeTicketAction = _react.useCallback.call(void 0,
803
794
  async (toolName, args) => {
804
- const res = await _chunkWI76ZUBEcjs.embedAuthedFetch.call(void 0, TICKET_ACTION_ENDPOINT, {
795
+ const res = await _chunkTWKPYZNQcjs.embedAuthedFetch.call(void 0, TICKET_ACTION_ENDPOINT, {
805
796
  method: "POST",
806
797
  body: JSON.stringify({ tool_name: toolName, args })
807
798
  });
@@ -907,7 +898,7 @@ function useTicketActions(options) {
907
898
  const result = await executeTicketAction("create_ticket", {
908
899
  subject: input.subject.trim(),
909
900
  content: input.content.trim(),
910
- ..._optionalChain([input, 'access', _39 => _39.attachments, 'optionalAccess', _40 => _40.length]) ? { attachments: input.attachments } : {}
901
+ ..._optionalChain([input, 'access', _42 => _42.attachments, 'optionalAccess', _43 => _43.length]) ? { attachments: input.attachments } : {}
911
902
  });
912
903
  if (result.mirror_synced === false) {
913
904
  toast2(TOAST_COPY.open_mirror_pending);
@@ -995,7 +986,7 @@ function useTicketActions(options) {
995
986
  ticket,
996
987
  {
997
988
  status: "CLOSED",
998
- ..._optionalChain([resolution, 'optionalAccess', _41 => _41.trim, 'call', _42 => _42()]) ? { resolution: resolution.trim() } : {}
989
+ ..._optionalChain([resolution, 'optionalAccess', _44 => _44.trim, 'call', _45 => _45()]) ? { resolution: resolution.trim() } : {}
999
990
  },
1000
991
  TOAST_COPY.close_success,
1001
992
  "close ticket"
@@ -1057,7 +1048,7 @@ function mapTicketActionError(err) {
1057
1048
  removeRowFromCache: false
1058
1049
  };
1059
1050
  case "RATE_LIMITED": {
1060
- const retryAfterRaw = _optionalChain([err, 'access', _43 => _43.response, 'optionalAccess', _44 => _44.headers, 'access', _45 => _45.get, 'call', _46 => _46("Retry-After")]);
1051
+ const retryAfterRaw = _optionalChain([err, 'access', _46 => _46.response, 'optionalAccess', _47 => _47.headers, 'access', _48 => _48.get, 'call', _49 => _49("Retry-After")]);
1061
1052
  const retryAfterSeconds = retryAfterRaw ? parseInt(retryAfterRaw, 10) : void 0;
1062
1053
  return {
1063
1054
  code: err.code,
@@ -1115,13 +1106,13 @@ function resolveErrorCode(bodyCode, status) {
1115
1106
  // src/components/tickets/ticket-center.tsx
1116
1107
 
1117
1108
  function TicketCenter({ toast: toast2 = _chunkEH3RWVF3cjs.toast } = {}) {
1118
- const identity = _chunkWI76ZUBEcjs.useChatIdentity.call(void 0, );
1109
+ const identity = _chunkTWKPYZNQcjs.useChatIdentity.call(void 0, );
1119
1110
  if (identity.isLoading) {
1120
1111
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketCenterSkeleton, {});
1121
1112
  }
1122
- if (identity.authTier === "anon" || !_optionalChain([identity, 'access', _47 => _47.user, 'optionalAccess', _48 => _48.email])) {
1113
+ if (identity.authTier === "anon" || !_optionalChain([identity, 'access', _50 => _50.user, 'optionalAccess', _51 => _51.email])) {
1123
1114
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1124
- _chunkZFBLC5GVcjs.EmptyState,
1115
+ _chunkVBFOCTMDcjs.EmptyState,
1125
1116
  {
1126
1117
  type: "generic",
1127
1118
  title: "Sign in to manage tickets",
@@ -1192,7 +1183,7 @@ function TicketCenterAuthed({
1192
1183
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-3 text-xs text-ods-text-secondary", children: [
1193
1184
  lastUpdatedAt && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { children: [
1194
1185
  "Updated ",
1195
- _chunkWI76ZUBEcjs.formatRelativeTime.call(void 0, new Date(lastUpdatedAt))
1186
+ _chunkTWKPYZNQcjs.formatRelativeTime.call(void 0, new Date(lastUpdatedAt))
1196
1187
  ] }),
1197
1188
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1198
1189
  _chunkUXZ3ZJ3Mcjs.Button,
@@ -1208,15 +1199,15 @@ function TicketCenterAuthed({
1208
1199
  )
1209
1200
  ] })
1210
1201
  ] }),
1211
- isLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketListSkeleton, {}) : merged.length === 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWI76ZUBEcjs.Card, { className: "p-6", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1212
- _chunkZFBLC5GVcjs.EmptyState,
1202
+ isLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketListSkeleton, {}) : merged.length === 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTWKPYZNQcjs.Card, { className: "p-6", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1203
+ _chunkVBFOCTMDcjs.EmptyState,
1213
1204
  {
1214
1205
  type: "generic",
1215
1206
  title: "No tickets yet",
1216
1207
  description: "Open one above to start the conversation.",
1217
1208
  showCTA: false
1218
1209
  }
1219
- ) }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWI76ZUBEcjs.Card, { className: "overflow-hidden", children: merged.map((ticket) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1210
+ ) }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTWKPYZNQcjs.Card, { className: "overflow-hidden", children: merged.map((ticket) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1220
1211
  TicketRow,
1221
1212
  {
1222
1213
  ticket,
@@ -1236,7 +1227,7 @@ function TicketCenterAuthed({
1236
1227
  }
1237
1228
  function TicketCenterSkeleton() {
1238
1229
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-6", children: [
1239
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkWI76ZUBEcjs.Card, { className: "p-6", children: [
1230
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkTWKPYZNQcjs.Card, { className: "p-6", children: [
1240
1231
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUXZ3ZJ3Mcjs.Skeleton, { className: "h-7 w-48 mb-4" }),
1241
1232
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUXZ3ZJ3Mcjs.Skeleton, { className: "h-10 w-full mb-3" }),
1242
1233
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUXZ3ZJ3Mcjs.Skeleton, { className: "h-24 w-full" })
@@ -1245,7 +1236,7 @@ function TicketCenterSkeleton() {
1245
1236
  ] });
1246
1237
  }
1247
1238
  function TicketListSkeleton() {
1248
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWI76ZUBEcjs.Card, { className: "overflow-hidden", children: [0, 1, 2].map((i) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "h-20 px-4 flex items-center gap-4 border-b border-ods-border last:border-b-0", children: [
1239
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTWKPYZNQcjs.Card, { className: "overflow-hidden", children: [0, 1, 2].map((i) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "h-20 px-4 flex items-center gap-4 border-b border-ods-border last:border-b-0", children: [
1249
1240
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex-1 flex flex-col gap-2", children: [
1250
1241
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUXZ3ZJ3Mcjs.Skeleton, { className: "h-4 w-2/3" }),
1251
1242
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUXZ3ZJ3Mcjs.Skeleton, { className: "h-3 w-full" })
@@ -1258,12 +1249,10 @@ function TicketListSkeleton() {
1258
1249
  // src/components/tickets/help-center-list.tsx
1259
1250
 
1260
1251
 
1261
- _chunkZFBLC5GVcjs.init_unified_pagination.call(void 0, );
1252
+ _chunkVBFOCTMDcjs.init_unified_pagination.call(void 0, );
1262
1253
 
1263
1254
  // src/components/tickets/help-center-card.tsx
1264
1255
 
1265
-
1266
- var STICKY_HEADER_OFFSET_PX = 96;
1267
1256
  function HelpCenterCard({
1268
1257
  ticket,
1269
1258
  expanded,
@@ -1278,42 +1267,24 @@ function HelpCenterCard({
1278
1267
  const optimistic = isOptimistic(ticket);
1279
1268
  const rawStatus = (_nullishCoalesce(ticket.status, () => ( "OPEN"))).toUpperCase();
1280
1269
  const priority = (_nullishCoalesce(ticket.priority, () => ( ""))).toUpperCase();
1281
- const relativeUpdated = ticket.hubspot_updated_at ? _chunkWI76ZUBEcjs.formatRelativeTime.call(void 0, ticket.hubspot_updated_at) : "recently";
1270
+ const relativeUpdated = ticket.hubspot_updated_at ? _chunkTWKPYZNQcjs.formatRelativeTime.call(void 0, ticket.hubspot_updated_at) : "recently";
1282
1271
  const title = (ticket.subject || "").trim() || "(untitled)";
1283
1272
  const subtitle = `UPDATED ${relativeUpdated}, #${ticket.external_id || "\u2014"}${ticket.pipeline_stage_label ? `, ${ticket.pipeline_stage_label}` : ""}`;
1284
1273
  const description = _nullishCoalesce(_nullishCoalesce(ticket.preview, () => ( ticket.body)), () => ( ""));
1285
1274
  const isExpandable = !optimistic;
1286
1275
  const isExpanded = expanded && isExpandable;
1287
- const rowRef = _react.useRef.call(void 0, null);
1288
- const handleClick = _react.useCallback.call(void 0, () => {
1289
- onToggle(ticket.id);
1290
- _chunkWI76ZUBEcjs.scrollElementIntoView.call(void 0, rowRef.current, {
1291
- headerOffset: STICKY_HEADER_OFFSET_PX,
1292
- adjustTargetY: (raw) => {
1293
- if (!rowRef.current) return raw;
1294
- const expandedDrawer = document.querySelector(
1295
- 'div[id^="help-center-drawer-"]'
1296
- );
1297
- if (!(expandedDrawer instanceof HTMLElement)) return raw;
1298
- const drawerRect = expandedDrawer.getBoundingClientRect();
1299
- const myRect = rowRef.current.getBoundingClientRect();
1300
- if (drawerRect.bottom > myRect.top) return raw;
1301
- return raw - drawerRect.height;
1302
- }
1303
- });
1304
- }, [onToggle, ticket.id]);
1305
1276
  const rightBadges = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
1306
1277
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1307
- _chunkWI76ZUBEcjs.StatusBadge,
1278
+ _chunkTWKPYZNQcjs.StatusBadge,
1308
1279
  {
1309
1280
  text: rawStatus,
1310
- colorScheme: _chunkWI76ZUBEcjs.getStatusColorScheme.call(void 0, rawStatus),
1281
+ colorScheme: _chunkTWKPYZNQcjs.getStatusColorScheme.call(void 0, rawStatus),
1311
1282
  variant: "card",
1312
1283
  className: "border border-ods-border"
1313
1284
  }
1314
1285
  ),
1315
1286
  priority && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1316
- _chunkWI76ZUBEcjs.StatusBadge,
1287
+ _chunkTWKPYZNQcjs.StatusBadge,
1317
1288
  {
1318
1289
  text: priority,
1319
1290
  colorScheme: mapPriorityScheme(priority),
@@ -1325,8 +1296,6 @@ function HelpCenterCard({
1325
1296
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
1326
1297
  "div",
1327
1298
  {
1328
- ref: rowRef,
1329
- style: { scrollMarginTop: STICKY_HEADER_OFFSET_PX },
1330
1299
  className: `border-b border-ods-border last:border-b-0 ${optimistic ? "opacity-60" : ""}`,
1331
1300
  "aria-busy": optimistic || void 0,
1332
1301
  children: [
@@ -1334,13 +1303,13 @@ function HelpCenterCard({
1334
1303
  "button",
1335
1304
  {
1336
1305
  type: "button",
1337
- onClick: isExpandable ? handleClick : void 0,
1306
+ onClick: isExpandable ? () => onToggle(ticket.id) : void 0,
1338
1307
  disabled: !isExpandable,
1339
1308
  "aria-expanded": isExpandable ? isExpanded : void 0,
1340
1309
  "aria-controls": isExpanded ? `help-center-drawer-${ticket.id}` : void 0,
1341
1310
  className: "w-full text-left p-[12px] md:p-[16px] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent focus-visible:ring-inset disabled:cursor-default",
1342
1311
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1343
- _chunkZFBLC5GVcjs.DevCardRowContent,
1312
+ _chunkVBFOCTMDcjs.DevCardRowContent,
1344
1313
  {
1345
1314
  title,
1346
1315
  subtitle,
@@ -1413,7 +1382,7 @@ function HelpCenterCreateForm({
1413
1382
  const [subject, setSubject] = _react.useState.call(void 0, "");
1414
1383
  const [subjectError, setSubjectError] = _react.useState.call(void 0, null);
1415
1384
  const subjectField = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col", children: [
1416
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkWI76ZUBEcjs.Label, { htmlFor: "help-center-subject", children: [
1385
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkTWKPYZNQcjs.Label, { htmlFor: "help-center-subject", children: [
1417
1386
  "Subject",
1418
1387
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-accent", children: "*" })
1419
1388
  ] }),
@@ -1445,7 +1414,7 @@ function HelpCenterCreateForm({
1445
1414
  )
1446
1415
  ] });
1447
1416
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1448
- _chunkVTUIMMHOcjs.ContactForm,
1417
+ _chunkMDTIOPVScjs.ContactForm,
1449
1418
  {
1450
1419
  title: "Open a new ticket",
1451
1420
  footerText: "The support team typically responds within one business day.",
@@ -1483,7 +1452,7 @@ function HelpCenterCreateForm({
1483
1452
  // src/components/tickets/help-center-list.tsx
1484
1453
 
1485
1454
  function HelpCenterList({ toast: toast2 = _chunkEH3RWVF3cjs.toast } = {}) {
1486
- const identity = _chunkWI76ZUBEcjs.useChatIdentity.call(void 0, );
1455
+ const identity = _chunkTWKPYZNQcjs.useChatIdentity.call(void 0, );
1487
1456
  const searchParams = _chunkG7UE6RKVcjs.useSearchParams.call(void 0, );
1488
1457
  const router = _chunkG7UE6RKVcjs.useRouter.call(void 0, );
1489
1458
  const pathname = _chunkG7UE6RKVcjs.usePathname.call(void 0, );
@@ -1492,11 +1461,11 @@ function HelpCenterList({ toast: toast2 = _chunkEH3RWVF3cjs.toast } = {}) {
1492
1461
  const rawPage = Number(searchParams.get("page"));
1493
1462
  const page = Number.isFinite(rawPage) && rawPage > 0 ? Math.floor(rawPage) : 1;
1494
1463
  if (identity.isLoading) {
1495
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZFBLC5GVcjs.DevSectionPage, { sectionKey: "tickets", preControls: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HelpCenterCreateFormSkeleton, {}), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZFBLC5GVcjs.DevCardRowSkeletonList, {}) });
1464
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBFOCTMDcjs.DevSectionPage, { sectionKey: "tickets", preControls: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HelpCenterCreateFormSkeleton, {}), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBFOCTMDcjs.DevCardRowSkeletonList, {}) });
1496
1465
  }
1497
- if (identity.authTier === "anon" || !_optionalChain([identity, 'access', _49 => _49.user, 'optionalAccess', _50 => _50.email])) {
1498
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZFBLC5GVcjs.DevSectionPage, { sectionKey: "tickets", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1499
- _chunkZFBLC5GVcjs.EmptyState,
1466
+ if (identity.authTier === "anon" || !_optionalChain([identity, 'access', _52 => _52.user, 'optionalAccess', _53 => _53.email])) {
1467
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBFOCTMDcjs.DevSectionPage, { sectionKey: "tickets", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1468
+ _chunkVBFOCTMDcjs.EmptyState,
1500
1469
  {
1501
1470
  type: "generic",
1502
1471
  title: "Sign in to manage tickets",
@@ -1505,7 +1474,7 @@ function HelpCenterList({ toast: toast2 = _chunkEH3RWVF3cjs.toast } = {}) {
1505
1474
  }
1506
1475
  ) });
1507
1476
  }
1508
- const sessionName = [_optionalChain([identity, 'access', _51 => _51.user, 'optionalAccess', _52 => _52.firstName]), _optionalChain([identity, 'access', _53 => _53.user, 'optionalAccess', _54 => _54.lastName])].filter(Boolean).join(" ").trim() || _optionalChain([identity, 'access', _55 => _55.user, 'optionalAccess', _56 => _56.email, 'optionalAccess', _57 => _57.split, 'call', _58 => _58("@"), 'access', _59 => _59[0]]) || "Customer";
1477
+ const sessionName = [_optionalChain([identity, 'access', _54 => _54.user, 'optionalAccess', _55 => _55.firstName]), _optionalChain([identity, 'access', _56 => _56.user, 'optionalAccess', _57 => _57.lastName])].filter(Boolean).join(" ").trim() || _optionalChain([identity, 'access', _58 => _58.user, 'optionalAccess', _59 => _59.email, 'optionalAccess', _60 => _60.split, 'call', _61 => _61("@"), 'access', _62 => _62[0]]) || "Customer";
1509
1478
  const sessionEmail = identity.user.email;
1510
1479
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1511
1480
  HelpCenterListAuthed,
@@ -1596,15 +1565,15 @@ function HelpCenterListAuthed({
1596
1565
  ] }),
1597
1566
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUXZ3ZJ3Mcjs.Button, { type: "button", variant: "accent", onClick: () => refetch(), children: "Retry" })
1598
1567
  ] }),
1599
- !error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full", children: isLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZFBLC5GVcjs.DevCardRowSkeletonList, {}) : !hasResults && isFetching ? (
1568
+ !error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full", children: isLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBFOCTMDcjs.DevCardRowSkeletonList, {}) : !hasResults && isFetching ? (
1600
1569
  // Bridge state — background refetch in flight and the
1601
1570
  // optimistic placeholder was just removed by the mutation
1602
1571
  // callback. Without this branch "No tickets yet" would flash
1603
1572
  // for ~50ms between `removeOptimistic` and the server
1604
1573
  // response landing.
1605
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZFBLC5GVcjs.DevCardRowSkeletonList, { rows: 1 })
1574
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBFOCTMDcjs.DevCardRowSkeletonList, { rows: 1 })
1606
1575
  ) : !hasResults ? hasActiveFilters ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1607
- _chunkZFBLC5GVcjs.EmptyState,
1576
+ _chunkVBFOCTMDcjs.EmptyState,
1608
1577
  {
1609
1578
  type: "search",
1610
1579
  title: "No tickets found",
@@ -1619,41 +1588,31 @@ function HelpCenterListAuthed({
1619
1588
  }
1620
1589
  }
1621
1590
  ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1622
- _chunkZFBLC5GVcjs.EmptyState,
1591
+ _chunkVBFOCTMDcjs.EmptyState,
1623
1592
  {
1624
1593
  type: "generic",
1625
1594
  title: "No tickets yet",
1626
1595
  description: "Open one above to start the conversation with the support team.",
1627
1596
  showCTA: false
1628
1597
  }
1629
- ) : (
1630
- // `overflow-clip` (NOT `overflow-hidden`) — both visually
1631
- // clip the rounded corners, but `hidden` makes the element
1632
- // a "scroll container" per CSSOM spec, which causes
1633
- // `scrollIntoView` calls inside (`<HelpCenterCard>` click
1634
- // handlers) to try scrolling THIS div (can't, overflow
1635
- // hidden) instead of bubbling up to the window. `clip`
1636
- // keeps the visual clip but NOT the scroll-container
1637
- // status, so click-to-scroll actually moves the page.
1638
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "bg-ods-card border border-ods-border rounded-[6px] overflow-clip w-full", children: merged.map((ticket) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1639
- HelpCenterCard,
1640
- {
1641
- ticket,
1642
- expanded: expandedTicketId === ticket.id,
1643
- onToggle: toggleRow,
1644
- busy: isOptimistic(ticket) ? false : actions.isRowBusy(ticket.id),
1645
- supportSystemDown,
1646
- onSendMessage: actions.sendMessage,
1647
- onClose: actions.closeTicket,
1648
- onReopen: actions.reopenTicket,
1649
- onActionCollapsed: () => setExpandedTicketId(null)
1650
- },
1651
- ticket.id
1652
- )) })
1653
- ) }),
1654
- !error && totalPages > 1 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZFBLC5GVcjs.UnifiedPagination, { currentPage: page, totalPages })
1598
+ ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "bg-ods-card border border-ods-border rounded-[6px] overflow-hidden w-full", children: merged.map((ticket) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1599
+ HelpCenterCard,
1600
+ {
1601
+ ticket,
1602
+ expanded: expandedTicketId === ticket.id,
1603
+ onToggle: toggleRow,
1604
+ busy: isOptimistic(ticket) ? false : actions.isRowBusy(ticket.id),
1605
+ supportSystemDown,
1606
+ onSendMessage: actions.sendMessage,
1607
+ onClose: actions.closeTicket,
1608
+ onReopen: actions.reopenTicket,
1609
+ onActionCollapsed: () => setExpandedTicketId(null)
1610
+ },
1611
+ ticket.id
1612
+ )) }) }),
1613
+ !error && totalPages > 1 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBFOCTMDcjs.UnifiedPagination, { currentPage: page, totalPages })
1655
1614
  ] });
1656
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZFBLC5GVcjs.DevSectionPage, { sectionKey: "tickets", preControls: form, children: body });
1615
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBFOCTMDcjs.DevSectionPage, { sectionKey: "tickets", preControls: form, children: body });
1657
1616
  }
1658
1617
 
1659
1618