jamespot-react-core 1.1.163 → 1.1.164
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.
- package/build/854.bundle.js +12 -12
- package/build/854.bundle.js.map +1 -1
- package/build/app.bundle.js +1079 -1004
- package/build/app.bundle.js.map +1 -1
- package/build/src/registry/ext-component-list.d.ts +1 -0
- package/package.json +3 -3
package/build/854.bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"854.bundle.js","mappings":"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","sources":["webpack://ReactCore/./src/components/Avatar.tsx","webpack://ReactCore/./src/components/Audience.tsx","webpack://ReactCore/./src/components/tinymce/extension/AIModal.tsx","webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.tsx","webpack://ReactCore/./src/components/widgets/namespace.ts","webpack://ReactCore/./src/components/widgets/wrapper/utils.ts","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetDatasourceTableWrapper.tsx","webpack://ReactCore/./src/components/widgets/components/WidgetUploader.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleAttachmentWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleButtonWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleGalleryWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleImageWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleSliderWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleTextWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleTitleWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetCheckListWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetExcelDatasourceTableWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetRemove.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetViewFooterActions.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetPresenceWrapperClosing.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetPresenceWrapper.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/WidgetState.tsx","webpack://ReactCore/./src/components/widgets/Widget.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetWrapperCore.tsx","webpack://ReactCore/./src/components/widgets/components/WidgetEditorPanel.tsx","webpack://ReactCore/./src/components/CommentsBloc.tsx","webpack://ReactCore/./src/hooks/useCommentsLikeRT.ts","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/states/EditorIsBusy.tsx","webpack://ReactCore/./src/components/editors/EditorPosition.tsx","webpack://ReactCore/./src/components/editors/states/EditorIsInitialize.tsx","webpack://ReactCore/./src/components/editors/states/EditorIsLocked.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/JRCInputTinyMCEWithExt.tsx","webpack://ReactCore/./src/components/tinymce/JRCInputTinyMCEWithExtRaw.tsx","webpack://ReactCore/./src/components/modals/ModalAudience.tsx","webpack://ReactCore/./src/components/TwoColLayout.tsx"],"sourcesContent":["import { JRCAvatar, JRCAvatarProps, JRCIcon } from 'jamespot-react-components';\r\nimport { Network } from 'jamespot-front-business';\r\nimport { useSelector } from 'react-redux';\r\nimport React from 'react';\r\nimport { useTheme } from 'styled-components';\r\n\r\nconst BASE_MULTIPLE = 8;\r\n\r\nexport const Avatar = (props: JRCAvatarProps) => {\r\n const theme = useTheme();\r\n const networkPublic = useSelector(Network.selectors.selectNetworkPublic);\r\n\r\n if (props.uri === networkPublic?.uri) {\r\n return (\r\n <JRCIcon\r\n name={'icon-fs-wall'}\r\n size={(props.size ?? 3) * BASE_MULTIPLE}\r\n color={theme.color.primary}\r\n variant={'circle'}\r\n />\r\n );\r\n }\r\n\r\n return <JRCAvatar {...props} />;\r\n};\r\n","import React, { useState } from 'react';\nimport styled, { useTheme } from 'styled-components';\nimport { useIntl } from 'react-intl';\nimport {\n Utils,\n JRCFlexBox,\n JRCModalContent,\n JRCModalLayout,\n JRCStyledHref,\n JRCTooltip,\n JRCTypography,\n} from 'jamespot-react-components';\nimport { Avatar } from './Avatar';\nimport { jObjectLittle } from 'jamespot-user-api';\n\nexport type AudienceProps<T extends jObjectLittle> = {\n audience: T[];\n limit?: number;\n};\n\nconst LIMIT = 2;\n\nconst AudienceWrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin-bottom: 24px;\n`;\n\nexport const AvatarLink = styled.a<{ overlap?: boolean }>`\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n width: 40px;\n height: 40px;\n border-radius: 40px;\n overflow: hidden;\n color: ${(props) => props.theme.color.white};\n background-color: ${(props) => props.theme.color.lavender};\n border: 4px solid ${(props) => props.theme.color.white};\n margin-left: ${(props) => (props.overlap ? '-18px' : '0')};\n cursor: pointer;\n`;\n\nexport const Audience = <T extends jObjectLittle>({ audience, limit = LIMIT }: AudienceProps<T>) => {\n const intl = useIntl();\n const theme = useTheme();\n const [isModalOpen, setModalOpen] = useState(false);\n\n return (\n <>\n <JRCFlexBox>\n {[...audience].splice(0, limit).map((item, index) => (\n <AvatarLink overlap={index !== 0} href={item._url} target={'_blank'} key={item.id}>\n <JRCTooltip description={item.title === undefined ? ' ' : item.title} position=\"left\">\n <Avatar\n uri={item.uri}\n size={4}\n variant=\"circle\"\n alt=\"image\"\n timestamp={item.dateModified ? Utils.date.strToTimestamp(item.dateModified) : undefined}\n focusable\n />\n </JRCTooltip>\n </AvatarLink>\n ))}\n {audience.length > limit && (\n <AvatarLink onClick={() => setModalOpen(true)} overlap={true}>\n +{audience.length - limit}\n </AvatarLink>\n )}\n </JRCFlexBox>\n {audience.length > limit && (\n <JRCModalLayout\n closeHandler={() => setModalOpen(false)}\n enableClickAwayCloseModal\n open={isModalOpen}\n variant={'fixed-height'}\n maxHeight={'800px'}>\n <JRCModalContent\n title={intl.formatMessage({ id: 'GLOBAL_Audience' })}\n overflow={'scroll'}\n onClickIconClose={() => setModalOpen(false)}>\n <AudienceWrapper>\n {audience.map((item, i) => (\n <JRCFlexBox key={`audience-${i}`} y={'center'} gap={theme.space.l}>\n <Avatar size={5} uri={`${item.type}/${item.id}`} />\n <JRCStyledHref href={`${item.type}/${item.id}`}>\n <JRCTypography>{item.title}</JRCTypography>\n </JRCStyledHref>\n </JRCFlexBox>\n ))}\n </AudienceWrapper>\n </JRCModalContent>\n </JRCModalLayout>\n )}\n </>\n );\n};\n","import { JiaTextEnhanceQuery } from 'hooks/useAI';\nimport { JRCLoader, JRCModalContent, JRCModalLayout, JRCTypography } from 'jamespot-react-components';\nimport jamespot from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\n\nimport styled, { useTheme } from 'styled-components';\n\nconst TextWrapper = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n`;\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 const theme = useTheme();\n\n const sendAIRequest = useCallback(\n (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((_err) => {\n setResponse({\n error: intl.formatMessage({ id: 'JIA_ERROR_AI_CALL' }),\n loading: false,\n response: undefined,\n });\n });\n },\n [intl],\n );\n\n useEffect(() => {\n if (query && query.text.trim().length > 0) {\n sendAIRequest(query);\n }\n }, [query, sendAIRequest]);\n\n return (\n <JRCModalLayout\n zIndex={theme.zIndex.tinyMCEModal}\n open={!!query}\n closeHandler={() => {\n query?.reject();\n }}>\n <JRCModalContent\n overflow=\"scroll\"\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 isFull>\n <TextWrapper>\n {response.loading && (\n <>\n <JRCLoader />\n <JRCTypography align=\"center\">\n {intl.formatMessage({ id: 'JIA_WAITING_WARNIG' })}\n </JRCTypography>\n </>\n )}\n {!response.loading && response.error && <p>{response.error}</p>}\n {!response.loading && response.response && <p>{response.response}</p>}\n </TextWrapper>\n </JRCModalContent>\n </JRCModalLayout>\n );\n};\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; height: number }>`\n border: 2px solid ${(props) => props.theme.color.primary};\n height: ${(props) => (props.open ? props.height : '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; full?: boolean }>`\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 ${(props) => props.full && `flex: 1`}\n`;\n\nexport const Flex = styled.div<{ direction: 'row' | 'column'; gap?: number }>`\n display: flex;\n flex-direction: ${(props) => (props.direction === 'row' ? 'row' : 'column')};\n align-items: ${(props) => (props.direction === 'row' ? 'center' : 'flex-start')};\n justify-content: ${(props) => (props.direction === 'row' ? 'flex-start' : 'center')};\n flex: 1;\n ${(props) => props.gap && `gap:${props.gap}px`}\n`;\n","import React, { useMemo } from 'react';\nimport { FormattedMessage, 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 { JRCModalLayoutProps } from 'jamespot-react-components';\nimport { getBuilderWidgets } from '../namespace';\nimport {\n CSSSquareWidget,\n CSSSquareWidgetWrapper,\n CSSWidgetButton,\n CSSWrapTitle,\n CSSWrapWidget,\n CSSWrapWidgetWrapper,\n Flex,\n} from './WidgetList.style';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\nconst JRCModalLayout = JRCore.registry.getLazyComponent('ModalLayout');\nconst JRCModalContent = JRCore.registry.getLazyComponent('ModalContent');\nconst JRCTooltip = JRCore.registry.getLazyComponent('Tooltip');\nconst JRCIconButton = JRCore.registry.getLazyComponent('IconButton');\n\ntype WidgetListMode = 'button' | 'list' | 'gallery' | 'custom' | 'article' | 'comment';\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 return (\n <>\n <JRCModalLayout {...args}>\n <JRCModalContent\n onClickIconClose={args.closeHandler}\n buttons={\n mode === 'comment'\n ? [\n {\n children: <FormattedMessage id=\"GLOBAL_Close\" />,\n color: 'cancel',\n clickHandler: () => setOpen(false),\n },\n ]\n : undefined\n }\n title={intl.formatMessage({ id: 'WIDGET_Builder' })}>\n {mode === 'comment' ? (\n <CSSWrapWidgetWrapper>\n {widgets.map((widget, index) => (\n <CSSWrapWidget\n key={widget.name}\n open={true}\n full\n index={index}\n onClick={() => onClick(widget.name)}>\n <Flex direction={'row'} gap={12}>\n <img src={widget.img} />\n <Flex direction={'column'}>\n <h3>{intl.formatMessage({ id: widget.label })}</h3>\n <p>{intl.formatMessage({ id: widget.description })}</p>\n </Flex>\n </Flex>\n </CSSWrapWidget>\n ))}\n </CSSWrapWidgetWrapper>\n ) : (\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 </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 {mode === 'comment' && view === 'edit' ? (\n <WidgetModeComment\n onClick={() => {\n setOpen(true);\n }}\n />\n ) : (\n <></>\n )}\n </>\n );\n};\n\nconst HEIGHT_CLOSED = 50;\nconst HEIGHT = 80;\nconst MARGIN_BOTTOM = 10;\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\n const calcHeight = useMemo(() => {\n return Math.ceil(widgets.length / 2) * HEIGHT + HEIGHT_CLOSED + MARGIN_BOTTOM;\n }, [widgets]);\n\n return (\n <>\n <CSSWidgetButton open={open} height={calcHeight}>\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\nconst WidgetModeComment = ({ onClick }: { onClick: () => void }) => {\n const intl = useIntl();\n return (\n <>\n <JRCTooltip description={intl.formatMessage({ id: 'COMMENT_Add_Widget' })}>\n <JRCIconButton\n bg={'grey1'}\n bgHover={'grey2'}\n color={'grey5'}\n iconSize={22}\n onClick={() => {\n onClick();\n }}\n icon={'icon-fs-puzzle'}\n />\n </JRCTooltip>\n </>\n );\n};\n","import { Widget } from 'jamespot-front-business';\nimport { WidgetDefinitionProps, WidgetsName } from 'jamespot-user-api';\n\nexport function getBuilderWidgets(namespace: string): WidgetDefinitionProps[] {\n switch (namespace) {\n case 'widget-article-image':\n return [Widget.definition(WidgetsName.ArticleTitle), Widget.definition(WidgetsName.ArticleButton)];\n case 'comment':\n return [Widget.definition(WidgetsName.CheckList), Widget.definition(WidgetsName.Presence)];\n default:\n return [\n Widget.definition(WidgetsName.ArticleTitle),\n Widget.definition(WidgetsName.ArticleText),\n Widget.definition(WidgetsName.ArticleImage),\n Widget.definition(WidgetsName.ArticleButton),\n Widget.definition(WidgetsName.ArticleSlider),\n Widget.definition(WidgetsName.ArticleAttachment),\n Widget.definition(WidgetsName.Presence),\n ];\n }\n}\n","import { WidgetTableColumn, WidgetTableColumnsData } from 'jamespot-user-api';\n\nexport const getVisibleColumns = (tableColumnsData: WidgetTableColumnsData, columns: WidgetTableColumn[]) => {\n const toRet: WidgetTableColumn[] = [];\n tableColumnsData\n .filter((data) => data.isVisible)\n .forEach((data) => {\n const column = columns.find((el) => el.name === data.name);\n if (column) {\n toRet.push(column);\n }\n });\n\n return toRet;\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\nconst WidgetTable = JRCore.registry.getLazyComponent('WidgetTable');\n\nimport { FormattedMessage } from 'react-intl';\n\nconst Loader = JRCore.registry.getLazyComponent('Loader');\n\nimport jamespot, {\n DatasourceResultSort,\n DatasourceType,\n Format,\n WidgetDatasourceValues,\n WidgetDisplayMode,\n WidgetsName,\n WidgetTableColumn,\n} from 'jamespot-user-api';\n\nimport styled from 'styled-components';\nimport { WidgetDatasourceTableContent } from 'jamespot-user-api';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { useAppDispatch } from 'redux/store';\nimport { JRCButton, JRCHtml } from 'jamespot-react-components';\nimport { getVisibleColumns } from './utils';\nimport { FitType, useArticleRT } from '../hooks';\n\nexport const Wrapper = styled.div``;\n\nexport const AbsoluteWrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n`;\n\nexport const WrapperEditMode = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n color: ${(props) => props.theme.color.primary};\n cursor: pointer;\n opacity: 0;\n border: 1px solid ${(props) => props.theme.color.primary};\n &:hover {\n background-color: ${(props) => props.theme.color.grey2};\n opacity: 0.9;\n }\n`;\n\nexport const WidgetDatasourceTableWrapper = ({\n uniqid,\n uri,\n limit,\n tableHeadColor,\n tableHeadTextColor,\n tableHeadIconColor,\n tableRowColor,\n tableRowTextColor,\n tableColumnsData = [],\n tableBorderRadius,\n tableSizedColumns,\n tableSizedColumnsWidth,\n mode,\n}: WidgetDatasourceTableContent & { uniqid: string; mode: WidgetDisplayMode }) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const [isEditorOpenOnFirstRender, setIsEditorOpenOnFirstRender] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [datasourceData, setDatasourceData] = useState<Record<string, WidgetDatasourceValues>[]>([]);\n const [datasourceModel, setDatasourceModel] = useState<WidgetTableColumn[]>([]);\n const [datasourceSort, setDatasourceSort] = useState<DatasourceResultSort>({ order: 'ascending', name: 'unknown' });\n const [datasourceType, setDatasourceType] = useState<DatasourceType | undefined>(undefined);\n const [datasourceIdentifier, setDatasourceIdentifier] = useState<string>('');\n\n const definition = useMemo(() => Widget.definition(WidgetsName.DatasourceTable), []);\n const rtConditions = useMemo<FitType[]>(() => {\n if (datasourceType === 'studio') {\n return [{ type: [datasourceIdentifier] }];\n }\n\n return [];\n }, [datasourceType, datasourceIdentifier]);\n const rtAudience = useMemo<string[]>(() => {\n if (datasourceType === 'doc') {\n return [datasourceIdentifier];\n }\n\n return [];\n }, [datasourceType, datasourceIdentifier]);\n\n const { rtLastObject } = useArticleRT(rtConditions, rtAudience);\n\n const fetchDatasource = useCallback(() => {\n if (!uri) {\n return;\n }\n\n setIsLoading(true);\n jamespot.datasource\n .get(uri, Format.VIEW)\n .then((response) => {\n setDatasourceModel(response.result.model);\n setDatasourceData(response.result.data);\n setDatasourceSort(response.result.sort);\n setDatasourceType(response.result.datasource.datasourceType);\n setDatasourceIdentifier(response.result.datasource.datasourceIdentifier);\n })\n .finally(() => setIsLoading(false));\n }, [uri]);\n\n useEffect(() => {\n if (uri !== undefined && tableColumnsData.length !== 0 && datasourceModel.length === 0) {\n fetchDatasource();\n }\n }, [uri, tableColumnsData, datasourceModel, fetchDatasource]);\n\n useEffect(() => {\n if (!rtLastObject) {\n return;\n }\n\n fetchDatasource();\n }, [rtLastObject, fetchDatasource]);\n\n useEffect(() => {\n if (!uri) {\n setDatasourceModel([]);\n }\n }, [uri]);\n\n const registerEditor = useCallback(() => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n setTimeout(() => {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: WidgetsName.DatasourceTable }));\n }, 0);\n }, [dispatch, uniqid]);\n\n useEffect(() => {\n if (mode === 'view' || mode === 'preview') {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n }\n }, [mode, dispatch]);\n\n useEffect(() => {\n if (!isEditorOpenOnFirstRender && !uri && mode === 'edit') {\n registerEditor();\n setIsEditorOpenOnFirstRender(true);\n }\n }, [dispatch, uniqid, isEditorOpenOnFirstRender, uri, registerEditor, mode]);\n\n const columns = useMemo(\n () => getVisibleColumns(tableColumnsData, datasourceModel),\n [tableColumnsData, datasourceModel],\n );\n\n if (tableColumnsData.length === 0 && !isLoading && mode === 'edit') {\n return (\n <>\n <AbsoluteWrapper onClick={registerEditor}>\n <img src={`/img/fast-intranet/${WidgetsName.DatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={definition.label} />\n <JRCButton label=\"GLOBAL_Settings\" />\n </AbsoluteWrapper>\n <WrapperEditMode onClick={registerEditor}>\n <JRCHtml\n __html={`${intl.formatMessage({ id: 'WIDGET_Set_Widget' })} <b>${intl.formatMessage({\n id: definition.label,\n })}</b>`}\n />\n </WrapperEditMode>\n </>\n );\n }\n\n return isLoading ? (\n <AbsoluteWrapper>\n <Loader />\n </AbsoluteWrapper>\n ) : (\n <>\n {!isLoading && datasourceData.length === 0 ? (\n <AbsoluteWrapper>\n <img src={`/img/fast-intranet/${WidgetsName.DatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={'WIDGET_Datasource_No_Results'} />\n </AbsoluteWrapper>\n ) : (\n <WidgetTable\n rows={datasourceData}\n columns={columns}\n limit={limit}\n tableHeadColor={tableHeadColor}\n tableHeadTextColor={tableHeadTextColor}\n tableHeadIconColor={tableHeadIconColor}\n tableRowColor={tableRowColor}\n tableRowTextColor={tableRowTextColor}\n tableBorderRadius={tableBorderRadius}\n tableColumnsData={tableColumnsData}\n tableSizedColumns={tableSizedColumns}\n tableSizedColumnsWidth={tableSizedColumnsWidth}\n tableDefaultSortOrder={datasourceSort.order}\n tableDefaultSortName={datasourceSort.name}\n />\n )}\n {mode === 'edit' ? (\n <WrapperEditMode onClick={registerEditor}>\n <JRCHtml\n __html={`${intl.formatMessage({ id: 'WIDGET_Set_Widget' })} <b>${intl.formatMessage({\n id: definition.label,\n })}</b>`}\n />\n </WrapperEditMode>\n ) : (\n <></>\n )}\n </>\n );\n};\n","import React from 'react';\n\nimport { useSelector } from 'react-redux';\n\nimport { jFileLittle } from 'jamespot-user-api';\n\nimport { Widget } from 'jamespot-front-business';\nimport styled from 'styled-components';\nimport { JRCInputFileAdvancedRaw } from 'jamespot-react-components';\n\nexport const CSSHidden = styled.div`\n width: 0;\n height: 0;\n overflow: hidden;\n`;\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 // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialFiles]);\n\n React.useEffect(() => {\n onUploadSuccess(files);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [files]);\n\n React.useEffect(() => {\n if (total === 0) {\n onUploadEnd();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\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 <JRCInputFileAdvancedRaw\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, { useEffect } 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 const onError = (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n };\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !files || files.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [files]);\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} onError={onError} />\n ) : (\n <FileViewer files={files} openWithOptions={openWithOptions}>\n {(open) => {\n return <WidgetAttachment files={files} onClick={(idFile) => open(idFile)} onError={onError} />;\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, { useEffect } 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 { Widget, 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 useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\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 { 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 // eslint-disable-next-line react-hooks/exhaustive-deps\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, { useEffect, useState } from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport {\n WidgetArticleImageContent,\n WidgetArticleImageType,\n WidgetDisplayMode,\n WidgetsRootState,\n formatImgUrl,\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 size: 10,\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] = useState<string | undefined>(undefined);\n const intl = useIntl();\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, empty: !file }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [file]);\n\n useEffect(() => {\n if (file) {\n setUri(\n formatImgUrl({\n timestamp: file.dateModified ? strToTimestamp(file.dateModified) : Date.now(),\n from: 'imagecache',\n size: 'fitx1200',\n uri: file.uri,\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, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport {\n WidgetArticleSliderType,\n WidgetDisplayMode,\n WidgetsRootState,\n formatImgUrl,\n jFileLittle,\n} 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<{ maxWidth: number }>`\n flex: 1;\n display: flex;\n flex-direction: row;\n min-height: 60px;\n align-items: center;\n width: ${(props) => props.maxWidth}px;\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 size: 10,\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 maxWidth = width ?? 600;\n const [dynamicWidth, setDynamicWidth] = useState<number | undefined>(undefined);\n const ref = useRef<HTMLDivElement>(null);\n const fileViewerFiles = useMemo(\n () =>\n 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: formatImgUrl({\n size: 'fitx1200',\n uri: slide.file ? slide.file.uri : '',\n from: 'imagecache',\n timestamp:\n slide.file && slide.file.dateModified\n ? strToTimestamp(slide.file.dateModified)\n : Date.now(),\n }),\n };\n }),\n ]\n : [],\n [widget.content.slides],\n );\n\n const slides = useMemo(\n () =>\n widget.content.slides !== undefined\n ? [\n ...widget.content.slides.map((slide) => {\n if (slide.file) {\n return {\n ...slide,\n uri: formatImgUrl({\n timestamp: slide.file.dateModified\n ? strToTimestamp(slide.file.dateModified)\n : Date.now(),\n size: `fitx${dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}`,\n from: 'imagecache',\n uri: slide.file.uri,\n }),\n };\n } else {\n return {\n ...slide,\n uri: '',\n };\n }\n }),\n ]\n : [],\n [widget.content.slides, dynamicWidth, maxWidth],\n );\n\n useEffect(() => {\n if (isActive && mode === 'edit') {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isActive]);\n\n useEffect(() => {\n const handleResize = () => {\n if (ref.current) {\n setDynamicWidth(ref.current ? ref.current.offsetWidth : maxWidth);\n }\n };\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref]);\n\n useEffect(() => {\n setDynamicWidth(ref.current ? ref.current.offsetWidth : maxWidth);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref]);\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !widget.content.slides || widget.content.slides.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [widget.content.slides]);\n\n const isEditable = useMemo(\n () => mode === 'edit' && Array.isArray(widget.content.slides) && widget.content.slides.length === 0,\n [widget.content.slides, mode],\n );\n\n const handleEditor = useCallback(() => {\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: widget.name,\n }),\n );\n }, [dispatch, widget.uniqid, widget.name]);\n\n /** small hack to catch the real width of the div */\n if (dynamicWidth === undefined) {\n return <div ref={ref} style={{ width: '100%' }}></div>;\n }\n\n return (\n <Wrapper maxWidth={dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}>\n <FileViewer files={fileViewerFiles} openWithOptions={[]}>\n {(open) => {\n return (\n <JRCWidgetSlider\n slides={slides}\n maxWidth={dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}\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 {isEditable ? (\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={handleEditor}\n />\n ) : (\n <></>\n )}\n </Wrapper>\n );\n};\n","import React, { useCallback, useEffect, useMemo } from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport JRCore from 'App';\nimport { useIntl } from 'react-intl';\nimport {\n WidgetArticleTextContent,\n WidgetArticleTextType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport { Model, TinyMCE, Toast, Widget, updateWidgetContent } from 'jamespot-front-business';\n\nconst WidgetArticleText = JRCore.registry.getLazyComponent('WidgetArticleText');\n\nimport { getTinyMCEMentionsQueries } from 'App';\n\nimport styled, { useTheme } from 'styled-components';\n\nconst CSSTextWrapper = styled.div`\n cursor: text;\n p {\n word-wrap: break-word;\n }\n a {\n word-wrap: break-word;\n }\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 } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const isBusy = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid)?.busy);\n const token = useSelector(Widget.selectors.selectToken);\n const tinyMCECommonOptions = useSelector(TinyMCE.selectors.selectTinyMCECommonOptions);\n const models = useSelector(Model.selectors.selectAll);\n\n const intl = useIntl();\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onError);\n }, [models, onError, theme]);\n\n // small hack to hide and redraw tinymce to avoid initialization issue\n if (isBusy) {\n return <></>;\n }\n\n return (\n <CSSTextWrapper>\n <WidgetArticleText\n autoFocus={isActive}\n text={text ?? ''}\n token={mode === 'edit' && token !== undefined ? token : ''}\n tinyMCECommonOptions={\n mode === 'edit' && tinyMCECommonOptions\n ? {\n tinymceScriptSrc: 'https://ecosysteme.jamespot.pro/js/tinymce/tinymce.min.js',\n commonOptions: tinyMCECommonOptions,\n mentionsQueries: tinyMentionsQueries,\n }\n : undefined\n }\n mode={mode}\n onChange={(text) => {\n dispatch(updateWidgetContent<WidgetArticleTextContent>(uniqid, { text }));\n }}\n />\n </CSSTextWrapper>\n );\n};\n","import React, { useEffect } from 'react';\n\nimport JRCore from 'App';\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';\n\nconst WidgetArticleTitle = JRCore.registry.getLazyComponent('WidgetArticleTitle');\n\nimport styled from 'styled-components';\n\nconst CSSTextWrapper = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n align-items: center;\n cursor: text;\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 useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\n\n return (\n <CSSTextWrapper>\n <WidgetArticleTitle\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 </CSSTextWrapper>\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 { Toast, updateWidgetContent, UserCurrent, Widget, WidgetEditor } from 'jamespot-front-business';\nimport { JRCIconButton, JRCInputTextRaw, JRCModal } from 'jamespot-react-components';\nimport { JRCWidgetCheckListEntries } from 'jamespot-react-components/build/src/components/Widgets/JRCWidgetCheckList/JRCWidgetCheckList';\nimport jamespot, {\n CombinedWidgetContent,\n WidgetCheckListContent,\n WidgetCheckListContentArr,\n WidgetCheckListType,\n WidgetDisplayMode,\n WidgetsName,\n WidgetsRootState,\n} from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { FormattedMessage, useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\n\nconst WidgetCheckList = J.react.registry.getLazyComponent('WidgetCheckList');\nconst WidgetCheckListEditor = J.react.registry.getLazyComponent('WidgetCheckListEditor');\nconst Typography = J.react.registry.getLazyComponent('Typography');\n\nexport const CSSRowLinkWrapper = styled.div<{ border?: boolean }>`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n border: ${(props) => (props.border ? `1px solid ${props.theme.color.grey2}` : 'none')};\n min-height: 24px;\n border-radius: 4px;\n padding: 4px 8px;\n`;\n\nconst WidgetConfigWrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n border: 1px solid ${(props) => props.theme.color.grey1};\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n padding: 4px;\n margin-bottom: 8px;\n\n div:first-child {\n margin: 0 auto;\n }\n\n div:last-child {\n align-self: flex-end;\n }\n`;\nconst Column = styled.div`\n width: 100%;\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n gap: 8px;\n`;\n\nconst CommentContainer = styled.div`\n display: flex;\n gap: 14px;\n padding: 10px 10px 0 10px;\n border-radius: 8px;\n background-color: ${({ theme }) => theme.color.white};\n border: 1px solid ${(props) => props.theme.color.grey2};\n`;\n\nexport const FormItemContainer = styled.div<{ border?: boolean }>`\n width: 100%;\n padding-bottom: 12px;\n border-bottom: ${(props) => (props.border ? `1px solid ${props.theme.color.grey1}` : 0)};\n`;\n\ntype JRCWidgetCheckListWrapperProps = {\n widget: WidgetCheckListType;\n commentId?: number;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n editRight: boolean;\n deleteRight: boolean;\n onRemove?: (uniqid: string) => void;\n onWidgetUpdate?: () => void;\n};\n\nexport const JRCWidgetCheckListWrapper = ({\n widget,\n commentId,\n inplace,\n mode,\n editRight,\n deleteRight,\n onRemove,\n onWidgetUpdate,\n}: JRCWidgetCheckListWrapperProps) => {\n const intl = useIntl();\n const { uniqid, content: widgetContent } = widget;\n const dispatch = useDispatch();\n\n const [entries, setEntries] = useState<JRCWidgetCheckListEntries | undefined>();\n\n const [isDeleteModalOpen, setDeleteModalOpen] = useState(false);\n\n const [token, setToken] = useState<string>();\n const [tokenLoading, setTokenLoading] = useState(false);\n\n const widgetWrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const currentUser = useSelector(UserCurrent.selectors.get);\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const onChange = (uniqid: string, content: CombinedWidgetContent) => {\n dispatch(updateWidgetContent(uniqid, content));\n };\n\n const onChangeWrapper = (content: { uniqid: string; title?: string }) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\n };\n\n const handleCheckItem = (id: string, index: number, items: JRCWidgetCheckListEntries) => {\n if (!commentId) return;\n\n const newItems: WidgetCheckListContentArr[] = items?.map((item) => ({\n title: item.text,\n ...(item.id && { id: item.id }),\n ...(item.links && { links: item.links }),\n ...(item.mimetype && { mimetypes: item.mimetype }),\n ...(currentUser &&\n item.checked && {\n user: {\n id: item.user?.id ?? currentUser.id,\n mainType: 'user',\n type: 'user',\n },\n }),\n ...(item.checked && { value: item.checked }),\n }));\n const content = {\n arr: newItems,\n };\n dispatch(updateWidgetContent<WidgetCheckListContent>(id, content));\n\n jamespot.widget\n .checkListRespond({\n id: commentId,\n type: 'comment',\n idUser: currentUser?.id,\n uniqid: id,\n index: index,\n })\n .then(() => {\n if (onWidgetUpdate) onWidgetUpdate();\n })\n .catch((err) => {\n onError(err.message);\n });\n };\n\n const handleRemoveWidget = () => {\n dispatch(Widget.slice.actions.flushWidget({ uniqid }));\n if (onRemove) {\n onRemove(uniqid);\n }\n setDeleteModalOpen(false);\n };\n\n const openEditorPanel = (token: string) => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n dispatch(Widget.slice.actions.setToken({ token }));\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: WidgetsName.CheckList,\n }),\n );\n };\n\n useEffect(() => {\n const finalEntries: JRCWidgetCheckListEntries | undefined = widget.content.arr?.map((item) => ({\n text: item.title ?? '',\n checked: item.value ?? false,\n ...(item.links && {\n links: item.links,\n }),\n ...(item.user && { user: item.user ?? undefined }),\n ...(item.id && { id: item.id, mimetype: 'image/png' }),\n }));\n\n setEntries(finalEntries);\n }, [widget.content.arr, widgetContent]);\n\n useEffect(() => {\n if (token || tokenLoading) return;\n const fetchToken = () => {\n setTokenLoading(true);\n return jamespot.network\n .token()\n .then((res) => {\n setToken(res.result);\n setTokenLoading(false);\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n };\n fetchToken();\n }, [onError, token, tokenLoading]);\n\n if (mode === 'edit') {\n if (inplace) {\n return (\n <>\n <CommentContainer>\n <Column>\n <FormItemContainer border>\n <label>{intl.formatMessage({ id: 'COMMENT_WIDGET_CHECKLIST_Title' })}</label>\n <JRCInputTextRaw\n id={intl.formatMessage({ id: 'COMMENT_WIDGET_CHECKLIST_Title' })}\n required={true}\n placeholder={intl.formatMessage({ id: 'COMMENT_WIDGET_CHECKLIST_Title' })}\n type=\"text\"\n value={widgetWrapper?.title}\n onChange={(event) => {\n const { value } = event.target;\n onChangeWrapper({ uniqid, title: value });\n }}\n margin={'2px'}\n width=\"100%\"\n />\n </FormItemContainer>\n <WidgetCheckListEditor\n token={token}\n uniqid={uniqid}\n content={widgetContent}\n onChangeContent={onChange}\n onChangeWrapper={onChangeWrapper}\n openEditorPanel={openEditorPanel}\n onRemoveWidget={handleRemoveWidget}\n />\n </Column>\n </CommentContainer>\n </>\n );\n }\n }\n\n return (\n <>\n {entries && (\n <div key={widget.uniqid} style={{ width: '100%' }}>\n <WidgetCheckList\n title={widgetWrapper?.title}\n limit={10}\n initialEntries={entries}\n onFileClick={() => {\n // we did not use the onClick function\n }}\n onItemCheckListChange={(index, items) => handleCheckItem(widget.uniqid, index, items)}\n />\n {editRight && (\n <>\n <WidgetConfigWrapper>\n <div\n style={{ cursor: 'pointer' }}\n onClick={() => {\n if (token) {\n openEditorPanel(token);\n } else {\n onError(intl.formatMessage({ id: 'GLOBAL_Error' }));\n }\n }}>\n <Typography size=\"s\">\n {intl.formatMessage({ id: 'COMMENT_WIDGET_Configure' })}\n </Typography>\n </div>\n\n {deleteRight && (\n <div>\n <JRCIconButton\n iconSize={14}\n onClick={() => setDeleteModalOpen(true)}\n icon=\"icon-trash\"\n />\n </div>\n )}\n </WidgetConfigWrapper>\n </>\n )}\n <JRCModal\n buttons={[\n {\n color: 'cancel',\n clickHandler: () => setDeleteModalOpen(false),\n children: <FormattedMessage id={'GLOBAL_Cancel'} />,\n },\n {\n color: 'danger',\n clickHandler: handleRemoveWidget,\n children: <FormattedMessage id={'GLOBAL_Delete'} />,\n },\n ]}\n open={isDeleteModalOpen}\n closeHandler={() => setDeleteModalOpen(false)}\n title={intl.formatMessage({ id: 'GLOBAL_Delete' })}>\n {intl.formatMessage({ id: 'COMMENT_WIDGET_Delete_Widget' })}\n </JRCModal>\n </div>\n )}\n </>\n );\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\nconst WidgetTable = JRCore.registry.getLazyComponent('WidgetTable');\n\nimport { FormattedMessage } from 'react-intl';\n\nconst Loader = JRCore.registry.getLazyComponent('Loader');\n\nimport jamespot, {\n Format,\n WidgetDatasourceValues,\n WidgetDisplayMode,\n WidgetExcelDatasourceTableContent,\n WidgetsName,\n WidgetTableColumn,\n} from 'jamespot-user-api';\n\nimport styled from 'styled-components';\n\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { useAppDispatch } from 'redux/store';\nimport { JRCButton, JRCHtml } from 'jamespot-react-components';\nimport { getVisibleColumns } from './utils';\n\nexport const Wrapper = styled.div``;\n\nexport const AbsoluteWrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n`;\n\nexport const WrapperEditMode = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n color: ${(props) => props.theme.color.primary};\n cursor: pointer;\n opacity: 0;\n border: 1px solid ${(props) => props.theme.color.primary};\n &:hover {\n background-color: ${(props) => props.theme.color.grey2};\n opacity: 0.9;\n }\n`;\n\nexport const WidgetExcelDatasourceTableWrapper = ({\n uniqid,\n uri,\n limit,\n tableHeadColor,\n tableHeadTextColor,\n tableHeadIconColor,\n tableRowColor,\n tableRowTextColor,\n tableColumnsData = [],\n tableBorderRadius,\n tableSizedColumns,\n tableSizedColumnsWidth,\n mode,\n}: WidgetExcelDatasourceTableContent & { uniqid: string; mode: WidgetDisplayMode }) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const [isEditorOpenOnFirstRender, setIsEditorOpenOnFirstRender] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [datasourceData, setDatasourceData] = useState<Record<string, WidgetDatasourceValues>[]>([]);\n const [datasourceModel, setDatasourceModel] = useState<WidgetTableColumn[]>([]);\n\n const definition = useMemo(() => Widget.definition(WidgetsName.ExcelDatasourceTable), []);\n\n useEffect(() => {\n if (uri !== undefined && tableColumnsData.length !== 0 && datasourceModel.length === 0) {\n setIsLoading(true);\n jamespot.datasource\n .get(uri, Format.VIEW)\n .then((response) => {\n setDatasourceModel(response.result.model);\n setDatasourceData(response.result.data);\n })\n .finally(() => setIsLoading(false));\n }\n }, [uri, tableColumnsData, datasourceModel]);\n\n useEffect(() => {\n if (!uri) {\n setDatasourceModel([]);\n }\n }, [uri]);\n\n const registerEditor = useCallback(() => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n setTimeout(\n () =>\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: WidgetsName.ExcelDatasourceTable })),\n 0,\n );\n }, [dispatch, uniqid]);\n\n useEffect(() => {\n if (mode === 'view' || mode === 'preview') {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n }\n }, [mode, dispatch]);\n\n useEffect(() => {\n if (!isEditorOpenOnFirstRender && !uri && mode === 'edit') {\n registerEditor();\n setIsEditorOpenOnFirstRender(true);\n }\n }, [dispatch, uniqid, isEditorOpenOnFirstRender, uri, registerEditor, mode]);\n\n const columns = useMemo(\n () => getVisibleColumns(tableColumnsData, datasourceModel),\n [tableColumnsData, datasourceModel],\n );\n\n if (tableColumnsData.length === 0 && !isLoading && mode === 'edit') {\n return (\n <>\n <AbsoluteWrapper onClick={registerEditor}>\n <img src={`/img/fast-intranet/${WidgetsName.ExcelDatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={definition.label} />\n <JRCButton label=\"GLOBAL_Settings\" />\n </AbsoluteWrapper>\n <WrapperEditMode onClick={registerEditor}>\n <JRCHtml\n __html={`${intl.formatMessage({ id: 'WIDGET_Set_Widget' })} <b>${intl.formatMessage({\n id: definition.label,\n })}</b>`}\n />\n </WrapperEditMode>\n </>\n );\n }\n\n return isLoading ? (\n <AbsoluteWrapper>\n <Loader />\n </AbsoluteWrapper>\n ) : (\n <>\n {!isLoading && datasourceData.length === 0 ? (\n <AbsoluteWrapper>\n <img src={`/img/fast-intranet/${WidgetsName.ExcelDatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={'WIDGET_Datasource_No_Results'} />\n </AbsoluteWrapper>\n ) : (\n <WidgetTable\n rows={datasourceData}\n columns={columns}\n limit={limit}\n tableHeadColor={tableHeadColor}\n tableHeadTextColor={tableHeadTextColor}\n tableHeadIconColor={tableHeadIconColor}\n tableRowColor={tableRowColor}\n tableRowTextColor={tableRowTextColor}\n tableBorderRadius={tableBorderRadius}\n tableColumnsData={tableColumnsData}\n tableSizedColumns={tableSizedColumns}\n tableSizedColumnsWidth={tableSizedColumnsWidth}\n />\n )}\n {mode === 'edit' ? (\n <WrapperEditMode onClick={registerEditor}>\n <JRCHtml\n __html={`${intl.formatMessage({ id: 'WIDGET_Set_Widget' })} <b>${intl.formatMessage({\n id: definition.label,\n })}</b>`}\n />\n </WrapperEditMode>\n ) : (\n <></>\n )}\n </>\n );\n};\n","import React, { useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport jamespot from 'jamespot-user-api';\n\nimport styled from 'styled-components';\n\nimport { JRCButton, JRCIcon, JRCModalLayout, JRCModalContent, JRCTooltip } from 'jamespot-react-components';\nimport { useDispatch } from 'react-redux';\nimport { Toast, Widget } from 'jamespot-front-business';\n\nexport const Button = styled.button`\n padding: ${(props) => props.theme.space.md}px;\n`;\n\nexport const Footer = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n display: flex;\n flex-direction: row-reverse;\n`;\n\nexport const WidgetRemove = ({ id, type, uniqid }: { id: number; type: string; uniqid: string }) => {\n const dispatch = useDispatch();\n const intl = useIntl();\n const [isOpen, setIsOpen] = useState<boolean>(false);\n\n const handleRemove = () => {\n jamespot.widget\n .removeWidget({ id, type, uniqid })\n .then(() => {\n dispatch(Widget.slice.actions.flushWidget({ uniqid }));\n })\n .catch(() => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })));\n };\n\n return (\n <>\n <Button onClick={() => setIsOpen(true)}>\n <JRCTooltip description={intl.formatMessage({ id: 'WIDGET_Remove_Widget' })}>\n <JRCIcon name=\"icon-trash\" color=\"orange\"></JRCIcon>\n </JRCTooltip>\n </Button>\n {isOpen && (\n <JRCModalLayout enableClickAwayCloseModal={true} open={isOpen} closeHandler={() => setIsOpen(false)}>\n <JRCModalContent\n overflow={'scroll'}\n title={intl.formatMessage({ id: 'WIDGET_Remove_Widget' })}\n onClickIconClose={() => setIsOpen(false)}>\n {intl.formatMessage({ id: 'WIDGET_Delete_Widget_Confirmation' })}\n </JRCModalContent>\n <Footer>\n <JRCButton label={intl.formatMessage({ id: 'GLOBAL_Confirm' })} onClick={handleRemove} />\n </Footer>\n </JRCModalLayout>\n )}\n </>\n );\n};\n","import React, { useCallback, useMemo } from 'react';\nimport { useIntl } from 'react-intl';\nimport jamespot, { WidgetsRootState, WidgetsName, ensureWidgetPresenceContent } from 'jamespot-user-api';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport styled from 'styled-components';\nimport { Toast, Widget, WidgetEditor } from 'jamespot-front-business';\nimport { WidgetRemove } from './WidgetRemove';\n\nexport const Footer = styled.div`\n display: flex;\n flex: 1;\n flex-direction: row;\n border-top: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nexport const Button = styled.button`\n padding: ${(props) => props.theme.space.md}px;\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n background-color: ${(props) => props.theme.color.white};\n &:hover {\n background-color: ${(props) => props.theme.color.grey1};\n }\n`;\n\nexport const WidgetViewFooterActions = ({\n id,\n type,\n name,\n uniqid,\n}: {\n id: number;\n type: string;\n name: WidgetsName;\n uniqid: string;\n}) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const widgetObject = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, uniqid),\n shallowEqual,\n );\n const widgetObjectRights = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectRights(state, uniqid),\n shallowEqual,\n );\n\n const canUpdate = useMemo(() => {\n return widgetObject && widgetObjectRights && widgetObjectRights.update;\n }, [widgetObject, widgetObjectRights]);\n\n const handleOnClick = useCallback(() => {\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid,\n name,\n onSave: (content) => {\n if (widgetObject && widgetObject.id && widgetObject.type && ensureWidgetPresenceContent(content)) {\n jamespot.widget\n .updateWidget({\n id: widgetObject.id,\n type: widgetObject.type,\n uniqid,\n content,\n v2: true,\n })\n .catch(() => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })));\n }\n },\n }),\n );\n }, [uniqid, dispatch, name, widgetObject]);\n\n return canUpdate ? (\n <Footer>\n <Button onClick={handleOnClick}>{intl.formatMessage({ id: 'WIDGET_Set_Widget' })}</Button>\n <WidgetRemove id={id} type={type} uniqid={uniqid} />\n </Footer>\n ) : (\n <></>\n );\n};\n","import React, { useCallback, useMemo } from 'react';\n\nimport jamespot, {\n WidgetDisplayMode,\n WidgetsRootState,\n ensureWidgetObjectHasMinimumProperties,\n WidgetPresenceContent,\n} from 'jamespot-user-api';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nexport const CSSPaddingMd = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n`;\n\nexport const CSSHref = styled.a`\n cursor: pointer;\n color: ${(props) => props.theme.color.secondary};\n`;\n\nexport const CSSHorizontalAlign = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nimport { Toast, Widget } from 'jamespot-front-business';\n\nexport const WidgetPresenceWrapperClosing = ({\n mode,\n uniqid,\n isClosed,\n}: { mode?: WidgetDisplayMode; uniqid: string } & Pick<WidgetPresenceContent, 'isClosed'>) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n\n const widgetObject = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, uniqid),\n shallowEqual,\n );\n\n const widgetObjectRights = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectRights(state, uniqid),\n shallowEqual,\n );\n\n const canUpdate = useMemo(() => {\n return widgetObject && widgetObjectRights && widgetObjectRights.update;\n }, [widgetObject, widgetObjectRights]);\n\n const handleClosing = useCallback(() => {\n if (mode === 'edit' || !canUpdate) {\n return;\n }\n if (!ensureWidgetObjectHasMinimumProperties(widgetObject)) {\n return;\n }\n\n const content = { isClosed: !isClosed };\n\n jamespot.widget\n .updateWidget({\n id: widgetObject.id,\n type: widgetObject.type,\n uniqid,\n content,\n v2: true,\n })\n .then(() => dispatch(Widget.slice.actions.updateWidget({ uniqid, content })))\n .catch(() => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })));\n }, [isClosed, mode, uniqid, canUpdate, widgetObject, dispatch]);\n\n return (\n <CSSPaddingMd>\n <CSSHorizontalAlign>\n <CSSHref onClick={handleClosing}>{intl.formatMessage({ id: 'WIDGET_Presence_Closing' })}</CSSHref>\n </CSSHorizontalAlign>\n </CSSPaddingMd>\n );\n};\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport jamespot, {\n ensureWidgetPresenceResponsePayload,\n ensureWidgetPresenceResponse,\n WidgetPresenceResponse,\n WidgetDisplayMode,\n WidgetPresenceType,\n WidgetsRootState,\n ensureWidgetObjectHasMinimumProperties,\n} from 'jamespot-user-api';\nimport { JRCLoader, JRCWidgetPresence } from 'jamespot-react-components';\nimport { RTProvider } from 'App';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport styled from 'styled-components';\n\nexport const CSSWidgetPresenceWrapper = styled.div`\n display: flex;\n flex: 1;\n position: relative;\n flex-direction: column;\n`;\n\nexport const CSSWidgetPresenceState = styled.div`\n position: absolute;\n inset: 0;\n background-color: rgba(255, 255, 255, 0.7);\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n`;\n\nimport { Toast, Widget } from 'jamespot-front-business';\nimport { WidgetViewFooterActions } from './components/WidgetViewFooterActions';\nimport { useWidgetRT } from '../hooks';\nimport { WidgetPresenceWrapperClosing } from './JRCWidgetPresenceWrapperClosing';\n\nexport const JRCWidgetPresenceWrapper = ({\n widget,\n mode,\n}: {\n widget: WidgetPresenceType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const dispatch = useDispatch();\n const { limit, limitValue, closing, isClosed } = widget.content;\n const [response, setResponse] = useState<WidgetPresenceResponse>({\n userValue: -1,\n userAvailableList: [],\n userUnavailableList: [],\n userAvailableTotal: 0,\n userUnavailableTotal: 0,\n });\n const [isPendingResponse, setIsPendingResponse] = useState<boolean>(false);\n const [abortController] = useState<AbortController>(new AbortController());\n const ref = useRef<AbortController>(abortController);\n\n const widgetObject = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, widget.uniqid),\n shallowEqual,\n );\n\n const allRt = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectAllWidgetRTObject(state, widget.uniqid),\n shallowEqual,\n );\n\n const handleClickAvailable = () => (response.userValue === 1 ? handleCancelRespond() : handleRespond(1));\n const handleClickUnavailable = () => (response.userValue === 0 ? handleCancelRespond() : handleRespond(0));\n\n const handleError = useCallback(\n () => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })),\n [dispatch],\n );\n\n const lockedRespondHandler = useMemo(() => {\n return (closing && isClosed) || mode === 'edit';\n }, [closing, isClosed, mode]);\n\n const handleCancelRespond = useCallback(() => {\n if (lockedRespondHandler) {\n return;\n }\n if (!ensureWidgetObjectHasMinimumProperties(widgetObject)) {\n handleError();\n return;\n }\n\n setIsPendingResponse(true);\n jamespot.widget\n .presenceCancel({ id: Number(widgetObject.id), type: widgetObject.type, uniqid: widget.uniqid })\n .catch(handleError)\n .finally(() => setIsPendingResponse(false));\n }, [widgetObject, widget, handleError, lockedRespondHandler]);\n\n const handleRespond = useCallback(\n (responseValue: 1 | 0) => {\n if (lockedRespondHandler) {\n return;\n }\n if (!ensureWidgetObjectHasMinimumProperties(widgetObject)) {\n handleError();\n return;\n }\n\n setIsPendingResponse(true);\n const payload = {\n id: Number(widgetObject.id),\n type: widgetObject.type,\n uniqid: widget.uniqid,\n value: responseValue,\n };\n if (!ensureWidgetPresenceResponsePayload(payload)) {\n setIsPendingResponse(false);\n dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Payload_Error' }));\n return;\n }\n jamespot.widget\n .presenceRespond(payload, ref.current.signal)\n .catch(handleError)\n .finally(() => setIsPendingResponse(false));\n },\n [widgetObject, dispatch, widget, handleError, lockedRespondHandler],\n );\n\n const handleReponse = useCallback(\n (id: number, type: string, uniqid: string) => {\n if (mode === 'edit') {\n return;\n }\n if (limit && limitValue && response.userAvailableTotal >= limitValue) {\n dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Limit_Response_Error' }));\n return;\n }\n\n jamespot.widget\n .presenceGetResponse({ id, type, uniqid }, ref.current.signal)\n .then((response) => {\n if (ensureWidgetPresenceResponse(response.result)) {\n setResponse(response.result);\n }\n })\n .catch((err) => !err.aborted && handleError);\n },\n [dispatch, response.userAvailableTotal, limit, limitValue, handleError, mode],\n );\n\n useEffect(() => {\n return () => {\n if (ref && ref.current) {\n ref.current.abort();\n }\n };\n }, []);\n\n useEffect(() => {\n if (!ensureWidgetObjectHasMinimumProperties(widgetObject)) {\n return;\n }\n\n handleReponse(widgetObject.id, widgetObject.type, widget.uniqid);\n }, [handleReponse, widgetObject, widget]);\n\n useEffect(() => {\n if (!Array.isArray(allRt)) {\n return;\n }\n const lastRt = allRt.at(-1);\n if (!lastRt) {\n return;\n }\n\n if (lastRt.object.id === Number(widgetObject?.id) && lastRt.uniqid === widget.uniqid && !isPendingResponse) {\n handleReponse(lastRt.object.id, lastRt.object.type, widget.uniqid);\n }\n }, [allRt, widgetObject, handleReponse, widget, isPendingResponse]);\n\n return (\n <RTProvider\n useRT={() => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useWidgetRT(widget.uniqid);\n }}>\n <CSSWidgetPresenceWrapper>\n <JRCWidgetPresence\n limit={limit}\n limitValue={limitValue}\n userAvailableList={response.userAvailableList}\n userUnavailableList={response.userUnavailableList}\n userValue={response.userValue}\n userAvailableTotal={response?.userAvailableTotal}\n userUnavailableTotal={response?.userUnavailableTotal}\n isClosed={closing && isClosed}\n handleClickAvailable={handleClickAvailable}\n handleClickUnavailable={handleClickUnavailable}\n />\n {isPendingResponse && (\n <CSSWidgetPresenceState>\n <JRCLoader size={'l'} />\n </CSSWidgetPresenceState>\n )}\n {closing && !isClosed && (\n <WidgetPresenceWrapperClosing mode={mode} uniqid={widget.uniqid} isClosed={isClosed} />\n )}\n {ensureWidgetObjectHasMinimumProperties(widgetObject) && (\n <WidgetViewFooterActions\n id={widgetObject.id}\n type={widgetObject.type}\n uniqid={widget.uniqid}\n name={widget.name}\n />\n )}\n </CSSWidgetPresenceWrapper>\n </RTProvider>\n );\n};\n","import React from 'react';\n\nimport { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\nimport {\n CombinedWidgetType,\n ensureWidgetArticleAttachmentType,\n ensureWidgetArticleButtonType,\n ensureWidgetArticleGalleryType,\n ensureWidgetArticleImageType,\n ensureWidgetArticleSliderType,\n ensureWidgetArticleTextType,\n ensureWidgetArticleTitleType,\n ensureWidgetCheckListType,\n ensureWidgetDatasourceTableType,\n ensureWidgetExcelDatasourceTableType,\n ensureWidgetPresenceType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport styled from 'styled-components';\n\nexport const CSSWidgetWithTitle = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n`;\n\nexport const CSSWidgetEditTitle = styled.div`\n padding: 0 ${(props) => props.theme.space.md}px;\n border-bottom: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nexport const CSSWidgetTitle = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n border-bottom: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nimport { WidgetDatasourceTableWrapper } from './wrapper/JRCWidgetDatasourceTableWrapper';\nimport { JRCWidgetArticleAttachmentWrapper } from './wrapper/JRCWidgetArticleAttachmentWrapper';\nimport { JRCWidgetArticleButtonWrapper } from './wrapper/JRCWidgetArticleButtonWrapper';\nimport { JRCWidgetArticleGalleryWrapper } from './wrapper/JRCWidgetArticleGalleryWrapper';\nimport { JRCWidgetArticleImageWrapper } from './wrapper/JRCWidgetArticleImageWrapper';\nimport { JRCWidgetArticleSliderWrapper } from './wrapper/JRCWidgetArticleSliderWrapper';\nimport { JRCWidgetArticleTextWrapper } from './wrapper/JRCWidgetArticleTextWrapper';\nimport { JRCWidgetArticleTitleWrapper } from './wrapper/JRCWidgetArticleTitleWrapper';\nimport { JRCWidgetCheckListWrapper } from './wrapper/JRCWidgetCheckListWrapper';\nimport { WidgetExcelDatasourceTableWrapper } from './wrapper/JRCWidgetExcelDatasourceTableWrapper';\nimport { JRCWidgetPresenceWrapper } from './wrapper/JRCWidgetPresenceWrapper';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { Widget } from 'jamespot-front-business';\nimport { JRCInputText } from 'jamespot-react-components';\n\nexport const DisplayWidget = ({\n widget,\n commentId,\n width,\n inplace = false,\n mode = 'view',\n editRight,\n deleteRight,\n onWidgetUpdate,\n onRemove,\n cannotDisplayComponent,\n}: {\n widget: CombinedWidgetType;\n commentId?: number;\n width?: number | undefined;\n inplace: boolean;\n mode: WidgetDisplayMode;\n editRight?: boolean;\n deleteRight?: boolean;\n onRemove?: (id: string) => void;\n onWidgetUpdate?: () => void;\n onClick: () => void;\n cannotDisplayComponent?: (widget: string) => React.ReactNode;\n}) => {\n const { name } = widget;\n\n if (ensureWidgetArticleButtonType(widget)) {\n return <JRCWidgetArticleButtonWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleGalleryType(widget)) {\n return <JRCWidgetArticleGalleryWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleAttachmentType(widget)) {\n return <JRCWidgetArticleAttachmentWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleImageType(widget)) {\n return <JRCWidgetArticleImageWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleSliderType(widget)) {\n return <JRCWidgetArticleSliderWrapper widget={widget} inplace={inplace} mode={mode} width={width ?? 800} />;\n } else if (ensureWidgetArticleTitleType(widget)) {\n return <JRCWidgetArticleTitleWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleTextType(widget)) {\n return <JRCWidgetArticleTextWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetExcelDatasourceTableType(widget)) {\n return <WidgetExcelDatasourceTableWrapper {...widget.content} uniqid={widget.uniqid} mode={mode} />;\n } else if (ensureWidgetDatasourceTableType(widget)) {\n return <WidgetDatasourceTableWrapper {...widget.content} uniqid={widget.uniqid} mode={mode} />;\n } else if (ensureWidgetCheckListType(widget)) {\n return (\n <JRCWidgetCheckListWrapper\n widget={widget}\n commentId={commentId}\n inplace={inplace}\n mode={mode}\n editRight={editRight ?? false}\n deleteRight={deleteRight ?? false}\n onRemove={onRemove}\n onWidgetUpdate={onWidgetUpdate}\n />\n );\n } else if (ensureWidgetPresenceType(widget)) {\n return (\n <CSSWidgetWithTitle>\n {mode === 'edit' ? <WidgetTitleEdit uniqid={widget.uniqid} /> : <WidgetTitle uniqid={widget.uniqid} />}\n <JRCWidgetPresenceWrapper widget={widget} inplace={inplace} mode={mode} />\n </CSSWidgetWithTitle>\n );\n } else {\n return cannotDisplayComponent ? <>{cannotDisplayComponent(name)}</> : <>cannot display widget ({name})</>;\n }\n};\n\nexport const WidgetTitle = ({ uniqid }: { uniqid: string }) => {\n const widgetWrapper = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid),\n shallowEqual,\n );\n return <CSSWidgetTitle>{widgetWrapper?.title}</CSSWidgetTitle>;\n};\n\nexport const WidgetTitleEdit = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const widgetWrapper = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid),\n shallowEqual,\n );\n const dispatch = useDispatch();\n const { control, watch } = useForm({\n defaultValues: { title: widgetWrapper?.title ?? '' },\n criteriaMode: 'all',\n });\n\n React.useEffect(() => {\n const subscription = watch((data: any) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ uniqid, title: data.title }));\n });\n return () => subscription.unsubscribe();\n }, [watch, dispatch, uniqid]);\n\n return (\n <CSSWidgetEditTitle>\n <JRCInputText name={'title'} control={control} placeholder={intl.formatMessage({ id: 'GLOBAL_Title' })} />\n </CSSWidgetEditTitle>\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, { useCallback } 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 = useCallback(\n (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 [child.x, child.y],\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 [mouse.x, mouse.y, mouseIsDown, start.x, start.y],\n );\n\n const handleMouseUp = useCallback(() => {\n setMouseDown(false);\n onMouseUp({ x: child.x, y: child.y });\n }, [child.x, child.y, onMouseUp]);\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, handleMouseUp]);\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 } 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 styled from 'styled-components';\n\nconst INPUT_HEIGHT = 50;\nconst RADIUS = 8;\n\nexport const CSSHiddenDiv = styled.div`\n height: 0;\n overflow: hidden;\n`;\n\nexport const CSSEmptyText = styled.div`\n color: ${(props) => props.theme.color.grey3};\n font-style: italic;\n`;\n\nexport const CSSWrapperText = styled.div<{ color?: string }>`\n display: flex;\n flex: 1;\n width: 100%;\n border: 0;\n min-height: ${INPUT_HEIGHT}px;\n margin: 0;\n align-items: center;\n border-radius: ${RADIUS}px;\n padding: 8px;\n cursor: pointer;\n gap: 10px;\n color: ${(props) => (props.color ? props.color : props.theme.font.color)};\n transition: opacity 0.4s;\n\n &:hover {\n img {\n filter: grayscale(0);\n opacity: 1;\n }\n }\n\n img {\n filter: grayscale(1);\n opacity: 0.4;\n }\n`;\n\nexport const CSSUploadFileWrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n min-height: 200px;\n`;\n\nexport const CSSWidgetWrapper = styled.div`\n display: flex;\n`;\n","import React, { useEffect } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport {\n ensureWidgetArticleButtonType,\n jCommentList,\n WidgetDisplayMode,\n WidgetsRootState,\n WidgetWrapperProps,\n} from 'jamespot-user-api';\nimport { DisplayWidget } from './Widget';\nimport { WidgetLayer } from './WidgetLayer/WidgetLayer';\nimport { WidgetState } from './WidgetState';\nimport { useComponentVisible } from './hooks';\nimport { CSSWidgetWrapper } from './Widget.style';\n\ntype WidgetWrapperCoreProps = {\n uniqid: string;\n widgetObject?: Partial<jCommentList>;\n commentId?: number;\n widget: WidgetWrapperProps;\n inplace?: boolean;\n mode: WidgetDisplayMode;\n width?: number | undefined;\n editRight?: boolean;\n deleteRight?: boolean;\n onWidgetUpdate?: () => void;\n onRemove?: (id: string) => void;\n cannotDisplayComponent?: (widget: string) => React.ReactNode;\n};\n\n/*\n This is a widget wrapper\n*/\nexport const WidgetWrapperCore = ({\n uniqid,\n widgetObject,\n commentId,\n widget,\n inplace = true,\n mode,\n width,\n editRight,\n deleteRight,\n onWidgetUpdate,\n onRemove,\n cannotDisplayComponent,\n}: WidgetWrapperCoreProps) => {\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 useEffect(() => {\n if (widgetObject) {\n dispatch(Widget.slice.actions.registerWidgetObject({ uniqid, object: widgetObject }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (widget) {\n /*\n Register widget\n */\n dispatch(Widget.slice.actions.registerWidget({ uniqid, widget }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (!isComponentVisible) {\n if (uniqid === currentEditableWidgetId) {\n dispatch(Widget.slice.actions.setEditableWidgetId({ uniqid: undefined }));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isComponentVisible]);\n\n useEffect(() => {\n if (isComponentVisible !== isActive) {\n setIsComponentVisible(isActive);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isActive]);\n\n if (widgetWrapper === undefined) {\n return <>This widget cannot be displayed</>;\n }\n\n const _widget = widgetWrapper.widget;\n\n const onClick = () => {\n if (mode === 'edit') {\n registerEditor();\n } else {\n if (ensureWidgetArticleButtonType(_widget)) {\n switch (_widget.content.openingType) {\n case 'link':\n if (_widget.content.openingTypeLink) {\n window.open(_widget.content.openingTypeLink.url, _widget.content.openingTypeLink.target);\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 <CSSWidgetWrapper\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 onRemove={onRemove}\n />\n <WidgetLayer uniqid={uniqid} mode={mode} />\n <WidgetState name={widgetWrapper.widget.name} uniqid={widgetWrapper.widget.uniqid} inplace={inplace} />\n </CSSWidgetWrapper>\n );\n }\n\n return (\n <CSSWidgetWrapper onClick={registerEditor}>\n <DisplayWidget\n widget={{\n ...widgetWrapper.widget,\n ...(widgetWrapper.title && {\n title: widgetWrapper.title,\n }),\n }}\n commentId={commentId}\n inplace={inplace}\n mode={mode}\n width={width}\n onClick={onClick}\n editRight={editRight}\n deleteRight={deleteRight}\n onWidgetUpdate={onWidgetUpdate}\n onRemove={onRemove}\n cannotDisplayComponent={cannotDisplayComponent}\n />\n <WidgetLayer uniqid={uniqid} mode={mode} />\n <WidgetState name={widgetWrapper.widget.name} uniqid={widgetWrapper.widget.uniqid} inplace={inplace} />\n </CSSWidgetWrapper>\n );\n};\n\nexport default WidgetWrapperCore;\n","import React, { useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { v4 as uuidv4 } from 'uuid';\n\nconst EditorsPortal = J.react.registry.getLazyComponent('EditorsPortal');\nconst JRCThemeProvider = J.react.registry.getLazyComponent('ThemeProvider');\n\nconst createPortalElement = (parent: HTMLElement): HTMLDivElement => {\n let portal = document.getElementById('react-portals') as HTMLDivElement;\n\n if (!portal) {\n portal = document.createElement('div');\n portal.id = uuidv4();\n parent.appendChild(portal);\n }\n\n return portal;\n};\nexport const EditorsPanel = () => {\n const portalDiv = document.getElementById('react-portals');\n const portal = useMemo(() => portalDiv && createPortalElement(portalDiv), [portalDiv]);\n\n if (!portal) {\n return null;\n }\n return createPortal(\n <JRCThemeProvider>\n <EditorsPortal />\n </JRCThemeProvider>,\n portal,\n );\n};\n","import { getTinyMCEMentionsQueries } from 'App';\nimport {\n Application,\n ApplicationRootState,\n Comment,\n CommentRootState,\n Hook,\n HookRootState,\n Model,\n Platform,\n TinyMCE,\n Toast,\n UserCurrent,\n Widget,\n} from 'jamespot-front-business';\nimport { DriveOrFilebank, JRCCommentsBloc, JRCMessage } from 'jamespot-react-components';\nimport jamespot, {\n AddCommentParams,\n AddRemoveActionParams,\n UpdateCommentParams,\n WidgetWrapperProps,\n jUserView,\n FileCopyParams,\n} from 'jamespot-user-api';\nimport { jCommentList } from 'jamespot-user-api/lib/src/types/comment';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled, { useTheme } from 'styled-components';\nimport { WidgetList } from './widgets/WidgetList/WidgetList';\nimport WidgetWrapperCore from './widgets/WidgetWrapperCore';\nimport useCommentsLikeRT from '../hooks/useCommentsLikeRT';\nimport useCommentRT from '../hooks/useCommentRT';\n\nexport type CommentsBlocProps = {\n articleId: number;\n variant?: 'modal' | 'inline';\n canComment: boolean;\n};\nimport { EditorsPanel } from './widgets/components/WidgetEditorPanel';\n\nconst CommentsBlocWrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex: 1;\n width: 100%;\n margin-top: 10px;\n`;\n\nexport const CSSCommentsBlocWidgetWrapper = styled.div`\n border-radius: ${(props) => props.theme.space.sm}px;\n border: 1px solid ${(props) => props.theme.color.grey1};\n background-color: ${(props) => props.theme.color.white};\n overflow: hidden;\n`;\n\nexport const CommentsBloc = ({ articleId, variant = 'inline', canComment }: CommentsBlocProps) => {\n const intl = useIntl();\n const theme = useTheme();\n const dispatch = useDispatch();\n\n const [token, setToken] = useState<string>();\n const [loading, setLoading] = useState(false);\n const [widgets, setWidgets] = useState<WidgetWrapperProps[]>([]);\n\n const [tokenLoading, setTokenLoading] = useState(false);\n\n const currentUser = useSelector(UserCurrent.selectors.get);\n const widgetIds = useSelector(Widget.selectors.selectWidgets);\n const tinyMCECommonOptions = useSelector(TinyMCE.selectors.selectTinyMCECommonOptions);\n const models = useSelector(Model.selectors.selectAll);\n const platformConfig = useSelector(Platform.selectors.selectPlatformConfig);\n const onlyOffice = useSelector((state: any) => Application.selectors.selectById(state, 'OnlyOfficeHook'));\n const commentsList = useSelector((state: CommentRootState) => Comment.selectors.commentList(state, articleId));\n const driveHook = useSelector((state: HookRootState) => Hook.selectors.selectHook(state, 'DriveHook'));\n const fileBank = useSelector((state: ApplicationRootState) =>\n Application.selectors.selectById(state, 'FileBankHook'),\n );\n const widgetHook = useSelector((state: HookRootState) => Hook.selectors.selectHook(state, 'WidgetHook'));\n\n useCommentRT(articleId);\n\n useCommentsLikeRT(\n commentsList?.list.map((c) => c.id),\n articleId,\n );\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const onCommentUpdate = async (args: UpdateCommentParams) => {\n const commentToUpdate: jCommentList | undefined = commentsList?.list.find((item) => item.id === args.idComment);\n if (!commentToUpdate) return;\n return jamespot.article\n .updateComment({\n idComment: args.idComment,\n description: args.description ?? commentToUpdate.description ?? undefined,\n token: args.token,\n widgets: args.widgets,\n })\n .then(() => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n fetchToken();\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n };\n\n const onCommentDelete = async (idComment: number) => {\n // TODO : passer par le store pour avoir une réactivité directe après suppression (confirmée ensuite par retour RT)\n // -> état intermédiaire PENDING à gérer.\n jamespot.article.deleteComment(idComment).catch(onError);\n };\n\n const onWidgetUpdate = () => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n fetchToken();\n };\n\n const fetchToken = useCallback(() => {\n if (!token && !tokenLoading) {\n setTokenLoading(true);\n jamespot.network\n .token()\n .then((res) => {\n setToken(res.result);\n setTokenLoading(false);\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n }\n }, [onError, token, tokenLoading]);\n\n const onComment = useCallback(\n async (params: Pick<AddCommentParams, 'content' | 'alertAuthor' | 'sendAlert'>) => {\n if (token) {\n setLoading(true);\n const finalWidget: WidgetWrapperProps[] = Object.keys(widgetIds)\n .map((id) => {\n if (widgets?.some((w) => w.widget.uniqid === id)) {\n return widgetIds[id];\n }\n return null;\n })\n .filter((w): w is WidgetWrapperProps => w !== null);\n\n try {\n // TODO : passer par le store pour avoir une réactivité directe après ajout (confirmée ensuite par retour RT)\n // -> état intermédiaire PENDING à gérer.\n await jamespot.article\n .addComment({\n ...params,\n widgets: finalWidget,\n token,\n idArticle: articleId,\n })\n .then(() => {\n widgets.forEach((widget) => {\n dispatch(Widget.slice.actions.flushWidget({ uniqid: widget.widget.uniqid }));\n });\n setWidgets([]);\n });\n fetchToken();\n } catch (e: any) {\n onError(e.errorMsg);\n } finally {\n setLoading(false);\n }\n }\n },\n [articleId, dispatch, fetchToken, onError, token, widgetIds, widgets],\n );\n\n useEffect(() => {\n fetchToken();\n }, [fetchToken]);\n\n useEffect(() => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleSocialAdd = ({\n targetId,\n targetType,\n type,\n }: AddRemoveActionParams): ReturnType<typeof jamespot.socialAction.add> =>\n jamespot.socialAction.add({\n targetType,\n targetId,\n type,\n });\n\n const handleSocialRemove = ({\n targetId,\n targetType,\n type,\n }: AddRemoveActionParams): ReturnType<typeof jamespot.socialAction.remove> =>\n jamespot.socialAction.remove({\n targetType,\n targetId,\n type,\n });\n\n const handleSocialGetUsers = ({\n targetId,\n targetType,\n type,\n }: AddRemoveActionParams): ReturnType<typeof jamespot.socialAction.getUsers<jUserView>> =>\n jamespot.socialAction.getUsers({\n targetType,\n targetId,\n type,\n });\n const handleFetchUser = (id: string): ReturnType<typeof jamespot.user.get<jUserView>> => jamespot.user.get(id);\n\n const handleFetchUserField = (id: number, type: 'popover'): ReturnType<typeof jamespot.user.getFields> =>\n jamespot.user.getFields(id, type);\n\n useEffect(() => {\n if (!commentsList || !commentsList.list) {\n return;\n }\n commentsList.list.forEach((comment) => {\n comment._widgets?.forEach((widget) => {\n dispatch(Widget.slice.actions.registerWidgetObject({ uniqid: widget.widget.uniqid, object: comment }));\n dispatch(\n Widget.slice.actions.registerWidgetObjectRights({\n uniqid: widget.widget.uniqid,\n rights: comment._right,\n }),\n );\n });\n });\n }, [commentsList, dispatch]);\n\n return (\n <>\n {tinyMCECommonOptions && (\n <>\n <CommentsBlocWrapper>\n <JRCCommentsBloc\n canComment={canComment} // todo: convert to hlandlers\n loading={loading}\n token={token}\n comments={commentsList?.list}\n onComment={onComment} // todo: convert to hlandlers\n onCommentUpdate={onCommentUpdate} // todo: convert to hlandlers\n onCommentDelete={onCommentDelete} // todo: convert to hlandlers\n isWidgetActive={\n !!(\n widgetHook?.isActive &&\n widgetHook?.create &&\n widgetHook?.autorize?.includes('comment')\n )\n }\n widgetListComponent={\n <WidgetList\n mode={'comment'}\n namespace={'comment'}\n onChange={(widget) => {\n setWidgets([...widgets, widget]);\n dispatch(\n Widget.slice.actions.registerWidget({\n uniqid: widget.widget.uniqid,\n widget: widget,\n }),\n );\n }}\n view={'edit'}\n />\n }\n newWidgetsWrapperComponent={\n <>\n {widgets.map(\n (widget) =>\n widget &&\n widget.widget && (\n <CSSCommentsBlocWidgetWrapper key={widget.widget.uniqid}>\n <WidgetWrapperCore\n uniqid={widget.widget.uniqid}\n widget={widget}\n inplace\n mode={'edit'}\n onRemove={(id) =>\n setWidgets(widgets.filter((w) => w.widget.uniqid !== id))\n }\n cannotDisplayComponent={(widget) => (\n <JRCMessage\n variant={'info'}\n message={intl.formatMessage(\n { id: 'WIDGET_Cannot_Display' },\n { widget },\n )}\n />\n )}\n />\n </CSSCommentsBlocWidgetWrapper>\n ),\n )}\n </>\n }\n existingWidgetsWrapperComponent={(\n comment,\n content,\n mode,\n inplace = true,\n idComment,\n editRight = false,\n deleteRight = false,\n ) => (\n <>\n {content?.map(\n (widget) =>\n widget && (\n <CSSCommentsBlocWidgetWrapper key={widget.widget.uniqid}>\n <WidgetWrapperCore\n uniqid={widget.widget.uniqid}\n widgetObject={comment}\n commentId={idComment}\n widget={widget}\n inplace={inplace}\n mode={mode}\n editRight={editRight}\n deleteRight={deleteRight}\n onWidgetUpdate={onWidgetUpdate}\n onRemove={(id) => {\n jamespot.widget\n .removeWidget({\n id: idComment,\n type: 'comment',\n uniqid: id,\n })\n .then(() => {\n dispatch(\n Comment.actions.fetchComments({\n idArticle: articleId,\n }),\n );\n fetchToken();\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n }}\n cannotDisplayComponent={(widget) => (\n <JRCMessage\n variant={'info'}\n message={intl.formatMessage(\n { id: 'WIDGET_Cannot_Display' },\n { widget },\n )}\n />\n )}\n />\n </CSSCommentsBlocWidgetWrapper>\n ),\n )}\n </>\n )}\n currentUser={currentUser}\n tinyMCEConfig={{\n commonOptions: tinyMCECommonOptions,\n mentionsQueries: getTinyMCEMentionsQueries(models, theme, onError),\n }}\n onError={onError}\n highlightFields={platformConfig.userHighlightFields}\n userAccountStatus={platformConfig.userAccountStatus}\n userModel={models.find((m) => m.type === 'user')}\n isWedocActive={!!onlyOffice}\n onGetHashError={(message?: string) =>\n dispatch(\n Toast.actions.error({\n label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }),\n }),\n )\n }\n activeDrives={\n // TODO : cf. https://github.com/Jamespot/jamespot-react-extensions/pull/487/\n J.debug.UploadFromDrives\n ? ([\n ...(fileBank && driveHook ? ['fileBank'] : []),\n ...Hook.utils.buildDrivesArrayFromObject(driveHook?.drives),\n ] as DriveOrFilebank[])\n : []\n }\n socialActionAdd={handleSocialAdd}\n deleteFile={async (articleId) => {\n if (!token) return;\n await jamespot.file.deleteFile(articleId, 'attachment', token);\n }}\n fetchUser={handleFetchUser}\n fetchUserFields={handleFetchUserField}\n fetchSocialActionUserList={handleSocialGetUsers}\n removeLike={handleSocialRemove}\n variant={variant}\n fileBankRequests={{\n getBanks: () => jamespot.filebank.getBanks(),\n getFolders: (uri: string) => jamespot.filebank.getFolders(uri),\n getDocuments: (uri: string) => jamespot.filebank.getDocuments(uri),\n copyFile: (params: FileCopyParams) => jamespot.file.copy(params),\n }}\n />\n <EditorsPanel />\n </CommentsBlocWrapper>\n </>\n )}\n </>\n );\n};\n","import { useDispatch } from 'react-redux';\nimport JRCore from '../App';\nimport { useEffect, useMemo } from 'react';\nimport { Comment } from 'jamespot-front-business';\n\nconst useCommentsLikeRT = (idComments: number[] | undefined, idArticle: number) => {\n const dispatch = useDispatch();\n const socket = useMemo(() => JRCore.socket, []);\n const rtHandlers = useMemo(\n () => Comment.getCommentsLikeRTHandlers(dispatch, idComments, idArticle),\n [dispatch, idComments, idArticle],\n );\n\n useEffect(() => {\n rtHandlers.forEach((handler) => {\n socket.onMessage(handler.namespace, handler.function, handler.handler);\n });\n return () => {\n rtHandlers.forEach((handler) => {\n socket.offMessage(handler.namespace, handler.function, handler.handler);\n });\n };\n }, [rtHandlers, socket]);\n};\n\nexport default useCommentsLikeRT;\n","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, useCallback } from 'react';\nimport { AudienceAutocomplete } from 'jamespot-user-api';\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 FormElement = (\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};\nconst FormElm = React.forwardRef(FormElement);\n\nconst FieldsetWrapper = styled.div<{ stretch?: boolean }>`\n ${(props) =>\n props.stretch &&\n `\n flex: 1;\n`}\n`;\n\nexport type DisplayFormFieldsConfig<TFieldValues extends FieldValues> = 'all' | FieldsWith<'input', TFieldValues>;\n\nexport type DisplayFormProps<TFieldValues extends FieldValues> = {\n type: string;\n fields: DisplayFormFieldsConfig<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 forceMandatory?: boolean;\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, props.forceMandatory);\n\n const { handleSubmit, control, reset, ...formFn } = useForm({\n defaultValues: {\n ...defaultValues,\n ...props.defaultValues,\n },\n criteriaMode: 'all',\n });\n\n const formatValuesForSubmit = useCallback(\n (values: any) => {\n const toRet: any = {};\n Object.keys(values).forEach((k) => {\n const widget = configuration.find((c) => c.name === k)?.widget;\n switch (widget?.type) {\n case 'audience':\n toRet[k] = values[k].map((v: AudienceAutocomplete) => v.uri).join(',');\n break;\n case 'taxonomy':\n toRet[k] = values[k].map((v: any) => v.title).join(',');\n break;\n default:\n toRet[k] = values[k];\n break;\n }\n });\n return toRet;\n },\n [configuration],\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 getFormattedValues: () => {\n return formatValuesForSubmit(formFn.getValues());\n },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\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\n// This is a mask to hide top shadow. EDITOR_WIDTH + 20 is used to keep the left shadow\nexport const CSSEditorMask = styled.div`\n position: relative;\n overflow: hidden;\n top: 91px;\n width: ${EDITOR_WIDTH + 20}px;\n`;\n\nexport const CSSEditor = styled.div<{ position: 'left' | 'right' }>`\n position: absolute;\n top: 0;\n ${(props) => (props.position === 'left' ? 'left: 0px;' : '')}\n ${(props) => (props.position === 'right' ? 'right: -1000px;' : '')}\n width: ${EDITOR_WIDTH}px;\n bottom: 90px;\n display: flex;\n background-color: ${(props) => props.theme.color.white};\n flex-direction: row;\n transition: all 0.4s;\n box-shadow: -4px 0px 20px 0px #00000017;\n\n &.animate {\n right: 0px;\n }\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 position: relative;\n`;\n\nexport const CSSEditorIsBusy = styled.div`\n position: absolute;\n inset: 0;\n background-color: rgba(255, 255, 255, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const CSSEditorIsLocked = styled.div`\n position: absolute;\n inset: 0;\n background-color: ${(props) => props.theme.color.white};\n padding: ${(props) => props.theme.space.md}px;\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 { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { WidgetEditor, Widget, updateWidgetContent, Toast, EditorsRootState, Hook } from 'jamespot-front-business';\n\nimport JRCore from 'App';\n\nimport jamespot, {\n CombinedWidgetContent,\n ensureWidgetArticleAttachmentType,\n ensureWidgetArticleButtonType,\n ensureWidgetArticleGalleryType,\n ensureWidgetArticleImageType,\n ensureWidgetArticleSliderType,\n ensureWidgetArticleTextType,\n ensureWidgetArticleTitleType,\n ensureWidgetCheckListType,\n ensureWidgetDatasourceTableType,\n ensureWidgetExcelDatasourceTableType,\n HookListType,\n ensureWidgetPresenceType,\n jObjectLittle,\n WidgetArticleAttachmentContent,\n WidgetArticleButtonContent,\n WidgetArticleGalleryContent,\n WidgetArticleImageContent,\n WidgetArticleSliderContent,\n WidgetArticleTextContent,\n WidgetArticleTitleContent,\n WidgetDatasourceTableContent,\n WidgetPresenceContent,\n WidgetsRootState,\n WidgetStateProps,\n} from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\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 WidgetCheckListEditor = JRCore.registry.getLazyComponent('WidgetCheckListEditor');\n\nconst WidgetDatasourceTableEditor = JRCore.registry.getLazyComponent('WidgetDatasourceTableEditor');\nconst WidgetExcelDatasourceTableEditor = JRCore.registry.getLazyComponent('WidgetExcelDatasourceTableEditor');\n\nconst WidgetPresenceEditor = JRCore.registry.getLazyComponent('WidgetPresenceEditor');\n\n/*\n Editor Factory\n*/\nexport const Editor = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const token = useSelector(Widget.selectors.selectToken);\n const widgetWrapper = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid),\n shallowEqual,\n );\n const widgetObject = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, uniqid),\n shallowEqual,\n );\n const onSaveCallback = useSelector(\n (state: EditorsRootState) => WidgetEditor.selectors.selectEditor(state, uniqid)?.onSave,\n shallowEqual,\n );\n\n const handleHookIsActive = (name: keyof HookListType) => {\n return Hook.selectors.selectHook(JRCore.store.getState(), name)?.isActive;\n };\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 if (onSaveCallback) {\n onSaveCallback(content);\n }\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 const validateWidgetObject = (object?: Partial<jObjectLittle>): object is jObjectLittle => {\n return object !== undefined && object.id !== undefined && object.type !== undefined;\n };\n\n const widget = widgetWrapper?.widget;\n\n if (!widget) return null;\n\n if (ensureWidgetArticleButtonType(widget)) {\n return (\n <WidgetButtonEditor\n {...widget.content}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleButtonContent>(uniqid, content, false));\n }}\n onSave={() => onSave({})}\n />\n );\n } else if (ensureWidgetArticleGalleryType(widget)) {\n return (\n <WidgetArticleGalleryEditor\n token={token}\n content={widget.content}\n onChange={(content) =>\n dispatch(updateWidgetContent<WidgetArticleGalleryContent>(uniqid, content, false))\n }\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n } else if (ensureWidgetArticleAttachmentType(widget)) {\n return (\n <WidgetArticleAttachmentEditor\n token={token}\n content={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 } else if (ensureWidgetArticleImageType(widget)) {\n return (\n <WidgetArticleImageEditor\n content={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 } else if (ensureWidgetArticleSliderType(widget)) {\n return token !== undefined ? (\n <WidgetArticleSliderEditor\n slides={widget.content.slides ?? []}\n loop={widget.content.loop ?? false}\n useDots={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 } else if (ensureWidgetArticleTitleType(widget)) {\n return (\n <WidgetArticleTitleEditor\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleTitleContent>(uniqid, content, false));\n }}\n onSave={onSave}\n content={widget.content}\n onOpen={onOpen}\n />\n );\n } else if (ensureWidgetArticleTextType(widget)) {\n return (\n <WidgetArticleTextEditor\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleTextContent>(uniqid, content, false));\n }}\n onSave={onSave}\n content={widget.content}\n />\n );\n } else if (ensureWidgetPresenceType(widget)) {\n return (\n <WidgetPresenceEditor\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetPresenceContent>(uniqid, content, false));\n }}\n onSave={onSave}\n onStateChange={onStateChange}\n {...widget.content}\n />\n );\n } else if (ensureWidgetCheckListType(widget)) {\n return (\n <WidgetCheckListEditor\n token={token}\n uniqid={widget.uniqid}\n content={widget.content}\n onChangeContent={(uniqid, content) => {\n dispatch(updateWidgetContent(uniqid, content, false));\n }}\n onChangeWrapper={(content) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\n }}\n onSave={(uniqid, content) => {\n if (!validateWidgetObject(widgetObject)) {\n onSave(content);\n return;\n }\n\n jamespot.widget\n .updateWidget({\n id: widgetObject.id,\n uniqid: uniqid,\n type: widgetObject.type,\n title: widgetWrapper.title,\n content,\n })\n .then(() => {\n onSave(content);\n })\n .catch((e: any) => {\n dispatch(\n Toast.actions.error({\n label: e.errorMsg ?? intl.formatMessage({ id: 'GLOBAL_Error' }),\n }),\n );\n });\n }}\n />\n );\n } else if (ensureWidgetExcelDatasourceTableType(widget)) {\n return (\n <WidgetExcelDatasourceTableEditor\n {...widget.content}\n uri={widget.content.uri}\n limit={widget.content.limit ?? 20}\n hook={{ isActive: handleHookIsActive }}\n handlers={{\n jamespot: {\n datasource: jamespot.datasource,\n network: jamespot.network,\n filebank: jamespot.filebank,\n wedoc: jamespot.wedoc,\n },\n handleStart: () => onStateChange({ busy: true }),\n handleCatch: (err) => dispatch(Toast.actions.error({ label: err.errorMsg })),\n handleFinally: () => onStateChange({ busy: false }),\n }}\n onSave={onSave}\n onChange={(content, override) =>\n dispatch(updateWidgetContent<WidgetDatasourceTableContent>(uniqid, content, override ?? false))\n }\n onStateChange={onStateChange}\n onError={(label) => dispatch(Toast.actions.error({ label }))}\n />\n );\n } else if (ensureWidgetDatasourceTableType(widget)) {\n return (\n <WidgetDatasourceTableEditor\n {...widget.content}\n uri={widget.content.uri}\n limit={widget.content.limit ?? 20}\n hook={{ isActive: handleHookIsActive }}\n handlers={{\n jamespot: {\n datasource: jamespot.datasource,\n network: jamespot.network,\n application: jamespot.application,\n filebank: jamespot.filebank,\n },\n handleStart: () => onStateChange({ busy: true }),\n handleCatch: (err) => dispatch(Toast.actions.error({ label: err.errorMsg })),\n handleFinally: () => onStateChange({ busy: false }),\n }}\n onSave={onSave}\n onChange={(content, override) =>\n dispatch(updateWidgetContent<WidgetDatasourceTableContent>(uniqid, content, override ?? false))\n }\n onStateChange={onStateChange}\n onError={(label) => {\n dispatch(Toast.actions.error({ label }));\n }}\n />\n );\n } else {\n return <>cannot display editor</>;\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 { ensureWidgetWrapperProps, WidgetKeys, WidgetsRootState, WidgetWrapperProps } 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 widget = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid))?.widget;\n\n const onClick = (uniqid: string, name: WidgetKeys) => {\n /*\n Register Editor\n */\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name }));\n };\n\n const widgets =\n widget?.content && 'widgets' in widget.content && widget.content.widgets ? widget.content.widgets : [];\n\n return (\n <div style={{ flex: 1 }}>\n <Layers uniqid={uniqid} />\n {widget ? (\n 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 dispatch(\n Widget.slice.actions.updateWidget({\n uniqid,\n content: {\n ...widget.content,\n widgets: [\n ...widgets\n .filter((_, n: number) => n !== index)\n .map((w) => {\n if (ensureWidgetWrapperProps(w)) {\n return w;\n } else {\n // TODO remonter le log (centry ?)\n console.error('Zozod', w);\n return w as WidgetWrapperProps;\n }\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 { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { JRCInputText } from 'jamespot-react-components';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\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', justifyContent: 'space-between' }}>\n <JRCInputText\n name={'text'}\n control={control}\n placeholder={intl.formatMessage({ id: 'WIDGET_Title' })}></JRCInputText>\n <JRCButton onClick={onClick} minWidth={'100%'}>\n {intl.formatMessage({ id: 'GLOBAL_Save' })}\n </JRCButton>\n </div>\n ) : (\n <>No wrapper</>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport JRCore from 'App';\n\nconst Loader = JRCore.registry.getLazyComponent('Loader');\n\nimport { CSSEditorIsBusy } from '../style';\n\nimport { Widget } from 'jamespot-front-business';\nimport { WidgetsRootState } from 'jamespot-user-api';\n\nexport const EditorIsBusy = ({ uniqid }: { uniqid: string }) => {\n const isBusy = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid),\n shallowEqual,\n )?.busy;\n return (\n <>\n {isBusy && (\n <CSSEditorIsBusy>\n <Loader size={'l'} />\n </CSSEditorIsBusy>\n )}\n </>\n );\n};\n","import React from 'react';\n\nimport { useDispatch } from 'react-redux';\n\nimport JRCore from 'App';\n\nconst Icon = JRCore.registry.getLazyComponent('Icon');\n\nimport { CSSEditorAction, CSSEditorMenuButton } from './style';\n\nimport { WidgetEditor } from 'jamespot-front-business';\n\nexport const EditorPosition = ({ 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 <Icon name={position === 'left' ? 'icon-angle-right' : 'icon-angle-left'} color=\"grey2\" />\n </CSSEditorMenuButton>\n </CSSEditorAction>\n );\n};\n","import React from 'react';\n\nimport { useSelector } from 'react-redux';\n\nimport { Widget } from 'jamespot-front-business';\nimport { WidgetsRootState } from 'jamespot-user-api';\n\nexport const EditorIsInitialize = ({ uniqid, children }: { uniqid: string; children: React.ReactElement }) => {\n const isInitializes = useSelector((state: WidgetsRootState) =>\n Widget.selectors.selectWidgetState(state, uniqid),\n )?.initialized;\n\n return isInitializes ? children : <></>;\n};\n","import React from 'react';\n\nimport { useIntl } from 'react-intl';\nimport { CSSEditorIsLocked } from '../style';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport { Widget } from 'jamespot-front-business';\n\nexport const EditorIsLocked = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const isLocked = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid),\n shallowEqual,\n )?.locked;\n return isLocked ? (\n <CSSEditorIsLocked>{intl.formatMessage({ id: 'INTRANET_Panel_Change_Off' })}</CSSEditorIsLocked>\n ) : (\n <></>\n );\n};\n","import React, { useEffect, useRef } from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { Editor } from './Editor';\n\nimport JRCore from 'App';\n\nconst Icon = JRCore.registry.getLazyComponent('Icon');\n\nimport {\n CSSEditor,\n CSSEditorAction,\n CSSEditorContent,\n CSSEditorHeader,\n CSSEditorLabel,\n CSSEditorMask,\n CSSEditorMenu,\n CSSEditorMenuButton,\n} from './style';\n\nimport { EditorsRootState, Widget, WidgetEditor } from 'jamespot-front-business';\n\nimport { useIntl } from 'react-intl';\nimport { EditorTabWidgets } from './EditorTabWidgets';\nimport { EditorTabWrapper } from './EditorTabWrapper';\nimport { EditorIsBusy } from './states/EditorIsBusy';\nimport { EditorPosition } from './EditorPosition';\nimport { EditorIsInitialize } from './states/EditorIsInitialize';\nimport { EditorIsLocked } from './states/EditorIsLocked';\n\n/*\n Editor wrapper (right part)\n*/\nexport const EditorWrapper = ({ uniqid, position }: { uniqid: string; position: 'left' | 'right' }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const ref = useRef<HTMLDivElement>(null);\n const editor = useSelector(\n (state: EditorsRootState) => WidgetEditor.selectors.selectEditor(state, uniqid),\n shallowEqual,\n );\n const def = Widget.definition(editor?.name);\n\n const [tab, setTab] = React.useState<string>('default');\n\n const onClose = () => {\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n };\n\n useEffect(() => {\n setTimeout(() => {\n if (ref && ref.current) {\n ref.current.className = ref.current.className + ' animate';\n }\n }, 0);\n }, []);\n\n return editor ? (\n <CSSEditorMask>\n <CSSEditor ref={ref} position={position}>\n {(def.panel.useWrapper || def.panel.useEditor || def.panel.useWidgets) && (\n <CSSEditorMenu>\n {def.panel.useWrapper ? (\n <CSSEditorMenuButton isActive={tab === 'wrapper'} onClick={() => setTab('wrapper')}>\n <Icon name=\"icon-font\" color=\"grey2\" />\n </CSSEditorMenuButton>\n ) : (\n <></>\n )}\n {def.panel.useEditor ? (\n <CSSEditorMenuButton isActive={tab === 'default'} onClick={() => setTab('default')}>\n <Icon name=\"icon-pen\" color=\"grey2\" />\n </CSSEditorMenuButton>\n ) : (\n <></>\n )}\n {def.panel.useWidgets ? (\n <EditorIsInitialize uniqid={uniqid}>\n <CSSEditorMenuButton isActive={tab === 'widgets'} onClick={() => setTab('widgets')}>\n <Icon name=\"icon-sliders\" color=\"grey2\" />\n </CSSEditorMenuButton>\n </EditorIsInitialize>\n ) : (\n <></>\n )}\n </CSSEditorMenu>\n )}\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column' }}>\n <CSSEditorHeader>\n <EditorPosition uniqid={uniqid} position={editor.position} />\n <CSSEditorLabel>{intl.formatMessage({ id: def.label })}</CSSEditorLabel>\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClose}>\n <Icon 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 <EditorIsBusy uniqid={uniqid} />\n <EditorIsLocked uniqid={uniqid} />\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 </CSSEditorMask>\n ) : (\n <></>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, 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: 1;\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, shallowEqual);\n return (\n <CSSEditorPortalWrapper className=\"editor-portal-wrapper\">\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} position={editor.position}></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} position={editor.position}></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 { JIACapabilities } from 'jamespot-user-api';\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: JIACapabilities;\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 fetch = useCallback(\n (text: string, capability: JIACapabilities) => {\n return new Promise<string>((resolve, reject) => {\n PrepareAndSetQuery({\n reject,\n resolve,\n text,\n capability,\n });\n });\n },\n [PrepareAndSetQuery],\n );\n\n const AICapabilities = useMemo(() => {\n return {\n develop: (text: string) => fetch(text, 'develop'),\n summarize: (text: string) => fetch(text, 'summarize'),\n tldr: (text: string) => fetch(text, 'tldr'),\n en: (text: string) => fetch(text, 'en'),\n es: (text: string) => fetch(text, 'es'),\n formal: (text: string) => fetch(text, 'formal'),\n funny: (text: string) => fetch(text, 'funny'),\n };\n }, [fetch]);\n\n const ext = useMemo(() => JTinyMCEExtensionsBuilders.jia(AICapabilities, intl), [intl, AICapabilities]);\n\n return [query, ext] as const;\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(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onMentionsQueryError);\n }, [models, onMentionsQueryError, theme]);\n\n const commonOptions = useMemo(() => 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 { 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(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onMentionsQueryError);\n }, [models, onMentionsQueryError, theme]);\n\n const commonOptions = useMemo(() => 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 React from 'react';\r\nimport { JRCInputAudience, JRCMessage, JRCModal } from 'jamespot-react-components';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { Control } from 'react-hook-form';\r\nimport jamespot from 'jamespot-user-api';\r\nimport { Network } from 'jamespot-front-business';\r\nimport { useSelector } from 'react-redux';\r\n\r\nexport type ModalAudienceProps = {\r\n open: boolean;\r\n closeHandler: () => void;\r\n title?: string;\r\n control: Control<any>;\r\n warningMessage?: string;\r\n onSubmit: () => void;\r\n name?: string;\r\n};\r\n\r\nexport const ModalAudience = ({\r\n open,\r\n closeHandler,\r\n title,\r\n control,\r\n warningMessage,\r\n onSubmit,\r\n name = 'publishTo',\r\n}: ModalAudienceProps) => {\r\n const intl = useIntl();\r\n const networkPublic = useSelector(Network.selectors.selectNetworkPublic);\r\n\r\n return (\r\n <JRCModal\r\n open={open}\r\n closeHandler={closeHandler}\r\n title={title ?? intl.formatMessage({ id: 'GLOBAL_Audience' })}\r\n buttons={[\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Cancel\" />,\r\n color: 'cancel',\r\n clickHandler: () => closeHandler(),\r\n },\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Continue\" />,\r\n color: 'danger',\r\n clickHandler: () => {\r\n closeHandler();\r\n onSubmit();\r\n },\r\n },\r\n ]}>\r\n <JRCMessage\r\n variant={'warning'}\r\n message={warningMessage ?? intl.formatMessage({ id: 'FORM_Audience_Empty' })}\r\n />\r\n <JRCInputAudience\r\n asyncPromise={(inputValue: string) => jamespot.audience.autocomplete(inputValue)}\r\n searchable={true}\r\n control={control}\r\n multiple={true}\r\n placeholder={intl.formatMessage({ id: 'GLOBAL_Audience' })}\r\n name={name}\r\n defaultCustomOptions={\r\n networkPublic\r\n ? [\r\n {\r\n uri: networkPublic.uri,\r\n title: networkPublic.title,\r\n resetOptions: true,\r\n icon: 'icon-fs-wall',\r\n },\r\n ]\r\n : []\r\n }\r\n />\r\n </JRCModal>\r\n );\r\n};\r\n","import * as React from 'react';\nimport { Outlet, matchPath } 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';\nimport { useMemo } from 'react';\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 paths?: 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 = useMemo(() => Object.values(routes), [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) => {\n if (`/ng/rr/${extensionRoute}/${route.path}` === pathname) {\n return true;\n }\n\n return route.paths?.reduce<boolean>((previousValue: boolean, currentValue: string) => {\n const pattern = `/ng/rr/${extensionRoute}/${currentValue}`;\n const isMatch = matchPath(pattern, pathname) !== null;\n return previousValue || isMatch;\n }, false);\n });\n if (activeRoute) setActiveTab(activeRoute.key);\n }, [pathname, ROUTES_ARRAY, extensionRoute]);\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"],"names":["Avatar","props","theme","useTheme","networkPublic","useSelector","selectors","selectNetworkPublic","uri","JRCIcon","name","size","color","primary","variant","JRCAvatar","AudienceWrapper","AvatarLink","white","lavender","overlap","Audience","audience","limit","intl","useIntl","isModalOpen","setModalOpen","useState","JRCFlexBox","splice","map","item","index","href","_url","target","key","id","JRCTooltip","description","undefined","title","position","alt","timestamp","dateModified","Utils","date","strToTimestamp","focusable","length","onClick","JRCModalLayout","closeHandler","enableClickAwayCloseModal","open","maxHeight","JRCModalContent","formatMessage","overflow","onClickIconClose","i","y","gap","space","l","type","JRCStyledHref","JRCTypography","TextWrapper","md","loadingResponse","response","loading","error","AIModal","query","setResponse","sendAIRequest","useCallback","textEnhancement","text","capacity","capability","then","errorMsg","textResponse","result","catch","_err","useEffect","trim","zIndex","tinyMCEModal","reject","buttons","children","clickHandler","resolve","isFull","JRCLoader","align","CSSSquareWidgetWrapper","CSSSquareWidget","grey2","available","CSSWidgetButton","height","CSSWrapWidgetWrapper","CSSWrapTitle","grey0","CSSWrapWidget","full","Flex","direction","JRCButton","registry","getLazyComponent","JRCIconButton","WidgetList","mode","view","namespace","onChange","isOpen","setOpen","widgets","definition","WidgetsName","ArticleTitle","ArticleButton","CheckList","Presence","ArticleText","ArticleImage","ArticleSlider","ArticleAttachment","getBuilderWidgets","args","portalId","factory","FormattedMessage","widget","src","img","label","className","minWidth","WidgetModeArticle","WidgetModeComment","calcHeight","useMemo","Math","ceil","bg","bgHover","iconSize","icon","getVisibleColumns","tableColumnsData","columns","toRet","filter","data","isVisible","forEach","column","find","el","push","WidgetTable","Loader","AbsoluteWrapper","WrapperEditMode","WidgetDatasourceTableWrapper","uniqid","tableHeadColor","tableHeadTextColor","tableHeadIconColor","tableRowColor","tableRowTextColor","tableBorderRadius","tableSizedColumns","tableSizedColumnsWidth","dispatch","isEditorOpenOnFirstRender","setIsEditorOpenOnFirstRender","isLoading","setIsLoading","datasourceData","setDatasourceData","datasourceModel","setDatasourceModel","datasourceSort","setDatasourceSort","order","datasourceType","setDatasourceType","datasourceIdentifier","setDatasourceIdentifier","DatasourceTable","rtConditions","rtAudience","rtLastObject","fetchDatasource","get","Format","VIEW","model","sort","datasource","finally","registerEditor","slice","actions","flushAllEditor","setTimeout","rows","tableDefaultSortOrder","tableDefaultSortName","JRCHtml","__html","CSSHidden","WidgetUploader","initialFiles","initialClick","multiple","accept","onUploadStart","onUploadEnd","onUploadSuccess","uploadRef","token","selectToken","total","setTotal","files","setFiles","current","click","JRCInputFileAdvancedRaw","ref","content","totalFile","prevTotal","fileResponse","prevFiles","WidgetAttachment","FileViewer","CSSWrapper","JRCWidgetArticleAttachmentWrapper","inplace","useDispatch","isActive","state","shallowEqual","onError","message","setWidgetState","mounted","empty","onlyOffice","selectById","option","file","getAccessHash","Error","hash","idFile","window","getWedocFilePath","wedocWindowOpen","openWithOptions","condition","f","includes","mimetype","options","Array","isArray","JRCWidgetEmptyInplace","url","CSSButtonWrapper","CSSPointer","clickable","JRCWidgetArticleButtonWrapper","backgroundColor","buttonSize","borderRadius","JRCWidgetButton","JRCWidgetArticleGallery","CSSImagePointer","JRCWidgetArticleGalleryWrapper","maxWidth","WidgetImage","CSSImageWrapperHover","mockFileLittle","mainType","dateCreation","str","Date","parse","isNaN","getTime","JRCWidgetArticleImageWrapper","width","useFilter","setUri","formatImgUrl","now","from","path","JRCWidgetArticleSliderWrapper","dynamicWidth","setDynamicWidth","useRef","fileViewerFiles","slides","slide","handleResize","offsetWidth","addEventListener","removeEventListener","isEditable","handleEditor","style","JRCWidgetSlider","useDots","loop","startAt","onClickSlide","WidgetArticleText","CSSTextWrapper","JRCWidgetArticleTextWrapper","isBusy","selectWidgetState","busy","tinyMCECommonOptions","selectTinyMCECommonOptions","models","selectAll","tinyMentionsQueries","getTinyMCEMentionsQueries","autoFocus","tinymceScriptSrc","commonOptions","mentionsQueries","WidgetArticleTitle","ToolWrapper","grey1","Tool","JRCWidgetArticleTitleWrapper","heading","Toolbar","sizeValue","WidgetCheckList","J","react","WidgetCheckListEditor","Typography","WidgetConfigWrapper","border","Column","CommentContainer","FormItemContainer","JRCWidgetCheckListWrapper","commentId","editRight","deleteRight","onRemove","onWidgetUpdate","widgetContent","entries","setEntries","isDeleteModalOpen","setDeleteModalOpen","setToken","tokenLoading","setTokenLoading","widgetWrapper","selectWidget","currentUser","onChangeWrapper","updateWidgetWrapper","handleRemoveWidget","flushWidget","openEditorPanel","finalEntries","arr","checked","value","links","user","res","e","JRCInputTextRaw","required","placeholder","event","margin","onChangeContent","onRemoveWidget","initialEntries","onFileClick","onItemCheckListChange","items","mimetypes","checkListRespond","idUser","err","handleCheckItem","cursor","JRCModal","WidgetExcelDatasourceTableWrapper","ExcelDatasourceTable","Button","Footer","WidgetRemove","setIsOpen","removeWidget","WidgetViewFooterActions","widgetObject","selectWidgetObject","widgetObjectRights","selectWidgetObjectRights","canUpdate","update","handleOnClick","onSave","ensureWidgetPresenceContent","updateWidget","v2","CSSPaddingMd","CSSHref","secondary","CSSHorizontalAlign","WidgetPresenceWrapperClosing","isClosed","handleClosing","ensureWidgetObjectHasMinimumProperties","CSSWidgetPresenceWrapper","CSSWidgetPresenceState","JRCWidgetPresenceWrapper","limitValue","closing","userValue","userAvailableList","userUnavailableList","userAvailableTotal","userUnavailableTotal","isPendingResponse","setIsPendingResponse","abortController","AbortController","allRt","selectAllWidgetRTObject","handleError","lockedRespondHandler","handleCancelRespond","presenceCancel","Number","handleRespond","responseValue","payload","ensureWidgetPresenceResponsePayload","presenceRespond","signal","handleReponse","presenceGetResponse","ensureWidgetPresenceResponse","aborted","abort","lastRt","at","object","RTProvider","useRT","JRCWidgetPresence","handleClickAvailable","handleClickUnavailable","CSSWidgetWithTitle","CSSWidgetEditTitle","CSSWidgetTitle","DisplayWidget","cannotDisplayComponent","ensureWidgetArticleButtonType","ensureWidgetArticleGalleryType","ensureWidgetArticleAttachmentType","ensureWidgetArticleImageType","ensureWidgetArticleSliderType","ensureWidgetArticleTitleType","ensureWidgetArticleTextType","ensureWidgetExcelDatasourceTableType","ensureWidgetDatasourceTableType","ensureWidgetCheckListType","ensureWidgetPresenceType","WidgetTitleEdit","WidgetTitle","control","watch","useForm","defaultValues","criteriaMode","subscription","unsubscribe","JRCInputText","CSSWidgetLayer","opacity","pointerEvents","WidgetLayer","layers","ids","layer","Layer","LayerWidget","layerId","visible","locked","top","left","x","DraggableHandler","onMouseUp","updateLayer","BETA_JRCDoubleClick","onDoubleTap","mouseIsDown","setMouseDown","mouse","setMouse","start","setStart","child","setChild","handleMouseDown","nativeEvent","clientX","clientY","handleMouseMove","dx","dy","handleMouseUp","document","onMouseDown","WidgetState","def","inset","display","flex","justifyContent","alignItems","hover","initialized","CSSWidgetWrapper","grey3","font","WidgetWrapperCore","indexOrder","editableMap","currentEditableWidgetId","isComponentVisible","setIsComponentVisible","registerWidgetObject","registerWidget","setEditableWidgetId","_widget","openingType","openingTypeLink","setEditableIndex","EditorsPortal","JRCThemeProvider","EditorsPanel","portalDiv","getElementById","portal","parent","createElement","appendChild","createPortalElement","createPortal","CommentsBlocWrapper","CSSCommentsBlocWidgetWrapper","sm","CommentsBloc","articleId","canComment","setLoading","setWidgets","widgetIds","selectWidgets","platformConfig","selectPlatformConfig","commentsList","commentList","driveHook","selectHook","fileBank","widgetHook","useCommentRT","idComments","idArticle","socket","rtHandlers","getCommentsLikeRTHandlers","handler","onMessage","function","offMessage","list","c","fetchComments","fetchToken","onComment","params","finalWidget","Object","keys","some","w","addComment","comment","_widgets","registerWidgetObjectRights","rights","_right","JRCCommentsBloc","comments","onCommentUpdate","commentToUpdate","idComment","updateComment","onCommentDelete","deleteComment","isWidgetActive","create","autorize","widgetListComponent","newWidgetsWrapperComponent","JRCMessage","existingWidgetsWrapperComponent","tinyMCEConfig","highlightFields","userHighlightFields","userAccountStatus","userModel","m","isWedocActive","onGetHashError","activeDrives","debug","UploadFromDrives","utils","buildDrivesArrayFromObject","drives","socialActionAdd","targetId","targetType","add","deleteFile","fetchUser","fetchUserFields","getFields","fetchSocialActionUserList","getUsers","removeLike","remove","fileBankRequests","getBanks","getFolders","getDocuments","copyFile","copy","StretchContainer","css","Container","stretch","Form","FormElm","onSubmit","FieldsetWrapper","DisplayForm","formRef","configuration","useDisplay","fields","forceMandatory","handleSubmit","reset","formFn","formatValuesForSubmit","values","k","v","join","scrollTo","getFormattedValues","getValues","Input","conf","dataCy","readOnly","extraInputs","CSSEditorPortal","CSSEditorHeader","CSSEditorAction","CSSEditorLabel","CSSEditorMask","EDITOR_WIDTH","CSSEditor","CSSEditorContent","CSSEditorIsBusy","CSSEditorIsLocked","CSSEditorMenu","CSSEditorMenuButton","CSSEditorWidget","CSSEditorWidgetLabel","CSSEditorWidgetOption","EditorPopup","editor","selectEditor","popup","flexDirection","marginTop","flushEditorPopup","WidgetArticleTitleEditor","WidgetArticleTextEditor","WidgetArticleGalleryEditor","WidgetArticleAttachmentEditor","WidgetArticleSliderEditor","WidgetArticleImageEditor","WidgetButtonEditor","WidgetDatasourceTableEditor","WidgetExcelDatasourceTableEditor","WidgetPresenceEditor","Editor","onSaveCallback","handleHookIsActive","store","getState","flushEditor","onStateChange","states","onOpen","registerEditorPopup","hook","handlers","jamespot","network","filebank","wedoc","handleStart","handleCatch","handleFinally","override","application","EditorTabWidgets","Layers","_","n","ensureWidgetWrapperProps","console","BETA_JRCDragAndDrop","onDrag","renderEl","EditorWidgetLayer","elms","registerLayer","EditorWidgetLayerLock","EditorWidgetLayerVisibility","EditorWidgetLayerFlush","flushLayer","EditorTabWrapper","wrapper","setTitle","EditorIsBusy","Icon","EditorPosition","setEditorPosition","EditorIsInitialize","EditorIsLocked","EditorWrapper","tab","setTab","panel","useWrapper","useEditor","useWidgets","CSSEditorPortalWrapper","CSSEditorPortalPopupWrapper","CSSEditorPortalRow","CSSEditorPortalFreeSpace","editors","selectEditors","Empty","useAI","setQuery","PrepareAndSetQuery","fetch","Promise","AICapabilities","develop","summarize","tldr","en","es","formal","funny","JTinyMCEExtensionsBuilders","jia","JRCInputTinyMCEWithExt","extAI","isAIActive","hooks","JIAHook","extArray","onMentionsQueryError","tinymceCommonOptions","JRCInputTinyMCE","additionalExtensions","JRCInputTinyMCEWithExtRaw","JRCInputTinyMCERaw","ModalAudience","warningMessage","JRCInputAudience","asyncPromise","inputValue","autocomplete","searchable","defaultCustomOptions","resetOptions","AppColumn","MainColumn","TwoColLayout","extensionRoute","routes","pathname","useLocation","ROUTES_ARRAY","activeTab","setActiveTab","tabs","absolutePath","group","activeRoute","route","paths","reduce","previousValue","currentValue","pattern","isMatch","matchPath","fallback","Outlet"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"854.bundle.js","mappings":"qcAMA,MAEaA,EAAUC,I,MACnB,MAAMC,GAAQ,IAAAC,YACRC,GAAgB,IAAAC,aAAY,KAAQC,UAAUC,qBAEpD,OAAIN,EAAMO,OAAQJ,aAAa,EAAbA,EAAeI,KAEzB,kBAAC,EAAAC,QAAO,CACJC,KAAM,eACNC,KAVM,GAUW,QAAV,EAAAV,EAAMU,YAAI,QAAI,GACrBC,MAAOV,EAAMU,MAAMC,QACnBC,QAAS,WAKd,kBAAC,EAAAC,UAAS,iBAAKd,GAAS,ECD7Be,EAAkB,OAAU;;;;;EAOrBC,EAAa,KAA+B;;;;;;;;;aAS3ChB,GAAUA,EAAMC,MAAMU,MAAMM;wBACjBjB,GAAUA,EAAMC,MAAMU,MAAMO;wBAC5BlB,GAAUA,EAAMC,MAAMU,MAAMM;mBACjCjB,GAAWA,EAAMmB,QAAU,QAAU;;EAI5CC,EAAW,EAA4BC,WAAUC,QAzBhD,MA0BV,MAAMC,GAAO,IAAAC,WACPvB,GAAQ,IAAAC,aACPuB,EAAaC,IAAgB,IAAAC,WAAS,GAE7C,OACI,oCACI,kBAAC,EAAAC,WAAU,KACN,IAAIP,GAAUQ,OAAO,EAAGP,GAAOQ,KAAI,CAACC,EAAMC,IACvC,kBAAChB,EAAU,CAACG,QAAmB,IAAVa,EAAaC,KAAMF,EAAKG,KAAMC,OAAQ,SAAUC,IAAKL,EAAKM,IAC3E,kBAAC,EAAAC,WAAU,CAACC,iBAA4BC,IAAfT,EAAKU,MAAsB,IAAMV,EAAKU,MAAOC,SAAS,QAC3E,kBAAC3C,EAAM,CACHQ,IAAKwB,EAAKxB,IACVG,KAAM,EACNG,QAAQ,SACR8B,IAAI,QACJC,UAAWb,EAAKc,aAAe,EAAAC,MAAMC,KAAKC,eAAejB,EAAKc,mBAAgBL,EAC9ES,WAAS,QAKxB5B,EAAS6B,OAAS5B,GACf,kBAACN,EAAU,CAACmC,QAAS,IAAMzB,GAAa,GAAOP,SAAS,G,IAClDE,EAAS6B,OAAS5B,IAI/BD,EAAS6B,OAAS5B,GACf,kBAAC,EAAA8B,eAAc,CACXC,aAAc,IAAM3B,GAAa,GACjC4B,2BAAyB,EACzBC,KAAM9B,EACNZ,QAAS,eACT2C,UAAW,SACX,kBAAC,EAAAC,gBAAe,CACZhB,MAAOlB,EAAKmC,cAAc,CAAErB,GAAI,oBAChCsB,SAAU,SACVC,iBAAkB,IAAMlC,GAAa,IACrC,kBAACX,EAAe,KACXM,EAASS,KAAI,CAACC,EAAM8B,IACjB,kBAAC,EAAAjC,WAAU,CAACQ,IAAK,YAAYyB,IAAKC,EAAG,SAAUC,IAAK9D,EAAM+D,MAAMC,GAC5D,kBAAClE,EAAM,CAACW,KAAM,EAAGH,IAAK,GAAGwB,EAAKmC,QAAQnC,EAAKM,OAC3C,kBAAC,EAAA8B,cAAa,CAAClC,KAAM,GAAGF,EAAKmC,QAAQnC,EAAKM,MACtC,kBAAC,EAAA+B,cAAa,KAAErC,EAAKU,cASxD,E,sBC1FL,MAAM4B,EAAc,OAAU;eACdrE,GAAUA,EAAMC,MAAM+D,MAAMM;EAatCC,EAAgC,CAClCC,cAAUhC,EACViC,SAAS,EACTC,WAAOlC,GAGEmC,EAAU,EAAGC,YACtB,MAAMrD,GAAO,IAAAC,YACNgD,EAAUK,IAAe,IAAAlD,UAAuB4C,GACjDtE,GAAQ,IAAAC,YAER4E,GAAgB,IAAAC,cACjBH,IACGC,EAAYN,GACZ,QACKS,gBAAgB,CAAEC,KAAML,EAAMK,KAAMC,SAAUN,EAAMO,aACpDC,MAAMZ,IACH,GAAIA,EAASE,MAQT,YAPAG,EAAY,CACRH,MAAO,GAAGnD,EAAKmC,cAAc,CAAErB,GAAI,wBAC/BmC,EAASa,UAAY,KAAOb,EAASa,WAEzCZ,SAAS,EACTD,cAAUhC,IAIlB,MAAM8C,EAAed,EAASe,OAAON,KACrCJ,EAAY,CACRH,WAAOlC,EACPiC,SAAS,EACTD,SAAUc,GACZ,IAELE,OAAOC,IACJZ,EAAY,CACRH,MAAOnD,EAAKmC,cAAc,CAAErB,GAAI,sBAChCoC,SAAS,EACTD,cAAUhC,GACZ,GACJ,GAEV,CAACjB,IASL,OANA,IAAAmE,YAAU,KACFd,GAASA,EAAMK,KAAKU,OAAOzC,OAAS,GACpC4B,EAAcF,E,GAEnB,CAACA,EAAOE,IAGP,kBAAC,EAAA1B,eAAc,CACXwC,OAAQ3F,EAAM2F,OAAOC,aACrBtC,OAAQqB,EACRvB,aAAc,KACVuB,SAAAA,EAAOkB,QAAQ,GAEnB,kBAAC,EAAArC,gBAAe,CACZE,SAAS,SACToC,QAAS,CACL,CACIC,SAAUzE,EAAKmC,cAAc,CAAErB,GAAI,qBACnC4D,aAAc,KACVrB,GAASE,EAAcF,EAAM,GAGrC,CACIoB,SAAUzE,EAAKmC,cAAc,CAAErB,GAAI,sBACnC4D,aAAc,IAAMzB,EAASA,WAAYI,aAAK,EAALA,EAAOsB,QAAQ1B,EAASA,YAErE,CACIwB,SAAUzE,EAAKmC,cAAc,CAAErB,GAAI,kBACnC4D,aAAc,IAAMrB,aAAK,EAALA,EAAOkB,WAGnCK,QAAM,GACN,kBAAC9B,EAAW,KACPG,EAASC,SACN,oCACI,kBAAC,EAAA2B,UAAS,MACV,kBAAC,EAAAhC,cAAa,CAACiC,MAAM,UAChB9E,EAAKmC,cAAc,CAAErB,GAAI,0BAIpCmC,EAASC,SAAWD,EAASE,OAAS,2BAAIF,EAASE,QACnDF,EAASC,SAAWD,EAASA,UAAY,2BAAIA,EAASA,YAIvE,E,aC/GE,MAAM8B,EAAyB,OAAU;;;;;;EAQnCC,EAAkB,OAAkC;wBACxCvG,GAAUA,EAAMC,MAAMU,MAAM6F;;;;;eAKrCxG,GAAWA,EAAMyG,UAAY,IAAM;sBAC5BzG,GAAWA,EAAMyG,UAAY,MAAQ;;;;;;;;;;;;;;;;;;EAoB/CC,EAAkB,OAA6C;wBACnD1G,GAAUA,EAAMC,MAAMU,MAAMC;cACtCZ,GAAWA,EAAMuD,KAAOvD,EAAM2G,OAAS;;;;;;;;EAUzCC,EAAuB,OAAU;;;;;;EAQjCC,EAAe,OAAU;;;;;;aAMxB7G,GAAUA,EAAMC,MAAMU,MAAMC;;4BAEbZ,GAAUA,EAAMC,MAAMU,MAAMmG;;EAI5CC,EAAgB,UAA+D;;;;;;;wBAOnE/G,GAAUA,EAAMC,MAAMU,MAAM6F;;oCAEhBxG,GAAwB,GAAdA,EAAMgC;eACrChC,GAAWA,EAAMuD,KAAO,EAAI;;;;MAIrCvD,GAAUA,EAAMgH,MAAQ;EAGlBC,EAAO,OAAyD;;sBAEtDjH,GAA+B,QAApBA,EAAMkH,UAAsB,MAAQ;mBAClDlH,GAA+B,QAApBA,EAAMkH,UAAsB,SAAW;uBAC9ClH,GAA+B,QAApBA,EAAMkH,UAAsB,aAAe;;MAEvElH,GAAUA,EAAM+D,KAAO,OAAO/D,EAAM+D;ECzErCoD,EAAY,UAAOC,SAASC,iBAAiB,UAC7CjE,EAAiB,UAAOgE,SAASC,iBAAiB,eAClD5D,EAAkB,UAAO2D,SAASC,iBAAiB,gBACnD/E,EAAa,UAAO8E,SAASC,iBAAiB,WAC9CC,EAAgB,UAAOF,SAASC,iBAAiB,cAO1CE,EAAa,EACtBC,OACAC,OACAzB,WACA0B,YAAY,UACZC,eAQA,MAAOC,EAAQC,GAAW,cAAwB,GAC5CC,ECzCH,SAA2BJ,GAC9B,OAAQA,GACJ,IAAK,uBACD,MAAO,CAAC,KAAOK,WAAW,EAAAC,YAAYC,cAAe,KAAOF,WAAW,EAAAC,YAAYE,gBACvF,IAAK,UACD,MAAO,CAAC,KAAOH,WAAW,EAAAC,YAAYG,WAAY,KAAOJ,WAAW,EAAAC,YAAYI,WACpF,QACI,MAAO,CACH,KAAOL,WAAW,EAAAC,YAAYC,cAC9B,KAAOF,WAAW,EAAAC,YAAYK,aAC9B,KAAON,WAAW,EAAAC,YAAYM,cAC9B,KAAOP,WAAW,EAAAC,YAAYE,eAC9B,KAAOH,WAAW,EAAAC,YAAYO,eAC9B,KAAOR,WAAW,EAAAC,YAAYQ,mBAC9B,KAAOT,WAAW,EAAAC,YAAYI,WAG9C,CDwBoBK,CAAkBf,GAC5BnG,GAAO,IAAAC,WAEPkH,EAA4B,CAC9BnF,KAAMqE,EACNe,SAAU,cACV9H,QAAS,cACTwC,aAAc,IAAMwE,GAAQ,IAG1B1E,EAAW1C,IACbkH,EAAS,KAAOiB,QAAQnI,IACxBoH,GAAQ,EAAM,EAElB,OACI,oCACI,kBAACzE,EAAc,iBAAKsF,GAChB,kBAACjF,EAAe,CACZG,iBAAkB8E,EAAKrF,aACvB0C,QACa,YAATyB,EACM,CACI,CACIxB,SAAU,kBAAC,EAAA6C,iBAAgB,CAACxG,GAAG,iBAC/B1B,MAAO,SACPsF,aAAc,IAAM4B,GAAQ,UAGpCrF,EAEVC,MAAOlB,EAAKmC,cAAc,CAAErB,GAAI,oBACtB,YAATmF,EACG,kBAACZ,EAAoB,KAChBkB,EAAQhG,KAAI,CAACgH,EAAQ9G,IAClB,kBAAC+E,EAAa,CACV3E,IAAK0G,EAAOrI,KACZ8C,MAAM,EACNyD,MAAI,EACJhF,MAAOA,EACPmB,QAAS,IAAMA,EAAQ2F,EAAOrI,OAC9B,kBAACwG,EAAI,CAACC,UAAW,MAAOnD,IAAK,IACzB,yBAAKgF,IAAKD,EAAOE,MACjB,kBAAC/B,EAAI,CAACC,UAAW,UACb,4BAAK3F,EAAKmC,cAAc,CAAErB,GAAIyG,EAAOG,SACrC,2BAAI1H,EAAKmC,cAAc,CAAErB,GAAIyG,EAAOvG,qBAOxD,kBAAC+D,EAAsB,KAClBwB,EAAQhG,KAAI,CAACgH,EAAQ9G,IAEd,kBAACuE,EAAe,CACZnE,IAAKJ,EACLmB,QAAS,IAAMA,EAAQ2F,EAAOrI,MAC9BgG,UAAWqC,EAAOrC,WAClB,yBAAKsC,IAAKD,EAAOE,MACjB,yBAAKE,UAAU,iBAAiB3H,EAAKmC,cAAc,CAAErB,GAAIyG,EAAOG,eAQlF,WAATzB,GAAqBxB,EAAW,yBAAK7C,QAAS,IAAM0E,GAAQ,IAAQ7B,GAAkB,qCAC7E,WAATwB,GAA8B,SAATC,EAClB,kBAACN,EAAS,CAAChE,QAAS,IAAM0E,GAAQ,GAAOhH,QAAS,WAAYsI,SAAU,QACnE5H,EAAKmC,cAAc,CAAErB,GAAI,uBAG9B,qCAEM,YAATmF,GAA+B,SAATC,EACnB,kBAACnB,EAAsB,KAClBwB,EAAQhG,KAAI,CAACgH,EAAQ9G,IAEd,kBAACuE,EAAe,CACZnE,IAAKJ,EACLmB,QAAS,IAAMA,EAAQ2F,EAAOrI,MAC9BgG,UAAWqC,EAAOrC,WAClB,yBAAKsC,IAAKD,EAAOE,MACjB,yBAAKE,UAAU,iBAAiB3H,EAAKmC,cAAc,CAAErB,GAAIyG,EAAOG,aAMhF,qCAEM,YAATzB,GAA+B,SAATC,EAAkB,kBAAC2B,EAAiB,CAACtB,QAASA,EAAS3E,QAASA,IAAc,qCAC3F,YAATqE,GAA+B,SAATC,EACnB,kBAAC4B,EAAiB,CACdlG,QAAS,KACL0E,GAAQ,EAAK,IAIrB,qCAGX,EAOCuB,EAAoB,EACtBtB,UACA3E,cAKA,MAAOI,EAAMqE,GAAU,cAAe,GAChCrG,GAAO,IAAAC,WAEP8H,GAAa,IAAAC,UAAQ,IAbhB,GAcAC,KAAKC,KAAK3B,EAAQ5E,OAAS,GAfpB,GAEA,IAcf,CAAC4E,IAEJ,OACI,oCACI,kBAACpB,EAAe,CAACnD,KAAMA,EAAMoD,OAAQ2C,GACjC,kBAACzC,EAAY,CAAC1D,QAAS,IAAMyE,GAAQrE,IAChChC,EAAKmC,cAAc,CAAErB,GAAI,uBAE9B,kBAACuE,EAAoB,KAChBkB,EAAQhG,KAAI,CAACgH,EAAQ9G,IAEd,kBAAC+E,EAAa,CACV3E,IAAK0G,EAAOrI,KACZ8C,KAAMA,EACNvB,MAAOA,EACPmB,QAAS,IAAMA,EAAQ2F,EAAOrI,OAC9B,yBAAKsI,IAAKD,EAAOE,MAChBzH,EAAKmC,cAAc,CAAErB,GAAIyG,EAAOG,aAO5D,EAGCI,EAAoB,EAAGlG,cACzB,MAAM5B,GAAO,IAAAC,WACb,OACI,oCACI,kBAACc,EAAU,CAACC,YAAahB,EAAKmC,cAAc,CAAErB,GAAI,wBAC9C,kBAACiF,EAAa,CACVoC,GAAI,QACJC,QAAS,QACThJ,MAAO,QACPiJ,SAAU,GACVzG,QAAS,KACLA,GAAS,EAEb0G,KAAM,oBAIrB,E,sBEhNE,MAAMC,EAAoB,CAACC,EAA0CC,KACxE,MAAMC,EAA6B,GAUnC,OATAF,EACKG,QAAQC,GAASA,EAAKC,YACtBC,SAASF,IACN,MAAMG,EAASN,EAAQO,MAAMC,GAAOA,EAAG/J,OAAS0J,EAAK1J,OACjD6J,GACAL,EAAMQ,KAAKH,E,IAIhBL,CAAK,E,aCVhB,MAAMS,EAAc,UAAOtD,SAASC,iBAAiB,eAI/CsD,EAAS,UAAOvD,SAASC,iBAAiB,UAsBnCuD,GAFU,OAAU,GAEF,OAAU;;;;;;;WAO7B5K,GAAUA,EAAMC,MAAM+D,MAAMM;GAG3BuG,EAAkB,OAAU;;;;;;;WAO7B7K,GAAUA,EAAMC,MAAM+D,MAAMM;aAC1BtE,GAAUA,EAAMC,MAAMU,MAAMC;;;wBAGjBZ,GAAUA,EAAMC,MAAMU,MAAMC;;4BAExBZ,GAAUA,EAAMC,MAAMU,MAAM6F;;;EAK5CsE,EAA+B,EACxCC,SACAxK,MACAe,QACA0J,iBACAC,qBACAC,qBACAC,gBACAC,oBACArB,mBAAmB,GACnBsB,oBACAC,oBACAC,yBACA/D,WAEA,MAAMjG,GAAO,IAAAC,WACPgK,GAAW,WACVC,EAA2BC,IAAgC,IAAA/J,WAAkB,IAC7EgK,EAAWC,IAAgB,IAAAjK,WAAkB,IAC7CkK,EAAgBC,IAAqB,IAAAnK,UAAmD,KACxFoK,EAAiBC,IAAsB,IAAArK,UAA8B,KACrEsK,EAAgBC,IAAqB,IAAAvK,UAA+B,CAAEwK,MAAO,YAAa1L,KAAM,aAChG2L,EAAgBC,IAAqB,IAAA1K,eAAqCa,IAC1E8J,EAAsBC,IAA2B,IAAA5K,UAAiB,IAEnEoG,GAAa,IAAAwB,UAAQ,IAAM,KAAOxB,WAAW,EAAAC,YAAYwE,kBAAkB,IAC3EC,GAAe,IAAAlD,UAAmB,IACb,WAAnB6C,EACO,CAAC,CAAElI,KAAM,CAACoI,KAGd,IACR,CAACF,EAAgBE,IACdI,GAAa,IAAAnD,UAAkB,IACV,QAAnB6C,EACO,CAACE,GAGL,IACR,CAACF,EAAgBE,KAEd,aAAEK,IAAiB,QAAaF,EAAcC,GAE9CE,GAAkB,IAAA7H,cAAY,KAC3BxE,IAILqL,GAAa,GACb,eACKiB,IAAItM,EAAK,EAAAuM,OAAOC,MAChB3H,MAAMZ,IACHwH,EAAmBxH,EAASe,OAAOyH,OACnClB,EAAkBtH,EAASe,OAAO4E,MAClC+B,EAAkB1H,EAASe,OAAO0H,MAClCZ,EAAkB7H,EAASe,OAAO2H,WAAWd,gBAC7CG,EAAwB/H,EAASe,OAAO2H,WAAWZ,qBAAqB,IAE3Ea,SAAQ,IAAMvB,GAAa,KAAO,GACxC,CAACrL,KAEJ,IAAAmF,YAAU,UACMlD,IAARjC,GAAiD,IAA5BwJ,EAAiB7G,QAA2C,IAA3B6I,EAAgB7I,QACtE0J,G,GAEL,CAACrM,EAAKwJ,EAAkBgC,EAAiBa,KAE5C,IAAAlH,YAAU,KACDiH,GAILC,GAAiB,GAClB,CAACD,EAAcC,KAElB,IAAAlH,YAAU,KACDnF,GACDyL,EAAmB,G,GAExB,CAACzL,IAEJ,MAAM6M,GAAiB,IAAArI,cAAY,KAC/ByG,EAAS,KAAa6B,MAAMC,QAAQC,kBACpCC,YAAW,KACPhC,EAAS,KAAa6B,MAAMC,QAAQF,eAAe,CAAErC,SAAQtK,KAAM,EAAAuH,YAAYwE,kBAAmB,GACnG,EAAE,GACN,CAAChB,EAAUT,KAEd,IAAArF,YAAU,KACO,SAAT8B,GAA4B,YAATA,GACnBgE,EAAS,KAAa6B,MAAMC,QAAQC,iB,GAEzC,CAAC/F,EAAMgE,KAEV,IAAA9F,YAAU,KACD+F,GAA8BlL,GAAgB,SAATiH,IACtC4F,IACA1B,GAA6B,G,GAElC,CAACF,EAAUT,EAAQU,EAA2BlL,EAAK6M,EAAgB5F,IAEtE,MAAMwC,GAAU,IAAAT,UACZ,IAAMO,EAAkBC,EAAkBgC,IAC1C,CAAChC,EAAkBgC,IAGvB,OAAgC,IAA5BhC,EAAiB7G,QAAiByI,GAAsB,SAATnE,EAmB5CmE,EACH,kBAACf,EAAe,KACZ,kBAACD,EAAM,OAGX,oCACMgB,GAAuC,IAA1BE,EAAe3I,OAM1B,kBAACwH,EAAW,CACR+C,KAAM5B,EACN7B,QAASA,EACT1I,MAAOA,EACP0J,eAAgBA,EAChBC,mBAAoBA,EACpBC,mBAAoBA,EACpBC,cAAeA,EACfC,kBAAmBA,EACnBC,kBAAmBA,EACnBtB,iBAAkBA,EAClBuB,kBAAmBA,EACnBC,uBAAwBA,EACxBmC,sBAAuBzB,EAAeE,MACtCwB,qBAAsB1B,EAAexL,OAnBzC,kBAACmK,EAAe,KACZ,yBAAK7B,IAAK,sBAAsB,EAAAf,YAAYwE,sBAAuB7J,IAAI,KACvE,kBAAC,EAAAkG,iBAAgB,CAACxG,GAAI,kCAoBpB,SAATmF,EACG,kBAACqD,EAAe,CAAC1H,QAASiK,GACtB,kBAAC,EAAAQ,QAAO,CACJC,OAAQ,GAAGtM,EAAKmC,cAAc,CAAErB,GAAI,4BAA6Bd,EAAKmC,cAAc,CAChFrB,GAAI0F,EAAWkB,iBAK3B,sCAvDJ,oCACI,kBAAC2B,EAAe,CAACzH,QAASiK,GACtB,yBAAKrE,IAAK,sBAAsB,EAAAf,YAAYwE,sBAAuB7J,IAAI,KACvE,kBAAC,EAAAkG,iBAAgB,CAACxG,GAAI0F,EAAWkB,QACjC,kBAAC,EAAA9B,UAAS,CAAC8B,MAAM,qBAErB,kBAAC4B,EAAe,CAAC1H,QAASiK,GACtB,kBAAC,EAAAQ,QAAO,CACJC,OAAQ,GAAGtM,EAAKmC,cAAc,CAAErB,GAAI,4BAA6Bd,EAAKmC,cAAc,CAChFrB,GAAI0F,EAAWkB,iBAiDtC,ECrNQ6E,EAAY,OAAU;;;;EAiBtBC,EAAiB,EAC1B/H,WACAgI,eACAC,eACAC,WACAC,SACAC,gBACAC,cACAC,sBAEA,MAAMC,EAAY,WAA+B,MAC3CC,GAAQ,IAAApO,aAAY,KAAOC,UAAUoO,cACpCC,EAAOC,GAAY,aAAuB,IAC1CC,EAAOC,GAAY,aAA8Bb,GA2BxD,OAzBA,eAAgB,K,MACRC,IACiB,QAAjB,EAAAM,EAAUO,eAAO,SAAEC,Q,GAExB,CAACd,IAEJ,eAAgB,KACRD,EAAa9K,SAAW0L,EAAM1L,QAC9B2L,EAASb,E,GAGd,CAACA,IAEJ,eAAgB,KACZM,EAAgBM,EAAM,GAEvB,CAACA,IAEJ,eAAgB,KACE,IAAVF,GACAL,G,GAGL,CAACK,IAGA,oCACI,yBACIvL,QAAS,K,MACD8K,IACiB,QAAjB,EAAAM,EAAUO,eAAO,SAAEC,Q,GAG1B/I,GAEL,kBAAC8H,EAAS,KACN,kBAAC,EAAAkB,wBAAuB,CACpBC,IAAKV,EACLlM,GAAG,qBACH5B,KAAK,cACLyO,QAAS,GACTf,OAAQA,EACRD,SAAUA,EACVM,MAAOA,EACPJ,cAAgBe,SACM3M,IAAd2M,GACAR,GAAUS,GAAcA,EAAYD,IAEX,mBAAlBf,GAA8C,IAAde,GACvCf,G,EAGRE,gBAAkBe,SACO7M,IAAjB6M,IAGJV,GAAUS,QAA6B5M,IAAd4M,EAA0BA,EAAY,EAAI,IACnEP,GAAUS,GAAepB,EAAW,IAAIoB,EAAWD,GAAgB,CAACA,KAAe,KAKtG,ECtFCE,EAAmB,UAAOnI,SAASC,iBAAiB,oBAEpDmI,EAAa,UAAOpI,SAASC,iBAAiB,cAYvCoI,EAAa,OAAU;;EAIvBC,EAAoC,EAC7C5G,SACA6G,UACAnI,WAMA,MAAMjG,GAAO,IAAAC,YACP,OAAEuJ,GAAWjC,GACb,MAAE8F,GAAU9F,EAAOoG,QACnB1D,GAAW,IAAAoE,eACXC,GAAW,IAAAzP,cAAa0P,GAA4B,KAAOzP,UAAUwP,SAASC,EAAO/E,IAAS,EAAAgF,cAE9FC,EAAWC,IACbzE,EAAS,KAAM8B,QAAQ5I,MAAM,CAAEuE,MAAOgH,QAAAA,EAAW1O,EAAKmC,cAAc,CAAErB,GAAI,mBAAqB,GAGnG,IAAAqD,YAAU,KACN8F,EAAS,KAAO6B,MAAMC,QAAQ4C,eAAe,CAAEnF,SAAQoF,SAAS,IAAQ,GAEzE,KAEH,IAAAzK,YAAU,KACN8F,EACI,KAAO6B,MAAMC,QAAQ4C,eAAe,CAChCnF,SACAqF,OAAQxB,GAA0B,IAAjBA,EAAM1L,SAE9B,GAEF,CAAC0L,IAEJ,MAAMyB,GAAa,IAAAjQ,cAAa0P,GAAe,KAAYzP,UAAUiQ,WAAWR,EAAO,oBAoBjFS,EAAS,CACX,CACItH,MAAO1H,EAAKmC,cAAc,CAAErB,GAAI,2BAChCc,QArBSqN,IACRA,GAGL,WACKC,cAAc,eAAeD,EAAKnO,MAClC+C,MAAMZ,IACH,GAAwB,KAApBA,EAASe,OACT,MAAM,IAAImL,MAAM,gBAEpB,MAAMC,EAAOnM,EAASe,OA3DP,EAACqL,EAAgBD,KAC5CE,OAAOtN,KAIJ,SAA0BqN,EAAgBD,GAC7C,MAAO,eAAeC,KAAUD,GACpC,CANgBG,CAAiBF,EAAQD,QA2DzBI,EA3DuC,EA2DvCA,CAAgBP,EAAKnO,GAAIsO,EAAK,IAEjCnL,OAAM,KACHgG,EAAS,KAAM8B,QAAQ5I,MAAM,CAAEuE,MAAO,sBAAwB,KAAM,GACtE,IAUJ+H,EAAoDX,EACpD,CACI,CACIY,UAAYC,GACR,CACI,0EACA,oEACA,6EACFC,SAASD,EAAEE,UACjBC,QAASd,IAGjB,GAEN,YAAiB/N,IAAVoM,EACH,kBAACa,EAAU,KACG,SAATjI,EACG,kBAAC+H,EAAgB,CAACX,MAAOA,EAAOzL,QAAS,KAAe,EAAE6M,QAASA,IAEnE,kBAACR,EAAU,CAACZ,MAAOA,EAAOoC,gBAAiBA,IACrCzN,GACS,kBAACgM,EAAgB,CAACX,MAAOA,EAAOzL,QAAUyN,GAAWrN,EAAKqN,GAASZ,QAASA,MAI9FL,GAAoB,SAATnI,GACR,kBAACuG,EAAc,CACXC,aAAcY,EACdX,aAAc4B,EACd3B,UAAU,EACVC,OAAQ,IACRG,gBAAkBM,IACV0C,MAAMC,QAAQ3C,IACdpD,GAAS,QAAoDT,EAAQ,CAAE6D,U,EAG/ER,cAAe,KACX5C,EAAS,KAAO6B,MAAMC,QAAQ4C,eAAe,CAAEnF,SAAQtG,SAAS,IAAQ,EAE5E4J,YAAa,KACT7C,EAAS,KAAO6B,MAAMC,QAAQ4C,eAAe,CAAEnF,SAAQtG,SAAS,IAAS,GAEnE,SAAT+C,EACG,kBAAC,EAAAgK,sBAAqB,CAClBvI,MAAO,wCACP1G,YAAa,8CACbkP,IAAK,uCACLtO,QAAS,KAAe,IAG5B,uCAMhB,oCACH,EChJCuO,EAAmB,OAAU;;;;;EAO7BC,EAAa,OAAkC;sBAC9B3R,GAAWA,EAAM4R,UAAY,MAAQ;;;;;;EAQ/CC,GAAgC,EACzC/I,SACAtB,WAMA,MAAMgE,GAAW,IAAAoE,gBACX,OAAE7E,GAAWjC,GACb,KAAE7D,EAAI,IAAEwM,EAAG,OAAEtP,EAAM,MAAExB,EAAK,gBAAEmR,EAAe,WAAEC,EAAU,aAAEC,EAAY,QAAEnR,GAAYiI,EAAOoG,QAYhG,OAVA,IAAAxJ,YAAU,KACN8F,EACI,KAAO6B,MAAMC,QAAQ4C,eAAe,CAChCnF,SACAqF,OAAQnL,GAAwB,IAAhBA,EAAK/B,SAE5B,GAEF,CAAC+B,IAGA,kBAACyM,EAAgB,CACbvO,QAAS,KACQ,SAATqE,GACAgE,EAAS,KAAa6B,MAAMC,QAAQF,eAAe,CAAErC,SAAQtK,KAAMqI,EAAOrI,O,GAGlF,kBAACkR,EAAU,CAACC,UAAoB,SAATpK,GACnB,kBAAC,EAAAyK,gBAAe,CACZhN,KAAMA,EACNwM,IAAKA,EACLtP,OAAQA,EACRxB,MAAOA,EACPmR,gBAAiBA,EACjBC,WAAYA,EACZC,aAAcA,EACdnR,QAASA,KAIxB,ECnDCqR,GAA0B,UAAO9K,SAASC,iBAAiB,wBAE3D,GAAa,UAAOD,SAASC,iBAAiB,cAE9C8K,GAAkB,UAAa;;EAIxBC,GAAiC,EAC1CtJ,SACA6G,UACAnI,W,QAMA,MAAM,OAAEuD,GAAWjC,GACb,MAAE8F,GAAU9F,EAAOoG,QACnB1D,GAAW,IAAAoE,eACXC,GAAW,IAAAzP,cAAa0P,GAA4B,KAAOzP,UAAUwP,SAASC,EAAO/E,IAAS,EAAAgF,cAOpG,OALA,eAAgB,KACZvE,EAAS,KAAO6B,MAAMC,QAAQ4C,eAAe,CAAEnF,SAAQoF,SAAS,IAAQ,GAEzE,SAEc3N,IAAVoM,EACH,oCACc,SAATpH,EACG,kBAAC0K,GAAuB,CACpBtD,MAAOA,EACPyD,SAAU,IACVtO,IAAuB,QAAlB,EAAA+E,EAAOoG,QAAQnL,WAAG,QAAI,KAC3BuG,OAA6B,QAArB,EAAAxB,EAAOoG,QAAQ5E,cAAM,QAAI,IACjCnH,QAAS,KAAe,IAG5B,kBAAC,GAAU,CAACyL,MAAOA,EAAOoC,gBAAiB,KACrCzN,I,QACE,OACI,kBAAC4O,GAAe,KACZ,kBAACD,GAAuB,CACpBtD,MAAOA,EACPyD,SAAU,IACVtO,IAAuB,QAAlB,EAAA+E,EAAOoG,QAAQnL,WAAG,QAAI,KAC3BuG,OAA6B,QAArB,EAAAxB,EAAOoG,QAAQ5E,cAAM,QAAI,IACjCnH,QAAUyN,GAAWrN,EAAKqN,KAGrC,IAIZjB,GAAoB,SAATnI,EACR,kBAACuG,EAAc,CACXC,aAAcY,EACdX,aAAc4B,EACd1B,OAAQ,mCACRD,UAAU,EACVI,gBAAkBM,IACV0C,MAAMC,QAAQ3C,IACdpD,GAAS,QAAiDT,EAAQ,CAAE6D,U,EAG5ER,cAAe,KACX5C,EAAS,KAAO6B,MAAMC,QAAQ4C,eAAe,CAAEnF,SAAQtG,SAAS,IAAQ,EAE5E4J,YAAa,KACT7C,EAAS,KAAO6B,MAAMC,QAAQ4C,eAAe,CAAEnF,SAAQtG,SAAS,IAAS,GAE7E,kBAAC,EAAA+M,sBAAqB,CAClBvI,MAAO,qCACP1G,YAAa,2CACbkP,IAAK,uCACLtO,QAAS,KAAe,KAIhC,sCAIR,oCACH,ECnFCmP,GAAc,UAAOlL,SAASC,iBAAiB,eAC/C,GAAa,UAAOD,SAASC,iBAAiB,cAI9CkL,GAAuB,OAAU;;;;;;;;;aASzBvS,GAAUA,EAAMC,MAAMU,MAAMM;;;;EAMpC,GAAkB,UAAa;;EAI/BuR,GAA8B,CAChCnQ,GAAI,EACJ6B,KAAM,GACNzB,MAAO,GACPlC,IAAK,GACL6Q,SAAU,2BACVqB,SAAU,GACVC,aAAc,GACd7P,aAAc,GACdX,KAAM,GACNxB,KAAM,IAGGsC,GAAkB2P,IAC3B,GAAIA,EAAK,CACL,MAAM/P,EAAYgQ,KAAKC,MAAMF,GAC7B,IAAKG,MAAMlQ,GACP,OAAO,IAAIgQ,KAAKhQ,GAAWmQ,UAAY,G,CAGzC,EAGGC,GAA+B,EACxClK,SACAmK,QACAtD,UACAnI,WAOA,MAAM,OAAEuD,GAAWjC,GACb,KAAE0H,EAAI,UAAE0C,GAAcpK,EAAOoG,QAC7B1D,GAAW,IAAAoE,eACXC,GAAW,IAAAzP,cAAa0P,GAA4B,KAAOzP,UAAUwP,SAASC,EAAO/E,IAAS,EAAAgF,eAC7FxP,EAAK4S,IAAU,IAAAxR,eAA6Ba,GAC7CjB,GAAO,IAAAC,WAyBb,OAvBA,IAAAkE,YAAU,KACN8F,EAAS,KAAO6B,MAAMC,QAAQ4C,eAAe,CAAEnF,SAAQoF,SAAS,IAAQ,GAEzE,KAEH,IAAAzK,YAAU,KACN8F,EAAS,KAAO6B,MAAMC,QAAQ4C,eAAe,CAAEnF,SAAQqF,OAAQI,IAAQ,GAExE,CAACA,KAEJ,IAAA9K,YAAU,KACF8K,GACA2C,GACI,IAAAC,cAAa,CACTxQ,UAAW4N,EAAK3N,aAAeG,GAAewN,EAAK3N,cAAgB+P,KAAKS,MACxEC,KAAM,aACN5S,KAAM,WACNH,IAAKiQ,EAAKjQ,M,GAIvB,CAACiQ,IAGA,oCACc,SAAThJ,OACWhF,IAARjC,EACI,kBAAC+R,GAAW,CAACD,SAAUY,QAAAA,EAAS,IAAK1S,IAAKA,EAAK2S,UAAWA,SAAAA,IAE1D,qCAGJ,kBAAC,GAAU,CACPtE,MAAO,C,+BAEI4D,IAAc,CACjBe,KAAMhT,EACN6Q,SAAU,eAGlBJ,gBAAiB,KACfzN,GAEM,kBAAC,GAAe,CAACJ,QAAS,IAAMI,EAAK,IACjC,kBAAC+O,GAAW,CAACD,SAAUY,QAAAA,EAAS,IAAK1S,IAAKA,EAAK2S,UAAWA,SAAAA,OAO7EvD,GAAoB,SAATnI,EACR,kBAACuG,EAAc,CACXC,aAAc,GACdC,aAAc4B,EACd1B,OAAQ,mCACRD,UAAU,EACVI,gBAAkBM,IACV0C,MAAMC,QAAQ3C,SAAuBpM,IAAboM,EAAM,IAC9BpD,GAAS,QAA+CT,EAAQ,CAAEyF,KAAM5B,EAAM,K,EAGtFR,cAAe,KACX5C,EAAS,KAAO6B,MAAMC,QAAQ4C,eAAe,CAAEnF,SAAQtG,SAAS,IAAQ,EAE5E4J,YAAa,KACT7C,EAAS,KAAO6B,MAAMC,QAAQ4C,eAAe,CAAEnF,SAAQtG,SAAS,IAAS,QAEnEjC,IAATgO,EACG,kBAAC+B,GAAoB,KAChBhR,EAAKmC,cAAc,CAAErB,GAAI,iCAG9B,kBAAC,EAAAmP,sBAAqB,CAClBvI,MAAO,mCACP1G,YAAa,yCACbkP,IAAK,uCACLtO,QAAS,KAAe,KAKpC,qCAGX,ECxJC,GAAa,UAAOiE,SAASC,iBAAiB,cAE9C,GAAU,OAAgC;;;;;;aAMlCrH,GAAUA,EAAMqS;EAGxB,GAA8B,CAChChQ,GAAI,EACJ6B,KAAM,GACNzB,MAAO,GACPlC,IAAK,GACL6Q,SAAU,2BACVqB,SAAU,GACVC,aAAc,GACd7P,aAAc,GACdX,KAAM,GACNxB,KAAM,IAGG,GAAkBiS,IAC3B,GAAIA,EAAK,CACL,MAAM/P,EAAYgQ,KAAKC,MAAMF,GAC7B,IAAKG,MAAMlQ,GACP,OAAO,IAAIgQ,KAAKhQ,GAAWmQ,UAAY,G,CAGzC,EAGGS,GAAgC,EACzC1K,SACAtB,OACAyL,YAOA,MAAM,OAAElI,GAAWjC,EACb0C,GAAW,UACXqE,GAAW,IAAAzP,cAAa0P,GAA4B,KAAOzP,UAAUwP,SAASC,EAAO/E,IAAS,EAAAgF,cAC9FsC,EAAWY,QAAAA,EAAS,KACnBQ,EAAcC,IAAmB,IAAA/R,eAA6Ba,GAC/DyM,GAAM,IAAA0E,QAAuB,MAC7BC,GAAkB,IAAArK,UACpB,IACIT,EAAOoG,QAAQ2E,OACT,IACO/K,EAAOoG,QAAQ2E,OAAO/R,KAAI,CAACgS,EAAO9R,IAC1B,OAAP,wBACO,IAAc,CACjBK,GAAIyR,EAAMtD,KAAOsD,EAAMtD,KAAKnO,GAAKL,EACjCoP,SAAU0C,EAAMtD,KAAOsD,EAAMtD,KAAKY,SAAW,GAAeA,SAC5DmC,MAAM,IAAAH,cAAa,CACf1S,KAAM,WACNH,IAAKuT,EAAMtD,KAAOsD,EAAMtD,KAAKjQ,IAAM,GACnC+S,KAAM,aACN1Q,UACIkR,EAAMtD,MAAQsD,EAAMtD,KAAK3N,aACnB,GAAeiR,EAAMtD,KAAK3N,cAC1B+P,KAAKS,aAK/B,IACV,CAACvK,EAAOoG,QAAQ2E,SAGdA,GAAS,IAAAtK,UACX,SAC8B/G,IAA1BsG,EAAOoG,QAAQ2E,OACT,IACO/K,EAAOoG,QAAQ2E,OAAO/R,KAAKgS,GACtBA,EAAMtD,KACC,OAAP,wBACOsD,GAAK,CACRvT,KAAK,IAAA6S,cAAa,CACdxQ,UAAWkR,EAAMtD,KAAK3N,aAChB,GAAeiR,EAAMtD,KAAK3N,cAC1B+P,KAAKS,MACX3S,KAAM,OAAO+S,GAAgBA,EAAepB,EAAWoB,EAAepB,IACtEiB,KAAM,aACN/S,IAAKuT,EAAMtD,KAAKjQ,QAIjB,OAAP,wBACOuT,GAAK,CACRvT,IAAK,QAKrB,IACV,CAACuI,EAAOoG,QAAQ2E,OAAQJ,EAAcpB,KAG1C,IAAA3M,YAAU,KACFmK,GAAqB,SAATrI,GACZgE,EAAS,KAAa6B,MAAMC,QAAQF,eAAe,CAAErC,SAAQtK,KAAMqI,EAAOrI,O,GAG/E,CAACoP,KAEJ,IAAAnK,YAAU,KACN,MAAMqO,EAAe,KACb9E,EAAIH,SACJ4E,EAAgBzE,EAAIH,QAAUG,EAAIH,QAAQkF,YAAc3B,E,EAKhE,OAFAxB,OAAOoD,iBAAiB,SAAUF,GAE3B,KACHlD,OAAOqD,oBAAoB,SAAUH,EAAa,CACrD,GAEF,CAAC9E,KAEJ,IAAAvJ,YAAU,KACNgO,EAAgBzE,EAAIH,QAAUG,EAAIH,QAAQkF,YAAc3B,EAAS,GAElE,CAACpD,KAEJ,IAAAvJ,YAAU,KACN8F,EACI,KAAO6B,MAAMC,QAAQ4C,eAAe,CAChCnF,SACAqF,OAAQtH,EAAOoG,QAAQ2E,QAA2C,IAAjC/K,EAAOoG,QAAQ2E,OAAO3Q,SAE9D,GAEF,CAAC4F,EAAOoG,QAAQ2E,SAEnB,MAAMM,GAAa,IAAA5K,UACf,IAAe,SAAT/B,GAAmB8J,MAAMC,QAAQzI,EAAOoG,QAAQ2E,SAA4C,IAAjC/K,EAAOoG,QAAQ2E,OAAO3Q,QACvF,CAAC4F,EAAOoG,QAAQ2E,OAAQrM,IAGtB4M,GAAe,IAAArP,cAAY,KAC7ByG,EACI,KAAa6B,MAAMC,QAAQF,eAAe,CACtCrC,OAAQjC,EAAOiC,OACftK,KAAMqI,EAAOrI,OAEpB,GACF,CAAC+K,EAAU1C,EAAOiC,OAAQjC,EAAOrI,OAGpC,YAAqB+B,IAAjBiR,EACO,yBAAKxE,IAAKA,EAAKoF,MAAO,CAAEpB,MAAO,UAItC,kBAAC,GAAO,CAACZ,SAAUoB,GAAgBA,EAAepB,EAAWoB,EAAepB,GACxE,kBAAC,GAAU,CAACzD,MAAOgF,EAAiB5C,gBAAiB,KAC/CzN,I,QACE,OACI,kBAAC,EAAA+Q,gBAAe,CACZT,OAAQA,EACRxB,SAAUoB,GAAgBA,EAAepB,EAAWoB,EAAepB,EACnEkC,QAA+B,QAAtB,EAAAzL,EAAOoG,QAAQqF,eAAO,SAC/BC,KAAyB,QAAnB,EAAA1L,EAAOoG,QAAQsF,YAAI,SACzBC,QAAS,EACTC,aAAe1S,IACX,GAAa,SAATwF,GACA,GAAIsB,EAAOoG,QAAQ2E,OAAQ,CACvB,MAAMC,EAAQhL,EAAOoG,QAAQ2E,OAAO7R,GAChC8R,GAASA,EAAMtD,MACfjN,EAAKuQ,EAAMtD,KAAKnO,G,OAIxBmJ,EAAS,KAAa6B,MAAMC,QAAQF,eAAe,CAAErC,SAAQtK,KAAMqI,EAAOrI,O,GAIzF,IAGR0T,EACG,kBAAC,EAAA3C,sBAAqB,CAClBvI,MAAO,oCACP1G,YAAa,0CACbkP,IAAK,uCACLtO,QAASiR,IAGb,qCAGX,ECtMCO,GAAoB,UAAOvN,SAASC,iBAAiB,qBAMrDuN,GAAiB,OAAU;;;;;;;;EAUpBC,GAA8B,EACvC/L,SACAtB,WAMA,MAAM,OAAEuD,GAAWjC,EACb7I,GAAQ,IAAAC,aACR,KAAE+E,GAAS6D,EAAOoG,QAClB1D,GAAW,IAAAoE,eACXC,GAAW,IAAAzP,cAAa0P,GAA4B,KAAOzP,UAAUwP,SAASC,EAAO/E,IAAS,EAAAgF,cAC9F+E,GAAS,IAAA1U,cAAa0P,IAA2B,MAAC,OAAiD,QAAjD,OAAOzP,UAAU0U,kBAAkBjF,EAAO/E,UAAO,eAAEiK,IAAI,IACzGxG,GAAQ,IAAApO,aAAY,KAAOC,UAAUoO,aACrCwG,GAAuB,IAAA7U,aAAY,KAAQC,UAAU6U,4BACrDC,GAAS,IAAA/U,aAAY,KAAMC,UAAU+U,WAErC7T,GAAO,IAAAC,WAEPwO,GAAU,IAAAjL,cACXkL,IACGzE,EAAS,KAAM8B,QAAQ5I,MAAM,CAAEuE,MAAOgH,QAAAA,EAAW1O,EAAKmC,cAAc,CAAErB,GAAI,mBAAqB,GAEnG,CAACmJ,EAAUjK,KAGf,IAAAmE,YAAU,KACN8F,EACI,KAAO6B,MAAMC,QAAQ4C,eAAe,CAChCnF,SACAqF,OAAQnL,GAAwB,IAAhBA,EAAK/B,SAE5B,GAEF,CAAC+B,IAEJ,MAAMoQ,GAAsB,IAAA9L,UAAQ,KACzB,IAAA+L,2BAA0BH,EAAQlV,EAAO+P,IACjD,CAACmF,EAAQnF,EAAS/P,IAGrB,OAAI6U,EACO,qCAIP,kBAACF,GAAc,KACX,kBAACD,GAAiB,CACdY,UAAW1F,EACX5K,KAAMA,QAAAA,EAAQ,GACduJ,MAAgB,SAAThH,QAA6BhF,IAAVgM,EAAsBA,EAAQ,GACxDyG,qBACa,SAATzN,GAAmByN,EACb,CACIO,iBAAkB,4DAClBC,cAAeR,EACfS,gBAAiBL,QAErB7S,EAEVgF,KAAMA,EACNG,SAAW1C,IACPuG,GAAS,QAA8CT,EAAQ,CAAE9F,SAAQ,IAIxF,ECnFC0Q,GAAqB,UAAOvO,SAASC,iBAAiB,sBAItD,GAAiB,OAAU;;;;;;EAQ3BuO,GAAc,OAAU;;;;;;wBAML5V,GAAUA,EAAMC,MAAMU,MAAMkV;EAG/CC,GAAO,UAAoC;;;;;;;eAOjC9V,GAAWA,EAAM6P,SAAW,MAAQ;wBAC3B7P,GAAWA,EAAM6P,SAAW7P,EAAMC,MAAMU,MAAMkV,MAAQ7V,EAAMC,MAAMU,MAAMM;;4BAEpEjB,GAAUA,EAAMC,MAAMU,MAAMkV;;EAI5CE,GAA+B,EACxCjN,SACA6G,UACAnI,WAMA,MAAM,OAAEuD,GAAWjC,GACb,KAAE7D,EAAI,MAAEtE,EAAK,QAAEqV,GAAYlN,EAAOoG,QAClC1D,GAAW,IAAAoE,eACXC,GAAW,IAAAzP,cAAa0P,GAA4B,KAAOzP,UAAUwP,SAASC,EAAO/E,IAAS,EAAAgF,cAYpG,OAVA,IAAArK,YAAU,KACN8F,EACI,KAAO6B,MAAMC,QAAQ4C,eAAe,CAChCnF,SACAqF,OAAQnL,GAAwB,IAAhBA,EAAK/B,SAE5B,GAEF,CAAC+B,IAGA,kBAAC,GAAc,KACX,kBAAC0Q,GAAkB,CACf1Q,KAAMA,EACNtE,MAAOA,EACPqV,QAASA,EACTT,UAAW1F,EACXF,QAASA,EACTnI,KAAMA,EACNG,SAAW1C,IACPuG,GAAS,QAA+CT,EAAQ,CAAE9F,SAAQ,IAGjF4K,GAAqB,SAATrI,EACT,kBAACyO,GAAO,CACJD,QAASA,EACT7S,QAAU6S,IACNxK,GAAS,QAA+CT,EAAQ,CAAEiL,YAAW,IAIrF,qCAGX,EAGQC,GAAU,EAAGD,UAAU,KAAM7S,aAGlC,kBAACyS,GAAW,KAFQ,CAAC,KAAM,KAAM,KAAM,MAG5B9T,KAAI,CAACoU,EAAWlU,IACnB,kBAAC8T,GAAI,CAAC1T,IAAKJ,EAAO6N,SAAUmG,IAAYE,EAAW/S,QAAS,IAAMA,EAAQ+S,IACrEA,MC1FfC,GAAkBC,EAAEC,MAAMjP,SAASC,iBAAiB,mBACpDiP,GAAwBF,EAAEC,MAAMjP,SAASC,iBAAiB,yBAC1DkP,GAAaH,EAAEC,MAAMjP,SAASC,iBAAiB,cAa/CmP,IAX2B,OAAgC;;;;;cAKlDxW,GAAWA,EAAMyW,OAAS,aAAazW,EAAMC,MAAMU,MAAM6F,QAAU;;;;EAMtD,OAAU;;;;wBAIbxG,GAAUA,EAAMC,MAAMU,MAAMkV;;;;;;;;;;;;;GAc/Ca,GAAS,OAAU;;;;;;;;EAUnBC,GAAmB,OAAU;;;;;wBAKX,EAAG1W,WAAYA,EAAMU,MAAMM;wBAC1BjB,GAAUA,EAAMC,MAAMU,MAAM6F;EAGxCoQ,GAAoB,OAAgC;;;qBAG3C5W,GAAWA,EAAMyW,OAAS,aAAazW,EAAMC,MAAMU,MAAMkV,QAAU;EAc5EgB,GAA4B,EACrC/N,SACAgO,YACAnH,UACAnI,OACAuP,YACAC,cACAC,WACAC,qBAEA,MAAM3V,GAAO,IAAAC,YACP,OAAEuJ,EAAQmE,QAASiI,GAAkBrO,EACrC0C,GAAW,IAAAoE,gBAEVwH,EAASC,IAAc,IAAA1V,aAEvB2V,EAAmBC,IAAsB,IAAA5V,WAAS,IAElD6M,EAAOgJ,IAAY,IAAA7V,aACnB8V,EAAcC,IAAmB,IAAA/V,WAAS,GAE3CgW,GAAgB,IAAAvX,cAAa0P,GAA4B,KAAOzP,UAAUuX,aAAa9H,EAAO/E,KAC9F8M,GAAc,IAAAzX,aAAY,KAAYC,UAAUwM,KAEhDmD,GAAU,IAAAjL,cACXkL,IACGzE,EAAS,KAAM8B,QAAQ5I,MAAM,CAAEuE,MAAOgH,QAAAA,EAAW1O,EAAKmC,cAAc,CAAErB,GAAI,mBAAqB,GAEnG,CAACmJ,EAAUjK,IAOTuW,EAAmB5I,IACrB1D,EAAS,KAAO6B,MAAMC,QAAQyK,oBAAoB,OAAD,UAAM7I,IAAW,EA0ChE8I,EAAqB,KACvBxM,EAAS,KAAO6B,MAAMC,QAAQ2K,YAAY,CAAElN,YACxCkM,GACAA,EAASlM,GAEbwM,GAAmB,EAAM,EAGvBW,EAAmB1J,IACrBhD,EAAS,KAAa6B,MAAMC,QAAQC,kBACpC/B,EAAS,KAAO6B,MAAMC,QAAQkK,SAAS,CAAEhJ,WACzChD,EACI,KAAa6B,MAAMC,QAAQF,eAAe,CACtCrC,OAAQjC,EAAOiC,OACftK,KAAM,EAAAuH,YAAYG,YAEzB,EAkCL,OA/BA,IAAAzC,YAAU,K,MACN,MAAMyS,EAAwE,QAAlB,EAAArP,EAAOoG,QAAQkJ,WAAG,eAAEtW,KAAKC,I,UAAS,kDAC1FkD,KAAgB,QAAV,EAAAlD,EAAKU,aAAK,QAAI,GACpB4V,QAAmB,QAAV,EAAAtW,EAAKuW,aAAK,UACfvW,EAAKwW,OAAS,CACdA,MAAOxW,EAAKwW,QAEZxW,EAAKyW,MAAQ,CAAEA,KAAe,QAAT,EAAAzW,EAAKyW,YAAI,aAAIhW,IAClCT,EAAKM,IAAM,CAAEA,GAAIN,EAAKM,GAAI+O,SAAU,aAC1C,IAEFiG,EAAWc,EAAa,GACzB,CAACrP,EAAOoG,QAAQkJ,IAAKjB,KAExB,IAAAzR,YAAU,KACF8I,GAASiJ,IAETC,GAAgB,GACT,YACFlJ,QACApJ,MAAMqT,IACHjB,EAASiB,EAAIlT,QACbmS,GAAgB,EAAM,IAEzBlS,OAAOkT,IACJ1I,EAAQ0I,EAAErT,SAAS,IAGnB,GACb,CAAC2K,EAASxB,EAAOiJ,IAEP,SAATjQ,GACImI,EAEI,oCACI,kBAACgH,GAAgB,KACb,kBAACD,GAAM,KACH,kBAACE,GAAiB,CAACH,QAAM,GACrB,+BAAQlV,EAAKmC,cAAc,CAAErB,GAAI,oCACjC,kBAAC,EAAAsW,gBAAe,CACZtW,GAAId,EAAKmC,cAAc,CAAErB,GAAI,mCAC7BuW,UAAU,EACVC,YAAatX,EAAKmC,cAAc,CAAErB,GAAI,mCACtC6B,KAAK,OACLoU,MAAOX,aAAa,EAAbA,EAAelV,MACtBkF,SAAWmR,IACP,MAAM,MAAER,GAAUQ,EAAM3W,OACxB2V,EAAgB,CAAE/M,SAAQtI,MAAO6V,GAAQ,EAE7CS,OAAQ,MACR9F,MAAM,UAGd,kBAACqD,GAAqB,CAClB9H,MAAOA,EACPzD,OAAQA,EACRmE,QAASiI,EACT6B,gBA3HX,CAACjO,EAAgBmE,KAC9B1D,GAAS,QAAoBT,EAAQmE,GAAS,EA2HtB4I,gBAAiBA,EACjBI,gBAAiBA,EACjBe,eAAgBjB,OAUxC,oCACKZ,GACG,yBAAKhV,IAAK0G,EAAOiC,OAAQsJ,MAAO,CAAEpB,MAAO,SACrC,kBAACkD,GAAe,CACZ1T,MAAOkV,aAAa,EAAbA,EAAelV,MACtBnB,MAAO,GACP4X,eAAgB9B,EAChB+B,YAAa,OAGbC,sBAAuB,CAACpX,EAAOqX,IA1I3B,EAAChX,EAAYL,EAAeqX,KAChD,IAAKvC,EAAW,OAEhB,MAeM5H,EAAU,CACZkJ,IAhB0CiB,aAAK,EAALA,EAAOvX,KAAKC,I,QAAS,8EAC/DU,MAAOV,EAAKkD,MACRlD,EAAKM,IAAM,CAAEA,GAAIN,EAAKM,KACtBN,EAAKwW,OAAS,CAAEA,MAAOxW,EAAKwW,QAC5BxW,EAAKqP,UAAY,CAAEkI,UAAWvX,EAAKqP,WACnCyG,GACA9V,EAAKsW,SAAW,CACZG,KAAM,CACFnW,GAAiB,QAAb,EAAS,QAAT,EAAAN,EAAKyW,YAAI,eAAEnW,UAAE,QAAIwV,EAAYxV,GACjCoQ,SAAU,OACVvO,KAAM,UAGdnC,EAAKsW,SAAW,CAAEC,MAAOvW,EAAKsW,SACpC,KAIF7M,GAAS,QAA4CnJ,EAAI6M,IAEzD,WACKqK,iBAAiB,CACdlX,GAAIyU,EACJ5S,KAAM,UACNsV,OAAQ3B,aAAW,EAAXA,EAAaxV,GACrB0I,OAAQ1I,EACRL,MAAOA,IAEVoD,MAAK,KACE8R,GAAgBA,GAAgB,IAEvC1R,OAAOiU,IACJzJ,EAAQyJ,EAAIxJ,QAAQ,GACtB,EAsGmDyJ,CAAgB5Q,EAAOiC,OAAQ/I,EAAOqX,KAElFtC,GACG,oCACI,kBAACP,GAAmB,KAChB,yBACInC,MAAO,CAAEsF,OAAQ,WACjBxW,QAAS,KACDqL,EACA0J,EAAgB1J,GAEhBwB,EAAQzO,EAAKmC,cAAc,CAAErB,GAAI,iB,GAGzC,kBAACkU,GAAU,CAAC7V,KAAK,KACZa,EAAKmC,cAAc,CAAErB,GAAI,+BAIjC2U,GACG,6BACI,kBAAC,EAAA1P,cAAa,CACVsC,SAAU,GACVzG,QAAS,IAAMoU,GAAmB,GAClC1N,KAAK,kBAO7B,kBAAC,EAAA+P,SAAQ,CACL7T,QAAS,CACL,CACIpF,MAAO,SACPsF,aAAc,IAAMsR,GAAmB,GACvCvR,SAAU,kBAAC,EAAA6C,iBAAgB,CAACxG,GAAI,mBAEpC,CACI1B,MAAO,SACPsF,aAAc+R,EACdhS,SAAU,kBAAC,EAAA6C,iBAAgB,CAACxG,GAAI,oBAGxCkB,KAAM+T,EACNjU,aAAc,IAAMkU,GAAmB,GACvC9U,MAAOlB,EAAKmC,cAAc,CAAErB,GAAI,mBAC/Bd,EAAKmC,cAAc,CAAErB,GAAI,mCAK7C,ECxTC,GAAc,UAAO+E,SAASC,iBAAiB,eAI/C,GAAS,UAAOD,SAASC,iBAAiB,UAoBnC,IAFU,OAAU,GAEF,OAAU;;;;;;;WAO7BrH,GAAUA,EAAMC,MAAM+D,MAAMM;GAG3B,GAAkB,OAAU;;;;;;;WAO7BtE,GAAUA,EAAMC,MAAM+D,MAAMM;aAC1BtE,GAAUA,EAAMC,MAAMU,MAAMC;;;wBAGjBZ,GAAUA,EAAMC,MAAMU,MAAMC;;4BAExBZ,GAAUA,EAAMC,MAAMU,MAAM6F;;;EAK5CqT,GAAoC,EAC7C9O,SACAxK,MACAe,QACA0J,iBACAC,qBACAC,qBACAC,gBACAC,oBACArB,mBAAmB,GACnBsB,oBACAC,oBACAC,yBACA/D,WAEA,MAAMjG,GAAO,IAAAC,WACPgK,GAAW,WACVC,EAA2BC,IAAgC,IAAA/J,WAAkB,IAC7EgK,EAAWC,IAAgB,IAAAjK,WAAkB,IAC7CkK,EAAgBC,IAAqB,IAAAnK,UAAmD,KACxFoK,EAAiBC,IAAsB,IAAArK,UAA8B,IAEtEoG,GAAa,IAAAwB,UAAQ,IAAM,KAAOxB,WAAW,EAAAC,YAAY8R,uBAAuB,KAEtF,IAAApU,YAAU,UACMlD,IAARjC,GAAiD,IAA5BwJ,EAAiB7G,QAA2C,IAA3B6I,EAAgB7I,SACtE0I,GAAa,GACb,eACKiB,IAAItM,EAAK,EAAAuM,OAAOC,MAChB3H,MAAMZ,IACHwH,EAAmBxH,EAASe,OAAOyH,OACnClB,EAAkBtH,EAASe,OAAO4E,KAAK,IAE1CgD,SAAQ,IAAMvB,GAAa,K,GAErC,CAACrL,EAAKwJ,EAAkBgC,KAE3B,IAAArG,YAAU,KACDnF,GACDyL,EAAmB,G,GAExB,CAACzL,IAEJ,MAAM6M,GAAiB,IAAArI,cAAY,KAC/ByG,EAAS,KAAa6B,MAAMC,QAAQC,kBACpCC,YACI,IACIhC,EAAS,KAAa6B,MAAMC,QAAQF,eAAe,CAAErC,SAAQtK,KAAM,EAAAuH,YAAY8R,yBACnF,EACH,GACF,CAACtO,EAAUT,KAEd,IAAArF,YAAU,KACO,SAAT8B,GAA4B,YAATA,GACnBgE,EAAS,KAAa6B,MAAMC,QAAQC,iB,GAEzC,CAAC/F,EAAMgE,KAEV,IAAA9F,YAAU,KACD+F,GAA8BlL,GAAgB,SAATiH,IACtC4F,IACA1B,GAA6B,G,GAElC,CAACF,EAAUT,EAAQU,EAA2BlL,EAAK6M,EAAgB5F,IAEtE,MAAMwC,GAAU,IAAAT,UACZ,IAAMO,EAAkBC,EAAkBgC,IAC1C,CAAChC,EAAkBgC,IAGvB,OAAgC,IAA5BhC,EAAiB7G,QAAiByI,GAAsB,SAATnE,EAmB5CmE,EACH,kBAAC,GAAe,KACZ,kBAAC,GAAM,OAGX,oCACMA,GAAuC,IAA1BE,EAAe3I,OAM1B,kBAAC,GAAW,CACRuK,KAAM5B,EACN7B,QAASA,EACT1I,MAAOA,EACP0J,eAAgBA,EAChBC,mBAAoBA,EACpBC,mBAAoBA,EACpBC,cAAeA,EACfC,kBAAmBA,EACnBC,kBAAmBA,EACnBtB,iBAAkBA,EAClBuB,kBAAmBA,EACnBC,uBAAwBA,IAjB5B,kBAAC,GAAe,KACZ,yBAAKxC,IAAK,sBAAsB,EAAAf,YAAY8R,2BAA4BnX,IAAI,KAC5E,kBAAC,EAAAkG,iBAAgB,CAACxG,GAAI,kCAkBpB,SAATmF,EACG,kBAAC,GAAe,CAACrE,QAASiK,GACtB,kBAAC,EAAAQ,QAAO,CACJC,OAAQ,GAAGtM,EAAKmC,cAAc,CAAErB,GAAI,4BAA6Bd,EAAKmC,cAAc,CAChFrB,GAAI0F,EAAWkB,iBAK3B,sCArDJ,oCACI,kBAAC,GAAe,CAAC9F,QAASiK,GACtB,yBAAKrE,IAAK,sBAAsB,EAAAf,YAAY8R,2BAA4BnX,IAAI,KAC5E,kBAAC,EAAAkG,iBAAgB,CAACxG,GAAI0F,EAAWkB,QACjC,kBAAC,EAAA9B,UAAS,CAAC8B,MAAM,qBAErB,kBAAC,GAAe,CAAC9F,QAASiK,GACtB,kBAAC,EAAAQ,QAAO,CACJC,OAAQ,GAAGtM,EAAKmC,cAAc,CAAErB,GAAI,4BAA6Bd,EAAKmC,cAAc,CAChFrB,GAAI0F,EAAWkB,iBA+CtC,EC7KQ8Q,GAAS,UAAa;eACnB/Z,GAAUA,EAAMC,MAAM+D,MAAMM;EAG/B0V,GAAS,OAAU;eAChBha,GAAUA,EAAMC,MAAM+D,MAAMM;;;EAK/B2V,GAAe,EAAG5X,KAAI6B,OAAM6G,aACrC,MAAMS,GAAW,IAAAoE,eACXrO,GAAO,IAAAC,YACNoG,EAAQsS,IAAa,IAAAvY,WAAkB,GAW9C,OACI,oCACI,kBAACoY,GAAM,CAAC5W,QAAS,IAAM+W,GAAU,IAC7B,kBAAC,EAAA5X,WAAU,CAACC,YAAahB,EAAKmC,cAAc,CAAErB,GAAI,0BAC9C,kBAAC,EAAA7B,QAAO,CAACC,KAAK,aAAaE,MAAM,aAGxCiH,GACG,kBAAC,EAAAxE,eAAc,CAACE,2BAA2B,EAAMC,KAAMqE,EAAQvE,aAAc,IAAM6W,GAAU,IACzF,kBAAC,EAAAzW,gBAAe,CACZE,SAAU,SACVlB,MAAOlB,EAAKmC,cAAc,CAAErB,GAAI,yBAChCuB,iBAAkB,IAAMsW,GAAU,IACjC3Y,EAAKmC,cAAc,CAAErB,GAAI,uCAE9B,kBAAC2X,GAAM,KACH,kBAAC,EAAA7S,UAAS,CAAC8B,MAAO1H,EAAKmC,cAAc,CAAErB,GAAI,mBAAqBc,QAzB/D,KACjB,WACKgX,aAAa,CAAE9X,KAAI6B,OAAM6G,WACzB3F,MAAK,KACFoG,EAAS,KAAO6B,MAAMC,QAAQ2K,YAAY,CAAElN,WAAU,IAEzDvF,OAAM,IAAMgG,EAAS,KAAM8B,QAAQ5I,MAAM,CAAEuE,MAAO,4BAA4B,MAwBtF,EC7CQ,GAAS,OAAU;;;;4BAIHjJ,GAAUA,EAAMC,MAAMU,MAAMkV;EAG5C,GAAS,UAAa;eACnB7V,GAAUA,EAAMC,MAAM+D,MAAMM;;;;;wBAKnBtE,GAAUA,EAAMC,MAAMU,MAAMM;;4BAExBjB,GAAUA,EAAMC,MAAMU,MAAMkV;;EAI5CuE,GAA0B,EACnC/X,KACA6B,OACAzD,OACAsK,aAOA,MAAMxJ,GAAO,IAAAC,WACPgK,GAAW,IAAAoE,eACXyK,GAAe,IAAAja,cAChB0P,GAA4B,KAAOzP,UAAUia,mBAAmBxK,EAAO/E,IACxE,EAAAgF,cAEEwK,GAAqB,IAAAna,cACtB0P,GAA4B,KAAOzP,UAAUma,yBAAyB1K,EAAO/E,IAC9E,EAAAgF,cAGE0K,GAAY,IAAAlR,UAAQ,IACf8Q,GAAgBE,GAAsBA,EAAmBG,QACjE,CAACL,EAAcE,IAEZI,GAAgB,IAAA5V,cAAY,KAC9ByG,EACI,KAAa6B,MAAMC,QAAQF,eAAe,CACtCrC,SACAtK,OACAma,OAAS1L,IACDmL,GAAgBA,EAAahY,IAAMgY,EAAanW,OAAQ,IAAA2W,6BAA4B3L,IACpF,WACK4L,aAAa,CACVzY,GAAIgY,EAAahY,GACjB6B,KAAMmW,EAAanW,KACnB6G,SACAmE,UACA6L,IAAI,IAEPvV,OAAM,IAAMgG,EAAS,KAAM8B,QAAQ5I,MAAM,CAAEuE,MAAO,4B,IAItE,GACF,CAAC8B,EAAQS,EAAU/K,EAAM4Z,IAE5B,OAAOI,EACH,kBAAC,GAAM,KACH,kBAAC,GAAM,CAACtX,QAASwX,GAAgBpZ,EAAKmC,cAAc,CAAErB,GAAI,uBAC1D,kBAAC4X,GAAY,CAAC5X,GAAIA,EAAI6B,KAAMA,EAAM6G,OAAQA,KAG9C,oCACH,ECvEQiQ,GAAe,OAAU;eACtBhb,GAAUA,EAAMC,MAAM+D,MAAMM;EAG/B2W,GAAU,KAAQ;;aAEjBjb,GAAUA,EAAMC,MAAMU,MAAMua;EAG7BC,GAAqB,OAAU;;;;EAQ/BC,GAA+B,EACxC5T,OACAuD,SACAsQ,eAEA,MAAM9Z,GAAO,IAAAC,WACPgK,GAAW,IAAAoE,eAEXyK,GAAe,IAAAja,cAChB0P,GAA4B,KAAOzP,UAAUia,mBAAmBxK,EAAO/E,IACxE,EAAAgF,cAGEwK,GAAqB,IAAAna,cACtB0P,GAA4B,KAAOzP,UAAUma,yBAAyB1K,EAAO/E,IAC9E,EAAAgF,cAGE0K,GAAY,IAAAlR,UAAQ,IACf8Q,GAAgBE,GAAsBA,EAAmBG,QACjE,CAACL,EAAcE,IAEZe,GAAgB,IAAAvW,cAAY,KAC9B,GAAa,SAATyC,IAAoBiT,EACpB,OAEJ,KAAK,IAAAc,wCAAuClB,GACxC,OAGJ,MAAMnL,EAAU,CAAEmM,UAAWA,GAE7B,WACKP,aAAa,CACVzY,GAAIgY,EAAahY,GACjB6B,KAAMmW,EAAanW,KACnB6G,SACAmE,UACA6L,IAAI,IAEP3V,MAAK,IAAMoG,EAAS,KAAO6B,MAAMC,QAAQwN,aAAa,CAAE/P,SAAQmE,eAChE1J,OAAM,IAAMgG,EAAS,KAAM8B,QAAQ5I,MAAM,CAAEuE,MAAO,4BAA4B,GACpF,CAACoS,EAAU7T,EAAMuD,EAAQ0P,EAAWJ,EAAc7O,IAErD,OACI,kBAACwP,GAAY,KACT,kBAACG,GAAkB,KACf,kBAACF,GAAO,CAAC9X,QAASmY,GAAgB/Z,EAAKmC,cAAc,CAAErB,GAAI,8BAGtE,EC/DQmZ,GAA2B,OAAU;;;;;EAOrCC,GAAyB,OAAU;;;;;;;;EAenCC,GAA2B,EACpC5S,SACAtB,WAMA,MAAMgE,GAAW,IAAAoE,gBACX,MAAEtO,EAAK,WAAEqa,EAAU,QAAEC,EAAO,SAAEP,GAAavS,EAAOoG,SACjD1K,EAAUK,IAAe,IAAAlD,UAAiC,CAC7Dka,WAAY,EACZC,kBAAmB,GACnBC,oBAAqB,GACrBC,mBAAoB,EACpBC,qBAAsB,KAEnBC,EAAmBC,IAAwB,IAAAxa,WAAkB,IAC7Dya,IAAmB,IAAAza,UAA0B,IAAI0a,iBAClDpN,GAAM,IAAA0E,QAAwByI,GAE9B/B,GAAe,IAAAja,cAChB0P,GAA4B,KAAOzP,UAAUia,mBAAmBxK,EAAOhH,EAAOiC,SAC/E,EAAAgF,cAGEuM,GAAQ,IAAAlc,cACT0P,GAA4B,KAAOzP,UAAUkc,wBAAwBzM,EAAOhH,EAAOiC,SACpF,EAAAgF,cAMEyM,GAAc,IAAAzX,cAChB,IAAMyG,EAAS,KAAM8B,QAAQ5I,MAAM,CAAEuE,MAAO,4BAC5C,CAACuC,IAGCiR,GAAuB,IAAAlT,UAAQ,IACzBqS,GAAWP,GAAsB,SAAT7T,GACjC,CAACoU,EAASP,EAAU7T,IAEjBkV,GAAsB,IAAA3X,cAAY,KAChC0X,KAGC,IAAAlB,wCAAuClB,IAK5C8B,GAAqB,GACrB,WACKQ,eAAe,CAAEta,GAAIua,OAAOvC,EAAahY,IAAK6B,KAAMmW,EAAanW,KAAM6G,OAAQjC,EAAOiC,SACtFvF,MAAMgX,GACNrP,SAAQ,IAAMgP,GAAqB,MARpCK,IAQ2C,GAChD,CAACnC,EAAcvR,EAAQ0T,EAAaC,IAEjCI,GAAgB,IAAA9X,cACjB+X,IACG,GAAIL,EACA,OAEJ,KAAK,IAAAlB,wCAAuClB,GAExC,YADAmC,IAIJL,GAAqB,GACrB,MAAMY,EAAU,CACZ1a,GAAIua,OAAOvC,EAAahY,IACxB6B,KAAMmW,EAAanW,KACnB6G,OAAQjC,EAAOiC,OACfuN,MAAOwE,GAEX,KAAK,IAAAE,qCAAoCD,GAGrC,OAFAZ,GAAqB,QACrB3Q,EAAS,KAAM8B,QAAQ5I,MAAM,CAAEuE,MAAO,mCAG1C,WACKgU,gBAAgBF,EAAS9N,EAAIH,QAAQoO,QACrC1X,MAAMgX,GACNrP,SAAQ,IAAMgP,GAAqB,IAAO,GAEnD,CAAC9B,EAAc7O,EAAU1C,EAAQ0T,EAAaC,IAG5CU,GAAgB,IAAApY,cAClB,CAAC1C,EAAY6B,EAAc6G,KACV,SAATvD,IAGAlG,GAASqa,GAAcnX,EAASwX,oBAAsBL,EACtDnQ,EAAS,KAAM8B,QAAQ5I,MAAM,CAAEuE,MAAO,0CAI1C,WACKmU,oBAAoB,CAAE/a,KAAI6B,OAAM6G,UAAUkE,EAAIH,QAAQoO,QACtD9X,MAAMZ,KACC,IAAA6Y,8BAA6B7Y,EAASe,SACtCV,EAAYL,EAASe,O,IAG5BC,OAAOiU,IAASA,EAAI6D,SAAWd,IAAY,GAEpD,CAAChR,EAAUhH,EAASwX,mBAAoB1a,EAAOqa,EAAYa,EAAahV,IAiC5E,OA9BA,IAAA9B,YAAU,IACC,KACCuJ,GAAOA,EAAIH,SACXG,EAAIH,QAAQyO,O,GAGrB,KAEH,IAAA7X,YAAU,MACD,IAAA6V,wCAAuClB,IAI5C8C,EAAc9C,EAAahY,GAAIgY,EAAanW,KAAM4E,EAAOiC,OAAO,GACjE,CAACoS,EAAe9C,EAAcvR,KAEjC,IAAApD,YAAU,KACN,IAAK4L,MAAMC,QAAQ+K,GACf,OAEJ,MAAMkB,EAASlB,EAAMmB,IAAI,GACpBD,IAIDA,EAAOE,OAAOrb,KAAOua,OAAOvC,aAAY,EAAZA,EAAchY,KAAOmb,EAAOzS,SAAWjC,EAAOiC,QAAWmR,GACrFiB,EAAcK,EAAOE,OAAOrb,GAAImb,EAAOE,OAAOxZ,KAAM4E,EAAOiC,Q,GAEhE,CAACuR,EAAOjC,EAAc8C,EAAerU,EAAQoT,IAG5C,kBAAC,EAAAyB,WAAU,CACPC,MAAO,MAEH,QAAY9U,EAAOiC,OAAO,GAE9B,kBAACyQ,GAAwB,KACrB,kBAAC,EAAAqC,kBAAiB,CACdvc,MAAOA,EACPqa,WAAYA,EACZG,kBAAmBtX,EAASsX,kBAC5BC,oBAAqBvX,EAASuX,oBAC9BF,UAAWrX,EAASqX,UACpBG,mBAAoBxX,aAAQ,EAARA,EAAUwX,mBAC9BC,qBAAsBzX,aAAQ,EAARA,EAAUyX,qBAChCZ,SAAUO,GAAWP,EACrByC,qBA9Ha,IAA8B,IAAvBtZ,EAASqX,UAAkBa,IAAwBG,EAAc,GA+HrFkB,uBA9He,IAA8B,IAAvBvZ,EAASqX,UAAkBa,IAAwBG,EAAc,KAgI1FX,GACG,kBAACT,GAAsB,KACnB,kBAAC,EAAArV,UAAS,CAAC1F,KAAM,OAGxBkb,IAAYP,GACT,kBAACD,GAA4B,CAAC5T,KAAMA,EAAMuD,OAAQjC,EAAOiC,OAAQsQ,SAAUA,KAE9E,IAAAE,wCAAuClB,IACpC,kBAACD,GAAuB,CACpB/X,GAAIgY,EAAahY,GACjB6B,KAAMmW,EAAanW,KACnB6G,OAAQjC,EAAOiC,OACftK,KAAMqI,EAAOrI,QAKhC,EClMQud,GAAqB,OAAU;;;;EAM/BC,GAAqB,OAAU;iBAC1Bje,GAAUA,EAAMC,MAAM+D,MAAMM;+BACdtE,GAAUA,EAAMC,MAAMU,MAAMkV;EAG/CqI,GAAiB,OAAU;eACxBle,GAAUA,EAAMC,MAAM+D,MAAMM;+BACZtE,GAAUA,EAAMC,MAAMU,MAAMkV;EAkB/CsI,GAAgB,EACzBrV,SACAgO,YACA7D,QACAtD,WAAU,EACVnI,OAAO,OACPuP,YACAC,cACAE,iBACAD,WACAmH,6BAcA,MAAM,KAAE3d,GAASqI,EAEjB,OAAI,IAAAuV,+BAA8BvV,GACvB,kBAAC+I,GAA6B,CAAC/I,OAAQA,EAAQ6G,QAASA,EAASnI,KAAMA,KACvE,IAAA8W,gCAA+BxV,GAC/B,kBAACsJ,GAA8B,CAACtJ,OAAQA,EAAQ6G,QAASA,EAASnI,KAAMA,KACxE,IAAA+W,mCAAkCzV,GAClC,kBAAC4G,EAAiC,CAAC5G,OAAQA,EAAQ6G,QAASA,EAASnI,KAAMA,KAC3E,IAAAgX,8BAA6B1V,GAC7B,kBAACkK,GAA4B,CAAClK,OAAQA,EAAQ6G,QAASA,EAASnI,KAAMA,KACtE,IAAAiX,+BAA8B3V,GAC9B,kBAAC0K,GAA6B,CAAC1K,OAAQA,EAAQ6G,QAASA,EAASnI,KAAMA,EAAMyL,MAAOA,QAAAA,EAAS,OAC7F,IAAAyL,8BAA6B5V,GAC7B,kBAACiN,GAA4B,CAACjN,OAAQA,EAAQ6G,QAASA,EAASnI,KAAMA,KACtE,IAAAmX,6BAA4B7V,GAC5B,kBAAC+L,GAA2B,CAAC/L,OAAQA,EAAQ6G,QAASA,EAASnI,KAAMA,KACrE,IAAAoX,sCAAqC9V,GACrC,kBAAC+Q,GAAiC,iBAAK/Q,EAAOoG,QAAO,CAAEnE,OAAQjC,EAAOiC,OAAQvD,KAAMA,MACpF,IAAAqX,iCAAgC/V,GAChC,kBAACgC,EAA4B,iBAAKhC,EAAOoG,QAAO,CAAEnE,OAAQjC,EAAOiC,OAAQvD,KAAMA,MAC/E,IAAAsX,2BAA0BhW,GAE7B,kBAAC+N,GAAyB,CACtB/N,OAAQA,EACRgO,UAAWA,EACXnH,QAASA,EACTnI,KAAMA,EACNuP,UAAWA,SAAAA,EACXC,YAAaA,SAAAA,EACbC,SAAUA,EACVC,eAAgBA,KAGjB,IAAA6H,0BAAyBjW,GAE5B,kBAACkV,GAAkB,KACL,SAATxW,EAAkB,kBAACwX,GAAe,CAACjU,OAAQjC,EAAOiC,SAAa,kBAACkU,GAAW,CAAClU,OAAQjC,EAAOiC,SAC5F,kBAAC2Q,GAAwB,CAAC5S,OAAQA,EAAQ6G,QAASA,EAASnI,KAAMA,KAInE4W,EAAyB,oCAAGA,EAAuB3d,IAAY,oC,0BAA0BA,E,MAI3Fwe,GAAc,EAAGlU,aAC1B,MAAM4M,GAAgB,IAAAvX,cACjB0P,GAA4B,KAAOzP,UAAUuX,aAAa9H,EAAO/E,IAClE,EAAAgF,cAEJ,OAAO,kBAACmO,GAAc,KAAEvG,aAAa,EAAbA,EAAelV,MAAuB,EAGrDuc,GAAkB,EAAGjU,a,MAC9B,MAAMxJ,GAAO,IAAAC,WACPmW,GAAgB,IAAAvX,cACjB0P,GAA4B,KAAOzP,UAAUuX,aAAa9H,EAAO/E,IAClE,EAAAgF,cAEEvE,GAAW,IAAAoE,gBACX,QAAEsP,EAAO,MAAEC,IAAU,IAAAC,SAAQ,CAC/BC,cAAe,CAAE5c,MAA2B,QAApB,EAAAkV,aAAa,EAAbA,EAAelV,aAAK,QAAI,IAChD6c,aAAc,QAUlB,OAPA,eAAgB,KACZ,MAAMC,EAAeJ,GAAOhV,IACxBqB,EAAS,KAAO6B,MAAMC,QAAQyK,oBAAoB,CAAEhN,SAAQtI,MAAO0H,EAAK1H,QAAS,IAErF,MAAO,IAAM8c,EAAaC,aAAa,GACxC,CAACL,EAAO3T,EAAUT,IAGjB,kBAACkT,GAAkB,KACf,kBAAC,EAAAwB,aAAY,CAAChf,KAAM,QAASye,QAASA,EAASrG,YAAatX,EAAKmC,cAAc,CAAErB,GAAI,mBAE5F,ECxJQqd,GAAiB,OAA+E;;;eAG7F1f,GAAUA,EAAM2f;wBACP3f,GAAUA,EAAM8R;sBAClB9R,GAAUA,EAAM4f;ECQ1BC,GAAc,EAAG9U,SAAQvD,WAClC,MAAMsY,GAAS,IAAA1f,cAAa0P,GAA4BA,EAAMhI,QAAQiY,IAAIhV,GAAQjC,OAAOgX,QAAQ,EAAA/P,cACjG,OACI,oCACK+P,aAAM,EAANA,EAAQhe,KAAI,CAACke,EAAOhe,IAEN,kBAACie,GAAK,CAAClV,OAAQiV,EAAO5d,IAAKJ,EAAOwF,KAAM,WAM9D,EAGCyY,GAAQ,EAAGlV,SAAQvD,WACrB,MAAMwY,GAAQ,IAAA5f,cAAa0P,GAA4BA,EAAMhI,QAAQgY,OAAO/U,KAC5E,MAAa,SAATvD,EAEI,kBAACkY,GAAc,CAACC,QAAS,EAAG7N,gBAAiB,cAAe8N,cAAe,QACtEI,EAAMlY,QAAQhG,KAAI,CAAC6V,EAAe3V,IAE3B,kBAACke,GAAW,CACR9d,IAAKJ,EACLme,QAASH,EAAMjV,OACfA,OAAQ4M,EAAc7O,OAAOiC,OAC7BvD,KAAM,YAS1B,kBAACkY,GAAc,CACXC,QAASK,EAAMI,QAAU,EAAI,EAC7BtO,gBAAiBkO,EAAMI,QAAU,uBAAyB,cAC1DR,cAAeI,EAAMK,OAAS,OAAS,OACtCL,EAAMlY,QAAQhG,KAAI,CAAC6V,EAAe3V,IAE3B,kBAACke,GAAW,CACR9d,IAAKJ,EACLme,QAASH,EAAMjV,OACfA,OAAQ4M,EAAc7O,OAAOiC,OAC7BvD,KAAM,WAKzB,EAMC0Y,GAAc,EAAGnV,SAAQoV,UAAS3Y,WACpC,MAAMgE,GAAW,IAAAoE,eACX+H,GAAgB,IAAAvX,cAAa0P,GAA4BA,EAAMhI,QAAQiY,IAAIhV,IAAS,EAAAgF,cACpFiQ,GAAQ,IAAA5f,cAAa0P,GAA4BA,EAAMhI,QAAQgY,OAAOK,KAE5E,OAAKxI,GAIAqI,GAIAA,EAAMtd,SAeE,SAAT8E,EAEI,yBAAK6M,MAAO,CAAE3R,SAAU,WAAY4d,IAAKN,EAAMtd,SAASoB,EAAGyc,KAAMP,EAAMtd,SAAS8d,IAC5E,kBAAC,GAAiB,CAACzV,OAAQA,EAAQjC,OAAQ6O,EAAenQ,KAAMA,EAAMmI,SAAS,KAMvF,kBAAC8Q,GAAgB,CACb/d,SAAU,CAAE8d,EAAGR,EAAMtd,SAAS8d,EAAG1c,EAAGkc,EAAMtd,SAASoB,GACnD4c,UAAYhe,KAEHsd,EAAMtd,UAAYsd,EAAMtd,SAAS8d,IAAM9d,EAAS8d,GAChDR,EAAMtd,UAAYsd,EAAMtd,SAASoB,IAAMpB,EAASoB,IAlB/C,CAACpB,IACf8I,EAAS,KAAO6B,MAAMC,QAAQqT,YAAY,CAAE5V,OAAQoV,EAASngB,MAAO,CAAE0C,cAAc,EAmBxEge,CAAUhe,E,GAGlB,kBAAC,EAAAke,oBAAmB,CAChBC,YAAa,IA/BL,EAAC9V,EAAgBtK,KAIjC+K,EAAS,KAAa6B,MAAMC,QAAQF,eAAe,CAAErC,SAAQtK,SAAQ,EA2B1CogB,CAAYlJ,EAAc7O,OAAOiC,OAAQ4M,EAAc7O,OAAOrI,OACjF,kBAAC,GAAiB,CAACsK,OAAQA,EAAQjC,OAAQ6O,EAAenQ,KAAMA,EAAMmI,SAAS,MA3ChF,oCA8CV,EAWQ8Q,GAAmB,EAC5B/d,WACAsD,WACA0a,gBAMA,MAAOI,EAAaC,GAAgB,cAAwB,IACrDC,EAAOC,GAAY,aAAuB,CAAET,EAAG,EAAG1c,EAAG,KACrDod,EAAOC,GAAY,aAAuB,CAAEX,EAAG,EAAG1c,EAAG,KACrDsd,EAAOC,GAAY,aAAuB,CAAEb,EAAG9d,EAAS8d,EAAG1c,EAAGpB,EAASoB,IAExEmL,EAAM,WAA6B,MAEnCqS,GAAkB,IAAAvc,cACnB+T,IACGiI,GAAa,GACT9R,EAAIH,UACJmS,EAAS,CAAET,EAAG1H,EAAMyI,YAAYC,QAAS1d,EAAGgV,EAAMyI,YAAYE,UAC9DN,EAAS,CAAEX,EAAGY,EAAMZ,EAAG1c,EAAGsd,EAAMtd,I,GAGxC,CAACsd,EAAMZ,EAAGY,EAAMtd,IAGd4d,EAAkB,iBACnB5I,IACG,GAAIgI,GAAe7R,EAAIH,QAAS,CAC5B,MAAM6S,EAAKT,EAAMV,GAAK1H,EAAM0I,QAAUR,EAAMR,GACtCoB,EAAKV,EAAMpd,GAAKgV,EAAM2I,QAAUT,EAAMld,GAE5Cud,EAAS,CAAEb,EAAGmB,EAAI7d,EAAG8d,G,IAG7B,CAACZ,EAAMR,EAAGQ,EAAMld,EAAGgd,EAAaI,EAAMV,EAAGU,EAAMpd,IAG7C+d,GAAgB,IAAA9c,cAAY,KAC9Bgc,GAAa,GACbL,EAAU,CAAEF,EAAGY,EAAMZ,EAAG1c,EAAGsd,EAAMtd,GAAI,GACtC,CAACsd,EAAMZ,EAAGY,EAAMtd,EAAG4c,IAWtB,OATA,eAAgB,KACZoB,SAAS7N,iBAAiB,YAAayN,GACvCI,SAAS7N,iBAAiB,UAAW4N,GAC9B,KACHC,SAAS5N,oBAAoB,YAAawN,GAC1CI,SAAS5N,oBAAoB,UAAW2N,EAAc,IAE3D,CAACH,EAAiBG,IAGjB,yBAAKxN,MAAO,CAAE3R,SAAU,WAAY4d,IAAKc,EAAMtd,EAAGyc,KAAMa,EAAMZ,GAAKvR,IAAKA,EAAK8S,YAAaT,GACrFtb,EAER,EC1LCI,GAAY,UAAOgB,SAASC,iBAAiB,UAStC2a,GAAc,EAAGvhB,OAAMsK,SAAQ4E,cACxC,MAAMG,GAAQ,IAAA1P,cAAa0P,GAA4B,KAAOzP,UAAU0U,kBAAkBjF,EAAO/E,KAC3FkX,EAAM,KAAOla,WAAWtH,GAE9B,OAAIqP,aAAK,EAALA,EAAOrL,SAEH,yBACI4P,MAAO,CACH3R,SAAU,WACVwf,MAAO,EACPpQ,gBAAiB,uBACjBqQ,QAAS,OACTC,KAAM,EACNC,eAAgB,SAChBC,WAAY,WAEhB,kBAAClc,GAAS,QAKlB0J,aAAK,EAALA,EAAOyS,OAEH,yBACIlO,MAAO,CACH3R,SAAU,WACVwf,MAAO,EACPpQ,gBAAiB,uBACjBqQ,QAAS,OACTC,KAAM,EACNC,eAAgB,SAChBC,WAAY,cAKvBxS,aAAK,EAALA,EAAO0S,cAAe7S,IAItBG,aAAK,EAALA,EAAO0S,cAAgB7S,EAHjB,qCAKH,yBACI0E,MAAO,CACH3R,SAAU,WACVwf,MAAO,EACPpQ,gBAAiB,sBACjBqQ,QAAS,OACTC,KAAM,EACNC,eAAgB,SAChBC,WAAY,WAEhB,yBAAKvZ,IAAKkZ,EAAIjZ,MAKd,EClBHyZ,IAhDe,OAAU;;;EAKV,OAAU;aACxBziB,GAAUA,EAAMC,MAAMU,MAAM+hB;;EAIZ,OAA8B;;;;;kBAbvC;;;qBACN;;;;aAwBD1iB,GAAWA,EAAMW,MAAQX,EAAMW,MAAQX,EAAMC,MAAM0iB,KAAKhiB;;;;;;;;;;;;;;EAgBlC,OAAU;;;;;;;;EAUd,OAAU;;GClB7BiiB,GAAoB,EAC7B7X,SACAsP,eACAvD,YACAhO,SACA6G,WAAU,EACVnI,OACAyL,QACA8D,YACAC,cACAE,iBACAD,WACAmH,6BAEA,MAAM5S,GAAW,IAAAoE,eACX+H,GAAgB,IAAAvX,cAAa0P,GAA4B,KAAOzP,UAAUuX,aAAa9H,EAAO/E,KAC9F8X,GAAa,IAAAziB,cAAa0P,GAA4BA,EAAMhI,QAAQgb,YAAY/X,IAAS,EAAAgF,cACzFgT,GAA0B,IAAA3iB,cAC3B0P,GAA4BA,EAAMhI,QAAQib,yBAC3C,EAAAhT,cAEEF,GAAW,IAAAzP,cACZ0P,GAA4BA,EAAMhI,QAAQib,0BAA4BhY,GACvE,EAAAgF,eAEE,IAAEd,EAAG,mBAAE+T,EAAkB,sBAAEC,IAA0B,SAAoB,GAmC/E,IAjCA,IAAAvd,YAAU,KACF2U,GACA7O,EAAS,KAAO6B,MAAMC,QAAQ4V,qBAAqB,CAAEnY,SAAQ2S,OAAQrD,I,GAG1E,KAEH,IAAA3U,YAAU,KACFoD,GAIA0C,EAAS,KAAO6B,MAAMC,QAAQ6V,eAAe,CAAEpY,SAAQjC,W,GAG5D,KAEH,IAAApD,YAAU,KACDsd,GACGjY,IAAWgY,GACXvX,EAAS,KAAO6B,MAAMC,QAAQ8V,oBAAoB,CAAErY,YAAQvI,I,GAIrE,CAACwgB,KAEJ,IAAAtd,YAAU,KACFsd,IAAuBnT,GACvBoT,EAAsBpT,E,GAG3B,CAACA,SAEkBrN,IAAlBmV,EACA,OAAO,uEAGX,MAAM0L,EAAU1L,EAAc7O,OAExB3F,EAAU,KACC,SAATqE,EACA4F,KAEI,IAAAiR,+BAA8BgF,IAErB,SADDA,EAAQnU,QAAQoU,aAEZD,EAAQnU,QAAQqU,iBAChB1S,OAAOtN,KAAK8f,EAAQnU,QAAQqU,gBAAgB9R,IAAK4R,EAAQnU,QAAQqU,gBAAgBphB,O,EAQnGiL,EAAiB,KACnB,GAAa,SAAT5F,EACA,OAKJ,MAAM,OAAEsB,GAAW6O,EACnBnM,EACI,KAAa6B,MAAMC,QAAQF,eAAe,CACtCrC,OAAQjC,EAAOiC,OACftK,KAAMqI,EAAOrI,OAEpB,EAGL,OAAIkP,GAAoB,SAATnI,EAEP,kBAACib,GAAgB,CACbxT,IAAKA,EACL9L,QAAS,KACL8f,GAAsB,GAClBJ,IACArX,EAAS,KAAO6B,MAAMC,QAAQkW,iBAAiB,CAAExhB,MAAO6gB,EAAW7gB,SACnEwJ,EAAS,KAAO6B,MAAMC,QAAQ8V,oBAAoB,CAAErY,Y,GAG5D,kBAACoT,GAAa,CACVlL,MAAOA,EACPnK,OAAQ6O,EAAc7O,OACtB6G,QAASA,EACTnI,KAAMA,EACNrE,QAASA,EACT8T,SAAUA,IAEd,kBAAC4I,GAAW,CAAC9U,OAAQA,EAAQvD,KAAMA,IACnC,kBAACwa,GAAW,CAACvhB,KAAMkX,EAAc7O,OAAOrI,KAAMsK,OAAQ4M,EAAc7O,OAAOiC,OAAQ4E,QAASA,KAMpG,kBAAC8S,GAAgB,CAACtf,QAASiK,GACvB,kBAAC+Q,GAAa,CACVrV,OAAM,+BACC6O,EAAc7O,QACb6O,EAAclV,OAAS,CACvBA,MAAOkV,EAAclV,QAG7BqU,UAAWA,EACXnH,QAASA,EACTnI,KAAMA,EACNyL,MAAOA,EACP9P,QAASA,EACT4T,UAAWA,EACXC,YAAaA,EACbE,eAAgBA,EAChBD,SAAUA,EACVmH,uBAAwBA,IAE5B,kBAACyB,GAAW,CAAC9U,OAAQA,EAAQvD,KAAMA,IACnC,kBAACwa,GAAW,CAACvhB,KAAMkX,EAAc7O,OAAOrI,KAAMsK,OAAQ4M,EAAc7O,OAAOiC,OAAQ4E,QAASA,IAEnG,EAGL,M,kCCpLA,MAAM8T,GAAgBrN,EAAEC,MAAMjP,SAASC,iBAAiB,iBAClDqc,GAAmBtN,EAAEC,MAAMjP,SAASC,iBAAiB,iBAa9Csc,GAAe,KACxB,MAAMC,EAAY9B,SAAS+B,eAAe,iBACpCC,GAAS,IAAAva,UAAQ,IAAMqa,GAbL,CAACG,IACzB,IAAID,EAAShC,SAAS+B,eAAe,iBAQrC,OANKC,IACDA,EAAShC,SAASkC,cAAc,OAChCF,EAAOzhB,IAAK,UACZ0hB,EAAOE,YAAYH,IAGhBA,CAAM,EAI6BI,CAAoBN,IAAY,CAACA,IAE3E,OAAKE,GAGE,KAAAK,cACH,kBAACT,GAAgB,KACb,kBAACD,GAAa,OAElBK,GANO,IAOV,E,2SCkBL,MAAMM,GAAsB,OAAU;;;;;;;EASzBC,GAA+B,OAAU;qBAChCrkB,GAAUA,EAAMC,MAAM+D,MAAMsgB;wBACzBtkB,GAAUA,EAAMC,MAAMU,MAAMkV;wBAC5B7V,GAAUA,EAAMC,MAAMU,MAAMM;;EAIxCsjB,GAAe,EAAGC,YAAW3jB,UAAU,SAAU4jB,iB,MAC1D,MAAMljB,GAAO,IAAAC,WACPvB,GAAQ,IAAAC,YACRsL,GAAW,IAAAoE,gBAEVpB,EAAOgJ,IAAY,IAAA7V,aACnB8C,EAASigB,IAAc,IAAA/iB,WAAS,IAChCmG,EAAS6c,IAAc,IAAAhjB,UAA+B,KAEtD8V,EAAcC,IAAmB,IAAA/V,WAAS,GAE3CkW,GAAc,IAAAzX,aAAY,KAAYC,UAAUwM,KAChD+X,GAAY,IAAAxkB,aAAY,KAAOC,UAAUwkB,eACzC5P,GAAuB,IAAA7U,aAAY,KAAQC,UAAU6U,4BACrDC,GAAS,IAAA/U,aAAY,KAAMC,UAAU+U,WACrC0P,GAAiB,IAAA1kB,aAAY,KAASC,UAAU0kB,sBAChD1U,GAAa,IAAAjQ,cAAa0P,GAAe,KAAYzP,UAAUiQ,WAAWR,EAAO,oBACjFkV,GAAe,IAAA5kB,cAAa0P,GAA4B,KAAQzP,UAAU4kB,YAAYnV,EAAO0U,KAC7FU,GAAY,IAAA9kB,cAAa0P,GAAyB,KAAKzP,UAAU8kB,WAAWrV,EAAO,eACnFsV,GAAW,IAAAhlB,cAAa0P,GAC1B,KAAYzP,UAAUiQ,WAAWR,EAAO,kBAEtCuV,GAAa,IAAAjlB,cAAa0P,GAAyB,KAAKzP,UAAU8kB,WAAWrV,EAAO,iBAE1F,EAAAwV,GAAA,GAAad,GCnFS,EAACe,EAAkCC,KACzD,MAAMha,GAAW,IAAAoE,eACX6V,GAAS,IAAAlc,UAAQ,IAAM,UAAOkc,QAAQ,IACtCC,GAAa,IAAAnc,UACf,IAAM,KAAQoc,0BAA0Bna,EAAU+Z,EAAYC,IAC9D,CAACha,EAAU+Z,EAAYC,KAG3B,IAAA9f,YAAU,KACNggB,EAAWrb,SAASub,IAChBH,EAAOI,UAAUD,EAAQle,UAAWke,EAAQE,SAAUF,EAAQA,QAAQ,IAEnE,KACHF,EAAWrb,SAASub,IAChBH,EAAOM,WAAWH,EAAQle,UAAWke,EAAQE,SAAUF,EAAQA,QAAQ,GACzE,IAEP,CAACF,EAAYD,GAAQ,EDoExB,CACIT,aAAY,EAAZA,EAAcgB,KAAKlkB,KAAKmkB,GAAMA,EAAE5jB,KAChCmiB,GAGJ,MAAMxU,GAAU,IAAAjL,cACXkL,IACGzE,EAAS,KAAM8B,QAAQ5I,MAAM,CAAEuE,MAAOgH,QAAAA,EAAW1O,EAAKmC,cAAc,CAAErB,GAAI,mBAAqB,GAEnG,CAACmJ,EAAUjK,IA4BT2V,EAAiB,KACnB1L,EAAS,KAAQ8B,QAAQ4Y,cAAc,CAAEV,UAAWhB,KACpD2B,GAAY,EAGVA,GAAa,IAAAphB,cAAY,KACtByJ,GAAUiJ,IACXC,GAAgB,GAChB,YACKlJ,QACApJ,MAAMqT,IACHjB,EAASiB,EAAIlT,QACbmS,GAAgB,EAAM,IAEzBlS,OAAOkT,IACJ1I,EAAQ0I,EAAErT,SAAS,I,GAGhC,CAAC2K,EAASxB,EAAOiJ,IAEd2O,GAAY,IAAArhB,cACPshB,GAA4E,QAAD,6BAC9E,GAAI7X,EAAO,CACPkW,GAAW,GACX,MAAM4B,EAAoCC,OAAOC,KAAK5B,GACjD9iB,KAAKO,IACEyF,aAAO,EAAPA,EAAS2e,MAAMC,GAAMA,EAAE5d,OAAOiC,SAAW1I,KAClCuiB,EAAUviB,GAEd,OAEV6H,QAAQwc,GAAqC,OAANA,IAE5C,UAGU,YACDC,WAAW,OAAD,wBACJN,GAAM,CACTve,QAASwe,EACT9X,QACAgX,UAAWhB,KAEdpf,MAAK,KACF0C,EAAQuC,SAASvB,IACb0C,EAAS,KAAO6B,MAAMC,QAAQ2K,YAAY,CAAElN,OAAQjC,EAAOA,OAAOiC,SAAU,IAEhF4Z,EAAW,GAAG,IAEtBwB,G,CACF,MAAOzN,GACL1I,EAAQ0I,EAAErT,S,SAEVqf,GAAW,E,EAGvB,KACA,CAACF,EAAWhZ,EAAU2a,EAAYnW,EAASxB,EAAOoW,EAAW9c,IAkEjE,OA/DA,IAAApC,YAAU,KACNygB,GAAY,GACb,CAACA,KAEJ,IAAAzgB,YAAU,KACN8F,EAAS,KAAQ8B,QAAQ4Y,cAAc,CAAEV,UAAWhB,IAAa,GAElE,KAuCH,IAAA9e,YAAU,KACDsf,GAAiBA,EAAagB,MAGnChB,EAAagB,KAAK3b,SAASuc,I,MACP,QAAhB,EAAAA,EAAQC,gBAAQ,SAAExc,SAASvB,IACvB0C,EAAS,KAAO6B,MAAMC,QAAQ4V,qBAAqB,CAAEnY,OAAQjC,EAAOA,OAAOiC,OAAQ2S,OAAQkJ,KAC3Fpb,EACI,KAAO6B,MAAMC,QAAQwZ,2BAA2B,CAC5C/b,OAAQjC,EAAOA,OAAOiC,OACtBgc,OAAQH,EAAQI,SAEvB,GACH,GACJ,GACH,CAAChC,EAAcxZ,IAGd,oCACKyJ,GACG,oCACI,kBAACmP,GAAmB,KAChB,kBAAC,EAAA6C,gBAAe,CACZxC,WAAYA,EACZhgB,QAASA,EACT+J,MAAOA,EACP0Y,SAAUlC,aAAY,EAAZA,EAAcgB,KACxBI,UAAWA,EACXe,gBA/JOze,GAA8B,QAAD,6B,QACxD,MAAM0e,EAA4CpC,aAAY,EAAZA,EAAcgB,KAAKzb,MAAMxI,GAASA,EAAKM,KAAOqG,EAAK2e,YACrG,GAAKD,EACL,OAAO,YACFE,cAAc,CACXD,UAAW3e,EAAK2e,UAChB9kB,YAA4D,QAA/C,EAAgB,QAAhB,EAAAmG,EAAKnG,mBAAW,QAAI6kB,EAAgB7kB,mBAAW,aAAIC,EAChEgM,MAAO9F,EAAK8F,MACZ1G,QAASY,EAAKZ,UAEjB1C,MAAK,KACFoG,EAAS,KAAQ8B,QAAQ4Y,cAAc,CAAEV,UAAWhB,KACpD2B,GAAY,IAEf3gB,OAAOkT,IACJ1I,EAAQ0I,EAAErT,SAAS,GAE/B,IA+IwBkiB,gBA7IOF,GAAsB,QAAD,6BAGhD,YAAiBG,cAAcH,GAAW7hB,MAAMwK,EACpD,IA0IwByX,mBAEQpC,aAAU,EAAVA,EAAYxV,YACZwV,aAAU,EAAVA,EAAYqC,UACQ,QAApB,EAAArC,aAAU,EAAVA,EAAYsC,gBAAQ,eAAExW,SAAS,aAGvCyW,oBACI,kBAACrgB,EAAU,CACPC,KAAM,UACNE,UAAW,UACXC,SAAWmB,IACP6b,EAAW,IAAI7c,EAASgB,IACxB0C,EACI,KAAO6B,MAAMC,QAAQ6V,eAAe,CAChCpY,OAAQjC,EAAOA,OAAOiC,OACtBjC,OAAQA,IAEf,EAELrB,KAAM,SAGdogB,2BACI,oCACK/f,EAAQhG,KACJgH,GACGA,GACAA,EAAOA,QACH,kBAACub,GAA4B,CAACjiB,IAAK0G,EAAOA,OAAOiC,QAC7C,kBAAC,GAAiB,CACdA,OAAQjC,EAAOA,OAAOiC,OACtBjC,OAAQA,EACR6G,SAAO,EACPnI,KAAM,OACNyP,SAAW5U,GACPsiB,EAAW7c,EAAQoC,QAAQwc,GAAMA,EAAE5d,OAAOiC,SAAW1I,KAEzD+b,uBAAyBtV,GACrB,kBAAC,EAAAgf,WAAU,CACPjnB,QAAS,OACToP,QAAS1O,EAAKmC,cACV,CAAErB,GAAI,yBACN,CAAEyG,mBAU1Cif,gCAAiC,CAC7BnB,EACA1X,EACA1H,EACAmI,GAAU,EACV0X,EACAtQ,GAAY,EACZC,GAAc,IAEd,oCACK9H,aAAO,EAAPA,EAASpN,KACLgH,GACGA,GACI,kBAACub,GAA4B,CAACjiB,IAAK0G,EAAOA,OAAOiC,QAC7C,kBAAC,GAAiB,CACdA,OAAQjC,EAAOA,OAAOiC,OACtBsP,aAAcuM,EACd9P,UAAWuQ,EACXve,OAAQA,EACR6G,QAASA,EACTnI,KAAMA,EACNuP,UAAWA,EACXC,YAAaA,EACbE,eAAgBA,EAChBD,SAAW5U,IACP,WACK8X,aAAa,CACV9X,GAAIglB,EACJnjB,KAAM,UACN6G,OAAQ1I,IAEX+C,MAAK,KACFoG,EACI,KAAQ8B,QAAQ4Y,cAAc,CAC1BV,UAAWhB,KAGnB2B,GAAY,IAEf3gB,OAAOkT,IACJ1I,EAAQ0I,EAAErT,SAAS,GACrB,EAEV+Y,uBAAyBtV,GACrB,kBAAC,EAAAgf,WAAU,CACPjnB,QAAS,OACToP,QAAS1O,EAAKmC,cACV,CAAErB,GAAI,yBACN,CAAEyG,mBAU1C+O,YAAaA,EACbmQ,cAAe,CACXvS,cAAeR,EACfS,iBAAiB,IAAAJ,2BAA0BH,EAAQlV,EAAO+P,IAE9DA,QAASA,EACTiY,gBAAiBnD,EAAeoD,oBAChCC,kBAAmBrD,EAAeqD,kBAClCC,UAAWjT,EAAO5K,MAAM8d,GAAiB,SAAXA,EAAEnkB,OAChCokB,gBAAiBjY,EACjBkY,eAAiBtY,GACbzE,EACI,KAAM8B,QAAQ5I,MAAM,CAChBuE,MAAOgH,QAAAA,EAAW1O,EAAKmC,cAAc,CAAErB,GAAI,oBAIvDmmB,aAEIpS,EAAEqS,MAAMC,iBACD,IACOtD,GAAYF,EAAY,CAAC,YAAc,MACxC,KAAKyD,MAAMC,2BAA2B1D,aAAS,EAATA,EAAW2D,SAExD,GAEVC,gBA5MA,EACpBC,WACAC,aACA9kB,UAEA,iBAAsB+kB,IAAI,CACtBD,aACAD,WACA7kB,SAqMgBglB,WAAmB1E,GAAc,QAAD,6BACvBhW,UACC,SAAc0a,WAAW1E,EAAW,aAAchW,GAC5D,IACA2a,UAjLC9mB,GAAgE,SAAcwK,IAAIxK,GAkLnF+mB,gBAhLK,CAAC/mB,EAAY6B,IACtC,SAAcmlB,UAAUhnB,EAAI6B,GAgLRolB,0BA7LK,EACzBP,WACAC,aACA9kB,UAEA,iBAAsBqlB,SAAS,CAC3BP,aACAD,WACA7kB,SAsLgBslB,WAzMG,EACvBT,WACAC,aACA9kB,UAEA,iBAAsBulB,OAAO,CACzBT,aACAD,WACA7kB,SAkMgBrD,QAASA,EACT6oB,iBAAkB,CACdC,SAAU,IAAM,aAAkBA,WAClCC,WAAarpB,GAAgB,aAAkBqpB,WAAWrpB,GAC1DspB,aAAetpB,GAAgB,aAAkBspB,aAAatpB,GAC9DupB,SAAWzD,GAA2B,SAAc0D,KAAK1D,IAE7D2D,gBAAiB,CACbC,UAAY5D,GAAoC,UAAe4D,UAAU5D,GACzE6D,OAAS7D,GAAiC,UAAe6D,OAAO7D,GAChE8D,QAAU9D,GAAkC,UAAe8D,QAAQ9D,GACnE+D,YAAcC,GAAoB,UAAeD,YAAYC,GAC7DC,gBAAiB,CAACD,EAAiBhoB,IAC/B,UAAeioB,gBAAgBD,EAAShoB,GAC5CkoB,kBAAoBF,GAAoB,UAAeE,kBAAkBF,GACzEG,YAAcnE,GAAmC,UAAemE,YAAYnE,GAC5EoE,OAASpE,GAA8B,UAAeoE,OAAOpE,GAC7DqE,WAAarE,GAAkC,UAAeqE,WAAWrE,GACzEsE,kBAAoBtE,GAChB,UAAesE,kBAAkBtE,MAG7C,kBAAC1C,GAAY,QAKhC,E,2VE5aL,MAAMiH,GAAmB,EAAAC,GAAG;;;;;EAOtBC,GAAY,OAAiC;MAC7C,EAAGC,aAAcA,GAAWH;EAG5BI,GAAO,QAAkC;MACzC,EAAGD,aAAcA,GAAWH;EAqB5BK,GAAU,cAlBI,CAChBjrB,EAKAiP,IAEOjP,EAAMkrB,SACT,gBAACF,GAAI,CAACD,QAAS/qB,EAAM+qB,QAASG,SAAUlrB,EAAMkrB,SAAUjc,IAAKA,GACxDjP,EAAMgG,UAGX,gBAAC8kB,GAAS,CAACC,QAAS/qB,EAAM+qB,QAAS9b,IAAKA,GACnCjP,EAAMgG,YAMbmlB,GAAkB,OAAiC;MAClDnrB,GACCA,EAAM+qB,SACN;EA4GKK,GAAc,cAhFN,CACjBprB,EACAiP,KAEA,MAAMoc,EAAU,SAA+C,OAExDC,EAAejM,IAAiB,EAAAkM,GAAA,IAAevrB,EAAMwrB,OAAQxrB,EAAMkE,KAAMlE,EAAMyrB,gBAEhF,GAA8C,IAAArM,SAAQ,CACxDC,cAAe,OAAF,wBACNA,GACArf,EAAMqf,eAEbC,aAAc,SALZ,aAAEoM,EAAY,QAAExM,EAAO,MAAEyM,GAAK,EAAKC,EAAM,KAAzC,oCAQAC,GAAwB,IAAA9mB,cACzB+mB,IACG,MAAM7hB,EAAa,CAAC,EAepB,OAdAsc,OAAOC,KAAKsF,GAAQzhB,SAAS0hB,I,MACzB,MAAMjjB,EAAgD,QAAvC,EAAAwiB,EAAc/gB,MAAM0b,GAAMA,EAAExlB,OAASsrB,WAAE,eAAEjjB,OACxD,OAAQA,aAAM,EAANA,EAAQ5E,MACZ,IAAK,WACD+F,EAAM8hB,GAAKD,EAAOC,GAAGjqB,KAAKkqB,GAA4BA,EAAEzrB,MAAK0rB,KAAK,KAClE,MACJ,IAAK,WACDhiB,EAAM8hB,GAAKD,EAAOC,GAAGjqB,KAAKkqB,GAAWA,EAAEvpB,QAAOwpB,KAAK,KACnD,MACJ,QACIhiB,EAAM8hB,GAAKD,EAAOC,G,IAIvB9hB,CAAK,GAEhB,CAACqhB,IAuBL,OApBA,sBACIrc,GACA,IAAO,OAAD,wBACC2c,GAAM,CACTF,eACAxM,UACAyM,MAAO,K,MAEa,QAAhB,EAAAN,aAAO,EAAPA,EAASvc,eAAO,SAAEod,SAAS,EAAG,GAE9BP,GAAO,EAEXQ,mBAAoB,IACTN,EAAsBD,EAAOQ,gBAI5C,IAIA,gBAACnB,GAAO,CACJF,QAAS/qB,EAAM+qB,QACfG,SAAUlrB,EAAMkrB,SAAWQ,EAAa1rB,EAAMkrB,eAAY1oB,EAC1DyM,IAAKoc,GACL,gBAACF,GAAe,CAACJ,QAAS/qB,EAAM+qB,SAC3BO,EAAcxpB,KAAK,I,IAAA,MAAEuqB,GAAK,EAAKC,EAAI,KAAhB,WAAuB,OACvC,gBAACD,EAAK,eACFjqB,IAAKkqB,EAAK7rB,KACVye,QAASA,GACLoN,EAAI,CACRC,OAAQ,GAAGvsB,EAAMusB,UAAUD,EAAK7rB,OAChC+rB,SAAUxsB,EAAMwsB,WAEvB,IACAxsB,EAAMysB,aAAezsB,EAAMysB,YAAYvN,IAE3Clf,EAAM+F,QAEd,ICzIQ2mB,IAR4B,OAAU;;EAIZ,OAAU;;EAIlB,OAAiC;;wBAEvC1sB,GAAWA,EAAM6P,SAAW,iBAAmB;;sBAEjD7P,GAAWA,EAAM6P,SAAW,MAAQ;;;;GAM9C8c,GAAkB,OAAU;;;;+BAIT3sB,GAAUA,EAAMC,MAAMU,MAAM6F;EAG/ComB,GAAkB,OAAU;;;;;EAO5BC,GAAiB,OAAU;;;;;EAQ3BC,GAAgB,OAAU;;;;aAI1BC;EAGAC,GAAY,OAA0C;;;MAG5DhtB,GAA8B,SAAnBA,EAAM0C,SAAsB,aAAe;MACtD1C,GAA8B,UAAnBA,EAAM0C,SAAuB,kBAAoB;aCxDvC;;;wBD4DH1C,GAAUA,EAAMC,MAAMU,MAAMM;;;;;;;;EAUxCgsB,GAAmB,OAAU;;;;;;;;EAU7BC,GAAkB,OAAU;;;;;;;EAS5BC,GAAoB,OAAU;;;wBAGlBntB,GAAUA,EAAMC,MAAMU,MAAMM;eACrCjB,GAAUA,EAAMC,MAAM+D,MAAMM;EAG/B8oB,GAAgB,OAAU;aC/FN;;;;8BDoGFptB,GAAUA,EAAMC,MAAMU,MAAM6F;EAG9C6mB,GAAsB,UAAqC;;;;;;;;;wBAS/CrtB,GAAWA,EAAM6P,SAAW7P,EAAMC,MAAMU,MAAMkV,MAAQ7V,EAAMC,MAAMU,MAAMM;;4BAEpEjB,GAAUA,EAAMC,MAAMU,MAAMkV;;EAiB5CyX,IAbkB,OAAU;;wBAEhBttB,GAAUA,EAAMC,MAAMU,MAAMkV;qBAtHtC;;;;;kBADM;;;EAkIU,OAAU;;;;wBAIhB7V,GAAUA,EAAMC,MAAMU,MAAMmG;;;GAKxCymB,GAAuB,OAAU;;;;EAMjCC,GAAwB,OAAU;;;;;EExIlCC,IF+IiB,OAAU;;;;EAML,OAAU;;;;EErJlB,EAAG1iB,aAC1B,MAAMS,GAAW,IAAAoE,eACX8d,GAAS,IAAAttB,cAAa0P,GAA4B,KAAazP,UAAUstB,aAAa7d,EAAO/E,KAUnG,OAAI2iB,GAAUA,EAAOE,OAASF,EAAOjmB,KAE7B,yBAAK4M,MAAO,CAAE+N,KAAM,EAAGD,QAAS,OAAQ0L,cAAe,SAAU/b,gBAAiB,QAASgc,UAAW,KAClG,kBAACnB,GAAe,KACZ,kBAACC,GAAe,MAChB,kBAACC,GAAc,cACf,kBAACD,GAAe,KACZ,kBAACS,GAAmB,CAAClqB,QAfzB,KACZqI,EAAS,KAAa6B,MAAMC,QAAQygB,iBAAiB,CAAEhjB,WAAU,GAe7C,kBAAC,EAAAvK,QAAO,CAACC,KAAK,aAAaE,MAAM,aAI7C,yBAAK0T,MAAO,CAAE+N,KAAM,EAAGD,QAAS,SAAWuL,EAAOjmB,MAClD,kBAACklB,GAAe,KACZ,kBAAC,EAAAxlB,UAAS,CAAChE,QAlBZ,KACXqI,EAAS,KAAa6B,MAAMC,QAAQygB,iBAAiB,CAAEhjB,WAAU,GAiB3B,UAMnC,oCAAK,GCRVijB,GAA2B,UAAO5mB,SAASC,iBAAiB,4BAC5D4mB,GAA0B,UAAO7mB,SAASC,iBAAiB,2BAC3D6mB,GAA6B,UAAO9mB,SAASC,iBAAiB,8BAC9D8mB,GAAgC,UAAO/mB,SAASC,iBAAiB,iCACjE+mB,GAA4B,UAAOhnB,SAASC,iBAAiB,6BAE7DgnB,GAA2B,UAAOjnB,SAASC,iBAAiB,4BAC5DinB,GAAqB,UAAOlnB,SAASC,iBAAiB,sBACtD,GAAwB,UAAOD,SAASC,iBAAiB,yBAEzDknB,GAA8B,UAAOnnB,SAASC,iBAAiB,+BAC/DmnB,GAAmC,UAAOpnB,SAASC,iBAAiB,oCAEpEonB,GAAuB,UAAOrnB,SAASC,iBAAiB,wBAKjDqnB,GAAS,EAAG3jB,a,cACrB,MAAMxJ,GAAO,IAAAC,WACPgK,GAAW,IAAAoE,eACXpB,GAAQ,IAAApO,aAAY,KAAOC,UAAUoO,aACrCkJ,GAAgB,IAAAvX,cACjB0P,GAA4B,KAAOzP,UAAUuX,aAAa9H,EAAO/E,IAClE,EAAAgF,cAEEsK,GAAe,IAAAja,cAChB0P,GAA4B,KAAOzP,UAAUia,mBAAmBxK,EAAO/E,IACxE,EAAAgF,cAEE4e,GAAiB,IAAAvuB,cAClB0P,IAA2B,MAAC,OAAkD,QAAlD,OAAazP,UAAUstB,aAAa7d,EAAO/E,UAAO,eAAE6P,MAAM,GACvF,EAAA7K,cAGE6e,EAAsBnuB,I,MACxB,OAA+D,QAAxD,OAAKJ,UAAU8kB,WAAW,UAAO0J,MAAMC,WAAYruB,UAAK,eAAEoP,QAAQ,EAGvE+K,EAAU1L,IAIRyI,GACAnM,EAAS,KAAO6B,MAAMC,QAAQwN,aAAa,CAAE/P,SAAQmE,aAGzD1D,EAAS,KAAa6B,MAAMC,QAAQyhB,YAAY,CAAEhkB,YAE9C4jB,GACAA,EAAezf,E,EAIjB8f,EAAgB,CAACC,EAA0B5sB,KAKzCmJ,OADOhJ,IAAPH,EACS,KAAOgL,MAAMC,QAAQ4C,eAAe,OAAD,QAAGnF,OAAQ1I,GAAO4sB,IAErD,KAAO5hB,MAAMC,QAAQ4C,eAAe,OAAD,QAAGnF,UAAWkkB,I,EAI5DC,EAAUznB,IAIZ+D,EAAS,KAAa6B,MAAMC,QAAQ6hB,oBAAoB,CAAEpkB,SAAQtD,SAAQ,EAOxEqB,EAAS6O,aAAa,EAAbA,EAAe7O,OAE9B,OAAKA,GAED,IAAAuV,+BAA8BvV,GAE1B,kBAACwlB,GAAkB,iBACXxlB,EAAOoG,QAAO,CAClBvH,SAAWuH,IACP1D,GAAS,QAAgDT,EAAQmE,GAAS,GAAO,EAErF0L,OAAQ,IAAMA,EAAO,CAAC,OAGvB,IAAA0D,gCAA+BxV,GAElC,kBAAColB,GAA0B,CACvB1f,MAAOA,EACPU,QAASpG,EAAOoG,QAChBvH,SAAWuH,GACP1D,GAAS,QAAiDT,EAAQmE,GAAS,IAE/E0L,OAAQA,EACRoU,cAAeA,KAGhB,IAAAzQ,mCAAkCzV,GAErC,kBAACqlB,GAA6B,CAC1B3f,MAAOA,EACPU,QAASpG,EAAOoG,QAChBvH,SAAWuH,IACP1D,GAAS,QAAoDT,EAAQmE,GAAS,GAAO,EAEzF0L,OAAQA,EACRoU,cAAeA,EACfE,OAAQA,KAGT,IAAA1Q,8BAA6B1V,GAEhC,kBAACulB,GAAwB,CACrBnf,QAASpG,EAAOoG,QAChBV,MAAOA,EACP7G,SAAWuH,IACP1D,GAAS,QAA+CT,EAAQmE,GAAS,GAAO,EAEpF0L,OAAQA,EACRoU,cAAeA,KAGhB,IAAAvQ,+BAA8B3V,QACpBtG,IAAVgM,EACH,kBAAC4f,GAAyB,CACtBva,OAA6B,QAArB,EAAA/K,EAAOoG,QAAQ2E,cAAM,QAAI,GACjCW,KAAyB,QAAnB,EAAA1L,EAAOoG,QAAQsF,YAAI,SACzBD,QAA+B,QAAtB,EAAAzL,EAAOoG,QAAQqF,eAAO,SAC/B5M,SAAWuH,IACP1D,GAAS,QAAgDT,EAAQmE,GAAS,GAAO,EAErFV,MAAOA,EACPoM,OAAQA,IAGZ,2DAEG,IAAA8D,8BAA6B5V,GAEhC,kBAACklB,GAAwB,CACrBrmB,SAAWuH,IACP1D,GAAS,QAA+CT,EAAQmE,GAAS,GAAO,EAEpF0L,OAAQA,EACR1L,QAASpG,EAAOoG,QAChBggB,OAAQA,KAGT,IAAAvQ,6BAA4B7V,GAE/B,kBAACmlB,GAAuB,CACpBtmB,SAAWuH,IACP1D,GAAS,QAA8CT,EAAQmE,GAAS,GAAO,EAEnF0L,OAAQA,EACR1L,QAASpG,EAAOoG,WAGjB,IAAA6P,0BAAyBjW,GAE5B,kBAAC2lB,GAAoB,eACjB9mB,SAAWuH,IACP1D,GAAS,QAA2CT,EAAQmE,GAAS,GAAO,EAEhF0L,OAAQA,EACRoU,cAAeA,GACXlmB,EAAOoG,WAGZ,IAAA4P,2BAA0BhW,GAE7B,kBAAC,GAAqB,CAClB0F,MAAOA,EACPzD,OAAQjC,EAAOiC,OACfmE,QAASpG,EAAOoG,QAChB8J,gBAAiB,CAACjO,EAAQmE,KACtB1D,GAAS,QAAoBT,EAAQmE,GAAS,GAAO,EAEzD4I,gBAAkB5I,IACd1D,EAAS,KAAO6B,MAAMC,QAAQyK,oBAAoB,OAAD,UAAM7I,IAAW,EAEtE0L,OAAQ,CAAC7P,EAAQmE,KAlHA,IAACwO,OACRlb,KADQkb,EAmHYrD,SAlHO7X,IAAdkb,EAAOrb,SAAoCG,IAAhBkb,EAAOxZ,KAuHrD,WACK4W,aAAa,CACVzY,GAAIgY,EAAahY,GACjB0I,OAAQA,EACR7G,KAAMmW,EAAanW,KACnBzB,MAAOkV,EAAclV,MACrByM,YAEH9J,MAAK,KACFwV,EAAO1L,EAAQ,IAElB1J,OAAOkT,I,MACJlN,EACI,KAAM8B,QAAQ5I,MAAM,CAChBuE,MAAiB,QAAV,EAAAyP,EAAErT,gBAAQ,QAAI9D,EAAKmC,cAAc,CAAErB,GAAI,mBAErD,IApBLuY,EAAO1L,EAqBL,KAIX,IAAA0P,sCAAqC9V,GAExC,kBAAC0lB,GAAgC,iBACzB1lB,EAAOoG,QAAO,CAClB3O,IAAKuI,EAAOoG,QAAQ3O,IACpBe,MAA2B,QAApB,EAAAwH,EAAOoG,QAAQ5N,aAAK,QAAI,GAC/B8tB,KAAM,CAAEvf,SAAU+e,GAClBS,SAAU,CACNC,SAAU,CACNpiB,WAAY,eACZqiB,QAAS,YACTC,SAAU,aACVC,MAAO,WAEXC,YAAa,IAAMV,EAAc,CAAEha,MAAM,IACzC2a,YAAclW,GAAQjO,EAAS,KAAM8B,QAAQ5I,MAAM,CAAEuE,MAAOwQ,EAAIpU,YAChEuqB,cAAe,IAAMZ,EAAc,CAAEha,MAAM,KAE/C4F,OAAQA,EACRjT,SAAU,CAACuH,EAAS2gB,IAChBrkB,GAAS,QAAkDT,EAAQmE,EAAS2gB,SAAAA,IAEhFb,cAAeA,EACfhf,QAAU/G,GAAUuC,EAAS,KAAM8B,QAAQ5I,MAAM,CAAEuE,eAGpD,IAAA4V,iCAAgC/V,GAEnC,kBAACylB,GAA2B,iBACpBzlB,EAAOoG,QAAO,CAClB3O,IAAKuI,EAAOoG,QAAQ3O,IACpBe,MAA2B,QAApB,EAAAwH,EAAOoG,QAAQ5N,aAAK,QAAI,GAC/B8tB,KAAM,CAAEvf,SAAU+e,GAClBS,SAAU,CACNC,SAAU,CACNpiB,WAAY,eACZqiB,QAAS,YACTO,YAAa,gBACbN,SAAU,cAEdE,YAAa,IAAMV,EAAc,CAAEha,MAAM,IACzC2a,YAAclW,GAAQjO,EAAS,KAAM8B,QAAQ5I,MAAM,CAAEuE,MAAOwQ,EAAIpU,YAChEuqB,cAAe,IAAMZ,EAAc,CAAEha,MAAM,KAE/C4F,OAAQA,EACRjT,SAAU,CAACuH,EAAS2gB,IAChBrkB,GAAS,QAAkDT,EAAQmE,EAAS2gB,SAAAA,IAEhFb,cAAeA,EACfhf,QAAU/G,IACNuC,EAAS,KAAM8B,QAAQ5I,MAAM,CAAEuE,UAAS,KAK7C,6DA9LS,I,ECnGX8mB,GAAmB,EAAGhlB,a,MAC/B,MAAMS,GAAW,IAAAoE,eACXrO,GAAO,IAAAC,WACPsH,EAA+F,QAAtF,OAAA1I,cAAa0P,GAA4B,KAAOzP,UAAUuX,aAAa9H,EAAO/E,YAAQ,eAAEjC,OASjGhB,GACFgB,aAAM,EAANA,EAAQoG,UAAW,YAAapG,EAAOoG,SAAWpG,EAAOoG,QAAQpH,QAAUgB,EAAOoG,QAAQpH,QAAU,GAExG,OACI,yBAAKuM,MAAO,CAAE+N,KAAM,IAChB,kBAAC4N,GAAM,CAACjlB,OAAQA,IACfjC,EACGhB,EAAQhG,KAAI,CAAC6V,EAAe3V,KACxB,MAAMigB,EAAM,KAAOla,WAAW4P,EAAc7O,OAAOrI,MACnD,OACI,yBAAK2B,IAAKJ,GACN,kBAACsrB,GAAe,KACZ,kBAACC,GAAoB,CACjBpqB,QAAS,IApBzB,EAAC4H,EAAgBtK,KAI7B+K,EAAS,KAAa6B,MAAMC,QAAQF,eAAe,CAAErC,SAAQtK,SAAQ,EAgB1B0C,CAAQwU,EAAc7O,OAAOiC,OAAQ4M,EAAc7O,OAAOrI,OACxEc,EAAKmC,cAAc,CAAErB,GAAI4f,EAAIhZ,SAElC,kBAACukB,GAAqB,CAClBrqB,QAAS,KACLqI,EACI,KAAO6B,MAAMC,QAAQwN,aAAa,CAC9B/P,SACAmE,QAAS,OAAF,wBACApG,EAAOoG,SAAO,CACjBpH,QAAS,IACFA,EACEoC,QAAO,CAAC+lB,EAAGC,IAAcA,IAAMluB,IAC/BF,KAAK4kB,KACE,IAAAyJ,0BAAyBzJ,IAIzB0J,QAAQ1rB,MAAM,QAASgiB,GAHhBA,UAUlC,GAEL,kBAAC,EAAAlmB,QAAO,CAACC,KAAM,iBAI9B,IAGL,qCAGX,EAGCuvB,GAAS,EAAGjlB,aACd,MAAMS,GAAW,IAAAoE,eACXkQ,GAAS,IAAA1f,cAAa0P,GAA4BA,EAAMhI,QAAQiY,IAAIhV,GAAQjC,OAAOgX,QAAQ,EAAA/P,cAIjG,OACI,oCACI,kBAAC,EAAAsgB,oBAAmB,CAChBC,OAAQ,OAGRC,SAAU,CAACvQ,EAAOhe,IACP,kBAACwuB,GAAiB,CAACzlB,OAAQiV,EAAO5d,IAAKJ,IAElDyuB,KAAM3Q,GAAkB,KAE5B,kBAACvY,EAAU,CACPG,UAAW,UACXC,SAAWmB,IACP0C,EAAS,KAAO6B,MAAMC,QAAQojB,cAAc,CAAE3lB,SAAQjC,WAAU,EAEpEtB,KAAM,WAGjB,EAGCmpB,GAAwB,EAAG5lB,aAC7B,MAAMS,GAAW,IAAAoE,eACXoQ,GAAQ,IAAA5f,cAAa0P,GAA4BA,EAAMhI,QAAQgY,OAAO/U,KAC5E,OACI,yBACI5H,QAAS,KACLqI,EAAS,KAAO6B,MAAMC,QAAQqT,YAAY,CAAE5V,SAAQ/K,MAAO,CAAEqgB,QAASL,EAAMK,UAAY,GAE5F,kBAAC,EAAA7f,QAAO,CAACC,KAAMuf,EAAMK,OAAS,YAAc,gBAEnD,EAGCuQ,GAA8B,EAAG7lB,aACnC,MAAMS,GAAW,IAAAoE,eACXoQ,GAAQ,IAAA5f,cAAa0P,GAA4BA,EAAMhI,QAAQgY,OAAO/U,KAC5E,OACI,yBACI5H,QAAS,KACLqI,EAAS,KAAO6B,MAAMC,QAAQqT,YAAY,CAAE5V,SAAQ/K,MAAO,CAAEogB,SAAUJ,EAAMI,WAAa,GAE9F,kBAAC,EAAA5f,QAAO,CAACC,KAAMuf,EAAMI,QAAU,WAAa,mBAEnD,EAGCyQ,GAAyB,EAAG9lB,SAAQoV,cACtC,MAAM3U,GAAW,IAAAoE,eACjB,OACI,yBACIzM,QAAS,KACLqI,EAAS,KAAO6B,MAAMC,QAAQwjB,WAAW,CAAE/lB,SAAQoV,YAAW,GAElE,kBAAC,EAAA3f,QAAO,CAACC,KAAM,eAEtB,EAGC+vB,GAAoB,EAAGzlB,aACzB,MAAMiV,GAAQ,IAAA5f,cAAa0P,GAA4BA,EAAMhI,QAAQgY,OAAO/U,KAC5E,OACI,oCACKiV,EAAMvd,MACNud,EAAMlY,QAAQhG,KAAI,CAACgH,EAAQ9G,KACxB,MAAMigB,EAAM,KAAOla,WAAWe,EAAOA,OAAOrI,MAE5C,OACI,yBAAK4T,MAAO,CAAEwZ,cAAe,MAAO1L,QAAS,QAAU/f,IAAKJ,GACxD,yBAAKqS,MAAO,CAAE+N,KAAM,EAAGE,WAAY,WAAaL,EAAIhZ,OACpD,kBAAC0nB,GAAqB,CAAC5lB,OAAQA,IAC/B,kBAAC6lB,GAA2B,CAAC7lB,OAAQA,IACrC,kBAAC8lB,GAAsB,CAAC9lB,OAAQjC,EAAOA,OAAOiC,OAAQoV,QAASH,EAAMjV,SAE5E,IAGZ,EC9JC,GAAY,UAAO3D,SAASC,iBAAiB,UAWtC0pB,GAAmB,EAAGhmB,aAC/B,MAAMxJ,GAAO,IAAAC,WACPgK,GAAW,IAAAoE,eACXohB,GAAU,IAAA5wB,cAAa0P,GAA4B,KAAOzP,UAAUuX,aAAa9H,EAAO/E,MACvFtI,EAAOwuB,GAAY,aAAmCD,aAAO,EAAPA,EAASvuB,QAehE,QAAEyc,EAAO,MAAEC,IAAU,IAAAC,SAAQ,CAC/BC,cAAe,CAAEpa,KAAMxC,QAAAA,EAAS,IAChC6c,aAAc,QAUlB,OAPA,eAAgB,KACZ,MAAMC,EAAeJ,GAAOhV,IACxB8mB,EAAS9mB,EAAKlF,KAAK,IAEvB,MAAO,IAAMsa,EAAaC,aAAa,GACxC,CAACL,IAEG6R,EACH,yBAAK3c,MAAO,CAAE+N,KAAM,EAAGD,QAAS,OAAQ0L,cAAe,SAAUxL,eAAgB,kBAC7E,kBAAC,EAAA5C,aAAY,CACThf,KAAM,OACNye,QAASA,EACTrG,YAAatX,EAAKmC,cAAc,CAAErB,GAAI,mBAC1C,kBAAC,GAAS,CAACc,QA/BH,UACEX,IAAVC,IAIA+I,EAAS,KAAO6B,MAAMC,QAAQyK,oBAAoB,CAAEhN,SAAQtI,WAI5D+I,EAAS,KAAa6B,MAAMC,QAAQyhB,YAAY,CAAEhkB,Y,EAsBrB5B,SAAU,QAClC5H,EAAKmC,cAAc,CAAErB,GAAI,kBAIlC,iDACH,ECtDC,GAAS,UAAO+E,SAASC,iBAAiB,UAOnC6pB,GAAe,EAAGnmB,a,MAC3B,MAAM+J,EAGL,QAHc,OAAA1U,cACV0P,GAA4B,KAAOzP,UAAU0U,kBAAkBjF,EAAO/E,IACvE,EAAAgF,qBACH,eAAEiF,KACH,OACI,oCACKF,GACG,kBAACoY,GAAe,KACZ,kBAAC,GAAM,CAACxsB,KAAM,OAI7B,ECpBCywB,GAAO,UAAO/pB,SAASC,iBAAiB,QAMjC+pB,GAAiB,EAAGrmB,SAAQrI,eACrC,MAAM8I,GAAW,IAAAoE,eAQjB,OACI,kBAACgd,GAAe,KACZ,kBAACS,GAAmB,CAAClqB,QARb,KACZqI,EACI,KAAa6B,MAAMC,QAAQ+jB,kBAAkB,CAAEtmB,SAAQrI,SAAuB,SAAbA,EAAsB,QAAU,SACpG,GAMO,kBAACyuB,GAAI,CAAC1wB,KAAmB,SAAbiC,EAAsB,mBAAqB,kBAAmB/B,MAAM,WAG3F,ECpBQ2wB,GAAqB,EAAGvmB,SAAQ/E,e,MAKzC,OAFC,QAFqB,OAAA5F,cAAa0P,GAC/B,KAAOzP,UAAU0U,kBAAkBjF,EAAO/E,YAC7C,eAAEyX,aAEoBxc,EAAW,oCAAK,ECJ9BurB,GAAiB,EAAGxmB,a,MAC7B,MAAMxJ,GAAO,IAAAC,WAKb,OADC,QAHgB,OAAApB,cACZ0P,GAA4B,KAAOzP,UAAU0U,kBAAkBjF,EAAO/E,IACvE,EAAAgF,qBACH,eAAEsQ,QAEC,kBAAC8M,GAAiB,KAAE5rB,EAAKmC,cAAc,CAAErB,GAAI,+BAE7C,oCACH,ECVC,GAAO,UAAO+E,SAASC,iBAAiB,QA0BjCmqB,GAAgB,EAAGzmB,SAAQrI,eACpC,MAAMnB,GAAO,IAAAC,WACPgK,GAAW,IAAAoE,eACXX,GAAM,IAAA0E,QAAuB,MAC7B+Z,GAAS,IAAAttB,cACV0P,GAA4B,KAAazP,UAAUstB,aAAa7d,EAAO/E,IACxE,EAAAgF,cAEEkS,EAAM,KAAOla,WAAW2lB,aAAM,EAANA,EAAQjtB,OAE/BgxB,EAAKC,GAAU,aAAuB,WAc7C,OARA,IAAAhsB,YAAU,KACN8H,YAAW,KACHyB,GAAOA,EAAIH,UACXG,EAAIH,QAAQ5F,UAAY+F,EAAIH,QAAQ5F,UAAY,W,GAErD,EAAE,GACN,IAEIwkB,EACH,kBAACZ,GAAa,KACV,kBAACE,GAAS,CAAC/d,IAAKA,EAAKvM,SAAUA,IACzBuf,EAAI0P,MAAMC,YAAc3P,EAAI0P,MAAME,WAAa5P,EAAI0P,MAAMG,aACvD,kBAAC1E,GAAa,KACTnL,EAAI0P,MAAMC,WACP,kBAACvE,GAAmB,CAACxd,SAAkB,YAAR4hB,EAAmBtuB,QAAS,IAAMuuB,EAAO,YACpE,kBAAC,GAAI,CAACjxB,KAAK,YAAYE,MAAM,WAGjC,qCAEHshB,EAAI0P,MAAME,UACP,kBAACxE,GAAmB,CAACxd,SAAkB,YAAR4hB,EAAmBtuB,QAAS,IAAMuuB,EAAO,YACpE,kBAAC,GAAI,CAACjxB,KAAK,WAAWE,MAAM,WAGhC,qCAEHshB,EAAI0P,MAAMG,WACP,kBAACR,GAAkB,CAACvmB,OAAQA,GACxB,kBAACsiB,GAAmB,CAACxd,SAAkB,YAAR4hB,EAAmBtuB,QAAS,IAAMuuB,EAAO,YACpE,kBAAC,GAAI,CAACjxB,KAAK,eAAeE,MAAM,YAIxC,sCAIZ,yBAAK0T,MAAO,CAAE+N,KAAM,EAAGD,QAAS,OAAQ0L,cAAe,WACnD,kBAAClB,GAAe,KACZ,kBAACyE,GAAc,CAACrmB,OAAQA,EAAQrI,SAAUgrB,EAAOhrB,WACjD,kBAACmqB,GAAc,KAAEtrB,EAAKmC,cAAc,CAAErB,GAAI4f,EAAIhZ,SAC9C,kBAAC2jB,GAAe,KACZ,kBAACS,GAAmB,CAAClqB,QA/C7B,KACZqI,EAAS,KAAa6B,MAAMC,QAAQyhB,YAAY,CAAEhkB,WAAU,GA+CpC,kBAAC,GAAI,CAACtK,KAAK,aAAaE,MAAM,aAI1C,kBAACssB,GAAgB,KACJ,YAARwE,GAAqBxP,EAAI0P,MAAME,UAAY,kBAACnD,GAAM,CAAC3jB,OAAQ2iB,EAAO3iB,SAAa,qCACvE,YAAR0mB,GAAqBxP,EAAI0P,MAAMC,WAC5B,kBAACb,GAAgB,CAAChmB,OAAQ2iB,EAAO3iB,SAEjC,qCAEK,YAAR0mB,GAAqBxP,EAAI0P,MAAMG,WAC5B,kBAAC/B,GAAgB,CAAChlB,OAAQA,EAAQrD,UAAWua,EAAIxhB,OAEjD,qCAEJ,kBAACywB,GAAY,CAACnmB,OAAQA,IACtB,kBAACwmB,GAAc,CAACxmB,OAAQA,QAInC2iB,aAAM,EAANA,EAAQE,OACL,yBAAKvZ,MAAO,CAAE3R,SAAU,WAAYwf,MAAO,EAAGpQ,gBAAiB,OAAQ6N,QAAS,QAEhF,sCAIR,oCACH,EC/GQoS,GAAyB,OAAU;;;;;EAOnCC,GAA8B,OAAiC;;;iBVnBlD;sBUuBHhyB,GAAWA,EAAM6P,SAAW,MAAQ;EAG9CoiB,GAAqB,OAAU;;;;;EAO/BC,GAA2B,OAAU;aVhCtB;;EUwCf,GAAgB,KACzB,MAAMC,GAAU,IAAA/xB,aAAY,KAAaC,UAAU+xB,cAAe,EAAAriB,cAClE,OACI,kBAACgiB,GAAsB,CAAC7oB,UAAU,yBAC7BipB,EAAQrwB,KAAI,CAAC4rB,EAAQ1rB,IACM,SAApB0rB,EAAOhrB,SAEH,kBAACgqB,GAAe,CAAC7c,UAAU,EAAOzN,IAAKJ,GACnC,kBAACiwB,GAAkB,KACf,kBAACT,GAAa,CAACzmB,OAAQ2iB,EAAO3iB,OAAQrI,SAAUgrB,EAAOhrB,WACvD,kBAACsvB,GAA2B,CAACniB,cAA2BrN,IAAjBkrB,EAAOE,OAC1C,kBAACH,GAAW,CAAC1iB,OAAQ2iB,EAAO3iB,UAEhC,kBAACmnB,GAAwB,QAOrC,kBAACxF,GAAe,CAAC7c,UAAU,EAAOzN,IAAKJ,GACnC,kBAACiwB,GAAkB,KACf,kBAACC,GAAwB,MACzB,kBAACF,GAA2B,CAACniB,cAA2BrN,IAAjBkrB,EAAOE,OAC1C,kBAACH,GAAW,CAAC1iB,OAAQ2iB,EAAO3iB,UAEhC,kBAACymB,GAAa,CAACzmB,OAAQ2iB,EAAO3iB,OAAQrI,SAAUgrB,EAAOhrB,eAM9E,ECtEQ2vB,GAAQ,IAAM,iCCSdC,GAAQ,KACjB,MAAO1tB,EAAO2tB,IAAY,IAAA5wB,YACpBJ,GAAO,IAAAC,WAEPgxB,GAAqB,IAAAztB,cAAaH,IASpC2tB,EAAS,OAAD,wBACD3tB,GAAK,CACRkB,OANoBwS,IACpB1T,EAAMkB,OAAOwS,GACbia,OAAS/vB,EAAU,EAKnB0D,QAXqBoS,IACrB1T,EAAMsB,QAAQoS,GACdia,OAAS/vB,EAAU,IAUrB,GACH,IAEGiwB,GAAQ,IAAA1tB,cACV,CAACE,EAAcE,IACJ,IAAIutB,SAAgB,CAACxsB,EAASJ,KACjC0sB,EAAmB,CACf1sB,SACAI,UACAjB,OACAE,cACF,KAGV,CAACqtB,IAGCG,GAAiB,IAAAppB,UAAQ,KACpB,CACHqpB,QAAU3tB,GAAiBwtB,EAAMxtB,EAAM,WACvC4tB,UAAY5tB,GAAiBwtB,EAAMxtB,EAAM,aACzC6tB,KAAO7tB,GAAiBwtB,EAAMxtB,EAAM,QACpC8tB,GAAK9tB,GAAiBwtB,EAAMxtB,EAAM,MAClC+tB,GAAK/tB,GAAiBwtB,EAAMxtB,EAAM,MAClCguB,OAAShuB,GAAiBwtB,EAAMxtB,EAAM,UACtCiuB,MAAQjuB,GAAiBwtB,EAAMxtB,EAAM,YAE1C,CAACwtB,IAIJ,MAAO,CAAC7tB,GAFI,IAAA2E,UAAQ,IAAM,EAAA4pB,2BAA2BC,IAAIT,EAAgBpxB,IAAO,CAACA,EAAMoxB,IAE3D,EC3CnBU,GAA+DrzB,IACxE,MAAMuB,GAAO,IAAAC,WACPgK,GAAW,IAAAoE,eACX3P,GAAQ,IAAAC,YACRiV,GAAS,IAAA/U,aAAY,KAAMC,UAAU+U,YACpCxQ,EAAO0uB,GAAShB,KAEjBiB,GAAa,IAAAhqB,UAAQ,K,QACvB,OAAuB,QAAhB,EAAO,QAAP,EAAA6M,EAAEod,aAAK,eAAEC,eAAO,eAAE5jB,WAAYuG,EAAEqS,MAAe,OAAC,GACxD,IAEGiL,GAAW,IAAAnqB,UAAQ,IACdgqB,EAAa,CAACD,GAAS,IAC/B,CAACA,EAAOC,IAELI,GAAuB,IAAA5uB,cACxBkL,IACGzE,EAAS,KAAM8B,QAAQ5I,MAAM,CAAEuE,MAAOgH,QAAAA,EAAW1O,EAAKmC,cAAc,CAAErB,GAAI,mBAAqB,GAEnG,CAACmJ,EAAUjK,IAGT8T,GAAsB,IAAA9L,UAAQ,KACzB,IAAA+L,2BAA0BH,EAAQlV,EAAO0zB,IACjD,CAACxe,EAAQwe,EAAsB1zB,IAE5BwV,GAAgB,IAAAlM,UAAQ,IAAM,UAAOqqB,sBAAsB,IAEjE,OACI,oCACKne,GACG,kBAAC,EAAAoe,gBAAe,eACZpe,cAAeA,EACfqe,qBAAsBJ,EACtBhe,gBAAiBL,GACbrV,IAGZ,kBAAC2E,EAAO,CAACC,MAAOA,IAEvB,ECzCQmvB,GAA6B/zB,IACtC,MAAMuB,GAAO,IAAAC,WACPgK,GAAW,IAAAoE,eACX3P,GAAQ,IAAAC,YACRiV,GAAS,IAAA/U,aAAY,KAAMC,UAAU+U,YACpCxQ,EAAO0uB,GAAShB,KAEjBiB,GAAa,IAAAhqB,UAAQ,K,QACvB,OAAuB,QAAhB,EAAO,QAAP,EAAA6M,EAAEod,aAAK,eAAEC,eAAO,eAAE5jB,WAAYuG,EAAEqS,MAAe,OAAC,GACxD,IAEGiL,GAAW,IAAAnqB,UAAQ,IACdgqB,EAAa,CAACD,GAAS,IAC/B,CAACA,EAAOC,IAELI,GAAuB,IAAA5uB,cACxBkL,IACGzE,EAAS,KAAM8B,QAAQ5I,MAAM,CAAEuE,MAAOgH,QAAAA,EAAW1O,EAAKmC,cAAc,CAAErB,GAAI,mBAAqB,GAEnG,CAACmJ,EAAUjK,IAGT8T,GAAsB,IAAA9L,UAAQ,KACzB,IAAA+L,2BAA0BH,EAAQlV,EAAO0zB,IACjD,CAACxe,EAAQwe,EAAsB1zB,IAE5BwV,GAAgB,IAAAlM,UAAQ,IAAM,UAAOqqB,sBAAsB,IAEjE,OACI,oCACKne,GACG,kBAAC,EAAAue,mBAAkB,eACfve,cAAeA,EACfqe,qBAAsBJ,EACtBhe,gBAAiBL,GACbrV,IAGZ,kBAAC2E,EAAO,CAACC,MAAOA,IAEvB,ECtCQqvB,GAAgB,EACzB1wB,OACAF,eACAZ,QACAyc,UACAgV,iBACAhJ,WACAzqB,OAAO,gBAEP,MAAMc,GAAO,IAAAC,WACPrB,GAAgB,IAAAC,aAAY,KAAQC,UAAUC,qBAEpD,OACI,kBAAC,EAAAsZ,SAAQ,CACLrW,KAAMA,EACNF,aAAcA,EACdZ,MAAOA,QAAAA,EAASlB,EAAKmC,cAAc,CAAErB,GAAI,oBACzC0D,QAAS,CACL,CACIC,SAAU,kBAAC,EAAA6C,iBAAgB,CAACxG,GAAG,kBAC/B1B,MAAO,SACPsF,aAAc,IAAM5C,KAExB,CACI2C,SAAU,kBAAC,EAAA6C,iBAAgB,CAACxG,GAAG,oBAC/B1B,MAAO,SACPsF,aAAc,KACV5C,IACA6nB,GAAU,KAItB,kBAAC,EAAApD,WAAU,CACPjnB,QAAS,UACToP,QAASikB,QAAAA,EAAkB3yB,EAAKmC,cAAc,CAAErB,GAAI,0BAExD,kBAAC,EAAA8xB,iBAAgB,CACbC,aAAeC,GAAuB,aAAkBC,aAAaD,GACrEE,YAAY,EACZrV,QAASA,EACThR,UAAU,EACV2K,YAAatX,EAAKmC,cAAc,CAAErB,GAAI,oBACtC5B,KAAMA,EACN+zB,qBACIr0B,EACM,CACI,CACII,IAAKJ,EAAcI,IACnBkC,MAAOtC,EAAcsC,MACrBgyB,cAAc,EACd5qB,KAAM,iBAGd,KAIrB,E,cClEL,MAAM,GAAY,UAAOzC,SAASC,iBAAiB,aAC7CqtB,GAAY,UAAOttB,SAASC,iBAAiB,aAC7CstB,GAAa,UAAOvtB,SAASC,iBAAiB,cAqB7C,SAASutB,IAAa,eAAEC,EAAc,OAAEC,EAAM,YAAEvyB,EAAW,KAAEiF,EAAO,W,MACvE,MAAMjG,GAAO,IAAAC,YACP,SAAEuzB,IAAa,KAAAC,eAEfC,GAAe,IAAA1rB,UAAQ,IAAMgd,OAAOuF,OAAOgJ,IAAS,CAACA,KACpDI,EAAWC,GAAgB,WAAgC,QAAjB,EAAAF,aAAY,EAAZA,EAAe,UAAE,eAAE7yB,KAE9DgzB,EAAOH,EAAanzB,KAAK2vB,GAAS,OAAD,wBAChCA,GAAG,CACNxoB,MAAO1H,EAAKmC,cAAc,CAAErB,GAAIovB,EAAIxoB,QACpChH,KAAMwvB,EAAI4D,aAAe5D,EAAIle,KAAO,UAAUshB,KAAkBpD,EAAIle,OACpE+hB,MAAO7D,EAAI6D,MAAQ/zB,EAAKmC,cAAc,CAAErB,GAAIovB,EAAI6D,aAAW9yB,MAkB/D,OAfA,aAAgB,KACZ,MAAM+yB,EAAcN,EAAa1qB,MAAMirB,I,MACnC,MAAI,UAAUX,KAAkBW,EAAMjiB,SAAWwhB,IAI/B,QAAX,EAAAS,EAAMC,aAAK,eAAEC,QAAgB,CAACC,EAAwBC,KACzD,MAAMC,EAAU,UAAUhB,KAAkBe,IACtCE,EAA2C,QAAjC,KAAAC,WAAUF,EAASd,GACnC,OAAOY,GAAiBG,CAAO,IAChC,GAAM,IAETP,GAAaJ,EAAaI,EAAYnzB,IAAI,GAC/C,CAAC2yB,EAAUE,EAAcJ,IAGxB,gBAAC,WAAc,CAACmB,SAAU,kCACtB,gBAAC,GAAS,CAACxuB,KAAMA,GACb,gBAACktB,GAAS,CAACltB,KAAMA,EAAMjF,YAAaA,EAAa6yB,KAAMA,EAAMF,UAAWA,GAAa,KACrF,gBAACP,GAAU,CAACntB,KAAMA,GACd,gBAAC,GAAAyuB,OAAM,QAK3B,C","sources":["webpack://ReactCore/./src/components/Avatar.tsx","webpack://ReactCore/./src/components/Audience.tsx","webpack://ReactCore/./src/components/tinymce/extension/AIModal.tsx","webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetList/WidgetList.tsx","webpack://ReactCore/./src/components/widgets/namespace.ts","webpack://ReactCore/./src/components/widgets/wrapper/utils.ts","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetDatasourceTableWrapper.tsx","webpack://ReactCore/./src/components/widgets/components/WidgetUploader.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleAttachmentWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleButtonWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleGalleryWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleImageWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleSliderWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleTextWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetArticleTitleWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetCheckListWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetExcelDatasourceTableWrapper.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetRemove.tsx","webpack://ReactCore/./src/components/widgets/wrapper/components/WidgetViewFooterActions.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetPresenceWrapperClosing.tsx","webpack://ReactCore/./src/components/widgets/wrapper/JRCWidgetPresenceWrapper.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/WidgetState.tsx","webpack://ReactCore/./src/components/widgets/Widget.style.tsx","webpack://ReactCore/./src/components/widgets/WidgetWrapperCore.tsx","webpack://ReactCore/./src/components/widgets/components/WidgetEditorPanel.tsx","webpack://ReactCore/./src/components/CommentsBloc.tsx","webpack://ReactCore/./src/hooks/useCommentsLikeRT.ts","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/states/EditorIsBusy.tsx","webpack://ReactCore/./src/components/editors/EditorPosition.tsx","webpack://ReactCore/./src/components/editors/states/EditorIsInitialize.tsx","webpack://ReactCore/./src/components/editors/states/EditorIsLocked.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/JRCInputTinyMCEWithExt.tsx","webpack://ReactCore/./src/components/tinymce/JRCInputTinyMCEWithExtRaw.tsx","webpack://ReactCore/./src/components/modals/ModalAudience.tsx","webpack://ReactCore/./src/components/TwoColLayout.tsx"],"sourcesContent":["import { JRCAvatar, JRCAvatarProps, JRCIcon } from 'jamespot-react-components';\r\nimport { Network } from 'jamespot-front-business';\r\nimport { useSelector } from 'react-redux';\r\nimport React from 'react';\r\nimport { useTheme } from 'styled-components';\r\n\r\nconst BASE_MULTIPLE = 8;\r\n\r\nexport const Avatar = (props: JRCAvatarProps) => {\r\n const theme = useTheme();\r\n const networkPublic = useSelector(Network.selectors.selectNetworkPublic);\r\n\r\n if (props.uri === networkPublic?.uri) {\r\n return (\r\n <JRCIcon\r\n name={'icon-fs-wall'}\r\n size={(props.size ?? 3) * BASE_MULTIPLE}\r\n color={theme.color.primary}\r\n variant={'circle'}\r\n />\r\n );\r\n }\r\n\r\n return <JRCAvatar {...props} />;\r\n};\r\n","import React, { useState } from 'react';\nimport styled, { useTheme } from 'styled-components';\nimport { useIntl } from 'react-intl';\nimport {\n Utils,\n JRCFlexBox,\n JRCModalContent,\n JRCModalLayout,\n JRCStyledHref,\n JRCTooltip,\n JRCTypography,\n} from 'jamespot-react-components';\nimport { Avatar } from './Avatar';\nimport { jObjectLittle } from 'jamespot-user-api';\n\nexport type AudienceProps<T extends jObjectLittle> = {\n audience: T[];\n limit?: number;\n};\n\nconst LIMIT = 2;\n\nconst AudienceWrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin-bottom: 24px;\n`;\n\nexport const AvatarLink = styled.a<{ overlap?: boolean }>`\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n width: 40px;\n height: 40px;\n border-radius: 40px;\n overflow: hidden;\n color: ${(props) => props.theme.color.white};\n background-color: ${(props) => props.theme.color.lavender};\n border: 4px solid ${(props) => props.theme.color.white};\n margin-left: ${(props) => (props.overlap ? '-18px' : '0')};\n cursor: pointer;\n`;\n\nexport const Audience = <T extends jObjectLittle>({ audience, limit = LIMIT }: AudienceProps<T>) => {\n const intl = useIntl();\n const theme = useTheme();\n const [isModalOpen, setModalOpen] = useState(false);\n\n return (\n <>\n <JRCFlexBox>\n {[...audience].splice(0, limit).map((item, index) => (\n <AvatarLink overlap={index !== 0} href={item._url} target={'_blank'} key={item.id}>\n <JRCTooltip description={item.title === undefined ? ' ' : item.title} position=\"left\">\n <Avatar\n uri={item.uri}\n size={4}\n variant=\"circle\"\n alt=\"image\"\n timestamp={item.dateModified ? Utils.date.strToTimestamp(item.dateModified) : undefined}\n focusable\n />\n </JRCTooltip>\n </AvatarLink>\n ))}\n {audience.length > limit && (\n <AvatarLink onClick={() => setModalOpen(true)} overlap={true}>\n +{audience.length - limit}\n </AvatarLink>\n )}\n </JRCFlexBox>\n {audience.length > limit && (\n <JRCModalLayout\n closeHandler={() => setModalOpen(false)}\n enableClickAwayCloseModal\n open={isModalOpen}\n variant={'fixed-height'}\n maxHeight={'800px'}>\n <JRCModalContent\n title={intl.formatMessage({ id: 'GLOBAL_Audience' })}\n overflow={'scroll'}\n onClickIconClose={() => setModalOpen(false)}>\n <AudienceWrapper>\n {audience.map((item, i) => (\n <JRCFlexBox key={`audience-${i}`} y={'center'} gap={theme.space.l}>\n <Avatar size={5} uri={`${item.type}/${item.id}`} />\n <JRCStyledHref href={`${item.type}/${item.id}`}>\n <JRCTypography>{item.title}</JRCTypography>\n </JRCStyledHref>\n </JRCFlexBox>\n ))}\n </AudienceWrapper>\n </JRCModalContent>\n </JRCModalLayout>\n )}\n </>\n );\n};\n","import { JiaTextEnhanceQuery } from 'hooks/useAI';\nimport { JRCLoader, JRCModalContent, JRCModalLayout, JRCTypography } from 'jamespot-react-components';\nimport jamespot from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\n\nimport styled, { useTheme } from 'styled-components';\n\nconst TextWrapper = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n`;\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 const theme = useTheme();\n\n const sendAIRequest = useCallback(\n (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((_err) => {\n setResponse({\n error: intl.formatMessage({ id: 'JIA_ERROR_AI_CALL' }),\n loading: false,\n response: undefined,\n });\n });\n },\n [intl],\n );\n\n useEffect(() => {\n if (query && query.text.trim().length > 0) {\n sendAIRequest(query);\n }\n }, [query, sendAIRequest]);\n\n return (\n <JRCModalLayout\n zIndex={theme.zIndex.tinyMCEModal}\n open={!!query}\n closeHandler={() => {\n query?.reject();\n }}>\n <JRCModalContent\n overflow=\"scroll\"\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 isFull>\n <TextWrapper>\n {response.loading && (\n <>\n <JRCLoader />\n <JRCTypography align=\"center\">\n {intl.formatMessage({ id: 'JIA_WAITING_WARNIG' })}\n </JRCTypography>\n </>\n )}\n {!response.loading && response.error && <p>{response.error}</p>}\n {!response.loading && response.response && <p>{response.response}</p>}\n </TextWrapper>\n </JRCModalContent>\n </JRCModalLayout>\n );\n};\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; height: number }>`\n border: 2px solid ${(props) => props.theme.color.primary};\n height: ${(props) => (props.open ? props.height : '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; full?: boolean }>`\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 ${(props) => props.full && `flex: 1`}\n`;\n\nexport const Flex = styled.div<{ direction: 'row' | 'column'; gap?: number }>`\n display: flex;\n flex-direction: ${(props) => (props.direction === 'row' ? 'row' : 'column')};\n align-items: ${(props) => (props.direction === 'row' ? 'center' : 'flex-start')};\n justify-content: ${(props) => (props.direction === 'row' ? 'flex-start' : 'center')};\n flex: 1;\n ${(props) => props.gap && `gap:${props.gap}px`}\n`;\n","import React, { useMemo } from 'react';\nimport { FormattedMessage, 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 { JRCModalLayoutProps } from 'jamespot-react-components';\nimport { getBuilderWidgets } from '../namespace';\nimport {\n CSSSquareWidget,\n CSSSquareWidgetWrapper,\n CSSWidgetButton,\n CSSWrapTitle,\n CSSWrapWidget,\n CSSWrapWidgetWrapper,\n Flex,\n} from './WidgetList.style';\n\nconst JRCButton = JRCore.registry.getLazyComponent('Button');\nconst JRCModalLayout = JRCore.registry.getLazyComponent('ModalLayout');\nconst JRCModalContent = JRCore.registry.getLazyComponent('ModalContent');\nconst JRCTooltip = JRCore.registry.getLazyComponent('Tooltip');\nconst JRCIconButton = JRCore.registry.getLazyComponent('IconButton');\n\ntype WidgetListMode = 'button' | 'list' | 'gallery' | 'custom' | 'article' | 'comment';\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 return (\n <>\n <JRCModalLayout {...args}>\n <JRCModalContent\n onClickIconClose={args.closeHandler}\n buttons={\n mode === 'comment'\n ? [\n {\n children: <FormattedMessage id=\"GLOBAL_Close\" />,\n color: 'cancel',\n clickHandler: () => setOpen(false),\n },\n ]\n : undefined\n }\n title={intl.formatMessage({ id: 'WIDGET_Builder' })}>\n {mode === 'comment' ? (\n <CSSWrapWidgetWrapper>\n {widgets.map((widget, index) => (\n <CSSWrapWidget\n key={widget.name}\n open={true}\n full\n index={index}\n onClick={() => onClick(widget.name)}>\n <Flex direction={'row'} gap={12}>\n <img src={widget.img} />\n <Flex direction={'column'}>\n <h3>{intl.formatMessage({ id: widget.label })}</h3>\n <p>{intl.formatMessage({ id: widget.description })}</p>\n </Flex>\n </Flex>\n </CSSWrapWidget>\n ))}\n </CSSWrapWidgetWrapper>\n ) : (\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 </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 {mode === 'comment' && view === 'edit' ? (\n <WidgetModeComment\n onClick={() => {\n setOpen(true);\n }}\n />\n ) : (\n <></>\n )}\n </>\n );\n};\n\nconst HEIGHT_CLOSED = 50;\nconst HEIGHT = 80;\nconst MARGIN_BOTTOM = 10;\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\n const calcHeight = useMemo(() => {\n return Math.ceil(widgets.length / 2) * HEIGHT + HEIGHT_CLOSED + MARGIN_BOTTOM;\n }, [widgets]);\n\n return (\n <>\n <CSSWidgetButton open={open} height={calcHeight}>\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\nconst WidgetModeComment = ({ onClick }: { onClick: () => void }) => {\n const intl = useIntl();\n return (\n <>\n <JRCTooltip description={intl.formatMessage({ id: 'COMMENT_Add_Widget' })}>\n <JRCIconButton\n bg={'grey1'}\n bgHover={'grey2'}\n color={'grey5'}\n iconSize={22}\n onClick={() => {\n onClick();\n }}\n icon={'icon-fs-puzzle'}\n />\n </JRCTooltip>\n </>\n );\n};\n","import { Widget } from 'jamespot-front-business';\nimport { WidgetDefinitionProps, WidgetsName } from 'jamespot-user-api';\n\nexport function getBuilderWidgets(namespace: string): WidgetDefinitionProps[] {\n switch (namespace) {\n case 'widget-article-image':\n return [Widget.definition(WidgetsName.ArticleTitle), Widget.definition(WidgetsName.ArticleButton)];\n case 'comment':\n return [Widget.definition(WidgetsName.CheckList), Widget.definition(WidgetsName.Presence)];\n default:\n return [\n Widget.definition(WidgetsName.ArticleTitle),\n Widget.definition(WidgetsName.ArticleText),\n Widget.definition(WidgetsName.ArticleImage),\n Widget.definition(WidgetsName.ArticleButton),\n Widget.definition(WidgetsName.ArticleSlider),\n Widget.definition(WidgetsName.ArticleAttachment),\n Widget.definition(WidgetsName.Presence),\n ];\n }\n}\n","import { WidgetTableColumn, WidgetTableColumnsData } from 'jamespot-user-api';\n\nexport const getVisibleColumns = (tableColumnsData: WidgetTableColumnsData, columns: WidgetTableColumn[]) => {\n const toRet: WidgetTableColumn[] = [];\n tableColumnsData\n .filter((data) => data.isVisible)\n .forEach((data) => {\n const column = columns.find((el) => el.name === data.name);\n if (column) {\n toRet.push(column);\n }\n });\n\n return toRet;\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\nconst WidgetTable = JRCore.registry.getLazyComponent('WidgetTable');\n\nimport { FormattedMessage } from 'react-intl';\n\nconst Loader = JRCore.registry.getLazyComponent('Loader');\n\nimport jamespot, {\n DatasourceResultSort,\n DatasourceType,\n Format,\n WidgetDatasourceValues,\n WidgetDisplayMode,\n WidgetsName,\n WidgetTableColumn,\n} from 'jamespot-user-api';\n\nimport styled from 'styled-components';\nimport { WidgetDatasourceTableContent } from 'jamespot-user-api';\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { useAppDispatch } from 'redux/store';\nimport { JRCButton, JRCHtml } from 'jamespot-react-components';\nimport { getVisibleColumns } from './utils';\nimport { FitType, useArticleRT } from '../hooks';\n\nexport const Wrapper = styled.div``;\n\nexport const AbsoluteWrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n`;\n\nexport const WrapperEditMode = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n color: ${(props) => props.theme.color.primary};\n cursor: pointer;\n opacity: 0;\n border: 1px solid ${(props) => props.theme.color.primary};\n &:hover {\n background-color: ${(props) => props.theme.color.grey2};\n opacity: 0.9;\n }\n`;\n\nexport const WidgetDatasourceTableWrapper = ({\n uniqid,\n uri,\n limit,\n tableHeadColor,\n tableHeadTextColor,\n tableHeadIconColor,\n tableRowColor,\n tableRowTextColor,\n tableColumnsData = [],\n tableBorderRadius,\n tableSizedColumns,\n tableSizedColumnsWidth,\n mode,\n}: WidgetDatasourceTableContent & { uniqid: string; mode: WidgetDisplayMode }) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const [isEditorOpenOnFirstRender, setIsEditorOpenOnFirstRender] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [datasourceData, setDatasourceData] = useState<Record<string, WidgetDatasourceValues>[]>([]);\n const [datasourceModel, setDatasourceModel] = useState<WidgetTableColumn[]>([]);\n const [datasourceSort, setDatasourceSort] = useState<DatasourceResultSort>({ order: 'ascending', name: 'unknown' });\n const [datasourceType, setDatasourceType] = useState<DatasourceType | undefined>(undefined);\n const [datasourceIdentifier, setDatasourceIdentifier] = useState<string>('');\n\n const definition = useMemo(() => Widget.definition(WidgetsName.DatasourceTable), []);\n const rtConditions = useMemo<FitType[]>(() => {\n if (datasourceType === 'studio') {\n return [{ type: [datasourceIdentifier] }];\n }\n\n return [];\n }, [datasourceType, datasourceIdentifier]);\n const rtAudience = useMemo<string[]>(() => {\n if (datasourceType === 'doc') {\n return [datasourceIdentifier];\n }\n\n return [];\n }, [datasourceType, datasourceIdentifier]);\n\n const { rtLastObject } = useArticleRT(rtConditions, rtAudience);\n\n const fetchDatasource = useCallback(() => {\n if (!uri) {\n return;\n }\n\n setIsLoading(true);\n jamespot.datasource\n .get(uri, Format.VIEW)\n .then((response) => {\n setDatasourceModel(response.result.model);\n setDatasourceData(response.result.data);\n setDatasourceSort(response.result.sort);\n setDatasourceType(response.result.datasource.datasourceType);\n setDatasourceIdentifier(response.result.datasource.datasourceIdentifier);\n })\n .finally(() => setIsLoading(false));\n }, [uri]);\n\n useEffect(() => {\n if (uri !== undefined && tableColumnsData.length !== 0 && datasourceModel.length === 0) {\n fetchDatasource();\n }\n }, [uri, tableColumnsData, datasourceModel, fetchDatasource]);\n\n useEffect(() => {\n if (!rtLastObject) {\n return;\n }\n\n fetchDatasource();\n }, [rtLastObject, fetchDatasource]);\n\n useEffect(() => {\n if (!uri) {\n setDatasourceModel([]);\n }\n }, [uri]);\n\n const registerEditor = useCallback(() => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n setTimeout(() => {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: WidgetsName.DatasourceTable }));\n }, 0);\n }, [dispatch, uniqid]);\n\n useEffect(() => {\n if (mode === 'view' || mode === 'preview') {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n }\n }, [mode, dispatch]);\n\n useEffect(() => {\n if (!isEditorOpenOnFirstRender && !uri && mode === 'edit') {\n registerEditor();\n setIsEditorOpenOnFirstRender(true);\n }\n }, [dispatch, uniqid, isEditorOpenOnFirstRender, uri, registerEditor, mode]);\n\n const columns = useMemo(\n () => getVisibleColumns(tableColumnsData, datasourceModel),\n [tableColumnsData, datasourceModel],\n );\n\n if (tableColumnsData.length === 0 && !isLoading && mode === 'edit') {\n return (\n <>\n <AbsoluteWrapper onClick={registerEditor}>\n <img src={`/img/fast-intranet/${WidgetsName.DatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={definition.label} />\n <JRCButton label=\"GLOBAL_Settings\" />\n </AbsoluteWrapper>\n <WrapperEditMode onClick={registerEditor}>\n <JRCHtml\n __html={`${intl.formatMessage({ id: 'WIDGET_Set_Widget' })} <b>${intl.formatMessage({\n id: definition.label,\n })}</b>`}\n />\n </WrapperEditMode>\n </>\n );\n }\n\n return isLoading ? (\n <AbsoluteWrapper>\n <Loader />\n </AbsoluteWrapper>\n ) : (\n <>\n {!isLoading && datasourceData.length === 0 ? (\n <AbsoluteWrapper>\n <img src={`/img/fast-intranet/${WidgetsName.DatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={'WIDGET_Datasource_No_Results'} />\n </AbsoluteWrapper>\n ) : (\n <WidgetTable\n rows={datasourceData}\n columns={columns}\n limit={limit}\n tableHeadColor={tableHeadColor}\n tableHeadTextColor={tableHeadTextColor}\n tableHeadIconColor={tableHeadIconColor}\n tableRowColor={tableRowColor}\n tableRowTextColor={tableRowTextColor}\n tableBorderRadius={tableBorderRadius}\n tableColumnsData={tableColumnsData}\n tableSizedColumns={tableSizedColumns}\n tableSizedColumnsWidth={tableSizedColumnsWidth}\n tableDefaultSortOrder={datasourceSort.order}\n tableDefaultSortName={datasourceSort.name}\n />\n )}\n {mode === 'edit' ? (\n <WrapperEditMode onClick={registerEditor}>\n <JRCHtml\n __html={`${intl.formatMessage({ id: 'WIDGET_Set_Widget' })} <b>${intl.formatMessage({\n id: definition.label,\n })}</b>`}\n />\n </WrapperEditMode>\n ) : (\n <></>\n )}\n </>\n );\n};\n","import React from 'react';\n\nimport { useSelector } from 'react-redux';\n\nimport { jFileLittle } from 'jamespot-user-api';\n\nimport { Widget } from 'jamespot-front-business';\nimport styled from 'styled-components';\nimport { JRCInputFileAdvancedRaw } from 'jamespot-react-components';\n\nexport const CSSHidden = styled.div`\n width: 0;\n height: 0;\n overflow: hidden;\n`;\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 // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialFiles]);\n\n React.useEffect(() => {\n onUploadSuccess(files);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [files]);\n\n React.useEffect(() => {\n if (total === 0) {\n onUploadEnd();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\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 <JRCInputFileAdvancedRaw\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, { useEffect } 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 const onError = (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n };\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !files || files.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [files]);\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} onError={onError} />\n ) : (\n <FileViewer files={files} openWithOptions={openWithOptions}>\n {(open) => {\n return <WidgetAttachment files={files} onClick={(idFile) => open(idFile)} onError={onError} />;\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, { useEffect } 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 { Widget, 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 useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\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 { 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 // eslint-disable-next-line react-hooks/exhaustive-deps\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, { useEffect, useState } from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport {\n WidgetArticleImageContent,\n WidgetArticleImageType,\n WidgetDisplayMode,\n WidgetsRootState,\n formatImgUrl,\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 size: 10,\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] = useState<string | undefined>(undefined);\n const intl = useIntl();\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, mounted: true }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n dispatch(Widget.slice.actions.setWidgetState({ uniqid, empty: !file }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [file]);\n\n useEffect(() => {\n if (file) {\n setUri(\n formatImgUrl({\n timestamp: file.dateModified ? strToTimestamp(file.dateModified) : Date.now(),\n from: 'imagecache',\n size: 'fitx1200',\n uri: file.uri,\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, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport {\n WidgetArticleSliderType,\n WidgetDisplayMode,\n WidgetsRootState,\n formatImgUrl,\n jFileLittle,\n} 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<{ maxWidth: number }>`\n flex: 1;\n display: flex;\n flex-direction: row;\n min-height: 60px;\n align-items: center;\n width: ${(props) => props.maxWidth}px;\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 size: 10,\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 maxWidth = width ?? 600;\n const [dynamicWidth, setDynamicWidth] = useState<number | undefined>(undefined);\n const ref = useRef<HTMLDivElement>(null);\n const fileViewerFiles = useMemo(\n () =>\n 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: formatImgUrl({\n size: 'fitx1200',\n uri: slide.file ? slide.file.uri : '',\n from: 'imagecache',\n timestamp:\n slide.file && slide.file.dateModified\n ? strToTimestamp(slide.file.dateModified)\n : Date.now(),\n }),\n };\n }),\n ]\n : [],\n [widget.content.slides],\n );\n\n const slides = useMemo(\n () =>\n widget.content.slides !== undefined\n ? [\n ...widget.content.slides.map((slide) => {\n if (slide.file) {\n return {\n ...slide,\n uri: formatImgUrl({\n timestamp: slide.file.dateModified\n ? strToTimestamp(slide.file.dateModified)\n : Date.now(),\n size: `fitx${dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}`,\n from: 'imagecache',\n uri: slide.file.uri,\n }),\n };\n } else {\n return {\n ...slide,\n uri: '',\n };\n }\n }),\n ]\n : [],\n [widget.content.slides, dynamicWidth, maxWidth],\n );\n\n useEffect(() => {\n if (isActive && mode === 'edit') {\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: widget.name }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isActive]);\n\n useEffect(() => {\n const handleResize = () => {\n if (ref.current) {\n setDynamicWidth(ref.current ? ref.current.offsetWidth : maxWidth);\n }\n };\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref]);\n\n useEffect(() => {\n setDynamicWidth(ref.current ? ref.current.offsetWidth : maxWidth);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref]);\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !widget.content.slides || widget.content.slides.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [widget.content.slides]);\n\n const isEditable = useMemo(\n () => mode === 'edit' && Array.isArray(widget.content.slides) && widget.content.slides.length === 0,\n [widget.content.slides, mode],\n );\n\n const handleEditor = useCallback(() => {\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: widget.name,\n }),\n );\n }, [dispatch, widget.uniqid, widget.name]);\n\n /** small hack to catch the real width of the div */\n if (dynamicWidth === undefined) {\n return <div ref={ref} style={{ width: '100%' }}></div>;\n }\n\n return (\n <Wrapper maxWidth={dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}>\n <FileViewer files={fileViewerFiles} openWithOptions={[]}>\n {(open) => {\n return (\n <JRCWidgetSlider\n slides={slides}\n maxWidth={dynamicWidth && dynamicWidth < maxWidth ? dynamicWidth : maxWidth}\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 {isEditable ? (\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={handleEditor}\n />\n ) : (\n <></>\n )}\n </Wrapper>\n );\n};\n","import React, { useCallback, useEffect, useMemo } from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport JRCore from 'App';\nimport { useIntl } from 'react-intl';\nimport {\n WidgetArticleTextContent,\n WidgetArticleTextType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport { Model, TinyMCE, Toast, Widget, updateWidgetContent } from 'jamespot-front-business';\n\nconst WidgetArticleText = JRCore.registry.getLazyComponent('WidgetArticleText');\n\nimport { getTinyMCEMentionsQueries } from 'App';\n\nimport styled, { useTheme } from 'styled-components';\n\nconst CSSTextWrapper = styled.div`\n cursor: text;\n p {\n word-wrap: break-word;\n }\n a {\n word-wrap: break-word;\n }\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 } = widget.content;\n const dispatch = useDispatch();\n const isActive = useSelector((state: WidgetsRootState) => Widget.selectors.isActive(state, uniqid), shallowEqual);\n const isBusy = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid)?.busy);\n const token = useSelector(Widget.selectors.selectToken);\n const tinyMCECommonOptions = useSelector(TinyMCE.selectors.selectTinyMCECommonOptions);\n const models = useSelector(Model.selectors.selectAll);\n\n const intl = useIntl();\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onError);\n }, [models, onError, theme]);\n\n // small hack to hide and redraw tinymce to avoid initialization issue\n if (isBusy) {\n return <></>;\n }\n\n return (\n <CSSTextWrapper>\n <WidgetArticleText\n autoFocus={isActive}\n text={text ?? ''}\n token={mode === 'edit' && token !== undefined ? token : ''}\n tinyMCECommonOptions={\n mode === 'edit' && tinyMCECommonOptions\n ? {\n tinymceScriptSrc: 'https://ecosysteme.jamespot.pro/js/tinymce/tinymce.min.js',\n commonOptions: tinyMCECommonOptions,\n mentionsQueries: tinyMentionsQueries,\n }\n : undefined\n }\n mode={mode}\n onChange={(text) => {\n dispatch(updateWidgetContent<WidgetArticleTextContent>(uniqid, { text }));\n }}\n />\n </CSSTextWrapper>\n );\n};\n","import React, { useEffect } from 'react';\n\nimport JRCore from 'App';\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';\n\nconst WidgetArticleTitle = JRCore.registry.getLazyComponent('WidgetArticleTitle');\n\nimport styled from 'styled-components';\n\nconst CSSTextWrapper = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n align-items: center;\n cursor: text;\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 useEffect(() => {\n dispatch(\n Widget.slice.actions.setWidgetState({\n uniqid,\n empty: !text || text.length === 0,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text]);\n\n return (\n <CSSTextWrapper>\n <WidgetArticleTitle\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 </CSSTextWrapper>\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 { Toast, updateWidgetContent, UserCurrent, Widget, WidgetEditor } from 'jamespot-front-business';\nimport { JRCIconButton, JRCInputTextRaw, JRCModal } from 'jamespot-react-components';\nimport { JRCWidgetCheckListEntries } from 'jamespot-react-components/build/src/components/Widgets/JRCWidgetCheckList/JRCWidgetCheckList';\nimport jamespot, {\n CombinedWidgetContent,\n WidgetCheckListContent,\n WidgetCheckListContentArr,\n WidgetCheckListType,\n WidgetDisplayMode,\n WidgetsName,\n WidgetsRootState,\n} from 'jamespot-user-api';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { FormattedMessage, useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\n\nconst WidgetCheckList = J.react.registry.getLazyComponent('WidgetCheckList');\nconst WidgetCheckListEditor = J.react.registry.getLazyComponent('WidgetCheckListEditor');\nconst Typography = J.react.registry.getLazyComponent('Typography');\n\nexport const CSSRowLinkWrapper = styled.div<{ border?: boolean }>`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n border: ${(props) => (props.border ? `1px solid ${props.theme.color.grey2}` : 'none')};\n min-height: 24px;\n border-radius: 4px;\n padding: 4px 8px;\n`;\n\nconst WidgetConfigWrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n border: 1px solid ${(props) => props.theme.color.grey1};\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n padding: 4px;\n margin-bottom: 8px;\n\n div:first-child {\n margin: 0 auto;\n }\n\n div:last-child {\n align-self: flex-end;\n }\n`;\nconst Column = styled.div`\n width: 100%;\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n gap: 8px;\n`;\n\nconst CommentContainer = styled.div`\n display: flex;\n gap: 14px;\n padding: 10px 10px 0 10px;\n border-radius: 8px;\n background-color: ${({ theme }) => theme.color.white};\n border: 1px solid ${(props) => props.theme.color.grey2};\n`;\n\nexport const FormItemContainer = styled.div<{ border?: boolean }>`\n width: 100%;\n padding-bottom: 12px;\n border-bottom: ${(props) => (props.border ? `1px solid ${props.theme.color.grey1}` : 0)};\n`;\n\ntype JRCWidgetCheckListWrapperProps = {\n widget: WidgetCheckListType;\n commentId?: number;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n editRight: boolean;\n deleteRight: boolean;\n onRemove?: (uniqid: string) => void;\n onWidgetUpdate?: () => void;\n};\n\nexport const JRCWidgetCheckListWrapper = ({\n widget,\n commentId,\n inplace,\n mode,\n editRight,\n deleteRight,\n onRemove,\n onWidgetUpdate,\n}: JRCWidgetCheckListWrapperProps) => {\n const intl = useIntl();\n const { uniqid, content: widgetContent } = widget;\n const dispatch = useDispatch();\n\n const [entries, setEntries] = useState<JRCWidgetCheckListEntries | undefined>();\n\n const [isDeleteModalOpen, setDeleteModalOpen] = useState(false);\n\n const [token, setToken] = useState<string>();\n const [tokenLoading, setTokenLoading] = useState(false);\n\n const widgetWrapper = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid));\n const currentUser = useSelector(UserCurrent.selectors.get);\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const onChange = (uniqid: string, content: CombinedWidgetContent) => {\n dispatch(updateWidgetContent(uniqid, content));\n };\n\n const onChangeWrapper = (content: { uniqid: string; title?: string }) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\n };\n\n const handleCheckItem = (id: string, index: number, items: JRCWidgetCheckListEntries) => {\n if (!commentId) return;\n\n const newItems: WidgetCheckListContentArr[] = items?.map((item) => ({\n title: item.text,\n ...(item.id && { id: item.id }),\n ...(item.links && { links: item.links }),\n ...(item.mimetype && { mimetypes: item.mimetype }),\n ...(currentUser &&\n item.checked && {\n user: {\n id: item.user?.id ?? currentUser.id,\n mainType: 'user',\n type: 'user',\n },\n }),\n ...(item.checked && { value: item.checked }),\n }));\n const content = {\n arr: newItems,\n };\n dispatch(updateWidgetContent<WidgetCheckListContent>(id, content));\n\n jamespot.widget\n .checkListRespond({\n id: commentId,\n type: 'comment',\n idUser: currentUser?.id,\n uniqid: id,\n index: index,\n })\n .then(() => {\n if (onWidgetUpdate) onWidgetUpdate();\n })\n .catch((err) => {\n onError(err.message);\n });\n };\n\n const handleRemoveWidget = () => {\n dispatch(Widget.slice.actions.flushWidget({ uniqid }));\n if (onRemove) {\n onRemove(uniqid);\n }\n setDeleteModalOpen(false);\n };\n\n const openEditorPanel = (token: string) => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n dispatch(Widget.slice.actions.setToken({ token }));\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid: widget.uniqid,\n name: WidgetsName.CheckList,\n }),\n );\n };\n\n useEffect(() => {\n const finalEntries: JRCWidgetCheckListEntries | undefined = widget.content.arr?.map((item) => ({\n text: item.title ?? '',\n checked: item.value ?? false,\n ...(item.links && {\n links: item.links,\n }),\n ...(item.user && { user: item.user ?? undefined }),\n ...(item.id && { id: item.id, mimetype: 'image/png' }),\n }));\n\n setEntries(finalEntries);\n }, [widget.content.arr, widgetContent]);\n\n useEffect(() => {\n if (token || tokenLoading) return;\n const fetchToken = () => {\n setTokenLoading(true);\n return jamespot.network\n .token()\n .then((res) => {\n setToken(res.result);\n setTokenLoading(false);\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n };\n fetchToken();\n }, [onError, token, tokenLoading]);\n\n if (mode === 'edit') {\n if (inplace) {\n return (\n <>\n <CommentContainer>\n <Column>\n <FormItemContainer border>\n <label>{intl.formatMessage({ id: 'COMMENT_WIDGET_CHECKLIST_Title' })}</label>\n <JRCInputTextRaw\n id={intl.formatMessage({ id: 'COMMENT_WIDGET_CHECKLIST_Title' })}\n required={true}\n placeholder={intl.formatMessage({ id: 'COMMENT_WIDGET_CHECKLIST_Title' })}\n type=\"text\"\n value={widgetWrapper?.title}\n onChange={(event) => {\n const { value } = event.target;\n onChangeWrapper({ uniqid, title: value });\n }}\n margin={'2px'}\n width=\"100%\"\n />\n </FormItemContainer>\n <WidgetCheckListEditor\n token={token}\n uniqid={uniqid}\n content={widgetContent}\n onChangeContent={onChange}\n onChangeWrapper={onChangeWrapper}\n openEditorPanel={openEditorPanel}\n onRemoveWidget={handleRemoveWidget}\n />\n </Column>\n </CommentContainer>\n </>\n );\n }\n }\n\n return (\n <>\n {entries && (\n <div key={widget.uniqid} style={{ width: '100%' }}>\n <WidgetCheckList\n title={widgetWrapper?.title}\n limit={10}\n initialEntries={entries}\n onFileClick={() => {\n // we did not use the onClick function\n }}\n onItemCheckListChange={(index, items) => handleCheckItem(widget.uniqid, index, items)}\n />\n {editRight && (\n <>\n <WidgetConfigWrapper>\n <div\n style={{ cursor: 'pointer' }}\n onClick={() => {\n if (token) {\n openEditorPanel(token);\n } else {\n onError(intl.formatMessage({ id: 'GLOBAL_Error' }));\n }\n }}>\n <Typography size=\"s\">\n {intl.formatMessage({ id: 'COMMENT_WIDGET_Configure' })}\n </Typography>\n </div>\n\n {deleteRight && (\n <div>\n <JRCIconButton\n iconSize={14}\n onClick={() => setDeleteModalOpen(true)}\n icon=\"icon-trash\"\n />\n </div>\n )}\n </WidgetConfigWrapper>\n </>\n )}\n <JRCModal\n buttons={[\n {\n color: 'cancel',\n clickHandler: () => setDeleteModalOpen(false),\n children: <FormattedMessage id={'GLOBAL_Cancel'} />,\n },\n {\n color: 'danger',\n clickHandler: handleRemoveWidget,\n children: <FormattedMessage id={'GLOBAL_Delete'} />,\n },\n ]}\n open={isDeleteModalOpen}\n closeHandler={() => setDeleteModalOpen(false)}\n title={intl.formatMessage({ id: 'GLOBAL_Delete' })}>\n {intl.formatMessage({ id: 'COMMENT_WIDGET_Delete_Widget' })}\n </JRCModal>\n </div>\n )}\n </>\n );\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport JRCore from 'App';\nconst WidgetTable = JRCore.registry.getLazyComponent('WidgetTable');\n\nimport { FormattedMessage } from 'react-intl';\n\nconst Loader = JRCore.registry.getLazyComponent('Loader');\n\nimport jamespot, {\n Format,\n WidgetDatasourceValues,\n WidgetDisplayMode,\n WidgetExcelDatasourceTableContent,\n WidgetsName,\n WidgetTableColumn,\n} from 'jamespot-user-api';\n\nimport styled from 'styled-components';\n\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { useAppDispatch } from 'redux/store';\nimport { JRCButton, JRCHtml } from 'jamespot-react-components';\nimport { getVisibleColumns } from './utils';\n\nexport const Wrapper = styled.div``;\n\nexport const AbsoluteWrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n`;\n\nexport const WrapperEditMode = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n gap: ${(props) => props.theme.space.md}px;\n color: ${(props) => props.theme.color.primary};\n cursor: pointer;\n opacity: 0;\n border: 1px solid ${(props) => props.theme.color.primary};\n &:hover {\n background-color: ${(props) => props.theme.color.grey2};\n opacity: 0.9;\n }\n`;\n\nexport const WidgetExcelDatasourceTableWrapper = ({\n uniqid,\n uri,\n limit,\n tableHeadColor,\n tableHeadTextColor,\n tableHeadIconColor,\n tableRowColor,\n tableRowTextColor,\n tableColumnsData = [],\n tableBorderRadius,\n tableSizedColumns,\n tableSizedColumnsWidth,\n mode,\n}: WidgetExcelDatasourceTableContent & { uniqid: string; mode: WidgetDisplayMode }) => {\n const intl = useIntl();\n const dispatch = useAppDispatch();\n const [isEditorOpenOnFirstRender, setIsEditorOpenOnFirstRender] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [datasourceData, setDatasourceData] = useState<Record<string, WidgetDatasourceValues>[]>([]);\n const [datasourceModel, setDatasourceModel] = useState<WidgetTableColumn[]>([]);\n\n const definition = useMemo(() => Widget.definition(WidgetsName.ExcelDatasourceTable), []);\n\n useEffect(() => {\n if (uri !== undefined && tableColumnsData.length !== 0 && datasourceModel.length === 0) {\n setIsLoading(true);\n jamespot.datasource\n .get(uri, Format.VIEW)\n .then((response) => {\n setDatasourceModel(response.result.model);\n setDatasourceData(response.result.data);\n })\n .finally(() => setIsLoading(false));\n }\n }, [uri, tableColumnsData, datasourceModel]);\n\n useEffect(() => {\n if (!uri) {\n setDatasourceModel([]);\n }\n }, [uri]);\n\n const registerEditor = useCallback(() => {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n setTimeout(\n () =>\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name: WidgetsName.ExcelDatasourceTable })),\n 0,\n );\n }, [dispatch, uniqid]);\n\n useEffect(() => {\n if (mode === 'view' || mode === 'preview') {\n dispatch(WidgetEditor.slice.actions.flushAllEditor());\n }\n }, [mode, dispatch]);\n\n useEffect(() => {\n if (!isEditorOpenOnFirstRender && !uri && mode === 'edit') {\n registerEditor();\n setIsEditorOpenOnFirstRender(true);\n }\n }, [dispatch, uniqid, isEditorOpenOnFirstRender, uri, registerEditor, mode]);\n\n const columns = useMemo(\n () => getVisibleColumns(tableColumnsData, datasourceModel),\n [tableColumnsData, datasourceModel],\n );\n\n if (tableColumnsData.length === 0 && !isLoading && mode === 'edit') {\n return (\n <>\n <AbsoluteWrapper onClick={registerEditor}>\n <img src={`/img/fast-intranet/${WidgetsName.ExcelDatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={definition.label} />\n <JRCButton label=\"GLOBAL_Settings\" />\n </AbsoluteWrapper>\n <WrapperEditMode onClick={registerEditor}>\n <JRCHtml\n __html={`${intl.formatMessage({ id: 'WIDGET_Set_Widget' })} <b>${intl.formatMessage({\n id: definition.label,\n })}</b>`}\n />\n </WrapperEditMode>\n </>\n );\n }\n\n return isLoading ? (\n <AbsoluteWrapper>\n <Loader />\n </AbsoluteWrapper>\n ) : (\n <>\n {!isLoading && datasourceData.length === 0 ? (\n <AbsoluteWrapper>\n <img src={`/img/fast-intranet/${WidgetsName.ExcelDatasourceTable}.png`} alt=\"\" />\n <FormattedMessage id={'WIDGET_Datasource_No_Results'} />\n </AbsoluteWrapper>\n ) : (\n <WidgetTable\n rows={datasourceData}\n columns={columns}\n limit={limit}\n tableHeadColor={tableHeadColor}\n tableHeadTextColor={tableHeadTextColor}\n tableHeadIconColor={tableHeadIconColor}\n tableRowColor={tableRowColor}\n tableRowTextColor={tableRowTextColor}\n tableBorderRadius={tableBorderRadius}\n tableColumnsData={tableColumnsData}\n tableSizedColumns={tableSizedColumns}\n tableSizedColumnsWidth={tableSizedColumnsWidth}\n />\n )}\n {mode === 'edit' ? (\n <WrapperEditMode onClick={registerEditor}>\n <JRCHtml\n __html={`${intl.formatMessage({ id: 'WIDGET_Set_Widget' })} <b>${intl.formatMessage({\n id: definition.label,\n })}</b>`}\n />\n </WrapperEditMode>\n ) : (\n <></>\n )}\n </>\n );\n};\n","import React, { useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport jamespot from 'jamespot-user-api';\n\nimport styled from 'styled-components';\n\nimport { JRCButton, JRCIcon, JRCModalLayout, JRCModalContent, JRCTooltip } from 'jamespot-react-components';\nimport { useDispatch } from 'react-redux';\nimport { Toast, Widget } from 'jamespot-front-business';\n\nexport const Button = styled.button`\n padding: ${(props) => props.theme.space.md}px;\n`;\n\nexport const Footer = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n display: flex;\n flex-direction: row-reverse;\n`;\n\nexport const WidgetRemove = ({ id, type, uniqid }: { id: number; type: string; uniqid: string }) => {\n const dispatch = useDispatch();\n const intl = useIntl();\n const [isOpen, setIsOpen] = useState<boolean>(false);\n\n const handleRemove = () => {\n jamespot.widget\n .removeWidget({ id, type, uniqid })\n .then(() => {\n dispatch(Widget.slice.actions.flushWidget({ uniqid }));\n })\n .catch(() => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })));\n };\n\n return (\n <>\n <Button onClick={() => setIsOpen(true)}>\n <JRCTooltip description={intl.formatMessage({ id: 'WIDGET_Remove_Widget' })}>\n <JRCIcon name=\"icon-trash\" color=\"orange\"></JRCIcon>\n </JRCTooltip>\n </Button>\n {isOpen && (\n <JRCModalLayout enableClickAwayCloseModal={true} open={isOpen} closeHandler={() => setIsOpen(false)}>\n <JRCModalContent\n overflow={'scroll'}\n title={intl.formatMessage({ id: 'WIDGET_Remove_Widget' })}\n onClickIconClose={() => setIsOpen(false)}>\n {intl.formatMessage({ id: 'WIDGET_Delete_Widget_Confirmation' })}\n </JRCModalContent>\n <Footer>\n <JRCButton label={intl.formatMessage({ id: 'GLOBAL_Confirm' })} onClick={handleRemove} />\n </Footer>\n </JRCModalLayout>\n )}\n </>\n );\n};\n","import React, { useCallback, useMemo } from 'react';\nimport { useIntl } from 'react-intl';\nimport jamespot, { WidgetsRootState, WidgetsName, ensureWidgetPresenceContent } from 'jamespot-user-api';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport styled from 'styled-components';\nimport { Toast, Widget, WidgetEditor } from 'jamespot-front-business';\nimport { WidgetRemove } from './WidgetRemove';\n\nexport const Footer = styled.div`\n display: flex;\n flex: 1;\n flex-direction: row;\n border-top: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nexport const Button = styled.button`\n padding: ${(props) => props.theme.space.md}px;\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n background-color: ${(props) => props.theme.color.white};\n &:hover {\n background-color: ${(props) => props.theme.color.grey1};\n }\n`;\n\nexport const WidgetViewFooterActions = ({\n id,\n type,\n name,\n uniqid,\n}: {\n id: number;\n type: string;\n name: WidgetsName;\n uniqid: string;\n}) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const widgetObject = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, uniqid),\n shallowEqual,\n );\n const widgetObjectRights = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectRights(state, uniqid),\n shallowEqual,\n );\n\n const canUpdate = useMemo(() => {\n return widgetObject && widgetObjectRights && widgetObjectRights.update;\n }, [widgetObject, widgetObjectRights]);\n\n const handleOnClick = useCallback(() => {\n dispatch(\n WidgetEditor.slice.actions.registerEditor({\n uniqid,\n name,\n onSave: (content) => {\n if (widgetObject && widgetObject.id && widgetObject.type && ensureWidgetPresenceContent(content)) {\n jamespot.widget\n .updateWidget({\n id: widgetObject.id,\n type: widgetObject.type,\n uniqid,\n content,\n v2: true,\n })\n .catch(() => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })));\n }\n },\n }),\n );\n }, [uniqid, dispatch, name, widgetObject]);\n\n return canUpdate ? (\n <Footer>\n <Button onClick={handleOnClick}>{intl.formatMessage({ id: 'WIDGET_Set_Widget' })}</Button>\n <WidgetRemove id={id} type={type} uniqid={uniqid} />\n </Footer>\n ) : (\n <></>\n );\n};\n","import React, { useCallback, useMemo } from 'react';\n\nimport jamespot, {\n WidgetDisplayMode,\n WidgetsRootState,\n ensureWidgetObjectHasMinimumProperties,\n WidgetPresenceContent,\n} from 'jamespot-user-api';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nexport const CSSPaddingMd = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n`;\n\nexport const CSSHref = styled.a`\n cursor: pointer;\n color: ${(props) => props.theme.color.secondary};\n`;\n\nexport const CSSHorizontalAlign = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nimport { Toast, Widget } from 'jamespot-front-business';\n\nexport const WidgetPresenceWrapperClosing = ({\n mode,\n uniqid,\n isClosed,\n}: { mode?: WidgetDisplayMode; uniqid: string } & Pick<WidgetPresenceContent, 'isClosed'>) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n\n const widgetObject = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, uniqid),\n shallowEqual,\n );\n\n const widgetObjectRights = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObjectRights(state, uniqid),\n shallowEqual,\n );\n\n const canUpdate = useMemo(() => {\n return widgetObject && widgetObjectRights && widgetObjectRights.update;\n }, [widgetObject, widgetObjectRights]);\n\n const handleClosing = useCallback(() => {\n if (mode === 'edit' || !canUpdate) {\n return;\n }\n if (!ensureWidgetObjectHasMinimumProperties(widgetObject)) {\n return;\n }\n\n const content = { isClosed: !isClosed };\n\n jamespot.widget\n .updateWidget({\n id: widgetObject.id,\n type: widgetObject.type,\n uniqid,\n content,\n v2: true,\n })\n .then(() => dispatch(Widget.slice.actions.updateWidget({ uniqid, content })))\n .catch(() => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })));\n }, [isClosed, mode, uniqid, canUpdate, widgetObject, dispatch]);\n\n return (\n <CSSPaddingMd>\n <CSSHorizontalAlign>\n <CSSHref onClick={handleClosing}>{intl.formatMessage({ id: 'WIDGET_Presence_Closing' })}</CSSHref>\n </CSSHorizontalAlign>\n </CSSPaddingMd>\n );\n};\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport jamespot, {\n ensureWidgetPresenceResponsePayload,\n ensureWidgetPresenceResponse,\n WidgetPresenceResponse,\n WidgetDisplayMode,\n WidgetPresenceType,\n WidgetsRootState,\n ensureWidgetObjectHasMinimumProperties,\n} from 'jamespot-user-api';\nimport { JRCLoader, JRCWidgetPresence } from 'jamespot-react-components';\nimport { RTProvider } from 'App';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport styled from 'styled-components';\n\nexport const CSSWidgetPresenceWrapper = styled.div`\n display: flex;\n flex: 1;\n position: relative;\n flex-direction: column;\n`;\n\nexport const CSSWidgetPresenceState = styled.div`\n position: absolute;\n inset: 0;\n background-color: rgba(255, 255, 255, 0.7);\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n`;\n\nimport { Toast, Widget } from 'jamespot-front-business';\nimport { WidgetViewFooterActions } from './components/WidgetViewFooterActions';\nimport { useWidgetRT } from '../hooks';\nimport { WidgetPresenceWrapperClosing } from './JRCWidgetPresenceWrapperClosing';\n\nexport const JRCWidgetPresenceWrapper = ({\n widget,\n mode,\n}: {\n widget: WidgetPresenceType;\n inplace: boolean;\n mode?: WidgetDisplayMode;\n}) => {\n const dispatch = useDispatch();\n const { limit, limitValue, closing, isClosed } = widget.content;\n const [response, setResponse] = useState<WidgetPresenceResponse>({\n userValue: -1,\n userAvailableList: [],\n userUnavailableList: [],\n userAvailableTotal: 0,\n userUnavailableTotal: 0,\n });\n const [isPendingResponse, setIsPendingResponse] = useState<boolean>(false);\n const [abortController] = useState<AbortController>(new AbortController());\n const ref = useRef<AbortController>(abortController);\n\n const widgetObject = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, widget.uniqid),\n shallowEqual,\n );\n\n const allRt = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectAllWidgetRTObject(state, widget.uniqid),\n shallowEqual,\n );\n\n const handleClickAvailable = () => (response.userValue === 1 ? handleCancelRespond() : handleRespond(1));\n const handleClickUnavailable = () => (response.userValue === 0 ? handleCancelRespond() : handleRespond(0));\n\n const handleError = useCallback(\n () => dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Error' })),\n [dispatch],\n );\n\n const lockedRespondHandler = useMemo(() => {\n return (closing && isClosed) || mode === 'edit';\n }, [closing, isClosed, mode]);\n\n const handleCancelRespond = useCallback(() => {\n if (lockedRespondHandler) {\n return;\n }\n if (!ensureWidgetObjectHasMinimumProperties(widgetObject)) {\n handleError();\n return;\n }\n\n setIsPendingResponse(true);\n jamespot.widget\n .presenceCancel({ id: Number(widgetObject.id), type: widgetObject.type, uniqid: widget.uniqid })\n .catch(handleError)\n .finally(() => setIsPendingResponse(false));\n }, [widgetObject, widget, handleError, lockedRespondHandler]);\n\n const handleRespond = useCallback(\n (responseValue: 1 | 0) => {\n if (lockedRespondHandler) {\n return;\n }\n if (!ensureWidgetObjectHasMinimumProperties(widgetObject)) {\n handleError();\n return;\n }\n\n setIsPendingResponse(true);\n const payload = {\n id: Number(widgetObject.id),\n type: widgetObject.type,\n uniqid: widget.uniqid,\n value: responseValue,\n };\n if (!ensureWidgetPresenceResponsePayload(payload)) {\n setIsPendingResponse(false);\n dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Payload_Error' }));\n return;\n }\n jamespot.widget\n .presenceRespond(payload, ref.current.signal)\n .catch(handleError)\n .finally(() => setIsPendingResponse(false));\n },\n [widgetObject, dispatch, widget, handleError, lockedRespondHandler],\n );\n\n const handleReponse = useCallback(\n (id: number, type: string, uniqid: string) => {\n if (mode === 'edit') {\n return;\n }\n if (limit && limitValue && response.userAvailableTotal >= limitValue) {\n dispatch(Toast.actions.error({ label: 'WIDGET_Presence_Limit_Response_Error' }));\n return;\n }\n\n jamespot.widget\n .presenceGetResponse({ id, type, uniqid }, ref.current.signal)\n .then((response) => {\n if (ensureWidgetPresenceResponse(response.result)) {\n setResponse(response.result);\n }\n })\n .catch((err) => !err.aborted && handleError);\n },\n [dispatch, response.userAvailableTotal, limit, limitValue, handleError, mode],\n );\n\n useEffect(() => {\n return () => {\n if (ref && ref.current) {\n ref.current.abort();\n }\n };\n }, []);\n\n useEffect(() => {\n if (!ensureWidgetObjectHasMinimumProperties(widgetObject)) {\n return;\n }\n\n handleReponse(widgetObject.id, widgetObject.type, widget.uniqid);\n }, [handleReponse, widgetObject, widget]);\n\n useEffect(() => {\n if (!Array.isArray(allRt)) {\n return;\n }\n const lastRt = allRt.at(-1);\n if (!lastRt) {\n return;\n }\n\n if (lastRt.object.id === Number(widgetObject?.id) && lastRt.uniqid === widget.uniqid && !isPendingResponse) {\n handleReponse(lastRt.object.id, lastRt.object.type, widget.uniqid);\n }\n }, [allRt, widgetObject, handleReponse, widget, isPendingResponse]);\n\n return (\n <RTProvider\n useRT={() => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useWidgetRT(widget.uniqid);\n }}>\n <CSSWidgetPresenceWrapper>\n <JRCWidgetPresence\n limit={limit}\n limitValue={limitValue}\n userAvailableList={response.userAvailableList}\n userUnavailableList={response.userUnavailableList}\n userValue={response.userValue}\n userAvailableTotal={response?.userAvailableTotal}\n userUnavailableTotal={response?.userUnavailableTotal}\n isClosed={closing && isClosed}\n handleClickAvailable={handleClickAvailable}\n handleClickUnavailable={handleClickUnavailable}\n />\n {isPendingResponse && (\n <CSSWidgetPresenceState>\n <JRCLoader size={'l'} />\n </CSSWidgetPresenceState>\n )}\n {closing && !isClosed && (\n <WidgetPresenceWrapperClosing mode={mode} uniqid={widget.uniqid} isClosed={isClosed} />\n )}\n {ensureWidgetObjectHasMinimumProperties(widgetObject) && (\n <WidgetViewFooterActions\n id={widgetObject.id}\n type={widgetObject.type}\n uniqid={widget.uniqid}\n name={widget.name}\n />\n )}\n </CSSWidgetPresenceWrapper>\n </RTProvider>\n );\n};\n","import React from 'react';\n\nimport { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\nimport {\n CombinedWidgetType,\n ensureWidgetArticleAttachmentType,\n ensureWidgetArticleButtonType,\n ensureWidgetArticleGalleryType,\n ensureWidgetArticleImageType,\n ensureWidgetArticleSliderType,\n ensureWidgetArticleTextType,\n ensureWidgetArticleTitleType,\n ensureWidgetCheckListType,\n ensureWidgetDatasourceTableType,\n ensureWidgetExcelDatasourceTableType,\n ensureWidgetPresenceType,\n WidgetDisplayMode,\n WidgetsRootState,\n} from 'jamespot-user-api';\n\nimport styled from 'styled-components';\n\nexport const CSSWidgetWithTitle = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n`;\n\nexport const CSSWidgetEditTitle = styled.div`\n padding: 0 ${(props) => props.theme.space.md}px;\n border-bottom: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nexport const CSSWidgetTitle = styled.div`\n padding: ${(props) => props.theme.space.md}px;\n border-bottom: 1px solid ${(props) => props.theme.color.grey1};\n`;\n\nimport { WidgetDatasourceTableWrapper } from './wrapper/JRCWidgetDatasourceTableWrapper';\nimport { JRCWidgetArticleAttachmentWrapper } from './wrapper/JRCWidgetArticleAttachmentWrapper';\nimport { JRCWidgetArticleButtonWrapper } from './wrapper/JRCWidgetArticleButtonWrapper';\nimport { JRCWidgetArticleGalleryWrapper } from './wrapper/JRCWidgetArticleGalleryWrapper';\nimport { JRCWidgetArticleImageWrapper } from './wrapper/JRCWidgetArticleImageWrapper';\nimport { JRCWidgetArticleSliderWrapper } from './wrapper/JRCWidgetArticleSliderWrapper';\nimport { JRCWidgetArticleTextWrapper } from './wrapper/JRCWidgetArticleTextWrapper';\nimport { JRCWidgetArticleTitleWrapper } from './wrapper/JRCWidgetArticleTitleWrapper';\nimport { JRCWidgetCheckListWrapper } from './wrapper/JRCWidgetCheckListWrapper';\nimport { WidgetExcelDatasourceTableWrapper } from './wrapper/JRCWidgetExcelDatasourceTableWrapper';\nimport { JRCWidgetPresenceWrapper } from './wrapper/JRCWidgetPresenceWrapper';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { Widget } from 'jamespot-front-business';\nimport { JRCInputText } from 'jamespot-react-components';\n\nexport const DisplayWidget = ({\n widget,\n commentId,\n width,\n inplace = false,\n mode = 'view',\n editRight,\n deleteRight,\n onWidgetUpdate,\n onRemove,\n cannotDisplayComponent,\n}: {\n widget: CombinedWidgetType;\n commentId?: number;\n width?: number | undefined;\n inplace: boolean;\n mode: WidgetDisplayMode;\n editRight?: boolean;\n deleteRight?: boolean;\n onRemove?: (id: string) => void;\n onWidgetUpdate?: () => void;\n onClick: () => void;\n cannotDisplayComponent?: (widget: string) => React.ReactNode;\n}) => {\n const { name } = widget;\n\n if (ensureWidgetArticleButtonType(widget)) {\n return <JRCWidgetArticleButtonWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleGalleryType(widget)) {\n return <JRCWidgetArticleGalleryWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleAttachmentType(widget)) {\n return <JRCWidgetArticleAttachmentWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleImageType(widget)) {\n return <JRCWidgetArticleImageWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleSliderType(widget)) {\n return <JRCWidgetArticleSliderWrapper widget={widget} inplace={inplace} mode={mode} width={width ?? 800} />;\n } else if (ensureWidgetArticleTitleType(widget)) {\n return <JRCWidgetArticleTitleWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetArticleTextType(widget)) {\n return <JRCWidgetArticleTextWrapper widget={widget} inplace={inplace} mode={mode} />;\n } else if (ensureWidgetExcelDatasourceTableType(widget)) {\n return <WidgetExcelDatasourceTableWrapper {...widget.content} uniqid={widget.uniqid} mode={mode} />;\n } else if (ensureWidgetDatasourceTableType(widget)) {\n return <WidgetDatasourceTableWrapper {...widget.content} uniqid={widget.uniqid} mode={mode} />;\n } else if (ensureWidgetCheckListType(widget)) {\n return (\n <JRCWidgetCheckListWrapper\n widget={widget}\n commentId={commentId}\n inplace={inplace}\n mode={mode}\n editRight={editRight ?? false}\n deleteRight={deleteRight ?? false}\n onRemove={onRemove}\n onWidgetUpdate={onWidgetUpdate}\n />\n );\n } else if (ensureWidgetPresenceType(widget)) {\n return (\n <CSSWidgetWithTitle>\n {mode === 'edit' ? <WidgetTitleEdit uniqid={widget.uniqid} /> : <WidgetTitle uniqid={widget.uniqid} />}\n <JRCWidgetPresenceWrapper widget={widget} inplace={inplace} mode={mode} />\n </CSSWidgetWithTitle>\n );\n } else {\n return cannotDisplayComponent ? <>{cannotDisplayComponent(name)}</> : <>cannot display widget ({name})</>;\n }\n};\n\nexport const WidgetTitle = ({ uniqid }: { uniqid: string }) => {\n const widgetWrapper = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid),\n shallowEqual,\n );\n return <CSSWidgetTitle>{widgetWrapper?.title}</CSSWidgetTitle>;\n};\n\nexport const WidgetTitleEdit = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const widgetWrapper = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid),\n shallowEqual,\n );\n const dispatch = useDispatch();\n const { control, watch } = useForm({\n defaultValues: { title: widgetWrapper?.title ?? '' },\n criteriaMode: 'all',\n });\n\n React.useEffect(() => {\n const subscription = watch((data: any) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ uniqid, title: data.title }));\n });\n return () => subscription.unsubscribe();\n }, [watch, dispatch, uniqid]);\n\n return (\n <CSSWidgetEditTitle>\n <JRCInputText name={'title'} control={control} placeholder={intl.formatMessage({ id: 'GLOBAL_Title' })} />\n </CSSWidgetEditTitle>\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, { useCallback } 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 = useCallback(\n (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 [child.x, child.y],\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 [mouse.x, mouse.y, mouseIsDown, start.x, start.y],\n );\n\n const handleMouseUp = useCallback(() => {\n setMouseDown(false);\n onMouseUp({ x: child.x, y: child.y });\n }, [child.x, child.y, onMouseUp]);\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, handleMouseUp]);\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 } 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 styled from 'styled-components';\n\nconst INPUT_HEIGHT = 50;\nconst RADIUS = 8;\n\nexport const CSSHiddenDiv = styled.div`\n height: 0;\n overflow: hidden;\n`;\n\nexport const CSSEmptyText = styled.div`\n color: ${(props) => props.theme.color.grey3};\n font-style: italic;\n`;\n\nexport const CSSWrapperText = styled.div<{ color?: string }>`\n display: flex;\n flex: 1;\n width: 100%;\n border: 0;\n min-height: ${INPUT_HEIGHT}px;\n margin: 0;\n align-items: center;\n border-radius: ${RADIUS}px;\n padding: 8px;\n cursor: pointer;\n gap: 10px;\n color: ${(props) => (props.color ? props.color : props.theme.font.color)};\n transition: opacity 0.4s;\n\n &:hover {\n img {\n filter: grayscale(0);\n opacity: 1;\n }\n }\n\n img {\n filter: grayscale(1);\n opacity: 0.4;\n }\n`;\n\nexport const CSSUploadFileWrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n min-height: 200px;\n`;\n\nexport const CSSWidgetWrapper = styled.div`\n display: flex;\n`;\n","import React, { useEffect } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { Widget, WidgetEditor } from 'jamespot-front-business';\nimport {\n ensureWidgetArticleButtonType,\n jCommentList,\n WidgetDisplayMode,\n WidgetsRootState,\n WidgetWrapperProps,\n} from 'jamespot-user-api';\nimport { DisplayWidget } from './Widget';\nimport { WidgetLayer } from './WidgetLayer/WidgetLayer';\nimport { WidgetState } from './WidgetState';\nimport { useComponentVisible } from './hooks';\nimport { CSSWidgetWrapper } from './Widget.style';\n\ntype WidgetWrapperCoreProps = {\n uniqid: string;\n widgetObject?: Partial<jCommentList>;\n commentId?: number;\n widget: WidgetWrapperProps;\n inplace?: boolean;\n mode: WidgetDisplayMode;\n width?: number | undefined;\n editRight?: boolean;\n deleteRight?: boolean;\n onWidgetUpdate?: () => void;\n onRemove?: (id: string) => void;\n cannotDisplayComponent?: (widget: string) => React.ReactNode;\n};\n\n/*\n This is a widget wrapper\n*/\nexport const WidgetWrapperCore = ({\n uniqid,\n widgetObject,\n commentId,\n widget,\n inplace = true,\n mode,\n width,\n editRight,\n deleteRight,\n onWidgetUpdate,\n onRemove,\n cannotDisplayComponent,\n}: WidgetWrapperCoreProps) => {\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 useEffect(() => {\n if (widgetObject) {\n dispatch(Widget.slice.actions.registerWidgetObject({ uniqid, object: widgetObject }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (widget) {\n /*\n Register widget\n */\n dispatch(Widget.slice.actions.registerWidget({ uniqid, widget }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (!isComponentVisible) {\n if (uniqid === currentEditableWidgetId) {\n dispatch(Widget.slice.actions.setEditableWidgetId({ uniqid: undefined }));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isComponentVisible]);\n\n useEffect(() => {\n if (isComponentVisible !== isActive) {\n setIsComponentVisible(isActive);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isActive]);\n\n if (widgetWrapper === undefined) {\n return <>This widget cannot be displayed</>;\n }\n\n const _widget = widgetWrapper.widget;\n\n const onClick = () => {\n if (mode === 'edit') {\n registerEditor();\n } else {\n if (ensureWidgetArticleButtonType(_widget)) {\n switch (_widget.content.openingType) {\n case 'link':\n if (_widget.content.openingTypeLink) {\n window.open(_widget.content.openingTypeLink.url, _widget.content.openingTypeLink.target);\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 <CSSWidgetWrapper\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 onRemove={onRemove}\n />\n <WidgetLayer uniqid={uniqid} mode={mode} />\n <WidgetState name={widgetWrapper.widget.name} uniqid={widgetWrapper.widget.uniqid} inplace={inplace} />\n </CSSWidgetWrapper>\n );\n }\n\n return (\n <CSSWidgetWrapper onClick={registerEditor}>\n <DisplayWidget\n widget={{\n ...widgetWrapper.widget,\n ...(widgetWrapper.title && {\n title: widgetWrapper.title,\n }),\n }}\n commentId={commentId}\n inplace={inplace}\n mode={mode}\n width={width}\n onClick={onClick}\n editRight={editRight}\n deleteRight={deleteRight}\n onWidgetUpdate={onWidgetUpdate}\n onRemove={onRemove}\n cannotDisplayComponent={cannotDisplayComponent}\n />\n <WidgetLayer uniqid={uniqid} mode={mode} />\n <WidgetState name={widgetWrapper.widget.name} uniqid={widgetWrapper.widget.uniqid} inplace={inplace} />\n </CSSWidgetWrapper>\n );\n};\n\nexport default WidgetWrapperCore;\n","import React, { useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { v4 as uuidv4 } from 'uuid';\n\nconst EditorsPortal = J.react.registry.getLazyComponent('EditorsPortal');\nconst JRCThemeProvider = J.react.registry.getLazyComponent('ThemeProvider');\n\nconst createPortalElement = (parent: HTMLElement): HTMLDivElement => {\n let portal = document.getElementById('react-portals') as HTMLDivElement;\n\n if (!portal) {\n portal = document.createElement('div');\n portal.id = uuidv4();\n parent.appendChild(portal);\n }\n\n return portal;\n};\nexport const EditorsPanel = () => {\n const portalDiv = document.getElementById('react-portals');\n const portal = useMemo(() => portalDiv && createPortalElement(portalDiv), [portalDiv]);\n\n if (!portal) {\n return null;\n }\n return createPortal(\n <JRCThemeProvider>\n <EditorsPortal />\n </JRCThemeProvider>,\n portal,\n );\n};\n","import { getTinyMCEMentionsQueries } from 'App';\nimport {\n Application,\n ApplicationRootState,\n Comment,\n CommentRootState,\n Hook,\n HookRootState,\n Model,\n Platform,\n TinyMCE,\n Toast,\n UserCurrent,\n Widget,\n} from 'jamespot-front-business';\nimport { DriveOrFilebank, JRCCommentsBloc, JRCMessage } from 'jamespot-react-components';\nimport jamespot, {\n AddCommentParams,\n AddRemoveActionParams,\n UpdateCommentParams,\n WidgetWrapperProps,\n jUserView,\n FileCopyParams,\n DriveGetDocumentParams,\n DriveLogoutParams,\n DriveGetAccountParams,\n DriveSetDefaultAccountParams,\n DriveGetTenantsParams,\n DriveGetDocumentsParams,\n DriveGetGroupsParams,\n} from 'jamespot-user-api';\nimport { jCommentList } from 'jamespot-user-api/lib/src/types/comment';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled, { useTheme } from 'styled-components';\nimport { WidgetList } from './widgets/WidgetList/WidgetList';\nimport WidgetWrapperCore from './widgets/WidgetWrapperCore';\nimport useCommentsLikeRT from '../hooks/useCommentsLikeRT';\nimport useCommentRT from '../hooks/useCommentRT';\n\nexport type CommentsBlocProps = {\n articleId: number;\n variant?: 'modal' | 'inline';\n canComment: boolean;\n};\nimport { EditorsPanel } from './widgets/components/WidgetEditorPanel';\n\nconst CommentsBlocWrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex: 1;\n width: 100%;\n margin-top: 10px;\n`;\n\nexport const CSSCommentsBlocWidgetWrapper = styled.div`\n border-radius: ${(props) => props.theme.space.sm}px;\n border: 1px solid ${(props) => props.theme.color.grey1};\n background-color: ${(props) => props.theme.color.white};\n overflow: hidden;\n`;\n\nexport const CommentsBloc = ({ articleId, variant = 'inline', canComment }: CommentsBlocProps) => {\n const intl = useIntl();\n const theme = useTheme();\n const dispatch = useDispatch();\n\n const [token, setToken] = useState<string>();\n const [loading, setLoading] = useState(false);\n const [widgets, setWidgets] = useState<WidgetWrapperProps[]>([]);\n\n const [tokenLoading, setTokenLoading] = useState(false);\n\n const currentUser = useSelector(UserCurrent.selectors.get);\n const widgetIds = useSelector(Widget.selectors.selectWidgets);\n const tinyMCECommonOptions = useSelector(TinyMCE.selectors.selectTinyMCECommonOptions);\n const models = useSelector(Model.selectors.selectAll);\n const platformConfig = useSelector(Platform.selectors.selectPlatformConfig);\n const onlyOffice = useSelector((state: any) => Application.selectors.selectById(state, 'OnlyOfficeHook'));\n const commentsList = useSelector((state: CommentRootState) => Comment.selectors.commentList(state, articleId));\n const driveHook = useSelector((state: HookRootState) => Hook.selectors.selectHook(state, 'DriveHook'));\n const fileBank = useSelector((state: ApplicationRootState) =>\n Application.selectors.selectById(state, 'FileBankHook'),\n );\n const widgetHook = useSelector((state: HookRootState) => Hook.selectors.selectHook(state, 'WidgetHook'));\n\n useCommentRT(articleId);\n\n useCommentsLikeRT(\n commentsList?.list.map((c) => c.id),\n articleId,\n );\n\n const onError = useCallback(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const onCommentUpdate = async (args: UpdateCommentParams) => {\n const commentToUpdate: jCommentList | undefined = commentsList?.list.find((item) => item.id === args.idComment);\n if (!commentToUpdate) return;\n return jamespot.article\n .updateComment({\n idComment: args.idComment,\n description: args.description ?? commentToUpdate.description ?? undefined,\n token: args.token,\n widgets: args.widgets,\n })\n .then(() => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n fetchToken();\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n };\n\n const onCommentDelete = async (idComment: number) => {\n // TODO : passer par le store pour avoir une réactivité directe après suppression (confirmée ensuite par retour RT)\n // -> état intermédiaire PENDING à gérer.\n jamespot.article.deleteComment(idComment).catch(onError);\n };\n\n const onWidgetUpdate = () => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n fetchToken();\n };\n\n const fetchToken = useCallback(() => {\n if (!token && !tokenLoading) {\n setTokenLoading(true);\n jamespot.network\n .token()\n .then((res) => {\n setToken(res.result);\n setTokenLoading(false);\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n }\n }, [onError, token, tokenLoading]);\n\n const onComment = useCallback(\n async (params: Pick<AddCommentParams, 'content' | 'alertAuthor' | 'sendAlert'>) => {\n if (token) {\n setLoading(true);\n const finalWidget: WidgetWrapperProps[] = Object.keys(widgetIds)\n .map((id) => {\n if (widgets?.some((w) => w.widget.uniqid === id)) {\n return widgetIds[id];\n }\n return null;\n })\n .filter((w): w is WidgetWrapperProps => w !== null);\n\n try {\n // TODO : passer par le store pour avoir une réactivité directe après ajout (confirmée ensuite par retour RT)\n // -> état intermédiaire PENDING à gérer.\n await jamespot.article\n .addComment({\n ...params,\n widgets: finalWidget,\n token,\n idArticle: articleId,\n })\n .then(() => {\n widgets.forEach((widget) => {\n dispatch(Widget.slice.actions.flushWidget({ uniqid: widget.widget.uniqid }));\n });\n setWidgets([]);\n });\n fetchToken();\n } catch (e: any) {\n onError(e.errorMsg);\n } finally {\n setLoading(false);\n }\n }\n },\n [articleId, dispatch, fetchToken, onError, token, widgetIds, widgets],\n );\n\n useEffect(() => {\n fetchToken();\n }, [fetchToken]);\n\n useEffect(() => {\n dispatch(Comment.actions.fetchComments({ idArticle: articleId }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleSocialAdd = ({\n targetId,\n targetType,\n type,\n }: AddRemoveActionParams): ReturnType<typeof jamespot.socialAction.add> =>\n jamespot.socialAction.add({\n targetType,\n targetId,\n type,\n });\n\n const handleSocialRemove = ({\n targetId,\n targetType,\n type,\n }: AddRemoveActionParams): ReturnType<typeof jamespot.socialAction.remove> =>\n jamespot.socialAction.remove({\n targetType,\n targetId,\n type,\n });\n\n const handleSocialGetUsers = ({\n targetId,\n targetType,\n type,\n }: AddRemoveActionParams): ReturnType<typeof jamespot.socialAction.getUsers<jUserView>> =>\n jamespot.socialAction.getUsers({\n targetType,\n targetId,\n type,\n });\n const handleFetchUser = (id: string): ReturnType<typeof jamespot.user.get<jUserView>> => jamespot.user.get(id);\n\n const handleFetchUserField = (id: number, type: 'popover'): ReturnType<typeof jamespot.user.getFields> =>\n jamespot.user.getFields(id, type);\n\n useEffect(() => {\n if (!commentsList || !commentsList.list) {\n return;\n }\n commentsList.list.forEach((comment) => {\n comment._widgets?.forEach((widget) => {\n dispatch(Widget.slice.actions.registerWidgetObject({ uniqid: widget.widget.uniqid, object: comment }));\n dispatch(\n Widget.slice.actions.registerWidgetObjectRights({\n uniqid: widget.widget.uniqid,\n rights: comment._right,\n }),\n );\n });\n });\n }, [commentsList, dispatch]);\n\n return (\n <>\n {tinyMCECommonOptions && (\n <>\n <CommentsBlocWrapper>\n <JRCCommentsBloc\n canComment={canComment} // todo: convert to hlandlers\n loading={loading}\n token={token}\n comments={commentsList?.list}\n onComment={onComment} // todo: convert to hlandlers\n onCommentUpdate={onCommentUpdate} // todo: convert to hlandlers\n onCommentDelete={onCommentDelete} // todo: convert to hlandlers\n isWidgetActive={\n !!(\n widgetHook?.isActive &&\n widgetHook?.create &&\n widgetHook?.autorize?.includes('comment')\n )\n }\n widgetListComponent={\n <WidgetList\n mode={'comment'}\n namespace={'comment'}\n onChange={(widget) => {\n setWidgets([...widgets, widget]);\n dispatch(\n Widget.slice.actions.registerWidget({\n uniqid: widget.widget.uniqid,\n widget: widget,\n }),\n );\n }}\n view={'edit'}\n />\n }\n newWidgetsWrapperComponent={\n <>\n {widgets.map(\n (widget) =>\n widget &&\n widget.widget && (\n <CSSCommentsBlocWidgetWrapper key={widget.widget.uniqid}>\n <WidgetWrapperCore\n uniqid={widget.widget.uniqid}\n widget={widget}\n inplace\n mode={'edit'}\n onRemove={(id) =>\n setWidgets(widgets.filter((w) => w.widget.uniqid !== id))\n }\n cannotDisplayComponent={(widget) => (\n <JRCMessage\n variant={'info'}\n message={intl.formatMessage(\n { id: 'WIDGET_Cannot_Display' },\n { widget },\n )}\n />\n )}\n />\n </CSSCommentsBlocWidgetWrapper>\n ),\n )}\n </>\n }\n existingWidgetsWrapperComponent={(\n comment,\n content,\n mode,\n inplace = true,\n idComment,\n editRight = false,\n deleteRight = false,\n ) => (\n <>\n {content?.map(\n (widget) =>\n widget && (\n <CSSCommentsBlocWidgetWrapper key={widget.widget.uniqid}>\n <WidgetWrapperCore\n uniqid={widget.widget.uniqid}\n widgetObject={comment}\n commentId={idComment}\n widget={widget}\n inplace={inplace}\n mode={mode}\n editRight={editRight}\n deleteRight={deleteRight}\n onWidgetUpdate={onWidgetUpdate}\n onRemove={(id) => {\n jamespot.widget\n .removeWidget({\n id: idComment,\n type: 'comment',\n uniqid: id,\n })\n .then(() => {\n dispatch(\n Comment.actions.fetchComments({\n idArticle: articleId,\n }),\n );\n fetchToken();\n })\n .catch((e) => {\n onError(e.errorMsg);\n });\n }}\n cannotDisplayComponent={(widget) => (\n <JRCMessage\n variant={'info'}\n message={intl.formatMessage(\n { id: 'WIDGET_Cannot_Display' },\n { widget },\n )}\n />\n )}\n />\n </CSSCommentsBlocWidgetWrapper>\n ),\n )}\n </>\n )}\n currentUser={currentUser}\n tinyMCEConfig={{\n commonOptions: tinyMCECommonOptions,\n mentionsQueries: getTinyMCEMentionsQueries(models, theme, onError),\n }}\n onError={onError}\n highlightFields={platformConfig.userHighlightFields}\n userAccountStatus={platformConfig.userAccountStatus}\n userModel={models.find((m) => m.type === 'user')}\n isWedocActive={!!onlyOffice}\n onGetHashError={(message?: string) =>\n dispatch(\n Toast.actions.error({\n label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }),\n }),\n )\n }\n activeDrives={\n // TODO : cf. https://github.com/Jamespot/jamespot-react-extensions/pull/487/\n J.debug.UploadFromDrives\n ? ([\n ...(fileBank && driveHook ? ['fileBank'] : []),\n ...Hook.utils.buildDrivesArrayFromObject(driveHook?.drives),\n ] as DriveOrFilebank[])\n : []\n }\n socialActionAdd={handleSocialAdd}\n deleteFile={async (articleId) => {\n if (!token) return;\n await jamespot.file.deleteFile(articleId, 'attachment', token);\n }}\n fetchUser={handleFetchUser}\n fetchUserFields={handleFetchUserField}\n fetchSocialActionUserList={handleSocialGetUsers}\n removeLike={handleSocialRemove}\n variant={variant}\n fileBankRequests={{\n getBanks: () => jamespot.filebank.getBanks(),\n getFolders: (uri: string) => jamespot.filebank.getFolders(uri),\n getDocuments: (uri: string) => jamespot.filebank.getDocuments(uri),\n copyFile: (params: FileCopyParams) => jamespot.file.copy(params),\n }}\n msGraphRequests={{\n documents: (params: DriveGetDocumentsParams) => jamespot.drive.documents(params),\n groups: (params: DriveGetGroupsParams) => jamespot.drive.groups(params),\n tenants: (params: DriveGetTenantsParams) => jamespot.drive.tenants(params),\n listAccount: (service: string) => jamespot.drive.listAccount(service),\n isAccountLogged: (service: string, id: string) =>\n jamespot.drive.isAccountLogged(service, id),\n checkAccountToken: (service: string) => jamespot.drive.checkAccountToken(service),\n getDocument: (params: DriveGetDocumentParams) => jamespot.drive.getDocument(params),\n logout: (params: DriveLogoutParams) => jamespot.drive.logout(params),\n getAccount: (params: DriveGetAccountParams) => jamespot.drive.getAccount(params),\n setDefaultAccount: (params: DriveSetDefaultAccountParams) =>\n jamespot.drive.setDefaultAccount(params),\n }}\n />\n <EditorsPanel />\n </CommentsBlocWrapper>\n </>\n )}\n </>\n );\n};\n","import { useDispatch } from 'react-redux';\nimport JRCore from '../App';\nimport { useEffect, useMemo } from 'react';\nimport { Comment } from 'jamespot-front-business';\n\nconst useCommentsLikeRT = (idComments: number[] | undefined, idArticle: number) => {\n const dispatch = useDispatch();\n const socket = useMemo(() => JRCore.socket, []);\n const rtHandlers = useMemo(\n () => Comment.getCommentsLikeRTHandlers(dispatch, idComments, idArticle),\n [dispatch, idComments, idArticle],\n );\n\n useEffect(() => {\n rtHandlers.forEach((handler) => {\n socket.onMessage(handler.namespace, handler.function, handler.handler);\n });\n return () => {\n rtHandlers.forEach((handler) => {\n socket.offMessage(handler.namespace, handler.function, handler.handler);\n });\n };\n }, [rtHandlers, socket]);\n};\n\nexport default useCommentsLikeRT;\n","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, useCallback } from 'react';\nimport { AudienceAutocomplete } from 'jamespot-user-api';\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 FormElement = (\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};\nconst FormElm = React.forwardRef(FormElement);\n\nconst FieldsetWrapper = styled.div<{ stretch?: boolean }>`\n ${(props) =>\n props.stretch &&\n `\n flex: 1;\n`}\n`;\n\nexport type DisplayFormFieldsConfig<TFieldValues extends FieldValues> = 'all' | FieldsWith<'input', TFieldValues>;\n\nexport type DisplayFormProps<TFieldValues extends FieldValues> = {\n type: string;\n fields: DisplayFormFieldsConfig<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 forceMandatory?: boolean;\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, props.forceMandatory);\n\n const { handleSubmit, control, reset, ...formFn } = useForm({\n defaultValues: {\n ...defaultValues,\n ...props.defaultValues,\n },\n criteriaMode: 'all',\n });\n\n const formatValuesForSubmit = useCallback(\n (values: any) => {\n const toRet: any = {};\n Object.keys(values).forEach((k) => {\n const widget = configuration.find((c) => c.name === k)?.widget;\n switch (widget?.type) {\n case 'audience':\n toRet[k] = values[k].map((v: AudienceAutocomplete) => v.uri).join(',');\n break;\n case 'taxonomy':\n toRet[k] = values[k].map((v: any) => v.title).join(',');\n break;\n default:\n toRet[k] = values[k];\n break;\n }\n });\n return toRet;\n },\n [configuration],\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 getFormattedValues: () => {\n return formatValuesForSubmit(formFn.getValues());\n },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\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\n// This is a mask to hide top shadow. EDITOR_WIDTH + 20 is used to keep the left shadow\nexport const CSSEditorMask = styled.div`\n position: relative;\n overflow: hidden;\n top: 91px;\n width: ${EDITOR_WIDTH + 20}px;\n`;\n\nexport const CSSEditor = styled.div<{ position: 'left' | 'right' }>`\n position: absolute;\n top: 0;\n ${(props) => (props.position === 'left' ? 'left: 0px;' : '')}\n ${(props) => (props.position === 'right' ? 'right: -1000px;' : '')}\n width: ${EDITOR_WIDTH}px;\n bottom: 90px;\n display: flex;\n background-color: ${(props) => props.theme.color.white};\n flex-direction: row;\n transition: all 0.4s;\n box-shadow: -4px 0px 20px 0px #00000017;\n\n &.animate {\n right: 0px;\n }\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 position: relative;\n`;\n\nexport const CSSEditorIsBusy = styled.div`\n position: absolute;\n inset: 0;\n background-color: rgba(255, 255, 255, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const CSSEditorIsLocked = styled.div`\n position: absolute;\n inset: 0;\n background-color: ${(props) => props.theme.color.white};\n padding: ${(props) => props.theme.space.md}px;\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 { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport JRCore from 'App';\n\nimport jamespot, {\n CombinedWidgetContent,\n ensureWidgetArticleAttachmentType,\n ensureWidgetArticleButtonType,\n ensureWidgetArticleGalleryType,\n ensureWidgetArticleImageType,\n ensureWidgetArticleSliderType,\n ensureWidgetArticleTextType,\n ensureWidgetArticleTitleType,\n ensureWidgetCheckListType,\n ensureWidgetDatasourceTableType,\n ensureWidgetExcelDatasourceTableType,\n HookListType,\n ensureWidgetPresenceType,\n jObjectLittle,\n WidgetArticleAttachmentContent,\n WidgetArticleButtonContent,\n WidgetArticleGalleryContent,\n WidgetArticleImageContent,\n WidgetArticleSliderContent,\n WidgetArticleTextContent,\n WidgetArticleTitleContent,\n WidgetDatasourceTableContent,\n WidgetPresenceContent,\n WidgetsRootState,\n WidgetStateProps,\n} from 'jamespot-user-api';\nimport { useIntl } from 'react-intl';\nimport { EditorsRootState, Hook, Toast, updateWidgetContent, Widget, WidgetEditor } from 'jamespot-front-business';\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 WidgetCheckListEditor = JRCore.registry.getLazyComponent('WidgetCheckListEditor');\n\nconst WidgetDatasourceTableEditor = JRCore.registry.getLazyComponent('WidgetDatasourceTableEditor');\nconst WidgetExcelDatasourceTableEditor = JRCore.registry.getLazyComponent('WidgetExcelDatasourceTableEditor');\n\nconst WidgetPresenceEditor = JRCore.registry.getLazyComponent('WidgetPresenceEditor');\n\n/*\n Editor Factory\n*/\nexport const Editor = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const token = useSelector(Widget.selectors.selectToken);\n const widgetWrapper = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid),\n shallowEqual,\n );\n const widgetObject = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetObject(state, uniqid),\n shallowEqual,\n );\n const onSaveCallback = useSelector(\n (state: EditorsRootState) => WidgetEditor.selectors.selectEditor(state, uniqid)?.onSave,\n shallowEqual,\n );\n\n const handleHookIsActive = (name: keyof HookListType) => {\n return Hook.selectors.selectHook(JRCore.store.getState(), name)?.isActive;\n };\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 if (onSaveCallback) {\n onSaveCallback(content);\n }\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 const validateWidgetObject = (object?: Partial<jObjectLittle>): object is jObjectLittle => {\n return object !== undefined && object.id !== undefined && object.type !== undefined;\n };\n\n const widget = widgetWrapper?.widget;\n\n if (!widget) return null;\n\n if (ensureWidgetArticleButtonType(widget)) {\n return (\n <WidgetButtonEditor\n {...widget.content}\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleButtonContent>(uniqid, content, false));\n }}\n onSave={() => onSave({})}\n />\n );\n } else if (ensureWidgetArticleGalleryType(widget)) {\n return (\n <WidgetArticleGalleryEditor\n token={token}\n content={widget.content}\n onChange={(content) =>\n dispatch(updateWidgetContent<WidgetArticleGalleryContent>(uniqid, content, false))\n }\n onSave={onSave}\n onStateChange={onStateChange}\n />\n );\n } else if (ensureWidgetArticleAttachmentType(widget)) {\n return (\n <WidgetArticleAttachmentEditor\n token={token}\n content={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 } else if (ensureWidgetArticleImageType(widget)) {\n return (\n <WidgetArticleImageEditor\n content={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 } else if (ensureWidgetArticleSliderType(widget)) {\n return token !== undefined ? (\n <WidgetArticleSliderEditor\n slides={widget.content.slides ?? []}\n loop={widget.content.loop ?? false}\n useDots={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 } else if (ensureWidgetArticleTitleType(widget)) {\n return (\n <WidgetArticleTitleEditor\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleTitleContent>(uniqid, content, false));\n }}\n onSave={onSave}\n content={widget.content}\n onOpen={onOpen}\n />\n );\n } else if (ensureWidgetArticleTextType(widget)) {\n return (\n <WidgetArticleTextEditor\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetArticleTextContent>(uniqid, content, false));\n }}\n onSave={onSave}\n content={widget.content}\n />\n );\n } else if (ensureWidgetPresenceType(widget)) {\n return (\n <WidgetPresenceEditor\n onChange={(content) => {\n dispatch(updateWidgetContent<WidgetPresenceContent>(uniqid, content, false));\n }}\n onSave={onSave}\n onStateChange={onStateChange}\n {...widget.content}\n />\n );\n } else if (ensureWidgetCheckListType(widget)) {\n return (\n <WidgetCheckListEditor\n token={token}\n uniqid={widget.uniqid}\n content={widget.content}\n onChangeContent={(uniqid, content) => {\n dispatch(updateWidgetContent(uniqid, content, false));\n }}\n onChangeWrapper={(content) => {\n dispatch(Widget.slice.actions.updateWidgetWrapper({ ...content }));\n }}\n onSave={(uniqid, content) => {\n if (!validateWidgetObject(widgetObject)) {\n onSave(content);\n return;\n }\n\n jamespot.widget\n .updateWidget({\n id: widgetObject.id,\n uniqid: uniqid,\n type: widgetObject.type,\n title: widgetWrapper.title,\n content,\n })\n .then(() => {\n onSave(content);\n })\n .catch((e: any) => {\n dispatch(\n Toast.actions.error({\n label: e.errorMsg ?? intl.formatMessage({ id: 'GLOBAL_Error' }),\n }),\n );\n });\n }}\n />\n );\n } else if (ensureWidgetExcelDatasourceTableType(widget)) {\n return (\n <WidgetExcelDatasourceTableEditor\n {...widget.content}\n uri={widget.content.uri}\n limit={widget.content.limit ?? 20}\n hook={{ isActive: handleHookIsActive }}\n handlers={{\n jamespot: {\n datasource: jamespot.datasource,\n network: jamespot.network,\n filebank: jamespot.filebank,\n wedoc: jamespot.wedoc,\n },\n handleStart: () => onStateChange({ busy: true }),\n handleCatch: (err) => dispatch(Toast.actions.error({ label: err.errorMsg })),\n handleFinally: () => onStateChange({ busy: false }),\n }}\n onSave={onSave}\n onChange={(content, override) =>\n dispatch(updateWidgetContent<WidgetDatasourceTableContent>(uniqid, content, override ?? false))\n }\n onStateChange={onStateChange}\n onError={(label) => dispatch(Toast.actions.error({ label }))}\n />\n );\n } else if (ensureWidgetDatasourceTableType(widget)) {\n return (\n <WidgetDatasourceTableEditor\n {...widget.content}\n uri={widget.content.uri}\n limit={widget.content.limit ?? 20}\n hook={{ isActive: handleHookIsActive }}\n handlers={{\n jamespot: {\n datasource: jamespot.datasource,\n network: jamespot.network,\n application: jamespot.application,\n filebank: jamespot.filebank,\n },\n handleStart: () => onStateChange({ busy: true }),\n handleCatch: (err) => dispatch(Toast.actions.error({ label: err.errorMsg })),\n handleFinally: () => onStateChange({ busy: false }),\n }}\n onSave={onSave}\n onChange={(content, override) =>\n dispatch(updateWidgetContent<WidgetDatasourceTableContent>(uniqid, content, override ?? false))\n }\n onStateChange={onStateChange}\n onError={(label) => {\n dispatch(Toast.actions.error({ label }));\n }}\n />\n );\n } else {\n return <>cannot display editor</>;\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 { ensureWidgetWrapperProps, WidgetKeys, WidgetsRootState, WidgetWrapperProps } 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 widget = useSelector((state: WidgetsRootState) => Widget.selectors.selectWidget(state, uniqid))?.widget;\n\n const onClick = (uniqid: string, name: WidgetKeys) => {\n /*\n Register Editor\n */\n dispatch(WidgetEditor.slice.actions.registerEditor({ uniqid, name }));\n };\n\n const widgets =\n widget?.content && 'widgets' in widget.content && widget.content.widgets ? widget.content.widgets : [];\n\n return (\n <div style={{ flex: 1 }}>\n <Layers uniqid={uniqid} />\n {widget ? (\n 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 dispatch(\n Widget.slice.actions.updateWidget({\n uniqid,\n content: {\n ...widget.content,\n widgets: [\n ...widgets\n .filter((_, n: number) => n !== index)\n .map((w) => {\n if (ensureWidgetWrapperProps(w)) {\n return w;\n } else {\n // TODO remonter le log (centry ?)\n console.error('Zozod', w);\n return w as WidgetWrapperProps;\n }\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 { Widget, WidgetEditor } from 'jamespot-front-business';\nimport { JRCInputText } from 'jamespot-react-components';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport { useForm } from 'react-hook-form';\nimport { useIntl } from 'react-intl';\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', justifyContent: 'space-between' }}>\n <JRCInputText\n name={'text'}\n control={control}\n placeholder={intl.formatMessage({ id: 'WIDGET_Title' })}></JRCInputText>\n <JRCButton onClick={onClick} minWidth={'100%'}>\n {intl.formatMessage({ id: 'GLOBAL_Save' })}\n </JRCButton>\n </div>\n ) : (\n <>No wrapper</>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport JRCore from 'App';\n\nconst Loader = JRCore.registry.getLazyComponent('Loader');\n\nimport { CSSEditorIsBusy } from '../style';\n\nimport { Widget } from 'jamespot-front-business';\nimport { WidgetsRootState } from 'jamespot-user-api';\n\nexport const EditorIsBusy = ({ uniqid }: { uniqid: string }) => {\n const isBusy = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid),\n shallowEqual,\n )?.busy;\n return (\n <>\n {isBusy && (\n <CSSEditorIsBusy>\n <Loader size={'l'} />\n </CSSEditorIsBusy>\n )}\n </>\n );\n};\n","import React from 'react';\n\nimport { useDispatch } from 'react-redux';\n\nimport JRCore from 'App';\n\nconst Icon = JRCore.registry.getLazyComponent('Icon');\n\nimport { CSSEditorAction, CSSEditorMenuButton } from './style';\n\nimport { WidgetEditor } from 'jamespot-front-business';\n\nexport const EditorPosition = ({ 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 <Icon name={position === 'left' ? 'icon-angle-right' : 'icon-angle-left'} color=\"grey2\" />\n </CSSEditorMenuButton>\n </CSSEditorAction>\n );\n};\n","import React from 'react';\n\nimport { useSelector } from 'react-redux';\n\nimport { Widget } from 'jamespot-front-business';\nimport { WidgetsRootState } from 'jamespot-user-api';\n\nexport const EditorIsInitialize = ({ uniqid, children }: { uniqid: string; children: React.ReactElement }) => {\n const isInitializes = useSelector((state: WidgetsRootState) =>\n Widget.selectors.selectWidgetState(state, uniqid),\n )?.initialized;\n\n return isInitializes ? children : <></>;\n};\n","import React from 'react';\n\nimport { useIntl } from 'react-intl';\nimport { CSSEditorIsLocked } from '../style';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport { WidgetsRootState } from 'jamespot-user-api';\nimport { Widget } from 'jamespot-front-business';\n\nexport const EditorIsLocked = ({ uniqid }: { uniqid: string }) => {\n const intl = useIntl();\n const isLocked = useSelector(\n (state: WidgetsRootState) => Widget.selectors.selectWidgetState(state, uniqid),\n shallowEqual,\n )?.locked;\n return isLocked ? (\n <CSSEditorIsLocked>{intl.formatMessage({ id: 'INTRANET_Panel_Change_Off' })}</CSSEditorIsLocked>\n ) : (\n <></>\n );\n};\n","import React, { useEffect, useRef } from 'react';\n\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { Editor } from './Editor';\n\nimport JRCore from 'App';\n\nconst Icon = JRCore.registry.getLazyComponent('Icon');\n\nimport {\n CSSEditor,\n CSSEditorAction,\n CSSEditorContent,\n CSSEditorHeader,\n CSSEditorLabel,\n CSSEditorMask,\n CSSEditorMenu,\n CSSEditorMenuButton,\n} from './style';\n\nimport { EditorsRootState, Widget, WidgetEditor } from 'jamespot-front-business';\n\nimport { useIntl } from 'react-intl';\nimport { EditorTabWidgets } from './EditorTabWidgets';\nimport { EditorTabWrapper } from './EditorTabWrapper';\nimport { EditorIsBusy } from './states/EditorIsBusy';\nimport { EditorPosition } from './EditorPosition';\nimport { EditorIsInitialize } from './states/EditorIsInitialize';\nimport { EditorIsLocked } from './states/EditorIsLocked';\n\n/*\n Editor wrapper (right part)\n*/\nexport const EditorWrapper = ({ uniqid, position }: { uniqid: string; position: 'left' | 'right' }) => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const ref = useRef<HTMLDivElement>(null);\n const editor = useSelector(\n (state: EditorsRootState) => WidgetEditor.selectors.selectEditor(state, uniqid),\n shallowEqual,\n );\n const def = Widget.definition(editor?.name);\n\n const [tab, setTab] = React.useState<string>('default');\n\n const onClose = () => {\n dispatch(WidgetEditor.slice.actions.flushEditor({ uniqid }));\n };\n\n useEffect(() => {\n setTimeout(() => {\n if (ref && ref.current) {\n ref.current.className = ref.current.className + ' animate';\n }\n }, 0);\n }, []);\n\n return editor ? (\n <CSSEditorMask>\n <CSSEditor ref={ref} position={position}>\n {(def.panel.useWrapper || def.panel.useEditor || def.panel.useWidgets) && (\n <CSSEditorMenu>\n {def.panel.useWrapper ? (\n <CSSEditorMenuButton isActive={tab === 'wrapper'} onClick={() => setTab('wrapper')}>\n <Icon name=\"icon-font\" color=\"grey2\" />\n </CSSEditorMenuButton>\n ) : (\n <></>\n )}\n {def.panel.useEditor ? (\n <CSSEditorMenuButton isActive={tab === 'default'} onClick={() => setTab('default')}>\n <Icon name=\"icon-pen\" color=\"grey2\" />\n </CSSEditorMenuButton>\n ) : (\n <></>\n )}\n {def.panel.useWidgets ? (\n <EditorIsInitialize uniqid={uniqid}>\n <CSSEditorMenuButton isActive={tab === 'widgets'} onClick={() => setTab('widgets')}>\n <Icon name=\"icon-sliders\" color=\"grey2\" />\n </CSSEditorMenuButton>\n </EditorIsInitialize>\n ) : (\n <></>\n )}\n </CSSEditorMenu>\n )}\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column' }}>\n <CSSEditorHeader>\n <EditorPosition uniqid={uniqid} position={editor.position} />\n <CSSEditorLabel>{intl.formatMessage({ id: def.label })}</CSSEditorLabel>\n <CSSEditorAction>\n <CSSEditorMenuButton onClick={onClose}>\n <Icon 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 <EditorIsBusy uniqid={uniqid} />\n <EditorIsLocked uniqid={uniqid} />\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 </CSSEditorMask>\n ) : (\n <></>\n );\n};\n","import React from 'react';\n\nimport { shallowEqual, 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: 1;\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, shallowEqual);\n return (\n <CSSEditorPortalWrapper className=\"editor-portal-wrapper\">\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} position={editor.position}></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} position={editor.position}></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 { JIACapabilities } from 'jamespot-user-api';\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: JIACapabilities;\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 fetch = useCallback(\n (text: string, capability: JIACapabilities) => {\n return new Promise<string>((resolve, reject) => {\n PrepareAndSetQuery({\n reject,\n resolve,\n text,\n capability,\n });\n });\n },\n [PrepareAndSetQuery],\n );\n\n const AICapabilities = useMemo(() => {\n return {\n develop: (text: string) => fetch(text, 'develop'),\n summarize: (text: string) => fetch(text, 'summarize'),\n tldr: (text: string) => fetch(text, 'tldr'),\n en: (text: string) => fetch(text, 'en'),\n es: (text: string) => fetch(text, 'es'),\n formal: (text: string) => fetch(text, 'formal'),\n funny: (text: string) => fetch(text, 'funny'),\n };\n }, [fetch]);\n\n const ext = useMemo(() => JTinyMCEExtensionsBuilders.jia(AICapabilities, intl), [intl, AICapabilities]);\n\n return [query, ext] as const;\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(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onMentionsQueryError);\n }, [models, onMentionsQueryError, theme]);\n\n const commonOptions = useMemo(() => 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 { 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(\n (message?: string) => {\n dispatch(Toast.actions.error({ label: message ?? intl.formatMessage({ id: 'GLOBAL_Error' }) }));\n },\n [dispatch, intl],\n );\n\n const tinyMentionsQueries = useMemo(() => {\n return getTinyMCEMentionsQueries(models, theme, onMentionsQueryError);\n }, [models, onMentionsQueryError, theme]);\n\n const commonOptions = useMemo(() => 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 React from 'react';\r\nimport { JRCInputAudience, JRCMessage, JRCModal } from 'jamespot-react-components';\r\nimport { FormattedMessage, useIntl } from 'react-intl';\r\nimport { Control } from 'react-hook-form';\r\nimport jamespot from 'jamespot-user-api';\r\nimport { Network } from 'jamespot-front-business';\r\nimport { useSelector } from 'react-redux';\r\n\r\nexport type ModalAudienceProps = {\r\n open: boolean;\r\n closeHandler: () => void;\r\n title?: string;\r\n control: Control<any>;\r\n warningMessage?: string;\r\n onSubmit: () => void;\r\n name?: string;\r\n};\r\n\r\nexport const ModalAudience = ({\r\n open,\r\n closeHandler,\r\n title,\r\n control,\r\n warningMessage,\r\n onSubmit,\r\n name = 'publishTo',\r\n}: ModalAudienceProps) => {\r\n const intl = useIntl();\r\n const networkPublic = useSelector(Network.selectors.selectNetworkPublic);\r\n\r\n return (\r\n <JRCModal\r\n open={open}\r\n closeHandler={closeHandler}\r\n title={title ?? intl.formatMessage({ id: 'GLOBAL_Audience' })}\r\n buttons={[\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Cancel\" />,\r\n color: 'cancel',\r\n clickHandler: () => closeHandler(),\r\n },\r\n {\r\n children: <FormattedMessage id=\"GLOBAL_Continue\" />,\r\n color: 'danger',\r\n clickHandler: () => {\r\n closeHandler();\r\n onSubmit();\r\n },\r\n },\r\n ]}>\r\n <JRCMessage\r\n variant={'warning'}\r\n message={warningMessage ?? intl.formatMessage({ id: 'FORM_Audience_Empty' })}\r\n />\r\n <JRCInputAudience\r\n asyncPromise={(inputValue: string) => jamespot.audience.autocomplete(inputValue)}\r\n searchable={true}\r\n control={control}\r\n multiple={true}\r\n placeholder={intl.formatMessage({ id: 'GLOBAL_Audience' })}\r\n name={name}\r\n defaultCustomOptions={\r\n networkPublic\r\n ? [\r\n {\r\n uri: networkPublic.uri,\r\n title: networkPublic.title,\r\n resetOptions: true,\r\n icon: 'icon-fs-wall',\r\n },\r\n ]\r\n : []\r\n }\r\n />\r\n </JRCModal>\r\n );\r\n};\r\n","import * as React from 'react';\nimport { Outlet, matchPath } 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';\nimport { useMemo } from 'react';\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 paths?: 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 = useMemo(() => Object.values(routes), [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) => {\n if (`/ng/rr/${extensionRoute}/${route.path}` === pathname) {\n return true;\n }\n\n return route.paths?.reduce<boolean>((previousValue: boolean, currentValue: string) => {\n const pattern = `/ng/rr/${extensionRoute}/${currentValue}`;\n const isMatch = matchPath(pattern, pathname) !== null;\n return previousValue || isMatch;\n }, false);\n });\n if (activeRoute) setActiveTab(activeRoute.key);\n }, [pathname, ROUTES_ARRAY, extensionRoute]);\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"],"names":["Avatar","props","theme","useTheme","networkPublic","useSelector","selectors","selectNetworkPublic","uri","JRCIcon","name","size","color","primary","variant","JRCAvatar","AudienceWrapper","AvatarLink","white","lavender","overlap","Audience","audience","limit","intl","useIntl","isModalOpen","setModalOpen","useState","JRCFlexBox","splice","map","item","index","href","_url","target","key","id","JRCTooltip","description","undefined","title","position","alt","timestamp","dateModified","Utils","date","strToTimestamp","focusable","length","onClick","JRCModalLayout","closeHandler","enableClickAwayCloseModal","open","maxHeight","JRCModalContent","formatMessage","overflow","onClickIconClose","i","y","gap","space","l","type","JRCStyledHref","JRCTypography","TextWrapper","md","loadingResponse","response","loading","error","AIModal","query","setResponse","sendAIRequest","useCallback","textEnhancement","text","capacity","capability","then","errorMsg","textResponse","result","catch","_err","useEffect","trim","zIndex","tinyMCEModal","reject","buttons","children","clickHandler","resolve","isFull","JRCLoader","align","CSSSquareWidgetWrapper","CSSSquareWidget","grey2","available","CSSWidgetButton","height","CSSWrapWidgetWrapper","CSSWrapTitle","grey0","CSSWrapWidget","full","Flex","direction","JRCButton","registry","getLazyComponent","JRCIconButton","WidgetList","mode","view","namespace","onChange","isOpen","setOpen","widgets","definition","WidgetsName","ArticleTitle","ArticleButton","CheckList","Presence","ArticleText","ArticleImage","ArticleSlider","ArticleAttachment","getBuilderWidgets","args","portalId","factory","FormattedMessage","widget","src","img","label","className","minWidth","WidgetModeArticle","WidgetModeComment","calcHeight","useMemo","Math","ceil","bg","bgHover","iconSize","icon","getVisibleColumns","tableColumnsData","columns","toRet","filter","data","isVisible","forEach","column","find","el","push","WidgetTable","Loader","AbsoluteWrapper","WrapperEditMode","WidgetDatasourceTableWrapper","uniqid","tableHeadColor","tableHeadTextColor","tableHeadIconColor","tableRowColor","tableRowTextColor","tableBorderRadius","tableSizedColumns","tableSizedColumnsWidth","dispatch","isEditorOpenOnFirstRender","setIsEditorOpenOnFirstRender","isLoading","setIsLoading","datasourceData","setDatasourceData","datasourceModel","setDatasourceModel","datasourceSort","setDatasourceSort","order","datasourceType","setDatasourceType","datasourceIdentifier","setDatasourceIdentifier","DatasourceTable","rtConditions","rtAudience","rtLastObject","fetchDatasource","get","Format","VIEW","model","sort","datasource","finally","registerEditor","slice","actions","flushAllEditor","setTimeout","rows","tableDefaultSortOrder","tableDefaultSortName","JRCHtml","__html","CSSHidden","WidgetUploader","initialFiles","initialClick","multiple","accept","onUploadStart","onUploadEnd","onUploadSuccess","uploadRef","token","selectToken","total","setTotal","files","setFiles","current","click","JRCInputFileAdvancedRaw","ref","content","totalFile","prevTotal","fileResponse","prevFiles","WidgetAttachment","FileViewer","CSSWrapper","JRCWidgetArticleAttachmentWrapper","inplace","useDispatch","isActive","state","shallowEqual","onError","message","setWidgetState","mounted","empty","onlyOffice","selectById","option","file","getAccessHash","Error","hash","idFile","window","getWedocFilePath","wedocWindowOpen","openWithOptions","condition","f","includes","mimetype","options","Array","isArray","JRCWidgetEmptyInplace","url","CSSButtonWrapper","CSSPointer","clickable","JRCWidgetArticleButtonWrapper","backgroundColor","buttonSize","borderRadius","JRCWidgetButton","JRCWidgetArticleGallery","CSSImagePointer","JRCWidgetArticleGalleryWrapper","maxWidth","WidgetImage","CSSImageWrapperHover","mockFileLittle","mainType","dateCreation","str","Date","parse","isNaN","getTime","JRCWidgetArticleImageWrapper","width","useFilter","setUri","formatImgUrl","now","from","path","JRCWidgetArticleSliderWrapper","dynamicWidth","setDynamicWidth","useRef","fileViewerFiles","slides","slide","handleResize","offsetWidth","addEventListener","removeEventListener","isEditable","handleEditor","style","JRCWidgetSlider","useDots","loop","startAt","onClickSlide","WidgetArticleText","CSSTextWrapper","JRCWidgetArticleTextWrapper","isBusy","selectWidgetState","busy","tinyMCECommonOptions","selectTinyMCECommonOptions","models","selectAll","tinyMentionsQueries","getTinyMCEMentionsQueries","autoFocus","tinymceScriptSrc","commonOptions","mentionsQueries","WidgetArticleTitle","ToolWrapper","grey1","Tool","JRCWidgetArticleTitleWrapper","heading","Toolbar","sizeValue","WidgetCheckList","J","react","WidgetCheckListEditor","Typography","WidgetConfigWrapper","border","Column","CommentContainer","FormItemContainer","JRCWidgetCheckListWrapper","commentId","editRight","deleteRight","onRemove","onWidgetUpdate","widgetContent","entries","setEntries","isDeleteModalOpen","setDeleteModalOpen","setToken","tokenLoading","setTokenLoading","widgetWrapper","selectWidget","currentUser","onChangeWrapper","updateWidgetWrapper","handleRemoveWidget","flushWidget","openEditorPanel","finalEntries","arr","checked","value","links","user","res","e","JRCInputTextRaw","required","placeholder","event","margin","onChangeContent","onRemoveWidget","initialEntries","onFileClick","onItemCheckListChange","items","mimetypes","checkListRespond","idUser","err","handleCheckItem","cursor","JRCModal","WidgetExcelDatasourceTableWrapper","ExcelDatasourceTable","Button","Footer","WidgetRemove","setIsOpen","removeWidget","WidgetViewFooterActions","widgetObject","selectWidgetObject","widgetObjectRights","selectWidgetObjectRights","canUpdate","update","handleOnClick","onSave","ensureWidgetPresenceContent","updateWidget","v2","CSSPaddingMd","CSSHref","secondary","CSSHorizontalAlign","WidgetPresenceWrapperClosing","isClosed","handleClosing","ensureWidgetObjectHasMinimumProperties","CSSWidgetPresenceWrapper","CSSWidgetPresenceState","JRCWidgetPresenceWrapper","limitValue","closing","userValue","userAvailableList","userUnavailableList","userAvailableTotal","userUnavailableTotal","isPendingResponse","setIsPendingResponse","abortController","AbortController","allRt","selectAllWidgetRTObject","handleError","lockedRespondHandler","handleCancelRespond","presenceCancel","Number","handleRespond","responseValue","payload","ensureWidgetPresenceResponsePayload","presenceRespond","signal","handleReponse","presenceGetResponse","ensureWidgetPresenceResponse","aborted","abort","lastRt","at","object","RTProvider","useRT","JRCWidgetPresence","handleClickAvailable","handleClickUnavailable","CSSWidgetWithTitle","CSSWidgetEditTitle","CSSWidgetTitle","DisplayWidget","cannotDisplayComponent","ensureWidgetArticleButtonType","ensureWidgetArticleGalleryType","ensureWidgetArticleAttachmentType","ensureWidgetArticleImageType","ensureWidgetArticleSliderType","ensureWidgetArticleTitleType","ensureWidgetArticleTextType","ensureWidgetExcelDatasourceTableType","ensureWidgetDatasourceTableType","ensureWidgetCheckListType","ensureWidgetPresenceType","WidgetTitleEdit","WidgetTitle","control","watch","useForm","defaultValues","criteriaMode","subscription","unsubscribe","JRCInputText","CSSWidgetLayer","opacity","pointerEvents","WidgetLayer","layers","ids","layer","Layer","LayerWidget","layerId","visible","locked","top","left","x","DraggableHandler","onMouseUp","updateLayer","BETA_JRCDoubleClick","onDoubleTap","mouseIsDown","setMouseDown","mouse","setMouse","start","setStart","child","setChild","handleMouseDown","nativeEvent","clientX","clientY","handleMouseMove","dx","dy","handleMouseUp","document","onMouseDown","WidgetState","def","inset","display","flex","justifyContent","alignItems","hover","initialized","CSSWidgetWrapper","grey3","font","WidgetWrapperCore","indexOrder","editableMap","currentEditableWidgetId","isComponentVisible","setIsComponentVisible","registerWidgetObject","registerWidget","setEditableWidgetId","_widget","openingType","openingTypeLink","setEditableIndex","EditorsPortal","JRCThemeProvider","EditorsPanel","portalDiv","getElementById","portal","parent","createElement","appendChild","createPortalElement","createPortal","CommentsBlocWrapper","CSSCommentsBlocWidgetWrapper","sm","CommentsBloc","articleId","canComment","setLoading","setWidgets","widgetIds","selectWidgets","platformConfig","selectPlatformConfig","commentsList","commentList","driveHook","selectHook","fileBank","widgetHook","useCommentRT","idComments","idArticle","socket","rtHandlers","getCommentsLikeRTHandlers","handler","onMessage","function","offMessage","list","c","fetchComments","fetchToken","onComment","params","finalWidget","Object","keys","some","w","addComment","comment","_widgets","registerWidgetObjectRights","rights","_right","JRCCommentsBloc","comments","onCommentUpdate","commentToUpdate","idComment","updateComment","onCommentDelete","deleteComment","isWidgetActive","create","autorize","widgetListComponent","newWidgetsWrapperComponent","JRCMessage","existingWidgetsWrapperComponent","tinyMCEConfig","highlightFields","userHighlightFields","userAccountStatus","userModel","m","isWedocActive","onGetHashError","activeDrives","debug","UploadFromDrives","utils","buildDrivesArrayFromObject","drives","socialActionAdd","targetId","targetType","add","deleteFile","fetchUser","fetchUserFields","getFields","fetchSocialActionUserList","getUsers","removeLike","remove","fileBankRequests","getBanks","getFolders","getDocuments","copyFile","copy","msGraphRequests","documents","groups","tenants","listAccount","service","isAccountLogged","checkAccountToken","getDocument","logout","getAccount","setDefaultAccount","StretchContainer","css","Container","stretch","Form","FormElm","onSubmit","FieldsetWrapper","DisplayForm","formRef","configuration","useDisplay","fields","forceMandatory","handleSubmit","reset","formFn","formatValuesForSubmit","values","k","v","join","scrollTo","getFormattedValues","getValues","Input","conf","dataCy","readOnly","extraInputs","CSSEditorPortal","CSSEditorHeader","CSSEditorAction","CSSEditorLabel","CSSEditorMask","EDITOR_WIDTH","CSSEditor","CSSEditorContent","CSSEditorIsBusy","CSSEditorIsLocked","CSSEditorMenu","CSSEditorMenuButton","CSSEditorWidget","CSSEditorWidgetLabel","CSSEditorWidgetOption","EditorPopup","editor","selectEditor","popup","flexDirection","marginTop","flushEditorPopup","WidgetArticleTitleEditor","WidgetArticleTextEditor","WidgetArticleGalleryEditor","WidgetArticleAttachmentEditor","WidgetArticleSliderEditor","WidgetArticleImageEditor","WidgetButtonEditor","WidgetDatasourceTableEditor","WidgetExcelDatasourceTableEditor","WidgetPresenceEditor","Editor","onSaveCallback","handleHookIsActive","store","getState","flushEditor","onStateChange","states","onOpen","registerEditorPopup","hook","handlers","jamespot","network","filebank","wedoc","handleStart","handleCatch","handleFinally","override","application","EditorTabWidgets","Layers","_","n","ensureWidgetWrapperProps","console","BETA_JRCDragAndDrop","onDrag","renderEl","EditorWidgetLayer","elms","registerLayer","EditorWidgetLayerLock","EditorWidgetLayerVisibility","EditorWidgetLayerFlush","flushLayer","EditorTabWrapper","wrapper","setTitle","EditorIsBusy","Icon","EditorPosition","setEditorPosition","EditorIsInitialize","EditorIsLocked","EditorWrapper","tab","setTab","panel","useWrapper","useEditor","useWidgets","CSSEditorPortalWrapper","CSSEditorPortalPopupWrapper","CSSEditorPortalRow","CSSEditorPortalFreeSpace","editors","selectEditors","Empty","useAI","setQuery","PrepareAndSetQuery","fetch","Promise","AICapabilities","develop","summarize","tldr","en","es","formal","funny","JTinyMCEExtensionsBuilders","jia","JRCInputTinyMCEWithExt","extAI","isAIActive","hooks","JIAHook","extArray","onMentionsQueryError","tinymceCommonOptions","JRCInputTinyMCE","additionalExtensions","JRCInputTinyMCEWithExtRaw","JRCInputTinyMCERaw","ModalAudience","warningMessage","JRCInputAudience","asyncPromise","inputValue","autocomplete","searchable","defaultCustomOptions","resetOptions","AppColumn","MainColumn","TwoColLayout","extensionRoute","routes","pathname","useLocation","ROUTES_ARRAY","activeTab","setActiveTab","tabs","absolutePath","group","activeRoute","route","paths","reduce","previousValue","currentValue","pattern","isMatch","matchPath","fallback","Outlet"],"sourceRoot":""}
|