@flamingo-stack/openframe-frontend-core 0.0.381 → 0.0.382

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 (91) hide show
  1. package/dist/{chunk-2AO6O7CU.js → chunk-23PZFAET.js} +4 -4
  2. package/dist/{chunk-D2Q43SCD.cjs → chunk-32YONDMH.cjs} +26 -26
  3. package/dist/{chunk-D2Q43SCD.cjs.map → chunk-32YONDMH.cjs.map} +1 -1
  4. package/dist/{chunk-3MOKIGOW.js → chunk-3GGIVFSI.js} +2 -2
  5. package/dist/{chunk-DL4YRO3S.js → chunk-4A4DA7OX.js} +2 -2
  6. package/dist/{chunk-ZSBALQJA.cjs → chunk-7IQK3Y3G.cjs} +25 -25
  7. package/dist/{chunk-ZSBALQJA.cjs.map → chunk-7IQK3Y3G.cjs.map} +1 -1
  8. package/dist/{chunk-AXUAW3HT.cjs → chunk-AS6FET7G.cjs} +15 -15
  9. package/dist/{chunk-AXUAW3HT.cjs.map → chunk-AS6FET7G.cjs.map} +1 -1
  10. package/dist/{chunk-YA2ZDROZ.js → chunk-DQJCWNRT.js} +2 -2
  11. package/dist/{chunk-GTBR4AZK.cjs → chunk-EE26RXMG.cjs} +12 -12
  12. package/dist/{chunk-GTBR4AZK.cjs.map → chunk-EE26RXMG.cjs.map} +1 -1
  13. package/dist/{chunk-POZPF4GF.js → chunk-GZ5N76H2.js} +4 -4
  14. package/dist/{chunk-OLXGKYNO.js → chunk-GZIHB6TH.js} +86 -97
  15. package/dist/{chunk-OLXGKYNO.js.map → chunk-GZIHB6TH.js.map} +1 -1
  16. package/dist/{chunk-XIW3H3MG.js → chunk-HDWY2SXF.js} +4 -4
  17. package/dist/{chunk-HJXKBLQ5.cjs → chunk-IENK6OY5.cjs} +5 -5
  18. package/dist/{chunk-HJXKBLQ5.cjs.map → chunk-IENK6OY5.cjs.map} +1 -1
  19. package/dist/{chunk-CICZZ4BP.cjs → chunk-JQT7PD6Z.cjs} +57 -57
  20. package/dist/{chunk-CICZZ4BP.cjs.map → chunk-JQT7PD6Z.cjs.map} +1 -1
  21. package/dist/{chunk-NZL5EBEC.js → chunk-K5P6XKIT.js} +2 -2
  22. package/dist/{chunk-SINYS4WL.cjs → chunk-L3DRZ2WE.cjs} +62 -62
  23. package/dist/{chunk-SINYS4WL.cjs.map → chunk-L3DRZ2WE.cjs.map} +1 -1
  24. package/dist/{chunk-WGZGZDXK.js → chunk-LIK575RM.js} +2 -2
  25. package/dist/{chunk-CUTFUKBD.js → chunk-LRA7FGQC.js} +4 -4
  26. package/dist/{chunk-GLHRSU5B.js → chunk-MGDDM2UI.js} +2 -2
  27. package/dist/{chunk-QHNE2BLP.js → chunk-PI3XFKEW.js} +2 -2
  28. package/dist/{chunk-OJECASVU.cjs → chunk-QI3PW4F7.cjs} +7 -7
  29. package/dist/{chunk-OJECASVU.cjs.map → chunk-QI3PW4F7.cjs.map} +1 -1
  30. package/dist/{chunk-3ETXMQL3.cjs → chunk-QQAHEWSR.cjs} +31 -31
  31. package/dist/{chunk-3ETXMQL3.cjs.map → chunk-QQAHEWSR.cjs.map} +1 -1
  32. package/dist/{chunk-J746ERW2.cjs → chunk-SZSBHBXE.cjs} +42 -53
  33. package/dist/chunk-SZSBHBXE.cjs.map +1 -0
  34. package/dist/{chunk-NMUZ6AHP.cjs → chunk-XHCRZDM6.cjs} +37 -37
  35. package/dist/{chunk-NMUZ6AHP.cjs.map → chunk-XHCRZDM6.cjs.map} +1 -1
  36. package/dist/{chunk-N546ZNOS.cjs → chunk-Z56MCQ6X.cjs} +9 -9
  37. package/dist/{chunk-N546ZNOS.cjs.map → chunk-Z56MCQ6X.cjs.map} +1 -1
  38. package/dist/components/case-studies/index.cjs +8 -8
  39. package/dist/components/case-studies/index.js +2 -2
  40. package/dist/components/chat/index.cjs +2 -2
  41. package/dist/components/chat/index.js +1 -1
  42. package/dist/components/contact/index.cjs +3 -3
  43. package/dist/components/contact/index.js +2 -2
  44. package/dist/components/docs/index.cjs +5 -5
  45. package/dist/components/docs/index.js +4 -4
  46. package/dist/components/embeds/index.cjs +3 -3
  47. package/dist/components/embeds/index.js +2 -2
  48. package/dist/components/faq/index.cjs +3 -3
  49. package/dist/components/faq/index.js +2 -2
  50. package/dist/components/features/auth/accept-invitation-form.d.ts +3 -9
  51. package/dist/components/features/auth/accept-invitation-form.d.ts.map +1 -1
  52. package/dist/components/features/auth/invite-link-invalid-modal.d.ts +3 -2
  53. package/dist/components/features/auth/invite-link-invalid-modal.d.ts.map +1 -1
  54. package/dist/components/features/auth/password-reset-form.d.ts +3 -1
  55. package/dist/components/features/auth/password-reset-form.d.ts.map +1 -1
  56. package/dist/components/features/index.cjs +2 -2
  57. package/dist/components/features/index.js +1 -1
  58. package/dist/components/help-center-pages/index.cjs +20 -20
  59. package/dist/components/help-center-pages/index.js +11 -11
  60. package/dist/components/index.cjs +120 -120
  61. package/dist/components/index.js +9 -9
  62. package/dist/components/navigation/index.cjs +2 -2
  63. package/dist/components/navigation/index.js +1 -1
  64. package/dist/components/onboarding-guides/index.cjs +5 -5
  65. package/dist/components/onboarding-guides/index.js +4 -4
  66. package/dist/components/related-content/index.cjs +3 -3
  67. package/dist/components/related-content/index.js +2 -2
  68. package/dist/components/tickets/index.cjs +5 -5
  69. package/dist/components/tickets/index.js +4 -4
  70. package/dist/components/ui/index.cjs +2 -2
  71. package/dist/components/ui/index.js +1 -1
  72. package/dist/index.cjs +2 -2
  73. package/dist/index.js +1 -1
  74. package/package.json +1 -1
  75. package/src/components/features/auth/accept-invitation-form.tsx +4 -26
  76. package/src/components/features/auth/invite-link-invalid-modal.tsx +6 -4
  77. package/src/components/features/auth/password-reset-form.tsx +7 -0
  78. package/src/stories/auth/AcceptInvitation.stories.tsx +4 -16
  79. package/src/stories/auth/PasswordReset.stories.tsx +1 -0
  80. package/dist/chunk-J746ERW2.cjs.map +0 -1
  81. /package/dist/{chunk-2AO6O7CU.js.map → chunk-23PZFAET.js.map} +0 -0
  82. /package/dist/{chunk-3MOKIGOW.js.map → chunk-3GGIVFSI.js.map} +0 -0
  83. /package/dist/{chunk-DL4YRO3S.js.map → chunk-4A4DA7OX.js.map} +0 -0
  84. /package/dist/{chunk-YA2ZDROZ.js.map → chunk-DQJCWNRT.js.map} +0 -0
  85. /package/dist/{chunk-POZPF4GF.js.map → chunk-GZ5N76H2.js.map} +0 -0
  86. /package/dist/{chunk-XIW3H3MG.js.map → chunk-HDWY2SXF.js.map} +0 -0
  87. /package/dist/{chunk-NZL5EBEC.js.map → chunk-K5P6XKIT.js.map} +0 -0
  88. /package/dist/{chunk-WGZGZDXK.js.map → chunk-LIK575RM.js.map} +0 -0
  89. /package/dist/{chunk-CUTFUKBD.js.map → chunk-LRA7FGQC.js.map} +0 -0
  90. /package/dist/{chunk-GLHRSU5B.js.map → chunk-MGDDM2UI.js.map} +0 -0
  91. /package/dist/{chunk-QHNE2BLP.js.map → chunk-PI3XFKEW.js.map} +0 -0
@@ -3,11 +3,11 @@ import {
3
3
  FileDownloadCard,
4
4
  GoogleSheetsViewer,
5
5
  PdfViewer
6
- } from "./chunk-YA2ZDROZ.js";
6
+ } from "./chunk-DQJCWNRT.js";
7
7
  import {
8
8
  DocSearchBar,
9
9
  useDocSearch
10
- } from "./chunk-WGZGZDXK.js";
10
+ } from "./chunk-LIK575RM.js";
11
11
  import {
12
12
  DEFAULT_FOLDER_INDEX_FILE,
13
13
  FigmaEmbed,
@@ -19,7 +19,7 @@ import {
19
19
  findDocNodeByPath,
20
20
  getDocAncestorNodeIds,
21
21
  stripFolderIndexFromPath
22
- } from "./chunk-OLXGKYNO.js";
22
+ } from "./chunk-GZIHB6TH.js";
23
23
  import {
24
24
  HUB_HEADER_OFFSET_PX,
25
25
  contentFetch,
@@ -1845,4 +1845,4 @@ export {
1845
1845
  EmbedSkeleton,
1846
1846
  DocsHubPage
1847
1847
  };
1848
- //# sourceMappingURL=chunk-XIW3H3MG.js.map
1848
+ //# sourceMappingURL=chunk-HDWY2SXF.js.map
@@ -3,7 +3,7 @@
3
3
 
4
4
 
5
5
 
6
- var _chunkJ746ERW2cjs = require('./chunk-J746ERW2.cjs');
6
+ var _chunkSZSBHBXEcjs = require('./chunk-SZSBHBXE.cjs');
7
7
 
8
8
 
9
9
  var _chunk3KEBI6TPcjs = require('./chunk-3KEBI6TP.cjs');
@@ -50,7 +50,7 @@ function DetailPageSkeleton({
50
50
  ] });
51
51
  if (bare) return content;
52
52
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
53
- _chunkJ746ERW2cjs.PageLayout,
53
+ _chunkSZSBHBXEcjs.PageLayout,
54
54
  {
55
55
  showHeader: false,
56
56
  className: "bg-ods-bg max-w-[1280px] mx-auto py-6 md:py-10 px-6 md:px-20",
@@ -88,7 +88,7 @@ function ArticleAuthorByline({
88
88
  }) {
89
89
  const runtime = _chunk3KEBI6TPcjs.useChatRuntime.call(void 0, );
90
90
  if (!author) return null;
91
- const proxiedAvatar = avatar ? proxyImageUrl ? proxyImageUrl(avatar) : _nullishCoalesce(_chunkJ746ERW2cjs.getProxiedImageUrl.call(void 0, avatar, {
91
+ const proxiedAvatar = avatar ? proxyImageUrl ? proxyImageUrl(avatar) : _nullishCoalesce(_chunkSZSBHBXEcjs.getProxiedImageUrl.call(void 0, avatar, {
92
92
  proxyPrefix: _optionalChain([runtime, 'optionalAccess', _2 => _2.endpoints, 'access', _3 => _3.imageProxyUrlPrefix]),
93
93
  skipDomains: _optionalChain([runtime, 'optionalAccess', _4 => _4.endpoints, 'access', _5 => _5.imageProxySkipDomains]),
94
94
  directHttps: true
@@ -96,7 +96,7 @@ function ArticleAuthorByline({
96
96
  const avatarSizeClass = size === "lg" ? "w-16 h-16" : "w-14 h-14";
97
97
  const avatarIconClass = size === "lg" ? "w-8 h-8" : "w-7 h-7";
98
98
  const avatarDim = size === "lg" ? 64 : 56;
99
- const formattedBio = _chunkJ746ERW2cjs.formatBioText.call(void 0, _nullishCoalesce(bio, () => ( null)));
99
+ const formattedBio = _chunkSZSBHBXEcjs.formatBioText.call(void 0, _nullishCoalesce(bio, () => ( null)));
100
100
  const dateLabel = publishedAt ? formatDate(publishedAt) : "";
101
101
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
102
102
  "div",
@@ -146,4 +146,4 @@ function ArticleAuthorByline({
146
146
 
147
147
 
148
148
  exports.DetailPageSkeleton = DetailPageSkeleton; exports.ArticleAuthorByline = ArticleAuthorByline;
149
- //# sourceMappingURL=chunk-HJXKBLQ5.cjs.map
149
+ //# sourceMappingURL=chunk-IENK6OY5.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-HJXKBLQ5.cjs","../src/components/shared/detail-page-skeleton.tsx","../src/components/shared/article-author-byline.tsx"],"names":["jsxs","jsx"],"mappings":"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","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-HJXKBLQ5.cjs","sourcesContent":[null,"\"use client\";\n\nimport { PageLayout } from '../layout/page-layout';\n\nexport interface DetailPageSkeletonProps {\n metadataColumns?: number; // Number of metadata grid columns (default 4)\n showImageGallery?: boolean; // Show horizontal image gallery (default true)\n /** Render only the skeleton blocks, WITHOUT the self-contained page wrapper\n * — the caller supplies its own (e.g. `<PageShell>`) so the loading state\n * matches the loaded page's width, padding, and min-height. Default false\n * (self-contained `<PageLayout>` at the hub article width). */\n bare?: boolean;\n}\n\nexport function DetailPageSkeleton({\n metadataColumns = 4,\n showImageGallery = true,\n bare = false\n}: DetailPageSkeletonProps = {}) {\n const content = (\n <div className=\"space-y-6 md:space-y-10 animate-pulse\">\n {/* Title Block */}\n <div className=\"flex flex-col gap-6 w-full\">\n <div className=\"h-16 md:h-20 w-full max-w-3xl bg-ods-card rounded\"></div>\n </div>\n\n {/* Category Tags Skeleton */}\n <div className=\"flex flex-wrap gap-2 w-full\">\n <div className=\"h-8 w-32 bg-ods-card rounded\"></div>\n <div className=\"h-8 w-28 bg-ods-card rounded\"></div>\n <div className=\"h-8 w-36 bg-ods-card rounded\"></div>\n </div>\n\n {/* Metadata Grid Skeleton */}\n <div className={`grid grid-cols-1 md:grid-cols-${metadataColumns} border border-ods-border rounded-md overflow-hidden w-full`}>\n {Array.from({ length: metadataColumns }).map((_, i) => (\n <div key={i} className=\"bg-ods-card border-b md:border-b-0 md:border-r last:border-r-0 border-ods-border p-4\">\n <div className=\"h-6 w-24 bg-ods-border rounded mb-2\"></div>\n <div className=\"h-5 w-20 bg-ods-border rounded\"></div>\n </div>\n ))}\n </div>\n\n {/* Image Gallery Skeleton */}\n {showImageGallery && (\n <div className=\"flex gap-6 overflow-x-auto w-full\">\n {[1, 2, 3, 4, 5].map((i) => (\n <div key={i} className=\"shrink-0 w-[240px] h-[200px] bg-ods-card rounded-md border border-ods-border\"></div>\n ))}\n </div>\n )}\n\n {/* Featured Image Skeleton (for case studies) */}\n {!showImageGallery && (\n <div className=\"aspect-[2560/1366] w-full bg-ods-card rounded-md\"></div>\n )}\n\n {/* Content Sections Skeleton */}\n {[1, 2, 3].map((section) => (\n <div key={section} className=\"space-y-6\">\n <div className=\"h-16 w-64 bg-ods-card rounded\"></div>\n <div className=\"space-y-3\">\n <div className=\"h-6 w-full bg-ods-card rounded\"></div>\n <div className=\"h-6 w-full bg-ods-card rounded\"></div>\n <div className=\"h-6 w-4/5 bg-ods-card rounded\"></div>\n </div>\n </div>\n ))}\n </div>\n );\n if (bare) return content;\n return (\n <PageLayout\n showHeader={false}\n className=\"bg-ods-bg max-w-[1280px] mx-auto py-6 md:py-10 px-6 md:px-20\"\n >\n {content}\n </PageLayout>\n );\n}\n","'use client'\n\n/**\n * Shared \"author byline\" card used by article-shaped detail pages\n * (blog post, product release, onboarding guide, investor update).\n *\n * MOVED from the hub so any consuming app can embed it; hub call sites\n * import it directly and pass their platform-aware copy explicitly\n * (`fallbackBio={defaultAuthorFallbackBio()}` from the hub's app-config).\n *\n * Embed-readiness contract:\n * - `Link` / `Image` render through the embed-shims (plain `<a>` / `<img>`\n * in non-Next hosts; the real Next primitives once the host registers\n * them at app init).\n * - The avatar is proxied through the OPTIONAL ambient `ChatRuntime`\n * (`endpoints.imageProxyUrlPrefix`, same config `useProxiedImageUrl`\n * reads) — when no runtime is mounted the raw URL renders as-is, so the\n * component never throws outside a provider. Hosts can also inject\n * `proxyImageUrl` to bypass the runtime entirely.\n * - `fallbackBio` is a PLAIN prop (no app-config import): the lib has no\n * platform awareness; pass copy or leave it absent to render nothing.\n *\n * Render order: avatar → name + job title + date → bio (when present).\n * Returns null when `author` is empty (no card rendered).\n */\n\nimport React from 'react'\nimport { Calendar, User } from 'lucide-react'\nimport Image from '../../embed-shims/next-image'\nimport Link from '../../embed-shims/next-link'\nimport { cn } from '../../utils/cn'\nimport { formatBioText } from '../../utils/format'\nimport { getProxiedImageUrl } from '../../utils/image-proxy'\nimport { useChatRuntime } from '../../contexts/chat-runtime-context'\n\nexport interface ArticleAuthorBylineProps {\n /** Author display name. Required — block is hidden when null/empty. */\n author: string | null\n /** Avatar URL. Falls back to a placeholder when null. */\n avatar?: string | null\n /** Optional bio paragraph rendered below the name. */\n bio?: string | null\n /** Optional job title rendered immediately under the name. */\n jobTitle?: string | null\n /** Optional published date (ISO string or Date). Rendered next to the name. */\n publishedAt?: string | Date | null\n /** Optional link target for the author name (e.g. the author page). */\n href?: string | null\n /**\n * Fallback paragraph when `bio` is empty. Plain copy — the lib has no\n * platform/config awareness, so hosts that want a branded default\n * (\"Contributing author on the {platform} platform\") pass it explicitly\n * (the hub wrapper derives it from `getAppConfig()`). Absent/null ⇒\n * nothing renders below the name when `bio` is empty.\n */\n fallbackBio?: string | null\n /** Avatar size variant. `md` = 56px (default), `lg` = 64px. */\n size?: 'md' | 'lg'\n /**\n * Host-injected avatar-URL mapper. Wins over the ambient-runtime proxy\n * resolution. Use when the host proxies images outside the `ChatRuntime`\n * config (e.g. a bespoke CDN rewrite).\n */\n proxyImageUrl?: (url: string) => string\n className?: string\n}\n\nfunction formatDate(value: string | Date): string {\n const d = typeof value === 'string' ? new Date(value) : value\n if (Number.isNaN(d.getTime())) return ''\n // `timeZone: 'UTC'` keeps the SSR (server = UTC) and client (user's local tz)\n // renders identical — without it a published_at near a midnight boundary\n // formats to a different day on each side, triggering a React #418 hydration\n // text mismatch. Matches the convention in blog-metadata.tsx / investor-update.\n return d.toLocaleDateString('en-US', {\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n timeZone: 'UTC',\n })\n}\n\nexport function ArticleAuthorByline({\n author,\n avatar,\n bio,\n jobTitle,\n publishedAt,\n href,\n fallbackBio,\n size = 'md',\n proxyImageUrl,\n className,\n}: ArticleAuthorBylineProps) {\n // Optional runtime — `useChatRuntime` returns null outside a provider, so\n // the byline works in bare embeds (raw avatar URL) and proxies whenever the\n // host mounted a runtime with `imageProxyUrlPrefix` (the hub always does).\n const runtime = useChatRuntime()\n if (!author) return null\n\n const proxiedAvatar = avatar\n ? proxyImageUrl\n ? proxyImageUrl(avatar)\n : (getProxiedImageUrl(avatar, {\n proxyPrefix: runtime?.endpoints.imageProxyUrlPrefix,\n skipDomains: runtime?.endpoints.imageProxySkipDomains,\n directHttps: true,\n }) ?? avatar)\n : ''\n\n // Class-driven sizing (md = 56px, lg = 64px). The numeric pair feeds only\n // the Image element's intrinsic width/height attributes (required by the\n // Next image shim) — layout comes from the classes.\n const avatarSizeClass = size === 'lg' ? 'w-16 h-16' : 'w-14 h-14'\n const avatarIconClass = size === 'lg' ? 'w-8 h-8' : 'w-7 h-7'\n const avatarDim = size === 'lg' ? 64 : 56\n const formattedBio = formatBioText(bio ?? null)\n const dateLabel = publishedAt ? formatDate(publishedAt) : ''\n\n return (\n <div\n className={cn(\n 'bg-ods-card border border-ods-border rounded-lg p-6',\n 'flex flex-col md:flex-row gap-4 items-start',\n className,\n )}\n >\n {/* Avatar */}\n <div className=\"flex-shrink-0\">\n {avatar ? (\n <Image\n src={proxiedAvatar || avatar}\n alt={author}\n width={avatarDim}\n height={avatarDim}\n className={cn('rounded-full border-2 border-ods-border object-cover', avatarSizeClass)}\n />\n ) : (\n <div\n className={cn(\n 'rounded-full border-2 border-ods-border bg-ods-bg flex items-center justify-center',\n avatarSizeClass,\n )}\n >\n <User className={cn('text-ods-text-secondary', avatarIconClass)} />\n </div>\n )}\n </div>\n\n {/* Name + meta + bio */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-wrap items-baseline gap-x-3 gap-y-1\">\n <h3 className=\"text-h5 text-ods-text-primary\">\n {href ? (\n <Link href={href} className=\"hover:text-ods-accent transition-colors\">\n {author}\n </Link>\n ) : (\n author\n )}\n </h3>\n {dateLabel && (\n <span className=\"inline-flex items-center gap-1 font-body text-body-sm text-ods-text-secondary\">\n <Calendar className=\"h-3 w-3\" />\n {dateLabel}\n </span>\n )}\n </div>\n {jobTitle && (\n <p className=\"font-body text-body-sm text-ods-text-secondary mt-0.5\">\n {jobTitle}\n </p>\n )}\n {formattedBio ? (\n <p className=\"font-body text-body-md text-ods-text-secondary leading-relaxed mt-2\">\n {formattedBio}\n </p>\n ) : fallbackBio ? (\n <p className=\"font-body text-body-md text-ods-text-secondary italic mt-2\">\n {fallbackBio}\n </p>\n ) : null}\n </div>\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-IENK6OY5.cjs","../src/components/shared/detail-page-skeleton.tsx","../src/components/shared/article-author-byline.tsx"],"names":["jsxs","jsx"],"mappings":"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","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-IENK6OY5.cjs","sourcesContent":[null,"\"use client\";\n\nimport { PageLayout } from '../layout/page-layout';\n\nexport interface DetailPageSkeletonProps {\n metadataColumns?: number; // Number of metadata grid columns (default 4)\n showImageGallery?: boolean; // Show horizontal image gallery (default true)\n /** Render only the skeleton blocks, WITHOUT the self-contained page wrapper\n * — the caller supplies its own (e.g. `<PageShell>`) so the loading state\n * matches the loaded page's width, padding, and min-height. Default false\n * (self-contained `<PageLayout>` at the hub article width). */\n bare?: boolean;\n}\n\nexport function DetailPageSkeleton({\n metadataColumns = 4,\n showImageGallery = true,\n bare = false\n}: DetailPageSkeletonProps = {}) {\n const content = (\n <div className=\"space-y-6 md:space-y-10 animate-pulse\">\n {/* Title Block */}\n <div className=\"flex flex-col gap-6 w-full\">\n <div className=\"h-16 md:h-20 w-full max-w-3xl bg-ods-card rounded\"></div>\n </div>\n\n {/* Category Tags Skeleton */}\n <div className=\"flex flex-wrap gap-2 w-full\">\n <div className=\"h-8 w-32 bg-ods-card rounded\"></div>\n <div className=\"h-8 w-28 bg-ods-card rounded\"></div>\n <div className=\"h-8 w-36 bg-ods-card rounded\"></div>\n </div>\n\n {/* Metadata Grid Skeleton */}\n <div className={`grid grid-cols-1 md:grid-cols-${metadataColumns} border border-ods-border rounded-md overflow-hidden w-full`}>\n {Array.from({ length: metadataColumns }).map((_, i) => (\n <div key={i} className=\"bg-ods-card border-b md:border-b-0 md:border-r last:border-r-0 border-ods-border p-4\">\n <div className=\"h-6 w-24 bg-ods-border rounded mb-2\"></div>\n <div className=\"h-5 w-20 bg-ods-border rounded\"></div>\n </div>\n ))}\n </div>\n\n {/* Image Gallery Skeleton */}\n {showImageGallery && (\n <div className=\"flex gap-6 overflow-x-auto w-full\">\n {[1, 2, 3, 4, 5].map((i) => (\n <div key={i} className=\"shrink-0 w-[240px] h-[200px] bg-ods-card rounded-md border border-ods-border\"></div>\n ))}\n </div>\n )}\n\n {/* Featured Image Skeleton (for case studies) */}\n {!showImageGallery && (\n <div className=\"aspect-[2560/1366] w-full bg-ods-card rounded-md\"></div>\n )}\n\n {/* Content Sections Skeleton */}\n {[1, 2, 3].map((section) => (\n <div key={section} className=\"space-y-6\">\n <div className=\"h-16 w-64 bg-ods-card rounded\"></div>\n <div className=\"space-y-3\">\n <div className=\"h-6 w-full bg-ods-card rounded\"></div>\n <div className=\"h-6 w-full bg-ods-card rounded\"></div>\n <div className=\"h-6 w-4/5 bg-ods-card rounded\"></div>\n </div>\n </div>\n ))}\n </div>\n );\n if (bare) return content;\n return (\n <PageLayout\n showHeader={false}\n className=\"bg-ods-bg max-w-[1280px] mx-auto py-6 md:py-10 px-6 md:px-20\"\n >\n {content}\n </PageLayout>\n );\n}\n","'use client'\n\n/**\n * Shared \"author byline\" card used by article-shaped detail pages\n * (blog post, product release, onboarding guide, investor update).\n *\n * MOVED from the hub so any consuming app can embed it; hub call sites\n * import it directly and pass their platform-aware copy explicitly\n * (`fallbackBio={defaultAuthorFallbackBio()}` from the hub's app-config).\n *\n * Embed-readiness contract:\n * - `Link` / `Image` render through the embed-shims (plain `<a>` / `<img>`\n * in non-Next hosts; the real Next primitives once the host registers\n * them at app init).\n * - The avatar is proxied through the OPTIONAL ambient `ChatRuntime`\n * (`endpoints.imageProxyUrlPrefix`, same config `useProxiedImageUrl`\n * reads) — when no runtime is mounted the raw URL renders as-is, so the\n * component never throws outside a provider. Hosts can also inject\n * `proxyImageUrl` to bypass the runtime entirely.\n * - `fallbackBio` is a PLAIN prop (no app-config import): the lib has no\n * platform awareness; pass copy or leave it absent to render nothing.\n *\n * Render order: avatar → name + job title + date → bio (when present).\n * Returns null when `author` is empty (no card rendered).\n */\n\nimport React from 'react'\nimport { Calendar, User } from 'lucide-react'\nimport Image from '../../embed-shims/next-image'\nimport Link from '../../embed-shims/next-link'\nimport { cn } from '../../utils/cn'\nimport { formatBioText } from '../../utils/format'\nimport { getProxiedImageUrl } from '../../utils/image-proxy'\nimport { useChatRuntime } from '../../contexts/chat-runtime-context'\n\nexport interface ArticleAuthorBylineProps {\n /** Author display name. Required — block is hidden when null/empty. */\n author: string | null\n /** Avatar URL. Falls back to a placeholder when null. */\n avatar?: string | null\n /** Optional bio paragraph rendered below the name. */\n bio?: string | null\n /** Optional job title rendered immediately under the name. */\n jobTitle?: string | null\n /** Optional published date (ISO string or Date). Rendered next to the name. */\n publishedAt?: string | Date | null\n /** Optional link target for the author name (e.g. the author page). */\n href?: string | null\n /**\n * Fallback paragraph when `bio` is empty. Plain copy — the lib has no\n * platform/config awareness, so hosts that want a branded default\n * (\"Contributing author on the {platform} platform\") pass it explicitly\n * (the hub wrapper derives it from `getAppConfig()`). Absent/null ⇒\n * nothing renders below the name when `bio` is empty.\n */\n fallbackBio?: string | null\n /** Avatar size variant. `md` = 56px (default), `lg` = 64px. */\n size?: 'md' | 'lg'\n /**\n * Host-injected avatar-URL mapper. Wins over the ambient-runtime proxy\n * resolution. Use when the host proxies images outside the `ChatRuntime`\n * config (e.g. a bespoke CDN rewrite).\n */\n proxyImageUrl?: (url: string) => string\n className?: string\n}\n\nfunction formatDate(value: string | Date): string {\n const d = typeof value === 'string' ? new Date(value) : value\n if (Number.isNaN(d.getTime())) return ''\n // `timeZone: 'UTC'` keeps the SSR (server = UTC) and client (user's local tz)\n // renders identical — without it a published_at near a midnight boundary\n // formats to a different day on each side, triggering a React #418 hydration\n // text mismatch. Matches the convention in blog-metadata.tsx / investor-update.\n return d.toLocaleDateString('en-US', {\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n timeZone: 'UTC',\n })\n}\n\nexport function ArticleAuthorByline({\n author,\n avatar,\n bio,\n jobTitle,\n publishedAt,\n href,\n fallbackBio,\n size = 'md',\n proxyImageUrl,\n className,\n}: ArticleAuthorBylineProps) {\n // Optional runtime — `useChatRuntime` returns null outside a provider, so\n // the byline works in bare embeds (raw avatar URL) and proxies whenever the\n // host mounted a runtime with `imageProxyUrlPrefix` (the hub always does).\n const runtime = useChatRuntime()\n if (!author) return null\n\n const proxiedAvatar = avatar\n ? proxyImageUrl\n ? proxyImageUrl(avatar)\n : (getProxiedImageUrl(avatar, {\n proxyPrefix: runtime?.endpoints.imageProxyUrlPrefix,\n skipDomains: runtime?.endpoints.imageProxySkipDomains,\n directHttps: true,\n }) ?? avatar)\n : ''\n\n // Class-driven sizing (md = 56px, lg = 64px). The numeric pair feeds only\n // the Image element's intrinsic width/height attributes (required by the\n // Next image shim) — layout comes from the classes.\n const avatarSizeClass = size === 'lg' ? 'w-16 h-16' : 'w-14 h-14'\n const avatarIconClass = size === 'lg' ? 'w-8 h-8' : 'w-7 h-7'\n const avatarDim = size === 'lg' ? 64 : 56\n const formattedBio = formatBioText(bio ?? null)\n const dateLabel = publishedAt ? formatDate(publishedAt) : ''\n\n return (\n <div\n className={cn(\n 'bg-ods-card border border-ods-border rounded-lg p-6',\n 'flex flex-col md:flex-row gap-4 items-start',\n className,\n )}\n >\n {/* Avatar */}\n <div className=\"flex-shrink-0\">\n {avatar ? (\n <Image\n src={proxiedAvatar || avatar}\n alt={author}\n width={avatarDim}\n height={avatarDim}\n className={cn('rounded-full border-2 border-ods-border object-cover', avatarSizeClass)}\n />\n ) : (\n <div\n className={cn(\n 'rounded-full border-2 border-ods-border bg-ods-bg flex items-center justify-center',\n avatarSizeClass,\n )}\n >\n <User className={cn('text-ods-text-secondary', avatarIconClass)} />\n </div>\n )}\n </div>\n\n {/* Name + meta + bio */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-wrap items-baseline gap-x-3 gap-y-1\">\n <h3 className=\"text-h5 text-ods-text-primary\">\n {href ? (\n <Link href={href} className=\"hover:text-ods-accent transition-colors\">\n {author}\n </Link>\n ) : (\n author\n )}\n </h3>\n {dateLabel && (\n <span className=\"inline-flex items-center gap-1 font-body text-body-sm text-ods-text-secondary\">\n <Calendar className=\"h-3 w-3\" />\n {dateLabel}\n </span>\n )}\n </div>\n {jobTitle && (\n <p className=\"font-body text-body-sm text-ods-text-secondary mt-0.5\">\n {jobTitle}\n </p>\n )}\n {formattedBio ? (\n <p className=\"font-body text-body-md text-ods-text-secondary leading-relaxed mt-2\">\n {formattedBio}\n </p>\n ) : fallbackBio ? (\n <p className=\"font-body text-body-md text-ods-text-secondary italic mt-2\">\n {fallbackBio}\n </p>\n ) : null}\n </div>\n </div>\n )\n}\n"]}
@@ -4,10 +4,10 @@
4
4
 
5
5
 
6
6
 
7
- var _chunkAXUAW3HTcjs = require('./chunk-AXUAW3HT.cjs');
7
+ var _chunkAS6FET7Gcjs = require('./chunk-AS6FET7G.cjs');
8
8
 
9
9
 
10
- var _chunkHJXKBLQ5cjs = require('./chunk-HJXKBLQ5.cjs');
10
+ var _chunkIENK6OY5cjs = require('./chunk-IENK6OY5.cjs');
11
11
 
12
12
 
13
13
  var _chunk2U3YPWHGcjs = require('./chunk-2U3YPWHG.cjs');
@@ -40,7 +40,7 @@ var _chunk2U3YPWHGcjs = require('./chunk-2U3YPWHG.cjs');
40
40
 
41
41
 
42
42
 
43
- var _chunkJ746ERW2cjs = require('./chunk-J746ERW2.cjs');
43
+ var _chunkSZSBHBXEcjs = require('./chunk-SZSBHBXE.cjs');
44
44
 
45
45
 
46
46
 
@@ -171,7 +171,7 @@ function PersistentPaginationWrapper({
171
171
  const displayCurrentPage = hasResults ? currentPage : 1;
172
172
  const isPaginationDisabled = isLoading;
173
173
  const hasNoResults = !hasResults && !isLoading;
174
- const PaginationComponent = (_chunkAXUAW3HTcjs.init_unified_pagination.call(void 0, ), _chunkVRHGVLSLcjs.__toCommonJS.call(void 0, _chunkAXUAW3HTcjs.unified_pagination_exports)).UnifiedPagination;
174
+ const PaginationComponent = (_chunkAS6FET7Gcjs.init_unified_pagination.call(void 0, ), _chunkVRHGVLSLcjs.__toCommonJS.call(void 0, _chunkAS6FET7Gcjs.unified_pagination_exports)).UnifiedPagination;
175
175
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
176
176
  "div",
177
177
  {
@@ -230,8 +230,8 @@ function PersistentPaginationWrapper({
230
230
  _chunkFIG2RKZFcjs.init_cn.call(void 0, );
231
231
 
232
232
  var DEFAULT_ENDPOINT = "/api/releases";
233
- var DEFAULT_SEARCH_PARAM_KEY = _chunkJ746ERW2cjs.DEV_SECTION_PARAM_KEYS.search;
234
- var DEFAULT_STATUS_PARAM_KEY = _chunkJ746ERW2cjs.DEV_SECTION_PARAM_KEYS.releaseStatus;
233
+ var DEFAULT_SEARCH_PARAM_KEY = _chunkSZSBHBXEcjs.DEV_SECTION_PARAM_KEYS.search;
234
+ var DEFAULT_STATUS_PARAM_KEY = _chunkSZSBHBXEcjs.DEV_SECTION_PARAM_KEYS.releaseStatus;
235
235
  var DEFAULT_PAGE_PARAM_KEY = "page";
236
236
  function ReleaseRow({
237
237
  release,
@@ -240,17 +240,17 @@ function ReleaseRow({
240
240
  }) {
241
241
  const runtime = _chunk3KEBI6TPcjs.useChatRuntime.call(void 0, );
242
242
  const router = _chunkG7UE6RKVcjs.useRouter.call(void 0, );
243
- const cta = _chunkJ746ERW2cjs.resolveContentHref.call(void 0, _optionalChain([runtime, 'optionalAccess', _2 => _2.composeContentUrl]), {
243
+ const cta = _chunkSZSBHBXEcjs.resolveContentHref.call(void 0, _optionalChain([runtime, 'optionalAccess', _2 => _2.composeContentUrl]), {
244
244
  type: "product_release",
245
245
  slug: release.slug,
246
246
  basePath,
247
247
  platforms: release.product_release_platforms
248
248
  });
249
- const { target, rel } = _chunkJ746ERW2cjs.useEntityCardLink.call(void 0, { href: cta.href, targetPlatform: cta.targetPlatform });
249
+ const { target, rel } = _chunkSZSBHBXEcjs.useEntityCardLink.call(void 0, { href: cta.href, targetPlatform: cta.targetPlatform });
250
250
  const onClick = (e) => {
251
- if (e.defaultPrevented || _chunkJ746ERW2cjs.isModifierClick.call(void 0, e) || target === "_blank") return;
251
+ if (e.defaultPrevented || _chunkSZSBHBXEcjs.isModifierClick.call(void 0, e) || target === "_blank") return;
252
252
  e.preventDefault();
253
- _chunkJ746ERW2cjs.executeNavigationImperative.call(void 0, {
253
+ _chunkSZSBHBXEcjs.executeNavigationImperative.call(void 0, {
254
254
  runtime,
255
255
  href: cta.href,
256
256
  targetPlatform: cta.targetPlatform,
@@ -258,7 +258,7 @@ function ReleaseRow({
258
258
  });
259
259
  };
260
260
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
261
- _chunkJ746ERW2cjs.ProductReleaseCard,
261
+ _chunkSZSBHBXEcjs.ProductReleaseCard,
262
262
  {
263
263
  size: "lg",
264
264
  title: release.title,
@@ -274,7 +274,7 @@ function ProductReleasesView({
274
274
  initialData,
275
275
  itemsPerPage = 5,
276
276
  basePath = "/releases",
277
- buildCardProps = _chunkJ746ERW2cjs.buildProductReleaseCardProps,
277
+ buildCardProps = _chunkSZSBHBXEcjs.buildProductReleaseCardProps,
278
278
  searchParamKey = DEFAULT_SEARCH_PARAM_KEY,
279
279
  statusParamKey = DEFAULT_STATUS_PARAM_KEY,
280
280
  pageParamKey = DEFAULT_PAGE_PARAM_KEY,
@@ -312,10 +312,10 @@ function ProductReleasesView({
312
312
  router.replace(`${pathname}?${params.toString()}`, { scroll: false });
313
313
  };
314
314
  if (error) {
315
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkFIG2RKZFcjs.cn.call(void 0, "w-full", className), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJ746ERW2cjs.LoadError, { message: "Failed to load releases.", onRetry: reload }) });
315
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkFIG2RKZFcjs.cn.call(void 0, "w-full", className), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSZSBHBXEcjs.LoadError, { message: "Failed to load releases.", onRetry: reload }) });
316
316
  }
317
317
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkFIG2RKZFcjs.cn.call(void 0, "w-full flex 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: "h-[600px] flex items-center justify-center", children: hasActiveFilters ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
318
- _chunkAXUAW3HTcjs.EmptyState,
318
+ _chunkAS6FET7Gcjs.EmptyState,
319
319
  {
320
320
  type: "search",
321
321
  title: "No releases found",
@@ -325,7 +325,7 @@ function ProductReleasesView({
325
325
  onCtaClick: resetFilters
326
326
  }
327
327
  ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
328
- _chunkAXUAW3HTcjs.EmptyState,
328
+ _chunkAS6FET7Gcjs.EmptyState,
329
329
  {
330
330
  type: "generic",
331
331
  title: "No releases available",
@@ -340,7 +340,7 @@ function ProductReleasesView({
340
340
  "div",
341
341
  {
342
342
  style: { visibility: isLoading || hasData ? "visible" : "hidden" },
343
- children: isLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJ746ERW2cjs.ProductReleaseCardSkeleton, { size: "lg" }) : release ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ReleaseRow, { release, basePath, buildCardProps }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJ746ERW2cjs.ProductReleaseCardSkeleton, { size: "lg" })
343
+ children: isLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSZSBHBXEcjs.ProductReleaseCardSkeleton, { size: "lg" }) : release ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ReleaseRow, { release, basePath, buildCardProps }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSZSBHBXEcjs.ProductReleaseCardSkeleton, { size: "lg" })
344
344
  },
345
345
  _nullishCoalesce(_optionalChain([release, 'optionalAccess', _5 => _5.id]), () => ( `slot-${i}`))
346
346
  );
@@ -388,10 +388,10 @@ function MediaGalleryStrip({ items, className }) {
388
388
  mediaItem.id || index
389
389
  );
390
390
  }
391
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: tileClass, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJ746ERW2cjs.Video, { url: mediaItem.media_url, layout: "native" }) }, mediaItem.id || index);
391
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: tileClass, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSZSBHBXEcjs.Video, { url: mediaItem.media_url, layout: "native" }) }, mediaItem.id || index);
392
392
  }) }),
393
393
  galleryImages.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
394
- _chunkJ746ERW2cjs.ImageGalleryModal,
394
+ _chunkSZSBHBXEcjs.ImageGalleryModal,
395
395
  {
396
396
  images: galleryImages,
397
397
  isOpen: galleryOpen,
@@ -408,7 +408,7 @@ _chunkG7UE6RKVcjs.init_next_navigation.call(void 0, );
408
408
 
409
409
  var _lucidereact = require('lucide-react');
410
410
 
411
- var DefaultMarkdownRenderer = _chunkJ746ERW2cjs.RichMarkdownRenderer;
411
+ var DefaultMarkdownRenderer = _chunkSZSBHBXEcjs.RichMarkdownRenderer;
412
412
  function ReleaseDetailPage({
413
413
  authorHref,
414
414
  slug,
@@ -426,7 +426,7 @@ function ReleaseDetailPage({
426
426
  shell = true
427
427
  }) {
428
428
  const router = _chunkG7UE6RKVcjs.useRouter.call(void 0, );
429
- const renderShell = (node) => shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJ746ERW2cjs.PageShell, { children: node }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: node });
429
+ const renderShell = (node) => shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSZSBHBXEcjs.PageShell, { children: node }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: node });
430
430
  const { data: fetchedRelease, error, isLoading } = useRelease(initialData ? void 0 : slug);
431
431
  const release = initialData || fetchedRelease;
432
432
  const showBackButton = backButton !== false;
@@ -470,7 +470,7 @@ function ReleaseDetailPage({
470
470
  return renderShell(
471
471
  // Match the loaded page's top offset (TitleBlock's
472
472
  // `pt-[var(--spacing-system-l)]`) so content doesn't jump on load.
473
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "pt-[var(--spacing-system-l)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHJXKBLQ5cjs.DetailPageSkeleton, { bare: true, metadataColumns: 4, showImageGallery: true }) })
473
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "pt-[var(--spacing-system-l)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkIENK6OY5cjs.DetailPageSkeleton, { bare: true, metadataColumns: 4, showImageGallery: true }) })
474
474
  );
475
475
  }
476
476
  if (error || !release) {
@@ -506,7 +506,7 @@ function ReleaseDetailPage({
506
506
  const improvements = release.improvements;
507
507
  return renderShell(
508
508
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
509
- _chunkJ746ERW2cjs.PageLayout,
509
+ _chunkSZSBHBXEcjs.PageLayout,
510
510
  {
511
511
  title: releaseTitle,
512
512
  subtitle: `Version: ${releaseVersion}`,
@@ -515,7 +515,7 @@ function ReleaseDetailPage({
515
515
  backButton: showBackButton ? { label: backLabel, onClick: () => router.push(backHref) } : void 0,
516
516
  children: [
517
517
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-6 md:space-y-8", children: [
518
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJ746ERW2cjs.EntityTagBadges, { tags: release.product_release_tags }),
518
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSZSBHBXEcjs.EntityTagBadges, { tags: release.product_release_tags }),
519
519
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 md:grid-cols-4 border border-ods-border rounded-md overflow-hidden w-full", children: [
520
520
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "bg-ods-card border-b md:border-b-0 md:border-r border-ods-border p-4 flex flex-col gap-3", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-0", children: [
521
521
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-h4 text-ods-text-primary", children: releaseType.toLocaleUpperCase() }),
@@ -526,11 +526,11 @@ function ReleaseDetailPage({
526
526
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary", children: "Release Status" })
527
527
  ] }) }),
528
528
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "bg-ods-card border-b md:border-b-0 md:border-r border-ods-border p-4 flex flex-col gap-3", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-0", children: [
529
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-h4 text-ods-text-primary", children: _chunkJ746ERW2cjs.formatReleaseDate.call(void 0, releaseDate) }),
529
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-h4 text-ods-text-primary", children: _chunkSZSBHBXEcjs.formatReleaseDate.call(void 0, releaseDate) }),
530
530
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary", children: "Release Date" })
531
531
  ] }) }),
532
532
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
533
- _chunkJ746ERW2cjs.EntityMetadataAuthorCell,
533
+ _chunkSZSBHBXEcjs.EntityMetadataAuthorCell,
534
534
  {
535
535
  author: _nullishCoalesce(author, () => ( { full_name: null, avatar_url: null })),
536
536
  authorHref: _optionalChain([author, 'optionalAccess', _6 => _6.full_name]) ? authorHref : void 0
@@ -555,7 +555,7 @@ function ReleaseDetailPage({
555
555
  }
556
556
  ) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
557
557
  youtubeUrl && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
558
- _chunkJ746ERW2cjs.Video,
558
+ _chunkSZSBHBXEcjs.Video,
559
559
  {
560
560
  kind: "youtube",
561
561
  url: youtubeUrl,
@@ -564,7 +564,7 @@ function ReleaseDetailPage({
564
564
  }
565
565
  ),
566
566
  !youtubeUrl && mainVideoUrl && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
567
- _chunkJ746ERW2cjs.Video,
567
+ _chunkSZSBHBXEcjs.Video,
568
568
  {
569
569
  url: mainVideoUrl,
570
570
  srtContent: _optionalChain([release, 'optionalAccess', _9 => _9.srt_content]),
@@ -573,7 +573,7 @@ function ReleaseDetailPage({
573
573
  }
574
574
  ),
575
575
  highlightVideoUrl && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
576
- _chunkJ746ERW2cjs.Video,
576
+ _chunkSZSBHBXEcjs.Video,
577
577
  {
578
578
  url: highlightVideoUrl,
579
579
  poster: highlightVideoThumbnail,
@@ -582,7 +582,7 @@ function ReleaseDetailPage({
582
582
  )
583
583
  ] }),
584
584
  releaseContent && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "text-h4 text-ods-text-primary", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MarkdownRenderer, { content: releaseContent }) }),
585
- hasBreakingChanges && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJ746ERW2cjs.Card, { className: "border-red-500 bg-red-500/10", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJ746ERW2cjs.CardContent, { className: "p-6", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-3", children: [
585
+ hasBreakingChanges && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSZSBHBXEcjs.Card, { className: "border-red-500 bg-red-500/10", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSZSBHBXEcjs.CardContent, { className: "p-6", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-3", children: [
586
586
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.AlertTriangle, { className: "h-6 w-6 text-red-500" }),
587
587
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { children: [
588
588
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "font-bold text-red-500 text-lg", children: "Breaking Changes" }),
@@ -590,7 +590,7 @@ function ReleaseDetailPage({
590
590
  ] })
591
591
  ] }) }) }),
592
592
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
593
- _chunkJ746ERW2cjs.ReleaseChangelogSection,
593
+ _chunkSZSBHBXEcjs.ReleaseChangelogSection,
594
594
  {
595
595
  title: "Breaking Changes",
596
596
  entries: breakingChanges || [],
@@ -601,7 +601,7 @@ function ReleaseDetailPage({
601
601
  }
602
602
  ),
603
603
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
604
- _chunkJ746ERW2cjs.ReleaseChangelogSection,
604
+ _chunkSZSBHBXEcjs.ReleaseChangelogSection,
605
605
  {
606
606
  title: "Features Added",
607
607
  entries: featuresAdded || [],
@@ -611,7 +611,7 @@ function ReleaseDetailPage({
611
611
  }
612
612
  ),
613
613
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
614
- _chunkJ746ERW2cjs.ReleaseChangelogSection,
614
+ _chunkSZSBHBXEcjs.ReleaseChangelogSection,
615
615
  {
616
616
  title: "Bugs Fixed",
617
617
  entries: bugFixed || [],
@@ -621,7 +621,7 @@ function ReleaseDetailPage({
621
621
  }
622
622
  ),
623
623
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
624
- _chunkJ746ERW2cjs.ReleaseChangelogSection,
624
+ _chunkSZSBHBXEcjs.ReleaseChangelogSection,
625
625
  {
626
626
  title: "Improvements",
627
627
  entries: improvements || [],
@@ -660,7 +660,7 @@ function ReleaseDetailPage({
660
660
  (() => {
661
661
  const deliveryCount = deliveryData ? deliveryData.completed.length + deliveryData.inProgress.length : 0;
662
662
  return deliveryLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DeliverySection, { data: deliveryData, isLoading: deliveryLoading }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
663
- _chunkJ746ERW2cjs.FadePreview,
663
+ _chunkSZSBHBXEcjs.FadePreview,
664
664
  {
665
665
  hiddenCount: deliveryCount - 1,
666
666
  collapsedHeight: 300,
@@ -672,7 +672,7 @@ function ReleaseDetailPage({
672
672
  ] }),
673
673
  (_optionalChain([githubReleases, 'optionalAccess', _11 => _11.length]) || _optionalChain([knowledgeBaseLinks, 'optionalAccess', _12 => _12.length]) || migrationGuideUrl || documentationUrl) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-1 w-full", children: [
674
674
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-h5 tracking-[-0.28px] text-ods-text-secondary", children: "Related Links" }),
675
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJ746ERW2cjs.Card, { className: "bg-ods-card border-ods-border p-6", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-4", children: [
675
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSZSBHBXEcjs.Card, { className: "bg-ods-card border-ods-border p-6", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-4", children: [
676
676
  githubReleases && githubReleases.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: githubReleases.map((ghRelease) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-start gap-1", children: [
677
677
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLWNPMLIHcjs.GitHubIcon, { className: "shrink-0", width: 24, height: 24, color: "var(--color-text-secondary)" }),
678
678
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-h4 text-ods-text-primary", children: "Github Release" }),
@@ -746,7 +746,7 @@ function ReleaseDetailPage({
746
746
  // src/components/shared/product-release/release-detail-skeleton.tsx
747
747
 
748
748
  function ReleaseDetailSkeleton() {
749
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHJXKBLQ5cjs.DetailPageSkeleton, { metadataColumns: 4, showImageGallery: true });
749
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkIENK6OY5cjs.DetailPageSkeleton, { metadataColumns: 4, showImageGallery: true });
750
750
  }
751
751
 
752
752
  // src/components/shared/roadmap/use-roadmap-voting.ts
@@ -907,10 +907,10 @@ function RoadmapGridSingle({
907
907
  // `useScrollToHash` in `roadmap-view.tsx` finds the card by id
908
908
  // and scrolls.
909
909
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
910
- _chunkJ746ERW2cjs.RoadmapCard,
910
+ _chunkSZSBHBXEcjs.RoadmapCard,
911
911
  {
912
912
  item,
913
- id: _chunkJ746ERW2cjs.devSectionAnchorId.call(void 0, "roadmap", item.id),
913
+ id: _chunkSZSBHBXEcjs.devSectionAnchorId.call(void 0, "roadmap", item.id),
914
914
  userVote: getVote(item.id),
915
915
  onVote: (voteType) => onVote(item.id, voteType),
916
916
  isVoting: votingTasks.has(item.id)
@@ -990,7 +990,7 @@ function RoadmapGrid({
990
990
  }, [hasActiveFilters, sortedQuartersKey, isInitialized, quartersToKeepClosed]);
991
991
  if (items.length === 0) {
992
992
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
993
- _chunkAXUAW3HTcjs.EmptyState,
993
+ _chunkAS6FET7Gcjs.EmptyState,
994
994
  {
995
995
  type: "generic",
996
996
  title: "No roadmap items",
@@ -1011,7 +1011,7 @@ function RoadmapGrid({
1011
1011
  );
1012
1012
  }
1013
1013
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1014
- _chunkJ746ERW2cjs.Accordion,
1014
+ _chunkSZSBHBXEcjs.Accordion,
1015
1015
  {
1016
1016
  type: "multiple",
1017
1017
  value: expandedQuarters,
@@ -1021,13 +1021,13 @@ function RoadmapGrid({
1021
1021
  const itemCount = _optionalChain([itemsByQuarter, 'access', _21 => _21[quarter], 'optionalAccess', _22 => _22.length]) || 0;
1022
1022
  const isExpanded = expandedQuarters.includes(quarter);
1023
1023
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
1024
- _chunkJ746ERW2cjs.AccordionItem,
1024
+ _chunkSZSBHBXEcjs.AccordionItem,
1025
1025
  {
1026
1026
  value: quarter,
1027
1027
  id: `quarter-${quarter.replace(/\s+/g, "-").toLowerCase()}`,
1028
1028
  className: "border-0",
1029
1029
  children: [
1030
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJ746ERW2cjs.AccordionTrigger, { className: "w-full p-0 hover:no-underline [&>svg]:h-5 [&>svg]:w-5 [&>svg]:text-ods-text-secondary [&>svg]:ml-auto [&>svg]:shrink-0", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-3", children: [
1030
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSZSBHBXEcjs.AccordionTrigger, { className: "w-full p-0 hover:no-underline [&>svg]:h-5 [&>svg]:w-5 [&>svg]:text-ods-text-secondary [&>svg]:ml-auto [&>svg]:shrink-0", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-3", children: [
1031
1031
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
1032
1032
  "h3",
1033
1033
  {
@@ -1057,7 +1057,7 @@ function RoadmapGrid({
1057
1057
  }
1058
1058
  )
1059
1059
  ] }) }),
1060
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJ746ERW2cjs.AccordionContent, { className: "pt-4 pb-0 overflow-hidden data-[state=closed]:animate-none data-[state=open]:animate-none", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1060
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSZSBHBXEcjs.AccordionContent, { className: "pt-4 pb-0 overflow-hidden data-[state=closed]:animate-none data-[state=open]:animate-none", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1061
1061
  RoadmapGridSingle,
1062
1062
  {
1063
1063
  items: itemsByQuarter[quarter],
@@ -1108,8 +1108,8 @@ function RoadmapGridSkeleton({ count = 4, showLeftMargin = true }) {
1108
1108
 
1109
1109
 
1110
1110
  var DEFAULT_ENDPOINT2 = "/api/roadmap";
1111
- var DEFAULT_SEARCH_PARAM_KEY2 = _chunkJ746ERW2cjs.DEV_SECTION_PARAM_KEYS.search;
1112
- var DEFAULT_STATUS_PARAM_KEY2 = _chunkJ746ERW2cjs.DEV_SECTION_PARAM_KEYS.status;
1111
+ var DEFAULT_SEARCH_PARAM_KEY2 = _chunkSZSBHBXEcjs.DEV_SECTION_PARAM_KEYS.search;
1112
+ var DEFAULT_STATUS_PARAM_KEY2 = _chunkSZSBHBXEcjs.DEV_SECTION_PARAM_KEYS.status;
1113
1113
  function RoadmapView({
1114
1114
  endpoint = DEFAULT_ENDPOINT2,
1115
1115
  initialItems,
@@ -1135,7 +1135,7 @@ function RoadmapView({
1135
1135
  const items = _nullishCoalesce(_optionalChain([data, 'optionalAccess', _23 => _23.items]), () => ( []));
1136
1136
  _chunk743FCO64cjs.useScrollToHash.call(void 0, data, { headerOffset: _chunk743FCO64cjs.STICKY_HEADER_OFFSET_PX });
1137
1137
  if (error) {
1138
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJ746ERW2cjs.LoadError, { message: "Failed to load roadmap.", onRetry: reload });
1138
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSZSBHBXEcjs.LoadError, { message: "Failed to load roadmap.", onRetry: reload });
1139
1139
  }
1140
1140
  if (isLoading && !data) {
1141
1141
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, RoadmapGridSkeleton, { showLeftMargin });
@@ -1192,7 +1192,7 @@ function DeliveryTable({ items, isLoading = false }) {
1192
1192
  "div",
1193
1193
  {
1194
1194
  className: "border-b border-ods-border last:border-b-0",
1195
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkAXUAW3HTcjs.DeliveryRow, { item, id: _chunkJ746ERW2cjs.devSectionAnchorId.call(void 0, "delivery", item.id) })
1195
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkAS6FET7Gcjs.DeliveryRow, { item, id: _chunkSZSBHBXEcjs.devSectionAnchorId.call(void 0, "delivery", item.id) })
1196
1196
  },
1197
1197
  item.id
1198
1198
  )
@@ -1204,8 +1204,8 @@ function DeliveryTable({ items, isLoading = false }) {
1204
1204
 
1205
1205
  var DEFAULT_COMPLETED_ENDPOINT = "/api/delivery/completed";
1206
1206
  var DEFAULT_IN_PROGRESS_ENDPOINT = "/api/delivery/in-progress";
1207
- var DEFAULT_SEARCH_PARAM_KEY3 = _chunkJ746ERW2cjs.DEV_SECTION_PARAM_KEYS.search;
1208
- var DEFAULT_TASK_TYPE_PARAM_KEY = _chunkJ746ERW2cjs.DEV_SECTION_PARAM_KEYS.deliveryTaskType;
1207
+ var DEFAULT_SEARCH_PARAM_KEY3 = _chunkSZSBHBXEcjs.DEV_SECTION_PARAM_KEYS.search;
1208
+ var DEFAULT_TASK_TYPE_PARAM_KEY = _chunkSZSBHBXEcjs.DEV_SECTION_PARAM_KEYS.deliveryTaskType;
1209
1209
  function DeliveryLists({
1210
1210
  completedApiEndpoint = DEFAULT_COMPLETED_ENDPOINT,
1211
1211
  inProgressApiEndpoint = DEFAULT_IN_PROGRESS_ENDPOINT,
@@ -1266,11 +1266,11 @@ function DeliveryLists({
1266
1266
  const hasActiveFilters = searchQuery !== "" || taskTypeFilter !== "all";
1267
1267
  const hasResults = showCompleted && filteredCompleted.length > 0 || showInProgress && filteredInProgress.length > 0;
1268
1268
  if (error) {
1269
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJ746ERW2cjs.LoadError, { message: error, onRetry: () => window.location.reload() }) });
1269
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSZSBHBXEcjs.LoadError, { message: error, onRetry: () => window.location.reload() }) });
1270
1270
  }
1271
1271
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "w-full flex flex-col gap-[40px]", children: [
1272
1272
  !isLoading && !hasResults && (hasActiveFilters ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1273
- _chunkAXUAW3HTcjs.EmptyState,
1273
+ _chunkAS6FET7Gcjs.EmptyState,
1274
1274
  {
1275
1275
  type: "search",
1276
1276
  title: "No tasks found",
@@ -1285,7 +1285,7 @@ function DeliveryLists({
1285
1285
  }
1286
1286
  }
1287
1287
  ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1288
- _chunkAXUAW3HTcjs.EmptyState,
1288
+ _chunkAS6FET7Gcjs.EmptyState,
1289
1289
  {
1290
1290
  type: "generic",
1291
1291
  title: "No tasks available",
@@ -1387,7 +1387,7 @@ function LegalDocumentPage({
1387
1387
  initialData = null,
1388
1388
  initialLastUpdatedLabel = null,
1389
1389
  apiEndpoint,
1390
- MarkdownRenderer = _chunkJ746ERW2cjs.RichMarkdownRenderer,
1390
+ MarkdownRenderer = _chunkSZSBHBXEcjs.RichMarkdownRenderer,
1391
1391
  backButton,
1392
1392
  shell = true
1393
1393
  }) {
@@ -1397,10 +1397,10 @@ function LegalDocumentPage({
1397
1397
  label: _nullishCoalesce(_optionalChain([backButton, 'optionalAccess', _26 => _26.label]), () => ( "Back to home")),
1398
1398
  onClick: () => router.push(_nullishCoalesce(_optionalChain([backButton, 'optionalAccess', _27 => _27.href]), () => ( "/")))
1399
1399
  };
1400
- const fallbackLastUpdatedLabel = _optionalChain([data, 'optionalAccess', _28 => _28.lastSynced]) != null ? _chunkJ746ERW2cjs.formatLegalDate.call(void 0, data.lastSynced) : null;
1400
+ const fallbackLastUpdatedLabel = _optionalChain([data, 'optionalAccess', _28 => _28.lastSynced]) != null ? _chunkSZSBHBXEcjs.formatLegalDate.call(void 0, data.lastSynced) : null;
1401
1401
  const effectiveLastUpdatedLabel = _nullishCoalesce(initialLastUpdatedLabel, () => ( fallbackLastUpdatedLabel));
1402
1402
  const subtitle = effectiveLastUpdatedLabel ? `Last Updated: ${effectiveLastUpdatedLabel}` : fallbackDescription;
1403
- const inner = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkJ746ERW2cjs.PageLayout, { title, subtitle, backButton: backCfg, titleSize: "h1", titleWrap: true, children: [
1403
+ const inner = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkSZSBHBXEcjs.PageLayout, { title, subtitle, backButton: backCfg, titleSize: "h1", titleWrap: true, children: [
1404
1404
  _optionalChain([data, 'optionalAccess', _29 => _29.sourceFile]) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { className: "font-['DM_Sans'] text-sm text-ods-text-secondary opacity-75", children: [
1405
1405
  "Source: ",
1406
1406
  data.sourceFile
@@ -1447,7 +1447,7 @@ function LegalDocumentPage({
1447
1447
  ] })
1448
1448
  ] }) }) }) }) })
1449
1449
  ] });
1450
- return shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJ746ERW2cjs.PageShell, { children: inner }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: inner });
1450
+ return shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSZSBHBXEcjs.PageShell, { children: inner }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: inner });
1451
1451
  }
1452
1452
 
1453
1453
 
@@ -1467,4 +1467,4 @@ function LegalDocumentPage({
1467
1467
 
1468
1468
 
1469
1469
  exports.PersistentPagination = PersistentPagination; exports.usePaginationLoading = usePaginationLoading; exports.PersistentPaginationWrapper = PersistentPaginationWrapper; exports.ProductReleasesView = ProductReleasesView; exports.MediaGalleryStrip = MediaGalleryStrip; exports.ReleaseDetailPage = ReleaseDetailPage; exports.ReleaseDetailSkeleton = ReleaseDetailSkeleton; exports.useRoadmapVoting = useRoadmapVoting; exports.RoadmapGrid = RoadmapGrid; exports.RoadmapGridSkeleton = RoadmapGridSkeleton; exports.RoadmapView = RoadmapView; exports.DeliveryTable = DeliveryTable; exports.DeliveryLists = DeliveryLists; exports.useLegalDocs = useLegalDocs; exports.LegalDocumentPage = LegalDocumentPage;
1470
- //# sourceMappingURL=chunk-CICZZ4BP.cjs.map
1470
+ //# sourceMappingURL=chunk-JQT7PD6Z.cjs.map