@pega/cosmos-react-rte 10.0.0-build.4.2 → 10.0.0-build.4.21
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/lib/components/Editor/Editor.d.ts.map +1 -1
- package/lib/components/Editor/Editor.js +5 -2
- package/lib/components/Editor/Editor.js.map +1 -1
- package/lib/components/Editor/Editor.styles.d.ts.map +1 -1
- package/lib/components/Editor/IframeTiptapEditor.d.ts +2 -1
- package/lib/components/Editor/IframeTiptapEditor.d.ts.map +1 -1
- package/lib/components/Editor/IframeTiptapEditor.js +5 -5
- package/lib/components/Editor/IframeTiptapEditor.js.map +1 -1
- package/lib/components/Editor/ImageActionButtons.d.ts +4 -2
- package/lib/components/Editor/ImageActionButtons.d.ts.map +1 -1
- package/lib/components/Editor/ImageActionButtons.js +2 -2
- package/lib/components/Editor/ImageActionButtons.js.map +1 -1
- package/lib/components/Editor/hooks/useIframeSetup.d.ts +2 -1
- package/lib/components/Editor/hooks/useIframeSetup.d.ts.map +1 -1
- package/lib/components/Editor/hooks/useIframeSetup.js +2 -2
- package/lib/components/Editor/hooks/useIframeSetup.js.map +1 -1
- package/lib/components/RichTextEditor/RichTextViewer.d.ts.map +1 -1
- package/lib/components/RichTextEditor/RichTextViewer.js +3 -3
- package/lib/components/RichTextEditor/RichTextViewer.js.map +1 -1
- package/lib/components/RichTextEditor/RichTextViewer.types.d.ts +2 -0
- package/lib/components/RichTextEditor/RichTextViewer.types.d.ts.map +1 -1
- package/lib/components/RichTextEditor/RichTextViewer.types.js.map +1 -1
- package/lib/components/RichTextEditor/utils/markdownConverter.d.ts +2 -2
- package/lib/components/RichTextEditor/utils/markdownConverter.d.ts.map +1 -1
- package/lib/components/RichTextEditor/utils/markdownConverter.js +307 -24
- package/lib/components/RichTextEditor/utils/markdownConverter.js.map +1 -1
- package/lib/components/RichTextEditor/utils/renderers.d.ts +3 -0
- package/lib/components/RichTextEditor/utils/renderers.d.ts.map +1 -1
- package/lib/components/RichTextEditor/utils/renderers.js +42 -0
- package/lib/components/RichTextEditor/utils/renderers.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageActionButtons.d.ts","sourceRoot":"","sources":["../../../src/components/Editor/ImageActionButtons.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,OAAO,CAAC;AAgBnD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IACrC,MAAM,EAAE,CAAC,aAAa,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACnD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,
|
|
1
|
+
{"version":3,"file":"ImageActionButtons.d.ts","sourceRoot":"","sources":["../../../src/components/Editor/ImageActionButtons.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,OAAO,CAAC;AAgBnD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IACrC,MAAM,EAAE,CAAC,aAAa,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACnD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AA2CD,QAAA,MAAM,kBAAkB,uHAgGvB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -40,7 +40,7 @@ const ActionButton = styled.button(({ theme }) => ({
|
|
|
40
40
|
}
|
|
41
41
|
}));
|
|
42
42
|
ActionButton.defaultProps = defaultThemeProp;
|
|
43
|
-
const ImageActionButtons = forwardRef(function ImageActionButtons({ position, containerRef, onEdit, onDelete, onMouseEnter, onMouseLeave,
|
|
43
|
+
const ImageActionButtons = forwardRef(function ImageActionButtons({ position, containerRef, onEdit, onDelete, onMouseEnter, onMouseLeave, editAriaLabel, deleteAriaLabel, editTooltip, deleteTooltip }, ref) {
|
|
44
44
|
const [editEl, setEditEl] = useElement();
|
|
45
45
|
const [deleteEl, setDeleteEl] = useElement();
|
|
46
46
|
const theme = useTheme();
|
|
@@ -78,7 +78,7 @@ const ImageActionButtons = forwardRef(function ImageActionButtons({ position, co
|
|
|
78
78
|
ref.current = el;
|
|
79
79
|
}
|
|
80
80
|
};
|
|
81
|
-
return (_jsxs(ActionsContainer, { "$visible": !!position, "$top": top, "$left": left, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, children: [_jsx(ActionButton, { ref: setEditRef, onClick: handleEditClick, "aria-label":
|
|
81
|
+
return (_jsxs(ActionsContainer, { "$visible": !!position, "$top": top, "$left": left, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, children: [_jsx(ActionButton, { ref: setEditRef, onClick: handleEditClick, "aria-label": editAriaLabel, type: 'button', children: _jsx(Icon, { name: 'pencil' }) }), editEl && (_jsx(Tooltip, { target: editEl, showDelay: 'none', hideDelay: 'none', children: editTooltip })), _jsx(ActionButton, { ref: setDeleteEl, onClick: handleDeleteClick, "aria-label": deleteAriaLabel, type: 'button', children: _jsx(Icon, { name: 'trash' }) }), deleteEl && (_jsx(Tooltip, { target: deleteEl, showDelay: 'none', hideDelay: 'none', children: deleteTooltip }))] }));
|
|
82
82
|
});
|
|
83
83
|
export default ImageActionButtons;
|
|
84
84
|
//# sourceMappingURL=ImageActionButtons.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageActionButtons.js","sourceRoot":"","sources":["../../../src/components/Editor/ImageActionButtons.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EACL,IAAI,EACJ,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,UAAU,EACV,QAAQ,EACT,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,UAAU,MAAM,+DAA+D,CAAC;AAC5F,OAAO,KAAK,SAAS,MAAM,8DAA8D,CAAC;AAE1F,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ImageActionButtons.js","sourceRoot":"","sources":["../../../src/components/Editor/ImageActionButtons.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EACL,IAAI,EACJ,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,UAAU,EACV,QAAQ,EACT,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,UAAU,MAAM,+DAA+D,CAAC;AAC5F,OAAO,KAAK,SAAS,MAAM,8DAA8D,CAAC;AAE1F,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAsBpC,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CACjC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;IACnC,GAAG,EAAE,eAAe,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG;IACzC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO;IACrC,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;IACzD,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;IACzC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;IAChC,OAAO,EAAE,eAAe,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG;IAC7C,GAAG,EAAE,GAAG,IAAI,KAAK;IACjB,IAAI,EAAE,GAAG,KAAK,KAAK;IACnB,SAAS,EAAE,mBAAmB;CAC/B,CAAC,CACH,CAAC;AAEF,gBAAgB,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAEjD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,QAAQ;IACpB,cAAc,EAAE,QAAQ;IACxB,KAAK,EAAE,YAAY,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG;IACxC,MAAM,EAAE,YAAY,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG;IACzC,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,MAAM;IACd,YAAY,EAAE,eAAe,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG;IAC3D,eAAe,EAAE,aAAa;IAC9B,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;IAC7C,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE;QACT,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC;KAC5D;IACD,SAAS,EAAE;QACT,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;KACnC;CACF,CAAC,CAAC,CAAC;AAEJ,YAAY,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAE7C,MAAM,kBAAkB,GAAG,UAAU,CACnC,SAAS,kBAAkB,CACzB,EACE,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,eAAe,EACf,WAAW,EACX,aAAa,EACd,EACD,GAAG;IAEH,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,UAAU,EAAqB,CAAC;IAC5D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,UAAU,EAAqB,CAAC;IAChE,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+CAA+C;IAC/C,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;IACnE,4EAA4E;IAC5E,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,YAAY,GAAG,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC3F,MAAM,OAAO,GAAG,UAAU,GAAG,YAAY,GAAG,GAAG,CAAC,CAAC,uBAAuB;IAExE,iEAAiE;IACjE,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,YAAY,CAAC;IACxE,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,YAAY,CAAC;IAE5F,MAAM,eAAe,GAAG,CAAC,CAAgC,EAAE,EAAE;QAC3D,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,MAAM,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,CAAgC,EAAE,EAAE;QAC7D,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,QAAQ,EAAE,CAAC;IACb,CAAC,CAAC;IAEF,+BAA+B;IAC/B,MAAM,UAAU,GAAG,CAAC,EAA4B,EAAE,EAAE;QAClD,SAAS,CAAC,EAAE,CAAC,CAAC;QACd,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;YAC9B,GAAG,CAAC,EAAE,CAAC,CAAC;QACV,CAAC;aAAM,IAAI,GAAG,EAAE,CAAC;YACf,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,gBAAgB,gBACL,CAAC,CAAC,QAAQ,UACd,GAAG,WACF,IAAI,EACX,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,aAE1B,KAAC,YAAY,IACX,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,eAAe,gBACZ,aAAa,EACzB,IAAI,EAAC,QAAQ,YAEb,KAAC,IAAI,IAAC,IAAI,EAAC,QAAQ,GAAG,GACT,EACd,MAAM,IAAI,CACT,KAAC,OAAO,IAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAC,MAAM,EAAC,SAAS,EAAC,MAAM,YACvD,WAAW,GACJ,CACX,EACD,KAAC,YAAY,IACX,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,iBAAiB,gBACd,eAAe,EAC3B,IAAI,EAAC,QAAQ,YAEb,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,GAAG,GACR,EACd,QAAQ,IAAI,CACX,KAAC,OAAO,IAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAC,MAAM,EAAC,SAAS,EAAC,MAAM,YACzD,aAAa,GACN,CACX,IACgB,CACpB,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,kBAAkB,CAAC","sourcesContent":["import { forwardRef } from 'react';\nimport type { RefObject, MouseEvent } from 'react';\nimport styled from 'styled-components';\n\nimport {\n Icon,\n registerIcon,\n defaultThemeProp,\n Tooltip,\n useElement,\n useTheme\n} from '@pega/cosmos-react-core';\nimport * as pencilIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/pencil.icon';\nimport * as trashIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/trash.icon';\n\nregisterIcon(pencilIcon, trashIcon);\n\nexport interface ImagePosition {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\ninterface ImageActionButtonsProps {\n position: ImagePosition | null;\n containerRef: RefObject<HTMLElement>;\n onEdit: (editButtonRef: HTMLButtonElement) => void;\n onDelete: () => void;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n editAriaLabel: string;\n deleteAriaLabel: string;\n editTooltip: string;\n deleteTooltip: string;\n}\n\nconst ActionsContainer = styled.div<{ $visible: boolean; $top: number; $left: number }>(\n ({ theme, $visible, $top, $left }) => ({\n position: 'absolute',\n display: $visible ? 'flex' : 'none',\n gap: `calc(0.25 * ${theme.base.spacing})`,\n zIndex: theme.base['z-index'].popover,\n backgroundColor: theme.base.palette['primary-background'],\n borderRadius: theme.base['border-radius'],\n boxShadow: theme.base.shadow.low,\n padding: `calc(0.25 * ${theme.base.spacing})`,\n top: `${$top}rem`,\n left: `${$left}rem`,\n transform: 'translateX(-100%)'\n })\n);\n\nActionsContainer.defaultProps = defaultThemeProp;\n\nconst ActionButton = styled.button(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: `calc(3 * ${theme.base.spacing})`,\n height: `calc(3 * ${theme.base.spacing})`,\n padding: 0,\n border: 'none',\n borderRadius: `calc(0.25 * ${theme.base['border-radius']})`,\n backgroundColor: 'transparent',\n color: theme.base.palette['foreground-color'],\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: theme.base.palette['secondary-background']\n },\n '&:focus': {\n outline: 'none',\n boxShadow: theme.base.shadow.focus\n }\n}));\n\nActionButton.defaultProps = defaultThemeProp;\n\nconst ImageActionButtons = forwardRef<HTMLButtonElement, ImageActionButtonsProps>(\n function ImageActionButtons(\n {\n position,\n containerRef,\n onEdit,\n onDelete,\n onMouseEnter,\n onMouseLeave,\n editAriaLabel,\n deleteAriaLabel,\n editTooltip,\n deleteTooltip\n },\n ref\n ) {\n const [editEl, setEditEl] = useElement<HTMLButtonElement>();\n const [deleteEl, setDeleteEl] = useElement<HTMLButtonElement>();\n const theme = useTheme();\n\n if (!position || !containerRef.current) {\n return null;\n }\n\n // Calculate position relative to the container\n const containerRect = containerRef.current.getBoundingClientRect();\n // Use theme spacing (parse rem value and convert to pixels for calculation)\n const spacingRem = parseFloat(theme.base.spacing) || 1;\n const rootFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;\n const padding = spacingRem * rootFontSize * 0.5; // Half of base spacing\n\n // Position at top-right of the image (convert to rem for output)\n const top = (position.top - containerRect.top + padding) / rootFontSize;\n const left = (position.left - containerRect.left + position.width - padding) / rootFontSize;\n\n const handleEditClick = (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (editEl) {\n onEdit(editEl);\n }\n };\n\n const handleDeleteClick = (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n e.stopPropagation();\n onDelete();\n };\n\n // Combine refs for edit button\n const setEditRef = (el: HTMLButtonElement | null) => {\n setEditEl(el);\n if (typeof ref === 'function') {\n ref(el);\n } else if (ref) {\n ref.current = el;\n }\n };\n\n return (\n <ActionsContainer\n $visible={!!position}\n $top={top}\n $left={left}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <ActionButton\n ref={setEditRef}\n onClick={handleEditClick}\n aria-label={editAriaLabel}\n type='button'\n >\n <Icon name='pencil' />\n </ActionButton>\n {editEl && (\n <Tooltip target={editEl} showDelay='none' hideDelay='none'>\n {editTooltip}\n </Tooltip>\n )}\n <ActionButton\n ref={setDeleteEl}\n onClick={handleDeleteClick}\n aria-label={deleteAriaLabel}\n type='button'\n >\n <Icon name='trash' />\n </ActionButton>\n {deleteEl && (\n <Tooltip target={deleteEl} showDelay='none' hideDelay='none'>\n {deleteTooltip}\n </Tooltip>\n )}\n </ActionsContainer>\n );\n }\n);\n\nexport default ImageActionButtons;\n"]}
|
|
@@ -21,6 +21,7 @@ interface UseIframeSetupParams {
|
|
|
21
21
|
onImageAdded?: (image: File, id: string, altText?: string) => void;
|
|
22
22
|
imagesEnabled: boolean;
|
|
23
23
|
linksEnabled: boolean;
|
|
24
|
+
colorsEnabled: boolean;
|
|
24
25
|
imageInsertionMode: 'file' | 'url' | 'all';
|
|
25
26
|
pastedImages: MutableRefObject<File[]>;
|
|
26
27
|
editorId: string;
|
|
@@ -50,6 +51,6 @@ export type IframeEditorRef = MutableRefObject<IframeEditorHandle | null>;
|
|
|
50
51
|
interface UseIframeSetupReturn {
|
|
51
52
|
iframeEditorRef: IframeEditorRef;
|
|
52
53
|
}
|
|
53
|
-
export default function useIframeSetup({ iframeRef, theme, styleSheetTarget, customElements, placeholder, defaultValue, disabled, readOnly, onChange, onKeyDown, onFocus, onBlur, onInit, spellcheck, initOptions, onImageAdded, imagesEnabled, linksEnabled, imageInsertionMode, pastedImages, editorId, required, setTiptapEditor, setFocused, autoResize, onTabOut, onFocusTableMenu, onFocusPreviousCellMenu, secure, preserveTableStyles }: UseIframeSetupParams): UseIframeSetupReturn;
|
|
54
|
+
export default function useIframeSetup({ iframeRef, theme, styleSheetTarget, customElements, placeholder, defaultValue, disabled, readOnly, onChange, onKeyDown, onFocus, onBlur, onInit, spellcheck, initOptions, onImageAdded, imagesEnabled, linksEnabled, colorsEnabled, imageInsertionMode, pastedImages, editorId, required, setTiptapEditor, setFocused, autoResize, onTabOut, onFocusTableMenu, onFocusPreviousCellMenu, secure, preserveTableStyles }: UseIframeSetupParams): UseIframeSetupReturn;
|
|
54
55
|
export {};
|
|
55
56
|
//# sourceMappingURL=useIframeSetup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useIframeSetup.d.ts","sourceRoot":"","sources":["../../../../src/components/Editor/hooks/useIframeSetup.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"useIframeSetup.d.ts","sourceRoot":"","sources":["../../../../src/components/Editor/hooks/useIframeSetup.tsx"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import { getHtmlStyles } from '@pega/cosmos-react-core/lib/components/HTML/HTML'
|
|
|
7
7
|
import { createGlobalBodyStyles, createGlobalRootStyles, globalSpacingStyles } from '@pega/cosmos-react-core/lib/styles/GlobalStyle';
|
|
8
8
|
import { IframeTiptapEditor } from '../IframeTiptapEditor';
|
|
9
9
|
import { getIframeContentStyles } from '../iframeContentStyles';
|
|
10
|
-
export default function useIframeSetup({ iframeRef, theme, styleSheetTarget, customElements, placeholder, defaultValue, disabled, readOnly, onChange, onKeyDown, onFocus, onBlur, onInit, spellcheck, initOptions, onImageAdded, imagesEnabled, linksEnabled, imageInsertionMode, pastedImages, editorId, required, setTiptapEditor, setFocused, autoResize = true, onTabOut, onFocusTableMenu, onFocusPreviousCellMenu, secure = false, preserveTableStyles = false }) {
|
|
10
|
+
export default function useIframeSetup({ iframeRef, theme, styleSheetTarget, customElements, placeholder, defaultValue, disabled, readOnly, onChange, onKeyDown, onFocus, onBlur, onInit, spellcheck, initOptions, onImageAdded, imagesEnabled, linksEnabled, colorsEnabled, imageInsertionMode, pastedImages, editorId, required, setTiptapEditor, setFocused, autoResize = true, onTabOut, onFocusTableMenu, onFocusPreviousCellMenu, secure = false, preserveTableStyles = false }) {
|
|
11
11
|
const { components: { 'text-area': { 'min-height': textAreaMinHeight } } } = theme;
|
|
12
12
|
const iframeRootRef = useRef(null);
|
|
13
13
|
const iframeEditorRef = useRef(null);
|
|
@@ -175,7 +175,7 @@ export default function useIframeSetup({ iframeRef, theme, styleSheetTarget, cus
|
|
|
175
175
|
}
|
|
176
176
|
setTiptapEditor(editor);
|
|
177
177
|
onInit?.(editor);
|
|
178
|
-
}, editorRef: iframeEditorRef, spellcheck: spellcheck, customElements: customElements, initOptions: initOptions, onImageAdded: (image, id, altText) => onImageAddedRef.current?.(image, id, altText), imagesEnabled: imagesEnabled, linksEnabled: linksEnabled, imageInsertionMode: imageInsertionMode, pastedImagesRef: pastedImages, editorId: editorId, secure: secure, preserveTableStyles: preserveTableStyles, onFocusTableMenu: () => onFocusTableMenuRef.current?.(), onFocusPreviousCellMenu: () => {
|
|
178
|
+
}, editorRef: iframeEditorRef, spellcheck: spellcheck, customElements: customElements, initOptions: initOptions, onImageAdded: (image, id, altText) => onImageAddedRef.current?.(image, id, altText), imagesEnabled: imagesEnabled, linksEnabled: linksEnabled, colorsEnabled: colorsEnabled, imageInsertionMode: imageInsertionMode, pastedImagesRef: pastedImages, editorId: editorId, secure: secure, preserveTableStyles: preserveTableStyles, onFocusTableMenu: () => onFocusTableMenuRef.current?.(), onFocusPreviousCellMenu: () => {
|
|
179
179
|
onFocusPreviousCellMenuRef.current?.();
|
|
180
180
|
} }));
|
|
181
181
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useIframeSetup.js","sourceRoot":"","sources":["../../../../src/components/Editor/hooks/useIframeSetup.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useLayoutEffect, useRef, useState, useEffect } from 'react';\nimport type { RefObject, MutableRefObject } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport type { Root } from 'react-dom/client';\nimport { compile, serialize, stringify } from 'stylis';\nimport type { Editor as TiptapEditor } from '@tiptap/core';\n\nimport { useTheme } from '@pega/cosmos-react-core';\nimport { getHtmlStyles } from '@pega/cosmos-react-core/lib/components/HTML/HTML';\nimport {\n createGlobalBodyStyles,\n createGlobalRootStyles,\n globalSpacingStyles\n} from '@pega/cosmos-react-core/lib/styles/GlobalStyle';\n\nimport type { CustomComponent, EditorProps } from '../Editor.types';\nimport { IframeTiptapEditor } from '../IframeTiptapEditor';\nimport { getIframeContentStyles } from '../iframeContentStyles';\n\ninterface UseIframeSetupParams {\n iframeRef: RefObject<HTMLIFrameElement>;\n theme: ReturnType<typeof useTheme>;\n styleSheetTarget?: HTMLElement | ShadowRoot;\n customElements: CustomComponent[];\n placeholder?: string;\n defaultValue?: string;\n disabled?: boolean;\n readOnly?: boolean;\n onChange?: (editor: TiptapEditor) => void;\n onKeyDown?: (event?: KeyboardEvent) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n onInit?: (editor: TiptapEditor) => void;\n spellcheck?: boolean;\n initOptions?: EditorProps['initOptions'];\n onImageAdded?: (image: File, id: string, altText?: string) => void;\n imagesEnabled: boolean;\n linksEnabled: boolean;\n imageInsertionMode: 'file' | 'url' | 'all';\n pastedImages: MutableRefObject<File[]>;\n editorId: string;\n required?: boolean;\n setTiptapEditor: (editor: TiptapEditor) => void;\n setFocused: (focused: boolean) => void;\n autoResize?: boolean;\n onTabOut?: () => void;\n onFocusTableMenu?: () => void;\n onFocusPreviousCellMenu?: () => void;\n secure?: boolean;\n preserveTableStyles?: boolean;\n}\n\nexport interface IframeEditorHandle {\n focus: () => void;\n getPlainText: () => string;\n getRichText: () => string;\n getHtml: () => string;\n clear: () => void;\n insertText: (text: string) => void;\n setCursorLocationToStart: () => void;\n insertHtml: (html: string, overwrite?: boolean) => void;\n getEditor: () => TiptapEditor | null;\n setEditable: (editable: boolean) => void;\n}\n\nexport type IframeEditorRef = MutableRefObject<IframeEditorHandle | null>;\n\ninterface UseIframeSetupReturn {\n iframeEditorRef: IframeEditorRef;\n}\n\nexport default function useIframeSetup({\n iframeRef,\n theme,\n styleSheetTarget,\n customElements,\n placeholder,\n defaultValue,\n disabled,\n readOnly,\n onChange,\n onKeyDown,\n onFocus,\n onBlur,\n onInit,\n spellcheck,\n initOptions,\n onImageAdded,\n imagesEnabled,\n linksEnabled,\n imageInsertionMode,\n pastedImages,\n editorId,\n required,\n setTiptapEditor,\n setFocused,\n autoResize = true,\n onTabOut,\n onFocusTableMenu,\n onFocusPreviousCellMenu,\n secure = false,\n preserveTableStyles = false\n}: UseIframeSetupParams): UseIframeSetupReturn {\n const {\n components: {\n 'text-area': { 'min-height': textAreaMinHeight }\n }\n } = theme;\n const iframeRootRef = useRef<Root | null>(null);\n const iframeEditorRef = useRef<IframeEditorHandle | null>(null);\n const resizeObserverRef = useRef<ResizeObserver | null>(null);\n const isInitializedRef = useRef(false);\n const savedContentRef = useRef<string | null>(null);\n const [reinitializeCounter, setReinitializeCounter] = useState(0);\n\n // Refs to keep callbacks fresh without re-initializing the iframe\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const onImageAddedRef = useRef(onImageAdded);\n onImageAddedRef.current = onImageAdded;\n\n const onTabOutRef = useRef(onTabOut);\n onTabOutRef.current = onTabOut;\n\n const requiredRef = useRef(required);\n requiredRef.current = required;\n\n const onFocusTableMenuRef = useRef(onFocusTableMenu);\n onFocusTableMenuRef.current = onFocusTableMenu;\n\n const onFocusPreviousCellMenuRef = useRef(onFocusPreviousCellMenu);\n onFocusPreviousCellMenuRef.current = onFocusPreviousCellMenu;\n\n // Listen for iframe load events (fires when iframe reloads due to DOM move)\n useEffect(() => {\n if (!iframeRef.current) return;\n\n const iframe = iframeRef.current;\n\n const handleLoad = () => {\n // Check if content was lost\n const proseMirror = iframe.contentDocument?.querySelector('.ProseMirror');\n if (!proseMirror && isInitializedRef.current) {\n // savedContentRef is updated on every change, so it has the latest content\n isInitializedRef.current = false;\n setReinitializeCounter(c => c + 1);\n }\n };\n\n iframe.addEventListener('load', handleLoad);\n\n return () => {\n iframe.removeEventListener('load', handleLoad);\n };\n }, [iframeRef]);\n\n // Mount Tiptap inside iframe\n useLayoutEffect(() => {\n if (!iframeRef.current) return;\n\n // Check if already initialized and content is still valid\n if (isInitializedRef.current) {\n const proseMirror = iframeRef.current.contentDocument?.querySelector('.ProseMirror');\n if (proseMirror) {\n // Already initialized and content is valid, skip\n return;\n }\n // Content was lost (iframe reloaded), need to reinitialize\n if (iframeRootRef.current) {\n try {\n iframeRootRef.current.unmount();\n } catch (e) {\n // Ignore unmount errors\n }\n iframeRootRef.current = null;\n }\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n resizeObserverRef.current = null;\n }\n }\n\n const iframe = iframeRef.current;\n const iframeDoc = iframe.contentDocument || iframe.contentWindow?.document;\n\n if (!iframeDoc) return;\n\n // Generate styles\n const htmlStyles = serialize(compile(getHtmlStyles(theme)), stringify);\n\n // When preserving table styles, remove the default Tiptap table borders\n // so only the original inline styles show through\n const preserveTableStylesCSS = preserveTableStyles\n ? `\n .ProseMirror table,\n .ProseMirror table tr,\n .ProseMirror table td,\n .ProseMirror table th,\n .ProseMirror table tr td,\n .ProseMirror table tr th {\n border: 0 none transparent;\n }\n `\n : '';\n\n const contentStyle = `\n ${createGlobalRootStyles(theme)}\n ${globalSpacingStyles}\n ${createGlobalBodyStyles(theme)}\n ${htmlStyles}\n ${getIframeContentStyles(theme)}\n ${initOptions?.contentStyle ?? ''}\n ${preserveTableStylesCSS}\n `;\n\n // Create basic HTML structure in iframe\n iframeDoc.open();\n iframeDoc.write(`\n <!DOCTYPE html>\n <html>\n <head>\n <style${window.__webpack_nonce__ ? ` nonce=\"${window.__webpack_nonce__}\"` : ''}>\n ${contentStyle}\n </style>\n </head>\n <body>\n <div id=\"tiptap-root\"></div>\n </body>\n </html>\n `);\n iframeDoc.close();\n\n // Copy global styles into the iframe\n const globalStyles =\n styleSheetTarget?.querySelectorAll('[data-cosmos-global-style]') ?? ([] as HTMLElement[]);\n const extraStyles =\n document.querySelectorAll('[data-cosmos-global-style]') ?? ([] as HTMLElement[]);\n const iframeHead = iframeDoc.querySelector('head');\n [...globalStyles, ...extraStyles].forEach(sheet => {\n iframeHead?.appendChild(sheet.cloneNode(true));\n });\n\n // Register custom components in iframe\n if (customElements && customElements.length > 0 && iframe.contentWindow) {\n const iframeWindow = iframe.contentWindow as unknown as typeof globalThis;\n customElements.forEach((component: CustomComponent) => {\n if (\n component.name &&\n component.createCustomElement &&\n !iframeWindow.customElements.get(component.name)\n ) {\n const CustomElement = component.createCustomElement(iframeWindow);\n iframeWindow.customElements.define(component.name, CustomElement);\n }\n\n // Inject custom component styles into iframe if provided\n if (component.style && iframeHead && component.name) {\n const styleId = `custom-component-${component.name}`;\n if (!iframeDoc.getElementById(styleId)) {\n const styleElement = iframeDoc.createElement('style');\n styleElement.id = styleId;\n styleElement.textContent = component.style;\n if (window.__webpack_nonce__) {\n styleElement.nonce = window.__webpack_nonce__;\n }\n iframeHead.appendChild(styleElement);\n }\n }\n });\n }\n\n // Mount React component inside iframe\n const rootElement = iframeDoc.getElementById('tiptap-root');\n if (rootElement && !iframeRootRef.current) {\n // Use saved content if available (from DOM move), otherwise use defaultValue\n const initialContent = savedContentRef.current ?? defaultValue;\n\n iframeRootRef.current = createRoot(rootElement);\n iframeRootRef.current.render(\n <IframeTiptapEditor\n placeholder={placeholder}\n defaultValue={initialContent}\n disabled={disabled}\n readOnly={readOnly}\n onChange={editor => {\n // Save content on every change so it can be restored if iframe reloads\n savedContentRef.current = editor.getHTML();\n onChangeRef.current?.(editor);\n }}\n onKeyDown={onKeyDown}\n onFocus={() => {\n setFocused(true);\n onFocus?.();\n }}\n onBlur={() => {\n setFocused(false);\n onBlur?.();\n }}\n onInit={(editor: TiptapEditor) => {\n // Save initial content so it can be restored if iframe reloads before any changes\n savedContentRef.current = editor.getHTML();\n // Set aria-required on the contenteditable element\n if (requiredRef.current) {\n editor.view.dom.setAttribute('aria-required', 'true');\n }\n setTiptapEditor(editor);\n onInit?.(editor);\n }}\n editorRef={iframeEditorRef}\n spellcheck={spellcheck}\n customElements={customElements}\n initOptions={initOptions}\n onImageAdded={(image, id, altText) => onImageAddedRef.current?.(image, id, altText)}\n imagesEnabled={imagesEnabled}\n linksEnabled={linksEnabled}\n imageInsertionMode={imageInsertionMode}\n pastedImagesRef={pastedImages}\n editorId={editorId}\n secure={secure}\n preserveTableStyles={preserveTableStyles}\n onFocusTableMenu={() => onFocusTableMenuRef.current?.()}\n onFocusPreviousCellMenu={() => {\n onFocusPreviousCellMenuRef.current?.();\n }}\n />\n );\n }\n\n // Handle mousedown on empty space to enable drag-to-select from anywhere\n const handleIframeMouseDown = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n // Only handle mousedown on empty space (not on actual content like paragraphs, text nodes)\n if (\n target === iframeDoc.documentElement ||\n target === iframeDoc.body ||\n target.id === 'tiptap-root'\n ) {\n const editor = iframeEditorRef.current?.getEditor();\n if (editor) {\n // Find nearest document position and place cursor there\n // This allows ProseMirror to handle the subsequent drag selection\n const pos = editor.view.posAtCoords({ left: e.clientX, top: e.clientY });\n if (pos) {\n editor.commands.setTextSelection(pos.pos);\n editor.commands.focus();\n } else {\n editor.commands.focus('end');\n }\n }\n }\n };\n\n // Handle mouseup on empty space to place cursor/deselect on simple clicks\n const handleIframeMouseUp = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n // Only handle clicks on empty space (html, body, tiptap-root, or ProseMirror container)\n if (\n target === iframeDoc.documentElement ||\n target === iframeDoc.body ||\n target.id === 'tiptap-root' ||\n target.classList.contains('ProseMirror')\n ) {\n const editor = iframeEditorRef.current?.getEditor();\n if (editor) {\n // Check if user has a text selection (from drag) - if so, don't interfere\n const { from, to } = editor.state.selection;\n if (from === to) {\n // Selection is collapsed (no text selected), treat as click\n const pos = editor.view.posAtCoords({ left: e.clientX, top: e.clientY });\n if (pos) {\n // Place cursor at the nearest position\n editor.commands.setTextSelection(pos.pos);\n editor.commands.focus();\n } else {\n // Fallback to end of document if no position found\n editor.commands.focus('end');\n }\n }\n }\n }\n };\n\n // Handle Tab key - indent list items or exit editor to toolbar\n // Handle Alt+F10 - standard accessibility shortcut to focus toolbar\n const handleIframeKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'F10' && e.altKey && !e.ctrlKey && !e.shiftKey && !e.metaKey) {\n e.preventDefault();\n onTabOutRef.current?.();\n return;\n }\n if (e.key === 'Tab') {\n const editor = iframeEditorRef.current?.getEditor();\n if (editor) {\n const isInList = editor.isActive('listItem');\n if (isInList) {\n e.preventDefault();\n if (e.shiftKey) {\n editor.chain().focus().liftListItem('listItem').run();\n } else {\n editor.chain().focus().sinkListItem('listItem').run();\n }\n return;\n }\n }\n if (!e.shiftKey) {\n e.preventDefault();\n onTabOutRef.current?.();\n }\n }\n };\n\n iframeDoc.addEventListener('mousedown', handleIframeMouseDown);\n iframeDoc.addEventListener('mouseup', handleIframeMouseUp);\n iframeDoc.addEventListener('keydown', handleIframeKeyDown);\n\n // Auto-resize iframe based on content height (only if autoResize is enabled)\n if (autoResize) {\n const updateIframeHeight = () => {\n if (iframe.contentDocument?.body) {\n const contentHeight = iframe.contentDocument.body.scrollHeight;\n // Set min height from theme, grow with content\n // Convert rem to pixels using root font size\n const remValue = parseFloat(textAreaMinHeight) || 3;\n const rootFontSize =\n parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;\n const minHeight = remValue * rootFontSize;\n iframe.style.height = `${Math.max(contentHeight + 16, minHeight)}px`;\n }\n };\n\n // Observe changes to iframe content\n if (iframeDoc.body && !resizeObserverRef.current) {\n resizeObserverRef.current = new ResizeObserver(updateIframeHeight);\n resizeObserverRef.current.observe(iframeDoc.body);\n }\n\n // Initial height update\n updateIframeHeight();\n }\n\n // Mark as initialized\n isInitializedRef.current = true;\n\n return () => {\n isInitializedRef.current = false;\n iframeDoc.removeEventListener('mousedown', handleIframeMouseDown);\n iframeDoc.removeEventListener('mouseup', handleIframeMouseUp);\n iframeDoc.removeEventListener('keydown', handleIframeKeyDown);\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n resizeObserverRef.current = null;\n }\n // Defer unmounting to avoid race condition during React's render phase\n if (iframeRootRef.current) {\n const rootToUnmount = iframeRootRef.current;\n iframeRootRef.current = null;\n // Use setTimeout to defer unmount until after React finishes rendering\n setTimeout(() => {\n rootToUnmount.unmount();\n }, 0);\n }\n };\n }, [reinitializeCounter]);\n\n // Keep aria-required in sync when `required` prop changes\n useEffect(() => {\n const editorEl = iframeEditorRef.current?.getEditor()?.view.dom;\n if (!editorEl) return;\n\n if (required) {\n editorEl.setAttribute('aria-required', 'true');\n } else {\n editorEl.removeAttribute('aria-required');\n }\n }, [required]);\n\n return { iframeEditorRef };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"useIframeSetup.js","sourceRoot":"","sources":["../../../../src/components/Editor/hooks/useIframeSetup.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useLayoutEffect, useRef, useState, useEffect } from 'react';\nimport type { RefObject, MutableRefObject } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport type { Root } from 'react-dom/client';\nimport { compile, serialize, stringify } from 'stylis';\nimport type { Editor as TiptapEditor } from '@tiptap/core';\n\nimport { useTheme } from '@pega/cosmos-react-core';\nimport { getHtmlStyles } from '@pega/cosmos-react-core/lib/components/HTML/HTML';\nimport {\n createGlobalBodyStyles,\n createGlobalRootStyles,\n globalSpacingStyles\n} from '@pega/cosmos-react-core/lib/styles/GlobalStyle';\n\nimport type { CustomComponent, EditorProps } from '../Editor.types';\nimport { IframeTiptapEditor } from '../IframeTiptapEditor';\nimport { getIframeContentStyles } from '../iframeContentStyles';\n\ninterface UseIframeSetupParams {\n iframeRef: RefObject<HTMLIFrameElement>;\n theme: ReturnType<typeof useTheme>;\n styleSheetTarget?: HTMLElement | ShadowRoot;\n customElements: CustomComponent[];\n placeholder?: string;\n defaultValue?: string;\n disabled?: boolean;\n readOnly?: boolean;\n onChange?: (editor: TiptapEditor) => void;\n onKeyDown?: (event?: KeyboardEvent) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n onInit?: (editor: TiptapEditor) => void;\n spellcheck?: boolean;\n initOptions?: EditorProps['initOptions'];\n onImageAdded?: (image: File, id: string, altText?: string) => void;\n imagesEnabled: boolean;\n linksEnabled: boolean;\n colorsEnabled: boolean;\n imageInsertionMode: 'file' | 'url' | 'all';\n pastedImages: MutableRefObject<File[]>;\n editorId: string;\n required?: boolean;\n setTiptapEditor: (editor: TiptapEditor) => void;\n setFocused: (focused: boolean) => void;\n autoResize?: boolean;\n onTabOut?: () => void;\n onFocusTableMenu?: () => void;\n onFocusPreviousCellMenu?: () => void;\n secure?: boolean;\n preserveTableStyles?: boolean;\n}\n\nexport interface IframeEditorHandle {\n focus: () => void;\n getPlainText: () => string;\n getRichText: () => string;\n getHtml: () => string;\n clear: () => void;\n insertText: (text: string) => void;\n setCursorLocationToStart: () => void;\n insertHtml: (html: string, overwrite?: boolean) => void;\n getEditor: () => TiptapEditor | null;\n setEditable: (editable: boolean) => void;\n}\n\nexport type IframeEditorRef = MutableRefObject<IframeEditorHandle | null>;\n\ninterface UseIframeSetupReturn {\n iframeEditorRef: IframeEditorRef;\n}\n\nexport default function useIframeSetup({\n iframeRef,\n theme,\n styleSheetTarget,\n customElements,\n placeholder,\n defaultValue,\n disabled,\n readOnly,\n onChange,\n onKeyDown,\n onFocus,\n onBlur,\n onInit,\n spellcheck,\n initOptions,\n onImageAdded,\n imagesEnabled,\n linksEnabled,\n colorsEnabled,\n imageInsertionMode,\n pastedImages,\n editorId,\n required,\n setTiptapEditor,\n setFocused,\n autoResize = true,\n onTabOut,\n onFocusTableMenu,\n onFocusPreviousCellMenu,\n secure = false,\n preserveTableStyles = false\n}: UseIframeSetupParams): UseIframeSetupReturn {\n const {\n components: {\n 'text-area': { 'min-height': textAreaMinHeight }\n }\n } = theme;\n const iframeRootRef = useRef<Root | null>(null);\n const iframeEditorRef = useRef<IframeEditorHandle | null>(null);\n const resizeObserverRef = useRef<ResizeObserver | null>(null);\n const isInitializedRef = useRef(false);\n const savedContentRef = useRef<string | null>(null);\n const [reinitializeCounter, setReinitializeCounter] = useState(0);\n\n // Refs to keep callbacks fresh without re-initializing the iframe\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const onImageAddedRef = useRef(onImageAdded);\n onImageAddedRef.current = onImageAdded;\n\n const onTabOutRef = useRef(onTabOut);\n onTabOutRef.current = onTabOut;\n\n const requiredRef = useRef(required);\n requiredRef.current = required;\n\n const onFocusTableMenuRef = useRef(onFocusTableMenu);\n onFocusTableMenuRef.current = onFocusTableMenu;\n\n const onFocusPreviousCellMenuRef = useRef(onFocusPreviousCellMenu);\n onFocusPreviousCellMenuRef.current = onFocusPreviousCellMenu;\n\n // Listen for iframe load events (fires when iframe reloads due to DOM move)\n useEffect(() => {\n if (!iframeRef.current) return;\n\n const iframe = iframeRef.current;\n\n const handleLoad = () => {\n // Check if content was lost\n const proseMirror = iframe.contentDocument?.querySelector('.ProseMirror');\n if (!proseMirror && isInitializedRef.current) {\n // savedContentRef is updated on every change, so it has the latest content\n isInitializedRef.current = false;\n setReinitializeCounter(c => c + 1);\n }\n };\n\n iframe.addEventListener('load', handleLoad);\n\n return () => {\n iframe.removeEventListener('load', handleLoad);\n };\n }, [iframeRef]);\n\n // Mount Tiptap inside iframe\n useLayoutEffect(() => {\n if (!iframeRef.current) return;\n\n // Check if already initialized and content is still valid\n if (isInitializedRef.current) {\n const proseMirror = iframeRef.current.contentDocument?.querySelector('.ProseMirror');\n if (proseMirror) {\n // Already initialized and content is valid, skip\n return;\n }\n // Content was lost (iframe reloaded), need to reinitialize\n if (iframeRootRef.current) {\n try {\n iframeRootRef.current.unmount();\n } catch (e) {\n // Ignore unmount errors\n }\n iframeRootRef.current = null;\n }\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n resizeObserverRef.current = null;\n }\n }\n\n const iframe = iframeRef.current;\n const iframeDoc = iframe.contentDocument || iframe.contentWindow?.document;\n\n if (!iframeDoc) return;\n\n // Generate styles\n const htmlStyles = serialize(compile(getHtmlStyles(theme)), stringify);\n\n // When preserving table styles, remove the default Tiptap table borders\n // so only the original inline styles show through\n const preserveTableStylesCSS = preserveTableStyles\n ? `\n .ProseMirror table,\n .ProseMirror table tr,\n .ProseMirror table td,\n .ProseMirror table th,\n .ProseMirror table tr td,\n .ProseMirror table tr th {\n border: 0 none transparent;\n }\n `\n : '';\n\n const contentStyle = `\n ${createGlobalRootStyles(theme)}\n ${globalSpacingStyles}\n ${createGlobalBodyStyles(theme)}\n ${htmlStyles}\n ${getIframeContentStyles(theme)}\n ${initOptions?.contentStyle ?? ''}\n ${preserveTableStylesCSS}\n `;\n\n // Create basic HTML structure in iframe\n iframeDoc.open();\n iframeDoc.write(`\n <!DOCTYPE html>\n <html>\n <head>\n <style${window.__webpack_nonce__ ? ` nonce=\"${window.__webpack_nonce__}\"` : ''}>\n ${contentStyle}\n </style>\n </head>\n <body>\n <div id=\"tiptap-root\"></div>\n </body>\n </html>\n `);\n iframeDoc.close();\n\n // Copy global styles into the iframe\n const globalStyles =\n styleSheetTarget?.querySelectorAll('[data-cosmos-global-style]') ?? ([] as HTMLElement[]);\n const extraStyles =\n document.querySelectorAll('[data-cosmos-global-style]') ?? ([] as HTMLElement[]);\n const iframeHead = iframeDoc.querySelector('head');\n [...globalStyles, ...extraStyles].forEach(sheet => {\n iframeHead?.appendChild(sheet.cloneNode(true));\n });\n\n // Register custom components in iframe\n if (customElements && customElements.length > 0 && iframe.contentWindow) {\n const iframeWindow = iframe.contentWindow as unknown as typeof globalThis;\n customElements.forEach((component: CustomComponent) => {\n if (\n component.name &&\n component.createCustomElement &&\n !iframeWindow.customElements.get(component.name)\n ) {\n const CustomElement = component.createCustomElement(iframeWindow);\n iframeWindow.customElements.define(component.name, CustomElement);\n }\n\n // Inject custom component styles into iframe if provided\n if (component.style && iframeHead && component.name) {\n const styleId = `custom-component-${component.name}`;\n if (!iframeDoc.getElementById(styleId)) {\n const styleElement = iframeDoc.createElement('style');\n styleElement.id = styleId;\n styleElement.textContent = component.style;\n if (window.__webpack_nonce__) {\n styleElement.nonce = window.__webpack_nonce__;\n }\n iframeHead.appendChild(styleElement);\n }\n }\n });\n }\n\n // Mount React component inside iframe\n const rootElement = iframeDoc.getElementById('tiptap-root');\n if (rootElement && !iframeRootRef.current) {\n // Use saved content if available (from DOM move), otherwise use defaultValue\n const initialContent = savedContentRef.current ?? defaultValue;\n\n iframeRootRef.current = createRoot(rootElement);\n iframeRootRef.current.render(\n <IframeTiptapEditor\n placeholder={placeholder}\n defaultValue={initialContent}\n disabled={disabled}\n readOnly={readOnly}\n onChange={editor => {\n // Save content on every change so it can be restored if iframe reloads\n savedContentRef.current = editor.getHTML();\n onChangeRef.current?.(editor);\n }}\n onKeyDown={onKeyDown}\n onFocus={() => {\n setFocused(true);\n onFocus?.();\n }}\n onBlur={() => {\n setFocused(false);\n onBlur?.();\n }}\n onInit={(editor: TiptapEditor) => {\n // Save initial content so it can be restored if iframe reloads before any changes\n savedContentRef.current = editor.getHTML();\n // Set aria-required on the contenteditable element\n if (requiredRef.current) {\n editor.view.dom.setAttribute('aria-required', 'true');\n }\n setTiptapEditor(editor);\n onInit?.(editor);\n }}\n editorRef={iframeEditorRef}\n spellcheck={spellcheck}\n customElements={customElements}\n initOptions={initOptions}\n onImageAdded={(image, id, altText) => onImageAddedRef.current?.(image, id, altText)}\n imagesEnabled={imagesEnabled}\n linksEnabled={linksEnabled}\n colorsEnabled={colorsEnabled}\n imageInsertionMode={imageInsertionMode}\n pastedImagesRef={pastedImages}\n editorId={editorId}\n secure={secure}\n preserveTableStyles={preserveTableStyles}\n onFocusTableMenu={() => onFocusTableMenuRef.current?.()}\n onFocusPreviousCellMenu={() => {\n onFocusPreviousCellMenuRef.current?.();\n }}\n />\n );\n }\n\n // Handle mousedown on empty space to enable drag-to-select from anywhere\n const handleIframeMouseDown = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n // Only handle mousedown on empty space (not on actual content like paragraphs, text nodes)\n if (\n target === iframeDoc.documentElement ||\n target === iframeDoc.body ||\n target.id === 'tiptap-root'\n ) {\n const editor = iframeEditorRef.current?.getEditor();\n if (editor) {\n // Find nearest document position and place cursor there\n // This allows ProseMirror to handle the subsequent drag selection\n const pos = editor.view.posAtCoords({ left: e.clientX, top: e.clientY });\n if (pos) {\n editor.commands.setTextSelection(pos.pos);\n editor.commands.focus();\n } else {\n editor.commands.focus('end');\n }\n }\n }\n };\n\n // Handle mouseup on empty space to place cursor/deselect on simple clicks\n const handleIframeMouseUp = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n // Only handle clicks on empty space (html, body, tiptap-root, or ProseMirror container)\n if (\n target === iframeDoc.documentElement ||\n target === iframeDoc.body ||\n target.id === 'tiptap-root' ||\n target.classList.contains('ProseMirror')\n ) {\n const editor = iframeEditorRef.current?.getEditor();\n if (editor) {\n // Check if user has a text selection (from drag) - if so, don't interfere\n const { from, to } = editor.state.selection;\n if (from === to) {\n // Selection is collapsed (no text selected), treat as click\n const pos = editor.view.posAtCoords({ left: e.clientX, top: e.clientY });\n if (pos) {\n // Place cursor at the nearest position\n editor.commands.setTextSelection(pos.pos);\n editor.commands.focus();\n } else {\n // Fallback to end of document if no position found\n editor.commands.focus('end');\n }\n }\n }\n }\n };\n\n // Handle Tab key - indent list items or exit editor to toolbar\n // Handle Alt+F10 - standard accessibility shortcut to focus toolbar\n const handleIframeKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'F10' && e.altKey && !e.ctrlKey && !e.shiftKey && !e.metaKey) {\n e.preventDefault();\n onTabOutRef.current?.();\n return;\n }\n if (e.key === 'Tab') {\n const editor = iframeEditorRef.current?.getEditor();\n if (editor) {\n const isInList = editor.isActive('listItem');\n if (isInList) {\n e.preventDefault();\n if (e.shiftKey) {\n editor.chain().focus().liftListItem('listItem').run();\n } else {\n editor.chain().focus().sinkListItem('listItem').run();\n }\n return;\n }\n }\n if (!e.shiftKey) {\n e.preventDefault();\n onTabOutRef.current?.();\n }\n }\n };\n\n iframeDoc.addEventListener('mousedown', handleIframeMouseDown);\n iframeDoc.addEventListener('mouseup', handleIframeMouseUp);\n iframeDoc.addEventListener('keydown', handleIframeKeyDown);\n\n // Auto-resize iframe based on content height (only if autoResize is enabled)\n if (autoResize) {\n const updateIframeHeight = () => {\n if (iframe.contentDocument?.body) {\n const contentHeight = iframe.contentDocument.body.scrollHeight;\n // Set min height from theme, grow with content\n // Convert rem to pixels using root font size\n const remValue = parseFloat(textAreaMinHeight) || 3;\n const rootFontSize =\n parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;\n const minHeight = remValue * rootFontSize;\n iframe.style.height = `${Math.max(contentHeight + 16, minHeight)}px`;\n }\n };\n\n // Observe changes to iframe content\n if (iframeDoc.body && !resizeObserverRef.current) {\n resizeObserverRef.current = new ResizeObserver(updateIframeHeight);\n resizeObserverRef.current.observe(iframeDoc.body);\n }\n\n // Initial height update\n updateIframeHeight();\n }\n\n // Mark as initialized\n isInitializedRef.current = true;\n\n return () => {\n isInitializedRef.current = false;\n iframeDoc.removeEventListener('mousedown', handleIframeMouseDown);\n iframeDoc.removeEventListener('mouseup', handleIframeMouseUp);\n iframeDoc.removeEventListener('keydown', handleIframeKeyDown);\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n resizeObserverRef.current = null;\n }\n // Defer unmounting to avoid race condition during React's render phase\n if (iframeRootRef.current) {\n const rootToUnmount = iframeRootRef.current;\n iframeRootRef.current = null;\n // Use setTimeout to defer unmount until after React finishes rendering\n setTimeout(() => {\n rootToUnmount.unmount();\n }, 0);\n }\n };\n }, [reinitializeCounter]);\n\n // Keep aria-required in sync when `required` prop changes\n useEffect(() => {\n const editorEl = iframeEditorRef.current?.getEditor()?.view.dom;\n if (!editorEl) return;\n\n if (required) {\n editorEl.setAttribute('aria-required', 'true');\n } else {\n editorEl.removeAttribute('aria-required');\n }\n }, [required]);\n\n return { iframeEditorRef };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichTextViewer.d.ts","sourceRoot":"","sources":["../../../src/components/RichTextEditor/RichTextViewer.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAG/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAoBlE,eAAO,MAAM,SAAS,QACoK,CAAC;;;;
|
|
1
|
+
{"version":3,"file":"RichTextViewer.d.ts","sourceRoot":"","sources":["../../../src/components/RichTextEditor/RichTextViewer.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAG/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAoBlE,eAAO,MAAM,SAAS,QACoK,CAAC;;;;AA8F3L,wBAAqE"}
|
|
@@ -39,14 +39,14 @@ const findFirstHref = (nodes) => {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
};
|
|
42
|
-
const RichTextViewer = forwardRef(function RichTextViewer({ testId, content, type, interactionRenderers, markdownMap, onRetry, onMarkdownLinkRender, ...restProps }, ref) {
|
|
42
|
+
const RichTextViewer = forwardRef(function RichTextViewer({ testId, content, type, interactionRenderers, markdownMap, onRetry, onMarkdownLinkRender, renderHTML = false, ...restProps }, ref) {
|
|
43
43
|
const testIds = useTestIds(testId, getRichTextViewerTestIds);
|
|
44
44
|
const t = useI18n();
|
|
45
45
|
const [nodes, setNodes] = useState([]);
|
|
46
46
|
const [error, setError] = useState(false);
|
|
47
47
|
useEffect(() => {
|
|
48
48
|
if (type === 'markdown') {
|
|
49
|
-
const newNodes = convertMarkdown(content, [...(interactionRenderers ?? []), { regexPattern: URL_REGEX, type: 'builtin-url' }], markdownMap);
|
|
49
|
+
const newNodes = convertMarkdown(content, [...(interactionRenderers ?? []), { regexPattern: URL_REGEX, type: 'builtin-url' }], markdownMap, renderHTML);
|
|
50
50
|
if (onMarkdownLinkRender) {
|
|
51
51
|
const href = findFirstHref(newNodes);
|
|
52
52
|
if (href) {
|
|
@@ -68,7 +68,7 @@ const RichTextViewer = forwardRef(function RichTextViewer({ testId, content, typ
|
|
|
68
68
|
setError(true);
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
|
-
}, [content, type, interactionRenderers]);
|
|
71
|
+
}, [content, type, interactionRenderers, renderHTML]);
|
|
72
72
|
if (type === 'html' && (!interactionRenderers || interactionRenderers.length === 0)) {
|
|
73
73
|
return _jsx(StyledHTMLViewer, { ref: ref, content: content });
|
|
74
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichTextViewer.js","sourceRoot":"","sources":["../../../src/components/RichTextEditor/RichTextViewer.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"RichTextViewer.js","sourceRoot":"","sources":["../../../src/components/RichTextEditor/RichTextViewer.tsx"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, useState, useEffect } from 'react';\nimport type { PropsWithoutRef } from 'react';\nimport type { PegaCustom } from 'slate';\nimport styled, { css } from 'styled-components';\n\nimport {\n HTML,\n ErrorState,\n useI18n,\n useTestIds,\n withTestIds,\n hasProp,\n defaultThemeProp\n} from '@pega/cosmos-react-core';\nimport type { ForwardRefForwardPropsComponent } from '@pega/cosmos-react-core';\n\nimport convertMarkdown from './utils/markdownConverter';\nimport type { RichTextViewerProps } from './RichTextViewer.types';\nimport { StyledEditorContainer, StyledRichTextViewer } from './RichTextEditor.styles';\nimport { convertHtml } from './utils/htmlConverter';\nimport { RichTextTreeRenderer } from './RichTextTreeRenderer';\nimport type { RichTextTreeRendererProps } from './RichTextTreeRenderer';\nimport { getRichTextViewerTestIds } from './RichTextViewer.test-ids';\n\nconst StyledHTMLViewer = styled(HTML)(({\n theme: {\n base: { spacing }\n }\n}) => {\n return css`\n padding: calc(0.125 * ${spacing});\n `;\n});\n\nStyledHTMLViewer.defaultProps = defaultThemeProp;\n\n// Regex to match valid URLs\nexport const URL_REGEX =\n /(?<leadingChar>^|\\s)(?<url>(?<protocol>https?:\\/\\/)?(?<host>[a-z0-9]+(?:[-.][a-z0-9]+)*\\.(?<tld>[a-z]{2,5})(?<port>:[0-9]{1,5})?)(?<pathQueryHash>[/a-zA-Z0-9?=&+%@.|#_~:[\\]'()-]*)?)/g;\n\nconst isValidHTTPURL = (href?: string): boolean => {\n if (!href) return false;\n\n try {\n const url = new URL(href, window.location.href);\n return url.protocol.startsWith('http');\n } catch {\n return false;\n }\n};\n\nconst findFirstHref = (nodes: (PegaCustom.Element | PegaCustom.Text)[]): string | undefined => {\n for (const node of nodes) {\n if (hasProp(node, 'children')) {\n const href = findFirstHref(node.children);\n if (isValidHTTPURL(href)) {\n return href;\n }\n } else if (isValidHTTPURL(node.href)) {\n return node.href;\n }\n }\n};\n\nconst RichTextViewer: ForwardRefForwardPropsComponent<RichTextViewerProps> = forwardRef(\n function RichTextViewer(\n {\n testId,\n content,\n type,\n interactionRenderers,\n markdownMap,\n onRetry,\n onMarkdownLinkRender,\n renderHTML = false,\n ...restProps\n }: PropsWithoutRef<RichTextViewerProps>,\n ref: RichTextViewerProps['ref']\n ) {\n const testIds = useTestIds(testId, getRichTextViewerTestIds);\n const t = useI18n();\n const [nodes, setNodes] = useState<RichTextTreeRendererProps['nodes']>([]);\n const [error, setError] = useState(false);\n\n useEffect(() => {\n if (type === 'markdown') {\n const newNodes = convertMarkdown(\n content,\n [...(interactionRenderers ?? []), { regexPattern: URL_REGEX, type: 'builtin-url' }],\n markdownMap,\n renderHTML\n );\n\n if (onMarkdownLinkRender) {\n const href = findFirstHref(newNodes);\n if (href) {\n onMarkdownLinkRender(href);\n }\n }\n\n setNodes(newNodes);\n }\n if (type === 'richtext') {\n setNodes(JSON.parse(content));\n }\n if (type === 'html' && interactionRenderers && interactionRenderers.length > 0) {\n try {\n setNodes(convertHtml(content, interactionRenderers));\n setError(false);\n } catch {\n setNodes([]);\n setError(true);\n }\n }\n }, [content, type, interactionRenderers, renderHTML]);\n\n if (type === 'html' && (!interactionRenderers || interactionRenderers.length === 0)) {\n return <StyledHTMLViewer ref={ref} content={content} />;\n }\n\n return error ? (\n <ErrorState message={t('rte_invalid_html')} onRetry={onRetry} />\n ) : (\n <StyledRichTextViewer data-testid={testIds.root} ref={ref} {...restProps}>\n <StyledEditorContainer>\n <RichTextTreeRenderer nodes={nodes} />\n </StyledEditorContainer>\n </StyledRichTextViewer>\n );\n }\n);\n\nexport default withTestIds(RichTextViewer, getRichTextViewerTestIds);\n"]}
|
|
@@ -32,8 +32,10 @@ export type RichTextViewerProps = TestIdProp & {
|
|
|
32
32
|
} & ({
|
|
33
33
|
type: 'markdown';
|
|
34
34
|
onMarkdownLinkRender?: (href: string) => void;
|
|
35
|
+
renderHTML?: boolean;
|
|
35
36
|
} | {
|
|
36
37
|
type: 'html' | 'richtext';
|
|
37
38
|
onMarkdownLinkRender?: never;
|
|
39
|
+
renderHTML?: never;
|
|
38
40
|
});
|
|
39
41
|
//# sourceMappingURL=RichTextViewer.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichTextViewer.types.d.ts","sourceRoot":"","sources":["../../../src/components/RichTextEditor/RichTextViewer.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1F,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC/B,mBAAmB,CAAC,EAAE,CACpB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,KAElB;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAC7F,SAAS,CAAC;CACf;AAED,MAAM,MAAM,QAAQ,GAAG;KACpB,CAAC,IAAI,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC;CACzF,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;KACjB,CAAC,IAAI,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACtD,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KACf,aAAa,CAAC;QAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC,GAAG,SAAS;CACvD,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC9C,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,OAAO,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACrC,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC3B,GAAG,CACE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"RichTextViewer.types.d.ts","sourceRoot":"","sources":["../../../src/components/RichTextEditor/RichTextViewer.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1F,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC/B,mBAAmB,CAAC,EAAE,CACpB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,KAElB;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAC7F,SAAS,CAAC;CACf;AAED,MAAM,MAAM,QAAQ,GAAG;KACpB,CAAC,IAAI,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC;CACzF,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;KACjB,CAAC,IAAI,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACtD,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KACf,aAAa,CAAC;QAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC,GAAG,SAAS;CACvD,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC9C,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,OAAO,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACrC,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC3B,GAAG,CACE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GACzF;IAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAAC,oBAAoB,CAAC,EAAE,KAAK,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,CAClF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichTextViewer.types.js","sourceRoot":"","sources":["../../../src/components/RichTextEditor/RichTextViewer.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { MarkedToken, Tokens } from 'marked';\nimport type { ComponentType, Ref } from 'react';\n\nimport type { ErrorStateProps, ExcludeStrict, TestIdProp } from '@pega/cosmos-react-core';\n\nexport interface InteractionRenderers {\n type: string;\n regexPattern: RegExp;\n xmlElement?: string;\n component?: ComponentType<any>;\n getSearchAttributes?: (\n xmlElement: string,\n searchResult: string\n ) =>\n | { markdown: string; component: ComponentType<any>; props: Record<string, any>; text: string }\n | undefined;\n}\n\nexport type TokenMap = {\n [K in ExcludeStrict<MarkedToken, Tokens.Def>['type']]: Extract<MarkedToken, { type: K }>;\n};\n\nexport type MDMap = {\n [K in ExcludeStrict<MarkedToken, Tokens.Def>['type']]?: (\n token: TokenMap[K]\n ) => ComponentType<{ token: TokenMap[K] }> | undefined;\n};\n\nexport type RichTextViewerProps = TestIdProp & {\n content: string;\n interactionRenderers?: InteractionRenderers[];\n markdownMap?: MDMap;\n onRetry?: ErrorStateProps['onRetry'];\n ref?: Ref<HTMLDivElement>;\n} & (\n | { type: 'markdown'; onMarkdownLinkRender?: (href: string) => void }\n | { type: 'html' | 'richtext'; onMarkdownLinkRender?: never }\n );\n"]}
|
|
1
|
+
{"version":3,"file":"RichTextViewer.types.js","sourceRoot":"","sources":["../../../src/components/RichTextEditor/RichTextViewer.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { MarkedToken, Tokens } from 'marked';\nimport type { ComponentType, Ref } from 'react';\n\nimport type { ErrorStateProps, ExcludeStrict, TestIdProp } from '@pega/cosmos-react-core';\n\nexport interface InteractionRenderers {\n type: string;\n regexPattern: RegExp;\n xmlElement?: string;\n component?: ComponentType<any>;\n getSearchAttributes?: (\n xmlElement: string,\n searchResult: string\n ) =>\n | { markdown: string; component: ComponentType<any>; props: Record<string, any>; text: string }\n | undefined;\n}\n\nexport type TokenMap = {\n [K in ExcludeStrict<MarkedToken, Tokens.Def>['type']]: Extract<MarkedToken, { type: K }>;\n};\n\nexport type MDMap = {\n [K in ExcludeStrict<MarkedToken, Tokens.Def>['type']]?: (\n token: TokenMap[K]\n ) => ComponentType<{ token: TokenMap[K] }> | undefined;\n};\n\nexport type RichTextViewerProps = TestIdProp & {\n content: string;\n interactionRenderers?: InteractionRenderers[];\n markdownMap?: MDMap;\n onRetry?: ErrorStateProps['onRetry'];\n ref?: Ref<HTMLDivElement>;\n} & (\n | { type: 'markdown'; onMarkdownLinkRender?: (href: string) => void; renderHTML?: boolean }\n | { type: 'html' | 'richtext'; onMarkdownLinkRender?: never; renderHTML?: never }\n );\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Element, Text } from 'slate';
|
|
2
2
|
import type { MarkedToken } from 'marked';
|
|
3
3
|
import type { InteractionRenderers, RichTextViewerProps } from '../RichTextViewer.types';
|
|
4
|
-
export declare const getNode: (token: MarkedToken, interactionRenderers?: InteractionRenderers[], markdownMap?: RichTextViewerProps["markdownMap"]) => Element | Text;
|
|
4
|
+
export declare const getNode: (token: MarkedToken, interactionRenderers?: InteractionRenderers[], markdownMap?: RichTextViewerProps["markdownMap"], htmlEnabled?: boolean) => Element | Text;
|
|
5
5
|
export declare const convertMarkdownForEditor: (md?: string, searchRenderers?: InteractionRenderers[]) => (Element | Text)[];
|
|
6
|
-
declare const convertMarkdown: (md: string, interactionRenderers?: InteractionRenderers[], markdownMap?: RichTextViewerProps["markdownMap"]) => (Element | Text)[];
|
|
6
|
+
declare const convertMarkdown: (md: string, interactionRenderers?: InteractionRenderers[], markdownMap?: RichTextViewerProps["markdownMap"], htmlEnabled?: boolean) => (Element | Text)[];
|
|
7
7
|
export default convertMarkdown;
|
|
8
8
|
//# sourceMappingURL=markdownConverter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdownConverter.d.ts","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/markdownConverter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,KAAK,EAAE,WAAW,EAAU,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"markdownConverter.d.ts","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/markdownConverter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,KAAK,EAAE,WAAW,EAAU,MAAM,QAAQ,CAAC;AAOlD,OAAO,KAAK,EAAY,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAwhBnG,eAAO,MAAM,OAAO,GAClB,OAAO,WAAW,EAClB,uBAAuB,oBAAoB,EAAE,EAC7C,cAAc,mBAAmB,CAAC,aAAa,CAAC,EAChD,qBAAmB,KAClB,OAAO,GAAG,IAmMZ,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,WAAO,EACP,kBAAkB,oBAAoB,EAAE,KACvC,CAAC,OAAO,GAAG,IAAI,CAAC,EAOlB,CAAC;AAIF,QAAA,MAAM,eAAe,GACnB,IAAI,MAAM,EACV,uBAAuB,oBAAoB,EAAE,EAC7C,cAAc,mBAAmB,CAAC,aAAa,CAAC,EAChD,qBAAmB,KAClB,CAAC,OAAO,GAAG,IAAI,CAAC,EAKlB,CAAC;AAEF,eAAe,eAAe,CAAC"}
|