jamespot-react-core 1.1.117 → 1.1.118

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.
@@ -0,0 +1,235 @@
1
+ "use strict";(self.webpackChunkReactCore=self.webpackChunkReactCore||[]).push([[562],{562:(e,t,n)=>{n.r(t),n.d(t,{DisplayForm:()=>m,EditorsPortal:()=>Ne,Empty:()=>g,TwoColLayout:()=>w,WidgetList:()=>de,WidgetWrapperCore:()=>ee});var i=n(363),l=n.n(i),o=n(230),a=n(185),r=n(754),c=n.n(r),s=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var l=0;for(i=Object.getOwnPropertySymbols(e);l<i.length;l++)t.indexOf(i[l])<0&&Object.prototype.propertyIsEnumerable.call(e,i[l])&&(n[i[l]]=e[i[l]])}return n};const d=c().form`
2
+ ${e=>e.stretch&&"\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n "}
3
+ `,u=c().div`
4
+ ${e=>e.stretch&&"\n flex: 1;\n"}
5
+ `,m=i.forwardRef(((e,t)=>{const n=i.useRef(null),[l,r]=(0,a.GF)(e.fields,e.type),c=(0,o.useForm)({defaultValues:Object.assign(Object.assign({},r),e.defaultValues),criteriaMode:"all"}),{handleSubmit:m,control:g,reset:p}=c,E=s(c,["handleSubmit","control","reset"]);return i.useImperativeHandle(t,(()=>Object.assign(Object.assign({},E),{handleSubmit:m,control:g,reset:()=>{var e;null===(e=null==n?void 0:n.current)||void 0===e||e.scrollTo(0,0),p()}})),[]),i.createElement(d,{stretch:e.stretch,onSubmit:m(e.onSubmit),ref:n},i.createElement(u,{stretch:e.stretch},l.map((t=>{var{Input:n}=t,l=s(t,["Input"]);return i.createElement(n,Object.assign({key:l.name,control:g},l,{dataCy:`${e.dataCy}-${l.name}`,readOnly:e.readOnly}))})),e.extraInputs&&e.extraInputs(g)),e.buttons)})),g=()=>i.createElement(i.Fragment,null);var p=n(248),E=n(181),f=n(556);const y=f.default.registry.getLazyComponent("Container"),v=f.default.registry.getLazyComponent("AppColumn"),h=f.default.registry.getLazyComponent("MainColumn");function w({extensionRoute:e,routes:t,description:n,mode:l="center"}){var o;const a=(0,E.useIntl)(),{pathname:r}=(0,p.useLocation)(),c=Object.values(t),[s,d]=i.useState(null===(o=null==c?void 0:c[0])||void 0===o?void 0:o.key),u=c.map((t=>Object.assign(Object.assign({},t),{label:a.formatMessage({id:t.label}),href:`/ng/rr/${e}/${t.path}`,group:t.group?a.formatMessage({id:t.group}):void 0})));return i.useEffect((()=>{const t=c.find((t=>r===`/ng/rr/${e}/${t.path}`));t&&d(t.key)}),[r]),i.createElement(i.Suspense,{fallback:i.createElement(i.Fragment,null)},i.createElement(y,{mode:l},i.createElement(v,{mode:l,description:n,tabs:u,activeTab:s||""}),i.createElement(h,{mode:l},i.createElement(p.Outlet,null))))}var x=n(855),b=n(476);const C=f.default.registry.getLazyComponent("Loader"),L=({name:e,uniqid:t,inplace:n})=>{const i=(0,x.useSelector)((e=>b.$L.selectors.selectWidgetState(e,t))),o=b.$L.definition(e);return(null==i?void 0:i.loading)?l().createElement("div",{style:{position:"absolute",inset:0,backgroundColor:"rgba(255,255,255,.7)",display:"flex",flex:1,justifyContent:"center",alignItems:"center"}},l().createElement(C,null)):(null==i?void 0:i.hover)?l().createElement("div",{style:{position:"absolute",inset:0,backgroundColor:"rgba(255,255,255,.7)",display:"flex",flex:1,justifyContent:"center",alignItems:"center"}}):!(null==i?void 0:i.initialized)&&n||(null==i?void 0:i.initialized)||n?l().createElement(l().Fragment,null):l().createElement("div",{style:{position:"absolute",inset:0,backgroundColor:"rgba(255,255,255,1)",display:"flex",flex:1,justifyContent:"center",alignItems:"center"}},l().createElement("img",{src:o.img}))};var q=n(318);const $=c().div`
6
+ width: 0;
7
+ height: 0;
8
+ overflow: hidden;
9
+ `,W=f.default.registry.getLazyComponent("DEPRECATEDFormInputFile"),k=({children:e,initialFiles:t,initialClick:n,multiple:i,accept:o,onUploadStart:a,onUploadEnd:r,onUploadSuccess:c})=>{const s=l().useRef(null),d=(0,x.useSelector)(b.$L.selectors.selectToken),[u,m]=l().useState(0),[g,p]=l().useState(t);return l().useEffect((()=>{var e;n&&(null===(e=s.current)||void 0===e||e.click())}),[n]),l().useEffect((()=>{t.length!==g.length&&p(t)}),[t]),l().useEffect((()=>{c(g)}),[g]),l().useEffect((()=>{0===u&&r()}),[u]),l().createElement(l().Fragment,null,l().createElement("div",{onClick:()=>{var e;n&&(null===(e=s.current)||void 0===e||e.click())}},e),l().createElement($,null,l().createElement(W,{ref:s,id:"widget-upload-file",name:"editorFiles",content:"",accept:o,multiple:i,token:d,onUploadStart:e=>{void 0!==e&&m((t=>t+e)),"function"==typeof a&&0!==e&&a()},onUploadSuccess:e=>{void 0!==e&&(m((e=>void 0!==e?e-1:0)),p((t=>i?[...t,e]:[e])))}})))},S=f.default.registry.getLazyComponent("WidgetArticleGallery"),I=f.default.registry.getLazyComponent("FileViewer"),T=({widget:e,inplace:t,mode:n,onStateChange:i})=>{var o,a;const{uniqid:r}=e,{files:c}=e.content,s=(0,x.useDispatch)(),d=(0,x.useSelector)((e=>b.$L.selectors.selectWidget(e,r))),u=(0,x.useSelector)((e=>b.$L.selectors.isActive(e,r)),x.shallowEqual);return l().useEffect((()=>{i({mounted:!0})}),[]),void 0!==c?l().createElement(l().Fragment,null,"edit"===n?l().createElement(S,{files:c,maxWidth:800,gap:null!==(o=e.content.gap)&&void 0!==o?o:"10",column:null!==(a=e.content.column)&&void 0!==a?a:"3",onClick:()=>{}}):l().createElement(I,{files:c,openWithOptions:{}},(t=>{var n,i;return l().createElement(S,{files:c,maxWidth:600,gap:null!==(n=e.content.gap)&&void 0!==n?n:"10",column:null!==(i=e.content.column)&&void 0!==i?i:"3",onClick:e=>t(e)})})),t&&"edit"===n?l().createElement(k,{initialFiles:c,initialClick:u,accept:"image/png, image/jpeg, image/jpg",multiple:!0,onUploadSuccess:e=>{"widget-article-gallery"===(null==d?void 0:d.widget.name)&&s(b.$L.slice.actions.updateWidget({uniqid:r,content:{files:e}}))},onUploadStart:()=>{s(b.$L.slice.actions.setWidgetState({uniqid:r,loading:!0}))},onUploadEnd:()=>{s(b.$L.slice.actions.setWidgetState({uniqid:r,loading:!1}))}},l().createElement(q.JRCWidgetEmptyInplace,{label:"WIDGET_Article_Gallery_Empty_Label",description:"WIDGET_Article_Gallery_Empty_Description",url:"widget-article-image-placeholder.png",onClick:()=>{}})):l().createElement(l().Fragment,null)):l().createElement(l().Fragment,null)};var A=n(6),_=n.n(A);const D=f.default.registry.getLazyComponent("WidgetArticleAttachment"),F=f.default.registry.getLazyComponent("FileViewer"),j=({widget:e,inplace:t,mode:n,onStateChange:i})=>{const{uniqid:o}=e,{files:a}=e.content,r=(0,x.useDispatch)(),c=(0,x.useSelector)((e=>b.$L.selectors.selectWidget(e,o))),s=(0,x.useSelector)((e=>b.$L.selectors.isActive(e,o)),x.shallowEqual);l().useEffect((()=>{i({mounted:!0})}),[]);const d=[{label:"Wedoc",onClick:e=>{e&&_().share.getObjectAccessHash(`fileArticle/${e.id}`).then((t=>{if(""===t.result)throw new Error("result empty");const n=t.result;((e,t,n)=>{window.open(function(e,t){return`/ng/rr/wedoc/file/${e}/${t}`}(e,t),void 0)})(e.id,n)})).catch((()=>{r(b.FN.actions.error({label:"Unable to open this file"},6e3))}))}}],u=(0,x.useSelector)((e=>b.Mx.selectors.selectById(e,"OnlyOfficeHook")))?{"application/vnd.openxmlformats-officedocument.wordprocessingml.document":d,"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":d,"application/vnd.openxmlformats-officedocument.presentationml.presentation":d}:{};return void 0!==a?l().createElement(l().Fragment,null,"view"!==n?l().createElement(D,{files:a,onClick:()=>{}}):l().createElement(F,{files:a,openWithOptions:u},(e=>l().createElement(D,{files:a,onClick:t=>e(t)}))),t&&"view"!==n?l().createElement(k,{initialFiles:a,initialClick:s,multiple:!0,accept:"*",onUploadSuccess:e=>{"widget-article-attachment"===(null==c?void 0:c.widget.name)&&r(b.$L.slice.actions.updateWidget({uniqid:o,content:{files:e}}))},onUploadStart:()=>{r(b.$L.slice.actions.setWidgetState({uniqid:o,loading:!0}))},onUploadEnd:()=>{r(b.$L.slice.actions.setWidgetState({uniqid:o,loading:!1}))}},"edit"===n?l().createElement(q.JRCWidgetEmptyInplace,{label:"WIDGET_Article_Attachment_Empty_Label",description:"WIDGET_Article_Attachment_Empty_Description",url:"widget-article-image-placeholder.png",onClick:()=>{}}):l().createElement(l().Fragment,null)):l().createElement(l().Fragment,null)):l().createElement(l().Fragment,null)},O=f.default.registry.getLazyComponent("WidgetArticleImage"),R=c().div`
10
+ position: absolute;
11
+ inset: 0;
12
+ background-color: rgba(0, 0, 0, 0.4);
13
+ pointer-event: none;
14
+ display: flex;
15
+ justify-content: center;
16
+ align-items: center;
17
+ opacity: 0;
18
+ color: ${e=>e.theme.color.white};
19
+ &:hover {
20
+ opacity: 1;
21
+ }
22
+ `,G=({widget:e,inplace:t,mode:n,onStateChange:i})=>{const{uniqid:o}=e,{file:a,displayAs:r,useFilter:c,backgroundPosition:s,backgroundSize:d,borderRadius:u}=e.content,m=(0,x.useDispatch)(),g=(0,x.useSelector)((e=>b.$L.selectors.selectWidget(e,o))),p=(0,x.useSelector)((e=>b.$L.selectors.isActive(e,o)),x.shallowEqual),f=(0,E.useIntl)();return l().useEffect((()=>{i({mounted:!0})}),[]),l().createElement(l().Fragment,null,l().createElement(O,{maxWidth:"view"!==n?800:600,uri:void 0!==a?`/imagecache/fitx1200/fileArticle/${a.id}.png`:void 0,displayAs:null!=r?r:"image",borderRadius:null!=u?u:"8",useFilter:null!=c&&c,backgroundPosition:null!=s?s:"center",backgroundSize:null!=d?d:"auto"}),t&&"edit"===n?l().createElement(k,{initialFiles:[],initialClick:p,accept:"image/png, image/jpeg, image/jpg",multiple:!1,onUploadSuccess:e=>{"widget-article-image"===(null==g?void 0:g.widget.name)&&void 0!==e[0]&&m(b.$L.slice.actions.updateWidget({uniqid:o,content:{file:e[0]}}))},onUploadStart:()=>{m(b.$L.slice.actions.setWidgetState({uniqid:o,loading:!0}))},onUploadEnd:()=>{m(b.$L.slice.actions.setWidgetState({uniqid:o,loading:!1}))}},void 0!==a?l().createElement(R,null,f.formatMessage({id:"ARTICLE_Widget_Image_Change"})):l().createElement(q.JRCWidgetEmptyInplace,{label:"WIDGET_Article_Image_Empty_Label",description:"WIDGET_Article_Image_Empty_Description",url:"widget-article-image-placeholder.png",onClick:()=>{}})):l().createElement(l().Fragment,null))},z=c().div`
23
+ flex: 1;
24
+ display: flex;
25
+ flex-direction: row;
26
+ min-height: 60px;
27
+ align-items: center;
28
+ `,M=c().div`
29
+ display: flex;
30
+ flex-direction: row;
31
+ border-radius: 8px;
32
+ overflow: hidden;
33
+ margin: 4px;
34
+ border: 1px solid ${e=>e.theme.color.grey1};
35
+ `,U=c().button`
36
+ display: flex;
37
+ width: 40px;
38
+ height: 40px;
39
+ justify-content: center;
40
+ align-items: center;
41
+ cursor: pointer;
42
+ opacity: ${e=>e.isActive?"1.0":".8"};
43
+ background-color: ${e=>e.isActive?e.theme.color.grey1:e.theme.color.white};
44
+ &:hover {
45
+ background-color: ${e=>e.theme.color.grey1};
46
+ }
47
+ `,J=({widget:e,inplace:t,mode:n})=>{const{uniqid:i}=e,{text:o,color:a,heading:r}=e.content,c=(0,x.useDispatch)(),s=(0,x.useSelector)((e=>b.$L.selectors.selectWidget(e,i))),d=(0,x.useSelector)((e=>b.$L.selectors.isActive(e,i)),x.shallowEqual);return l().createElement(z,null,l().createElement(q.JRCWidgetArticleTitle,{text:o,color:a,heading:r,autoFocus:d,inplace:t,mode:n,onChange:e=>{"widget-article-title"===(null==s?void 0:s.widget.name)&&c(b.$L.slice.actions.updateWidget({uniqid:i,content:Object.assign(Object.assign({},s.widget.content),{text:e})}))}}),d&&"edit"===n?l().createElement(P,{heading:r,onClick:e=>{"widget-article-title"===(null==s?void 0:s.widget.name)&&c(b.$L.slice.actions.updateWidget({uniqid:i,content:Object.assign(Object.assign({},s.widget.content),{heading:e})}))}}):l().createElement(l().Fragment,null))},P=({heading:e="h1",onClick:t})=>l().createElement(M,null,["h1","h2","h3","h4"].map(((n,i)=>l().createElement(U,{key:i,isActive:e===n,onClick:()=>t(n)},n)))),V=f.default.registry.getLazyComponent("WidgetArticleButton"),B=f.default.registry.getLazyComponent("WidgetArticleText"),N=({widget:e,inplace:t=!1,isComponentVisible:n=!1,mode:i="view",onClick:o})=>{const a=(0,x.useDispatch)(),{name:r,uniqid:c}=e,s=(e,t)=>a(b.$L.slice.actions.updateWidget({uniqid:c,content:e,override:t})),d=e=>a(b.$L.slice.actions.setWidgetState(Object.assign({uniqid:c},e)));switch(r){default:return l().createElement(l().Fragment,null,"cannot display widget (",r,")");case"widget-article-button":return l().createElement(V,{isComponentVisible:n,content:e.content,inplace:t,mode:i,onChange:s,onClick:o,onStateChange:d});case"widget-article-gallery":return l().createElement(T,{widget:e,inplace:t,mode:i,onStateChange:d});case"widget-article-attachment":return l().createElement(j,{widget:e,inplace:t,mode:i,onStateChange:d});case"widget-article-image":return l().createElement(G,{widget:e,inplace:t,mode:i,onStateChange:d});case"widget-article-title":return l().createElement(J,{widget:e,inplace:t,mode:i});case"widget-article-text":return l().createElement(B,{content:e.content,isComponentVisible:n,inplace:t,mode:i,onChange:s,onStateChange:d})}};var H=n(349);const X=c().div`
48
+ position: absolute;
49
+ inset: 0;
50
+ opacity: ${e=>e.opacity};
51
+ background-color: ${e=>e.backgroundColor};
52
+ pointer-events: ${e=>e.pointerEvents};
53
+ `,Y=({uniqid:e,mode:t})=>{const n=(0,x.useSelector)((t=>t.widgets.ids[e].widget.layers),x.shallowEqual);return l().createElement(l().Fragment,null,null==n?void 0:n.map(((e,t)=>l().createElement(K,{uniqid:e,key:t,mode:"edit"}))))},K=({uniqid:e,mode:t})=>{const n=(0,x.useSelector)((t=>t.widgets.layers[e]));return"view"===t?l().createElement(X,{opacity:1,backgroundColor:"transparent",pointerEvents:"none"},n.widgets.map(((e,t)=>l().createElement(Q,{key:t,layerId:n.uniqid,uniqid:e.widget.uniqid,mode:"view"})))):l().createElement(X,{opacity:n.visible?1:0,backgroundColor:n.visible?"rgba(255,255,255,.1)":"transparent",pointerEvents:n.locked?"none":"all"},n.widgets.map(((e,t)=>l().createElement(Q,{key:t,layerId:n.uniqid,uniqid:e.widget.uniqid,mode:"edit"}))))},Q=({uniqid:e,layerId:t,mode:n})=>{const i=(0,x.useDispatch)(),o=(0,x.useSelector)((t=>t.widgets.ids[e]),x.shallowEqual),a=(0,x.useSelector)((e=>e.widgets.layers[t]));return o&&a&&a.position?"view"===n?l().createElement("div",{style:{position:"absolute",top:a.position.y,left:a.position.x}},l().createElement(te,{uniqid:e,widget:o,mode:n,inplace:!0})):l().createElement(Z,{position:{x:a.position.x,y:a.position.y},onMouseUp:e=>{(a.position&&a.position.x!==e.x||a.position&&a.position.y!==e.y)&&(e=>{i(b.$L.slice.actions.updateLayer({uniqid:t,props:{position:e}}))})(e)}},l().createElement(q.BETA_JRCDoubleClick,{onDoubleTap:()=>((e,t)=>{i(b.Wq.slice.actions.registerEditor({uniqid:e,name:t}))})(o.widget.uniqid,o.widget.name)},l().createElement(te,{uniqid:e,widget:o,mode:n,inplace:!0}))):l().createElement(l().Fragment,null)},Z=({position:e,children:t,onMouseUp:n})=>{const[i,o]=l().useState(!1),[a,r]=l().useState({x:0,y:0}),[c,s]=l().useState({x:0,y:0}),[d,u]=l().useState({x:e.x,y:e.y}),m=l().useRef(null),g=l().useCallback((e=>{if(i&&m.current){const t=c.x+(e.clientX-a.x),n=c.y+(e.clientY-a.y);u({x:t,y:n})}}),[i]),p=()=>{o(!1),n({x:d.x,y:d.y})};return l().useEffect((()=>(document.addEventListener("mousemove",g),document.addEventListener("mouseup",p),()=>{document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",p)})),[g]),l().createElement("div",{style:{position:"absolute",top:d.y,left:d.x},ref:m,onMouseDown:e=>{o(!0),m.current&&(r({x:e.nativeEvent.clientX,y:e.nativeEvent.clientY}),s({x:d.x,y:d.y}))}},t)},ee=({uniqid:e,widget:t,inplace:n=!0,mode:i,width:o})=>{const a=(0,x.useDispatch)(),r=(0,x.useSelector)((t=>b.$L.selectors.selectWidget(t,e))),c=(0,x.useSelector)((t=>{var n;return null===(n=b.$L.selectors.selectWidgetState(t,e))||void 0===n?void 0:n.busy}),x.shallowEqual),s=(0,x.useSelector)((t=>t.widgets.editableMap[e]),x.shallowEqual),d=(0,x.useSelector)((e=>e.widgets.currentEditableWidgetId),x.shallowEqual),u=(0,x.useSelector)((t=>t.widgets.currentEditableWidgetId===e),x.shallowEqual),{ref:m,isComponentVisible:g,setIsComponentVisible:p}=(0,H.I)(!1);if(l().useEffect((()=>{t&&a(b.$L.slice.actions.registerWidget({uniqid:e,widget:t}))}),[]),l().useEffect((()=>{g||e===d&&a(b.$L.slice.actions.setEditableWidgetId({uniqid:void 0}))}),[g]),l().useEffect((()=>{g!==u&&p(u)}),[u]),void 0===r)return l().createElement(l().Fragment,null,"This widget cannot be desplayed");const E=()=>{"edit"===i?f():"widget-article-button"===r.widget.name&&"link"===r.widget.content.openingType&&r.widget.content.openingTypeLink&&window.open(r.widget.content.openingTypeLink.url,r.widget.content.openingTypeLink.target)},f=()=>{if("view"===i)return;const{widget:e}=r;a(b.Wq.slice.actions.registerEditor({uniqid:e.uniqid,name:e.name}))};return n&&"view"!==i?l().createElement("div",{style:{minWidth:void 0!==o?o:"100%"},ref:m,onClick:()=>{p(!0),s&&(a(b.$L.slice.actions.setEditableIndex({index:s.index})),a(b.$L.slice.actions.setEditableWidgetId({uniqid:e})))}},l().createElement(N,{width:o,widget:r.widget,inplace:n,isComponentVisible:!!(g||c||u),mode:i,onClick:E}),l().createElement(Y,{uniqid:e,mode:i}),l().createElement(L,{name:r.widget.name,uniqid:r.widget.uniqid,inplace:n})):l().createElement("div",{style:{flex:1,display:"flex",minWidth:void 0!==o?o:"100%"},onClick:f},l().createElement(N,{widget:r.widget,isComponentVisible:!1,inplace:n,mode:i,width:o,onClick:E}),l().createElement(Y,{uniqid:e,mode:i}),l().createElement(L,{name:r.widget.name,uniqid:r.widget.uniqid,inplace:n}))},te=ee,ne=c().div`
54
+ display: flex;
55
+ flex-direction: row;
56
+ flex-wrap: wrap;
57
+ gap: 10px;
58
+ justify-content: center;
59
+ `,ie=c().div`
60
+ border: 1px solid ${e=>e.theme.color.grey2};
61
+ border-radius: 8px;
62
+ cursor: pointer;
63
+ padding: 12px;
64
+ position: relative;
65
+ opacity: ${e=>e.available?"1":".4"};
66
+ pointer-events: ${e=>e.available?"all":"none"};
67
+
68
+ .show-on-hover {
69
+ position: absolute;
70
+ inset: 0;
71
+ border-radius: 8px;
72
+ justify-content: center;
73
+ align-items: center;
74
+ display: flex;
75
+ opacity: 0;
76
+ background-color: #ffffffe6;
77
+ }
78
+
79
+ &:hover {
80
+ .show-on-hover {
81
+ opacity: 1;
82
+ }
83
+ }
84
+ `,le=c().div`
85
+ border: 2px solid ${e=>e.theme.color.primary};
86
+ height: ${e=>e.open?"320":"54"}px;
87
+ border-radius: 8px;
88
+ display: flex;
89
+ justify-content: top;
90
+ flex-direction: column;
91
+ transition: height 0.4s;
92
+ overflow: hidden;
93
+ flex-direction: column;
94
+ `,oe=c().div`
95
+ display: flex;
96
+ flex-direction: row;
97
+ flex-wrap: wrap;
98
+ justify-content: center;
99
+ gap: 10px;
100
+ `,ae=c().div`
101
+ min-height: 50px;
102
+ display: flex;
103
+ justify-content: center;
104
+ align-items: center;
105
+ cursor: pointer;
106
+ color: ${e=>e.theme.color.primary};
107
+ `,re=c().button`
108
+ height: 72px;
109
+ display: flex;
110
+ justify-content: center;
111
+ align-items: center;
112
+ width: 40%;
113
+ border: 1px solid ${e=>e.theme.color.grey2};
114
+ border-radius: 8px;
115
+ transition: opacity 0.4s ease ${e=>40*e.index}ms;
116
+ opacity: ${e=>e.open?1:0};
117
+ `,ce=f.default.registry.getLazyComponent("Button"),se=f.default.registry.getLazyComponent("Modal"),de=({mode:e,view:t,children:n,namespace:i="default",onChange:o})=>{const[a,r]=l().useState(!1),c=function(e){return"widget-article-image"===e?[b.$L.definition(b.$L.const.WIDGET_ARTICLE_TITLE),b.$L.definition(b.$L.const.WIDGET_ARTICLE_BUTTON)]:[b.$L.definition(b.$L.const.WIDGET_ARTICLE_TITLE),b.$L.definition(b.$L.const.WIDGET_ARTICLE_TEXT),b.$L.definition(b.$L.const.WIDGET_ARTICLE_IMAGE),b.$L.definition(b.$L.const.WIDGET_ARTICLE_BUTTON),b.$L.definition(b.$L.const.WIDGET_ARTICLE_GALLERY),b.$L.definition(b.$L.const.WIDGET_ARTICLE_ATTACHMENT)]}(i),s=(0,E.useIntl)(),d={open:a,title:"widget builder",showIconClose:!0,portalId:"react-modal",isFullHeight:!0,closeHandler:()=>r(!1)},u=e=>{o(b.$L.factory(e)),r(!1)};return l().createElement(l().Fragment,null,l().createElement(se,Object.assign({},d),l().createElement(ne,null,c.map(((e,t)=>l().createElement(ie,{key:t,onClick:()=>u(e.name),available:e.available},l().createElement("img",{src:e.img}),l().createElement("div",{className:"show-on-hover"},s.formatMessage({id:e.label}))))))),"custom"===e&&n?l().createElement("div",{onClick:()=>r(!0)},n):l().createElement(l().Fragment,null),"button"===e&&"edit"===t?l().createElement(ce,{onClick:()=>r(!0),variant:"outlined",minWidth:"100%"},s.formatMessage({id:"WIDGET_Add_Widget"})):l().createElement(l().Fragment,null),"gallery"===e&&"edit"===t?l().createElement(ne,null,c.map(((e,t)=>l().createElement(ie,{key:t,onClick:()=>u(e.name),available:e.available},l().createElement("img",{src:e.img}),l().createElement("div",{className:"show-on-hover"},s.formatMessage({id:e.label})))))):l().createElement(l().Fragment,null),"article"===e&&"edit"===t?l().createElement(ue,{widgets:c,onClick:u}):l().createElement(l().Fragment,null))},ue=({widgets:e,onClick:t})=>{const[n,i]=l().useState(!1),o=(0,E.useIntl)();return l().createElement(l().Fragment,null,l().createElement(le,{open:n},l().createElement(ae,{onClick:()=>i(!n)},o.formatMessage({id:"WIDGET_Add_Widget"})),l().createElement(oe,null,e.map(((e,i)=>l().createElement(re,{key:e.name,open:n,index:i,onClick:()=>t(e.name)},o.formatMessage({id:e.label})))))))},me=(c().div`
118
+ margin-bottom: 24px;
119
+ `,c().div`
120
+ margin-bottom: 4px;
121
+ `,c().div`
122
+ position: absolute;
123
+ background-color: ${e=>e.isActive?"rgba(0,0,0,.1)":"transparent"};
124
+ inset: 0;
125
+ pointer-events: ${e=>e.isActive?"all":"none"};
126
+ flex: 1;
127
+ display: flex;
128
+ overflow: hidden;
129
+ `),ge=c().div`
130
+ flex-direction: row;
131
+ display: flex;
132
+ min-height: 60px;
133
+ border-bottom: 1px solid ${e=>e.theme.color.grey2};
134
+ `,pe=c().div`
135
+ width: 60px;
136
+ display: flex;
137
+ align-items: center;
138
+ justify-content: center;
139
+ `,Ee=c().div`
140
+ flex: 1;
141
+ display: flex;
142
+ align-items: center;
143
+ justify-content: center;
144
+ `,fe=c().div`
145
+ position: absolute;
146
+ top: 90px;
147
+ right: ${e=>e.visible?"0":"-1000"}px;
148
+ width: ${440}px;
149
+ bottom: 0;
150
+ display: flex;
151
+ background-color: ${e=>e.theme.color.white};
152
+ flex-direction: row;
153
+ transition: all 0.4s;
154
+ box-shadow: -1px 1px 10px 0px rgb(0 0 0 / 20%);
155
+ `,ye=c().div`
156
+ flex: 1;
157
+ display: flex;
158
+ flex-direction: row;
159
+ padding: 12px;
160
+ overflow: auto;
161
+ margin-bottom: 40px;
162
+ `,ve=c().div`
163
+ width: ${50}px;
164
+ padding-top: 60px;
165
+ display: flex;
166
+ flex-direction: column;
167
+ border-right: 1px solid ${e=>e.theme.color.grey2};
168
+ `,he=c().button`
169
+ border-radius: 4px;
170
+ cursor: pointer;
171
+ height: 42px;
172
+ margin: 4px;
173
+ width: 42px;
174
+ display: flex;
175
+ align-items: center;
176
+ justify-content: center;
177
+ background-color: ${e=>e.isActive?e.theme.color.grey1:e.theme.color.white};
178
+ &:hover {
179
+ background-color: ${e=>e.theme.color.grey1};
180
+ }
181
+ `,we=(c().div`
182
+ display: flex;
183
+ border: 1px solid ${e=>e.theme.color.grey1};
184
+ border-radius: ${8}px;
185
+ margin-bottom: 24px;
186
+ input {
187
+ width: 100%;
188
+ border: 0;
189
+ height: ${50}px;
190
+ margin: 0;
191
+ }
192
+ `,c().div`
193
+ display: flex;
194
+ flex-direction: row;
195
+ padding: 12px;
196
+ background-color: ${e=>e.theme.color.grey0};
197
+ border-radius: 8px;
198
+ margin-bottom: 4px;
199
+ `),xe=c().div`
200
+ display: flex;
201
+ flex: 1;
202
+ align-items: center;
203
+ `,be=c().div`
204
+ width: 40px;
205
+ display: flex;
206
+ justify-content: center;
207
+ align-items: center;
208
+ `,Ce=(c().div`
209
+ flex-direction: row;
210
+ display: flex;
211
+ align-items: center;
212
+ `,c().div`
213
+ flex: 1;
214
+ display: flex;
215
+ align-items: center;
216
+ `,({uniqid:e})=>{const t=(0,x.useDispatch)(),n=(0,x.useSelector)((t=>b.Wq.selectors.selectEditor(t,e)));return n&&n.popup&&n.view?l().createElement("div",{style:{flex:1,display:"flex",flexDirection:"column",backgroundColor:"white",marginTop:90}},l().createElement(ge,null,l().createElement(pe,null),l().createElement(Ee,null,"Popup"),l().createElement(pe,null,l().createElement(he,{onClick:()=>{t(b.Wq.slice.actions.flushEditorPopup({uniqid:e}))}},l().createElement(q.JRCIcon,{name:"icon-times",color:"grey2"})))),l().createElement("div",{style:{flex:1,display:"flex"}},n.view),l().createElement(ge,null,l().createElement(q.JRCButton,{onClick:()=>{t(b.Wq.slice.actions.flushEditorPopup({uniqid:e}))}},"Save"))):l().createElement(l().Fragment,null)}),Le=f.default.registry.getLazyComponent("WidgetArticleTitleEditor"),qe=f.default.registry.getLazyComponent("WidgetArticleImageEditor"),$e=f.default.registry.getLazyComponent("WidgetArticleTextEditor"),We=f.default.registry.getLazyComponent("WidgetArticleGalleryEditor"),ke=f.default.registry.getLazyComponent("WidgetArticleButtonEditor"),Se=f.default.registry.getLazyComponent("WidgetArticleAttachmentEditor"),Ie=({uniqid:e})=>{const t=(0,x.useDispatch)(),n=(0,x.useSelector)(b.$L.selectors.selectToken),i=(0,x.useSelector)((t=>b.$L.selectors.selectWidget(t,e))),o=n=>{i&&t(b.$L.slice.actions.updateWidget({uniqid:e,content:n})),t(b.Wq.slice.actions.flushEditor({uniqid:e}))},a=(n,i)=>t(b.$L.slice.actions.updateWidget({uniqid:e,content:n,override:i})),r=(n,i)=>{t(void 0!==i?b.$L.slice.actions.setWidgetState(Object.assign({uniqid:i},n)):b.$L.slice.actions.setWidgetState(Object.assign({uniqid:e},n)))},c=n=>{t(b.Wq.slice.actions.registerEditorPopup({uniqid:e,view:n}))};switch(null==i?void 0:i.widget.name){default:return l().createElement(l().Fragment,null,"cannot display editor");case b.$L.const.WIDGET_ARTICLE_BUTTON:return l().createElement(ke,{content:i.widget.content,onChange:a,onSave:o,onStateChange:r});case b.$L.const.WIDGET_ARTICLE_ATTACHMENT:return l().createElement(Se,{token:n,content:i.widget.content,onChange:a,onSave:o,onStateChange:r,onOpen:c});case b.$L.const.WIDGET_ARTICLE_GALLERY:return l().createElement(We,{token:n,content:i.widget.content,onChange:a,onSave:o,onStateChange:r});case b.$L.const.WIDGET_ARTICLE_TEXT:return l().createElement($e,{onChange:a,onSave:o,content:i.widget.content});case b.$L.const.WIDGET_ARTICLE_IMAGE:return l().createElement(qe,{content:i.widget.content,token:n,onChange:a,onSave:o,onStateChange:r});case b.$L.const.WIDGET_ARTICLE_TITLE:return l().createElement(Le,{onChange:a,onSave:o,content:i.widget.content,onOpen:c})}},Te=({uniqid:e})=>{const t=(0,x.useDispatch)(),n=(0,E.useIntl)(),i=(0,x.useSelector)((t=>b.$L.selectors.selectWidgetContent(t,e)));return l().createElement("div",{style:{flex:1}},l().createElement(Ae,{uniqid:e}),i&&i.widgets?i.widgets.map(((o,a)=>{const r=b.$L.definition(o.widget.name);return l().createElement("div",{key:a},l().createElement(we,null,l().createElement(xe,{onClick:()=>((e,n)=>{t(b.Wq.slice.actions.registerEditor({uniqid:e,name:n}))})(o.widget.uniqid,o.widget.name)},n.formatMessage({id:r.label})),l().createElement(be,{onClick:()=>{i.widgets&&t(b.$L.slice.actions.updateWidget({uniqid:e,content:Object.assign(Object.assign({},i),{widgets:[...i.widgets.filter(((e,t)=>t!==a))]})}))}},l().createElement(q.JRCIcon,{name:"icon-trash"}))))})):l().createElement(l().Fragment,null))},Ae=({uniqid:e})=>{const t=(0,x.useDispatch)(),n=(0,x.useSelector)((t=>t.widgets.ids[e].widget.layers),x.shallowEqual);return l().createElement(l().Fragment,null,l().createElement(q.BETA_JRCDragAndDrop,{onDrag:()=>{},renderEl:(e,t)=>l().createElement(je,{uniqid:e,key:t}),elms:n||[]}),l().createElement(de,{namespace:"default",onChange:n=>{t(b.$L.slice.actions.registerLayer({uniqid:e,widget:n}))},mode:"button"}))},_e=({uniqid:e})=>{const t=(0,x.useDispatch)(),n=(0,x.useSelector)((t=>t.widgets.layers[e]));return l().createElement("div",{onClick:()=>{t(b.$L.slice.actions.updateLayer({uniqid:e,props:{locked:!n.locked}}))}},l().createElement(q.JRCIcon,{name:n.locked?"icon-lock":"icon-unlock"}))},De=({uniqid:e})=>{const t=(0,x.useDispatch)(),n=(0,x.useSelector)((t=>t.widgets.layers[e]));return l().createElement("div",{onClick:()=>{t(b.$L.slice.actions.updateLayer({uniqid:e,props:{visible:!n.visible}}))}},l().createElement(q.JRCIcon,{name:n.visible?"icon-eye":"icon-eye-slash"}))},Fe=({uniqid:e,layerId:t})=>{const n=(0,x.useDispatch)();return l().createElement("div",{onClick:()=>{n(b.$L.slice.actions.flushLayer({uniqid:e,layerId:t}))}},l().createElement(q.JRCIcon,{name:"icon-trash"}))},je=({uniqid:e})=>{const t=(0,x.useSelector)((t=>t.widgets.layers[e]));return l().createElement(l().Fragment,null,t.title,t.widgets.map(((n,i)=>{const o=b.$L.definition(n.widget.name);return l().createElement("div",{style:{flexDirection:"row",display:"flex"},key:i},l().createElement("div",{style:{flex:1,alignItems:"center"}},o.label),l().createElement(_e,{uniqid:e}),l().createElement(De,{uniqid:e}),l().createElement(Fe,{uniqid:n.widget.uniqid,layerId:t.uniqid}))})))},Oe=f.default.registry.getLazyComponent("Button"),Re=({uniqid:e})=>{const t=(0,E.useIntl)(),n=(0,x.useDispatch)(),i=(0,x.useSelector)((t=>b.$L.selectors.selectWidget(t,e))),[a,r]=l().useState(null==i?void 0:i.title),{control:c,watch:s}=(0,o.useForm)({defaultValues:{text:null!=a?a:""},criteriaMode:"all"});return l().useEffect((()=>{const e=s((e=>{r(e.text)}));return()=>e.unsubscribe()}),[s]),i?l().createElement("div",{style:{flex:1,display:"flex",flexDirection:"column"}},l().createElement(q.JRCInputText,{name:"text",control:c,placeholder:t.formatMessage({id:"EDITOR_Widget_Wrapper_Title"})}),l().createElement(Oe,{onClick:()=>{void 0!==a&&(n(b.$L.slice.actions.updateWidgetWrapper({uniqid:e,title:a})),n(b.Wq.slice.actions.flushEditor({uniqid:e})))},variant:"outlined",minWidth:"100%"},t.formatMessage({id:"EDITOR_Save_Widget"}))):l().createElement(l().Fragment,null,"No wrapper")},Ge=f.default.registry.getLazyComponent("Icon"),ze=({uniqid:e})=>{const t=(0,E.useIntl)(),n=(0,x.useDispatch)(),i=(0,x.useSelector)((t=>b.Wq.selectors.selectEditor(t,e))),o=b.$L.definition(null==i?void 0:i.name),[a,r]=l().useState(!1),[c,s]=l().useState("default");return l().useEffect((()=>{setTimeout((()=>{r(!0)}),0)})),i?l().createElement("div",{style:{width:440,position:"relative"}},l().createElement(fe,{visible:a},l().createElement(ve,null,o.panel.useWrapper?l().createElement(he,{isActive:"wrapper"===c,onClick:()=>s("wrapper")},l().createElement(Ge,{name:"icon-font",color:"grey2"})):l().createElement(l().Fragment,null),o.panel.useEditor?l().createElement(he,{isActive:"default"===c,onClick:()=>s("default")},l().createElement(Ge,{name:"icon-pen",color:"grey2"})):l().createElement(l().Fragment,null),o.panel.useWidgets?l().createElement(Ue,{uniqid:e},l().createElement(he,{isActive:"widgets"===c,onClick:()=>s("widgets")},l().createElement(Ge,{name:"icon-sliders",color:"grey2"}))):l().createElement(l().Fragment,null)),l().createElement("div",{style:{flex:1,display:"flex",flexDirection:"column"}},l().createElement(ge,null,l().createElement(Me,{uniqid:e,position:i.position}),l().createElement(Ee,null,t.formatMessage({id:o.label})),l().createElement(pe,null,l().createElement(he,{onClick:()=>{n(b.Wq.slice.actions.flushEditor({uniqid:e}))}},l().createElement(Ge,{name:"icon-times",color:"grey2"})))),l().createElement(ye,null,"default"===c&&o.panel.useEditor?l().createElement(Ie,{uniqid:i.uniqid}):l().createElement(l().Fragment,null),"wrapper"===c&&o.panel.useWrapper?l().createElement(Re,{uniqid:i.uniqid}):l().createElement(l().Fragment,null),"widgets"===c&&o.panel.useWidgets?l().createElement(Te,{uniqid:e,namespace:o.name}):l().createElement(l().Fragment,null)))),(null==i?void 0:i.popup)?l().createElement("div",{style:{position:"absolute",inset:0,backgroundColor:"#000",opacity:".7"}}):l().createElement(l().Fragment,null)):l().createElement(l().Fragment,null)},Me=({uniqid:e,position:t})=>{const n=(0,x.useDispatch)();return l().createElement(pe,null,l().createElement(he,{onClick:()=>{n(b.Wq.slice.actions.setEditorPosition({uniqid:e,position:"left"===t?"right":"left"}))}},l().createElement(Ge,{name:"left"===t?"icon-angle-right":"icon-angle-left",color:"grey2"})))},Ue=({uniqid:e,children:t})=>{const n=(0,x.useSelector)((t=>b.$L.selectors.selectWidgetState(t,e)));return(null==n?void 0:n.initialized)?t:l().createElement(l().Fragment,null)},Je=c().div`
217
+ position: absolute;
218
+ inset: 0;
219
+ pointer-events: none;
220
+ z-index: 100;
221
+ `,Pe=c().div`
222
+ flex: 1;
223
+ display: flex;
224
+ margintop: ${90}px;
225
+ pointer-events: ${e=>e.isActive?"all":"none"};
226
+ `,Ve=c().div`
227
+ flex: 1;
228
+ display: flex;
229
+ flex-direction: row;
230
+ pointer-events: none;
231
+ `,Be=c().div`
232
+ width: ${440}px;
233
+ pointer-events: none;
234
+ `,Ne=()=>{const e=(0,x.useSelector)(b.Wq.selectors.selectEditors);return l().createElement(Je,null,e.map(((e,t)=>"left"===e.position?l().createElement(me,{isActive:!1,key:t},l().createElement(Ve,null,l().createElement(ze,{uniqid:e.uniqid}),l().createElement(Pe,{isActive:void 0!==e.popup},l().createElement(Ce,{uniqid:e.uniqid})),l().createElement(Be,null))):l().createElement(me,{isActive:!1,key:t},l().createElement(Ve,null,l().createElement(Be,null),l().createElement(Pe,{isActive:void 0!==e.popup},l().createElement(Ce,{uniqid:e.uniqid})),l().createElement(ze,{uniqid:e.uniqid}))))))}}}]);
235
+ //# sourceMappingURL=562.bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"562.bundle.js","mappings":"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","sources":["webpack://ReactCore/./src/displayer/DisplayForm.component.tsx","webpack://ReactCore/./src/components/Empty.tsx","webpack://ReactCore/./src/components/TwoColLayout.tsx","webpack://ReactCore/./src/components/widgets/WidgetState.tsx","webpack://ReactCore/./src/components/widgets/components/WidgetUploader.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleGalleryWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleAttachmentWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleImageWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleTitleWrapper.tsx","webpack://ReactCore/./src/components/widgets/Widget.tsx","webpack://ReactCore/./src/components/widgets/WidgetLayer/WidgetLayer.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetLayer/WidgetLayer.tsx","webpack://ReactCore/./src/components/widgets/WidgetWrapperCore.tsx","webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.tsx","webpack://ReactCore/./src/components/widgets/namespace.ts","webpack://ReactCore/./src/components/editors/style.tsx","webpack://ReactCore/./src/components/editors/const.ts","webpack://ReactCore/./src/components/editors/EditorPopup.tsx","webpack://ReactCore/./src/components/editors/Editor.tsx","webpack://ReactCore/./src/components/editors/EditorTabWidgets.tsx","webpack://ReactCore/./src/components/editors/EditorTabWrapper.tsx","webpack://ReactCore/./src/components/editors/EditorWrapper.tsx","webpack://ReactCore/./src/components/editors/EditorsPortal.tsx"],"sourcesContent":["import * as React from 'react';\nimport { DisplayFormRef, FieldsWith } from './types';\nimport { useForm, Control, FieldValues } from 'react-hook-form';\nimport { useDisplayForm } from './useDisplay';\nimport styled from 'styled-components';\n\nconst FormElm = styled.form<{ stretch?: boolean }>`\n ${(props) =>\n props.stretch &&\n `\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n `}\n`;\n\nconst FieldsetWrapper = styled.div<{ stretch?: boolean }>`\n ${(props) =>\n props.stretch &&\n `\n flex: 1;\n`}\n`;\n\nexport type DisplayFormProps<TFieldValues extends FieldValues> = {\n type: string;\n fields: FieldsWith<'input', TFieldValues>;\n extraInputs?: (control: Control<TFieldValues>) => React.ReactNode;\n defaultValues?: any;\n onSubmit: any;\n buttons: React.ReactNode;\n readOnly?: boolean;\n dataCy?: string;\n stretch?: boolean;\n children?: React.ReactNode;\n};\n\n/****\n * The jamespot model depend on the platform\n * For example a user can have the size attribute only for a given platform\n * The model specifics of a platform are stored in J.model\n *\n * This component display an array of attributes only if this attribute is activated on the platform\n */\nconst _DisplayForm = <TFieldValues extends FieldValues>(\n props: DisplayFormProps<TFieldValues>,\n ref: React.ForwardedRef<DisplayFormRef>,\n) => {\n const formRef = React.useRef<HTMLFormElement>(null);\n\n const [configuration, defaultValues] = useDisplayForm(props.fields, props.type);\n\n const { handleSubmit, control, reset, ...formFn } = useForm({\n defaultValues: {\n ...defaultValues,\n ...props.defaultValues,\n },\n criteriaMode: 'all',\n });\n\n React.useImperativeHandle(\n ref,\n () => ({\n ...formFn,\n handleSubmit,\n control,\n reset: () => {\n // in case the form is scrollable\n formRef?.current?.scrollTo(0, 0);\n // reset react-hook-form form\n reset();\n },\n }),\n [],\n );\n\n return (\n <FormElm stretch={props.stretch} onSubmit={handleSubmit(props.onSubmit)} ref={formRef}>\n <FieldsetWrapper stretch={props.stretch}>\n {configuration.map(({ Input, ...conf }) => (\n <Input\n key={conf.name}\n control={control}\n {...conf}\n dataCy={`${props.dataCy}-${conf.name}`}\n readOnly={props.readOnly}\n />\n ))}\n {props.extraInputs && props.extraInputs(control)}\n </FieldsetWrapper>\n {props.buttons}\n </FormElm>\n );\n};\n\nexport const DisplayForm = React.forwardRef<DisplayFormRef>(_DisplayForm as any) as <TFieldValues extends FieldValues>(\n props: DisplayFormProps<TFieldValues> & {\n ref?: React.ForwardedRef<DisplayFormRef>;\n },\n) => ReturnType<typeof _DisplayForm>;\n","import * as React from 'react';\n\n// FIXME move to j-react-components + display error if dev mode\nexport const Empty = () => <></>;\n","import * as React from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { useIntl } from 'react-intl';\nimport type { JRCAppColumnProps } from 'jamespot-react-components';\nimport JRCore from 'App';\nimport { useLocation } from 'react-router-dom';\nimport { LayoutMode } from 'jamespot-react-components';\n\nconst Container = JRCore.registry.getLazyComponent('Container');\nconst AppColumn = JRCore.registry.getLazyComponent('AppColumn');\nconst MainColumn = JRCore.registry.getLazyComponent('MainColumn');\n\nexport type TwoColLayoutRoute = {\n path: string;\n key: string;\n icon: string;\n label: string;\n group?: string;\n};\n\nexport type TwoColLayoutRoutes<T extends TwoColLayoutRoute = TwoColLayoutRoute> = Record<string, T>;\n\nexport type TwoColLayoutProps = {\n extensionRoute: string;\n routes: TwoColLayoutRoutes;\n mode?: LayoutMode;\n description: JRCAppColumnProps['description'];\n};\n\nexport function TwoColLayout({ extensionRoute, routes, description, mode = 'center' }: TwoColLayoutProps) {\n const intl = useIntl();\n const { pathname } = useLocation();\n\n const ROUTES_ARRAY = Object.values(routes);\n const [activeTab, setActiveTab] = React.useState(ROUTES_ARRAY?.[0]?.key);\n\n const tabs = ROUTES_ARRAY.map((tab) => ({\n ...tab,\n label: intl.formatMessage({ id: tab.label }),\n href: `/ng/rr/${extensionRoute}/${tab.path}`,\n group: tab.group ? intl.formatMessage({ id: tab.group }) : undefined,\n }));\n\n React.useEffect(() => {\n const activeRoute = ROUTES_ARRAY.find((route) => pathname === `/ng/rr/${extensionRoute}/${route.path}`);\n if (activeRoute) setActiveTab(activeRoute.key);\n }, [pathname]);\n\n return (\n <React.Suspense fallback={<></>}>\n <Container mode={mode}>\n <AppColumn mode={mode} description={description} tabs={tabs} activeTab={activeTab || ''} />\n <MainColumn mode={mode}>\n <Outlet />\n </MainColumn>\n </Container>\n </React.Suspense>\n );\n}\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport JRCore from 'App';\n\nconst JRCLoader = JRCore.registry.getLazyComponent('Loader');\n\nimport { WidgetKeys, WidgetsRootState } from 'jamespot-user-api';\nimport { Widget } from 'jamespot-front-business';\n\n/*\n Widget state\n*/\n\nexport const WidgetState = ({ name, uniqid, inplace }: { name: WidgetKeys; uniqid: string; inplace: boolean }) => {\n const state = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid));\n const def = Widget.definition(name);\n\n if (state?.loading) {\n return (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundColor: 'rgba(255,255,255,.7)',\n display: 'flex',\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n }}>\n <JRCLoader />\n </div>\n );\n }\n\n if (state?.hover) {\n return (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundColor: 'rgba(255,255,255,.7)',\n display: 'flex',\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n }}></div>\n );\n }\n\n if (!state?.initialized && inplace) {\n return <></>;\n }\n\n if (!state?.initialized && !inplace) {\n return (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundColor: 'rgba(255,255,255,1)',\n display: 'flex',\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n }}>\n <img src={def.img} />\n </div>\n );\n }\n\n return <></>;\n};\n","import React from 'react';\n\nimport { useSelector } from 'react-redux';\n\nimport { jFileLittle } from 'jamespot-user-api';\n\nimport JRCore from 'App';\nimport { Widget } from 'jamespot-front-business';\nimport styled from 'styled-components';\n\nexport const CSSHidden = styled.div`\n width: 0;\n height: 0;\n overflow: hidden;\n`;\n\nconst JRCFormFile = JRCore.registry.getLazyComponent('DEPRECATEDFormInputFile');\n\ntype InplaceUploaderProps = {\n children: React.ReactNode;\n initialFiles: jFileLittle[];\n initialClick?: boolean;\n multiple: boolean;\n accept: string;\n onUploadStart: () => void;\n onUploadEnd: () => void;\n onUploadSuccess: (files: jFileLittle[]) => void;\n};\n\nexport const WidgetUploader = ({\n children,\n initialFiles,\n initialClick,\n multiple,\n accept,\n onUploadStart,\n onUploadEnd,\n onUploadSuccess,\n}: InplaceUploaderProps) => {\n const uploadRef = React.useRef<HTMLInputElement>(null);\n const token = useSelector(Widget.selectors.selectToken);\n const [total, setTotal] = React.useState<number>(0);\n const [files, setFiles] = React.useState<jFileLittle[]>(initialFiles);\n\n React.useEffect(() => {\n if (initialClick) {\n uploadRef.current?.click();\n }\n }, [initialClick]);\n\n React.useEffect(() => {\n if (initialFiles.length !== files.length) {\n setFiles(initialFiles);\n }\n }, [initialFiles]);\n\n React.useEffect(() => {\n onUploadSuccess(files);\n }, [files]);\n\n React.useEffect(() => {\n if (total === 0) {\n onUploadEnd();\n }\n }, [total]);\n\n return (\n <>\n <div\n onClick={() => {\n if (initialClick) {\n uploadRef.current?.click();\n }\n }}>\n {children}\n </div>\n <CSSHidden>\n <JRCFormFile\n ref={uploadRef}\n id=\"widget-upload-file\"\n name=\"editorFiles\"\n content={''}\n accept={accept as any}\n multiple={multiple}\n token={token}\n onUploadStart={(totalFile) => {\n if (totalFile !== undefined) {\n setTotal((prevTotal) => prevTotal + totalFile);\n }\n if (typeof onUploadStart === 'function' && totalFile !== 0) {\n onUploadStart();\n }\n }}\n onUploadSuccess={(fileResponse) => {\n if (fileResponse === undefined) {\n return;\n }\n setTotal((prevTotal) => (prevTotal !== undefined ? prevTotal - 1 : 0));\n setFiles((prevFiles) => (multiple ? [...prevFiles, fileResponse] : [fileResponse]));\n }}\n />\n </CSSHidden>\n </>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { WidgetArticleGalleryType, WidgetDisplayMode, WidgetStateProps, WidgetsRootState } from 'jamespot-user-api';\n\nimport JRCore from 'App';\nimport { Widget } from 'jamespot-front-business';\nimport { JRCWidgetEmptyInplace } from 'jamespot-react-components';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst JRCWidgetArticleGallery = JRCore.registry.getLazyComponent('WidgetArticleGallery');\n\nconst FileViewer = JRCore.registry.getLazyComponent('FileViewer');\n\nexport const JRCWidgetArticleGalleryWrapper = ({\n widget,\n inplace,\n mode,\n onStateChange,\n}: {\n widget: WidgetArticleGalleryType;\n inplace?: boolean;\n mode?: WidgetDisplayMode;\n onStateChange: (state: WidgetStateProps) => void;\n}) => {\n const { uniqid } = widget;\n const { files } = widget.content;\n const dispatch = useDispatch();\n const widgetWrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n\n React.useEffect(() => {\n onStateChange({ mounted: true });\n }, []);\n\n return files !== undefined ? (\n <>\n {mode === 'edit' ? (\n <JRCWidgetArticleGallery\n files={files}\n maxWidth={800}\n gap={widget.content.gap ?? '10'}\n column={widget.content.column ?? '3'}\n onClick={() => undefined}\n />\n ) : (\n <FileViewer files={files} openWithOptions={{}}>\n {(open) => {\n return (\n <JRCWidgetArticleGallery\n files={files}\n maxWidth={600}\n gap={widget.content.gap ?? '10'}\n column={widget.content.column ?? '3'}\n onClick={(idFile) => open(idFile)}\n />\n );\n }}\n </FileViewer>\n )}\n {inplace && mode === 'edit' ? (\n <WidgetUploader\n initialFiles={files}\n initialClick={isActive}\n accept={'image/png, image/jpeg, image/jpg'}\n multiple={true}\n onUploadSuccess={(files) => {\n if (widgetWrapper?.widget.name === 'widget-article-gallery') {\n dispatch(\n Widget.slice.actions.updateWidget({\n uniqid,\n content: { files },\n }),\n );\n }\n }}\n onUploadStart={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n }}\n onUploadEnd={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: false }));\n }}>\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Gallery_Empty_Label'}\n description={'WIDGET_Article_Gallery_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={() => undefined}\n />\n </WidgetUploader>\n ) : (\n <></>\n )}\n </>\n ) : (\n <></>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport jamespot, {\n jFileLittle,\n WidgetArticleAttachmentType,\n WidgetDisplayMode,\n WidgetStateProps,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport JRCore from 'App';\nimport { Application, Toast, Widget } from 'jamespot-front-business';\nimport { JRCWidgetEmptyInplace, JRCFileViewerOpenWithOptionsType } from 'jamespot-react-components';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst JRCWidgetArticleAttachment = JRCore.registry.getLazyComponent('WidgetArticleAttachment');\n\nconst FileViewer = JRCore.registry.getLazyComponent('FileViewer');\n\n// DUPLICATE FROM WEDOC\nexport const wedocWindowOpen = (idFile: number, hash: string, target?: '_blank') => {\n window.open(getWedocFilePath(idFile, hash), target);\n};\n\n// DUPLICATE FROM WEDOC\nexport function getWedocFilePath(idFile: number, hash: string) {\n return `/ng/rr/wedoc/file/${idFile}/${hash}`;\n}\n\nexport const JRCWidgetArticleAttachmentWrapper = ({\n widget,\n inplace,\n mode,\n onStateChange,\n}: {\n widget: WidgetArticleAttachmentType;\n inplace?: boolean;\n mode?: WidgetDisplayMode;\n onStateChange: (state: WidgetStateProps) => void;\n}) => {\n const { uniqid } = widget;\n const { files } = widget.content;\n const dispatch = useDispatch();\n const widgetWrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n\n React.useEffect(() => {\n onStateChange({ mounted: true });\n }, []);\n\n const onlyOffice = useSelector((state: any) => Application.selectors.selectById(state, 'OnlyOfficeHook'));\n\n const onClick = (file: jFileLittle | undefined) => {\n if (!file) {\n return;\n }\n jamespot.share\n .getObjectAccessHash(`fileArticle/${file.id}`)\n .then((response) => {\n if (response.result === '') {\n throw new Error('result empty');\n }\n const hash = response.result;\n wedocWindowOpen(file.id, hash);\n })\n .catch(() => {\n dispatch(Toast.actions.error({ label: 'Unable to open this file' }, 6000));\n });\n };\n\n const option = [\n {\n label: 'Wedoc',\n onClick: onClick,\n },\n ];\n\n const openWithOptions: JRCFileViewerOpenWithOptionsType = onlyOffice\n ? {\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': option,\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': option,\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation': option,\n }\n : {};\n\n return files !== undefined ? (\n <>\n {mode !== 'view' ? (\n <JRCWidgetArticleAttachment files={files} onClick={() => undefined} />\n ) : (\n <FileViewer files={files} openWithOptions={openWithOptions}>\n {(open) => {\n return <JRCWidgetArticleAttachment files={files} onClick={(idFile) => open(idFile)} />;\n }}\n </FileViewer>\n )}\n {inplace && mode !== 'view' ? (\n <WidgetUploader\n initialFiles={files}\n initialClick={isActive}\n multiple={true}\n accept={'*'}\n onUploadSuccess={(files) => {\n if (widgetWrapper?.widget.name === 'widget-article-attachment') {\n dispatch(\n Widget.slice.actions.updateWidget({\n uniqid,\n content: { files },\n }),\n );\n }\n }}\n onUploadStart={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n }}\n onUploadEnd={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: false }));\n }}>\n {mode === 'edit' ? (\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Attachment_Empty_Label'}\n description={'WIDGET_Article_Attachment_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={() => undefined}\n />\n ) : (\n <></>\n )}\n </WidgetUploader>\n ) : (\n <></>\n )}\n </>\n ) : (\n <></>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { WidgetArticleImageType, WidgetDisplayMode, WidgetStateProps, WidgetsRootState } from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\nimport { Widget } from 'jamespot-front-business';\nimport { JRCWidgetEmptyInplace } from 'jamespot-react-components';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst JRCWidgetArticleImage = JRCore.registry.getLazyComponent('WidgetArticleImage');\n\nimport styled from 'styled-components';\n\nconst CSSImageWrapperHover = styled.div`\n position: absolute;\n inset: 0;\n background-color: rgba(0, 0, 0, 0.4);\n pointer-event: none;\n display: flex;\n justify-content: center;\n align-items: center;\n opacity: 0;\n color: ${(props) => props.theme.color.white};\n &:hover {\n opacity: 1;\n }\n`;\n\nexport const JRCWidgetArticleImageWrapper = ({\n widget,\n inplace,\n mode,\n onStateChange,\n}: {\n widget: WidgetArticleImageType;\n inplace?: boolean;\n mode?: WidgetDisplayMode;\n onStateChange: (state: WidgetStateProps) => void;\n}) => {\n const { uniqid } = widget;\n const { file, displayAs, useFilter, backgroundPosition, backgroundSize, borderRadius } = widget.content;\n const dispatch = useDispatch();\n const widgetWrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const intl = useIntl();\n\n React.useEffect(() => {\n onStateChange({ mounted: true });\n }, []);\n\n return (\n <>\n <JRCWidgetArticleImage\n maxWidth={mode !== 'view' ? 800 : 600}\n uri={file !== undefined ? `/imagecache/fitx1200/fileArticle/${file.id}.png` : undefined}\n displayAs={displayAs ?? 'image'}\n borderRadius={borderRadius ?? '8'}\n useFilter={useFilter ?? false}\n backgroundPosition={backgroundPosition ?? 'center'}\n backgroundSize={backgroundSize ?? 'auto'}\n />\n {inplace && mode === 'edit' ? (\n <WidgetUploader\n initialFiles={[]}\n initialClick={isActive}\n accept={'image/png, image/jpeg, image/jpg'}\n multiple={false}\n onUploadSuccess={(files) => {\n if (widgetWrapper?.widget.name === 'widget-article-image' && files[0] !== undefined) {\n dispatch(\n Widget.slice.actions.updateWidget({\n uniqid,\n content: { file: files[0] },\n }),\n );\n }\n }}\n onUploadStart={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: true }));\n }}\n onUploadEnd={() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, loading: false }));\n }}>\n {file !== undefined ? (\n <CSSImageWrapperHover>\n {intl.formatMessage({ id: 'ARTICLE_Widget_Image_Change' })}\n </CSSImageWrapperHover>\n ) : (\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Image_Empty_Label'}\n description={'WIDGET_Article_Image_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={() => undefined}\n />\n )}\n </WidgetUploader>\n ) : (\n <></>\n )}\n </>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { WidgetArticleTitleType, WidgetDisplayMode, WidgetsRootState } from 'jamespot-user-api';\n\nimport { Widget } from 'jamespot-front-business';\nimport { JRCWidgetArticleTitle } from 'jamespot-react-components';\n\nimport styled from 'styled-components';\n\nconst Wrapper = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n min-height: 60px;\n align-items: center;\n`;\n\nconst ToolWrapper = styled.div`\n display: flex;\n flex-direction: row;\n border-radius: 8px;\n overflow: hidden;\n margin: 4px;\n border: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nconst Tool = styled.button<{ isActive: boolean }>`\n display: flex;\n width: 40px;\n height: 40px;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n opacity: ${(props) => (props.isActive ? '1.0' : '.8')};\n background-color: ${(props) => (props.isActive ? props.theme.color.grey1 : props.theme.color.white)};\n &:hover {\n background-color: ${(props) => props.theme.color.grey1};\n }\n`;\n\nexport const JRCWidgetArticleTitleWrapper = ({\n widget,\n inplace,\n mode,\n}: {\n widget: WidgetArticleTitleType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const { uniqid } = widget;\n const { text, color, heading } = widget.content;\n const dispatch = useDispatch();\n const widgetWrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n\n return (\n <Wrapper>\n <JRCWidgetArticleTitle\n text={text}\n color={color}\n heading={heading}\n autoFocus={isActive}\n inplace={inplace}\n mode={mode}\n onChange={(text) => {\n if (widgetWrapper?.widget.name === 'widget-article-title') {\n dispatch(\n Widget.slice.actions.updateWidget({\n uniqid,\n content: { ...widgetWrapper.widget.content, text },\n }),\n );\n }\n }}\n />\n {isActive && mode === 'edit' ? (\n <Toolbar\n heading={heading}\n onClick={(heading) => {\n if (widgetWrapper?.widget.name === 'widget-article-title') {\n dispatch(\n Widget.slice.actions.updateWidget({\n uniqid,\n content: { ...widgetWrapper.widget.content, heading },\n }),\n );\n }\n }}\n />\n ) : (\n <></>\n )}\n </Wrapper>\n );\n};\n\nexport const Toolbar = ({ heading = 'h1', onClick }: { heading?: string; onClick: (size: string) => void }) => {\n const sizes: string[] = ['h1', 'h2', 'h3', 'h4'];\n return (\n <ToolWrapper>\n {sizes.map((sizeValue, index: number) => (\n <Tool key={index} isActive={heading === sizeValue} onClick={() => onClick(sizeValue)}>\n {sizeValue}\n </Tool>\n ))}\n </ToolWrapper>\n );\n};\n","import React from 'react';\n\nimport { useDispatch } from 'react-redux';\n\nimport { CombinedWidgetContent, CombinedWidgetType, WidgetDisplayMode, WidgetStateProps } from 'jamespot-user-api';\n\nimport JRCore from 'App';\nimport { Widget } from 'jamespot-front-business';\n\nimport { JRCWidgetArticleGalleryWrapper } from './wrapper/JRCWidgetArticleGalleryWrapper';\nimport { JRCWidgetArticleAttachmentWrapper } from './wrapper/JRCWidgetArticleAttachmentWrapper';\nimport { JRCWidgetArticleImageWrapper } from './wrapper/JRCWidgetArticleImageWrapper';\nimport { JRCWidgetArticleTitleWrapper } from './wrapper/JRCWidgetArticleTitleWrapper';\n\nconst JRCWidgetArticleButton = JRCore.registry.getLazyComponent('WidgetArticleButton');\nconst JRCWidgetArticleText = JRCore.registry.getLazyComponent('WidgetArticleText');\n\nexport const DisplayWidget = ({\n widget,\n inplace = false,\n isComponentVisible = false,\n mode = 'view',\n onClick,\n}: {\n widget: CombinedWidgetType;\n width?: number | undefined;\n inplace: boolean;\n isComponentVisible: boolean | undefined;\n mode: WidgetDisplayMode;\n onClick: () => void;\n}) => {\n const dispatch = useDispatch();\n const { name, uniqid } = widget;\n\n const onChange = (content: CombinedWidgetContent, override?: boolean) =>\n dispatch(Widget.slice.actions.updateWidget({ uniqid, content, override }));\n\n const onStateChange = (states: WidgetStateProps) =>\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, ...states }));\n\n switch (name) {\n default:\n return <>cannot display widget ({name})</>;\n case 'widget-article-button':\n return (\n <JRCWidgetArticleButton\n isComponentVisible={isComponentVisible}\n content={widget.content}\n inplace={inplace}\n mode={mode}\n onChange={onChange}\n onClick={onClick}\n onStateChange={onStateChange}\n />\n );\n case 'widget-article-gallery':\n return (\n <JRCWidgetArticleGalleryWrapper\n widget={widget}\n inplace={inplace}\n mode={mode}\n onStateChange={onStateChange}\n />\n );\n case 'widget-article-attachment':\n return (\n <JRCWidgetArticleAttachmentWrapper\n widget={widget}\n inplace={inplace}\n mode={mode}\n onStateChange={onStateChange}\n />\n );\n case 'widget-article-image':\n return (\n <JRCWidgetArticleImageWrapper\n widget={widget}\n inplace={inplace}\n mode={mode}\n onStateChange={onStateChange}\n />\n );\n case 'widget-article-title':\n return <JRCWidgetArticleTitleWrapper widget={widget} inplace={inplace} mode={mode} />;\n case 'widget-article-text':\n return (\n <JRCWidgetArticleText\n content={widget.content}\n isComponentVisible={isComponentVisible}\n inplace={inplace}\n mode={mode}\n onChange={onChange}\n onStateChange={onStateChange}\n />\n );\n }\n};\n","import styled from 'styled-components';\n\nexport const CSSWidgetLayer = styled.div<{ opacity: number; backgroundColor: string; pointerEvents: string }>`\n position: absolute;\n inset: 0;\n opacity: ${(props) => props.opacity};\n background-color: ${(props) => props.backgroundColor};\n pointer-events: ${(props) => props.pointerEvents};\n`;\n","import React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { WidgetVector, WidgetsRootState, WidgetDisplayMode, WidgetKeys } from 'jamespot-user-api';\n\nimport { WidgetEditor, Widget } from 'jamespot-front-business';\nimport WidgetWrapperCore from '../WidgetWrapperCore';\nimport { CSSWidgetLayer } from './WidgetLayer.style';\nimport { BETA_JRCDoubleClick } from 'jamespot-react-components';\n\n/*\n Widget layering\n*/\n\nexport const WidgetLayer = ({ uniqid, mode }: { uniqid: string; mode: WidgetDisplayMode }) => {\n const layers = useSelector((state: WidgetsRootState) => state.widgets.ids[uniqid].widget.layers, shallowEqual);\n return (\n <>\n {layers?.map((layer, index) => {\n if (mode === 'edit') {\n return <Layer uniqid={layer} key={index} mode={'edit'} />;\n }\n\n return <Layer uniqid={layer} key={index} mode={'edit'} />;\n })}\n </>\n );\n};\n\nconst Layer = ({ uniqid, mode }: { uniqid: string; mode: WidgetDisplayMode }) => {\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[uniqid]);\n if (mode === 'view') {\n return (\n <CSSWidgetLayer opacity={1} backgroundColor={'transparent'} pointerEvents={'none'}>\n {layer.widgets.map((widgetWrapper, index) => {\n return (\n <LayerWidget\n key={index}\n layerId={layer.uniqid}\n uniqid={widgetWrapper.widget.uniqid}\n mode={'view'}\n />\n );\n })}\n </CSSWidgetLayer>\n );\n }\n\n return (\n <CSSWidgetLayer\n opacity={layer.visible ? 1 : 0}\n backgroundColor={layer.visible ? 'rgba(255,255,255,.1)' : 'transparent'}\n pointerEvents={layer.locked ? 'none' : 'all'}>\n {layer.widgets.map((widgetWrapper, index) => {\n return (\n <LayerWidget\n key={index}\n layerId={layer.uniqid}\n uniqid={widgetWrapper.widget.uniqid}\n mode={'edit'}\n />\n );\n })}\n </CSSWidgetLayer>\n );\n};\n\n/*\n Widget from the layer\n*/\nconst LayerWidget = ({ uniqid, layerId, mode }: { uniqid: string; layerId: string; mode: WidgetDisplayMode }) => {\n const dispatch = useDispatch();\n const widgetWrapper = useSelector((state: WidgetsRootState) => state.widgets.ids[uniqid], shallowEqual);\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[layerId]);\n\n if (!widgetWrapper) {\n return <></>;\n }\n\n if (!layer) {\n return <></>;\n }\n\n if (!layer.position) {\n return <></>;\n }\n\n const onDoubleTap = (uniqid: string, name: WidgetKeys) => {\n /*\n Open editor\n */\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name }));\n };\n\n const onMouseUp = (position: WidgetVector) => {\n dispatch(Widget.slice.actions.updateLayer({ uniqid: layerId, props: { position } }));\n };\n\n if (mode === 'view') {\n return (\n <div style={{ position: 'absolute', top: layer.position.y, left: layer.position.x }}>\n <WidgetWrapperCore uniqid={uniqid} widget={widgetWrapper} mode={mode} inplace={true} />\n </div>\n );\n }\n\n return (\n <DraggableHandler\n position={{ x: layer.position.x, y: layer.position.y }}\n onMouseUp={(position: WidgetVector) => {\n if (\n (layer.position && layer.position.x !== position.x) ||\n (layer.position && layer.position.y !== position.y)\n ) {\n onMouseUp(position);\n }\n }}>\n <BETA_JRCDoubleClick\n onDoubleTap={() => onDoubleTap(widgetWrapper.widget.uniqid, widgetWrapper.widget.name)}>\n <WidgetWrapperCore uniqid={uniqid} widget={widgetWrapper} mode={mode} inplace={true} />\n </BETA_JRCDoubleClick>\n </DraggableHandler>\n );\n};\n\nexport type Vector = {\n x: number;\n y: number;\n};\n\n// TODO: COMBINE WITH THE ONE USED ON COLOR PICKER\n// TODO: COMBINE WITH THE ONE USED ON COLOR PICKER\n// TODO: COMBINE WITH THE ONE USED ON COLOR PICKER\nexport const DraggableHandler = ({\n position,\n children,\n onMouseUp,\n}: {\n position: Vector;\n children: React.ReactElement;\n onMouseUp: (position: Vector) => void;\n}) => {\n const [mouseIsDown, setMouseDown] = React.useState<boolean>(false);\n const [mouse, setMouse] = React.useState<Vector>({ x: 0, y: 0 });\n const [start, setStart] = React.useState<Vector>({ x: 0, y: 0 });\n const [child, setChild] = React.useState<Vector>({ x: position.x, y: position.y });\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n const handleMouseDown = (event: any) => {\n setMouseDown(true);\n if (ref.current) {\n setMouse({ x: event.nativeEvent.clientX, y: event.nativeEvent.clientY });\n setStart({ x: child.x, y: child.y });\n }\n };\n\n const handleMouseMove = React.useCallback(\n (event: any) => {\n if (mouseIsDown && ref.current) {\n const dx = start.x + (event.clientX - mouse.x);\n const dy = start.y + (event.clientY - mouse.y);\n\n setChild({ x: dx, y: dy });\n }\n },\n [mouseIsDown],\n );\n\n const handleMouseUp = () => {\n setMouseDown(false);\n onMouseUp({ x: child.x, y: child.y });\n };\n\n React.useEffect(() => {\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [handleMouseMove]);\n\n return (\n <div style={{ position: 'absolute', top: child.y, left: child.x }} ref={ref} onMouseDown={handleMouseDown}>\n {children}\n </div>\n );\n};\n","import React from 'react';\nimport { useSelector, useDispatch, shallowEqual } from 'react-redux';\n\nimport { WidgetDisplayMode, WidgetsRootState, WidgetWrapperProps } from 'jamespot-user-api';\nimport { WidgetState } from './WidgetState';\nimport { DisplayWidget } from './Widget';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { useComponentVisible } from './hooks';\nimport { WidgetLayer } from './WidgetLayer/WidgetLayer';\n\n/*\n This is a widget wrapper\n*/\nexport const WidgetWrapperCore = ({\n uniqid,\n widget,\n inplace = true,\n mode,\n width,\n}: {\n uniqid: string;\n widget: WidgetWrapperProps;\n inplace?: boolean;\n mode: WidgetDisplayMode;\n width?: number | undefined;\n}) => {\n const dispatch = useDispatch();\n const widgetWrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const isBusy = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid)?.busy,\n shallowEqual,\n );\n const indexOrder = useSelector((state: WidgetsRootState) => state.widgets.editableMap[uniqid], shallowEqual);\n const currentEditableWidgetId = useSelector(\n (state: WidgetsRootState) => state.widgets.currentEditableWidgetId,\n shallowEqual,\n );\n const isActive = useSelector(\n (state: WidgetsRootState) => state.widgets.currentEditableWidgetId === uniqid,\n shallowEqual,\n );\n const { ref, isComponentVisible, setIsComponentVisible } = useComponentVisible(false);\n\n React.useEffect(() => {\n if (widget) {\n /*\n Register widget\n */\n dispatch(Widget.slice.actions.registerWidget({ uniqid, widget }));\n }\n }, []);\n\n React.useEffect(() => {\n if (!isComponentVisible) {\n if (uniqid === currentEditableWidgetId) {\n dispatch(Widget.slice.actions.setEditableWidgetId({ uniqid: undefined }));\n }\n }\n }, [isComponentVisible]);\n\n React.useEffect(() => {\n if (isComponentVisible !== isActive) {\n setIsComponentVisible(isActive);\n }\n }, [isActive]);\n\n if (widgetWrapper === undefined) {\n return <>This widget cannot be desplayed</>;\n }\n\n const onClick = () => {\n if (mode === 'edit') {\n registerEditor();\n } else {\n if (widgetWrapper.widget.name === 'widget-article-button') {\n switch (widgetWrapper.widget.content.openingType) {\n case 'link':\n if (widgetWrapper.widget.content.openingTypeLink) {\n window.open(\n widgetWrapper.widget.content.openingTypeLink.url,\n widgetWrapper.widget.content.openingTypeLink.target,\n );\n }\n break;\n }\n }\n }\n };\n\n const registerEditor = () => {\n if (mode === 'view') {\n return;\n }\n /*\n Register editor\n */\n const { widget } = widgetWrapper;\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: widget.name,\n }),\n );\n };\n\n if (inplace && mode !== 'view') {\n return (\n <div\n style={{ minWidth: width !== undefined ? width : '100%' }}\n ref={ref}\n onClick={() => {\n setIsComponentVisible(true);\n if (indexOrder) {\n dispatch(Widget.slice.actions.setEditableIndex({ index: indexOrder.index }));\n dispatch(Widget.slice.actions.setEditableWidgetId({ uniqid }));\n }\n }}>\n <DisplayWidget\n width={width}\n widget={widgetWrapper.widget}\n inplace={inplace}\n isComponentVisible={isComponentVisible || isBusy || isActive ? true : false}\n mode={mode}\n onClick={onClick}\n />\n <WidgetLayer uniqid={uniqid} mode={mode} />\n <WidgetState name={widgetWrapper.widget.name} uniqid={widgetWrapper.widget.uniqid} inplace={inplace} />\n </div>\n );\n }\n\n return (\n <div\n style={{ flex: 1, display: 'flex', minWidth: width !== undefined ? width : '100%' }}\n onClick={registerEditor}>\n <DisplayWidget\n widget={widgetWrapper.widget}\n isComponentVisible={false}\n inplace={inplace}\n mode={mode}\n width={width}\n onClick={onClick}\n />\n <WidgetLayer uniqid={uniqid} mode={mode} />\n <WidgetState name={widgetWrapper.widget.name} uniqid={widgetWrapper.widget.uniqid} inplace={inplace} />\n </div>\n );\n};\n\nexport default WidgetWrapperCore;\n","import styled from 'styled-components';\n\nexport const CSSSquareWidgetWrapper = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 10px;\n justify-content: center;\n`;\n\nexport const CSSSquareWidget = styled.div<{ available: boolean }>`\n border: 1px solid ${(props) => props.theme.color.grey2};\n border-radius: 8px;\n cursor: pointer;\n padding: 12px;\n position: relative;\n opacity: ${(props) => (props.available ? '1' : '.4')};\n pointer-events: ${(props) => (props.available ? 'all' : 'none')};\n\n .show-on-hover {\n position: absolute;\n inset: 0;\n border-radius: 8px;\n justify-content: center;\n align-items: center;\n display: flex;\n opacity: 0;\n background-color: #ffffffe6;\n }\n\n &:hover {\n .show-on-hover {\n opacity: 1;\n }\n }\n`;\n\nexport const CSSWidgetButton = styled.div<{ open: boolean }>`\n border: 2px solid ${(props) => props.theme.color.primary};\n height: ${(props) => (props.open ? '320' : '54')}px;\n border-radius: 8px;\n display: flex;\n justify-content: top;\n flex-direction: column;\n transition: height 0.4s;\n overflow: hidden;\n flex-direction: column;\n`;\n\nexport const CSSWrapWidgetWrapper = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: center;\n gap: 10px;\n`;\n\nexport const CSSWrapTitle = styled.div`\n min-height: 50px;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n color: ${(props) => props.theme.color.primary};\n`;\n\nexport const CSSWrapWidget = styled.button<{ open: boolean; index: number }>`\n height: 72px;\n display: flex;\n justify-content: center;\n align-items: center;\n width: 40%;\n border: 1px solid ${(props) => props.theme.color.grey2};\n border-radius: 8px;\n transition: opacity 0.4s ease ${(props) => props.index * 40}ms;\n opacity: ${(props) => (props.open ? 1 : 0)};\n`;\n","import React from 'react';\nimport { useIntl } from 'react-intl';\n\nimport { WidgetDefinitionProps, WidgetKeys, WidgetWrapperProps } from 'jamespot-user-api';\n\nimport JRCore from 'App';\nimport { JRCModalProps } from 'jamespot-react-components';\nimport { Widget } from 'jamespot-front-business';\nimport { getBuilderWidgets } from '../namespace';\nimport {\n CSSSquareWidget,\n CSSSquareWidgetWrapper,\n CSSWidgetButton,\n CSSWrapTitle,\n CSSWrapWidget,\n CSSWrapWidgetWrapper,\n} from './WidgetList.style';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\nconst JRCModal = JRCore.registry.getLazyComponent('Modal');\n\ntype WidgetListMode = 'button' | 'list' | 'gallery' | 'custom' | 'article';\n\n/*\n Widget Builder\n*/\nexport const WidgetList = ({\n mode,\n view,\n children,\n namespace = 'default',\n onChange,\n}: {\n mode?: WidgetListMode;\n view?: string;\n children?: any;\n namespace?: string;\n onChange: (widget: WidgetWrapperProps) => void;\n}) => {\n const [isOpen, setOpen] = React.useState<boolean>(false);\n const widgets = getBuilderWidgets(namespace);\n const intl = useIntl();\n\n const args: JRCModalProps = {\n open: isOpen,\n title: 'widget builder',\n showIconClose: true,\n portalId: 'react-modal',\n isFullHeight: true,\n closeHandler: () => setOpen(false),\n };\n\n const onClick = (name: WidgetKeys) => {\n onChange(Widget.factory(name));\n setOpen(false);\n };\n\n return (\n <>\n <JRCModal {...args}>\n <CSSSquareWidgetWrapper>\n {widgets.map((widget, index: number) => {\n return (\n <CSSSquareWidget\n key={index}\n onClick={() => onClick(widget.name)}\n available={widget.available}>\n <img src={widget.img} />\n <div className=\"show-on-hover\">{intl.formatMessage({ id: widget.label })}</div>\n </CSSSquareWidget>\n );\n })}\n </CSSSquareWidgetWrapper>\n </JRCModal>\n {mode === 'custom' && children ? <div onClick={() => setOpen(true)}>{children}</div> : <></>}\n {mode === 'button' && view === 'edit' ? (\n <JRCButton onClick={() => setOpen(true)} variant={'outlined'} minWidth={'100%'}>\n {intl.formatMessage({ id: 'WIDGET_Add_Widget' })}\n </JRCButton>\n ) : (\n <></>\n )}\n {mode === 'gallery' && view === 'edit' ? (\n <CSSSquareWidgetWrapper>\n {widgets.map((widget, index: number) => {\n return (\n <CSSSquareWidget\n key={index}\n onClick={() => onClick(widget.name)}\n available={widget.available}>\n <img src={widget.img} />\n <div className=\"show-on-hover\">{intl.formatMessage({ id: widget.label })}</div>\n </CSSSquareWidget>\n );\n })}\n </CSSSquareWidgetWrapper>\n ) : (\n <></>\n )}\n {mode === 'article' && view === 'edit' ? <WidgetModeArticle widgets={widgets} onClick={onClick} /> : <></>}\n </>\n );\n};\n\nconst WidgetModeArticle = ({\n widgets,\n onClick,\n}: {\n widgets: WidgetDefinitionProps[];\n onClick: (name: WidgetKeys) => void;\n}) => {\n const [open, isOpen] = React.useState(false);\n const intl = useIntl();\n return (\n <>\n <CSSWidgetButton open={open}>\n <CSSWrapTitle onClick={() => isOpen(!open)}>\n {intl.formatMessage({ id: 'WIDGET_Add_Widget' })}\n </CSSWrapTitle>\n <CSSWrapWidgetWrapper>\n {widgets.map((widget, index) => {\n return (\n <CSSWrapWidget\n key={widget.name}\n open={open}\n index={index}\n onClick={() => onClick(widget.name)}>\n {intl.formatMessage({ id: widget.label })}\n </CSSWrapWidget>\n );\n })}\n </CSSWrapWidgetWrapper>\n </CSSWidgetButton>\n </>\n );\n};\n","import { Widget } from 'jamespot-front-business';\nimport { WidgetDefinitionProps } from 'jamespot-user-api';\n\nexport function getBuilderWidgets(namespace: string): WidgetDefinitionProps[] {\n switch (namespace) {\n case 'widget-article-image':\n return [\n Widget.definition(Widget.const.WIDGET_ARTICLE_TITLE),\n Widget.definition(Widget.const.WIDGET_ARTICLE_BUTTON),\n ];\n default:\n return [\n Widget.definition(Widget.const.WIDGET_ARTICLE_TITLE),\n Widget.definition(Widget.const.WIDGET_ARTICLE_TEXT),\n Widget.definition(Widget.const.WIDGET_ARTICLE_IMAGE),\n Widget.definition(Widget.const.WIDGET_ARTICLE_BUTTON),\n Widget.definition(Widget.const.WIDGET_ARTICLE_GALLERY),\n Widget.definition(Widget.const.WIDGET_ARTICLE_ATTACHMENT),\n ];\n }\n}\n","import styled from 'styled-components';\nimport { EDITOR_MENU_WIDTH, EDITOR_WIDTH } from './const';\n\nconst INPUT_HEIGHT = 50;\nconst RADIUS = 8;\n\nexport const CSSEditorComponentWrapper = styled.div`\n margin-bottom: 24px;\n`;\n\nexport const CSSEditorComponentLabel = styled.div`\n margin-bottom: 4px;\n`;\n\nexport const CSSEditorPortal = styled.div<{ isActive: boolean }>`\n position: absolute;\n background-color: ${(props) => (props.isActive ? 'rgba(0,0,0,.1)' : 'transparent')};\n inset: 0;\n pointer-events: ${(props) => (props.isActive ? 'all' : 'none')};\n flex: 1;\n display: flex;\n overflow: hidden;\n`;\n\nexport const CSSEditorHeader = styled.div`\n flex-direction: row;\n display: flex;\n min-height: 60px;\n border-bottom: 1px solid ${(props) => props.theme.color.grey2};\n`;\n\nexport const CSSEditorAction = styled.div`\n width: 60px;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const CSSEditorLabel = styled.div`\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const CSSEditor = styled.div<{ visible: boolean }>`\n position: absolute;\n top: 90px;\n right: ${(props) => (props.visible ? '0' : '-1000')}px;\n width: ${EDITOR_WIDTH}px;\n bottom: 0;\n display: flex;\n background-color: ${(props) => props.theme.color.white};\n flex-direction: row;\n transition: all 0.4s;\n box-shadow: -1px 1px 10px 0px rgb(0 0 0 / 20%);\n`;\n\nexport const CSSEditorContent = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n padding: 12px;\n overflow: auto;\n margin-bottom: 40px;\n`;\n\nexport const CSSEditorMenu = styled.div`\n width: ${EDITOR_MENU_WIDTH}px;\n padding-top: 60px;\n display: flex;\n flex-direction: column;\n border-right: 1px solid ${(props) => props.theme.color.grey2};\n`;\n\nexport const CSSEditorMenuButton = styled.button<{ isActive?: boolean }>`\n border-radius: 4px;\n cursor: pointer;\n height: 42px;\n margin: 4px;\n width: 42px;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: ${(props) => (props.isActive ? props.theme.color.grey1 : props.theme.color.white)};\n &:hover {\n background-color: ${(props) => props.theme.color.grey1};\n }\n`;\n\nexport const CSSInputWrapper = styled.div`\n display: flex;\n border: 1px solid ${(props) => props.theme.color.grey1};\n border-radius: ${RADIUS}px;\n margin-bottom: 24px;\n input {\n width: 100%;\n border: 0;\n height: ${INPUT_HEIGHT}px;\n margin: 0;\n }\n`;\n\nexport const CSSEditorWidget = styled.div`\n display: flex;\n flex-direction: row;\n padding: 12px;\n background-color: ${(props) => props.theme.color.grey0};\n border-radius: 8px;\n margin-bottom: 4px;\n`;\n\nexport const CSSEditorWidgetLabel = styled.div`\n display: flex;\n flex: 1;\n align-items: center;\n`;\n\nexport const CSSEditorWidgetOption = styled.div`\n width: 40px;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nexport const CSSEditorLayer = styled.div`\n flex-direction: row;\n display: flex;\n align-items: center;\n`;\n\nexport const CSSEditorLayerTitle = styled.div`\n flex: 1;\n display: flex;\n align-items: center;\n`;\n","export const EDITOR_TOP = 90;\nexport const EDITOR_WIDTH = 440;\nexport const EDITOR_MENU_WIDTH = 50;\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { JRCButton, JRCIcon } from 'jamespot-react-components';\n\nimport { CSSEditorAction, CSSEditorHeader, CSSEditorLabel, CSSEditorMenuButton } from './style';\nimport { WidgetEditor, EditorsRootState } from 'jamespot-front-business';\n\n/*\n Editor popup (center part)\n*/\nexport const EditorPopup = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const editor = useSelector((state: EditorsRootState) => WidgetEditor.selectors.selectEditor(state, uniqid));\n\n const onClick = () => {\n dispatch(WidgetEditor.slice.actions.flushEditorPopup({ uniqid }));\n };\n\n const onSave = () => {\n dispatch(WidgetEditor.slice.actions.flushEditorPopup({ uniqid }));\n };\n\n if (editor && editor.popup && editor.view) {\n return (\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', backgroundColor: 'white', marginTop: 90 }}>\n <CSSEditorHeader>\n <CSSEditorAction />\n <CSSEditorLabel>Popup</CSSEditorLabel>\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClick}>\n <JRCIcon name=\"icon-times\" color=\"grey2\" />\n </CSSEditorMenuButton>\n </CSSEditorAction>\n </CSSEditorHeader>\n <div style={{ flex: 1, display: 'flex' }}>{editor.view}</div>\n <CSSEditorHeader>\n <JRCButton onClick={onSave}>Save</JRCButton>\n </CSSEditorHeader>\n </div>\n );\n }\n\n return <></>;\n};\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { WidgetEditor, Widget } from 'jamespot-front-business';\n\nimport JRCore from 'App';\n\nimport { CombinedWidgetContent, WidgetsRootState, WidgetStateProps } from 'jamespot-user-api';\n\nconst JRCWidgetArticleTitleEditor = JRCore.registry.getLazyComponent('WidgetArticleTitleEditor');\nconst JRCWidgetArticleImageEditor = JRCore.registry.getLazyComponent('WidgetArticleImageEditor');\nconst JRCWidgetArticleTextEditor = JRCore.registry.getLazyComponent('WidgetArticleTextEditor');\nconst JRCWidgetArticleGalleryEditor = JRCore.registry.getLazyComponent('WidgetArticleGalleryEditor');\nconst JRCWidgetArticleButtonEditor = JRCore.registry.getLazyComponent('WidgetArticleButtonEditor');\nconst JRCWidgetArticleAttachmentEditor = JRCore.registry.getLazyComponent('WidgetArticleAttachmentEditor');\n\n/*\n Editor Factory\n*/\nexport const Editor = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const token = useSelector(Widget.selectors.selectToken);\n const widgetWrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n\n const onSave = (content: CombinedWidgetContent) => {\n /*\n Update widget & Flush editor\n */\n if (widgetWrapper) {\n dispatch(Widget.slice.actions.updateWidget({ uniqid, content }));\n }\n\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n };\n\n const onChange = (content: CombinedWidgetContent, override?: boolean) =>\n dispatch(Widget.slice.actions.updateWidget({ uniqid, content, override }));\n\n const onStateChange = (states: WidgetStateProps, id?: string) => {\n /*\n Set widget state (busy, loading, initialized)\n */\n if (id !== undefined) {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid: id, ...states }));\n } else {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, ...states }));\n }\n };\n\n const onOpen = (view: React.ReactElement) => {\n /*\n Register popup (central)\n */\n dispatch(WidgetEditor.slice.actions.registerEditorPopup({ uniqid, view }));\n };\n\n switch (widgetWrapper?.widget.name) {\n default:\n return <>cannot display editor</>;\n case Widget.const.WIDGET_ARTICLE_BUTTON:\n return (\n <JRCWidgetArticleButtonEditor\n content={widgetWrapper.widget.content}\n onChange={onChange}\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n case Widget.const.WIDGET_ARTICLE_ATTACHMENT:\n return (\n <JRCWidgetArticleAttachmentEditor\n token={token}\n content={widgetWrapper.widget.content}\n onChange={onChange}\n onSave={onSave}\n onStateChange={onStateChange}\n onOpen={onOpen}\n />\n );\n case Widget.const.WIDGET_ARTICLE_GALLERY:\n return (\n <JRCWidgetArticleGalleryEditor\n token={token}\n content={widgetWrapper.widget.content}\n onChange={onChange}\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n case Widget.const.WIDGET_ARTICLE_TEXT:\n return (\n <JRCWidgetArticleTextEditor\n onChange={onChange}\n onSave={onSave}\n content={widgetWrapper.widget.content}\n />\n );\n case Widget.const.WIDGET_ARTICLE_IMAGE:\n return (\n <JRCWidgetArticleImageEditor\n content={widgetWrapper.widget.content}\n token={token}\n onChange={onChange}\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n case Widget.const.WIDGET_ARTICLE_TITLE:\n return (\n <JRCWidgetArticleTitleEditor\n onChange={onChange}\n onSave={onSave}\n content={widgetWrapper.widget.content}\n onOpen={onOpen}\n />\n );\n }\n};\n","import React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { WidgetEditor, Widget } from 'jamespot-front-business';\n\nimport { WidgetKeys, WidgetsRootState } from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport { CSSEditorWidget, CSSEditorWidgetLabel, CSSEditorWidgetOption } from './style';\nimport { BETA_JRCDragAndDrop, JRCIcon } from 'jamespot-react-components';\nimport { WidgetList } from 'registry/coreComponents';\n\n/*\n Editor widgets (widgets)\n*/\nexport const EditorTabWidgets = ({ uniqid }: { uniqid: string; namespace: string }) => {\n const dispatch = useDispatch();\n const intl = useIntl();\n const content = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetContent(state, uniqid));\n\n const onClick = (uniqid: string, name: WidgetKeys) => {\n /*\n Register Editor\n */\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name }));\n };\n\n return (\n <div style={{ flex: 1 }}>\n <Layers uniqid={uniqid} />\n {content && content.widgets ? (\n content.widgets.map((widgetWrapper, index: number) => {\n const def = Widget.definition(widgetWrapper.widget.name);\n return (\n <div key={index}>\n <CSSEditorWidget>\n <CSSEditorWidgetLabel\n onClick={() => onClick(widgetWrapper.widget.uniqid, widgetWrapper.widget.name)}>\n {intl.formatMessage({ id: def.label })}\n </CSSEditorWidgetLabel>\n <CSSEditorWidgetOption\n onClick={() => {\n if (content.widgets) {\n dispatch(\n Widget.slice.actions.updateWidget({\n uniqid,\n content: {\n ...content,\n widgets: [\n ...content.widgets.filter((_, n: number) => n !== index),\n ],\n },\n }),\n );\n }\n }}>\n <JRCIcon name={'icon-trash'} />\n </CSSEditorWidgetOption>\n </CSSEditorWidget>\n </div>\n );\n })\n ) : (\n <></>\n )}\n </div>\n );\n};\n\nconst Layers = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const layers = useSelector((state: WidgetsRootState) => state.widgets.ids[uniqid].widget.layers, shallowEqual);\n\n //const flushEditor = () => dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n\n return (\n <>\n <BETA_JRCDragAndDrop\n onDrag={() => {\n //console.log(dragIndex, hoverIndex)\n }}\n renderEl={(layer, index) => {\n return <EditorWidgetLayer uniqid={layer} key={index} />;\n }}\n elms={layers ? layers : []}\n />\n <WidgetList\n namespace={'default'}\n onChange={(widget) => {\n dispatch(Widget.slice.actions.registerLayer({ uniqid, widget }));\n }}\n mode={'button'}\n />\n </>\n );\n};\n\nconst EditorWidgetLayerLock = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[uniqid]);\n return (\n <div\n onClick={() => {\n dispatch(Widget.slice.actions.updateLayer({ uniqid, props: { locked: !layer.locked } }));\n }}>\n <JRCIcon name={layer.locked ? 'icon-lock' : 'icon-unlock'} />\n </div>\n );\n};\n\nconst EditorWidgetLayerVisibility = ({ uniqid }: { uniqid: string }) => {\n const dispatch = useDispatch();\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[uniqid]);\n return (\n <div\n onClick={() => {\n dispatch(Widget.slice.actions.updateLayer({ uniqid, props: { visible: !layer.visible } }));\n }}>\n <JRCIcon name={layer.visible ? 'icon-eye' : 'icon-eye-slash'} />\n </div>\n );\n};\n\nconst EditorWidgetLayerFlush = ({ uniqid, layerId }: { uniqid: string; layerId: string }) => {\n const dispatch = useDispatch();\n return (\n <div\n onClick={() => {\n dispatch(Widget.slice.actions.flushLayer({ uniqid, layerId }));\n }}>\n <JRCIcon name={'icon-trash'} />\n </div>\n );\n};\n\nconst EditorWidgetLayer = ({ uniqid }: { uniqid: string }) => {\n const layer = useSelector((state: WidgetsRootState) => state.widgets.layers[uniqid]);\n return (\n <>\n {layer.title}\n {layer.widgets.map((widget, index) => {\n const def = Widget.definition(widget.widget.name);\n\n return (\n <div style={{ flexDirection: 'row', display: 'flex' }} key={index}>\n <div style={{ flex: 1, alignItems: 'center' }}>{def.label}</div>\n <EditorWidgetLayerLock uniqid={uniqid} />\n <EditorWidgetLayerVisibility uniqid={uniqid} />\n <EditorWidgetLayerFlush uniqid={widget.widget.uniqid} layerId={layer.uniqid} />\n </div>\n );\n })}\n </>\n );\n};\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport JRCore from 'App';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\n\nimport { useIntl } from 'react-intl';\nimport { WidgetEditor, Widget } from 'jamespot-front-business';\nimport { useForm } from 'react-hook-form';\nimport { JRCInputText } from 'jamespot-react-components';\nimport { WidgetsRootState } from 'jamespot-user-api';\n\n/*\n Editor tab wrapper (this is all the properties available on a widget wrapper)\n*/\nexport const EditorTabWrapper = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const wrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const [title, setTitle] = React.useState<string | undefined>(wrapper?.title);\n\n const onClick = () => {\n if (title !== undefined) {\n /*\n Update editor\n */\n dispatch(Widget.slice.actions.updateWidgetWrapper({ uniqid, title }));\n /*\n Flush editor\n */\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n }\n };\n\n const { control, watch } = useForm({\n defaultValues: { text: title ?? '' },\n criteriaMode: 'all',\n });\n\n React.useEffect(() => {\n const subscription = watch((data: any) => {\n setTitle(data.text);\n });\n return () => subscription.unsubscribe();\n }, [watch]);\n\n return wrapper ? (\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column' }}>\n <JRCInputText\n name={'text'}\n control={control}\n placeholder={intl.formatMessage({ id: 'EDITOR_Widget_Wrapper_Title' })}></JRCInputText>\n <JRCButton onClick={onClick} variant={'outlined'} minWidth={'100%'}>\n {intl.formatMessage({ id: 'EDITOR_Save_Widget' })}\n </JRCButton>\n </div>\n ) : (\n <>No wrapper</>\n );\n};\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { Editor } from './Editor';\n\nimport JRCore from 'App';\n\nconst JRCIcon = JRCore.registry.getLazyComponent('Icon');\n\nimport {\n CSSEditor,\n CSSEditorAction,\n CSSEditorContent,\n CSSEditorHeader,\n CSSEditorLabel,\n CSSEditorMenu,\n CSSEditorMenuButton,\n} from './style';\nimport { EDITOR_WIDTH } from './const';\n\nimport { useIntl } from 'react-intl';\nimport { WidgetEditor, EditorsRootState, Widget } from 'jamespot-front-business';\nimport { EditorTabWidgets } from './EditorTabWidgets';\nimport { EditorTabWrapper } from './EditorTabWrapper';\nimport { WidgetsRootState } from 'jamespot-user-api';\n\n/*\n Editor wrapper (right part)\n*/\nexport const EditorWrapper = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const editor = useSelector((state: EditorsRootState) => WidgetEditor.selectors.selectEditor(state, uniqid));\n\n const def = Widget.definition(editor?.name);\n\n const [visible, isVisibile] = React.useState<boolean>(false);\n const [tab, setTab] = React.useState<string>('default');\n\n const onClose = () => {\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n };\n\n React.useEffect(() => {\n setTimeout(() => {\n isVisibile(true);\n }, 0);\n });\n\n return editor ? (\n <div style={{ width: EDITOR_WIDTH, position: 'relative' }}>\n <CSSEditor visible={visible}>\n <CSSEditorMenu>\n {def.panel.useWrapper ? (\n <CSSEditorMenuButton isActive={tab === 'wrapper'} onClick={() => setTab('wrapper')}>\n <JRCIcon name=\"icon-font\" color=\"grey2\" />\n </CSSEditorMenuButton>\n ) : (\n <></>\n )}\n {def.panel.useEditor ? (\n <CSSEditorMenuButton isActive={tab === 'default'} onClick={() => setTab('default')}>\n <JRCIcon name=\"icon-pen\" color=\"grey2\" />\n </CSSEditorMenuButton>\n ) : (\n <></>\n )}\n {def.panel.useWidgets ? (\n <EditorConditonalTab uniqid={uniqid}>\n <CSSEditorMenuButton isActive={tab === 'widgets'} onClick={() => setTab('widgets')}>\n <JRCIcon name=\"icon-sliders\" color=\"grey2\" />\n </CSSEditorMenuButton>\n </EditorConditonalTab>\n ) : (\n <></>\n )}\n </CSSEditorMenu>\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column' }}>\n <CSSEditorHeader>\n <EditorPositionOption uniqid={uniqid} position={editor.position}></EditorPositionOption>\n <CSSEditorLabel>{intl.formatMessage({ id: def.label })}</CSSEditorLabel>\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClose}>\n <JRCIcon name=\"icon-times\" color=\"grey2\" />\n </CSSEditorMenuButton>\n </CSSEditorAction>\n </CSSEditorHeader>\n <CSSEditorContent>\n {tab === 'default' && def.panel.useEditor ? <Editor uniqid={editor.uniqid} /> : <></>}\n {tab === 'wrapper' && def.panel.useWrapper ? (\n <EditorTabWrapper uniqid={editor.uniqid} />\n ) : (\n <></>\n )}\n {tab === 'widgets' && def.panel.useWidgets ? (\n <EditorTabWidgets uniqid={uniqid} namespace={def.name} />\n ) : (\n <></>\n )}\n </CSSEditorContent>\n </div>\n </CSSEditor>\n {editor?.popup ? (\n <div style={{ position: 'absolute', inset: 0, backgroundColor: '#000', opacity: '.7' }}></div>\n ) : (\n <></>\n )}\n </div>\n ) : (\n <></>\n );\n};\n\nconst EditorPositionOption = ({ uniqid, position }: { uniqid: string; position: 'left' | 'right' }) => {\n const dispatch = useDispatch();\n\n const onClick = () => {\n dispatch(\n WidgetEditor.slice.actions.setEditorPosition({ uniqid, position: position === 'left' ? 'right' : 'left' }),\n );\n };\n\n return (\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClick}>\n <JRCIcon name={position === 'left' ? 'icon-angle-right' : 'icon-angle-left'} color=\"grey2\" />\n </CSSEditorMenuButton>\n </CSSEditorAction>\n );\n};\n\nconst EditorConditonalTab = ({ uniqid, children }: { uniqid: string; children: React.ReactElement }) => {\n const widgetState = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid));\n\n if (widgetState?.initialized) {\n return children;\n }\n\n return <></>;\n};\n","import React from 'react';\n\nimport { useSelector } from 'react-redux';\n\nimport { EDITOR_TOP, EDITOR_WIDTH } from './const';\nimport { EditorPopup } from './EditorPopup';\nimport { EditorWrapper } from './EditorWrapper';\nimport { CSSEditorPortal } from './style';\nimport { WidgetEditor } from 'jamespot-front-business';\n\nimport styled from 'styled-components';\n\nexport const CSSEditorPortalWrapper = styled.div`\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 100;\n`;\n\nexport const CSSEditorPortalPopupWrapper = styled.div<{ isActive: boolean }>`\n flex: 1;\n display: flex;\n margintop: ${EDITOR_TOP}px;\n pointer-events: ${(props) => (props.isActive ? 'all' : 'none')};\n`;\n\nexport const CSSEditorPortalRow = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n pointer-events: none;\n`;\n\nexport const CSSEditorPortalFreeSpace = styled.div`\n width: ${EDITOR_WIDTH}px;\n pointer-events: none;\n`;\n\n/*\n Editors wrapper (tamplate)\n*/\nexport const EditorsPortal = () => {\n const editors = useSelector(WidgetEditor.selectors.selectEditors);\n return (\n <CSSEditorPortalWrapper>\n {editors.map((editor, index: number) => {\n if (editor.position === 'left') {\n return (\n <CSSEditorPortal isActive={false} key={index}>\n <CSSEditorPortalRow>\n <EditorWrapper uniqid={editor.uniqid}></EditorWrapper>\n <CSSEditorPortalPopupWrapper isActive={editor.popup !== undefined}>\n <EditorPopup uniqid={editor.uniqid} />\n </CSSEditorPortalPopupWrapper>\n <CSSEditorPortalFreeSpace />\n </CSSEditorPortalRow>\n </CSSEditorPortal>\n );\n }\n\n return (\n <CSSEditorPortal isActive={false} key={index}>\n <CSSEditorPortalRow>\n <CSSEditorPortalFreeSpace />\n <CSSEditorPortalPopupWrapper isActive={editor.popup !== undefined}>\n <EditorPopup uniqid={editor.uniqid} />\n </CSSEditorPortalPopupWrapper>\n <EditorWrapper uniqid={editor.uniqid}></EditorWrapper>\n </CSSEditorPortalRow>\n </CSSEditorPortal>\n );\n })}\n </CSSEditorPortalWrapper>\n );\n};\n"],"names":["FormElm","props","stretch","FieldsetWrapper","DisplayForm","ref","formRef","configuration","defaultValues","useDisplay","fields","type","useForm","criteriaMode","handleSubmit","control","reset","formFn","current","scrollTo","onSubmit","map","Input","conf","key","name","dataCy","readOnly","extraInputs","buttons","Empty","Container","registry","getLazyComponent","AppColumn","MainColumn","TwoColLayout","extensionRoute","routes","description","mode","intl","useIntl","pathname","useLocation","ROUTES_ARRAY","Object","values","activeTab","setActiveTab","tabs","tab","label","formatMessage","id","href","path","group","undefined","activeRoute","find","route","fallback","Outlet","JRCLoader","WidgetState","uniqid","inplace","state","useSelector","selectors","selectWidgetState","def","definition","loading","style","position","inset","backgroundColor","display","flex","justifyContent","alignItems","hover","initialized","src","img","CSSHidden","JRCFormFile","WidgetUploader","children","initialFiles","initialClick","multiple","accept","onUploadStart","onUploadEnd","onUploadSuccess","uploadRef","token","selectToken","total","setTotal","files","setFiles","click","length","onClick","content","totalFile","prevTotal","fileResponse","prevFiles","JRCWidgetArticleGallery","FileViewer","JRCWidgetArticleGalleryWrapper","widget","onStateChange","dispatch","useDispatch","widgetWrapper","selectWidget","isActive","shallowEqual","mounted","maxWidth","gap","column","openWithOptions","open","idFile","slice","actions","updateWidget","setWidgetState","JRCWidgetEmptyInplace","url","JRCWidgetArticleAttachment","JRCWidgetArticleAttachmentWrapper","option","file","getObjectAccessHash","then","response","result","Error","hash","target","window","getWedocFilePath","wedocWindowOpen","catch","error","selectById","JRCWidgetArticleImage","CSSImageWrapperHover","theme","color","white","JRCWidgetArticleImageWrapper","displayAs","useFilter","backgroundPosition","backgroundSize","borderRadius","uri","Wrapper","ToolWrapper","grey1","Tool","JRCWidgetArticleTitleWrapper","text","heading","JRCWidgetArticleTitle","autoFocus","onChange","Toolbar","sizeValue","index","JRCWidgetArticleButton","JRCWidgetArticleText","DisplayWidget","isComponentVisible","override","states","CSSWidgetLayer","opacity","pointerEvents","WidgetLayer","layers","widgets","ids","layer","Layer","LayerWidget","layerId","visible","locked","top","y","left","x","DraggableHandler","onMouseUp","updateLayer","BETA_JRCDoubleClick","onDoubleTap","registerEditor","mouseIsDown","setMouseDown","mouse","setMouse","start","setStart","child","setChild","handleMouseMove","event","dx","clientX","dy","clientY","handleMouseUp","document","addEventListener","removeEventListener","onMouseDown","nativeEvent","WidgetWrapperCore","width","isBusy","busy","indexOrder","editableMap","currentEditableWidgetId","setIsComponentVisible","registerWidget","setEditableWidgetId","openingType","openingTypeLink","minWidth","setEditableIndex","CSSSquareWidgetWrapper","CSSSquareWidget","grey2","available","CSSWidgetButton","primary","CSSWrapWidgetWrapper","CSSWrapTitle","CSSWrapWidget","JRCButton","JRCModal","WidgetList","view","namespace","isOpen","setOpen","const","WIDGET_ARTICLE_TITLE","WIDGET_ARTICLE_BUTTON","WIDGET_ARTICLE_TEXT","WIDGET_ARTICLE_IMAGE","WIDGET_ARTICLE_GALLERY","WIDGET_ARTICLE_ATTACHMENT","getBuilderWidgets","args","title","showIconClose","portalId","isFullHeight","closeHandler","factory","className","variant","WidgetModeArticle","CSSEditorPortal","CSSEditorHeader","CSSEditorAction","CSSEditorLabel","CSSEditor","CSSEditorContent","CSSEditorMenu","CSSEditorMenuButton","CSSEditorWidget","grey0","CSSEditorWidgetLabel","CSSEditorWidgetOption","EditorPopup","editor","selectEditor","popup","flexDirection","marginTop","flushEditorPopup","JRCIcon","JRCWidgetArticleTitleEditor","JRCWidgetArticleImageEditor","JRCWidgetArticleTextEditor","JRCWidgetArticleGalleryEditor","JRCWidgetArticleButtonEditor","JRCWidgetArticleAttachmentEditor","Editor","onSave","flushEditor","onOpen","registerEditorPopup","EditorTabWidgets","selectWidgetContent","Layers","filter","_","n","BETA_JRCDragAndDrop","onDrag","renderEl","EditorWidgetLayer","elms","registerLayer","EditorWidgetLayerLock","EditorWidgetLayerVisibility","EditorWidgetLayerFlush","flushLayer","EditorTabWrapper","wrapper","setTitle","watch","subscription","data","unsubscribe","JRCInputText","placeholder","updateWidgetWrapper","EditorWrapper","isVisibile","setTab","setTimeout","panel","useWrapper","useEditor","useWidgets","EditorConditonalTab","EditorPositionOption","setEditorPosition","widgetState","CSSEditorPortalWrapper","CSSEditorPortalPopupWrapper","CSSEditorPortalRow","CSSEditorPortalFreeSpace","EditorsPortal","editors","selectEditors"],"sourceRoot":""}