jamespot-react-core 1.1.134 → 1.1.136

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 @@
1
+ {"version":3,"file":"39.bundle.js","mappings":"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","sources":["webpack://ReactCore/./src/displayer/DisplayForm.component.tsx","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","webpack://ReactCore/./src/components/Empty.tsx","webpack://ReactCore/./src/hooks/useAI.ts","webpack://ReactCore/./src/components/tinymce/extension/AIModal.tsx","webpack://ReactCore/./src/components/tinymce/JRCInputTinyMCEWithExtRaw.tsx","webpack://ReactCore/./src/components/tinymce/JRCInputTinyMCEWithExt.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/wrapper/JRCWidgetApiWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleTextWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleButtonWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleSliderWrapper.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"],"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, { css } from 'styled-components';\nimport { FormEventHandler, ReactNode, Ref } from 'react';\n\nconst StretchContainer = css`\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n`;\n\nconst Container = styled.div<{ stretch?: boolean }>`\n ${({ stretch }) => stretch && StretchContainer}\n`;\n\nconst Form = styled.form<{ stretch?: boolean }>`\n ${({ stretch }) => stretch && StretchContainer}\n`;\n\nconst FormElm = React.forwardRef(\n (\n props: {\n stretch?: boolean;\n onSubmit?: FormEventHandler<HTMLFormElement>;\n children: ReactNode;\n },\n ref: React.ForwardedRef<HTMLFormElement | HTMLDivElement>,\n ) => {\n return props.onSubmit ? (\n <Form stretch={props.stretch} onSubmit={props.onSubmit} ref={ref as Ref<HTMLFormElement>}>\n {props.children}\n </Form>\n ) : (\n <Container stretch={props.stretch} ref={ref as Ref<HTMLDivElement>}>\n {props.children}\n </Container>\n );\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 | HTMLDivElement>(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\n stretch={props.stretch}\n onSubmit={props.onSubmit ? handleSubmit(props.onSubmit) : undefined}\n 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 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: 12px;\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, updateWidgetContent } from 'jamespot-front-business';\n\nimport JRCore from 'App';\n\nimport {\n CombinedWidgetContent,\n WidgetApiContent,\n WidgetArticleAttachmentContent,\n WidgetArticleButtonContent,\n WidgetArticleGalleryContent,\n WidgetArticleImageContent,\n WidgetArticleSliderContent,\n WidgetArticleTextContent,\n WidgetArticleTitleContent,\n WidgetsRootState,\n WidgetStateProps,\n} from 'jamespot-user-api';\n\nconst WidgetArticleTitleEditor = JRCore.registry.getLazyComponent('WidgetArticleTitleEditor');\nconst WidgetArticleTextEditor = JRCore.registry.getLazyComponent('WidgetArticleTextEditor');\nconst WidgetArticleGalleryEditor = JRCore.registry.getLazyComponent('WidgetArticleGalleryEditor');\nconst WidgetArticleAttachmentEditor = JRCore.registry.getLazyComponent('WidgetArticleAttachmentEditor');\nconst WidgetArticleSliderEditor = JRCore.registry.getLazyComponent('WidgetArticleSliderEditor');\n\nconst WidgetArticleImageEditor = JRCore.registry.getLazyComponent('WidgetArticleImageEditor');\nconst WidgetButtonEditor = JRCore.registry.getLazyComponent('WidgetButtonEditor');\nconst WidgetApiEditor = JRCore.registry.getLazyComponent('WidgetApiEditor');\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: Partial<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 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-article-button':\n return (\n <>\n <WidgetButtonEditor\n {...widgetWrapper.widget.content}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleButtonContent>(uniqid, content, false));\n }}\n onSave={() => onSave({})}\n />\n </>\n );\n case 'widget-article-attachment':\n return (\n <WidgetArticleAttachmentEditor\n token={token}\n content={widgetWrapper.widget.content}\n onChange={(content) =>\n dispatch(updateWidgetContent<WidgetArticleAttachmentContent>(uniqid, content, false))\n }\n onSave={onSave}\n onStateChange={onStateChange}\n onOpen={onOpen}\n />\n );\n case 'widget-article-gallery':\n return (\n <WidgetArticleGalleryEditor\n token={token}\n content={widgetWrapper.widget.content}\n onChange={(content) =>\n dispatch(updateWidgetContent<WidgetArticleGalleryContent>(uniqid, content, false))\n }\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n case 'widget-article-text':\n return (\n <WidgetArticleTextEditor\n onChange={(content) =>\n dispatch(updateWidgetContent<WidgetArticleTextContent>(uniqid, content, false))\n }\n onSave={onSave}\n content={widgetWrapper.widget.content}\n />\n );\n case 'widget-article-image':\n return (\n <WidgetArticleImageEditor\n content={widgetWrapper.widget.content}\n token={token}\n onChange={(content) =>\n dispatch(updateWidgetContent<WidgetArticleImageContent>(uniqid, content, false))\n }\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n case 'widget-api':\n return (\n <WidgetApiEditor\n onChange={(content) => dispatch(updateWidgetContent<WidgetApiContent>(uniqid, content, false))}\n provider={async (url: string) => {\n return fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n .then((resp) => resp.json())\n .then((response) => {\n return response.result;\n });\n }}\n initialUrl={widgetWrapper.widget.content.url ?? ''}\n order={widgetWrapper.widget.content.order ?? ''}\n orderBy={widgetWrapper.widget.content.orderBy ?? 'asc'}\n />\n );\n case 'widget-article-title':\n return (\n <WidgetArticleTitleEditor\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleTitleContent>(uniqid, content, false));\n }}\n onSave={onSave}\n content={widgetWrapper.widget.content}\n onOpen={onOpen}\n />\n );\n case 'widget-article-slider':\n return token !== undefined ? (\n <WidgetArticleSliderEditor\n slides={widgetWrapper.widget.content.slides ?? []}\n loop={widgetWrapper.widget.content.loop ?? false}\n useDots={widgetWrapper.widget.content.useDots ?? true}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleSliderContent>(uniqid, content, false));\n }}\n token={token}\n onSave={onSave}\n />\n ) : (\n <>Token is mandatory</>\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","import * as React from 'react';\n\n// FIXME move to j-react-components + display error if dev mode\nexport const Empty = () => <></>;\n","import { JTinyMCEExtensionsBuilders } from 'jamespot-react-components';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\n\nexport type JiaTextEnhanceQuery = {\n resolve: (value: string | PromiseLike<string>) => void;\n reject: (reason?: any) => void;\n capability: 'develop' | 'summarize' | 'tldr';\n text: string;\n};\n\nexport const useAI = () => {\n const [query, setQuery] = useState<JiaTextEnhanceQuery | undefined>();\n const intl = useIntl();\n\n const PrepareAndSetQuery = useCallback((query: JiaTextEnhanceQuery) => {\n const internalResolve = (value: string | PromiseLike<string>) => {\n query.resolve(value);\n setQuery(undefined);\n };\n const internalReject = (value: any) => {\n query.reject(value);\n setQuery(undefined);\n };\n setQuery({\n ...query,\n reject: internalReject,\n resolve: internalResolve,\n });\n }, []);\n\n const AICapabilities = useMemo(() => {\n return {\n develop: (text: string) => {\n return new Promise<string>((resolve, reject) => {\n PrepareAndSetQuery({\n reject,\n resolve,\n text,\n capability: 'develop',\n });\n });\n },\n summarize: (text: string) => {\n return new Promise<string>((resolve, reject) => {\n PrepareAndSetQuery({\n reject,\n resolve,\n text,\n capability: 'summarize',\n });\n });\n },\n tldr: (text: string) => {\n return new Promise<string>((resolve, reject) => {\n PrepareAndSetQuery({\n reject,\n resolve,\n text,\n capability: 'tldr',\n });\n });\n },\n };\n }, []);\n\n const ext = useMemo(() => JTinyMCEExtensionsBuilders.jia(AICapabilities, intl), []);\n\n return [query, ext] as const;\n};\n","import { JiaTextEnhanceQuery } from 'hooks/useAI';\nimport { JRCLoader, JRCModal, JRCTypography } from 'jamespot-react-components';\nimport jamespot from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\n\nexport type AIModalProps = {\n query: JiaTextEnhanceQuery | undefined;\n};\n\ntype ResponseType = {\n response: string | undefined;\n loading: boolean;\n error: string | undefined;\n};\n\nconst loadingResponse: ResponseType = {\n response: undefined,\n loading: true,\n error: undefined,\n};\n\nexport const AIModal = ({ query }: AIModalProps) => {\n const intl = useIntl();\n const [response, setResponse] = useState<ResponseType>(loadingResponse);\n\n const sendAIRequest = useCallback((query: JiaTextEnhanceQuery) => {\n setResponse(loadingResponse);\n jamespot.jia\n .textEnhancement({ text: query.text, capacity: query.capability })\n .then((response) => {\n if (response.error) {\n setResponse({\n error: `${intl.formatMessage({ id: 'JIA_ERROR_AI_CALL' })}${\n response.errorMsg && ': ' + response.errorMsg\n }`,\n loading: false,\n response: undefined,\n });\n return;\n }\n const textResponse = response.result.text;\n setResponse({\n error: undefined,\n loading: false,\n response: textResponse,\n });\n })\n .catch((_) => {\n setResponse({\n error: intl.formatMessage({ id: 'JIA_ERROR_AI_CALL' }),\n loading: false,\n response: undefined,\n });\n });\n }, []);\n\n useEffect(() => {\n if (query && query.text.trim().length > 0) {\n sendAIRequest(query);\n }\n }, [query]);\n\n return (\n <JRCModal\n zIndex={50010}\n open={!!query}\n closeHandler={() => {\n query?.reject();\n }}\n buttons={[\n {\n children: intl.formatMessage({ id: 'GLOBAL_Try_Again' }),\n clickHandler: () => {\n query && sendAIRequest(query);\n },\n },\n {\n children: intl.formatMessage({ id: 'GLOBAL_Validation' }),\n clickHandler: () => response.response && query?.resolve(response.response),\n },\n {\n children: intl.formatMessage({ id: 'GLOBAL_Cancel' }),\n clickHandler: () => query?.reject(),\n },\n ]}>\n {response.loading && (\n <>\n <JRCLoader />\n <JRCTypography align=\"center\">{intl.formatMessage({ id: 'JIA_WAITING_WARNIG' })}</JRCTypography>\n </>\n )}\n {!response.loading && response.error && <p>{response.error}</p>}\n {!response.loading && response.response && <p>{response.response}</p>}\n </JRCModal>\n );\n};\n","import { Model, Toast } from 'jamespot-front-business';\nimport React, { useCallback, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport { useTheme } from 'styled-components';\nimport { useAI } from 'hooks/useAI';\nimport { getTinyMCEMentionsQueries } from 'App';\nimport { JRCInputTinyMCERaw, JRCInputTinyMCERawProps } from 'jamespot-react-components';\nimport { AIModal } from './extension/AIModal';\nimport JRCore from 'App';\n\nexport type JRCInputTinyMCEWithExtProps = Omit<\n JRCInputTinyMCERawProps,\n 'commonOptions' | 'mentionsQueries' | 'additionalExtensions'\n>;\n\nexport const JRCInputTinyMCEWithExtRaw = (props: JRCInputTinyMCEWithExtProps) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const theme = useTheme();\n const models = useSelector(Model.selectors.selectAll);\n const [query, extAI] = useAI();\n\n const isAIActive = useMemo(() => {\n return J.hooks?.JIAHook?.isActive && J.debug['JIABETA'];\n }, []);\n\n const extArray = useMemo(() => {\n return isAIActive ? [extAI] : [];\n }, [extAI, isAIActive]);\n\n const onMentionsQueryError = useCallback((message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n }, []);\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onMentionsQueryError);\n }, []);\n\n const commonOptions = useMemo(() => JRCore.tinymceCommonOptions, [JRCore.tinymceCommonOptions]);\n\n return (\n <>\n {commonOptions && (\n <JRCInputTinyMCERaw\n commonOptions={commonOptions}\n additionalExtensions={extArray}\n mentionsQueries={tinyMentionsQueries}\n {...props}\n />\n )}\n <AIModal query={query} />\n </>\n );\n};\n","import { Model, Toast } from 'jamespot-front-business';\nimport React, { useCallback, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport { useTheme } from 'styled-components';\nimport { useAI } from 'hooks/useAI';\nimport { getTinyMCEMentionsQueries } from 'App';\nimport { JRCInputTinyMCE, JRCInputTinyMCEProps } from 'jamespot-react-components';\nimport { FieldValues } from 'react-hook-form/dist/types';\nimport { AIModal } from './extension/AIModal';\nimport JRCore from 'App';\n\nexport type JRCInputTinyMCEWithExtProps<T extends FieldValues> = Omit<\n JRCInputTinyMCEProps<T>,\n 'commonOptions' | 'mentionsQueries' | 'additionalExtensions'\n>;\n\nexport const JRCInputTinyMCEWithExt = <T extends FieldValues = FieldValues>(props: JRCInputTinyMCEWithExtProps<T>) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const theme = useTheme();\n const models = useSelector(Model.selectors.selectAll);\n const [query, extAI] = useAI();\n\n const isAIActive = useMemo(() => {\n return J.hooks?.JIAHook?.isActive && J.debug['JIABETA'];\n }, []);\n\n const extArray = useMemo(() => {\n return isAIActive ? [extAI] : [];\n }, [extAI, isAIActive]);\n\n const onMentionsQueryError = useCallback((message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n }, []);\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onMentionsQueryError);\n }, []);\n\n const commonOptions = useMemo(() => JRCore.tinymceCommonOptions, [JRCore.tinymceCommonOptions]);\n\n return (\n <>\n {commonOptions && (\n <JRCInputTinyMCE\n commonOptions={commonOptions}\n additionalExtensions={extArray}\n mentionsQueries={tinyMentionsQueries}\n {...props}\n />\n )}\n <AIModal query={query} />\n </>\n );\n};\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 absolutePath?: boolean;\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: tab.absolutePath ? tab.path : `/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';\nimport styled from 'styled-components';\n\nimport {\n WidgetArticleGalleryContent,\n WidgetArticleGalleryType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport JRCore from 'App';\nimport { Widget, updateWidgetContent } 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\nconst CSSImagePointer = styled.button`\n cursor: pointer;\n`;\n\nexport const JRCWidgetArticleGalleryWrapper = ({\n widget,\n inplace,\n mode,\n}: {\n widget: WidgetArticleGalleryType;\n inplace?: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const { uniqid } = widget;\n const { files } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n\n React.useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, 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 <CSSImagePointer>\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 </CSSImagePointer>\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 (Array.isArray(files)) {\n dispatch(updateWidgetContent<WidgetArticleGalleryContent>(uniqid, { files }));\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 styled from 'styled-components';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport jamespot, {\n jFileLittle,\n WidgetArticleAttachmentType,\n WidgetDisplayMode,\n WidgetsRootState,\n WidgetArticleAttachmentContent,\n} from 'jamespot-user-api';\n\nimport JRCore from 'App';\nimport { Application, Toast, Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { JRCWidgetEmptyInplace, JRCFileViewerOpenWithOptionsType } from 'jamespot-react-components';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst WidgetAttachment = JRCore.registry.getLazyComponent('WidgetAttachment');\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/file/${idFile}/${hash}`;\n}\n\nexport const CSSWrapper = styled.div`\n flex: 1;\n`;\n\nexport const JRCWidgetArticleAttachmentWrapper = ({\n widget,\n inplace,\n mode,\n}: {\n widget: WidgetArticleAttachmentType;\n inplace?: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const intl = useIntl();\n const { uniqid } = widget;\n const { files } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n\n React.useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, 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.object\n .getAccessHash(`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: 'WIDGET_Open_Failed' }, 6000));\n });\n };\n\n const option = [\n {\n label: intl.formatMessage({ id: 'WIDGET_Open_With_Wedoc' }),\n onClick: onClick,\n },\n ];\n\n const openWithOptions: JRCFileViewerOpenWithOptionsType = onlyOffice\n ? [\n {\n condition: (f) =>\n [\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n ].includes(f.mimetype),\n options: option,\n },\n ]\n : [];\n\n return files !== undefined ? (\n <CSSWrapper>\n {mode !== 'view' ? (\n <WidgetAttachment files={files} onClick={() => undefined} />\n ) : (\n <FileViewer files={files} openWithOptions={openWithOptions}>\n {(open) => {\n return <WidgetAttachment 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 (Array.isArray(files)) {\n dispatch(updateWidgetContent<WidgetArticleAttachmentContent>(uniqid, { files }));\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 </CSSWrapper>\n ) : (\n <></>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport {\n WidgetArticleImageContent,\n WidgetArticleImageType,\n WidgetDisplayMode,\n WidgetsRootState,\n jFileLittle,\n} from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\nimport { Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { JRCWidgetEmptyInplace } from 'jamespot-react-components';\nimport { WidgetUploader } from '../components/WidgetUploader';\n\nconst WidgetImage = JRCore.registry.getLazyComponent('WidgetImage');\nconst FileViewer = JRCore.registry.getLazyComponent('FileViewer');\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\nconst CSSImagePointer = styled.button`\n cursor: pointer;\n`;\n\nconst mockFileLittle: jFileLittle = {\n id: 0,\n type: '',\n title: '',\n uri: '',\n mimetype: 'application/octet-stream',\n mainType: '',\n dateCreation: '',\n dateModified: '',\n _url: '',\n};\n\nexport const strToTimestamp = (str: string): undefined | number => {\n if (str) {\n const timestamp = Date.parse(str);\n if (!isNaN(timestamp)) {\n return new Date(timestamp).getTime() / 1000;\n }\n }\n return;\n};\n\nexport const JRCWidgetArticleImageWrapper = ({\n widget,\n width,\n inplace,\n mode,\n}: {\n widget: WidgetArticleImageType;\n inplace?: boolean;\n mode?: WidgetDisplayMode;\n width?: number;\n}) => {\n const { uniqid } = widget;\n const { file, useFilter } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const [uri, setUri] = React.useState<string | undefined>(undefined);\n const intl = useIntl();\n\n React.useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n }, []);\n\n React.useEffect(() => {\n if (file) {\n setUri(\n `/imagecache/fitx1200/${file.type}/${file.id}.png?_=${\n file.dateModified ? strToTimestamp(file.dateModified) : Date.now()\n }`,\n );\n }\n }, [file]);\n\n return (\n <>\n {mode === 'edit' ? (\n uri !== undefined ? (\n <WidgetImage maxWidth={width ?? 600} uri={uri} useFilter={useFilter ?? false} />\n ) : (\n <></>\n )\n ) : (\n <FileViewer\n files={[\n {\n ...mockFileLittle,\n path: uri,\n mimetype: 'image/png',\n },\n ]}\n openWithOptions={[]}>\n {(open) => {\n return (\n <CSSImagePointer onClick={() => open(0)}>\n <WidgetImage maxWidth={width ?? 600} uri={uri} useFilter={useFilter ?? false} />\n </CSSImagePointer>\n );\n }}\n </FileViewer>\n )}\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 (Array.isArray(files) && files[0] !== undefined) {\n dispatch(updateWidgetContent<WidgetArticleImageContent>(uniqid, { file: files[0] }));\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 {\n WidgetArticleTitleContent,\n WidgetArticleTitleType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport { Widget, updateWidgetContent } 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 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 dispatch(updateWidgetContent<WidgetArticleTitleContent>(uniqid, { text }));\n }}\n />\n {isActive && mode === 'edit' ? (\n <Toolbar\n heading={heading}\n onClick={(heading) => {\n dispatch(updateWidgetContent<WidgetArticleTitleContent>(uniqid, { heading }));\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 { WidgetApiType, WidgetDisplayMode } from 'jamespot-user-api';\n\nimport { JRCWidgetApi } 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\nfunction isAValidURL(url: string | undefined) {\n if (typeof url === 'string') {\n return url.length !== 0 && url.startsWith('https://');\n }\n\n return false;\n}\n\nexport const JRCWidgetApiWrapper = ({\n widget,\n}: {\n widget: WidgetApiType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const { url, keys, order, orderBy } = widget.content;\n const [data, setData] = React.useState<Array<Record<string, string>>>([]);\n\n React.useEffect(() => {\n if (url && isAValidURL(url)) {\n fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n .then((resp) => resp.json())\n .then((response) => {\n if (!Array.isArray(response.result)) {\n console.warn('resposne must be an array');\n }\n\n setData(response.result);\n });\n } else {\n console.warn(`${url} is not a valid url`);\n }\n }, [url]);\n\n return (\n <Wrapper>\n <JRCWidgetApi data={data} keys={keys ?? []} order={order ?? ''} orderBy={orderBy ?? 'asc'} />\n </Wrapper>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport {\n WidgetArticleTextContent,\n WidgetArticleTextType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport { TinyMCE, Widget, updateWidgetContent } from 'jamespot-front-business';\nimport { JRCWidgetArticleText } from 'jamespot-react-components';\n\nimport styled, { useTheme } from 'styled-components';\n\nconst Wrapper = styled.div`\n min-height: 60px;\n cursor: text;\n`;\n\nexport const JRCWidgetArticleTextWrapper = ({\n widget,\n mode,\n}: {\n widget: WidgetArticleTextType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const { uniqid } = widget;\n const theme = useTheme();\n const { text, color, lineHeight, linkColor, fontSize } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const token = useSelector(Widget.selectors.selectToken);\n const tinyMCECommonOptions = useSelector(TinyMCE.selectors.selectTinyMCECommonOptions);\n\n return (\n <Wrapper>\n <JRCWidgetArticleText\n autoFocus={isActive}\n text={text ?? ''}\n color={color ?? theme.color.black}\n lineHeight={lineHeight ?? '20'}\n linkColor={linkColor ?? theme.color.primary}\n fontSize={fontSize ?? '20'}\n token={mode === 'edit' && token !== undefined ? token : ''}\n tinyMCECommonOptions={mode === 'edit' ? tinyMCECommonOptions : undefined}\n mode={mode}\n onChange={(text) => {\n dispatch(updateWidgetContent<WidgetArticleTextContent>(uniqid, { text }));\n }}\n />\n </Wrapper>\n );\n};\n","import React from 'react';\n\nimport styled from 'styled-components';\n\nimport { WidgetArticleButtonType, WidgetDisplayMode } from 'jamespot-user-api';\n\nimport { JRCWidgetButton } from 'jamespot-react-components';\nimport { useDispatch } from 'react-redux';\nimport { WidgetEditor } from 'jamespot-front-business';\n\nconst CSSButtonWrapper = styled.div`\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n`;\n\nconst CSSPointer = styled.div<{ clickable: boolean }>`\n pointer-events: ${(props) => (props.clickable ? 'all' : 'none')};\n cursor: pointer;\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n`;\n\nexport const JRCWidgetArticleButtonWrapper = ({\n widget,\n mode,\n}: {\n widget: WidgetArticleButtonType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const dispatch = useDispatch();\n const { uniqid } = widget;\n const { text, url, target, color, backgroundColor, buttonSize, borderRadius, variant } = widget.content;\n\n return (\n <CSSButtonWrapper\n onClick={() => {\n if (mode === 'edit') {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n }}>\n <CSSPointer clickable={mode !== 'edit'}>\n <JRCWidgetButton\n text={text}\n url={url}\n target={target}\n color={color}\n backgroundColor={backgroundColor}\n buttonSize={buttonSize}\n borderRadius={borderRadius}\n variant={variant}\n />\n </CSSPointer>\n </CSSButtonWrapper>\n );\n};\n","import React from 'react';\n\nimport { WidgetArticleSliderType, WidgetDisplayMode, WidgetsRootState, jFileLittle } from 'jamespot-user-api';\nimport JRCore from 'App';\nimport styled from 'styled-components';\nimport { JRCWidgetEmptyInplace, JRCWidgetSlider } from 'jamespot-react-components';\nimport { useAppDispatch } from 'redux/store';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nconst FileViewer = JRCore.registry.getLazyComponent('FileViewer');\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 mockFileLittle: jFileLittle = {\n id: 0,\n type: '',\n title: '',\n uri: '',\n mimetype: 'application/octet-stream',\n mainType: '',\n dateCreation: '',\n dateModified: '',\n _url: '',\n};\n\nexport const strToTimestamp = (str: string): undefined | number => {\n if (str) {\n const timestamp = Date.parse(str);\n if (!isNaN(timestamp)) {\n return new Date(timestamp).getTime() / 1000;\n }\n }\n return;\n};\n\nexport const JRCWidgetArticleSliderWrapper = ({\n widget,\n mode,\n width,\n}: {\n widget: WidgetArticleSliderType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n width?: number;\n}) => {\n const { uniqid } = widget;\n const dispatch = useAppDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const fileViewerFiles = widget.content.slides\n ? [\n ...widget.content.slides.map((slide, index) => {\n return {\n ...mockFileLittle,\n id: slide.file ? slide.file.id : index,\n mimetype: slide.file ? slide.file.mimetype : mockFileLittle.mimetype,\n path: slide.file\n ? `/imagecache/fitx1200/${slide.file.type}/${slide.file.id}.png?_=${\n slide.file.dateModified ? strToTimestamp(slide.file.dateModified) : Date.now()\n }`\n : undefined,\n };\n }),\n ]\n : [];\n\n React.useEffect(() => {\n if (isActive && mode === 'edit') {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n }, [isActive]);\n\n return (\n <Wrapper>\n <FileViewer files={fileViewerFiles} openWithOptions={[]}>\n {(open) => {\n return (\n <JRCWidgetSlider\n slides={\n widget.content.slides !== undefined\n ? [\n ...widget.content.slides.map((slide) => {\n if (slide.file) {\n return {\n ...slide,\n uri: `${J.urlBase}imagecache/fitx1200/${slide.file.type}/${\n slide.file.id\n }.png?_=${\n slide.file.dateModified\n ? strToTimestamp(slide.file.dateModified)\n : Date.now()\n }`,\n };\n } else {\n return {\n ...slide,\n uri: '',\n };\n }\n }),\n ]\n : []\n }\n maxWidth={width ?? 600}\n useDots={widget.content.useDots ?? true}\n loop={widget.content.loop ?? false}\n startAt={0}\n onClickSlide={(index) => {\n if (mode !== 'edit') {\n if (widget.content.slides) {\n const slide = widget.content.slides[index];\n if (slide && slide.file) {\n open(slide.file.id);\n }\n }\n } else {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n }}\n />\n );\n }}\n </FileViewer>\n {mode === 'edit' && Array.isArray(widget.content.slides) && widget.content.slides.length === 0 ? (\n <JRCWidgetEmptyInplace\n label={'WIDGET_Article_Slider_Empty_Label'}\n description={'WIDGET_Article_Slider_Empty_Description'}\n url={'widget-article-image-placeholder.png'}\n onClick={() => {\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: widget.name,\n }),\n );\n }}\n />\n ) : (\n <></>\n )}\n </Wrapper>\n );\n};\n","import React from 'react';\n\nimport { CombinedWidgetType, WidgetDisplayMode } from 'jamespot-user-api';\n\nimport { JRCWidgetArticleGalleryWrapper } from './wrapper/JRCWidgetArticleGalleryWrapper';\nimport { JRCWidgetArticleAttachmentWrapper } from './wrapper/JRCWidgetArticleAttachmentWrapper';\nimport { JRCWidgetArticleImageWrapper } from './wrapper/JRCWidgetArticleImageWrapper';\nimport { JRCWidgetArticleTitleWrapper } from './wrapper/JRCWidgetArticleTitleWrapper';\nimport { JRCWidgetApiWrapper } from './wrapper/JRCWidgetApiWrapper';\nimport { JRCWidgetArticleTextWrapper } from './wrapper/JRCWidgetArticleTextWrapper';\nimport { JRCWidgetArticleButtonWrapper } from './wrapper/JRCWidgetArticleButtonWrapper';\nimport { JRCWidgetArticleSliderWrapper } from './wrapper/JRCWidgetArticleSliderWrapper';\n\nexport const DisplayWidget = ({\n widget,\n width,\n inplace = false,\n mode = 'view',\n}: {\n widget: CombinedWidgetType;\n width?: number | undefined;\n inplace: boolean;\n mode: WidgetDisplayMode;\n onClick: () => void;\n}) => {\n const { name } = widget;\n\n switch (name) {\n default:\n return <>cannot display widget ({name})</>;\n case 'widget-article-button':\n return <JRCWidgetArticleButtonWrapper widget={widget} inplace={inplace} mode={mode} />;\n case 'widget-article-gallery':\n return <JRCWidgetArticleGalleryWrapper widget={widget} inplace={inplace} mode={mode} />;\n case 'widget-article-attachment':\n return <JRCWidgetArticleAttachmentWrapper widget={widget} inplace={inplace} mode={mode} />;\n case 'widget-article-image':\n return <JRCWidgetArticleImageWrapper widget={widget} inplace={inplace} mode={mode} width={width ?? 800} />;\n case 'widget-api':\n return <JRCWidgetApiWrapper widget={widget} inplace={inplace} mode={mode} />;\n case 'widget-article-slider':\n return <JRCWidgetArticleSliderWrapper widget={widget} inplace={inplace} mode={mode} width={width ?? 800} />;\n case 'widget-article-title':\n return <JRCWidgetArticleTitleWrapper widget={widget} inplace={inplace} mode={mode} />;\n case 'widget-article-text':\n return <JRCWidgetArticleTextWrapper widget={widget} inplace={inplace} mode={mode} />;\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 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 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 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 &:hover {\n background-color: ${(props) => props.theme.color.grey0};\n }\n`;\n\nexport const CSSWrapWidget = styled.button<{ open: boolean; index: number }>`\n height: 72px;\n display: flex;\n align-items: center;\n padding: 0 10px;\n gap: 10px;\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 img {\n width: 40px;\n }\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 { 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';\nimport { JRCModalLayoutProps } from 'jamespot-react-components';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\nconst JRCModalLayout = JRCore.registry.getLazyComponent('ModalLayout');\nconst JRCModalContent = JRCore.registry.getLazyComponent('ModalContent');\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: JRCModalLayoutProps = {\n open: isOpen,\n portalId: 'react-modal',\n variant: 'full-height',\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 <JRCModalLayout {...args}>\n <JRCModalContent onClickIconClose={args.closeHandler} title=\"widget builder\">\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 </JRCModalContent>\n </JRCModalLayout>\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 <img src={widget.img} />\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 [Widget.definition('widget-article-title'), Widget.definition('widget-article-button')];\n default:\n return [\n Widget.definition('widget-article-title'),\n Widget.definition('widget-article-text'),\n Widget.definition('widget-article-image'),\n Widget.definition('widget-article-button'),\n Widget.definition('widget-article-slider'),\n Widget.definition('widget-article-attachment'),\n ];\n }\n}\n"],"names":["StretchContainer","css","Container","stretch","Form","FormElm","props","ref","onSubmit","children","FieldsetWrapper","DisplayForm","formRef","configuration","defaultValues","useDisplay","fields","type","useForm","criteriaMode","handleSubmit","control","reset","formFn","current","scrollTo","undefined","map","Input","conf","key","name","dataCy","readOnly","extraInputs","buttons","CSSEditorPortal","isActive","CSSEditorHeader","theme","color","grey2","CSSEditorAction","CSSEditorLabel","CSSEditor","visible","white","CSSEditorContent","CSSEditorMenu","CSSEditorMenuButton","grey1","CSSEditorWidget","grey0","CSSEditorWidgetLabel","CSSEditorWidgetOption","EditorPopup","uniqid","dispatch","useDispatch","editor","useSelector","state","selectors","selectEditor","popup","view","style","flex","display","flexDirection","backgroundColor","marginTop","onClick","slice","actions","flushEditorPopup","JRCIcon","JRCButton","WidgetArticleTitleEditor","registry","getLazyComponent","WidgetArticleTextEditor","WidgetArticleGalleryEditor","WidgetArticleAttachmentEditor","WidgetArticleSliderEditor","WidgetArticleImageEditor","WidgetButtonEditor","WidgetApiEditor","Editor","token","selectToken","widgetWrapper","selectWidget","onSave","content","updateWidget","flushEditor","onStateChange","states","id","setWidgetState","onOpen","registerEditorPopup","widget","onChange","provider","url","fetch","method","headers","then","resp","json","response","result","initialUrl","order","orderBy","slides","loop","useDots","EditorTabWidgets","intl","useIntl","selectWidgetContent","Layers","widgets","index","def","definition","registerEditor","formatMessage","label","filter","_","n","layers","ids","shallowEqual","BETA_JRCDragAndDrop","onDrag","renderEl","layer","EditorWidgetLayer","elms","WidgetList","namespace","registerLayer","mode","EditorWidgetLayerLock","updateLayer","locked","EditorWidgetLayerVisibility","EditorWidgetLayerFlush","layerId","flushLayer","title","alignItems","EditorTabWrapper","wrapper","setTitle","watch","text","subscription","data","unsubscribe","JRCInputText","placeholder","updateWidgetWrapper","variant","minWidth","EditorWrapper","isVisibile","tab","setTab","setTimeout","width","position","panel","useWrapper","useEditor","useWidgets","EditorConditonalTab","EditorPositionOption","inset","opacity","setEditorPosition","widgetState","selectWidgetState","initialized","CSSEditorPortalWrapper","CSSEditorPortalPopupWrapper","CSSEditorPortalRow","CSSEditorPortalFreeSpace","EditorsPortal","editors","selectEditors","Empty","useAI","query","setQuery","useState","PrepareAndSetQuery","useCallback","reject","value","resolve","AICapabilities","useMemo","develop","Promise","capability","summarize","tldr","JTinyMCEExtensionsBuilders","jia","loadingResponse","loading","error","AIModal","setResponse","sendAIRequest","textEnhancement","capacity","errorMsg","textResponse","catch","useEffect","trim","length","JRCModal","zIndex","open","closeHandler","clickHandler","JRCLoader","JRCTypography","align","JRCInputTinyMCEWithExtRaw","useTheme","models","selectAll","extAI","isAIActive","J","hooks","JIAHook","debug","extArray","onMentionsQueryError","message","tinyMentionsQueries","getTinyMCEMentionsQueries","commonOptions","tinymceCommonOptions","JRCInputTinyMCERaw","additionalExtensions","mentionsQueries","JRCInputTinyMCEWithExt","JRCInputTinyMCE","AppColumn","MainColumn","TwoColLayout","extensionRoute","routes","description","pathname","useLocation","ROUTES_ARRAY","Object","values","activeTab","setActiveTab","tabs","href","absolutePath","path","group","activeRoute","find","route","fallback","Outlet","WidgetState","inplace","justifyContent","hover","src","img","CSSHidden","JRCFormFile","WidgetUploader","initialFiles","initialClick","multiple","accept","onUploadStart","onUploadEnd","onUploadSuccess","uploadRef","total","setTotal","files","setFiles","click","totalFile","prevTotal","fileResponse","prevFiles","JRCWidgetArticleGallery","FileViewer","CSSImagePointer","JRCWidgetArticleGalleryWrapper","mounted","maxWidth","gap","column","openWithOptions","idFile","Array","isArray","JRCWidgetEmptyInplace","WidgetAttachment","CSSWrapper","JRCWidgetArticleAttachmentWrapper","onlyOffice","selectById","option","file","getAccessHash","Error","hash","target","window","getWedocFilePath","wedocWindowOpen","condition","f","includes","mimetype","options","WidgetImage","CSSImageWrapperHover","mockFileLittle","uri","mainType","dateCreation","dateModified","_url","JRCWidgetArticleImageWrapper","useFilter","setUri","str","timestamp","Date","parse","isNaN","getTime","strToTimestamp","now","Wrapper","ToolWrapper","Tool","JRCWidgetArticleTitleWrapper","heading","JRCWidgetArticleTitle","autoFocus","Toolbar","sizeValue","JRCWidgetApiWrapper","keys","setData","startsWith","isAValidURL","console","warn","JRCWidgetApi","JRCWidgetArticleTextWrapper","lineHeight","linkColor","fontSize","tinyMCECommonOptions","selectTinyMCECommonOptions","JRCWidgetArticleText","black","primary","CSSButtonWrapper","CSSPointer","clickable","JRCWidgetArticleButtonWrapper","buttonSize","borderRadius","JRCWidgetButton","JRCWidgetArticleSliderWrapper","fileViewerFiles","slide","JRCWidgetSlider","urlBase","startAt","onClickSlide","DisplayWidget","CSSWidgetLayer","pointerEvents","WidgetLayer","Layer","LayerWidget","top","y","left","x","DraggableHandler","onMouseUp","BETA_JRCDoubleClick","onDoubleTap","mouseIsDown","setMouseDown","mouse","setMouse","start","setStart","child","setChild","handleMouseMove","event","dx","clientX","dy","clientY","handleMouseUp","document","addEventListener","removeEventListener","onMouseDown","nativeEvent","WidgetWrapperCore","indexOrder","editableMap","currentEditableWidgetId","isComponentVisible","setIsComponentVisible","registerWidget","setEditableWidgetId","openingType","openingTypeLink","setEditableIndex","CSSSquareWidgetWrapper","CSSSquareWidget","available","CSSWidgetButton","CSSWrapWidgetWrapper","CSSWrapTitle","CSSWrapWidget","JRCModalLayout","JRCModalContent","isOpen","setOpen","getBuilderWidgets","args","portalId","factory","onClickIconClose","className","WidgetModeArticle"],"sourceRoot":""}