@flamingo-stack/openframe-frontend-core 0.0.773 → 0.0.775

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 (135) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/{chunk-VW2QQKQ6.cjs → chunk-36GYLB3Z.cjs} +15 -15
  3. package/dist/{chunk-5HBGBLJT.cjs → chunk-3XLDYEQD.cjs} +74 -63
  4. package/dist/{chunk-7P2QXBWE.cjs → chunk-42JGOJCB.cjs} +234 -213
  5. package/dist/{chunk-I4ZVMNHO.cjs → chunk-4LFB4YY3.cjs} +6 -6
  6. package/dist/{chunk-JJNOAYD4.cjs → chunk-5AOKXXHV.cjs} +4 -4
  7. package/dist/{chunk-MT5Z2LSV.cjs → chunk-5YJWT5ZQ.cjs} +72 -72
  8. package/dist/{chunk-42YLIZFD.cjs → chunk-6SJYFUGD.cjs} +22 -22
  9. package/dist/{chunk-BPAYT72L.cjs → chunk-BTVO676B.cjs} +148 -131
  10. package/dist/{chunk-TZ4GKUO2.cjs → chunk-CZIMISAR.cjs} +5 -1
  11. package/dist/{chunk-XVFM6SJA.cjs → chunk-E64HPPRH.cjs} +31 -31
  12. package/dist/{chunk-CTRJNTYU.cjs → chunk-EQBJHJS7.cjs} +2 -2
  13. package/dist/{chunk-6LLF2QCS.cjs → chunk-F67SEXCW.cjs} +39 -39
  14. package/dist/{chunk-HEEK42BL.cjs → chunk-FHTTRWAK.cjs} +81 -81
  15. package/dist/{chunk-NRFNZ35Z.cjs → chunk-IQQ3SLUK.cjs} +19 -19
  16. package/dist/{chunk-RNLRS4ID.cjs → chunk-KKAY6GPU.cjs} +2 -2
  17. package/dist/{chunk-ILZEXCJH.cjs → chunk-KWZ62LPZ.cjs} +124 -104
  18. package/dist/{chunk-KDMWXXLE.cjs → chunk-L5CKY5WA.cjs} +15 -15
  19. package/dist/{chunk-CW3ML76U.cjs → chunk-NTPX5GXI.cjs} +4 -0
  20. package/dist/{chunk-NPCFVTA2.cjs → chunk-ODF3KCRK.cjs} +31 -31
  21. package/dist/{chunk-YSKX42LW.cjs → chunk-PMX6QNNN.cjs} +12 -12
  22. package/dist/{chunk-2A56MLLL.cjs → chunk-SWEPHSIP.cjs} +4 -4
  23. package/dist/{chunk-7J4YWDT6.cjs → chunk-TF2XYDH3.cjs} +3 -3
  24. package/dist/{chunk-KSCEAIBS.cjs → chunk-TOPGBOCN.cjs} +2 -2
  25. package/dist/{chunk-FPCGKH5K.cjs → chunk-TUXPFF4P.cjs} +31 -29
  26. package/dist/{chunk-SE76YGR3.cjs → chunk-USMR73ND.cjs} +4 -4
  27. package/dist/{chunk-BMFU2CUL.cjs → chunk-VAGZJRYV.cjs} +4 -4
  28. package/dist/{chunk-3FREBLAJ.cjs → chunk-VDXBACD3.cjs} +47 -45
  29. package/dist/{chunk-X5Z4HRH7.cjs → chunk-VISK6LKE.cjs} +2 -2
  30. package/dist/{chunk-5V7BIUGA.cjs → chunk-Y3EBUFX4.cjs} +92 -21
  31. package/dist/{cloud-tenants-EE5ULFOK.cjs → cloud-tenants-ISGAMTJD.cjs} +11 -11
  32. package/dist/components/authors/author-detail-view.d.ts.map +1 -1
  33. package/dist/components/authors/author-detail-view.js +12 -2
  34. package/dist/components/case-studies/index.cjs +28 -28
  35. package/dist/components/chat/ask-prompts.d.ts.map +1 -1
  36. package/dist/components/chat/ask-prompts.js +28 -19
  37. package/dist/components/chat/entity-cards/entity-portrait-card.d.ts +3 -1
  38. package/dist/components/chat/entity-cards/entity-portrait-card.d.ts.map +1 -1
  39. package/dist/components/chat/entity-cards/entity-portrait-card.js +2 -0
  40. package/dist/components/chat/entity-cards/program-card.d.ts +6 -1
  41. package/dist/components/chat/entity-cards/program-card.d.ts.map +1 -1
  42. package/dist/components/chat/entity-cards/program-card.js +19 -2
  43. package/dist/components/chat/index.cjs +10 -8
  44. package/dist/components/chat/index.d.ts +1 -1
  45. package/dist/components/chat/index.d.ts.map +1 -1
  46. package/dist/components/chat/index.js +10 -4
  47. package/dist/components/chat/utils/ask-ai-events.d.ts +10 -0
  48. package/dist/components/chat/utils/ask-ai-events.d.ts.map +1 -1
  49. package/dist/components/chat/utils/ask-ai-events.js +21 -1
  50. package/dist/components/contact/index.cjs +12 -12
  51. package/dist/components/docs/index.cjs +15 -15
  52. package/dist/components/embeds/index.cjs +12 -12
  53. package/dist/components/faq/index.cjs +13 -13
  54. package/dist/components/features/index.cjs +11 -11
  55. package/dist/components/features/video-hover-preview.d.ts.map +1 -1
  56. package/dist/components/features/video-hover-preview.js +5 -2
  57. package/dist/components/features/video-shared.d.ts +2 -1
  58. package/dist/components/features/video-shared.d.ts.map +1 -1
  59. package/dist/components/features/video.d.ts.map +1 -1
  60. package/dist/components/features/video.js +64 -13
  61. package/dist/components/help-center-pages/index.cjs +100 -100
  62. package/dist/components/index.cjs +74 -62
  63. package/dist/components/meeting-scheduler/index.cjs +46 -46
  64. package/dist/components/navigation/index.cjs +14 -14
  65. package/dist/components/navigation/mingo-ai-button.d.ts.map +1 -1
  66. package/dist/components/navigation/mingo-ai-button.js +2 -1
  67. package/dist/components/navigation/site-header.d.ts.map +1 -1
  68. package/dist/components/navigation/site-header.js +3 -1
  69. package/dist/components/onboarding-guides/index.cjs +14 -14
  70. package/dist/components/product-demo/index.cjs +20 -20
  71. package/dist/components/related-content/card-registry.d.ts +5 -0
  72. package/dist/components/related-content/card-registry.d.ts.map +1 -1
  73. package/dist/components/related-content/card-registry.js +2 -0
  74. package/dist/components/related-content/index.cjs +7 -6
  75. package/dist/components/related-content/index.d.ts +2 -1
  76. package/dist/components/related-content/index.d.ts.map +1 -1
  77. package/dist/components/related-content/index.js +2 -2
  78. package/dist/components/related-content/related-content-section.d.ts +8 -10
  79. package/dist/components/related-content/related-content-section.d.ts.map +1 -1
  80. package/dist/components/related-content/related-content-section.js +20 -11
  81. package/dist/components/tickets/index.cjs +17 -17
  82. package/dist/components/ui/index.cjs +13 -11
  83. package/dist/components/ui/photo-wall.d.ts +16 -1
  84. package/dist/components/ui/photo-wall.d.ts.map +1 -1
  85. package/dist/components/ui/photo-wall.js +24 -9
  86. package/dist/components/ui/tab-navigation.d.ts +8 -1
  87. package/dist/components/ui/tab-navigation.d.ts.map +1 -1
  88. package/dist/components/ui/tab-navigation.js +9 -3
  89. package/dist/{devices-EBGGHEGR.cjs → devices-AHJX6ACJ.cjs} +12 -12
  90. package/dist/{embeddable-chat-HCT4QV35.cjs → embeddable-chat-DI7ZZTBP.cjs} +75 -75
  91. package/dist/hooks/index.cjs +4 -4
  92. package/dist/hooks/use-near-viewport.d.ts.map +1 -1
  93. package/dist/hooks/use-near-viewport.js +4 -0
  94. package/dist/index.cjs +23 -15
  95. package/dist/{knowledge-5ZSMKKTL.cjs → knowledge-FH5GVRVP.cjs} +12 -12
  96. package/dist/{logs-GUV3BMGC.cjs → logs-JBIHHLUQ.cjs} +19 -19
  97. package/dist/{policies-HPMTDOAS.cjs → policies-XLJ2ABY5.cjs} +15 -15
  98. package/dist/{scripts-QYYKCIUW.cjs → scripts-CQLXM7PP.cjs} +16 -16
  99. package/dist/{software-update-NC2KZKEI.cjs → software-update-7NYZ7L76.cjs} +14 -14
  100. package/dist/utils/content-ref-groups.d.ts +8 -0
  101. package/dist/utils/content-ref-groups.d.ts.map +1 -1
  102. package/dist/utils/content-ref-groups.js +2 -0
  103. package/dist/utils/dismiss-cookie.d.ts +14 -0
  104. package/dist/utils/dismiss-cookie.d.ts.map +1 -1
  105. package/dist/utils/dismiss-cookie.js +4 -0
  106. package/dist/utils/index.cjs +10 -0
  107. package/dist/utils/index.d.ts +1 -1
  108. package/dist/utils/index.d.ts.map +1 -1
  109. package/dist/utils/index.js +2 -0
  110. package/dist/utils/visitor-os.d.ts +9 -0
  111. package/dist/utils/visitor-os.d.ts.map +1 -1
  112. package/dist/utils/visitor-os.js +4 -0
  113. package/dist/{video-file-player-COXRF4M5.cjs → video-file-player-4TXA7BZF.cjs} +3 -3
  114. package/package.json +1 -1
  115. package/src/components/authors/author-detail-view.tsx +10 -2
  116. package/src/components/chat/ask-prompts.tsx +6 -1
  117. package/src/components/chat/entity-cards/entity-portrait-card.tsx +4 -0
  118. package/src/components/chat/entity-cards/program-card.tsx +24 -2
  119. package/src/components/chat/index.ts +16 -9
  120. package/src/components/chat/utils/ask-ai-events.ts +26 -0
  121. package/src/components/features/video-hover-preview.tsx +46 -37
  122. package/src/components/features/video-shared.tsx +2 -1
  123. package/src/components/features/video.tsx +102 -19
  124. package/src/components/navigation/mingo-ai-button.tsx +2 -1
  125. package/src/components/navigation/site-header.tsx +3 -1
  126. package/src/components/related-content/card-registry.tsx +7 -0
  127. package/src/components/related-content/index.ts +2 -1
  128. package/src/components/related-content/related-content-section.tsx +38 -14
  129. package/src/components/ui/photo-wall.tsx +43 -10
  130. package/src/components/ui/tab-navigation.tsx +18 -3
  131. package/src/hooks/use-near-viewport.ts +6 -0
  132. package/src/utils/content-ref-groups.ts +9 -0
  133. package/src/utils/dismiss-cookie.ts +17 -0
  134. package/src/utils/index.ts +1 -0
  135. package/src/utils/visitor-os.ts +12 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
@@ -219,6 +219,7 @@ import { buildListUrl, canonicalContentRefType } from "./list-url.js";
219
219
  import { faqSectionSlug, faqItemAnchor, parseFaqHash } from "./faq-anchor.js";
220
220
  import {
221
221
  CONTENT_REF_GROUPS,
222
+ GROUP_PAGE_SIZE,
222
223
  getContentRefLabel,
223
224
  getContentRefLabelOrTitleCase,
224
225
  orderContentRefTypes
@@ -284,6 +285,7 @@ export {
284
285
  DOC_TABLE_TYPES,
285
286
  EMBED_PROXY_OPTIONAL_HEADERS,
286
287
  FullscreenSwitchController,
288
+ GROUP_PAGE_SIZE,
287
289
  HEX_PATTERN,
288
290
  HUB_HEADER_OFFSET_PX,
289
291
  ICON_REGISTRY,
@@ -42,4 +42,13 @@ export declare function detectDesktopOs(userAgent: string | null | undefined, hi
42
42
  export declare function usesCommandKey(os: VisitorOs | null): boolean;
43
43
  /** A shortcut as its hint reads on the visitor's system: `⌘K` or `Ctrl K`. */
44
44
  export declare function shortcutLabel(os: VisitorOs | null, key: string): string;
45
+ /**
46
+ * The inline script that marks the document with the visitor's DESKTOP system before the first paint
47
+ * (`attribute` = `mac` | `windows` | `linux`, absent for a phone, a tablet or an unknown system), for a page the
48
+ * server renders the same for every visitor (and a CDN may cache): it draws every system's variant and the host's
49
+ * CSS shows the one the attribute names, so the right one is there from the first frame with no hydration
50
+ * mismatch. The same rule as `detectVisitorOs` (Client Hints platform, then the User-Agent, touch points telling an
51
+ * iPad from a Mac), held equal to it by the tests. Any throw leaves the attribute off: the host's no-system variant.
52
+ */
53
+ export declare function desktopOsBeforePaintScript(attribute: string): string;
45
54
  //# sourceMappingURL=visitor-os.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"visitor-os.d.ts","sourceRoot":"","sources":["../../src/utils/visitor-os.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;AAExE,+CAA+C;AAC/C,eAAO,MAAM,YAAY,sCAAuC,CAAC;AACjE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAaD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,GAAE,cAAmB,GAAG,SAAS,GAAG,IAAI,CAclH;AAED,uFAAuF;AACvF,wBAAgB,WAAW,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAElE;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI,CAE9G;AAED,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAE5D;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvE"}
1
+ {"version":3,"file":"visitor-os.d.ts","sourceRoot":"","sources":["../../src/utils/visitor-os.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;AAExE,+CAA+C;AAC/C,eAAO,MAAM,YAAY,sCAAuC,CAAC;AACjE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAaD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,GAAE,cAAmB,GAAG,SAAS,GAAG,IAAI,CAclH;AAED,uFAAuF;AACvF,wBAAgB,WAAW,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAElE;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI,CAE9G;AAED,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAE5D;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpE"}
@@ -33,8 +33,12 @@ function usesCommandKey(os) {
33
33
  function shortcutLabel(os, key) {
34
34
  return usesCommandKey(os) ? `\u2318${key}` : `Ctrl ${key}`;
35
35
  }
36
+ function desktopOsBeforePaintScript(attribute) {
37
+ return `(function(){try{var n=window.navigator,h=n.userAgentData&&n.userAgentData.platform,p=String(h||'').replace(/"/g,'').trim().toLowerCase(),t=(n.maxTouchPoints||0)>1,o=null,m=${JSON.stringify(HINT_PLATFORMS)};if(m[p])o=m[p];else{var u=n.userAgent||'';if(/iPhone|iPad|iPod/i.test(u))o='ios';else if(/Android/i.test(u))o='android';else if(/Windows NT|Win64|Win32/i.test(u))o='windows';else if(/Macintosh|Mac OS X/i.test(u))o='mac';else if(/Linux|X11|CrOS/i.test(u))o='linux'}if(o==='mac'&&t)o='ios';if(o==='mac'||o==='windows'||o==='linux')document.documentElement.setAttribute(${JSON.stringify(attribute)},o)}catch(e){}})();`;
38
+ }
36
39
  export {
37
40
  DESKTOP_OSES,
41
+ desktopOsBeforePaintScript,
38
42
  desktopOsOf,
39
43
  detectDesktopOs,
40
44
  detectVisitorOs,
@@ -2,7 +2,7 @@
2
2
  "use client";
3
3
 
4
4
 
5
- var _chunkRNLRS4IDcjs = require('./chunk-RNLRS4ID.cjs');
5
+ var _chunkKKAY6GPUcjs = require('./chunk-KKAY6GPU.cjs');
6
6
 
7
7
 
8
8
  var _chunkJKX2C3I2cjs = require('./chunk-JKX2C3I2.cjs');
@@ -16,7 +16,7 @@ var _chunkJKX2C3I2cjs = require('./chunk-JKX2C3I2.cjs');
16
16
  var _chunkSETFUCZAcjs = require('./chunk-SETFUCZA.cjs');
17
17
  require('./chunk-S5C3OZCO.cjs');
18
18
  require('./chunk-4IYNDV3G.cjs');
19
- require('./chunk-CW3ML76U.cjs');
19
+ require('./chunk-NTPX5GXI.cjs');
20
20
 
21
21
 
22
22
  var _chunkDGFDBPO7cjs = require('./chunk-DGFDBPO7.cjs');
@@ -415,7 +415,7 @@ function FilePlayer({
415
415
  src: url,
416
416
  poster: poster || void 0,
417
417
  streamType: "on-demand",
418
- preload: _nullishCoalesce(preload, () => ( (_chunkRNLRS4IDcjs.saveDataEnabled.call(void 0, ) ? "none" : "metadata"))),
418
+ preload: _nullishCoalesce(preload, () => ( (_chunkKKAY6GPUcjs.saveDataEnabled.call(void 0, ) ? "none" : "metadata"))),
419
419
  playsInline: true,
420
420
  muted,
421
421
  preferCmcd: "header",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flamingo-stack/openframe-frontend-core",
3
- "version": "0.0.773",
3
+ "version": "0.0.775",
4
4
  "description": "Shared design system and components for all Flamingo platforms",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -25,7 +25,7 @@
25
25
 
26
26
  import type React from 'react';
27
27
  import Image from '../../embed-shims/next-image';
28
- import { AVATAR_SIZE } from '../../styles/component-sizes';
28
+ import { AVATAR_SIZE, AVATAR_SIZE_PX } from '../../styles/component-sizes';
29
29
  import type { AuthorProfile } from '../../types/entity-author';
30
30
  import { cn } from '../../utils/cn';
31
31
  import { formatBioText } from '../../utils/format';
@@ -77,7 +77,15 @@ export function AuthorDetailView({ author, proxyImageUrl, children, className }:
77
77
  ) : (
78
78
  <div className="relative h-full w-full overflow-hidden rounded-full border border-ods-border bg-ods-bg-surface">
79
79
  {proxiedAvatar ? (
80
- <Image src={proxiedAvatar} alt={author.fullName} fill className="object-cover" unoptimized />
80
+ <Image
81
+ src={proxiedAvatar}
82
+ alt={author.fullName}
83
+ fill
84
+ // The frame's size, so a host that resizes serves a 96 px picture, not the 2500 px original.
85
+ sizes={`${AVATAR_SIZE_PX.profile}px`}
86
+ className="object-cover"
87
+ unoptimized
88
+ />
81
89
  ) : (
82
90
  <div className="flex h-full w-full items-center justify-center text-ods-text-secondary text-h2">
83
91
  {author.fullName.charAt(0).toUpperCase()}
@@ -6,6 +6,7 @@ import { AgentMark } from '../agent-mark';
6
6
  import { MingoAiButton, openAskAi } from '../navigation/mingo-ai-button';
7
7
  import { ScrollShadow } from '../ui/scroll-fade';
8
8
  import { QuickActionChipButton, QuickActionChipSkeleton, type QuickActionIconSpec } from './quick-action-chip';
9
+ import { ASK_AI_TRIGGER_ATTRIBUTE } from './utils/ask-ai-events';
9
10
 
10
11
  /** One question a page offers: the chip shows `label` as written, the chat is sent `prompt`. */
11
12
  export interface AskPrompt {
@@ -104,7 +105,11 @@ function QuestionChips({
104
105
  {Array.from({ length: count }, (_, slot) => {
105
106
  const prompt = loading ? undefined : prompts[slot];
106
107
  return (
107
- <span key={prompt?.id ?? `slot-${slot}`} className={slotClassName ?? CHIP_SLOT_CLASS}>
108
+ <span
109
+ key={prompt?.id ?? `slot-${slot}`}
110
+ className={slotClassName ?? CHIP_SLOT_CLASS}
111
+ {...(prompt ? { [ASK_AI_TRIGGER_ATTRIBUTE]: '' } : {})}
112
+ >
108
113
  {loading ? (
109
114
  <QuickActionChipSkeleton
110
115
  variant="question"
@@ -85,6 +85,8 @@ export interface EntityPortraitCardProps {
85
85
  /** Typography override for the title (entity identity), zone box unchanged. */
86
86
  titleClassName?: string;
87
87
  person?: EntityPortraitPerson | null;
88
+ /** The card's picture is likely the page's largest paint: fetch it at once and ranked high, not lazily. */
89
+ priority?: boolean;
88
90
  className?: string;
89
91
  }
90
92
 
@@ -99,6 +101,7 @@ export function EntityPortraitCard({
99
101
  title,
100
102
  titleClassName,
101
103
  person,
104
+ priority,
102
105
  className,
103
106
  }: EntityPortraitCardProps) {
104
107
  const loading = useLoadingScope();
@@ -140,6 +143,7 @@ export function EntityPortraitCard({
140
143
  className={cn('h-full w-full', isWide === false ? 'object-contain' : 'object-cover')}
141
144
  sizes="(min-width: 800px) 400px, 100vw"
142
145
  fill
146
+ priority={priority}
143
147
  unoptimized
144
148
  onLoad={onMediaLoad}
145
149
  onError={onMediaError}
@@ -259,6 +259,11 @@ export interface ProgramCardProps<T extends BaseProgramItem> {
259
259
  eyebrow?: string;
260
260
  /** `default` density: the item's tags, drawn under the description. */
261
261
  tags?: string[];
262
+ /**
263
+ * The card is the first thing a list draws, so its cover is likely the page's largest paint: fetch it at once and
264
+ * ranked high, instead of lazily (the default for every other card).
265
+ */
266
+ priority?: boolean;
262
267
  className?: string;
263
268
  }
264
269
 
@@ -355,6 +360,7 @@ function ProgramEditorialCard({
355
360
  typeMeta,
356
361
  profile,
357
362
  playable,
363
+ priority,
358
364
  className,
359
365
  }: {
360
366
  feature: boolean;
@@ -369,6 +375,7 @@ function ProgramEditorialCard({
369
375
  typeMeta: string | null | undefined;
370
376
  profile: ReturnType<typeof programItemToStripProfile>;
371
377
  playable: boolean;
378
+ priority?: boolean;
372
379
  className?: string;
373
380
  }) {
374
381
  // The cover is shown WHOLE on its own edge colour: the fill AdminContentCard
@@ -392,7 +399,9 @@ function ProgramEditorialCard({
392
399
  return (
393
400
  <ContentCardFrame as="a" href={href} target={target} rel={rel} className={cn(EDITORIAL_ROW_GRID, className)}>
394
401
  <span className={cn(EDITORIAL_ROW_THUMB, 'bg-ods-bg')}>
395
- {cover && <Image src={cover} alt="" fill sizes="120px" className="object-cover" unoptimized />}
402
+ {cover && (
403
+ <Image src={cover} alt="" fill sizes="120px" className="object-cover" priority={priority} unoptimized />
404
+ )}
396
405
  {playable && cover && <CardHoverPlay size="md" />}
397
406
  </span>
398
407
  <span className={EDITORIAL_ROW_TEXT}>
@@ -417,6 +426,7 @@ function ProgramEditorialCard({
417
426
  fill
418
427
  sizes="(min-width: 1024px) 640px, 100vw"
419
428
  className="object-contain"
429
+ priority={priority}
420
430
  unoptimized
421
431
  />
422
432
  )}
@@ -464,6 +474,7 @@ export function ProgramCard<T extends BaseProgramItem>({
464
474
  wholeCardClickable = false,
465
475
  eyebrow,
466
476
  tags = [],
477
+ priority,
467
478
  className,
468
479
  }: ProgramCardProps<T>) {
469
480
  const { target, rel } = useEntityCardLink({
@@ -529,6 +540,7 @@ export function ProgramCard<T extends BaseProgramItem>({
529
540
  imageAlt={item.title}
530
541
  title={item.title}
531
542
  titleClassName="font-['Azeret_Mono'] font-semibold text-lg leading-6"
543
+ priority={priority}
532
544
  person={
533
545
  profile
534
546
  ? { name: profile.name, avatarUrl: profile.avatarUrl, subtitle: profile.subtitle || dateMeta }
@@ -554,6 +566,7 @@ export function ProgramCard<T extends BaseProgramItem>({
554
566
  typeMeta={compactTypeMetaValue}
555
567
  profile={programItemToStripProfile(item)}
556
568
  playable={isPlayable}
569
+ priority={priority}
557
570
  className={className}
558
571
  />
559
572
  );
@@ -570,7 +583,15 @@ export function ProgramCard<T extends BaseProgramItem>({
570
583
  <Link href={href} target={target} rel={rel} className={cn(COMPACT_CARD_OUTER, 'group', className)}>
571
584
  <span className={COMPACT_CARD_IMAGE_SLOT}>
572
585
  {compactCover ? (
573
- <Image src={compactCover} alt={item.title} fill sizes="56px" className="object-contain" unoptimized />
586
+ <Image
587
+ src={compactCover}
588
+ alt={item.title}
589
+ fill
590
+ sizes="56px"
591
+ className="object-contain"
592
+ priority={priority}
593
+ unoptimized
594
+ />
574
595
  ) : (
575
596
  <span className="flex h-full w-full items-center justify-center text-ods-accent">
576
597
  {config.type === 'podcast' ? (
@@ -659,6 +680,7 @@ export function ProgramCard<T extends BaseProgramItem>({
659
680
  fill
660
681
  sizes="(min-width: 1280px) 400px, (min-width: 768px) 320px, 100vw"
661
682
  className="object-cover"
683
+ priority={priority}
662
684
  unoptimized
663
685
  />
664
686
  {isPlayable && <CardHoverPlay size="md" />}
@@ -2,9 +2,8 @@
2
2
 
3
3
  // Chat components exports
4
4
  import { createElement, forwardRef, lazy, Suspense, useEffect, useState } from 'react';
5
- import { afterPageLoad } from '../../utils/after-page-load';
6
5
  import type { EmbeddableChatHandle, EmbeddableChatProps } from './embeddable-chat';
7
- import { ASK_AI_OPEN_EVENTS, holdAskAiOpens } from './utils/ask-ai-events';
6
+ import { ASK_AI_OPEN_EVENTS, askAiOpenIsHeld, holdAskAiOpens, onAskAiIntent } from './utils/ask-ai-events';
8
7
  export * from './approval-request-message';
9
8
  export * from './approval-batch-message';
10
9
  export * from './escalation-offer-message';
@@ -106,11 +105,12 @@ export * from './utils';
106
105
 
107
106
  // EmbeddableChat — THE chat. Hosts mount it once at the root after providing a
108
107
  // <ChatRuntimeContext.Provider>. Its module is loaded on its own (`lazy`), and
109
- // only once the page has loaded and the browser is idle (`afterPageLoad`), or at
110
- // once when something asks for it (an open event, `open` or `defaultOpen`): a
111
- // chat that starts closed must not download and run beside the page's first
112
- // paint, which is what slowed every page's LCP on phones. An open sent before it
113
- // has loaded is held and delivered (`ask-ai-events`).
108
+ // only when the visitor shows they want it: a pointer, a touch or the focus on
109
+ // an element that opens it (`onAskAiIntent`, `ASK_AI_TRIGGER_ATTRIBUTE`), or at
110
+ // once when something asks for it (an open event, `open` or `defaultOpen`). A
111
+ // chat that starts closed costs a page nothing: it used to load on every page
112
+ // once the browser was idle, about 650 KB of script most visitors never opened.
113
+ // An open sent before it has loaded is held and delivered (`ask-ai-events`).
114
114
  export type { ChatPrefillDraft, EmbeddableChatHandle, EmbeddableChatProps } from './embeddable-chat';
115
115
  const LoadedEmbeddableChat = lazy(() =>
116
116
  import('./embeddable-chat').then(module => ({ default: module.EmbeddableChat })),
@@ -122,8 +122,10 @@ export const EmbeddableChat = forwardRef<EmbeddableChatHandle, EmbeddableChatPro
122
122
  useEffect(() => {
123
123
  if (load) return undefined;
124
124
  const start = () => setLoadRequested(true);
125
+ // An open sent before this mounted (a deep link, an early click) is waiting: load now to deliver it.
126
+ if (askAiOpenIsHeld()) queueMicrotask(start);
125
127
  for (const name of ASK_AI_OPEN_EVENTS) window.addEventListener(name, start);
126
- const cancel = afterPageLoad(start);
128
+ const cancel = onAskAiIntent(start);
127
129
  return () => {
128
130
  cancel();
129
131
  for (const name of ASK_AI_OPEN_EVENTS) window.removeEventListener(name, start);
@@ -134,5 +136,10 @@ export const EmbeddableChat = forwardRef<EmbeddableChatHandle, EmbeddableChatPro
134
136
  });
135
137
  EmbeddableChat.displayName = 'EmbeddableChat';
136
138
  export { MINGO_V2_RAIL_WIDTH, MINGO_V2_SPLIT_WIDTH } from './chat-dimensions';
137
- export { ASK_AI_OPEN_EVENT, ASK_AI_OPEN_EVENTS, ASK_AI_OPEN_WITH_REF_EVENT } from './utils/ask-ai-events';
139
+ export {
140
+ ASK_AI_OPEN_EVENT,
141
+ ASK_AI_OPEN_EVENTS,
142
+ ASK_AI_OPEN_WITH_REF_EVENT,
143
+ ASK_AI_TRIGGER_ATTRIBUTE,
144
+ } from './utils/ask-ai-events';
138
145
  export * from './proxy-credentials-panel';
@@ -35,6 +35,11 @@ export function holdAskAiOpens(): void {
35
35
  for (const name of ASK_AI_OPEN_EVENTS) window.addEventListener(name, holdOpen);
36
36
  }
37
37
 
38
+ /** An open came before any chat was listening, and waits to be delivered: the chat must load now. */
39
+ export function askAiOpenIsHeld(): boolean {
40
+ return heldOpen !== null;
41
+ }
42
+
38
43
  /**
39
44
  * A chat is listening now: stop holding, and send it the open that came before
40
45
  * it was. Returns what to call when that chat stops listening.
@@ -49,3 +54,24 @@ export function chatListensForAskAiOpens(): () => void {
49
54
  listening -= 1;
50
55
  };
51
56
  }
57
+
58
+ /**
59
+ * The attribute every element that opens the chat carries (the Mingo button, an ask prompt). A pointer or focus
60
+ * reaching one is the visitor's intent to open it: the chat starts loading then, a moment before the click, instead
61
+ * of on every page view (`onAskAiIntent`).
62
+ */
63
+ export const ASK_AI_TRIGGER_ATTRIBUTE = 'data-ask-ai-trigger';
64
+
65
+ /** Runs `run` once a pointer, a touch or the focus reaches an element carrying `ASK_AI_TRIGGER_ATTRIBUTE`. */
66
+ export function onAskAiIntent(run: () => void): () => void {
67
+ if (typeof document === 'undefined') return () => {};
68
+ const selector = `[${ASK_AI_TRIGGER_ATTRIBUTE}]`;
69
+ const onIntent = (event: Event) => {
70
+ if (event.target instanceof Element && event.target.closest(selector)) run();
71
+ };
72
+ const kinds = ['pointerover', 'focusin', 'touchstart'] as const;
73
+ for (const kind of kinds) document.addEventListener(kind, onIntent, { capture: true, passive: true });
74
+ return () => {
75
+ for (const kind of kinds) document.removeEventListener(kind, onIntent, { capture: true });
76
+ };
77
+ }
@@ -125,6 +125,13 @@ export function VideoHoverPreviewSurface({
125
125
  }, [gateControlled]);
126
126
  // Continuation forces the media + player on regardless of hover/viewport gate.
127
127
  const showMedia = continuation || (gateControlled ? playerMounted : isNear);
128
+ // The hover player (and its script, the Mux player and hls.js: the largest a page can load) mounts on the first
129
+ // hover, never before: a card that is near the screen but never hovered shows its poster and costs nothing more.
130
+ // A widget pinned to the screen is always "near", so mounting on proximity loaded that script on every page view
131
+ // (CU-17tkuw5xp4q). Once mounted it stays, so the next hover plays at once.
132
+ const [engaged, setEngaged] = useState(false);
133
+ if ((active || continuation) && !engaged) setEngaged(true);
134
+ const showPlayer = continuation || engaged;
128
135
 
129
136
  // Poster resolution — the shared entity-card cover fallback chain: the real
130
137
  // thumbnail, dropped on load error. Null → first-frame facade (unless the
@@ -159,43 +166,45 @@ export function VideoHoverPreviewSurface({
159
166
 
160
167
  {badge === 'play' && !active && !continuation && <VideoPlayBadge className="absolute inset-0 z-10 m-auto" />}
161
168
 
162
- <div
163
- className="absolute inset-0"
164
- style={{ '--media-background-color': 'transparent' } as React.CSSProperties}
165
- >
166
- <Video
167
- // Remount between modes: `startTime` + autoplay are LOAD-TIME
168
- // props (playback-core binds them to one-shot durationchange /
169
- // loadstart handlers), so re-propping an already-loaded element
170
- // silently drops the seek. Only a Mux preview rewrite changed
171
- // `src` before, which is why HLS resumed and plain MP4 did not.
172
- key={continuation ? 'continuation' : 'preview'}
173
- kind="file"
174
- // Rendition-capped in BOTH modes: the cap was only skipped
175
- // because changing `src` used to be the sole trigger for the
176
- // seek; the explicit key handles that now, and a 320px mini
177
- // player should never pull the uncapped manifest.
178
- url={previewUrl}
179
- poster={posterUrl}
180
- {...(continuation
181
- ? {
182
- startTime,
183
- autoPlay: autoPlay && startMuted,
184
- startMuted,
185
- autoPlayUnmuted: autoPlay && !startMuted,
186
- }
187
- : { playWhenHovered: active })}
188
- chromeless
189
- layout="fill"
190
- fit={fit}
191
- preload={preload}
192
- mutedIntent={mutedIntent}
193
- hideMutedBadge={hideMutedBadge}
194
- onMutedFallbackChange={onMutedFallbackChange}
195
- onEnded={onEnded}
196
- playerHandleRef={previewHandleRef}
197
- />
198
- </div>
169
+ {showPlayer ? (
170
+ <div
171
+ className="absolute inset-0"
172
+ style={{ '--media-background-color': 'transparent' } as React.CSSProperties}
173
+ >
174
+ <Video
175
+ // Remount between modes: `startTime` + autoplay are LOAD-TIME
176
+ // props (playback-core binds them to one-shot durationchange /
177
+ // loadstart handlers), so re-propping an already-loaded element
178
+ // silently drops the seek. Only a Mux preview rewrite changed
179
+ // `src` before, which is why HLS resumed and plain MP4 did not.
180
+ key={continuation ? 'continuation' : 'preview'}
181
+ kind="file"
182
+ // Rendition-capped in BOTH modes: the cap was only skipped
183
+ // because changing `src` used to be the sole trigger for the
184
+ // seek; the explicit key handles that now, and a 320px mini
185
+ // player should never pull the uncapped manifest.
186
+ url={previewUrl}
187
+ poster={posterUrl}
188
+ {...(continuation
189
+ ? {
190
+ startTime,
191
+ autoPlay: autoPlay && startMuted,
192
+ startMuted,
193
+ autoPlayUnmuted: autoPlay && !startMuted,
194
+ }
195
+ : { playWhenHovered: active })}
196
+ chromeless
197
+ layout="fill"
198
+ fit={fit}
199
+ preload={preload}
200
+ mutedIntent={mutedIntent}
201
+ hideMutedBadge={hideMutedBadge}
202
+ onMutedFallbackChange={onMutedFallbackChange}
203
+ onEnded={onEnded}
204
+ playerHandleRef={previewHandleRef}
205
+ />
206
+ </div>
207
+ ) : null}
199
208
  </>
200
209
  ) : (
201
210
  <div className="absolute inset-0 bg-ods-card" />
@@ -164,7 +164,7 @@ export interface VideoCommonProps {
164
164
  priority?: boolean;
165
165
  /** Tailwind classes applied to the underlying player root. */
166
166
  className?: string;
167
- /** Accessible label (used as YT facade title; ignored for file branch). */
167
+ /** Accessible label: the play button of either facade (YouTube, or a file video that waits for a click). */
168
168
  title?: string;
169
169
  /**
170
170
  * Mount the player only once its box comes near the viewport (shared
@@ -172,6 +172,7 @@ export interface VideoCommonProps {
172
172
  * Until then the box shows the poster (or nothing) — the caller's container
173
173
  * still owns the size, so nothing shifts when the player mounts. For grids
174
174
  * of players: a library of 20 clips costs 20 posters, not 20 players.
175
+ * Default `true` (every video is drawn on approach); `false` mounts it at once.
175
176
  */
176
177
  lazy?: boolean;
177
178
  /**