@enonic/react-components
Version:
Library of React components for handling Enonic XP data and page components
1 lines • 16.3 kB
JavaScript
"use strict";function e(e,t){if(t==null||t>e.length)t=e.length;for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function t(e){if(Array.isArray(e))return e}function r(e,t){if(!(e instanceof t)){throw new TypeError("Cannot call a class as a function")}}function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||false;n.configurable=true;if("value"in n)n.writable=true;Object.defineProperty(e,n.key,n)}}function o(e,t,r){if(t)n(e.prototype,t);if(r)n(e,r);return e}function a(e,t,r){if(t in e){Object.defineProperty(e,t,{value:r,enumerable:true,configurable:true,writable:true})}else{e[t]=r}return e}function c(e,t){var r=e==null?null:typeof Symbol!=="undefined"&&e[Symbol.iterator]||e["@@iterator"];if(r==null)return;var n=[];var o=true;var a=false;var c,i;try{for(r=r.call(e);!(o=(c=r.next()).done);o=true){n.push(c.value);if(t&&n.length===t)break}}catch(e){a=true;i=e}finally{try{if(!o&&r["return"]!=null)r["return"]()}finally{if(a)throw i}}return n}function i(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function l(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};var n=Object.keys(r);if(typeof Object.getOwnPropertySymbols==="function"){n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))}n.forEach(function(t){a(e,t,r[t])})}return e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);if(t){n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})}r.push.apply(r,n)}return r}function m(e,t){t=t!=null?t:{};if(Object.getOwnPropertyDescriptors){Object.defineProperties(e,Object.getOwnPropertyDescriptors(t))}else{s(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function u(e,t){if(e==null)return{};var r={},n,o,a;if(typeof Reflect!=="undefined"&&Reflect.ownKeys){n=Reflect.ownKeys(e);for(a=0;a<n.length;a++){o=n[a];if(t.indexOf(o)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(e,o))continue;r[o]=e[o]}return r}r=d(e,t);if(Object.getOwnPropertySymbols){n=Object.getOwnPropertySymbols(e);for(a=0;a<n.length;a++){o=n[a];if(t.indexOf(o)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(e,o))continue;r[o]=e[o]}}return r}function d(e,t){if(e==null)return{};var r={},n=Object.getOwnPropertyNames(e),o,a;for(a=0;a<n.length;a++){o=n[a];if(t.indexOf(o)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(e,o))continue;r[o]=e[o]}return r}function p(e,r){return t(e)||c(e,r)||v(e,r)||i()}function f(e){"@swc/helpers - typeof";return e&&typeof Symbol!=="undefined"&&e.constructor===Symbol?"symbol":typeof e}function v(t,r){if(!t)return;if(typeof t==="string")return e(t,r);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor)n=t.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return e(t,r)}Object.defineProperty(exports,"__esModule",{value:true});function y(e){if(e&&e.__esModule){return e}else{var t={};if(e!=null){for(var r in e){if(Object.prototype.hasOwnProperty.call(e,r)){t[r]=e[r]}}}t.default=e;return t}}function g(e){return e&&e.__esModule?e:{default:e}}var h=require("./chunk-TFRQUM3V.cjs");var b=require("./chunk-TFI3ZOG4.cjs");var x=require("react/jsx-runtime");function j(e){var t=e.comment;return x.jsx.call(void 0,"div",{dangerouslySetInnerHTML:{__html:"\x3c!--".concat(t,"--\x3e")}})}function O(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:4;return JSON.stringify(e,t,r)}function k(e){var t=e.component,r=e.data,n=e.common,o=e.meta;var a=t.descriptor,c=o.mode,i=o.componentRegistry;if(!a)return;var l=i.getLayout(a);if(!l)return x.jsx.call(void 0,h.b,{mode:c,children:"Layout descriptor:".concat(a," not registered in ComponentRegistry!")});var s=l.View;return s?x.jsx.call(void 0,s,{component:t,data:r,common:n,meta:o}):x.jsx.call(void 0,h.b,{mode:c,children:"No View found for layout descriptor:".concat(a," in ComponentRegistry!")})}function w(e){var t=e.component,r=e.data,n=e.common,o=e.meta;var a=t.descriptor,c=o.mode,i=o.componentRegistry;if(!a)return;var l=i.getPage(a);if(!l)return x.jsx.call(void 0,h.b,{mode:c,children:"Page descriptor:".concat(a," not registered in ComponentRegistry!")});var s=l.View;return s?x.jsx.call(void 0,s,{component:t,data:r,common:n,meta:o}):x.jsx.call(void 0,h.b,{mode:c,children:"No View found for page descriptor:".concat(a," in ComponentRegistry!")})}function R(e){var t=e.component,r=e.data,n=e.common,o=e.meta;var a=t.descriptor,c=o.mode,i=o.componentRegistry;if(!a)return;var l=i.getPart(a);if(!l)return x.jsx.call(void 0,h.b,{children:"Part descriptor:".concat(a," not registered in ComponentRegistry!"),mode:c});var s=l.View;return s?x.jsx.call(void 0,s,{component:t,data:r,common:n,meta:o}):x.jsx.call(void 0,h.b,{children:"No View found for part descriptor:".concat(a," in ComponentRegistry!"),mode:c})}function T(e){var t=e.data;return!t||!t.path?null:x.jsx.call(void 0,j,{comment:"#COMPONENT ".concat(t.path)})}var _=require("html-react-parser/lib/index");var C=g(_);var P;(function(e){e.Root="root",e.Text="text",e.Directive="directive",e.Comment="comment",e.Script="script",e.Style="style",e.Tag="tag",e.CDATA="cdata",e.Doctype="doctype"})(P||(P={}));var M=P.Root,S=P.Text,I=P.Directive,L=P.Comment,N=P.Script,E=P.Style,A=P.Tag,D=P.CDATA,V=P.Doctype;function B(e){if(!e)return{};var t={};return e.split(";").forEach(function(e){var r=p(e.trim().split(":"),2),n=r[0],o=r[1];n&&o&&(t[n.replace(/-([a-z])/g,function(e,t){return t.toUpperCase()})]=o)}),t}var z=require("react");var U=y(z);function q(e){var t=e.children,r=e.mode;try{return x.jsx.call(void 0,x.Fragment,{children:t})}catch(e){return h.c.call(void 0,r)({error:e})}}function F(e){var t=e.children,r=e.mode;if((typeof document==="undefined"?"undefined":f(document))>"u")return x.jsx.call(void 0,U.Suspense,{fallback:null,children:x.jsx.call(void 0,q,{mode:r,children:t})});{var n=U.lazy(function(){return Promise.resolve().then(function(){return y(require("./ErrorBoundary.client-CLPJFVRS.cjs"))})});return x.jsx.call(void 0,U.Suspense,{fallback:null,children:x.jsx.call(void 0,n,{mode:r,children:t})})}}function H(e){var t=e.el,r=e.Image,n=e.data,o=n.images,a=e.meta,c=a.mode,i=e.replacer,s=e.component,d=e.common,p=e.Link,f=e.Macro,v=e.createReplacer,y=u(e,["el","Image","data","meta","replacer","component","common","Link","Macro","createReplacer"]);if(!o||!o.length)return x.jsx.call(void 0,h.a,{children:"Can't replace image, when there are no images in the data object!"});var g=t.attribs[b.c];if(!g)return x.jsx.call(void 0,h.a,{children:"Image element has no data-image-ref attibute!"});var j=o.find(function(e){return e.ref===g});if(!j)return x.jsxs.call(void 0,h.a,{children:["Unable to find image with ref ",g," in images object!"]});var O=t.attribs,k=O.alt,w=O.sizes,R=O.src,T=O.srcset,_=O.style,C=_===void 0?"":_,P=B(C),M=j.image,S=j.style,I=m(l({},y),{alt:k,image:M,imageStyle:S,sizes:w,src:R,srcSet:T,style:P});return x.jsx.call(void 0,F,{mode:c,children:x.jsx.call(void 0,r,l({},I))})}function J(e){var t=e.createReplacer,r=e.data,n=e.el,o=e.Image,a=e.Link,c=e.Macro,i=e.meta,s=e.replacer,d=e.component,p=e.common,f=u(e,["createReplacer","data","el","Image","Link","Macro","meta","replacer","component","common"]);var v=n.attribs,y=v.href,g=v[b.d],j=v.target,O=v.title;if(!g)return;if(!y)return x.jsx.call(void 0,h.a,{children:"Link element has no href attribute!"});var k=r.links;if(!k||!k.length)return x.jsx.call(void 0,h.a,{children:"Can't replace link, when there are no links in the data object!"});var w=k.find(function(e){return e.ref===g});if(!w)return x.jsxs.call(void 0,h.a,{children:["Unable to find link with ref ",g," in links object!"]});var R=w.content,T=w.media,C=w.uri,P=m(l({},f),{content:R,href:y,media:T,target:j,title:O,uri:C}),M=_.domToReact.call(void 0,n.children,{replace:t(m(l({},f),{data:r,Image:o,Link:a,Macro:c,meta:i,common:p,component:d,replacer:s}))}),S=i.mode;return x.jsx.call(void 0,F,{mode:S,children:x.jsx.call(void 0,a,m(l({},P),{children:M}))})}var G=function(e){if(!e||e.trim().length===0)return"";var t=e.replace(/([^0-9A-Za-z])+/g,"_");return t.length>0&&/[0-9]/.test(t.charAt(0))&&(t="_"+t),t};function K(e){var t=e.createReplacer,r=e.el,n=u(e,["createReplacer","el"]),o=r.attribs[b.e];if(!o)return x.jsx.call(void 0,h.a,{children:"Macro element has no data-macro-ref attribute!"});var a=n.data,c=n.common,i=n.component,s=n.meta,d=n.Macro,p=n.replacer,f=n.Link,v=n.Image,y=u(n,["data","common","component","meta","Macro","replacer","Link","Image"]),g=a.macroComponents||a.macros;if(!g||!g.length)return x.jsx.call(void 0,h.a,{children:"Can't replace macro, when there are no macros in the data object!"});var j=g.find(function(e){return"component"in e?e.component.ref===o:e.ref===o});if(!j)return x.jsxs.call(void 0,h.a,{children:["Unable to find macro with ref ",o," in macros object!"]});var O,k;"component"in j?(O=j.component,k=j.data):(O={ref:j.ref,descriptor:j.descriptor,name:j.name,type:"macro"},k=j.config[G(j.name)]);var w=m(l({},y),{component:O,common:c,meta:s,data:k}),R=_.domToReact.call(void 0,r.children,{replace:t(n)}),T=s.componentRegistry,C=s.mode;if(T){var P=T.getMacro(O.descriptor);if(P){var M=P.View;return x.jsx.call(void 0,M,m(l({},w),{children:R}))}}return x.jsx.call(void 0,F,{mode:C,children:x.jsx.call(void 0,d,m(l({},w),{children:R}))})}function Q(e){return function(t){if(t.type!==P.Tag)return t;var r=t;switch(r.tagName){case"img":return H(m(l({},e),{el:r,createReplacer:Q}));case"a":return J(m(l({},e),{el:r,createReplacer:Q}));case b.b:return K(m(l({},e),{el:r,createReplacer:Q}));default:var n=e.replacer,o=e.Link,a=e.Macro,c=e.Image,i=u(e,["replacer","Link","Macro","Image"]);if(n){var s=n(m(l({},i),{el:r}));if(s)return s}}return r}}var X=function(e){var t=e.alt,r=e.sizes,n=e.src,o=e.srcSet,a=e.style;return x.jsx.call(void 0,"img",l({},{alt:t,sizes:r,src:n,srcSet:o,style:a}))};var Z=function(e){var t=e.content,r=e.media,n=e.uri,o=u(e,["content","media","uri"]);return x.jsx.call(void 0,"a",l({},o))};function Y(e){var t=e.children,r=e.meta,n=e.data,o=e.common,a=e.component,c=u(e,["children","meta","data","common","component"]);var i=a.name,s=a.descriptor,d=r.mode,p=r.componentRegistry;if(!p)return x.jsx.call(void 0,h.b,{mode:d,children:"Can't render macro \"".concat(s,'". Macro component or componentRegistry should be provided to RichText.')});var f=p.getMacro(i);if(!f)return x.jsx.call(void 0,h.b,{mode:d,children:'Macro "'.concat(s,'" is not registered in ComponentRegistry!')});var v=f.View;return v?x.jsx.call(void 0,v,m(l({},c),{meta:r,component:a,data:n,common:o,children:t})):x.jsx.call(void 0,h.b,{mode:d,children:'No View found for macro "'.concat(s,'" in ComponentRegistry!')})}function $(e){var t=e.tag,r=e.className,n=e.Image,o=n===void 0?X:n,a=e.Link,c=a===void 0?Z:a,i=e.Macro,s=i===void 0?Y:i,d=e.data,p=u(e,["tag","className","Image","Link","Macro","data"]);return x.jsx.call(void 0,t||"section",{className:r,children:d.processedHtml?(C.default.default||(0,C.default))(d.processedHtml,{replace:Q(m(l({},p),{data:d,Image:o,Link:c,Macro:s}))}):""})}var W=function(e){var t=e.component,r=e.data,n=e.common,o=e.meta;var a=o.mode,c=a==="edit"?"text":void 0;if(!r)return a==="edit"||a==="inline"||a==="admin"?x.jsxs.call(void 0,h.b,{"data-portal-component-type":c,mode:a,children:["Text component missing props: ",O(t)]}):(console.warn("BaseText: Text component missing props:",O(t)),x.jsx.call(void 0,T,{data:t}));var i=r.as,l=r.data;return x.jsx.call(void 0,$,{tag:i,data:l,meta:o,component:t,common:n})};var ee=function(e){var t=e.component,r=e.data,n=e.common,o=e.meta;var a=t.contentType,c=o.mode,i=o.componentRegistry,l=i.getContentType(a);if(!l)return x.jsx.call(void 0,h.b,{mode:c,children:"ContentType:".concat(a," not registered in ComponentRegistry!")});var s=l.View;return s?x.jsx.call(void 0,s,{component:t,data:r,common:n,meta:o}):x.jsx.call(void 0,h.b,{mode:c,children:"No View found for contentType:".concat(a," in ComponentRegistry!")})};var et=function(e){var t=e.mode,r=e.type,n=e.children;if(t!="edit")return n;var o=r==="part"||r==="fragment"||r==="text"||r==="layout"||r==="page",a={};return o&&(a["data-portal-component-type"]=r),n?x.jsx.call(void 0,"div",m(l({},a),{children:n})):x.jsx.call(void 0,"div",l({},a))};function er(e){var t=e.component,r=e.data,n=e.common,o=e.meta;var a=o.mode,c=o.componentRegistry;if(!c)return console.warn("BaseComponent componentRegistry missing! with component:",O(t)),x.jsx.call(void 0,T,{data:t});var i=t.type;if(!i||!Object.values(b.f).includes(i))return console.error("BaseComponent unknown component type:",O(t)),x.jsx.call(void 0,T,{data:t});var l;switch(i){case"part":l=x.jsx.call(void 0,R,{data:r,component:t,common:n,meta:o});break;case"layout":l=x.jsx.call(void 0,k,{data:r,component:t,common:n,meta:o});break;case"page":l=x.jsx.call(void 0,w,{data:r,component:t,common:n,meta:o});break;case"contentType":l=x.jsx.call(void 0,ee,{data:r,component:t,common:n,meta:o});break;case"text":{l=x.jsx.call(void 0,W,{data:r,component:t,common:n,meta:o});break}case"error":{l=x.jsx.call(void 0,h.b,{mode:a,html:t.html});break}case"fragment":break}return x.jsx.call(void 0,et,{type:i,mode:a,children:l})}var en=/*#__PURE__*/function(){function e(){r(this,e);b.a.call(void 0,this,"_contentTypes",{});b.a.call(void 0,this,"_pages",{});b.a.call(void 0,this,"_parts",{});b.a.call(void 0,this,"_layouts",{});b.a.call(void 0,this,"_macros",{})}o(e,[{key:"addContentType",value:function e(e,t){this._contentTypes[e]=t}},{key:"addMacro",value:function e(e,t){this._macros[e]=t}},{key:"addLayout",value:function e(e,t){this._layouts[e]=t}},{key:"addPage",value:function e(e,t){this._pages[e]=t}},{key:"addPart",value:function e(e,t){this._parts[e]=t}},{key:"getContentType",value:function e(e){return this._contentTypes[e]}},{key:"getLayout",value:function e(e){return this._layouts[e]}},{key:"getMacro",value:function e(e){return this._macros[e]}},{key:"getPage",value:function e(e){return this._pages[e]}},{key:"getPart",value:function e(e){return this._parts[e]}},{key:"hasContentType",value:function e(e){return this._contentTypes[e]!==void 0}},{key:"hasMacro",value:function e(e){return this._macros[e]!==void 0}},{key:"hasLayout",value:function e(e){return this._layouts[e]!==void 0}},{key:"hasPage",value:function e(e){return this._pages[e]!==void 0}},{key:"hasPart",value:function e(e){return this._parts[e]!==void 0}}]);return e}();function eo(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if((typeof e==="undefined"?"undefined":f(e))=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(r=eo(e[t]))&&(n&&(n+=" "),n+=r)}else for(r in e)e[r]&&(n&&(n+=" "),n+=r);return n}function ea(){for(var e,t,r=0,n="",o=arguments.length;r<o;r++)(e=arguments[r])&&(t=eo(e))&&(n&&(n+=" "),n+=t);return n}var ec=ea;var ei=function(e){var t=e.as,r=e.className,n=e.common,o=e.meta,a=e.data,c=a===void 0?[]:a,i=e.name;if(!(i||"").trim())throw console.error("<Region NO_NAME> name: ".concat(JSON.stringify(i))),Error("Can't render <Region> without a 'name' prop.");return x.jsx.call(void 0,t||"div",{className:ec("xp-region",r),"data-portal-region":i,children:c.map(function(e,t){return x.jsx.call(void 0,er,{component:e.component,data:e.data,meta:o,common:n},t)})})};function el(e){var t=e.common,r=e.component,n=e.meta;var o;if("regions"in r)o=r.regions;else return console.warn('Regions: component type "'.concat(r.type,'" is not supported. Expected "layout" or "page".')),null;return Object.keys(o).map(function(e,r){return x.jsx.call(void 0,ei,{data:o[e].components,common:t,meta:n,name:e},"region-".concat(r,"-").concat(e))})}exports.BaseComponent=er;exports.BaseContentType=ee;exports.BaseLayout=k;exports.BaseMacro=Y;exports.BasePage=w;exports.BasePart=R;exports.BaseText=W;exports.COMPONENT_DATA_TYPE=b.f;exports.ComponentRegistry=en;exports.ErrorComponent=h.a;exports.HtmlComment=j;exports.Image=X;exports.Link=Z;exports.Region=ei;exports.Regions=el;exports.RichText=$;exports.XP_REQUEST_MODE=b.g;exports.XpFallback=T;exports.cssToReactStyle=B;exports.sanitizeGraphqlName=G;