@pantheon-systems/pcc-react-sdk
Version:
Pantheon Content Publisher React SDK
2 lines • 9.95 kB
JavaScript
import {flattenDocumentTabs,findTab}from'@pantheon-systems/pcc-sdk-core';import D,{useMemo,useEffect,isValidElement,Suspense,Component}from'react';import st from'react-markdown';import at from'rehype-raw';import ct from'remark-heading-id';import {visit}from'unist-util-visit';import {jsx,jsxs}from'react/jsx-runtime';import q from'lodash';var Z=Object.defineProperty,x=Object.defineProperties;var F=Object.getOwnPropertyDescriptors;var J=Object.getOwnPropertySymbols;var _=Object.prototype.hasOwnProperty,tt=Object.prototype.propertyIsEnumerable;var W=(t,n,r)=>n in t?Z(t,n,{enumerable:true,configurable:true,writable:true,value:r}):t[n]=r,m=(t,n)=>{for(var r in n||(n={}))_.call(n,r)&&W(t,r,n[r]);if(J)for(var r of J(n))tt.call(n,r)&&W(t,r,n[r]);return t},C=(t,n)=>x(t,F(n));var w=t=>t==null?"":typeof t=="string"||typeof t=="number"||typeof t=="bigint"?t.toString():typeof t=="boolean"?"":Array.isArray(t)?t.map(w).join(""):isValidElement(t)?w(t.props.children):"";var k=["staging.cdn.content.pantheon.io","cdn.staging.content.pantheon.io","cdn.content.pantheon.io","cdn.prod.pcc.pantheon.io","cdn.staging.pcc.pantheon.io"];var I=class extends Component{constructor(n){super(n),this.state={hasError:false};}static getDerivedStateFromError(){return {hasError:true}}componentDidCatch(n){console.error(n);}render(){return this.state.hasError?jsx("div",{children:"Something went wrong while rendering this smart component."}):this.props.children}},ot=({children:t})=>jsx(I,{children:jsx(Suspense,{fallback:jsx("div",{children:"Loading smart component..."}),children:t})}),A=t=>{let n=r=>jsx(ot,{children:jsx(t,m({},r))});return n.displayName=`WithSmartComponentErrorBoundary(${it(t)})`,n};function it(t){return t.displayName||t.name||"Component"}var dt=({children:t,smartComponentMap:n,componentMap:r,disableDefaultErrorBoundaries:o,cdnURLOverride:i})=>jsx(st,{rehypePlugins:[at,ut,ft(i)],remarkPlugins:[ct],components:C(m({},r),{"pcc-component":({node:a})=>{if(!a)return console.warn("No replacement found"),null;let{attrs:c,type:s}=a.properties;if(n&&n[s]){let{reactComponent:u}=n[s],e=pt(c);return u?jsx("div",{children:o?jsx(u,m({},e)):A(u)(e)}):jsxs("div",{children:["Error: Cannot render ",s," because it was provided without a reactComponent property."]})}return jsx("div",{className:"pcc-component",children:jsxs("u",{children:["PCC Component - ",s]})})}}),children:t});function pt(t){try{let n;if(typeof Buffer!="undefined"?n=Buffer.from(t,"base64").toString("utf8"):typeof atob!="undefined"&&(n=atob(t)),!n)throw new Error("Failed to decode base64 string");return JSON.parse(n)}catch(n){return console.error(n),{}}}function ut(){return t=>{visit(t,{type:"element",tagName:"pcc-component"},(n,r,o)=>{o&&"tagName"in o&&o.tagName!=="div"&&(o.tagName="div");});}}function ft(t){return t?()=>n=>{visit(n,"element",r=>{try{if(r.tagName==="img"&&r.properties.src){let o=r.properties.src,i=new URL(o);k.includes(i.hostname)&&(typeof t=="function"?r.properties.src=t(i.toString()):(i.hostname=t,r.properties.src=i.toString()));}}catch(o){}});}:()=>n=>n}var K=dt;var lt={for:"htmlFor",class:"className",cellpadding:"cellPadding",cellspacing:"cellSpacing",classname:"className",colspan:"colSpan",crossorigin:"crossOrigin",htmlfor:"htmlFor",marginheight:"marginHeight",marginwidth:"marginWidth",maxlength:"maxLength",minlength:"minLength",readonly:"readOnly",rowspan:"rowSpan",srcdoc:"srcDoc",srclang:"srcLang",srcset:"srcSet"},V=function(t){return Object.keys(t).reduce((n,r)=>{let o=r.toLowerCase(),i=t[r];return C(m({},n),{[lt[o]||o]:i})},{})};var mt=t=>{let n=(t==null?void 0:t.split("-"))||[];return n.length===1?n[0]:n[0]+n.slice(1).map(r=>r[0].toUpperCase()+r.slice(1)).join("")},j=t=>{if(!t||t.length<1)return;let n={};return t.forEach(r=>{let[o,i]=r.split(":");if(!(!o&&!i)){if(o&&i){let a=mt(o.trim());n[a]=i.trim();return}switch(o){case "underline":n.textDecoration="underline";break;case "line-through":n.textDecoration="line-through";break;case "italic":n.fontStyle="italic";break;case "bold":n.fontWeight="bold";break;case "strike-through":n.textDecoration="line-through";break;case "superscript":n.verticalAlign="super";break;case "subscript":n.verticalAlign="sub";break;}}}),n};var z=({element:t,smartComponentMap:n,componentMap:r,disableAllStyles:o,preserveImageStyles:i,disableDefaultErrorBoundaries:a,renderImageCaptions:c,cdnURLOverride:s})=>{var P,b,S,v,g,y;let u=(b=(P=t.children)==null?void 0:P.map((p,l)=>D.createElement(z,{key:l,element:C(m({},p),{prevNode:t.children[l-1],nextNode:t.children[l+1]}),smartComponentMap:n,componentMap:r,disableAllStyles:o,preserveImageStyles:i,disableDefaultErrorBoundaries:a,renderImageCaptions:c,cdnURLOverride:s})))!=null?b:[];if(t.tag==="component"){let p=(S=t.type)==null?void 0:S.toUpperCase();if(!p)return null;let l=n==null?void 0:n[p];if(l)return l.reactComponent?a?D.createElement(l.reactComponent,t.attrs):A(l.reactComponent)(t.attrs):jsxs("div",{children:["Error: Cannot render ",p," because it was provided without a reactComponent property."]})}if(t.tag==="style")return o?null:D.createElement("style",{dangerouslySetInnerHTML:{__html:t.data}});let e=[t.data,...u].filter(Boolean),B=t.tag==="title"?"h1":t.tag,d=r==null?void 0:r[t.tag],N=o===true&&(t.tag!=="img"||!i)&&(typeof d=="string"||d==null),h=[],f=N?void 0:j(t==null?void 0:t.style);if(L(t)&&u.length===1){h.push("pantheon-img-container"),(f==null?void 0:f.float)==="left"?h.push("pantheon-img-container-breakleft"):(f==null?void 0:f.float)==="right"?h.push("pantheon-img-container-breakright"):(f==null?void 0:f.clear)==="both"?h.push("pantheon-img-container-breakboth"):(h.push("pantheon-img-container-inline"),(t.prevNode==null||!L(t.prevNode))&&(t.nextNode==null||!L(t.nextNode))&&h.push("pantheon-img-container-alone"));let p=$(t)?t.children[0]:t.children[0].children[0],l=(g=(v=p.attrs)==null?void 0:v.title)==null?void 0:g.trim();if(p.attrs.src&&s)try{let E=new URL(p.attrs.src);k.includes(E.hostname)&&(typeof s=="function"?p.attrs.src=s(E.toString()):(E.hostname=s,p.attrs.src=E.toString()));}catch(E){}c!==false&&(l!=null&&l.length)&&e.push(jsx("span",{style:{width:"100%",display:"flex",justifyContent:"center",fontSize:".75rem"},className:"pantheon-caption",children:l}));}return D.createElement(d||B,m({style:f},V(C(m({},t.attrs),{class:[(y=t.attrs)==null?void 0:y.class,...h].filter(Boolean).join(" ")}))),...e.length?e:[])};function $(t){var n;return t.tag==="span"&&((n=t.children)==null?void 0:n[0].tag)==="img"&&t.children.length===1}function L(t){var n,r,o,i;return t.tag==="span"&&($(t)||((n=t.children)==null?void 0:n[0].tag)==="span"&&t.children.length===1&&((o=(r=t.children)==null?void 0:r[0].children)==null?void 0:o[0].tag)==="img"&&((i=t.children[0].children)==null?void 0:i.length)===1)}var U=z;function O(t){var a,c;if(!(t!=null&&t.resolvedContent)||(t==null?void 0:t.contentType)==="TEXT_MARKDOWN")return null;let r=typeof t.resolvedContent=="string"?JSON.parse(t.resolvedContent):t.resolvedContent,i=(Array.isArray(r)?q.flatMap(r,flattenDocumentTabs):r.children).find(s=>s.tag==="title");if(i!=null){let s=i.children?q.flatMapDeep(i.children,u=>u.data):[];return i.data+s.join("")}else return ((a=t==null?void 0:t.metadata)==null?void 0:a.title)!=null&&typeof((c=t==null?void 0:t.metadata)==null?void 0:c.title)=="string"?t.metadata.title:t.title||""}function G(t){return useMemo(()=>O(t)||"",[t])}function Nt(t){if(typeof t!="string")return t;try{return JSON.parse(t)}catch(n){return t}}function Tt(t){var c;let n=t.findIndex(s=>["h1","h2","h3","h4","h5","h6","h7","title"].includes(s.tag)),r=t.findIndex(s=>s.tag==="p"),o=n===-1?r:n;if(o<0)return {titleContent:null,bodyNodes:t};let i=(c=t[o])!=null?c:null,a=t.filter((s,u)=>u!==o);return {titleContent:i,bodyNodes:a}}var vt=({article:t,tabId:n,bodyClassName:r,containerClassName:o,headerClassName:i,renderTitle:a,smartComponentMap:c,componentMap:s,renderBody:u,__experimentalFlags:e})=>{useEffect(()=>{a&&console.warn("PCC Deprecation Warning: ArticleRenderer's renderTitle will no longer be supported in a future release.");},[a]);let B=t==null?void 0:t.contentType,d=useMemo(()=>t!=null&&t.resolvedContent?Nt(t.resolvedContent):null,[t==null?void 0:t.resolvedContent]),N=useMemo(()=>{var y,p;if(!d)return null;let g=n!=null&&((y=findTab(d,n))==null?void 0:y.documentTab)||d;return n==null&&typeof d=="object"&&(g==null?void 0:g.children)==null?Array.isArray(d)?(p=d[0])==null?void 0:p.documentTab:d==null?void 0:d.documentTab:g},[n,d]);if(!N)return null;if(B==="TEXT_MARKDOWN")return jsx("div",{className:o,children:N?jsx(K,{smartComponentMap:c,componentMap:s,disableDefaultErrorBoundaries:!!(e!=null&&e.disableDefaultErrorBoundaries),cdnURLOverride:e==null?void 0:e.cdnURLOverride,children:N}):jsx("span",{children:"No content to display"})});let h=N.children||[],{titleContent:f,bodyNodes:P}=Tt(h),b=null;a!=null&&f&&(b=D.createElement(U,{element:f,componentMap:s,smartComponentMap:c,disableAllStyles:!!(e!=null&&e.disableAllStyles),preserveImageStyles:!!(e!=null&&e.preserveImageStyles),disableDefaultErrorBoundaries:!!(e!=null&&e.disableDefaultErrorBoundaries),renderImageCaptions:(e==null?void 0:e.renderImageCaptions)!==false,cdnURLOverride:e==null?void 0:e.cdnURLOverride}));let S=a!=null?P:h,v=jsx("div",{className:r,children:S==null?void 0:S.map((g,y)=>D.createElement(U,{key:y,element:C(m({},g),{prevNode:S[y-1],nextNode:S[y+1]}),smartComponentMap:c,componentMap:s,disableAllStyles:!!(e!=null&&e.disableAllStyles),preserveImageStyles:!!(e!=null&&e.preserveImageStyles),disableDefaultErrorBoundaries:!!(e!=null&&e.disableDefaultErrorBoundaries),renderImageCaptions:(e==null?void 0:e.renderImageCaptions)!==false,cdnURLOverride:e==null?void 0:e.cdnURLOverride}))});return jsxs("div",{className:o,children:[b!=null?jsx("div",{className:i,children:a?a(b,w(b)):b}):null,u?u(v):v]})},Et=vt;export{Et as ArticleRenderer,O as getArticleTitle,G as useArticleTitle};//# sourceMappingURL=index.mjs.map
//# sourceMappingURL=index.mjs.map