@flamingo-stack/openframe-frontend-core 0.0.718 → 0.0.720

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 (175) hide show
  1. package/dist/{chunk-MIQLUUVF.cjs → chunk-2C72EWQR.cjs} +93 -29
  2. package/dist/{chunk-IWCPXJEE.js → chunk-3HZ6XSZC.js} +2 -4
  3. package/dist/{chunk-ZXCZYMN4.cjs → chunk-4SIZCHVZ.cjs} +13 -15
  4. package/dist/{chunk-BOTM373R.cjs → chunk-5XDCCQ4A.cjs} +15 -15
  5. package/dist/{chunk-DXCBOZVT.cjs → chunk-6BLN5WDS.cjs} +41 -41
  6. package/dist/{chunk-DCD5WZUF.js → chunk-6W46LVK4.js} +5 -5
  7. package/dist/{chunk-JHQ334WS.js → chunk-742BGXNX.js} +2 -0
  8. package/dist/{chunk-AECTRMGQ.cjs → chunk-7GRPR7XA.cjs} +13 -1
  9. package/dist/{chunk-45F7PXUI.js → chunk-7HYEQKN6.js} +6 -6
  10. package/dist/{chunk-N2PF5CFX.js → chunk-7IOU6BJE.js} +12 -11
  11. package/dist/{chunk-BWIN42ZA.cjs → chunk-7LPR4RZ3.cjs} +34 -36
  12. package/dist/chunk-AFTRPEXO.js +13 -0
  13. package/dist/{chunk-JPD4NXH6.js → chunk-AZRI4XBP.js} +1 -1
  14. package/dist/{chunk-4QFWGLZO.js → chunk-B2N4YX66.js} +1 -1
  15. package/dist/{chunk-QXZCLQNV.js → chunk-B5LNX4GZ.js} +2 -2
  16. package/dist/{chunk-GN4A7PMB.cjs → chunk-DHNJSQGX.cjs} +91 -91
  17. package/dist/{chunk-NDZ5ZXOQ.cjs → chunk-DOPOHO6H.cjs} +20 -20
  18. package/dist/{chunk-Z3CVSPO3.cjs → chunk-DYDDAA6O.cjs} +519 -518
  19. package/dist/{chunk-2RKFMUNW.cjs → chunk-EVMM3JE6.cjs} +64 -63
  20. package/dist/chunk-EWPR7662.cjs +13 -0
  21. package/dist/{chunk-AGVXKD4K.js → chunk-FSQQZFVG.js} +12 -0
  22. package/dist/{chunk-TTVOLEUS.js → chunk-GANIUMRU.js} +89 -2
  23. package/dist/{chunk-S2FUFMLW.cjs → chunk-HFEYEPOG.cjs} +27 -27
  24. package/dist/{chunk-LE5WKGJV.cjs → chunk-HTS46FFY.cjs} +3 -3
  25. package/dist/{chunk-6A43ZDWV.cjs → chunk-IL3ZWNM2.cjs} +4 -4
  26. package/dist/{chunk-PSVSEN4J.cjs → chunk-IMTY3GRR.cjs} +2 -0
  27. package/dist/{chunk-YC5COB5V.cjs → chunk-ISCZ6UNF.cjs} +85 -89
  28. package/dist/{chunk-XGHGGBM3.js → chunk-K2BYVPGR.js} +3 -3
  29. package/dist/{chunk-HWVUR735.cjs → chunk-KSGMZHVV.cjs} +2 -2
  30. package/dist/{chunk-SGFTTJKO.js → chunk-LO3KCLEF.js} +1 -1
  31. package/dist/{chunk-MA4Q5RBP.cjs → chunk-NYSMDM4J.cjs} +2 -2
  32. package/dist/{chunk-67QBMN4R.js → chunk-O3MKJU6A.js} +6 -6
  33. package/dist/{chunk-APJZBDQN.js → chunk-PSMJYZMV.js} +27 -26
  34. package/dist/{chunk-JH2SIWPQ.js → chunk-PXAKSPLZ.js} +1586 -1263
  35. package/dist/{chunk-TBCZCRQ5.js → chunk-Q5327DXK.js} +13 -17
  36. package/dist/{chunk-EZC2F5OT.cjs → chunk-QF464PPL.cjs} +39 -39
  37. package/dist/{chunk-UWQWMGJ7.cjs → chunk-RDP5UZXQ.cjs} +888 -565
  38. package/dist/{chunk-ETYLOZOB.cjs → chunk-RFUOIQSG.cjs} +100 -13
  39. package/dist/{chunk-DC4RTYWK.cjs → chunk-RZQGIWK3.cjs} +3 -3
  40. package/dist/{chunk-PQ6HBLZ7.js → chunk-TORERAXD.js} +105 -41
  41. package/dist/{chunk-6YPTUHM7.js → chunk-URW23QUM.js} +1 -1
  42. package/dist/{chunk-QBCDSTLE.cjs → chunk-UWJMDFDO.cjs} +18 -18
  43. package/dist/{chunk-YEMCCYIF.js → chunk-V6B2FBZK.js} +5 -5
  44. package/dist/{chunk-JIWMBIVZ.js → chunk-VBHGJFA3.js} +10 -10
  45. package/dist/{chunk-Z5UWW3Z2.cjs → chunk-VF2CJXZ2.cjs} +81 -65
  46. package/dist/{chunk-DEZDMTBM.js → chunk-VYVPII4W.js} +8 -10
  47. package/dist/{chunk-MM7MCIXL.js → chunk-VYZCKY5K.js} +9 -9
  48. package/dist/{chunk-E7YCPY7K.cjs → chunk-XSM46FHD.cjs} +3 -3
  49. package/dist/{chunk-NZ5BHDFZ.js → chunk-XW3Q623Q.js} +1 -1
  50. package/dist/{chunk-LOYPRJWA.js → chunk-YK3X74SF.js} +67 -51
  51. package/dist/{chunk-WALCXC7J.cjs → chunk-ZHD3F2TH.cjs} +3 -3
  52. package/dist/{chunk-KBJJQFYU.js → chunk-ZPHOQDAE.js} +1 -1
  53. package/dist/{cloud-tenants-TAKOWXLD.js → cloud-tenants-RKQRSDNE.js} +9 -9
  54. package/dist/{cloud-tenants-PFDF7O5U.cjs → cloud-tenants-UQZASXUB.cjs} +10 -10
  55. package/dist/components/case-studies/index.cjs +23 -23
  56. package/dist/components/case-studies/index.js +10 -10
  57. package/dist/components/chat/ask-prompts.d.ts +10 -2
  58. package/dist/components/chat/ask-prompts.d.ts.map +1 -1
  59. package/dist/components/chat/assistant-ask-prompts.d.ts +27 -0
  60. package/dist/components/chat/assistant-ask-prompts.d.ts.map +1 -0
  61. package/dist/components/chat/entity-cards/dispatch.d.ts.map +1 -1
  62. package/dist/components/chat/hooks/index.d.ts +1 -0
  63. package/dist/components/chat/hooks/index.d.ts.map +1 -1
  64. package/dist/components/chat/hooks/use-ask-prompts.d.ts +63 -0
  65. package/dist/components/chat/hooks/use-ask-prompts.d.ts.map +1 -0
  66. package/dist/components/chat/index.cjs +23 -6
  67. package/dist/components/chat/index.d.ts +1 -0
  68. package/dist/components/chat/index.d.ts.map +1 -1
  69. package/dist/components/chat/index.js +22 -5
  70. package/dist/components/chat/utils/icon-library.d.ts.map +1 -1
  71. package/dist/components/contact/index.cjs +11 -11
  72. package/dist/components/contact/index.js +10 -10
  73. package/dist/components/docs/index.cjs +14 -14
  74. package/dist/components/docs/index.js +13 -13
  75. package/dist/components/embeds/index.cjs +11 -11
  76. package/dist/components/embeds/index.js +10 -10
  77. package/dist/components/faq/faq-ask-card.d.ts +44 -0
  78. package/dist/components/faq/faq-ask-card.d.ts.map +1 -0
  79. package/dist/components/faq/faq-document-page.d.ts +5 -1
  80. package/dist/components/faq/faq-document-page.d.ts.map +1 -1
  81. package/dist/components/faq/faq-section.d.ts +18 -5
  82. package/dist/components/faq/faq-section.d.ts.map +1 -1
  83. package/dist/components/faq/index.cjs +13 -12
  84. package/dist/components/faq/index.d.ts +1 -0
  85. package/dist/components/faq/index.d.ts.map +1 -1
  86. package/dist/components/faq/index.js +12 -11
  87. package/dist/components/features/auth/auth-benefits-panel.d.ts.map +1 -1
  88. package/dist/components/features/index.cjs +10 -10
  89. package/dist/components/features/index.js +9 -9
  90. package/dist/components/features/remote-session/remote-desktop-view.d.ts +6 -2
  91. package/dist/components/features/remote-session/remote-desktop-view.d.ts.map +1 -1
  92. package/dist/components/help-center-pages/index.cjs +104 -105
  93. package/dist/components/help-center-pages/index.js +28 -29
  94. package/dist/components/help-center-pages/trust-center-page.d.ts +4 -1
  95. package/dist/components/help-center-pages/trust-center-page.d.ts.map +1 -1
  96. package/dist/components/index.cjs +109 -197
  97. package/dist/components/index.js +228 -316
  98. package/dist/components/meeting-scheduler/index.cjs +50 -51
  99. package/dist/components/meeting-scheduler/index.js +12 -13
  100. package/dist/components/navigation/index.cjs +13 -13
  101. package/dist/components/navigation/index.js +12 -12
  102. package/dist/components/navigation/mingo-ai-button.d.ts +1 -1
  103. package/dist/components/navigation/mingo-ai-button.d.ts.map +1 -1
  104. package/dist/components/onboarding-guides/index.cjs +13 -14
  105. package/dist/components/onboarding-guides/index.js +12 -13
  106. package/dist/components/product-demo/index.cjs +7 -7
  107. package/dist/components/product-demo/index.js +7 -7
  108. package/dist/components/related-content/index.cjs +5 -7
  109. package/dist/components/related-content/index.js +4 -6
  110. package/dist/components/related-content/related-content-section.d.ts +6 -6
  111. package/dist/components/related-content/related-content-section.d.ts.map +1 -1
  112. package/dist/components/tickets/index.cjs +15 -15
  113. package/dist/components/tickets/index.js +14 -14
  114. package/dist/components/ui/index.cjs +26 -10
  115. package/dist/components/ui/index.js +25 -9
  116. package/dist/contexts/assistant-runtime-context.d.ts +74 -0
  117. package/dist/contexts/assistant-runtime-context.d.ts.map +1 -0
  118. package/dist/contexts/index.cjs +7 -1
  119. package/dist/contexts/index.d.ts +1 -0
  120. package/dist/contexts/index.d.ts.map +1 -1
  121. package/dist/contexts/index.js +6 -0
  122. package/dist/{devices-KRCGZMGA.cjs → devices-7Q2EUM7B.cjs} +11 -11
  123. package/dist/{devices-LHEX7O5T.js → devices-U3Y4IIW4.js} +9 -9
  124. package/dist/hooks/index.cjs +3 -4
  125. package/dist/hooks/index.js +2 -3
  126. package/dist/hooks/use-self-fetch.d.ts +3 -0
  127. package/dist/hooks/use-self-fetch.d.ts.map +1 -1
  128. package/dist/index.cjs +34 -14
  129. package/dist/index.js +33 -13
  130. package/dist/{knowledge-RZSFNR33.js → knowledge-NST53EXE.js} +9 -9
  131. package/dist/{knowledge-KLVPVEYZ.cjs → knowledge-UYIZ74MA.cjs} +11 -11
  132. package/dist/{logs-OX3XTVL2.cjs → logs-HTH7X7KV.cjs} +18 -18
  133. package/dist/{logs-E5DOV5JO.js → logs-JVTRG232.js} +9 -9
  134. package/dist/{policies-MC2S4S5G.js → policies-DTXTRK56.js} +9 -9
  135. package/dist/{policies-FOSCIZGK.cjs → policies-MXK2HB4W.cjs} +14 -14
  136. package/dist/{remote-session-JQ2BPIE3.js → remote-session-LAJZKQBN.js} +3 -3
  137. package/dist/{remote-session-DRFE5XZE.cjs → remote-session-SKKF4PBV.cjs} +5 -5
  138. package/dist/{software-update-D4OEIH65.js → software-update-6RHMPM3W.js} +9 -9
  139. package/dist/{software-update-HOBSTWVO.cjs → software-update-P6BSM6HX.cjs} +14 -14
  140. package/dist/utils/index.cjs +26 -2
  141. package/dist/utils/index.d.ts +1 -0
  142. package/dist/utils/index.d.ts.map +1 -1
  143. package/dist/utils/index.js +25 -3
  144. package/dist/utils/list-url.d.ts.map +1 -1
  145. package/dist/utils/source-icons.d.ts.map +1 -1
  146. package/dist/utils/trial.d.ts +18 -0
  147. package/dist/utils/trial.d.ts.map +1 -0
  148. package/package.json +1 -1
  149. package/src/components/chat/ask-prompts.tsx +25 -3
  150. package/src/components/chat/assistant-ask-prompts.tsx +78 -0
  151. package/src/components/chat/entity-cards/dispatch.tsx +38 -4
  152. package/src/components/chat/hooks/index.ts +12 -0
  153. package/src/components/chat/hooks/use-ask-prompts.ts +188 -0
  154. package/src/components/chat/index.ts +1 -0
  155. package/src/components/chat/utils/icon-library.tsx +6 -0
  156. package/src/components/faq/faq-ask-card.tsx +115 -0
  157. package/src/components/faq/faq-document-page.tsx +6 -1
  158. package/src/components/faq/faq-section.tsx +27 -5
  159. package/src/components/faq/index.ts +1 -0
  160. package/src/components/features/auth/auth-benefits-panel.tsx +5 -4
  161. package/src/components/features/remote-session/remote-desktop-view.tsx +86 -63
  162. package/src/components/help-center-pages/trust-center-page.tsx +5 -2
  163. package/src/components/navigation/mingo-ai-button.tsx +27 -6
  164. package/src/components/related-content/related-content-section.tsx +46 -47
  165. package/src/contexts/assistant-runtime-context.tsx +84 -0
  166. package/src/contexts/index.ts +9 -0
  167. package/src/hooks/use-self-fetch.ts +7 -0
  168. package/src/utils/index.ts +1 -0
  169. package/src/utils/list-url.ts +4 -0
  170. package/src/utils/source-icons.ts +10 -2
  171. package/src/utils/trial.ts +19 -0
  172. package/dist/chunk-AUMKE74M.cjs +0 -16
  173. package/dist/chunk-G3GRYDMS.js +0 -16
  174. package/dist/chunk-GEDY7HQI.cjs +0 -85
  175. package/dist/chunk-YBQQNDC7.js +0 -85
@@ -1,9 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); 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 _chunkGEDY7HQIcjs = require('./chunk-GEDY7HQI.cjs');
5
-
6
-
7
4
  var _chunkWBNAEYTQcjs = require('./chunk-WBNAEYTQ.cjs');
8
5
 
9
6
 
@@ -39,10 +36,11 @@ var _chunkWBNAEYTQcjs = require('./chunk-WBNAEYTQ.cjs');
39
36
 
40
37
 
41
38
 
42
- var _chunkETYLOZOBcjs = require('./chunk-ETYLOZOB.cjs');
39
+
40
+ var _chunkRFUOIQSGcjs = require('./chunk-RFUOIQSG.cjs');
43
41
 
44
42
 
45
- var _chunkAECTRMGQcjs = require('./chunk-AECTRMGQ.cjs');
43
+ var _chunk7GRPR7XAcjs = require('./chunk-7GRPR7XA.cjs');
46
44
 
47
45
  // src/components/related-content/related-content-section.tsx
48
46
  var _react = require('react');
@@ -440,13 +438,13 @@ function cardEntry(definition) {
440
438
  }
441
439
  function programEntry(configKey) {
442
440
  return cardEntry({
443
- skeleton: (size) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkETYLOZOBcjs.ProgramCardSkeleton, { size: size === "sm" ? "sm" : "default" }),
441
+ skeleton: (size) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRFUOIQSGcjs.ProgramCardSkeleton, { size: size === "sm" ? "sm" : "default" }),
444
442
  decode: decodeProgramRow,
445
443
  render: (item, ctx) => {
446
444
  const config = _optionalChain([ctx, 'access', _2 => _2.extras, 'optionalAccess', _3 => _3.programConfigs, 'optionalAccess', _4 => _4[configKey]]);
447
445
  if (!config) return null;
448
446
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
449
- _chunkETYLOZOBcjs.ProgramCard,
447
+ _chunkRFUOIQSGcjs.ProgramCard,
450
448
  {
451
449
  config,
452
450
  item,
@@ -463,10 +461,10 @@ function programEntry(configKey) {
463
461
  }
464
462
  function roadmapEntry(cardType) {
465
463
  return cardEntry({
466
- skeleton: (size) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkETYLOZOBcjs.RoadmapCardSkeleton, { size: size === "sm" ? "sm" : "default" }),
464
+ skeleton: (size) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRFUOIQSGcjs.RoadmapCardSkeleton, { size: size === "sm" ? "sm" : "default" }),
467
465
  decode: decodeRoadmapRow,
468
466
  render: (item, ctx) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
469
- _chunkETYLOZOBcjs.RoadmapCard,
467
+ _chunkRFUOIQSGcjs.RoadmapCard,
470
468
  {
471
469
  item,
472
470
  href: ctx.href,
@@ -483,10 +481,10 @@ function roadmapEntry(cardType) {
483
481
  }
484
482
  var RELATED_CARD_REGISTRY = {
485
483
  blog_post_existing: cardEntry({
486
- skeleton: (size) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkETYLOZOBcjs.BlogCardSkeleton, { size: size === "sm" ? "sm" : "default" }),
484
+ skeleton: (size) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRFUOIQSGcjs.BlogCardSkeleton, { size: size === "sm" ? "sm" : "default" }),
487
485
  decode: decodeBlogRow,
488
486
  render: (post, ctx) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
489
- _chunkETYLOZOBcjs.BlogCard,
487
+ _chunkRFUOIQSGcjs.BlogCard,
490
488
  {
491
489
  post,
492
490
  size: ctx.legacySize,
@@ -498,10 +496,10 @@ var RELATED_CARD_REGISTRY = {
498
496
  )
499
497
  }),
500
498
  case_study: cardEntry({
501
- skeleton: (size) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkETYLOZOBcjs.CaseStudyCardSkeleton, { size: size === "sm" ? "sm" : "default" }),
499
+ skeleton: (size) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRFUOIQSGcjs.CaseStudyCardSkeleton, { size: size === "sm" ? "sm" : "default" }),
502
500
  decode: decodeCaseStudyRow,
503
501
  render: (study, ctx) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
504
- _chunkETYLOZOBcjs.CaseStudyCard,
502
+ _chunkRFUOIQSGcjs.CaseStudyCard,
505
503
  {
506
504
  study,
507
505
  size: ctx.legacySize,
@@ -513,10 +511,10 @@ var RELATED_CARD_REGISTRY = {
513
511
  )
514
512
  }),
515
513
  customer_interview: cardEntry({
516
- skeleton: (size) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkETYLOZOBcjs.CustomerInterviewCardSkeleton, { size: size === "sm" ? "sm" : "default" }),
514
+ skeleton: (size) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRFUOIQSGcjs.CustomerInterviewCardSkeleton, { size: size === "sm" ? "sm" : "default" }),
517
515
  decode: decodeCustomerInterviewRow,
518
516
  render: (interview, ctx) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
519
- _chunkETYLOZOBcjs.CustomerInterviewCard,
517
+ _chunkRFUOIQSGcjs.CustomerInterviewCard,
520
518
  {
521
519
  interview,
522
520
  size: ctx.legacySize,
@@ -534,13 +532,13 @@ var RELATED_CARD_REGISTRY = {
534
532
  * record, and the three props the rail sets itself are read off it.
535
533
  */
536
534
  product_release: cardEntry({
537
- skeleton: (size) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkETYLOZOBcjs.ProductReleaseCardSkeleton, { size: size === "sm" ? "sm" : "lg" }),
535
+ skeleton: (size) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRFUOIQSGcjs.ProductReleaseCardSkeleton, { size: size === "sm" ? "sm" : "lg" }),
538
536
  decode: asRecord,
539
537
  render: (release, ctx) => {
540
- const buildReleaseProps = _nullishCoalesce(_optionalChain([ctx, 'access', _5 => _5.extras, 'optionalAccess', _6 => _6.buildProductReleaseCardProps]), () => ( _chunkETYLOZOBcjs.buildProductReleaseCardProps));
538
+ const buildReleaseProps = _nullishCoalesce(_optionalChain([ctx, 'access', _5 => _5.extras, 'optionalAccess', _6 => _6.buildProductReleaseCardProps]), () => ( _chunkRFUOIQSGcjs.buildProductReleaseCardProps));
541
539
  const releaseProps = buildReleaseProps(release);
542
540
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
543
- _chunkETYLOZOBcjs.ProductReleaseCard,
541
+ _chunkRFUOIQSGcjs.ProductReleaseCard,
544
542
  {
545
543
  size: ctx.size === "sm" ? "sm" : "lg",
546
544
  title: str(release, "title"),
@@ -556,10 +554,10 @@ var RELATED_CARD_REGISTRY = {
556
554
  webinar: programEntry("webinar"),
557
555
  event: programEntry("event"),
558
556
  investor_update: cardEntry({
559
- skeleton: (size) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkETYLOZOBcjs.InvestorUpdateCardSkeleton, { size: size === "sm" ? "sm" : "default" }),
557
+ skeleton: (size) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRFUOIQSGcjs.InvestorUpdateCardSkeleton, { size: size === "sm" ? "sm" : "default" }),
560
558
  decode: decodeInvestorUpdateRow,
561
559
  render: (update, ctx) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
562
- _chunkETYLOZOBcjs.InvestorUpdateCard,
560
+ _chunkRFUOIQSGcjs.InvestorUpdateCard,
563
561
  {
564
562
  update,
565
563
  size: ctx.legacySize,
@@ -574,10 +572,10 @@ var RELATED_CARD_REGISTRY = {
574
572
  * step-numbered 'default' variant is for the guide detail page's "More in
575
573
  * section" rail, not this full-width row. */
576
574
  onboarding_guide: cardEntry({
577
- skeleton: (size) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkETYLOZOBcjs.OnboardingGuideCardSkeleton, { size: size === "sm" ? "sm" : "catalog" }),
575
+ skeleton: (size) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRFUOIQSGcjs.OnboardingGuideCardSkeleton, { size: size === "sm" ? "sm" : "catalog" }),
578
576
  decode: decodeOnboardingGuideRow,
579
577
  render: (guide, ctx) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
580
- _chunkETYLOZOBcjs.OnboardingGuideCard,
578
+ _chunkRFUOIQSGcjs.OnboardingGuideCard,
581
579
  {
582
580
  guide,
583
581
  size: ctx.size === "sm" ? "sm" : "catalog",
@@ -594,10 +592,10 @@ var RELATED_CARD_REGISTRY = {
594
592
  * href: an object with `href: undefined` is still truthy and would wrap the
595
593
  * card in a dead <a>. */
596
594
  what_i_shipped: cardEntry({
597
- skeleton: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkETYLOZOBcjs.WhatIShippedCardSkeleton, {}),
595
+ skeleton: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRFUOIQSGcjs.WhatIShippedCardSkeleton, {}),
598
596
  decode: decodeEmployeeEntryRow,
599
597
  render: (entry, ctx) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
600
- _chunkETYLOZOBcjs.WhatIShippedCard,
598
+ _chunkRFUOIQSGcjs.WhatIShippedCard,
601
599
  {
602
600
  entry,
603
601
  placeholderUrl: ctx.placeholderUrl,
@@ -607,10 +605,10 @@ var RELATED_CARD_REGISTRY = {
607
605
  }),
608
606
  /** Same shared employee-entry shape + anchor contract as What I Shipped. */
609
607
  how_i_work: cardEntry({
610
- skeleton: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkETYLOZOBcjs.HowIWorkCardSkeleton, {}),
608
+ skeleton: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRFUOIQSGcjs.HowIWorkCardSkeleton, {}),
611
609
  decode: decodeEmployeeEntryRow,
612
610
  render: (entry, ctx) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
613
- _chunkETYLOZOBcjs.HowIWorkCard,
611
+ _chunkRFUOIQSGcjs.HowIWorkCard,
614
612
  {
615
613
  entry,
616
614
  placeholderUrl: ctx.placeholderUrl,
@@ -620,10 +618,10 @@ var RELATED_CARD_REGISTRY = {
620
618
  }),
621
619
  /** Same shared employee-entry shape + anchor contract as What I Shipped. */
622
620
  ai_prompt: cardEntry({
623
- skeleton: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkETYLOZOBcjs.AiPromptCardSkeleton, {}),
621
+ skeleton: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRFUOIQSGcjs.AiPromptCardSkeleton, {}),
624
622
  decode: decodeEmployeeEntryRow,
625
623
  render: (entry, ctx) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
626
- _chunkETYLOZOBcjs.AiPromptCard,
624
+ _chunkRFUOIQSGcjs.AiPromptCard,
627
625
  {
628
626
  entry,
629
627
  placeholderUrl: ctx.placeholderUrl,
@@ -644,7 +642,7 @@ function DefaultLinkPropsProvider({
644
642
  children
645
643
  }) {
646
644
  if (!href) return children(null);
647
- const newTab = _chunkETYLOZOBcjs.decideNewTab.call(void 0, { href, targetPlatform, currentSource: "" });
645
+ const newTab = _chunkRFUOIQSGcjs.decideNewTab.call(void 0, { href, targetPlatform, currentSource: "" });
648
646
  return children(newTab ? { href, target: "_blank", rel: "noopener noreferrer" } : { href });
649
647
  }
650
648
  function defaultResolveHref(ref) {
@@ -700,15 +698,20 @@ function CardForType({
700
698
  function useGroupItems(type, refs, buildUrl) {
701
699
  const ids = refs.map((r) => r.id);
702
700
  const url = ids.length > 0 ? buildUrl(type, ids) : null;
703
- const { data, isLoading } = _chunkGEDY7HQIcjs.useSelfFetch.call(void 0, url);
704
- const items = data != null ? _chunkETYLOZOBcjs.extractItems.call(void 0, data) : null;
705
- return { items, isLoading };
701
+ const [pages, setPages] = _react.useState.call(void 0, () => /* @__PURE__ */ new Map());
702
+ const cached = url !== null ? pages.get(url) : void 0;
703
+ const { data, dataUrl, error } = _chunkRFUOIQSGcjs.useSelfFetch.call(void 0, cached ? null : url);
704
+ if (data != null && dataUrl !== null && !pages.has(dataUrl)) {
705
+ setPages(new Map(pages).set(dataUrl, _chunkRFUOIQSGcjs.extractItems.call(void 0, data)));
706
+ }
707
+ if (url === null) return { items: null, isLoading: false };
708
+ return { items: _nullishCoalesce(cached, () => ( (error ? [] : null))), isLoading: !cached && !error };
706
709
  }
707
710
  function gridClassFor(columns) {
708
711
  return columns === 3 ? "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6" : "grid grid-cols-1 sm:grid-cols-2 gap-6";
709
712
  }
710
713
  function resolveGroupConfig(type) {
711
- return _nullishCoalesce(_chunkETYLOZOBcjs.CONTENT_REF_GROUPS[type], () => ( {
714
+ return _nullishCoalesce(_chunkRFUOIQSGcjs.CONTENT_REF_GROUPS[type], () => ( {
712
715
  label: type,
713
716
  order: 999,
714
717
  layout: "grid",
@@ -727,38 +730,36 @@ function ContentGroup({
727
730
  adminCampaignCard,
728
731
  heading
729
732
  }) {
730
- const { items, isLoading } = useGroupItems(type, refs, buildUrl);
731
733
  const config = resolveGroupConfig(type);
732
734
  const isListLayout = config.layout === "list";
733
735
  const cardSize = config.gridSize;
734
736
  const [page, setPage] = _react.useState.call(void 0, 1);
735
737
  const refsKey = refs.map((r) => r.id).join("|");
736
- const prevRefsKeyRef = _react.useRef.call(void 0, refsKey);
737
- _react.useEffect.call(void 0, () => {
738
- if (prevRefsKeyRef.current !== refsKey) {
739
- prevRefsKeyRef.current = refsKey;
740
- setPage(1);
741
- }
742
- }, [refsKey]);
743
- const totalGroupPages = _chunkAECTRMGQcjs.pageCount.call(void 0, refs.length, GROUP_PAGE_SIZE);
744
- const safePage = Math.min(page, totalGroupPages);
745
- const visibleGroupRefs = refs.length > GROUP_PAGE_SIZE ? refs.slice((safePage - 1) * GROUP_PAGE_SIZE, safePage * GROUP_PAGE_SIZE) : refs;
746
- const groupPagination = totalGroupPages > 1 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWBNAEYTQcjs.Pagination, { currentPage: safePage, totalPages: totalGroupPages, onPageChange: setPage }) : null;
747
- if (isLoading && !items) {
748
- const skeletons = visibleGroupRefs.map((r) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { children: renderSkeletonForType(type, cardSize, adminCampaignCard) }, r.id));
738
+ const [pagedRefsKey, setPagedRefsKey] = _react.useState.call(void 0, refsKey);
739
+ if (pagedRefsKey !== refsKey) {
740
+ setPagedRefsKey(refsKey);
741
+ setPage(1);
742
+ }
743
+ const totalGroupPages = _chunk7GRPR7XAcjs.pageCount.call(void 0, refs.length, GROUP_PAGE_SIZE);
744
+ const pageRefs = refs.slice((page - 1) * GROUP_PAGE_SIZE, page * GROUP_PAGE_SIZE);
745
+ const { items, isLoading } = useGroupItems(type, pageRefs, buildUrl);
746
+ const groupPagination = totalGroupPages > 1 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWBNAEYTQcjs.Pagination, { currentPage: page, totalPages: totalGroupPages, onPageChange: setPage }) : null;
747
+ if (isLoading) {
748
+ const skeletons = pageRefs.map((r) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { children: renderSkeletonForType(type, cardSize, adminCampaignCard) }, r.id));
749
749
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-4", children: [
750
750
  heading,
751
- isListLayout ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "space-y-4", children: skeletons }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: gridClassFor(columns), children: skeletons })
751
+ isListLayout ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "space-y-4", children: skeletons }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: gridClassFor(columns), children: skeletons }),
752
+ groupPagination
752
753
  ] });
753
754
  }
754
- if (!items || items.length === 0) return null;
755
+ if (!items) return null;
755
756
  const rowKey = (it) => {
756
- const extracted = _chunkETYLOZOBcjs.extractItemId.call(void 0, type, it);
757
+ const extracted = _chunkRFUOIQSGcjs.extractItemId.call(void 0, type, it);
757
758
  if (extracted !== null) return extracted;
758
759
  return String(typeof it === "object" && it !== null ? it.id : void 0);
759
760
  };
760
761
  const itemById = new Map(items.map((it) => [rowKey(it), it]));
761
- const cards = visibleGroupRefs.map((contentRef) => {
762
+ const cards = pageRefs.map((contentRef) => {
762
763
  const itemId = String(contentRef.id);
763
764
  const item = itemById.get(itemId);
764
765
  if (!item) return null;
@@ -821,11 +822,11 @@ function RelatedContentSection({
821
822
  types: includeTypes !== void 0 ? includeTypes.join(",") : void 0,
822
823
  excludeTypes: excludeTypes && excludeTypes.length > 0 ? excludeTypes.join(",") : void 0
823
824
  };
824
- const authorUrl = contentRefs === void 0 && authorId && !suggestionsDisabled ? _chunkETYLOZOBcjs.buildSuggestionUrl.call(void 0, "/api/related-content", {
825
+ const authorUrl = contentRefs === void 0 && authorId && !suggestionsDisabled ? _chunkRFUOIQSGcjs.buildSuggestionUrl.call(void 0, "/api/related-content", {
825
826
  apiBaseUrl,
826
827
  extraParams: { authorId, ...typeFilterParams }
827
828
  }) : null;
828
- const suggestUrl = _nullishCoalesce(authorUrl, () => ( (contentRefs === void 0 && entityType && entityId !== void 0 && entityId !== null && entityId !== "" && !suggestionsDisabled ? _chunkETYLOZOBcjs.buildSuggestionUrl.call(void 0, "/api/related-content", {
829
+ const suggestUrl = _nullishCoalesce(authorUrl, () => ( (contentRefs === void 0 && entityType && entityId !== void 0 && entityId !== null && entityId !== "" && !suggestionsDisabled ? _chunkRFUOIQSGcjs.buildSuggestionUrl.call(void 0, "/api/related-content", {
829
830
  apiBaseUrl,
830
831
  entityType,
831
832
  entityId,
@@ -842,9 +843,9 @@ function RelatedContentSection({
842
843
  () => !suggestionsDisabled && initialItems ? { refs: initialItems } : void 0,
843
844
  [initialItems, suggestionsDisabled]
844
845
  );
845
- const { data, isLoading } = _chunkGEDY7HQIcjs.useSelfFetch.call(void 0, suggestUrl, { initialData });
846
+ const { data, isLoading } = _chunkRFUOIQSGcjs.useSelfFetch.call(void 0, suggestUrl, { initialData });
846
847
  const effectiveBuildListUrl = _react.useMemo.call(void 0,
847
- () => _nullishCoalesce(buildListUrl2, () => ( ((type, ids) => _chunkETYLOZOBcjs.buildListUrl.call(void 0, type, ids, apiBaseUrl)))),
848
+ () => _nullishCoalesce(buildListUrl2, () => ( ((type, ids) => _chunkRFUOIQSGcjs.buildListUrl.call(void 0, type, ids, apiBaseUrl)))),
848
849
  [buildListUrl2, apiBaseUrl]
849
850
  );
850
851
  const refs = _nullishCoalesce(_nullishCoalesce(contentRefs, () => ( _optionalChain([data, 'optionalAccess', _10 => _10.refs]))), () => ( []));
@@ -855,12 +856,12 @@ function RelatedContentSection({
855
856
  if (isLoading) {
856
857
  const skeletonType = _nullishCoalesce(_nullishCoalesce(_optionalChain([includeTypes, 'optionalAccess', _11 => _11[0]]), () => ( entityType)), () => ( "blog_post_existing"));
857
858
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-8", children: [
858
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: "text-ods-text-primary text-h2", children: _chunkETYLOZOBcjs.accentSentenceMarks.call(void 0, title) }),
859
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: "text-ods-text-primary text-h2", children: _chunkRFUOIQSGcjs.accentSentenceMarks.call(void 0, title) }),
859
860
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: gridClassFor(columns), children: Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { children: renderSkeletonForType(skeletonType, "default", adminCampaignCard) }, i)) })
860
861
  ] });
861
862
  }
862
863
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-8", children: [
863
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: "text-2xl font-bold text-ods-text-primary", children: _chunkETYLOZOBcjs.accentSentenceMarks.call(void 0, title) }),
864
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: "text-2xl font-bold text-ods-text-primary", children: _chunkRFUOIQSGcjs.accentSentenceMarks.call(void 0, title) }),
864
865
  _nullishCoalesce(emptyState, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary", children: emptyStateText })))
865
866
  ] });
866
867
  }
@@ -869,16 +870,16 @@ function RelatedContentSection({
869
870
  if (!grouped[ref.type]) grouped[ref.type] = [];
870
871
  grouped[ref.type].push(ref);
871
872
  }
872
- let orderedTypes = _chunkETYLOZOBcjs.orderContentRefTypes.call(void 0, Object.keys(grouped));
873
+ let orderedTypes = _chunkRFUOIQSGcjs.orderContentRefTypes.call(void 0, Object.keys(grouped));
873
874
  if (entityType) {
874
- const canonicalEntityType = _chunkETYLOZOBcjs.canonicalContentRefType.call(void 0, entityType);
875
- const sameType = orderedTypes.filter((t) => _chunkETYLOZOBcjs.canonicalContentRefType.call(void 0, t) === canonicalEntityType);
875
+ const canonicalEntityType = _chunkRFUOIQSGcjs.canonicalContentRefType.call(void 0, entityType);
876
+ const sameType = orderedTypes.filter((t) => _chunkRFUOIQSGcjs.canonicalContentRefType.call(void 0, t) === canonicalEntityType);
876
877
  if (sameType.length > 0) {
877
- orderedTypes = [...sameType, ...orderedTypes.filter((t) => _chunkETYLOZOBcjs.canonicalContentRefType.call(void 0, t) !== canonicalEntityType)];
878
+ orderedTypes = [...sameType, ...orderedTypes.filter((t) => _chunkRFUOIQSGcjs.canonicalContentRefType.call(void 0, t) !== canonicalEntityType)];
878
879
  }
879
880
  }
880
881
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-8", children: [
881
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: "text-ods-text-primary text-h2", children: _chunkETYLOZOBcjs.accentSentenceMarks.call(void 0, title) }),
882
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: "text-ods-text-primary text-h2", children: _chunkRFUOIQSGcjs.accentSentenceMarks.call(void 0, title) }),
882
883
  orderedTypes.map((type) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
883
884
  ContentGroup,
884
885
  {
@@ -890,7 +891,7 @@ function RelatedContentSection({
890
891
  LinkProvider,
891
892
  extras,
892
893
  adminCampaignCard,
893
- heading: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "font-semibold text-ods-text-secondary text-h5", children: _chunkETYLOZOBcjs.getContentRefLabelOrTitleCase.call(void 0, type) })
894
+ heading: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "font-semibold text-ods-text-secondary text-h5", children: _chunkRFUOIQSGcjs.getContentRefLabelOrTitleCase.call(void 0, type) })
894
895
  },
895
896
  type
896
897
  ))
@@ -0,0 +1,13 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
+
3
+ // src/contexts/assistant-runtime-context.tsx
4
+ var _react = require('react');
5
+ var AssistantRuntimeContext = _react.createContext.call(void 0, null);
6
+ function useAssistantRuntime() {
7
+ return _react.useContext.call(void 0, AssistantRuntimeContext);
8
+ }
9
+
10
+
11
+
12
+
13
+ exports.AssistantRuntimeContext = AssistantRuntimeContext; exports.useAssistantRuntime = useAssistantRuntime;
@@ -2,6 +2,10 @@
2
2
  import {
3
3
  useChatRuntime
4
4
  } from "./chunk-E4ABZWTJ.js";
5
+ import {
6
+ embedAuthedFetch,
7
+ hasEmbedAuthAdapter
8
+ } from "./chunk-ADBE7QF3.js";
5
9
 
6
10
  // src/hooks/ui/use-image-edge-color.ts
7
11
  import { useState, useEffect } from "react";
@@ -313,8 +317,16 @@ function useOgPlaceholderUrl({
313
317
  }, [endpoints, title, siteName, aspect, enabled]);
314
318
  }
315
319
 
320
+ // src/utils/embed-content-fetch.ts
321
+ var contentFetch = (input, init) => {
322
+ if (!hasEmbedAuthAdapter()) return fetch(input, init);
323
+ const url = typeof input === "string" ? input : input instanceof URL ? input.href : input.url;
324
+ return embedAuthedFetch(url, init);
325
+ };
326
+
316
327
  export {
317
328
  useImageEdgeColor,
329
+ contentFetch,
318
330
  positiveInt,
319
331
  PAGE_PARAM_LIMITS,
320
332
  pageCount,
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  AvatarStack,
7
7
  resolveIcon
8
- } from "./chunk-JHQ334WS.js";
8
+ } from "./chunk-742BGXNX.js";
9
9
  import {
10
10
  SquareAvatar,
11
11
  Tag,
@@ -25,10 +25,11 @@ import {
25
25
  } from "./chunk-FBZMAPWO.js";
26
26
  import {
27
27
  NEAR_VIEWPORT_ROOT_MARGIN,
28
+ contentFetch,
28
29
  useImageEdgeColor,
29
30
  useNearViewport,
30
31
  useOgPlaceholderUrl
31
- } from "./chunk-AGVXKD4K.js";
32
+ } from "./chunk-FSQQZFVG.js";
32
33
  import {
33
34
  useChatRuntime
34
35
  } from "./chunk-E4ABZWTJ.js";
@@ -1888,6 +1889,10 @@ var BUILDERS = {
1888
1889
  design_doc: (ids, b) => `${b}/api/design-docs?ids=${ids.join(",")}`,
1889
1890
  openframe_tenant: (ids, b) => `${b}/api/openframe-tenants?ids=${ids.join(",")}`,
1890
1891
  prospect_call: (ids, b) => `${b}/api/prospect-calls?ids=${ids.join(",")}`,
1892
+ // The public website's own pages (live source; ChatRef-shaped items like the objects above).
1893
+ site_page: (ids, b) => `${b}/api/site-pages?ids=${ids.join(",")}`,
1894
+ // The OpenMSP vendor directory (indexed source).
1895
+ vendor: (ids, b) => `${b}/api/vendors/cards?ids=${ids.join(",")}`,
1891
1896
  // Code intelligence — per-object card hydration, same `handleEntityCardList`
1892
1897
  // shape as the internal objects above.
1893
1898
  code_rule: (ids, b) => `${b}/api/code-rules/cards?ids=${ids.join(",")}`,
@@ -5318,6 +5323,87 @@ function ProgramCard({
5318
5323
  ] });
5319
5324
  }
5320
5325
 
5326
+ // src/hooks/use-self-fetch.ts
5327
+ import { useEffect as useEffect7, useRef as useRef4, useState as useState10 } from "react";
5328
+ function useSelfFetch(url, options) {
5329
+ const initialData = options?.initialData;
5330
+ const revalidateOnVisibleAfterMs = options?.revalidateOnVisibleAfterMs;
5331
+ const [data, setData] = useState10(initialData ?? null);
5332
+ const [dataUrl, setDataUrl] = useState10(initialData !== void 0 ? url : null);
5333
+ const [isLoading, setIsLoading] = useState10(initialData === void 0 && url !== null);
5334
+ const [error, setError] = useState10(false);
5335
+ const [reloadKey, setReloadKey] = useState10(0);
5336
+ const [mountedAt] = useState10(() => Date.now());
5337
+ const dataAtRef = useRef4(initialData !== void 0 ? mountedAt : 0);
5338
+ const dataUrlRef = useRef4(initialData !== void 0 ? url : null);
5339
+ const [syncedProps, setSyncedProps] = useState10({ url, initialData });
5340
+ if (syncedProps.url !== url || syncedProps.initialData !== initialData) {
5341
+ setSyncedProps({ url, initialData });
5342
+ if (syncedProps.initialData !== initialData && initialData !== void 0) {
5343
+ setData(initialData);
5344
+ setDataUrl(url);
5345
+ }
5346
+ if (syncedProps.url !== url && url === null) {
5347
+ setIsLoading(false);
5348
+ }
5349
+ }
5350
+ useEffect7(() => {
5351
+ if (url === null) return void 0;
5352
+ if (dataUrlRef.current === url) return void 0;
5353
+ const ctrl = new AbortController();
5354
+ let cancelled = false;
5355
+ async function load() {
5356
+ try {
5357
+ setIsLoading(true);
5358
+ setError(false);
5359
+ const res = await contentFetch(url, { signal: ctrl.signal });
5360
+ if (!res.ok) throw new Error(`Request failed (${res.status})`);
5361
+ const json = await res.json();
5362
+ if (!cancelled) {
5363
+ setData(json);
5364
+ setDataUrl(url);
5365
+ dataUrlRef.current = url;
5366
+ dataAtRef.current = Date.now();
5367
+ }
5368
+ } catch (err) {
5369
+ if (cancelled || err?.name === "AbortError") return;
5370
+ setError(true);
5371
+ console.error("useSelfFetch:", url, err);
5372
+ } finally {
5373
+ if (!cancelled) setIsLoading(false);
5374
+ }
5375
+ }
5376
+ void load();
5377
+ return () => {
5378
+ cancelled = true;
5379
+ ctrl.abort();
5380
+ };
5381
+ }, [url, reloadKey]);
5382
+ const forceReload = () => {
5383
+ dataUrlRef.current = null;
5384
+ setReloadKey((k) => k + 1);
5385
+ };
5386
+ useEffect7(() => {
5387
+ if (!revalidateOnVisibleAfterMs || url === null) return void 0;
5388
+ const onVisible = () => {
5389
+ if (document.visibilityState !== "visible") return;
5390
+ if (Date.now() - dataAtRef.current < revalidateOnVisibleAfterMs) return;
5391
+ forceReload();
5392
+ };
5393
+ document.addEventListener("visibilitychange", onVisible);
5394
+ return () => document.removeEventListener("visibilitychange", onVisible);
5395
+ }, [url, revalidateOnVisibleAfterMs]);
5396
+ return {
5397
+ data,
5398
+ dataUrl,
5399
+ setData,
5400
+ isLoading,
5401
+ error,
5402
+ // Force a re-fetch of the current url (error-retry affordance).
5403
+ reload: forceReload
5404
+ };
5405
+ }
5406
+
5321
5407
  export {
5322
5408
  Card,
5323
5409
  CardHeader,
@@ -5420,6 +5506,7 @@ export {
5420
5506
  eventAudience,
5421
5507
  programMetaFormatters,
5422
5508
  PROGRAM_META_RENDERERS,
5509
+ useSelfFetch,
5423
5510
  decideNewTab,
5424
5511
  isSameOriginAbsoluteHref,
5425
5512
  computeIsNewTab,