@flamingo-stack/openframe-frontend-core 0.0.731 → 0.0.732

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/{chunk-2UNQJVYN.cjs → chunk-22ZK7BA3.cjs} +1221 -1006
  3. package/dist/{chunk-Y4QRK3CB.cjs → chunk-3BLBWZ6A.cjs} +4 -4
  4. package/dist/{chunk-ZV6473Z4.cjs → chunk-5HMGK3N6.cjs} +18 -18
  5. package/dist/{chunk-HI7EFAFQ.cjs → chunk-5HSMTSHU.cjs} +28 -28
  6. package/dist/{chunk-XDBHGWFH.cjs → chunk-6HHUU56Y.cjs} +16 -16
  7. package/dist/{chunk-A4HNF4MP.cjs → chunk-6KDGIOLP.cjs} +80 -80
  8. package/dist/chunk-AEVGCB3Y.cjs +417 -0
  9. package/dist/{chunk-CLILWI6O.cjs → chunk-BDTX2OEE.cjs} +32 -32
  10. package/dist/{chunk-YDGBRI3Y.cjs → chunk-BS4EZZCN.cjs} +13 -13
  11. package/dist/{chunk-JPZ4Y6X3.cjs → chunk-C5NERNE6.cjs} +89 -89
  12. package/dist/{chunk-YUXRIR45.cjs → chunk-CC3LINHF.cjs} +95 -47
  13. package/dist/{chunk-53XZ6MJ5.cjs → chunk-CUF3IYIB.cjs} +28 -28
  14. package/dist/{chunk-FKKUQK4C.cjs → chunk-G37LT2ID.cjs} +5 -1
  15. package/dist/chunk-HELVKMRG.cjs +28 -0
  16. package/dist/{chunk-HEOD765R.cjs → chunk-HH4BMYDX.cjs} +23 -370
  17. package/dist/{chunk-4YPV4OI4.cjs → chunk-I46MQ4R5.cjs} +80 -80
  18. package/dist/{chunk-RAHRDJBP.cjs → chunk-MEDDKM3A.cjs} +2 -2
  19. package/dist/{chunk-3SWLL4IM.cjs → chunk-MVZ6XFPK.cjs} +6 -6
  20. package/dist/{chunk-TH4N726A.cjs → chunk-N466AJGN.cjs} +17 -17
  21. package/dist/{chunk-QP6QS3YU.cjs → chunk-OI7VCXYU.cjs} +48 -50
  22. package/dist/{chunk-25H2SZH7.cjs → chunk-OJ3XU3YZ.cjs} +4 -4
  23. package/dist/{chunk-JK75ZZP3.cjs → chunk-PRWBVIWW.cjs} +43 -43
  24. package/dist/chunk-PX7FY655.cjs +114 -0
  25. package/dist/{chunk-HLIJ3U2T.cjs → chunk-QMTC3BK3.cjs} +13 -11
  26. package/dist/{chunk-YJFN2W7A.cjs → chunk-RIXGLS5Y.cjs} +3 -3
  27. package/dist/{chunk-BFHLGEJK.cjs → chunk-SJRR745G.cjs} +61 -58
  28. package/dist/{chunk-6V4GEE55.cjs → chunk-TLDCSTTQ.cjs} +8 -8
  29. package/dist/{chunk-RBOIGJYF.cjs → chunk-XOQ2UUVS.cjs} +4 -4
  30. package/dist/{chunk-32ENYVFA.cjs → chunk-YGKVHSNQ.cjs} +42 -42
  31. package/dist/{chunk-HY2KTQSL.cjs → chunk-ZWMPAFGB.cjs} +183 -183
  32. package/dist/{cloud-tenants-SC4FNAC2.cjs → cloud-tenants-ILRE74JY.cjs} +16 -16
  33. package/dist/components/agent-identity.d.ts +8 -0
  34. package/dist/components/agent-identity.d.ts.map +1 -1
  35. package/dist/components/agent-identity.js +13 -1
  36. package/dist/components/case-studies/index.cjs +29 -29
  37. package/dist/components/chat/index.cjs +11 -11
  38. package/dist/components/contact/index.cjs +17 -17
  39. package/dist/components/docs/index.cjs +20 -20
  40. package/dist/components/embeds/index.cjs +17 -17
  41. package/dist/components/faq/index.cjs +17 -17
  42. package/dist/components/features/index.cjs +16 -16
  43. package/dist/components/help-center-pages/index.cjs +127 -127
  44. package/dist/components/index.cjs +79 -72
  45. package/dist/components/meeting-scheduler/index.cjs +47 -47
  46. package/dist/components/navigation/index.cjs +19 -19
  47. package/dist/components/onboarding-guides/index.cjs +19 -19
  48. package/dist/components/product-demo/index.cjs +8 -8
  49. package/dist/components/product-demo/screens/remote-desktop-picture.d.ts.map +1 -1
  50. package/dist/components/product-demo/screens/remote-desktop-picture.js +2 -1
  51. package/dist/components/related-content/index.cjs +6 -6
  52. package/dist/components/tickets/index.cjs +20 -20
  53. package/dist/components/ui/device-wallpaper.d.ts +7 -0
  54. package/dist/components/ui/device-wallpaper.d.ts.map +1 -0
  55. package/dist/components/ui/device-wallpaper.js +5 -0
  56. package/dist/components/ui/feature-list.d.ts +9 -4
  57. package/dist/components/ui/feature-list.d.ts.map +1 -1
  58. package/dist/components/ui/feature-list.js +26 -35
  59. package/dist/components/ui/index.cjs +22 -16
  60. package/dist/components/ui/index.d.ts +3 -1
  61. package/dist/components/ui/index.d.ts.map +1 -1
  62. package/dist/components/ui/index.js +3 -1
  63. package/dist/components/ui/notification-stack.d.ts +33 -0
  64. package/dist/components/ui/notification-stack.d.ts.map +1 -0
  65. package/dist/components/ui/notification-stack.js +78 -0
  66. package/dist/components/ui/numbered-step.d.ts +29 -0
  67. package/dist/components/ui/numbered-step.d.ts.map +1 -0
  68. package/dist/components/ui/numbered-step.js +57 -0
  69. package/dist/components/ui/phone-frame.d.ts +14 -9
  70. package/dist/components/ui/phone-frame.d.ts.map +1 -1
  71. package/dist/components/ui/phone-frame.js +50 -6
  72. package/dist/components/ui/phone-glyphs/lock-camera-glyph.d.ts +5 -0
  73. package/dist/components/ui/phone-glyphs/lock-camera-glyph.d.ts.map +1 -0
  74. package/dist/components/ui/phone-glyphs/lock-camera-glyph.js +14 -0
  75. package/dist/components/ui/phone-glyphs/lock-flashlight-glyph.d.ts +5 -0
  76. package/dist/components/ui/phone-glyphs/lock-flashlight-glyph.d.ts.map +1 -0
  77. package/dist/components/ui/phone-glyphs/lock-flashlight-glyph.js +14 -0
  78. package/dist/components/ui/phone-glyphs/status-bar-glyphs.d.ts +5 -0
  79. package/dist/components/ui/phone-glyphs/status-bar-glyphs.d.ts.map +1 -0
  80. package/dist/components/ui/phone-glyphs/status-bar-glyphs.js +68 -0
  81. package/dist/components/ui/snap-carousel.d.ts +5 -8
  82. package/dist/components/ui/snap-carousel.d.ts.map +1 -1
  83. package/dist/components/ui/snap-carousel.js +2 -27
  84. package/dist/components/ui/tab-navigation.d.ts +8 -1
  85. package/dist/components/ui/tab-navigation.d.ts.map +1 -1
  86. package/dist/components/ui/tab-navigation.js +30 -20
  87. package/dist/{devices-7MHSJNXS.cjs → devices-A6SFNGE4.cjs} +17 -17
  88. package/dist/{embeddable-chat-VPIG3F7E.cjs → embeddable-chat-BKPYNOIM.cjs} +80 -80
  89. package/dist/hooks/index.cjs +6 -6
  90. package/dist/hooks/ui/use-autoplay.d.ts +50 -13
  91. package/dist/hooks/ui/use-autoplay.d.ts.map +1 -1
  92. package/dist/hooks/ui/use-autoplay.js +76 -13
  93. package/dist/hooks/ui/use-in-view.d.ts +8 -0
  94. package/dist/hooks/ui/use-in-view.d.ts.map +1 -1
  95. package/dist/hooks/ui/use-in-view.js +21 -36
  96. package/dist/hooks/use-agent-identities.d.ts +6 -0
  97. package/dist/hooks/use-agent-identities.d.ts.map +1 -1
  98. package/dist/hooks/use-scenario-player.d.ts +26 -9
  99. package/dist/hooks/use-scenario-player.d.ts.map +1 -1
  100. package/dist/hooks/use-scenario-player.js +12 -9
  101. package/dist/index.cjs +51 -44
  102. package/dist/{knowledge-4DREGSOZ.cjs → knowledge-5ZCVKUYV.cjs} +17 -17
  103. package/dist/{logs-BWXNT2KP.cjs → logs-CL4OJASB.cjs} +24 -24
  104. package/dist/{policies-MGFUI23M.cjs → policies-7D44ZVS5.cjs} +20 -20
  105. package/dist/{remote-session-O6QGXV2N.cjs → remote-session-QB3CIZRM.cjs} +5 -4
  106. package/dist/{software-update-7LF7XEYC.cjs → software-update-AX6TZL26.cjs} +20 -20
  107. package/dist/{tickets-board-KNXK747O.cjs → tickets-board-7FAV2YWF.cjs} +10 -10
  108. package/package.json +1 -1
  109. package/src/components/agent-identity.tsx +20 -1
  110. package/src/components/product-demo/screens/remote-desktop-picture.tsx +2 -1
  111. package/src/components/ui/device-wallpaper.ts +7 -0
  112. package/src/components/ui/feature-list.tsx +24 -30
  113. package/src/components/ui/index.ts +3 -1
  114. package/src/components/ui/notification-stack.tsx +133 -0
  115. package/src/components/ui/numbered-step.tsx +81 -0
  116. package/src/components/ui/phone-frame.tsx +83 -19
  117. package/src/components/ui/phone-glyphs/lock-camera-glyph.tsx +14 -0
  118. package/src/components/ui/phone-glyphs/lock-flashlight-glyph.tsx +14 -0
  119. package/src/components/ui/phone-glyphs/status-bar-glyphs.tsx +45 -0
  120. package/src/components/ui/snap-carousel.tsx +6 -38
  121. package/src/components/ui/tab-navigation.tsx +49 -21
  122. package/src/hooks/ui/use-autoplay.ts +144 -27
  123. package/src/hooks/ui/use-in-view.ts +31 -38
  124. package/src/hooks/use-agent-identities.ts +6 -0
  125. package/src/hooks/use-scenario-player.ts +44 -20
  126. package/dist/chunk-2WXLQ5R5.cjs +0 -99
  127. package/dist/chunk-BE2WAMG5.cjs +0 -54
  128. package/dist/chunk-LCTDHLDL.cjs +0 -43
  129. package/dist/components/ui/playback-toggle.d.ts +0 -24
  130. package/dist/components/ui/playback-toggle.d.ts.map +0 -1
  131. package/dist/components/ui/playback-toggle.js +0 -32
  132. package/src/components/ui/playback-toggle.tsx +0 -53
@@ -0,0 +1,417 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
2
+
3
+
4
+
5
+
6
+ var _chunkPX7FY655cjs = require('./chunk-PX7FY655.cjs');
7
+
8
+
9
+
10
+
11
+ var _chunkMANNIJ42cjs = require('./chunk-MANNIJ42.cjs');
12
+
13
+ // src/utils/color-analysis.ts
14
+ var DESIGN_PALETTE = [
15
+ { name: "yellow", hex: "#FFC008", rgb: [255, 192, 8] },
16
+ { name: "black", hex: "#161616", rgb: [22, 22, 22] },
17
+ { name: "gray", hex: "#888888", rgb: [136, 136, 136] }
18
+ ];
19
+ function hexToRgb(hex) {
20
+ const normalized = hex.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i, (_, r, g, b) => `${r}${r}${g}${g}${b}${b}`);
21
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(normalized);
22
+ return result ? [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)] : [0, 0, 0];
23
+ }
24
+ function getLuminance(rgb) {
25
+ const [r, g, b] = rgb.map((channel) => {
26
+ const c = channel / 255;
27
+ return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
28
+ });
29
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
30
+ }
31
+ function getContrastRatio(color1, color2) {
32
+ const lum1 = getLuminance(color1);
33
+ const lum2 = getLuminance(color2);
34
+ const brightest = Math.max(lum1, lum2);
35
+ const darkest = Math.min(lum1, lum2);
36
+ return (brightest + 0.05) / (darkest + 0.05);
37
+ }
38
+ function pickReadableTextColor(bgHex) {
39
+ const bg = hexToRgb(bgHex);
40
+ const darkContrast = getContrastRatio(bg, [26, 26, 26]);
41
+ const lightContrast = getContrastRatio(bg, [250, 250, 250]);
42
+ return darkContrast >= lightContrast ? "dark" : "light";
43
+ }
44
+ function extractDominantColor(canvas) {
45
+ const ctx = canvas.getContext("2d");
46
+ if (!ctx) return [128, 128, 128];
47
+ const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
48
+ const data = imageData.data;
49
+ const sampleSize = Math.max(1, Math.floor(data.length / (4 * 1e3)));
50
+ const colorCounts = {};
51
+ for (let i = 0; i < data.length; i += 4 * sampleSize) {
52
+ const r = data[i];
53
+ const g = data[i + 1];
54
+ const b = data[i + 2];
55
+ const alpha = data[i + 3];
56
+ if (alpha < 128) continue;
57
+ const bucketR = Math.round(r / 32) * 32;
58
+ const bucketG = Math.round(g / 32) * 32;
59
+ const bucketB = Math.round(b / 32) * 32;
60
+ const key = `${bucketR},${bucketG},${bucketB}`;
61
+ colorCounts[key] = (colorCounts[key] || 0) + 1;
62
+ }
63
+ let maxCount = 0;
64
+ let dominantColor = [128, 128, 128];
65
+ for (const [colorKey, count] of Object.entries(colorCounts)) {
66
+ if (count > maxCount) {
67
+ maxCount = count;
68
+ const [r, g, b] = colorKey.split(",").map(Number);
69
+ dominantColor = [r, g, b];
70
+ }
71
+ }
72
+ return dominantColor;
73
+ }
74
+ function getBestContrastColor(imageColor) {
75
+ let bestColor = DESIGN_PALETTE[0];
76
+ let bestContrast = 0;
77
+ for (const color of DESIGN_PALETTE) {
78
+ const contrast = getContrastRatio(imageColor, color.rgb);
79
+ if (contrast > bestContrast) {
80
+ bestContrast = contrast;
81
+ bestColor = color;
82
+ }
83
+ }
84
+ return bestContrast >= 3 ? bestColor : DESIGN_PALETTE.find((c) => c.name === "black") || bestColor;
85
+ }
86
+ function analyzeImageColor(imageSrc) {
87
+ return new Promise((resolve, reject) => {
88
+ const img = new Image();
89
+ img.crossOrigin = "anonymous";
90
+ img.onload = () => {
91
+ try {
92
+ const canvas = document.createElement("canvas");
93
+ const ctx = canvas.getContext("2d");
94
+ if (!ctx) {
95
+ reject(new Error("Could not get canvas context"));
96
+ return;
97
+ }
98
+ const maxSize = 100;
99
+ const scale = Math.min(maxSize / img.width, maxSize / img.height);
100
+ canvas.width = img.width * scale;
101
+ canvas.height = img.height * scale;
102
+ ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
103
+ const dominantColor = extractDominantColor(canvas);
104
+ const bestContrastColor = getBestContrastColor(dominantColor);
105
+ resolve(bestContrastColor);
106
+ } catch (error) {
107
+ reject(error);
108
+ }
109
+ };
110
+ img.onerror = () => reject(new Error("Failed to load image"));
111
+ img.src = imageSrc;
112
+ });
113
+ }
114
+ async function extractImageEdgeColorAsync(imageUrl) {
115
+ return new Promise((resolve) => {
116
+ if (typeof window === "undefined") {
117
+ resolve("#000000");
118
+ return;
119
+ }
120
+ const img = new Image();
121
+ img.crossOrigin = "anonymous";
122
+ img.onload = () => {
123
+ try {
124
+ const canvas = document.createElement("canvas");
125
+ const ctx = canvas.getContext("2d");
126
+ if (!ctx) {
127
+ resolve("#000000");
128
+ return;
129
+ }
130
+ const maxSize = 50;
131
+ const scale = Math.min(maxSize / img.naturalWidth, maxSize / img.naturalHeight);
132
+ const w = Math.round(img.naturalWidth * scale);
133
+ const h = Math.round(img.naturalHeight * scale);
134
+ canvas.width = w;
135
+ canvas.height = h;
136
+ ctx.drawImage(img, 0, 0, w, h);
137
+ const data = ctx.getImageData(0, 0, w, h).data;
138
+ const edgeW = Math.max(2, Math.round(w * 0.15));
139
+ const edgeH = Math.max(2, Math.round(h * 0.15));
140
+ const bucketSize = 32;
141
+ const buckets = /* @__PURE__ */ new Map();
142
+ for (let y = 0; y < h; y++) {
143
+ for (let x = 0; x < w; x++) {
144
+ if (!(x < edgeW || x >= w - edgeW || y < edgeH || y >= h - edgeH)) continue;
145
+ const i = (y * w + x) * 4;
146
+ if (data[i + 3] < 128) continue;
147
+ const br = Math.floor(data[i] / bucketSize) * bucketSize;
148
+ const bg = Math.floor(data[i + 1] / bucketSize) * bucketSize;
149
+ const bb = Math.floor(data[i + 2] / bucketSize) * bucketSize;
150
+ const key = `${br},${bg},${bb}`;
151
+ const existing = buckets.get(key);
152
+ if (existing) {
153
+ existing.r += data[i];
154
+ existing.g += data[i + 1];
155
+ existing.b += data[i + 2];
156
+ existing.count++;
157
+ } else {
158
+ buckets.set(key, { r: data[i], g: data[i + 1], b: data[i + 2], count: 1 });
159
+ }
160
+ }
161
+ }
162
+ let best = { r: 0, g: 0, b: 0, count: 0 };
163
+ for (const b2 of buckets.values()) {
164
+ if (b2.count > best.count) best = b2;
165
+ }
166
+ if (best.count === 0) {
167
+ resolve("#000000");
168
+ return;
169
+ }
170
+ const r = Math.round(best.r / best.count), g = Math.round(best.g / best.count), b = Math.round(best.b / best.count);
171
+ resolve(
172
+ `#${r.toString(16).padStart(2, "0")}${g.toString(16).padStart(2, "0")}${b.toString(16).padStart(2, "0")}`
173
+ );
174
+ } catch (e) {
175
+ resolve("#000000");
176
+ }
177
+ };
178
+ img.onerror = () => resolve("#000000");
179
+ img.src = imageUrl;
180
+ });
181
+ }
182
+
183
+ // src/utils/ods-color-tokens-stub.ts
184
+ var colorTokens = {
185
+ primary: "#FFC008",
186
+ secondary: "#161616",
187
+ background: "#FAFAFA",
188
+ surface: "#FFFFFF",
189
+ text: {
190
+ primary: "#161616",
191
+ secondary: "#666666",
192
+ inverse: "#FFFFFF"
193
+ },
194
+ border: "#E5E5E5"
195
+ };
196
+
197
+ // src/utils/ods-color-utils.ts
198
+ var TOKEN_MAP = colorTokens;
199
+ function lookupToken(tokenKey) {
200
+ const value = TOKEN_MAP[tokenKey];
201
+ return typeof value === "string" ? value : void 0;
202
+ }
203
+ function getODSToken(category, color, variant = "base") {
204
+ const tokenKey = `${category}-${color}-${variant}`;
205
+ return lookupToken(tokenKey);
206
+ }
207
+ function getCurrentPlatform() {
208
+ if (typeof window === "undefined") {
209
+ return process.env.NEXT_PUBLIC_APP_TYPE || "openmsp";
210
+ }
211
+ const domPlatform = document.documentElement.getAttribute("data-app-type");
212
+ if (domPlatform) {
213
+ return domPlatform;
214
+ }
215
+ return process.env.NEXT_PUBLIC_APP_TYPE || "openmsp";
216
+ }
217
+ function switchPlatformTheme(platform) {
218
+ if (typeof window === "undefined") return;
219
+ const root = document.documentElement;
220
+ root.setAttribute("data-app-type", platform);
221
+ window.dispatchEvent(
222
+ new CustomEvent("platformThemeChanged", {
223
+ detail: { platform }
224
+ })
225
+ );
226
+ }
227
+ function getSemanticColor(semanticName, platform) {
228
+ if (typeof window === "undefined") return void 0;
229
+ const currentPlatform = platform || getCurrentPlatform();
230
+ const originalPlatform = getCurrentPlatform();
231
+ if (currentPlatform !== originalPlatform) {
232
+ switchPlatformTheme(currentPlatform);
233
+ }
234
+ const testElement = document.createElement("div");
235
+ document.body.appendChild(testElement);
236
+ const computedStyle = getComputedStyle(testElement);
237
+ const colorValue = computedStyle.getPropertyValue(`--color-${semanticName}`);
238
+ document.body.removeChild(testElement);
239
+ if (currentPlatform !== originalPlatform) {
240
+ switchPlatformTheme(originalPlatform);
241
+ }
242
+ return colorValue.trim() || void 0;
243
+ }
244
+ function getPlatformConfig(platform) {
245
+ const currentPlatform = platform || getCurrentPlatform();
246
+ const isDarkTheme = _chunkMANNIJ42cjs.PLATFORM_THEME === "dark";
247
+ return {
248
+ platform: currentPlatform,
249
+ accentColor: _chunkMANNIJ42cjs.getPlatformAccentColor.call(void 0, currentPlatform),
250
+ isDarkTheme,
251
+ isLightTheme: !isDarkTheme,
252
+ brandName: _chunkMANNIJ42cjs.getPlatformDisplayName.call(void 0, currentPlatform)
253
+ };
254
+ }
255
+ function usePlatformColors(platform) {
256
+ const currentPlatform = platform || getCurrentPlatform();
257
+ const config = getPlatformConfig(currentPlatform);
258
+ return {
259
+ platform: currentPlatform,
260
+ accentColor: config.accentColor,
261
+ isDarkTheme: config.isDarkTheme,
262
+ isLightTheme: config.isLightTheme,
263
+ brandName: config.brandName,
264
+ getToken: (category, color, variant) => getODSToken(category, color, variant),
265
+ switchTheme: (newPlatform) => switchPlatformTheme(newPlatform),
266
+ getSemanticColor: (semanticName) => getSemanticColor(semanticName, currentPlatform)
267
+ };
268
+ }
269
+ function getReadableTextColor(hex) {
270
+ return pickReadableTextColor(hex) === "dark" ? "#212121" : "#fafafa";
271
+ }
272
+ var HEX_PATTERN = /^#[0-9a-fA-F]{6}$/;
273
+ function hexToRgb2(hex) {
274
+ if (!HEX_PATTERN.test(hex)) return null;
275
+ const n = Number.parseInt(hex.slice(1), 16);
276
+ return { r: n >> 16 & 255, g: n >> 8 & 255, b: n & 255 };
277
+ }
278
+ function rgbToHex(r, g, b) {
279
+ const to = (n) => _chunkPX7FY655cjs.clamp.call(void 0, Math.round(n), 0, 255).toString(16).padStart(2, "0");
280
+ return `#${to(r)}${to(g)}${to(b)}`;
281
+ }
282
+ var HOVER_DARKEN_STEP = 10;
283
+ var ACTIVE_DARKEN_STEP = 20;
284
+ function darkenByStep(hex, step) {
285
+ const rgb = hexToRgb2(hex);
286
+ if (!rgb) return hex;
287
+ return rgbToHex(rgb.r - step, rgb.g - step, rgb.b - step);
288
+ }
289
+ function deriveHoverColor(hex) {
290
+ return darkenByStep(hex, HOVER_DARKEN_STEP);
291
+ }
292
+ function deriveActiveColor(hex) {
293
+ return darkenByStep(hex, ACTIVE_DARKEN_STEP);
294
+ }
295
+ function rgbToHsl(r, g, b) {
296
+ const rn = r / 255;
297
+ const gn = g / 255;
298
+ const bn = b / 255;
299
+ const max = Math.max(rn, gn, bn);
300
+ const min = Math.min(rn, gn, bn);
301
+ const l = (max + min) / 2;
302
+ if (max === min) return { h: 0, s: 0, l: Math.round(l * 100) };
303
+ const d = max - min;
304
+ const s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
305
+ let h;
306
+ if (max === rn) h = (gn - bn) / d + (gn < bn ? 6 : 0);
307
+ else if (max === gn) h = (bn - rn) / d + 2;
308
+ else h = (rn - gn) / d + 4;
309
+ h *= 60;
310
+ return { h: Math.round(h), s: Math.round(s * 100), l: Math.round(l * 100) };
311
+ }
312
+ function hslToRgb(h, s, l) {
313
+ const sn = _chunkPX7FY655cjs.clamp.call(void 0, s, 0, 100) / 100;
314
+ const ln = _chunkPX7FY655cjs.clamp.call(void 0, l, 0, 100) / 100;
315
+ const hn = (h % 360 + 360) % 360;
316
+ if (sn === 0) {
317
+ const v = Math.round(ln * 255);
318
+ return { r: v, g: v, b: v };
319
+ }
320
+ const q = ln < 0.5 ? ln * (1 + sn) : ln + sn - ln * sn;
321
+ const p = 2 * ln - q;
322
+ const hue2rgb = (t) => {
323
+ let tn = t;
324
+ if (tn < 0) tn += 1;
325
+ if (tn > 1) tn -= 1;
326
+ if (tn < 1 / 6) return p + (q - p) * 6 * tn;
327
+ if (tn < 1 / 2) return q;
328
+ if (tn < 2 / 3) return p + (q - p) * (2 / 3 - tn) * 6;
329
+ return p;
330
+ };
331
+ const hk = hn / 360;
332
+ return {
333
+ r: Math.round(hue2rgb(hk + 1 / 3) * 255),
334
+ g: Math.round(hue2rgb(hk) * 255),
335
+ b: Math.round(hue2rgb(hk - 1 / 3) * 255)
336
+ };
337
+ }
338
+
339
+ // src/components/agent-identity.tsx
340
+ var _react = require('react');
341
+ var _jsxruntime = require('react/jsx-runtime');
342
+ var AGENT_GLYPH_COLOR = "var(--color-text-primary)";
343
+ var AGENT_PICTURE_CLASS = "rounded-full object-cover";
344
+ var AgentIdentityContext = _react.createContext.call(void 0, null);
345
+ function Provide({ icons, children }) {
346
+ const bySlug = _react.useMemo.call(void 0, () => {
347
+ const map = /* @__PURE__ */ new Map();
348
+ for (const [slug, icon] of Object.entries(_nullishCoalesce(icons, () => ( {})))) if (icon) map.set(slug, icon);
349
+ return map;
350
+ }, [icons]);
351
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AgentIdentityContext.Provider, { value: bySlug, children });
352
+ }
353
+ function ProvideFromServer({
354
+ endpoint,
355
+ enabled,
356
+ children
357
+ }) {
358
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Provide, { icons: _chunkPX7FY655cjs.useAgentIdentities.call(void 0, endpoint, enabled), children });
359
+ }
360
+ function AgentIdentityProvider({
361
+ icons,
362
+ endpoint = _chunkPX7FY655cjs.AGENT_IDENTITIES_API_PATH,
363
+ enabled = true,
364
+ children
365
+ }) {
366
+ if (icons) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Provide, { icons, children });
367
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ProvideFromServer, { endpoint, enabled, children });
368
+ }
369
+ function useAgentIdentityIcon(slug) {
370
+ const identities = _react.useContext.call(void 0, AgentIdentityContext);
371
+ const unprovided = !identities && Boolean(slug);
372
+ _react.useEffect.call(void 0, () => {
373
+ if (!unprovided || process.env.NODE_ENV === "production") return;
374
+ console.error(
375
+ `[AgentIdentity] the mark of "${slug}" was asked for with no <AgentIdentityProvider> above it: agents are drawn from their server identities only, so mount the provider once at the root.`
376
+ );
377
+ }, [unprovided, slug]);
378
+ return _optionalChain([identities, 'optionalAccess', _2 => _2.get, 'call', _3 => _3(_nullishCoalesce(slug, () => ( "")))]);
379
+ }
380
+ function useAgentAccents() {
381
+ const identities = _react.useContext.call(void 0, AgentIdentityContext);
382
+ return _react.useCallback.call(void 0,
383
+ (slug) => {
384
+ const accent = _optionalChain([identities, 'optionalAccess', _4 => _4.get, 'call', _5 => _5(_nullishCoalesce(slug, () => ( ""))), 'optionalAccess', _6 => _6.accent]);
385
+ return typeof accent === "string" && HEX_PATTERN.test(accent) ? accent : void 0;
386
+ },
387
+ [identities]
388
+ );
389
+ }
390
+
391
+
392
+
393
+
394
+
395
+
396
+
397
+
398
+
399
+
400
+
401
+
402
+
403
+
404
+
405
+
406
+
407
+
408
+
409
+
410
+
411
+
412
+
413
+
414
+
415
+
416
+
417
+ exports.DESIGN_PALETTE = DESIGN_PALETTE; exports.getContrastRatio = getContrastRatio; exports.pickReadableTextColor = pickReadableTextColor; exports.extractDominantColor = extractDominantColor; exports.getBestContrastColor = getBestContrastColor; exports.analyzeImageColor = analyzeImageColor; exports.extractImageEdgeColorAsync = extractImageEdgeColorAsync; exports.getCurrentPlatform = getCurrentPlatform; exports.switchPlatformTheme = switchPlatformTheme; exports.getSemanticColor = getSemanticColor; exports.getPlatformConfig = getPlatformConfig; exports.usePlatformColors = usePlatformColors; exports.getReadableTextColor = getReadableTextColor; exports.HEX_PATTERN = HEX_PATTERN; exports.hexToRgb = hexToRgb2; exports.rgbToHex = rgbToHex; exports.deriveHoverColor = deriveHoverColor; exports.deriveActiveColor = deriveActiveColor; exports.rgbToHsl = rgbToHsl; exports.hslToRgb = hslToRgb; exports.AGENT_GLYPH_COLOR = AGENT_GLYPH_COLOR; exports.AGENT_PICTURE_CLASS = AGENT_PICTURE_CLASS; exports.AgentIdentityProvider = AgentIdentityProvider; exports.useAgentIdentityIcon = useAgentIdentityIcon; exports.useAgentAccents = useAgentAccents;
@@ -2,29 +2,29 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkY4QRK3CBcjs = require('./chunk-Y4QRK3CB.cjs');
5
+ var _chunk3BLBWZ6Acjs = require('./chunk-3BLBWZ6A.cjs');
6
6
 
7
7
 
8
8
 
9
- var _chunkXDBHGWFHcjs = require('./chunk-XDBHGWFH.cjs');
9
+ var _chunk6HHUU56Ycjs = require('./chunk-6HHUU56Y.cjs');
10
10
 
11
11
 
12
12
 
13
13
 
14
14
 
15
15
 
16
- var _chunk2UNQJVYNcjs = require('./chunk-2UNQJVYN.cjs');
16
+ var _chunk22ZK7BA3cjs = require('./chunk-22ZK7BA3.cjs');
17
17
 
18
18
 
19
- var _chunkFKKUQK4Ccjs = require('./chunk-FKKUQK4C.cjs');
19
+ var _chunkG37LT2IDcjs = require('./chunk-G37LT2ID.cjs');
20
20
 
21
21
 
22
- var _chunkA4HNF4MPcjs = require('./chunk-A4HNF4MP.cjs');
22
+ var _chunk6KDGIOLPcjs = require('./chunk-6KDGIOLP.cjs');
23
23
 
24
24
 
25
25
 
26
26
 
27
- var _chunkHY2KTQSLcjs = require('./chunk-HY2KTQSL.cjs');
27
+ var _chunkZWMPAFGBcjs = require('./chunk-ZWMPAFGB.cjs');
28
28
 
29
29
 
30
30
  var _chunkHZJRERJWcjs = require('./chunk-HZJRERJW.cjs');
@@ -34,13 +34,13 @@ var _chunkHZJRERJWcjs = require('./chunk-HZJRERJW.cjs');
34
34
  var _chunk7DNL734Scjs = require('./chunk-7DNL734S.cjs');
35
35
 
36
36
 
37
- var _chunk6V4GEE55cjs = require('./chunk-6V4GEE55.cjs');
37
+ var _chunkTLDCSTTQcjs = require('./chunk-TLDCSTTQ.cjs');
38
38
 
39
39
 
40
40
 
41
41
 
42
42
 
43
- var _chunkRBOIGJYFcjs = require('./chunk-RBOIGJYF.cjs');
43
+ var _chunkXOQ2UUVScjs = require('./chunk-XOQ2UUVS.cjs');
44
44
 
45
45
 
46
46
  var _chunkEAY6ZUEScjs = require('./chunk-EAY6ZUES.cjs');
@@ -68,7 +68,7 @@ function OnboardingGuidesCatalogSkeleton() {
68
68
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "h-6 w-40 rounded bg-ods-border/70" }),
69
69
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "h-5 w-8 rounded-full bg-ods-text-secondary/20" })
70
70
  ] }),
71
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "ul", { className: "flex flex-col gap-4", children: Array.from({ length: cardCount }).map((_, cardIdx) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRBOIGJYFcjs.OnboardingGuideCardSkeleton, { size: "catalog" }) }, cardIdx)) })
71
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "ul", { className: "flex flex-col gap-4", children: Array.from({ length: cardCount }).map((_, cardIdx) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXOQ2UUVScjs.OnboardingGuideCardSkeleton, { size: "catalog" }) }, cardIdx)) })
72
72
  ] }, sectionIdx)) })
73
73
  ] });
74
74
  }
@@ -92,10 +92,10 @@ function OnboardingGuidesCatalogView({
92
92
  const sectionValue = selfFetch ? _nullishCoalesce(searchParams.get("section"), () => ( "")) : initialSection;
93
93
  const activeSection = sectionValue || "all";
94
94
  const guidesQs = sectionValue ? `?section=${encodeURIComponent(sectionValue)}` : "";
95
- const guidesRes = _chunk6V4GEE55cjs.useSelfFetch.call(void 0,
95
+ const guidesRes = _chunkTLDCSTTQcjs.useSelfFetch.call(void 0,
96
96
  selfFetch && guidesEndpoint ? `${guidesEndpoint}${guidesQs}` : null
97
97
  );
98
- const sectionsRes = _chunk6V4GEE55cjs.useSelfFetch.call(void 0, selfFetch && sectionsEndpoint ? sectionsEndpoint : null);
98
+ const sectionsRes = _chunkTLDCSTTQcjs.useSelfFetch.call(void 0, selfFetch && sectionsEndpoint ? sectionsEndpoint : null);
99
99
  const guides = _react.useMemo.call(void 0, () => _nullishCoalesce(_nullishCoalesce(initialGuides, () => ( _optionalChain([guidesRes, 'access', _2 => _2.data, 'optionalAccess', _3 => _3.data]))), () => ( [])), [initialGuides, _optionalChain([guidesRes, 'access', _4 => _4.data, 'optionalAccess', _5 => _5.data])]);
100
100
  const sections = _react.useMemo.call(void 0,
101
101
  () => _nullishCoalesce(initialSections, () => ( (Array.isArray(sectionsRes.data) ? sectionsRes.data : []))),
@@ -138,25 +138,25 @@ function OnboardingGuidesCatalogView({
138
138
  });
139
139
  };
140
140
  const source = _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _6 => _6.source]), () => ( "openframe"));
141
- const docSearch = _chunkXDBHGWFHcjs.useDocSearch.call(void 0, {
141
+ const docSearch = _chunk6HHUU56Ycjs.useDocSearch.call(void 0, {
142
142
  source,
143
143
  baseRoute: basePath,
144
144
  onNavigate: (path) => router.push(path),
145
145
  tableIds: ["onboarding-guides"]
146
146
  });
147
147
  const defaultRenderCard = (guide) => {
148
- const cta = _chunkA4HNF4MPcjs.resolveContentHref.call(void 0, _optionalChain([runtime, 'optionalAccess', _7 => _7.composeContentUrl]), {
148
+ const cta = _chunk6KDGIOLPcjs.resolveContentHref.call(void 0, _optionalChain([runtime, 'optionalAccess', _7 => _7.composeContentUrl]), {
149
149
  type: "onboarding_guide",
150
150
  slug: guide.slug,
151
151
  basePath,
152
152
  platforms: guide.onboarding_guide_platforms
153
153
  });
154
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRBOIGJYFcjs.OnboardingGuideCard, { guide, href: cta.href, targetPlatform: cta.targetPlatform, size: "catalog" });
154
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXOQ2UUVScjs.OnboardingGuideCard, { guide, href: cta.href, targetPlatform: cta.targetPlatform, size: "catalog" });
155
155
  };
156
156
  const renderCardFn = _nullishCoalesce(renderCard, () => ( defaultRenderCard));
157
157
  const preControls = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-4", children: [
158
158
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
159
- _chunkXDBHGWFHcjs.DocSearchBar,
159
+ _chunk6HHUU56Ycjs.DocSearchBar,
160
160
  {
161
161
  placeholder: "Search onboarding guides, releases, case studies\u2026",
162
162
  query: docSearch.query,
@@ -168,7 +168,7 @@ function OnboardingGuidesCatalogView({
168
168
  }
169
169
  ),
170
170
  sections.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
171
- _chunk2UNQJVYNcjs.FilterPillRow,
171
+ _chunk22ZK7BA3cjs.FilterPillRow,
172
172
  {
173
173
  label: "Section",
174
174
  selectedValue: activeSection,
@@ -178,7 +178,7 @@ function OnboardingGuidesCatalogView({
178
178
  )
179
179
  ] });
180
180
  if (selfFetch && guidesRes.error) {
181
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2UNQJVYNcjs.LoadError, { message: "Failed to load onboarding guides.", onRetry: guidesRes.reload });
181
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk22ZK7BA3cjs.LoadError, { message: "Failed to load onboarding guides.", onRetry: guidesRes.reload });
182
182
  }
183
183
  if (selfFetch && guidesRes.data == null && isLoading) {
184
184
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, OnboardingGuidesCatalogSkeleton, {});
@@ -210,7 +210,7 @@ function OnboardingGuideDetailView({
210
210
  slug,
211
211
  guideEndpoint,
212
212
  related = [],
213
- MarkdownRenderer = _chunk2UNQJVYNcjs.RichMarkdownRenderer,
213
+ MarkdownRenderer = _chunk22ZK7BA3cjs.RichMarkdownRenderer,
214
214
  renderRelatedCard,
215
215
  backHref,
216
216
  backLabel = "Back to Getting Started",
@@ -220,23 +220,23 @@ function OnboardingGuideDetailView({
220
220
  }) {
221
221
  const resolvedBackHref = _nullishCoalesce(backHref, () => ( basePath));
222
222
  const runtime = _chunkUJ7AXHRZcjs.useChatRuntime.call(void 0, );
223
- const captions = _chunkHY2KTQSLcjs.useCaptions.call(void 0, );
223
+ const captions = _chunkZWMPAFGBcjs.useCaptions.call(void 0, );
224
224
  const router = _chunk7DNL734Scjs.useRouter.call(void 0, );
225
- const renderShell = (node) => shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2UNQJVYNcjs.PageShell, { children: node }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: node });
225
+ const renderShell = (node) => shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk22ZK7BA3cjs.PageShell, { children: node }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: node });
226
226
  const url = initialData ? null : slug && guideEndpoint ? guideEndpoint(slug) : null;
227
- const { data: guide, isLoading, error, reload } = _chunk6V4GEE55cjs.useSelfFetch.call(void 0, url, { initialData });
227
+ const { data: guide, isLoading, error, reload } = _chunkTLDCSTTQcjs.useSelfFetch.call(void 0, url, { initialData });
228
228
  const { ref: videoWarmupRef } = _chunkHZJRERJWcjs.useVideoWarmup.call(void 0, {
229
229
  videoUrl: _optionalChain([guide, 'optionalAccess', _8 => _8.main_video_url]),
230
230
  supabaseStorageOrigin: _optionalChain([runtime, 'optionalAccess', _9 => _9.endpoints, 'access', _10 => _10.supabaseStorageOrigin])
231
231
  });
232
232
  if (error || !guide && !isLoading) {
233
- return renderShell(/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2UNQJVYNcjs.LoadError, { message: "Guide not found.", onRetry: reload }));
233
+ return renderShell(/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk22ZK7BA3cjs.LoadError, { message: "Guide not found.", onRetry: reload }));
234
234
  }
235
235
  if (!guide) {
236
236
  return renderShell(
237
237
  // Match the loaded page's top offset (TitleBlock's
238
238
  // `pt-[var(--spacing-system-l)]`) so content doesn't jump on load.
239
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "pt-[var(--spacing-system-l)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkY4QRK3CBcjs.DetailPageSkeleton, { bare: true, showImageGallery: false }) })
239
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "pt-[var(--spacing-system-l)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3BLBWZ6Acjs.DetailPageSkeleton, { bare: true, showImageGallery: false }) })
240
240
  );
241
241
  }
242
242
  const { captionsUrl, highlightCaptionsUrl } = captions.forEntity("onboarding_guide", guide);
@@ -244,27 +244,27 @@ function OnboardingGuideDetailView({
244
244
  // worst), so it's the terminal fallback — no trailing `|| undefined` needed.
245
245
  _chunkEAY6ZUEScjs.buildOgPlaceholderUrl.call(void 0, _optionalChain([runtime, 'optionalAccess', _11 => _11.endpoints]), guide.title, { aspect: "wide" });
246
246
  const defaultRenderRelatedCard = (g) => {
247
- const cta = _chunkA4HNF4MPcjs.resolveContentHref.call(void 0, _optionalChain([runtime, 'optionalAccess', _12 => _12.composeContentUrl]), {
247
+ const cta = _chunk6KDGIOLPcjs.resolveContentHref.call(void 0, _optionalChain([runtime, 'optionalAccess', _12 => _12.composeContentUrl]), {
248
248
  type: "onboarding_guide",
249
249
  slug: g.slug,
250
250
  basePath,
251
251
  platforms: g.onboarding_guide_platforms
252
252
  });
253
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRBOIGJYFcjs.OnboardingGuideCard, { guide: g, href: cta.href, targetPlatform: cta.targetPlatform });
253
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXOQ2UUVScjs.OnboardingGuideCard, { guide: g, href: cta.href, targetPlatform: cta.targetPlatform });
254
254
  };
255
255
  const renderRelatedCardFn = _nullishCoalesce(renderRelatedCard, () => ( defaultRenderRelatedCard));
256
256
  return renderShell(
257
257
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
258
- _chunkFKKUQK4Ccjs.PageLayout,
258
+ _chunkG37LT2IDcjs.PageLayout,
259
259
  {
260
260
  title: guide.title,
261
261
  titleSize: "h1",
262
262
  titleWrap: true,
263
263
  backButton: { label: backLabel, onClick: () => router.push(resolvedBackHref) },
264
264
  children: [
265
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2UNQJVYNcjs.EntityTagBadges, { tags: guide.onboarding_guide_tags }),
265
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk22ZK7BA3cjs.EntityTagBadges, { tags: guide.onboarding_guide_tags }),
266
266
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
267
- _chunkRBOIGJYFcjs.EntityAuthorCard,
267
+ _chunkXOQ2UUVScjs.EntityAuthorCard,
268
268
  {
269
269
  author: guide.author,
270
270
  authorHref,
@@ -279,7 +279,7 @@ function OnboardingGuideDetailView({
279
279
  }
280
280
  ),
281
281
  (guide.main_video_url || guide.youtube_url) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: videoWarmupRef, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
282
- _chunkHY2KTQSLcjs.EntityVideoSection,
282
+ _chunkZWMPAFGBcjs.EntityVideoSection,
283
283
  {
284
284
  mainVideoUrl: guide.main_video_url,
285
285
  youtubeUrl: guide.youtube_url || void 0,
@@ -296,17 +296,17 @@ function OnboardingGuideDetailView({
296
296
  ) }),
297
297
  guide.content && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "space-y-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MarkdownRenderer, { content: guide.content }) }),
298
298
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
299
- _chunkHY2KTQSLcjs.VideoBitesStrip,
299
+ _chunkZWMPAFGBcjs.VideoBitesStrip,
300
300
  {
301
301
  bites: _nullishCoalesce(guide.video_bites, () => ( [])),
302
302
  filterPublished: true,
303
303
  showTitle: false,
304
- profile: _chunkRBOIGJYFcjs.toStripProfile.call(void 0, guide.author),
304
+ profile: _chunkXOQ2UUVScjs.toStripProfile.call(void 0, guide.author),
305
305
  href: `/onboarding-guides/${guide.slug}`
306
306
  }
307
307
  ),
308
308
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
309
- _chunkY4QRK3CBcjs.ArticleAuthorByline,
309
+ _chunk3BLBWZ6Acjs.ArticleAuthorByline,
310
310
  {
311
311
  author: _nullishCoalesce(_optionalChain([guide, 'access', _13 => _13.author, 'optionalAccess', _14 => _14.full_name]), () => ( null)),
312
312
  avatar: _optionalChain([guide, 'access', _15 => _15.author, 'optionalAccess', _16 => _16.avatar_url]),