@flamingo-stack/openframe-frontend-core 0.0.473-snapshot.20260724114839 → 0.0.473

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 (116) hide show
  1. package/dist/{chunk-RIPWRVA3.js → chunk-2SPAHQYE.js} +5 -5
  2. package/dist/{chunk-2R5NM3FC.cjs → chunk-4EU6WL5O.cjs} +40 -40
  3. package/dist/{chunk-2R5NM3FC.cjs.map → chunk-4EU6WL5O.cjs.map} +1 -1
  4. package/dist/{chunk-KXKTXAGN.cjs → chunk-4WHDDAVP.cjs} +40 -40
  5. package/dist/{chunk-KXKTXAGN.cjs.map → chunk-4WHDDAVP.cjs.map} +1 -1
  6. package/dist/{chunk-K52S6LZ5.js → chunk-4Y6LX6XR.js} +3 -3
  7. package/dist/{chunk-OKRUL7YV.js → chunk-4YH4WKLC.js} +4 -4
  8. package/dist/{chunk-LFXUFFDZ.cjs → chunk-5LTLYPIP.cjs} +73 -73
  9. package/dist/{chunk-LFXUFFDZ.cjs.map → chunk-5LTLYPIP.cjs.map} +1 -1
  10. package/dist/{chunk-YJWISFIK.cjs → chunk-6OGOPPTI.cjs} +12 -12
  11. package/dist/{chunk-YJWISFIK.cjs.map → chunk-6OGOPPTI.cjs.map} +1 -1
  12. package/dist/{chunk-KPVKZ5ML.cjs → chunk-6VEEQBVJ.cjs} +15 -15
  13. package/dist/{chunk-KPVKZ5ML.cjs.map → chunk-6VEEQBVJ.cjs.map} +1 -1
  14. package/dist/{chunk-SAH4FR36.js → chunk-6WPUUGW5.js} +5 -5
  15. package/dist/{chunk-6KD6KVAI.cjs → chunk-B472QGDO.cjs} +5 -5
  16. package/dist/{chunk-6KD6KVAI.cjs.map → chunk-B472QGDO.cjs.map} +1 -1
  17. package/dist/{chunk-3NNCBZEM.js → chunk-B52SBOUY.js} +6 -6
  18. package/dist/{chunk-5TQQ3CPE.cjs → chunk-CDBQQA7V.cjs} +29 -29
  19. package/dist/{chunk-5TQQ3CPE.cjs.map → chunk-CDBQQA7V.cjs.map} +1 -1
  20. package/dist/{chunk-7VBGYCXG.cjs → chunk-CH7MDKPI.cjs} +7 -7
  21. package/dist/{chunk-7VBGYCXG.cjs.map → chunk-CH7MDKPI.cjs.map} +1 -1
  22. package/dist/{chunk-S6IB3BZK.js → chunk-DBYUQOLS.js} +2 -2
  23. package/dist/{chunk-AGX565ZT.js → chunk-FPOHUGEK.js} +2 -2
  24. package/dist/{chunk-R4OGP4OV.js → chunk-H6FKYKEQ.js} +3 -3
  25. package/dist/{chunk-FM5KWLKU.cjs → chunk-HQL5GJ35.cjs} +3 -3
  26. package/dist/{chunk-FM5KWLKU.cjs.map → chunk-HQL5GJ35.cjs.map} +1 -1
  27. package/dist/{chunk-PTFSF3UP.js → chunk-I5L3KUTE.js} +6 -6
  28. package/dist/{chunk-GELW7JOQ.cjs → chunk-J5S5U76A.cjs} +32 -32
  29. package/dist/{chunk-GELW7JOQ.cjs.map → chunk-J5S5U76A.cjs.map} +1 -1
  30. package/dist/{chunk-464NJS2W.cjs → chunk-KP37QDNS.cjs} +73 -73
  31. package/dist/{chunk-464NJS2W.cjs.map → chunk-KP37QDNS.cjs.map} +1 -1
  32. package/dist/{chunk-PFD2VRZI.cjs → chunk-KXBXPOYM.cjs} +18 -18
  33. package/dist/{chunk-PFD2VRZI.cjs.map → chunk-KXBXPOYM.cjs.map} +1 -1
  34. package/dist/{chunk-VNDAMVMI.js → chunk-LWIVRGDN.js} +2 -2
  35. package/dist/{chunk-ZPUZPJDV.js → chunk-OTV4A6NA.js} +14 -80
  36. package/dist/chunk-OTV4A6NA.js.map +1 -0
  37. package/dist/{chunk-IIOHHNMI.js → chunk-QESV36I2.js} +70 -36
  38. package/dist/chunk-QESV36I2.js.map +1 -0
  39. package/dist/{chunk-FBUIZTAI.js → chunk-SWNZZVYG.js} +2 -2
  40. package/dist/{chunk-VCOL4C2W.cjs → chunk-TONMD7QX.cjs} +20 -86
  41. package/dist/chunk-TONMD7QX.cjs.map +1 -0
  42. package/dist/{chunk-Z4LAZ4ZZ.js → chunk-UCY6VITT.js} +3 -3
  43. package/dist/{chunk-BOPLMNSN.cjs → chunk-ZQRGJHNH.cjs} +151 -117
  44. package/dist/chunk-ZQRGJHNH.cjs.map +1 -0
  45. package/dist/components/case-studies/index.cjs +9 -9
  46. package/dist/components/case-studies/index.js +3 -3
  47. package/dist/components/chat/index.cjs +3 -3
  48. package/dist/components/chat/index.js +2 -2
  49. package/dist/components/contact/index.cjs +4 -4
  50. package/dist/components/contact/index.js +3 -3
  51. package/dist/components/docs/index.cjs +6 -6
  52. package/dist/components/docs/index.js +5 -5
  53. package/dist/components/embeds/index.cjs +4 -4
  54. package/dist/components/embeds/index.js +3 -3
  55. package/dist/components/faq/index.cjs +5 -5
  56. package/dist/components/faq/index.js +4 -4
  57. package/dist/components/features/index.cjs +3 -3
  58. package/dist/components/features/index.js +2 -2
  59. package/dist/components/help-center-pages/index.cjs +22 -22
  60. package/dist/components/help-center-pages/index.js +13 -13
  61. package/dist/components/index.cjs +136 -136
  62. package/dist/components/index.js +11 -11
  63. package/dist/components/navigation/index.cjs +3 -3
  64. package/dist/components/navigation/index.js +2 -2
  65. package/dist/components/navigation/mobile-burger-menu.d.ts.map +1 -1
  66. package/dist/components/onboarding-guides/index.cjs +7 -7
  67. package/dist/components/onboarding-guides/index.js +6 -6
  68. package/dist/components/related-content/index.cjs +5 -5
  69. package/dist/components/related-content/index.js +4 -4
  70. package/dist/components/tickets/index.cjs +6 -6
  71. package/dist/components/tickets/index.js +5 -5
  72. package/dist/components/ui/entity-image.d.ts.map +1 -1
  73. package/dist/components/ui/image-uploader.d.ts.map +1 -1
  74. package/dist/components/ui/index.cjs +3 -3
  75. package/dist/components/ui/index.js +2 -2
  76. package/dist/components/ui/simple-markdown-renderer.d.ts.map +1 -1
  77. package/dist/components/ui/square-avatar.d.ts.map +1 -1
  78. package/dist/hooks/index.cjs +2 -6
  79. package/dist/hooks/index.cjs.map +1 -1
  80. package/dist/hooks/index.d.ts +0 -1
  81. package/dist/hooks/index.d.ts.map +1 -1
  82. package/dist/hooks/index.js +1 -5
  83. package/dist/index.cjs +3 -7
  84. package/dist/index.cjs.map +1 -1
  85. package/dist/index.js +2 -6
  86. package/dist/utils/embed-authed-fetch.d.ts +0 -15
  87. package/dist/utils/embed-authed-fetch.d.ts.map +1 -1
  88. package/dist/utils/index.cjs.map +1 -1
  89. package/dist/utils/index.js.map +1 -1
  90. package/package.json +1 -1
  91. package/src/components/navigation/mobile-burger-menu.tsx +0 -1
  92. package/src/components/ui/entity-image.tsx +3 -5
  93. package/src/components/ui/image-uploader.tsx +12 -21
  94. package/src/components/ui/simple-markdown-renderer.tsx +58 -57
  95. package/src/components/ui/square-avatar.tsx +3 -5
  96. package/src/hooks/index.ts +0 -1
  97. package/src/utils/embed-authed-fetch.ts +0 -30
  98. package/dist/chunk-BOPLMNSN.cjs.map +0 -1
  99. package/dist/chunk-IIOHHNMI.js.map +0 -1
  100. package/dist/chunk-VCOL4C2W.cjs.map +0 -1
  101. package/dist/chunk-ZPUZPJDV.js.map +0 -1
  102. package/dist/hooks/use-authed-image-src.d.ts +0 -10
  103. package/dist/hooks/use-authed-image-src.d.ts.map +0 -1
  104. package/src/hooks/use-authed-image-src.ts +0 -93
  105. /package/dist/{chunk-RIPWRVA3.js.map → chunk-2SPAHQYE.js.map} +0 -0
  106. /package/dist/{chunk-K52S6LZ5.js.map → chunk-4Y6LX6XR.js.map} +0 -0
  107. /package/dist/{chunk-OKRUL7YV.js.map → chunk-4YH4WKLC.js.map} +0 -0
  108. /package/dist/{chunk-SAH4FR36.js.map → chunk-6WPUUGW5.js.map} +0 -0
  109. /package/dist/{chunk-3NNCBZEM.js.map → chunk-B52SBOUY.js.map} +0 -0
  110. /package/dist/{chunk-S6IB3BZK.js.map → chunk-DBYUQOLS.js.map} +0 -0
  111. /package/dist/{chunk-AGX565ZT.js.map → chunk-FPOHUGEK.js.map} +0 -0
  112. /package/dist/{chunk-R4OGP4OV.js.map → chunk-H6FKYKEQ.js.map} +0 -0
  113. /package/dist/{chunk-PTFSF3UP.js.map → chunk-I5L3KUTE.js.map} +0 -0
  114. /package/dist/{chunk-VNDAMVMI.js.map → chunk-LWIVRGDN.js.map} +0 -0
  115. /package/dist/{chunk-FBUIZTAI.js.map → chunk-SWNZZVYG.js.map} +0 -0
  116. /package/dist/{chunk-Z4LAZ4ZZ.js.map → chunk-UCY6VITT.js.map} +0 -0
@@ -11,7 +11,6 @@ import {
11
11
  progressColorByVariant,
12
12
  scrollElementIntoView,
13
13
  toolLabels,
14
- useAuthedImageSrc,
15
14
  useAutoLimitTags,
16
15
  useCopyToClipboard,
17
16
  useDebounce,
@@ -33,7 +32,7 @@ import {
33
32
  useResetOnPageHidden,
34
33
  useSuppressCloneFocus,
35
34
  useToast
36
- } from "./chunk-ZPUZPJDV.js";
35
+ } from "./chunk-OTV4A6NA.js";
37
36
  import {
38
37
  AlertCircleIcon,
39
38
  AnthropicLogoGreyIcon,
@@ -1468,22 +1467,6 @@ var MermaidDiagram = ({ chart }) => {
1468
1467
  }
1469
1468
  ) }) });
1470
1469
  };
1471
- var MarkdownContentImage = ({ src, alt }) => {
1472
- const resolvedSrc = useAuthedImageSrc(src);
1473
- if (!resolvedSrc) return null;
1474
- return /* @__PURE__ */ jsx7(
1475
- next_image_default,
1476
- {
1477
- src: resolvedSrc,
1478
- alt: alt ?? "No image available",
1479
- width: 400,
1480
- height: 400,
1481
- sizes: "(max-width: 400px) 100vw, 400px",
1482
- className: "max-w-full max-h-[400px] w-auto h-auto rounded-lg object-contain",
1483
- style: { width: "auto", height: "auto" }
1484
- }
1485
- );
1486
- };
1487
1470
  function extractText(node) {
1488
1471
  if (typeof node === "string") return node;
1489
1472
  if (Array.isArray(node)) return node.map(extractText).join("");
@@ -1705,12 +1688,67 @@ var SimpleMarkdownRendererImpl = ({
1705
1688
  );
1706
1689
  },
1707
1690
  // --- images ---
1708
- // Delegates to MarkdownContentImage (module scope, above) — sizing
1709
- // rules, Next.js <Image> rationale, and the bearer-mode authed-src
1710
- // handling are documented there.
1691
+ // Inline content image renderer. Used by blog posts, docs, AND chat
1692
+ // messages (where users may attach screenshots / photos via the +
1693
+ // attachment button).
1694
+ //
1695
+ // Sizing rules (2025-2026 best practice — Claude.ai, ChatGPT,
1696
+ // iMessage, Slack, Discord inline image patterns):
1697
+ //
1698
+ // - CAP max-width at 400px so inline images don't blow out the
1699
+ // message column on wide panels. Click-to-expand opens a
1700
+ // full-resolution modal for users who need detail.
1701
+ // - CAP max-height at 400px so portrait-orientation images
1702
+ // don't dominate vertical space (a 1000x3000 phone screenshot
1703
+ // would otherwise push the next message off-screen).
1704
+ // - Small images render at NATURAL pixel size — a 64x64
1705
+ // thumbnail stays 64x64, not stretched to fill the column.
1706
+ // - `object-contain` preserves aspect ratio when both dimensions
1707
+ // are constrained (long landscape, tall portrait).
1708
+ //
1709
+ // Implementation: Next.js `<Image>` — the project's canonical
1710
+ // image primitive. Gives us:
1711
+ // - WebP/AVIF format conversion for modern browsers (smaller
1712
+ // bytes for the same visual quality).
1713
+ // - Responsive `srcset` via the `sizes` prop (browser picks the
1714
+ // right variant for the viewport).
1715
+ // - Automatic lazy-loading (`loading="lazy"` by default, mid-
1716
+ // page images skipped until they near the viewport).
1717
+ // - Automatic `decoding="async"` so image decode doesn't block
1718
+ // paint.
1719
+ //
1720
+ // `width={400} height={400}` props are REQUIRED by Next.js
1721
+ // `<Image>` (non-`fill` mode throws without them) but they're
1722
+ // effectively a CEILING here, not the display size — the CSS
1723
+ // overrides (`w-auto h-auto max-w-full max-h-[400px]`) drive
1724
+ // the actual rendered size. The inline `style={{ width: 'auto',
1725
+ // height: 'auto' }}` is belt-and-suspenders: Next.js Image sets
1726
+ // matching HTML `width`/`height` attributes on the rendered
1727
+ // `<img>` and inline style wins over both HTML attributes AND
1728
+ // utility classes regardless of CSS-specificity surprises.
1729
+ //
1730
+ // Layout reservation trade-off: until image bytes arrive, the
1731
+ // browser may reserve a placeholder box up to 400x400 (the props'
1732
+ // intrinsic-ratio hint). Once loaded, the box collapses to the
1733
+ // natural size if smaller. This is the standard Next.js Image
1734
+ // behavior across the codebase — accepted for the optimizer +
1735
+ // responsive-srcset benefits. Chat attachments hosted in side
1736
+ // panels see this only on first render of a fresh attachment
1737
+ // (cached re-renders pop in without a perceptible shift).
1711
1738
  img: ({ src, alt }) => {
1712
1739
  if (!src || typeof src !== "string" || src.trim() === "") return null;
1713
- return /* @__PURE__ */ jsx7(MarkdownContentImage, { src, alt });
1740
+ return /* @__PURE__ */ jsx7(
1741
+ next_image_default,
1742
+ {
1743
+ src,
1744
+ alt: alt ?? "No image available",
1745
+ width: 400,
1746
+ height: 400,
1747
+ sizes: "(max-width: 400px) 100vw, 400px",
1748
+ className: "max-w-full max-h-[400px] w-auto h-auto rounded-lg object-contain",
1749
+ style: { width: "auto", height: "auto" }
1750
+ }
1751
+ );
1714
1752
  },
1715
1753
  // --- lists ---
1716
1754
  ul: ({ children }) => /* @__PURE__ */ jsx7("ul", { className: "list-disc list-outside my-4 ml-8 space-y-2 text-ods-text-primary", children }),
@@ -2244,7 +2282,6 @@ function formatBioText(aboutHtml, fallback = "") {
2244
2282
  import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
2245
2283
  var SquareAvatar = React2.memo(React2.forwardRef(
2246
2284
  ({ className, src, alt, size: size2 = "md", sizePx, fallback, variant = "square", initialsClassName, style, ...props }, ref) => {
2247
- const resolvedSrc = useAuthedImageSrc(src);
2248
2285
  const sizeClasses2 = {
2249
2286
  sm: "h-8 w-8",
2250
2287
  md: "h-10 w-10",
@@ -2287,13 +2324,13 @@ var SquareAvatar = React2.memo(React2.forwardRef(
2287
2324
  // keeps the later class).
2288
2325
  "flex items-center justify-center text-xs font-medium text-[color:var(--ods-avatar-initials,var(--color-text-primary))]",
2289
2326
  initialsClassName,
2290
- resolvedSrc && "hidden"
2327
+ src && "hidden"
2291
2328
  ), children: getFirstLastInitials(fallback || alt) || "?" }),
2292
- resolvedSrc && /* @__PURE__ */ jsx10(
2329
+ src && /* @__PURE__ */ jsx10(
2293
2330
  next_image_default,
2294
2331
  {
2295
2332
  className: "absolute -inset-px h-[calc(100%+2px)] w-[calc(100%+2px)] max-w-none object-cover",
2296
- src: resolvedSrc,
2333
+ src,
2297
2334
  alt: alt || "",
2298
2335
  width: sizePx ?? sizePxBySize[size2],
2299
2336
  height: sizePx ?? sizePxBySize[size2],
@@ -23332,16 +23369,15 @@ init_cn();
23332
23369
  init_cn();
23333
23370
 
23334
23371
  // src/components/ui/entity-image.tsx
23335
- import React81 from "react";
23336
23372
  init_cn();
23373
+ import React81 from "react";
23337
23374
  import { jsx as jsx164 } from "react/jsx-runtime";
23338
23375
  function EntityImage({ src, alt, fallbackText, className }) {
23339
- const resolvedSrc = useAuthedImageSrc(src);
23340
23376
  const [imageFailed, setImageFailed] = React81.useState(false);
23341
23377
  React81.useEffect(() => {
23342
23378
  setImageFailed(false);
23343
- }, [resolvedSrc]);
23344
- const showFallback = imageFailed || !resolvedSrc;
23379
+ }, [src]);
23380
+ const showFallback = imageFailed || !src;
23345
23381
  const initials = getFirstLastInitials(fallbackText ?? alt);
23346
23382
  if (showFallback) {
23347
23383
  return /* @__PURE__ */ jsx164(
@@ -23359,7 +23395,7 @@ function EntityImage({ src, alt, fallbackText, className }) {
23359
23395
  return /* @__PURE__ */ jsx164(
23360
23396
  "img",
23361
23397
  {
23362
- src: resolvedSrc,
23398
+ src: src ?? void 0,
23363
23399
  alt: alt ?? "",
23364
23400
  onError: () => setImageFailed(true),
23365
23401
  className: cn(
@@ -37679,7 +37715,6 @@ var MobileBurgerMenu = React115.memo(function MobileBurgerMenu2({
37679
37715
  disabled,
37680
37716
  className: cn(
37681
37717
  "flex items-center gap-1 p-3 relative",
37682
- "focus:outline-none focus-visible:outline-none",
37683
37718
  "transition-colors duration-200",
37684
37719
  "bg-ods-card border border-ods-border rounded-md",
37685
37720
  !disabled && "hover:bg-ods-bg-hover",
@@ -42560,7 +42595,6 @@ function ImageUploader({
42560
42595
  const [pressed, setPressed] = React128.useState(false);
42561
42596
  const [validationError, setValidationError] = React128.useState(null);
42562
42597
  const interactive = !disabled && !loading;
42563
- const resolvedValue = useAuthedImageSrc(value);
42564
42598
  const hasImage = Boolean(value);
42565
42599
  const displayError = error || validationError || void 0;
42566
42600
  const resolvedHint = hint === void 0 ? `Max. size: ${formatSize(maxSize)}` : hint;
@@ -42646,10 +42680,10 @@ function ImageUploader({
42646
42680
  dropzoneClassName
42647
42681
  ),
42648
42682
  children: hasImage ? /* @__PURE__ */ jsxs270(Fragment66, { children: [
42649
- /* @__PURE__ */ jsx339("div", { className: "relative min-h-0 w-full flex-1 overflow-hidden rounded-md", children: resolvedValue && /* @__PURE__ */ jsx339(
42683
+ /* @__PURE__ */ jsx339("div", { className: "relative min-h-0 w-full flex-1 overflow-hidden rounded-md", children: /* @__PURE__ */ jsx339(
42650
42684
  "img",
42651
42685
  {
42652
- src: resolvedValue,
42686
+ src: value,
42653
42687
  alt,
42654
42688
  className: cn(
42655
42689
  "pointer-events-none absolute inset-0 size-full",
@@ -55412,4 +55446,4 @@ export {
55412
55446
  LogsList,
55413
55447
  assets
55414
55448
  };
55415
- //# sourceMappingURL=chunk-IIOHHNMI.js.map
55449
+ //# sourceMappingURL=chunk-QESV36I2.js.map