@pega/cosmos-react-rte 7.0.0-build.9.2 → 7.0.0-rc.2

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.
Files changed (59) hide show
  1. package/lib/components/DynamicContentEditor/DynamicContentEditor.d.ts +1 -1
  2. package/lib/components/DynamicContentEditor/DynamicContentEditor.test-ids.d.ts +1 -1
  3. package/lib/components/DynamicContentEditor/DynamicContentEditor.test-ids.d.ts.map +1 -1
  4. package/lib/components/Editor/Editor.d.ts +1 -1
  5. package/lib/components/Editor/Editor.d.ts.map +1 -1
  6. package/lib/components/Editor/Editor.js +48 -17
  7. package/lib/components/Editor/Editor.js.map +1 -1
  8. package/lib/components/Editor/Editor.styles.d.ts +4 -0
  9. package/lib/components/Editor/Editor.styles.d.ts.map +1 -1
  10. package/lib/components/Editor/Editor.styles.js +2 -1
  11. package/lib/components/Editor/Editor.styles.js.map +1 -1
  12. package/lib/components/Editor/Editor.test-ids.d.ts +1 -1
  13. package/lib/components/Editor/Editor.test-ids.d.ts.map +1 -1
  14. package/lib/components/Editor/Editor.types.d.ts +7 -0
  15. package/lib/components/Editor/Editor.types.d.ts.map +1 -1
  16. package/lib/components/Editor/Editor.types.js.map +1 -1
  17. package/lib/components/Editor/ImageEditor.d.ts.map +1 -1
  18. package/lib/components/Editor/ImageEditor.js.map +1 -1
  19. package/lib/components/Editor/Toolbar/AnchorButton.d.ts.map +1 -1
  20. package/lib/components/Editor/Toolbar/AnchorButton.js +1 -0
  21. package/lib/components/Editor/Toolbar/AnchorButton.js.map +1 -1
  22. package/lib/components/Editor/Toolbar/Toolbar.d.ts +1 -1
  23. package/lib/components/Editor/Toolbar/Toolbar.d.ts.map +1 -1
  24. package/lib/components/Editor/Toolbar/Toolbar.js.map +1 -1
  25. package/lib/components/Editor/Toolbar/Toolbar.test-ids.d.ts +1 -1
  26. package/lib/components/Editor/Toolbar/Toolbar.test-ids.d.ts.map +1 -1
  27. package/lib/components/RichTextEditor/DecoratorComponents/BlockQuote.d.ts +8 -0
  28. package/lib/components/RichTextEditor/DecoratorComponents/BlockQuote.d.ts.map +1 -0
  29. package/lib/components/RichTextEditor/DecoratorComponents/BlockQuote.js +18 -0
  30. package/lib/components/RichTextEditor/DecoratorComponents/BlockQuote.js.map +1 -0
  31. package/lib/components/RichTextEditor/DecoratorComponents/Code.d.ts +8 -0
  32. package/lib/components/RichTextEditor/DecoratorComponents/Code.d.ts.map +1 -0
  33. package/lib/components/RichTextEditor/DecoratorComponents/Code.js +23 -0
  34. package/lib/components/RichTextEditor/DecoratorComponents/Code.js.map +1 -0
  35. package/lib/components/RichTextEditor/DecoratorComponents/CodeBlock.d.ts +7 -2
  36. package/lib/components/RichTextEditor/DecoratorComponents/CodeBlock.d.ts.map +1 -1
  37. package/lib/components/RichTextEditor/DecoratorComponents/CodeBlock.js +20 -10
  38. package/lib/components/RichTextEditor/DecoratorComponents/CodeBlock.js.map +1 -1
  39. package/lib/components/RichTextEditor/DecoratorComponents/HorizontalRule.d.ts +8 -0
  40. package/lib/components/RichTextEditor/DecoratorComponents/HorizontalRule.d.ts.map +1 -0
  41. package/lib/components/RichTextEditor/DecoratorComponents/HorizontalRule.js +16 -0
  42. package/lib/components/RichTextEditor/DecoratorComponents/HorizontalRule.js.map +1 -0
  43. package/lib/components/RichTextEditor/RichTextViewer.d.ts +1 -1
  44. package/lib/components/RichTextEditor/RichTextViewer.test-ids.d.ts +1 -1
  45. package/lib/components/RichTextEditor/RichTextViewer.test-ids.d.ts.map +1 -1
  46. package/lib/components/RichTextEditor/Toolbar/Toolbar.d.ts.map +1 -1
  47. package/lib/components/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
  48. package/lib/components/RichTextEditor/utils/markdownConverter.d.ts.map +1 -1
  49. package/lib/components/RichTextEditor/utils/markdownConverter.js +26 -0
  50. package/lib/components/RichTextEditor/utils/markdownConverter.js.map +1 -1
  51. package/lib/components/RichTextEditor/utils/renderers.d.ts +1 -0
  52. package/lib/components/RichTextEditor/utils/renderers.d.ts.map +1 -1
  53. package/lib/components/RichTextEditor/utils/renderers.js +28 -0
  54. package/lib/components/RichTextEditor/utils/renderers.js.map +1 -1
  55. package/lib/components/RichTextEditor/utils/slateConverter.d.ts +4 -0
  56. package/lib/components/RichTextEditor/utils/slateConverter.d.ts.map +1 -1
  57. package/lib/components/RichTextEditor/utils/slateConverter.js +5 -0
  58. package/lib/components/RichTextEditor/utils/slateConverter.js.map +1 -1
  59. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"Toolbar.js","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/Toolbar/Toolbar.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState, useEffect, useRef } from 'react';\nimport type { FC } from 'react';\nimport type { Text } from 'slate';\nimport { useSlate, useFocused, ReactEditor } from 'slate-react';\nimport styled, { css } from 'styled-components';\n\nimport {\n Flex,\n Icon,\n useArrows,\n useI18n,\n defaultThemeProp,\n navigatorIsAvailable\n} from '@pega/cosmos-react-core';\nimport type { TranslationPack, ExcludeStrict } from '@pega/cosmos-react-core';\nimport type { TranslationFunction } from '@pega/cosmos-react-core/lib/i18n/translate';\n\nimport EditorCommands from '../utils/EditorCommands';\nimport ListCommands from '../utils/ListCommands';\n\nimport ToolbarButton from './ToolbarButton';\nimport type { StyleType, Features } from './Toolbar.types';\nimport TableButton from './TableButton';\nimport AnchorButton from './AnchorButton';\nimport ImageButton from './ImageButton';\nimport TextSelect from './TextSelect';\nimport IndentButton from './IndentButton';\nimport { getKeyCommand } from './utils';\n\nconst StyledToolbar = styled.div<{ sticky?: boolean }>(({ sticky, theme }) => {\n return css`\n background-color: ${props => props.theme.base.palette['primary-background']};\n border-radius: calc(0.25 * ${props => props.theme.base['border-radius']});\n overflow: auto;\n padding: 0.125rem;\n ${sticky &&\n css`\n position: sticky;\n bottom: 0;\n `}\n\n &:has(:focus-visible) {\n box-shadow: ${theme.base.shadow['focus-group']};\n }\n `;\n});\n\nStyledToolbar.defaultProps = defaultThemeProp;\n\nexport interface ToolbarProps {\n features: Features[];\n sticky?: boolean;\n setFocusableBtn: (el: HTMLElement) => void;\n}\n\ntype StyleButtonType = {\n style: StyleType;\n text: string;\n icon?: string;\n label?: string;\n format: ExcludeStrict<keyof Text, 'text'>;\n tooltip: string;\n};\n\nconst isMobile = navigatorIsAvailable && navigator.userAgent.includes('Mobile');\n\n// Function that returns the text styling buttons\nfunction renderStyleButtons(\n editor: ReactEditor,\n t: TranslationFunction<TranslationPack>,\n focused: boolean,\n osx: boolean\n) {\n const inlineStyleButtons: StyleButtonType[] = [\n {\n style: 'BOLD',\n text: 'B',\n format: 'bold',\n label: t('rte_bold'),\n tooltip: isMobile\n ? `${t('rte_bold')}`\n : getKeyCommand(osx, ({ ctrl, shift }) => `${t('rte_bold')} (${ctrl}B, ${ctrl}${shift}B)`)\n },\n {\n style: 'ITALIC',\n text: 'I',\n format: 'italic',\n label: t('rte_italic'),\n tooltip: isMobile\n ? `${t('rte_italic')}`\n : getKeyCommand(osx, ({ ctrl, shift }) => `${t('rte_italic')} (${ctrl}I, ${ctrl}${shift}I)`)\n },\n {\n style: 'STRIKE-THROUGH',\n text: 'S',\n format: 'line-through',\n label: t('rte_strike_through'),\n tooltip: isMobile\n ? `${t('rte_strike_through')}`\n : getKeyCommand(osx, ({ ctrl, shift }) => `${t('rte_strike_through')} (${ctrl}${shift}X)`)\n }\n ];\n\n return inlineStyleButtons.map(({ format, style, text, label, tooltip }) => {\n return (\n <ToolbarButton\n key={style}\n onMouseDown={e => {\n e.preventDefault();\n if (!focused) {\n ReactEditor.focus(editor);\n }\n setTimeout(() => {\n EditorCommands.toggleFormat(format, editor);\n }, 0);\n }}\n styleType={style}\n active={EditorCommands.isFormatActive(format, editor)}\n tooltip={tooltip}\n label={label}\n >\n {text}\n </ToolbarButton>\n );\n });\n}\n\n// Function that returns the cut, copy and paste buttons\nfunction renderCutCopyPaste(\n editor: ReactEditor,\n t: TranslationFunction<TranslationPack>,\n osx: boolean\n) {\n const CutCopyPasteButtons = [\n {\n text: 'Cut',\n icon: 'scissors',\n label: t('rte_cut'),\n func: () => {\n document.execCommand('cut');\n },\n tooltip: getKeyCommand(osx, ({ ctrl }) => `${t('rte_cut')} (${ctrl}X)`)\n },\n {\n text: 'Copy',\n icon: 'copy',\n label: t('rte_copy'),\n func: () => {\n document.execCommand('copy');\n },\n tooltip: getKeyCommand(osx, ({ ctrl }) => `${t('rte_copy')} (${ctrl}C)`)\n },\n {\n text: 'Paste',\n icon: 'clipboard-data',\n label: t('rte_paste'),\n func: () => {\n navigator.clipboard.readText().then(text => {\n EditorCommands.replaceWithText(editor, editor.selection, text);\n });\n },\n tooltip: getKeyCommand(osx, ({ ctrl }) => `${t('rte_paste')} (${ctrl}V)`)\n }\n ];\n\n return CutCopyPasteButtons.map(btn => {\n return (\n <ToolbarButton\n onMouseDown={e => {\n e.preventDefault();\n btn.func();\n }}\n key={btn.text}\n tooltip={btn.tooltip}\n label={btn.label}\n >\n <Icon name={btn.icon} />\n </ToolbarButton>\n );\n });\n}\n\n// Takes the features array and transforms it into a map for faster lookup\nfunction createActiveFeaturesMap(features: Features[]) {\n return features.reduce((acc, feature) => {\n return { ...acc, [feature]: true };\n }, {} as { [F in Features]: boolean });\n}\n\nconst Toolbar: FC<ToolbarProps> = (props: ToolbarProps) => {\n const { features, sticky, setFocusableBtn } = props;\n const editor = useSlate();\n const focused = useFocused();\n const t = useI18n();\n const [osx, setOsx] = useState(false);\n const toolbarRef = useRef<HTMLElement>(null);\n\n useArrows(toolbarRef, { selector: 'button', dir: 'left-right' });\n\n const [activeFeatures, setActiveFeatures] = useState(createActiveFeaturesMap(features));\n\n useEffect(() => {\n const btn = toolbarRef?.current?.querySelector('button');\n if (btn) setFocusableBtn(btn);\n }, [toolbarRef.current]);\n\n useEffect(() => {\n setActiveFeatures(createActiveFeaturesMap(features));\n }, [features]);\n\n useEffect(() => {\n if (navigator.appVersion.includes('Mac')) setOsx(true);\n }, []);\n\n return (\n <Flex as={StyledToolbar} sticky={sticky} container={{ justify: 'between' }} ref={toolbarRef}>\n <Flex container={{ alignItems: 'end' }}>\n <TextSelect osx={osx} />\n {activeFeatures['inline-styling'] && renderStyleButtons(editor, t, focused, osx)}\n {activeFeatures.lists && (\n <>\n <ToolbarButton\n onMouseDown={e => {\n e.preventDefault();\n ListCommands.toggleList('unordered-list', editor);\n }}\n active={EditorCommands.isBlockActive('unordered-list', editor)}\n tooltip={\n isMobile\n ? `${t('rte_bulleted_list')}`\n : getKeyCommand(\n osx,\n ({ ctrl, shift }) => `${t('rte_bulleted_list')} (${ctrl}${shift}L)`\n )\n }\n label={t('rte_bulleted_list')}\n >\n <Icon name='list' />\n </ToolbarButton>\n <ToolbarButton\n onMouseDown={e => {\n e.preventDefault();\n ListCommands.toggleList('ordered-list', editor);\n }}\n active={EditorCommands.isBlockActive('ordered-list', editor)}\n tooltip={t('rte_numbered_list')}\n label={t('rte_numbered_list')}\n >\n <Icon name='list-number' />\n </ToolbarButton>\n </>\n )}\n {activeFeatures.indentation && (\n <>\n <IndentButton type='indent' osx={osx} />\n <IndentButton type='unindent' osx={osx} />\n </>\n )}\n {activeFeatures.tables && <TableButton />}\n </Flex>\n <Flex container={{ alignItems: 'end' }}>\n {activeFeatures.links && <AnchorButton osx={osx} />}\n {activeFeatures.images && <ImageButton />}\n </Flex>\n {activeFeatures['cut-copy-paste'] && (\n <Flex container={{ alignItems: 'end' }}>{renderCutCopyPaste(editor, t, osx)}</Flex>\n )}\n </Flex>\n );\n};\n\nexport default Toolbar;\n"]}
1
+ {"version":3,"file":"Toolbar.js","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/Toolbar/Toolbar.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState, useEffect, useRef } from 'react';\nimport type { FC } from 'react';\nimport type { Text } from 'slate';\nimport { useSlate, useFocused, ReactEditor } from 'slate-react';\nimport styled, { css } from 'styled-components';\n\nimport {\n Flex,\n Icon,\n useArrows,\n useI18n,\n defaultThemeProp,\n navigatorIsAvailable\n} from '@pega/cosmos-react-core';\nimport type { TranslationPack, ExcludeStrict } from '@pega/cosmos-react-core';\nimport type { TranslationFunction } from '@pega/cosmos-react-core/lib/i18n/translate';\n\nimport EditorCommands from '../utils/EditorCommands';\nimport ListCommands from '../utils/ListCommands';\n\nimport ToolbarButton from './ToolbarButton';\nimport type { StyleType, Features } from './Toolbar.types';\nimport TableButton from './TableButton';\nimport AnchorButton from './AnchorButton';\nimport ImageButton from './ImageButton';\nimport TextSelect from './TextSelect';\nimport IndentButton from './IndentButton';\nimport { getKeyCommand } from './utils';\n\nconst StyledToolbar = styled.div<{ sticky?: boolean }>(({ sticky, theme }) => {\n return css`\n background-color: ${props => props.theme.base.palette['primary-background']};\n border-radius: calc(0.25 * ${props => props.theme.base['border-radius']});\n overflow: auto;\n padding: 0.125rem;\n ${sticky &&\n css`\n position: sticky;\n bottom: 0;\n `}\n\n &:has(:focus-visible) {\n box-shadow: ${theme.base.shadow['focus-group']};\n }\n `;\n});\n\nStyledToolbar.defaultProps = defaultThemeProp;\n\nexport interface ToolbarProps {\n features: Features[];\n sticky?: boolean;\n setFocusableBtn: (el: HTMLElement) => void;\n}\n\ntype StyleButtonType = {\n style: StyleType;\n text: string;\n icon?: string;\n label?: string;\n format: ExcludeStrict<keyof Text, 'text'>;\n tooltip: string;\n};\n\nconst isMobile = navigatorIsAvailable && navigator.userAgent.includes('Mobile');\n\n// Function that returns the text styling buttons\nfunction renderStyleButtons(\n editor: ReactEditor,\n t: TranslationFunction<TranslationPack>,\n focused: boolean,\n osx: boolean\n) {\n const inlineStyleButtons: StyleButtonType[] = [\n {\n style: 'BOLD',\n text: 'B',\n format: 'bold',\n label: t('rte_bold'),\n tooltip: isMobile\n ? `${t('rte_bold')}`\n : getKeyCommand(osx, ({ ctrl, shift }) => `${t('rte_bold')} (${ctrl}B, ${ctrl}${shift}B)`)\n },\n {\n style: 'ITALIC',\n text: 'I',\n format: 'italic',\n label: t('rte_italic'),\n tooltip: isMobile\n ? `${t('rte_italic')}`\n : getKeyCommand(osx, ({ ctrl, shift }) => `${t('rte_italic')} (${ctrl}I, ${ctrl}${shift}I)`)\n },\n {\n style: 'STRIKE-THROUGH',\n text: 'S',\n format: 'line-through',\n label: t('rte_strike_through'),\n tooltip: isMobile\n ? `${t('rte_strike_through')}`\n : getKeyCommand(osx, ({ ctrl, shift }) => `${t('rte_strike_through')} (${ctrl}${shift}X)`)\n }\n ];\n\n return inlineStyleButtons.map(({ format, style, text, label, tooltip }) => {\n return (\n <ToolbarButton\n key={style}\n onMouseDown={e => {\n e.preventDefault();\n if (!focused) {\n ReactEditor.focus(editor);\n }\n setTimeout(() => {\n EditorCommands.toggleFormat(format, editor);\n }, 0);\n }}\n styleType={style}\n active={EditorCommands.isFormatActive(format, editor)}\n tooltip={tooltip}\n label={label}\n >\n {text}\n </ToolbarButton>\n );\n });\n}\n\n// Function that returns the cut, copy and paste buttons\nfunction renderCutCopyPaste(\n editor: ReactEditor,\n t: TranslationFunction<TranslationPack>,\n osx: boolean\n) {\n const CutCopyPasteButtons = [\n {\n text: 'Cut',\n icon: 'scissors',\n label: t('rte_cut'),\n func: () => {\n document.execCommand('cut');\n },\n tooltip: getKeyCommand(osx, ({ ctrl }) => `${t('rte_cut')} (${ctrl}X)`)\n },\n {\n text: 'Copy',\n icon: 'copy',\n label: t('rte_copy'),\n func: () => {\n document.execCommand('copy');\n },\n tooltip: getKeyCommand(osx, ({ ctrl }) => `${t('rte_copy')} (${ctrl}C)`)\n },\n {\n text: 'Paste',\n icon: 'clipboard-data',\n label: t('rte_paste'),\n func: () => {\n navigator.clipboard.readText().then(text => {\n EditorCommands.replaceWithText(editor, editor.selection, text);\n });\n },\n tooltip: getKeyCommand(osx, ({ ctrl }) => `${t('rte_paste')} (${ctrl}V)`)\n }\n ];\n\n return CutCopyPasteButtons.map(btn => {\n return (\n <ToolbarButton\n onMouseDown={e => {\n e.preventDefault();\n btn.func();\n }}\n key={btn.text}\n tooltip={btn.tooltip}\n label={btn.label}\n >\n <Icon name={btn.icon} />\n </ToolbarButton>\n );\n });\n}\n\n// Takes the features array and transforms it into a map for faster lookup\nfunction createActiveFeaturesMap(features: Features[]) {\n return features.reduce(\n (acc, feature) => {\n return { ...acc, [feature]: true };\n },\n {} as { [F in Features]: boolean }\n );\n}\n\nconst Toolbar: FC<ToolbarProps> = (props: ToolbarProps) => {\n const { features, sticky, setFocusableBtn } = props;\n const editor = useSlate();\n const focused = useFocused();\n const t = useI18n();\n const [osx, setOsx] = useState(false);\n const toolbarRef = useRef<HTMLElement>(null);\n\n useArrows(toolbarRef, { selector: 'button', dir: 'left-right' });\n\n const [activeFeatures, setActiveFeatures] = useState(createActiveFeaturesMap(features));\n\n useEffect(() => {\n const btn = toolbarRef?.current?.querySelector('button');\n if (btn) setFocusableBtn(btn);\n }, [toolbarRef.current]);\n\n useEffect(() => {\n setActiveFeatures(createActiveFeaturesMap(features));\n }, [features]);\n\n useEffect(() => {\n if (navigator.appVersion.includes('Mac')) setOsx(true);\n }, []);\n\n return (\n <Flex as={StyledToolbar} sticky={sticky} container={{ justify: 'between' }} ref={toolbarRef}>\n <Flex container={{ alignItems: 'end' }}>\n <TextSelect osx={osx} />\n {activeFeatures['inline-styling'] && renderStyleButtons(editor, t, focused, osx)}\n {activeFeatures.lists && (\n <>\n <ToolbarButton\n onMouseDown={e => {\n e.preventDefault();\n ListCommands.toggleList('unordered-list', editor);\n }}\n active={EditorCommands.isBlockActive('unordered-list', editor)}\n tooltip={\n isMobile\n ? `${t('rte_bulleted_list')}`\n : getKeyCommand(\n osx,\n ({ ctrl, shift }) => `${t('rte_bulleted_list')} (${ctrl}${shift}L)`\n )\n }\n label={t('rte_bulleted_list')}\n >\n <Icon name='list' />\n </ToolbarButton>\n <ToolbarButton\n onMouseDown={e => {\n e.preventDefault();\n ListCommands.toggleList('ordered-list', editor);\n }}\n active={EditorCommands.isBlockActive('ordered-list', editor)}\n tooltip={t('rte_numbered_list')}\n label={t('rte_numbered_list')}\n >\n <Icon name='list-number' />\n </ToolbarButton>\n </>\n )}\n {activeFeatures.indentation && (\n <>\n <IndentButton type='indent' osx={osx} />\n <IndentButton type='unindent' osx={osx} />\n </>\n )}\n {activeFeatures.tables && <TableButton />}\n </Flex>\n <Flex container={{ alignItems: 'end' }}>\n {activeFeatures.links && <AnchorButton osx={osx} />}\n {activeFeatures.images && <ImageButton />}\n </Flex>\n {activeFeatures['cut-copy-paste'] && (\n <Flex container={{ alignItems: 'end' }}>{renderCutCopyPaste(editor, t, osx)}</Flex>\n )}\n </Flex>\n );\n};\n\nexport default Toolbar;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"markdownConverter.d.ts","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/markdownConverter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAMzF,eAAO,MAAM,OAAO,UACX,OAAO,KAAK,yBACI,oBAAoB,EAAE,gBAC/B,mBAAmB,CAAC,aAAa,CAAC,KAC/C,OAAO,GAAG,IA8GZ,CAAC;AAYF,eAAO,MAAM,wBAAwB,kCAEjB,oBAAoB,EAAE,KACvC,CAAC,OAAO,GAAG,IAAI,CAAC,EAOlB,CAAC;AAIF,QAAA,MAAM,eAAe,OACf,MAAM,yBACa,oBAAoB,EAAE,gBAC/B,mBAAmB,CAAC,aAAa,CAAC,KAC/C,CAAC,OAAO,GAAG,IAAI,CAAC,EAIlB,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"markdownConverter.d.ts","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/markdownConverter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAMzF,eAAO,MAAM,OAAO,UACX,OAAO,KAAK,yBACI,oBAAoB,EAAE,gBAC/B,mBAAmB,CAAC,aAAa,CAAC,KAC/C,OAAO,GAAG,IAwIZ,CAAC;AAYF,eAAO,MAAM,wBAAwB,kCAEjB,oBAAoB,EAAE,KACvC,CAAC,OAAO,GAAG,IAAI,CAAC,EAOlB,CAAC;AAIF,QAAA,MAAM,eAAe,OACf,MAAM,yBACa,oBAAoB,EAAE,gBAC/B,mBAAmB,CAAC,aAAa,CAAC,KAC/C,CAAC,OAAO,GAAG,IAAI,CAAC,EAIlB,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -78,6 +78,12 @@ export const getNode = (token, interactionRenderers, markdownMap) => {
78
78
  text: token.text || ''
79
79
  };
80
80
  }
81
+ case 'codespan': {
82
+ return {
83
+ code: true,
84
+ text: token.text || ''
85
+ };
86
+ }
81
87
  case 'list': {
82
88
  return {
83
89
  type: token.ordered ? 'ordered-list' : 'unordered-list',
@@ -90,6 +96,26 @@ export const getNode = (token, interactionRenderers, markdownMap) => {
90
96
  children: children
91
97
  };
92
98
  }
99
+ case 'blockquote': {
100
+ return {
101
+ type: 'block-quote',
102
+ children
103
+ };
104
+ }
105
+ case 'code': {
106
+ const [, language] = /^```([^\n]+)/.exec(token.raw) ?? [];
107
+ return {
108
+ type: 'code-block',
109
+ language,
110
+ children: [{ text: token.text }]
111
+ };
112
+ }
113
+ case 'hr': {
114
+ return {
115
+ type: 'horizontal-rule',
116
+ children: [{ text: '' }]
117
+ };
118
+ }
93
119
  case 'image': {
94
120
  return {
95
121
  type: 'image',
@@ -1 +1 @@
1
- {"version":3,"file":"markdownConverter.js","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/markdownConverter.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { CosmosCustom, Element, Text } from 'slate';\nimport { marked } from 'marked';\n\nimport { hasProp } from '@pega/cosmos-react-core';\n\nimport type { InteractionRenderers, RichTextViewerProps } from '../RichTextViewer.types';\n\nimport parseTextToCustomSlateNodes from './interactionRenderer';\n\nmarked.setOptions({ mangle: false });\n\nexport const getNode = (\n token: marked.Token,\n interactionRenderers?: InteractionRenderers[],\n markdownMap?: RichTextViewerProps['markdownMap']\n): Element | Text => {\n if (!hasProp(token, 'type') || token.type === 'def')\n return { type: 'paragraph', children: [{ text: '' }] };\n\n let children;\n\n if (hasProp(token, 'tokens')) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n children = markDownToSlate(\n (token.tokens as marked.Tokens.Link['tokens']) || [],\n interactionRenderers,\n markdownMap\n );\n } else if (hasProp(token, 'items')) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n children = markDownToSlate(token.items, interactionRenderers, markdownMap);\n } else {\n let mdText = '';\n\n if (token.type === 'text') mdText = token.raw;\n else if (hasProp(token, 'text')) mdText = token.text;\n\n children = parseTextToCustomSlateNodes(mdText, interactionRenderers);\n }\n\n if (markdownMap?.[token.type]) {\n // Typed as any since typescript is unaware that token type matches argument\n const CustomComponent: any = markdownMap[token.type]?.(token as any);\n if (CustomComponent)\n return {\n type: 'override',\n component: <CustomComponent token={token} />,\n children: [{ text: '' }]\n };\n }\n\n if (!children.length) {\n return {\n type: 'paragraph',\n children: [{ text: token.raw }]\n };\n }\n\n switch (token.type) {\n case 'paragraph': {\n return {\n type: token.type,\n children\n };\n }\n case 'heading': {\n return {\n type:\n token.depth && token.depth <= 4\n ? (`heading-${token.depth}` as `heading-${1 | 2 | 3 | 4}`)\n : 'heading-4',\n children\n };\n }\n case 'link': {\n return {\n href: token.href,\n text: token.text || ''\n };\n }\n case 'em': {\n return {\n italic: true,\n text: token.text || ''\n };\n }\n case 'strong': {\n return {\n bold: true,\n text: token.text || ''\n };\n }\n case 'del': {\n return {\n 'line-through': true,\n text: token.text || ''\n };\n }\n case 'list': {\n return {\n type: token.ordered ? 'ordered-list' : 'unordered-list',\n children: children as CosmosCustom.ListItemElement[]\n };\n }\n case 'list_item': {\n return {\n type: 'list-item',\n children: children as Element[]\n };\n }\n case 'image': {\n return {\n type: 'image',\n alt: token.text,\n src: token.href,\n children: [{ text: '' }]\n };\n }\n default: {\n return {\n type: token.type,\n children\n } as Element;\n }\n }\n};\n\nconst markDownToSlate = (\n tokens: marked.Token[],\n interactionRenderers?: InteractionRenderers[],\n markdownMap?: RichTextViewerProps['markdownMap']\n): (Element | Text)[] => {\n return tokens.map(token => {\n return getNode(token, interactionRenderers, markdownMap);\n });\n};\n\nexport const convertMarkdownForEditor = (\n md = '',\n searchRenderers?: InteractionRenderers[]\n): (Element | Text)[] => {\n return [\n {\n type: 'paragraph',\n children: parseTextToCustomSlateNodes(md, searchRenderers)\n }\n ];\n};\n\n// Converts markdown into Slate compatible nodes, also takes regex used\n// in Feed Component to pass them down to custom elements\nconst convertMarkdown = (\n md: string,\n interactionRenderers?: InteractionRenderers[],\n markdownMap?: RichTextViewerProps['markdownMap']\n): (Element | Text)[] => {\n const lexer = new marked.Lexer({ gfm: false });\n const output = lexer.lex(md);\n return markDownToSlate(output, interactionRenderers, markdownMap);\n};\n\nexport default convertMarkdown;\n"]}
1
+ {"version":3,"file":"markdownConverter.js","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/markdownConverter.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { CosmosCustom, Element, Text } from 'slate';\nimport { marked } from 'marked';\n\nimport { hasProp } from '@pega/cosmos-react-core';\n\nimport type { InteractionRenderers, RichTextViewerProps } from '../RichTextViewer.types';\n\nimport parseTextToCustomSlateNodes from './interactionRenderer';\n\nmarked.setOptions({ mangle: false });\n\nexport const getNode = (\n token: marked.Token,\n interactionRenderers?: InteractionRenderers[],\n markdownMap?: RichTextViewerProps['markdownMap']\n): Element | Text => {\n if (!hasProp(token, 'type') || token.type === 'def')\n return { type: 'paragraph', children: [{ text: '' }] };\n\n let children;\n\n if (hasProp(token, 'tokens')) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n children = markDownToSlate(\n (token.tokens as marked.Tokens.Link['tokens']) || [],\n interactionRenderers,\n markdownMap\n );\n } else if (hasProp(token, 'items')) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n children = markDownToSlate(token.items, interactionRenderers, markdownMap);\n } else {\n let mdText = '';\n\n if (token.type === 'text') mdText = token.raw;\n else if (hasProp(token, 'text')) mdText = token.text;\n\n children = parseTextToCustomSlateNodes(mdText, interactionRenderers);\n }\n\n if (markdownMap?.[token.type]) {\n // Typed as any since typescript is unaware that token type matches argument\n const CustomComponent: any = markdownMap[token.type]?.(token as any);\n if (CustomComponent)\n return {\n type: 'override',\n component: <CustomComponent token={token} />,\n children: [{ text: '' }]\n };\n }\n\n if (!children.length) {\n return {\n type: 'paragraph',\n children: [{ text: token.raw }]\n };\n }\n\n switch (token.type) {\n case 'paragraph': {\n return {\n type: token.type,\n children\n };\n }\n case 'heading': {\n return {\n type:\n token.depth && token.depth <= 4\n ? (`heading-${token.depth}` as `heading-${1 | 2 | 3 | 4}`)\n : 'heading-4',\n children\n };\n }\n case 'link': {\n return {\n href: token.href,\n text: token.text || ''\n };\n }\n case 'em': {\n return {\n italic: true,\n text: token.text || ''\n };\n }\n case 'strong': {\n return {\n bold: true,\n text: token.text || ''\n };\n }\n case 'del': {\n return {\n 'line-through': true,\n text: token.text || ''\n };\n }\n case 'codespan': {\n return {\n code: true,\n text: token.text || ''\n };\n }\n case 'list': {\n return {\n type: token.ordered ? 'ordered-list' : 'unordered-list',\n children: children as CosmosCustom.ListItemElement[]\n };\n }\n case 'list_item': {\n return {\n type: 'list-item',\n children: children as Element[]\n };\n }\n case 'blockquote': {\n return {\n type: 'block-quote',\n children\n };\n }\n case 'code': {\n const [, language] = /^```([^\\n]+)/.exec(token.raw) ?? [];\n return {\n type: 'code-block',\n language,\n children: [{ text: token.text }]\n };\n }\n case 'hr': {\n return {\n type: 'horizontal-rule',\n children: [{ text: '' }]\n };\n }\n case 'image': {\n return {\n type: 'image',\n alt: token.text,\n src: token.href,\n children: [{ text: '' }]\n };\n }\n default: {\n return {\n type: token.type,\n children\n } as Element;\n }\n }\n};\n\nconst markDownToSlate = (\n tokens: marked.Token[],\n interactionRenderers?: InteractionRenderers[],\n markdownMap?: RichTextViewerProps['markdownMap']\n): (Element | Text)[] => {\n return tokens.map(token => {\n return getNode(token, interactionRenderers, markdownMap);\n });\n};\n\nexport const convertMarkdownForEditor = (\n md = '',\n searchRenderers?: InteractionRenderers[]\n): (Element | Text)[] => {\n return [\n {\n type: 'paragraph',\n children: parseTextToCustomSlateNodes(md, searchRenderers)\n }\n ];\n};\n\n// Converts markdown into Slate compatible nodes, also takes regex used\n// in Feed Component to pass them down to custom elements\nconst convertMarkdown = (\n md: string,\n interactionRenderers?: InteractionRenderers[],\n markdownMap?: RichTextViewerProps['markdownMap']\n): (Element | Text)[] => {\n const lexer = new marked.Lexer({ gfm: false });\n const output = lexer.lex(md);\n return markDownToSlate(output, interactionRenderers, markdownMap);\n};\n\nexport default convertMarkdown;\n"]}
@@ -10,6 +10,7 @@ type Node = {
10
10
  italic?: boolean;
11
11
  bold?: boolean;
12
12
  'line-through'?: boolean;
13
+ code?: boolean;
13
14
  component?: JSX.Element | ComponentType<any>;
14
15
  src?: string;
15
16
  alt?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/renderers.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,OAAO,CAAC;AAGtD,OAAO,EAAE,IAAI,EAAe,MAAM,yBAAyB,CAAC;AAK5D,eAAO,MAAM,iBAAiB,UAAW,kBAAkB,gBAyF1D,CAAC;AAEF,KAAK,IAAI,GAAG;IACV,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAGF,eAAO,MAAM,YAAY,SAAU,IAAI,gBAiEtC,CAAC;AAGF,eAAO,MAAM,iBAAiB,UAAW,eAAe,gBA6BvD,CAAC;AAEF,eAAO,MAAM,UAAU,0GAEtB,CAAC;AAEF,eAAO,MAAM,YAAY,SAAU,iBAAiB,gBA4BnD,CAAC"}
1
+ {"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/renderers.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,OAAO,CAAC;AAGtD,OAAO,EAAE,IAAI,EAAe,MAAM,yBAAyB,CAAC;AAS5D,eAAO,MAAM,iBAAiB,UAAW,kBAAkB,gBAsG1D,CAAC;AAEF,KAAK,IAAI,GAAG;IACV,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAGF,eAAO,MAAM,YAAY,SAAU,IAAI,gBA0EtC,CAAC;AAGF,eAAO,MAAM,iBAAiB,UAAW,eAAe,gBAiCvD,CAAC;AAEF,eAAO,MAAM,UAAU,0GAEtB,CAAC;AAEF,eAAO,MAAM,YAAY,SAAU,iBAAiB,gBAgCnD,CAAC"}
@@ -1,6 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import styled from 'styled-components';
3
3
  import { Text, Link, Image } from '@pega/cosmos-react-core';
4
+ import BlockQuote from '../DecoratorComponents/BlockQuote';
5
+ import CodeBlock from '../DecoratorComponents/CodeBlock';
6
+ import Code from '../DecoratorComponents/Code';
7
+ import HorizontalRule from '../DecoratorComponents/HorizontalRule';
4
8
  import { Table, TableRow, TableCell, TableBody } from '../DecoratorComponents/Table';
5
9
  // Renderer for block level elements
6
10
  export const slateNodeRenderer = (props) => {
@@ -19,6 +23,12 @@ export const slateNodeRenderer = (props) => {
19
23
  return _jsx("ul", { ...props.attributes, children: props.children });
20
24
  case 'list-item':
21
25
  return (_jsx("li", { ...props.attributes, "data-order": props.element.order, "data-level": props.element.level, "data-id": props.element.id, "data-parent-id": props.element.parentId, children: props.children }));
26
+ case 'block-quote':
27
+ return _jsx(BlockQuote, { ...props.attributes, children: props.children });
28
+ case 'code-block':
29
+ return (_jsx(CodeBlock, { ...props.attributes, language: props.element.language, children: props.children }));
30
+ case 'horizontal-rule':
31
+ return _jsx(HorizontalRule, {});
22
32
  case 'custom': {
23
33
  const CustomComponent = props.element.component;
24
34
  let child = _jsx(CustomComponent, { ...props.attributes, children: props.element.content });
@@ -34,6 +44,9 @@ export const slateNodeRenderer = (props) => {
34
44
  if (props.element['line-through']) {
35
45
  child = _jsx("del", { children: child });
36
46
  }
47
+ if (props.element.code) {
48
+ child = _jsx(Code, { children: child });
49
+ }
37
50
  return child;
38
51
  }
39
52
  case 'override': {
@@ -75,6 +88,12 @@ export const nodeRenderer = (node) => {
75
88
  return _jsx("ul", { children: node.children });
76
89
  case 'list-item':
77
90
  return _jsx("li", { children: node.children });
91
+ case 'block-quote':
92
+ return _jsx(BlockQuote, { children: node.children });
93
+ case 'code-block':
94
+ return _jsx(CodeBlock, { children: node.children });
95
+ case 'horizontal-rule':
96
+ return _jsx(HorizontalRule, {});
78
97
  case 'custom': {
79
98
  const CustomComponent = node.component;
80
99
  let child = _jsx(CustomComponent, { children: node.content });
@@ -90,6 +109,9 @@ export const nodeRenderer = (node) => {
90
109
  if (node['line-through']) {
91
110
  child = _jsx("del", { children: child });
92
111
  }
112
+ if (node.code) {
113
+ child = _jsx(Code, { children: child });
114
+ }
93
115
  return child;
94
116
  }
95
117
  case 'override': {
@@ -123,6 +145,9 @@ export const slateLeafRenderer = (props) => {
123
145
  const CustomComponent = props.leaf.searchResult.component;
124
146
  return (_jsx("span", { ...props.attributes, children: _jsx(CustomComponent, { ...props.leaf.searchResult.props, children: child }) }));
125
147
  }
148
+ if (props.leaf.code) {
149
+ child = _jsx(Code, { children: child });
150
+ }
126
151
  if (props.leaf['line-through']) {
127
152
  child = _jsx("del", { children: child });
128
153
  }
@@ -146,6 +171,9 @@ export const leafRenderer = (leaf) => {
146
171
  const CustomComponent = leaf.searchResult.component;
147
172
  return (_jsx("span", { children: _jsx(CustomComponent, { ...leaf.searchResult.props, children: child }) }));
148
173
  }
174
+ if (leaf.code) {
175
+ child = _jsx(Code, { children: child });
176
+ }
149
177
  if (leaf['line-through']) {
150
178
  child = _jsx("del", { children: child });
151
179
  }
@@ -1 +1 @@
1
- {"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/renderers.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { RenderElementProps, RenderLeafProps } from 'slate-react';\nimport type { CosmosCustom } from 'slate';\nimport type { ComponentType, ReactNode } from 'react';\nimport styled from 'styled-components';\n\nimport { Text, Link, Image } from '@pega/cosmos-react-core';\n\nimport { Table, TableRow, TableCell, TableBody } from '../DecoratorComponents/Table';\n\n// Renderer for block level elements\nexport const slateNodeRenderer = (props: RenderElementProps) => {\n switch (props.element.type) {\n case 'heading-1':\n return (\n <Text variant='h1' {...props.attributes}>\n {props.children}\n </Text>\n );\n case 'heading-2':\n return (\n <Text variant='h2' {...props.attributes}>\n {props.children}\n </Text>\n );\n case 'heading-3':\n return (\n <Text variant='h3' {...props.attributes}>\n {props.children}\n </Text>\n );\n case 'heading-4':\n return (\n <Text variant='h4' {...props.attributes}>\n {props.children}\n </Text>\n );\n case 'ordered-list':\n return <ol {...props.attributes}>{props.children}</ol>;\n case 'unordered-list':\n return <ul {...props.attributes}>{props.children}</ul>;\n case 'list-item':\n return (\n <li\n {...props.attributes}\n data-order={props.element.order}\n data-level={props.element.level}\n data-id={props.element.id}\n data-parent-id={props.element.parentId}\n >\n {props.children}\n </li>\n );\n case 'custom': {\n const CustomComponent = props.element.component;\n let child = <CustomComponent {...props.attributes}>{props.element.content}</CustomComponent>;\n if (props.element.href) {\n child = <Link href={props.element.href}>{child}</Link>;\n }\n if (props.element.italic) {\n child = <em>{child}</em>;\n }\n if (props.element.bold) {\n child = <strong>{child}</strong>;\n }\n if (props.element['line-through']) {\n child = <del>{child}</del>;\n }\n return child;\n }\n case 'override': {\n return props.element.component;\n }\n case 'table':\n return <Table {...props.attributes}>{props.children}</Table>;\n case 'table-body':\n return <TableBody {...props.attributes}>{props.children}</TableBody>;\n case 'table-row':\n return <TableRow {...props.attributes}>{props.children}</TableRow>;\n case 'table-cell':\n return <TableCell {...props.attributes}>{props.children}</TableCell>;\n case 'paragraph':\n return (\n <div>\n <Text {...props.attributes}>{props.children}</Text>\n </div>\n );\n case 'image':\n return (\n <div {...props.attributes}>\n <Image src={props.element.src} alt={props.element.alt as string} />\n {props.children}\n </div>\n );\n case 'image-placeholder':\n return <div {...props.attributes}>{props.children}</div>;\n default: {\n return <span {...props.attributes}>{props.children}</span>;\n }\n }\n};\n\ntype Node = {\n children: JSX.Element[];\n type: string;\n href?: string;\n italic?: boolean;\n bold?: boolean;\n 'line-through'?: boolean;\n component?: JSX.Element | ComponentType<any>;\n src?: string;\n alt?: string;\n content?: Record<string, string>;\n};\n\n// Renderer for block level elements\nexport const nodeRenderer = (node: Node) => {\n switch (node.type) {\n case 'heading-1':\n return <Text variant='h1'>{node.children}</Text>;\n case 'heading-2':\n return <Text variant='h2'>{node.children}</Text>;\n case 'heading-3':\n return <Text variant='h3'>{node.children}</Text>;\n case 'heading-4':\n return <Text variant='h4'>{node.children}</Text>;\n case 'ordered-list':\n return <ol>{node.children}</ol>;\n case 'unordered-list':\n return <ul>{node.children}</ul>;\n case 'list-item':\n return <li>{node.children}</li>;\n case 'custom': {\n const CustomComponent = node.component as ComponentType<any>;\n let child = <CustomComponent>{node.content}</CustomComponent>;\n if (node.href) {\n child = <Link href={node.href}>{child}</Link>;\n }\n if (node.italic) {\n child = <em>{child}</em>;\n }\n if (node.bold) {\n child = <strong>{child}</strong>;\n }\n if (node['line-through']) {\n child = <del>{child}</del>;\n }\n return child;\n }\n case 'override': {\n return node.component as JSX.Element;\n }\n case 'table':\n return <Table>{node.children}</Table>;\n case 'table-body':\n return <TableBody>{node.children}</TableBody>;\n case 'table-row':\n return <TableRow>{node.children}</TableRow>;\n case 'table-cell':\n return <TableCell>{node.children}</TableCell>;\n case 'paragraph':\n return (\n <div>\n <Text>{node.children}</Text>\n </div>\n );\n case 'image':\n return (\n <div>\n <Image src={node.src} alt={node.alt as string} />\n {node.children}\n </div>\n );\n case 'image-placeholder':\n return <div>{node.children}</div>;\n case 'space':\n return <br />;\n default: {\n return <>{node.children}</>;\n }\n }\n};\n\n// Renderer for inline elements\nexport const slateLeafRenderer = (props: RenderLeafProps) => {\n let child = props.children;\n\n if (props.leaf.searchResult) {\n const CustomComponent = props.leaf.searchResult.component;\n return (\n <span {...props.attributes}>\n <CustomComponent {...props.leaf.searchResult.props}>{child}</CustomComponent>\n </span>\n );\n }\n\n if (props.leaf['line-through']) {\n child = <del>{child}</del>;\n }\n\n if (props.leaf.italic) {\n child = <em>{child}</em>;\n }\n\n if (props.leaf.bold) {\n child = <strong>{child}</strong>;\n }\n\n if (props.leaf.href) {\n child = <Link href={props.leaf.href}>{child}</Link>;\n }\n\n return <span {...props.attributes}>{child}</span>;\n};\n\nexport const StyledSpan = styled.span`\n white-space: pre-line;\n`;\n\nexport const leafRenderer = (leaf: CosmosCustom.Text) => {\n let child: string | ReactNode = leaf.text;\n if (leaf.searchResult) {\n const CustomComponent = leaf.searchResult.component;\n return (\n <span>\n <CustomComponent {...leaf.searchResult.props}>{child}</CustomComponent>\n </span>\n );\n }\n\n if (leaf['line-through']) {\n child = <del>{child}</del>;\n }\n\n if (leaf.italic) {\n child = <em>{child}</em>;\n }\n\n if (leaf.bold) {\n child = <strong>{child}</strong>;\n }\n\n if (leaf.href) {\n child = <Link href={leaf.href}>{child}</Link>;\n }\n\n return <StyledSpan>{child}</StyledSpan>;\n};\n"]}
1
+ {"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/renderers.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { RenderElementProps, RenderLeafProps } from 'slate-react';\nimport type { CosmosCustom } from 'slate';\nimport type { ComponentType, ReactNode } from 'react';\nimport styled from 'styled-components';\n\nimport { Text, Link, Image } from '@pega/cosmos-react-core';\n\nimport BlockQuote from '../DecoratorComponents/BlockQuote';\nimport CodeBlock from '../DecoratorComponents/CodeBlock';\nimport Code from '../DecoratorComponents/Code';\nimport HorizontalRule from '../DecoratorComponents/HorizontalRule';\nimport { Table, TableRow, TableCell, TableBody } from '../DecoratorComponents/Table';\n\n// Renderer for block level elements\nexport const slateNodeRenderer = (props: RenderElementProps) => {\n switch (props.element.type) {\n case 'heading-1':\n return (\n <Text variant='h1' {...props.attributes}>\n {props.children}\n </Text>\n );\n case 'heading-2':\n return (\n <Text variant='h2' {...props.attributes}>\n {props.children}\n </Text>\n );\n case 'heading-3':\n return (\n <Text variant='h3' {...props.attributes}>\n {props.children}\n </Text>\n );\n case 'heading-4':\n return (\n <Text variant='h4' {...props.attributes}>\n {props.children}\n </Text>\n );\n case 'ordered-list':\n return <ol {...props.attributes}>{props.children}</ol>;\n case 'unordered-list':\n return <ul {...props.attributes}>{props.children}</ul>;\n case 'list-item':\n return (\n <li\n {...props.attributes}\n data-order={props.element.order}\n data-level={props.element.level}\n data-id={props.element.id}\n data-parent-id={props.element.parentId}\n >\n {props.children}\n </li>\n );\n case 'block-quote':\n return <BlockQuote {...props.attributes}>{props.children}</BlockQuote>;\n case 'code-block':\n return (\n <CodeBlock {...props.attributes} language={props.element.language}>\n {props.children}\n </CodeBlock>\n );\n case 'horizontal-rule':\n return <HorizontalRule />;\n case 'custom': {\n const CustomComponent = props.element.component;\n let child = <CustomComponent {...props.attributes}>{props.element.content}</CustomComponent>;\n if (props.element.href) {\n child = <Link href={props.element.href}>{child}</Link>;\n }\n if (props.element.italic) {\n child = <em>{child}</em>;\n }\n if (props.element.bold) {\n child = <strong>{child}</strong>;\n }\n if (props.element['line-through']) {\n child = <del>{child}</del>;\n }\n if (props.element.code) {\n child = <Code>{child}</Code>;\n }\n return child;\n }\n case 'override': {\n return props.element.component;\n }\n case 'table':\n return <Table {...props.attributes}>{props.children}</Table>;\n case 'table-body':\n return <TableBody {...props.attributes}>{props.children}</TableBody>;\n case 'table-row':\n return <TableRow {...props.attributes}>{props.children}</TableRow>;\n case 'table-cell':\n return <TableCell {...props.attributes}>{props.children}</TableCell>;\n case 'paragraph':\n return (\n <div>\n <Text {...props.attributes}>{props.children}</Text>\n </div>\n );\n case 'image':\n return (\n <div {...props.attributes}>\n <Image src={props.element.src} alt={props.element.alt as string} />\n {props.children}\n </div>\n );\n case 'image-placeholder':\n return <div {...props.attributes}>{props.children}</div>;\n default: {\n return <span {...props.attributes}>{props.children}</span>;\n }\n }\n};\n\ntype Node = {\n children: JSX.Element[];\n type: string;\n href?: string;\n italic?: boolean;\n bold?: boolean;\n 'line-through'?: boolean;\n code?: boolean;\n component?: JSX.Element | ComponentType<any>;\n src?: string;\n alt?: string;\n content?: Record<string, string>;\n};\n\n// Renderer for block level elements\nexport const nodeRenderer = (node: Node) => {\n switch (node.type) {\n case 'heading-1':\n return <Text variant='h1'>{node.children}</Text>;\n case 'heading-2':\n return <Text variant='h2'>{node.children}</Text>;\n case 'heading-3':\n return <Text variant='h3'>{node.children}</Text>;\n case 'heading-4':\n return <Text variant='h4'>{node.children}</Text>;\n case 'ordered-list':\n return <ol>{node.children}</ol>;\n case 'unordered-list':\n return <ul>{node.children}</ul>;\n case 'list-item':\n return <li>{node.children}</li>;\n case 'block-quote':\n return <BlockQuote>{node.children}</BlockQuote>;\n case 'code-block':\n return <CodeBlock>{node.children}</CodeBlock>;\n case 'horizontal-rule':\n return <HorizontalRule />;\n case 'custom': {\n const CustomComponent = node.component as ComponentType<any>;\n let child = <CustomComponent>{node.content}</CustomComponent>;\n if (node.href) {\n child = <Link href={node.href}>{child}</Link>;\n }\n if (node.italic) {\n child = <em>{child}</em>;\n }\n if (node.bold) {\n child = <strong>{child}</strong>;\n }\n if (node['line-through']) {\n child = <del>{child}</del>;\n }\n if (node.code) {\n child = <Code>{child}</Code>;\n }\n return child;\n }\n case 'override': {\n return node.component as JSX.Element;\n }\n case 'table':\n return <Table>{node.children}</Table>;\n case 'table-body':\n return <TableBody>{node.children}</TableBody>;\n case 'table-row':\n return <TableRow>{node.children}</TableRow>;\n case 'table-cell':\n return <TableCell>{node.children}</TableCell>;\n case 'paragraph':\n return (\n <div>\n <Text>{node.children}</Text>\n </div>\n );\n case 'image':\n return (\n <div>\n <Image src={node.src} alt={node.alt as string} />\n {node.children}\n </div>\n );\n case 'image-placeholder':\n return <div>{node.children}</div>;\n case 'space':\n return <br />;\n default: {\n return <>{node.children}</>;\n }\n }\n};\n\n// Renderer for inline elements\nexport const slateLeafRenderer = (props: RenderLeafProps) => {\n let child = props.children;\n\n if (props.leaf.searchResult) {\n const CustomComponent = props.leaf.searchResult.component;\n return (\n <span {...props.attributes}>\n <CustomComponent {...props.leaf.searchResult.props}>{child}</CustomComponent>\n </span>\n );\n }\n\n if (props.leaf.code) {\n child = <Code>{child}</Code>;\n }\n\n if (props.leaf['line-through']) {\n child = <del>{child}</del>;\n }\n\n if (props.leaf.italic) {\n child = <em>{child}</em>;\n }\n\n if (props.leaf.bold) {\n child = <strong>{child}</strong>;\n }\n\n if (props.leaf.href) {\n child = <Link href={props.leaf.href}>{child}</Link>;\n }\n\n return <span {...props.attributes}>{child}</span>;\n};\n\nexport const StyledSpan = styled.span`\n white-space: pre-line;\n`;\n\nexport const leafRenderer = (leaf: CosmosCustom.Text) => {\n let child: string | ReactNode = leaf.text;\n if (leaf.searchResult) {\n const CustomComponent = leaf.searchResult.component;\n return (\n <span>\n <CustomComponent {...leaf.searchResult.props}>{child}</CustomComponent>\n </span>\n );\n }\n\n if (leaf.code) {\n child = <Code>{child}</Code>;\n }\n\n if (leaf['line-through']) {\n child = <del>{child}</del>;\n }\n\n if (leaf.italic) {\n child = <em>{child}</em>;\n }\n\n if (leaf.bold) {\n child = <strong>{child}</strong>;\n }\n\n if (leaf.href) {\n child = <Link href={leaf.href}>{child}</Link>;\n }\n\n return <StyledSpan>{child}</StyledSpan>;\n};\n"]}
@@ -8,6 +8,9 @@ export declare const slateToHtmlMap: {
8
8
  'unordered-list': string;
9
9
  'ordered-list': string;
10
10
  'list-item': string;
11
+ 'block-quote': string;
12
+ 'code-block': string;
13
+ 'horizontal-rule': string;
11
14
  table: string;
12
15
  'table-body': string;
13
16
  'table-row': string;
@@ -17,6 +20,7 @@ export declare const slateToHtmlMap: {
17
20
  bold: string;
18
21
  'line-through': string;
19
22
  italic: string;
23
+ code: string;
20
24
  href: string;
21
25
  image: string;
22
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"slateConverter.d.ts","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/slateConverter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAKtC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;CAoB1B,CAAC;AA8BF,eAAO,MAAM,aAAa,UAAW,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,KAAG,MAkCzD,CAAC;AAEF,eAAO,MAAM,kBAAkB,UAAW,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,KAAG,MAW9D,CAAC"}
1
+ {"version":3,"file":"slateConverter.d.ts","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/slateConverter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAKtC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;CAyB1B,CAAC;AA8BF,eAAO,MAAM,aAAa,UAAW,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,KAAG,MAkCzD,CAAC;AAEF,eAAO,MAAM,kBAAkB,UAAW,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,KAAG,MAW9D,CAAC"}
@@ -8,6 +8,10 @@ export const slateToHtmlMap = {
8
8
  'unordered-list': 'ul',
9
9
  'ordered-list': 'ol',
10
10
  'list-item': 'li',
11
+ 'block-quote': 'blockquote',
12
+ // FIXME: Should render <pre><code>, but I don't know if this is really used anymore.
13
+ 'code-block': 'pre',
14
+ 'horizontal-rule': 'hr',
11
15
  table: 'table',
12
16
  'table-body': 'tbody',
13
17
  'table-row': 'tr',
@@ -17,6 +21,7 @@ export const slateToHtmlMap = {
17
21
  bold: 'b',
18
22
  'line-through': 'del',
19
23
  italic: 'i',
24
+ code: 'code',
20
25
  href: 'a',
21
26
  image: 'img'
22
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"slateConverter.js","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/slateConverter.ts"],"names":[],"mappings":"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","sourcesContent":["import { Element, Text } from 'slate';\nimport type { CosmosCustom } from 'slate';\n\nimport type { ExcludeStrict } from '@pega/cosmos-react-core';\n\nexport const slateToHtmlMap = {\n link: 'a',\n 'heading-1': 'h1',\n 'heading-2': 'h2',\n 'heading-3': 'h3',\n 'heading-4': 'h4',\n 'unordered-list': 'ul',\n 'ordered-list': 'ol',\n 'list-item': 'li',\n table: 'table',\n 'table-body': 'tbody',\n 'table-row': 'tr',\n 'table-cell': 'td',\n text: 'span',\n paragraph: 'p',\n bold: 'b',\n 'line-through': 'del',\n italic: 'i',\n href: 'a',\n image: 'img'\n};\n\n// Reduces the properties in a slate node into the correct html attributes, mostly used for list-items at the moment\nconst getAttrs = (\n el: ExcludeStrict<Element, CosmosCustom.ImagePlaceholderElement | CosmosCustom.CustomElement>\n) => {\n // eslint-disable-next-line sonarjs/no-small-switch\n switch (el.type) {\n case 'list-item':\n return [\n { name: 'data-id', value: el.id },\n { name: 'data-parent-id', value: el.parentId },\n { name: 'data-order', value: el.order },\n { name: 'data-level', value: el.level }\n ].reduce((acc, attr) => {\n if (attr.value) {\n return `${acc} ${attr.name}='${attr.value}'`;\n }\n return acc;\n }, '');\n default:\n return Object.keys(el).reduce((innerAcc, key) => {\n return key !== 'type' && key !== 'children'\n ? `${innerAcc} ${key}='${el[key as keyof Element]}'`\n : innerAcc;\n }, '');\n }\n};\n\n// Recursive function to reduce Slate Nodes into an HTML string\nexport const constructHtml = (nodes: (Element | Text)[]): string => {\n return nodes.reduce((acc, node) => {\n if (\n Element.isElement(node) &&\n (node.type === 'image-placeholder' || node.type === 'custom' || node.type === 'override')\n )\n return acc;\n\n const htmlTag = Element.isElement(node) ? slateToHtmlMap[node.type] : undefined;\n let html;\n if (Text.isText(node)) {\n const { text, ...restNode } = node;\n // Reducing inline style properties from a single Slate Node into the correct HTML tags\n html = Object.keys(restNode).reduce((innerAcc, key, i) => {\n const tag = slateToHtmlMap[key as 'bold' | 'line-through' | 'italic' | 'href'];\n // Add the href attribute if needed\n const firstInnerTag = tag === 'a' ? `${tag} href='${restNode[key as 'href']}'` : tag;\n\n if (i === 0) {\n return `<${firstInnerTag}>${text}</${tag}>`;\n }\n return `<${firstInnerTag}>${innerAcc}</${tag}>`;\n }, '');\n if (!html) {\n html = text;\n }\n } else {\n const attrs = getAttrs(node);\n html = `<${htmlTag}${attrs}>${constructHtml(\n (node.children as (Element | Text)[]) || []\n )}</${htmlTag}>`;\n }\n return `${acc}${html}`;\n }, '');\n};\n\nexport const convertSlateToHtml = (nodes: (Element | Text)[]): string => {\n if (\n nodes.length === 1 &&\n Element.isElement(nodes[0]) &&\n Text.isText(nodes[0].children[0]) &&\n nodes[0].children[0].text === ''\n ) {\n return '';\n }\n const htmlNodes = constructHtml(nodes);\n return `<body>${htmlNodes}</body>`;\n};\n"]}
1
+ {"version":3,"file":"slateConverter.js","sourceRoot":"","sources":["../../../../src/components/RichTextEditor/utils/slateConverter.ts"],"names":[],"mappings":"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","sourcesContent":["import { Element, Text } from 'slate';\nimport type { CosmosCustom } from 'slate';\n\nimport type { ExcludeStrict } from '@pega/cosmos-react-core';\n\nexport const slateToHtmlMap = {\n link: 'a',\n 'heading-1': 'h1',\n 'heading-2': 'h2',\n 'heading-3': 'h3',\n 'heading-4': 'h4',\n 'unordered-list': 'ul',\n 'ordered-list': 'ol',\n 'list-item': 'li',\n 'block-quote': 'blockquote',\n // FIXME: Should render <pre><code>, but I don't know if this is really used anymore.\n 'code-block': 'pre',\n 'horizontal-rule': 'hr',\n table: 'table',\n 'table-body': 'tbody',\n 'table-row': 'tr',\n 'table-cell': 'td',\n text: 'span',\n paragraph: 'p',\n bold: 'b',\n 'line-through': 'del',\n italic: 'i',\n code: 'code',\n href: 'a',\n image: 'img'\n};\n\n// Reduces the properties in a slate node into the correct html attributes, mostly used for list-items at the moment\nconst getAttrs = (\n el: ExcludeStrict<Element, CosmosCustom.ImagePlaceholderElement | CosmosCustom.CustomElement>\n) => {\n // eslint-disable-next-line sonarjs/no-small-switch\n switch (el.type) {\n case 'list-item':\n return [\n { name: 'data-id', value: el.id },\n { name: 'data-parent-id', value: el.parentId },\n { name: 'data-order', value: el.order },\n { name: 'data-level', value: el.level }\n ].reduce((acc, attr) => {\n if (attr.value) {\n return `${acc} ${attr.name}='${attr.value}'`;\n }\n return acc;\n }, '');\n default:\n return Object.keys(el).reduce((innerAcc, key) => {\n return key !== 'type' && key !== 'children'\n ? `${innerAcc} ${key}='${el[key as keyof Element]}'`\n : innerAcc;\n }, '');\n }\n};\n\n// Recursive function to reduce Slate Nodes into an HTML string\nexport const constructHtml = (nodes: (Element | Text)[]): string => {\n return nodes.reduce((acc, node) => {\n if (\n Element.isElement(node) &&\n (node.type === 'image-placeholder' || node.type === 'custom' || node.type === 'override')\n )\n return acc;\n\n const htmlTag = Element.isElement(node) ? slateToHtmlMap[node.type] : undefined;\n let html;\n if (Text.isText(node)) {\n const { text, ...restNode } = node;\n // Reducing inline style properties from a single Slate Node into the correct HTML tags\n html = Object.keys(restNode).reduce((innerAcc, key, i) => {\n const tag = slateToHtmlMap[key as 'bold' | 'line-through' | 'italic' | 'href'];\n // Add the href attribute if needed\n const firstInnerTag = tag === 'a' ? `${tag} href='${restNode[key as 'href']}'` : tag;\n\n if (i === 0) {\n return `<${firstInnerTag}>${text}</${tag}>`;\n }\n return `<${firstInnerTag}>${innerAcc}</${tag}>`;\n }, '');\n if (!html) {\n html = text;\n }\n } else {\n const attrs = getAttrs(node);\n html = `<${htmlTag}${attrs}>${constructHtml(\n (node.children as (Element | Text)[]) || []\n )}</${htmlTag}>`;\n }\n return `${acc}${html}`;\n }, '');\n};\n\nexport const convertSlateToHtml = (nodes: (Element | Text)[]): string => {\n if (\n nodes.length === 1 &&\n Element.isElement(nodes[0]) &&\n Text.isText(nodes[0].children[0]) &&\n nodes[0].children[0].text === ''\n ) {\n return '';\n }\n const htmlNodes = constructHtml(nodes);\n return `<body>${htmlNodes}</body>`;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pega/cosmos-react-rte",
3
- "version": "7.0.0-build.9.2",
3
+ "version": "7.0.0-rc.2",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/pegasystems/cosmos-react.git",
@@ -19,7 +19,7 @@
19
19
  "build": "tsc -b tsconfig.build.json"
20
20
  },
21
21
  "dependencies": {
22
- "@pega/cosmos-react-core": "7.0.0-build.9.2",
22
+ "@pega/cosmos-react-core": "7.0.0-rc.2",
23
23
  "@popperjs/core": "^2.11.6",
24
24
  "@types/marked": "^4.0.2",
25
25
  "@types/parse5": "^6.0.0",
@@ -39,12 +39,12 @@
39
39
  "slate-react": "^0.76.1",
40
40
  "styled-components": "^5.2.0",
41
41
  "stylis": "^4.0.13",
42
- "tinymce": "^6.3.1"
42
+ "tinymce": "^6.8.4"
43
43
  },
44
44
  "devDependencies": {
45
- "@storybook/addon-actions": "~7.5.3",
46
- "@storybook/react": "~7.5.3",
47
- "@storybook/theming": "~7.5.3",
45
+ "@storybook/addon-actions": "~8.2.9",
46
+ "@storybook/react": "~8.2.9",
47
+ "@storybook/theming": "~8.2.9",
48
48
  "@testing-library/react": "^12.1.3",
49
49
  "typescript": "~5.2.2"
50
50
  }