@flamingo-stack/openframe-frontend-core 0.0.715 → 0.0.717

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 (110) hide show
  1. package/dist/chat-protocol/index.cjs +23 -14
  2. package/dist/chat-protocol/index.js +23 -14
  3. package/dist/chat-protocol/nats-decoder.d.ts.map +1 -1
  4. package/dist/chat-protocol/source-metadata.d.ts +11 -2
  5. package/dist/chat-protocol/source-metadata.d.ts.map +1 -1
  6. package/dist/{chunk-WEEZSGFD.cjs → chunk-2AI2E3O2.cjs} +65 -65
  7. package/dist/{chunk-KSEOIICU.js → chunk-2EK7PA73.js} +3 -3
  8. package/dist/{chunk-AQI74KC7.js → chunk-2X2P3VHF.js} +5 -5
  9. package/dist/{chunk-4GFAKUHF.js → chunk-3MJPCKB6.js} +2 -2
  10. package/dist/{chunk-W4CS6UJS.cjs → chunk-3QAMMWV2.cjs} +8 -8
  11. package/dist/{chunk-JHSPIDV5.js → chunk-47FISYO5.js} +3 -3
  12. package/dist/{chunk-ZSJ6WWFH.cjs → chunk-5MF3NMYC.cjs} +451 -392
  13. package/dist/{chunk-VKIRTB7K.js → chunk-6MZI5SQ4.js} +2 -2
  14. package/dist/{chunk-2LZ3IYGT.js → chunk-B5XU6KOA.js} +2269 -2210
  15. package/dist/{chunk-QW7KTWLB.js → chunk-E6FLX4TX.js} +3 -3
  16. package/dist/{chunk-ZX7SCPLO.cjs → chunk-E7YCPY7K.cjs} +3 -3
  17. package/dist/{chunk-BIFUUH4K.js → chunk-FGKSAQR3.js} +5 -5
  18. package/dist/{chunk-EOKSKJSS.cjs → chunk-FROXS52D.cjs} +11 -11
  19. package/dist/{chunk-GXHWSAV6.cjs → chunk-J3Q53TWW.cjs} +26 -26
  20. package/dist/{chunk-ROBQ5TR7.js → chunk-JH2SIWPQ.js} +28 -17
  21. package/dist/{chunk-DDWFCWOE.js → chunk-JPD4NXH6.js} +1 -1
  22. package/dist/{chunk-LTLHCAZY.cjs → chunk-LANNTTKP.cjs} +9 -9
  23. package/dist/{chunk-JVCAK4W3.cjs → chunk-LE5WKGJV.cjs} +3 -3
  24. package/dist/{chunk-XFFIUXVI.cjs → chunk-M2A5SC6H.cjs} +9 -9
  25. package/dist/{chunk-5MMCYJAJ.cjs → chunk-NB6EWUDE.cjs} +33 -33
  26. package/dist/{chunk-H5R7U2D2.js → chunk-NZ5BHDFZ.js} +1 -1
  27. package/dist/{chunk-E25A235W.cjs → chunk-OHLBO4LM.cjs} +3 -3
  28. package/dist/{chunk-DI5VLY3G.js → chunk-PD4W2VMH.js} +1 -1
  29. package/dist/{chunk-OQVGA3YE.js → chunk-TYVS64YN.js} +2 -2
  30. package/dist/{chunk-EORJFB2Z.cjs → chunk-U3TP4UGA.cjs} +6 -6
  31. package/dist/{chunk-HETQETPV.cjs → chunk-UWQWMGJ7.cjs} +28 -17
  32. package/dist/{chunk-U4WCFIYB.cjs → chunk-VYKFM2NB.cjs} +35 -35
  33. package/dist/{chunk-YBS5QGON.js → chunk-VZI5BA4L.js} +1 -1
  34. package/dist/{chunk-VBDGMXZO.js → chunk-WH5GJSID.js} +2 -2
  35. package/dist/{chunk-S66W6HNZ.cjs → chunk-X3RVDBXU.cjs} +16 -16
  36. package/dist/{cloud-tenants-MI7APZJD.cjs → cloud-tenants-KDWTVHSI.cjs} +3 -3
  37. package/dist/{cloud-tenants-NSEVWC26.js → cloud-tenants-LNC26WY2.js} +2 -2
  38. package/dist/components/case-studies/index.cjs +14 -14
  39. package/dist/components/case-studies/index.js +3 -3
  40. package/dist/components/chat/index.cjs +2 -2
  41. package/dist/components/chat/index.js +1 -1
  42. package/dist/components/chat/types/message.types.d.ts +20 -16
  43. package/dist/components/chat/types/message.types.d.ts.map +1 -1
  44. package/dist/components/chat/types/unified-chat-state.types.d.ts +1 -1
  45. package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
  46. package/dist/components/contact/index.cjs +4 -4
  47. package/dist/components/contact/index.js +3 -3
  48. package/dist/components/docs/index.cjs +7 -7
  49. package/dist/components/docs/index.js +6 -6
  50. package/dist/components/embeds/index.cjs +4 -4
  51. package/dist/components/embeds/index.js +3 -3
  52. package/dist/components/faq/index.cjs +4 -4
  53. package/dist/components/faq/index.js +3 -3
  54. package/dist/components/features/approval-level.d.ts +30 -22
  55. package/dist/components/features/approval-level.d.ts.map +1 -1
  56. package/dist/components/features/index.cjs +3 -5
  57. package/dist/components/features/index.js +4 -6
  58. package/dist/components/help-center-pages/index.cjs +62 -62
  59. package/dist/components/help-center-pages/index.js +13 -13
  60. package/dist/components/index.cjs +33 -33
  61. package/dist/components/index.js +16 -16
  62. package/dist/components/meeting-scheduler/index.cjs +19 -19
  63. package/dist/components/meeting-scheduler/index.js +2 -2
  64. package/dist/components/navigation/index.cjs +6 -6
  65. package/dist/components/navigation/index.js +5 -5
  66. package/dist/components/onboarding-guides/index.cjs +5 -5
  67. package/dist/components/onboarding-guides/index.js +4 -4
  68. package/dist/components/product-demo/index.cjs +6 -6
  69. package/dist/components/product-demo/index.js +6 -6
  70. package/dist/components/tickets/index.cjs +7 -7
  71. package/dist/components/tickets/index.js +6 -6
  72. package/dist/components/ui/analyzing-state.d.ts +17 -0
  73. package/dist/components/ui/analyzing-state.d.ts.map +1 -0
  74. package/dist/components/ui/feature-list.d.ts +4 -4
  75. package/dist/components/ui/feature-list.d.ts.map +1 -1
  76. package/dist/components/ui/incident-feed.d.ts +4 -1
  77. package/dist/components/ui/incident-feed.d.ts.map +1 -1
  78. package/dist/components/ui/index.cjs +5 -3
  79. package/dist/components/ui/index.d.ts +1 -0
  80. package/dist/components/ui/index.d.ts.map +1 -1
  81. package/dist/components/ui/index.js +4 -2
  82. package/dist/components/ui/playback-toggle.d.ts +10 -4
  83. package/dist/components/ui/playback-toggle.d.ts.map +1 -1
  84. package/dist/components/ui/tab-navigation.d.ts +7 -1
  85. package/dist/components/ui/tab-navigation.d.ts.map +1 -1
  86. package/dist/{devices-6NMK4EXV.cjs → devices-ATHYJUVQ.cjs} +4 -4
  87. package/dist/{devices-W3VKQEVZ.js → devices-NYCRQ3PG.js} +2 -2
  88. package/dist/index.cjs +7 -7
  89. package/dist/index.js +10 -10
  90. package/dist/{knowledge-YWCB7HNC.js → knowledge-DEKYJXBS.js} +2 -2
  91. package/dist/{knowledge-GDMGHFEC.cjs → knowledge-EHNRYT7U.cjs} +4 -4
  92. package/dist/{logs-7QDRV3GN.cjs → logs-3V765P7O.cjs} +11 -11
  93. package/dist/{logs-E742S5A2.js → logs-Q7YFIVYI.js} +2 -2
  94. package/dist/{policies-XTPAKRHI.js → policies-BTIENK5A.js} +2 -2
  95. package/dist/{policies-BEVF6AEM.cjs → policies-TXU5AIXS.cjs} +7 -7
  96. package/dist/{software-update-KPHX4XQ7.cjs → software-update-MINTICZY.cjs} +7 -7
  97. package/dist/{software-update-FXWIEKSW.js → software-update-SW2HOBHW.js} +2 -2
  98. package/package.json +1 -1
  99. package/src/chat-protocol/nats-decoder.ts +10 -8
  100. package/src/chat-protocol/source-metadata.ts +25 -2
  101. package/src/components/chat/types/message.types.ts +21 -15
  102. package/src/components/chat/types/unified-chat-state.types.ts +1 -1
  103. package/src/components/chat/utils/process-historical-messages.ts +12 -4
  104. package/src/components/features/approval-level.tsx +62 -44
  105. package/src/components/ui/analyzing-state.tsx +57 -0
  106. package/src/components/ui/feature-list.tsx +26 -16
  107. package/src/components/ui/incident-feed.tsx +6 -2
  108. package/src/components/ui/index.ts +1 -0
  109. package/src/components/ui/playback-toggle.tsx +12 -6
  110. package/src/components/ui/tab-navigation.tsx +12 -1
@@ -3,22 +3,22 @@
3
3
 
4
4
 
5
5
 
6
- var _chunkE25A235Wcjs = require('./chunk-E25A235W.cjs');
6
+ var _chunkOHLBO4LMcjs = require('./chunk-OHLBO4LM.cjs');
7
7
 
8
8
 
9
9
 
10
10
 
11
11
 
12
- var _chunkJVCAK4W3cjs = require('./chunk-JVCAK4W3.cjs');
12
+ var _chunkLE5WKGJVcjs = require('./chunk-LE5WKGJV.cjs');
13
13
 
14
14
 
15
15
 
16
- var _chunkXFFIUXVIcjs = require('./chunk-XFFIUXVI.cjs');
16
+ var _chunkM2A5SC6Hcjs = require('./chunk-M2A5SC6H.cjs');
17
17
 
18
18
 
19
19
 
20
20
 
21
- var _chunkZSJ6WWFHcjs = require('./chunk-ZSJ6WWFH.cjs');
21
+ var _chunk5MF3NMYCcjs = require('./chunk-5MF3NMYC.cjs');
22
22
 
23
23
 
24
24
  var _chunkPPXR22YCcjs = require('./chunk-PPXR22YC.cjs');
@@ -30,7 +30,7 @@ var _chunkAUMKE74Mcjs = require('./chunk-AUMKE74M.cjs');
30
30
 
31
31
 
32
32
 
33
- var _chunkHETQETPVcjs = require('./chunk-HETQETPV.cjs');
33
+ var _chunkUWQWMGJ7cjs = require('./chunk-UWQWMGJ7.cjs');
34
34
 
35
35
 
36
36
 
@@ -339,8 +339,8 @@ function toDocContent(value, requestedPath) {
339
339
  }
340
340
  function useDocumentTree(config, initialPath) {
341
341
  const { structureEndpoint, contentEndpoint, baseRoute } = config;
342
- const folderIndexFile = _nullishCoalesce(config.folderIndexFile, () => ( _chunkHETQETPVcjs.DEFAULT_FOLDER_INDEX_FILE));
343
- const cleanInitialPath = _chunkHETQETPVcjs.stripFolderIndexFromPath.call(void 0, _optionalChain([initialPath, 'optionalAccess', _4 => _4.replace, 'call', _5 => _5(/\/$/, "")]) || "", folderIndexFile);
342
+ const folderIndexFile = _nullishCoalesce(config.folderIndexFile, () => ( _chunkUWQWMGJ7cjs.DEFAULT_FOLDER_INDEX_FILE));
343
+ const cleanInitialPath = _chunkUWQWMGJ7cjs.stripFolderIndexFromPath.call(void 0, _optionalChain([initialPath, 'optionalAccess', _4 => _4.replace, 'call', _5 => _5(/\/$/, "")]) || "", folderIndexFile);
344
344
  const [structure, setStructure] = _react.useState.call(void 0, []);
345
345
  const [selectedPath, setSelectedPath] = _react.useState.call(void 0, cleanInitialPath);
346
346
  const [content, setContent] = _react.useState.call(void 0, null);
@@ -364,12 +364,12 @@ function useDocumentTree(config, initialPath) {
364
364
  } else if (pathname.startsWith(`${normalizedBaseRoute}/`)) {
365
365
  pathFromUrl = pathname.substring(`${normalizedBaseRoute}/`.length);
366
366
  }
367
- pathFromUrl = _chunkHETQETPVcjs.stripFolderIndexFromPath.call(void 0, pathFromUrl, folderIndexFile);
367
+ pathFromUrl = _chunkUWQWMGJ7cjs.stripFolderIndexFromPath.call(void 0, pathFromUrl, folderIndexFile);
368
368
  if (pathFromUrl !== selectedPathRef.current) {
369
369
  setSelectedPath(pathFromUrl);
370
370
  if (pathFromUrl) {
371
371
  const parentPath = pathFromUrl.includes("/") ? pathFromUrl.substring(0, pathFromUrl.lastIndexOf("/")) : pathFromUrl;
372
- setExpandedNodes(new Set(_chunkHETQETPVcjs.getDocAncestorNodeIds.call(void 0, parentPath)));
372
+ setExpandedNodes(new Set(_chunkUWQWMGJ7cjs.getDocAncestorNodeIds.call(void 0, parentPath)));
373
373
  }
374
374
  setTimeout(() => {
375
375
  scrollToContent();
@@ -387,7 +387,7 @@ function useDocumentTree(config, initialPath) {
387
387
  setSelectedPath(cleanInitialPath);
388
388
  if (cleanInitialPath) {
389
389
  const parentPath = cleanInitialPath.includes("/") ? cleanInitialPath.substring(0, cleanInitialPath.lastIndexOf("/")) : cleanInitialPath;
390
- setExpandedNodes(new Set(_chunkHETQETPVcjs.getDocAncestorNodeIds.call(void 0, parentPath)));
390
+ setExpandedNodes(new Set(_chunkUWQWMGJ7cjs.getDocAncestorNodeIds.call(void 0, parentPath)));
391
391
  }
392
392
  setExternalNavCount((n) => n + 1);
393
393
  }
@@ -412,7 +412,7 @@ function useDocumentTree(config, initialPath) {
412
412
  if (cleanInitialPath) {
413
413
  const pathForExpansion = cleanInitialPath.includes(".") ? cleanInitialPath.substring(0, cleanInitialPath.lastIndexOf("/")) : cleanInitialPath;
414
414
  if (pathForExpansion) {
415
- setExpandedNodes(new Set(_chunkHETQETPVcjs.getDocAncestorNodeIds.call(void 0, pathForExpansion)));
415
+ setExpandedNodes(new Set(_chunkUWQWMGJ7cjs.getDocAncestorNodeIds.call(void 0, pathForExpansion)));
416
416
  }
417
417
  } else if (nodes.length > 0) {
418
418
  const hasRootReadme = nodes.some((node) => node.type === "file" && node.path === folderIndexFile);
@@ -452,7 +452,7 @@ function useDocumentTree(config, initialPath) {
452
452
  setContent(null);
453
453
  return;
454
454
  }
455
- const probe = _chunkHETQETPVcjs.findDocNodeByPath.call(void 0, _chunkHETQETPVcjs.stripFolderIndexFromPath.call(void 0, path, folderIndexFile), structure);
455
+ const probe = _chunkUWQWMGJ7cjs.findDocNodeByPath.call(void 0, _chunkUWQWMGJ7cjs.stripFolderIndexFromPath.call(void 0, path, folderIndexFile), structure);
456
456
  const probeIsNoReadmeFolder = !!probe && probe.type === "folder" && !probe.hasReadme;
457
457
  const preStructureFolderLike = structure.length === 0 && !path.endsWith(".md");
458
458
  if (probeIsNoReadmeFolder || preStructureFolderLike) {
@@ -509,7 +509,7 @@ function useDocumentTree(config, initialPath) {
509
509
  if (selectedPath === "") {
510
510
  pathToFetch = folderIndexFile;
511
511
  } else {
512
- const node = _chunkHETQETPVcjs.findDocNodeByPath.call(void 0, selectedPath, structure);
512
+ const node = _chunkUWQWMGJ7cjs.findDocNodeByPath.call(void 0, selectedPath, structure);
513
513
  if (node && node.type === "folder" && !node.hasReadme) {
514
514
  const firstDocPath = findFirstDocPath(node);
515
515
  if (!firstDocPath) {
@@ -550,16 +550,16 @@ function useDocumentTree(config, initialPath) {
550
550
  if (node.type === "folder") {
551
551
  setExpandedNodes((prev) => {
552
552
  if (prev.has(node.id)) {
553
- const ancestorIds = _chunkHETQETPVcjs.getDocAncestorNodeIds.call(void 0, node.path);
553
+ const ancestorIds = _chunkUWQWMGJ7cjs.getDocAncestorNodeIds.call(void 0, node.path);
554
554
  ancestorIds.pop();
555
555
  return new Set(ancestorIds);
556
556
  }
557
- return new Set(_chunkHETQETPVcjs.getDocAncestorNodeIds.call(void 0, node.path));
557
+ return new Set(_chunkUWQWMGJ7cjs.getDocAncestorNodeIds.call(void 0, node.path));
558
558
  });
559
559
  } else {
560
560
  const lastSlash = node.path.lastIndexOf("/");
561
561
  if (lastSlash > 0) {
562
- setExpandedNodes(new Set(_chunkHETQETPVcjs.getDocAncestorNodeIds.call(void 0, node.path.substring(0, lastSlash))));
562
+ setExpandedNodes(new Set(_chunkUWQWMGJ7cjs.getDocAncestorNodeIds.call(void 0, node.path.substring(0, lastSlash))));
563
563
  }
564
564
  }
565
565
  lastFetchedPath.current = null;
@@ -574,7 +574,7 @@ function useDocumentTree(config, initialPath) {
574
574
  const hashIndex = path.indexOf("#");
575
575
  const anchor = hashIndex !== -1 ? path.substring(hashIndex) : "";
576
576
  const cleanPath = path.replace(/\/$/, "").split("#")[0];
577
- const pathForSelection = anchor && _optionalChain([options, 'optionalAccess', _6 => _6.fromInternalLink]) && cleanPath === "" ? selectedPathRef.current : _chunkHETQETPVcjs.stripFolderIndexFromPath.call(void 0, cleanPath, folderIndexFile);
577
+ const pathForSelection = anchor && _optionalChain([options, 'optionalAccess', _6 => _6.fromInternalLink]) && cleanPath === "" ? selectedPathRef.current : _chunkUWQWMGJ7cjs.stripFolderIndexFromPath.call(void 0, cleanPath, folderIndexFile);
578
578
  if (anchor && _optionalChain([options, 'optionalAccess', _7 => _7.fromInternalLink]) && pathForSelection === selectedPathRef.current) {
579
579
  _chunkGQ7JJUITcjs.navigateSamePageHash.call(void 0, anchor, { headerOffset: _chunkGQ7JJUITcjs.HUB_HEADER_OFFSET_PX });
580
580
  return;
@@ -638,15 +638,15 @@ function useDocumentTree(config, initialPath) {
638
638
  return docNavigation.register({
639
639
  baseRoute: normalizedBaseRoute,
640
640
  findNodeByPath: (path) => {
641
- const clean = _chunkHETQETPVcjs.stripFolderIndexFromPath.call(void 0, path.replace(/\/$/, "").split("#")[0], folderIndexFile);
642
- return _nullishCoalesce(_chunkHETQETPVcjs.findDocNodeByPath.call(void 0, clean, structure), () => ( null));
641
+ const clean = _chunkUWQWMGJ7cjs.stripFolderIndexFromPath.call(void 0, path.replace(/\/$/, "").split("#")[0], folderIndexFile);
642
+ return _nullishCoalesce(_chunkUWQWMGJ7cjs.findDocNodeByPath.call(void 0, clean, structure), () => ( null));
643
643
  },
644
644
  selectNode
645
645
  });
646
646
  }, [docNavigation, normalizedBaseRoute, structure, selectNode, folderIndexFile]);
647
647
  const isEmptyFolder = _react.useMemo.call(void 0, () => {
648
648
  if (!selectedPath || structure.length === 0) return false;
649
- const node = _chunkHETQETPVcjs.findDocNodeByPath.call(void 0, selectedPath, structure);
649
+ const node = _chunkUWQWMGJ7cjs.findDocNodeByPath.call(void 0, selectedPath, structure);
650
650
  return !!node && node.type === "folder" && !node.hasReadme && !findFirstDocPath(node);
651
651
  }, [selectedPath, structure]);
652
652
  return {
@@ -726,14 +726,14 @@ function DocViewerContent({
726
726
  },
727
727
  docPath
728
728
  );
729
- const { activeSection, handleSectionClick } = _chunkJVCAK4W3cjs.useScrollSpy.call(void 0, _optionalChain([content, 'optionalAccess', _11 => _11.sections]));
729
+ const { activeSection, handleSectionClick } = _chunkLE5WKGJVcjs.useScrollSpy.call(void 0, _optionalChain([content, 'optionalAccess', _11 => _11.sections]));
730
730
  const docNav = useDocNavigation();
731
731
  const router = _chunk7DNL734Scjs.useRouter.call(void 0, );
732
732
  const backCfg = backButton === false ? null : {
733
733
  label: _nullishCoalesce(_optionalChain([backButton, 'optionalAccess', _12 => _12.label]), () => ( "Back to home")),
734
734
  onClick: () => router.push(_nullishCoalesce(_optionalChain([backButton, 'optionalAccess', _13 => _13.href]), () => ( "/")))
735
735
  };
736
- const docSearch = _chunkXFFIUXVIcjs.useDocSearch.call(void 0, {
736
+ const docSearch = _chunkM2A5SC6Hcjs.useDocSearch.call(void 0, {
737
737
  source: chatSource,
738
738
  baseRoute,
739
739
  searchEndpoint,
@@ -757,7 +757,7 @@ function DocViewerContent({
757
757
  onResolveLink: resolveLink
758
758
  });
759
759
  }, [content, renderContent, navigateToDoc, sourceId, resolveLink]);
760
- const selectedNodeDocType = selectedPath && structure.length > 0 ? _optionalChain([_chunkHETQETPVcjs.findDocNodeByPath.call(void 0, selectedPath, structure), 'optionalAccess', _14 => _14.documentType]) : void 0;
760
+ const selectedNodeDocType = selectedPath && structure.length > 0 ? _optionalChain([_chunkUWQWMGJ7cjs.findDocNodeByPath.call(void 0, selectedPath, structure), 'optionalAccess', _14 => _14.documentType]) : void 0;
761
761
  const activeDocType = _nullishCoalesce(_optionalChain([content, 'optionalAccess', _15 => _15.documentType]), () => ( selectedNodeDocType));
762
762
  const isMarkdownContent = !activeDocType || activeDocType === "markdown";
763
763
  const showStickyNav = isMarkdownContent;
@@ -770,7 +770,7 @@ function DocViewerContent({
770
770
  const resolvedEmptyText = emptyStateText || defaultEmptyText;
771
771
  const inner = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { style: { ...bgStyle, ...containerBgStyle }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPPXR22YCcjs.PageLayout, { title, subtitle, titleSize: "h1", titleWrap: true, backButton: _nullishCoalesce(backCfg, () => ( void 0)), children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-10", children: [
772
772
  showAIChat && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
773
- _chunkXFFIUXVIcjs.DocSearchBar,
773
+ _chunkM2A5SC6Hcjs.DocSearchBar,
774
774
  {
775
775
  placeholder: `Search ${_optionalChain([sidebarLabel, 'optionalAccess', _19 => _19.toLowerCase, 'call', _20 => _20()]) || "documents"}...`,
776
776
  query: docSearch.query,
@@ -789,9 +789,9 @@ function DocViewerContent({
789
789
  ] })
790
790
  ] }) }),
791
791
  !error && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-1 flex-col items-start gap-6 content-lg:flex-row content-lg:gap-10", children: [
792
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full content-lg:w-[320px] content-lg:shrink-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "content-lg:sticky content-lg:top-20", children: isLoadingStructure ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZSJ6WWFHcjs.CategorySidebarSkeleton, {}) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
792
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full content-lg:w-[320px] content-lg:shrink-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "content-lg:sticky content-lg:top-20", children: isLoadingStructure ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5MF3NMYCcjs.CategorySidebarSkeleton, {}) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
793
793
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PersistentMobileDropdown, { isLoading: false, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
794
- _chunkJVCAK4W3cjs.MobileNavigationDropdown,
794
+ _chunkLE5WKGJVcjs.MobileNavigationDropdown,
795
795
  {
796
796
  nodes: structure,
797
797
  selectedPath,
@@ -805,7 +805,7 @@ function DocViewerContent({
805
805
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PersistentSidebar, { isLoading: false, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "hidden content-lg:block", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-4", children: [
806
806
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "font-semibold text-ods-text-secondary text-h5", children: sidebarLabel }),
807
807
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
808
- _chunkJVCAK4W3cjs.MultiLevelNavigation,
808
+ _chunkLE5WKGJVcjs.MultiLevelNavigation,
809
809
  {
810
810
  nodes: structure,
811
811
  selectedPath,
@@ -844,7 +844,7 @@ function DocViewerContent({
844
844
  showStickyNav && content && stickyNavSections.length > 0 && !isLoadingContent && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "hidden content-lg:block", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "sticky top-24", children: [
845
845
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "mb-4 font-semibold text-ods-text-secondary text-h5", children: "ON THIS PAGE" }),
846
846
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
847
- _chunkJVCAK4W3cjs.StickySectionNav,
847
+ _chunkLE5WKGJVcjs.StickySectionNav,
848
848
  {
849
849
  sections: stickyNavSections,
850
850
  activeSection,
@@ -859,7 +859,7 @@ function DocViewerContent({
859
859
  ) })
860
860
  ] })
861
861
  ] }) }) });
862
- return shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZSJ6WWFHcjs.PageShell, { contentClassName: `${bgClass} ${className}`, children: inner }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `page-shell-content ${bgClass} ${className}`.trim(), children: inner });
862
+ return shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5MF3NMYCcjs.PageShell, { contentClassName: `${bgClass} ${className}`, children: inner }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `page-shell-content ${bgClass} ${className}`.trim(), children: inner });
863
863
  }
864
864
 
865
865
  // src/components/docs/skeletons.tsx
@@ -955,11 +955,11 @@ function EmbedSkeleton({ documentType } = {}) {
955
955
 
956
956
  var DEFAULT_TITLE = "Documents";
957
957
  var defaultFallbackRenderer = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "py-16 text-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary", children: "Unsupported document type" }) });
958
- var defaultPdfRenderer = (content, handlers) => content.fileUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkE25A235Wcjs.PdfViewer, { src: content.fileUrl, fileName: content.fileName }) : defaultFallbackRenderer(content, handlers);
959
- var defaultGoogleSheetRenderer = (content, handlers) => content.externalUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkE25A235Wcjs.GoogleSheetsViewer, { externalUrl: content.externalUrl, fileName: content.fileName }) : defaultFallbackRenderer(content, handlers);
960
- var defaultFigmaRenderer = (content, handlers) => content.externalUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZSJ6WWFHcjs.FigmaEmbed, { url: content.externalUrl, title: content.fileName, loading: "eager" }) : defaultFallbackRenderer(content, handlers);
958
+ var defaultPdfRenderer = (content, handlers) => content.fileUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOHLBO4LMcjs.PdfViewer, { src: content.fileUrl, fileName: content.fileName }) : defaultFallbackRenderer(content, handlers);
959
+ var defaultGoogleSheetRenderer = (content, handlers) => content.externalUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOHLBO4LMcjs.GoogleSheetsViewer, { externalUrl: content.externalUrl, fileName: content.fileName }) : defaultFallbackRenderer(content, handlers);
960
+ var defaultFigmaRenderer = (content, handlers) => content.externalUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5MF3NMYCcjs.FigmaEmbed, { url: content.externalUrl, title: content.fileName, loading: "eager" }) : defaultFallbackRenderer(content, handlers);
961
961
  var defaultFileRenderer = (content) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
962
- _chunkE25A235Wcjs.FileDownloadCard,
962
+ _chunkOHLBO4LMcjs.FileDownloadCard,
963
963
  {
964
964
  fileName: content.fileName,
965
965
  mimeType: content.mimeType,
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  DEFAULT_FOLDER_INDEX_FILE,
4
4
  ScrollShadow
5
- } from "./chunk-ROBQ5TR7.js";
5
+ } from "./chunk-JH2SIWPQ.js";
6
6
  import {
7
7
  ACTIVE_ANCHOR_ATTRIBUTE,
8
8
  declaredScrollMarginTop,
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
2
 
3
3
 
4
- var _chunkZSJ6WWFHcjs = require('./chunk-ZSJ6WWFH.cjs');
4
+ var _chunk5MF3NMYCcjs = require('./chunk-5MF3NMYC.cjs');
5
5
 
6
6
 
7
7
 
@@ -46,7 +46,7 @@ function GoogleSheetsViewer({ externalUrl, fileName, height }) {
46
46
  ] });
47
47
  }
48
48
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
49
- _chunkZSJ6WWFHcjs.EmbedViewerFrame,
49
+ _chunk5MF3NMYCcjs.EmbedViewerFrame,
50
50
  {
51
51
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.GoogleSheetsIcon, { className: "h-5 w-5 shrink-0" }),
52
52
  title: displayName,
@@ -81,7 +81,7 @@ function PdfViewer({ src, fileName, onPreview, onDownload, height }) {
81
81
  ] });
82
82
  }
83
83
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
84
- _chunkZSJ6WWFHcjs.EmbedViewerFrame,
84
+ _chunk5MF3NMYCcjs.EmbedViewerFrame,
85
85
  {
86
86
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.AdobePdfIcon, { className: "h-5 w-5 shrink-0" }),
87
87
  title: displayName,
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  EmbedViewerFrame
4
- } from "./chunk-2LZ3IYGT.js";
4
+ } from "./chunk-B5XU6KOA.js";
5
5
  import {
6
6
  toGoogleSheetsEmbedUrl,
7
7
  toGoogleSheetsOriginalUrl
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  SearchInput
4
- } from "./chunk-2LZ3IYGT.js";
4
+ } from "./chunk-B5XU6KOA.js";
5
5
  import {
6
6
  contentFetch
7
7
  } from "./chunk-G3GRYDMS.js";
@@ -12,7 +12,7 @@ import {
12
12
  resolveExternalNavigation,
13
13
  resolveSourceIcon,
14
14
  stripSameOriginToPath
15
- } from "./chunk-ROBQ5TR7.js";
15
+ } from "./chunk-JH2SIWPQ.js";
16
16
  import {
17
17
  useDebounce
18
18
  } from "./chunk-CMZ3QTFQ.js";
@@ -4,7 +4,7 @@
4
4
  var _chunkGEDY7HQIcjs = require('./chunk-GEDY7HQI.cjs');
5
5
 
6
6
 
7
- var _chunkZSJ6WWFHcjs = require('./chunk-ZSJ6WWFH.cjs');
7
+ var _chunk5MF3NMYCcjs = require('./chunk-5MF3NMYC.cjs');
8
8
 
9
9
 
10
10
  var _chunkPPXR22YCcjs = require('./chunk-PPXR22YC.cjs');
@@ -15,7 +15,7 @@ var _chunkJO5TLJPMcjs = require('./chunk-JO5TLJPM.cjs');
15
15
 
16
16
 
17
17
 
18
- var _chunkHETQETPVcjs = require('./chunk-HETQETPV.cjs');
18
+ var _chunkUWQWMGJ7cjs = require('./chunk-UWQWMGJ7.cjs');
19
19
 
20
20
 
21
21
 
@@ -61,7 +61,7 @@ function FaqAccordion({ items, defaultOpenIds = [] }) {
61
61
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
62
62
  "div",
63
63
  {
64
- id: _chunkHETQETPVcjs.faqItemAnchor.call(void 0, item.id),
64
+ id: _chunkUWQWMGJ7cjs.faqItemAnchor.call(void 0, item.id),
65
65
  className: "scroll-mt-24 transition-colors hover:bg-ods-bg-hover",
66
66
  children: [
67
67
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
@@ -154,7 +154,7 @@ function groupFaqsBySection(faqs) {
154
154
  }
155
155
  let group = byName.get(name);
156
156
  if (!group) {
157
- group = { section: name, slug: _chunkHETQETPVcjs.faqSectionSlug.call(void 0, name), items: [] };
157
+ group = { section: name, slug: _chunkUWQWMGJ7cjs.faqSectionSlug.call(void 0, name), items: [] };
158
158
  byName.set(name, group);
159
159
  }
160
160
  group.items.push(item);
@@ -209,7 +209,7 @@ function GroupedFaqList({
209
209
  }, [slugKey]);
210
210
  const [hashTarget, setHashTarget] = _react.useState.call(void 0, null);
211
211
  _react.useEffect.call(void 0, () => {
212
- const refresh = () => setHashTarget(_chunkHETQETPVcjs.parseFaqHash.call(void 0, window.location.hash));
212
+ const refresh = () => setHashTarget(_chunkUWQWMGJ7cjs.parseFaqHash.call(void 0, window.location.hash));
213
213
  refresh();
214
214
  window.addEventListener("hashchange", refresh);
215
215
  return () => window.removeEventListener("hashchange", refresh);
@@ -377,7 +377,7 @@ function FaqDocumentPage({
377
377
  minResults
378
378
  }
379
379
  ) });
380
- return shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZSJ6WWFHcjs.PageShell, { children: inner }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: inner });
380
+ return shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5MF3NMYCcjs.PageShell, { children: inner }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: inner });
381
381
  }
382
382
 
383
383
 
@@ -537,15 +537,13 @@ var MESSAGE_TYPE = {
537
537
  TEXT: "TEXT",
538
538
  THINKING: "THINKING",
539
539
  ASK: "ASK",
540
- /** Per-answer source metadata (documents, videos, entity cards).
540
+ /** Per-answer attachments (cited documents, videos, entity cards).
541
541
  *
542
- * TWO names for ONE payload, on purpose. `SOURCES` is the contract the
543
- * backend is moving to; `GUIDE` is the envelope it ships in today, reused
544
- * from Guide Mode v2 so a released frontend keeps working during the v2→v3
545
- * rollout. Both decode through the same path, so dropping `GUIDE` later is a
546
- * deletion here and nothing else. */
542
+ * `ATTACHMENTS` carries `sources` / `videos` / `cards` on the record itself.
543
+ * `GUIDE` is the envelope it replaced — the same arrays under `payload` —
544
+ * and stays only until every backend ships `ATTACHMENTS`. */
545
+ ATTACHMENTS: "ATTACHMENTS",
547
546
  GUIDE: "GUIDE",
548
- SOURCES: "SOURCES",
549
547
  EXECUTING_TOOL: "EXECUTING_TOOL",
550
548
  EXECUTED_TOOL: "EXECUTED_TOOL",
551
549
  APPROVAL_REQUEST: "APPROVAL_REQUEST",
@@ -18243,6 +18241,16 @@ function sourceMetadataEvent(payload) {
18243
18241
  ...refs.length > 0 ? { refs } : {}
18244
18242
  };
18245
18243
  }
18244
+ function withoutNulls(value) {
18245
+ if (Array.isArray(value)) return value.map(withoutNulls);
18246
+ if (!isRecord(value)) return value;
18247
+ return Object.fromEntries(
18248
+ Object.entries(value).filter(([, field]) => field !== null).map(([key, field]) => [key, withoutNulls(field)])
18249
+ );
18250
+ }
18251
+ function attachmentsEvent(record) {
18252
+ return sourceMetadataEvent(withoutNulls(record));
18253
+ }
18246
18254
  function mergeSourceMetadata(previous, event) {
18247
18255
  const byIndex = /* @__PURE__ */ new Map();
18248
18256
  for (const source of [..._nullishCoalesce(_optionalChain([previous, 'optionalAccess', _568 => _568.sources]), () => ( [])), ..._nullishCoalesce(event.sources, () => ( []))]) {
@@ -21380,13 +21388,14 @@ function decodeNatsChunk(chunk) {
21380
21388
  return { type: "thinking-delta", text: data.text, ...seq };
21381
21389
  }
21382
21390
  return null;
21383
- // Two chunk names, one payload and one decoder. `SOURCES` is the contract
21384
- // the backend is moving to; `GUIDE` is the v2 envelope it ships in during
21385
- // the rollout (see `MESSAGE_TYPE.GUIDE`). The chunk arrives BEFORE or
21386
- // between the answer's text deltas, so the reducer — not this decoder —
21387
- // owns attaching it to the right turn.
21388
- case MESSAGE_TYPE.GUIDE:
21389
- case MESSAGE_TYPE.SOURCES: {
21391
+ // The chunk arrives BEFORE or between the answer's text deltas, so the
21392
+ // reducer — not this decoder — owns attaching it to the right turn.
21393
+ case MESSAGE_TYPE.ATTACHMENTS: {
21394
+ const event = attachmentsEvent(data);
21395
+ return event ? { ...event, ...seq } : null;
21396
+ }
21397
+ // The envelope `ATTACHMENTS` replaced (see `MESSAGE_TYPE.GUIDE`).
21398
+ case MESSAGE_TYPE.GUIDE: {
21390
21399
  const event = sourceMetadataEvent(data.payload);
21391
21400
  return event ? { ...event, ...seq } : null;
21392
21401
  }
@@ -21741,11 +21750,13 @@ function decodeHistoricalMessageData(data) {
21741
21750
  return { type: "thinking-delta", text: data.text };
21742
21751
  }
21743
21752
  return null;
21744
- // Persisted source metadata, through the SAME decoder the live chunk uses
21745
- // (`sourceMetadataEvent`). That shared parse is the whole reason a reloaded
21753
+ // Persisted attachments, through the SAME decoder the live chunk uses
21754
+ // (`attachmentsEvent`). That shared parse is the whole reason a reloaded
21746
21755
  // answer renders identically to the one the reader watched arrive.
21756
+ case MESSAGE_TYPE.ATTACHMENTS:
21757
+ return attachmentsEvent(data);
21758
+ // The envelope `ATTACHMENTS` replaced (see `MESSAGE_TYPE.GUIDE`).
21747
21759
  case MESSAGE_TYPE.GUIDE:
21748
- case MESSAGE_TYPE.SOURCES:
21749
21760
  return "payload" in data ? sourceMetadataEvent(data.payload) : null;
21750
21761
  // Same completeness gate as the live decoder (`decodeNatsChunk`): a
21751
21762
  // persisted row without a question or without options is not a card the