@flamingo-stack/openframe-frontend-core 0.0.716 → 0.0.718

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 (113) hide show
  1. package/dist/chat-protocol/index.cjs +23 -14
  2. package/dist/chat-protocol/index.js +23 -14
  3. package/dist/chat-protocol/nats-decoder.d.ts.map +1 -1
  4. package/dist/chat-protocol/source-metadata.d.ts +11 -2
  5. package/dist/chat-protocol/source-metadata.d.ts.map +1 -1
  6. package/dist/{chunk-DPX6244M.js → chunk-45F7PXUI.js} +3 -3
  7. package/dist/{chunk-KYFNFRSV.js → chunk-67QBMN4R.js} +2 -2
  8. package/dist/{chunk-3RKBJT6K.cjs → chunk-6A43ZDWV.cjs} +2 -2
  9. package/dist/chunk-A6P6DHEZ.cjs +130 -0
  10. package/dist/{chunk-KNOZVVCU.cjs → chunk-BOTM373R.cjs} +9 -9
  11. package/dist/{chunk-DHMO5GI4.cjs → chunk-BWIN42ZA.cjs} +21 -21
  12. package/dist/{chunk-YTMV4OBY.js → chunk-DCD5WZUF.js} +4 -4
  13. package/dist/{chunk-V36WGIYR.js → chunk-DEZDMTBM.js} +5 -5
  14. package/dist/{chunk-YO5JB3WE.cjs → chunk-DXCBOZVT.cjs} +35 -35
  15. package/dist/{chunk-ZX7SCPLO.cjs → chunk-E7YCPY7K.cjs} +3 -3
  16. package/dist/{chunk-I5F2OTFE.cjs → chunk-EZC2F5OT.cjs} +33 -33
  17. package/dist/{chunk-DLEO53NX.cjs → chunk-GN4A7PMB.cjs} +69 -69
  18. package/dist/{chunk-6T3BTD6Q.js → chunk-IWCPXJEE.js} +201 -327
  19. package/dist/{chunk-ROBQ5TR7.js → chunk-JH2SIWPQ.js} +28 -17
  20. package/dist/{chunk-3AJIQPFG.js → chunk-JIWMBIVZ.js} +6 -6
  21. package/dist/{chunk-DDWFCWOE.js → chunk-JPD4NXH6.js} +1 -1
  22. package/dist/{chunk-JVCAK4W3.cjs → chunk-LE5WKGJV.cjs} +3 -3
  23. package/dist/{chunk-NPAQSMRY.js → chunk-LOYPRJWA.js} +1053 -357
  24. package/dist/{chunk-5IJXM3RU.cjs → chunk-MIQLUUVF.cjs} +10 -10
  25. package/dist/{chunk-MXPQMQI3.js → chunk-MM7MCIXL.js} +6 -6
  26. package/dist/{chunk-C5AGSZBT.js → chunk-N2PF5CFX.js} +4837 -5425
  27. package/dist/{chunk-STCJYO2Z.cjs → chunk-NDZ5ZXOQ.cjs} +11 -11
  28. package/dist/{chunk-H5R7U2D2.js → chunk-NZ5BHDFZ.js} +1 -1
  29. package/dist/{chunk-JCA5MBVY.js → chunk-PQ6HBLZ7.js} +4 -4
  30. package/dist/{chunk-EOKSKJSS.cjs → chunk-QBCDSTLE.cjs} +13 -13
  31. package/dist/{chunk-NQWJAOHO.js → chunk-QXZCLQNV.js} +1 -1
  32. package/dist/{chunk-2V7D5GJX.cjs → chunk-S2FUFMLW.cjs} +25 -25
  33. package/dist/{chunk-64F6OEEV.js → chunk-SGFTTJKO.js} +1 -1
  34. package/dist/{chunk-P7IL4CX3.js → chunk-TBCZCRQ5.js} +6 -6
  35. package/dist/{chunk-HETQETPV.cjs → chunk-UWQWMGJ7.cjs} +28 -17
  36. package/dist/{chunk-X2MNNV5H.cjs → chunk-WALCXC7J.cjs} +3 -3
  37. package/dist/{chunk-YBS5QGON.js → chunk-XGHGGBM3.js} +2 -2
  38. package/dist/{chunk-NKILEG3Y.cjs → chunk-YC5COB5V.cjs} +45 -45
  39. package/dist/{chunk-BVZ7W4HW.js → chunk-YEMCCYIF.js} +4 -4
  40. package/dist/chunk-YYYVS7CX.js +130 -0
  41. package/dist/{chunk-S2VWQX6T.cjs → chunk-Z3CVSPO3.cjs} +842 -1430
  42. package/dist/{chunk-PPXR22YC.cjs → chunk-Z5UWW3Z2.cjs} +707 -11
  43. package/dist/{chunk-JO5TLJPM.cjs → chunk-ZXCZYMN4.cjs} +37 -163
  44. package/dist/{cloud-tenants-2J7CPTKT.cjs → cloud-tenants-PFDF7O5U.cjs} +6 -5
  45. package/dist/{cloud-tenants-YOY2WLGC.js → cloud-tenants-TAKOWXLD.js} +5 -4
  46. package/dist/components/case-studies/index.cjs +17 -16
  47. package/dist/components/case-studies/index.js +6 -5
  48. package/dist/components/chat/index.cjs +2 -2
  49. package/dist/components/chat/index.js +1 -1
  50. package/dist/components/chat/types/message.types.d.ts +20 -16
  51. package/dist/components/chat/types/message.types.d.ts.map +1 -1
  52. package/dist/components/chat/types/unified-chat-state.types.d.ts +1 -1
  53. package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
  54. package/dist/components/contact/index.cjs +7 -6
  55. package/dist/components/contact/index.js +6 -5
  56. package/dist/components/docs/index.cjs +10 -9
  57. package/dist/components/docs/index.js +9 -8
  58. package/dist/components/embeds/index.cjs +7 -6
  59. package/dist/components/embeds/index.js +6 -5
  60. package/dist/components/faq/index.cjs +7 -6
  61. package/dist/components/faq/index.js +6 -5
  62. package/dist/components/features/index.cjs +10 -5
  63. package/dist/components/features/index.js +9 -4
  64. package/dist/components/features/remote-session/index.d.ts +2 -0
  65. package/dist/components/features/remote-session/index.d.ts.map +1 -1
  66. package/dist/components/features/remote-session/remote-session-keep-modals.d.ts +3 -3
  67. package/dist/components/features/remote-session/remote-session-keep-modals.d.ts.map +1 -1
  68. package/dist/components/features/remote-session/remote-session-ticket-modals.d.ts +29 -0
  69. package/dist/components/features/remote-session/remote-session-ticket-modals.d.ts.map +1 -0
  70. package/dist/components/help-center-pages/index.cjs +71 -70
  71. package/dist/components/help-center-pages/index.js +17 -16
  72. package/dist/components/index.cjs +44 -39
  73. package/dist/components/index.js +22 -17
  74. package/dist/components/meeting-scheduler/index.cjs +33 -32
  75. package/dist/components/meeting-scheduler/index.js +5 -4
  76. package/dist/components/navigation/index.cjs +9 -8
  77. package/dist/components/navigation/index.js +8 -7
  78. package/dist/components/onboarding-guides/index.cjs +9 -8
  79. package/dist/components/onboarding-guides/index.js +8 -7
  80. package/dist/components/product-demo/index.cjs +7 -7
  81. package/dist/components/product-demo/index.js +7 -7
  82. package/dist/components/tickets/index.cjs +10 -9
  83. package/dist/components/tickets/index.js +9 -8
  84. package/dist/components/ui/autocomplete.d.ts +6 -0
  85. package/dist/components/ui/autocomplete.d.ts.map +1 -1
  86. package/dist/components/ui/index.cjs +8 -7
  87. package/dist/components/ui/index.js +7 -6
  88. package/dist/{devices-5NADSKDZ.cjs → devices-KRCGZMGA.cjs} +7 -6
  89. package/dist/{devices-EQXXILXW.js → devices-LHEX7O5T.js} +5 -4
  90. package/dist/hooks/index.cjs +6 -4
  91. package/dist/hooks/index.js +5 -3
  92. package/dist/index.cjs +17 -11
  93. package/dist/index.js +18 -12
  94. package/dist/{knowledge-LHQYZJE7.cjs → knowledge-KLVPVEYZ.cjs} +7 -6
  95. package/dist/{knowledge-YCQITBJB.js → knowledge-RZSFNR33.js} +5 -4
  96. package/dist/{logs-LZNXGOSW.js → logs-E5DOV5JO.js} +5 -4
  97. package/dist/{logs-DUVKSQU3.cjs → logs-OX3XTVL2.cjs} +14 -13
  98. package/dist/{policies-5H74FS4S.cjs → policies-FOSCIZGK.cjs} +10 -9
  99. package/dist/{policies-VYWOJ7IF.js → policies-MC2S4S5G.js} +5 -4
  100. package/dist/{remote-session-R6VAFESR.cjs → remote-session-DRFE5XZE.cjs} +4 -3
  101. package/dist/{remote-session-GSGZOFDX.js → remote-session-JQ2BPIE3.js} +2 -1
  102. package/dist/{software-update-MSDY3OLX.js → software-update-D4OEIH65.js} +7 -5
  103. package/dist/{software-update-VRRX5U4W.cjs → software-update-HOBSTWVO.cjs} +12 -10
  104. package/package.json +1 -1
  105. package/src/chat-protocol/nats-decoder.ts +10 -8
  106. package/src/chat-protocol/source-metadata.ts +25 -2
  107. package/src/components/chat/types/message.types.ts +21 -15
  108. package/src/components/chat/types/unified-chat-state.types.ts +1 -1
  109. package/src/components/chat/utils/process-historical-messages.ts +12 -4
  110. package/src/components/features/remote-session/index.ts +2 -0
  111. package/src/components/features/remote-session/remote-session-keep-modals.tsx +4 -4
  112. package/src/components/features/remote-session/remote-session-ticket-modals.tsx +140 -0
  113. package/src/components/ui/autocomplete.tsx +18 -4
@@ -5,13 +5,13 @@ var _chunkHWVUR735cjs = require('./chunk-HWVUR735.cjs');
5
5
 
6
6
 
7
7
 
8
- var _chunkSTCJYO2Zcjs = require('./chunk-STCJYO2Z.cjs');
8
+ var _chunkNDZ5ZXOQcjs = require('./chunk-NDZ5ZXOQ.cjs');
9
9
 
10
10
 
11
11
  var _chunkMA4Q5RBPcjs = require('./chunk-MA4Q5RBP.cjs');
12
12
 
13
13
 
14
- var _chunk3RKBJT6Kcjs = require('./chunk-3RKBJT6K.cjs');
14
+ var _chunk6A43ZDWVcjs = require('./chunk-6A43ZDWV.cjs');
15
15
 
16
16
 
17
17
  var _chunkGEDY7HQIcjs = require('./chunk-GEDY7HQI.cjs');
@@ -26,14 +26,14 @@ var _chunkGEDY7HQIcjs = require('./chunk-GEDY7HQI.cjs');
26
26
 
27
27
 
28
28
 
29
- var _chunkS2VWQX6Tcjs = require('./chunk-S2VWQX6T.cjs');
29
+ var _chunkZ3CVSPO3cjs = require('./chunk-Z3CVSPO3.cjs');
30
30
 
31
31
 
32
- var _chunkPPXR22YCcjs = require('./chunk-PPXR22YC.cjs');
32
+ var _chunkZ5UWW3Z2cjs = require('./chunk-Z5UWW3Z2.cjs');
33
33
 
34
34
 
35
35
 
36
- var _chunkJO5TLJPMcjs = require('./chunk-JO5TLJPM.cjs');
36
+ var _chunkZXCZYMN4cjs = require('./chunk-ZXCZYMN4.cjs');
37
37
 
38
38
 
39
39
  var _chunkAUMKE74Mcjs = require('./chunk-AUMKE74M.cjs');
@@ -45,7 +45,7 @@ var _chunkAUMKE74Mcjs = require('./chunk-AUMKE74M.cjs');
45
45
 
46
46
 
47
47
 
48
- var _chunkHETQETPVcjs = require('./chunk-HETQETPV.cjs');
48
+ var _chunkUWQWMGJ7cjs = require('./chunk-UWQWMGJ7.cjs');
49
49
 
50
50
 
51
51
  var _chunkGQ7JJUITcjs = require('./chunk-GQ7JJUIT.cjs');
@@ -96,8 +96,8 @@ var _chunk3ATAYP36cjs = require('./chunk-3ATAYP36.cjs');
96
96
  // src/components/shared/product-release/product-releases-view.tsx
97
97
  var _jsxruntime = require('react/jsx-runtime');
98
98
  var DEFAULT_ENDPOINT = "/api/releases";
99
- var DEFAULT_SEARCH_PARAM_KEY = _chunkHETQETPVcjs.DEV_SECTION_PARAM_KEYS.search;
100
- var DEFAULT_STATUS_PARAM_KEY = _chunkHETQETPVcjs.DEV_SECTION_PARAM_KEYS.releaseStatus;
99
+ var DEFAULT_SEARCH_PARAM_KEY = _chunkUWQWMGJ7cjs.DEV_SECTION_PARAM_KEYS.search;
100
+ var DEFAULT_STATUS_PARAM_KEY = _chunkUWQWMGJ7cjs.DEV_SECTION_PARAM_KEYS.releaseStatus;
101
101
  var DEFAULT_PAGE_PARAM_KEY = "page";
102
102
  function ReleaseRow({
103
103
  release,
@@ -106,7 +106,7 @@ function ReleaseRow({
106
106
  }) {
107
107
  const runtime = _chunkUJ7AXHRZcjs.useChatRuntime.call(void 0, );
108
108
  const router = _chunk7DNL734Scjs.useRouter.call(void 0, );
109
- const cta = _chunkHETQETPVcjs.resolveContentHref.call(void 0, _optionalChain([runtime, 'optionalAccess', _2 => _2.composeContentUrl]), {
109
+ const cta = _chunkUWQWMGJ7cjs.resolveContentHref.call(void 0, _optionalChain([runtime, 'optionalAccess', _2 => _2.composeContentUrl]), {
110
110
  type: "product_release",
111
111
  slug: release.slug,
112
112
  basePath,
@@ -114,9 +114,9 @@ function ReleaseRow({
114
114
  });
115
115
  const { target, rel } = _chunkETYLOZOBcjs.useEntityCardLink.call(void 0, { href: cta.href, targetPlatform: cta.targetPlatform });
116
116
  const onClick = (e) => {
117
- if (e.defaultPrevented || _chunkHETQETPVcjs.isModifierClick.call(void 0, e) || target === "_blank") return;
117
+ if (e.defaultPrevented || _chunkUWQWMGJ7cjs.isModifierClick.call(void 0, e) || target === "_blank") return;
118
118
  e.preventDefault();
119
- _chunkHETQETPVcjs.executeNavigationImperative.call(void 0, {
119
+ _chunkUWQWMGJ7cjs.executeNavigationImperative.call(void 0, {
120
120
  runtime,
121
121
  href: cta.href,
122
122
  targetPlatform: cta.targetPlatform,
@@ -178,10 +178,10 @@ function ProductReleasesView({
178
178
  router.replace(`${pathname}?${params.toString()}`, { scroll: false });
179
179
  };
180
180
  if (error) {
181
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "w-full", className), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS2VWQX6Tcjs.LoadError, { message: "Failed to load releases.", onRetry: reload }) });
181
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "w-full", className), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZ3CVSPO3cjs.LoadError, { message: "Failed to load releases.", onRetry: reload }) });
182
182
  }
183
183
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex w-full flex-col gap-[40px]", className), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-h-[600px]", children: showEmpty ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-[600px] items-center justify-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
184
- _chunkSTCJYO2Zcjs.ListEmptyState,
184
+ _chunkNDZ5ZXOQcjs.ListEmptyState,
185
185
  {
186
186
  isFiltered: hasActiveFilters,
187
187
  filtered: {
@@ -276,7 +276,7 @@ function MediaGalleryStrip({ items, className }) {
276
276
  var _lucidereact = require('lucide-react');
277
277
 
278
278
 
279
- var DefaultMarkdownRenderer = _chunkS2VWQX6Tcjs.RichMarkdownRenderer;
279
+ var DefaultMarkdownRenderer = _chunkZ3CVSPO3cjs.RichMarkdownRenderer;
280
280
  var DEFAULT_ENDPOINT2 = "/api/releases";
281
281
  function ReleaseDetailPage({
282
282
  authorHref,
@@ -294,8 +294,8 @@ function ReleaseDetailPage({
294
294
  shell = true
295
295
  }) {
296
296
  const router = _chunk7DNL734Scjs.useRouter.call(void 0, );
297
- const captions = _chunkHETQETPVcjs.useCaptions.call(void 0, );
298
- const renderShell = (node) => shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS2VWQX6Tcjs.PageShell, { children: node }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: node });
297
+ const captions = _chunkUWQWMGJ7cjs.useCaptions.call(void 0, );
298
+ const renderShell = (node) => shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZ3CVSPO3cjs.PageShell, { children: node }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: node });
299
299
  const seed = initialData == null ? void 0 : initialData;
300
300
  const {
301
301
  data: release,
@@ -354,7 +354,7 @@ function ReleaseDetailPage({
354
354
  return renderShell(
355
355
  // Match the loaded page's top offset (TitleBlock's
356
356
  // `pt-[var(--spacing-system-l)]`) so content doesn't jump on load.
357
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "pt-[var(--spacing-system-l)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3RKBJT6Kcjs.DetailPageSkeleton, { bare: true, metadataColumns: 4, showImageGallery: true }) })
357
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "pt-[var(--spacing-system-l)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6A43ZDWVcjs.DetailPageSkeleton, { bare: true, metadataColumns: 4, showImageGallery: true }) })
358
358
  );
359
359
  }
360
360
  if (error || !release) {
@@ -393,7 +393,7 @@ function ReleaseDetailPage({
393
393
  const improvements = release.improvements;
394
394
  return renderShell(
395
395
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
396
- _chunkPPXR22YCcjs.PageLayout,
396
+ _chunkZ5UWW3Z2cjs.PageLayout,
397
397
  {
398
398
  title: releaseTitle,
399
399
  subtitle: `Version: ${releaseVersion}`,
@@ -402,7 +402,7 @@ function ReleaseDetailPage({
402
402
  backButton: showBackButton ? { label: backLabel, onClick: () => router.push(backHref) } : void 0,
403
403
  children: [
404
404
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-6 content-md:space-y-8", children: [
405
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS2VWQX6Tcjs.EntityTagBadges, { tags: release.product_release_tags }),
405
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZ3CVSPO3cjs.EntityTagBadges, { tags: release.product_release_tags }),
406
406
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid w-full grid-cols-1 overflow-hidden rounded-md border border-ods-border content-md:grid-cols-4", children: [
407
407
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-col gap-3 border-b border-ods-border bg-ods-card p-4 content-md:border-b-0 content-md:border-r", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-0", children: [
408
408
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-primary text-h4", children: releaseType.toLocaleUpperCase() }),
@@ -473,7 +473,7 @@ function ReleaseDetailPage({
473
473
  ] })
474
474
  ] }) }) }),
475
475
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
476
- _chunkS2VWQX6Tcjs.ReleaseChangelogSection,
476
+ _chunkZ3CVSPO3cjs.ReleaseChangelogSection,
477
477
  {
478
478
  title: "Breaking Changes",
479
479
  entries: breakingChanges || [],
@@ -484,7 +484,7 @@ function ReleaseDetailPage({
484
484
  }
485
485
  ),
486
486
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
487
- _chunkS2VWQX6Tcjs.ReleaseChangelogSection,
487
+ _chunkZ3CVSPO3cjs.ReleaseChangelogSection,
488
488
  {
489
489
  title: "Features Added",
490
490
  entries: featuresAdded || [],
@@ -494,7 +494,7 @@ function ReleaseDetailPage({
494
494
  }
495
495
  ),
496
496
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
497
- _chunkS2VWQX6Tcjs.ReleaseChangelogSection,
497
+ _chunkZ3CVSPO3cjs.ReleaseChangelogSection,
498
498
  {
499
499
  title: "Bugs Fixed",
500
500
  entries: bugFixed || [],
@@ -504,7 +504,7 @@ function ReleaseDetailPage({
504
504
  }
505
505
  ),
506
506
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
507
- _chunkS2VWQX6Tcjs.ReleaseChangelogSection,
507
+ _chunkZ3CVSPO3cjs.ReleaseChangelogSection,
508
508
  {
509
509
  title: "Improvements",
510
510
  entries: improvements || [],
@@ -530,7 +530,7 @@ function ReleaseDetailPage({
530
530
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "tracking-[-0.28px] text-ods-text-secondary text-h5", children: "Related Enhancements and Bug-fixes" }),
531
531
  (() => {
532
532
  const deliveryCount = deliveryData ? deliveryData.completed.length + deliveryData.inProgress.length : 0;
533
- return deliveryLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DeliverySection, { data: deliveryData, isLoading: deliveryLoading }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS2VWQX6Tcjs.FadePreview, { hiddenCount: deliveryCount - 1, collapsedHeight: 300, resetKey: deliveryCount, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "space-y-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DeliverySection, { data: deliveryData, isLoading: false }) }) });
533
+ return deliveryLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DeliverySection, { data: deliveryData, isLoading: deliveryLoading }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZ3CVSPO3cjs.FadePreview, { hiddenCount: deliveryCount - 1, collapsedHeight: 300, resetKey: deliveryCount, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "space-y-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DeliverySection, { data: deliveryData, isLoading: false }) }) });
534
534
  })()
535
535
  ] }),
536
536
  (_optionalChain([githubReleases, 'optionalAccess', _10 => _10.length]) || _optionalChain([knowledgeBaseLinks, 'optionalAccess', _11 => _11.length]) || migrationGuideUrl || documentationUrl) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "w-full space-y-1", children: [
@@ -609,7 +609,7 @@ function ReleaseDetailPage({
609
609
  // src/components/shared/product-release/release-detail-skeleton.tsx
610
610
 
611
611
  function ReleaseDetailSkeleton() {
612
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3RKBJT6Kcjs.DetailPageSkeleton, { metadataColumns: 4, showImageGallery: true });
612
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6A43ZDWVcjs.DetailPageSkeleton, { metadataColumns: 4, showImageGallery: true });
613
613
  }
614
614
 
615
615
  // src/components/shared/roadmap/use-roadmap-voting.ts
@@ -629,10 +629,10 @@ function readStoredVotes(storageKey) {
629
629
  function useRoadmapVoting(options = {}) {
630
630
  const voteApiEndpoint = _nullishCoalesce(options.voteApiEndpoint, () => ( DEFAULT_VOTE_ENDPOINT));
631
631
  const storageKey = _nullishCoalesce(options.storageKey, () => ( DEFAULT_STORAGE_KEY));
632
- const { getSignals } = _chunkJO5TLJPMcjs.useHumanitySignals.call(void 0, );
632
+ const { getSignals } = _chunkZXCZYMN4cjs.useHumanitySignals.call(void 0, );
633
633
  const [votes, setVotes] = _react.useState.call(void 0, NO_VOTES);
634
634
  const [loadedKey, setLoadedKey] = _react.useState.call(void 0, null);
635
- const hydrated = _chunkHETQETPVcjs.useIsHydrated.call(void 0, );
635
+ const hydrated = _chunkUWQWMGJ7cjs.useIsHydrated.call(void 0, );
636
636
  if (hydrated && loadedKey !== storageKey) {
637
637
  setLoadedKey(storageKey);
638
638
  setVotes(readStoredVotes(storageKey));
@@ -784,7 +784,7 @@ function RoadmapGridSingle({
784
784
  _chunkETYLOZOBcjs.RoadmapCard,
785
785
  {
786
786
  item,
787
- id: _chunkHETQETPVcjs.devSectionAnchorId.call(void 0, "roadmap", item.id),
787
+ id: _chunkUWQWMGJ7cjs.devSectionAnchorId.call(void 0, "roadmap", item.id),
788
788
  userVote: getVote(item.id),
789
789
  onVote: (voteType) => onVote(item.id, voteType),
790
790
  isVoting: votingTasks.has(item.id)
@@ -900,7 +900,7 @@ function RoadmapGrid({
900
900
  );
901
901
  }
902
902
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
903
- _chunkS2VWQX6Tcjs.Accordion,
903
+ _chunkZ3CVSPO3cjs.Accordion,
904
904
  {
905
905
  type: "multiple",
906
906
  value: expandedQuarters,
@@ -910,13 +910,13 @@ function RoadmapGrid({
910
910
  const itemCount = _optionalChain([itemsByQuarter, 'access', _20 => _20[quarter], 'optionalAccess', _21 => _21.length]) || 0;
911
911
  const isExpanded = expandedQuarters.includes(quarter);
912
912
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
913
- _chunkS2VWQX6Tcjs.AccordionItem,
913
+ _chunkZ3CVSPO3cjs.AccordionItem,
914
914
  {
915
915
  value: quarter,
916
916
  id: `quarter-${quarter.replace(/\s+/g, "-").toLowerCase()}`,
917
917
  className: "border-0",
918
918
  children: [
919
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS2VWQX6Tcjs.AccordionTrigger, { className: "w-full p-0 hover:no-underline [&>svg]:ml-auto [&>svg]:h-5 [&>svg]:w-5 [&>svg]:shrink-0 [&>svg]:text-ods-text-secondary", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-3", children: [
919
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZ3CVSPO3cjs.AccordionTrigger, { className: "w-full p-0 hover:no-underline [&>svg]:ml-auto [&>svg]:h-5 [&>svg]:w-5 [&>svg]:shrink-0 [&>svg]:text-ods-text-secondary", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-3", children: [
920
920
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
921
921
  "h3",
922
922
  {
@@ -946,7 +946,7 @@ function RoadmapGrid({
946
946
  }
947
947
  )
948
948
  ] }) }),
949
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS2VWQX6Tcjs.AccordionContent, { className: "overflow-hidden pb-0 pt-4 data-[state=closed]:animate-none data-[state=open]:animate-none", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
949
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZ3CVSPO3cjs.AccordionContent, { className: "overflow-hidden pb-0 pt-4 data-[state=closed]:animate-none data-[state=open]:animate-none", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
950
950
  RoadmapGridSingle,
951
951
  {
952
952
  items: itemsByQuarter[quarter],
@@ -998,8 +998,8 @@ function RoadmapGridSkeleton({ count = 4, showLeftMargin = true }) {
998
998
 
999
999
 
1000
1000
  var DEFAULT_ENDPOINT3 = "/api/roadmap";
1001
- var DEFAULT_SEARCH_PARAM_KEY2 = _chunkHETQETPVcjs.DEV_SECTION_PARAM_KEYS.search;
1002
- var DEFAULT_STATUS_PARAM_KEY2 = _chunkHETQETPVcjs.DEV_SECTION_PARAM_KEYS.status;
1001
+ var DEFAULT_SEARCH_PARAM_KEY2 = _chunkUWQWMGJ7cjs.DEV_SECTION_PARAM_KEYS.search;
1002
+ var DEFAULT_STATUS_PARAM_KEY2 = _chunkUWQWMGJ7cjs.DEV_SECTION_PARAM_KEYS.status;
1003
1003
  function RoadmapView({
1004
1004
  endpoint = DEFAULT_ENDPOINT3,
1005
1005
  initialItems,
@@ -1020,9 +1020,9 @@ function RoadmapView({
1020
1020
  const initialData = _react.useMemo.call(void 0, () => initialItems ? { items: initialItems } : void 0, [initialItems]);
1021
1021
  const { data, setData, isLoading, error, reload } = _chunkGEDY7HQIcjs.useSelfFetch.call(void 0, url, { initialData });
1022
1022
  const items = _nullishCoalesce(_optionalChain([data, 'optionalAccess', _22 => _22.items]), () => ( []));
1023
- _chunkJO5TLJPMcjs.useScrollToHash.call(void 0, data, { headerOffset: _chunkGQ7JJUITcjs.STICKY_HEADER_OFFSET_PX });
1023
+ _chunkZXCZYMN4cjs.useScrollToHash.call(void 0, data, { headerOffset: _chunkGQ7JJUITcjs.STICKY_HEADER_OFFSET_PX });
1024
1024
  if (error) {
1025
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS2VWQX6Tcjs.LoadError, { message: "Failed to load roadmap.", onRetry: reload });
1025
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZ3CVSPO3cjs.LoadError, { message: "Failed to load roadmap.", onRetry: reload });
1026
1026
  }
1027
1027
  if (isLoading && !data) {
1028
1028
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, RoadmapGridSkeleton, { showLeftMargin });
@@ -1075,7 +1075,7 @@ function DeliveryTable({ items, isLoading = false }) {
1075
1075
  // → `#delivery-<external_id>`; `useScrollToHash` in
1076
1076
  // `delivery-lists.tsx` finds the row by id and scrolls. The
1077
1077
  // outer wrapper here ONLY exists for the row separators.
1078
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "border-b border-ods-border last:border-b-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSTCJYO2Zcjs.DeliveryRow, { item, id: _chunkHETQETPVcjs.devSectionAnchorId.call(void 0, "delivery", item.id) }) }, item.id)
1078
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "border-b border-ods-border last:border-b-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNDZ5ZXOQcjs.DeliveryRow, { item, id: _chunkUWQWMGJ7cjs.devSectionAnchorId.call(void 0, "delivery", item.id) }) }, item.id)
1079
1079
  )) }) });
1080
1080
  }
1081
1081
 
@@ -1084,8 +1084,8 @@ function DeliveryTable({ items, isLoading = false }) {
1084
1084
 
1085
1085
  var DEFAULT_COMPLETED_ENDPOINT = "/api/delivery/completed";
1086
1086
  var DEFAULT_IN_PROGRESS_ENDPOINT = "/api/delivery/in-progress";
1087
- var DEFAULT_SEARCH_PARAM_KEY3 = _chunkHETQETPVcjs.DEV_SECTION_PARAM_KEYS.search;
1088
- var DEFAULT_TASK_TYPE_PARAM_KEY = _chunkHETQETPVcjs.DEV_SECTION_PARAM_KEYS.deliveryTaskType;
1087
+ var DEFAULT_SEARCH_PARAM_KEY3 = _chunkUWQWMGJ7cjs.DEV_SECTION_PARAM_KEYS.search;
1088
+ var DEFAULT_TASK_TYPE_PARAM_KEY = _chunkUWQWMGJ7cjs.DEV_SECTION_PARAM_KEYS.deliveryTaskType;
1089
1089
  function DeliveryLists({
1090
1090
  completedApiEndpoint = DEFAULT_COMPLETED_ENDPOINT,
1091
1091
  inProgressApiEndpoint = DEFAULT_IN_PROGRESS_ENDPOINT,
@@ -1146,17 +1146,17 @@ function DeliveryLists({
1146
1146
  }, [searchQuery, taskTypeFilter, completedApiEndpoint, inProgressApiEndpoint, searchParamKey, taskTypeParamKey]);
1147
1147
  const filteredCompleted = _optionalChain([data, 'optionalAccess', _23 => _23.completed]) || [];
1148
1148
  const filteredInProgress = _optionalChain([data, 'optionalAccess', _24 => _24.inProgress]) || [];
1149
- _chunkJO5TLJPMcjs.useScrollToHash.call(void 0, data, { headerOffset: _chunkGQ7JJUITcjs.STICKY_HEADER_OFFSET_PX });
1149
+ _chunkZXCZYMN4cjs.useScrollToHash.call(void 0, data, { headerOffset: _chunkGQ7JJUITcjs.STICKY_HEADER_OFFSET_PX });
1150
1150
  const showCompleted = true;
1151
1151
  const showInProgress = true;
1152
1152
  const hasActiveFilters = searchQuery !== "" || taskTypeFilter !== "all";
1153
1153
  const hasResults = showCompleted && filteredCompleted.length > 0 || showInProgress && filteredInProgress.length > 0;
1154
1154
  if (error) {
1155
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS2VWQX6Tcjs.LoadError, { message: error, onRetry: () => window.location.reload() }) });
1155
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZ3CVSPO3cjs.LoadError, { message: error, onRetry: () => window.location.reload() }) });
1156
1156
  }
1157
1157
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-[40px]", children: [
1158
1158
  !isLoading && !hasResults && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1159
- _chunkSTCJYO2Zcjs.ListEmptyState,
1159
+ _chunkNDZ5ZXOQcjs.ListEmptyState,
1160
1160
  {
1161
1161
  isFiltered: hasActiveFilters,
1162
1162
  filtered: {
@@ -1310,7 +1310,7 @@ function LegalDocumentPage({
1310
1310
  initialData = null,
1311
1311
  initialLastUpdatedLabel = null,
1312
1312
  apiEndpoint,
1313
- MarkdownRenderer = _chunkS2VWQX6Tcjs.RichMarkdownRenderer,
1313
+ MarkdownRenderer = _chunkZ3CVSPO3cjs.RichMarkdownRenderer,
1314
1314
  backButton,
1315
1315
  shell = true
1316
1316
  }) {
@@ -1323,7 +1323,7 @@ function LegalDocumentPage({
1323
1323
  const fallbackLastUpdatedLabel = _optionalChain([data, 'optionalAccess', _27 => _27.lastSynced]) != null ? _chunkF5BPGWGTcjs.formatLegalDate.call(void 0, data.lastSynced) : null;
1324
1324
  const effectiveLastUpdatedLabel = _nullishCoalesce(initialLastUpdatedLabel, () => ( fallbackLastUpdatedLabel));
1325
1325
  const subtitle = effectiveLastUpdatedLabel ? `Last Updated: ${effectiveLastUpdatedLabel}` : fallbackDescription;
1326
- const inner = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkPPXR22YCcjs.PageLayout, { title, subtitle, backButton: backCfg, titleSize: "h1", titleWrap: true, children: [
1326
+ const inner = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkZ5UWW3Z2cjs.PageLayout, { title, subtitle, backButton: backCfg, titleSize: "h1", titleWrap: true, children: [
1327
1327
  _optionalChain([data, 'optionalAccess', _28 => _28.sourceFile]) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { className: "text-ods-text-secondary opacity-75 text-h6", children: [
1328
1328
  "Source: ",
1329
1329
  data.sourceFile
@@ -1363,7 +1363,7 @@ function LegalDocumentPage({
1363
1363
  ] })
1364
1364
  ] }) }) }) }) })
1365
1365
  ] });
1366
- return shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS2VWQX6Tcjs.PageShell, { children: inner }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: inner });
1366
+ return shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZ3CVSPO3cjs.PageShell, { children: inner }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: inner });
1367
1367
  }
1368
1368
 
1369
1369
 
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  useOptionalTicketLive
4
- } from "./chunk-DDWFCWOE.js";
4
+ } from "./chunk-JPD4NXH6.js";
5
5
  import {
6
6
  AppLayoutDrawerContainerContext,
7
7
  AppLayoutDrawerCoordinationContext,
@@ -12,13 +12,13 @@ import {
12
12
  UnreadCountBadge,
13
13
  UnreadDot,
14
14
  useOptionalNotifications
15
- } from "./chunk-C5AGSZBT.js";
15
+ } from "./chunk-N2PF5CFX.js";
16
16
  import {
17
17
  resolveActiveSection,
18
18
  useActiveSection,
19
19
  useFocusTrap,
20
20
  useNavMenus
21
- } from "./chunk-6T3BTD6Q.js";
21
+ } from "./chunk-IWCPXJEE.js";
22
22
  import {
23
23
  useLocalStorage
24
24
  } from "./chunk-3K5ZLZE7.js";
@@ -28,7 +28,7 @@ import {
28
28
  OVERLAY_BACKDROP_CLASS,
29
29
  buildTicketOpenHref,
30
30
  useIsHydrated
31
- } from "./chunk-ROBQ5TR7.js";
31
+ } from "./chunk-JH2SIWPQ.js";
32
32
  import {
33
33
  useHeaderHeight
34
34
  } from "./chunk-CMZ3QTFQ.js";
@@ -0,0 +1,130 @@
1
+ "use client";
2
+
3
+ // src/hooks/ui/use-auto-limit-tags.ts
4
+ import { useCallback, useEffect, useRef, useState } from "react";
5
+ function useAutoLimitTags({
6
+ count,
7
+ limitTags = "auto",
8
+ placeholder = "",
9
+ reserveInputWidth = true
10
+ }) {
11
+ const middleRef = useRef(null);
12
+ const measureRef = useRef(null);
13
+ const textMeasureRef = useRef(null);
14
+ const badgeRef = useRef(null);
15
+ const inputRef = useRef(null);
16
+ const [measuredCount, setMeasuredCount] = useState(null);
17
+ const recalculate = useCallback(() => {
18
+ const middle = middleRef.current;
19
+ const measure2 = measureRef.current;
20
+ if (!middle || !measure2) {
21
+ setMeasuredCount(null);
22
+ return;
23
+ }
24
+ if (count === 0) {
25
+ setMeasuredCount(0);
26
+ return;
27
+ }
28
+ const cs = getComputedStyle(middle);
29
+ const padL = parseFloat(cs.paddingLeft) || 0;
30
+ const padR = parseFloat(cs.paddingRight) || 0;
31
+ const gap = parseFloat(cs.gap) || 0;
32
+ const middleW = middle.clientWidth;
33
+ let inputReservedW = 0;
34
+ let trailingGap = 0;
35
+ if (reserveInputWidth) {
36
+ const textW = textMeasureRef.current?.offsetWidth ?? 60;
37
+ const inputMinW = inputRef.current ? parseFloat(getComputedStyle(inputRef.current).minWidth) || 60 : 60;
38
+ inputReservedW = Math.max(textW + 8, inputMinW);
39
+ trailingGap = gap;
40
+ }
41
+ const available = middleW - padL - padR - inputReservedW - trailingGap;
42
+ const tagEls = Array.from(measure2.children);
43
+ const widths = tagEls.map((el) => el.offsetWidth);
44
+ let total = 0;
45
+ for (let i = 0; i < widths.length; i++) {
46
+ total += widths[i] + (i > 0 ? gap : 0);
47
+ }
48
+ if (total <= available) {
49
+ setMeasuredCount(count);
50
+ return;
51
+ }
52
+ const badgeW = badgeRef.current?.offsetWidth ?? 40;
53
+ const spaceWithBadge = available - badgeW - gap;
54
+ let used = 0;
55
+ let fitCount = 0;
56
+ for (let i = 0; i < widths.length; i++) {
57
+ const need = widths[i] + (i > 0 ? gap : 0);
58
+ if (used + need > spaceWithBadge) break;
59
+ used += need;
60
+ fitCount++;
61
+ }
62
+ setMeasuredCount(Math.max(0, fitCount));
63
+ }, [count, placeholder, reserveInputWidth]);
64
+ useEffect(() => {
65
+ if (limitTags !== "auto") return void 0;
66
+ const el = middleRef.current;
67
+ if (!el) return void 0;
68
+ const ro = new ResizeObserver(recalculate);
69
+ ro.observe(el);
70
+ return () => ro.disconnect();
71
+ }, [recalculate, limitTags]);
72
+ const visibleCount = limitTags !== "auto" ? Math.min(limitTags, count) : measuredCount === null ? count : Math.min(measuredCount, count);
73
+ return { visibleCount, middleRef, measureRef, textMeasureRef, badgeRef, inputRef };
74
+ }
75
+
76
+ // src/hooks/ui/use-keyboard-collision-padding.ts
77
+ import { useSyncExternalStore } from "react";
78
+ var KEYBOARD_INSET_VAR = "--of-keyboard-inset";
79
+ function measure() {
80
+ if (typeof document === "undefined") return 0;
81
+ const inset = Number.parseFloat(getComputedStyle(document.documentElement).getPropertyValue(KEYBOARD_INSET_VAR));
82
+ if (!(inset > 0)) return 0;
83
+ const layoutHeight = document.documentElement.clientHeight;
84
+ const viewport = window.visualViewport;
85
+ const viewportBottom = viewport ? viewport.offsetTop + viewport.height : layoutHeight;
86
+ return Math.max(0, Math.round(viewportBottom - (layoutHeight - inset)));
87
+ }
88
+ var listeners = /* @__PURE__ */ new Set();
89
+ var padding = 0;
90
+ var teardown = null;
91
+ function sync() {
92
+ const next = measure();
93
+ if (next === padding) return;
94
+ padding = next;
95
+ for (const notify of listeners) notify();
96
+ }
97
+ function subscribe(onStoreChange) {
98
+ listeners.add(onStoreChange);
99
+ if (listeners.size === 1) {
100
+ padding = measure();
101
+ const observer = new MutationObserver(sync);
102
+ observer.observe(document.documentElement, { attributes: true, attributeFilter: ["style"] });
103
+ const viewport = window.visualViewport;
104
+ viewport?.addEventListener("resize", sync);
105
+ viewport?.addEventListener("scroll", sync);
106
+ teardown = () => {
107
+ observer.disconnect();
108
+ viewport?.removeEventListener("resize", sync);
109
+ viewport?.removeEventListener("scroll", sync);
110
+ };
111
+ }
112
+ return () => {
113
+ listeners.delete(onStoreChange);
114
+ if (listeners.size > 0) return;
115
+ teardown?.();
116
+ teardown = null;
117
+ };
118
+ }
119
+ function useKeyboardCollisionPadding() {
120
+ return useSyncExternalStore(
121
+ subscribe,
122
+ () => padding,
123
+ () => 0
124
+ );
125
+ }
126
+
127
+ export {
128
+ useAutoLimitTags,
129
+ useKeyboardCollisionPadding
130
+ };