jamespot-react-core 1.1.132 → 1.1.134

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,5 @@
1
+ import React from 'react';
2
+ import { JRCInputTinyMCEProps } from 'jamespot-react-components';
3
+ import { FieldValues } from 'react-hook-form/dist/types';
4
+ export type JRCInputTinyMCEWithExtProps<T extends FieldValues> = Omit<JRCInputTinyMCEProps<T>, 'commonOptions' | 'mentionsQueries' | 'additionalExtensions'>;
5
+ export declare const JRCInputTinyMCEWithExt: <T extends FieldValues = FieldValues>(props: JRCInputTinyMCEWithExtProps<T>) => React.JSX.Element;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { JRCInputTinyMCERawProps } from 'jamespot-react-components';
3
+ export type JRCInputTinyMCEWithExtProps = Omit<JRCInputTinyMCERawProps, 'commonOptions' | 'mentionsQueries' | 'additionalExtensions'>;
4
+ export declare const JRCInputTinyMCEWithExtRaw: (props: JRCInputTinyMCEWithExtProps) => React.JSX.Element;
@@ -1,6 +1,6 @@
1
- import { Query } from 'hooks/useAI';
1
+ import { JiaTextEnhanceQuery } from 'hooks/useAI';
2
2
  import React from 'react';
3
3
  export type AIModalProps = {
4
- query: Query | undefined;
4
+ query: JiaTextEnhanceQuery | undefined;
5
5
  };
6
6
  export declare const AIModal: ({ query }: AIModalProps) => React.JSX.Element;
@@ -1 +1,2 @@
1
- export { WindowDimension, WindowOrientation } from './useWindowDimension';
1
+ export type { WindowDimension, WindowOrientation } from './useWindowDimension';
2
+ export type { JiaTextEnhanceQuery } from './useAI';
@@ -1,7 +1,7 @@
1
- export type Query = {
1
+ export type JiaTextEnhanceQuery = {
2
2
  resolve: (value: string | PromiseLike<string>) => void;
3
3
  reject: (reason?: any) => void;
4
4
  capability: 'develop' | 'summarize' | 'tldr';
5
5
  text: string;
6
6
  };
7
- export declare const useAI: () => readonly [Query | undefined, import("jamespot-react-components/build/src/components/Form/Input/JRCInputTinyMCE/extensions/JTinyMCEExtensions").TinyMCEExtension];
7
+ export declare const useAI: () => readonly [JiaTextEnhanceQuery | undefined, import("jamespot-react-components/build/src/components/Form/Input/JRCInputTinyMCERaw/extensions/JTinyMCEExtensions").TinyMCEExtension];
@@ -5,7 +5,9 @@ export declare const coreComponentsMapping: {
5
5
  readonly DisplayForm: "DisplayForm";
6
6
  readonly EditorsPortal: "EditorsPortal";
7
7
  readonly Empty: "Empty";
8
+ readonly InputTinyMCEWithExtRaw: "JRCInputTinyMCEWithExtRaw";
8
9
  readonly InputTinyMCEWithExt: "JRCInputTinyMCEWithExt";
10
+ readonly TinyMCEAIModal: "AIModal";
9
11
  readonly TwoColLayout: "TwoColLayout";
10
12
  readonly WidgetWrapperCore: "WidgetWrapperCore";
11
13
  readonly WidgetList: "WidgetList";
@@ -4,10 +4,12 @@
4
4
  export { DisplayForm } from '../displayer/DisplayForm.component';
5
5
  export { EditorsPortal } from '../components/editors/EditorsPortal';
6
6
  export { Empty } from '../components/Empty';
7
- export { JRCInputTinyMCEWithExt } from '../components/tinymce/JRCTinyMCEWithExt';
7
+ export { JRCInputTinyMCEWithExtRaw } from '../components/tinymce/JRCInputTinyMCEWithExtRaw';
8
+ export { JRCInputTinyMCEWithExt } from '../components/tinymce/JRCInputTinyMCEWithExt';
8
9
  export { TwoColLayout } from '../components/TwoColLayout';
9
10
  export { WidgetWrapperCore } from '../components/widgets/WidgetWrapperCore';
10
11
  export { WidgetList } from '../components/widgets/WidgetList/WidgetList';
12
+ export { AIModal } from '../components/tinymce/extension/AIModal';
11
13
  /**
12
14
  * please fill this file and core-component-list.ts
13
15
  */
@@ -27,6 +27,7 @@ declare const _default: {
27
27
  readonly CommentsBloc: "JRCCommentsBloc";
28
28
  readonly ConditionalWrapper: "JRCConditionalWrapper";
29
29
  readonly Container: "JRCContainer";
30
+ readonly BasicAutoMarginContainer: "JRCBasicAutoMarginContainer";
30
31
  readonly Date: "JRCDate";
31
32
  readonly DEPRECATEDFormCheckbox: "JRCFormCheckbox";
32
33
  readonly DEPRECATEDFormColorField: "JRCFormColorField";
@@ -91,10 +92,12 @@ declare const _default: {
91
92
  readonly InputTaxonomy: "JRCInputTaxonomy";
92
93
  readonly InputText: "JRCInputText";
93
94
  readonly InputTextarea: "JRCInputTextarea";
95
+ readonly InputPassword: "JRCInputPassword";
94
96
  readonly InputTextIconButton: "JRCInputTextIconButton";
97
+ readonly InputTextRaw: "JRCInputTextRaw";
95
98
  readonly InputTime: "JRCInputTime";
96
99
  readonly InputTinyMCE: "JRCInputTinyMCE";
97
- readonly InputTinyMCEForm: "JRCFormTinyMCE";
100
+ readonly InputTinyMCERaw: "JRCInputTinyMCERaw";
98
101
  readonly InputUrl: "JRCInputUrl";
99
102
  readonly List: "JRCList";
100
103
  readonly Loader: "JRCLoader";
@@ -140,12 +143,12 @@ declare const _default: {
140
143
  readonly WidgetArticleGalleryEditor: "JRCWidgetArticleGalleryEditor";
141
144
  readonly WidgetArticleImage: "JRCWidgetArticleImage";
142
145
  readonly WidgetArticleImageEditor: "JRCWidgetArticleImageEditor";
146
+ readonly WidgetArticleSliderEditor: "JRCWidgetArticleSliderEditor";
143
147
  readonly WidgetArticleText: "JRCWidgetArticleText";
144
148
  readonly WidgetArticleTextEditor: "JRCWidgetArticleTextEditor";
145
149
  readonly WidgetArticleTitle: "JRCWidgetArticleTitle";
146
150
  readonly WidgetArticleTitleEditor: "JRCWidgetArticleTitleEditor";
147
- readonly WidgetSlider: "JRCWidgetSlider";
148
- readonly WidgetArticleSliderEditor: "JRCWidgetArticleSliderEditor";
149
151
  readonly WidgetEmptyInplace: "JRCWidgetEmptyInplace";
152
+ readonly WidgetSlider: "JRCWidgetSlider";
150
153
  };
151
154
  export default _default;
@@ -2,4 +2,5 @@ export * from './utils/types';
2
2
  export * from './components/types';
3
3
  export * from './displayer/types';
4
4
  export * from './registry/types';
5
+ export * from './hooks/types';
5
6
  export type { RootState } from './redux/store';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jamespot-react-core",
3
- "version": "1.1.132",
3
+ "version": "1.1.134",
4
4
  "description": "Jamespot React Core",
5
5
  "main": "./build/app.bundle.js",
6
6
  "types": "./build/src/App.d.ts",
@@ -50,9 +50,9 @@
50
50
  "dependencies": {
51
51
  "@reduxjs/toolkit": "^1.9.0",
52
52
  "history": "^5.3.0",
53
- "jamespot-front-business": "^1.1.38",
54
- "jamespot-react-components": "^1.0.170",
55
- "jamespot-user-api": "^1.0.142",
53
+ "jamespot-front-business": "^1.1.39",
54
+ "jamespot-react-components": "^1.0.174",
55
+ "jamespot-user-api": "^1.0.145",
56
56
  "react": "^17.0.2",
57
57
  "react-dom": "^17.0.2",
58
58
  "react-hook-form": "^7.25.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"98.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/components/tinymce/extension/AIModal.tsx","webpack://ReactCore/./src/components/tinymce/JRCTinyMCEWithExt.tsx","webpack://ReactCore/./src/hooks/useAI.ts","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/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 WidgetArticleAttachmentContent,\n WidgetArticleButtonContent,\n WidgetArticleGalleryContent,\n WidgetArticleImageContent,\n WidgetArticleSliderContent,\n WidgetArticleTextContent,\n WidgetArticleTitleContent,\n WidgetsRootState,\n WidgetStateProps,\n} 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');\nconst JRCWidgetArticleSliderEditor = JRCore.registry.getLazyComponent('WidgetArticleSliderEditor');\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 <JRCWidgetArticleButtonEditor\n content={widgetWrapper.widget.content}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleButtonContent>(uniqid, content, false));\n }}\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n case 'widget-article-attachment':\n return (\n <JRCWidgetArticleAttachmentEditor\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 <JRCWidgetArticleGalleryEditor\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 <JRCWidgetArticleTextEditor\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 <JRCWidgetArticleImageEditor\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-article-title':\n return (\n <JRCWidgetArticleTitleEditor\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 <JRCWidgetArticleSliderEditor\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 { Query } from 'hooks/useAI';\nimport { JRCLoader, JRCModal } from 'jamespot-react-components';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\n\nexport type AIModalProps = {\n query: Query | 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\nlet timeoutJIAMock: number | undefined = undefined;\nfunction callJIAMock(text: string, action: string) {\n if (timeoutJIAMock) {\n clearTimeout(timeoutJIAMock);\n }\n return new Promise<string>((resolve, _) => {\n timeoutJIAMock = window.setTimeout(() => {\n resolve(`${action} ${text}`);\n }, 3000);\n });\n}\n\nexport const AIModal = ({ query }: AIModalProps) => {\n const intl = useIntl();\n const [response, setResponse] = useState<ResponseType>(loadingResponse);\n\n const sendAIRequest = useCallback((query: Query) => {\n setResponse(loadingResponse);\n // TODO: replace with the actual query using user-api\n callJIAMock(query.text, query.capability)\n .then((response) => {\n setResponse({\n error: undefined,\n loading: false,\n response,\n });\n })\n .catch((_) => {\n setResponse({\n error: 'error calling AI',\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 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 && <JRCLoader />}\n {!response.loading && response.error && <p>{intl.formatMessage({ id: 'GLOBAL_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 { JRCInputTinyMCE, JRCInputTinyMCEProps } from 'jamespot-react-components';\nimport { AIModal } from './extension/AIModal';\nimport JRCore from 'App';\n\nexport type JRCInputTinyMCEWithExtProps = Omit<\n JRCInputTinyMCEProps,\n 'commonOptions' | 'mentionsQueries' | 'additionalExtensions'\n>;\n\nexport const JRCInputTinyMCEWithExt = (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 <JRCInputTinyMCE\n commonOptions={commonOptions}\n additionalExtensions={extArray}\n mentionsQueries={tinyMentionsQueries}\n {...props}\n />\n )}\n <AIModal query={query} />\n </>\n );\n};\n","import { JTinyMCEExtensionsBuilders } from 'jamespot-react-components';\nimport { useCallback, useMemo, useState } from 'react';\n\nexport type Query = {\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<Query | undefined>();\n\n const PrepareAndSetQuery = useCallback((query: Query) => {\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), []);\n\n return [query, ext] as const;\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 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/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 '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 <CSSWrapper>\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 (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 JRCWidgetArticleImage = JRCore.registry.getLazyComponent('WidgetArticleImage');\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 <JRCWidgetArticleImage maxWidth={width ?? 600} uri={uri} useFilter={useFilter ?? false} />\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 <JRCWidgetArticleImage\n maxWidth={width ?? 600}\n uri={uri}\n useFilter={useFilter ?? false}\n />\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 { 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 { JRCWidgetArticleButton } from 'jamespot-react-components';\nimport { useDispatch } from 'react-redux';\nimport { WidgetEditor } from 'jamespot-front-business';\n\nconst CSSPointer = styled.div<{ clickable: boolean }>`\n pointer-events: ${(props) => (props.clickable ? 'all' : 'none')};\n cursor: pointer;\n`;\n\n// Article visuel\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, color, backgroundColor, buttonSize, borderRadius, variant } = widget.content;\n\n return (\n <div\n onClick={() => {\n if (mode === 'edit') {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n }}>\n <CSSPointer clickable={mode !== 'edit'}>\n <JRCWidgetArticleButton\n text={text}\n color={color}\n backgroundColor={backgroundColor}\n buttonSize={buttonSize}\n borderRadius={borderRadius}\n variant={variant}\n />\n </CSSPointer>\n </div>\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 { 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-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","JRCWidgetArticleTitleEditor","registry","getLazyComponent","JRCWidgetArticleImageEditor","JRCWidgetArticleTextEditor","JRCWidgetArticleGalleryEditor","JRCWidgetArticleButtonEditor","JRCWidgetArticleAttachmentEditor","JRCWidgetArticleSliderEditor","Editor","token","selectToken","widgetWrapper","selectWidget","onSave","content","updateWidget","flushEditor","onStateChange","states","id","setWidgetState","onOpen","registerEditorPopup","widget","onChange","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","loadingResponse","response","loading","error","timeoutJIAMock","AIModal","query","setResponse","useState","sendAIRequest","useCallback","action","capability","clearTimeout","Promise","resolve","window","then","catch","useEffect","trim","length","JRCModal","open","closeHandler","reject","clickHandler","JRCLoader","JRCInputTinyMCEWithExt","useTheme","models","selectAll","extAI","setQuery","PrepareAndSetQuery","value","AICapabilities","useMemo","develop","summarize","tldr","JTinyMCEExtensionsBuilders","jia","useAI","isAIActive","J","hooks","JIAHook","debug","extArray","onMentionsQueryError","message","tinyMentionsQueries","getTinyMCEMentionsQueries","commonOptions","tinymceCommonOptions","JRCInputTinyMCE","additionalExtensions","mentionsQueries","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","url","JRCWidgetArticleAttachment","CSSWrapper","JRCWidgetArticleAttachmentWrapper","onlyOffice","selectById","option","file","getAccessHash","result","Error","hash","target","getWedocFilePath","wedocWindowOpen","JRCWidgetArticleImage","CSSImageWrapperHover","mockFileLittle","uri","mimetype","mainType","dateCreation","dateModified","_url","JRCWidgetArticleImageWrapper","useFilter","setUri","str","timestamp","Date","parse","isNaN","getTime","strToTimestamp","now","Wrapper","ToolWrapper","Tool","JRCWidgetArticleTitleWrapper","heading","JRCWidgetArticleTitle","autoFocus","Toolbar","sizeValue","JRCWidgetArticleTextWrapper","lineHeight","linkColor","fontSize","tinyMCECommonOptions","selectTinyMCECommonOptions","JRCWidgetArticleText","black","primary","CSSPointer","clickable","JRCWidgetArticleButtonWrapper","buttonSize","borderRadius","JRCWidgetArticleButton","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":""}
@@ -1,4 +0,0 @@
1
- import React from 'react';
2
- import { JRCInputTinyMCEProps } from 'jamespot-react-components';
3
- export type JRCInputTinyMCEWithExtProps = Omit<JRCInputTinyMCEProps, 'commonOptions' | 'mentionsQueries' | 'additionalExtensions'>;
4
- export declare const JRCInputTinyMCEWithExt: (props: JRCInputTinyMCEWithExtProps) => React.JSX.Element;