@flamingo-stack/openframe-frontend-core 0.0.854 → 0.0.855

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 (133) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/{case-study-card-WP5Z234Q.cjs → case-study-card-6VAMNHLU.cjs} +8 -8
  3. package/dist/{chunk-FBANHIAG.cjs → chunk-2JCA7BRK.cjs} +19 -19
  4. package/dist/{chunk-7MOBD44H.cjs → chunk-2MCPK6AX.cjs} +28 -28
  5. package/dist/{chunk-GVHCQRUE.cjs → chunk-2P72KAG5.cjs} +23 -23
  6. package/dist/{chunk-YY3WP2YQ.cjs → chunk-3GJ75OUL.cjs} +183 -183
  7. package/dist/{chunk-FJXSKMQJ.cjs → chunk-4H3J57AN.cjs} +25 -25
  8. package/dist/{chunk-6GWRPW6B.cjs → chunk-5NK3FUHY.cjs} +4 -4
  9. package/dist/{chunk-DLTPSP5F.cjs → chunk-5TYG5JNB.cjs} +2 -2
  10. package/dist/{chunk-63ZV3UGG.cjs → chunk-65NMKAPQ.cjs} +12 -12
  11. package/dist/{chunk-IGVAPIEW.cjs → chunk-6C4OR4MZ.cjs} +2 -2
  12. package/dist/{chunk-GG466XFQ.cjs → chunk-6DMH4GXN.cjs} +30 -5
  13. package/dist/{chunk-S5P6CF5R.cjs → chunk-6VVQJU76.cjs} +54 -54
  14. package/dist/{chunk-2IJMHBOK.cjs → chunk-77GX573I.cjs} +9 -9
  15. package/dist/{chunk-D2XGRWPW.cjs → chunk-AOOHJLXS.cjs} +90 -90
  16. package/dist/{chunk-O3EKOXFZ.cjs → chunk-AYMY2VNB.cjs} +37 -43
  17. package/dist/{chunk-RMI6O3AE.cjs → chunk-BSPIGZCC.cjs} +36 -36
  18. package/dist/{chunk-JKBNK5U6.cjs → chunk-D6GEMVHD.cjs} +3 -3
  19. package/dist/{chunk-7J5NSWJG.cjs → chunk-DPNFI5XM.cjs} +100 -100
  20. package/dist/{chunk-TMPLHUUU.cjs → chunk-DTZ6KASI.cjs} +6 -6
  21. package/dist/{chunk-SSKMGH5O.cjs → chunk-DXVGGWLG.cjs} +10 -10
  22. package/dist/{chunk-5TXE7BXT.cjs → chunk-EOUEUYCQ.cjs} +54 -54
  23. package/dist/{chunk-EIHMPQRQ.cjs → chunk-ESGE7CUX.cjs} +14 -14
  24. package/dist/{chunk-ETZFBB7O.cjs → chunk-EXQSIX2I.cjs} +4 -4
  25. package/dist/{chunk-3WXHPD6N.cjs → chunk-F33EAPD2.cjs} +124 -124
  26. package/dist/{chunk-4SSJ3T3N.cjs → chunk-GK577ZLJ.cjs} +3 -13
  27. package/dist/{chunk-BAA3YCLT.cjs → chunk-GZYRDLJW.cjs} +103 -103
  28. package/dist/{chunk-VMAOZA2V.cjs → chunk-HML3JUXF.cjs} +324 -322
  29. package/dist/{chunk-4O5N5CGK.cjs → chunk-J3CFRGZ2.cjs} +17 -17
  30. package/dist/{chunk-LQDAB5V5.cjs → chunk-KZAQPRTA.cjs} +9 -11
  31. package/dist/{chunk-6DCUGIGU.cjs → chunk-LSLRJJFP.cjs} +2 -2
  32. package/dist/{chunk-ETQNMR2K.cjs → chunk-MINFN3IG.cjs} +8 -8
  33. package/dist/{chunk-ONYANAMA.cjs → chunk-MX52LZ6M.cjs} +6 -6
  34. package/dist/{chunk-OH5TXFRR.cjs → chunk-O4CPT3RK.cjs} +7 -7
  35. package/dist/{chunk-ZDPPNHA2.cjs → chunk-OTHQ2KQW.cjs} +3 -3
  36. package/dist/{chunk-5HMENXSR.cjs → chunk-PCQ2HKU3.cjs} +5 -5
  37. package/dist/{chunk-6XU3RCK3.cjs → chunk-QPHXYE5P.cjs} +27 -27
  38. package/dist/{chunk-UPQ4MAR7.cjs → chunk-QZXCUY36.cjs} +53 -53
  39. package/dist/{chunk-5OENPMRU.cjs → chunk-RIJU4HZ2.cjs} +51 -55
  40. package/dist/{chunk-KKFDRCQF.cjs → chunk-RY7INTYU.cjs} +14 -1
  41. package/dist/{chunk-GI3MMBP3.cjs → chunk-SQ7YHWEP.cjs} +228 -15
  42. package/dist/{chunk-ACPOJE32.cjs → chunk-STV6VJ3U.cjs} +21 -21
  43. package/dist/{chunk-QD727QFI.cjs → chunk-T54I5ZZY.cjs} +7 -7
  44. package/dist/{chunk-4LTLEUY5.cjs → chunk-TW5Y4D5I.cjs} +7 -7
  45. package/dist/{chunk-FX35L4Y6.cjs → chunk-XCQ5I27Z.cjs} +3 -3
  46. package/dist/{chunk-AZEO7HBB.cjs → chunk-Y44EF4JW.cjs} +2 -2
  47. package/dist/{chunk-KA3L6D5N.cjs → chunk-YSXVRTGT.cjs} +9 -12
  48. package/dist/{chunk-PRJZMZ3X.cjs → chunk-ZUGJLCYP.cjs} +678 -678
  49. package/dist/{chunk-H3GBPYPS.cjs → chunk-ZYAVIRQV.cjs} +25 -25
  50. package/dist/{cloud-tenants-5RNK4ZAT.cjs → cloud-tenants-2XFIDDGU.cjs} +28 -29
  51. package/dist/components/case-studies/index.cjs +44 -45
  52. package/dist/components/chat/chat-message-row.d.ts +1 -1
  53. package/dist/components/chat/chat-message-row.d.ts.map +1 -1
  54. package/dist/components/chat/chat-message-row.js +4 -4
  55. package/dist/components/chat/entity-cards/use-cover-image-fallback.d.ts +7 -13
  56. package/dist/components/chat/entity-cards/use-cover-image-fallback.d.ts.map +1 -1
  57. package/dist/components/chat/entity-cards/use-cover-image-fallback.js +2 -8
  58. package/dist/components/chat/hooks/use-chat-attachment-image-gallery.d.ts.map +1 -1
  59. package/dist/components/chat/hooks/use-chat-attachment-image-gallery.js +8 -4
  60. package/dist/components/chat/index.cjs +22 -23
  61. package/dist/components/contact/index.cjs +29 -30
  62. package/dist/components/docs/index.cjs +32 -33
  63. package/dist/components/embeds/index.cjs +29 -30
  64. package/dist/components/faq/index.cjs +30 -31
  65. package/dist/components/features/index.cjs +28 -29
  66. package/dist/components/help-center-pages/index.cjs +134 -135
  67. package/dist/components/index.cjs +112 -113
  68. package/dist/components/meeting-scheduler/index.cjs +102 -103
  69. package/dist/components/navigation/index.cjs +31 -32
  70. package/dist/components/onboarding-guides/index.cjs +31 -32
  71. package/dist/components/product-demo/index.cjs +39 -40
  72. package/dist/components/related-content/index.cjs +16 -17
  73. package/dist/components/tickets/index.cjs +35 -36
  74. package/dist/components/ui/entity-image.d.ts +1 -2
  75. package/dist/components/ui/entity-image.d.ts.map +1 -1
  76. package/dist/components/ui/entity-image.js +4 -8
  77. package/dist/components/ui/index.cjs +28 -29
  78. package/dist/components/ui/markdown/base-components.d.ts +0 -13
  79. package/dist/components/ui/markdown/base-components.d.ts.map +1 -1
  80. package/dist/components/ui/markdown/base-components.js +7 -7
  81. package/dist/components/ui/square-avatar.d.ts.map +1 -1
  82. package/dist/components/ui/square-avatar.js +3 -8
  83. package/dist/{devices-44O5PZOW.cjs → devices-O3DYGIZB.cjs} +29 -30
  84. package/dist/embed-shims/index.cjs +3 -2
  85. package/dist/embed-shims/next-image.cjs +3 -2
  86. package/dist/embed-shims/next-image.d.ts +2 -0
  87. package/dist/embed-shims/next-image.d.ts.map +1 -1
  88. package/dist/embed-shims/next-image.js +14 -4
  89. package/dist/{embeddable-chat-W3CLMGC3.cjs → embeddable-chat-QD7NFD2H.cjs} +100 -101
  90. package/dist/hooks/index.cjs +23 -16
  91. package/dist/hooks/index.d.ts +1 -0
  92. package/dist/hooks/index.d.ts.map +1 -1
  93. package/dist/hooks/index.js +1 -0
  94. package/dist/hooks/use-authed-asset-src.d.ts +77 -2
  95. package/dist/hooks/use-authed-asset-src.d.ts.map +1 -1
  96. package/dist/hooks/use-authed-asset-src.js +185 -73
  97. package/dist/hooks/use-authed-image-src.d.ts +11 -4
  98. package/dist/hooks/use-authed-image-src.d.ts.map +1 -1
  99. package/dist/hooks/use-authed-image-src.js +6 -2
  100. package/dist/hooks/use-image-fallback.d.ts +16 -0
  101. package/dist/hooks/use-image-fallback.d.ts.map +1 -0
  102. package/dist/hooks/use-image-fallback.js +14 -0
  103. package/dist/index.cjs +40 -36
  104. package/dist/{knowledge-UUU3WVO3.cjs → knowledge-K7AFNZNO.cjs} +29 -30
  105. package/dist/{logs-DFHNSODA.cjs → logs-MZ3BR2FR.cjs} +35 -36
  106. package/dist/{policies-RGFUGDBP.cjs → policies-XVKQ2W7S.cjs} +32 -33
  107. package/dist/{remote-session-U3H77HKR.cjs → remote-session-VOZJXDM4.cjs} +13 -14
  108. package/dist/{scripts-KOVO5DHW.cjs → scripts-IBPMBS6G.cjs} +35 -36
  109. package/dist/{software-update-4EKHVV5W.cjs → software-update-PXTANMAO.cjs} +32 -33
  110. package/dist/{tickets-board-YIFOVMDX.cjs → tickets-board-POYZS7BW.cjs} +16 -17
  111. package/dist/utils/app-origins.d.ts +3 -6
  112. package/dist/utils/app-origins.d.ts.map +1 -1
  113. package/dist/utils/app-origins.js +8 -1
  114. package/dist/utils/embed-authed-fetch.d.ts +46 -26
  115. package/dist/utils/embed-authed-fetch.d.ts.map +1 -1
  116. package/dist/utils/embed-authed-fetch.js +24 -8
  117. package/dist/utils/index.cjs +4 -1
  118. package/dist/{video-file-player-XMOB234V.cjs → video-file-player-RIOT24NT.cjs} +3 -4
  119. package/package.json +1 -1
  120. package/src/components/chat/chat-message-row.tsx +8 -7
  121. package/src/components/chat/entity-cards/use-cover-image-fallback.ts +8 -28
  122. package/src/components/chat/hooks/use-chat-attachment-image-gallery.tsx +19 -8
  123. package/src/components/ui/entity-image.tsx +4 -12
  124. package/src/components/ui/markdown/base-components.tsx +15 -20
  125. package/src/components/ui/square-avatar.tsx +5 -8
  126. package/src/embed-shims/next-image.tsx +34 -3
  127. package/src/hooks/index.ts +1 -0
  128. package/src/hooks/use-authed-asset-src.ts +323 -107
  129. package/src/hooks/use-authed-image-src.ts +15 -5
  130. package/src/hooks/use-image-fallback.ts +31 -0
  131. package/src/utils/app-origins.ts +12 -7
  132. package/src/utils/embed-authed-fetch.ts +71 -32
  133. package/dist/chunk-YSDB6HGQ.cjs +0 -102
@@ -12,7 +12,7 @@ var _chunkOT6P57ZScjs = require('./chunk-OT6P57ZS.cjs');
12
12
 
13
13
 
14
14
 
15
- var _chunk63ZV3UGGcjs = require('./chunk-63ZV3UGG.cjs');
15
+ var _chunk65NMKAPQcjs = require('./chunk-65NMKAPQ.cjs');
16
16
 
17
17
 
18
18
 
@@ -99,7 +99,7 @@ var _chunkXIBCMGBWcjs = require('./chunk-XIBCMGBW.cjs');
99
99
 
100
100
 
101
101
 
102
- var _chunkJKBNK5U6cjs = require('./chunk-JKBNK5U6.cjs');
102
+ var _chunkD6GEMVHDcjs = require('./chunk-D6GEMVHD.cjs');
103
103
 
104
104
 
105
105
  var _chunkSKI6NKOEcjs = require('./chunk-SKI6NKOE.cjs');
@@ -109,20 +109,21 @@ var _chunkSKI6NKOEcjs = require('./chunk-SKI6NKOE.cjs');
109
109
 
110
110
 
111
111
 
112
- var _chunkKA3L6D5Ncjs = require('./chunk-KA3L6D5N.cjs');
112
+ var _chunkYSXVRTGTcjs = require('./chunk-YSXVRTGT.cjs');
113
113
 
114
114
 
115
115
  var _chunkRUHKTWGBcjs = require('./chunk-RUHKTWGB.cjs');
116
116
 
117
117
 
118
+ var _chunkGK577ZLJcjs = require('./chunk-GK577ZLJ.cjs');
118
119
 
119
- var _chunk4SSJ3T3Ncjs = require('./chunk-4SSJ3T3N.cjs');
120
120
 
121
121
 
122
- var _chunkKKFDRCQFcjs = require('./chunk-KKFDRCQF.cjs');
122
+ var _chunkRY7INTYUcjs = require('./chunk-RY7INTYU.cjs');
123
123
 
124
124
 
125
- var _chunkGG466XFQcjs = require('./chunk-GG466XFQ.cjs');
125
+
126
+ var _chunk6DMH4GXNcjs = require('./chunk-6DMH4GXN.cjs');
126
127
 
127
128
 
128
129
 
@@ -195,13 +196,13 @@ function TruncateText({
195
196
  loading: loadingProp = false
196
197
  }) {
197
198
  const isMultiLine = lines > 1;
198
- const { ref, isTruncated } = _chunk4SSJ3T3Ncjs.useIsTruncated.call(void 0, children, { multiline: isMultiLine });
199
+ const { ref, isTruncated } = _chunkGK577ZLJcjs.useIsTruncated.call(void 0, children, { multiline: isMultiLine });
199
200
  const loading = _chunk63A4GZMBcjs.useLoadingScope.call(void 0, ) && !children || loadingProp;
200
201
  if (loading)
201
202
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPMUCEUFQcjs.TextLineSkeleton, { type: variant, lines, as, className: _chunk63A4GZMBcjs.cn.call(void 0, "w-3/4", triggerClassName) });
202
203
  const clampClass = isMultiLine ? LINE_CLAMP_CLASS[lines] : "truncate block";
203
204
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
204
- _chunkKA3L6D5Ncjs.FloatingTooltip,
205
+ _chunkYSXVRTGTcjs.FloatingTooltip,
205
206
  {
206
207
  content: _nullishCoalesce(tooltip, () => ( children)),
207
208
  side,
@@ -349,7 +350,7 @@ function AutocompleteInner(props, ref) {
349
350
  };
350
351
  const [isOpen, setIsOpen] = _react.useState.call(void 0, false);
351
352
  const [highlightedIndex, setHighlightedIndex] = _react.useState.call(void 0, -1);
352
- const keyboardPadding = _chunkJKBNK5U6cjs.useKeyboardCollisionPadding.call(void 0, );
353
+ const keyboardPadding = _chunkD6GEMVHDcjs.useKeyboardCollisionPadding.call(void 0, );
353
354
  const containerRef = _react.useRef.call(void 0, null);
354
355
  const hiddenTagsPopupRef = _react.useRef.call(void 0, null);
355
356
  const isInvalid = invalid || !!error;
@@ -371,7 +372,7 @@ function AutocompleteInner(props, ref) {
371
372
  textMeasureRef,
372
373
  badgeRef,
373
374
  inputRef
374
- } = _chunkJKBNK5U6cjs.useAutoLimitTags.call(void 0, {
375
+ } = _chunkD6GEMVHDcjs.useAutoLimitTags.call(void 0, {
375
376
  count: multiple ? selectedOptions.length : 0,
376
377
  limitTags: multiple ? wrapTags ? selectedOptions.length : limitTagsProp : 0,
377
378
  placeholder: inputPlaceholder
@@ -590,7 +591,7 @@ function AutocompleteInner(props, ref) {
590
591
  ),
591
592
  children: [
592
593
  multiple && visibleTags.map((option) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
593
- _chunkKA3L6D5Ncjs.Tag,
594
+ _chunkYSXVRTGTcjs.Tag,
594
595
  {
595
596
  variant: "outline",
596
597
  className: wrapTags ? "max-w-full" : void 0,
@@ -790,7 +791,7 @@ function AutocompleteInner(props, ref) {
790
791
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative", ref: containerRef, children: [
791
792
  popover,
792
793
  multiple && showHiddenTags && hiddenTagsCount > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
793
- _chunk63ZV3UGGcjs.HiddenTagsPopup,
794
+ _chunk65NMKAPQcjs.HiddenTagsPopup,
794
795
  {
795
796
  ref: hiddenTagsPopupRef,
796
797
  items: hiddenTags,
@@ -803,10 +804,10 @@ function AutocompleteInner(props, ref) {
803
804
  }
804
805
  }
805
806
  ),
806
- multiple && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { "aria-hidden": "true", className: _chunkJKBNK5U6cjs.MEASURE_LAYER_CLASS, children: [
807
+ multiple && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { "aria-hidden": "true", className: _chunkD6GEMVHDcjs.MEASURE_LAYER_CLASS, children: [
807
808
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { ref: textMeasureRef, "aria-hidden": "true", className: "whitespace-nowrap text-h4", children: inputPlaceholder }),
808
809
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: measureRef, "aria-hidden": "true", className: "flex w-max gap-2", children: selectedOptions.map((option) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
809
- _chunkKA3L6D5Ncjs.Tag,
810
+ _chunkYSXVRTGTcjs.Tag,
810
811
  {
811
812
  variant: "outline",
812
813
  labelClassName: "max-w-[90px] truncate",
@@ -1335,19 +1336,14 @@ function usePageActionsBottomPadding(variant) {
1335
1336
 
1336
1337
  // src/components/ui/entity-image.tsx
1337
1338
 
1338
-
1339
1339
  var ENTITY_IMAGE_SIZE = _chunkPMUCEUFQcjs.TILE_SIZE.entity;
1340
1340
  var ENTITY_IMAGE_RADIUS_CLASS = "rounded-md";
1341
1341
  function EntityImage({ src, alt, fallbackText, sizeClassName, className }) {
1342
1342
  const held = _chunk63A4GZMBcjs.useLoadingScope.call(void 0, );
1343
- const authedSrc = _chunk4SSJ3T3Ncjs.useAuthedImageSrc.call(void 0, held ? void 0 : src);
1344
- const resolvedSrc = authedSrc;
1345
- const [failedSrc, setFailedSrc] = _react2.default.useState(null);
1346
- const imageFailed = resolvedSrc !== void 0 && failedSrc === resolvedSrc;
1343
+ const { src: resolvedSrc, onError } = _chunkRY7INTYUcjs.useImageFallback.call(void 0, _chunk6DMH4GXNcjs.useAuthedImageSrc.call(void 0, held ? void 0 : src));
1347
1344
  if (held) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, EntityImageSkeleton, { sizeClassName, className });
1348
- const showFallback = imageFailed || !resolvedSrc;
1349
- const initials = _chunkKA3L6D5Ncjs.personInitials.call(void 0, _nullishCoalesce(fallbackText, () => ( alt)));
1350
- if (showFallback) {
1345
+ const initials = _chunkYSXVRTGTcjs.personInitials.call(void 0, _nullishCoalesce(fallbackText, () => ( alt)));
1346
+ if (!resolvedSrc) {
1351
1347
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1352
1348
  "div",
1353
1349
  {
@@ -1363,19 +1359,19 @@ function EntityImage({ src, alt, fallbackText, sizeClassName, className }) {
1363
1359
  );
1364
1360
  }
1365
1361
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1366
- _chunkGG466XFQcjs.next_image_default,
1362
+ _chunk6DMH4GXNcjs.next_image_default,
1367
1363
  {
1368
1364
  src: resolvedSrc,
1369
1365
  alt: _nullishCoalesce(alt, () => ( "")),
1370
- onError: () => setFailedSrc(resolvedSrc),
1366
+ onError,
1371
1367
  className: _chunk63A4GZMBcjs.cn.call(void 0,
1372
1368
  "shrink-0 border border-ods-border object-contain",
1373
1369
  ENTITY_IMAGE_RADIUS_CLASS,
1374
1370
  _nullishCoalesce(sizeClassName, () => ( ENTITY_IMAGE_SIZE)),
1375
1371
  className
1376
1372
  ),
1377
- width: _chunkKKFDRCQFcjs.IMAGE_FIXED_PX.thumb,
1378
- height: _chunkKKFDRCQFcjs.IMAGE_FIXED_PX.thumb,
1373
+ width: _chunkRY7INTYUcjs.IMAGE_FIXED_PX.thumb,
1374
+ height: _chunkRY7INTYUcjs.IMAGE_FIXED_PX.thumb,
1379
1375
  unoptimized: true
1380
1376
  }
1381
1377
  );
@@ -1439,10 +1435,10 @@ function TitleBlock({
1439
1435
  const titleClass = titleSize === "h1" ? "text-h1" : "text-h2";
1440
1436
  const titleOverflowClass = titleWrap ? "break-words" : "truncate";
1441
1437
  const skeletonSize = TITLE_SKELETON_SIZE[titleSize];
1442
- const { ref: titleRef, isTruncated: titleTruncated } = _chunk4SSJ3T3Ncjs.useIsTruncated.call(void 0,
1438
+ const { ref: titleRef, isTruncated: titleTruncated } = _chunkGK577ZLJcjs.useIsTruncated.call(void 0,
1443
1439
  titleLoading ? null : title
1444
1440
  );
1445
- const { ref: subtitleRef, isTruncated: subtitleTruncated } = _chunk4SSJ3T3Ncjs.useIsTruncated.call(void 0,
1441
+ const { ref: subtitleRef, isTruncated: subtitleTruncated } = _chunkGK577ZLJcjs.useIsTruncated.call(void 0,
1446
1442
  subtitleLoading ? null : subtitle
1447
1443
  );
1448
1444
  const titleNode = titleLoading && titleSkeletonLines && titleWrap ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPMUCEUFQcjs.TextLinesByBreakpointSkeleton, { as: "span", lines: titleSkeletonLines }) : titleLoading && titleSkeletonLines ? (
@@ -1508,7 +1504,7 @@ function TitleBlock({
1508
1504
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col justify-center", children: [
1509
1505
  (titleLoading || title) && (titleAdornment ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full min-w-0 items-center gap-[var(--spacing-system-m)]", children: [
1510
1506
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1511
- _chunkKA3L6D5Ncjs.FloatingTooltip,
1507
+ _chunkYSXVRTGTcjs.FloatingTooltip,
1512
1508
  {
1513
1509
  content: title,
1514
1510
  side: "bottom",
@@ -1525,12 +1521,12 @@ function TitleBlock({
1525
1521
  }
1526
1522
  ),
1527
1523
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "shrink-0", children: titleAdornment })
1528
- ] }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKA3L6D5Ncjs.FloatingTooltip, { content: title, side: "bottom", disabled: !titleTruncated, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PageTitle, { ref: titleRef, className: _chunk63A4GZMBcjs.cn.call(void 0, titleClass, "text-ods-text-primary", titleOverflowClass), children: titleNode }) })),
1524
+ ] }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYSXVRTGTcjs.FloatingTooltip, { content: title, side: "bottom", disabled: !titleTruncated, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PageTitle, { ref: titleRef, className: _chunk63A4GZMBcjs.cn.call(void 0, titleClass, "text-ods-text-primary", titleOverflowClass), children: titleNode }) })),
1529
1525
  hasSubtitleRow && /* The NBSP is a pure spacer, reached only in `'always'` mode: an
1530
1526
  empty `p` collapses to zero height (its only content would be
1531
1527
  collapsible whitespace), which is exactly the shift that mode
1532
1528
  exists to prevent. Hidden from AT — it carries no meaning. */
1533
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKA3L6D5Ncjs.FloatingTooltip, { content: subtitle, side: "bottom", disabled: !subtitleTruncated, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1529
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYSXVRTGTcjs.FloatingTooltip, { content: subtitle, side: "bottom", disabled: !subtitleTruncated, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1534
1530
  "p",
1535
1531
  {
1536
1532
  ref: subtitleRef,
@@ -1548,7 +1544,7 @@ function TitleBlock({
1548
1544
  ) })
1549
1545
  ] })
1550
1546
  ] }) : title && (titleAdornment ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full min-w-0 items-center gap-[var(--spacing-system-m)]", children: [
1551
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKA3L6D5Ncjs.FloatingTooltip, { content: title, side: "bottom", disabled: !titleTruncated, triggerClassName: "min-w-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1547
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYSXVRTGTcjs.FloatingTooltip, { content: title, side: "bottom", disabled: !titleTruncated, triggerClassName: "min-w-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1552
1548
  PageTitle,
1553
1549
  {
1554
1550
  ref: titleRef,
@@ -1676,7 +1672,7 @@ function RemoteSessionViewers({ viewers, max = 4, className }) {
1676
1672
  children: [
1677
1673
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex items-center", children: [
1678
1674
  faces.map((viewer, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1679
- _chunkKA3L6D5Ncjs.SquareAvatar,
1675
+ _chunkYSXVRTGTcjs.SquareAvatar,
1680
1676
  {
1681
1677
  variant: "round",
1682
1678
  sizePx: 32,
@@ -1710,7 +1706,7 @@ function RemoteSessionViewers({ viewers, max = 4, className }) {
1710
1706
  ),
1711
1707
  children: [
1712
1708
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1713
- _chunkKA3L6D5Ncjs.SquareAvatar,
1709
+ _chunkYSXVRTGTcjs.SquareAvatar,
1714
1710
  {
1715
1711
  variant: "round",
1716
1712
  sizePx: 24,
@@ -1756,7 +1752,7 @@ function RemoteSessionScope({ children, className }) {
1756
1752
  function RemoteSessionOrgLogo({ name, logoUrl, sizePx, className }) {
1757
1753
  if (logoUrl) {
1758
1754
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1759
- _chunkKA3L6D5Ncjs.SquareAvatar,
1755
+ _chunkYSXVRTGTcjs.SquareAvatar,
1760
1756
  {
1761
1757
  variant: "square",
1762
1758
  fit: "contain",
@@ -1866,7 +1862,7 @@ function RemoteAccessRequestCard({
1866
1862
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, RemoteSessionOrgLogo, { name: organizationName, logoUrl: party.organizationLogoUrl, sizePx: 64 }),
1867
1863
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col", children: [
1868
1864
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "w-full truncate text-ods-text-primary text-h3", children: organizationName }),
1869
- siteUrl && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "w-full truncate text-ods-text-secondary text-h4", children: _chunkKA3L6D5Ncjs.formatUrlForDisplay.call(void 0, siteUrl, { keepWww: true }) })
1865
+ siteUrl && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "w-full truncate text-ods-text-secondary text-h4", children: _chunkYSXVRTGTcjs.formatUrlForDisplay.call(void 0, siteUrl, { keepWww: true }) })
1870
1866
  ] }),
1871
1867
  openableSite && onOpenSite && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { variant: "outline", size: "icon", "aria-label": "Open website", onClick: () => onOpenSite(openableSite), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkEDVT7OAScjs.ExternalLinkIcon, { size: 24, color: "currentColor" }) })
1872
1868
  ] }),
@@ -1977,7 +1973,7 @@ function RemoteSessionSummary({
1977
1973
  ...dragHandlers,
1978
1974
  children: [
1979
1975
  technician ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1980
- _chunkKA3L6D5Ncjs.SquareAvatar,
1976
+ _chunkYSXVRTGTcjs.SquareAvatar,
1981
1977
  {
1982
1978
  variant: "round",
1983
1979
  sizePx: 48,
@@ -2031,7 +2027,7 @@ var RemoteSessionMinimizedChip = _react.forwardRef.call(void 0,
2031
2027
  ...dragHandlers,
2032
2028
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex flex-col overflow-hidden rounded-md border border-ods-border", children: [
2033
2029
  technician ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2034
- _chunkKA3L6D5Ncjs.SquareAvatar,
2030
+ _chunkYSXVRTGTcjs.SquareAvatar,
2035
2031
  {
2036
2032
  sizePx: 48,
2037
2033
  src: _nullishCoalesce(party.technicianAvatarUrl, () => ( void 0)),
@@ -2183,7 +2179,7 @@ function RemoteSessionChatMessageRow({
2183
2179
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col", children: [
2184
2180
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full items-center gap-[var(--spacing-system-xs)]", children: [
2185
2181
  isTechnician && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2186
- _chunkKA3L6D5Ncjs.SquareAvatar,
2182
+ _chunkYSXVRTGTcjs.SquareAvatar,
2187
2183
  {
2188
2184
  variant: "round",
2189
2185
  sizePx: 16,
@@ -2226,7 +2222,7 @@ function RemoteDesktopChatMessageRow({
2226
2222
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: MESSAGE_ROW_CLASS, "aria-hidden": loading || void 0, ..._chunk63A4GZMBcjs.loadingItemProps.call(void 0, props), children: [
2227
2223
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: MESSAGE_HEAD_CLASS, children: [
2228
2224
  isTechnician && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2229
- _chunkKA3L6D5Ncjs.SquareAvatar,
2225
+ _chunkYSXVRTGTcjs.SquareAvatar,
2230
2226
  {
2231
2227
  loading,
2232
2228
  variant: "round",
@@ -2245,7 +2241,7 @@ function RemoteDesktopChatMessageRow({
2245
2241
  ),
2246
2242
  loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPMUCEUFQcjs.TextLineSkeleton, { type: "h6", as: "span", className: "w-12 shrink-0" }) : (
2247
2243
  // The time is in the viewer's zone, which a server render cannot know.
2248
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { suppressHydrationWarning: true, className: "shrink-0 text-ods-text-secondary text-h6", children: _chunk63ZV3UGGcjs.formatTime.call(void 0, sentAt) })
2244
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { suppressHydrationWarning: true, className: "shrink-0 text-ods-text-secondary text-h6", children: _chunk65NMKAPQcjs.formatTime.call(void 0, sentAt) })
2249
2245
  )
2250
2246
  ] }),
2251
2247
  loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPMUCEUFQcjs.TextLineSkeleton, { type: "h4", className: "w-3/4" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "whitespace-pre-wrap text-ods-text-primary text-h4", children: body })
@@ -2311,7 +2307,7 @@ function RemoteDesktopChatPanel({
2311
2307
  message.id
2312
2308
  )) }) }),
2313
2309
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2314
- _chunk63ZV3UGGcjs.ChatInput,
2310
+ _chunk65NMKAPQcjs.ChatInput,
2315
2311
  {
2316
2312
  placeholder: "Enter your Message...",
2317
2313
  onSend,
@@ -2654,9 +2650,9 @@ function KeepRecordingModal({
2654
2650
  if (!canKeep || isPending) return;
2655
2651
  onConfirm({ reason, description: reason === "OTHER" ? trimmed : null });
2656
2652
  };
2657
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk63ZV3UGGcjs.Modal, { isOpen, onClose: isPending ? () => {
2653
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk65NMKAPQcjs.Modal, { isOpen, onClose: isPending ? () => {
2658
2654
  } : onClose, className: "text-left md:max-w-[600px]", children: [
2659
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk63ZV3UGGcjs.ModalHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk63ZV3UGGcjs.ModalTitle, { children: "Keep this recording" }) }),
2655
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk65NMKAPQcjs.ModalHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk65NMKAPQcjs.ModalTitle, { children: "Keep this recording" }) }),
2660
2656
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
2661
2657
  KeepNotice,
2662
2658
  {
@@ -2694,7 +2690,7 @@ function KeepRecordingModal({
2694
2690
  }
2695
2691
  )
2696
2692
  ] }),
2697
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk63ZV3UGGcjs.ModalFooter, { children: [
2693
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk65NMKAPQcjs.ModalFooter, { children: [
2698
2694
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { type: "button", variant: "outline", onClick: onClose, disabled: isPending, className: "flex-1 md:hidden", children: "Cancel" }),
2699
2695
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "hidden flex-1 md:block" }),
2700
2696
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -2724,9 +2720,9 @@ function ReleaseKeepingModal({
2724
2720
  isPending = false,
2725
2721
  onConfirm
2726
2722
  }) {
2727
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk63ZV3UGGcjs.Modal, { isOpen, onClose: isPending ? () => {
2723
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk65NMKAPQcjs.Modal, { isOpen, onClose: isPending ? () => {
2728
2724
  } : onClose, className: "text-left md:max-w-[600px]", children: [
2729
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk63ZV3UGGcjs.ModalHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk63ZV3UGGcjs.ModalTitle, { children: "Release Keeping" }) }),
2725
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk65NMKAPQcjs.ModalHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk65NMKAPQcjs.ModalTitle, { children: "Release Keeping" }) }),
2730
2726
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-[var(--spacing-system-xsf)] break-words text-ods-text-primary text-h4", children: [
2731
2727
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { children: [
2732
2728
  "Kept by ",
@@ -2743,7 +2739,7 @@ function ReleaseKeepingModal({
2743
2739
  ] })
2744
2740
  ] }),
2745
2741
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, KeepNotice, { icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkILWSAV64cjs.HourglassIcon, { size: 24, color: "currentColor" }), title: `It will expire on ${expiresOn}`, children: dueOn ? `It was due to expire on ${dueOn}. Releasing gives it 3 days' grace, and it shows amber until then. Whoever placed the Keep is reminded the day before it goes. Nothing is deleted now.` : "Nothing is deleted now." }),
2746
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk63ZV3UGGcjs.ModalFooter, { children: [
2742
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk65NMKAPQcjs.ModalFooter, { children: [
2747
2743
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { type: "button", variant: "outline", onClick: onClose, disabled: isPending, className: "flex-1 md:hidden", children: "Cancel" }),
2748
2744
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "hidden flex-1 md:block" }),
2749
2745
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { type: "button", variant: "accent", onClick: onConfirm, loading: isPending, className: "flex-1", children: "Release Keeping" })
@@ -2785,9 +2781,9 @@ function AssignTicketModal({
2785
2781
  if (ticketIds.length === 0 || isPending) return;
2786
2782
  onConfirm(ticketIds);
2787
2783
  };
2788
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk63ZV3UGGcjs.Modal, { isOpen, onClose: isPending ? () => {
2784
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk65NMKAPQcjs.Modal, { isOpen, onClose: isPending ? () => {
2789
2785
  } : onClose, className: "text-left md:max-w-[600px]", children: [
2790
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk63ZV3UGGcjs.ModalHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk63ZV3UGGcjs.ModalTitle, { children: "Assign Ticket" }) }),
2786
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk65NMKAPQcjs.ModalHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk65NMKAPQcjs.ModalTitle, { children: "Assign Ticket" }) }),
2791
2787
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2792
2788
  Autocomplete,
2793
2789
  {
@@ -2806,7 +2802,7 @@ function AssignTicketModal({
2806
2802
  disabled: isPending
2807
2803
  }
2808
2804
  ),
2809
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk63ZV3UGGcjs.ModalFooter, { children: [
2805
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk65NMKAPQcjs.ModalFooter, { children: [
2810
2806
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { type: "button", variant: "outline", onClick: onClose, disabled: isPending, className: "flex-1 md:hidden", children: "Cancel" }),
2811
2807
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "hidden flex-1 md:block" }),
2812
2808
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -2825,11 +2821,11 @@ function AssignTicketModal({
2825
2821
  ] });
2826
2822
  }
2827
2823
  function UnassignTicketModal({ isOpen, onClose, isPending = false, onConfirm }) {
2828
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk63ZV3UGGcjs.Modal, { isOpen, onClose: isPending ? () => {
2824
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk65NMKAPQcjs.Modal, { isOpen, onClose: isPending ? () => {
2829
2825
  } : onClose, className: "text-left md:max-w-[600px]", children: [
2830
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk63ZV3UGGcjs.ModalHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk63ZV3UGGcjs.ModalTitle, { children: "Unassign Ticket" }) }),
2826
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk65NMKAPQcjs.ModalHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk65NMKAPQcjs.ModalTitle, { children: "Unassign Ticket" }) }),
2831
2827
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "w-full text-ods-text-primary text-h4", children: "This Ticket will no longer be linked to this remote session. The ticket itself stays as it is, and you can assign it again anytime." }),
2832
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk63ZV3UGGcjs.ModalFooter, { children: [
2828
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk65NMKAPQcjs.ModalFooter, { children: [
2833
2829
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { type: "button", variant: "outline", onClick: onClose, disabled: isPending, className: "flex-1 md:hidden", children: "Cancel" }),
2834
2830
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "hidden flex-1 md:block" }),
2835
2831
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFCZAUK4Dcjs.Button, { type: "button", variant: "destructive", onClick: onConfirm, loading: isPending, className: "flex-1", children: "Unassign" })
@@ -2910,7 +2906,7 @@ var STATUS_TAG = {
2910
2906
  function RemoteSessionStatusTag({ status, className }) {
2911
2907
  const { label, variant } = STATUS_TAG[status];
2912
2908
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2913
- _chunkKA3L6D5Ncjs.Tag,
2909
+ _chunkYSXVRTGTcjs.Tag,
2914
2910
  {
2915
2911
  label,
2916
2912
  variant,
@@ -921,6 +921,19 @@ var ICON_OPTIONS = [
921
921
  { key: "certified-01", label: "Certified" }
922
922
  ];
923
923
 
924
+ // src/hooks/use-image-fallback.ts
925
+
926
+ function useImageFallback(...candidates) {
927
+ const [failed, setFailed] = _react.useState.call(void 0, () => /* @__PURE__ */ new Set());
928
+ const src = _nullishCoalesce(candidates.find((candidate) => !!candidate && !failed.has(candidate)), () => ( null));
929
+ const onError = _react.useCallback.call(void 0, () => {
930
+ if (!src) return;
931
+ setFailed((prev) => new Set(prev).add(src));
932
+ }, [src]);
933
+ return { src, onError };
934
+ }
935
+
936
+
924
937
 
925
938
 
926
939
 
@@ -971,4 +984,4 @@ var ICON_OPTIONS = [
971
984
 
972
985
 
973
986
 
974
- exports.IMAGE_WIDTHS = IMAGE_WIDTHS; exports.IMAGE_FIXED_WIDTHS = IMAGE_FIXED_WIDTHS; exports.IMAGE_QUALITY = IMAGE_QUALITY; exports.IMAGE_MAX_WIDTH = IMAGE_MAX_WIDTH; exports.IMAGE_SLOT = IMAGE_SLOT; exports.IMAGE_FIXED_PX = IMAGE_FIXED_PX; exports.fixedImageSlot = fixedImageSlot; exports.IMAGE_FRAME = IMAGE_FRAME; exports.imageWidthFor = imageWidthFor; exports.iconOf = iconOf; exports.requireIcon = requireIcon; exports.NamedIcon = NamedIcon; exports.PlatformMark = PlatformMark; exports.platformDisplayNames = platformDisplayNames; exports.platformShortNames = platformShortNames; exports.platformDescriptions = platformDescriptions; exports.platformSlogans = platformSlogans; exports.getPlatformDisplayName = getPlatformDisplayName; exports.getPlatformShortName = getPlatformShortName; exports.getPlatformDescription = getPlatformDescription; exports.getPlatformSlogan = getPlatformSlogan; exports.ODS_STEM_TOKENS = ODS_STEM_TOKENS; exports.ODS_STEM_CLASSES = ODS_STEM_CLASSES; exports.PLATFORM_THEME = PLATFORM_THEME; exports.PLATFORM_SURFACE = PLATFORM_SURFACE; exports.getPlatformBackgroundVarName = getPlatformBackgroundVarName; exports.getPlatformTextVarName = getPlatformTextVarName; exports.PLATFORM_BRAND = PLATFORM_BRAND; exports.getPlatformBrand = getPlatformBrand; exports.platformAccentToken = platformAccentToken; exports.platformSecondaryToken = platformSecondaryToken; exports.platformAccentVarName = platformAccentVarName; exports.platformSecondaryVarName = platformSecondaryVarName; exports.getPlatformAccentColor = getPlatformAccentColor; exports.getPlatformSecondaryColor = getPlatformSecondaryColor; exports.getPlatformBrandClasses = getPlatformBrandClasses; exports.platformColors = platformColors; exports.getPlatformColor = getPlatformColor; exports.platformHexColors = platformHexColors; exports.getDefaultColorForPlatform = getDefaultColorForPlatform; exports.ICON_REGISTRY = ICON_REGISTRY; exports.normalizeIconKey = normalizeIconKey; exports.getIconComponent = getIconComponent; exports.getDynamicIcon = getDynamicIcon; exports.ICON_ALIASES = ICON_ALIASES; exports.brandLogoForName = brandLogoForName; exports.resolveIcon = resolveIcon; exports.findIcon = findIcon; exports.ICON_OPTIONS = ICON_OPTIONS;
987
+ exports.IMAGE_WIDTHS = IMAGE_WIDTHS; exports.IMAGE_FIXED_WIDTHS = IMAGE_FIXED_WIDTHS; exports.IMAGE_QUALITY = IMAGE_QUALITY; exports.IMAGE_MAX_WIDTH = IMAGE_MAX_WIDTH; exports.IMAGE_SLOT = IMAGE_SLOT; exports.IMAGE_FIXED_PX = IMAGE_FIXED_PX; exports.fixedImageSlot = fixedImageSlot; exports.IMAGE_FRAME = IMAGE_FRAME; exports.imageWidthFor = imageWidthFor; exports.iconOf = iconOf; exports.requireIcon = requireIcon; exports.NamedIcon = NamedIcon; exports.PlatformMark = PlatformMark; exports.platformDisplayNames = platformDisplayNames; exports.platformShortNames = platformShortNames; exports.platformDescriptions = platformDescriptions; exports.platformSlogans = platformSlogans; exports.getPlatformDisplayName = getPlatformDisplayName; exports.getPlatformShortName = getPlatformShortName; exports.getPlatformDescription = getPlatformDescription; exports.getPlatformSlogan = getPlatformSlogan; exports.ODS_STEM_TOKENS = ODS_STEM_TOKENS; exports.ODS_STEM_CLASSES = ODS_STEM_CLASSES; exports.PLATFORM_THEME = PLATFORM_THEME; exports.PLATFORM_SURFACE = PLATFORM_SURFACE; exports.getPlatformBackgroundVarName = getPlatformBackgroundVarName; exports.getPlatformTextVarName = getPlatformTextVarName; exports.PLATFORM_BRAND = PLATFORM_BRAND; exports.getPlatformBrand = getPlatformBrand; exports.platformAccentToken = platformAccentToken; exports.platformSecondaryToken = platformSecondaryToken; exports.platformAccentVarName = platformAccentVarName; exports.platformSecondaryVarName = platformSecondaryVarName; exports.getPlatformAccentColor = getPlatformAccentColor; exports.getPlatformSecondaryColor = getPlatformSecondaryColor; exports.getPlatformBrandClasses = getPlatformBrandClasses; exports.platformColors = platformColors; exports.getPlatformColor = getPlatformColor; exports.platformHexColors = platformHexColors; exports.getDefaultColorForPlatform = getDefaultColorForPlatform; exports.ICON_REGISTRY = ICON_REGISTRY; exports.normalizeIconKey = normalizeIconKey; exports.getIconComponent = getIconComponent; exports.getDynamicIcon = getDynamicIcon; exports.ICON_ALIASES = ICON_ALIASES; exports.brandLogoForName = brandLogoForName; exports.resolveIcon = resolveIcon; exports.findIcon = findIcon; exports.ICON_OPTIONS = ICON_OPTIONS; exports.useImageFallback = useImageFallback;