@flamingo-stack/openframe-frontend-core 0.0.757 → 0.0.759

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 (98) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/{chunk-7RADSQJF.cjs → chunk-4IXA5CJT.cjs} +142 -96
  3. package/dist/{chunk-S5ITKW6G.cjs → chunk-6VDOHVYE.cjs} +83 -82
  4. package/dist/{chunk-RPADJ2E6.cjs → chunk-7ITYKDJN.cjs} +3 -3
  5. package/dist/{chunk-ORC3ZKHT.cjs → chunk-CDA2MY7U.cjs} +48 -24
  6. package/dist/{chunk-L2RNZOCI.cjs → chunk-DHFQECP3.cjs} +11 -11
  7. package/dist/{chunk-33RJU565.cjs → chunk-EFCX5SYN.cjs} +2 -2
  8. package/dist/{chunk-WSRMYHIV.cjs → chunk-F7WIKBRI.cjs} +2 -2
  9. package/dist/{chunk-JEIAB7JQ.cjs → chunk-G7RDJACG.cjs} +2 -2
  10. package/dist/{chunk-AZFSHHWT.cjs → chunk-I4W4DQ6C.cjs} +4 -4
  11. package/dist/{chunk-BLYP7ZT4.cjs → chunk-O75A3FBT.cjs} +47 -36
  12. package/dist/{chunk-NTGIQP7O.cjs → chunk-QU5K52OP.cjs} +8 -2
  13. package/dist/{chunk-VD4HVLXG.cjs → chunk-S23DIVIP.cjs} +25 -25
  14. package/dist/{chunk-UWXUGP3V.cjs → chunk-SIOSQMIB.cjs} +3 -3
  15. package/dist/{chunk-33PJH2TF.cjs → chunk-SYACKQYF.cjs} +13 -13
  16. package/dist/{chunk-HB3QFOHD.cjs → chunk-WBSYC6EY.cjs} +5 -5
  17. package/dist/{chunk-CT3UDNAV.cjs → chunk-WGFTIEHY.cjs} +75 -68
  18. package/dist/{chunk-3C4U4UW6.cjs → chunk-XXM74P3N.cjs} +1 -1
  19. package/dist/{cloud-tenants-PA5UU2KQ.cjs → cloud-tenants-YUMG3O36.cjs} +4 -4
  20. package/dist/components/case-studies/index.cjs +12 -12
  21. package/dist/components/chat/index.cjs +2 -2
  22. package/dist/components/contact/index.cjs +5 -5
  23. package/dist/components/docs/doc-viewer.d.ts +4 -0
  24. package/dist/components/docs/doc-viewer.d.ts.map +1 -1
  25. package/dist/components/docs/doc-viewer.js +3 -0
  26. package/dist/components/docs/index.cjs +8 -8
  27. package/dist/components/docs/use-document-tree.d.ts.map +1 -1
  28. package/dist/components/docs/use-document-tree.js +9 -1
  29. package/dist/components/embeds/index.cjs +5 -5
  30. package/dist/components/faq/index.cjs +6 -6
  31. package/dist/components/features/index.cjs +4 -4
  32. package/dist/components/help-center-pages/index.cjs +58 -57
  33. package/dist/components/help-center-pages/trust-center-page.d.ts +7 -1
  34. package/dist/components/help-center-pages/trust-center-page.d.ts.map +1 -1
  35. package/dist/components/help-center-pages/trust-center-page.js +4 -3
  36. package/dist/components/index.cjs +35 -33
  37. package/dist/components/layout/page-data-sync.d.ts +18 -0
  38. package/dist/components/layout/page-data-sync.d.ts.map +1 -0
  39. package/dist/components/layout/page-data-sync.js +33 -0
  40. package/dist/components/meeting-scheduler/index.cjs +20 -20
  41. package/dist/components/navigation/index.cjs +7 -7
  42. package/dist/components/onboarding-guides/index.cjs +6 -6
  43. package/dist/components/product-demo/index.cjs +7 -7
  44. package/dist/components/shared/delivery/delivery-lists.d.ts.map +1 -1
  45. package/dist/components/shared/delivery/delivery-lists.js +6 -0
  46. package/dist/components/shared/dev-section/dev-section-view.d.ts +3 -16
  47. package/dist/components/shared/dev-section/dev-section-view.d.ts.map +1 -1
  48. package/dist/components/shared/dev-section/dev-section-view.js +6 -13
  49. package/dist/components/shared/legal-document/legal-document-page.d.ts +1 -3
  50. package/dist/components/shared/legal-document/legal-document-page.d.ts.map +1 -1
  51. package/dist/components/shared/legal-document/legal-document-page.js +3 -9
  52. package/dist/components/shared/roadmap/roadmap-view.d.ts.map +1 -1
  53. package/dist/components/shared/roadmap/roadmap-view.js +29 -17
  54. package/dist/components/tickets/hooks/use-tickets-list.d.ts +4 -0
  55. package/dist/components/tickets/hooks/use-tickets-list.d.ts.map +1 -1
  56. package/dist/components/tickets/hooks/use-tickets-list.js +1 -0
  57. package/dist/components/tickets/index.cjs +9 -9
  58. package/dist/components/tickets/ticket-center.d.ts.map +1 -1
  59. package/dist/components/tickets/ticket-center.js +5 -6
  60. package/dist/components/ui/data-attribution.d.ts +13 -0
  61. package/dist/components/ui/data-attribution.d.ts.map +1 -1
  62. package/dist/components/ui/data-attribution.js +30 -1
  63. package/dist/components/ui/drawer.d.ts.map +1 -1
  64. package/dist/components/ui/drawer.js +5 -2
  65. package/dist/components/ui/index.cjs +6 -4
  66. package/dist/{devices-72YSJM4Z.cjs → devices-EFDFNWIV.cjs} +5 -5
  67. package/dist/{embeddable-chat-CHHWPGAY.cjs → embeddable-chat-LTXUQWEK.cjs} +4 -4
  68. package/dist/index.cjs +14 -8
  69. package/dist/{knowledge-76RIDA7P.cjs → knowledge-UT2XI45N.cjs} +4 -4
  70. package/dist/{logs-ODMJ3KOP.cjs → logs-ZTYEI35Y.cjs} +12 -12
  71. package/dist/{policies-5BZ5X2S4.cjs → policies-S3IF2U3D.cjs} +8 -8
  72. package/dist/{scripts-TWQPG46M.cjs → scripts-IZWNCX5A.cjs} +9 -9
  73. package/dist/{software-update-TSGISQV5.cjs → software-update-6T4GFJPA.cjs} +7 -7
  74. package/dist/types/data-sync.d.ts +22 -0
  75. package/dist/types/data-sync.d.ts.map +1 -0
  76. package/dist/types/data-sync.js +12 -0
  77. package/dist/types/doc-source.d.ts +4 -0
  78. package/dist/types/doc-source.d.ts.map +1 -1
  79. package/dist/types/index.cjs +12 -0
  80. package/dist/types/index.d.ts +1 -0
  81. package/dist/types/index.d.ts.map +1 -1
  82. package/dist/types/index.js +1 -0
  83. package/package.json +1 -1
  84. package/src/components/docs/doc-viewer.tsx +9 -0
  85. package/src/components/docs/use-document-tree.ts +10 -0
  86. package/src/components/help-center-pages/trust-center-page.tsx +10 -3
  87. package/src/components/layout/page-data-sync.tsx +60 -0
  88. package/src/components/shared/delivery/delivery-lists.tsx +12 -2
  89. package/src/components/shared/dev-section/dev-section-view.tsx +37 -56
  90. package/src/components/shared/legal-document/legal-document-page.tsx +5 -13
  91. package/src/components/shared/roadmap/roadmap-view.tsx +37 -20
  92. package/src/components/tickets/hooks/use-tickets-list.ts +7 -0
  93. package/src/components/tickets/ticket-center.tsx +7 -3
  94. package/src/components/ui/data-attribution.tsx +44 -0
  95. package/src/components/ui/drawer.tsx +12 -1
  96. package/src/types/data-sync.ts +26 -0
  97. package/src/types/doc-source.ts +4 -0
  98. package/src/types/index.ts +1 -0
@@ -1,14 +1,15 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
2
2
 
3
3
 
4
- var _chunkHB3QFOHDcjs = require('./chunk-HB3QFOHD.cjs');
4
+ var _chunkWBSYC6EYcjs = require('./chunk-WBSYC6EY.cjs');
5
5
 
6
6
 
7
7
 
8
8
 
9
9
 
10
10
 
11
- var _chunkORC3ZKHTcjs = require('./chunk-ORC3ZKHT.cjs');
11
+
12
+ var _chunkCDA2MY7Ucjs = require('./chunk-CDA2MY7U.cjs');
12
13
 
13
14
 
14
15
 
@@ -19,7 +20,8 @@ var _chunk5E6JHOGXcjs = require('./chunk-5E6JHOGX.cjs');
19
20
 
20
21
 
21
22
 
22
- var _chunkWSRMYHIVcjs = require('./chunk-WSRMYHIV.cjs');
23
+ var _chunkF7WIKBRIcjs = require('./chunk-F7WIKBRI.cjs');
24
+
23
25
 
24
26
 
25
27
 
@@ -31,7 +33,7 @@ var _chunkWSRMYHIVcjs = require('./chunk-WSRMYHIV.cjs');
31
33
 
32
34
 
33
35
 
34
- var _chunk7RADSQJFcjs = require('./chunk-7RADSQJF.cjs');
36
+ var _chunk4IXA5CJTcjs = require('./chunk-4IXA5CJT.cjs');
35
37
 
36
38
 
37
39
 
@@ -44,7 +46,7 @@ var _chunkVUWPLQBYcjs = require('./chunk-VUWPLQBY.cjs');
44
46
 
45
47
 
46
48
 
47
- var _chunk3C4U4UW6cjs = require('./chunk-3C4U4UW6.cjs');
49
+ var _chunkXXM74P3Ncjs = require('./chunk-XXM74P3N.cjs');
48
50
 
49
51
 
50
52
 
@@ -132,7 +134,7 @@ var TicketActionFailure = class extends Error {
132
134
  function useTicketActions(options) {
133
135
  const queryClient = _reactquery.useQueryClient.call(void 0, );
134
136
  const ticketActionEndpoint = _nullishCoalesce(_chunkUJ7AXHRZcjs.useRequiredChatRuntime.call(void 0, ).endpoints.ticketActionUrl, () => ( TICKET_ACTION_ENDPOINT));
135
- const ticketLive = _chunkWSRMYHIVcjs.useOptionalTicketLive.call(void 0, );
137
+ const ticketLive = _chunkF7WIKBRIcjs.useOptionalTicketLive.call(void 0, );
136
138
  const notifyTicketCreated = _optionalChain([ticketLive, 'optionalAccess', _2 => _2.notifyTicketCreated]);
137
139
  const { prependOptimistic, removeOptimistic, removeTicketFromCache, toast: toast2, onSupportSystemDown } = options;
138
140
  const formInFlightRef = _react.useRef.call(void 0, null);
@@ -293,10 +295,10 @@ function useTicketActions(options) {
293
295
  ..._optionalChain([input, 'access', _3 => _3.attachments, 'optionalAccess', _4 => _4.length]) ? { attachments: input.attachments } : {}
294
296
  });
295
297
  if (result.mirror_synced === false) {
296
- toast2(_chunkWSRMYHIVcjs.TOAST_COPY.open_mirror_pending);
298
+ toast2(_chunkF7WIKBRIcjs.TOAST_COPY.open_mirror_pending);
297
299
  watchMirrorSync(placeholderId, result.ticket_id);
298
300
  } else {
299
- toast2(_chunkWSRMYHIVcjs.TOAST_COPY.open_success);
301
+ toast2(_chunkF7WIKBRIcjs.TOAST_COPY.open_success);
300
302
  await queryClient.invalidateQueries({ queryKey: ["tickets"] });
301
303
  removeOptimistic(placeholderId);
302
304
  }
@@ -382,7 +384,7 @@ function useTicketActions(options) {
382
384
  ...hasText ? { content_addendum: trimmed } : {},
383
385
  ...hasFiles ? { attachments } : {}
384
386
  },
385
- _chunkWSRMYHIVcjs.TOAST_COPY.comment_success,
387
+ _chunkF7WIKBRIcjs.TOAST_COPY.comment_success,
386
388
  "send message"
387
389
  );
388
390
  if (ok) {
@@ -405,13 +407,13 @@ function useTicketActions(options) {
405
407
  status: "CLOSED",
406
408
  ..._optionalChain([resolution, 'optionalAccess', _6 => _6.trim, 'call', _7 => _7()]) ? { resolution: resolution.trim() } : {}
407
409
  },
408
- _chunkWSRMYHIVcjs.TOAST_COPY.close_success,
410
+ _chunkF7WIKBRIcjs.TOAST_COPY.close_success,
409
411
  "close ticket"
410
412
  ),
411
413
  [updateTicket]
412
414
  );
413
415
  const reopenTicket = _react.useCallback.call(void 0,
414
- (ticket) => updateTicket(ticket, { status: "OPEN" }, _chunkWSRMYHIVcjs.TOAST_COPY.reopen_success, "reopen ticket"),
416
+ (ticket) => updateTicket(ticket, { status: "OPEN" }, _chunkF7WIKBRIcjs.TOAST_COPY.reopen_success, "reopen ticket"),
415
417
  [updateTicket]
416
418
  );
417
419
  return _react.useMemo.call(void 0,
@@ -610,6 +612,7 @@ function useTicketsList(filters) {
610
612
  void query.refetch();
611
613
  },
612
614
  lastUpdatedAt: query.dataUpdatedAt || null,
615
+ sync: _nullishCoalesce(_optionalChain([data, 'optionalAccess', _21 => _21.sync]), () => ( null)),
613
616
  totalCount,
614
617
  page: echoedPage,
615
618
  pageSize: echoedPageSize,
@@ -620,14 +623,14 @@ function useTicketsList(filters) {
620
623
  // src/components/tickets/ticket-open-form.tsx
621
624
 
622
625
  var _jsxruntime = require('react/jsx-runtime');
623
- var COUNTER_VISIBLE_AT = Math.floor(_chunkWSRMYHIVcjs.TICKET_TEXT_MAX_CHARS * 0.8);
626
+ var COUNTER_VISIBLE_AT = Math.floor(_chunkF7WIKBRIcjs.TICKET_TEXT_MAX_CHARS * 0.8);
624
627
  function TicketOpenForm({ onSubmit, isSubmitting, supportSystemDown }) {
625
628
  const [subject, setSubject] = _react.useState.call(void 0, "");
626
629
  const [content, setContent] = _react.useState.call(void 0, "");
627
630
  const { attachments, readyAttachments, hasInflightUploads, addFiles, removeAttachment, clear } = _chunkQTYSYEHKcjs.useChatAttachments.call(void 0, );
628
631
  const trimmedSubject = subject.trim();
629
632
  const trimmedContent = content.trim();
630
- const overCap = content.length > _chunkWSRMYHIVcjs.TICKET_TEXT_MAX_CHARS;
633
+ const overCap = content.length > _chunkF7WIKBRIcjs.TICKET_TEXT_MAX_CHARS;
631
634
  const showCounter = content.length >= COUNTER_VISIBLE_AT;
632
635
  const canSubmit = !isSubmitting && !supportSystemDown && !hasInflightUploads && trimmedSubject.length > 0 && trimmedContent.length > 0 && !overCap;
633
636
  const handleSubmit = async (e) => {
@@ -644,7 +647,7 @@ function TicketOpenForm({ onSubmit, isSubmitting, supportSystemDown }) {
644
647
  clear();
645
648
  }
646
649
  };
647
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7Z4EQOIXcjs.Card, { className: "p-6", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "form", { onSubmit: handleSubmit, className: "flex flex-col gap-6 md:flex-row", ..._chunk3C4U4UW6cjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS, children: [
650
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7Z4EQOIXcjs.Card, { className: "p-6", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "form", { onSubmit: handleSubmit, className: "flex flex-col gap-6 md:flex-row", ..._chunkXXM74P3Ncjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS, children: [
648
651
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "min-w-0 flex-1 md:max-w-md", children: [
649
652
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: "mb-2 text-ods-text-primary text-h2", children: "Need Support?" }),
650
653
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary text-h6", children: "Can't find what you're looking for? Submit a support ticket below \u2014 we'll follow up shortly." }),
@@ -669,7 +672,7 @@ function TicketOpenForm({ onSubmit, isSubmitting, supportSystemDown }) {
669
672
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { children: [
670
673
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "label", { htmlFor: "ticket-content", className: "mb-1 block text-ods-text-primary text-h6", children: "Your Message" }),
671
674
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
672
- _chunk7RADSQJFcjs.Textarea,
675
+ _chunk4IXA5CJTcjs.Textarea,
673
676
  {
674
677
  id: "ticket-content",
675
678
  placeholder: "Describe your issue or question in detail...",
@@ -683,7 +686,7 @@ function TicketOpenForm({ onSubmit, isSubmitting, supportSystemDown }) {
683
686
  showCounter && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { className: `mt-1 text-right text-h6 ${overCap ? "text-ods-error" : "text-ods-text-secondary"}`, children: [
684
687
  content.length,
685
688
  "/",
686
- _chunkWSRMYHIVcjs.TICKET_TEXT_MAX_CHARS
689
+ _chunkF7WIKBRIcjs.TICKET_TEXT_MAX_CHARS
687
690
  ] })
688
691
  ] }),
689
692
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -727,10 +730,10 @@ var _usesticktobottom = require('use-stick-to-bottom');
727
730
  var LIST_ENGAGEMENTS_ENDPOINT = "/api/chat/agent/list-engagements";
728
731
  function useTicketEngagements(externalTicketId, enabled = true) {
729
732
  const identity = _chunkQTYSYEHKcjs.useChatIdentity.call(void 0, );
730
- const identityKey = _nullishCoalesce(_optionalChain([identity, 'access', _21 => _21.user, 'optionalAccess', _22 => _22.email]), () => ( "anon"));
733
+ const identityKey = _nullishCoalesce(_optionalChain([identity, 'access', _22 => _22.user, 'optionalAccess', _23 => _23.email]), () => ( "anon"));
731
734
  const listEngagementsEndpoint = _nullishCoalesce(_chunkUJ7AXHRZcjs.useRequiredChatRuntime.call(void 0, ).endpoints.listEngagementsUrl, () => ( LIST_ENGAGEMENTS_ENDPOINT));
732
735
  const fetchable = enabled && !!externalTicketId && !externalTicketId.startsWith("temp-");
733
- const queryEnabled = fetchable && identity.authTier !== "anon" && !!_optionalChain([identity, 'access', _23 => _23.user, 'optionalAccess', _24 => _24.email]);
736
+ const queryEnabled = fetchable && identity.authTier !== "anon" && !!_optionalChain([identity, 'access', _24 => _24.user, 'optionalAccess', _25 => _25.email]);
734
737
  const query = _reactquery.useQuery.call(void 0, {
735
738
  queryKey: ["ticket-engagements", externalTicketId, identityKey],
736
739
  enabled: queryEnabled,
@@ -799,7 +802,7 @@ function TicketLinkedDeliveryCard({ clickup, className }) {
799
802
  dateClosed: clickup.date_closed,
800
803
  clickupUrl: _nullishCoalesce(clickup.clickup_url, () => ( ""))
801
804
  };
802
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `${_chunk7Z4EQOIXcjs.CONTENT_CARD_SKELETON_FRAME_CLASS} ${_nullishCoalesce(className, () => ( ""))}`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkORC3ZKHTcjs.DeliveryRow, { item, href: clickup.delivery_href, caption: "Linked delivery" }) });
805
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `${_chunk7Z4EQOIXcjs.CONTENT_CARD_SKELETON_FRAME_CLASS} ${_nullishCoalesce(className, () => ( ""))}`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCDA2MY7Ucjs.DeliveryRow, { item, href: clickup.delivery_href, caption: "Linked delivery" }) });
803
806
  }
804
807
 
805
808
  // src/components/tickets/ticket-reply-composer.tsx
@@ -852,7 +855,7 @@ function TicketReplyComposer({
852
855
  sending: busy || attachments.hasInflightUploads,
853
856
  disabled: supportSystemDown,
854
857
  allowEmptySend: hasReadyFiles,
855
- maxLength: _chunkWSRMYHIVcjs.TICKET_TEXT_MAX_CHARS,
858
+ maxLength: _chunkF7WIKBRIcjs.TICKET_TEXT_MAX_CHARS,
856
859
  onSend: handleSend
857
860
  }
858
861
  ),
@@ -881,25 +884,25 @@ function TicketReplyComposer({
881
884
  }
882
885
  )
883
886
  ] }),
884
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7RADSQJFcjs.AlertDialog, { open: closeDialogOpen, onOpenChange: setCloseDialogOpen, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk7RADSQJFcjs.AlertDialogContent, { className: "border-ods-border bg-ods-card", children: [
885
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk7RADSQJFcjs.AlertDialogHeader, { children: [
886
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7RADSQJFcjs.AlertDialogTitle, { className: "text-ods-text-primary", children: "Close this ticket?" }),
887
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7RADSQJFcjs.AlertDialogDescription, { className: "text-ods-text-secondary", children: "Add an optional resolution note below. You can reopen the ticket later if needed." })
887
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4IXA5CJTcjs.AlertDialog, { open: closeDialogOpen, onOpenChange: setCloseDialogOpen, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4IXA5CJTcjs.AlertDialogContent, { className: "border-ods-border bg-ods-card", children: [
888
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4IXA5CJTcjs.AlertDialogHeader, { children: [
889
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4IXA5CJTcjs.AlertDialogTitle, { className: "text-ods-text-primary", children: "Close this ticket?" }),
890
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4IXA5CJTcjs.AlertDialogDescription, { className: "text-ods-text-secondary", children: "Add an optional resolution note below. You can reopen the ticket later if needed." })
888
891
  ] }),
889
892
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
890
- _chunk7RADSQJFcjs.Textarea,
893
+ _chunk4IXA5CJTcjs.Textarea,
891
894
  {
892
895
  value: resolution,
893
896
  onChange: (e) => setResolution(e.target.value),
894
897
  placeholder: "Resolution (optional)",
895
898
  rows: 3,
896
- maxLength: _chunkWSRMYHIVcjs.TICKET_TEXT_MAX_CHARS,
899
+ maxLength: _chunkF7WIKBRIcjs.TICKET_TEXT_MAX_CHARS,
897
900
  className: "mt-2"
898
901
  }
899
902
  ),
900
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk7RADSQJFcjs.AlertDialogFooter, { children: [
903
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk4IXA5CJTcjs.AlertDialogFooter, { children: [
901
904
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
902
- _chunk7RADSQJFcjs.AlertDialogCancel,
905
+ _chunk4IXA5CJTcjs.AlertDialogCancel,
903
906
  {
904
907
  disabled: busy,
905
908
  className: "border-ods-border bg-transparent text-ods-text-primary hover:bg-ods-border",
@@ -907,7 +910,7 @@ function TicketReplyComposer({
907
910
  }
908
911
  ),
909
912
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
910
- _chunk7RADSQJFcjs.AlertDialogAction,
913
+ _chunk4IXA5CJTcjs.AlertDialogAction,
911
914
  {
912
915
  onClick: () => void confirmClose(),
913
916
  disabled: busy,
@@ -970,11 +973,11 @@ var TICKET_FEED_INNER = "flex flex-col gap-4 md:gap-6 px-4 md:px-6 py-4 md:py-6"
970
973
  var TICKET_FEED_SKELETON_ROWS = 6;
971
974
  function TicketTimelinePanel({ ticket }) {
972
975
  const identity = _chunkQTYSYEHKcjs.useChatIdentity.call(void 0, );
973
- const externalId = _chunkWSRMYHIVcjs.isOptimistic.call(void 0, ticket) ? null : ticket.external_id;
976
+ const externalId = _chunkF7WIKBRIcjs.isOptimistic.call(void 0, ticket) ? null : ticket.external_id;
974
977
  const { engagements, isLoading } = useTicketEngagements(externalId, !!externalId);
975
- const live = _chunkWSRMYHIVcjs.useOptionalTicketLive.call(void 0, );
976
- const setOpenTicketId = _optionalChain([live, 'optionalAccess', _25 => _25.setOpenTicketId]);
977
- const markRead = _optionalChain([live, 'optionalAccess', _26 => _26.markRead]);
978
+ const live = _chunkF7WIKBRIcjs.useOptionalTicketLive.call(void 0, );
979
+ const setOpenTicketId = _optionalChain([live, 'optionalAccess', _26 => _26.setOpenTicketId]);
980
+ const markRead = _optionalChain([live, 'optionalAccess', _27 => _27.markRead]);
978
981
  const markReadDebounceRef = _react.useRef.call(void 0, null);
979
982
  _react.useEffect.call(void 0, () => {
980
983
  if (!externalId || !setOpenTicketId || !markRead) return void 0;
@@ -996,7 +999,7 @@ function TicketTimelinePanel({ ticket }) {
996
999
  markReadDebounceRef.current = setTimeout(() => {
997
1000
  markReadDebounceRef.current = null;
998
1001
  void markRead(externalId);
999
- }, _chunkWSRMYHIVcjs.TICKET_MARK_READ_DEBOUNCE_MS);
1002
+ }, _chunkF7WIKBRIcjs.TICKET_MARK_READ_DEBOUNCE_MS);
1000
1003
  }, [engagementsCount, externalId, markRead]);
1001
1004
  const { scrollRef, contentRef } = _usesticktobottom.useStickToBottom.call(void 0, { initial: "instant", resize: "smooth" });
1002
1005
  const bodyTurns = ticket.body ? ticket.body.split(TURN_SEPARATOR_RE).map((t) => t.trim()).filter(Boolean) : [];
@@ -1004,14 +1007,14 @@ function TicketTimelinePanel({ ticket }) {
1004
1007
  engagements.filter((e) => e.authorRole === "customer").map((e) => (_nullishCoalesce(e.body, () => ( ""))).trim()).filter(Boolean)
1005
1008
  );
1006
1009
  const suppressBodyTurnZero = bodyTurns.length > 0 && customerEngagementBodies.has(bodyTurns[0]);
1007
- const sessionEmailLower = _nullishCoalesce(_optionalChain([identity, 'access', _27 => _27.user, 'optionalAccess', _28 => _28.email, 'optionalAccess', _29 => _29.trim, 'call', _30 => _30(), 'access', _31 => _31.toLowerCase, 'call', _32 => _32()]), () => ( null));
1010
+ const sessionEmailLower = _nullishCoalesce(_optionalChain([identity, 'access', _28 => _28.user, 'optionalAccess', _29 => _29.email, 'optionalAccess', _30 => _30.trim, 'call', _31 => _31(), 'access', _32 => _32.toLowerCase, 'call', _33 => _33()]), () => ( null));
1008
1011
  const isViewerTheCustomer = !!sessionEmailLower && ticket.customer_emails.some((e) => e.trim().toLowerCase() === sessionEmailLower);
1009
- const viewerName = _optionalChain([identity, 'access', _33 => _33.user, 'optionalAccess', _34 => _34.name, 'optionalAccess', _35 => _35.trim, 'call', _36 => _36()]) || null;
1010
- const ticketCustomerName = _optionalChain([ticket, 'access', _37 => _37.customer_name, 'optionalAccess', _38 => _38.trim, 'call', _39 => _39()]) || null;
1011
- const customerName = (isViewerTheCustomer ? viewerName : null) || ticketCustomerName || viewerName || _optionalChain([identity, 'access', _40 => _40.user, 'optionalAccess', _41 => _41.email]) || "You";
1012
- const customerAvatar = isViewerTheCustomer ? _nullishCoalesce(_optionalChain([identity, 'access', _42 => _42.user, 'optionalAccess', _43 => _43.avatarUrl]), () => ( void 0)) : void 0;
1012
+ const viewerName = _optionalChain([identity, 'access', _34 => _34.user, 'optionalAccess', _35 => _35.name, 'optionalAccess', _36 => _36.trim, 'call', _37 => _37()]) || null;
1013
+ const ticketCustomerName = _optionalChain([ticket, 'access', _38 => _38.customer_name, 'optionalAccess', _39 => _39.trim, 'call', _40 => _40()]) || null;
1014
+ const customerName = (isViewerTheCustomer ? viewerName : null) || ticketCustomerName || viewerName || _optionalChain([identity, 'access', _41 => _41.user, 'optionalAccess', _42 => _42.email]) || "You";
1015
+ const customerAvatar = isViewerTheCustomer ? _nullishCoalesce(_optionalChain([identity, 'access', _43 => _43.user, 'optionalAccess', _44 => _44.avatarUrl]), () => ( void 0)) : void 0;
1013
1016
  if (isLoading) {
1014
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `${TICKET_FEED_FRAME} ${TICKET_FEED_HEIGHT}`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNO5UJLLQcjs.LoadingRegion, { label: "Loading messages", className: TICKET_FEED_INNER, children: Array.from({ length: TICKET_FEED_SKELETON_ROWS }, (_, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3C4U4UW6cjs.ChatMessageRowSkeleton, {}, i)) }) });
1017
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `${TICKET_FEED_FRAME} ${TICKET_FEED_HEIGHT}`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNO5UJLLQcjs.LoadingRegion, { label: "Loading messages", className: TICKET_FEED_INNER, children: Array.from({ length: TICKET_FEED_SKELETON_ROWS }, (_, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXXM74P3Ncjs.ChatMessageRowSkeleton, {}, i)) }) });
1015
1018
  }
1016
1019
  if (bodyTurns.length === 0 && engagements.length === 0) {
1017
1020
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -1030,7 +1033,7 @@ function TicketTimelinePanel({ ticket }) {
1030
1033
  const isResolution = turn.startsWith("[Resolution]");
1031
1034
  const text = isResolution ? turn.replace(/^\[Resolution\]\s*/, "") : turn;
1032
1035
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1033
- _chunk3C4U4UW6cjs.ChatMessageRow,
1036
+ _chunkXXM74P3Ncjs.ChatMessageRow,
1034
1037
  {
1035
1038
  displayName: customerName,
1036
1039
  avatarUrl: customerAvatar,
@@ -1041,12 +1044,12 @@ function TicketTimelinePanel({ ticket }) {
1041
1044
  }),
1042
1045
  engagements.map((eng) => {
1043
1046
  const isCustomer = eng.authorRole === "customer";
1044
- const isOwnReply = isCustomer && !!eng.authorId && !!_optionalChain([identity, 'access', _44 => _44.user, 'optionalAccess', _45 => _45.email]) && eng.authorId.toLowerCase() === identity.user.email.toLowerCase();
1047
+ const isOwnReply = isCustomer && !!eng.authorId && !!_optionalChain([identity, 'access', _45 => _45.user, 'optionalAccess', _46 => _46.email]) && eng.authorId.toLowerCase() === identity.user.email.toLowerCase();
1045
1048
  let author;
1046
1049
  let avatarSrc;
1047
1050
  if (isCustomer && isOwnReply) {
1048
- author = _optionalChain([identity, 'access', _46 => _46.user, 'optionalAccess', _47 => _47.name, 'optionalAccess', _48 => _48.trim, 'call', _49 => _49()]) || customerName;
1049
- avatarSrc = _nullishCoalesce(_optionalChain([identity, 'access', _50 => _50.user, 'optionalAccess', _51 => _51.avatarUrl]), () => ( void 0));
1051
+ author = _optionalChain([identity, 'access', _47 => _47.user, 'optionalAccess', _48 => _48.name, 'optionalAccess', _49 => _49.trim, 'call', _50 => _50()]) || customerName;
1052
+ avatarSrc = _nullishCoalesce(_optionalChain([identity, 'access', _51 => _51.user, 'optionalAccess', _52 => _52.avatarUrl]), () => ( void 0));
1050
1053
  } else if (isCustomer) {
1051
1054
  author = ticketCustomerName || "Customer";
1052
1055
  avatarSrc = void 0;
@@ -1059,13 +1062,13 @@ function TicketTimelinePanel({ ticket }) {
1059
1062
  }
1060
1063
  const engAttachments = mapEngagementAttachments(eng.attachments);
1061
1064
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1062
- _chunk3C4U4UW6cjs.ChatMessageRow,
1065
+ _chunkXXM74P3Ncjs.ChatMessageRow,
1063
1066
  {
1064
1067
  displayName: author,
1065
1068
  avatarUrl: avatarSrc,
1066
1069
  timeLabel: eng.createdAt ? _chunkF64VMOIBcjs.formatRelativeTime.call(void 0, eng.createdAt) : null,
1067
1070
  body: stripAttachmentsPreamble(_nullishCoalesce(eng.body, () => ( ""))),
1068
- footer: engAttachments.length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mt-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7RADSQJFcjs.TicketAttachmentsList, { attachments: engAttachments, size: "compact" }) }) : null
1071
+ footer: engAttachments.length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mt-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4IXA5CJTcjs.TicketAttachmentsList, { attachments: engAttachments, size: "compact" }) }) : null
1069
1072
  },
1070
1073
  eng.id
1071
1074
  );
@@ -1082,7 +1085,7 @@ function mapEngagementAttachments(files) {
1082
1085
  // Show an inline thumbnail for image attachments (the signed `url` is a
1083
1086
  // viewable URL). Non-images fall back to the file-type icon. SquareAvatar
1084
1087
  // degrades to initials on a broken/expired image URL.
1085
- thumbnailSrc: url && (_nullishCoalesce(_optionalChain([f, 'access', _52 => _52.mime, 'optionalAccess', _53 => _53.startsWith, 'call', _54 => _54("image/")]), () => ( false))) ? url : void 0,
1088
+ thumbnailSrc: url && (_nullishCoalesce(_optionalChain([f, 'access', _53 => _53.mime, 'optionalAccess', _54 => _54.startsWith, 'call', _55 => _55("image/")]), () => ( false))) ? url : void 0,
1086
1089
  onDownload: url ? () => window.open(url, "_blank", "noopener,noreferrer") : void 0
1087
1090
  };
1088
1091
  });
@@ -1143,8 +1146,8 @@ function ReplyFailureBanner({ error, onDismiss }) {
1143
1146
  );
1144
1147
  }
1145
1148
  function AssignedAgentRow({ assignedOwner }) {
1146
- const trimmedName = _optionalChain([assignedOwner, 'optionalAccess', _55 => _55.name, 'optionalAccess', _56 => _56.trim, 'call', _57 => _57()]) || null;
1147
- const emailFallback = _optionalChain([assignedOwner, 'optionalAccess', _58 => _58.email, 'optionalAccess', _59 => _59.trim, 'call', _60 => _60()]) || null;
1149
+ const trimmedName = _optionalChain([assignedOwner, 'optionalAccess', _56 => _56.name, 'optionalAccess', _57 => _57.trim, 'call', _58 => _58()]) || null;
1150
+ const emailFallback = _optionalChain([assignedOwner, 'optionalAccess', _59 => _59.email, 'optionalAccess', _60 => _60.trim, 'call', _61 => _61()]) || null;
1148
1151
  const displayLabel = _nullishCoalesce(trimmedName, () => ( (emailFallback ? emailFallback.split("@")[0] : null)));
1149
1152
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2 text-h6", children: [
1150
1153
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-text-secondary text-h5", children: "Assigned to" }),
@@ -1154,7 +1157,7 @@ function AssignedAgentRow({ assignedOwner }) {
1154
1157
  {
1155
1158
  size: "sm",
1156
1159
  variant: "round",
1157
- src: _nullishCoalesce(_optionalChain([assignedOwner, 'optionalAccess', _61 => _61.avatarUrl]), () => ( void 0)),
1160
+ src: _nullishCoalesce(_optionalChain([assignedOwner, 'optionalAccess', _62 => _62.avatarUrl]), () => ( void 0)),
1158
1161
  alt: displayLabel,
1159
1162
  fallback: displayLabel
1160
1163
  }
@@ -1178,7 +1181,7 @@ function TicketRow({
1178
1181
  onActionCollapsed,
1179
1182
  id
1180
1183
  }) {
1181
- const optimistic = _chunkWSRMYHIVcjs.isOptimistic.call(void 0, ticket);
1184
+ const optimistic = _chunkF7WIKBRIcjs.isOptimistic.call(void 0, ticket);
1182
1185
  const rowRef = _react.useRef.call(void 0, null);
1183
1186
  const handleClick = _react.useCallback.call(void 0, () => {
1184
1187
  onToggle(ticket.id);
@@ -1216,7 +1219,7 @@ function TicketRow({
1216
1219
  };
1217
1220
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: rowRef, id, className: "scroll-mt-24", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, Collapsible, { open: expanded && !optimistic, className: "border-b border-ods-border last:border-b-0", children: [
1218
1221
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1219
- _chunk3C4U4UW6cjs.ChatTicketItem,
1222
+ _chunkXXM74P3Ncjs.ChatTicketItem,
1220
1223
  {
1221
1224
  ticket: tileData,
1222
1225
  onClick: optimistic ? void 0 : handleClick,
@@ -1253,7 +1256,7 @@ function TicketCenter({ toast: toast2 = _chunkVUWPLQBYcjs.toast } = {}) {
1253
1256
  if (identity.isLoading) {
1254
1257
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketCenterSkeleton, {});
1255
1258
  }
1256
- if (identity.authTier === "anon" || !_optionalChain([identity, 'access', _62 => _62.user, 'optionalAccess', _63 => _63.email])) {
1259
+ if (identity.authTier === "anon" || !_optionalChain([identity, 'access', _63 => _63.user, 'optionalAccess', _64 => _64.email])) {
1257
1260
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1258
1261
  _chunk5E6JHOGXcjs.EmptyState,
1259
1262
  {
@@ -1271,7 +1274,7 @@ function TicketCenterAuthed({
1271
1274
  sessionEmail
1272
1275
  }) {
1273
1276
  const queryClient = _reactquery.useQueryClient.call(void 0, );
1274
- const { tickets, isLoading, isFetching, refetch, lastUpdatedAt } = useTicketsList({
1277
+ const { tickets, isLoading, isFetching, refetch, sync } = useTicketsList({
1275
1278
  customerEmail: sessionEmail
1276
1279
  });
1277
1280
  const [optimisticTickets, setOptimisticTickets] = _react.useState.call(void 0, []);
@@ -1304,6 +1307,7 @@ function TicketCenterAuthed({
1304
1307
  const toggleRow = _react.useCallback.call(void 0, (id) => {
1305
1308
  setExpandedTicketId((prev) => prev === id ? null : id);
1306
1309
  }, []);
1310
+ const syncInPage = _chunkCDA2MY7Ucjs.usePageDataSync.call(void 0, sync, isLoading);
1307
1311
  const merged = [...optimisticTickets, ...tickets];
1308
1312
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-6", children: [
1309
1313
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -1318,10 +1322,7 @@ function TicketCenterAuthed({
1318
1322
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center justify-between gap-3", children: [
1319
1323
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary text-h5", children: "Your Current Tickets" }),
1320
1324
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-3 text-ods-text-secondary text-h6", children: [
1321
- lastUpdatedAt && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { children: [
1322
- "Updated ",
1323
- _chunkF64VMOIBcjs.formatRelativeTime.call(void 0, new Date(lastUpdatedAt))
1324
- ] }),
1325
+ !syncInPage && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4IXA5CJTcjs.DataSyncLine, { sync, inline: true }),
1325
1326
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1326
1327
  _chunk2QMBXGMQcjs.Button,
1327
1328
  {
@@ -1347,11 +1348,11 @@ function TicketCenterAuthed({
1347
1348
  ) }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7Z4EQOIXcjs.Card, { className: "overflow-hidden", children: merged.map((ticket) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1348
1349
  TicketRow,
1349
1350
  {
1350
- id: _chunk3C4U4UW6cjs.devSectionAnchorId.call(void 0, "ticket", ticket.external_id),
1351
+ id: _chunkXXM74P3Ncjs.devSectionAnchorId.call(void 0, "ticket", ticket.external_id),
1351
1352
  ticket,
1352
1353
  expanded: expandedTicketId === ticket.id,
1353
1354
  onToggle: toggleRow,
1354
- busy: _chunkWSRMYHIVcjs.isOptimistic.call(void 0, ticket) ? false : actions.isRowBusy(ticket.id),
1355
+ busy: _chunkF7WIKBRIcjs.isOptimistic.call(void 0, ticket) ? false : actions.isRowBusy(ticket.id),
1355
1356
  supportSystemDown,
1356
1357
  onSendMessage: actions.sendMessage,
1357
1358
  onClose: actions.closeTicket,
@@ -1407,7 +1408,7 @@ function HelpCenterCard({
1407
1408
  onClearReplyError,
1408
1409
  id
1409
1410
  }) {
1410
- const optimistic = _chunkWSRMYHIVcjs.isOptimistic.call(void 0, ticket);
1411
+ const optimistic = _chunkF7WIKBRIcjs.isOptimistic.call(void 0, ticket);
1411
1412
  const rawStatus = (_nullishCoalesce(ticket.status, () => ( "OPEN"))).toUpperCase();
1412
1413
  const priority = (_nullishCoalesce(ticket.priority, () => ( ""))).toUpperCase();
1413
1414
  const relativeUpdated = ticket.hubspot_updated_at ? _chunkF64VMOIBcjs.formatRelativeTime.call(void 0, ticket.hubspot_updated_at) : "recently";
@@ -1429,8 +1430,8 @@ function HelpCenterCard({
1429
1430
  });
1430
1431
  return () => cancelAnimationFrame(raf);
1431
1432
  }, [isExpanded]);
1432
- const live = _chunkWSRMYHIVcjs.useOptionalTicketLive.call(void 0, );
1433
- const unreadCount = !optimistic && ticket.external_id && _optionalChain([live, 'optionalAccess', _64 => _64.unreadByTicket, 'access', _65 => _65[ticket.external_id]]) || 0;
1433
+ const live = _chunkF7WIKBRIcjs.useOptionalTicketLive.call(void 0, );
1434
+ const unreadCount = !optimistic && ticket.external_id && _optionalChain([live, 'optionalAccess', _65 => _65.unreadByTicket, 'access', _66 => _66[ticket.external_id]]) || 0;
1434
1435
  const rightBadges = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
1435
1436
  unreadCount > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1436
1437
  _chunk7Z4EQOIXcjs.StatusBadge,
@@ -1479,7 +1480,7 @@ function HelpCenterCard({
1479
1480
  "aria-controls": isExpanded ? `help-center-drawer-${ticket.id}` : void 0,
1480
1481
  className: "w-full p-[12px] text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ods-accent disabled:cursor-default content-md:p-[16px]",
1481
1482
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1482
- _chunkORC3ZKHTcjs.DevCardRowContent,
1483
+ _chunkCDA2MY7Ucjs.DevCardRowContent,
1483
1484
  {
1484
1485
  title,
1485
1486
  subtitle,
@@ -1590,7 +1591,7 @@ function HelpCenterCreateForm({
1590
1591
  subjectError && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { id: "help-center-subject-error", className: "mt-1 text-ods-error text-h6", children: subjectError })
1591
1592
  ] });
1592
1593
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1593
- _chunkHB3QFOHDcjs.ContactForm,
1594
+ _chunkWBSYC6EYcjs.ContactForm,
1594
1595
  {
1595
1596
  rescue: null,
1596
1597
  title: "Open a new ticket",
@@ -1633,25 +1634,25 @@ function HelpCenterList({ toast: toast2 = _chunkVUWPLQBYcjs.toast, backButton, t
1633
1634
  const searchParams = _chunk7DNL734Scjs.useSearchParams.call(void 0, );
1634
1635
  const router = _chunk7DNL734Scjs.useRouter.call(void 0, );
1635
1636
  const pathname = _chunk7DNL734Scjs.usePathname.call(void 0, );
1636
- const search = searchParams.get(_chunk3C4U4UW6cjs.DEV_SECTION_PARAM_KEYS.search) || "";
1637
+ const search = searchParams.get(_chunkXXM74P3Ncjs.DEV_SECTION_PARAM_KEYS.search) || "";
1637
1638
  const status = searchParams.get("status") || "all";
1638
- const ticketParam = searchParams.get(_chunk3C4U4UW6cjs.TICKET_OPEN_PARAM) || "";
1639
+ const ticketParam = searchParams.get(_chunkXXM74P3Ncjs.TICKET_OPEN_PARAM) || "";
1639
1640
  const page = _chunkBLH2SFOOcjs.positiveInt.call(void 0, searchParams.get("page"), 1);
1640
1641
  if (identity.isLoading) {
1641
1642
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1642
- _chunkORC3ZKHTcjs.DevSectionPage,
1643
+ _chunkCDA2MY7Ucjs.DevSectionPage,
1643
1644
  {
1644
1645
  sectionKey: "tickets",
1645
1646
  backButton,
1646
1647
  title,
1647
1648
  shell,
1648
1649
  preControls: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HelpCenterCreateFormSkeleton, {}),
1649
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkORC3ZKHTcjs.DevCardRowSkeletonList, {})
1650
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCDA2MY7Ucjs.DevCardRowSkeletonList, {})
1650
1651
  }
1651
1652
  );
1652
1653
  }
1653
- if (identity.authTier === "anon" || !_optionalChain([identity, 'access', _66 => _66.user, 'optionalAccess', _67 => _67.email])) {
1654
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkORC3ZKHTcjs.DevSectionPage, { sectionKey: "tickets", backButton, title, shell, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1654
+ if (identity.authTier === "anon" || !_optionalChain([identity, 'access', _67 => _67.user, 'optionalAccess', _68 => _68.email])) {
1655
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCDA2MY7Ucjs.DevSectionPage, { sectionKey: "tickets", backButton, title, shell, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1655
1656
  _chunk5E6JHOGXcjs.EmptyState,
1656
1657
  {
1657
1658
  type: "generic",
@@ -1661,7 +1662,7 @@ function HelpCenterList({ toast: toast2 = _chunkVUWPLQBYcjs.toast, backButton, t
1661
1662
  }
1662
1663
  ) });
1663
1664
  }
1664
- const sessionName = [_optionalChain([identity, 'access', _68 => _68.user, 'optionalAccess', _69 => _69.firstName]), _optionalChain([identity, 'access', _70 => _70.user, 'optionalAccess', _71 => _71.lastName])].filter(Boolean).join(" ").trim() || _optionalChain([identity, 'access', _72 => _72.user, 'optionalAccess', _73 => _73.email, 'optionalAccess', _74 => _74.split, 'call', _75 => _75("@"), 'access', _76 => _76[0]]) || "Customer";
1665
+ const sessionName = [_optionalChain([identity, 'access', _69 => _69.user, 'optionalAccess', _70 => _70.firstName]), _optionalChain([identity, 'access', _71 => _71.user, 'optionalAccess', _72 => _72.lastName])].filter(Boolean).join(" ").trim() || _optionalChain([identity, 'access', _73 => _73.user, 'optionalAccess', _74 => _74.email, 'optionalAccess', _75 => _75.split, 'call', _76 => _76("@"), 'access', _77 => _77[0]]) || "Customer";
1665
1666
  const sessionEmail = identity.user.email;
1666
1667
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1667
1668
  HelpCenterListAuthed,
@@ -1703,8 +1704,8 @@ function HelpCenterListAuthed({
1703
1704
  const setOpenTicket = _react.useCallback.call(void 0,
1704
1705
  (externalId) => {
1705
1706
  const params = new URLSearchParams(searchParams.toString());
1706
- if (externalId) params.set(_chunk3C4U4UW6cjs.TICKET_OPEN_PARAM, externalId);
1707
- else params.delete(_chunk3C4U4UW6cjs.TICKET_OPEN_PARAM);
1707
+ if (externalId) params.set(_chunkXXM74P3Ncjs.TICKET_OPEN_PARAM, externalId);
1708
+ else params.delete(_chunkXXM74P3Ncjs.TICKET_OPEN_PARAM);
1708
1709
  const qs = params.toString();
1709
1710
  router.replace(qs ? `${pathname}?${qs}` : pathname, { scroll: false });
1710
1711
  },
@@ -1727,7 +1728,7 @@ function HelpCenterListAuthed({
1727
1728
  // status/pipeline change with no accompanying reply has no live
1728
1729
  // path until the next event/focus/reconnect.
1729
1730
  });
1730
- const expandedTicketId = ticketParam && _optionalChain([tickets, 'access', _77 => _77.find, 'call', _78 => _78((t) => t.external_id === ticketParam), 'optionalAccess', _79 => _79.id]) || null;
1731
+ const expandedTicketId = ticketParam && _optionalChain([tickets, 'access', _78 => _78.find, 'call', _79 => _79((t) => t.external_id === ticketParam), 'optionalAccess', _80 => _80.id]) || null;
1731
1732
  const prependOptimistic = _react.useCallback.call(void 0, (placeholder) => {
1732
1733
  setOptimisticTickets((prev) => [placeholder, ...prev]);
1733
1734
  }, []);
@@ -1755,7 +1756,7 @@ function HelpCenterListAuthed({
1755
1756
  const toggleRow = _react.useCallback.call(void 0,
1756
1757
  (id) => {
1757
1758
  const t = tickets.find((x) => x.id === id);
1758
- if (!_optionalChain([t, 'optionalAccess', _80 => _80.external_id])) return;
1759
+ if (!_optionalChain([t, 'optionalAccess', _81 => _81.external_id])) return;
1759
1760
  setOpenTicket(t.external_id === ticketParam ? null : t.external_id);
1760
1761
  },
1761
1762
  [tickets, ticketParam, setOpenTicket]
@@ -1781,15 +1782,15 @@ function HelpCenterListAuthed({
1781
1782
  ] }),
1782
1783
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2QMBXGMQcjs.Button, { type: "button", variant: "accent", onClick: () => refetch(), children: "Retry" })
1783
1784
  ] }),
1784
- !error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full", children: isLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkORC3ZKHTcjs.DevCardRowSkeletonList, {}) : !hasResults && isFetching ? (
1785
+ !error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full", children: isLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCDA2MY7Ucjs.DevCardRowSkeletonList, {}) : !hasResults && isFetching ? (
1785
1786
  // Bridge state — background refetch in flight and the
1786
1787
  // optimistic placeholder was just removed by the mutation
1787
1788
  // callback. Without this branch "No tickets yet" would flash
1788
1789
  // for ~50ms between `removeOptimistic` and the server
1789
1790
  // response landing.
1790
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkORC3ZKHTcjs.DevCardRowSkeletonList, { rows: 1 })
1791
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCDA2MY7Ucjs.DevCardRowSkeletonList, { rows: 1 })
1791
1792
  ) : !hasResults ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1792
- _chunkORC3ZKHTcjs.ListEmptyState,
1793
+ _chunkCDA2MY7Ucjs.ListEmptyState,
1793
1794
  {
1794
1795
  isFiltered: hasActiveFilters,
1795
1796
  filtered: {
@@ -1820,11 +1821,11 @@ function HelpCenterListAuthed({
1820
1821
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full overflow-clip rounded-[6px] border border-ods-border bg-ods-card", children: merged.map((ticket) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1821
1822
  HelpCenterCard,
1822
1823
  {
1823
- id: _chunk3C4U4UW6cjs.devSectionAnchorId.call(void 0, "ticket", ticket.external_id),
1824
+ id: _chunkXXM74P3Ncjs.devSectionAnchorId.call(void 0, "ticket", ticket.external_id),
1824
1825
  ticket,
1825
1826
  expanded: expandedTicketId === ticket.id,
1826
1827
  onToggle: toggleRow,
1827
- busy: _chunkWSRMYHIVcjs.isOptimistic.call(void 0, ticket) ? false : actions.isRowBusy(ticket.id),
1828
+ busy: _chunkF7WIKBRIcjs.isOptimistic.call(void 0, ticket) ? false : actions.isRowBusy(ticket.id),
1828
1829
  supportSystemDown,
1829
1830
  onSendMessage: actions.sendMessage,
1830
1831
  onClose: actions.closeTicket,
@@ -1838,7 +1839,7 @@ function HelpCenterListAuthed({
1838
1839
  ) }),
1839
1840
  !error && totalPages > 1 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5E6JHOGXcjs.UnifiedPagination, { currentPage: page, totalPages })
1840
1841
  ] });
1841
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkORC3ZKHTcjs.DevSectionPage, { sectionKey: "tickets", backButton, title, shell, preControls: form, children: body });
1842
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCDA2MY7Ucjs.DevSectionPage, { sectionKey: "tickets", backButton, title, shell, preControls: form, children: body });
1842
1843
  }
1843
1844
 
1844
1845
 
@@ -5,7 +5,7 @@ var _chunkVUWPLQBYcjs = require('./chunk-VUWPLQBY.cjs');
5
5
 
6
6
 
7
7
 
8
- var _chunk3C4U4UW6cjs = require('./chunk-3C4U4UW6.cjs');
8
+ var _chunkXXM74P3Ncjs = require('./chunk-XXM74P3N.cjs');
9
9
 
10
10
 
11
11
 
@@ -116,14 +116,14 @@ function FaqAccordion({ items, defaultOpenIds = [] }) {
116
116
 
117
117
  var PICK_ROOT_MARGIN = "600px";
118
118
  function faqAskCardShown(assistant) {
119
- return _chunk3C4U4UW6cjs.assistantAvailable.call(void 0, assistant) && !!assistant.name;
119
+ return _chunkXXM74P3Ncjs.assistantAvailable.call(void 0, assistant) && !!assistant.name;
120
120
  }
121
121
  function FaqAskCard({ topic, exclude, count, title, description, onOpen }) {
122
122
  const { ref, inView } = _chunkCSJO7ZGNcjs.useInView.call(void 0, { rootMargin: PICK_ROOT_MARGIN });
123
123
  const [reached, setReached] = _react.useState.call(void 0, false);
124
124
  if (inView && !reached) setReached(true);
125
125
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
126
- _chunk3C4U4UW6cjs.AssistantAskPrompts,
126
+ _chunkXXM74P3Ncjs.AssistantAskPrompts,
127
127
  {
128
128
  variant: "card",
129
129
  topic,