@flamingo-stack/openframe-frontend-core 0.0.705-snapshot.20261006160157 → 0.0.705
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.
- package/dist/{chunk-WCVZCGK5.cjs → chunk-2QEUFXNS.cjs} +71 -312
- package/dist/{chunk-N45D4ZXQ.js → chunk-2YXVWZVF.js} +715 -959
- package/dist/{chunk-7OFPU7WE.cjs → chunk-3MX5S4CF.cjs} +2547 -877
- package/dist/{chunk-MB4PNY7C.cjs → chunk-4I45Y3DN.cjs} +6 -6
- package/dist/{chunk-K6O43WDL.cjs → chunk-4KX6OED2.cjs} +46 -46
- package/dist/{chunk-JPG7OHEG.js → chunk-5HBHO5TB.js} +1 -1
- package/dist/{chunk-3PLDQDE6.cjs → chunk-6NJKKO73.cjs} +15 -15
- package/dist/{chunk-O2RSAA5M.js → chunk-6SEANMOU.js} +11 -11
- package/dist/{chunk-WMX26HB5.js → chunk-6XIF2Z7I.js} +3 -3
- package/dist/{chunk-TQ4LB2DS.cjs → chunk-7LS22BZU.cjs} +14 -14
- package/dist/{chunk-7GEBFJT2.js → chunk-7VVFKJY5.js} +3429 -1759
- package/dist/{chunk-DDVBX42E.cjs → chunk-A75QY6CD.cjs} +21 -21
- package/dist/{chunk-OF6GEI5A.cjs → chunk-ABU3TGXA.cjs} +3 -3
- package/dist/{chunk-4CJMQLB5.js → chunk-AQWZNP6A.js} +4 -4
- package/dist/{chunk-FI6GMDO7.js → chunk-CH5232HV.js} +662 -2455
- package/dist/{chunk-Y2GSOUCS.cjs → chunk-D7BTSVMS.cjs} +2 -2
- package/dist/{chunk-4ILM7W2R.js → chunk-DENB2XJC.js} +2 -2
- package/dist/{chunk-6232S532.js → chunk-DW7G4KG3.js} +3 -3
- package/dist/{chunk-3NCM4ZQB.js → chunk-F6AFPNDF.js} +15 -15
- package/dist/{chunk-PXOQIA5K.js → chunk-F6I6XZMN.js} +5 -5
- package/dist/{chunk-G6UMNAVI.js → chunk-FCGC42TS.js} +61 -57
- package/dist/{chunk-BHI6GVC4.js → chunk-G5A3PSPV.js} +691 -1080
- package/dist/{chunk-HZ7CBXPL.cjs → chunk-HPWWNJE7.cjs} +89 -89
- package/dist/{chunk-SW5ZV2BN.cjs → chunk-IHERL5V4.cjs} +34 -34
- package/dist/{chunk-UJ33ZXDT.cjs → chunk-IKTQ3ZAG.cjs} +6 -6
- package/dist/{chunk-SEKYEWQG.cjs → chunk-JEZKGCZI.cjs} +26 -26
- package/dist/{chunk-7SCNMP2B.cjs → chunk-KOWVJD4V.cjs} +56 -56
- package/dist/chunk-LMBC5FFP.js +43 -0
- package/dist/{chunk-F57ECE2I.js → chunk-MFFCUVWG.js} +1 -1
- package/dist/{chunk-KUC673HM.js → chunk-MKXO4Q5P.js} +142 -383
- package/dist/{chunk-6NTPY5QA.cjs → chunk-MMOODW57.cjs} +94 -1887
- package/dist/{chunk-CUME3VTQ.js → chunk-MP2C3LJ4.js} +1 -1
- package/dist/{chunk-VX4E6YSB.cjs → chunk-N3COXDBH.cjs} +5 -41
- package/dist/{chunk-FXJ3WWUB.js → chunk-NDESEPW5.js} +0 -68
- package/dist/chunk-O43V3EOS.js +252 -0
- package/dist/{chunk-PLYEKV3N.cjs → chunk-OHFS7VOU.cjs} +2 -2
- package/dist/{chunk-M75XEEGT.cjs → chunk-OUY3HHW6.cjs} +539 -928
- package/dist/{chunk-CZ7Y7UG4.js → chunk-PDWVPI3S.js} +72 -4
- package/dist/{chunk-TE773HEH.js → chunk-PN2RKPDF.js} +10 -10
- package/dist/{chunk-3EZ4HHAP.js → chunk-QFXRPRFT.js} +3 -3
- package/dist/chunk-QZVSJF2K.cjs +252 -0
- package/dist/chunk-RALRPFDW.cjs +43 -0
- package/dist/{chunk-YGJKKDDM.js → chunk-RBDP4WDE.js} +6 -6
- package/dist/{chunk-LM7TXMLU.cjs → chunk-RKV5B7EU.cjs} +4 -72
- package/dist/{chunk-UVTD52MD.cjs → chunk-TYWLNCNH.cjs} +82 -14
- package/dist/{chunk-IKJA3Y7Z.js → chunk-VA5T32XA.js} +2 -2
- package/dist/{chunk-GWQEYPYM.cjs → chunk-VESKITRQ.cjs} +732 -728
- package/dist/{chunk-RQRX4YC3.cjs → chunk-VHCACDKP.cjs} +39 -39
- package/dist/{chunk-4IBPRIQH.js → chunk-VR2ZLFCP.js} +1 -1
- package/dist/{chunk-RTIPR53L.cjs → chunk-WA6GUYQ4.cjs} +104 -104
- package/dist/{chunk-T5TMCHWM.js → chunk-X5MQ7JRP.js} +9 -9
- package/dist/{chunk-LLSUVPQC.cjs → chunk-X72J4ACL.cjs} +8 -252
- package/dist/{chunk-UDFRUKLC.cjs → chunk-XOYH2YQE.cjs} +2 -2
- package/dist/{chunk-LVSFKENJ.cjs → chunk-YFBM2K6X.cjs} +4 -4
- package/dist/{chunk-DWPAAWMR.js → chunk-YHM5AWTT.js} +6 -6
- package/dist/{chunk-NCPTID44.js → chunk-Z2VNQQ74.js} +942 -978
- package/dist/{chunk-STHZBOQI.cjs → chunk-ZSAGLQOD.cjs} +17 -17
- package/dist/{chunk-VZICIQW2.js → chunk-ZSAO2HBW.js} +15 -15
- package/dist/components/case-studies/index.cjs +32 -30
- package/dist/components/case-studies/index.js +16 -14
- package/dist/components/chat/entity-cards/case-study-card.d.ts +4 -11
- package/dist/components/chat/entity-cards/case-study-card.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +11 -9
- package/dist/components/chat/index.js +16 -14
- package/dist/components/chat/utils/icon-library.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +14 -12
- package/dist/components/contact/index.js +13 -11
- package/dist/components/docs/index.cjs +17 -15
- package/dist/components/docs/index.js +16 -14
- package/dist/components/embeds/index.cjs +14 -12
- package/dist/components/embeds/index.js +13 -11
- package/dist/components/faq/index.cjs +15 -13
- package/dist/components/faq/index.js +14 -12
- package/dist/components/features/index.cjs +14 -12
- package/dist/components/features/index.js +23 -21
- package/dist/components/footer-waitlist-button.d.ts +29 -0
- package/dist/components/footer-waitlist-button.d.ts.map +1 -0
- package/dist/components/footer.d.ts +47 -0
- package/dist/components/footer.d.ts.map +1 -0
- package/dist/components/help-center-pages/index.cjs +120 -118
- package/dist/components/help-center-pages/index.js +35 -33
- package/dist/components/icons/index.cjs +5 -3
- package/dist/components/icons/index.js +11 -9
- package/dist/components/icons-v2-generated/index.cjs +5 -3
- package/dist/components/icons-v2-generated/index.js +4 -2
- package/dist/components/index.cjs +159 -86
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +402 -329
- package/dist/components/loading/page-layout-skeleton.d.ts +1 -1
- package/dist/components/meeting-scheduler/index.cjs +64 -62
- package/dist/components/meeting-scheduler/index.js +14 -12
- package/dist/components/navigation/client-only-header.d.ts +8 -0
- package/dist/components/navigation/client-only-header.d.ts.map +1 -0
- package/dist/components/navigation/header-skeleton.d.ts +12 -0
- package/dist/components/navigation/header-skeleton.d.ts.map +1 -0
- package/dist/components/navigation/header.d.ts +9 -0
- package/dist/components/navigation/header.d.ts.map +1 -0
- package/dist/components/navigation/index.cjs +16 -28
- package/dist/components/navigation/index.d.ts +10 -14
- package/dist/components/navigation/index.d.ts.map +1 -1
- package/dist/components/navigation/index.js +26 -38
- package/dist/components/navigation/mingo-ai-button.d.ts +3 -38
- package/dist/components/navigation/mingo-ai-button.d.ts.map +1 -1
- package/dist/components/navigation/mobile-nav-panel.d.ts +10 -0
- package/dist/components/navigation/mobile-nav-panel.d.ts.map +1 -0
- package/dist/components/navigation/navigation-sidebar-item.d.ts +2 -1
- package/dist/components/navigation/navigation-sidebar-item.d.ts.map +1 -1
- package/dist/components/navigation/top-navigation.d.ts +2 -2
- package/dist/components/navigation/top-navigation.d.ts.map +1 -1
- package/dist/components/onboarding-guides/index.cjs +17 -15
- package/dist/components/onboarding-guides/index.js +16 -14
- package/dist/components/related-content/index.cjs +8 -10
- package/dist/components/related-content/index.js +7 -9
- package/dist/components/tickets/index.cjs +18 -16
- package/dist/components/tickets/index.js +17 -15
- package/dist/components/ui/index.cjs +14 -12
- package/dist/components/ui/index.js +19 -17
- package/dist/hooks/index.cjs +11 -19
- package/dist/hooks/index.d.ts +0 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +11 -19
- package/dist/hooks/ui/index.d.ts +0 -3
- package/dist/hooks/ui/index.d.ts.map +1 -1
- package/dist/index.cjs +22 -55
- package/dist/index.js +196 -229
- package/dist/types/case-study.d.ts +0 -9
- package/dist/types/case-study.d.ts.map +1 -1
- package/dist/types/navigation.d.ts +65 -95
- package/dist/types/navigation.d.ts.map +1 -1
- package/dist/utils/index.cjs +0 -55
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -50
- package/dist/utils/source-icons.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/chat/entity-cards/case-study-card.tsx +5 -115
- package/src/components/chat/utils/icon-library.tsx +1 -35
- package/src/components/footer-waitlist-button.tsx +53 -0
- package/src/components/footer.tsx +195 -0
- package/src/components/index.ts +2 -0
- package/src/components/loading/page-layout-skeleton.tsx +1 -1
- package/src/components/navigation/client-only-header.tsx +22 -0
- package/src/components/navigation/header-skeleton.tsx +74 -0
- package/src/components/navigation/header.tsx +429 -0
- package/src/components/navigation/index.ts +14 -21
- package/src/components/navigation/mingo-ai-button.tsx +63 -139
- package/src/components/navigation/mobile-nav-panel.tsx +155 -0
- package/src/components/navigation/navigation-sidebar-item.tsx +2 -1
- package/src/components/navigation/ticket-alerts-button.tsx +2 -2
- package/src/components/navigation/top-navigation.tsx +2 -2
- package/src/hooks/index.ts +0 -1
- package/src/hooks/ui/index.ts +0 -3
- package/src/styles/chat-animations.css +2 -57
- package/src/types/case-study.ts +0 -16
- package/src/types/navigation.ts +66 -80
- package/src/utils/index.ts +0 -1
- package/src/utils/source-icons.ts +0 -13
- package/dist/components/navigation/mobile-nav-sheet-id.d.ts +0 -3
- package/dist/components/navigation/mobile-nav-sheet-id.d.ts.map +0 -1
- package/dist/components/navigation/mobile-nav-sheet.d.ts +0 -48
- package/dist/components/navigation/mobile-nav-sheet.d.ts.map +0 -1
- package/dist/components/navigation/nav-item-row.d.ts +0 -27
- package/dist/components/navigation/nav-item-row.d.ts.map +0 -1
- package/dist/components/navigation/nav-panel.d.ts +0 -43
- package/dist/components/navigation/nav-panel.d.ts.map +0 -1
- package/dist/components/navigation/site-footer.d.ts +0 -28
- package/dist/components/navigation/site-footer.d.ts.map +0 -1
- package/dist/components/navigation/site-header.d.ts +0 -61
- package/dist/components/navigation/site-header.d.ts.map +0 -1
- package/dist/components/navigation/site-nav-link.d.ts +0 -26
- package/dist/components/navigation/site-nav-link.d.ts.map +0 -1
- package/dist/hooks/ui/use-active-section.d.ts +0 -10
- package/dist/hooks/ui/use-active-section.d.ts.map +0 -1
- package/dist/hooks/ui/use-nav-menus.d.ts +0 -48
- package/dist/hooks/ui/use-nav-menus.d.ts.map +0 -1
- package/dist/hooks/ui/use-visitor-os.d.ts +0 -15
- package/dist/hooks/ui/use-visitor-os.d.ts.map +0 -1
- package/dist/hooks/use-location-hash.d.ts +0 -9
- package/dist/hooks/use-location-hash.d.ts.map +0 -1
- package/dist/utils/visitor-os.d.ts +0 -45
- package/dist/utils/visitor-os.d.ts.map +0 -1
- package/src/components/navigation/mobile-nav-sheet-id.ts +0 -2
- package/src/components/navigation/mobile-nav-sheet.tsx +0 -241
- package/src/components/navigation/nav-item-row.tsx +0 -129
- package/src/components/navigation/nav-panel.tsx +0 -196
- package/src/components/navigation/site-footer.tsx +0 -256
- package/src/components/navigation/site-header.tsx +0 -339
- package/src/components/navigation/site-nav-link.tsx +0 -41
- package/src/hooks/ui/use-active-section.ts +0 -44
- package/src/hooks/ui/use-nav-menus.ts +0 -200
- package/src/hooks/ui/use-visitor-os.ts +0 -33
- package/src/hooks/use-location-hash.ts +0 -34
- package/src/utils/visitor-os.ts +0 -84
|
@@ -3,70 +3,29 @@ import {
|
|
|
3
3
|
next_image_default
|
|
4
4
|
} from "./chunk-FBZMAPWO.js";
|
|
5
5
|
import {
|
|
6
|
-
NEAR_VIEWPORT_ROOT_MARGIN,
|
|
7
6
|
ViewportBreakpoints,
|
|
8
7
|
getPlatformBrandClasses,
|
|
9
|
-
platformAccentVarName,
|
|
10
|
-
useAuthedAssetSrc,
|
|
11
8
|
useAuthedImageSrc,
|
|
12
9
|
useImageEdgeColor,
|
|
13
10
|
useIsTruncated,
|
|
14
|
-
useNearViewport,
|
|
15
11
|
useOgPlaceholderUrl
|
|
16
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-NDESEPW5.js";
|
|
17
13
|
import {
|
|
18
|
-
ClickUpIcon,
|
|
19
|
-
FacebookIcon,
|
|
20
14
|
FigmaIcon,
|
|
21
|
-
FlamingoLogo,
|
|
22
|
-
GitHubIcon,
|
|
23
|
-
HubspotIcon,
|
|
24
15
|
ImageIcon,
|
|
25
|
-
InstagramIcon,
|
|
26
|
-
LinkedInIcon,
|
|
27
16
|
MiamiCyberGangLogoFaceOnly,
|
|
28
|
-
MingoIcon,
|
|
29
|
-
MlgLogo,
|
|
30
17
|
OpenFrameLogo,
|
|
31
|
-
OpenmspLogo,
|
|
32
18
|
PlayFilledIcon,
|
|
33
|
-
SlackIcon,
|
|
34
19
|
ThumbsDownIcon,
|
|
35
20
|
ThumbsUpIcon,
|
|
36
|
-
VolumeOffFilledIcon
|
|
37
|
-
|
|
38
|
-
XLogo,
|
|
39
|
-
YouTubeIcon
|
|
40
|
-
} from "./chunk-N45D4ZXQ.js";
|
|
21
|
+
VolumeOffFilledIcon
|
|
22
|
+
} from "./chunk-O43V3EOS.js";
|
|
41
23
|
import {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
BriefcaseIcon,
|
|
45
|
-
BugIcon,
|
|
46
|
-
CalendarIcon,
|
|
47
|
-
ChatsIcon,
|
|
48
|
-
ClickupLogoGreyIcon,
|
|
49
|
-
CompassIcon,
|
|
50
|
-
FileIcon,
|
|
51
|
-
GithubIcon,
|
|
52
|
-
GraduationCapIcon,
|
|
53
|
-
HeadphoneIcon,
|
|
54
|
-
HubspotLogoGreyIcon,
|
|
55
|
-
LayersIcon,
|
|
56
|
-
NewspaperIcon,
|
|
57
|
-
Rocket02Icon,
|
|
58
|
-
SlackLogoGreyIcon,
|
|
59
|
-
TicketIcon,
|
|
60
|
-
VideoRecorderIcon,
|
|
61
|
-
XmarkCircleIcon,
|
|
62
|
-
icons_v2_generated_exports
|
|
63
|
-
} from "./chunk-NCPTID44.js";
|
|
24
|
+
XmarkCircleIcon
|
|
25
|
+
} from "./chunk-LMBC5FFP.js";
|
|
64
26
|
import {
|
|
65
27
|
useChatRuntime
|
|
66
28
|
} from "./chunk-E4ABZWTJ.js";
|
|
67
|
-
import {
|
|
68
|
-
SearchIcon
|
|
69
|
-
} from "./chunk-INS7KZJB.js";
|
|
70
29
|
import {
|
|
71
30
|
Button
|
|
72
31
|
} from "./chunk-YDPKUAP4.js";
|
|
@@ -1211,90 +1170,6 @@ function ImageGalleryModal({ images, isOpen, onClose, initialIndex = 0 }) {
|
|
|
1211
1170
|
] }) });
|
|
1212
1171
|
}
|
|
1213
1172
|
|
|
1214
|
-
// src/utils/fetch-priority.ts
|
|
1215
|
-
import React2 from "react";
|
|
1216
|
-
var REACT_MAJOR = parseInt((React2.version || "0").split(".")[0], 10);
|
|
1217
|
-
var USE_CAMEL_CASE_FETCH_PRIORITY = REACT_MAJOR >= 19;
|
|
1218
|
-
function fetchPriorityProp(priority) {
|
|
1219
|
-
const value = priority === void 0 ? "auto" : typeof priority === "boolean" ? priority ? "high" : "low" : priority;
|
|
1220
|
-
return USE_CAMEL_CASE_FETCH_PRIORITY ? { fetchPriority: value } : { fetchpriority: value };
|
|
1221
|
-
}
|
|
1222
|
-
|
|
1223
|
-
// src/components/features/mux-origins.ts
|
|
1224
|
-
var MUX_STREAM_ORIGIN = "https://stream.mux.com";
|
|
1225
|
-
var MUX_IMAGE_ORIGIN = "https://image.mux.com";
|
|
1226
|
-
function toMuxPreviewUrl(url, maxResolution = "720p") {
|
|
1227
|
-
let parsed;
|
|
1228
|
-
try {
|
|
1229
|
-
parsed = new URL(url);
|
|
1230
|
-
} catch {
|
|
1231
|
-
return url;
|
|
1232
|
-
}
|
|
1233
|
-
if (parsed.origin !== MUX_STREAM_ORIGIN) return url;
|
|
1234
|
-
if (!parsed.pathname.endsWith(".m3u8")) return url;
|
|
1235
|
-
if (parsed.searchParams.has("token")) return url;
|
|
1236
|
-
parsed.searchParams.set("max_resolution", maxResolution);
|
|
1237
|
-
return parsed.toString();
|
|
1238
|
-
}
|
|
1239
|
-
|
|
1240
|
-
// src/components/features/use-video-warmup.ts
|
|
1241
|
-
import { useEffect as useEffect3 } from "react";
|
|
1242
|
-
import ReactDOM from "react-dom";
|
|
1243
|
-
function saveDataEnabled() {
|
|
1244
|
-
if (typeof navigator === "undefined") return false;
|
|
1245
|
-
const conn = navigator.connection;
|
|
1246
|
-
return conn?.saveData === true;
|
|
1247
|
-
}
|
|
1248
|
-
function useVideoOriginPreconnect({ supabaseStorageOrigin } = {}) {
|
|
1249
|
-
const runtime = useChatRuntime();
|
|
1250
|
-
const resolvedOrigin = supabaseStorageOrigin ?? runtime?.endpoints.supabaseStorageOrigin;
|
|
1251
|
-
try {
|
|
1252
|
-
ReactDOM.preconnect(MUX_STREAM_ORIGIN, { crossOrigin: "anonymous" });
|
|
1253
|
-
ReactDOM.preconnect(MUX_IMAGE_ORIGIN, { crossOrigin: "anonymous" });
|
|
1254
|
-
if (resolvedOrigin) {
|
|
1255
|
-
ReactDOM.preconnect(resolvedOrigin, { crossOrigin: "anonymous" });
|
|
1256
|
-
}
|
|
1257
|
-
} catch (err) {
|
|
1258
|
-
if (process.env.NODE_ENV !== "production") {
|
|
1259
|
-
console.warn("[useVideoOriginPreconnect] preconnect failed:", err);
|
|
1260
|
-
}
|
|
1261
|
-
}
|
|
1262
|
-
}
|
|
1263
|
-
function useVideoWarmup({
|
|
1264
|
-
videoUrl,
|
|
1265
|
-
supabaseStorageOrigin,
|
|
1266
|
-
nearMargin = "1000px"
|
|
1267
|
-
} = {}) {
|
|
1268
|
-
const runtime = useChatRuntime();
|
|
1269
|
-
const resolvedOrigin = supabaseStorageOrigin ?? runtime?.endpoints.supabaseStorageOrigin;
|
|
1270
|
-
useVideoOriginPreconnect({ supabaseStorageOrigin: resolvedOrigin });
|
|
1271
|
-
const { ref, isNear } = useNearViewport(nearMargin);
|
|
1272
|
-
useEffect3(() => {
|
|
1273
|
-
if (!isNear || !videoUrl || !resolvedOrigin) return void 0;
|
|
1274
|
-
if (saveDataEnabled()) return void 0;
|
|
1275
|
-
let videoOrigin;
|
|
1276
|
-
try {
|
|
1277
|
-
videoOrigin = new URL(videoUrl, "http://placeholder.local").origin;
|
|
1278
|
-
} catch {
|
|
1279
|
-
return void 0;
|
|
1280
|
-
}
|
|
1281
|
-
if (videoOrigin !== resolvedOrigin) return void 0;
|
|
1282
|
-
const link = document.createElement("link");
|
|
1283
|
-
link.rel = "preload";
|
|
1284
|
-
link.as = "video";
|
|
1285
|
-
link.href = videoUrl;
|
|
1286
|
-
link.crossOrigin = "anonymous";
|
|
1287
|
-
if ("fetchPriority" in link) {
|
|
1288
|
-
link.fetchPriority = "low";
|
|
1289
|
-
}
|
|
1290
|
-
document.head.appendChild(link);
|
|
1291
|
-
return () => {
|
|
1292
|
-
link.remove();
|
|
1293
|
-
};
|
|
1294
|
-
}, [isNear, videoUrl, resolvedOrigin]);
|
|
1295
|
-
return { ref, isNear };
|
|
1296
|
-
}
|
|
1297
|
-
|
|
1298
1173
|
// src/components/features/video-center-badge.tsx
|
|
1299
1174
|
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
1300
1175
|
var SIZES = {
|
|
@@ -1351,926 +1226,9 @@ function VideoUnmuteGlyph({ size: size2 = "md", className }) {
|
|
|
1351
1226
|
);
|
|
1352
1227
|
}
|
|
1353
1228
|
|
|
1354
|
-
// src/components/features/video.tsx
|
|
1355
|
-
import MuxPlayer from "@mux/mux-player-react";
|
|
1356
|
-
import { useCallback as useCallback2, useEffect as useEffect5, useImperativeHandle, useMemo as useMemo2, useRef as useRef2, useState as useState3 } from "react";
|
|
1357
|
-
|
|
1358
|
-
// src/components/features/use-ios-native-video-fullscreen.ts
|
|
1359
|
-
import { useEffect as useEffect4 } from "react";
|
|
1360
|
-
var ENTER_FULLSCREEN_REQUEST = "mediaenterfullscreenrequest";
|
|
1361
|
-
function isIosAppShell() {
|
|
1362
|
-
const capacitor = globalThis.Capacitor;
|
|
1363
|
-
return capacitor?.isNativePlatform?.() === true && capacitor.getPlatform?.() === "ios";
|
|
1364
|
-
}
|
|
1365
|
-
function nativeVideoElement(player) {
|
|
1366
|
-
const media = player.media;
|
|
1367
|
-
const element = media?.nativeEl ?? media;
|
|
1368
|
-
return element instanceof HTMLVideoElement ? element : null;
|
|
1369
|
-
}
|
|
1370
|
-
function useIosNativeVideoFullscreen(playerRef) {
|
|
1371
|
-
useEffect4(() => {
|
|
1372
|
-
if (!isIosAppShell()) return void 0;
|
|
1373
|
-
const player = playerRef.current;
|
|
1374
|
-
if (!(player instanceof EventTarget)) return void 0;
|
|
1375
|
-
const takeOver = (event) => {
|
|
1376
|
-
const video = nativeVideoElement(player);
|
|
1377
|
-
if (!video?.webkitSupportsFullscreen || typeof video.webkitEnterFullscreen !== "function") return;
|
|
1378
|
-
event.stopImmediatePropagation();
|
|
1379
|
-
video.webkitEnterFullscreen();
|
|
1380
|
-
};
|
|
1381
|
-
player.addEventListener(ENTER_FULLSCREEN_REQUEST, takeOver, true);
|
|
1382
|
-
return () => player.removeEventListener(ENTER_FULLSCREEN_REQUEST, takeOver, true);
|
|
1383
|
-
}, [playerRef]);
|
|
1384
|
-
}
|
|
1385
|
-
|
|
1386
|
-
// src/components/features/video.tsx
|
|
1387
|
-
import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
1388
|
-
function videoPerfDebugEnabled() {
|
|
1389
|
-
if (process.env.NODE_ENV !== "production") return true;
|
|
1390
|
-
try {
|
|
1391
|
-
return typeof localStorage !== "undefined" && localStorage.getItem("VIDEO_PERF_DEBUG") !== null;
|
|
1392
|
-
} catch {
|
|
1393
|
-
return false;
|
|
1394
|
-
}
|
|
1395
|
-
}
|
|
1396
|
-
var MUX_VIEWER_ID_KEY = "mux:viewer_id";
|
|
1397
|
-
function muxViewerId() {
|
|
1398
|
-
try {
|
|
1399
|
-
if (typeof localStorage === "undefined") return void 0;
|
|
1400
|
-
const existing = localStorage.getItem(MUX_VIEWER_ID_KEY);
|
|
1401
|
-
if (existing) return existing;
|
|
1402
|
-
const generated = typeof crypto !== "undefined" && typeof crypto.randomUUID === "function" ? crypto.randomUUID() : `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
|
|
1403
|
-
localStorage.setItem(MUX_VIEWER_ID_KEY, generated);
|
|
1404
|
-
return generated;
|
|
1405
|
-
} catch {
|
|
1406
|
-
return void 0;
|
|
1407
|
-
}
|
|
1408
|
-
}
|
|
1409
|
-
if (typeof document !== "undefined") {
|
|
1410
|
-
try {
|
|
1411
|
-
document.cookie = "muxData=; path=/; max-age=0";
|
|
1412
|
-
} catch {
|
|
1413
|
-
}
|
|
1414
|
-
}
|
|
1415
|
-
if (typeof window !== "undefined") {
|
|
1416
|
-
const w = window;
|
|
1417
|
-
if (!w.chrome?.cast) {
|
|
1418
|
-
w.chrome = { ...w.chrome ?? {}, cast: { isAvailable: false } };
|
|
1419
|
-
}
|
|
1420
|
-
}
|
|
1421
|
-
if (typeof window !== "undefined" && typeof console !== "undefined") {
|
|
1422
|
-
const w = window;
|
|
1423
|
-
if (!w.__MEDIA_CHROME_WARN_PATCHED__) {
|
|
1424
|
-
w.__MEDIA_CHROME_WARN_PATCHED__ = true;
|
|
1425
|
-
const MEDIA_CHROME_NO_STYLESHEET_PREFIX = "Media Chrome: No style sheet found on style tag of";
|
|
1426
|
-
const originalWarn = console.warn.bind(console);
|
|
1427
|
-
console.warn = (...args) => {
|
|
1428
|
-
if (typeof args[0] === "string" && args[0].startsWith(MEDIA_CHROME_NO_STYLESHEET_PREFIX)) {
|
|
1429
|
-
return;
|
|
1430
|
-
}
|
|
1431
|
-
originalWarn(...args);
|
|
1432
|
-
};
|
|
1433
|
-
}
|
|
1434
|
-
}
|
|
1435
|
-
var userHasInteracted = false;
|
|
1436
|
-
var activationWaiters = /* @__PURE__ */ new Set();
|
|
1437
|
-
if (typeof window !== "undefined") {
|
|
1438
|
-
const w = window;
|
|
1439
|
-
if (!w.__VIDEO_ACTIVATION_TRACKED__) {
|
|
1440
|
-
w.__VIDEO_ACTIVATION_TRACKED__ = true;
|
|
1441
|
-
const markActivated = () => {
|
|
1442
|
-
userHasInteracted = true;
|
|
1443
|
-
activationWaiters.forEach((fn) => {
|
|
1444
|
-
try {
|
|
1445
|
-
fn();
|
|
1446
|
-
} catch {
|
|
1447
|
-
}
|
|
1448
|
-
});
|
|
1449
|
-
activationWaiters.clear();
|
|
1450
|
-
window.removeEventListener("pointerdown", markActivated, true);
|
|
1451
|
-
window.removeEventListener("keydown", markActivated, true);
|
|
1452
|
-
};
|
|
1453
|
-
window.addEventListener("pointerdown", markActivated, true);
|
|
1454
|
-
window.addEventListener("keydown", markActivated, true);
|
|
1455
|
-
}
|
|
1456
|
-
}
|
|
1457
|
-
var YT_HOSTS = /* @__PURE__ */ new Set([
|
|
1458
|
-
"youtube.com",
|
|
1459
|
-
"www.youtube.com",
|
|
1460
|
-
"m.youtube.com",
|
|
1461
|
-
"youtu.be",
|
|
1462
|
-
"youtube-nocookie.com",
|
|
1463
|
-
"www.youtube-nocookie.com"
|
|
1464
|
-
]);
|
|
1465
|
-
function isYouTubeUrl(url) {
|
|
1466
|
-
try {
|
|
1467
|
-
return YT_HOSTS.has(new URL(url, "http://placeholder.local").hostname.toLowerCase());
|
|
1468
|
-
} catch {
|
|
1469
|
-
return false;
|
|
1470
|
-
}
|
|
1471
|
-
}
|
|
1472
|
-
var YT_PATH_RE = /^\/(?:embed|v|shorts)\/([^/]+)\/?$/;
|
|
1473
|
-
var BARE_YT_ID_RE = /^[A-Za-z0-9_-]{11}$/;
|
|
1474
|
-
function extractYouTubeId(url) {
|
|
1475
|
-
if (!url) return null;
|
|
1476
|
-
if (BARE_YT_ID_RE.test(url)) return url;
|
|
1477
|
-
let u;
|
|
1478
|
-
try {
|
|
1479
|
-
u = new URL(url, "http://placeholder.local");
|
|
1480
|
-
} catch {
|
|
1481
|
-
return null;
|
|
1482
|
-
}
|
|
1483
|
-
if (!YT_HOSTS.has(u.hostname.toLowerCase())) return null;
|
|
1484
|
-
if (u.hostname.toLowerCase().endsWith("youtu.be")) {
|
|
1485
|
-
return u.pathname.split("/").filter(Boolean)[0] ?? null;
|
|
1486
|
-
}
|
|
1487
|
-
const v = u.searchParams.get("v");
|
|
1488
|
-
if (v) return v;
|
|
1489
|
-
const m = u.pathname.match(YT_PATH_RE);
|
|
1490
|
-
return m ? m[1] : null;
|
|
1491
|
-
}
|
|
1492
|
-
var VIDEO_PLAYBACK_FAILED_EVENT = "flamingo:video-playback-failed";
|
|
1493
|
-
function reportPlaybackFailure(detail) {
|
|
1494
|
-
if (typeof window === "undefined") return;
|
|
1495
|
-
try {
|
|
1496
|
-
window.dispatchEvent(new CustomEvent(VIDEO_PLAYBACK_FAILED_EVENT, { detail }));
|
|
1497
|
-
} catch {
|
|
1498
|
-
}
|
|
1499
|
-
}
|
|
1500
|
-
var VIDEO_STALL_TIMEOUT_MS = 15e3;
|
|
1501
|
-
function VideoErrorOverlay({
|
|
1502
|
-
onRetry,
|
|
1503
|
-
watchOnYouTubeId
|
|
1504
|
-
}) {
|
|
1505
|
-
return /* @__PURE__ */ jsxs7("div", { className: "absolute inset-0 z-10 flex flex-col items-center justify-center gap-[var(--spacing-system-sf)] bg-ods-overlay p-[var(--spacing-system-lf)] text-center", children: [
|
|
1506
|
-
/* @__PURE__ */ jsx9("p", { className: "text-ods-text-secondary text-h6", children: "This video failed to play." }),
|
|
1507
|
-
/* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-[var(--spacing-system-sf)]", children: [
|
|
1508
|
-
/* @__PURE__ */ jsx9(Button, { variant: "outline", size: "small", onClick: onRetry, children: "Try again" }),
|
|
1509
|
-
watchOnYouTubeId ? /* @__PURE__ */ jsx9(
|
|
1510
|
-
Button,
|
|
1511
|
-
{
|
|
1512
|
-
variant: "transparent",
|
|
1513
|
-
size: "small",
|
|
1514
|
-
href: `https://www.youtube.com/watch?v=${watchOnYouTubeId}`,
|
|
1515
|
-
openInNewTab: true,
|
|
1516
|
-
children: "Watch on YouTube"
|
|
1517
|
-
}
|
|
1518
|
-
) : null
|
|
1519
|
-
] })
|
|
1520
|
-
] });
|
|
1521
|
-
}
|
|
1522
|
-
var VIDEO_FILE_PLAYBACK_KEYS = [
|
|
1523
|
-
"srtContent",
|
|
1524
|
-
"captionsUrl",
|
|
1525
|
-
"autoPlay",
|
|
1526
|
-
"loop",
|
|
1527
|
-
"chromeless",
|
|
1528
|
-
"playOnHover",
|
|
1529
|
-
"playWhenHovered",
|
|
1530
|
-
"preload",
|
|
1531
|
-
"fit",
|
|
1532
|
-
"startTime",
|
|
1533
|
-
"playerHandleRef",
|
|
1534
|
-
"autoPlayUnmuted",
|
|
1535
|
-
"startMuted",
|
|
1536
|
-
"mutedIntent",
|
|
1537
|
-
"hideMutedBadge",
|
|
1538
|
-
"onMutedFallbackChange",
|
|
1539
|
-
"onEnded"
|
|
1540
|
-
];
|
|
1541
|
-
function pickForwardedKeys(props, keys) {
|
|
1542
|
-
const out = {};
|
|
1543
|
-
for (const k of keys) {
|
|
1544
|
-
if (k in props) out[k] = props[k];
|
|
1545
|
-
}
|
|
1546
|
-
return out;
|
|
1547
|
-
}
|
|
1548
|
-
var pickFilePlayback = (props) => pickForwardedKeys(props, VIDEO_FILE_PLAYBACK_KEYS);
|
|
1549
|
-
var VIDEO_YOUTUBE_FACADE_KEYS = [
|
|
1550
|
-
"autoActivate",
|
|
1551
|
-
"suspended"
|
|
1552
|
-
];
|
|
1553
|
-
var pickYouTube = (props) => pickForwardedKeys(props, VIDEO_YOUTUBE_FACADE_KEYS);
|
|
1554
|
-
function Video(props) {
|
|
1555
|
-
const { ref: nearRef, isNear } = useNearViewport();
|
|
1556
|
-
const url = props.url;
|
|
1557
|
-
if (!url) return null;
|
|
1558
|
-
const effectiveKind = resolveKind(props, url);
|
|
1559
|
-
const layout = props.layout ?? "native";
|
|
1560
|
-
if (props.lazy && !isNear) {
|
|
1561
|
-
return wrapWithLayout(
|
|
1562
|
-
/* @__PURE__ */ jsx9(
|
|
1563
|
-
"div",
|
|
1564
|
-
{
|
|
1565
|
-
ref: nearRef,
|
|
1566
|
-
className: props.className,
|
|
1567
|
-
style: props.poster ? { backgroundImage: `url(${props.poster})`, backgroundSize: "cover", backgroundPosition: "center" } : void 0,
|
|
1568
|
-
"aria-hidden": "true"
|
|
1569
|
-
}
|
|
1570
|
-
),
|
|
1571
|
-
layout
|
|
1572
|
-
);
|
|
1573
|
-
}
|
|
1574
|
-
const inner = effectiveKind === "youtube" ? /* @__PURE__ */ jsx9(
|
|
1575
|
-
YouTubeFacade,
|
|
1576
|
-
{
|
|
1577
|
-
url,
|
|
1578
|
-
title: props.title,
|
|
1579
|
-
priority: props.priority,
|
|
1580
|
-
className: props.className,
|
|
1581
|
-
minimalControls: props.minimalControls,
|
|
1582
|
-
muted: props.muted,
|
|
1583
|
-
...pickYouTube(props)
|
|
1584
|
-
}
|
|
1585
|
-
) : "firstFrameOnly" in props && props.firstFrameOnly ? /* @__PURE__ */ jsx9(
|
|
1586
|
-
FirstFramePreview,
|
|
1587
|
-
{
|
|
1588
|
-
url,
|
|
1589
|
-
poster: props.poster,
|
|
1590
|
-
fit: "fit" in props ? props.fit : void 0,
|
|
1591
|
-
className: props.className
|
|
1592
|
-
}
|
|
1593
|
-
) : /* @__PURE__ */ jsx9(
|
|
1594
|
-
FilePlayer,
|
|
1595
|
-
{
|
|
1596
|
-
url,
|
|
1597
|
-
poster: props.poster,
|
|
1598
|
-
muted: props.muted,
|
|
1599
|
-
...pickFilePlayback(props),
|
|
1600
|
-
className: props.className
|
|
1601
|
-
}
|
|
1602
|
-
);
|
|
1603
|
-
return wrapWithLayout(inner, layout);
|
|
1604
|
-
}
|
|
1605
|
-
function resolveKind(props, url) {
|
|
1606
|
-
if ("kind" in props) {
|
|
1607
|
-
if (props.kind === "youtube") return "youtube";
|
|
1608
|
-
if (props.kind === "file") return "file";
|
|
1609
|
-
}
|
|
1610
|
-
if (BARE_YT_ID_RE.test(url)) return "youtube";
|
|
1611
|
-
return isYouTubeUrl(url) ? "youtube" : "file";
|
|
1612
|
-
}
|
|
1613
|
-
function wrapWithLayout(inner, layout) {
|
|
1614
|
-
switch (layout) {
|
|
1615
|
-
case "centered":
|
|
1616
|
-
return /* @__PURE__ */ jsx9("div", { className: "flex w-full justify-center", children: /* @__PURE__ */ jsx9("div", { className: "aspect-video w-full max-w-3xl overflow-hidden rounded-lg border border-ods-border", children: inner }) });
|
|
1617
|
-
case "fill":
|
|
1618
|
-
return /* @__PURE__ */ jsx9("div", { className: "absolute inset-0 h-full w-full", children: inner });
|
|
1619
|
-
case "wide":
|
|
1620
|
-
return /* @__PURE__ */ jsx9("div", { className: "aspect-video w-full overflow-hidden rounded-lg bg-ods-bg", children: inner });
|
|
1621
|
-
case "native":
|
|
1622
|
-
default:
|
|
1623
|
-
return inner;
|
|
1624
|
-
}
|
|
1625
|
-
}
|
|
1626
|
-
function FirstFramePreview({
|
|
1627
|
-
url,
|
|
1628
|
-
poster,
|
|
1629
|
-
fit,
|
|
1630
|
-
className
|
|
1631
|
-
}) {
|
|
1632
|
-
return /* @__PURE__ */ jsx9(
|
|
1633
|
-
"div",
|
|
1634
|
-
{
|
|
1635
|
-
"aria-hidden": true,
|
|
1636
|
-
className: "h-full w-full",
|
|
1637
|
-
style: { "--media-background-color": "transparent" },
|
|
1638
|
-
children: /* @__PURE__ */ jsx9(FilePlayer, { url: `${url}#t=0.1`, poster, fit, muted: true, chromeless: true, className })
|
|
1639
|
-
}
|
|
1640
|
-
);
|
|
1641
|
-
}
|
|
1642
|
-
function FilePlayer({
|
|
1643
|
-
url,
|
|
1644
|
-
poster,
|
|
1645
|
-
muted,
|
|
1646
|
-
srtContent,
|
|
1647
|
-
captionsUrl,
|
|
1648
|
-
autoPlay,
|
|
1649
|
-
loop,
|
|
1650
|
-
chromeless,
|
|
1651
|
-
playOnHover,
|
|
1652
|
-
playWhenHovered,
|
|
1653
|
-
preload,
|
|
1654
|
-
fit,
|
|
1655
|
-
startTime,
|
|
1656
|
-
playerHandleRef,
|
|
1657
|
-
autoPlayUnmuted,
|
|
1658
|
-
startMuted,
|
|
1659
|
-
mutedIntent = false,
|
|
1660
|
-
hideMutedBadge,
|
|
1661
|
-
onMutedFallbackChange,
|
|
1662
|
-
onEnded,
|
|
1663
|
-
className
|
|
1664
|
-
}) {
|
|
1665
|
-
const effectivePreload = preload ?? (saveDataEnabled() ? "none" : "metadata");
|
|
1666
|
-
const resolvedCaptionsUrl = useAuthedAssetSrc(captionsUrl, "text/vtt, */*");
|
|
1667
|
-
const [hoverMutedFallback, setHoverMutedFallback] = useState3(() => Boolean(startMuted));
|
|
1668
|
-
const hoverPlayerRef = useRef2(null);
|
|
1669
|
-
const [mutedFallbackBlocked, setMutedFallbackBlocked] = useState3(false);
|
|
1670
|
-
const perfListenerRef = useRef2(null);
|
|
1671
|
-
const clearPerfListener = useCallback2(() => {
|
|
1672
|
-
if (perfListenerRef.current) {
|
|
1673
|
-
try {
|
|
1674
|
-
hoverPlayerRef.current?.removeEventListener?.("playing", perfListenerRef.current);
|
|
1675
|
-
} catch {
|
|
1676
|
-
}
|
|
1677
|
-
perfListenerRef.current = null;
|
|
1678
|
-
}
|
|
1679
|
-
}, []);
|
|
1680
|
-
useEffect5(() => clearPerfListener, [clearPerfListener]);
|
|
1681
|
-
const hoverActiveRef = useRef2(false);
|
|
1682
|
-
const hoverGenerationRef = useRef2(0);
|
|
1683
|
-
const activationWaiterRef = useRef2(null);
|
|
1684
|
-
const clearActivationWaiter = useCallback2(() => {
|
|
1685
|
-
if (activationWaiterRef.current) {
|
|
1686
|
-
activationWaiters.delete(activationWaiterRef.current);
|
|
1687
|
-
activationWaiterRef.current = null;
|
|
1688
|
-
}
|
|
1689
|
-
}, []);
|
|
1690
|
-
useEffect5(() => clearActivationWaiter, [clearActivationWaiter]);
|
|
1691
|
-
const mutedIntentRef = useRef2(mutedIntent);
|
|
1692
|
-
useEffect5(() => {
|
|
1693
|
-
mutedIntentRef.current = mutedIntent;
|
|
1694
|
-
});
|
|
1695
|
-
const startHoverPlayback = useCallback2(() => {
|
|
1696
|
-
hoverActiveRef.current = true;
|
|
1697
|
-
const generation = ++hoverGenerationRef.current;
|
|
1698
|
-
const el = hoverPlayerRef.current;
|
|
1699
|
-
if (!el) return;
|
|
1700
|
-
if (videoPerfDebugEnabled()) {
|
|
1701
|
-
clearPerfListener();
|
|
1702
|
-
const startedAt = performance.now();
|
|
1703
|
-
const onPlaying = () => {
|
|
1704
|
-
clearPerfListener();
|
|
1705
|
-
console.debug("[Video] hover\u2192playing %dms", Math.round(performance.now() - startedAt));
|
|
1706
|
-
};
|
|
1707
|
-
perfListenerRef.current = onPlaying;
|
|
1708
|
-
try {
|
|
1709
|
-
el.addEventListener?.("playing", onPlaying);
|
|
1710
|
-
} catch {
|
|
1711
|
-
}
|
|
1712
|
-
}
|
|
1713
|
-
try {
|
|
1714
|
-
el.volume = 0.5;
|
|
1715
|
-
if (userHasInteracted) {
|
|
1716
|
-
el.muted = mutedIntentRef.current;
|
|
1717
|
-
el.play?.()?.catch?.((err) => {
|
|
1718
|
-
const name = err?.name;
|
|
1719
|
-
if (name === "NotAllowedError" && hoverActiveRef.current && generation === hoverGenerationRef.current) {
|
|
1720
|
-
try {
|
|
1721
|
-
el.muted = true;
|
|
1722
|
-
el.play?.()?.catch?.(() => {
|
|
1723
|
-
if (hoverActiveRef.current && generation === hoverGenerationRef.current) {
|
|
1724
|
-
setMutedFallbackBlocked(true);
|
|
1725
|
-
}
|
|
1726
|
-
});
|
|
1727
|
-
setHoverMutedFallback(true);
|
|
1728
|
-
} catch {
|
|
1729
|
-
}
|
|
1730
|
-
}
|
|
1731
|
-
});
|
|
1732
|
-
} else {
|
|
1733
|
-
el.muted = true;
|
|
1734
|
-
el.play?.()?.catch?.(() => {
|
|
1735
|
-
if (hoverActiveRef.current && generation === hoverGenerationRef.current) {
|
|
1736
|
-
setMutedFallbackBlocked(true);
|
|
1737
|
-
}
|
|
1738
|
-
});
|
|
1739
|
-
setHoverMutedFallback(true);
|
|
1740
|
-
clearActivationWaiter();
|
|
1741
|
-
const waiter = () => {
|
|
1742
|
-
activationWaiterRef.current = null;
|
|
1743
|
-
if (hoverActiveRef.current && generation === hoverGenerationRef.current) {
|
|
1744
|
-
try {
|
|
1745
|
-
el.muted = false;
|
|
1746
|
-
el.volume = 0.5;
|
|
1747
|
-
} catch {
|
|
1748
|
-
}
|
|
1749
|
-
setHoverMutedFallback(false);
|
|
1750
|
-
}
|
|
1751
|
-
};
|
|
1752
|
-
activationWaiterRef.current = waiter;
|
|
1753
|
-
activationWaiters.add(waiter);
|
|
1754
|
-
}
|
|
1755
|
-
} catch {
|
|
1756
|
-
}
|
|
1757
|
-
}, [clearActivationWaiter, clearPerfListener]);
|
|
1758
|
-
const stopHoverPlayback = useCallback2(() => {
|
|
1759
|
-
hoverActiveRef.current = false;
|
|
1760
|
-
setHoverMutedFallback(false);
|
|
1761
|
-
clearActivationWaiter();
|
|
1762
|
-
clearPerfListener();
|
|
1763
|
-
try {
|
|
1764
|
-
hoverPlayerRef.current?.pause?.();
|
|
1765
|
-
} catch {
|
|
1766
|
-
}
|
|
1767
|
-
}, [clearActivationWaiter, clearPerfListener]);
|
|
1768
|
-
const unmuteNow = useCallback2((e) => {
|
|
1769
|
-
e.stopPropagation();
|
|
1770
|
-
e.preventDefault();
|
|
1771
|
-
const el = hoverPlayerRef.current;
|
|
1772
|
-
try {
|
|
1773
|
-
if (el) {
|
|
1774
|
-
el.muted = false;
|
|
1775
|
-
el.volume = 0.5;
|
|
1776
|
-
el.play?.()?.catch?.(() => {
|
|
1777
|
-
});
|
|
1778
|
-
}
|
|
1779
|
-
} catch {
|
|
1780
|
-
}
|
|
1781
|
-
setHoverMutedFallback(false);
|
|
1782
|
-
}, []);
|
|
1783
|
-
const hoverControlled = typeof playWhenHovered === "boolean";
|
|
1784
|
-
useEffect5(() => {
|
|
1785
|
-
if (!hoverControlled) return;
|
|
1786
|
-
if (playWhenHovered) startHoverPlayback();
|
|
1787
|
-
else stopHoverPlayback();
|
|
1788
|
-
}, [hoverControlled, playWhenHovered, startHoverPlayback, stopHoverPlayback]);
|
|
1789
|
-
const handleHoverEnter = playOnHover && !hoverControlled ? startHoverPlayback : void 0;
|
|
1790
|
-
const handleHoverLeave = playOnHover && !hoverControlled ? stopHoverPlayback : void 0;
|
|
1791
|
-
const onMutedFallbackChangeRef = useRef2(onMutedFallbackChange);
|
|
1792
|
-
useEffect5(() => {
|
|
1793
|
-
onMutedFallbackChangeRef.current = onMutedFallbackChange;
|
|
1794
|
-
});
|
|
1795
|
-
useEffect5(() => {
|
|
1796
|
-
onMutedFallbackChangeRef.current?.({
|
|
1797
|
-
muted: hoverMutedFallback,
|
|
1798
|
-
blocked: hoverMutedFallback && mutedFallbackBlocked
|
|
1799
|
-
});
|
|
1800
|
-
}, [hoverMutedFallback, mutedFallbackBlocked]);
|
|
1801
|
-
const autoPlayKickedRef = useRef2(false);
|
|
1802
|
-
useEffect5(() => {
|
|
1803
|
-
if (autoPlayKickedRef.current) return;
|
|
1804
|
-
if (startMuted) {
|
|
1805
|
-
const mutedEl = hoverPlayerRef.current;
|
|
1806
|
-
if (!mutedEl) return;
|
|
1807
|
-
autoPlayKickedRef.current = true;
|
|
1808
|
-
try {
|
|
1809
|
-
mutedEl.muted = true;
|
|
1810
|
-
} catch {
|
|
1811
|
-
}
|
|
1812
|
-
if (autoPlay) {
|
|
1813
|
-
const reportBlocked = () => setMutedFallbackBlocked(true);
|
|
1814
|
-
try {
|
|
1815
|
-
mutedEl.play?.()?.catch?.(reportBlocked);
|
|
1816
|
-
} catch {
|
|
1817
|
-
reportBlocked();
|
|
1818
|
-
}
|
|
1819
|
-
}
|
|
1820
|
-
return;
|
|
1821
|
-
}
|
|
1822
|
-
if (!autoPlayUnmuted) return;
|
|
1823
|
-
const el = hoverPlayerRef.current;
|
|
1824
|
-
if (!el) return;
|
|
1825
|
-
autoPlayKickedRef.current = true;
|
|
1826
|
-
try {
|
|
1827
|
-
el.muted = false;
|
|
1828
|
-
el.volume = typeof el.volume === "number" ? el.volume : 1;
|
|
1829
|
-
el.play?.()?.catch?.((err) => {
|
|
1830
|
-
const name = err?.name;
|
|
1831
|
-
if (name !== "NotAllowedError") return;
|
|
1832
|
-
try {
|
|
1833
|
-
el.muted = true;
|
|
1834
|
-
el.play?.()?.catch?.(() => {
|
|
1835
|
-
setMutedFallbackBlocked(true);
|
|
1836
|
-
setHoverMutedFallback(true);
|
|
1837
|
-
});
|
|
1838
|
-
setMutedFallbackBlocked(false);
|
|
1839
|
-
setHoverMutedFallback(true);
|
|
1840
|
-
} catch {
|
|
1841
|
-
setMutedFallbackBlocked(true);
|
|
1842
|
-
setHoverMutedFallback(true);
|
|
1843
|
-
}
|
|
1844
|
-
});
|
|
1845
|
-
} catch {
|
|
1846
|
-
}
|
|
1847
|
-
}, [autoPlayUnmuted, startMuted, autoPlay]);
|
|
1848
|
-
useEffect5(() => {
|
|
1849
|
-
const el = hoverPlayerRef.current;
|
|
1850
|
-
if (!el?.addEventListener) return void 0;
|
|
1851
|
-
const onVolumeChange = () => {
|
|
1852
|
-
if (el.muted === false) {
|
|
1853
|
-
setMutedFallbackBlocked(false);
|
|
1854
|
-
setHoverMutedFallback(false);
|
|
1855
|
-
}
|
|
1856
|
-
};
|
|
1857
|
-
try {
|
|
1858
|
-
el.addEventListener("volumechange", onVolumeChange);
|
|
1859
|
-
} catch {
|
|
1860
|
-
}
|
|
1861
|
-
return () => {
|
|
1862
|
-
try {
|
|
1863
|
-
el.removeEventListener?.("volumechange", onVolumeChange);
|
|
1864
|
-
} catch {
|
|
1865
|
-
}
|
|
1866
|
-
};
|
|
1867
|
-
}, []);
|
|
1868
|
-
useEffect5(() => {
|
|
1869
|
-
const el = hoverPlayerRef.current;
|
|
1870
|
-
if (!el?.addEventListener) return void 0;
|
|
1871
|
-
const onPlaying = () => setMutedFallbackBlocked(false);
|
|
1872
|
-
try {
|
|
1873
|
-
el.addEventListener("playing", onPlaying);
|
|
1874
|
-
} catch {
|
|
1875
|
-
}
|
|
1876
|
-
return () => {
|
|
1877
|
-
try {
|
|
1878
|
-
el.removeEventListener?.("playing", onPlaying);
|
|
1879
|
-
} catch {
|
|
1880
|
-
}
|
|
1881
|
-
};
|
|
1882
|
-
}, []);
|
|
1883
|
-
const onEndedRef = useRef2(onEnded);
|
|
1884
|
-
useEffect5(() => {
|
|
1885
|
-
onEndedRef.current = onEnded;
|
|
1886
|
-
});
|
|
1887
|
-
useEffect5(() => {
|
|
1888
|
-
const el = hoverPlayerRef.current;
|
|
1889
|
-
if (!el?.addEventListener) return void 0;
|
|
1890
|
-
const handler = () => onEndedRef.current?.();
|
|
1891
|
-
try {
|
|
1892
|
-
el.addEventListener("ended", handler);
|
|
1893
|
-
} catch {
|
|
1894
|
-
}
|
|
1895
|
-
return () => {
|
|
1896
|
-
try {
|
|
1897
|
-
el.removeEventListener?.("ended", handler);
|
|
1898
|
-
} catch {
|
|
1899
|
-
}
|
|
1900
|
-
};
|
|
1901
|
-
}, []);
|
|
1902
|
-
useIosNativeVideoFullscreen(hoverPlayerRef);
|
|
1903
|
-
useImperativeHandle(
|
|
1904
|
-
playerHandleRef,
|
|
1905
|
-
() => ({
|
|
1906
|
-
getCurrentTime: () => hoverPlayerRef.current?.currentTime ?? 0,
|
|
1907
|
-
getDuration: () => {
|
|
1908
|
-
const d = hoverPlayerRef.current?.duration;
|
|
1909
|
-
return typeof d === "number" && isFinite(d) ? d : 0;
|
|
1910
|
-
},
|
|
1911
|
-
getPaused: () => hoverPlayerRef.current?.paused ?? true,
|
|
1912
|
-
getMuted: () => hoverPlayerRef.current?.muted ?? false,
|
|
1913
|
-
play: async () => {
|
|
1914
|
-
await hoverPlayerRef.current?.play?.();
|
|
1915
|
-
},
|
|
1916
|
-
pause: () => {
|
|
1917
|
-
try {
|
|
1918
|
-
hoverPlayerRef.current?.pause?.();
|
|
1919
|
-
} catch {
|
|
1920
|
-
}
|
|
1921
|
-
},
|
|
1922
|
-
setMuted: (m) => {
|
|
1923
|
-
const el = hoverPlayerRef.current;
|
|
1924
|
-
if (!el) return;
|
|
1925
|
-
try {
|
|
1926
|
-
el.muted = m;
|
|
1927
|
-
if (!m) {
|
|
1928
|
-
setMutedFallbackBlocked(false);
|
|
1929
|
-
setHoverMutedFallback(false);
|
|
1930
|
-
}
|
|
1931
|
-
} catch {
|
|
1932
|
-
}
|
|
1933
|
-
}
|
|
1934
|
-
}),
|
|
1935
|
-
[]
|
|
1936
|
-
);
|
|
1937
|
-
if (process.env.NODE_ENV !== "production" && srtContent && !captionsUrl) {
|
|
1938
|
-
console.warn(
|
|
1939
|
-
"[Video] srtContent supplied without captionsUrl \u2014 captions will not render. Pass captionsUrl (the VTT URL) instead; raw SRT text overlays are no longer supported."
|
|
1940
|
-
);
|
|
1941
|
-
}
|
|
1942
|
-
const monitorHealth = !chromeless;
|
|
1943
|
-
const [playbackFailed, setPlaybackFailed] = useState3(false);
|
|
1944
|
-
const stallTimerRef = useRef2(null);
|
|
1945
|
-
const clearStallTimer = useCallback2(() => {
|
|
1946
|
-
if (stallTimerRef.current !== null) {
|
|
1947
|
-
clearTimeout(stallTimerRef.current);
|
|
1948
|
-
stallTimerRef.current = null;
|
|
1949
|
-
}
|
|
1950
|
-
}, []);
|
|
1951
|
-
useEffect5(() => clearStallTimer, [clearStallTimer]);
|
|
1952
|
-
const failPlayback = useCallback2(
|
|
1953
|
-
(reason) => {
|
|
1954
|
-
clearStallTimer();
|
|
1955
|
-
setPlaybackFailed(true);
|
|
1956
|
-
reportPlaybackFailure({ kind: "file", src: url, reason });
|
|
1957
|
-
},
|
|
1958
|
-
[clearStallTimer, url]
|
|
1959
|
-
);
|
|
1960
|
-
const armStallTimer = useCallback2(() => {
|
|
1961
|
-
if (!monitorHealth) return;
|
|
1962
|
-
const el = hoverPlayerRef.current;
|
|
1963
|
-
if (!el || el.paused || el.ended) return;
|
|
1964
|
-
if (stallTimerRef.current !== null) return;
|
|
1965
|
-
stallTimerRef.current = setTimeout(() => {
|
|
1966
|
-
stallTimerRef.current = null;
|
|
1967
|
-
failPlayback("stall");
|
|
1968
|
-
}, VIDEO_STALL_TIMEOUT_MS);
|
|
1969
|
-
}, [monitorHealth, failPlayback]);
|
|
1970
|
-
const handlePlaybackProgress = useCallback2(() => {
|
|
1971
|
-
clearStallTimer();
|
|
1972
|
-
setPlaybackFailed(false);
|
|
1973
|
-
}, [clearStallTimer]);
|
|
1974
|
-
const handleMediaError = useCallback2(() => {
|
|
1975
|
-
if (!monitorHealth) return;
|
|
1976
|
-
failPlayback("error");
|
|
1977
|
-
}, [monitorHealth, failPlayback]);
|
|
1978
|
-
const retryPlayback = useCallback2(() => {
|
|
1979
|
-
setPlaybackFailed(false);
|
|
1980
|
-
clearStallTimer();
|
|
1981
|
-
const el = hoverPlayerRef.current;
|
|
1982
|
-
if (!el) return;
|
|
1983
|
-
const resumeAt = typeof el.currentTime === "number" ? el.currentTime : 0;
|
|
1984
|
-
try {
|
|
1985
|
-
el.load?.();
|
|
1986
|
-
if (resumeAt > 0 && el.addEventListener && el.removeEventListener) {
|
|
1987
|
-
const seekBack = () => {
|
|
1988
|
-
el.removeEventListener?.("loadedmetadata", seekBack);
|
|
1989
|
-
try {
|
|
1990
|
-
el.currentTime = resumeAt;
|
|
1991
|
-
} catch {
|
|
1992
|
-
}
|
|
1993
|
-
};
|
|
1994
|
-
el.addEventListener("loadedmetadata", seekBack);
|
|
1995
|
-
}
|
|
1996
|
-
el.play?.()?.catch?.(() => {
|
|
1997
|
-
});
|
|
1998
|
-
} catch {
|
|
1999
|
-
}
|
|
2000
|
-
}, [clearStallTimer]);
|
|
2001
|
-
const errorOverlay = monitorHealth && playbackFailed ? /* @__PURE__ */ jsx9(VideoErrorOverlay, { onRetry: retryPlayback }) : null;
|
|
2002
|
-
const player = /* @__PURE__ */ jsx9(
|
|
2003
|
-
MuxPlayer,
|
|
2004
|
-
{
|
|
2005
|
-
ref: hoverPlayerRef,
|
|
2006
|
-
onError: handleMediaError,
|
|
2007
|
-
onWaiting: armStallTimer,
|
|
2008
|
-
onStalled: armStallTimer,
|
|
2009
|
-
onPlaying: handlePlaybackProgress,
|
|
2010
|
-
onTimeUpdate: handlePlaybackProgress,
|
|
2011
|
-
onPause: clearStallTimer,
|
|
2012
|
-
src: url,
|
|
2013
|
-
poster: poster || void 0,
|
|
2014
|
-
streamType: "on-demand",
|
|
2015
|
-
preload: effectivePreload,
|
|
2016
|
-
playsInline: true,
|
|
2017
|
-
muted,
|
|
2018
|
-
preferCmcd: "header",
|
|
2019
|
-
disableCookies: true,
|
|
2020
|
-
metadata: { viewer_user_id: muxViewerId() },
|
|
2021
|
-
accentColor: "var(--ods-accent, var(--color-accent-primary))",
|
|
2022
|
-
autoPlay: autoPlay ? "muted" : autoPlayUnmuted ? "any" : void 0,
|
|
2023
|
-
startTime: typeof startTime === "number" ? startTime : void 0,
|
|
2024
|
-
loop,
|
|
2025
|
-
className,
|
|
2026
|
-
style: {
|
|
2027
|
-
width: "100%",
|
|
2028
|
-
height: "100%",
|
|
2029
|
-
...chromeless ? { "--controls": "none" } : {},
|
|
2030
|
-
...fit === "cover" ? { "--media-object-fit": "cover" } : {}
|
|
2031
|
-
},
|
|
2032
|
-
children: resolvedCaptionsUrl ? /* @__PURE__ */ jsx9("track", { kind: "captions", src: resolvedCaptionsUrl, srcLang: "en", label: "English", default: true }) : null
|
|
2033
|
-
}
|
|
2034
|
-
);
|
|
2035
|
-
const unmuteBadge = hoverMutedFallback && !hideMutedBadge ? /* @__PURE__ */ jsx9(
|
|
2036
|
-
"button",
|
|
2037
|
-
{
|
|
2038
|
-
type: "button",
|
|
2039
|
-
"aria-label": "Unmute",
|
|
2040
|
-
title: "Unmute",
|
|
2041
|
-
onClick: unmuteNow,
|
|
2042
|
-
className: "absolute inset-0 z-10 m-auto flex h-14 w-14 items-center justify-center text-ods-text-primary transition-colors hover:text-ods-accent",
|
|
2043
|
-
children: /* @__PURE__ */ jsx9(VideoUnmuteGlyph, {})
|
|
2044
|
-
}
|
|
2045
|
-
) : null;
|
|
2046
|
-
if (playOnHover && !hoverControlled) {
|
|
2047
|
-
return /* @__PURE__ */ jsxs7("div", { className: "relative h-full w-full", onPointerEnter: handleHoverEnter, onPointerLeave: handleHoverLeave, children: [
|
|
2048
|
-
player,
|
|
2049
|
-
unmuteBadge,
|
|
2050
|
-
errorOverlay
|
|
2051
|
-
] });
|
|
2052
|
-
}
|
|
2053
|
-
if (hoverControlled || autoPlayUnmuted || startMuted || monitorHealth) {
|
|
2054
|
-
return /* @__PURE__ */ jsxs7("div", { className: "relative h-full w-full", children: [
|
|
2055
|
-
player,
|
|
2056
|
-
unmuteBadge,
|
|
2057
|
-
errorOverlay
|
|
2058
|
-
] });
|
|
2059
|
-
}
|
|
2060
|
-
return player;
|
|
2061
|
-
}
|
|
2062
|
-
function YouTubeFacade({
|
|
2063
|
-
url,
|
|
2064
|
-
title = "YouTube Video",
|
|
2065
|
-
priority,
|
|
2066
|
-
className,
|
|
2067
|
-
minimalControls,
|
|
2068
|
-
muted,
|
|
2069
|
-
// `...facade` rather than naming each one: this hop is invisible to the
|
|
2070
|
-
// build-time forwarding proof, so a prop added to VideoYouTubeFacadeProps
|
|
2071
|
-
// would reach here and silently stop before Inner.
|
|
2072
|
-
...facade
|
|
2073
|
-
}) {
|
|
2074
|
-
const videoId = extractYouTubeId(url);
|
|
2075
|
-
if (!videoId) return null;
|
|
2076
|
-
return /* @__PURE__ */ jsx9(
|
|
2077
|
-
YouTubeFacadeInner,
|
|
2078
|
-
{
|
|
2079
|
-
videoId,
|
|
2080
|
-
title,
|
|
2081
|
-
priority,
|
|
2082
|
-
className,
|
|
2083
|
-
minimalControls,
|
|
2084
|
-
muted,
|
|
2085
|
-
...facade
|
|
2086
|
-
}
|
|
2087
|
-
);
|
|
2088
|
-
}
|
|
2089
|
-
var YT_NOCOOKIE_ORIGIN = "https://www.youtube-nocookie.com";
|
|
2090
|
-
var YT_POSTER_TIERS = ["maxresdefault", "mqdefault"];
|
|
2091
|
-
var YT_STATE_ENDED = 0;
|
|
2092
|
-
var YT_STATE_PLAYING = 1;
|
|
2093
|
-
var YT_PLAYING_BLUR_DELAY_MS = 1e3;
|
|
2094
|
-
function toYouTubeMessage(parsed) {
|
|
2095
|
-
if (typeof parsed !== "object" || parsed === null) return null;
|
|
2096
|
-
const event = "event" in parsed ? parsed.event : void 0;
|
|
2097
|
-
const info = "info" in parsed ? parsed.info : void 0;
|
|
2098
|
-
const playerState = typeof info === "object" && info !== null && "playerState" in info ? info.playerState : void 0;
|
|
2099
|
-
return {
|
|
2100
|
-
event: typeof event === "string" ? event : void 0,
|
|
2101
|
-
info: { playerState: typeof playerState === "number" ? playerState : void 0 },
|
|
2102
|
-
errorCode: typeof info === "number" ? info : void 0
|
|
2103
|
-
};
|
|
2104
|
-
}
|
|
2105
|
-
function YouTubeFacadeInner({
|
|
2106
|
-
videoId,
|
|
2107
|
-
title,
|
|
2108
|
-
priority,
|
|
2109
|
-
className,
|
|
2110
|
-
minimalControls,
|
|
2111
|
-
muted,
|
|
2112
|
-
autoActivate,
|
|
2113
|
-
suspended
|
|
2114
|
-
}) {
|
|
2115
|
-
const [activated, setActivated] = useState3(Boolean(autoActivate));
|
|
2116
|
-
const [prevAutoActivate, setPrevAutoActivate] = useState3(Boolean(autoActivate));
|
|
2117
|
-
if (Boolean(autoActivate) !== prevAutoActivate) {
|
|
2118
|
-
setPrevAutoActivate(Boolean(autoActivate));
|
|
2119
|
-
if (autoActivate) setActivated(true);
|
|
2120
|
-
}
|
|
2121
|
-
const [failed, setFailed] = useState3(false);
|
|
2122
|
-
const [reloadNonce, setReloadNonce] = useState3(0);
|
|
2123
|
-
const iframeRef = useRef2(null);
|
|
2124
|
-
const retry = useCallback2(() => {
|
|
2125
|
-
setFailed(false);
|
|
2126
|
-
setReloadNonce((n) => n + 1);
|
|
2127
|
-
}, []);
|
|
2128
|
-
const embedUrl = useMemo2(() => {
|
|
2129
|
-
const params = new URLSearchParams({
|
|
2130
|
-
autoplay: "1",
|
|
2131
|
-
rel: "0",
|
|
2132
|
-
modestbranding: "1",
|
|
2133
|
-
playsinline: "1",
|
|
2134
|
-
enablejsapi: "1"
|
|
2135
|
-
});
|
|
2136
|
-
if (muted) params.set("mute", "1");
|
|
2137
|
-
if (typeof window !== "undefined") {
|
|
2138
|
-
params.set("origin", window.location.origin);
|
|
2139
|
-
}
|
|
2140
|
-
if (minimalControls) {
|
|
2141
|
-
params.set("controls", "0");
|
|
2142
|
-
params.set("fs", "0");
|
|
2143
|
-
params.set("iv_load_policy", "3");
|
|
2144
|
-
params.set("cc_load_policy", "0");
|
|
2145
|
-
params.set("disablekb", "1");
|
|
2146
|
-
}
|
|
2147
|
-
return `${YT_NOCOOKIE_ORIGIN}/embed/${videoId}?${params.toString()}`;
|
|
2148
|
-
}, [videoId, minimalControls, muted]);
|
|
2149
|
-
const [posterTier, setPosterTier] = useState3(0);
|
|
2150
|
-
const [posterTierFor, setPosterTierFor] = useState3(videoId);
|
|
2151
|
-
if (posterTierFor !== videoId) {
|
|
2152
|
-
setPosterTierFor(videoId);
|
|
2153
|
-
setPosterTier(0);
|
|
2154
|
-
}
|
|
2155
|
-
const posterQuality = YT_POSTER_TIERS[posterTier];
|
|
2156
|
-
const posterJpg = `https://i.ytimg.com/vi/${videoId}/${posterQuality}.jpg`;
|
|
2157
|
-
const posterWebp = `https://i.ytimg.com/vi_webp/${videoId}/${posterQuality}.webp`;
|
|
2158
|
-
const handlePosterError = () => setPosterTier((tier) => Math.min(tier + 1, YT_POSTER_TIERS.length - 1));
|
|
2159
|
-
useEffect5(() => {
|
|
2160
|
-
if (!activated || failed) return void 0;
|
|
2161
|
-
const iframe = iframeRef.current;
|
|
2162
|
-
if (!iframe) return void 0;
|
|
2163
|
-
function subscribe() {
|
|
2164
|
-
iframe?.contentWindow?.postMessage('{"event":"listening"}', YT_NOCOOKIE_ORIGIN);
|
|
2165
|
-
}
|
|
2166
|
-
iframe.addEventListener("load", subscribe);
|
|
2167
|
-
subscribe();
|
|
2168
|
-
let blurTimer = null;
|
|
2169
|
-
function handleMessage(event) {
|
|
2170
|
-
if (event.origin !== YT_NOCOOKIE_ORIGIN) return;
|
|
2171
|
-
if (typeof event.data !== "string") return;
|
|
2172
|
-
let payload = null;
|
|
2173
|
-
try {
|
|
2174
|
-
payload = toYouTubeMessage(JSON.parse(event.data));
|
|
2175
|
-
} catch {
|
|
2176
|
-
return;
|
|
2177
|
-
}
|
|
2178
|
-
if (!payload) return;
|
|
2179
|
-
if (payload.event === "onError") {
|
|
2180
|
-
setFailed(true);
|
|
2181
|
-
reportPlaybackFailure({ kind: "youtube", src: videoId, reason: "error", errorCode: payload.errorCode });
|
|
2182
|
-
return;
|
|
2183
|
-
}
|
|
2184
|
-
if (payload.event !== "infoDelivery") return;
|
|
2185
|
-
const state = payload.info?.playerState;
|
|
2186
|
-
if (typeof state !== "number") return;
|
|
2187
|
-
if (state === YT_STATE_PLAYING) {
|
|
2188
|
-
if (blurTimer !== null) return;
|
|
2189
|
-
blurTimer = setTimeout(() => {
|
|
2190
|
-
blurTimer = null;
|
|
2191
|
-
iframeRef.current?.blur();
|
|
2192
|
-
}, YT_PLAYING_BLUR_DELAY_MS);
|
|
2193
|
-
return;
|
|
2194
|
-
}
|
|
2195
|
-
if (state === YT_STATE_ENDED) {
|
|
2196
|
-
setActivated(false);
|
|
2197
|
-
}
|
|
2198
|
-
}
|
|
2199
|
-
window.addEventListener("message", handleMessage);
|
|
2200
|
-
return () => {
|
|
2201
|
-
iframe.removeEventListener("load", subscribe);
|
|
2202
|
-
window.removeEventListener("message", handleMessage);
|
|
2203
|
-
if (blurTimer !== null) clearTimeout(blurTimer);
|
|
2204
|
-
};
|
|
2205
|
-
}, [activated, failed, reloadNonce, videoId]);
|
|
2206
|
-
const prevSuspendedRef = useRef2(false);
|
|
2207
|
-
useEffect5(() => {
|
|
2208
|
-
const wasSuspended = prevSuspendedRef.current;
|
|
2209
|
-
prevSuspendedRef.current = Boolean(suspended);
|
|
2210
|
-
if (!activated || Boolean(suspended) === wasSuspended) return;
|
|
2211
|
-
iframeRef.current?.contentWindow?.postMessage(
|
|
2212
|
-
`{"event":"command","func":"${suspended ? "pauseVideo" : "playVideo"}","args":[]}`,
|
|
2213
|
-
YT_NOCOOKIE_ORIGIN
|
|
2214
|
-
);
|
|
2215
|
-
}, [suspended, activated]);
|
|
2216
|
-
const wrapperClass = `relative w-full ${className ?? ""}`;
|
|
2217
|
-
const wrapperStyle = { paddingBottom: "56.25%" };
|
|
2218
|
-
if (activated && failed) {
|
|
2219
|
-
return /* @__PURE__ */ jsx9("div", { className: wrapperClass, style: wrapperStyle, children: /* @__PURE__ */ jsx9(VideoErrorOverlay, { onRetry: retry, watchOnYouTubeId: videoId }) });
|
|
2220
|
-
}
|
|
2221
|
-
if (activated) {
|
|
2222
|
-
return /* @__PURE__ */ jsx9("div", { className: wrapperClass, style: wrapperStyle, children: /* @__PURE__ */ jsx9(
|
|
2223
|
-
"iframe",
|
|
2224
|
-
{
|
|
2225
|
-
ref: iframeRef,
|
|
2226
|
-
src: embedUrl,
|
|
2227
|
-
allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
|
|
2228
|
-
allowFullScreen: true,
|
|
2229
|
-
referrerPolicy: "strict-origin-when-cross-origin",
|
|
2230
|
-
title,
|
|
2231
|
-
className: "absolute inset-0 h-full w-full rounded-lg border-0"
|
|
2232
|
-
},
|
|
2233
|
-
reloadNonce
|
|
2234
|
-
) });
|
|
2235
|
-
}
|
|
2236
|
-
return /* @__PURE__ */ jsx9("div", { className: wrapperClass, style: wrapperStyle, children: /* @__PURE__ */ jsxs7(
|
|
2237
|
-
"button",
|
|
2238
|
-
{
|
|
2239
|
-
type: "button",
|
|
2240
|
-
"aria-label": `Play: ${title}`,
|
|
2241
|
-
onClick: () => setActivated(true),
|
|
2242
|
-
className: "group absolute inset-0 m-0 cursor-pointer overflow-hidden rounded-lg border border-ods-border bg-ods-card p-0",
|
|
2243
|
-
children: [
|
|
2244
|
-
/* @__PURE__ */ jsxs7("picture", { children: [
|
|
2245
|
-
/* @__PURE__ */ jsx9("source", { type: "image/webp", srcSet: posterWebp }),
|
|
2246
|
-
/* @__PURE__ */ jsx9(
|
|
2247
|
-
"img",
|
|
2248
|
-
{
|
|
2249
|
-
src: posterJpg,
|
|
2250
|
-
alt: title,
|
|
2251
|
-
loading: "lazy",
|
|
2252
|
-
onError: handlePosterError,
|
|
2253
|
-
...fetchPriorityProp(priority),
|
|
2254
|
-
decoding: priority ? "sync" : "async",
|
|
2255
|
-
className: "absolute inset-0 h-full w-full object-cover"
|
|
2256
|
-
}
|
|
2257
|
-
)
|
|
2258
|
-
] }),
|
|
2259
|
-
/* @__PURE__ */ jsx9("div", { className: "absolute inset-0 flex items-center justify-center bg-ods-bg bg-opacity-20 transition-opacity duration-200 group-hover:bg-opacity-30", children: /* @__PURE__ */ jsx9(
|
|
2260
|
-
VideoPlayBadge,
|
|
2261
|
-
{
|
|
2262
|
-
size: "lg",
|
|
2263
|
-
className: "transition-transform duration-200 group-hover:scale-110 group-hover:text-ods-accent"
|
|
2264
|
-
}
|
|
2265
|
-
) })
|
|
2266
|
-
]
|
|
2267
|
-
}
|
|
2268
|
-
) });
|
|
2269
|
-
}
|
|
2270
|
-
|
|
2271
1229
|
// src/components/ui/status-badge.tsx
|
|
2272
1230
|
import { cva as cva2 } from "class-variance-authority";
|
|
2273
|
-
import { jsx as
|
|
1231
|
+
import { jsx as jsx9 } from "react/jsx-runtime";
|
|
2274
1232
|
var statusBadgeVariants = cva2("inline-flex items-center justify-center rounded", {
|
|
2275
1233
|
variants: {
|
|
2276
1234
|
// Two densities, not one style at two paddings. Both are the ODS h5
|
|
@@ -2332,11 +1290,11 @@ function StatusBadge({ text, variant, colorScheme, className, singleLine, gen, s
|
|
|
2332
1290
|
if (singleLine) return text;
|
|
2333
1291
|
if (variant === "button" && text.includes(" ")) {
|
|
2334
1292
|
const words = text.split(" ");
|
|
2335
|
-
return /* @__PURE__ */
|
|
1293
|
+
return /* @__PURE__ */ jsx9("span", { className: "flex flex-col items-center justify-center gap-0 text-center", children: words.map((word, index) => /* @__PURE__ */ jsx9("span", { className: "block", children: word }, index)) });
|
|
2336
1294
|
}
|
|
2337
1295
|
return text;
|
|
2338
1296
|
};
|
|
2339
|
-
return /* @__PURE__ */
|
|
1297
|
+
return /* @__PURE__ */ jsx9(
|
|
2340
1298
|
"span",
|
|
2341
1299
|
{
|
|
2342
1300
|
className: cn(statusBadgeVariants({ variant, colorScheme: gen != null ? void 0 : colorScheme }), className),
|
|
@@ -2374,9 +1332,9 @@ function pickBadgePaletteColor({
|
|
|
2374
1332
|
}
|
|
2375
1333
|
|
|
2376
1334
|
// src/components/ui/palette-badge.tsx
|
|
2377
|
-
import { jsx as
|
|
1335
|
+
import { jsx as jsx10 } from "react/jsx-runtime";
|
|
2378
1336
|
function PaletteBadge({ text, color, className, variant = "button" }) {
|
|
2379
|
-
return /* @__PURE__ */
|
|
1337
|
+
return /* @__PURE__ */ jsx10(
|
|
2380
1338
|
StatusBadge,
|
|
2381
1339
|
{
|
|
2382
1340
|
text,
|
|
@@ -2389,14 +1347,14 @@ function PaletteBadge({ text, color, className, variant = "button" }) {
|
|
|
2389
1347
|
}
|
|
2390
1348
|
|
|
2391
1349
|
// src/components/ui/department-badge.tsx
|
|
2392
|
-
import { jsx as
|
|
1350
|
+
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
2393
1351
|
function DepartmentBadge({
|
|
2394
1352
|
department,
|
|
2395
1353
|
emptyLabel = "No department",
|
|
2396
1354
|
className,
|
|
2397
1355
|
variant
|
|
2398
1356
|
}) {
|
|
2399
|
-
return /* @__PURE__ */
|
|
1357
|
+
return /* @__PURE__ */ jsx11(
|
|
2400
1358
|
PaletteBadge,
|
|
2401
1359
|
{
|
|
2402
1360
|
text: department?.name || emptyLabel,
|
|
@@ -2408,7 +1366,7 @@ function DepartmentBadge({
|
|
|
2408
1366
|
}
|
|
2409
1367
|
|
|
2410
1368
|
// src/components/ui/avatar-stack.tsx
|
|
2411
|
-
import { jsx as
|
|
1369
|
+
import { jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
2412
1370
|
var SIZE_PX = { xs: 24, sm: 32, md: 40, lg: 48 };
|
|
2413
1371
|
var OVERLAP_PX = { xs: 8, sm: 12, md: 12, lg: 12 };
|
|
2414
1372
|
var OVERFLOW_CIRCLE_SIZE = {
|
|
@@ -2436,7 +1394,7 @@ function AvatarStack({
|
|
|
2436
1394
|
const names = people.map((p) => p.name).join(", ");
|
|
2437
1395
|
const unnamed = groupSize - people.length;
|
|
2438
1396
|
const compact = size2 === "xs";
|
|
2439
|
-
return /* @__PURE__ */
|
|
1397
|
+
return /* @__PURE__ */ jsxs7(
|
|
2440
1398
|
"div",
|
|
2441
1399
|
{
|
|
2442
1400
|
className: cn("flex items-center", slots && "shrink-0", className),
|
|
@@ -2444,7 +1402,7 @@ function AvatarStack({
|
|
|
2444
1402
|
role: "group",
|
|
2445
1403
|
"aria-label": `${label}: ${names}${unnamed > 0 ? ` and ${unnamed} more` : ""}`,
|
|
2446
1404
|
children: [
|
|
2447
|
-
visible.map((person, i) => /* @__PURE__ */
|
|
1405
|
+
visible.map((person, i) => /* @__PURE__ */ jsx12(
|
|
2448
1406
|
SquareAvatar,
|
|
2449
1407
|
{
|
|
2450
1408
|
variant: "round",
|
|
@@ -2458,7 +1416,7 @@ function AvatarStack({
|
|
|
2458
1416
|
},
|
|
2459
1417
|
person.key ?? `${person.name}-${i}`
|
|
2460
1418
|
)),
|
|
2461
|
-
overflowCount > 0 && /* @__PURE__ */
|
|
1419
|
+
overflowCount > 0 && /* @__PURE__ */ jsxs7(
|
|
2462
1420
|
"span",
|
|
2463
1421
|
{
|
|
2464
1422
|
title: overflow.length > 0 ? overflow.map((p) => p.name).join(", ") : `${overflowCount} more`,
|
|
@@ -2483,530 +1441,6 @@ function AvatarStack({
|
|
|
2483
1441
|
);
|
|
2484
1442
|
}
|
|
2485
1443
|
|
|
2486
|
-
// src/components/chat/utils/icon-registry.ts
|
|
2487
|
-
import {
|
|
2488
|
-
Activity,
|
|
2489
|
-
Banknote,
|
|
2490
|
-
Bell,
|
|
2491
|
-
BookOpen,
|
|
2492
|
-
Box,
|
|
2493
|
-
Briefcase,
|
|
2494
|
-
Calendar,
|
|
2495
|
-
CheckSquare,
|
|
2496
|
-
DollarSign,
|
|
2497
|
-
Facebook,
|
|
2498
|
-
FileText,
|
|
2499
|
-
Github,
|
|
2500
|
-
Globe,
|
|
2501
|
-
GraduationCap,
|
|
2502
|
-
Headphones,
|
|
2503
|
-
Info,
|
|
2504
|
-
Instagram,
|
|
2505
|
-
Mail,
|
|
2506
|
-
Megaphone,
|
|
2507
|
-
MessageCircle,
|
|
2508
|
-
MessageSquare,
|
|
2509
|
-
Newspaper,
|
|
2510
|
-
Package,
|
|
2511
|
-
PenSquare,
|
|
2512
|
-
Phone,
|
|
2513
|
-
Rocket,
|
|
2514
|
-
Search,
|
|
2515
|
-
Send,
|
|
2516
|
-
Shield,
|
|
2517
|
-
Star,
|
|
2518
|
-
TableProperties,
|
|
2519
|
-
TrendingUp,
|
|
2520
|
-
Twitter,
|
|
2521
|
-
Users,
|
|
2522
|
-
Video as Video2,
|
|
2523
|
-
Youtube
|
|
2524
|
-
} from "lucide-react";
|
|
2525
|
-
import { createElement } from "react";
|
|
2526
|
-
var OpenFrameLogoIcon = ({ className }) => createElement(OpenFrameLogo, { className, upperPathColor: "currentColor" });
|
|
2527
|
-
var ICON_REGISTRY = {
|
|
2528
|
-
// lucide-react (kebab-case)
|
|
2529
|
-
activity: Activity,
|
|
2530
|
-
banknote: Banknote,
|
|
2531
|
-
bell: Bell,
|
|
2532
|
-
"book-open": BookOpen,
|
|
2533
|
-
box: Box,
|
|
2534
|
-
briefcase: Briefcase,
|
|
2535
|
-
calendar: Calendar,
|
|
2536
|
-
"check-square": CheckSquare,
|
|
2537
|
-
"dollar-sign": DollarSign,
|
|
2538
|
-
// For brand-vs-lucide variants the kebab key is the BRAND (most-common
|
|
2539
|
-
// social-platform intent); `'<name>-lucide'` carries the lucide outline.
|
|
2540
|
-
facebook: FacebookIcon,
|
|
2541
|
-
"facebook-lucide": Facebook,
|
|
2542
|
-
"file-text": FileText,
|
|
2543
|
-
// `'github-lucide'` is the lucide outline glyph (used by
|
|
2544
|
-
// `social_platforms.icon_name='Github'`); `'github'` is the brand icon
|
|
2545
|
-
// (used by `chat_admin_slash_commands.icon_name='github'`). The PascalCase
|
|
2546
|
-
// alias `'Github' → 'github-lucide'` routes the lucide glyph for
|
|
2547
|
-
// social-platform DB rows; `'GitHubIcon' → 'github'` keeps brand routing
|
|
2548
|
-
// consistent for callers that store the PascalCase component name.
|
|
2549
|
-
github: GitHubIcon,
|
|
2550
|
-
"github-lucide": Github,
|
|
2551
|
-
globe: Globe,
|
|
2552
|
-
"graduation-cap": GraduationCap,
|
|
2553
|
-
headphones: Headphones,
|
|
2554
|
-
info: Info,
|
|
2555
|
-
instagram: InstagramIcon,
|
|
2556
|
-
"instagram-lucide": Instagram,
|
|
2557
|
-
mail: Mail,
|
|
2558
|
-
megaphone: Megaphone,
|
|
2559
|
-
"message-circle": MessageCircle,
|
|
2560
|
-
"message-square": MessageSquare,
|
|
2561
|
-
newspaper: Newspaper,
|
|
2562
|
-
package: Package,
|
|
2563
|
-
"pen-square": PenSquare,
|
|
2564
|
-
phone: Phone,
|
|
2565
|
-
rocket: Rocket,
|
|
2566
|
-
search: Search,
|
|
2567
|
-
send: Send,
|
|
2568
|
-
shield: Shield,
|
|
2569
|
-
star: Star,
|
|
2570
|
-
table: TableProperties,
|
|
2571
|
-
"trending-up": TrendingUp,
|
|
2572
|
-
twitter: Twitter,
|
|
2573
|
-
users: Users,
|
|
2574
|
-
video: Video2,
|
|
2575
|
-
whatsapp: WhatsAppIcon,
|
|
2576
|
-
youtube: YouTubeIcon,
|
|
2577
|
-
"youtube-lucide": Youtube,
|
|
2578
|
-
// brand-only icons (no lucide variant in current use)
|
|
2579
|
-
slack: SlackIcon,
|
|
2580
|
-
clickup: ClickUpIcon,
|
|
2581
|
-
hubspot: HubspotIcon,
|
|
2582
|
-
linkedin: LinkedInIcon,
|
|
2583
|
-
x: XLogo,
|
|
2584
|
-
openframe: OpenFrameLogoIcon
|
|
2585
|
-
};
|
|
2586
|
-
var PASCAL_TO_KEBAB_ALIASES = {
|
|
2587
|
-
// Lucide PascalCase names → kebab equivalents
|
|
2588
|
-
Activity: "activity",
|
|
2589
|
-
Banknote: "banknote",
|
|
2590
|
-
Bell: "bell",
|
|
2591
|
-
BookOpen: "book-open",
|
|
2592
|
-
Box: "box",
|
|
2593
|
-
Briefcase: "briefcase",
|
|
2594
|
-
Calendar: "calendar",
|
|
2595
|
-
CheckSquare: "check-square",
|
|
2596
|
-
DollarSign: "dollar-sign",
|
|
2597
|
-
// Lucide PascalCase → the `-lucide` kebab variant (kebab default is the
|
|
2598
|
-
// brand icon for the social-platform names below).
|
|
2599
|
-
Facebook: "facebook-lucide",
|
|
2600
|
-
FileText: "file-text",
|
|
2601
|
-
Github: "github-lucide",
|
|
2602
|
-
Globe: "globe",
|
|
2603
|
-
GraduationCap: "graduation-cap",
|
|
2604
|
-
Headphones: "headphones",
|
|
2605
|
-
Info: "info",
|
|
2606
|
-
Instagram: "instagram-lucide",
|
|
2607
|
-
Mail: "mail",
|
|
2608
|
-
Megaphone: "megaphone",
|
|
2609
|
-
MessageCircle: "message-circle",
|
|
2610
|
-
MessageSquare: "message-square",
|
|
2611
|
-
Newspaper: "newspaper",
|
|
2612
|
-
Package: "package",
|
|
2613
|
-
PenSquare: "pen-square",
|
|
2614
|
-
Phone: "phone",
|
|
2615
|
-
Rocket: "rocket",
|
|
2616
|
-
Search: "search",
|
|
2617
|
-
Send: "send",
|
|
2618
|
-
Shield: "shield",
|
|
2619
|
-
Star: "star",
|
|
2620
|
-
TableProperties: "table",
|
|
2621
|
-
TrendingUp: "trending-up",
|
|
2622
|
-
Twitter: "twitter",
|
|
2623
|
-
Users: "users",
|
|
2624
|
-
Video: "video",
|
|
2625
|
-
Youtube: "youtube-lucide",
|
|
2626
|
-
// Brand-icon PascalCase exports → kebab (kebab default is the brand)
|
|
2627
|
-
SlackIcon: "slack",
|
|
2628
|
-
GitHubIcon: "github",
|
|
2629
|
-
ClickUpIcon: "clickup",
|
|
2630
|
-
HubspotIcon: "hubspot",
|
|
2631
|
-
LinkedInIcon: "linkedin",
|
|
2632
|
-
FacebookIcon: "facebook",
|
|
2633
|
-
InstagramIcon: "instagram",
|
|
2634
|
-
YouTubeIcon: "youtube",
|
|
2635
|
-
WhatsAppIcon: "whatsapp",
|
|
2636
|
-
XLogo: "x",
|
|
2637
|
-
OpenFrameLogo: "openframe"
|
|
2638
|
-
};
|
|
2639
|
-
function normalizeIconKey(key) {
|
|
2640
|
-
return PASCAL_TO_KEBAB_ALIASES[key] ?? key;
|
|
2641
|
-
}
|
|
2642
|
-
function getIconComponent(iconName) {
|
|
2643
|
-
if (!iconName) return FileText;
|
|
2644
|
-
return ICON_REGISTRY[normalizeIconKey(iconName)] ?? FileText;
|
|
2645
|
-
}
|
|
2646
|
-
var SIZE_CLASSES = {
|
|
2647
|
-
xs: "w-3 h-3",
|
|
2648
|
-
// 12px
|
|
2649
|
-
sm: "w-4 h-4",
|
|
2650
|
-
// 16px
|
|
2651
|
-
md: "w-6 h-6",
|
|
2652
|
-
// 24px
|
|
2653
|
-
lg: "w-8 h-8",
|
|
2654
|
-
// 32px
|
|
2655
|
-
xl: "w-12 h-12"
|
|
2656
|
-
// 48px
|
|
2657
|
-
};
|
|
2658
|
-
var ICON_COLORS = {
|
|
2659
|
-
linkedin: { color: "#0A66C2" },
|
|
2660
|
-
facebook: { color: "#1877F2" },
|
|
2661
|
-
youtube: { color: "#FF0000" }
|
|
2662
|
-
};
|
|
2663
|
-
function getDynamicIcon(iconName, size2 = "md", className) {
|
|
2664
|
-
if (!iconName) {
|
|
2665
|
-
console.warn("[getDynamicIcon] No iconName provided, using Globe fallback");
|
|
2666
|
-
return createElement(Globe, { className: SIZE_CLASSES[size2] });
|
|
2667
|
-
}
|
|
2668
|
-
const sizeClass = SIZE_CLASSES[size2];
|
|
2669
|
-
const finalClassName = className ? `${sizeClass} ${className}` : sizeClass;
|
|
2670
|
-
const canonicalKey = normalizeIconKey(iconName);
|
|
2671
|
-
const IconComponent = ICON_REGISTRY[canonicalKey];
|
|
2672
|
-
if (IconComponent) {
|
|
2673
|
-
const colorConfig = ICON_COLORS[canonicalKey] || {};
|
|
2674
|
-
return createElement(IconComponent, { className: finalClassName, ...colorConfig });
|
|
2675
|
-
}
|
|
2676
|
-
console.error(
|
|
2677
|
-
`[getDynamicIcon] Icon NOT found in registry: "${iconName}" (normalized to "${canonicalKey}"). Available icons:`,
|
|
2678
|
-
Object.keys(ICON_REGISTRY)
|
|
2679
|
-
);
|
|
2680
|
-
return createElement(Globe, { className: finalClassName });
|
|
2681
|
-
}
|
|
2682
|
-
|
|
2683
|
-
// src/components/chat/utils/icon-library.tsx
|
|
2684
|
-
import { Megaphone as Megaphone2, Bell as Bell2, Info as Info2, Star as Star2, Package as PackageGlyph } from "lucide-react";
|
|
2685
|
-
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
2686
|
-
function sizedLogo(Logo) {
|
|
2687
|
-
return function SizedLogo({ size: size2 = 16, className }) {
|
|
2688
|
-
return /* @__PURE__ */ jsx14(Logo, { className, style: { width: size2, height: size2 } });
|
|
2689
|
-
};
|
|
2690
|
-
}
|
|
2691
|
-
var brandColor = (platform) => `var(${platformAccentVarName(platform)})`;
|
|
2692
|
-
var OpenmspLogoIcon = ({ size: size2 = 16, className }) => /* @__PURE__ */ jsx14(
|
|
2693
|
-
OpenmspLogo,
|
|
2694
|
-
{
|
|
2695
|
-
className,
|
|
2696
|
-
style: { width: size2, height: size2 },
|
|
2697
|
-
frontBubbleColor: "var(--color-text-primary)",
|
|
2698
|
-
innerFrontBubbleColor: "var(--color-bg)",
|
|
2699
|
-
backBubbleColor: brandColor("openmsp")
|
|
2700
|
-
}
|
|
2701
|
-
);
|
|
2702
|
-
var FlamingoLogoIcon = sizedLogo(FlamingoLogo);
|
|
2703
|
-
var MlgLogoIcon = ({ size: size2 = 16, className, color }) => /* @__PURE__ */ jsx14(MlgLogo, { size: size2, className, color: color ?? "var(--color-text-primary)" });
|
|
2704
|
-
var TmcgLogoIcon = ({ size: size2 = 16, className }) => /* @__PURE__ */ jsx14(
|
|
2705
|
-
MiamiCyberGangLogoFaceOnly,
|
|
2706
|
-
{
|
|
2707
|
-
size: size2,
|
|
2708
|
-
className,
|
|
2709
|
-
originalPink: brandColor("tmcg"),
|
|
2710
|
-
originalWhite: "var(--color-text-primary)"
|
|
2711
|
-
}
|
|
2712
|
-
);
|
|
2713
|
-
function LogoOpenframeIcon({ size: size2 = 16, className, color }) {
|
|
2714
|
-
const tint = color ?? "currentColor";
|
|
2715
|
-
return /* @__PURE__ */ jsx14(
|
|
2716
|
-
OpenFrameLogo,
|
|
2717
|
-
{
|
|
2718
|
-
className,
|
|
2719
|
-
lowerPathColor: tint,
|
|
2720
|
-
upperPathColor: tint,
|
|
2721
|
-
style: { width: size2, height: size2 }
|
|
2722
|
-
}
|
|
2723
|
-
);
|
|
2724
|
-
}
|
|
2725
|
-
var ICON_ALIASES = {
|
|
2726
|
-
// Production `/api/docs/commands` keys (multi-platform-hub contract)
|
|
2727
|
-
clickup: ClickupLogoGreyIcon,
|
|
2728
|
-
slack: SlackLogoGreyIcon,
|
|
2729
|
-
hubspot: HubspotLogoGreyIcon,
|
|
2730
|
-
github: GithubIcon,
|
|
2731
|
-
openframe: LogoOpenframeIcon,
|
|
2732
|
-
newspaper: NewspaperIcon,
|
|
2733
|
-
rocket: Rocket02Icon,
|
|
2734
|
-
briefcase: BriefcaseIcon,
|
|
2735
|
-
"graduation-cap": GraduationCapIcon,
|
|
2736
|
-
video: VideoRecorderIcon,
|
|
2737
|
-
headphones: HeadphoneIcon,
|
|
2738
|
-
calendar: CalendarIcon,
|
|
2739
|
-
compass: CompassIcon,
|
|
2740
|
-
// Figma-canonical aliases (node 7363:205938) — kept for Storybook
|
|
2741
|
-
// fixtures and any older feed entries still using the long names.
|
|
2742
|
-
"clickup-logo": ClickupLogoGreyIcon,
|
|
2743
|
-
"clickup-logo-grey": ClickupLogoGreyIcon,
|
|
2744
|
-
"slack-logo": SlackLogoGreyIcon,
|
|
2745
|
-
"slack-logo-grey": SlackLogoGreyIcon,
|
|
2746
|
-
"hubspot-logo": HubspotLogoGreyIcon,
|
|
2747
|
-
"hubspot-logo-grey": HubspotLogoGreyIcon,
|
|
2748
|
-
"github-logo": GithubIcon,
|
|
2749
|
-
"logo-openframe": LogoOpenframeIcon,
|
|
2750
|
-
"rocket-01": Rocket02Icon,
|
|
2751
|
-
"rocket-02": Rocket02Icon,
|
|
2752
|
-
// Announcement-bar legacy names — folded in so resolveIcon covers them too
|
|
2753
|
-
// (was the separate `renderSvgIcon` map; now ONE resolver everywhere).
|
|
2754
|
-
"openframe-logo": LogoOpenframeIcon,
|
|
2755
|
-
"openmsp-logo": OpenmspLogoIcon,
|
|
2756
|
-
"mlg-logo": MlgLogoIcon,
|
|
2757
|
-
"tmcg-logo": TmcgLogoIcon,
|
|
2758
|
-
flamingo: FlamingoLogoIcon,
|
|
2759
|
-
"flamingo-logo": FlamingoLogoIcon,
|
|
2760
|
-
megaphone: Megaphone2,
|
|
2761
|
-
bell: Bell2,
|
|
2762
|
-
info: Info2,
|
|
2763
|
-
star: Star2,
|
|
2764
|
-
package: PackageGlyph,
|
|
2765
|
-
// Generic v2-native keys — useful fall-throughs for slash commands that
|
|
2766
|
-
// don't have a brand-specific glyph in the design.
|
|
2767
|
-
search: SearchIcon,
|
|
2768
|
-
ticket: TicketIcon,
|
|
2769
|
-
book: BookIcon,
|
|
2770
|
-
"book-open": BookIcon,
|
|
2771
|
-
bug: BugIcon,
|
|
2772
|
-
layers: LayersIcon,
|
|
2773
|
-
file: FileIcon,
|
|
2774
|
-
"file-text": FileIcon,
|
|
2775
|
-
chats: ChatsIcon,
|
|
2776
|
-
"message-square": ChatsIcon,
|
|
2777
|
-
"message-circle": ChatsIcon,
|
|
2778
|
-
"bracket-curly": BracketCurlyIcon
|
|
2779
|
-
};
|
|
2780
|
-
function resolveFromLibrary(iconName) {
|
|
2781
|
-
const tokens = iconName.trim().toLowerCase().replace(/_/g, "-").split("-");
|
|
2782
|
-
if (tokens.some((t) => t.length === 0)) return void 0;
|
|
2783
|
-
const cap = (t) => t.charAt(0).toUpperCase() + t.slice(1);
|
|
2784
|
-
const candidates = [
|
|
2785
|
-
`${tokens.map(cap).join("")}Icon`,
|
|
2786
|
-
`${tokens.map((t) => t === "ai" ? "AI" : cap(t)).join("")}Icon`
|
|
2787
|
-
];
|
|
2788
|
-
const registry = icons_v2_generated_exports;
|
|
2789
|
-
for (const name of candidates) {
|
|
2790
|
-
const Icon = registry[name];
|
|
2791
|
-
if (Icon) return Icon;
|
|
2792
|
-
}
|
|
2793
|
-
return void 0;
|
|
2794
|
-
}
|
|
2795
|
-
function brandLogoForName(name) {
|
|
2796
|
-
const words = (name ?? "").split(/[^A-Za-z0-9]+/).filter(Boolean);
|
|
2797
|
-
const pascal = (word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
|
|
2798
|
-
const registry = icons_v2_generated_exports;
|
|
2799
|
-
for (let length = Math.min(3, words.length); length >= 1; length -= 1) {
|
|
2800
|
-
for (let start = 0; start + length <= words.length; start += 1) {
|
|
2801
|
-
const Logo = registry[`${words.slice(start, start + length).map(pascal).join("")}LogoIcon`];
|
|
2802
|
-
if (Logo) return Logo;
|
|
2803
|
-
}
|
|
2804
|
-
}
|
|
2805
|
-
return null;
|
|
2806
|
-
}
|
|
2807
|
-
function resolveIcon(iconName, opts) {
|
|
2808
|
-
if (opts?.variant === "brand") {
|
|
2809
|
-
return getIconComponent(iconName);
|
|
2810
|
-
}
|
|
2811
|
-
if (!iconName) return FileIcon;
|
|
2812
|
-
return ICON_ALIASES[iconName] ?? resolveFromLibrary(iconName) ?? FileIcon;
|
|
2813
|
-
}
|
|
2814
|
-
var ICON_OPTIONS = [
|
|
2815
|
-
// Brands
|
|
2816
|
-
{ key: "openframe", label: "OpenFrame" },
|
|
2817
|
-
{ key: "slack", label: "Slack" },
|
|
2818
|
-
{ key: "hubspot", label: "HubSpot" },
|
|
2819
|
-
{ key: "clickup", label: "ClickUp" },
|
|
2820
|
-
{ key: "github", label: "GitHub" },
|
|
2821
|
-
{ key: "linkedin", label: "LinkedIn" },
|
|
2822
|
-
{ key: "twitter", label: "Twitter (X)" },
|
|
2823
|
-
{ key: "twitter-x", label: "X" },
|
|
2824
|
-
{ key: "facebook", label: "Facebook" },
|
|
2825
|
-
{ key: "instagram", label: "Instagram" },
|
|
2826
|
-
{ key: "youtube", label: "YouTube" },
|
|
2827
|
-
{ key: "discord", label: "Discord" },
|
|
2828
|
-
{ key: "figma", label: "Figma" },
|
|
2829
|
-
{ key: "google", label: "Google" },
|
|
2830
|
-
{ key: "apple", label: "Apple" },
|
|
2831
|
-
{ key: "windows", label: "Windows" },
|
|
2832
|
-
{ key: "android", label: "Android" },
|
|
2833
|
-
{ key: "openai-logo", label: "OpenAI" },
|
|
2834
|
-
{ key: "anthropic-logo", label: "Anthropic" },
|
|
2835
|
-
// Content & docs
|
|
2836
|
-
{ key: "newspaper", label: "Newspaper" },
|
|
2837
|
-
{ key: "book", label: "Book" },
|
|
2838
|
-
{ key: "file", label: "File" },
|
|
2839
|
-
{ key: "file-text", label: "Document" },
|
|
2840
|
-
{ key: "file-code", label: "Code file" },
|
|
2841
|
-
{ key: "file-chart-bar", label: "Report" },
|
|
2842
|
-
{ key: "file-dollar", label: "Invoice file" },
|
|
2843
|
-
{ key: "folder", label: "Folder" },
|
|
2844
|
-
{ key: "folder-open", label: "Folder open" },
|
|
2845
|
-
{ key: "clipboard", label: "Clipboard" },
|
|
2846
|
-
{ key: "clipboard-list", label: "Checklist" },
|
|
2847
|
-
{ key: "clipboard-check", label: "Clipboard check" },
|
|
2848
|
-
{ key: "memo", label: "Memo" },
|
|
2849
|
-
{ key: "paperclip", label: "Attachment" },
|
|
2850
|
-
{ key: "copy-01", label: "Copy" },
|
|
2851
|
-
{ key: "files", label: "Files" },
|
|
2852
|
-
{ key: "box-archive", label: "Box" },
|
|
2853
|
-
{ key: "parcel-01", label: "Parcel" },
|
|
2854
|
-
// Media
|
|
2855
|
-
{ key: "video", label: "Video" },
|
|
2856
|
-
{ key: "headphones", label: "Podcast / audio" },
|
|
2857
|
-
{ key: "podcast", label: "Podcast" },
|
|
2858
|
-
{ key: "mic", label: "Microphone" },
|
|
2859
|
-
{ key: "music-note-01", label: "Music" },
|
|
2860
|
-
{ key: "camera", label: "Camera" },
|
|
2861
|
-
{ key: "image", label: "Image" },
|
|
2862
|
-
{ key: "film-hr", label: "Film" },
|
|
2863
|
-
{ key: "play", label: "Play" },
|
|
2864
|
-
// Date & time
|
|
2865
|
-
{ key: "calendar", label: "Calendar" },
|
|
2866
|
-
{ key: "calendar-check", label: "Calendar check" },
|
|
2867
|
-
{ key: "clock", label: "Clock" },
|
|
2868
|
-
{ key: "alarm", label: "Alarm" },
|
|
2869
|
-
{ key: "stopwatch", label: "Stopwatch" },
|
|
2870
|
-
{ key: "timer", label: "Timer" },
|
|
2871
|
-
{ key: "hourglass", label: "Hourglass" },
|
|
2872
|
-
// Places & business
|
|
2873
|
-
{ key: "briefcase", label: "Briefcase" },
|
|
2874
|
-
{ key: "graduation-cap", label: "Education" },
|
|
2875
|
-
{ key: "building", label: "Building" },
|
|
2876
|
-
{ key: "buildings", label: "Buildings" },
|
|
2877
|
-
{ key: "hospital", label: "Hospital" },
|
|
2878
|
-
{ key: "school", label: "School" },
|
|
2879
|
-
{ key: "warehouse", label: "Warehouse" },
|
|
2880
|
-
{ key: "shop", label: "Shop" },
|
|
2881
|
-
// Communication
|
|
2882
|
-
{ key: "search", label: "Search" },
|
|
2883
|
-
{ key: "chats", label: "Chat" },
|
|
2884
|
-
{ key: "message-text", label: "Message" },
|
|
2885
|
-
{ key: "messages", label: "Messages" },
|
|
2886
|
-
{ key: "email", label: "Email" },
|
|
2887
|
-
{ key: "inbox", label: "Inbox" },
|
|
2888
|
-
{ key: "send-01", label: "Send" },
|
|
2889
|
-
{ key: "at-sign", label: "Mention" },
|
|
2890
|
-
{ key: "bell", label: "Notifications" },
|
|
2891
|
-
{ key: "megaphone-01", label: "Announcement" },
|
|
2892
|
-
// Charts & analytics
|
|
2893
|
-
{ key: "chart-pie", label: "Pie chart" },
|
|
2894
|
-
{ key: "chart-donut", label: "Donut chart" },
|
|
2895
|
-
{ key: "chart-bar-01-ver", label: "Bar chart" },
|
|
2896
|
-
{ key: "chart-line-up", label: "Line chart" },
|
|
2897
|
-
{ key: "trend-up", label: "Trend up" },
|
|
2898
|
-
{ key: "trend-down", label: "Trend down" },
|
|
2899
|
-
{ key: "presentation", label: "Presentation" },
|
|
2900
|
-
{ key: "analysis", label: "Analysis" },
|
|
2901
|
-
{ key: "activity", label: "Activity" },
|
|
2902
|
-
{ key: "network", label: "Network" },
|
|
2903
|
-
// Finance
|
|
2904
|
-
{ key: "bank", label: "Bank" },
|
|
2905
|
-
{ key: "money-bill-dollar", label: "Money" },
|
|
2906
|
-
{ key: "money-bill", label: "Bill" },
|
|
2907
|
-
{ key: "coins", label: "Coins" },
|
|
2908
|
-
{ key: "coin", label: "Coin" },
|
|
2909
|
-
{ key: "coins-exchange-currency", label: "Currency exchange" },
|
|
2910
|
-
{ key: "piggy-bank", label: "Savings" },
|
|
2911
|
-
{ key: "wallet-01", label: "Wallet" },
|
|
2912
|
-
{ key: "credit-card", label: "Credit card" },
|
|
2913
|
-
{ key: "hand-coin", label: "Hand coin" },
|
|
2914
|
-
{ key: "dollar", label: "Dollar" },
|
|
2915
|
-
{ key: "dollar-circle", label: "Dollar circle" },
|
|
2916
|
-
{ key: "euro", label: "Euro" },
|
|
2917
|
-
{ key: "bitcoin", label: "Bitcoin" },
|
|
2918
|
-
{ key: "percent", label: "Percent" },
|
|
2919
|
-
{ key: "receipt-01", label: "Receipt" },
|
|
2920
|
-
{ key: "badge-dollar", label: "Price badge" },
|
|
2921
|
-
{ key: "sack", label: "Money sack" },
|
|
2922
|
-
// Security
|
|
2923
|
-
{ key: "shield", label: "Shield" },
|
|
2924
|
-
{ key: "shield-check", label: "Shield check" },
|
|
2925
|
-
{ key: "lock", label: "Lock" },
|
|
2926
|
-
{ key: "unlock", label: "Unlock" },
|
|
2927
|
-
{ key: "key", label: "Key" },
|
|
2928
|
-
{ key: "fingerprint", label: "Fingerprint" },
|
|
2929
|
-
{ key: "scan", label: "Scan" },
|
|
2930
|
-
// People
|
|
2931
|
-
{ key: "user", label: "User" },
|
|
2932
|
-
{ key: "users", label: "Users" },
|
|
2933
|
-
{ key: "users-group", label: "User group" },
|
|
2934
|
-
{ key: "user-check", label: "User check" },
|
|
2935
|
-
{ key: "id-card", label: "ID card" },
|
|
2936
|
-
{ key: "avatar-circle", label: "Avatar" },
|
|
2937
|
-
// Devices & infra
|
|
2938
|
-
{ key: "laptop", label: "Laptop" },
|
|
2939
|
-
{ key: "monitor", label: "Monitor" },
|
|
2940
|
-
{ key: "mobile-phone", label: "Phone" },
|
|
2941
|
-
{ key: "hard-drive", label: "Hard drive" },
|
|
2942
|
-
{ key: "hard-drives", label: "Storage" },
|
|
2943
|
-
{ key: "cloud", label: "Cloud" },
|
|
2944
|
-
{ key: "wifi", label: "Wi-Fi" },
|
|
2945
|
-
{ key: "printer", label: "Printer" },
|
|
2946
|
-
{ key: "keyboard", label: "Keyboard" },
|
|
2947
|
-
{ key: "microchip", label: "Chip" },
|
|
2948
|
-
{ key: "microchip-ai", label: "AI chip" },
|
|
2949
|
-
{ key: "power", label: "Power" },
|
|
2950
|
-
// Code & dev
|
|
2951
|
-
{ key: "bracket-curly", label: "Code" },
|
|
2952
|
-
{ key: "terminal", label: "Terminal" },
|
|
2953
|
-
{ key: "code", label: "Code block" },
|
|
2954
|
-
{ key: "bug", label: "Bug" },
|
|
2955
|
-
{ key: "package", label: "Package" },
|
|
2956
|
-
{ key: "database", label: "Database" },
|
|
2957
|
-
{ key: "browser", label: "Browser" },
|
|
2958
|
-
{ key: "puzzle-01", label: "Plugin" },
|
|
2959
|
-
{ key: "coding-branch", label: "Branch" },
|
|
2960
|
-
{ key: "coding-commit", label: "Commit" },
|
|
2961
|
-
{ key: "coding-pull-request", label: "Pull request" },
|
|
2962
|
-
{ key: "robot", label: "Bot" },
|
|
2963
|
-
{ key: "blockchain", label: "Blockchain" },
|
|
2964
|
-
// General & status
|
|
2965
|
-
{ key: "layers", label: "Layers" },
|
|
2966
|
-
{ key: "settings-01", label: "Settings" },
|
|
2967
|
-
{ key: "home", label: "Home" },
|
|
2968
|
-
{ key: "eye", label: "View" },
|
|
2969
|
-
{ key: "link-01", label: "Link" },
|
|
2970
|
-
{ key: "download-01", label: "Download" },
|
|
2971
|
-
{ key: "upload-01", label: "Upload" },
|
|
2972
|
-
{ key: "trash", label: "Delete" },
|
|
2973
|
-
{ key: "share", label: "Share" },
|
|
2974
|
-
{ key: "life-buoy", label: "Support" },
|
|
2975
|
-
{ key: "rocket", label: "Rocket" },
|
|
2976
|
-
{ key: "compass", label: "Compass" },
|
|
2977
|
-
{ key: "star", label: "Star" },
|
|
2978
|
-
{ key: "crown", label: "Crown" },
|
|
2979
|
-
{ key: "gift", label: "Gift" },
|
|
2980
|
-
{ key: "ticket", label: "Ticket" },
|
|
2981
|
-
{ key: "tag", label: "Tag" },
|
|
2982
|
-
{ key: "cart", label: "Cart" },
|
|
2983
|
-
{ key: "thumbs-up", label: "Thumbs up" },
|
|
2984
|
-
{ key: "flag-01", label: "Flag" },
|
|
2985
|
-
{ key: "bookmark", label: "Bookmark" },
|
|
2986
|
-
{ key: "pin", label: "Pin" },
|
|
2987
|
-
{ key: "check-circle", label: "Check" },
|
|
2988
|
-
{ key: "check-square", label: "Checkbox" },
|
|
2989
|
-
{ key: "info-circle", label: "Info" },
|
|
2990
|
-
{ key: "info", label: "Info alt" },
|
|
2991
|
-
{ key: "question-circle", label: "Help" },
|
|
2992
|
-
{ key: "alert-triangle", label: "Warning" },
|
|
2993
|
-
{ key: "hash", label: "Hashtag" },
|
|
2994
|
-
{ key: "pencil", label: "Edit" },
|
|
2995
|
-
{ key: "lightning", label: "Lightning" },
|
|
2996
|
-
{ key: "globe-01", label: "Globe" },
|
|
2997
|
-
{ key: "scale-balanced", label: "Balance" },
|
|
2998
|
-
{ key: "certified-01", label: "Certified" }
|
|
2999
|
-
];
|
|
3000
|
-
|
|
3001
|
-
// src/assets/fae-avatar.ts
|
|
3002
|
-
var FAE_AVATAR_DATA_URI = "data:image/png;base64,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";
|
|
3003
|
-
|
|
3004
|
-
// src/components/agent-mark.tsx
|
|
3005
|
-
import { jsx as jsx15 } from "react/jsx-runtime";
|
|
3006
|
-
function AgentMark({ agent, className = "", faeAvatarSrc = FAE_AVATAR_DATA_URI }) {
|
|
3007
|
-
return agent === "mingo" ? /* @__PURE__ */ jsx15(MingoIcon, { className, "aria-hidden": "true", focusable: "false" }) : /* @__PURE__ */ jsx15("img", { src: faeAvatarSrc, alt: "", className });
|
|
3008
|
-
}
|
|
3009
|
-
|
|
3010
1444
|
// src/utils/image-proxy.ts
|
|
3011
1445
|
function getProxiedImageUrl(imageUrl, options) {
|
|
3012
1446
|
if (!imageUrl) return null;
|
|
@@ -3059,42 +1493,6 @@ function skipsImageOptimizer(url) {
|
|
|
3059
1493
|
}
|
|
3060
1494
|
}
|
|
3061
1495
|
|
|
3062
|
-
// src/components/icon-display.tsx
|
|
3063
|
-
import { jsx as jsx16 } from "react/jsx-runtime";
|
|
3064
|
-
var BRAND_MARK_NAMES = /* @__PURE__ */ new Set(["fae", "mingo"]);
|
|
3065
|
-
function EntityIcon({
|
|
3066
|
-
icon,
|
|
3067
|
-
size: size2 = 20,
|
|
3068
|
-
className
|
|
3069
|
-
}) {
|
|
3070
|
-
if (icon?.url) {
|
|
3071
|
-
return /* @__PURE__ */ jsx16(
|
|
3072
|
-
next_image_default,
|
|
3073
|
-
{
|
|
3074
|
-
src: icon.url,
|
|
3075
|
-
alt: "",
|
|
3076
|
-
width: size2,
|
|
3077
|
-
height: size2,
|
|
3078
|
-
className,
|
|
3079
|
-
style: { objectFit: "contain" },
|
|
3080
|
-
unoptimized: true
|
|
3081
|
-
}
|
|
3082
|
-
);
|
|
3083
|
-
}
|
|
3084
|
-
if (icon?.name && BRAND_MARK_NAMES.has(icon.name)) {
|
|
3085
|
-
return /* @__PURE__ */ jsx16(
|
|
3086
|
-
"span",
|
|
3087
|
-
{
|
|
3088
|
-
className: `inline-flex${className ? ` ${className}` : ""}`,
|
|
3089
|
-
style: className ? void 0 : { width: size2, height: size2 },
|
|
3090
|
-
children: /* @__PURE__ */ jsx16(AgentMark, { agent: icon.name, className: "h-full w-full" })
|
|
3091
|
-
}
|
|
3092
|
-
);
|
|
3093
|
-
}
|
|
3094
|
-
const Glyph = resolveIcon(icon?.name ?? void 0);
|
|
3095
|
-
return /* @__PURE__ */ jsx16(Glyph, { size: size2, className, ...icon?.props ?? {} });
|
|
3096
|
-
}
|
|
3097
|
-
|
|
3098
1496
|
// src/utils/escape-regexp.ts
|
|
3099
1497
|
function escapeRegExp(value) {
|
|
3100
1498
|
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
@@ -3149,7 +1547,7 @@ function buildAnchorProps(href, isNewTab) {
|
|
|
3149
1547
|
}
|
|
3150
1548
|
|
|
3151
1549
|
// src/components/chat/entity-cards/entity-author-card.tsx
|
|
3152
|
-
import { jsx as
|
|
1550
|
+
import { jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
3153
1551
|
var EMPTY_AUTHOR_PLACEHOLDER = {
|
|
3154
1552
|
full_name: "\u2014",
|
|
3155
1553
|
avatar_url: null,
|
|
@@ -3161,9 +1559,9 @@ function EntityMetadataValueCell({
|
|
|
3161
1559
|
className,
|
|
3162
1560
|
uppercase = true
|
|
3163
1561
|
}) {
|
|
3164
|
-
return /* @__PURE__ */
|
|
3165
|
-
typeof value === "string" ? /* @__PURE__ */
|
|
3166
|
-
/* @__PURE__ */
|
|
1562
|
+
return /* @__PURE__ */ jsx13("div", { className: `flex flex-col gap-3 p-4 ${className ?? ""}`, children: /* @__PURE__ */ jsxs8("div", { className: "flex flex-col gap-0", children: [
|
|
1563
|
+
typeof value === "string" ? /* @__PURE__ */ jsx13("p", { className: "text-ods-text-primary text-h4", children: uppercase ? value.toLocaleUpperCase() : value }) : /* @__PURE__ */ jsx13("div", { className: "flex min-h-6 items-center", children: value }),
|
|
1564
|
+
/* @__PURE__ */ jsx13("p", { className: "text-ods-text-secondary text-h6", children: label })
|
|
3167
1565
|
] }) });
|
|
3168
1566
|
}
|
|
3169
1567
|
function EntityMetadataAuthorCell({
|
|
@@ -3174,8 +1572,8 @@ function EntityMetadataAuthorCell({
|
|
|
3174
1572
|
}) {
|
|
3175
1573
|
const trimmedName = typeof author.full_name === "string" ? author.full_name.trim() : "";
|
|
3176
1574
|
const fullName = trimmedName || "Unknown Author";
|
|
3177
|
-
return /* @__PURE__ */
|
|
3178
|
-
/* @__PURE__ */
|
|
1575
|
+
return /* @__PURE__ */ jsxs8("div", { className: `flex items-center gap-3 p-4 ${className ?? ""}`, children: [
|
|
1576
|
+
/* @__PURE__ */ jsx13(
|
|
3179
1577
|
SquareAvatar,
|
|
3180
1578
|
{
|
|
3181
1579
|
src: author.avatar_url || "",
|
|
@@ -3185,9 +1583,9 @@ function EntityMetadataAuthorCell({
|
|
|
3185
1583
|
variant: "round"
|
|
3186
1584
|
}
|
|
3187
1585
|
),
|
|
3188
|
-
/* @__PURE__ */
|
|
3189
|
-
/* @__PURE__ */
|
|
3190
|
-
/* @__PURE__ */
|
|
1586
|
+
/* @__PURE__ */ jsxs8("div", { className: "flex min-w-0 flex-1 flex-col gap-0", children: [
|
|
1587
|
+
/* @__PURE__ */ jsx13("p", { className: "truncate text-ods-text-primary text-h3", title: fullName, children: authorHref && trimmedName ? /* @__PURE__ */ jsx13(next_link_default, { href: authorHref, className: "transition-colors hover:text-ods-accent", children: fullName }) : fullName }),
|
|
1588
|
+
/* @__PURE__ */ jsx13("p", { className: "text-ods-text-secondary text-h6", children: author.job_title || roleLabel })
|
|
3191
1589
|
] })
|
|
3192
1590
|
] });
|
|
3193
1591
|
}
|
|
@@ -3211,12 +1609,12 @@ function EntityAuthorCard({
|
|
|
3211
1609
|
const totalCells = extras.length + (showDateCell ? 1 : 0) + 1;
|
|
3212
1610
|
const gridColsClass = totalCells >= 4 ? "md:grid-cols-4" : totalCells === 3 ? "md:grid-cols-3" : totalCells === 2 ? "md:grid-cols-2" : "md:grid-cols-1";
|
|
3213
1611
|
const dividerClass = "border-b md:border-b-0 md:border-r border-ods-border";
|
|
3214
|
-
return /* @__PURE__ */
|
|
1612
|
+
return /* @__PURE__ */ jsxs8(
|
|
3215
1613
|
"div",
|
|
3216
1614
|
{
|
|
3217
1615
|
className: `grid grid-cols-1 ${gridColsClass} w-full overflow-hidden rounded-md border border-ods-border ${className ?? ""}`,
|
|
3218
1616
|
children: [
|
|
3219
|
-
extras.map((cell, i) => /* @__PURE__ */
|
|
1617
|
+
extras.map((cell, i) => /* @__PURE__ */ jsx13(
|
|
3220
1618
|
EntityMetadataValueCell,
|
|
3221
1619
|
{
|
|
3222
1620
|
value: cell.value,
|
|
@@ -3226,18 +1624,18 @@ function EntityAuthorCard({
|
|
|
3226
1624
|
},
|
|
3227
1625
|
`${cell.label}-${i}`
|
|
3228
1626
|
)),
|
|
3229
|
-
showDateCell && /* @__PURE__ */
|
|
3230
|
-
/* @__PURE__ */
|
|
1627
|
+
showDateCell && /* @__PURE__ */ jsx13(EntityMetadataValueCell, { value: dateLabel, label: publishedLabel, uppercase: false, className: dividerClass }),
|
|
1628
|
+
/* @__PURE__ */ jsx13(EntityMetadataAuthorCell, { author: effectiveAuthor, roleLabel, authorHref })
|
|
3231
1629
|
]
|
|
3232
1630
|
}
|
|
3233
1631
|
);
|
|
3234
1632
|
}
|
|
3235
1633
|
|
|
3236
1634
|
// src/components/chat/entity-cards/blog-image-placeholder.tsx
|
|
3237
|
-
import { jsx as
|
|
1635
|
+
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
3238
1636
|
function BlogImagePlaceholder({ imageUrl, title, className = "" }) {
|
|
3239
1637
|
if (!imageUrl) return null;
|
|
3240
|
-
return /* @__PURE__ */
|
|
1638
|
+
return /* @__PURE__ */ jsx14("span", { className: `relative block h-full w-full overflow-hidden bg-ods-bg ${className}`, children: /* @__PURE__ */ jsx14(
|
|
3241
1639
|
next_image_default,
|
|
3242
1640
|
{
|
|
3243
1641
|
src: imageUrl,
|
|
@@ -3256,7 +1654,7 @@ function BlogImagePlaceholder({ imageUrl, title, className = "" }) {
|
|
|
3256
1654
|
}
|
|
3257
1655
|
|
|
3258
1656
|
// src/components/chat/entity-cards/content-card-frame.tsx
|
|
3259
|
-
import { jsx as
|
|
1657
|
+
import { jsx as jsx15 } from "react/jsx-runtime";
|
|
3260
1658
|
var CONTENT_CARD_FRAME_CLASS = cn(
|
|
3261
1659
|
"group isolate overflow-hidden rounded-2xl",
|
|
3262
1660
|
"border border-ods-border bg-transparent",
|
|
@@ -3265,15 +1663,15 @@ var CONTENT_CARD_FRAME_CLASS = cn(
|
|
|
3265
1663
|
);
|
|
3266
1664
|
var CONTENT_CARD_SKELETON_FRAME_CLASS = "overflow-hidden rounded-2xl border border-ods-border bg-transparent";
|
|
3267
1665
|
function ContentCardFrame({ as: Tag2 = "article", className, children, ...rest }) {
|
|
3268
|
-
return /* @__PURE__ */
|
|
1666
|
+
return /* @__PURE__ */ jsx15(Tag2, { className: cn(CONTENT_CARD_FRAME_CLASS, Tag2 === "a" && "no-underline", className), ...rest, children });
|
|
3269
1667
|
}
|
|
3270
1668
|
|
|
3271
1669
|
// src/components/chat/entity-cards/use-cover-image-fallback.ts
|
|
3272
|
-
import { useCallback as
|
|
1670
|
+
import { useCallback as useCallback2, useState as useState3 } from "react";
|
|
3273
1671
|
function useCoverImageFallback(imageUrl, placeholderUrl) {
|
|
3274
|
-
const [failed, setFailed] =
|
|
1672
|
+
const [failed, setFailed] = useState3(() => /* @__PURE__ */ new Set());
|
|
3275
1673
|
const src = imageUrl && !failed.has(imageUrl) ? imageUrl : placeholderUrl && !failed.has(placeholderUrl) ? placeholderUrl : null;
|
|
3276
|
-
const onError =
|
|
1674
|
+
const onError = useCallback2(() => {
|
|
3277
1675
|
if (!src) return;
|
|
3278
1676
|
setFailed((prev) => new Set(prev).add(src));
|
|
3279
1677
|
}, [src]);
|
|
@@ -3285,8 +1683,8 @@ var hideOnError = (e) => {
|
|
|
3285
1683
|
};
|
|
3286
1684
|
|
|
3287
1685
|
// src/components/chat/entity-cards/entity-portrait-card.tsx
|
|
3288
|
-
import { useState as
|
|
3289
|
-
import { jsx as
|
|
1686
|
+
import { useState as useState4 } from "react";
|
|
1687
|
+
import { jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
3290
1688
|
var MIN_WIDE_RATIO = 1.3;
|
|
3291
1689
|
function EntityPortraitCard({
|
|
3292
1690
|
href,
|
|
@@ -3302,7 +1700,7 @@ function EntityPortraitCard({
|
|
|
3302
1700
|
className
|
|
3303
1701
|
}) {
|
|
3304
1702
|
const { src, onError: onMediaError } = useCoverImageFallback(imageUrl, placeholderUrl);
|
|
3305
|
-
const [measured, setMeasured] =
|
|
1703
|
+
const [measured, setMeasured] = useState4(null);
|
|
3306
1704
|
const isWide = measured?.src === src ? measured.isWide : null;
|
|
3307
1705
|
const onMediaLoad = (e) => {
|
|
3308
1706
|
const img = e.currentTarget;
|
|
@@ -3311,13 +1709,13 @@ function EntityPortraitCard({
|
|
|
3311
1709
|
}
|
|
3312
1710
|
};
|
|
3313
1711
|
const edgeColor = useImageEdgeColor(isWide === false ? src : null, "var(--color-bg-surface)");
|
|
3314
|
-
return /* @__PURE__ */
|
|
3315
|
-
/* @__PURE__ */
|
|
1712
|
+
return /* @__PURE__ */ jsx16("a", { href, target, rel, className: cn("block h-full", className), "aria-label": `Open ${title}`, children: /* @__PURE__ */ jsxs9(Card, { className: cn(CONTENT_CARD_FRAME_CLASS, "flex h-full flex-col gap-6 p-6"), children: [
|
|
1713
|
+
/* @__PURE__ */ jsx16(
|
|
3316
1714
|
"div",
|
|
3317
1715
|
{
|
|
3318
1716
|
className: "relative flex aspect-[1200/630] w-full shrink-0 items-center justify-center overflow-hidden rounded-sm bg-ods-bg transition-colors duration-300",
|
|
3319
1717
|
style: isWide === false ? { backgroundColor: edgeColor } : void 0,
|
|
3320
|
-
children: src && /* @__PURE__ */
|
|
1718
|
+
children: src && /* @__PURE__ */ jsx16(
|
|
3321
1719
|
next_image_default,
|
|
3322
1720
|
{
|
|
3323
1721
|
src,
|
|
@@ -3332,8 +1730,8 @@ function EntityPortraitCard({
|
|
|
3332
1730
|
)
|
|
3333
1731
|
}
|
|
3334
1732
|
),
|
|
3335
|
-
/* @__PURE__ */
|
|
3336
|
-
typeLabel && /* @__PURE__ */
|
|
1733
|
+
/* @__PURE__ */ jsxs9("div", { className: "flex h-[72px] shrink-0 flex-col justify-center gap-1.5", children: [
|
|
1734
|
+
typeLabel && /* @__PURE__ */ jsx16(
|
|
3337
1735
|
StatusBadge,
|
|
3338
1736
|
{
|
|
3339
1737
|
variant: "button",
|
|
@@ -3343,7 +1741,7 @@ function EntityPortraitCard({
|
|
|
3343
1741
|
className: "self-start"
|
|
3344
1742
|
}
|
|
3345
1743
|
),
|
|
3346
|
-
/* @__PURE__ */
|
|
1744
|
+
/* @__PURE__ */ jsx16(
|
|
3347
1745
|
"h3",
|
|
3348
1746
|
{
|
|
3349
1747
|
className: cn(
|
|
@@ -3355,9 +1753,9 @@ function EntityPortraitCard({
|
|
|
3355
1753
|
}
|
|
3356
1754
|
)
|
|
3357
1755
|
] }),
|
|
3358
|
-
/* @__PURE__ */
|
|
3359
|
-
/* @__PURE__ */
|
|
3360
|
-
person.avatarUrl ? /* @__PURE__ */
|
|
1756
|
+
/* @__PURE__ */ jsx16("div", { className: "flex h-[60px] shrink-0 items-center", children: person && /* @__PURE__ */ jsxs9("div", { className: "flex w-full min-w-0 items-center gap-3", children: [
|
|
1757
|
+
/* @__PURE__ */ jsxs9("div", { className: "relative h-12 w-12 shrink-0", children: [
|
|
1758
|
+
person.avatarUrl ? /* @__PURE__ */ jsx16(
|
|
3361
1759
|
next_image_default,
|
|
3362
1760
|
{
|
|
3363
1761
|
src: person.avatarUrl,
|
|
@@ -3367,8 +1765,8 @@ function EntityPortraitCard({
|
|
|
3367
1765
|
height: 48,
|
|
3368
1766
|
unoptimized: true
|
|
3369
1767
|
}
|
|
3370
|
-
) : /* @__PURE__ */
|
|
3371
|
-
person.iconOverlayUrl && /* @__PURE__ */
|
|
1768
|
+
) : /* @__PURE__ */ jsx16("div", { className: "flex h-12 w-12 items-center justify-center rounded-full border border-ods-border bg-ods-bg", children: /* @__PURE__ */ jsx16("span", { className: "text-ods-text-secondary text-h4", children: person.name.charAt(0).toUpperCase() }) }),
|
|
1769
|
+
person.iconOverlayUrl && /* @__PURE__ */ jsx16("div", { className: "absolute -bottom-1 -right-1 flex h-6 w-6 items-center justify-center overflow-hidden rounded-full bg-ods-text-primary ring-1 ring-ods-bg", children: /* @__PURE__ */ jsx16(
|
|
3372
1770
|
next_image_default,
|
|
3373
1771
|
{
|
|
3374
1772
|
src: person.iconOverlayUrl,
|
|
@@ -3380,26 +1778,26 @@ function EntityPortraitCard({
|
|
|
3380
1778
|
}
|
|
3381
1779
|
) })
|
|
3382
1780
|
] }),
|
|
3383
|
-
/* @__PURE__ */
|
|
3384
|
-
/* @__PURE__ */
|
|
3385
|
-
person.subtitle && /* @__PURE__ */
|
|
1781
|
+
/* @__PURE__ */ jsxs9("div", { className: "flex min-w-0 flex-col", children: [
|
|
1782
|
+
/* @__PURE__ */ jsx16("span", { className: "truncate font-bold text-ods-text-primary text-h6", children: person.name }),
|
|
1783
|
+
person.subtitle && /* @__PURE__ */ jsx16("span", { className: "truncate text-ods-text-secondary text-h6", children: person.subtitle })
|
|
3386
1784
|
] })
|
|
3387
1785
|
] }) })
|
|
3388
1786
|
] }) });
|
|
3389
1787
|
}
|
|
3390
1788
|
|
|
3391
1789
|
// src/components/features/platform-badge.tsx
|
|
3392
|
-
import { Globe
|
|
1790
|
+
import { Globe } from "lucide-react";
|
|
3393
1791
|
|
|
3394
1792
|
// src/components/flamingo-logo.tsx
|
|
3395
|
-
import { jsx as
|
|
3396
|
-
function
|
|
1793
|
+
import { jsx as jsx17 } from "react/jsx-runtime";
|
|
1794
|
+
function FlamingoLogo({
|
|
3397
1795
|
className = "",
|
|
3398
1796
|
color = "var(--ods-flamingo-pink-base)",
|
|
3399
1797
|
size: size2 = 120,
|
|
3400
1798
|
...props
|
|
3401
1799
|
}) {
|
|
3402
|
-
return /* @__PURE__ */
|
|
1800
|
+
return /* @__PURE__ */ jsx17(
|
|
3403
1801
|
"svg",
|
|
3404
1802
|
{
|
|
3405
1803
|
width: size2,
|
|
@@ -3408,7 +1806,7 @@ function FlamingoLogo2({
|
|
|
3408
1806
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3409
1807
|
className,
|
|
3410
1808
|
...props,
|
|
3411
|
-
children: /* @__PURE__ */
|
|
1809
|
+
children: /* @__PURE__ */ jsx17(
|
|
3412
1810
|
"path",
|
|
3413
1811
|
{
|
|
3414
1812
|
fillRule: "evenodd",
|
|
@@ -3422,15 +1820,15 @@ function FlamingoLogo2({
|
|
|
3422
1820
|
}
|
|
3423
1821
|
|
|
3424
1822
|
// src/components/openmsp-logo.tsx
|
|
3425
|
-
import { jsx as
|
|
3426
|
-
function
|
|
1823
|
+
import { jsx as jsx18, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
1824
|
+
function OpenmspLogo({
|
|
3427
1825
|
className = "",
|
|
3428
1826
|
frontBubbleColor = "#000000",
|
|
3429
1827
|
innerFrontBubbleColor = "#ffffff",
|
|
3430
1828
|
backBubbleColor = "#ffffff",
|
|
3431
1829
|
...props
|
|
3432
1830
|
}) {
|
|
3433
|
-
return /* @__PURE__ */
|
|
1831
|
+
return /* @__PURE__ */ jsxs10(
|
|
3434
1832
|
"svg",
|
|
3435
1833
|
{
|
|
3436
1834
|
width: "97",
|
|
@@ -3441,35 +1839,35 @@ function OpenmspLogo2({
|
|
|
3441
1839
|
className,
|
|
3442
1840
|
...props,
|
|
3443
1841
|
children: [
|
|
3444
|
-
/* @__PURE__ */
|
|
1842
|
+
/* @__PURE__ */ jsx18(
|
|
3445
1843
|
"path",
|
|
3446
1844
|
{
|
|
3447
1845
|
d: "M73.933 0C75.7003 0 77.133 1.43269 77.133 3.2V54.4C77.133 56.1673 75.7003 57.6 73.933 57.6H3.53301C1.7657 57.6 0.333008 56.1673 0.333008 54.4V3.2C0.333008 1.43269 1.7657 0 3.53301 0H73.933ZM10.1076 47.6494C10.1076 48.0912 10.4658 48.4494 10.9076 48.4494H66.5584C67.0002 48.4494 67.3584 48.0912 67.3584 47.6494V9.95059C67.3584 9.50876 67.0002 9.15059 66.5584 9.15059H10.9076C10.4658 9.15059 10.1076 9.50876 10.1076 9.95059V47.6494Z",
|
|
3448
1846
|
fill: backBubbleColor
|
|
3449
1847
|
}
|
|
3450
1848
|
),
|
|
3451
|
-
/* @__PURE__ */
|
|
1849
|
+
/* @__PURE__ */ jsx18(
|
|
3452
1850
|
"path",
|
|
3453
1851
|
{
|
|
3454
1852
|
d: "M19.5332 22.4C19.5332 20.6326 20.9659 19.2 22.7332 19.2H93.1332C94.9005 19.2 96.3332 20.6326 96.3332 22.4V76.8C96.3332 78.2222 95.3945 79.4737 94.0292 79.8719L39.7572 95.7013C39.2452 95.8506 38.7332 95.4666 38.7332 94.9333V80C38.7332 79.5581 38.375 79.2 37.9332 79.2H22.7332C20.9659 79.2 19.5332 77.7673 19.5332 76V22.4Z",
|
|
3455
1853
|
fill: innerFrontBubbleColor
|
|
3456
1854
|
}
|
|
3457
1855
|
),
|
|
3458
|
-
/* @__PURE__ */
|
|
1856
|
+
/* @__PURE__ */ jsx18(
|
|
3459
1857
|
"path",
|
|
3460
1858
|
{
|
|
3461
1859
|
d: "M93.1332 19.2C94.9005 19.2 96.3332 20.6326 96.3332 22.4V76.8C96.3332 78.2222 95.3945 79.4737 94.0292 79.8719L39.7572 95.7013C39.2452 95.8506 38.7332 95.4666 38.7332 94.9333V80C38.7332 79.5581 38.375 79.2 37.9332 79.2H22.7332C20.9659 79.2 19.5332 77.7673 19.5332 76V22.4C19.5332 20.6326 20.9659 19.2 22.7332 19.2H93.1332ZM48.3377 82.1286C48.3355 82.6633 48.8484 83.0497 49.3617 82.9L86.1572 72.1672C86.4985 72.0676 86.7332 71.7547 86.7332 71.3992V29.6C86.7332 29.1581 86.375 28.8 85.9332 28.8H29.9332C29.4914 28.8 29.1332 29.1581 29.1332 29.6V68.8C29.1332 69.2418 29.4914 69.6 29.9332 69.6H47.5869C48.03 69.6 48.3887 69.9602 48.3869 70.4033L48.3377 82.1286Z",
|
|
3462
1860
|
fill: frontBubbleColor
|
|
3463
1861
|
}
|
|
3464
1862
|
),
|
|
3465
|
-
/* @__PURE__ */
|
|
1863
|
+
/* @__PURE__ */ jsx18("circle", { cx: "45.1334", cy: "44.8", r: "6.4", fill: frontBubbleColor })
|
|
3466
1864
|
]
|
|
3467
1865
|
}
|
|
3468
1866
|
);
|
|
3469
1867
|
}
|
|
3470
1868
|
|
|
3471
1869
|
// src/components/features/platform-badge.tsx
|
|
3472
|
-
import { jsx as
|
|
1870
|
+
import { jsx as jsx19, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
3473
1871
|
var sizeClasses = {
|
|
3474
1872
|
xs: {
|
|
3475
1873
|
container: "gap-1 px-1.5 py-0.5",
|
|
@@ -3492,8 +1890,8 @@ var PlatformIcon = ({ platform, className }) => {
|
|
|
3492
1890
|
const size2 = sizeMatch ? parseInt(sizeMatch[1]) * 4 : 16;
|
|
3493
1891
|
switch (platform) {
|
|
3494
1892
|
case "openmsp":
|
|
3495
|
-
return /* @__PURE__ */
|
|
3496
|
-
|
|
1893
|
+
return /* @__PURE__ */ jsx19(
|
|
1894
|
+
OpenmspLogo,
|
|
3497
1895
|
{
|
|
3498
1896
|
className,
|
|
3499
1897
|
frontBubbleColor: "currentColor",
|
|
@@ -3503,19 +1901,19 @@ var PlatformIcon = ({ platform, className }) => {
|
|
|
3503
1901
|
);
|
|
3504
1902
|
case "flamingo":
|
|
3505
1903
|
case "flamingo-teaser":
|
|
3506
|
-
return /* @__PURE__ */
|
|
1904
|
+
return /* @__PURE__ */ jsx19(FlamingoLogo, { className });
|
|
3507
1905
|
case "openframe":
|
|
3508
|
-
return /* @__PURE__ */
|
|
1906
|
+
return /* @__PURE__ */ jsx19(OpenFrameLogo, { className });
|
|
3509
1907
|
case "tmcg":
|
|
3510
|
-
return /* @__PURE__ */
|
|
1908
|
+
return /* @__PURE__ */ jsx19(MiamiCyberGangLogoFaceOnly, { size: size2, className });
|
|
3511
1909
|
case "company-hub":
|
|
3512
1910
|
case "marketing-hub":
|
|
3513
1911
|
case "product-hub":
|
|
3514
1912
|
case "revenue-hub":
|
|
3515
1913
|
case "people-hub":
|
|
3516
|
-
return /* @__PURE__ */
|
|
1914
|
+
return /* @__PURE__ */ jsx19(FlamingoLogo, { className, fill: "currentColor" });
|
|
3517
1915
|
default:
|
|
3518
|
-
return /* @__PURE__ */
|
|
1916
|
+
return /* @__PURE__ */ jsx19(Globe, { className });
|
|
3519
1917
|
}
|
|
3520
1918
|
};
|
|
3521
1919
|
function PlatformBadge({ platform, size: size2 = "sm", showLabel = true, className }) {
|
|
@@ -3524,7 +1922,7 @@ function PlatformBadge({ platform, size: size2 = "sm", showLabel = true, classNa
|
|
|
3524
1922
|
}
|
|
3525
1923
|
const sizes = sizeClasses[size2];
|
|
3526
1924
|
const colors = getPlatformBrandClasses(platform.name);
|
|
3527
|
-
return /* @__PURE__ */
|
|
1925
|
+
return /* @__PURE__ */ jsxs11(
|
|
3528
1926
|
"div",
|
|
3529
1927
|
{
|
|
3530
1928
|
className: cn(
|
|
@@ -3537,16 +1935,16 @@ function PlatformBadge({ platform, size: size2 = "sm", showLabel = true, classNa
|
|
|
3537
1935
|
className
|
|
3538
1936
|
),
|
|
3539
1937
|
children: [
|
|
3540
|
-
/* @__PURE__ */
|
|
3541
|
-
showLabel && /* @__PURE__ */
|
|
1938
|
+
/* @__PURE__ */ jsx19(PlatformIcon, { platform: platform.name, className: sizes.icon }),
|
|
1939
|
+
showLabel && /* @__PURE__ */ jsx19("span", { className: sizes.text, children: platform.display_name || platform.name })
|
|
3542
1940
|
]
|
|
3543
1941
|
}
|
|
3544
1942
|
);
|
|
3545
1943
|
}
|
|
3546
1944
|
|
|
3547
1945
|
// src/components/chat/entity-cards/admin-content-card.tsx
|
|
3548
|
-
import { useState as
|
|
3549
|
-
import { Fragment as Fragment3, jsx as
|
|
1946
|
+
import { useState as useState5 } from "react";
|
|
1947
|
+
import { Fragment as Fragment3, jsx as jsx20, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
3550
1948
|
function AdminContentCard({
|
|
3551
1949
|
imageUrl,
|
|
3552
1950
|
placeholderUrl,
|
|
@@ -3561,15 +1959,15 @@ function AdminContentCard({
|
|
|
3561
1959
|
subtitleRow = true,
|
|
3562
1960
|
className
|
|
3563
1961
|
}) {
|
|
3564
|
-
const [imageError, setImageError] =
|
|
3565
|
-
const [loadedUrl, setLoadedUrl] =
|
|
1962
|
+
const [imageError, setImageError] = useState5(false);
|
|
1963
|
+
const [loadedUrl, setLoadedUrl] = useState5(null);
|
|
3566
1964
|
const displayUrl = imageUrl && !imageError ? imageUrl : placeholderUrl;
|
|
3567
1965
|
const imageLoaded = Boolean(displayUrl) && loadedUrl === displayUrl;
|
|
3568
1966
|
const imageBgColor = useImageEdgeColor(displayUrl || null, "transparent");
|
|
3569
|
-
return /* @__PURE__ */
|
|
3570
|
-
/* @__PURE__ */
|
|
3571
|
-
!imageLoaded && /* @__PURE__ */
|
|
3572
|
-
/* @__PURE__ */
|
|
1967
|
+
return /* @__PURE__ */ jsxs12("article", { className: cn(CONTENT_CARD_FRAME_CLASS, "flex h-full flex-col", className), children: [
|
|
1968
|
+
/* @__PURE__ */ jsx20("div", { className: "relative aspect-[3/2] w-full shrink-0 overflow-hidden", style: { backgroundColor: imageBgColor }, children: displayUrl ? /* @__PURE__ */ jsxs12(Fragment3, { children: [
|
|
1969
|
+
!imageLoaded && /* @__PURE__ */ jsx20("div", { className: "absolute inset-0 animate-pulse bg-ods-border/20" }),
|
|
1970
|
+
/* @__PURE__ */ jsx20(
|
|
3573
1971
|
next_image_default,
|
|
3574
1972
|
{
|
|
3575
1973
|
src: displayUrl,
|
|
@@ -3587,13 +1985,13 @@ function AdminContentCard({
|
|
|
3587
1985
|
onError: () => setImageError(true)
|
|
3588
1986
|
}
|
|
3589
1987
|
)
|
|
3590
|
-
] }) : /* @__PURE__ */
|
|
3591
|
-
/* @__PURE__ */
|
|
3592
|
-
/* @__PURE__ */
|
|
3593
|
-
(subtitle || reserveRows && subtitleRow) && /* @__PURE__ */
|
|
3594
|
-
(summary || reserveRows) && /* @__PURE__ */
|
|
3595
|
-
(Number(platforms?.length) > 0 || badges || reserveRows) && /* @__PURE__ */
|
|
3596
|
-
platforms?.map((p) => /* @__PURE__ */
|
|
1988
|
+
] }) : /* @__PURE__ */ jsx20("div", { className: "absolute inset-0 bg-ods-bg" }) }),
|
|
1989
|
+
/* @__PURE__ */ jsxs12("div", { className: "flex flex-1 flex-col gap-3 p-5", children: [
|
|
1990
|
+
/* @__PURE__ */ jsx20("h3", { className: cn("line-clamp-2 break-words text-ods-text-primary text-h3", reserveRows && "min-h-[2lh]"), children: title }),
|
|
1991
|
+
(subtitle || reserveRows && subtitleRow) && /* @__PURE__ */ jsx20("p", { className: cn("truncate text-ods-text-secondary text-h6", reserveRows && "min-h-[1lh]"), children: subtitle }),
|
|
1992
|
+
(summary || reserveRows) && /* @__PURE__ */ jsx20("p", { className: cn("line-clamp-2 text-ods-text-secondary text-h6", reserveRows && "min-h-[2lh]"), children: summary }),
|
|
1993
|
+
(Number(platforms?.length) > 0 || badges || reserveRows) && /* @__PURE__ */ jsxs12("div", { className: cn("flex flex-wrap items-center gap-2", reserveRows && "min-h-7"), children: [
|
|
1994
|
+
platforms?.map((p) => /* @__PURE__ */ jsx20(
|
|
3597
1995
|
PlatformBadge,
|
|
3598
1996
|
{
|
|
3599
1997
|
platform: { id: p.id || p.platform_id || "", name: p.name, display_name: p.display_name || p.name },
|
|
@@ -3603,21 +2001,21 @@ function AdminContentCard({
|
|
|
3603
2001
|
)),
|
|
3604
2002
|
badges
|
|
3605
2003
|
] }),
|
|
3606
|
-
(meta || reserveRows) && /* @__PURE__ */
|
|
3607
|
-
actions && /* @__PURE__ */
|
|
2004
|
+
(meta || reserveRows) && /* @__PURE__ */ jsx20("div", { className: cn("flex items-center gap-3 text-ods-text-secondary text-h6", reserveRows && "min-h-[1lh]"), children: meta }),
|
|
2005
|
+
actions && /* @__PURE__ */ jsx20("div", { className: "mt-auto flex items-center justify-between border-t border-ods-border pt-3", children: actions })
|
|
3608
2006
|
] })
|
|
3609
2007
|
] });
|
|
3610
2008
|
}
|
|
3611
2009
|
|
|
3612
2010
|
// src/components/chat/entity-cards/admin-content-card-grid.tsx
|
|
3613
|
-
import { jsx as
|
|
2011
|
+
import { jsx as jsx21, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
3614
2012
|
var ADMIN_CONTENT_CARD_GRID_CLASS = "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-[var(--spacing-system-lf)]";
|
|
3615
2013
|
function AdminContentCardSkeleton({
|
|
3616
2014
|
className,
|
|
3617
2015
|
actions = true,
|
|
3618
2016
|
subtitleRow = true
|
|
3619
2017
|
}) {
|
|
3620
|
-
return /* @__PURE__ */
|
|
2018
|
+
return /* @__PURE__ */ jsxs13(
|
|
3621
2019
|
"div",
|
|
3622
2020
|
{
|
|
3623
2021
|
className: cn(
|
|
@@ -3625,21 +2023,21 @@ function AdminContentCardSkeleton({
|
|
|
3625
2023
|
className
|
|
3626
2024
|
),
|
|
3627
2025
|
children: [
|
|
3628
|
-
/* @__PURE__ */
|
|
3629
|
-
/* @__PURE__ */
|
|
3630
|
-
/* @__PURE__ */
|
|
3631
|
-
subtitleRow && /* @__PURE__ */
|
|
3632
|
-
/* @__PURE__ */
|
|
3633
|
-
/* @__PURE__ */
|
|
3634
|
-
/* @__PURE__ */
|
|
3635
|
-
/* @__PURE__ */
|
|
2026
|
+
/* @__PURE__ */ jsx21("div", { className: "aspect-[3/2] w-full shrink-0 bg-ods-border/20" }),
|
|
2027
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex flex-1 flex-col gap-[var(--spacing-system-sf)] p-5", children: [
|
|
2028
|
+
/* @__PURE__ */ jsx21("div", { className: "h-[2lh] w-full rounded bg-ods-border text-h3" }),
|
|
2029
|
+
subtitleRow && /* @__PURE__ */ jsx21("div", { className: "h-[1lh] w-1/2 rounded bg-ods-border text-h6" }),
|
|
2030
|
+
/* @__PURE__ */ jsx21("div", { className: "h-[2lh] w-full rounded bg-ods-border text-h6" }),
|
|
2031
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex h-7 items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
2032
|
+
/* @__PURE__ */ jsx21("div", { className: "h-5 w-20 rounded-full bg-ods-border" }),
|
|
2033
|
+
/* @__PURE__ */ jsx21("div", { className: "h-5 w-24 rounded-full bg-ods-border" })
|
|
3636
2034
|
] }),
|
|
3637
|
-
/* @__PURE__ */
|
|
3638
|
-
actions && /* @__PURE__ */
|
|
3639
|
-
/* @__PURE__ */
|
|
3640
|
-
/* @__PURE__ */
|
|
3641
|
-
/* @__PURE__ */
|
|
3642
|
-
/* @__PURE__ */
|
|
2035
|
+
/* @__PURE__ */ jsx21("div", { className: "h-[1lh] w-32 rounded bg-ods-border text-h6" }),
|
|
2036
|
+
actions && /* @__PURE__ */ jsxs13("div", { className: "mt-auto flex items-center justify-between border-t border-ods-border pt-[var(--spacing-system-sf)]", children: [
|
|
2037
|
+
/* @__PURE__ */ jsx21("div", { className: "h-10 w-24 rounded bg-ods-border" }),
|
|
2038
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex gap-[var(--spacing-system-xsf)]", children: [
|
|
2039
|
+
/* @__PURE__ */ jsx21("div", { className: "h-10 w-20 rounded bg-ods-border" }),
|
|
2040
|
+
/* @__PURE__ */ jsx21("div", { className: "h-10 w-20 rounded bg-ods-border" })
|
|
3643
2041
|
] })
|
|
3644
2042
|
] })
|
|
3645
2043
|
] })
|
|
@@ -3659,18 +2057,18 @@ function AdminContentCardGrid({
|
|
|
3659
2057
|
}) {
|
|
3660
2058
|
const gridClass = cn(ADMIN_CONTENT_CARD_GRID_CLASS, className);
|
|
3661
2059
|
if (loading) {
|
|
3662
|
-
return /* @__PURE__ */
|
|
2060
|
+
return /* @__PURE__ */ jsx21("div", { className: gridClass, "data-state": "loading", children: Array.from({ length: pageSize }, (_, i) => /* @__PURE__ */ jsx21(Skeleton, {}, i)) });
|
|
3663
2061
|
}
|
|
3664
|
-
const slots = Array.from({ length: Math.max(0, pageSize - items.length) }, (_, i) => /* @__PURE__ */
|
|
2062
|
+
const slots = Array.from({ length: Math.max(0, pageSize - items.length) }, (_, i) => /* @__PURE__ */ jsx21(Skeleton, { className: "invisible" }, `slot-${i}`));
|
|
3665
2063
|
if (items.length === 0) {
|
|
3666
|
-
return /* @__PURE__ */
|
|
3667
|
-
/* @__PURE__ */
|
|
3668
|
-
/* @__PURE__ */
|
|
2064
|
+
return /* @__PURE__ */ jsxs13("div", { className: "relative", "data-state": "empty", children: [
|
|
2065
|
+
/* @__PURE__ */ jsx21("div", { "aria-hidden": true, className: gridClass, children: slots }),
|
|
2066
|
+
/* @__PURE__ */ jsx21("div", { className: "absolute inset-x-0 top-0", children: empty })
|
|
3669
2067
|
] });
|
|
3670
2068
|
}
|
|
3671
|
-
return /* @__PURE__ */
|
|
3672
|
-
items.map((item) => /* @__PURE__ */
|
|
3673
|
-
slots.length > 0 && /* @__PURE__ */
|
|
2069
|
+
return /* @__PURE__ */ jsxs13("div", { className: gridClass, "data-state": "items", children: [
|
|
2070
|
+
items.map((item) => /* @__PURE__ */ jsx21("div", { className: "h-full", children: renderCard(item) }, itemKey(item))),
|
|
2071
|
+
slots.length > 0 && /* @__PURE__ */ jsx21("div", { "aria-hidden": true, className: "contents", children: slots })
|
|
3674
2072
|
] });
|
|
3675
2073
|
}
|
|
3676
2074
|
|
|
@@ -3690,7 +2088,7 @@ function getProxiedImageUrl2(imageUrl) {
|
|
|
3690
2088
|
}
|
|
3691
2089
|
|
|
3692
2090
|
// src/components/chat/entity-cards/employee-entry-card.tsx
|
|
3693
|
-
import { Fragment as Fragment4, jsx as
|
|
2091
|
+
import { Fragment as Fragment4, jsx as jsx22, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
3694
2092
|
var STATUS_BADGE_SCHEME = {
|
|
3695
2093
|
published: "success",
|
|
3696
2094
|
draft: "warning",
|
|
@@ -3703,7 +2101,7 @@ var STATUS_BADGE_SCHEME = {
|
|
|
3703
2101
|
abandoned: "default"
|
|
3704
2102
|
};
|
|
3705
2103
|
function EmployeeEntryBadge({ children }) {
|
|
3706
|
-
return /* @__PURE__ */
|
|
2104
|
+
return /* @__PURE__ */ jsx22(StatusBadge, { text: children, colorScheme: "default", variant: "button", singleLine: true });
|
|
3707
2105
|
}
|
|
3708
2106
|
function EmployeeEntryCard({
|
|
3709
2107
|
entry,
|
|
@@ -3715,15 +2113,15 @@ function EmployeeEntryCard({
|
|
|
3715
2113
|
anchorProps,
|
|
3716
2114
|
className
|
|
3717
2115
|
}) {
|
|
3718
|
-
const card = /* @__PURE__ */
|
|
2116
|
+
const card = /* @__PURE__ */ jsx22(
|
|
3719
2117
|
AdminContentCard,
|
|
3720
2118
|
{
|
|
3721
2119
|
imageUrl: entry.featured_image || entry.main_video_thumbnail,
|
|
3722
2120
|
placeholderUrl,
|
|
3723
2121
|
title: entry.title || untitledLabel,
|
|
3724
2122
|
summary: (entry.summary ?? "").slice(0, 140) || "No description",
|
|
3725
|
-
badges: entry.status || extraBadges ? /* @__PURE__ */
|
|
3726
|
-
entry.status ? /* @__PURE__ */
|
|
2123
|
+
badges: entry.status || extraBadges ? /* @__PURE__ */ jsxs14(Fragment4, { children: [
|
|
2124
|
+
entry.status ? /* @__PURE__ */ jsx22(
|
|
3727
2125
|
StatusBadge,
|
|
3728
2126
|
{
|
|
3729
2127
|
text: entry.status,
|
|
@@ -3734,9 +2132,9 @@ function EmployeeEntryCard({
|
|
|
3734
2132
|
) : null,
|
|
3735
2133
|
extraBadges
|
|
3736
2134
|
] }) : null,
|
|
3737
|
-
meta: /* @__PURE__ */
|
|
3738
|
-
/* @__PURE__ */
|
|
3739
|
-
entry.author?.avatar_url ? /* @__PURE__ */
|
|
2135
|
+
meta: /* @__PURE__ */ jsxs14(Fragment4, { children: [
|
|
2136
|
+
/* @__PURE__ */ jsxs14("span", { className: "flex min-w-0 items-center gap-2", children: [
|
|
2137
|
+
entry.author?.avatar_url ? /* @__PURE__ */ jsx22(
|
|
3740
2138
|
next_image_default,
|
|
3741
2139
|
{
|
|
3742
2140
|
src: getProxiedImageUrl2(entry.author.avatar_url) ?? entry.author.avatar_url,
|
|
@@ -3747,9 +2145,9 @@ function EmployeeEntryCard({
|
|
|
3747
2145
|
unoptimized: true
|
|
3748
2146
|
}
|
|
3749
2147
|
) : null,
|
|
3750
|
-
/* @__PURE__ */
|
|
2148
|
+
/* @__PURE__ */ jsx22("span", { className: "truncate", children: entry.author?.full_name ?? "" })
|
|
3751
2149
|
] }),
|
|
3752
|
-
dateLabel ? /* @__PURE__ */
|
|
2150
|
+
dateLabel ? /* @__PURE__ */ jsx22("span", { children: dateLabel }) : null
|
|
3753
2151
|
] }),
|
|
3754
2152
|
actions,
|
|
3755
2153
|
reserveRows: true,
|
|
@@ -3757,16 +2155,16 @@ function EmployeeEntryCard({
|
|
|
3757
2155
|
className
|
|
3758
2156
|
}
|
|
3759
2157
|
);
|
|
3760
|
-
return anchorProps ? /* @__PURE__ */
|
|
2158
|
+
return anchorProps ? /* @__PURE__ */ jsx22("a", { ...anchorProps, className: "block h-full", children: card }) : card;
|
|
3761
2159
|
}
|
|
3762
2160
|
function EmployeeEntryCardSkeleton({ className, actions = false }) {
|
|
3763
|
-
return /* @__PURE__ */
|
|
2161
|
+
return /* @__PURE__ */ jsx22(AdminContentCardSkeleton, { className, actions, subtitleRow: false });
|
|
3764
2162
|
}
|
|
3765
2163
|
|
|
3766
2164
|
// src/components/chat/entity-cards/what-i-shipped-card.tsx
|
|
3767
|
-
import { jsx as
|
|
2165
|
+
import { jsx as jsx23 } from "react/jsx-runtime";
|
|
3768
2166
|
function WhatIShippedCard({ entry, placeholderUrl, actions, anchorProps, className }) {
|
|
3769
|
-
return /* @__PURE__ */
|
|
2167
|
+
return /* @__PURE__ */ jsx23(
|
|
3770
2168
|
EmployeeEntryCard,
|
|
3771
2169
|
{
|
|
3772
2170
|
entry,
|
|
@@ -3781,17 +2179,17 @@ function WhatIShippedCard({ entry, placeholderUrl, actions, anchorProps, classNa
|
|
|
3781
2179
|
var WhatIShippedCardSkeleton = EmployeeEntryCardSkeleton;
|
|
3782
2180
|
|
|
3783
2181
|
// src/components/chat/entity-cards/how-i-work-card.tsx
|
|
3784
|
-
import { jsx as
|
|
2182
|
+
import { jsx as jsx24 } from "react/jsx-runtime";
|
|
3785
2183
|
function disciplineLabel(discipline) {
|
|
3786
2184
|
return discipline.replace(/_/g, " ").replace(/\b\w/g, (ch) => ch.toUpperCase());
|
|
3787
2185
|
}
|
|
3788
2186
|
function HowIWorkCard({ entry, placeholderUrl, actions, anchorProps, className }) {
|
|
3789
|
-
return /* @__PURE__ */
|
|
2187
|
+
return /* @__PURE__ */ jsx24(
|
|
3790
2188
|
EmployeeEntryCard,
|
|
3791
2189
|
{
|
|
3792
2190
|
entry,
|
|
3793
2191
|
dateLabel: entry.session_date ? formatDateUTC(entry.session_date, { fallback: "" }) || null : null,
|
|
3794
|
-
extraBadges: entry.discipline ? /* @__PURE__ */
|
|
2192
|
+
extraBadges: entry.discipline ? /* @__PURE__ */ jsx24(EmployeeEntryBadge, { children: disciplineLabel(entry.discipline) }) : null,
|
|
3795
2193
|
untitledLabel: "Untitled session",
|
|
3796
2194
|
placeholderUrl,
|
|
3797
2195
|
actions,
|
|
@@ -3803,18 +2201,18 @@ function HowIWorkCard({ entry, placeholderUrl, actions, anchorProps, className }
|
|
|
3803
2201
|
var HowIWorkCardSkeleton = EmployeeEntryCardSkeleton;
|
|
3804
2202
|
|
|
3805
2203
|
// src/components/chat/entity-cards/ai-prompt-card.tsx
|
|
3806
|
-
import { Fragment as Fragment5, jsx as
|
|
2204
|
+
import { Fragment as Fragment5, jsx as jsx25, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
3807
2205
|
function AiPromptCard({ entry, placeholderUrl, actions, anchorProps, className }) {
|
|
3808
2206
|
const departmentName = entry.department?.name?.trim();
|
|
3809
2207
|
const steps = typeof entry.step_count === "number" ? entry.step_count : 0;
|
|
3810
|
-
return /* @__PURE__ */
|
|
2208
|
+
return /* @__PURE__ */ jsx25(
|
|
3811
2209
|
EmployeeEntryCard,
|
|
3812
2210
|
{
|
|
3813
2211
|
entry,
|
|
3814
2212
|
dateLabel: entry.published_at ? formatDateUTC(entry.published_at, { fallback: "" }) || null : null,
|
|
3815
|
-
extraBadges: /* @__PURE__ */
|
|
3816
|
-
departmentName ? /* @__PURE__ */
|
|
3817
|
-
steps > 1 ? /* @__PURE__ */
|
|
2213
|
+
extraBadges: /* @__PURE__ */ jsxs15(Fragment5, { children: [
|
|
2214
|
+
departmentName ? /* @__PURE__ */ jsx25(DepartmentBadge, { department: { name: departmentName, color: entry.department?.color ?? null } }) : null,
|
|
2215
|
+
steps > 1 ? /* @__PURE__ */ jsx25(EmployeeEntryBadge, { children: `${steps} steps` }) : null
|
|
3818
2216
|
] }),
|
|
3819
2217
|
untitledLabel: "Untitled prompt",
|
|
3820
2218
|
placeholderUrl,
|
|
@@ -3828,7 +2226,7 @@ var AiPromptCardSkeleton = EmployeeEntryCardSkeleton;
|
|
|
3828
2226
|
|
|
3829
2227
|
// src/components/layout/page-heading.tsx
|
|
3830
2228
|
import { Children, Fragment as Fragment6, cloneElement, isValidElement } from "react";
|
|
3831
|
-
import { Fragment as Fragment7, jsx as
|
|
2229
|
+
import { Fragment as Fragment7, jsx as jsx26, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
3832
2230
|
var PAGE_HEADING_CLASS = "text-h1 text-ods-text-primary";
|
|
3833
2231
|
var SECTION_HEADING_CLASS = "text-h2 text-ods-text-primary";
|
|
3834
2232
|
var DESCRIPTION_CLASS = "mt-6 max-w-[640px] font-body text-[16px] content-md:text-[18px] leading-[24px] content-md:leading-[28px] text-ods-text-secondary";
|
|
@@ -3842,9 +2240,9 @@ function PageHeading({
|
|
|
3842
2240
|
const headingClass = className ? `${PAGE_HEADING_CLASS} ${className}` : PAGE_HEADING_CLASS;
|
|
3843
2241
|
const descClass = descriptionClassName ? `${DESCRIPTION_CLASS} ${descriptionClassName}` : DESCRIPTION_CLASS;
|
|
3844
2242
|
const hasDescription = description != null && description !== "" && typeof description !== "boolean";
|
|
3845
|
-
return /* @__PURE__ */
|
|
3846
|
-
/* @__PURE__ */
|
|
3847
|
-
hasDescription && /* @__PURE__ */
|
|
2243
|
+
return /* @__PURE__ */ jsxs16(Fragment7, { children: [
|
|
2244
|
+
/* @__PURE__ */ jsx26(Tag2, { className: headingClass, children: accentSentenceMarks(children) }),
|
|
2245
|
+
hasDescription && /* @__PURE__ */ jsx26("p", { className: descClass, children: description })
|
|
3848
2246
|
] });
|
|
3849
2247
|
}
|
|
3850
2248
|
var SENTENCE_MARK = /([.:?!]+)(?=\s|$)/g;
|
|
@@ -3865,10 +2263,10 @@ function accentMarks(node, accentClassName) {
|
|
|
3865
2263
|
// `split` with one capture group alternates text, mark, text, mark...
|
|
3866
2264
|
index % 2 === 1 ? (
|
|
3867
2265
|
// biome-ignore lint/suspicious/noArrayIndexKey: the parts of one string never reorder
|
|
3868
|
-
/* @__PURE__ */
|
|
2266
|
+
/* @__PURE__ */ jsx26("span", { className: accentClassName, children: part }, index)
|
|
3869
2267
|
) : (
|
|
3870
2268
|
// biome-ignore lint/suspicious/noArrayIndexKey: the parts of one string never reorder
|
|
3871
|
-
/* @__PURE__ */
|
|
2269
|
+
/* @__PURE__ */ jsx26(Fragment6, { children: part }, index)
|
|
3872
2270
|
)
|
|
3873
2271
|
)
|
|
3874
2272
|
);
|
|
@@ -3908,16 +2306,16 @@ function SectionHeading({
|
|
|
3908
2306
|
const accentClassName = headingAccentClass(platform);
|
|
3909
2307
|
const layout = SECTION_HEADING_LAYOUT[level];
|
|
3910
2308
|
const Tag2 = level === "page" ? "h1" : "h2";
|
|
3911
|
-
const stack = /* @__PURE__ */
|
|
3912
|
-
eyebrow ? /* @__PURE__ */
|
|
3913
|
-
/* @__PURE__ */
|
|
2309
|
+
const stack = /* @__PURE__ */ jsxs16("div", { className: layout.stack, children: [
|
|
2310
|
+
eyebrow ? /* @__PURE__ */ jsx26("span", { className: `text-h5 ${accentClassName}`, children: eyebrow }) : null,
|
|
2311
|
+
/* @__PURE__ */ jsxs16(Tag2, { className: layout.heading, children: [
|
|
3914
2312
|
accentSentenceMarks(title, platform),
|
|
3915
|
-
punctuation ? /* @__PURE__ */
|
|
2313
|
+
punctuation ? /* @__PURE__ */ jsx26("span", { className: accentClassName, children: punctuation }) : null
|
|
3916
2314
|
] }),
|
|
3917
|
-
intro ? /* @__PURE__ */
|
|
2315
|
+
intro ? /* @__PURE__ */ jsx26("div", { className: layout.intro, children: intro }) : null
|
|
3918
2316
|
] });
|
|
3919
|
-
if (!action) return className ? /* @__PURE__ */
|
|
3920
|
-
return /* @__PURE__ */
|
|
2317
|
+
if (!action) return className ? /* @__PURE__ */ jsx26("div", { className, children: stack }) : stack;
|
|
2318
|
+
return /* @__PURE__ */ jsxs16(
|
|
3921
2319
|
"div",
|
|
3922
2320
|
{
|
|
3923
2321
|
className: `flex flex-wrap items-end justify-between gap-[var(--spacing-system-mf)]${className ? ` ${className}` : ""}`,
|
|
@@ -3952,98 +2350,9 @@ function sortBitesByFeaturedAtDesc(a, b) {
|
|
|
3952
2350
|
return new Date(b.featured_at).getTime() - new Date(a.featured_at).getTime();
|
|
3953
2351
|
}
|
|
3954
2352
|
|
|
3955
|
-
// src/components/features/video-hover-preview.tsx
|
|
3956
|
-
import { useEffect as useEffect6, useRef as useRef3, useState as useState7 } from "react";
|
|
3957
|
-
import { Fragment as Fragment8, jsx as jsx31, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
3958
|
-
function VideoHoverPreviewSurface({
|
|
3959
|
-
url,
|
|
3960
|
-
posterUrl = null,
|
|
3961
|
-
active,
|
|
3962
|
-
playerMounted,
|
|
3963
|
-
isClone = false,
|
|
3964
|
-
badge = "play",
|
|
3965
|
-
fit,
|
|
3966
|
-
posterSizes = "234px",
|
|
3967
|
-
preload,
|
|
3968
|
-
hideMutedBadge,
|
|
3969
|
-
onMutedFallbackChange,
|
|
3970
|
-
previewHandleRef,
|
|
3971
|
-
mutedIntent = false,
|
|
3972
|
-
continuation = false,
|
|
3973
|
-
startTime,
|
|
3974
|
-
autoPlay = false,
|
|
3975
|
-
startMuted = false,
|
|
3976
|
-
onEnded,
|
|
3977
|
-
className
|
|
3978
|
-
}) {
|
|
3979
|
-
const previewUrl = toMuxPreviewUrl(url);
|
|
3980
|
-
const gateControlled = playerMounted !== void 0;
|
|
3981
|
-
const rootElRef = useRef3(null);
|
|
3982
|
-
const [isNear, setIsNear] = useState7(false);
|
|
3983
|
-
useEffect6(() => {
|
|
3984
|
-
if (gateControlled) return void 0;
|
|
3985
|
-
const el = rootElRef.current;
|
|
3986
|
-
if (!el || typeof IntersectionObserver === "undefined") return void 0;
|
|
3987
|
-
const io = new IntersectionObserver((entries) => setIsNear(entries[0]?.isIntersecting ?? false), {
|
|
3988
|
-
rootMargin: NEAR_VIEWPORT_ROOT_MARGIN
|
|
3989
|
-
});
|
|
3990
|
-
io.observe(el);
|
|
3991
|
-
return () => io.disconnect();
|
|
3992
|
-
}, [gateControlled]);
|
|
3993
|
-
const showMedia = continuation || (gateControlled ? playerMounted : isNear);
|
|
3994
|
-
const { src: posterSrc, onError: onPosterError } = useCoverImageFallback(posterUrl);
|
|
3995
|
-
const facadeSkipped = preload === "none" && !posterSrc;
|
|
3996
|
-
return /* @__PURE__ */ jsx31("div", { ref: rootElRef, className: cn("absolute inset-0", className), inert: isClone || void 0, children: showMedia ? /* @__PURE__ */ jsxs18(Fragment8, { children: [
|
|
3997
|
-
posterSrc ? /* @__PURE__ */ jsx31(
|
|
3998
|
-
next_image_default,
|
|
3999
|
-
{
|
|
4000
|
-
src: posterSrc,
|
|
4001
|
-
alt: "",
|
|
4002
|
-
fill: true,
|
|
4003
|
-
sizes: posterSizes,
|
|
4004
|
-
unoptimized: true,
|
|
4005
|
-
onError: onPosterError,
|
|
4006
|
-
className: "object-cover"
|
|
4007
|
-
}
|
|
4008
|
-
) : facadeSkipped ? /* @__PURE__ */ jsx31("div", { className: "absolute inset-0 bg-ods-card" }) : /* @__PURE__ */ jsx31(Video, { kind: "file", url: previewUrl, firstFrameOnly: true, layout: "fill", fit }),
|
|
4009
|
-
badge === "play" && !active && !continuation && /* @__PURE__ */ jsx31(VideoPlayBadge, { className: "absolute inset-0 z-10 m-auto" }),
|
|
4010
|
-
/* @__PURE__ */ jsx31(
|
|
4011
|
-
"div",
|
|
4012
|
-
{
|
|
4013
|
-
className: "absolute inset-0",
|
|
4014
|
-
style: { "--media-background-color": "transparent" },
|
|
4015
|
-
children: /* @__PURE__ */ jsx31(
|
|
4016
|
-
Video,
|
|
4017
|
-
{
|
|
4018
|
-
kind: "file",
|
|
4019
|
-
url: previewUrl,
|
|
4020
|
-
poster: posterUrl,
|
|
4021
|
-
...continuation ? {
|
|
4022
|
-
startTime,
|
|
4023
|
-
autoPlay: autoPlay && startMuted,
|
|
4024
|
-
startMuted,
|
|
4025
|
-
autoPlayUnmuted: autoPlay && !startMuted
|
|
4026
|
-
} : { playWhenHovered: active },
|
|
4027
|
-
chromeless: true,
|
|
4028
|
-
layout: "fill",
|
|
4029
|
-
fit,
|
|
4030
|
-
preload,
|
|
4031
|
-
mutedIntent,
|
|
4032
|
-
hideMutedBadge,
|
|
4033
|
-
onMutedFallbackChange,
|
|
4034
|
-
onEnded,
|
|
4035
|
-
playerHandleRef: previewHandleRef
|
|
4036
|
-
},
|
|
4037
|
-
continuation ? "continuation" : "preview"
|
|
4038
|
-
)
|
|
4039
|
-
}
|
|
4040
|
-
)
|
|
4041
|
-
] }) : /* @__PURE__ */ jsx31("div", { className: "absolute inset-0 bg-ods-card" }) });
|
|
4042
|
-
}
|
|
4043
|
-
|
|
4044
2353
|
// src/components/shared/product-release/product-release-card.tsx
|
|
4045
|
-
import { AlertTriangle, Eye, Package
|
|
4046
|
-
import { Fragment as
|
|
2354
|
+
import { AlertTriangle, Eye, Package, Sparkles, TrendingUp, Wrench } from "lucide-react";
|
|
2355
|
+
import { Fragment as Fragment8, jsx as jsx27, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
4047
2356
|
function ProductReleaseCard({
|
|
4048
2357
|
title,
|
|
4049
2358
|
summary,
|
|
@@ -4093,10 +2402,10 @@ function ProductReleaseCard({
|
|
|
4093
2402
|
"no-underline",
|
|
4094
2403
|
className
|
|
4095
2404
|
);
|
|
4096
|
-
const innerLayout = /* @__PURE__ */
|
|
4097
|
-
/* @__PURE__ */
|
|
4098
|
-
/* @__PURE__ */
|
|
4099
|
-
coverImage ? /* @__PURE__ */
|
|
2405
|
+
const innerLayout = /* @__PURE__ */ jsxs17(Fragment8, { children: [
|
|
2406
|
+
/* @__PURE__ */ jsxs17("div", { className: "flex flex-col gap-4 content-md:flex-row content-md:gap-6", children: [
|
|
2407
|
+
/* @__PURE__ */ jsx27("div", { className: "w-full flex-shrink-0 content-md:w-[256px]", children: /* @__PURE__ */ jsxs17("div", { className: "relative aspect-[1200/630] w-full overflow-hidden rounded-lg bg-ods-bg", children: [
|
|
2408
|
+
coverImage ? /* @__PURE__ */ jsx27(
|
|
4100
2409
|
next_image_default,
|
|
4101
2410
|
{
|
|
4102
2411
|
src: coverImage,
|
|
@@ -4106,44 +2415,44 @@ function ProductReleaseCard({
|
|
|
4106
2415
|
className: "object-cover",
|
|
4107
2416
|
unoptimized: true
|
|
4108
2417
|
}
|
|
4109
|
-
) : /* @__PURE__ */
|
|
4110
|
-
hasVideoCover && coverImage && /* @__PURE__ */
|
|
2418
|
+
) : /* @__PURE__ */ jsx27("div", { className: "absolute inset-0 flex items-center justify-center text-ods-text-secondary", children: /* @__PURE__ */ jsx27(Package, { className: "h-8 w-8" }) }),
|
|
2419
|
+
hasVideoCover && coverImage && /* @__PURE__ */ jsx27(CardHoverPlay, { size: "md" })
|
|
4111
2420
|
] }) }),
|
|
4112
|
-
/* @__PURE__ */
|
|
4113
|
-
/* @__PURE__ */
|
|
2421
|
+
/* @__PURE__ */ jsxs17("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
2422
|
+
/* @__PURE__ */ jsx27("div", { className: "mb-3 flex items-center gap-3", children: /* @__PURE__ */ jsxs17("span", { className: "truncate font-semibold text-ods-text-primary text-code", children: [
|
|
4114
2423
|
"v",
|
|
4115
2424
|
version
|
|
4116
2425
|
] }) }),
|
|
4117
|
-
/* @__PURE__ */
|
|
4118
|
-
/* @__PURE__ */
|
|
2426
|
+
/* @__PURE__ */ jsx27("div", { className: "mb-3 flex min-h-[60px] items-start content-md:min-h-[72px]", children: /* @__PURE__ */ jsx27("h3", { className: "line-clamp-2 font-['Azeret_Mono'] text-xl font-semibold leading-tight text-ods-text-primary content-md:text-2xl", children: title }) }),
|
|
2427
|
+
/* @__PURE__ */ jsx27("div", { className: "min-h-[68px] content-md:min-h-[78px]", children: /* @__PURE__ */ jsx27("p", { className: "line-clamp-3 font-['DM_Sans'] text-sm leading-relaxed text-ods-text-secondary content-md:text-base", children: summary ?? "" }) })
|
|
4119
2428
|
] })
|
|
4120
2429
|
] }),
|
|
4121
|
-
/* @__PURE__ */
|
|
4122
|
-
changelogCounts.features > 0 && /* @__PURE__ */
|
|
4123
|
-
/* @__PURE__ */
|
|
2430
|
+
/* @__PURE__ */ jsx27("div", { className: "flex flex-wrap items-center gap-x-4 gap-y-1.5 border-t border-ods-border pt-3 text-ods-text-secondary text-h6", children: totalChangelog > 0 && changelogCounts ? /* @__PURE__ */ jsxs17(Fragment8, { children: [
|
|
2431
|
+
changelogCounts.features > 0 && /* @__PURE__ */ jsxs17("span", { className: "inline-flex items-center gap-1.5", children: [
|
|
2432
|
+
/* @__PURE__ */ jsx27(Sparkles, { className: "h-3.5 w-3.5" }),
|
|
4124
2433
|
changelogCounts.features,
|
|
4125
2434
|
" ",
|
|
4126
2435
|
changelogCounts.features === 1 ? "feature" : "features"
|
|
4127
2436
|
] }),
|
|
4128
|
-
changelogCounts.fixes > 0 && /* @__PURE__ */
|
|
4129
|
-
/* @__PURE__ */
|
|
2437
|
+
changelogCounts.fixes > 0 && /* @__PURE__ */ jsxs17("span", { className: "inline-flex items-center gap-1.5", children: [
|
|
2438
|
+
/* @__PURE__ */ jsx27(Wrench, { className: "h-3.5 w-3.5" }),
|
|
4130
2439
|
changelogCounts.fixes,
|
|
4131
2440
|
" ",
|
|
4132
2441
|
changelogCounts.fixes === 1 ? "fix" : "fixes"
|
|
4133
2442
|
] }),
|
|
4134
|
-
changelogCounts.improvements > 0 && /* @__PURE__ */
|
|
4135
|
-
/* @__PURE__ */
|
|
2443
|
+
changelogCounts.improvements > 0 && /* @__PURE__ */ jsxs17("span", { className: "inline-flex items-center gap-1.5", children: [
|
|
2444
|
+
/* @__PURE__ */ jsx27(TrendingUp, { className: "h-3.5 w-3.5" }),
|
|
4136
2445
|
changelogCounts.improvements,
|
|
4137
2446
|
" ",
|
|
4138
2447
|
changelogCounts.improvements === 1 ? "improvement" : "improvements"
|
|
4139
2448
|
] }),
|
|
4140
|
-
changelogCounts.breaking > 0 && /* @__PURE__ */
|
|
4141
|
-
/* @__PURE__ */
|
|
2449
|
+
changelogCounts.breaking > 0 && /* @__PURE__ */ jsxs17("span", { className: "inline-flex items-center gap-1.5 text-ods-warning", children: [
|
|
2450
|
+
/* @__PURE__ */ jsx27(AlertTriangle, { className: "h-3.5 w-3.5" }),
|
|
4142
2451
|
changelogCounts.breaking,
|
|
4143
2452
|
" breaking"
|
|
4144
2453
|
] })
|
|
4145
|
-
] }) : /* @__PURE__ */
|
|
4146
|
-
/* @__PURE__ */
|
|
2454
|
+
] }) : /* @__PURE__ */ jsx27("span", { className: "text-ods-text-secondary", children: "No changelog entries yet" }) }),
|
|
2455
|
+
/* @__PURE__ */ jsxs17(
|
|
4147
2456
|
"div",
|
|
4148
2457
|
{
|
|
4149
2458
|
className: cn(
|
|
@@ -4152,8 +2461,8 @@ function ProductReleaseCard({
|
|
|
4152
2461
|
"w-full overflow-hidden rounded-md border border-ods-border"
|
|
4153
2462
|
),
|
|
4154
2463
|
children: [
|
|
4155
|
-
valueCells.map((cell, i) => /* @__PURE__ */
|
|
4156
|
-
cell.colorScheme ? /* @__PURE__ */
|
|
2464
|
+
valueCells.map((cell, i) => /* @__PURE__ */ jsx27("div", { className: cn("flex flex-col gap-3 p-4", dividerClass), children: /* @__PURE__ */ jsxs17("div", { className: "flex flex-col gap-0", children: [
|
|
2465
|
+
cell.colorScheme ? /* @__PURE__ */ jsx27(
|
|
4157
2466
|
StatusBadge,
|
|
4158
2467
|
{
|
|
4159
2468
|
text: cell.value,
|
|
@@ -4162,7 +2471,7 @@ function ProductReleaseCard({
|
|
|
4162
2471
|
singleLine: true,
|
|
4163
2472
|
className: "self-start"
|
|
4164
2473
|
}
|
|
4165
|
-
) : /* @__PURE__ */
|
|
2474
|
+
) : /* @__PURE__ */ jsx27(
|
|
4166
2475
|
"p",
|
|
4167
2476
|
{
|
|
4168
2477
|
className: cn(
|
|
@@ -4174,10 +2483,10 @@ function ProductReleaseCard({
|
|
|
4174
2483
|
children: cell.uppercase ? cell.value.toLocaleUpperCase() : cell.value
|
|
4175
2484
|
}
|
|
4176
2485
|
),
|
|
4177
|
-
/* @__PURE__ */
|
|
2486
|
+
/* @__PURE__ */ jsx27("p", { className: "text-ods-text-secondary text-h6", children: cell.label })
|
|
4178
2487
|
] }) }, `${cell.label}-${i}`)),
|
|
4179
|
-
/* @__PURE__ */
|
|
4180
|
-
/* @__PURE__ */
|
|
2488
|
+
/* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-3 p-4", children: [
|
|
2489
|
+
/* @__PURE__ */ jsx27(
|
|
4181
2490
|
SquareAvatar,
|
|
4182
2491
|
{
|
|
4183
2492
|
src: effectiveAuthor.avatar_url ?? void 0,
|
|
@@ -4187,29 +2496,29 @@ function ProductReleaseCard({
|
|
|
4187
2496
|
variant: "round"
|
|
4188
2497
|
}
|
|
4189
2498
|
),
|
|
4190
|
-
/* @__PURE__ */
|
|
4191
|
-
/* @__PURE__ */
|
|
4192
|
-
/* @__PURE__ */
|
|
2499
|
+
/* @__PURE__ */ jsxs17("div", { className: "flex min-w-0 flex-1 flex-col gap-0", children: [
|
|
2500
|
+
/* @__PURE__ */ jsx27("p", { className: "truncate tracking-[-0.36px] text-ods-text-primary text-h3", children: effectiveAuthor.full_name }),
|
|
2501
|
+
/* @__PURE__ */ jsx27("p", { className: "text-ods-text-secondary text-h6", children: effectiveAuthor.job_title || "Author" })
|
|
4193
2502
|
] })
|
|
4194
2503
|
] })
|
|
4195
2504
|
]
|
|
4196
2505
|
}
|
|
4197
2506
|
),
|
|
4198
|
-
typeof viewCount === "number" && viewCount > 0 && /* @__PURE__ */
|
|
4199
|
-
/* @__PURE__ */
|
|
4200
|
-
/* @__PURE__ */
|
|
2507
|
+
typeof viewCount === "number" && viewCount > 0 && /* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-1.5 text-ods-text-secondary text-h6", children: [
|
|
2508
|
+
/* @__PURE__ */ jsx27(Eye, { className: "h-3.5 w-3.5" }),
|
|
2509
|
+
/* @__PURE__ */ jsxs17("span", { children: [
|
|
4201
2510
|
viewCount.toLocaleString(),
|
|
4202
2511
|
" views"
|
|
4203
2512
|
] })
|
|
4204
2513
|
] })
|
|
4205
2514
|
] });
|
|
4206
2515
|
if (anchorProps) {
|
|
4207
|
-
return /* @__PURE__ */
|
|
2516
|
+
return /* @__PURE__ */ jsx27("a", { ...anchorProps, className: frameClass, "aria-label": `Open ${title}`, children: innerLayout });
|
|
4208
2517
|
}
|
|
4209
2518
|
if (onClick) {
|
|
4210
|
-
return /* @__PURE__ */
|
|
2519
|
+
return /* @__PURE__ */ jsx27(InteractiveCard, { clickable: true, onClick, className: frameClass, children: innerLayout });
|
|
4211
2520
|
}
|
|
4212
|
-
return /* @__PURE__ */
|
|
2521
|
+
return /* @__PURE__ */ jsx27("div", { className: frameClass, children: innerLayout });
|
|
4213
2522
|
}
|
|
4214
2523
|
if (size2 === "sm") {
|
|
4215
2524
|
const handleKey = (e) => {
|
|
@@ -4236,24 +2545,24 @@ function ProductReleaseCard({
|
|
|
4236
2545
|
isInteractive ? "cursor-pointer transition-colors hover:border-ods-text-secondary/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent focus-visible:ring-offset-1 focus-visible:ring-offset-ods-card" : "cursor-default",
|
|
4237
2546
|
className
|
|
4238
2547
|
);
|
|
4239
|
-
const innerChildren = /* @__PURE__ */
|
|
4240
|
-
/* @__PURE__ */
|
|
4241
|
-
coverImage ? /* @__PURE__ */
|
|
4242
|
-
hasVideoCover && coverImage && /* @__PURE__ */
|
|
2548
|
+
const innerChildren = /* @__PURE__ */ jsxs17(Fragment8, { children: [
|
|
2549
|
+
/* @__PURE__ */ jsxs17("span", { className: "relative flex aspect-square h-14 w-14 shrink-0 items-center justify-center self-start overflow-hidden rounded-md bg-ods-bg text-ods-accent", children: [
|
|
2550
|
+
coverImage ? /* @__PURE__ */ jsx27(next_image_default, { src: coverImage, alt: title, fill: true, sizes: "56px", className: "object-contain", unoptimized: true }) : /* @__PURE__ */ jsx27(Package, { className: "h-5 w-5" }),
|
|
2551
|
+
hasVideoCover && coverImage && /* @__PURE__ */ jsx27(CardHoverPlay, { size: "sm" })
|
|
4243
2552
|
] }),
|
|
4244
|
-
/* @__PURE__ */
|
|
4245
|
-
/* @__PURE__ */
|
|
4246
|
-
/* @__PURE__ */
|
|
4247
|
-
version ? /* @__PURE__ */
|
|
2553
|
+
/* @__PURE__ */ jsxs17("span", { className: "flex min-h-14 min-w-0 flex-1 flex-col gap-0.5", children: [
|
|
2554
|
+
/* @__PURE__ */ jsxs17("span", { className: "flex h-5 min-w-0 items-center gap-2", children: [
|
|
2555
|
+
/* @__PURE__ */ jsx27("span", { className: "min-w-0 truncate font-semibold text-ods-text-primary text-h6", title, children: title }),
|
|
2556
|
+
version ? /* @__PURE__ */ jsx27("span", { className: "shrink-0 rounded bg-ods-accent/10 px-1.5 py-0.5 text-ods-accent text-code", children: version }) : null
|
|
4248
2557
|
] }),
|
|
4249
|
-
/* @__PURE__ */
|
|
4250
|
-
/* @__PURE__ */
|
|
2558
|
+
/* @__PURE__ */ jsx27("span", { className: "flex h-4 min-w-0 items-center", children: /* @__PURE__ */ jsx27("span", { className: "truncate text-ods-text-secondary text-h6", children: formattedDate || "Product release" }) }),
|
|
2559
|
+
/* @__PURE__ */ jsx27("span", { className: "flex h-4 min-w-0 items-center", children: /* @__PURE__ */ jsx27("span", { className: "truncate text-ods-text-secondary/80 text-h6", title: summary || void 0, children: summary || "\xA0" }) })
|
|
4251
2560
|
] })
|
|
4252
2561
|
] });
|
|
4253
2562
|
if (anchorProps) {
|
|
4254
|
-
return /* @__PURE__ */
|
|
2563
|
+
return /* @__PURE__ */ jsx27("a", { ...anchorProps, className: outerClassName, children: innerChildren });
|
|
4255
2564
|
}
|
|
4256
|
-
return /* @__PURE__ */
|
|
2565
|
+
return /* @__PURE__ */ jsx27(
|
|
4257
2566
|
"span",
|
|
4258
2567
|
{
|
|
4259
2568
|
role: onClick ? "button" : void 0,
|
|
@@ -4269,50 +2578,50 @@ function ProductReleaseCard({
|
|
|
4269
2578
|
}
|
|
4270
2579
|
|
|
4271
2580
|
// src/components/shared/product-release/product-release-card-skeleton.tsx
|
|
4272
|
-
import { jsx as
|
|
2581
|
+
import { jsx as jsx28, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
4273
2582
|
function ProductReleaseCardSkeleton({ className, size: size2 = "lg" }) {
|
|
4274
2583
|
if (size2 === "lg") {
|
|
4275
|
-
return /* @__PURE__ */
|
|
4276
|
-
/* @__PURE__ */
|
|
4277
|
-
/* @__PURE__ */
|
|
4278
|
-
/* @__PURE__ */
|
|
4279
|
-
/* @__PURE__ */
|
|
4280
|
-
/* @__PURE__ */
|
|
4281
|
-
/* @__PURE__ */
|
|
4282
|
-
/* @__PURE__ */
|
|
2584
|
+
return /* @__PURE__ */ jsxs18("div", { className: cn(CONTENT_CARD_SKELETON_FRAME_CLASS, "flex flex-col gap-4 p-6", "animate-pulse", className), children: [
|
|
2585
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex flex-col gap-4 content-md:flex-row content-md:gap-6", children: [
|
|
2586
|
+
/* @__PURE__ */ jsx28("div", { className: "aspect-[1200/630] w-full flex-shrink-0 rounded-lg bg-ods-border content-md:w-[256px]" }),
|
|
2587
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
2588
|
+
/* @__PURE__ */ jsx28("div", { className: "mb-3 flex items-center gap-3", children: /* @__PURE__ */ jsx28("div", { className: "h-7 w-20 rounded bg-ods-border" }) }),
|
|
2589
|
+
/* @__PURE__ */ jsxs18("div", { className: "mb-3 flex min-h-[60px] flex-col justify-start gap-1.5 content-md:min-h-[72px]", children: [
|
|
2590
|
+
/* @__PURE__ */ jsx28("div", { className: "h-[25px] w-3/4 rounded bg-ods-border content-md:h-[30px]" }),
|
|
2591
|
+
/* @__PURE__ */ jsx28("div", { className: "h-[25px] w-1/2 rounded bg-ods-border content-md:h-[30px]" })
|
|
4283
2592
|
] }),
|
|
4284
|
-
/* @__PURE__ */
|
|
4285
|
-
/* @__PURE__ */
|
|
4286
|
-
/* @__PURE__ */
|
|
4287
|
-
/* @__PURE__ */
|
|
2593
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex min-h-[68px] flex-col justify-start gap-2 content-md:min-h-[78px]", children: [
|
|
2594
|
+
/* @__PURE__ */ jsx28("div", { className: "h-3 w-full rounded bg-ods-border/70" }),
|
|
2595
|
+
/* @__PURE__ */ jsx28("div", { className: "h-3 w-11/12 rounded bg-ods-border/70" }),
|
|
2596
|
+
/* @__PURE__ */ jsx28("div", { className: "h-3 w-5/6 rounded bg-ods-border/70" })
|
|
4288
2597
|
] })
|
|
4289
2598
|
] })
|
|
4290
2599
|
] }),
|
|
4291
|
-
/* @__PURE__ */
|
|
4292
|
-
/* @__PURE__ */
|
|
4293
|
-
[0, 1, 2].map((i) => /* @__PURE__ */
|
|
2600
|
+
/* @__PURE__ */ jsx28("div", { className: "border-t border-ods-border pt-3", children: /* @__PURE__ */ jsx28("div", { className: "h-5 w-2/3 rounded bg-ods-border/70" }) }),
|
|
2601
|
+
/* @__PURE__ */ jsxs18("div", { className: "grid w-full grid-cols-1 overflow-hidden rounded-md border border-ods-border content-md:grid-cols-4", children: [
|
|
2602
|
+
[0, 1, 2].map((i) => /* @__PURE__ */ jsx28(
|
|
4294
2603
|
"div",
|
|
4295
2604
|
{
|
|
4296
2605
|
className: "flex flex-col gap-3 border-b border-ods-border p-4 content-md:border-b-0 content-md:border-r",
|
|
4297
|
-
children: /* @__PURE__ */
|
|
4298
|
-
/* @__PURE__ */
|
|
4299
|
-
/* @__PURE__ */
|
|
2606
|
+
children: /* @__PURE__ */ jsxs18("div", { className: "flex flex-col gap-2", children: [
|
|
2607
|
+
/* @__PURE__ */ jsx28("div", { className: "h-7 w-24 rounded bg-ods-border" }),
|
|
2608
|
+
/* @__PURE__ */ jsx28("div", { className: "h-4 w-16 rounded bg-ods-border" })
|
|
4300
2609
|
] })
|
|
4301
2610
|
},
|
|
4302
2611
|
`cell-${i}`
|
|
4303
2612
|
)),
|
|
4304
|
-
/* @__PURE__ */
|
|
4305
|
-
/* @__PURE__ */
|
|
4306
|
-
/* @__PURE__ */
|
|
4307
|
-
/* @__PURE__ */
|
|
4308
|
-
/* @__PURE__ */
|
|
2613
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-3 p-4", children: [
|
|
2614
|
+
/* @__PURE__ */ jsx28("div", { className: "h-10 w-10 shrink-0 rounded-full bg-ods-border" }),
|
|
2615
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex min-w-0 flex-1 flex-col gap-2", children: [
|
|
2616
|
+
/* @__PURE__ */ jsx28("div", { className: "h-5 w-3/4 rounded bg-ods-border" }),
|
|
2617
|
+
/* @__PURE__ */ jsx28("div", { className: "h-4 w-1/2 rounded bg-ods-border" })
|
|
4309
2618
|
] })
|
|
4310
2619
|
] })
|
|
4311
2620
|
] })
|
|
4312
2621
|
] });
|
|
4313
2622
|
}
|
|
4314
2623
|
if (size2 === "sm") {
|
|
4315
|
-
return /* @__PURE__ */
|
|
2624
|
+
return /* @__PURE__ */ jsxs18(
|
|
4316
2625
|
"span",
|
|
4317
2626
|
{
|
|
4318
2627
|
className: cn(
|
|
@@ -4321,14 +2630,14 @@ function ProductReleaseCardSkeleton({ className, size: size2 = "lg" }) {
|
|
|
4321
2630
|
className
|
|
4322
2631
|
),
|
|
4323
2632
|
children: [
|
|
4324
|
-
/* @__PURE__ */
|
|
4325
|
-
/* @__PURE__ */
|
|
4326
|
-
/* @__PURE__ */
|
|
4327
|
-
/* @__PURE__ */
|
|
4328
|
-
/* @__PURE__ */
|
|
2633
|
+
/* @__PURE__ */ jsx28("span", { className: "block aspect-square h-14 w-14 shrink-0 self-start rounded-md bg-ods-bg" }),
|
|
2634
|
+
/* @__PURE__ */ jsxs18("span", { className: "flex min-h-14 min-w-0 flex-1 flex-col gap-0.5", children: [
|
|
2635
|
+
/* @__PURE__ */ jsxs18("span", { className: "flex h-5 min-w-0 items-center gap-2", children: [
|
|
2636
|
+
/* @__PURE__ */ jsx28("span", { className: "h-3.5 w-3/5 rounded bg-ods-bg" }),
|
|
2637
|
+
/* @__PURE__ */ jsx28("span", { className: "h-4 w-12 shrink-0 rounded bg-ods-bg/70" })
|
|
4329
2638
|
] }),
|
|
4330
|
-
/* @__PURE__ */
|
|
4331
|
-
/* @__PURE__ */
|
|
2639
|
+
/* @__PURE__ */ jsx28("span", { className: "flex h-4 min-w-0 items-center", children: /* @__PURE__ */ jsx28("span", { className: "h-3 w-1/3 rounded bg-ods-bg/70" }) }),
|
|
2640
|
+
/* @__PURE__ */ jsx28("span", { className: "flex h-4 min-w-0 items-center", children: /* @__PURE__ */ jsx28("span", { className: "h-3 w-11/12 rounded bg-ods-bg/40" }) })
|
|
4332
2641
|
] })
|
|
4333
2642
|
]
|
|
4334
2643
|
}
|
|
@@ -4482,10 +2791,10 @@ function safeHref(url) {
|
|
|
4482
2791
|
import { Eye as Eye2 } from "lucide-react";
|
|
4483
2792
|
|
|
4484
2793
|
// src/components/chat/entity-cards/use-entity-card-link.ts
|
|
4485
|
-
import { useMemo as
|
|
2794
|
+
import { useMemo as useMemo2 } from "react";
|
|
4486
2795
|
function useEntityCardLink({ href, targetPlatform, target, rel }) {
|
|
4487
2796
|
const runtime = useChatRuntime();
|
|
4488
|
-
return
|
|
2797
|
+
return useMemo2(() => {
|
|
4489
2798
|
if (target !== void 0 || rel !== void 0) {
|
|
4490
2799
|
const safeRel = rel ?? (target === "_blank" ? "noopener noreferrer" : void 0);
|
|
4491
2800
|
return { target, rel: safeRel };
|
|
@@ -4507,28 +2816,28 @@ function useEntityCardPlaceholder({
|
|
|
4507
2816
|
}
|
|
4508
2817
|
|
|
4509
2818
|
// src/components/chat/entity-cards/blog-card.tsx
|
|
4510
|
-
import { Fragment as
|
|
2819
|
+
import { Fragment as Fragment9, jsx as jsx29, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
4511
2820
|
function BlogCardSkeleton({ size: size2 = "default" }) {
|
|
4512
2821
|
if (size2 === "sm") {
|
|
4513
|
-
return /* @__PURE__ */
|
|
4514
|
-
/* @__PURE__ */
|
|
4515
|
-
/* @__PURE__ */
|
|
4516
|
-
/* @__PURE__ */
|
|
4517
|
-
/* @__PURE__ */
|
|
4518
|
-
/* @__PURE__ */
|
|
2822
|
+
return /* @__PURE__ */ jsxs19("span", { className: COMPACT_CARD_SKELETON_OUTER, children: [
|
|
2823
|
+
/* @__PURE__ */ jsx29("span", { className: COMPACT_CARD_SKELETON_IMAGE_SLOT }),
|
|
2824
|
+
/* @__PURE__ */ jsxs19("span", { className: COMPACT_CARD_TEXT_COL, children: [
|
|
2825
|
+
/* @__PURE__ */ jsx29("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx29("span", { className: "h-3.5 w-3/5 rounded bg-ods-bg" }) }),
|
|
2826
|
+
/* @__PURE__ */ jsx29("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx29("span", { className: "h-3 w-2/5 rounded bg-ods-bg/70" }) }),
|
|
2827
|
+
/* @__PURE__ */ jsx29("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx29("span", { className: "h-3 w-11/12 rounded bg-ods-bg/40" }) })
|
|
4519
2828
|
] })
|
|
4520
2829
|
] });
|
|
4521
2830
|
}
|
|
4522
|
-
return /* @__PURE__ */
|
|
4523
|
-
/* @__PURE__ */
|
|
4524
|
-
/* @__PURE__ */
|
|
4525
|
-
/* @__PURE__ */
|
|
4526
|
-
/* @__PURE__ */
|
|
4527
|
-
/* @__PURE__ */
|
|
4528
|
-
/* @__PURE__ */
|
|
4529
|
-
/* @__PURE__ */
|
|
4530
|
-
/* @__PURE__ */
|
|
4531
|
-
/* @__PURE__ */
|
|
2831
|
+
return /* @__PURE__ */ jsxs19("article", { className: cn(CONTENT_CARD_SKELETON_FRAME_CLASS, "group flex h-full animate-pulse flex-col"), children: [
|
|
2832
|
+
/* @__PURE__ */ jsx29("div", { className: "aspect-[1200/630] bg-ods-border" }),
|
|
2833
|
+
/* @__PURE__ */ jsxs19("div", { className: "flex flex-grow flex-col space-y-3 p-4", children: [
|
|
2834
|
+
/* @__PURE__ */ jsx29("div", { className: "h-5 w-3/4 rounded bg-ods-border" }),
|
|
2835
|
+
/* @__PURE__ */ jsx29("div", { className: "h-5 w-1/2 rounded bg-ods-border" }),
|
|
2836
|
+
/* @__PURE__ */ jsx29("div", { className: "h-3 w-full rounded bg-ods-border" }),
|
|
2837
|
+
/* @__PURE__ */ jsx29("div", { className: "h-3 w-4/5 rounded bg-ods-border" }),
|
|
2838
|
+
/* @__PURE__ */ jsxs19("div", { className: "mt-auto flex items-center gap-2", children: [
|
|
2839
|
+
/* @__PURE__ */ jsx29("div", { className: "h-8 w-8 rounded-full bg-ods-border" }),
|
|
2840
|
+
/* @__PURE__ */ jsx29("div", { className: "h-3 w-24 rounded bg-ods-border" })
|
|
4532
2841
|
] })
|
|
4533
2842
|
] })
|
|
4534
2843
|
] });
|
|
@@ -4561,7 +2870,7 @@ function BlogCard({
|
|
|
4561
2870
|
if (size2 === "sm") {
|
|
4562
2871
|
const dateStr2 = post.published_at ? formatDateWithTimezone(post.published_at, null, "medium") : "";
|
|
4563
2872
|
const firstCategory = post.categories?.find((c) => c && c.name)?.name;
|
|
4564
|
-
return /* @__PURE__ */
|
|
2873
|
+
return /* @__PURE__ */ jsxs19(
|
|
4565
2874
|
"a",
|
|
4566
2875
|
{
|
|
4567
2876
|
href,
|
|
@@ -4570,7 +2879,7 @@ function BlogCard({
|
|
|
4570
2879
|
className: cn(COMPACT_CARD_OUTER, className),
|
|
4571
2880
|
"aria-label": `Read article: ${post.title}`,
|
|
4572
2881
|
children: [
|
|
4573
|
-
/* @__PURE__ */
|
|
2882
|
+
/* @__PURE__ */ jsx29("span", { className: COMPACT_CARD_IMAGE_SLOT, children: displayImage ? /* @__PURE__ */ jsx29(
|
|
4574
2883
|
next_image_default,
|
|
4575
2884
|
{
|
|
4576
2885
|
src: displayImage,
|
|
@@ -4582,17 +2891,17 @@ function BlogCard({
|
|
|
4582
2891
|
onError: onImageError
|
|
4583
2892
|
}
|
|
4584
2893
|
) : null }),
|
|
4585
|
-
/* @__PURE__ */
|
|
4586
|
-
/* @__PURE__ */
|
|
4587
|
-
/* @__PURE__ */
|
|
4588
|
-
hasEmbeddedVideo ? /* @__PURE__ */
|
|
2894
|
+
/* @__PURE__ */ jsxs19("span", { className: COMPACT_CARD_TEXT_COL, children: [
|
|
2895
|
+
/* @__PURE__ */ jsxs19("span", { className: cn(COMPACT_CARD_TITLE_ROW, "gap-1.5"), children: [
|
|
2896
|
+
/* @__PURE__ */ jsx29("span", { className: cn(COMPACT_CARD_TITLE, "font-body"), children: post.title }),
|
|
2897
|
+
hasEmbeddedVideo ? /* @__PURE__ */ jsx29(StatusBadge, { text: "Video", variant: "button", colorScheme: "cyan", className: "shrink-0" }) : null
|
|
4589
2898
|
] }),
|
|
4590
|
-
/* @__PURE__ */
|
|
2899
|
+
/* @__PURE__ */ jsx29("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsxs19("span", { className: COMPACT_CARD_SUBTITLE, children: [
|
|
4591
2900
|
dateStr2,
|
|
4592
2901
|
dateStr2 && firstCategory ? " \xB7 " : "",
|
|
4593
2902
|
firstCategory ?? "Blog Post"
|
|
4594
2903
|
] }) }),
|
|
4595
|
-
/* @__PURE__ */
|
|
2904
|
+
/* @__PURE__ */ jsx29("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx29("span", { className: COMPACT_CARD_SUMMARY, children: post.summary || COMPACT_CARD_ROW_FILLER }) })
|
|
4596
2905
|
] })
|
|
4597
2906
|
]
|
|
4598
2907
|
}
|
|
@@ -4600,7 +2909,7 @@ function BlogCard({
|
|
|
4600
2909
|
}
|
|
4601
2910
|
if (size2 === "portrait") {
|
|
4602
2911
|
const dateStr2 = post.published_at ? formatDateWithTimezone(post.published_at, null, "medium") : "";
|
|
4603
|
-
return /* @__PURE__ */
|
|
2912
|
+
return /* @__PURE__ */ jsx29(
|
|
4604
2913
|
EntityPortraitCard,
|
|
4605
2914
|
{
|
|
4606
2915
|
href,
|
|
@@ -4621,7 +2930,7 @@ function BlogCard({
|
|
|
4621
2930
|
);
|
|
4622
2931
|
}
|
|
4623
2932
|
const dateStr = post.published_at ? formatDateWithTimezone(post.published_at, null, "medium") : "";
|
|
4624
|
-
return /* @__PURE__ */
|
|
2933
|
+
return /* @__PURE__ */ jsx29("article", { className: cn(CONTENT_CARD_FRAME_CLASS, "flex h-full flex-col", className), role: "article", children: /* @__PURE__ */ jsxs19(
|
|
4625
2934
|
"a",
|
|
4626
2935
|
{
|
|
4627
2936
|
href,
|
|
@@ -4630,7 +2939,7 @@ function BlogCard({
|
|
|
4630
2939
|
className: "flex h-full flex-col focus:outline-none",
|
|
4631
2940
|
"aria-label": `Read article: ${post.title}`,
|
|
4632
2941
|
children: [
|
|
4633
|
-
/* @__PURE__ */
|
|
2942
|
+
/* @__PURE__ */ jsx29("div", { className: "relative aspect-[1200/630] w-full overflow-hidden bg-ods-bg", children: displayImage ? /* @__PURE__ */ jsx29(
|
|
4634
2943
|
next_image_default,
|
|
4635
2944
|
{
|
|
4636
2945
|
src: displayImage,
|
|
@@ -4644,8 +2953,8 @@ function BlogCard({
|
|
|
4644
2953
|
onError: onImageError
|
|
4645
2954
|
}
|
|
4646
2955
|
) : null }),
|
|
4647
|
-
/* @__PURE__ */
|
|
4648
|
-
/* @__PURE__ */
|
|
2956
|
+
/* @__PURE__ */ jsxs19("div", { className: "flex flex-grow flex-col p-4", children: [
|
|
2957
|
+
/* @__PURE__ */ jsx29("div", { className: "mb-3 flex min-h-[50.4px] items-center md:min-h-[56px] lg:min-h-[61.6px]", children: /* @__PURE__ */ jsx29(
|
|
4649
2958
|
"h3",
|
|
4650
2959
|
{
|
|
4651
2960
|
className: cn(
|
|
@@ -4657,10 +2966,10 @@ function BlogCard({
|
|
|
4657
2966
|
children: post.title
|
|
4658
2967
|
}
|
|
4659
2968
|
) }),
|
|
4660
|
-
/* @__PURE__ */
|
|
4661
|
-
/* @__PURE__ */
|
|
4662
|
-
/* @__PURE__ */
|
|
4663
|
-
post.author_avatar ? /* @__PURE__ */
|
|
2969
|
+
/* @__PURE__ */ jsx29("div", { className: "mb-3 flex min-h-[42px] items-center md:min-h-[45px] lg:min-h-[48px]", children: /* @__PURE__ */ jsx29("p", { className: cn("text-ods-text-primary text-h6", "line-clamp-2"), children: post.summary || "" }) }),
|
|
2970
|
+
/* @__PURE__ */ jsxs19("div", { className: "mt-auto flex items-center justify-between gap-2 text-ods-text-secondary text-h6", children: [
|
|
2971
|
+
/* @__PURE__ */ jsxs19("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
2972
|
+
post.author_avatar ? /* @__PURE__ */ jsx29(
|
|
4664
2973
|
next_image_default,
|
|
4665
2974
|
{
|
|
4666
2975
|
src: post.author_avatar,
|
|
@@ -4671,22 +2980,22 @@ function BlogCard({
|
|
|
4671
2980
|
unoptimized: true
|
|
4672
2981
|
}
|
|
4673
2982
|
) : null,
|
|
4674
|
-
/* @__PURE__ */
|
|
2983
|
+
/* @__PURE__ */ jsxs19("span", { className: "truncate", children: [
|
|
4675
2984
|
post.author_name || "Anonymous",
|
|
4676
|
-
dateStr ? /* @__PURE__ */
|
|
2985
|
+
dateStr ? /* @__PURE__ */ jsxs19(Fragment9, { children: [
|
|
4677
2986
|
" \xB7 ",
|
|
4678
2987
|
dateStr
|
|
4679
2988
|
] }) : null
|
|
4680
2989
|
] })
|
|
4681
2990
|
] }),
|
|
4682
|
-
/* @__PURE__ */
|
|
2991
|
+
/* @__PURE__ */ jsxs19(
|
|
4683
2992
|
"div",
|
|
4684
2993
|
{
|
|
4685
2994
|
className: "flex shrink-0 items-center gap-1",
|
|
4686
2995
|
"aria-label": `View count: ${(post.view_count ?? 0).toLocaleString("en-US")} views`,
|
|
4687
2996
|
children: [
|
|
4688
|
-
/* @__PURE__ */
|
|
4689
|
-
/* @__PURE__ */
|
|
2997
|
+
/* @__PURE__ */ jsx29(Eye2, { className: "h-4 w-4 shrink-0" }),
|
|
2998
|
+
/* @__PURE__ */ jsx29("span", { children: (post.view_count ?? 0).toLocaleString("en-US") })
|
|
4690
2999
|
]
|
|
4691
3000
|
}
|
|
4692
3001
|
)
|
|
@@ -4698,41 +3007,33 @@ function BlogCard({
|
|
|
4698
3007
|
}
|
|
4699
3008
|
|
|
4700
3009
|
// src/components/chat/entity-cards/case-study-card.tsx
|
|
4701
|
-
import {
|
|
4702
|
-
import { Fragment as Fragment11, jsx as jsx35, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
3010
|
+
import { jsx as jsx30, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
4703
3011
|
function CaseStudyCardSkeleton({ size: size2 = "default" }) {
|
|
4704
3012
|
if (size2 === "sm") {
|
|
4705
|
-
return /* @__PURE__ */
|
|
4706
|
-
/* @__PURE__ */
|
|
4707
|
-
/* @__PURE__ */
|
|
4708
|
-
/* @__PURE__ */
|
|
4709
|
-
/* @__PURE__ */
|
|
4710
|
-
/* @__PURE__ */
|
|
3013
|
+
return /* @__PURE__ */ jsxs20("span", { className: COMPACT_CARD_SKELETON_OUTER, children: [
|
|
3014
|
+
/* @__PURE__ */ jsx30("span", { className: COMPACT_CARD_SKELETON_IMAGE_SLOT }),
|
|
3015
|
+
/* @__PURE__ */ jsxs20("span", { className: COMPACT_CARD_TEXT_COL, children: [
|
|
3016
|
+
/* @__PURE__ */ jsx30("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx30("span", { className: "h-3.5 w-3/5 rounded bg-ods-bg" }) }),
|
|
3017
|
+
/* @__PURE__ */ jsx30("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx30("span", { className: "h-3 w-1/2 rounded bg-ods-bg/70" }) }),
|
|
3018
|
+
/* @__PURE__ */ jsx30("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx30("span", { className: "h-3 w-11/12 rounded bg-ods-bg/40" }) })
|
|
4711
3019
|
] })
|
|
4712
3020
|
] });
|
|
4713
3021
|
}
|
|
4714
|
-
return /* @__PURE__ */
|
|
4715
|
-
/* @__PURE__ */
|
|
4716
|
-
/* @__PURE__ */
|
|
4717
|
-
/* @__PURE__ */
|
|
4718
|
-
/* @__PURE__ */
|
|
3022
|
+
return /* @__PURE__ */ jsxs20("div", { className: cn(CONTENT_CARD_SKELETON_FRAME_CLASS, "flex animate-pulse flex-col gap-6 p-6"), children: [
|
|
3023
|
+
/* @__PURE__ */ jsx30("div", { className: "aspect-[1200/630] w-full rounded-sm bg-ods-border" }),
|
|
3024
|
+
/* @__PURE__ */ jsxs20("div", { className: "flex h-[72px] flex-col gap-2", children: [
|
|
3025
|
+
/* @__PURE__ */ jsx30("div", { className: "h-5 w-3/4 rounded bg-ods-border" }),
|
|
3026
|
+
/* @__PURE__ */ jsx30("div", { className: "h-5 w-1/2 rounded bg-ods-border" })
|
|
4719
3027
|
] }),
|
|
4720
|
-
/* @__PURE__ */
|
|
4721
|
-
/* @__PURE__ */
|
|
4722
|
-
/* @__PURE__ */
|
|
4723
|
-
/* @__PURE__ */
|
|
4724
|
-
/* @__PURE__ */
|
|
3028
|
+
/* @__PURE__ */ jsxs20("div", { className: "flex h-[60px] items-center gap-3", children: [
|
|
3029
|
+
/* @__PURE__ */ jsx30("div", { className: "h-12 w-12 rounded-full bg-ods-border" }),
|
|
3030
|
+
/* @__PURE__ */ jsxs20("div", { className: "flex-1 space-y-2", children: [
|
|
3031
|
+
/* @__PURE__ */ jsx30("div", { className: "h-4 w-2/3 rounded bg-ods-border" }),
|
|
3032
|
+
/* @__PURE__ */ jsx30("div", { className: "h-3 w-1/2 rounded bg-ods-border" })
|
|
4725
3033
|
] })
|
|
4726
3034
|
] })
|
|
4727
3035
|
] });
|
|
4728
3036
|
}
|
|
4729
|
-
function caseStudyHighlight(study) {
|
|
4730
|
-
if (study.highlight_video_url) {
|
|
4731
|
-
return { url: study.highlight_video_url, posterUrl: study.highlight_video_thumbnail ?? null };
|
|
4732
|
-
}
|
|
4733
|
-
const bite = (study.video_bites ?? []).filter((candidate) => candidate.featured === true && candidate.url).sort(sortBitesByFeaturedAtDesc)[0];
|
|
4734
|
-
return bite ? { url: bite.url, posterUrl: bite.thumbnail_url ?? null } : null;
|
|
4735
|
-
}
|
|
4736
3037
|
function CaseStudyCard({
|
|
4737
3038
|
study,
|
|
4738
3039
|
href,
|
|
@@ -4742,11 +3043,8 @@ function CaseStudyCard({
|
|
|
4742
3043
|
placeholderUrl: placeholderUrlProp,
|
|
4743
3044
|
size: size2 = "default",
|
|
4744
3045
|
showTypeBadge = true,
|
|
4745
|
-
mediaMounted,
|
|
4746
|
-
onNavigate,
|
|
4747
3046
|
className
|
|
4748
3047
|
}) {
|
|
4749
|
-
const [hovered, setHovered] = useState8(false);
|
|
4750
3048
|
const { target, rel } = useEntityCardLink({
|
|
4751
3049
|
href,
|
|
4752
3050
|
targetPlatform,
|
|
@@ -4760,8 +3058,8 @@ function CaseStudyCard({
|
|
|
4760
3058
|
});
|
|
4761
3059
|
const coverImage = study.featured_image || placeholderUrl || null;
|
|
4762
3060
|
if (size2 === "sm") {
|
|
4763
|
-
return /* @__PURE__ */
|
|
4764
|
-
/* @__PURE__ */
|
|
3061
|
+
return /* @__PURE__ */ jsxs20("a", { href, target, rel, className: cn(COMPACT_CARD_OUTER, className), children: [
|
|
3062
|
+
/* @__PURE__ */ jsx30("span", { className: COMPACT_CARD_IMAGE_SLOT, children: coverImage ? /* @__PURE__ */ jsx30(
|
|
4765
3063
|
next_image_default,
|
|
4766
3064
|
{
|
|
4767
3065
|
src: coverImage,
|
|
@@ -4773,85 +3071,15 @@ function CaseStudyCard({
|
|
|
4773
3071
|
onError: hideOnError
|
|
4774
3072
|
}
|
|
4775
3073
|
) : null }),
|
|
4776
|
-
/* @__PURE__ */
|
|
4777
|
-
/* @__PURE__ */
|
|
4778
|
-
/* @__PURE__ */
|
|
4779
|
-
/* @__PURE__ */
|
|
3074
|
+
/* @__PURE__ */ jsxs20("span", { className: COMPACT_CARD_TEXT_COL, children: [
|
|
3075
|
+
/* @__PURE__ */ jsx30("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx30("span", { className: COMPACT_CARD_TITLE, children: study.title }) }),
|
|
3076
|
+
/* @__PURE__ */ jsx30("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx30("span", { className: COMPACT_CARD_SUBTITLE, children: [study.msp?.name, study.user?.full_name].filter(Boolean).join(" \xB7 ") || "Case study" }) }),
|
|
3077
|
+
/* @__PURE__ */ jsx30("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx30("span", { className: COMPACT_CARD_SUMMARY, children: study.summary || COMPACT_CARD_ROW_FILLER }) })
|
|
4780
3078
|
] })
|
|
4781
3079
|
] });
|
|
4782
3080
|
}
|
|
4783
|
-
if (size2 === "menu") {
|
|
4784
|
-
const preview = caseStudyHighlight(study);
|
|
4785
|
-
const videoUrl = preview?.url ?? null;
|
|
4786
|
-
const hasAnyVideo = !!(videoUrl || study.main_video_url);
|
|
4787
|
-
const poster = study.main_video_thumbnail || study.featured_image || preview?.posterUrl || null;
|
|
4788
|
-
return /* @__PURE__ */ jsxs22(
|
|
4789
|
-
next_link_default,
|
|
4790
|
-
{
|
|
4791
|
-
href,
|
|
4792
|
-
target,
|
|
4793
|
-
rel,
|
|
4794
|
-
onClick: onNavigate,
|
|
4795
|
-
onPointerEnter: () => setHovered(true),
|
|
4796
|
-
onPointerLeave: () => setHovered(false),
|
|
4797
|
-
onFocus: () => setHovered(true),
|
|
4798
|
-
onBlur: () => setHovered(false),
|
|
4799
|
-
className: cn(
|
|
4800
|
-
// `group/card` is what the shared play glyph accents on.
|
|
4801
|
-
"group/card group flex min-w-0 flex-col gap-[var(--spacing-system-sf)] rounded-xl border border-ods-border bg-ods-bg p-[var(--spacing-system-mf)] text-ods-text-primary transition-colors hover:bg-ods-bg-hover focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ods-accent",
|
|
4802
|
-
className
|
|
4803
|
-
),
|
|
4804
|
-
children: [
|
|
4805
|
-
/* @__PURE__ */ jsx35("span", { className: "pointer-events-none relative block aspect-video w-full shrink-0 overflow-hidden rounded-md bg-ods-bg", children: videoUrl ? (
|
|
4806
|
-
// The shared hover surface, filled the way the walkthrough card fills
|
|
4807
|
-
// its own 16:9 slot (`cover`): an upright cut is cropped to the slot,
|
|
4808
|
-
// never letterboxed. Sound on hover, muted when the browser blocks it.
|
|
4809
|
-
/* @__PURE__ */ jsx35(
|
|
4810
|
-
VideoHoverPreviewSurface,
|
|
4811
|
-
{
|
|
4812
|
-
url: videoUrl,
|
|
4813
|
-
posterUrl: poster,
|
|
4814
|
-
active: hovered,
|
|
4815
|
-
playerMounted: mediaMounted,
|
|
4816
|
-
fit: "cover",
|
|
4817
|
-
posterSizes: "360px"
|
|
4818
|
-
}
|
|
4819
|
-
)
|
|
4820
|
-
) : /* @__PURE__ */ jsxs22(Fragment11, { children: [
|
|
4821
|
-
(poster ?? placeholderUrl) && /* @__PURE__ */ jsx35(
|
|
4822
|
-
next_image_default,
|
|
4823
|
-
{
|
|
4824
|
-
src: poster ?? placeholderUrl ?? "",
|
|
4825
|
-
alt: "",
|
|
4826
|
-
className: "object-cover",
|
|
4827
|
-
fill: true,
|
|
4828
|
-
sizes: "360px",
|
|
4829
|
-
unoptimized: true,
|
|
4830
|
-
onError: hideOnError
|
|
4831
|
-
}
|
|
4832
|
-
),
|
|
4833
|
-
hasAnyVideo && /* @__PURE__ */ jsx35(CardHoverPlay, { size: "md" })
|
|
4834
|
-
] }) }),
|
|
4835
|
-
study.msp?.name && /* @__PURE__ */ jsxs22("span", { className: "flex items-center gap-[var(--spacing-system-xsf)] text-ods-text-secondary text-h6", children: [
|
|
4836
|
-
study.msp.icon_url && /* @__PURE__ */ jsx35(
|
|
4837
|
-
EntityIcon,
|
|
4838
|
-
{
|
|
4839
|
-
icon: { url: study.msp.icon_url },
|
|
4840
|
-
size: 20,
|
|
4841
|
-
className: "size-5 shrink-0 rounded object-contain"
|
|
4842
|
-
}
|
|
4843
|
-
),
|
|
4844
|
-
/* @__PURE__ */ jsx35("span", { className: "min-w-0 truncate", children: study.msp.name })
|
|
4845
|
-
] }),
|
|
4846
|
-
/* @__PURE__ */ jsx35("span", { className: "line-clamp-2 text-h6", children: study.title }),
|
|
4847
|
-
study.user?.full_name && /* @__PURE__ */ jsx35("span", { className: "truncate text-ods-text-muted text-h6", children: study.user.job_title ? `${study.user.full_name}, ${study.user.job_title}` : study.user.full_name }),
|
|
4848
|
-
/* @__PURE__ */ jsx35("span", { className: "mt-auto text-ods-accent text-h6", children: hasAnyVideo ? "Watch the story" : "Read the story" })
|
|
4849
|
-
]
|
|
4850
|
-
}
|
|
4851
|
-
);
|
|
4852
|
-
}
|
|
4853
3081
|
if (size2 === "portrait") {
|
|
4854
|
-
return /* @__PURE__ */
|
|
3082
|
+
return /* @__PURE__ */ jsx30(
|
|
4855
3083
|
EntityPortraitCard,
|
|
4856
3084
|
{
|
|
4857
3085
|
href,
|
|
@@ -4872,8 +3100,8 @@ function CaseStudyCard({
|
|
|
4872
3100
|
}
|
|
4873
3101
|
);
|
|
4874
3102
|
}
|
|
4875
|
-
return /* @__PURE__ */
|
|
4876
|
-
/* @__PURE__ */
|
|
3103
|
+
return /* @__PURE__ */ jsx30("a", { href, target, rel, className: cn("block h-full", className), children: /* @__PURE__ */ jsxs20(Card, { className: cn(CONTENT_CARD_FRAME_CLASS, "flex flex-col gap-6 p-6"), children: [
|
|
3104
|
+
/* @__PURE__ */ jsx30("div", { className: "relative aspect-[1200/630] w-full shrink-0 overflow-hidden rounded-sm bg-ods-bg", children: coverImage && /* @__PURE__ */ jsx30(
|
|
4877
3105
|
next_image_default,
|
|
4878
3106
|
{
|
|
4879
3107
|
src: coverImage,
|
|
@@ -4885,10 +3113,10 @@ function CaseStudyCard({
|
|
|
4885
3113
|
onError: hideOnError
|
|
4886
3114
|
}
|
|
4887
3115
|
) }),
|
|
4888
|
-
/* @__PURE__ */
|
|
4889
|
-
/* @__PURE__ */
|
|
4890
|
-
/* @__PURE__ */
|
|
4891
|
-
study.user?.avatar_url ? /* @__PURE__ */
|
|
3116
|
+
/* @__PURE__ */ jsx30("div", { className: "flex h-[72px] shrink-0 items-center", children: /* @__PURE__ */ jsx30("p", { className: "line-clamp-3 break-words text-ods-text-primary text-h4", children: study.title }) }),
|
|
3117
|
+
/* @__PURE__ */ jsx30("div", { className: "flex h-[60px] shrink-0 items-center", children: /* @__PURE__ */ jsxs20("div", { className: "flex w-full min-w-0 items-center gap-3", children: [
|
|
3118
|
+
/* @__PURE__ */ jsxs20("div", { className: "relative h-12 w-12 shrink-0", children: [
|
|
3119
|
+
study.user?.avatar_url ? /* @__PURE__ */ jsx30(
|
|
4892
3120
|
next_image_default,
|
|
4893
3121
|
{
|
|
4894
3122
|
src: study.user.avatar_url,
|
|
@@ -4898,8 +3126,8 @@ function CaseStudyCard({
|
|
|
4898
3126
|
height: 48,
|
|
4899
3127
|
unoptimized: true
|
|
4900
3128
|
}
|
|
4901
|
-
) : /* @__PURE__ */
|
|
4902
|
-
study.msp?.icon_url && /* @__PURE__ */
|
|
3129
|
+
) : /* @__PURE__ */ jsx30("div", { className: "flex h-12 w-12 items-center justify-center rounded-full border border-ods-border bg-ods-bg", children: /* @__PURE__ */ jsx30("span", { className: "text-ods-text-secondary text-h4", children: (study.user?.full_name || "A").charAt(0).toUpperCase() }) }),
|
|
3130
|
+
study.msp?.icon_url && /* @__PURE__ */ jsx30("div", { className: "absolute -bottom-1 -right-1 flex h-6 w-6 items-center justify-center overflow-hidden rounded-full bg-ods-text-primary ring-1 ring-ods-bg", children: /* @__PURE__ */ jsx30(
|
|
4903
3131
|
next_image_default,
|
|
4904
3132
|
{
|
|
4905
3133
|
src: study.msp.icon_url,
|
|
@@ -4911,50 +3139,50 @@ function CaseStudyCard({
|
|
|
4911
3139
|
}
|
|
4912
3140
|
) })
|
|
4913
3141
|
] }),
|
|
4914
|
-
/* @__PURE__ */
|
|
4915
|
-
/* @__PURE__ */
|
|
3142
|
+
/* @__PURE__ */ jsxs20("div", { className: "min-w-0 flex-1", children: [
|
|
3143
|
+
/* @__PURE__ */ jsxs20("p", { className: "truncate text-ods-text-primary text-h6", children: [
|
|
4916
3144
|
study.user?.full_name || "Anonymous",
|
|
4917
|
-
study.msp?.name && /* @__PURE__ */
|
|
3145
|
+
study.msp?.name && /* @__PURE__ */ jsxs20("span", { className: "text-ods-text-secondary", children: [
|
|
4918
3146
|
" \u2022 ",
|
|
4919
3147
|
study.msp.name
|
|
4920
3148
|
] })
|
|
4921
3149
|
] }),
|
|
4922
|
-
/* @__PURE__ */
|
|
3150
|
+
/* @__PURE__ */ jsx30("p", { className: "truncate text-ods-text-secondary text-h6", children: study.user?.job_title || "\xA0" })
|
|
4923
3151
|
] })
|
|
4924
3152
|
] }) })
|
|
4925
3153
|
] }) });
|
|
4926
3154
|
}
|
|
4927
3155
|
|
|
4928
3156
|
// src/components/chat/entity-cards/customer-interview-card.tsx
|
|
4929
|
-
import { Video
|
|
4930
|
-
import { Fragment as
|
|
3157
|
+
import { Video } from "lucide-react";
|
|
3158
|
+
import { Fragment as Fragment10, jsx as jsx31, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
4931
3159
|
function CustomerInterviewCardSkeleton({ size: size2 = "default" }) {
|
|
4932
3160
|
if (size2 === "sm") {
|
|
4933
|
-
return /* @__PURE__ */
|
|
4934
|
-
/* @__PURE__ */
|
|
4935
|
-
/* @__PURE__ */
|
|
4936
|
-
/* @__PURE__ */
|
|
4937
|
-
/* @__PURE__ */
|
|
4938
|
-
/* @__PURE__ */
|
|
3161
|
+
return /* @__PURE__ */ jsxs21("span", { className: COMPACT_CARD_SKELETON_OUTER, children: [
|
|
3162
|
+
/* @__PURE__ */ jsx31("span", { className: COMPACT_CARD_SKELETON_IMAGE_SLOT }),
|
|
3163
|
+
/* @__PURE__ */ jsxs21("span", { className: COMPACT_CARD_TEXT_COL, children: [
|
|
3164
|
+
/* @__PURE__ */ jsx31("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx31("span", { className: "h-3.5 w-3/5 rounded bg-ods-bg" }) }),
|
|
3165
|
+
/* @__PURE__ */ jsx31("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx31("span", { className: "h-3 w-2/5 rounded bg-ods-bg/70" }) }),
|
|
3166
|
+
/* @__PURE__ */ jsx31("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx31("span", { className: "h-3 w-11/12 rounded bg-ods-bg/40" }) })
|
|
4939
3167
|
] })
|
|
4940
3168
|
] });
|
|
4941
3169
|
}
|
|
4942
|
-
return /* @__PURE__ */
|
|
4943
|
-
/* @__PURE__ */
|
|
4944
|
-
/* @__PURE__ */
|
|
4945
|
-
/* @__PURE__ */
|
|
4946
|
-
/* @__PURE__ */
|
|
3170
|
+
return /* @__PURE__ */ jsxs21("div", { className: cn(CONTENT_CARD_SKELETON_FRAME_CLASS, "flex animate-pulse flex-col gap-6 p-6"), children: [
|
|
3171
|
+
/* @__PURE__ */ jsx31("div", { className: "aspect-[1200/630] w-full rounded-sm bg-ods-border" }),
|
|
3172
|
+
/* @__PURE__ */ jsxs21("div", { className: "space-y-2", children: [
|
|
3173
|
+
/* @__PURE__ */ jsx31("div", { className: "h-5 w-3/4 rounded bg-ods-border" }),
|
|
3174
|
+
/* @__PURE__ */ jsx31("div", { className: "h-5 w-1/2 rounded bg-ods-border" })
|
|
4947
3175
|
] }),
|
|
4948
|
-
/* @__PURE__ */
|
|
4949
|
-
/* @__PURE__ */
|
|
4950
|
-
/* @__PURE__ */
|
|
4951
|
-
/* @__PURE__ */
|
|
3176
|
+
/* @__PURE__ */ jsxs21("div", { className: "space-y-2", children: [
|
|
3177
|
+
/* @__PURE__ */ jsx31("div", { className: "h-3 w-full rounded bg-ods-border" }),
|
|
3178
|
+
/* @__PURE__ */ jsx31("div", { className: "h-3 w-5/6 rounded bg-ods-border" }),
|
|
3179
|
+
/* @__PURE__ */ jsx31("div", { className: "h-3 w-4/5 rounded bg-ods-border" })
|
|
4952
3180
|
] }),
|
|
4953
|
-
/* @__PURE__ */
|
|
4954
|
-
/* @__PURE__ */
|
|
4955
|
-
/* @__PURE__ */
|
|
4956
|
-
/* @__PURE__ */
|
|
4957
|
-
/* @__PURE__ */
|
|
3181
|
+
/* @__PURE__ */ jsxs21("div", { className: "mt-auto flex h-[60px] items-center gap-3", children: [
|
|
3182
|
+
/* @__PURE__ */ jsx31("div", { className: "h-12 w-12 rounded-full bg-ods-border" }),
|
|
3183
|
+
/* @__PURE__ */ jsxs21("div", { className: "flex-1 space-y-2", children: [
|
|
3184
|
+
/* @__PURE__ */ jsx31("div", { className: "h-4 w-2/3 rounded bg-ods-border" }),
|
|
3185
|
+
/* @__PURE__ */ jsx31("div", { className: "h-3 w-1/2 rounded bg-ods-border" })
|
|
4958
3186
|
] })
|
|
4959
3187
|
] })
|
|
4960
3188
|
] });
|
|
@@ -4983,9 +3211,9 @@ function CustomerInterviewCard({
|
|
|
4983
3211
|
});
|
|
4984
3212
|
const thumbnailUrl = interview.featured_image || placeholderUrl || null;
|
|
4985
3213
|
if (size2 === "sm") {
|
|
4986
|
-
return /* @__PURE__ */
|
|
4987
|
-
/* @__PURE__ */
|
|
4988
|
-
thumbnailUrl ? /* @__PURE__ */
|
|
3214
|
+
return /* @__PURE__ */ jsxs21("a", { href, target, rel, className: cn(COMPACT_CARD_OUTER, className), children: [
|
|
3215
|
+
/* @__PURE__ */ jsxs21("span", { className: COMPACT_CARD_IMAGE_SLOT, children: [
|
|
3216
|
+
thumbnailUrl ? /* @__PURE__ */ jsx31(
|
|
4989
3217
|
next_image_default,
|
|
4990
3218
|
{
|
|
4991
3219
|
src: thumbnailUrl,
|
|
@@ -4997,17 +3225,17 @@ function CustomerInterviewCard({
|
|
|
4997
3225
|
onError: hideOnError
|
|
4998
3226
|
}
|
|
4999
3227
|
) : null,
|
|
5000
|
-
interview.main_video_url ? /* @__PURE__ */
|
|
3228
|
+
interview.main_video_url ? /* @__PURE__ */ jsx31("span", { className: "absolute inset-0 flex items-center justify-center bg-black/30", children: /* @__PURE__ */ jsx31(Video, { className: "h-4 w-4 text-ods-text-on-dark" }) }) : null
|
|
5001
3229
|
] }),
|
|
5002
|
-
/* @__PURE__ */
|
|
5003
|
-
/* @__PURE__ */
|
|
5004
|
-
/* @__PURE__ */
|
|
5005
|
-
/* @__PURE__ */
|
|
3230
|
+
/* @__PURE__ */ jsxs21("span", { className: COMPACT_CARD_TEXT_COL, children: [
|
|
3231
|
+
/* @__PURE__ */ jsx31("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx31("span", { className: COMPACT_CARD_TITLE, children: interview.title }) }),
|
|
3232
|
+
/* @__PURE__ */ jsx31("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx31("span", { className: COMPACT_CARD_SUBTITLE, children: [interview.user?.full_name, interview.msp?.name].filter(Boolean).join(" \xB7 ") || "Customer interview" }) }),
|
|
3233
|
+
/* @__PURE__ */ jsx31("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx31("span", { className: COMPACT_CARD_SUMMARY, children: interview.video_summary || COMPACT_CARD_ROW_FILLER }) })
|
|
5006
3234
|
] })
|
|
5007
3235
|
] });
|
|
5008
3236
|
}
|
|
5009
3237
|
if (size2 === "portrait") {
|
|
5010
|
-
return /* @__PURE__ */
|
|
3238
|
+
return /* @__PURE__ */ jsx31(
|
|
5011
3239
|
EntityPortraitCard,
|
|
5012
3240
|
{
|
|
5013
3241
|
href,
|
|
@@ -5028,9 +3256,9 @@ function CustomerInterviewCard({
|
|
|
5028
3256
|
}
|
|
5029
3257
|
);
|
|
5030
3258
|
}
|
|
5031
|
-
return /* @__PURE__ */
|
|
5032
|
-
/* @__PURE__ */
|
|
5033
|
-
/* @__PURE__ */
|
|
3259
|
+
return /* @__PURE__ */ jsx31("a", { href, target, rel, className: cn("block h-full", className), children: /* @__PURE__ */ jsxs21(Card, { className: cn(CONTENT_CARD_FRAME_CLASS, "flex flex-col gap-6 p-6"), children: [
|
|
3260
|
+
/* @__PURE__ */ jsx31("div", { className: "relative aspect-[1200/630] w-full shrink-0 overflow-hidden rounded-sm bg-ods-bg", children: thumbnailUrl ? /* @__PURE__ */ jsxs21(Fragment10, { children: [
|
|
3261
|
+
/* @__PURE__ */ jsx31(
|
|
5034
3262
|
next_image_default,
|
|
5035
3263
|
{
|
|
5036
3264
|
src: thumbnailUrl,
|
|
@@ -5042,13 +3270,13 @@ function CustomerInterviewCard({
|
|
|
5042
3270
|
onError: hideOnError
|
|
5043
3271
|
}
|
|
5044
3272
|
),
|
|
5045
|
-
interview.main_video_url && /* @__PURE__ */
|
|
5046
|
-
] }) : /* @__PURE__ */
|
|
5047
|
-
/* @__PURE__ */
|
|
5048
|
-
interview.video_summary && /* @__PURE__ */
|
|
5049
|
-
/* @__PURE__ */
|
|
5050
|
-
/* @__PURE__ */
|
|
5051
|
-
interview.user?.avatar_url ? /* @__PURE__ */
|
|
3273
|
+
interview.main_video_url && /* @__PURE__ */ jsx31("div", { className: "absolute inset-0 flex items-center justify-center bg-black/40", children: /* @__PURE__ */ jsx31("div", { className: "flex h-16 w-16 items-center justify-center rounded-full bg-ods-accent/90", children: /* @__PURE__ */ jsx31(Video, { className: "h-8 w-8 text-ods-text-on-accent" }) }) })
|
|
3274
|
+
] }) : /* @__PURE__ */ jsx31("div", { className: "flex h-full w-full items-center justify-center bg-ods-bg", children: /* @__PURE__ */ jsx31(Video, { className: "h-12 w-12 text-ods-text-secondary" }) }) }),
|
|
3275
|
+
/* @__PURE__ */ jsx31("div", { className: "shrink-0", children: /* @__PURE__ */ jsx31("h3", { className: "line-clamp-2 break-words text-ods-text-primary text-h3", children: interview.title }) }),
|
|
3276
|
+
interview.video_summary && /* @__PURE__ */ jsx31("div", { className: "shrink-0", children: /* @__PURE__ */ jsx31("p", { className: "line-clamp-3 text-ods-text-secondary text-h6", children: interview.video_summary }) }),
|
|
3277
|
+
/* @__PURE__ */ jsx31("div", { className: "mt-auto flex h-[60px] shrink-0 items-center", children: /* @__PURE__ */ jsxs21("div", { className: "flex w-full min-w-0 items-center gap-3", children: [
|
|
3278
|
+
/* @__PURE__ */ jsxs21("div", { className: "relative h-12 w-12 shrink-0", children: [
|
|
3279
|
+
interview.user?.avatar_url ? /* @__PURE__ */ jsx31(
|
|
5052
3280
|
next_image_default,
|
|
5053
3281
|
{
|
|
5054
3282
|
src: interview.user.avatar_url,
|
|
@@ -5058,8 +3286,8 @@ function CustomerInterviewCard({
|
|
|
5058
3286
|
height: 48,
|
|
5059
3287
|
unoptimized: true
|
|
5060
3288
|
}
|
|
5061
|
-
) : /* @__PURE__ */
|
|
5062
|
-
interview.msp?.icon_url && /* @__PURE__ */
|
|
3289
|
+
) : /* @__PURE__ */ jsx31("div", { className: "flex h-12 w-12 items-center justify-center rounded-full border border-ods-border bg-ods-bg", children: /* @__PURE__ */ jsx31("span", { className: "text-ods-text-secondary text-h4", children: (interview.user?.full_name || "A").charAt(0).toUpperCase() }) }),
|
|
3290
|
+
interview.msp?.icon_url && /* @__PURE__ */ jsx31("div", { className: "absolute -bottom-1 -right-1 flex h-6 w-6 items-center justify-center overflow-hidden rounded-full bg-ods-text-primary ring-1 ring-ods-bg", children: /* @__PURE__ */ jsx31(
|
|
5063
3291
|
next_image_default,
|
|
5064
3292
|
{
|
|
5065
3293
|
src: interview.msp.icon_url,
|
|
@@ -5071,15 +3299,15 @@ function CustomerInterviewCard({
|
|
|
5071
3299
|
}
|
|
5072
3300
|
) })
|
|
5073
3301
|
] }),
|
|
5074
|
-
/* @__PURE__ */
|
|
5075
|
-
/* @__PURE__ */
|
|
3302
|
+
/* @__PURE__ */ jsxs21("div", { className: "min-w-0 flex-1", children: [
|
|
3303
|
+
/* @__PURE__ */ jsxs21("p", { className: "truncate text-ods-text-primary text-h6", children: [
|
|
5076
3304
|
interview.user?.full_name || "Anonymous",
|
|
5077
|
-
interview.msp?.name && /* @__PURE__ */
|
|
3305
|
+
interview.msp?.name && /* @__PURE__ */ jsxs21("span", { className: "text-ods-text-secondary", children: [
|
|
5078
3306
|
" \u2022 ",
|
|
5079
3307
|
interview.msp.name
|
|
5080
3308
|
] })
|
|
5081
3309
|
] }),
|
|
5082
|
-
/* @__PURE__ */
|
|
3310
|
+
/* @__PURE__ */ jsx31("p", { className: "truncate text-ods-text-secondary text-h6", children: interview.user?.job_title || " " })
|
|
5083
3311
|
] })
|
|
5084
3312
|
] }) })
|
|
5085
3313
|
] }) });
|
|
@@ -5095,29 +3323,29 @@ function formatInvestorUpdatePeriod(start, end, options) {
|
|
|
5095
3323
|
}
|
|
5096
3324
|
|
|
5097
3325
|
// src/components/chat/entity-cards/investor-update-card.tsx
|
|
5098
|
-
import { Calendar
|
|
5099
|
-
import { jsx as
|
|
3326
|
+
import { Calendar } from "lucide-react";
|
|
3327
|
+
import { jsx as jsx32, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
5100
3328
|
function InvestorUpdateCardSkeleton({ size: size2 = "default" }) {
|
|
5101
3329
|
if (size2 === "sm") {
|
|
5102
|
-
return /* @__PURE__ */
|
|
5103
|
-
/* @__PURE__ */
|
|
5104
|
-
/* @__PURE__ */
|
|
5105
|
-
/* @__PURE__ */
|
|
5106
|
-
/* @__PURE__ */
|
|
5107
|
-
/* @__PURE__ */
|
|
3330
|
+
return /* @__PURE__ */ jsxs22("span", { className: COMPACT_CARD_SKELETON_OUTER, children: [
|
|
3331
|
+
/* @__PURE__ */ jsx32("span", { className: COMPACT_CARD_SKELETON_IMAGE_SLOT }),
|
|
3332
|
+
/* @__PURE__ */ jsxs22("span", { className: COMPACT_CARD_TEXT_COL, children: [
|
|
3333
|
+
/* @__PURE__ */ jsxs22("span", { className: `${COMPACT_CARD_TITLE_ROW} flex-nowrap gap-2`, children: [
|
|
3334
|
+
/* @__PURE__ */ jsx32("span", { className: "h-3.5 w-1/2 rounded bg-ods-bg" }),
|
|
3335
|
+
/* @__PURE__ */ jsx32("span", { className: "h-4 w-8 shrink-0 rounded bg-ods-bg/70" })
|
|
5108
3336
|
] }),
|
|
5109
|
-
/* @__PURE__ */
|
|
5110
|
-
/* @__PURE__ */
|
|
3337
|
+
/* @__PURE__ */ jsx32("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx32("span", { className: "h-3 w-1/3 rounded bg-ods-bg/70" }) }),
|
|
3338
|
+
/* @__PURE__ */ jsx32("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx32("span", { className: "h-3 w-11/12 rounded bg-ods-bg/40" }) })
|
|
5111
3339
|
] })
|
|
5112
3340
|
] });
|
|
5113
3341
|
}
|
|
5114
|
-
return /* @__PURE__ */
|
|
5115
|
-
/* @__PURE__ */
|
|
5116
|
-
/* @__PURE__ */
|
|
5117
|
-
/* @__PURE__ */
|
|
5118
|
-
/* @__PURE__ */
|
|
5119
|
-
/* @__PURE__ */
|
|
5120
|
-
/* @__PURE__ */
|
|
3342
|
+
return /* @__PURE__ */ jsxs22("div", { className: `h-full animate-pulse ${CONTENT_CARD_SKELETON_FRAME_CLASS}`, children: [
|
|
3343
|
+
/* @__PURE__ */ jsx32("div", { className: "aspect-[1200/630] bg-ods-border" }),
|
|
3344
|
+
/* @__PURE__ */ jsxs22("div", { className: "space-y-3 p-4", children: [
|
|
3345
|
+
/* @__PURE__ */ jsx32("div", { className: "h-5 w-3/4 rounded bg-ods-border" }),
|
|
3346
|
+
/* @__PURE__ */ jsx32("div", { className: "h-3 w-full rounded bg-ods-border" }),
|
|
3347
|
+
/* @__PURE__ */ jsx32("div", { className: "h-3 w-4/5 rounded bg-ods-border" }),
|
|
3348
|
+
/* @__PURE__ */ jsx32("div", { className: "h-4 w-1/3 rounded bg-ods-border" })
|
|
5121
3349
|
] })
|
|
5122
3350
|
] });
|
|
5123
3351
|
}
|
|
@@ -5146,8 +3374,8 @@ function InvestorUpdateCard({
|
|
|
5146
3374
|
const coverImage = update.featured_image || placeholderUrl || null;
|
|
5147
3375
|
if (size2 === "sm") {
|
|
5148
3376
|
const periodText = formatInvestorUpdatePeriod(update.period_start, update.period_end);
|
|
5149
|
-
return /* @__PURE__ */
|
|
5150
|
-
/* @__PURE__ */
|
|
3377
|
+
return /* @__PURE__ */ jsxs22("a", { href, target, rel, className: `${COMPACT_CARD_OUTER} ${className ?? ""}`, children: [
|
|
3378
|
+
/* @__PURE__ */ jsx32("span", { className: COMPACT_CARD_IMAGE_SLOT, children: coverImage ? /* @__PURE__ */ jsx32(
|
|
5151
3379
|
next_image_default,
|
|
5152
3380
|
{
|
|
5153
3381
|
src: coverImage,
|
|
@@ -5161,23 +3389,23 @@ function InvestorUpdateCard({
|
|
|
5161
3389
|
img.style.display = "none";
|
|
5162
3390
|
}
|
|
5163
3391
|
}
|
|
5164
|
-
) : /* @__PURE__ */
|
|
5165
|
-
/* @__PURE__ */
|
|
5166
|
-
/* @__PURE__ */
|
|
5167
|
-
/* @__PURE__ */
|
|
5168
|
-
update.update_number ? /* @__PURE__ */
|
|
3392
|
+
) : /* @__PURE__ */ jsx32("span", { className: "flex h-full w-full items-center justify-center text-ods-accent", children: /* @__PURE__ */ jsx32(Calendar, { className: "h-4 w-4" }) }) }),
|
|
3393
|
+
/* @__PURE__ */ jsxs22("span", { className: COMPACT_CARD_TEXT_COL, children: [
|
|
3394
|
+
/* @__PURE__ */ jsxs22("span", { className: `${COMPACT_CARD_TITLE_ROW} gap-2`, children: [
|
|
3395
|
+
/* @__PURE__ */ jsx32("span", { className: `${COMPACT_CARD_TITLE} min-w-0`, children: update.title || `Update #${update.update_number ?? "?"}` }),
|
|
3396
|
+
update.update_number ? /* @__PURE__ */ jsxs22("span", { className: "shrink-0 rounded bg-ods-accent/10 px-1.5 py-0.5 text-ods-accent text-h6", children: [
|
|
5169
3397
|
"#",
|
|
5170
3398
|
update.update_number
|
|
5171
3399
|
] }) : null
|
|
5172
3400
|
] }),
|
|
5173
|
-
/* @__PURE__ */
|
|
5174
|
-
/* @__PURE__ */
|
|
3401
|
+
/* @__PURE__ */ jsx32("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx32("span", { className: COMPACT_CARD_SUBTITLE, children: periodText || "Investor update" }) }),
|
|
3402
|
+
/* @__PURE__ */ jsx32("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx32("span", { className: COMPACT_CARD_SUMMARY, children: (update.strategic_update || update.content || "").slice(0, 120) || COMPACT_CARD_ROW_FILLER }) })
|
|
5175
3403
|
] })
|
|
5176
3404
|
] });
|
|
5177
3405
|
}
|
|
5178
3406
|
if (size2 === "portrait") {
|
|
5179
3407
|
const periodText = formatInvestorUpdatePeriod(update.period_start, update.period_end);
|
|
5180
|
-
return /* @__PURE__ */
|
|
3408
|
+
return /* @__PURE__ */ jsx32(
|
|
5181
3409
|
EntityPortraitCard,
|
|
5182
3410
|
{
|
|
5183
3411
|
href,
|
|
@@ -5193,28 +3421,28 @@ function InvestorUpdateCard({
|
|
|
5193
3421
|
}
|
|
5194
3422
|
);
|
|
5195
3423
|
}
|
|
5196
|
-
return /* @__PURE__ */
|
|
3424
|
+
return /* @__PURE__ */ jsx32("a", { href, target, rel, className: `block h-full ${className ?? ""}`, children: /* @__PURE__ */ jsx32(
|
|
5197
3425
|
AdminContentCard,
|
|
5198
3426
|
{
|
|
5199
3427
|
imageUrl: update.featured_image,
|
|
5200
3428
|
placeholderUrl,
|
|
5201
3429
|
title: update.title || `Update #${update.update_number || "?"}`,
|
|
5202
3430
|
summary: update.strategic_update?.slice(0, 120) || update.content?.slice(0, 120) || "No description",
|
|
5203
|
-
badges: update.update_number ? /* @__PURE__ */
|
|
3431
|
+
badges: update.update_number ? /* @__PURE__ */ jsxs22("span", { className: "rounded bg-ods-accent/10 px-2 py-0.5 text-xs font-medium text-ods-accent", children: [
|
|
5204
3432
|
"#",
|
|
5205
3433
|
update.update_number
|
|
5206
3434
|
] }) : void 0,
|
|
5207
|
-
meta: update.period_start || update.period_end ? /* @__PURE__ */
|
|
5208
|
-
/* @__PURE__ */
|
|
5209
|
-
/* @__PURE__ */
|
|
3435
|
+
meta: update.period_start || update.period_end ? /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-1", children: [
|
|
3436
|
+
/* @__PURE__ */ jsx32(Calendar, { className: "h-3 w-3" }),
|
|
3437
|
+
/* @__PURE__ */ jsx32("span", { children: formatInvestorUpdatePeriod(update.period_start, update.period_end) })
|
|
5210
3438
|
] }) : void 0
|
|
5211
3439
|
}
|
|
5212
3440
|
) });
|
|
5213
3441
|
}
|
|
5214
3442
|
|
|
5215
3443
|
// src/components/chat/entity-cards/onboarding-guide-card.tsx
|
|
5216
|
-
import { Clock, ExternalLink, GraduationCap
|
|
5217
|
-
import { jsx as
|
|
3444
|
+
import { Clock, ExternalLink, GraduationCap } from "lucide-react";
|
|
3445
|
+
import { jsx as jsx33, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
5218
3446
|
function stripMarkdownPreview(text) {
|
|
5219
3447
|
return text.replace(/```[\s\S]*?```/g, " ").replace(/^#{1,6}\s+/gm, "").replace(/!?\[([^\]]*)\]\([^)]*\)/g, "$1").replace(/[*_~`>]/g, "").replace(/^\s*[-+]\s+/gm, "").replace(/-{3,}/g, " ").replace(/\s+/g, " ").trim().replace(/^([\s\S]{240})[\s\S]+$/, "$1\u2026");
|
|
5220
3448
|
}
|
|
@@ -5228,64 +3456,64 @@ var HORIZONTAL_SIZE_TOKENS = {
|
|
|
5228
3456
|
};
|
|
5229
3457
|
function OnboardingGuideCardSkeleton({ size: size2 = "default" }) {
|
|
5230
3458
|
if (size2 === "catalog") {
|
|
5231
|
-
return /* @__PURE__ */
|
|
5232
|
-
/* @__PURE__ */
|
|
5233
|
-
/* @__PURE__ */
|
|
5234
|
-
/* @__PURE__ */
|
|
5235
|
-
/* @__PURE__ */
|
|
5236
|
-
/* @__PURE__ */
|
|
5237
|
-
/* @__PURE__ */
|
|
3459
|
+
return /* @__PURE__ */ jsxs23("div", { className: cn(CONTENT_CARD_SKELETON_FRAME_CLASS, "flex animate-pulse flex-col gap-4 p-6"), children: [
|
|
3460
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex flex-col gap-4 md:flex-row md:gap-6", children: [
|
|
3461
|
+
/* @__PURE__ */ jsx33("div", { className: "aspect-[1200/630] w-full flex-shrink-0 rounded-lg bg-ods-border md:w-[256px]" }),
|
|
3462
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
3463
|
+
/* @__PURE__ */ jsxs23("div", { className: "mb-3 flex min-h-[60px] flex-col justify-start gap-1.5 md:min-h-[72px]", children: [
|
|
3464
|
+
/* @__PURE__ */ jsx33("div", { className: "h-[25px] w-3/4 rounded bg-ods-border md:h-[30px]" }),
|
|
3465
|
+
/* @__PURE__ */ jsx33("div", { className: "h-[25px] w-1/2 rounded bg-ods-border md:h-[30px]" })
|
|
5238
3466
|
] }),
|
|
5239
|
-
/* @__PURE__ */
|
|
5240
|
-
/* @__PURE__ */
|
|
5241
|
-
/* @__PURE__ */
|
|
3467
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex min-h-[46px] flex-col justify-start gap-2 md:min-h-[52px]", children: [
|
|
3468
|
+
/* @__PURE__ */ jsx33("div", { className: "h-3 w-full rounded bg-ods-border/70" }),
|
|
3469
|
+
/* @__PURE__ */ jsx33("div", { className: "h-3 w-5/6 rounded bg-ods-border/70" })
|
|
5242
3470
|
] })
|
|
5243
3471
|
] })
|
|
5244
3472
|
] }),
|
|
5245
|
-
/* @__PURE__ */
|
|
5246
|
-
[0, 1].map((i) => /* @__PURE__ */
|
|
3473
|
+
/* @__PURE__ */ jsxs23("div", { className: "grid w-full grid-cols-1 overflow-hidden rounded-md border border-ods-border md:grid-cols-3", children: [
|
|
3474
|
+
[0, 1].map((i) => /* @__PURE__ */ jsx33(
|
|
5247
3475
|
"div",
|
|
5248
3476
|
{
|
|
5249
3477
|
className: "flex flex-col gap-3 border-b border-ods-border p-4 md:border-b-0 md:border-r",
|
|
5250
|
-
children: /* @__PURE__ */
|
|
5251
|
-
/* @__PURE__ */
|
|
5252
|
-
/* @__PURE__ */
|
|
3478
|
+
children: /* @__PURE__ */ jsxs23("div", { className: "flex flex-col gap-2", children: [
|
|
3479
|
+
/* @__PURE__ */ jsx33("div", { className: "h-6 w-32 rounded bg-ods-border" }),
|
|
3480
|
+
/* @__PURE__ */ jsx33("div", { className: "h-3 w-20 rounded bg-ods-border" })
|
|
5253
3481
|
] })
|
|
5254
3482
|
},
|
|
5255
3483
|
`cell-${i}`
|
|
5256
3484
|
)),
|
|
5257
|
-
/* @__PURE__ */
|
|
5258
|
-
/* @__PURE__ */
|
|
5259
|
-
/* @__PURE__ */
|
|
5260
|
-
/* @__PURE__ */
|
|
5261
|
-
/* @__PURE__ */
|
|
3485
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-3 p-4", children: [
|
|
3486
|
+
/* @__PURE__ */ jsx33("div", { className: "h-10 w-10 shrink-0 rounded-full bg-ods-border" }),
|
|
3487
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex min-w-0 flex-1 flex-col gap-2", children: [
|
|
3488
|
+
/* @__PURE__ */ jsx33("div", { className: "h-4 w-3/4 rounded bg-ods-border" }),
|
|
3489
|
+
/* @__PURE__ */ jsx33("div", { className: "h-3 w-1/2 rounded bg-ods-border" })
|
|
5262
3490
|
] })
|
|
5263
3491
|
] })
|
|
5264
3492
|
] })
|
|
5265
3493
|
] });
|
|
5266
3494
|
}
|
|
5267
3495
|
if (size2 === "sm") {
|
|
5268
|
-
return /* @__PURE__ */
|
|
5269
|
-
/* @__PURE__ */
|
|
5270
|
-
/* @__PURE__ */
|
|
5271
|
-
/* @__PURE__ */
|
|
5272
|
-
/* @__PURE__ */
|
|
5273
|
-
/* @__PURE__ */
|
|
3496
|
+
return /* @__PURE__ */ jsxs23("span", { className: COMPACT_CARD_SKELETON_OUTER, children: [
|
|
3497
|
+
/* @__PURE__ */ jsx33("span", { className: COMPACT_CARD_SKELETON_IMAGE_SLOT }),
|
|
3498
|
+
/* @__PURE__ */ jsxs23("span", { className: COMPACT_CARD_TEXT_COL, children: [
|
|
3499
|
+
/* @__PURE__ */ jsx33("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx33("span", { className: "h-3.5 w-3/5 rounded bg-ods-bg" }) }),
|
|
3500
|
+
/* @__PURE__ */ jsx33("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx33("span", { className: "h-3 w-2/5 rounded bg-ods-bg/70" }) }),
|
|
3501
|
+
/* @__PURE__ */ jsx33("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx33("span", { className: "h-3 w-11/12 rounded bg-ods-bg/40" }) })
|
|
5274
3502
|
] }),
|
|
5275
|
-
/* @__PURE__ */
|
|
3503
|
+
/* @__PURE__ */ jsx33("span", { className: "flex h-5 shrink-0 items-center self-start", children: /* @__PURE__ */ jsx33("span", { className: "h-3.5 w-3.5 rounded bg-ods-bg" }) })
|
|
5276
3504
|
] });
|
|
5277
3505
|
}
|
|
5278
3506
|
const t = HORIZONTAL_SIZE_TOKENS.default;
|
|
5279
|
-
return /* @__PURE__ */
|
|
3507
|
+
return /* @__PURE__ */ jsxs23(
|
|
5280
3508
|
"span",
|
|
5281
3509
|
{
|
|
5282
3510
|
className: `flex items-start gap-3 rounded-md border border-ods-border bg-ods-card ${t.padding} animate-pulse`,
|
|
5283
3511
|
children: [
|
|
5284
|
-
/* @__PURE__ */
|
|
5285
|
-
/* @__PURE__ */
|
|
5286
|
-
/* @__PURE__ */
|
|
5287
|
-
/* @__PURE__ */
|
|
5288
|
-
/* @__PURE__ */
|
|
3512
|
+
/* @__PURE__ */ jsx33("span", { className: `inline-flex shrink-0 items-center justify-center rounded-full bg-ods-bg ${t.step}` }),
|
|
3513
|
+
/* @__PURE__ */ jsxs23("span", { className: "flex min-w-0 flex-1 flex-col gap-2", children: [
|
|
3514
|
+
/* @__PURE__ */ jsx33("span", { className: "block h-4 w-2/3 rounded bg-ods-bg" }),
|
|
3515
|
+
/* @__PURE__ */ jsx33("span", { className: "block h-3 w-1/3 rounded bg-ods-bg/70" }),
|
|
3516
|
+
/* @__PURE__ */ jsx33("span", { className: "block h-3 w-full rounded bg-ods-bg/40" })
|
|
5289
3517
|
] })
|
|
5290
3518
|
]
|
|
5291
3519
|
}
|
|
@@ -5315,7 +3543,7 @@ function OnboardingGuideCard({
|
|
|
5315
3543
|
});
|
|
5316
3544
|
if (size2 === "portrait") {
|
|
5317
3545
|
const coverImage = guide.featured_image || guide.main_video_thumbnail || guide.og_image_url || null;
|
|
5318
|
-
return /* @__PURE__ */
|
|
3546
|
+
return /* @__PURE__ */ jsx33(
|
|
5319
3547
|
EntityPortraitCard,
|
|
5320
3548
|
{
|
|
5321
3549
|
href,
|
|
@@ -5336,7 +3564,7 @@ function OnboardingGuideCard({
|
|
|
5336
3564
|
const hasVideoCover = !!(guide.main_video_thumbnail || guide.highlight_video_thumbnail);
|
|
5337
3565
|
const stepLabel = typeof guide.step_order === "number" ? String(guide.step_order).padStart(2, "0") : "\u2014";
|
|
5338
3566
|
const durationLabel = typeof guide.highlight_video_duration_ms === "number" && guide.highlight_video_duration_ms > 0 ? formatDurationMMSS(Math.floor(guide.highlight_video_duration_ms / 1e3)) : "";
|
|
5339
|
-
return /* @__PURE__ */
|
|
3567
|
+
return /* @__PURE__ */ jsx33(
|
|
5340
3568
|
next_link_default,
|
|
5341
3569
|
{
|
|
5342
3570
|
href,
|
|
@@ -5345,10 +3573,10 @@ function OnboardingGuideCard({
|
|
|
5345
3573
|
prefetch: false,
|
|
5346
3574
|
className: cn(CONTENT_CARD_FRAME_CLASS, "block no-underline", className),
|
|
5347
3575
|
"aria-label": `Open ${guide.title}`,
|
|
5348
|
-
children: /* @__PURE__ */
|
|
5349
|
-
/* @__PURE__ */
|
|
5350
|
-
/* @__PURE__ */
|
|
5351
|
-
coverImage ? /* @__PURE__ */
|
|
3576
|
+
children: /* @__PURE__ */ jsxs23("div", { className: "flex flex-col gap-4 p-6", children: [
|
|
3577
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex flex-col gap-4 md:flex-row md:gap-6", children: [
|
|
3578
|
+
/* @__PURE__ */ jsx33("div", { className: "w-full flex-shrink-0 md:w-[256px]", children: /* @__PURE__ */ jsxs23("div", { className: "relative aspect-[1200/630] w-full overflow-hidden rounded-lg bg-ods-bg", children: [
|
|
3579
|
+
coverImage ? /* @__PURE__ */ jsx33(
|
|
5352
3580
|
next_image_default,
|
|
5353
3581
|
{
|
|
5354
3582
|
src: coverImage,
|
|
@@ -5358,7 +3586,7 @@ function OnboardingGuideCard({
|
|
|
5358
3586
|
className: "object-cover",
|
|
5359
3587
|
unoptimized: true
|
|
5360
3588
|
}
|
|
5361
|
-
) : /* @__PURE__ */
|
|
3589
|
+
) : /* @__PURE__ */ jsx33(
|
|
5362
3590
|
BlogImagePlaceholder,
|
|
5363
3591
|
{
|
|
5364
3592
|
title: guide.title,
|
|
@@ -5366,18 +3594,18 @@ function OnboardingGuideCard({
|
|
|
5366
3594
|
className: "absolute inset-0"
|
|
5367
3595
|
}
|
|
5368
3596
|
),
|
|
5369
|
-
hasVideoCover && coverImage && /* @__PURE__ */
|
|
5370
|
-
durationLabel && /* @__PURE__ */
|
|
5371
|
-
/* @__PURE__ */
|
|
3597
|
+
hasVideoCover && coverImage && /* @__PURE__ */ jsx33(CardHoverPlay, { size: "md" }),
|
|
3598
|
+
durationLabel && /* @__PURE__ */ jsxs23("span", { className: "absolute bottom-2 right-2 inline-flex items-center gap-1 rounded bg-black/60 px-2 py-1 text-ods-text-on-dark text-code", children: [
|
|
3599
|
+
/* @__PURE__ */ jsx33(Clock, { className: "h-3 w-3" }),
|
|
5372
3600
|
durationLabel
|
|
5373
3601
|
] })
|
|
5374
3602
|
] }) }),
|
|
5375
|
-
/* @__PURE__ */
|
|
5376
|
-
/* @__PURE__ */
|
|
5377
|
-
/* @__PURE__ */
|
|
3603
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
3604
|
+
/* @__PURE__ */ jsx33("div", { className: "mb-3 flex min-h-[60px] items-start md:min-h-[72px]", children: /* @__PURE__ */ jsx33("h3", { className: "line-clamp-2 text-ods-text-primary text-h2", children: guide.title }) }),
|
|
3605
|
+
/* @__PURE__ */ jsx33("div", { className: "min-h-[46px] md:min-h-[52px]", children: /* @__PURE__ */ jsx33("p", { className: "line-clamp-2 text-ods-text-secondary text-h6", children: stripMarkdownPreview(guide.video_summary || guide.content || "") }) })
|
|
5378
3606
|
] })
|
|
5379
3607
|
] }),
|
|
5380
|
-
/* @__PURE__ */
|
|
3608
|
+
/* @__PURE__ */ jsx33(
|
|
5381
3609
|
EntityAuthorCard,
|
|
5382
3610
|
{
|
|
5383
3611
|
author: guide.author,
|
|
@@ -5405,22 +3633,22 @@ function OnboardingGuideCard({
|
|
|
5405
3633
|
const subtitleParts = [`Step ${guide.step_order}`, guide.section, author].filter(
|
|
5406
3634
|
(s) => typeof s === "string" && s.length > 0
|
|
5407
3635
|
);
|
|
5408
|
-
return /* @__PURE__ */
|
|
5409
|
-
/* @__PURE__ */
|
|
5410
|
-
compactCover ? /* @__PURE__ */
|
|
5411
|
-
hasVideoCover && compactCover && /* @__PURE__ */
|
|
3636
|
+
return /* @__PURE__ */ jsxs23(next_link_default, { href, target, rel, prefetch: false, className: cn(COMPACT_CARD_OUTER, className), children: [
|
|
3637
|
+
/* @__PURE__ */ jsxs23("span", { className: COMPACT_CARD_IMAGE_SLOT, children: [
|
|
3638
|
+
compactCover ? /* @__PURE__ */ jsx33(next_image_default, { src: compactCover, alt: guide.title, fill: true, sizes: "56px", className: "object-contain", unoptimized: true }) : /* @__PURE__ */ jsx33("span", { className: "flex h-full w-full items-center justify-center text-ods-accent", children: /* @__PURE__ */ jsx33(GraduationCap, { className: "h-4 w-4" }) }),
|
|
3639
|
+
hasVideoCover && compactCover && /* @__PURE__ */ jsx33(CardHoverPlay, { size: "sm" })
|
|
5412
3640
|
] }),
|
|
5413
|
-
/* @__PURE__ */
|
|
5414
|
-
/* @__PURE__ */
|
|
5415
|
-
/* @__PURE__ */
|
|
5416
|
-
/* @__PURE__ */
|
|
3641
|
+
/* @__PURE__ */ jsxs23("span", { className: COMPACT_CARD_TEXT_COL, children: [
|
|
3642
|
+
/* @__PURE__ */ jsx33("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx33("span", { className: cn(COMPACT_CARD_TITLE, "font-heading"), children: guide.title }) }),
|
|
3643
|
+
/* @__PURE__ */ jsx33("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx33("span", { className: "truncate text-ods-accent text-h6", children: subtitleParts.join(" \xB7 ") }) }),
|
|
3644
|
+
/* @__PURE__ */ jsx33("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx33("span", { className: COMPACT_CARD_SUMMARY, children: summary2 || COMPACT_CARD_ROW_FILLER }) })
|
|
5417
3645
|
] }),
|
|
5418
|
-
/* @__PURE__ */
|
|
3646
|
+
/* @__PURE__ */ jsx33("span", { className: "flex h-5 shrink-0 items-center self-start text-ods-text-secondary", children: /* @__PURE__ */ jsx33(ExternalLink, { className: "h-3.5 w-3.5" }) })
|
|
5419
3647
|
] });
|
|
5420
3648
|
}
|
|
5421
3649
|
const t = HORIZONTAL_SIZE_TOKENS.default;
|
|
5422
3650
|
const summary = stripMarkdownPreview(guide.video_summary || guide.content || "");
|
|
5423
|
-
return /* @__PURE__ */
|
|
3651
|
+
return /* @__PURE__ */ jsxs23(
|
|
5424
3652
|
next_link_default,
|
|
5425
3653
|
{
|
|
5426
3654
|
href,
|
|
@@ -5432,7 +3660,7 @@ function OnboardingGuideCard({
|
|
|
5432
3660
|
className
|
|
5433
3661
|
),
|
|
5434
3662
|
children: [
|
|
5435
|
-
/* @__PURE__ */
|
|
3663
|
+
/* @__PURE__ */ jsx33(
|
|
5436
3664
|
"span",
|
|
5437
3665
|
{
|
|
5438
3666
|
className: `inline-flex shrink-0 items-center justify-center rounded-full bg-ods-accent/10 font-semibold text-ods-accent ${t.step}`,
|
|
@@ -5440,13 +3668,13 @@ function OnboardingGuideCard({
|
|
|
5440
3668
|
children: guide.step_order
|
|
5441
3669
|
}
|
|
5442
3670
|
),
|
|
5443
|
-
/* @__PURE__ */
|
|
5444
|
-
/* @__PURE__ */
|
|
5445
|
-
/* @__PURE__ */
|
|
5446
|
-
/* @__PURE__ */
|
|
5447
|
-
/* @__PURE__ */
|
|
3671
|
+
/* @__PURE__ */ jsxs23("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
|
|
3672
|
+
/* @__PURE__ */ jsx33("span", { className: `block ${t.title} truncate text-ods-text-primary`, children: guide.title }),
|
|
3673
|
+
/* @__PURE__ */ jsxs23("span", { className: "inline-flex items-center gap-1 text-ods-text-secondary text-h6", children: [
|
|
3674
|
+
/* @__PURE__ */ jsx33(GraduationCap, { className: "h-3 w-3 shrink-0" }),
|
|
3675
|
+
/* @__PURE__ */ jsx33("span", { className: "truncate", children: guide.section })
|
|
5448
3676
|
] }),
|
|
5449
|
-
summary && /* @__PURE__ */
|
|
3677
|
+
summary && /* @__PURE__ */ jsx33("span", { className: `text-ods-text-secondary text-h6 ${t.summaryClamp}`, children: summary })
|
|
5450
3678
|
] })
|
|
5451
3679
|
]
|
|
5452
3680
|
}
|
|
@@ -5538,7 +3766,7 @@ function getTaskTypeLabel(customItemId) {
|
|
|
5538
3766
|
}
|
|
5539
3767
|
|
|
5540
3768
|
// src/components/chat/entity-cards/roadmap-vote-button.tsx
|
|
5541
|
-
import { jsx as
|
|
3769
|
+
import { jsx as jsx34 } from "react/jsx-runtime";
|
|
5542
3770
|
function RoadmapVoteButton({
|
|
5543
3771
|
voteType,
|
|
5544
3772
|
count,
|
|
@@ -5550,13 +3778,13 @@ function RoadmapVoteButton({
|
|
|
5550
3778
|
className
|
|
5551
3779
|
}) {
|
|
5552
3780
|
const Icon = voteType === "up" ? ThumbsUpIcon : ThumbsDownIcon;
|
|
5553
|
-
return /* @__PURE__ */
|
|
3781
|
+
return /* @__PURE__ */ jsx34(
|
|
5554
3782
|
Button,
|
|
5555
3783
|
{
|
|
5556
3784
|
variant: "outline",
|
|
5557
3785
|
onClick,
|
|
5558
3786
|
disabled,
|
|
5559
|
-
leftIcon: /* @__PURE__ */
|
|
3787
|
+
leftIcon: /* @__PURE__ */ jsx34(Icon, { className: "h-5 w-5", color }),
|
|
5560
3788
|
className: cn(
|
|
5561
3789
|
className,
|
|
5562
3790
|
"flex h-full items-center justify-center gap-[2px] border-0 border-ods-border bg-ods-bg p-[12px]",
|
|
@@ -5564,7 +3792,7 @@ function RoadmapVoteButton({
|
|
|
5564
3792
|
"transition-all hover:bg-ods-border",
|
|
5565
3793
|
isActive && "bg-ods-border"
|
|
5566
3794
|
),
|
|
5567
|
-
children: showCount && /* @__PURE__ */
|
|
3795
|
+
children: showCount && /* @__PURE__ */ jsx34("span", { className: "text-h6", children: count })
|
|
5568
3796
|
}
|
|
5569
3797
|
);
|
|
5570
3798
|
}
|
|
@@ -5574,18 +3802,18 @@ import {
|
|
|
5574
3802
|
Bug,
|
|
5575
3803
|
Inbox,
|
|
5576
3804
|
Sparkles as Sparkles2,
|
|
5577
|
-
BookOpen
|
|
3805
|
+
BookOpen,
|
|
5578
3806
|
Trophy,
|
|
5579
3807
|
Component,
|
|
5580
3808
|
Flag,
|
|
5581
3809
|
Goal,
|
|
5582
3810
|
ListTodo,
|
|
5583
|
-
CheckSquare
|
|
5584
|
-
FileText
|
|
3811
|
+
CheckSquare,
|
|
3812
|
+
FileText,
|
|
5585
3813
|
Repeat,
|
|
5586
3814
|
Compass
|
|
5587
3815
|
} from "lucide-react";
|
|
5588
|
-
import { jsx as
|
|
3816
|
+
import { jsx as jsx35 } from "react/jsx-runtime";
|
|
5589
3817
|
function iconFor(customItemId) {
|
|
5590
3818
|
switch (customItemId) {
|
|
5591
3819
|
case CUSTOM_ITEM_ID.BUG:
|
|
@@ -5595,7 +3823,7 @@ function iconFor(customItemId) {
|
|
|
5595
3823
|
case CUSTOM_ITEM_ID.FEATURE:
|
|
5596
3824
|
return Sparkles2;
|
|
5597
3825
|
case CUSTOM_ITEM_ID.STORY:
|
|
5598
|
-
return
|
|
3826
|
+
return BookOpen;
|
|
5599
3827
|
case CUSTOM_ITEM_ID.EPIC:
|
|
5600
3828
|
return Trophy;
|
|
5601
3829
|
case CUSTOM_ITEM_ID.COMPONENT:
|
|
@@ -5607,7 +3835,7 @@ function iconFor(customItemId) {
|
|
|
5607
3835
|
case CUSTOM_ITEM_ID.SUBTASK:
|
|
5608
3836
|
return ListTodo;
|
|
5609
3837
|
case CUSTOM_ITEM_ID.FORM:
|
|
5610
|
-
return
|
|
3838
|
+
return FileText;
|
|
5611
3839
|
case CUSTOM_ITEM_ID.RECURRING:
|
|
5612
3840
|
return Repeat;
|
|
5613
3841
|
case CUSTOM_ITEM_ID.PLAN:
|
|
@@ -5616,37 +3844,37 @@ function iconFor(customItemId) {
|
|
|
5616
3844
|
return Compass;
|
|
5617
3845
|
case CUSTOM_ITEM_ID.TASK:
|
|
5618
3846
|
default:
|
|
5619
|
-
return
|
|
3847
|
+
return CheckSquare;
|
|
5620
3848
|
}
|
|
5621
3849
|
}
|
|
5622
3850
|
function TaskTypeIcon({ customItemId, className = "h-5 w-5" }) {
|
|
5623
3851
|
const Icon = iconFor(customItemId);
|
|
5624
|
-
return /* @__PURE__ */
|
|
3852
|
+
return /* @__PURE__ */ jsx35(Icon, { className, "aria-hidden": "true" });
|
|
5625
3853
|
}
|
|
5626
3854
|
|
|
5627
3855
|
// src/components/chat/entity-cards/roadmap-card.tsx
|
|
5628
3856
|
import { ThumbsUp, ThumbsDown } from "lucide-react";
|
|
5629
|
-
import { useState as
|
|
5630
|
-
import { Fragment as
|
|
3857
|
+
import { useState as useState6 } from "react";
|
|
3858
|
+
import { Fragment as Fragment11, jsx as jsx36, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
5631
3859
|
function RoadmapCardSkeleton({ size: size2 = "default" }) {
|
|
5632
3860
|
if (size2 === "sm") {
|
|
5633
|
-
return /* @__PURE__ */
|
|
5634
|
-
/* @__PURE__ */
|
|
5635
|
-
/* @__PURE__ */
|
|
5636
|
-
/* @__PURE__ */
|
|
5637
|
-
/* @__PURE__ */
|
|
5638
|
-
/* @__PURE__ */
|
|
3861
|
+
return /* @__PURE__ */ jsxs24("span", { className: COMPACT_CARD_SKELETON_OUTER, children: [
|
|
3862
|
+
/* @__PURE__ */ jsx36("span", { className: "block aspect-square h-12 w-12 shrink-0 self-start rounded-md border border-ods-border bg-ods-bg p-1.5" }),
|
|
3863
|
+
/* @__PURE__ */ jsxs24("span", { className: COMPACT_CARD_TEXT_COL, children: [
|
|
3864
|
+
/* @__PURE__ */ jsxs24("span", { className: `${COMPACT_CARD_TITLE_ROW} flex-nowrap gap-2`, children: [
|
|
3865
|
+
/* @__PURE__ */ jsx36("span", { className: "h-3.5 w-1/2 rounded bg-ods-bg" }),
|
|
3866
|
+
/* @__PURE__ */ jsx36("span", { className: "h-4 w-12 shrink-0 rounded bg-ods-bg/70" })
|
|
5639
3867
|
] }),
|
|
5640
|
-
/* @__PURE__ */
|
|
5641
|
-
/* @__PURE__ */
|
|
5642
|
-
/* @__PURE__ */
|
|
5643
|
-
/* @__PURE__ */
|
|
3868
|
+
/* @__PURE__ */ jsxs24("span", { className: `${COMPACT_CARD_META_ROW_BOX} flex-nowrap gap-2`, children: [
|
|
3869
|
+
/* @__PURE__ */ jsx36("span", { className: "h-3 w-2/5 flex-1 rounded bg-ods-bg/60" }),
|
|
3870
|
+
/* @__PURE__ */ jsx36("span", { className: "h-3 w-10 shrink-0 rounded bg-ods-bg/40" }),
|
|
3871
|
+
/* @__PURE__ */ jsx36("span", { className: "h-6 w-14 shrink-0 rounded-full bg-ods-bg/40" })
|
|
5644
3872
|
] }),
|
|
5645
|
-
/* @__PURE__ */
|
|
3873
|
+
/* @__PURE__ */ jsx36("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx36("span", { className: "h-3 w-5/6 rounded bg-ods-bg/40" }) })
|
|
5646
3874
|
] })
|
|
5647
3875
|
] });
|
|
5648
3876
|
}
|
|
5649
|
-
return /* @__PURE__ */
|
|
3877
|
+
return /* @__PURE__ */ jsxs24(
|
|
5650
3878
|
"div",
|
|
5651
3879
|
{
|
|
5652
3880
|
className: cn(
|
|
@@ -5654,25 +3882,25 @@ function RoadmapCardSkeleton({ size: size2 = "default" }) {
|
|
|
5654
3882
|
"flex h-full animate-pulse flex-col gap-4 p-[var(--spacing-system-lf)]"
|
|
5655
3883
|
),
|
|
5656
3884
|
children: [
|
|
5657
|
-
/* @__PURE__ */
|
|
5658
|
-
/* @__PURE__ */
|
|
5659
|
-
/* @__PURE__ */
|
|
5660
|
-
/* @__PURE__ */
|
|
5661
|
-
/* @__PURE__ */
|
|
3885
|
+
/* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-4", children: [
|
|
3886
|
+
/* @__PURE__ */ jsx36("div", { className: "h-16 w-16 flex-shrink-0 rounded-lg bg-ods-border" }),
|
|
3887
|
+
/* @__PURE__ */ jsxs24("div", { className: "flex-1 space-y-2", children: [
|
|
3888
|
+
/* @__PURE__ */ jsx36("div", { className: "h-5 w-3/4 rounded bg-ods-border" }),
|
|
3889
|
+
/* @__PURE__ */ jsx36("div", { className: "h-3 w-1/2 rounded bg-ods-border" })
|
|
5662
3890
|
] }),
|
|
5663
|
-
/* @__PURE__ */
|
|
3891
|
+
/* @__PURE__ */ jsx36("div", { className: "h-6 w-16 rounded bg-ods-border" })
|
|
5664
3892
|
] }),
|
|
5665
|
-
/* @__PURE__ */
|
|
5666
|
-
/* @__PURE__ */
|
|
5667
|
-
/* @__PURE__ */
|
|
5668
|
-
/* @__PURE__ */
|
|
3893
|
+
/* @__PURE__ */ jsxs24("div", { className: "space-y-2", children: [
|
|
3894
|
+
/* @__PURE__ */ jsx36("div", { className: "h-3 w-full rounded bg-ods-border" }),
|
|
3895
|
+
/* @__PURE__ */ jsx36("div", { className: "h-3 w-5/6 rounded bg-ods-border" }),
|
|
3896
|
+
/* @__PURE__ */ jsx36("div", { className: "h-3 w-4/5 rounded bg-ods-border" })
|
|
5669
3897
|
] }),
|
|
5670
|
-
/* @__PURE__ */
|
|
5671
|
-
/* @__PURE__ */
|
|
5672
|
-
/* @__PURE__ */
|
|
5673
|
-
/* @__PURE__ */
|
|
5674
|
-
/* @__PURE__ */
|
|
5675
|
-
/* @__PURE__ */
|
|
3898
|
+
/* @__PURE__ */ jsx36("div", { className: "flex-1" }),
|
|
3899
|
+
/* @__PURE__ */ jsxs24("div", { className: "flex items-center justify-between", children: [
|
|
3900
|
+
/* @__PURE__ */ jsx36("div", { className: "h-12 w-32 rounded bg-ods-border" }),
|
|
3901
|
+
/* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-2", children: [
|
|
3902
|
+
/* @__PURE__ */ jsx36("div", { className: "h-6 w-14 rounded-full bg-ods-border" }),
|
|
3903
|
+
/* @__PURE__ */ jsx36("div", { className: "h-8 w-20 rounded bg-ods-border" })
|
|
5676
3904
|
] })
|
|
5677
3905
|
] })
|
|
5678
3906
|
]
|
|
@@ -5699,7 +3927,7 @@ function RoadmapCard({
|
|
|
5699
3927
|
onVote,
|
|
5700
3928
|
isVoting = false
|
|
5701
3929
|
}) {
|
|
5702
|
-
const [showScreenshots, setShowScreenshots] =
|
|
3930
|
+
const [showScreenshots, setShowScreenshots] = useState6(false);
|
|
5703
3931
|
const logoUrl = item.icon && item.icon.startsWith("http") ? item.icon : null;
|
|
5704
3932
|
const iconSrc = logoUrl ? getProxiedImageUrl(logoUrl, { directHttps: true }) || logoUrl : null;
|
|
5705
3933
|
if (size2 === "sm") {
|
|
@@ -5709,13 +3937,13 @@ function RoadmapCard({
|
|
|
5709
3937
|
const hasScreenshots = (item.screenshots?.length ?? 0) > 0;
|
|
5710
3938
|
const typeLabel = getTaskTypeLabel(item.customItemId);
|
|
5711
3939
|
const useTypeIcon = cardType === "internal_task" || !iconSrc && item.customItemId != null;
|
|
5712
|
-
const body = /* @__PURE__ */
|
|
5713
|
-
/* @__PURE__ */
|
|
3940
|
+
const body = /* @__PURE__ */ jsxs24(Fragment11, { children: [
|
|
3941
|
+
/* @__PURE__ */ jsx36(
|
|
5714
3942
|
"span",
|
|
5715
3943
|
{
|
|
5716
3944
|
className: "flex aspect-square h-12 w-12 shrink-0 items-center justify-center self-start overflow-hidden rounded-md border border-ods-border bg-ods-bg p-1.5 text-ods-accent",
|
|
5717
3945
|
title: typeLabel ?? void 0,
|
|
5718
|
-
children: useTypeIcon ? /* @__PURE__ */
|
|
3946
|
+
children: useTypeIcon ? /* @__PURE__ */ jsx36(TaskTypeIcon, { customItemId: item.customItemId, className: "h-6 w-6" }) : iconSrc ? /* @__PURE__ */ jsx36(
|
|
5719
3947
|
next_image_default,
|
|
5720
3948
|
{
|
|
5721
3949
|
src: iconSrc,
|
|
@@ -5725,13 +3953,13 @@ function RoadmapCard({
|
|
|
5725
3953
|
unoptimized: true,
|
|
5726
3954
|
className: "h-8 w-8 object-contain"
|
|
5727
3955
|
}
|
|
5728
|
-
) : /* @__PURE__ */
|
|
3956
|
+
) : /* @__PURE__ */ jsx36("span", { className: "uppercase text-ods-text-secondary text-h6", children: item.title?.substring(0, 2) || "??" })
|
|
5729
3957
|
}
|
|
5730
3958
|
),
|
|
5731
|
-
/* @__PURE__ */
|
|
5732
|
-
/* @__PURE__ */
|
|
5733
|
-
/* @__PURE__ */
|
|
5734
|
-
item.status && item.status.trim().length > 0 ? /* @__PURE__ */
|
|
3959
|
+
/* @__PURE__ */ jsxs24("span", { className: COMPACT_CARD_TEXT_COL, children: [
|
|
3960
|
+
/* @__PURE__ */ jsxs24("span", { className: `${COMPACT_CARD_TITLE_ROW} gap-2`, children: [
|
|
3961
|
+
/* @__PURE__ */ jsx36("span", { className: `${COMPACT_CARD_TITLE} min-w-0`, children: item.title }),
|
|
3962
|
+
item.status && item.status.trim().length > 0 ? /* @__PURE__ */ jsx36(
|
|
5735
3963
|
StatusBadge,
|
|
5736
3964
|
{
|
|
5737
3965
|
text: item.status.toUpperCase(),
|
|
@@ -5742,8 +3970,8 @@ function RoadmapCard({
|
|
|
5742
3970
|
}
|
|
5743
3971
|
) : null
|
|
5744
3972
|
] }),
|
|
5745
|
-
/* @__PURE__ */
|
|
5746
|
-
/* @__PURE__ */
|
|
3973
|
+
/* @__PURE__ */ jsxs24("span", { className: `${COMPACT_CARD_META_ROW_BOX} gap-2 text-ods-text-secondary`, children: [
|
|
3974
|
+
/* @__PURE__ */ jsx36("span", { className: "min-w-0 flex-1 truncate text-h6", children: (() => {
|
|
5747
3975
|
const parts = [item.quarter, item.targetVersion ? `${item.targetVersion} version` : null].filter(
|
|
5748
3976
|
Boolean
|
|
5749
3977
|
);
|
|
@@ -5756,39 +3984,39 @@ function RoadmapCard({
|
|
|
5756
3984
|
}
|
|
5757
3985
|
return "Roadmap item";
|
|
5758
3986
|
})() }),
|
|
5759
|
-
hasVotes ? /* @__PURE__ */
|
|
5760
|
-
/* @__PURE__ */
|
|
5761
|
-
/* @__PURE__ */
|
|
5762
|
-
/* @__PURE__ */
|
|
3987
|
+
hasVotes ? /* @__PURE__ */ jsxs24("span", { className: "hidden shrink-0 items-center gap-2 text-ods-text-secondary text-h6 sm:flex", children: [
|
|
3988
|
+
/* @__PURE__ */ jsxs24("span", { className: "flex items-center gap-0.5", children: [
|
|
3989
|
+
/* @__PURE__ */ jsx36(ThumbsUp, { className: "h-3 w-3" }),
|
|
3990
|
+
/* @__PURE__ */ jsx36("span", { children: item.upvotes ?? 0 })
|
|
5763
3991
|
] }),
|
|
5764
|
-
/* @__PURE__ */
|
|
5765
|
-
/* @__PURE__ */
|
|
5766
|
-
/* @__PURE__ */
|
|
3992
|
+
/* @__PURE__ */ jsxs24("span", { className: "flex items-center gap-0.5", children: [
|
|
3993
|
+
/* @__PURE__ */ jsx36(ThumbsDown, { className: "h-3 w-3" }),
|
|
3994
|
+
/* @__PURE__ */ jsx36("span", { children: item.downvotes ?? 0 })
|
|
5767
3995
|
] })
|
|
5768
3996
|
] }) : null,
|
|
5769
|
-
hasFigma ? /* @__PURE__ */
|
|
5770
|
-
hasScreenshots ? /* @__PURE__ */
|
|
3997
|
+
hasFigma ? /* @__PURE__ */ jsx36("span", { className: "hidden shrink-0 items-center sm:flex", title: "Has Figma prototype", children: /* @__PURE__ */ jsx36(FigmaIcon, { className: "h-3 w-3" }) }) : null,
|
|
3998
|
+
hasScreenshots ? /* @__PURE__ */ jsxs24(
|
|
5771
3999
|
"span",
|
|
5772
4000
|
{
|
|
5773
4001
|
className: "hidden shrink-0 items-center gap-0.5 text-h6 sm:flex",
|
|
5774
4002
|
title: `${item.screenshots.length} screenshot${item.screenshots.length === 1 ? "" : "s"}`,
|
|
5775
4003
|
children: [
|
|
5776
|
-
/* @__PURE__ */
|
|
5777
|
-
/* @__PURE__ */
|
|
4004
|
+
/* @__PURE__ */ jsx36(ImageIcon, { className: "h-3 w-3" }),
|
|
4005
|
+
/* @__PURE__ */ jsx36("span", { children: item.screenshots.length })
|
|
5778
4006
|
]
|
|
5779
4007
|
}
|
|
5780
4008
|
) : null,
|
|
5781
|
-
item.assignees && item.assignees.length > 0 ? /* @__PURE__ */
|
|
4009
|
+
item.assignees && item.assignees.length > 0 ? /* @__PURE__ */ jsx36(AvatarStack, { size: "xs", people: assigneePeople(item.assignees), className: "shrink-0" }) : null
|
|
5782
4010
|
] }),
|
|
5783
|
-
/* @__PURE__ */
|
|
4011
|
+
/* @__PURE__ */ jsx36("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx36("span", { className: COMPACT_CARD_SUMMARY, children: item.description || COMPACT_CARD_ROW_FILLER }) })
|
|
5784
4012
|
] })
|
|
5785
4013
|
] });
|
|
5786
4014
|
if (!compactHref) {
|
|
5787
|
-
return /* @__PURE__ */
|
|
4015
|
+
return /* @__PURE__ */ jsx36("span", { className: `${COMPACT_CARD_OUTER_STATIC} ${className ?? ""}`, "aria-label": "No link available", children: body });
|
|
5788
4016
|
}
|
|
5789
|
-
return /* @__PURE__ */
|
|
4017
|
+
return /* @__PURE__ */ jsx36("a", { href: compactHref, target, rel, className: `${COMPACT_CARD_OUTER} ${className ?? ""}`, children: body });
|
|
5790
4018
|
}
|
|
5791
|
-
return /* @__PURE__ */
|
|
4019
|
+
return /* @__PURE__ */ jsxs24(
|
|
5792
4020
|
"div",
|
|
5793
4021
|
{
|
|
5794
4022
|
id,
|
|
@@ -5798,8 +4026,8 @@ function RoadmapCard({
|
|
|
5798
4026
|
className
|
|
5799
4027
|
),
|
|
5800
4028
|
children: [
|
|
5801
|
-
/* @__PURE__ */
|
|
5802
|
-
/* @__PURE__ */
|
|
4029
|
+
/* @__PURE__ */ jsxs24("div", { className: "flex w-full items-center gap-[16px]", children: [
|
|
4030
|
+
/* @__PURE__ */ jsx36("div", { className: "flex h-16 w-16 flex-shrink-0 items-center justify-center rounded-lg border border-ods-border bg-ods-bg", children: iconSrc ? /* @__PURE__ */ jsx36(
|
|
5803
4031
|
next_image_default,
|
|
5804
4032
|
{
|
|
5805
4033
|
src: iconSrc,
|
|
@@ -5809,16 +4037,16 @@ function RoadmapCard({
|
|
|
5809
4037
|
unoptimized: true,
|
|
5810
4038
|
className: "object-contain p-1"
|
|
5811
4039
|
}
|
|
5812
|
-
) : /* @__PURE__ */
|
|
5813
|
-
/* @__PURE__ */
|
|
5814
|
-
/* @__PURE__ */
|
|
5815
|
-
/* @__PURE__ */
|
|
4040
|
+
) : /* @__PURE__ */ jsx36("span", { className: "text-xs font-medium uppercase text-ods-text-secondary", children: item.title?.substring(0, 2) || "??" }) }),
|
|
4041
|
+
/* @__PURE__ */ jsxs24("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
4042
|
+
/* @__PURE__ */ jsx36("div", { className: "flex min-h-[48px] items-center", children: /* @__PURE__ */ jsx36("h3", { className: "line-clamp-2 flex-1 text-ods-text-primary text-h3", children: item.title }) }),
|
|
4043
|
+
/* @__PURE__ */ jsx36("div", { className: "flex min-h-[20px] items-center", children: /* @__PURE__ */ jsxs24("p", { className: "truncate text-ods-text-secondary text-h5", children: [
|
|
5816
4044
|
item.quarter,
|
|
5817
4045
|
", ",
|
|
5818
4046
|
item.id
|
|
5819
4047
|
] }) })
|
|
5820
4048
|
] }),
|
|
5821
|
-
/* @__PURE__ */
|
|
4049
|
+
/* @__PURE__ */ jsx36("div", { className: "hidden md:block", children: /* @__PURE__ */ jsx36(
|
|
5822
4050
|
StatusBadge,
|
|
5823
4051
|
{
|
|
5824
4052
|
text: item.status.toUpperCase(),
|
|
@@ -5827,7 +4055,7 @@ function RoadmapCard({
|
|
|
5827
4055
|
}
|
|
5828
4056
|
) })
|
|
5829
4057
|
] }),
|
|
5830
|
-
/* @__PURE__ */
|
|
4058
|
+
/* @__PURE__ */ jsx36("div", { className: "md:hidden", children: /* @__PURE__ */ jsx36(
|
|
5831
4059
|
StatusBadge,
|
|
5832
4060
|
{
|
|
5833
4061
|
text: item.status.toUpperCase(),
|
|
@@ -5835,11 +4063,11 @@ function RoadmapCard({
|
|
|
5835
4063
|
className: "border border-ods-border"
|
|
5836
4064
|
}
|
|
5837
4065
|
) }),
|
|
5838
|
-
/* @__PURE__ */
|
|
5839
|
-
/* @__PURE__ */
|
|
5840
|
-
/* @__PURE__ */
|
|
5841
|
-
onVote && /* @__PURE__ */
|
|
5842
|
-
/* @__PURE__ */
|
|
4066
|
+
/* @__PURE__ */ jsx36("div", { className: "flex min-h-[72px] items-center", children: /* @__PURE__ */ jsx36("p", { className: "line-clamp-3 text-ods-text-secondary text-h4", children: item.description || "" }) }),
|
|
4067
|
+
/* @__PURE__ */ jsx36("div", { className: "flex-1" }),
|
|
4068
|
+
/* @__PURE__ */ jsxs24("div", { className: "flex w-full items-center justify-between", children: [
|
|
4069
|
+
onVote && /* @__PURE__ */ jsxs24("div", { className: "flex h-[48px] overflow-hidden rounded-[6px] border border-ods-border bg-ods-card", children: [
|
|
4070
|
+
/* @__PURE__ */ jsx36(
|
|
5843
4071
|
RoadmapVoteButton,
|
|
5844
4072
|
{
|
|
5845
4073
|
voteType: "up",
|
|
@@ -5851,7 +4079,7 @@ function RoadmapCard({
|
|
|
5851
4079
|
disabled: isVoting
|
|
5852
4080
|
}
|
|
5853
4081
|
),
|
|
5854
|
-
/* @__PURE__ */
|
|
4082
|
+
/* @__PURE__ */ jsx36(
|
|
5855
4083
|
RoadmapVoteButton,
|
|
5856
4084
|
{
|
|
5857
4085
|
voteType: "down",
|
|
@@ -5864,34 +4092,34 @@ function RoadmapCard({
|
|
|
5864
4092
|
}
|
|
5865
4093
|
)
|
|
5866
4094
|
] }),
|
|
5867
|
-
/* @__PURE__ */
|
|
5868
|
-
item.assignees && item.assignees.length > 0 ? /* @__PURE__ */
|
|
5869
|
-
item.screenshots && item.screenshots.length > 0 && /* @__PURE__ */
|
|
4095
|
+
/* @__PURE__ */ jsxs24("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
4096
|
+
item.assignees && item.assignees.length > 0 ? /* @__PURE__ */ jsx36(AvatarStack, { size: "xs", people: assigneePeople(item.assignees), className: "shrink-0" }) : null,
|
|
4097
|
+
item.screenshots && item.screenshots.length > 0 && /* @__PURE__ */ jsx36(
|
|
5870
4098
|
Button,
|
|
5871
4099
|
{
|
|
5872
4100
|
variant: "outline",
|
|
5873
4101
|
size: "small-legacy",
|
|
5874
4102
|
onClick: () => setShowScreenshots(true),
|
|
5875
|
-
leftIcon: /* @__PURE__ */
|
|
4103
|
+
leftIcon: /* @__PURE__ */ jsx36(ImageIcon, { className: "h-5 w-5" })
|
|
5876
4104
|
}
|
|
5877
4105
|
),
|
|
5878
4106
|
(() => {
|
|
5879
4107
|
const figmaSafe = safeHref(item.figmaUrl);
|
|
5880
|
-
return figmaSafe ? /* @__PURE__ */
|
|
4108
|
+
return figmaSafe ? /* @__PURE__ */ jsx36(
|
|
5881
4109
|
Button,
|
|
5882
4110
|
{
|
|
5883
4111
|
variant: "outline",
|
|
5884
4112
|
size: "small-legacy",
|
|
5885
4113
|
openInNewTab: true,
|
|
5886
4114
|
href: figmaSafe,
|
|
5887
|
-
leftIcon: /* @__PURE__ */
|
|
4115
|
+
leftIcon: /* @__PURE__ */ jsx36(FigmaIcon, { className: "h-5 w-5" })
|
|
5888
4116
|
}
|
|
5889
4117
|
) : null;
|
|
5890
4118
|
})(),
|
|
5891
|
-
item.targetVersion && /* @__PURE__ */
|
|
4119
|
+
item.targetVersion && /* @__PURE__ */ jsx36(StatusBadge, { gen: generationTierFromLabel(item.targetVersion), text: item.targetVersion })
|
|
5892
4120
|
] })
|
|
5893
4121
|
] }),
|
|
5894
|
-
item.screenshots && item.screenshots.length > 0 && /* @__PURE__ */
|
|
4122
|
+
item.screenshots && item.screenshots.length > 0 && /* @__PURE__ */ jsx36(
|
|
5895
4123
|
ImageGalleryModal,
|
|
5896
4124
|
{
|
|
5897
4125
|
images: item.screenshots,
|
|
@@ -6018,9 +4246,9 @@ function programItemToStripProfile(item) {
|
|
|
6018
4246
|
}
|
|
6019
4247
|
|
|
6020
4248
|
// src/components/chat/entity-cards/program-card.tsx
|
|
6021
|
-
import { ArrowRight, ExternalLink as ExternalLink2, Clock as Clock2, Play, Video as
|
|
6022
|
-
import { useState as
|
|
6023
|
-
import { Fragment as
|
|
4249
|
+
import { ArrowRight, ExternalLink as ExternalLink2, Clock as Clock2, Play, Video as Video2 } from "lucide-react";
|
|
4250
|
+
import { useState as useState7 } from "react";
|
|
4251
|
+
import { Fragment as Fragment12, jsx as jsx37, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
6024
4252
|
var EDITORIAL_FRAME = CONTENT_CARD_SKELETON_FRAME_CLASS;
|
|
6025
4253
|
var EDITORIAL_ROW_GRID = "grid grid-cols-[88px_minmax(0,1fr)] items-center gap-[var(--spacing-system-m)] p-[var(--spacing-system-m)] sm:grid-cols-[120px_minmax(0,1fr)] sm:gap-[var(--spacing-system-l)]";
|
|
6026
4254
|
var EDITORIAL_ROW_THUMB = "relative block aspect-square w-full overflow-hidden rounded-md";
|
|
@@ -6047,59 +4275,59 @@ function ProgramCardSkeleton({
|
|
|
6047
4275
|
tags = false
|
|
6048
4276
|
}) {
|
|
6049
4277
|
if (size2 === "row") {
|
|
6050
|
-
return /* @__PURE__ */
|
|
6051
|
-
/* @__PURE__ */
|
|
6052
|
-
/* @__PURE__ */
|
|
6053
|
-
/* @__PURE__ */
|
|
6054
|
-
/* @__PURE__ */
|
|
6055
|
-
/* @__PURE__ */
|
|
4278
|
+
return /* @__PURE__ */ jsxs25("span", { className: cn(EDITORIAL_FRAME, EDITORIAL_ROW_GRID, "animate-pulse"), children: [
|
|
4279
|
+
/* @__PURE__ */ jsx37("span", { className: cn(EDITORIAL_ROW_THUMB, "bg-ods-border/20") }),
|
|
4280
|
+
/* @__PURE__ */ jsxs25("span", { className: EDITORIAL_ROW_TEXT, children: [
|
|
4281
|
+
/* @__PURE__ */ jsx37("span", { className: "block h-[2lh] w-full rounded bg-ods-border text-h3" }),
|
|
4282
|
+
/* @__PURE__ */ jsx37("span", { className: EDITORIAL_META_ROW, children: /* @__PURE__ */ jsx37("span", { className: "block h-[1lh] w-40 rounded bg-ods-border" }) }),
|
|
4283
|
+
/* @__PURE__ */ jsx37("span", { className: "block h-[2lh] w-full rounded bg-ods-border text-h6" })
|
|
6056
4284
|
] })
|
|
6057
4285
|
] });
|
|
6058
4286
|
}
|
|
6059
4287
|
if (size2 === "feature") {
|
|
6060
|
-
return /* @__PURE__ */
|
|
6061
|
-
/* @__PURE__ */
|
|
6062
|
-
/* @__PURE__ */
|
|
6063
|
-
eyebrow && /* @__PURE__ */
|
|
6064
|
-
/* @__PURE__ */
|
|
6065
|
-
/* @__PURE__ */
|
|
6066
|
-
/* @__PURE__ */
|
|
6067
|
-
/* @__PURE__ */
|
|
6068
|
-
/* @__PURE__ */
|
|
6069
|
-
/* @__PURE__ */
|
|
4288
|
+
return /* @__PURE__ */ jsxs25("span", { className: cn(EDITORIAL_FRAME, "flex animate-pulse flex-col"), children: [
|
|
4289
|
+
/* @__PURE__ */ jsx37("span", { className: cn(EDITORIAL_FEATURE_COVER, "bg-ods-border/20") }),
|
|
4290
|
+
/* @__PURE__ */ jsxs25("span", { className: EDITORIAL_FEATURE_BODY, children: [
|
|
4291
|
+
eyebrow && /* @__PURE__ */ jsx37("span", { className: "block h-[1lh] w-28 rounded bg-ods-border text-h5" }),
|
|
4292
|
+
/* @__PURE__ */ jsx37("span", { className: "block h-[2lh] w-full rounded bg-ods-border text-h3" }),
|
|
4293
|
+
/* @__PURE__ */ jsx37("span", { className: EDITORIAL_META_ROW, children: /* @__PURE__ */ jsx37("span", { className: "block h-[1lh] w-40 rounded bg-ods-border" }) }),
|
|
4294
|
+
/* @__PURE__ */ jsx37("span", { className: "block h-[3lh] w-full rounded bg-ods-border text-h4" }),
|
|
4295
|
+
/* @__PURE__ */ jsxs25("span", { className: EDITORIAL_PERSON_ROW, children: [
|
|
4296
|
+
/* @__PURE__ */ jsx37("span", { className: "block h-8 w-8 shrink-0 rounded-full bg-ods-border" }),
|
|
4297
|
+
/* @__PURE__ */ jsx37("span", { className: "block h-[1lh] w-40 rounded bg-ods-border text-h6" })
|
|
6070
4298
|
] })
|
|
6071
4299
|
] })
|
|
6072
4300
|
] });
|
|
6073
4301
|
}
|
|
6074
4302
|
if (size2 === "sm") {
|
|
6075
|
-
return /* @__PURE__ */
|
|
6076
|
-
/* @__PURE__ */
|
|
6077
|
-
/* @__PURE__ */
|
|
6078
|
-
/* @__PURE__ */
|
|
6079
|
-
/* @__PURE__ */
|
|
6080
|
-
/* @__PURE__ */
|
|
4303
|
+
return /* @__PURE__ */ jsxs25("span", { className: COMPACT_CARD_SKELETON_OUTER, children: [
|
|
4304
|
+
/* @__PURE__ */ jsx37("span", { className: COMPACT_CARD_SKELETON_IMAGE_SLOT }),
|
|
4305
|
+
/* @__PURE__ */ jsxs25("span", { className: COMPACT_CARD_TEXT_COL, children: [
|
|
4306
|
+
/* @__PURE__ */ jsx37("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx37("span", { className: "h-3.5 w-3/5 rounded bg-ods-bg" }) }),
|
|
4307
|
+
/* @__PURE__ */ jsx37("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx37("span", { className: "h-3 w-2/5 rounded bg-ods-bg/70" }) }),
|
|
4308
|
+
/* @__PURE__ */ jsx37("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx37("span", { className: "h-3 w-11/12 rounded bg-ods-bg/40" }) })
|
|
6081
4309
|
] }),
|
|
6082
|
-
/* @__PURE__ */
|
|
4310
|
+
/* @__PURE__ */ jsx37("span", { className: "flex h-5 shrink-0 items-center self-start", children: /* @__PURE__ */ jsx37("span", { className: "h-3.5 w-3.5 rounded bg-ods-bg" }) })
|
|
6083
4311
|
] });
|
|
6084
4312
|
}
|
|
6085
|
-
return /* @__PURE__ */
|
|
6086
|
-
/* @__PURE__ */
|
|
6087
|
-
/* @__PURE__ */
|
|
6088
|
-
/* @__PURE__ */
|
|
6089
|
-
/* @__PURE__ */
|
|
6090
|
-
/* @__PURE__ */
|
|
6091
|
-
/* @__PURE__ */
|
|
6092
|
-
/* @__PURE__ */
|
|
4313
|
+
return /* @__PURE__ */ jsxs25("div", { className: cn(CONTENT_CARD_SKELETON_FRAME_CLASS, DEFAULT_BODY, "animate-pulse"), children: [
|
|
4314
|
+
/* @__PURE__ */ jsxs25("div", { className: DEFAULT_HEADER, children: [
|
|
4315
|
+
/* @__PURE__ */ jsx37("div", { className: `${DEFAULT_COVER_FRAME} bg-ods-border` }),
|
|
4316
|
+
/* @__PURE__ */ jsxs25("div", { className: DEFAULT_TEXT, children: [
|
|
4317
|
+
/* @__PURE__ */ jsx37("div", { className: DEFAULT_TITLE, children: /* @__PURE__ */ jsx37("span", { className: "block h-[1lh] w-3/4 rounded bg-ods-border" }) }),
|
|
4318
|
+
/* @__PURE__ */ jsxs25("div", { className: DEFAULT_META_ROW, children: [
|
|
4319
|
+
/* @__PURE__ */ jsx37("span", { className: "block h-[1lh] w-32 rounded bg-ods-border" }),
|
|
4320
|
+
/* @__PURE__ */ jsx37("span", { className: "block h-[1lh] w-40 rounded bg-ods-border" })
|
|
6093
4321
|
] }),
|
|
6094
|
-
/* @__PURE__ */
|
|
6095
|
-
tags && /* @__PURE__ */
|
|
6096
|
-
/* @__PURE__ */
|
|
6097
|
-
/* @__PURE__ */
|
|
4322
|
+
/* @__PURE__ */ jsx37("div", { className: DEFAULT_DESCRIPTION, children: /* @__PURE__ */ jsx37("span", { className: "block h-[3lh] w-full rounded bg-ods-border" }) }),
|
|
4323
|
+
tags && /* @__PURE__ */ jsxs25("div", { className: DEFAULT_TAG_ROW, children: [
|
|
4324
|
+
/* @__PURE__ */ jsx37("span", { className: "block h-8 w-24 rounded bg-ods-border" }),
|
|
4325
|
+
/* @__PURE__ */ jsx37("span", { className: "block h-8 w-24 rounded bg-ods-border" })
|
|
6098
4326
|
] })
|
|
6099
4327
|
] })
|
|
6100
4328
|
] }),
|
|
6101
|
-
media > 0 && /* @__PURE__ */
|
|
6102
|
-
/* @__PURE__ */
|
|
4329
|
+
media > 0 && /* @__PURE__ */ jsx37("div", { className: DEFAULT_GALLERY_ROW, children: Array.from({ length: media }, (_, i) => /* @__PURE__ */ jsx37("div", { className: `${DEFAULT_GALLERY_THUMB} bg-ods-border` }, i)) }),
|
|
4330
|
+
/* @__PURE__ */ jsx37("div", { className: DEFAULT_FOOTER, children: /* @__PURE__ */ jsx37("div", { className: "h-10 w-40 rounded bg-ods-border" }) })
|
|
6103
4331
|
] });
|
|
6104
4332
|
}
|
|
6105
4333
|
function getHosts(hosts) {
|
|
@@ -6131,8 +4359,8 @@ function getHosts(hosts) {
|
|
|
6131
4359
|
return [];
|
|
6132
4360
|
}
|
|
6133
4361
|
function MediaGallery({ images, title }) {
|
|
6134
|
-
const [selectedImageIndex, setSelectedImageIndex] =
|
|
6135
|
-
const [isModalOpen, setIsModalOpen] =
|
|
4362
|
+
const [selectedImageIndex, setSelectedImageIndex] = useState7(null);
|
|
4363
|
+
const [isModalOpen, setIsModalOpen] = useState7(false);
|
|
6136
4364
|
const openImageModal = (index, event) => {
|
|
6137
4365
|
if (event) event.stopPropagation();
|
|
6138
4366
|
setSelectedImageIndex(index);
|
|
@@ -6142,13 +4370,13 @@ function MediaGallery({ images, title }) {
|
|
|
6142
4370
|
setIsModalOpen(false);
|
|
6143
4371
|
setSelectedImageIndex(null);
|
|
6144
4372
|
};
|
|
6145
|
-
return /* @__PURE__ */
|
|
6146
|
-
/* @__PURE__ */
|
|
4373
|
+
return /* @__PURE__ */ jsxs25(Fragment12, { children: [
|
|
4374
|
+
/* @__PURE__ */ jsx37("div", { className: "overflow-x-auto", children: /* @__PURE__ */ jsx37("div", { className: DEFAULT_GALLERY_ROW, style: { width: "max-content" }, children: images.map((mediaItem, index) => /* @__PURE__ */ jsx37(
|
|
6147
4375
|
"div",
|
|
6148
4376
|
{
|
|
6149
4377
|
className: cn(DEFAULT_GALLERY_THUMB, "group/thumb cursor-pointer"),
|
|
6150
4378
|
onClick: (e) => openImageModal(index, e),
|
|
6151
|
-
children: /* @__PURE__ */
|
|
4379
|
+
children: /* @__PURE__ */ jsx37(
|
|
6152
4380
|
next_image_default,
|
|
6153
4381
|
{
|
|
6154
4382
|
src: mediaItem.media_url,
|
|
@@ -6163,7 +4391,7 @@ function MediaGallery({ images, title }) {
|
|
|
6163
4391
|
},
|
|
6164
4392
|
mediaItem.id
|
|
6165
4393
|
)) }) }),
|
|
6166
|
-
/* @__PURE__ */
|
|
4394
|
+
/* @__PURE__ */ jsx37(
|
|
6167
4395
|
ImageGalleryModal,
|
|
6168
4396
|
{
|
|
6169
4397
|
images: images.map((img) => img.media_url),
|
|
@@ -6190,15 +4418,15 @@ function ProgramEditorialCard({
|
|
|
6190
4418
|
className
|
|
6191
4419
|
}) {
|
|
6192
4420
|
const edgeColor = useImageEdgeColor(feature ? cover : null, "transparent");
|
|
6193
|
-
const meta = /* @__PURE__ */
|
|
6194
|
-
date && /* @__PURE__ */
|
|
6195
|
-
[typeMeta, feature ? null : profile?.name].filter((part) => !!part).map((part) => /* @__PURE__ */
|
|
6196
|
-
/* @__PURE__ */
|
|
4421
|
+
const meta = /* @__PURE__ */ jsxs25("div", { className: EDITORIAL_META_ROW, children: [
|
|
4422
|
+
date && /* @__PURE__ */ jsx37("span", { className: "text-ods-flamingo-pink", children: date }),
|
|
4423
|
+
[typeMeta, feature ? null : profile?.name].filter((part) => !!part).map((part) => /* @__PURE__ */ jsxs25("span", { className: "flex items-center gap-[var(--spacing-system-s)] text-ods-text-secondary", children: [
|
|
4424
|
+
/* @__PURE__ */ jsx37("span", { "aria-hidden": "true", children: "\u2022" }),
|
|
6197
4425
|
part
|
|
6198
4426
|
] }, part))
|
|
6199
4427
|
] });
|
|
6200
4428
|
if (!feature) {
|
|
6201
|
-
return /* @__PURE__ */
|
|
4429
|
+
return /* @__PURE__ */ jsxs25(
|
|
6202
4430
|
ContentCardFrame,
|
|
6203
4431
|
{
|
|
6204
4432
|
as: "a",
|
|
@@ -6208,20 +4436,20 @@ function ProgramEditorialCard({
|
|
|
6208
4436
|
"aria-label": `Open ${title}`,
|
|
6209
4437
|
className: cn(EDITORIAL_ROW_GRID, className),
|
|
6210
4438
|
children: [
|
|
6211
|
-
/* @__PURE__ */
|
|
6212
|
-
cover && /* @__PURE__ */
|
|
6213
|
-
playable && cover && /* @__PURE__ */
|
|
4439
|
+
/* @__PURE__ */ jsxs25("span", { className: cn(EDITORIAL_ROW_THUMB, "bg-ods-bg"), children: [
|
|
4440
|
+
cover && /* @__PURE__ */ jsx37(next_image_default, { src: cover, alt: "", fill: true, sizes: "120px", className: "object-cover", unoptimized: true }),
|
|
4441
|
+
playable && cover && /* @__PURE__ */ jsx37(CardHoverPlay, { size: "md" })
|
|
6214
4442
|
] }),
|
|
6215
|
-
/* @__PURE__ */
|
|
6216
|
-
/* @__PURE__ */
|
|
4443
|
+
/* @__PURE__ */ jsxs25("span", { className: EDITORIAL_ROW_TEXT, children: [
|
|
4444
|
+
/* @__PURE__ */ jsx37("span", { className: "line-clamp-2 min-h-[2lh] text-ods-text-primary text-h3", children: title }),
|
|
6217
4445
|
meta,
|
|
6218
|
-
/* @__PURE__ */
|
|
4446
|
+
/* @__PURE__ */ jsx37("span", { className: "line-clamp-2 min-h-[2lh] text-ods-text-secondary text-h6", children: description })
|
|
6219
4447
|
] })
|
|
6220
4448
|
]
|
|
6221
4449
|
}
|
|
6222
4450
|
);
|
|
6223
4451
|
}
|
|
6224
|
-
return /* @__PURE__ */
|
|
4452
|
+
return /* @__PURE__ */ jsxs25(
|
|
6225
4453
|
ContentCardFrame,
|
|
6226
4454
|
{
|
|
6227
4455
|
as: "a",
|
|
@@ -6231,13 +4459,13 @@ function ProgramEditorialCard({
|
|
|
6231
4459
|
"aria-label": `Open ${title}`,
|
|
6232
4460
|
className: cn("flex flex-col", className),
|
|
6233
4461
|
children: [
|
|
6234
|
-
/* @__PURE__ */
|
|
4462
|
+
/* @__PURE__ */ jsxs25(
|
|
6235
4463
|
"span",
|
|
6236
4464
|
{
|
|
6237
4465
|
className: cn(EDITORIAL_FEATURE_COVER, "transition-colors duration-300"),
|
|
6238
4466
|
style: { backgroundColor: edgeColor },
|
|
6239
4467
|
children: [
|
|
6240
|
-
cover && /* @__PURE__ */
|
|
4468
|
+
cover && /* @__PURE__ */ jsx37(
|
|
6241
4469
|
next_image_default,
|
|
6242
4470
|
{
|
|
6243
4471
|
src: cover,
|
|
@@ -6248,17 +4476,17 @@ function ProgramEditorialCard({
|
|
|
6248
4476
|
unoptimized: true
|
|
6249
4477
|
}
|
|
6250
4478
|
),
|
|
6251
|
-
playable && cover && /* @__PURE__ */
|
|
4479
|
+
playable && cover && /* @__PURE__ */ jsx37(CardHoverPlay, { size: "lg" })
|
|
6252
4480
|
]
|
|
6253
4481
|
}
|
|
6254
4482
|
),
|
|
6255
|
-
/* @__PURE__ */
|
|
6256
|
-
eyebrow && /* @__PURE__ */
|
|
6257
|
-
/* @__PURE__ */
|
|
4483
|
+
/* @__PURE__ */ jsxs25("span", { className: EDITORIAL_FEATURE_BODY, children: [
|
|
4484
|
+
eyebrow && /* @__PURE__ */ jsx37("span", { className: "block h-[1lh] text-ods-text-secondary text-h5", children: eyebrow }),
|
|
4485
|
+
/* @__PURE__ */ jsx37("span", { className: "line-clamp-2 min-h-[2lh] text-ods-text-primary text-h3", children: title }),
|
|
6258
4486
|
meta,
|
|
6259
|
-
/* @__PURE__ */
|
|
6260
|
-
/* @__PURE__ */
|
|
6261
|
-
/* @__PURE__ */
|
|
4487
|
+
/* @__PURE__ */ jsx37("span", { className: "line-clamp-3 min-h-[3lh] text-ods-text-secondary text-h4", children: description }),
|
|
4488
|
+
/* @__PURE__ */ jsx37("span", { className: EDITORIAL_PERSON_ROW, children: profile && /* @__PURE__ */ jsxs25(Fragment12, { children: [
|
|
4489
|
+
/* @__PURE__ */ jsx37(
|
|
6262
4490
|
SquareAvatar,
|
|
6263
4491
|
{
|
|
6264
4492
|
variant: "round",
|
|
@@ -6268,9 +4496,9 @@ function ProgramEditorialCard({
|
|
|
6268
4496
|
size: "sm"
|
|
6269
4497
|
}
|
|
6270
4498
|
),
|
|
6271
|
-
/* @__PURE__ */
|
|
6272
|
-
/* @__PURE__ */
|
|
6273
|
-
profile.subtitle && /* @__PURE__ */
|
|
4499
|
+
/* @__PURE__ */ jsxs25("span", { className: "truncate text-h6", children: [
|
|
4500
|
+
/* @__PURE__ */ jsx37("span", { className: "text-ods-text-primary", children: profile.name }),
|
|
4501
|
+
profile.subtitle && /* @__PURE__ */ jsxs25("span", { className: "text-ods-text-secondary", children: [
|
|
6274
4502
|
" \xB7 ",
|
|
6275
4503
|
profile.subtitle
|
|
6276
4504
|
] })
|
|
@@ -6325,7 +4553,7 @@ function ProgramCard({
|
|
|
6325
4553
|
if (size2 === "portrait") {
|
|
6326
4554
|
const profile = programItemToStripProfile(item);
|
|
6327
4555
|
const dateMeta = compactMetaLine;
|
|
6328
|
-
return /* @__PURE__ */
|
|
4556
|
+
return /* @__PURE__ */ jsx37(
|
|
6329
4557
|
EntityPortraitCard,
|
|
6330
4558
|
{
|
|
6331
4559
|
href,
|
|
@@ -6343,7 +4571,7 @@ function ProgramCard({
|
|
|
6343
4571
|
);
|
|
6344
4572
|
}
|
|
6345
4573
|
if (size2 === "feature" || size2 === "row") {
|
|
6346
|
-
return /* @__PURE__ */
|
|
4574
|
+
return /* @__PURE__ */ jsx37(
|
|
6347
4575
|
ProgramEditorialCard,
|
|
6348
4576
|
{
|
|
6349
4577
|
feature: size2 === "feature",
|
|
@@ -6369,17 +4597,17 @@ function ProgramCard({
|
|
|
6369
4597
|
const subtitleParts = [itemDate, typeMeta, config.labels?.singular].filter(
|
|
6370
4598
|
(s) => typeof s === "string" && s.length > 0
|
|
6371
4599
|
);
|
|
6372
|
-
return /* @__PURE__ */
|
|
6373
|
-
/* @__PURE__ */
|
|
6374
|
-
compactCover ? /* @__PURE__ */
|
|
6375
|
-
isPlayable && compactCover && /* @__PURE__ */
|
|
4600
|
+
return /* @__PURE__ */ jsxs25("a", { href, target, rel, className: cn(COMPACT_CARD_OUTER, "group", className), children: [
|
|
4601
|
+
/* @__PURE__ */ jsxs25("span", { className: COMPACT_CARD_IMAGE_SLOT, children: [
|
|
4602
|
+
compactCover ? /* @__PURE__ */ jsx37(next_image_default, { src: compactCover, alt: item.title, fill: true, sizes: "56px", className: "object-contain", unoptimized: true }) : /* @__PURE__ */ jsx37("span", { className: "flex h-full w-full items-center justify-center text-ods-accent", children: config.type === "podcast" ? /* @__PURE__ */ jsx37(Play, { className: "h-4 w-4" }) : config.type === "webinar" ? /* @__PURE__ */ jsx37(Video2, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx37(Clock2, { className: "h-4 w-4" }) }),
|
|
4603
|
+
isPlayable && compactCover && /* @__PURE__ */ jsx37(CardHoverPlay, { size: "sm" })
|
|
6376
4604
|
] }),
|
|
6377
|
-
/* @__PURE__ */
|
|
6378
|
-
/* @__PURE__ */
|
|
6379
|
-
/* @__PURE__ */
|
|
6380
|
-
/* @__PURE__ */
|
|
4605
|
+
/* @__PURE__ */ jsxs25("span", { className: COMPACT_CARD_TEXT_COL, children: [
|
|
4606
|
+
/* @__PURE__ */ jsx37("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx37("span", { className: cn(COMPACT_CARD_TITLE, "font-heading"), children: item.title }) }),
|
|
4607
|
+
/* @__PURE__ */ jsx37("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx37("span", { className: "truncate text-ods-accent text-h6", children: subtitleParts.join(" \xB7 ") }) }),
|
|
4608
|
+
/* @__PURE__ */ jsx37("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx37("span", { className: COMPACT_CARD_SUMMARY, children: item.description || COMPACT_CARD_ROW_FILLER }) })
|
|
6381
4609
|
] }),
|
|
6382
|
-
/* @__PURE__ */
|
|
4610
|
+
/* @__PURE__ */ jsx37("span", { className: "flex h-5 shrink-0 items-center self-start text-ods-text-secondary", children: /* @__PURE__ */ jsx37(ExternalLink2, { className: "h-3.5 w-3.5" }) })
|
|
6383
4611
|
] });
|
|
6384
4612
|
}
|
|
6385
4613
|
const dateFormat = formatProgramDate(zonedDate, "weekday");
|
|
@@ -6390,20 +4618,20 @@ function ProgramCard({
|
|
|
6390
4618
|
);
|
|
6391
4619
|
const defaultRenderMeta = () => {
|
|
6392
4620
|
if (config.type === "podcast") {
|
|
6393
|
-
return defaultTypeMeta ? /* @__PURE__ */
|
|
6394
|
-
/* @__PURE__ */
|
|
6395
|
-
/* @__PURE__ */
|
|
4621
|
+
return defaultTypeMeta ? /* @__PURE__ */ jsxs25(Fragment12, { children: [
|
|
4622
|
+
/* @__PURE__ */ jsx37(Clock2, { className: "h-4 w-4 text-ods-text-secondary" }),
|
|
4623
|
+
/* @__PURE__ */ jsx37("span", { className: "font-body text-ods-text-secondary", children: defaultTypeMeta })
|
|
6396
4624
|
] }) : null;
|
|
6397
4625
|
}
|
|
6398
4626
|
if (config.type === "event") {
|
|
6399
4627
|
const eventMeta = [defaultTypeMeta, defaultAudience].filter(Boolean).join(" \xB7 ");
|
|
6400
|
-
return eventMeta ? /* @__PURE__ */
|
|
4628
|
+
return eventMeta ? /* @__PURE__ */ jsx37("span", { className: "font-body text-ods-text-secondary", children: eventMeta }) : null;
|
|
6401
4629
|
}
|
|
6402
4630
|
if (config.type === "webinar" && (defaultTypeMeta || zonedDate.timezone)) {
|
|
6403
|
-
return /* @__PURE__ */
|
|
6404
|
-
/* @__PURE__ */
|
|
6405
|
-
defaultTypeMeta && /* @__PURE__ */
|
|
6406
|
-
zonedDate.timezone && /* @__PURE__ */
|
|
4631
|
+
return /* @__PURE__ */ jsxs25(Fragment12, { children: [
|
|
4632
|
+
/* @__PURE__ */ jsx37(Video2, { className: "h-4 w-4 text-ods-text-secondary" }),
|
|
4633
|
+
defaultTypeMeta && /* @__PURE__ */ jsx37("span", { className: "font-body text-ods-text-secondary", children: defaultTypeMeta }),
|
|
4634
|
+
zonedDate.timezone && /* @__PURE__ */ jsxs25("span", { className: "text-ods-text-secondary text-h6", children: [
|
|
6407
4635
|
"(",
|
|
6408
4636
|
zonedDate.timezone,
|
|
6409
4637
|
")"
|
|
@@ -6414,9 +4642,9 @@ function ProgramCard({
|
|
|
6414
4642
|
};
|
|
6415
4643
|
const endAt = "end_at" in item && typeof item.end_at === "string" ? item.end_at : null;
|
|
6416
4644
|
const dateLabel = formatProgramDateRange(zonedDate, endAt) ?? dateFormat;
|
|
6417
|
-
const cardHeader = /* @__PURE__ */
|
|
6418
|
-
coverImage && /* @__PURE__ */
|
|
6419
|
-
/* @__PURE__ */
|
|
4645
|
+
const cardHeader = /* @__PURE__ */ jsxs25("div", { className: DEFAULT_HEADER, children: [
|
|
4646
|
+
coverImage && /* @__PURE__ */ jsxs25("div", { className: DEFAULT_COVER_FRAME, children: [
|
|
4647
|
+
/* @__PURE__ */ jsx37(
|
|
6420
4648
|
next_image_default,
|
|
6421
4649
|
{
|
|
6422
4650
|
src: coverImage,
|
|
@@ -6427,24 +4655,24 @@ function ProgramCard({
|
|
|
6427
4655
|
unoptimized: true
|
|
6428
4656
|
}
|
|
6429
4657
|
),
|
|
6430
|
-
isPlayable && /* @__PURE__ */
|
|
4658
|
+
isPlayable && /* @__PURE__ */ jsx37(CardHoverPlay, { size: "md" })
|
|
6431
4659
|
] }),
|
|
6432
|
-
/* @__PURE__ */
|
|
6433
|
-
/* @__PURE__ */
|
|
6434
|
-
/* @__PURE__ */
|
|
6435
|
-
/* @__PURE__ */
|
|
6436
|
-
renderMeta ? /* @__PURE__ */
|
|
6437
|
-
/* @__PURE__ */
|
|
4660
|
+
/* @__PURE__ */ jsxs25("div", { className: DEFAULT_TEXT, children: [
|
|
4661
|
+
/* @__PURE__ */ jsx37("h3", { className: DEFAULT_TITLE, children: item.title }),
|
|
4662
|
+
/* @__PURE__ */ jsxs25("div", { className: DEFAULT_META_ROW, children: [
|
|
4663
|
+
/* @__PURE__ */ jsx37("span", { style: { color: accentColor }, children: dateLabel }),
|
|
4664
|
+
renderMeta ? /* @__PURE__ */ jsxs25(Fragment12, { children: [
|
|
4665
|
+
/* @__PURE__ */ jsx37("span", { className: "hidden text-ods-text-secondary md:inline", children: "\u2022" }),
|
|
6438
4666
|
renderMeta(item)
|
|
6439
|
-
] }) : defaultRenderMeta() && /* @__PURE__ */
|
|
6440
|
-
/* @__PURE__ */
|
|
6441
|
-
/* @__PURE__ */
|
|
4667
|
+
] }) : defaultRenderMeta() && /* @__PURE__ */ jsxs25(Fragment12, { children: [
|
|
4668
|
+
/* @__PURE__ */ jsx37("span", { className: "hidden text-ods-text-secondary md:inline", children: "\u2022" }),
|
|
4669
|
+
/* @__PURE__ */ jsx37("div", { className: "flex items-center gap-2", children: defaultRenderMeta() })
|
|
6442
4670
|
] })
|
|
6443
4671
|
] }),
|
|
6444
|
-
/* @__PURE__ */
|
|
6445
|
-
tags.length > 0 && /* @__PURE__ */
|
|
4672
|
+
/* @__PURE__ */ jsx37("p", { className: DEFAULT_DESCRIPTION, children: item.description }),
|
|
4673
|
+
tags.length > 0 && /* @__PURE__ */ jsx37("div", { className: DEFAULT_TAG_ROW, children: tags.map((tag) => /* @__PURE__ */ jsx37(Tag, { as: "span", label: tag, variant: "outline" }, tag)) })
|
|
6446
4674
|
] }),
|
|
6447
|
-
hosts.length > 0 && /* @__PURE__ */
|
|
4675
|
+
hosts.length > 0 && /* @__PURE__ */ jsx37("div", { className: "flex flex-wrap gap-2 md:justify-end", children: hosts.map((host, index) => /* @__PURE__ */ jsx37(
|
|
6448
4676
|
SquareAvatar,
|
|
6449
4677
|
{
|
|
6450
4678
|
variant: "round",
|
|
@@ -6459,7 +4687,7 @@ function ProgramCard({
|
|
|
6459
4687
|
const cardFrameClass = cn(DEFAULT_BODY, className);
|
|
6460
4688
|
const actionLabel = `View ${config.labels.singular.toLowerCase()}`;
|
|
6461
4689
|
if (wholeCardClickable) {
|
|
6462
|
-
return /* @__PURE__ */
|
|
4690
|
+
return /* @__PURE__ */ jsxs25(
|
|
6463
4691
|
ContentCardFrame,
|
|
6464
4692
|
{
|
|
6465
4693
|
as: "a",
|
|
@@ -6470,15 +4698,15 @@ function ProgramCard({
|
|
|
6470
4698
|
"aria-label": `Open ${item.title}`,
|
|
6471
4699
|
children: [
|
|
6472
4700
|
cardHeader,
|
|
6473
|
-
images.length > 0 && /* @__PURE__ */
|
|
6474
|
-
/* @__PURE__ */
|
|
4701
|
+
images.length > 0 && /* @__PURE__ */ jsx37(MediaGallery, { images, title: item.title }),
|
|
4702
|
+
/* @__PURE__ */ jsx37("div", { className: DEFAULT_FOOTER, children: /* @__PURE__ */ jsxs25(
|
|
6475
4703
|
"span",
|
|
6476
4704
|
{
|
|
6477
4705
|
className: "inline-flex items-center gap-2 rounded-md border border-ods-border px-4 py-2 text-ods-text-primary text-h4",
|
|
6478
4706
|
"aria-hidden": "true",
|
|
6479
4707
|
children: [
|
|
6480
4708
|
actionLabel,
|
|
6481
|
-
/* @__PURE__ */
|
|
4709
|
+
/* @__PURE__ */ jsx37(ArrowRight, { className: "h-5 w-5" })
|
|
6482
4710
|
]
|
|
6483
4711
|
}
|
|
6484
4712
|
) })
|
|
@@ -6486,16 +4714,16 @@ function ProgramCard({
|
|
|
6486
4714
|
}
|
|
6487
4715
|
);
|
|
6488
4716
|
}
|
|
6489
|
-
return /* @__PURE__ */
|
|
6490
|
-
/* @__PURE__ */
|
|
6491
|
-
images.length > 0 && /* @__PURE__ */
|
|
6492
|
-
/* @__PURE__ */
|
|
4717
|
+
return /* @__PURE__ */ jsxs25(ContentCardFrame, { as: "div", className: cardFrameClass, children: [
|
|
4718
|
+
/* @__PURE__ */ jsx37("a", { href, target, rel, className: "block", "aria-label": `Open ${item.title}`, children: cardHeader }),
|
|
4719
|
+
images.length > 0 && /* @__PURE__ */ jsx37(MediaGallery, { images, title: item.title }),
|
|
4720
|
+
/* @__PURE__ */ jsx37("div", { className: DEFAULT_FOOTER, children: /* @__PURE__ */ jsx37(
|
|
6493
4721
|
Button,
|
|
6494
4722
|
{
|
|
6495
4723
|
variant: "outline",
|
|
6496
4724
|
href,
|
|
6497
4725
|
openInNewTab: target === "_blank",
|
|
6498
|
-
rightIcon: /* @__PURE__ */
|
|
4726
|
+
rightIcon: /* @__PURE__ */ jsx37(ArrowRight, { className: "h-5 w-5" }),
|
|
6499
4727
|
children: actionLabel
|
|
6500
4728
|
}
|
|
6501
4729
|
) })
|
|
@@ -6762,18 +4990,9 @@ export {
|
|
|
6762
4990
|
ModalTitle,
|
|
6763
4991
|
ModalFooter,
|
|
6764
4992
|
ImageGalleryModal,
|
|
6765
|
-
fetchPriorityProp,
|
|
6766
|
-
MUX_STREAM_ORIGIN,
|
|
6767
|
-
MUX_IMAGE_ORIGIN,
|
|
6768
|
-
saveDataEnabled,
|
|
6769
|
-
useVideoOriginPreconnect,
|
|
6770
|
-
useVideoWarmup,
|
|
6771
4993
|
VideoPlayBadge,
|
|
6772
4994
|
CardHoverPlay,
|
|
6773
4995
|
VideoUnmuteGlyph,
|
|
6774
|
-
extractYouTubeId,
|
|
6775
|
-
VIDEO_PLAYBACK_FAILED_EVENT,
|
|
6776
|
-
Video,
|
|
6777
4996
|
statusBadgeVariants,
|
|
6778
4997
|
genBadgeBgOpacity,
|
|
6779
4998
|
generationTierFromLabel,
|
|
@@ -6784,22 +5003,11 @@ export {
|
|
|
6784
5003
|
PaletteBadge,
|
|
6785
5004
|
DepartmentBadge,
|
|
6786
5005
|
AvatarStack,
|
|
6787
|
-
ICON_REGISTRY,
|
|
6788
|
-
normalizeIconKey,
|
|
6789
|
-
getIconComponent,
|
|
6790
|
-
getDynamicIcon,
|
|
6791
|
-
ICON_ALIASES,
|
|
6792
|
-
brandLogoForName,
|
|
6793
|
-
resolveIcon,
|
|
6794
|
-
ICON_OPTIONS,
|
|
6795
|
-
FAE_AVATAR_DATA_URI,
|
|
6796
|
-
AgentMark,
|
|
6797
5006
|
getProxiedImageUrl,
|
|
6798
5007
|
urlPathLooksLikeSvg,
|
|
6799
5008
|
shouldProxyImage,
|
|
6800
5009
|
generateImageSizes,
|
|
6801
5010
|
skipsImageOptimizer,
|
|
6802
|
-
EntityIcon,
|
|
6803
5011
|
escapeRegExp,
|
|
6804
5012
|
isCrossOriginUrl,
|
|
6805
5013
|
decideNewTab,
|
|
@@ -6818,7 +5026,7 @@ export {
|
|
|
6818
5026
|
useCoverImageFallback,
|
|
6819
5027
|
hideOnError,
|
|
6820
5028
|
EntityPortraitCard,
|
|
6821
|
-
|
|
5029
|
+
FlamingoLogo,
|
|
6822
5030
|
PlatformBadge,
|
|
6823
5031
|
AdminContentCard,
|
|
6824
5032
|
ADMIN_CONTENT_CARD_GRID_CLASS,
|
|
@@ -6844,7 +5052,6 @@ export {
|
|
|
6844
5052
|
toStripProfile,
|
|
6845
5053
|
sortBitesByCreatedAtDesc,
|
|
6846
5054
|
sortBitesByFeaturedAtDesc,
|
|
6847
|
-
VideoHoverPreviewSurface,
|
|
6848
5055
|
ProductReleaseCard,
|
|
6849
5056
|
ProductReleaseCardSkeleton,
|
|
6850
5057
|
formatReleaseDate,
|