@pega/cosmos-react-rte 10.0.0-build.9.13 → 10.0.0-build.9.15
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/ImageEditDialog.d.ts.map +1 -1
- package/lib/components/Editor/ImageEditDialog.js +5 -5
- package/lib/components/Editor/ImageEditDialog.js.map +1 -1
- package/lib/components/Editor/Toolbar/AIRewriteButton.d.ts.map +1 -1
- package/lib/components/Editor/Toolbar/AIRewriteButton.js +4 -7
- package/lib/components/Editor/Toolbar/AIRewriteButton.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageEditDialog.d.ts","sourceRoot":"","sources":["../../../src/components/Editor/ImageEditDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAE9D,UAAU,oBAAoB;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IACzC,iBAAiB,EAAE,eAAe,CAAC;IACnC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;CAC7C;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuCD,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,OAAO,EACP,MAAM,EACN,iBAAiB,EACjB,MAAM,EACN,iBAAiB,EAClB,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"ImageEditDialog.d.ts","sourceRoot":"","sources":["../../../src/components/Editor/ImageEditDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAE9D,UAAU,oBAAoB;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IACzC,iBAAiB,EAAE,eAAe,CAAC;IACnC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;CAC7C;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuCD,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,OAAO,EACP,MAAM,EACN,iBAAiB,EACjB,MAAM,EACN,iBAAiB,EAClB,EAAE,oBAAoB,kDA6NtB"}
|
|
@@ -114,13 +114,13 @@ export function ImageEditDialog({ isOpen, onClose, onSave, initialAttributes, ta
|
|
|
114
114
|
};
|
|
115
115
|
const handleSave = () => {
|
|
116
116
|
if (incorrectUrl)
|
|
117
|
-
return;
|
|
117
|
+
return false;
|
|
118
118
|
const parsedWidth = parseFloat(width);
|
|
119
119
|
const parsedHeight = parseFloat(height);
|
|
120
120
|
let resolvedActionUrl;
|
|
121
121
|
if (hasImageCustomSource && actionUrlType === 'field') {
|
|
122
122
|
if (!imageCustomSource?.onSubmit) {
|
|
123
|
-
return;
|
|
123
|
+
return false;
|
|
124
124
|
}
|
|
125
125
|
// Allow apply with no selected field to clear existing image action links.
|
|
126
126
|
resolvedActionUrl = canSubmitCustomSource
|
|
@@ -139,16 +139,16 @@ export function ImageEditDialog({ isOpen, onClose, onSave, initialAttributes, ta
|
|
|
139
139
|
};
|
|
140
140
|
onSave(attrs);
|
|
141
141
|
onDismissEditRef.current?.('apply');
|
|
142
|
-
|
|
142
|
+
return true;
|
|
143
143
|
};
|
|
144
144
|
const handleCancel = () => {
|
|
145
145
|
onDismissEditRef.current?.('cancel');
|
|
146
|
-
|
|
146
|
+
return true;
|
|
147
147
|
};
|
|
148
148
|
if (!isOpen || !target) {
|
|
149
149
|
return null;
|
|
150
150
|
}
|
|
151
|
-
return (_jsx(StyledFormDialog, { heading: t('rte_edit_image'), onSubmit: handleSave, onCancel: handleCancel, onDismiss: handleCancel, target: target, ref: popoverRef, children: _jsxs(Flex, { container: { direction: 'column', gap: 2 }, children: [_jsx(Input, { label: t('description'), value: alt, onChange: (e) => setAlt(e.target.value), info: t('rte_image_description_info') }), hasImageCustomSource && (_jsxs(RadioButtonGroup, { name: 'editImageActionUrlType', label: t('rte_image_action_source'), onChange: e => {
|
|
151
|
+
return (_jsx(StyledFormDialog, { heading: t('rte_edit_image'), onSubmit: handleSave, onCancel: handleCancel, onDismiss: handleCancel, onAfterClose: onClose, target: target, ref: popoverRef, children: _jsxs(Flex, { container: { direction: 'column', gap: 2 }, children: [_jsx(Input, { label: t('description'), value: alt, onChange: (e) => setAlt(e.target.value), info: t('rte_image_description_info') }), hasImageCustomSource && (_jsxs(RadioButtonGroup, { name: 'editImageActionUrlType', label: t('rte_image_action_source'), onChange: e => {
|
|
152
152
|
const { value } = e.target;
|
|
153
153
|
if (value === 'url' || value === 'field') {
|
|
154
154
|
setActionUrlType(value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageEditDialog.js","sourceRoot":"","sources":["../../../src/components/Editor/ImageEditDialog.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState, useEffect, useRef } from 'react';\nimport type { ChangeEvent } from 'react';\n\nimport {\n Flex,\n Input,\n NumberInput,\n Checkbox,\n RadioButton,\n RadioButtonGroup,\n useI18n\n} from '@pega/cosmos-react-core';\n\nimport { StyledFormDialog } from './Editor.styles';\nimport type { ImageCustomSourceConfig } from './Editor.types';\n\ninterface ImageEditDialogProps {\n isOpen: boolean;\n onClose: () => void;\n onSave: (attrs: ImageAttributes) => void;\n initialAttributes: ImageAttributes;\n target?: HTMLElement | null;\n imageCustomSource?: ImageCustomSourceConfig;\n}\n\nexport interface ImageAttributes {\n src: string;\n alt?: string;\n width?: number;\n height?: number;\n actionUrl?: string;\n}\n\nconst isFieldReferenceUrl = (value: string) => {\n return value.includes('<pega-reference') || value.includes('<pega-reference');\n};\n\n/**\n * Normalize escaped pega-reference markup to raw form.\n * Prevents double-escaping when the actionUrl is re-serialized into href attributes.\n * E.g., \"<pega-reference...>\" → \"<pega-reference...>\"\n */\nconst normalizeEscapedPegaReference = (value: string): string => {\n return value\n .replaceAll('"', '\"')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\n .replaceAll('&', '&');\n};\n\nconst parseCustomSourceFromHref = (href: string) => {\n const decodedHref = normalizeEscapedPegaReference(href);\n if (!decodedHref.includes('<pega-reference')) {\n return null;\n }\n\n const idMatch = /data-rule-id=[\"']([^\"']+)[\"']/i.exec(decodedHref);\n if (!idMatch) {\n return null;\n }\n\n const namespaceMatch = /data-rule-namespace=[\"']([^\"']+)[\"']/i.exec(decodedHref);\n const textMatch = /<pega-reference[^>]*>([\\s\\S]*?)<\\/pega-reference>/i.exec(decodedHref);\n return {\n id: idMatch[1],\n text: textMatch?.[1]?.trim() ?? '',\n namespace: namespaceMatch?.[1]\n };\n};\n\nexport function ImageEditDialog({\n isOpen,\n onClose,\n onSave,\n initialAttributes,\n target,\n imageCustomSource\n}: ImageEditDialogProps) {\n const t = useI18n();\n const popoverRef = useRef(null);\n const wasOpenRef = useRef(false);\n const onEditSelectionChangeRef = useRef(imageCustomSource?.onEditSelectionChange);\n const onDismissEditRef = useRef(imageCustomSource?.onDismissEdit);\n const hasImageCustomSource = Boolean(imageCustomSource?.picker && imageCustomSource?.onSubmit);\n const canSubmitCustomSource = imageCustomSource?.canSubmit ?? true;\n const [alt, setAlt] = useState(initialAttributes.alt || '');\n const [width, setWidth] = useState(initialAttributes.width?.toString() || '');\n const [height, setHeight] = useState(initialAttributes.height?.toString() || '');\n const [actionUrl, setActionUrl] = useState(initialAttributes.actionUrl || '');\n const [actionUrlType, setActionUrlType] = useState<'url' | 'field'>(\n isFieldReferenceUrl(initialAttributes.actionUrl || '') ? 'field' : 'url'\n );\n const [customSize, setCustomSize] = useState(false);\n const [aspectRatio, setAspectRatio] = useState(0);\n const [incorrectUrl, setIncorrectUrl] = useState(false);\n\n useEffect(() => {\n onEditSelectionChangeRef.current = imageCustomSource?.onEditSelectionChange;\n onDismissEditRef.current = imageCustomSource?.onDismissEdit;\n }, [imageCustomSource?.onEditSelectionChange, imageCustomSource?.onDismissEdit]);\n\n useEffect(() => {\n const isOpening = isOpen && !wasOpenRef.current;\n wasOpenRef.current = isOpen;\n\n if (!isOpening) {\n return;\n }\n\n setAlt(initialAttributes.alt || '');\n setWidth(initialAttributes.width?.toString() || '');\n setHeight(initialAttributes.height?.toString() || '');\n\n // Normalize any escaped pega-reference markup before storing in state\n // to prevent double-escaping when the value is later serialized into href attributes.\n let normalizedActionUrl = initialAttributes.actionUrl || '';\n if (normalizedActionUrl && normalizedActionUrl.includes('<pega-reference')) {\n normalizedActionUrl = normalizeEscapedPegaReference(normalizedActionUrl);\n }\n const hasFieldReference = hasImageCustomSource && isFieldReferenceUrl(normalizedActionUrl);\n if (hasFieldReference) {\n const customSourceValue = parseCustomSourceFromHref(normalizedActionUrl);\n if (customSourceValue) {\n onEditSelectionChangeRef.current?.(customSourceValue);\n }\n // Never leak pega-reference markup into URL input.\n setActionUrl('');\n } else {\n onEditSelectionChangeRef.current?.({ id: '', text: '', namespace: undefined });\n setActionUrl(normalizedActionUrl);\n }\n setActionUrlType(hasFieldReference ? 'field' : 'url');\n\n setCustomSize(false); // Always unchecked by default\n\n // Calculate aspect ratio from initial dimensions\n if (initialAttributes.width && initialAttributes.height) {\n setAspectRatio(initialAttributes.width / initialAttributes.height);\n }\n setIncorrectUrl(false);\n }, [isOpen, initialAttributes, hasImageCustomSource]);\n\n const onHeightChange = (incomingValue: string) => {\n const inputHeight = parseInt(incomingValue, 10);\n if (Number.isNaN(inputHeight)) {\n setHeight('');\n return;\n }\n setHeight(inputHeight.toString());\n if (aspectRatio) {\n setWidth(Math.floor(inputHeight * aspectRatio).toString());\n }\n };\n\n const onWidthChange = (incomingValue: string) => {\n const inputWidth = parseInt(incomingValue, 10);\n if (Number.isNaN(inputWidth)) {\n setWidth('');\n return;\n }\n setWidth(inputWidth.toString());\n if (aspectRatio) {\n setHeight(Math.floor(inputWidth / aspectRatio).toString());\n }\n };\n\n const handleSave = () => {\n if (incorrectUrl) return;\n\n const parsedWidth = parseFloat(width);\n const parsedHeight = parseFloat(height);\n let resolvedActionUrl: string | undefined;\n\n if (hasImageCustomSource && actionUrlType === 'field') {\n if (!imageCustomSource?.onSubmit) {\n return;\n }\n // Allow apply with no selected field to clear existing image action links.\n resolvedActionUrl = canSubmitCustomSource\n ? imageCustomSource.onSubmit(alt)?.trim() || undefined\n : undefined;\n } else {\n resolvedActionUrl = actionUrl.trim() || undefined;\n }\n\n const attrs: ImageAttributes = {\n src: initialAttributes.src,\n alt: alt.trim() || undefined,\n width: customSize && Number.isFinite(parsedWidth) ? parsedWidth : undefined,\n height: customSize && Number.isFinite(parsedHeight) ? parsedHeight : undefined,\n actionUrl: resolvedActionUrl\n };\n\n onSave(attrs);\n onDismissEditRef.current?.('apply');\n onClose();\n };\n\n const handleCancel = () => {\n onDismissEditRef.current?.('cancel');\n onClose();\n };\n\n if (!isOpen || !target) {\n return null;\n }\n\n return (\n <StyledFormDialog\n heading={t('rte_edit_image')}\n onSubmit={handleSave}\n onCancel={handleCancel}\n onDismiss={handleCancel}\n target={target}\n ref={popoverRef}\n >\n <Flex container={{ direction: 'column', gap: 2 }}>\n <Input\n label={t('description')}\n value={alt}\n onChange={(e: ChangeEvent<HTMLInputElement>) => setAlt(e.target.value)}\n info={t('rte_image_description_info')}\n />\n {hasImageCustomSource && (\n <RadioButtonGroup\n name='editImageActionUrlType'\n label={t('rte_image_action_source')}\n onChange={e => {\n const { value } = e.target;\n if (value === 'url' || value === 'field') {\n setActionUrlType(value);\n if (value === 'field') {\n setIncorrectUrl(false);\n }\n }\n }}\n inline\n >\n <RadioButton label={t('rte_link_url')} value='url' checked={actionUrlType === 'url'} />\n <RadioButton\n label={t('rte_link_field')}\n value='field'\n checked={actionUrlType === 'field'}\n />\n </RadioButtonGroup>\n )}\n {(!hasImageCustomSource || actionUrlType === 'url') && (\n <Input\n label={hasImageCustomSource ? t('rte_image_url') : t('rte_action_url')}\n value={actionUrl}\n info={incorrectUrl ? t('rte_invalid_url') : ''}\n status={incorrectUrl ? 'error' : undefined}\n onChange={e => {\n const actionUrlInput = e.target.value;\n setActionUrl(actionUrlInput);\n if (actionUrlInput === '') {\n setIncorrectUrl(false);\n return;\n }\n if (isFieldReferenceUrl(actionUrlInput)) {\n setIncorrectUrl(false);\n return;\n }\n try {\n const newUrl = new URL(actionUrlInput);\n setIncorrectUrl(!['http:', 'https:'].includes(newUrl.protocol));\n } catch {\n setIncorrectUrl(true);\n }\n }}\n />\n )}\n {hasImageCustomSource && actionUrlType === 'field' && imageCustomSource?.picker}\n <Checkbox\n checked={customSize}\n label={t('rte_image_custom_size')}\n onChange={(e: ChangeEvent<HTMLInputElement>) => {\n setCustomSize(e.target.checked);\n }}\n />\n {customSize && (\n <>\n <NumberInput\n label={t('rte_width_in_pixels')}\n value={Math.floor(Math.max(parseFloat(width) || 1, 1)).toString()}\n onChange={onWidthChange}\n />\n <NumberInput\n label={t('rte_height_in_pixels')}\n value={Math.floor(Math.max(parseFloat(height) || 1, 1)).toString()}\n onChange={onHeightChange}\n />\n </>\n )}\n </Flex>\n </StyledFormDialog>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ImageEditDialog.js","sourceRoot":"","sources":["../../../src/components/Editor/ImageEditDialog.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState, useEffect, useRef } from 'react';\nimport type { ChangeEvent } from 'react';\n\nimport {\n Flex,\n Input,\n NumberInput,\n Checkbox,\n RadioButton,\n RadioButtonGroup,\n useI18n\n} from '@pega/cosmos-react-core';\n\nimport { StyledFormDialog } from './Editor.styles';\nimport type { ImageCustomSourceConfig } from './Editor.types';\n\ninterface ImageEditDialogProps {\n isOpen: boolean;\n onClose: () => void;\n onSave: (attrs: ImageAttributes) => void;\n initialAttributes: ImageAttributes;\n target?: HTMLElement | null;\n imageCustomSource?: ImageCustomSourceConfig;\n}\n\nexport interface ImageAttributes {\n src: string;\n alt?: string;\n width?: number;\n height?: number;\n actionUrl?: string;\n}\n\nconst isFieldReferenceUrl = (value: string) => {\n return value.includes('<pega-reference') || value.includes('<pega-reference');\n};\n\n/**\n * Normalize escaped pega-reference markup to raw form.\n * Prevents double-escaping when the actionUrl is re-serialized into href attributes.\n * E.g., \"<pega-reference...>\" → \"<pega-reference...>\"\n */\nconst normalizeEscapedPegaReference = (value: string): string => {\n return value\n .replaceAll('"', '\"')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\n .replaceAll('&', '&');\n};\n\nconst parseCustomSourceFromHref = (href: string) => {\n const decodedHref = normalizeEscapedPegaReference(href);\n if (!decodedHref.includes('<pega-reference')) {\n return null;\n }\n\n const idMatch = /data-rule-id=[\"']([^\"']+)[\"']/i.exec(decodedHref);\n if (!idMatch) {\n return null;\n }\n\n const namespaceMatch = /data-rule-namespace=[\"']([^\"']+)[\"']/i.exec(decodedHref);\n const textMatch = /<pega-reference[^>]*>([\\s\\S]*?)<\\/pega-reference>/i.exec(decodedHref);\n return {\n id: idMatch[1],\n text: textMatch?.[1]?.trim() ?? '',\n namespace: namespaceMatch?.[1]\n };\n};\n\nexport function ImageEditDialog({\n isOpen,\n onClose,\n onSave,\n initialAttributes,\n target,\n imageCustomSource\n}: ImageEditDialogProps) {\n const t = useI18n();\n const popoverRef = useRef(null);\n const wasOpenRef = useRef(false);\n const onEditSelectionChangeRef = useRef(imageCustomSource?.onEditSelectionChange);\n const onDismissEditRef = useRef(imageCustomSource?.onDismissEdit);\n const hasImageCustomSource = Boolean(imageCustomSource?.picker && imageCustomSource?.onSubmit);\n const canSubmitCustomSource = imageCustomSource?.canSubmit ?? true;\n const [alt, setAlt] = useState(initialAttributes.alt || '');\n const [width, setWidth] = useState(initialAttributes.width?.toString() || '');\n const [height, setHeight] = useState(initialAttributes.height?.toString() || '');\n const [actionUrl, setActionUrl] = useState(initialAttributes.actionUrl || '');\n const [actionUrlType, setActionUrlType] = useState<'url' | 'field'>(\n isFieldReferenceUrl(initialAttributes.actionUrl || '') ? 'field' : 'url'\n );\n const [customSize, setCustomSize] = useState(false);\n const [aspectRatio, setAspectRatio] = useState(0);\n const [incorrectUrl, setIncorrectUrl] = useState(false);\n\n useEffect(() => {\n onEditSelectionChangeRef.current = imageCustomSource?.onEditSelectionChange;\n onDismissEditRef.current = imageCustomSource?.onDismissEdit;\n }, [imageCustomSource?.onEditSelectionChange, imageCustomSource?.onDismissEdit]);\n\n useEffect(() => {\n const isOpening = isOpen && !wasOpenRef.current;\n wasOpenRef.current = isOpen;\n\n if (!isOpening) {\n return;\n }\n\n setAlt(initialAttributes.alt || '');\n setWidth(initialAttributes.width?.toString() || '');\n setHeight(initialAttributes.height?.toString() || '');\n\n // Normalize any escaped pega-reference markup before storing in state\n // to prevent double-escaping when the value is later serialized into href attributes.\n let normalizedActionUrl = initialAttributes.actionUrl || '';\n if (normalizedActionUrl && normalizedActionUrl.includes('<pega-reference')) {\n normalizedActionUrl = normalizeEscapedPegaReference(normalizedActionUrl);\n }\n const hasFieldReference = hasImageCustomSource && isFieldReferenceUrl(normalizedActionUrl);\n if (hasFieldReference) {\n const customSourceValue = parseCustomSourceFromHref(normalizedActionUrl);\n if (customSourceValue) {\n onEditSelectionChangeRef.current?.(customSourceValue);\n }\n // Never leak pega-reference markup into URL input.\n setActionUrl('');\n } else {\n onEditSelectionChangeRef.current?.({ id: '', text: '', namespace: undefined });\n setActionUrl(normalizedActionUrl);\n }\n setActionUrlType(hasFieldReference ? 'field' : 'url');\n\n setCustomSize(false); // Always unchecked by default\n\n // Calculate aspect ratio from initial dimensions\n if (initialAttributes.width && initialAttributes.height) {\n setAspectRatio(initialAttributes.width / initialAttributes.height);\n }\n setIncorrectUrl(false);\n }, [isOpen, initialAttributes, hasImageCustomSource]);\n\n const onHeightChange = (incomingValue: string) => {\n const inputHeight = parseInt(incomingValue, 10);\n if (Number.isNaN(inputHeight)) {\n setHeight('');\n return;\n }\n setHeight(inputHeight.toString());\n if (aspectRatio) {\n setWidth(Math.floor(inputHeight * aspectRatio).toString());\n }\n };\n\n const onWidthChange = (incomingValue: string) => {\n const inputWidth = parseInt(incomingValue, 10);\n if (Number.isNaN(inputWidth)) {\n setWidth('');\n return;\n }\n setWidth(inputWidth.toString());\n if (aspectRatio) {\n setHeight(Math.floor(inputWidth / aspectRatio).toString());\n }\n };\n\n const handleSave = () => {\n if (incorrectUrl) return false;\n\n const parsedWidth = parseFloat(width);\n const parsedHeight = parseFloat(height);\n let resolvedActionUrl: string | undefined;\n\n if (hasImageCustomSource && actionUrlType === 'field') {\n if (!imageCustomSource?.onSubmit) {\n return false;\n }\n // Allow apply with no selected field to clear existing image action links.\n resolvedActionUrl = canSubmitCustomSource\n ? imageCustomSource.onSubmit(alt)?.trim() || undefined\n : undefined;\n } else {\n resolvedActionUrl = actionUrl.trim() || undefined;\n }\n\n const attrs: ImageAttributes = {\n src: initialAttributes.src,\n alt: alt.trim() || undefined,\n width: customSize && Number.isFinite(parsedWidth) ? parsedWidth : undefined,\n height: customSize && Number.isFinite(parsedHeight) ? parsedHeight : undefined,\n actionUrl: resolvedActionUrl\n };\n\n onSave(attrs);\n onDismissEditRef.current?.('apply');\n return true;\n };\n\n const handleCancel = () => {\n onDismissEditRef.current?.('cancel');\n return true;\n };\n\n if (!isOpen || !target) {\n return null;\n }\n\n return (\n <StyledFormDialog\n heading={t('rte_edit_image')}\n onSubmit={handleSave}\n onCancel={handleCancel}\n onDismiss={handleCancel}\n onAfterClose={onClose}\n target={target}\n ref={popoverRef}\n >\n <Flex container={{ direction: 'column', gap: 2 }}>\n <Input\n label={t('description')}\n value={alt}\n onChange={(e: ChangeEvent<HTMLInputElement>) => setAlt(e.target.value)}\n info={t('rte_image_description_info')}\n />\n {hasImageCustomSource && (\n <RadioButtonGroup\n name='editImageActionUrlType'\n label={t('rte_image_action_source')}\n onChange={e => {\n const { value } = e.target;\n if (value === 'url' || value === 'field') {\n setActionUrlType(value);\n if (value === 'field') {\n setIncorrectUrl(false);\n }\n }\n }}\n inline\n >\n <RadioButton label={t('rte_link_url')} value='url' checked={actionUrlType === 'url'} />\n <RadioButton\n label={t('rte_link_field')}\n value='field'\n checked={actionUrlType === 'field'}\n />\n </RadioButtonGroup>\n )}\n {(!hasImageCustomSource || actionUrlType === 'url') && (\n <Input\n label={hasImageCustomSource ? t('rte_image_url') : t('rte_action_url')}\n value={actionUrl}\n info={incorrectUrl ? t('rte_invalid_url') : ''}\n status={incorrectUrl ? 'error' : undefined}\n onChange={e => {\n const actionUrlInput = e.target.value;\n setActionUrl(actionUrlInput);\n if (actionUrlInput === '') {\n setIncorrectUrl(false);\n return;\n }\n if (isFieldReferenceUrl(actionUrlInput)) {\n setIncorrectUrl(false);\n return;\n }\n try {\n const newUrl = new URL(actionUrlInput);\n setIncorrectUrl(!['http:', 'https:'].includes(newUrl.protocol));\n } catch {\n setIncorrectUrl(true);\n }\n }}\n />\n )}\n {hasImageCustomSource && actionUrlType === 'field' && imageCustomSource?.picker}\n <Checkbox\n checked={customSize}\n label={t('rte_image_custom_size')}\n onChange={(e: ChangeEvent<HTMLInputElement>) => {\n setCustomSize(e.target.checked);\n }}\n />\n {customSize && (\n <>\n <NumberInput\n label={t('rte_width_in_pixels')}\n value={Math.floor(Math.max(parseFloat(width) || 1, 1)).toString()}\n onChange={onWidthChange}\n />\n <NumberInput\n label={t('rte_height_in_pixels')}\n value={Math.floor(Math.max(parseFloat(height) || 1, 1)).toString()}\n onChange={onHeightChange}\n />\n </>\n )}\n </Flex>\n </StyledFormDialog>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIRewriteButton.d.ts","sourceRoot":"","sources":["../../../../src/components/Editor/Toolbar/AIRewriteButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,cAAc,CAAC;AAG3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AASxD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,EAAE,CACd,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,QAAQ,EACvB,sBAAsB,EAAE,MAAM,EAC9B,SAAS,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,KACvC,IAAI,CAAC;IACV,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,EAAE,OAAO,CAAC;QAClB,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC;QACjD,eAAe,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;KAChD,KAAK,SAAS,CAAC;CACjB;AAED,QAAA,MAAM,eAAe,GAAI,oDAItB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"AIRewriteButton.d.ts","sourceRoot":"","sources":["../../../../src/components/Editor/Toolbar/AIRewriteButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,cAAc,CAAC;AAG3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AASxD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,EAAE,CACd,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,QAAQ,EACvB,sBAAsB,EAAE,MAAM,EAC9B,SAAS,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,KACvC,IAAI,CAAC;IACV,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,EAAE,OAAO,CAAC;QAClB,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC;QACjD,eAAe,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;KAChD,KAAK,SAAS,CAAC;CACjB;AAED,QAAA,MAAM,eAAe,GAAI,oDAItB,oBAAoB,4CA6GtB,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -45,25 +45,22 @@ const AIRewriteButton = ({ editor, onRewriteClick, renderSuggestionEditor }) =>
|
|
|
45
45
|
const editedContent = getContentRef.current?.() ?? suggestion ?? '';
|
|
46
46
|
const restoredContent = restorePlaceholders(editedContent, placeholderMapRef.current, userPlaceholdersRef.current);
|
|
47
47
|
editor.chain().setContent(restoredContent).focus('end').run();
|
|
48
|
-
setShowPopover(false);
|
|
49
|
-
setSuggestion(undefined);
|
|
50
|
-
setHasSuggestionContent(false);
|
|
51
|
-
placeholderMapRef.current = {};
|
|
52
|
-
userPlaceholdersRef.current = [];
|
|
53
48
|
};
|
|
54
49
|
const handleCancel = () => {
|
|
55
50
|
generationTokenRef.current += 1;
|
|
51
|
+
buttonEl?.focus();
|
|
52
|
+
};
|
|
53
|
+
const handleAfterClose = () => {
|
|
56
54
|
setShowPopover(false);
|
|
57
55
|
setSuggestion(undefined);
|
|
58
56
|
setIsGenerating(false);
|
|
59
57
|
setHasSuggestionContent(false);
|
|
60
58
|
placeholderMapRef.current = {};
|
|
61
59
|
userPlaceholdersRef.current = [];
|
|
62
|
-
buttonEl?.focus();
|
|
63
60
|
};
|
|
64
61
|
return (_jsxs(_Fragment, { children: [_jsx(ToolbarButton, { ref: setButtonEl, onClick: () => {
|
|
65
62
|
setShowPopover(true);
|
|
66
|
-
}, disabled: !hasContent(), tooltip: t('ai_rewrite_title'), label: t('ai_rewrite_title'), children: _jsx(Icon, { name: 'polaris' }) }), showPopover && buttonEl && (_jsx(AIRewrite, { target: buttonEl, isGenerating: isGenerating, suggestion: hasSuggestionContent ? suggestion : undefined, onGenerate: handleGenerate, onSubmit: handleSubmit, onCancel: handleCancel, suggestionEditor: renderSuggestionEditor
|
|
63
|
+
}, disabled: !hasContent(), tooltip: t('ai_rewrite_title'), label: t('ai_rewrite_title'), children: _jsx(Icon, { name: 'polaris' }) }), showPopover && buttonEl && (_jsx(AIRewrite, { target: buttonEl, isGenerating: isGenerating, suggestion: hasSuggestionContent ? suggestion : undefined, onGenerate: handleGenerate, onSubmit: handleSubmit, onCancel: handleCancel, onAfterClose: handleAfterClose, suggestionEditor: renderSuggestionEditor
|
|
67
64
|
? renderSuggestionEditor({
|
|
68
65
|
defaultValue: suggestion,
|
|
69
66
|
disabled: isGenerating || !suggestion,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIRewriteButton.js","sourceRoot":"","sources":["../../../../src/components/Editor/Toolbar/AIRewriteButton.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"AIRewriteButton.js","sourceRoot":"","sources":["../../../../src/components/Editor/Toolbar/AIRewriteButton.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport type { Editor as TiptapEditor } from '@tiptap/core';\n\nimport { AIRewrite, Icon, registerIcon, useElement, useI18n } from '@pega/cosmos-react-core';\nimport type { AIAction } from '@pega/cosmos-react-core';\nimport * as polarisIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/polaris.icon';\n\nimport ToolbarButton from '../../RichTextEditor/Toolbar/ToolbarButton';\nimport { extractLinkAndImg, restorePlaceholders } from '../utils/htmlPlaceholder';\nimport type { PlaceholderMap } from '../utils/htmlPlaceholder';\n\nregisterIcon(polarisIcon);\n\nexport interface AIRewriteButtonProps {\n editor: TiptapEditor;\n onRewriteClick: (\n originalText: string,\n rewriteAction: AIAction,\n additionalInstructions: string,\n onSuccess: (rewrittenText: string) => void\n ) => void;\n renderSuggestionEditor?: (props: {\n defaultValue?: string;\n disabled: boolean;\n readOnly: boolean;\n onGetContent: (getContent: () => string) => void;\n onContentChange: (hasContent: boolean) => void;\n }) => ReactNode;\n}\n\nconst AIRewriteButton = ({\n editor,\n onRewriteClick,\n renderSuggestionEditor\n}: AIRewriteButtonProps) => {\n const t = useI18n();\n const [buttonEl, setButtonEl] = useElement<HTMLElement>();\n const [showPopover, setShowPopover] = useState(false);\n const [isGenerating, setIsGenerating] = useState(false);\n const [suggestion, setSuggestion] = useState<string | undefined>(undefined);\n const [hasSuggestionContent, setHasSuggestionContent] = useState(false);\n const getContentRef = useRef<(() => string) | undefined>(undefined);\n const generationTokenRef = useRef(0);\n const placeholderMapRef = useRef<PlaceholderMap>({});\n const userPlaceholdersRef = useRef<string[]>([]);\n\n const getHtmlContent = (): string => {\n return editor ? editor.getHTML().trim() : '';\n };\n\n const hasContent = (): boolean => {\n return editor ? editor.getText().trim() !== '' : false;\n };\n\n const handleGenerate = (rewriteAction: AIAction, additionalInstructions: string) => {\n const originalContent = getHtmlContent();\n const { placeholderHtml, placeholderMap, userPlaceholders } =\n extractLinkAndImg(originalContent);\n placeholderMapRef.current = placeholderMap;\n userPlaceholdersRef.current = userPlaceholders;\n generationTokenRef.current += 1;\n const token = generationTokenRef.current;\n setIsGenerating(true);\n setSuggestion(undefined);\n setHasSuggestionContent(false);\n\n onRewriteClick(\n placeholderHtml,\n rewriteAction,\n additionalInstructions || '',\n (rewrittenText: string) => {\n if (token !== generationTokenRef.current) return;\n setIsGenerating(false);\n const trimmedText = rewrittenText.trim();\n setSuggestion(trimmedText || undefined);\n setHasSuggestionContent(trimmedText.length > 0);\n }\n );\n };\n\n const handleSubmit = () => {\n const editedContent = getContentRef.current?.() ?? suggestion ?? '';\n const restoredContent = restorePlaceholders(\n editedContent,\n placeholderMapRef.current,\n userPlaceholdersRef.current\n );\n editor.chain().setContent(restoredContent).focus('end').run();\n };\n\n const handleCancel = () => {\n generationTokenRef.current += 1;\n buttonEl?.focus();\n };\n\n const handleAfterClose = () => {\n setShowPopover(false);\n setSuggestion(undefined);\n setIsGenerating(false);\n setHasSuggestionContent(false);\n placeholderMapRef.current = {};\n userPlaceholdersRef.current = [];\n };\n\n return (\n <>\n <ToolbarButton\n ref={setButtonEl}\n onClick={() => {\n setShowPopover(true);\n }}\n disabled={!hasContent()}\n tooltip={t('ai_rewrite_title')}\n label={t('ai_rewrite_title')}\n >\n <Icon name='polaris' />\n </ToolbarButton>\n {showPopover && buttonEl && (\n <AIRewrite\n target={buttonEl}\n isGenerating={isGenerating}\n suggestion={hasSuggestionContent ? suggestion : undefined}\n onGenerate={handleGenerate}\n onSubmit={handleSubmit}\n onCancel={handleCancel}\n onAfterClose={handleAfterClose}\n suggestionEditor={\n renderSuggestionEditor\n ? renderSuggestionEditor({\n defaultValue: suggestion,\n disabled: isGenerating || !suggestion,\n readOnly: false,\n onGetContent: getContent => {\n getContentRef.current = getContent;\n },\n onContentChange: setHasSuggestionContent\n })\n : undefined\n }\n />\n )}\n </>\n );\n};\n\nexport default AIRewriteButton;\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pega/cosmos-react-rte",
|
|
3
|
-
"version": "10.0.0-build.9.
|
|
3
|
+
"version": "10.0.0-build.9.15",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE",
|
|
5
5
|
"author": "Pegasystems",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"@intevation/tiptap-extension-office-paste": "^0.1.2",
|
|
18
|
-
"@pega/cosmos-react-core": "10.0.0-build.9.
|
|
18
|
+
"@pega/cosmos-react-core": "10.0.0-build.9.15",
|
|
19
19
|
"@popperjs/core": "^2.11.6",
|
|
20
20
|
"@tiptap/core": "^3.12.1",
|
|
21
21
|
"@tiptap/extension-blockquote": "^3.12.1",
|