@flamingo-stack/openframe-frontend-core 0.0.354 → 0.0.355
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.
- package/dist/{chunk-LPJKRZRD.js → chunk-266IXS6E.js} +2 -2
- package/dist/{chunk-RERV3ALE.cjs → chunk-2IJSLRZZ.cjs} +7 -7
- package/dist/{chunk-RERV3ALE.cjs.map → chunk-2IJSLRZZ.cjs.map} +1 -1
- package/dist/{chunk-MHWK6CDS.cjs → chunk-426BLQES.cjs} +12 -12
- package/dist/{chunk-MHWK6CDS.cjs.map → chunk-426BLQES.cjs.map} +1 -1
- package/dist/{chunk-2RX6DW5A.cjs → chunk-5FYSQ3GW.cjs} +62 -62
- package/dist/{chunk-2RX6DW5A.cjs.map → chunk-5FYSQ3GW.cjs.map} +1 -1
- package/dist/{chunk-3XNJWYLX.cjs → chunk-7CEEJGCF.cjs} +15 -15
- package/dist/{chunk-3XNJWYLX.cjs.map → chunk-7CEEJGCF.cjs.map} +1 -1
- package/dist/{chunk-5CTJCJV3.js → chunk-GMMVBLAD.js} +2 -2
- package/dist/{chunk-AN7YCTF4.js → chunk-GO2AEBG7.js} +2 -2
- package/dist/{chunk-SH5ZPAVK.js → chunk-GSW23VUI.js} +2 -2
- package/dist/{chunk-3MUALDLX.js → chunk-IDQJJEYE.js} +4 -4
- package/dist/{chunk-5RYGC2HA.cjs → chunk-KAWIGFO2.cjs} +26 -26
- package/dist/{chunk-5RYGC2HA.cjs.map → chunk-KAWIGFO2.cjs.map} +1 -1
- package/dist/{chunk-O6HI537F.cjs → chunk-KNIXUH6G.cjs} +9 -9
- package/dist/{chunk-O6HI537F.cjs.map → chunk-KNIXUH6G.cjs.map} +1 -1
- package/dist/{chunk-HEXR3TGX.js → chunk-KTTCJ7NX.js} +2 -2
- package/dist/{chunk-OQ75ZMB7.cjs → chunk-MYLWEYWT.cjs} +696 -672
- package/dist/chunk-MYLWEYWT.cjs.map +1 -0
- package/dist/{chunk-NJRZK3KL.cjs → chunk-O7T2VECL.cjs} +31 -31
- package/dist/{chunk-NJRZK3KL.cjs.map → chunk-O7T2VECL.cjs.map} +1 -1
- package/dist/{chunk-NJ4R2IJY.js → chunk-P4YC4V7T.js} +4 -4
- package/dist/{chunk-HD4S7ITV.cjs → chunk-PLSEMEEM.cjs} +37 -37
- package/dist/{chunk-HD4S7ITV.cjs.map → chunk-PLSEMEEM.cjs.map} +1 -1
- package/dist/{chunk-LNJ4QIAN.cjs → chunk-QD6ANQN5.cjs} +25 -25
- package/dist/{chunk-LNJ4QIAN.cjs.map → chunk-QD6ANQN5.cjs.map} +1 -1
- package/dist/{chunk-SJBFKX6U.js → chunk-RE3KBUNB.js} +28 -4
- package/dist/chunk-RE3KBUNB.js.map +1 -0
- package/dist/{chunk-BWT6O7K5.js → chunk-RYJTVPOQ.js} +2 -2
- package/dist/{chunk-XXVNJDZV.cjs → chunk-SFETWAWG.cjs} +5 -5
- package/dist/{chunk-XXVNJDZV.cjs.map → chunk-SFETWAWG.cjs.map} +1 -1
- package/dist/{chunk-4XFFHXCQ.js → chunk-SGZM3LF6.js} +4 -4
- package/dist/{chunk-DFZ74LGW.js → chunk-URBSUHOU.js} +2 -2
- package/dist/{chunk-J5RQ4T5L.cjs → chunk-V5QI32ZA.cjs} +56 -56
- package/dist/{chunk-J5RQ4T5L.cjs.map → chunk-V5QI32ZA.cjs.map} +1 -1
- package/dist/{chunk-SJ3O2463.js → chunk-XIZR45OD.js} +4 -4
- package/dist/components/case-studies/index.cjs +8 -8
- package/dist/components/case-studies/index.js +2 -2
- package/dist/components/chat/approval-batch-message.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +4 -2
- package/dist/components/chat/index.cjs.map +1 -1
- package/dist/components/chat/index.js +3 -1
- package/dist/components/chat/tool-call-blocks.d.ts +9 -0
- package/dist/components/chat/tool-call-blocks.d.ts.map +1 -1
- package/dist/components/chat/utils/tool-call-helpers.d.ts +7 -0
- package/dist/components/chat/utils/tool-call-helpers.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +3 -3
- package/dist/components/contact/index.js +2 -2
- package/dist/components/docs/index.cjs +5 -5
- package/dist/components/docs/index.js +4 -4
- package/dist/components/embeds/index.cjs +3 -3
- package/dist/components/embeds/index.js +2 -2
- package/dist/components/faq/index.cjs +3 -3
- package/dist/components/faq/index.js +2 -2
- package/dist/components/features/index.cjs +2 -2
- package/dist/components/features/index.js +1 -1
- package/dist/components/help-center-pages/index.cjs +20 -20
- package/dist/components/help-center-pages/index.js +11 -11
- package/dist/components/index.cjs +122 -120
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +11 -9
- package/dist/components/index.js.map +1 -1
- package/dist/components/navigation/index.cjs +2 -2
- package/dist/components/navigation/index.js +1 -1
- package/dist/components/onboarding-guides/index.cjs +5 -5
- package/dist/components/onboarding-guides/index.js +4 -4
- package/dist/components/related-content/index.cjs +3 -3
- package/dist/components/related-content/index.js +2 -2
- package/dist/components/tickets/index.cjs +5 -5
- package/dist/components/tickets/index.js +4 -4
- package/dist/components/ui/index.cjs +4 -2
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.js +3 -1
- package/dist/index.cjs +4 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3 -1
- package/package.json +1 -1
- package/src/components/chat/approval-batch-message.tsx +22 -6
- package/src/components/chat/tool-call-blocks.tsx +14 -0
- package/src/components/chat/utils/tool-call-helpers.ts +16 -0
- package/src/stories/ApprovalBatchMessageClient.stories.tsx +4 -0
- package/dist/chunk-OQ75ZMB7.cjs.map +0 -1
- package/dist/chunk-SJBFKX6U.js.map +0 -1
- /package/dist/{chunk-LPJKRZRD.js.map → chunk-266IXS6E.js.map} +0 -0
- /package/dist/{chunk-5CTJCJV3.js.map → chunk-GMMVBLAD.js.map} +0 -0
- /package/dist/{chunk-AN7YCTF4.js.map → chunk-GO2AEBG7.js.map} +0 -0
- /package/dist/{chunk-SH5ZPAVK.js.map → chunk-GSW23VUI.js.map} +0 -0
- /package/dist/{chunk-3MUALDLX.js.map → chunk-IDQJJEYE.js.map} +0 -0
- /package/dist/{chunk-HEXR3TGX.js.map → chunk-KTTCJ7NX.js.map} +0 -0
- /package/dist/{chunk-NJ4R2IJY.js.map → chunk-P4YC4V7T.js.map} +0 -0
- /package/dist/{chunk-BWT6O7K5.js.map → chunk-RYJTVPOQ.js.map} +0 -0
- /package/dist/{chunk-4XFFHXCQ.js.map → chunk-SGZM3LF6.js.map} +0 -0
- /package/dist/{chunk-DFZ74LGW.js.map → chunk-URBSUHOU.js.map} +0 -0
- /package/dist/{chunk-SJ3O2463.js.map → chunk-XIZR45OD.js.map} +0 -0
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
TASK_TYPE_TEXT_COLORS,
|
|
12
12
|
getStatusColorScheme,
|
|
13
13
|
init_pagination
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-RE3KBUNB.js";
|
|
15
15
|
import {
|
|
16
16
|
init_next_navigation,
|
|
17
17
|
usePathname,
|
|
@@ -459,4 +459,4 @@ export {
|
|
|
459
459
|
DevCardRowSkeletonList,
|
|
460
460
|
DeliveryRow
|
|
461
461
|
};
|
|
462
|
-
//# sourceMappingURL=chunk-
|
|
462
|
+
//# sourceMappingURL=chunk-RYJTVPOQ.js.map
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkMYLWEYWTcjs = require('./chunk-MYLWEYWT.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
|
-
|
|
53
|
+
_chunkMYLWEYWTcjs.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(
|
|
91
|
+
const proxiedAvatar = avatar ? proxyImageUrl ? proxyImageUrl(avatar) : _nullishCoalesce(_chunkMYLWEYWTcjs.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 =
|
|
99
|
+
const formattedBio = _chunkMYLWEYWTcjs.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-
|
|
149
|
+
//# sourceMappingURL=chunk-SFETWAWG.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-XXVNJDZV.cjs","../src/components/shared/detail-page-skeleton.tsx","../src/components/shared/article-author-byline.tsx"],"names":["jsxs","jsx"],"mappings":"AAAA,6rBAAY;AACZ;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACA;ACEU,+CAAA;AATH,SAAS,kBAAA,CAAmB;AAAA,EACjC,gBAAA,EAAkB,CAAA;AAAA,EAClB,iBAAA,EAAmB,IAAA;AAAA,EACnB,KAAA,EAAO;AACT,EAAA,EAA6B,CAAC,CAAA,EAAG;AAC/B,EAAA,MAAM,QAAA,kBACF,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,uCAAA,EAEb,QAAA,EAAA;AAAA,oBAAA,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,4BAAA,EACb,QAAA,kBAAA,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,oDAAA,CAAoD,EAAA,CACrE,CAAA;AAAA,oBAGA,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,sBAAA,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,+BAAA,CAA+B,CAAA;AAAA,sBAC9C,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,+BAAA,CAA+B,CAAA;AAAA,sBAC9C,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,+BAAA,CAA+B;AAAA,IAAA,EAAA,CAChD,CAAA;AAAA,oBAGA,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAW,CAAA,8BAAA,EAAiC,eAAe,CAAA,2DAAA,CAAA,EAC7D,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,gBAAgB,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,EAAA,mBAC/C,8BAAA,KAAC,EAAA,EAAY,SAAA,EAAU,sFAAA,EACrB,QAAA,EAAA;AAAA,sBAAA,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,sCAAA,CAAsC,CAAA;AAAA,sBACrD,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,iCAAA,CAAiC;AAAA,IAAA,EAAA,CAAA,EAFxC,CAGV,CACD,EAAA,CACH,CAAA;AAAA,IAGC,iBAAA,mBACC,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,mCAAA,EACZ,QAAA,EAAA,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAA,mBACpB,6BAAA,KAAC,EAAA,EAAY,SAAA,EAAU,+EAAA,CAAA,EAAb,CAA4F,CACvG,EAAA,CACH,CAAA;AAAA,IAID,CAAC,iBAAA,mBACA,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,mDAAA,CAAmD,CAAA;AAAA,IAInE,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,OAAA,EAAA,mBACd,8BAAA,KAAC,EAAA,EAAkB,SAAA,EAAU,WAAA,EAC3B,QAAA,EAAA;AAAA,sBAAA,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,gCAAA,CAAgC,CAAA;AAAA,sBAC/C,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,wBAAA,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,iCAAA,CAAiC,CAAA;AAAA,wBAChD,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,iCAAA,CAAiC,CAAA;AAAA,wBAChD,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,gCAAA,CAAgC;AAAA,MAAA,EAAA,CACjD;AAAA,IAAA,EAAA,CAAA,EANQ,OAOV,CACD;AAAA,EAAA,EAAA,CACH,CAAA;AAEJ,EAAA,GAAA,CAAI,IAAA,EAAM,OAAO,OAAA;AACjB,EAAA,uBACE,6BAAA;AAAA,IAAC,4BAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAU,8DAAA;AAAA,MAET,QAAA,EAAA;AAAA,IAAA;AAAA,EACH,CAAA;AAEJ;ADnBA;AACA;AElCA,2CAA+B;AAE/B,8CAAA,CAAA;AACA,uCAAA,CAAA;AAoGU;AA/DV,SAAS,UAAA,CAAW,KAAA,EAA8B;AAChD,EAAA,MAAM,EAAA,EAAI,OAAO,MAAA,IAAU,SAAA,EAAW,IAAI,IAAA,CAAK,KAAK,EAAA,EAAI,KAAA;AACxD,EAAA,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,EAAG,OAAO,EAAA;AAKtC,EAAA,OAAO,CAAA,CAAE,kBAAA,CAAmB,OAAA,EAAS;AAAA,IACnC,KAAA,EAAO,MAAA;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAU;AAAA,EACZ,CAAC,CAAA;AACH;AAEO,SAAS,mBAAA,CAAoB;AAAA,EAClC,MAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA,EAAO,IAAA;AAAA,EACP,aAAA;AAAA,EACA;AACF,CAAA,EAA6B;AAI3B,EAAA,MAAM,QAAA,EAAU,8CAAA,CAAe;AAC/B,EAAA,GAAA,CAAI,CAAC,MAAA,EAAQ,OAAO,IAAA;AAEpB,EAAA,MAAM,cAAA,EAAgB,OAAA,EAClB,cAAA,EACE,aAAA,CAAc,MAAM,EAAA,mBACnB,kDAAA,MAAmB,EAAQ;AAAA,IAC1B,WAAA,kBAAa,OAAA,6BAAS,SAAA,qBAAU,qBAAA;AAAA,IAChC,WAAA,kBAAa,OAAA,6BAAS,SAAA,qBAAU,uBAAA;AAAA,IAChC,WAAA,EAAa;AAAA,EACf,CAAC,CAAA,UAAK,SAAA,EACR,EAAA;AAKJ,EAAA,MAAM,gBAAA,EAAkB,KAAA,IAAS,KAAA,EAAO,YAAA,EAAc,WAAA;AACtD,EAAA,MAAM,gBAAA,EAAkB,KAAA,IAAS,KAAA,EAAO,UAAA,EAAY,SAAA;AACpD,EAAA,MAAM,UAAA,EAAY,KAAA,IAAS,KAAA,EAAO,GAAA,EAAK,EAAA;AACvC,EAAA,MAAM,aAAA,EAAe,6CAAA,iBAAc,GAAA,UAAO,MAAI,CAAA;AAC9C,EAAA,MAAM,UAAA,EAAY,YAAA,EAAc,UAAA,CAAW,WAAW,EAAA,EAAI,EAAA;AAE1D,EAAA,uBACEA,8BAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,kCAAA;AAAA,QACT,qDAAA;AAAA,QACA,6CAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAC,6BAAAA,KAAC,EAAA,EAAI,SAAA,EAAU,eAAA,EACZ,QAAA,EAAA,OAAA,kBACCA,6BAAAA;AAAA,UAAC,oCAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,cAAA,GAAiB,MAAA;AAAA,YACtB,GAAA,EAAK,MAAA;AAAA,YACL,KAAA,EAAO,SAAA;AAAA,YACP,MAAA,EAAQ,SAAA;AAAA,YACR,SAAA,EAAW,kCAAA,sDAAG,EAAwD,eAAe;AAAA,UAAA;AAAA,QACvF,EAAA,kBAEAA,6BAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,kCAAA;AAAA,cACT,oFAAA;AAAA,cACA;AAAA,YACF,CAAA;AAAA,YAEA,QAAA,kBAAAA,6BAAAA,iBAAC,EAAA,EAAK,SAAA,EAAW,kCAAA,yBAAG,EAA2B,eAAe,EAAA,CAAG;AAAA,UAAA;AAAA,QACnE,EAAA,CAEJ,CAAA;AAAA,wBAGAD,8BAAAA,KAAC,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,8BAAAA,KAAC,EAAA,EAAI,SAAA,EAAU,+CAAA,EACb,QAAA,EAAA;AAAA,4BAAAC,6BAAAA,IAAC,EAAA,EAAG,SAAA,EAAU,+BAAA,EACX,QAAA,EAAA,KAAA,kBACCA,6BAAAA,mCAAC,EAAA,EAAK,IAAA,EAAY,SAAA,EAAU,yCAAA,EACzB,QAAA,EAAA,OAAA,CACH,EAAA,EAEA,OAAA,CAEJ,CAAA;AAAA,YACC,UAAA,mBACCD,8BAAAA,MAAC,EAAA,EAAK,SAAA,EAAU,+EAAA,EACd,QAAA,EAAA;AAAA,8BAAAC,6BAAAA,qBAAC,EAAA,EAAS,SAAA,EAAU,UAAA,CAAU,CAAA;AAAA,cAC7B;AAAA,YAAA,EAAA,CACH;AAAA,UAAA,EAAA,CAEJ,CAAA;AAAA,UACC,SAAA,mBACCA,6BAAAA,GAAC,EAAA,EAAE,SAAA,EAAU,uDAAA,EACV,QAAA,EAAA,SAAA,CACH,CAAA;AAAA,UAED,aAAA,kBACCA,6BAAAA,GAAC,EAAA,EAAE,SAAA,EAAU,qEAAA,EACV,QAAA,EAAA,aAAA,CACH,EAAA,EACE,YAAA,kBACFA,6BAAAA,GAAC,EAAA,EAAE,SAAA,EAAU,4DAAA,EACV,QAAA,EAAA,YAAA,CACH,EAAA,EACE;AAAA,QAAA,EAAA,CACN;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,CAAA;AAEJ;AF1CA;AACA;AACE;AACA;AACF,mGAAC","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-XXVNJDZV.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-SFETWAWG.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-SFETWAWG.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 @@ import {
|
|
|
4
4
|
EmptyState,
|
|
5
5
|
init_unified_pagination,
|
|
6
6
|
unified_pagination_exports
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-RYJTVPOQ.js";
|
|
8
8
|
import {
|
|
9
9
|
DetailPageSkeleton
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-266IXS6E.js";
|
|
11
11
|
import {
|
|
12
12
|
useSelfFetch
|
|
13
13
|
} from "./chunk-U5MQW3PH.js";
|
|
@@ -39,7 +39,7 @@ import {
|
|
|
39
39
|
isModifierClick,
|
|
40
40
|
resolveContentHref,
|
|
41
41
|
useEntityCardLink
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-RE3KBUNB.js";
|
|
43
43
|
import {
|
|
44
44
|
STICKY_HEADER_OFFSET_PX,
|
|
45
45
|
contentFetch,
|
|
@@ -1461,4 +1461,4 @@ export {
|
|
|
1461
1461
|
useLegalDocs,
|
|
1462
1462
|
LegalDocumentPage
|
|
1463
1463
|
};
|
|
1464
|
-
//# sourceMappingURL=chunk-
|
|
1464
|
+
//# sourceMappingURL=chunk-SGZM3LF6.js.map
|
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
getContentRefLabelOrTitleCase,
|
|
34
34
|
init_pagination,
|
|
35
35
|
orderContentRefTypes
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-RE3KBUNB.js";
|
|
37
37
|
|
|
38
38
|
// src/components/related-content/related-content-section.tsx
|
|
39
39
|
import { useEffect, useMemo, useRef, useState } from "react";
|
|
@@ -359,4 +359,4 @@ export {
|
|
|
359
359
|
GROUP_PAGE_SIZE,
|
|
360
360
|
RelatedContentSection
|
|
361
361
|
};
|
|
362
|
-
//# sourceMappingURL=chunk-
|
|
362
|
+
//# sourceMappingURL=chunk-URBSUHOU.js.map
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunk7CEEJGCFcjs = require('./chunk-7CEEJGCF.cjs');
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _chunkSFETWAWGcjs = require('./chunk-SFETWAWG.cjs');
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
var _chunkRYROZ7HMcjs = require('./chunk-RYROZ7HM.cjs');
|
|
@@ -39,7 +39,7 @@ var _chunkRYROZ7HMcjs = require('./chunk-RYROZ7HM.cjs');
|
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
|
|
42
|
-
var
|
|
42
|
+
var _chunkMYLWEYWTcjs = require('./chunk-MYLWEYWT.cjs');
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
|
|
@@ -170,7 +170,7 @@ function PersistentPaginationWrapper({
|
|
|
170
170
|
const displayCurrentPage = hasResults ? currentPage : 1;
|
|
171
171
|
const isPaginationDisabled = isLoading;
|
|
172
172
|
const hasNoResults = !hasResults && !isLoading;
|
|
173
|
-
const PaginationComponent = (
|
|
173
|
+
const PaginationComponent = (_chunk7CEEJGCFcjs.init_unified_pagination.call(void 0, ), _chunkVRHGVLSLcjs.__toCommonJS.call(void 0, _chunk7CEEJGCFcjs.unified_pagination_exports)).UnifiedPagination;
|
|
174
174
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
175
175
|
"div",
|
|
176
176
|
{
|
|
@@ -229,8 +229,8 @@ function PersistentPaginationWrapper({
|
|
|
229
229
|
_chunkFIG2RKZFcjs.init_cn.call(void 0, );
|
|
230
230
|
|
|
231
231
|
var DEFAULT_ENDPOINT = "/api/releases";
|
|
232
|
-
var DEFAULT_SEARCH_PARAM_KEY =
|
|
233
|
-
var DEFAULT_STATUS_PARAM_KEY =
|
|
232
|
+
var DEFAULT_SEARCH_PARAM_KEY = _chunkMYLWEYWTcjs.DEV_SECTION_PARAM_KEYS.search;
|
|
233
|
+
var DEFAULT_STATUS_PARAM_KEY = _chunkMYLWEYWTcjs.DEV_SECTION_PARAM_KEYS.releaseStatus;
|
|
234
234
|
var DEFAULT_PAGE_PARAM_KEY = "page";
|
|
235
235
|
function ReleaseRow({
|
|
236
236
|
release,
|
|
@@ -239,17 +239,17 @@ function ReleaseRow({
|
|
|
239
239
|
}) {
|
|
240
240
|
const runtime = _chunk3KEBI6TPcjs.useChatRuntime.call(void 0, );
|
|
241
241
|
const router = _chunkG7UE6RKVcjs.useRouter.call(void 0, );
|
|
242
|
-
const cta =
|
|
242
|
+
const cta = _chunkMYLWEYWTcjs.resolveContentHref.call(void 0, _optionalChain([runtime, 'optionalAccess', _2 => _2.composeContentUrl]), {
|
|
243
243
|
type: "product_release",
|
|
244
244
|
slug: release.slug,
|
|
245
245
|
basePath,
|
|
246
246
|
platforms: release.product_release_platforms
|
|
247
247
|
});
|
|
248
|
-
const { target, rel } =
|
|
248
|
+
const { target, rel } = _chunkMYLWEYWTcjs.useEntityCardLink.call(void 0, { href: cta.href, targetPlatform: cta.targetPlatform });
|
|
249
249
|
const onClick = (e) => {
|
|
250
|
-
if (e.defaultPrevented ||
|
|
250
|
+
if (e.defaultPrevented || _chunkMYLWEYWTcjs.isModifierClick.call(void 0, e) || target === "_blank") return;
|
|
251
251
|
e.preventDefault();
|
|
252
|
-
|
|
252
|
+
_chunkMYLWEYWTcjs.executeNavigationImperative.call(void 0, {
|
|
253
253
|
runtime,
|
|
254
254
|
href: cta.href,
|
|
255
255
|
targetPlatform: cta.targetPlatform,
|
|
@@ -257,7 +257,7 @@ function ReleaseRow({
|
|
|
257
257
|
});
|
|
258
258
|
};
|
|
259
259
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
260
|
-
|
|
260
|
+
_chunkMYLWEYWTcjs.ProductReleaseCard,
|
|
261
261
|
{
|
|
262
262
|
size: "lg",
|
|
263
263
|
title: release.title,
|
|
@@ -273,7 +273,7 @@ function ProductReleasesView({
|
|
|
273
273
|
initialData,
|
|
274
274
|
itemsPerPage = 5,
|
|
275
275
|
basePath = "/releases",
|
|
276
|
-
buildCardProps =
|
|
276
|
+
buildCardProps = _chunkMYLWEYWTcjs.buildProductReleaseCardProps,
|
|
277
277
|
searchParamKey = DEFAULT_SEARCH_PARAM_KEY,
|
|
278
278
|
statusParamKey = DEFAULT_STATUS_PARAM_KEY,
|
|
279
279
|
pageParamKey = DEFAULT_PAGE_PARAM_KEY,
|
|
@@ -311,10 +311,10 @@ function ProductReleasesView({
|
|
|
311
311
|
router.replace(`${pathname}?${params.toString()}`, { scroll: false });
|
|
312
312
|
};
|
|
313
313
|
if (error) {
|
|
314
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkFIG2RKZFcjs.cn.call(void 0, "w-full", className), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
314
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkFIG2RKZFcjs.cn.call(void 0, "w-full", className), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMYLWEYWTcjs.LoadError, { message: "Failed to load releases.", onRetry: reload }) });
|
|
315
315
|
}
|
|
316
316
|
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,
|
|
317
|
-
|
|
317
|
+
_chunk7CEEJGCFcjs.EmptyState,
|
|
318
318
|
{
|
|
319
319
|
type: "search",
|
|
320
320
|
title: "No releases found",
|
|
@@ -324,7 +324,7 @@ function ProductReleasesView({
|
|
|
324
324
|
onCtaClick: resetFilters
|
|
325
325
|
}
|
|
326
326
|
) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
327
|
-
|
|
327
|
+
_chunk7CEEJGCFcjs.EmptyState,
|
|
328
328
|
{
|
|
329
329
|
type: "generic",
|
|
330
330
|
title: "No releases available",
|
|
@@ -339,7 +339,7 @@ function ProductReleasesView({
|
|
|
339
339
|
"div",
|
|
340
340
|
{
|
|
341
341
|
style: { visibility: isLoading || hasData ? "visible" : "hidden" },
|
|
342
|
-
children: isLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
342
|
+
children: isLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMYLWEYWTcjs.ProductReleaseCardSkeleton, { size: "lg" }) : release ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ReleaseRow, { release, basePath, buildCardProps }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMYLWEYWTcjs.ProductReleaseCardSkeleton, { size: "lg" })
|
|
343
343
|
},
|
|
344
344
|
_nullishCoalesce(_optionalChain([release, 'optionalAccess', _5 => _5.id]), () => ( `slot-${i}`))
|
|
345
345
|
);
|
|
@@ -388,10 +388,10 @@ function MediaGalleryStrip({ items, maxDisplay, 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,
|
|
391
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: tileClass, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMYLWEYWTcjs.Video, { url: mediaItem.media_url, layout: "native" }) }, mediaItem.id || index);
|
|
392
392
|
}) }),
|
|
393
393
|
galleryImages.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
394
|
-
|
|
394
|
+
_chunkMYLWEYWTcjs.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 =
|
|
411
|
+
var DefaultMarkdownRenderer = _chunkMYLWEYWTcjs.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,
|
|
429
|
+
const renderShell = (node) => shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMYLWEYWTcjs.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,
|
|
473
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "pt-[var(--spacing-system-l)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSFETWAWGcjs.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
|
-
|
|
509
|
+
_chunkMYLWEYWTcjs.PageLayout,
|
|
510
510
|
{
|
|
511
511
|
title: releaseTitle,
|
|
512
512
|
subtitle: `Version: ${releaseVersion}`,
|
|
@@ -514,7 +514,7 @@ function ReleaseDetailPage({
|
|
|
514
514
|
backButton: showBackButton ? { label: backLabel, onClick: () => router.push(backHref) } : void 0,
|
|
515
515
|
children: [
|
|
516
516
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-6 md:space-y-8", children: [
|
|
517
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
517
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMYLWEYWTcjs.EntityTagBadges, { tags: release.product_release_tags }),
|
|
518
518
|
/* @__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: [
|
|
519
519
|
/* @__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: [
|
|
520
520
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-h4 text-ods-text-primary", children: releaseType.toLocaleUpperCase() }),
|
|
@@ -525,11 +525,11 @@ function ReleaseDetailPage({
|
|
|
525
525
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary", children: "Release Status" })
|
|
526
526
|
] }) }),
|
|
527
527
|
/* @__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: [
|
|
528
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-h4 text-ods-text-primary", children:
|
|
528
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-h4 text-ods-text-primary", children: _chunkMYLWEYWTcjs.formatReleaseDate.call(void 0, releaseDate) }),
|
|
529
529
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary", children: "Release Date" })
|
|
530
530
|
] }) }),
|
|
531
531
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
532
|
-
|
|
532
|
+
_chunkMYLWEYWTcjs.EntityMetadataAuthorCell,
|
|
533
533
|
{
|
|
534
534
|
author: _nullishCoalesce(author, () => ( { full_name: null, avatar_url: null })),
|
|
535
535
|
authorHref: _optionalChain([author, 'optionalAccess', _6 => _6.full_name]) ? authorHref : void 0
|
|
@@ -554,7 +554,7 @@ function ReleaseDetailPage({
|
|
|
554
554
|
}
|
|
555
555
|
) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
556
556
|
youtubeUrl && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
557
|
-
|
|
557
|
+
_chunkMYLWEYWTcjs.Video,
|
|
558
558
|
{
|
|
559
559
|
kind: "youtube",
|
|
560
560
|
url: youtubeUrl,
|
|
@@ -563,7 +563,7 @@ function ReleaseDetailPage({
|
|
|
563
563
|
}
|
|
564
564
|
),
|
|
565
565
|
!youtubeUrl && mainVideoUrl && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
566
|
-
|
|
566
|
+
_chunkMYLWEYWTcjs.Video,
|
|
567
567
|
{
|
|
568
568
|
url: mainVideoUrl,
|
|
569
569
|
srtContent: _optionalChain([release, 'optionalAccess', _9 => _9.srt_content]),
|
|
@@ -572,7 +572,7 @@ function ReleaseDetailPage({
|
|
|
572
572
|
}
|
|
573
573
|
),
|
|
574
574
|
highlightVideoUrl && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
575
|
-
|
|
575
|
+
_chunkMYLWEYWTcjs.Video,
|
|
576
576
|
{
|
|
577
577
|
url: highlightVideoUrl,
|
|
578
578
|
poster: highlightVideoThumbnail,
|
|
@@ -581,7 +581,7 @@ function ReleaseDetailPage({
|
|
|
581
581
|
)
|
|
582
582
|
] }),
|
|
583
583
|
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 }) }),
|
|
584
|
-
hasBreakingChanges && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
584
|
+
hasBreakingChanges && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMYLWEYWTcjs.Card, { className: "border-red-500 bg-red-500/10", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMYLWEYWTcjs.CardContent, { className: "p-6", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-3", children: [
|
|
585
585
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.AlertTriangle, { className: "h-6 w-6 text-red-500" }),
|
|
586
586
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { children: [
|
|
587
587
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "font-bold text-red-500 text-lg", children: "Breaking Changes" }),
|
|
@@ -589,7 +589,7 @@ function ReleaseDetailPage({
|
|
|
589
589
|
] })
|
|
590
590
|
] }) }) }),
|
|
591
591
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
592
|
-
|
|
592
|
+
_chunkMYLWEYWTcjs.ReleaseChangelogSection,
|
|
593
593
|
{
|
|
594
594
|
title: "Breaking Changes",
|
|
595
595
|
entries: breakingChanges || [],
|
|
@@ -600,7 +600,7 @@ function ReleaseDetailPage({
|
|
|
600
600
|
}
|
|
601
601
|
),
|
|
602
602
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
603
|
-
|
|
603
|
+
_chunkMYLWEYWTcjs.ReleaseChangelogSection,
|
|
604
604
|
{
|
|
605
605
|
title: "Features Added",
|
|
606
606
|
entries: featuresAdded || [],
|
|
@@ -610,7 +610,7 @@ function ReleaseDetailPage({
|
|
|
610
610
|
}
|
|
611
611
|
),
|
|
612
612
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
613
|
-
|
|
613
|
+
_chunkMYLWEYWTcjs.ReleaseChangelogSection,
|
|
614
614
|
{
|
|
615
615
|
title: "Bugs Fixed",
|
|
616
616
|
entries: bugFixed || [],
|
|
@@ -620,7 +620,7 @@ function ReleaseDetailPage({
|
|
|
620
620
|
}
|
|
621
621
|
),
|
|
622
622
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
623
|
-
|
|
623
|
+
_chunkMYLWEYWTcjs.ReleaseChangelogSection,
|
|
624
624
|
{
|
|
625
625
|
title: "Improvements",
|
|
626
626
|
entries: improvements || [],
|
|
@@ -666,7 +666,7 @@ function ReleaseDetailPage({
|
|
|
666
666
|
] }),
|
|
667
667
|
(_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: [
|
|
668
668
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-h5 tracking-[-0.28px] text-ods-text-secondary", children: "Related Links" }),
|
|
669
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
669
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMYLWEYWTcjs.Card, { className: "bg-ods-card border-ods-border p-6", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-4", children: [
|
|
670
670
|
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: [
|
|
671
671
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLWNPMLIHcjs.GitHubIcon, { className: "shrink-0", width: 24, height: 24, color: "var(--color-text-secondary)" }),
|
|
672
672
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-h4 text-ods-text-primary", children: "Github Release" }),
|
|
@@ -740,7 +740,7 @@ function ReleaseDetailPage({
|
|
|
740
740
|
// src/components/shared/product-release/release-detail-skeleton.tsx
|
|
741
741
|
|
|
742
742
|
function ReleaseDetailSkeleton() {
|
|
743
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
743
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSFETWAWGcjs.DetailPageSkeleton, { metadataColumns: 4, showImageGallery: true });
|
|
744
744
|
}
|
|
745
745
|
|
|
746
746
|
// src/components/shared/roadmap/use-roadmap-voting.ts
|
|
@@ -901,10 +901,10 @@ function RoadmapGridSingle({
|
|
|
901
901
|
// `useScrollToHash` in `roadmap-view.tsx` finds the card by id
|
|
902
902
|
// and scrolls.
|
|
903
903
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
904
|
-
|
|
904
|
+
_chunkMYLWEYWTcjs.RoadmapCard,
|
|
905
905
|
{
|
|
906
906
|
item,
|
|
907
|
-
id:
|
|
907
|
+
id: _chunkMYLWEYWTcjs.devSectionAnchorId.call(void 0, "roadmap", item.id),
|
|
908
908
|
userVote: getVote(item.id),
|
|
909
909
|
onVote: (voteType) => onVote(item.id, voteType),
|
|
910
910
|
isVoting: votingTasks.has(item.id)
|
|
@@ -984,7 +984,7 @@ function RoadmapGrid({
|
|
|
984
984
|
}, [hasActiveFilters, sortedQuartersKey, isInitialized, quartersToKeepClosed]);
|
|
985
985
|
if (items.length === 0) {
|
|
986
986
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
987
|
-
|
|
987
|
+
_chunk7CEEJGCFcjs.EmptyState,
|
|
988
988
|
{
|
|
989
989
|
type: "generic",
|
|
990
990
|
title: "No roadmap items",
|
|
@@ -1005,7 +1005,7 @@ function RoadmapGrid({
|
|
|
1005
1005
|
);
|
|
1006
1006
|
}
|
|
1007
1007
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1008
|
-
|
|
1008
|
+
_chunkMYLWEYWTcjs.Accordion,
|
|
1009
1009
|
{
|
|
1010
1010
|
type: "multiple",
|
|
1011
1011
|
value: expandedQuarters,
|
|
@@ -1015,13 +1015,13 @@ function RoadmapGrid({
|
|
|
1015
1015
|
const itemCount = _optionalChain([itemsByQuarter, 'access', _21 => _21[quarter], 'optionalAccess', _22 => _22.length]) || 0;
|
|
1016
1016
|
const isExpanded = expandedQuarters.includes(quarter);
|
|
1017
1017
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1018
|
-
|
|
1018
|
+
_chunkMYLWEYWTcjs.AccordionItem,
|
|
1019
1019
|
{
|
|
1020
1020
|
value: quarter,
|
|
1021
1021
|
id: `quarter-${quarter.replace(/\s+/g, "-").toLowerCase()}`,
|
|
1022
1022
|
className: "border-0",
|
|
1023
1023
|
children: [
|
|
1024
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1024
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMYLWEYWTcjs.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: [
|
|
1025
1025
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1026
1026
|
"h3",
|
|
1027
1027
|
{
|
|
@@ -1051,7 +1051,7 @@ function RoadmapGrid({
|
|
|
1051
1051
|
}
|
|
1052
1052
|
)
|
|
1053
1053
|
] }) }),
|
|
1054
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1054
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMYLWEYWTcjs.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,
|
|
1055
1055
|
RoadmapGridSingle,
|
|
1056
1056
|
{
|
|
1057
1057
|
items: itemsByQuarter[quarter],
|
|
@@ -1102,8 +1102,8 @@ function RoadmapGridSkeleton({ count = 4, showLeftMargin = true }) {
|
|
|
1102
1102
|
|
|
1103
1103
|
|
|
1104
1104
|
var DEFAULT_ENDPOINT2 = "/api/roadmap";
|
|
1105
|
-
var DEFAULT_SEARCH_PARAM_KEY2 =
|
|
1106
|
-
var DEFAULT_STATUS_PARAM_KEY2 =
|
|
1105
|
+
var DEFAULT_SEARCH_PARAM_KEY2 = _chunkMYLWEYWTcjs.DEV_SECTION_PARAM_KEYS.search;
|
|
1106
|
+
var DEFAULT_STATUS_PARAM_KEY2 = _chunkMYLWEYWTcjs.DEV_SECTION_PARAM_KEYS.status;
|
|
1107
1107
|
function RoadmapView({
|
|
1108
1108
|
endpoint = DEFAULT_ENDPOINT2,
|
|
1109
1109
|
initialItems,
|
|
@@ -1129,7 +1129,7 @@ function RoadmapView({
|
|
|
1129
1129
|
const items = _nullishCoalesce(_optionalChain([data, 'optionalAccess', _23 => _23.items]), () => ( []));
|
|
1130
1130
|
_chunkGPX5I7FTcjs.useScrollToHash.call(void 0, data, { headerOffset: _chunkGPX5I7FTcjs.STICKY_HEADER_OFFSET_PX });
|
|
1131
1131
|
if (error) {
|
|
1132
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1132
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMYLWEYWTcjs.LoadError, { message: "Failed to load roadmap.", onRetry: reload });
|
|
1133
1133
|
}
|
|
1134
1134
|
if (isLoading && !data) {
|
|
1135
1135
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, RoadmapGridSkeleton, { showLeftMargin });
|
|
@@ -1186,7 +1186,7 @@ function DeliveryTable({ items, isLoading = false }) {
|
|
|
1186
1186
|
"div",
|
|
1187
1187
|
{
|
|
1188
1188
|
className: "border-b border-ods-border last:border-b-0",
|
|
1189
|
-
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1189
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7CEEJGCFcjs.DeliveryRow, { item, id: _chunkMYLWEYWTcjs.devSectionAnchorId.call(void 0, "delivery", item.id) })
|
|
1190
1190
|
},
|
|
1191
1191
|
item.id
|
|
1192
1192
|
)
|
|
@@ -1198,8 +1198,8 @@ function DeliveryTable({ items, isLoading = false }) {
|
|
|
1198
1198
|
|
|
1199
1199
|
var DEFAULT_COMPLETED_ENDPOINT = "/api/delivery/completed";
|
|
1200
1200
|
var DEFAULT_IN_PROGRESS_ENDPOINT = "/api/delivery/in-progress";
|
|
1201
|
-
var DEFAULT_SEARCH_PARAM_KEY3 =
|
|
1202
|
-
var DEFAULT_TASK_TYPE_PARAM_KEY =
|
|
1201
|
+
var DEFAULT_SEARCH_PARAM_KEY3 = _chunkMYLWEYWTcjs.DEV_SECTION_PARAM_KEYS.search;
|
|
1202
|
+
var DEFAULT_TASK_TYPE_PARAM_KEY = _chunkMYLWEYWTcjs.DEV_SECTION_PARAM_KEYS.deliveryTaskType;
|
|
1203
1203
|
function DeliveryLists({
|
|
1204
1204
|
completedApiEndpoint = DEFAULT_COMPLETED_ENDPOINT,
|
|
1205
1205
|
inProgressApiEndpoint = DEFAULT_IN_PROGRESS_ENDPOINT,
|
|
@@ -1260,11 +1260,11 @@ function DeliveryLists({
|
|
|
1260
1260
|
const hasActiveFilters = searchQuery !== "" || taskTypeFilter !== "all";
|
|
1261
1261
|
const hasResults = showCompleted && filteredCompleted.length > 0 || showInProgress && filteredInProgress.length > 0;
|
|
1262
1262
|
if (error) {
|
|
1263
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1263
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMYLWEYWTcjs.LoadError, { message: error, onRetry: () => window.location.reload() }) });
|
|
1264
1264
|
}
|
|
1265
1265
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "w-full flex flex-col gap-[40px]", children: [
|
|
1266
1266
|
!isLoading && !hasResults && (hasActiveFilters ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1267
|
-
|
|
1267
|
+
_chunk7CEEJGCFcjs.EmptyState,
|
|
1268
1268
|
{
|
|
1269
1269
|
type: "search",
|
|
1270
1270
|
title: "No tasks found",
|
|
@@ -1279,7 +1279,7 @@ function DeliveryLists({
|
|
|
1279
1279
|
}
|
|
1280
1280
|
}
|
|
1281
1281
|
) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1282
|
-
|
|
1282
|
+
_chunk7CEEJGCFcjs.EmptyState,
|
|
1283
1283
|
{
|
|
1284
1284
|
type: "generic",
|
|
1285
1285
|
title: "No tasks available",
|
|
@@ -1381,7 +1381,7 @@ function LegalDocumentPage({
|
|
|
1381
1381
|
initialData = null,
|
|
1382
1382
|
initialLastUpdatedLabel = null,
|
|
1383
1383
|
apiEndpoint,
|
|
1384
|
-
MarkdownRenderer =
|
|
1384
|
+
MarkdownRenderer = _chunkMYLWEYWTcjs.RichMarkdownRenderer,
|
|
1385
1385
|
backButton,
|
|
1386
1386
|
shell = true
|
|
1387
1387
|
}) {
|
|
@@ -1391,10 +1391,10 @@ function LegalDocumentPage({
|
|
|
1391
1391
|
label: _nullishCoalesce(_optionalChain([backButton, 'optionalAccess', _26 => _26.label]), () => ( "Back to home")),
|
|
1392
1392
|
onClick: () => router.push(_nullishCoalesce(_optionalChain([backButton, 'optionalAccess', _27 => _27.href]), () => ( "/")))
|
|
1393
1393
|
};
|
|
1394
|
-
const fallbackLastUpdatedLabel = _optionalChain([data, 'optionalAccess', _28 => _28.lastSynced]) != null ?
|
|
1394
|
+
const fallbackLastUpdatedLabel = _optionalChain([data, 'optionalAccess', _28 => _28.lastSynced]) != null ? _chunkMYLWEYWTcjs.formatLegalDate.call(void 0, data.lastSynced) : null;
|
|
1395
1395
|
const effectiveLastUpdatedLabel = _nullishCoalesce(initialLastUpdatedLabel, () => ( fallbackLastUpdatedLabel));
|
|
1396
1396
|
const subtitle = effectiveLastUpdatedLabel ? `Last Updated: ${effectiveLastUpdatedLabel}` : fallbackDescription;
|
|
1397
|
-
const inner = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1397
|
+
const inner = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkMYLWEYWTcjs.PageLayout, { title, subtitle, backButton: backCfg, titleSize: "h1", children: [
|
|
1398
1398
|
_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: [
|
|
1399
1399
|
"Source: ",
|
|
1400
1400
|
data.sourceFile
|
|
@@ -1441,7 +1441,7 @@ function LegalDocumentPage({
|
|
|
1441
1441
|
] })
|
|
1442
1442
|
] }) }) }) }) })
|
|
1443
1443
|
] });
|
|
1444
|
-
return shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1444
|
+
return shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMYLWEYWTcjs.PageShell, { children: inner }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: inner });
|
|
1445
1445
|
}
|
|
1446
1446
|
|
|
1447
1447
|
|
|
@@ -1461,4 +1461,4 @@ function LegalDocumentPage({
|
|
|
1461
1461
|
|
|
1462
1462
|
|
|
1463
1463
|
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;
|
|
1464
|
-
//# sourceMappingURL=chunk-
|
|
1464
|
+
//# sourceMappingURL=chunk-V5QI32ZA.cjs.map
|