@pega/cosmos-react-social 10.0.0-build.2.5 → 10.0.0-build.2.7
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.
|
@@ -161,7 +161,7 @@ const FeedEditRegion = (props) => {
|
|
|
161
161
|
// TODO: onChange is running on mount. It shouldn't...
|
|
162
162
|
setContentModified(value !== content);
|
|
163
163
|
valueRef.current = value ?? '';
|
|
164
|
-
}, onKeyDown: onKeyDown, defaultValue: defaultValue, ref: rteRef }), _jsx(Progress, { visible: !!progress, focusOnVisible: true, placement: 'local', message: typeof progress === 'string' ? progress : undefined })] }), _jsxs(Flex, { as: StyledActions, container: { direction: 'column', gap: 0.25, pad: [0.25, 0] }, children: [_jsx(Button, { variant: 'simple', as: FeedButton, onClick: () => onEditCancel?.(id), icon: true, label: t('cancel'), children: _jsx(Icon, { name: 'times' }) }), onRewriteClick && (_jsx(Button, { variant: 'simple', disabled: emptyEditText || !!progress, as: FeedButton, onClick: () => setShowAIPopover(true), icon: true, label: t('ai_rewrite_title'), ref: setAIButtonEl, children: _jsx(Icon, { name: 'polaris' }) })), _jsx(Button, { as: FeedButton, disabled: emptyEditText || (!contentModified && !recipientsModified) || !!progress, variant: 'simple', onClick: handleEdit, icon: true, label: t('update'), ref: postButtonRef, children: _jsx(Icon, { name: 'send' }) })] }), aiButtonEl && showAIPopover && onRewriteClick && (_jsx(AIRewrite, { target: aiButtonEl, isGenerating: isGenerating, suggestion: hasSuggestionContent ? suggestion : undefined, onGenerate: handleGenerate, onSubmit: handleApplyRewrite, suggestionEditor: _jsx(FeedRichText, { ref: suggestionRteRef, label: t('ai_rewrite_result_label'), labelHidden: true, disabled: isGenerating || !suggestion?.trim(), readOnly:
|
|
164
|
+
}, onKeyDown: onKeyDown, defaultValue: defaultValue, ref: rteRef }), _jsx(Progress, { visible: !!progress, focusOnVisible: true, placement: 'local', message: typeof progress === 'string' ? progress : undefined })] }), _jsxs(Flex, { as: StyledActions, container: { direction: 'column', gap: 0.25, pad: [0.25, 0] }, children: [_jsx(Button, { variant: 'simple', as: FeedButton, onClick: () => onEditCancel?.(id), icon: true, label: t('cancel'), children: _jsx(Icon, { name: 'times' }) }), onRewriteClick && (_jsx(Button, { variant: 'simple', disabled: emptyEditText || !!progress, as: FeedButton, onClick: () => setShowAIPopover(true), icon: true, label: t('ai_rewrite_title'), ref: setAIButtonEl, children: _jsx(Icon, { name: 'polaris' }) })), _jsx(Button, { as: FeedButton, disabled: emptyEditText || (!contentModified && !recipientsModified) || !!progress, variant: 'simple', onClick: handleEdit, icon: true, label: t('update'), ref: postButtonRef, children: _jsx(Icon, { name: 'send' }) })] }), aiButtonEl && showAIPopover && onRewriteClick && (_jsx(AIRewrite, { target: aiButtonEl, isGenerating: isGenerating, suggestion: hasSuggestionContent ? suggestion : undefined, onGenerate: handleGenerate, onSubmit: handleApplyRewrite, suggestionEditor: _jsx(FeedRichText, { ref: suggestionRteRef, label: t('ai_rewrite_result_label'), labelHidden: true, disabled: isGenerating || !suggestion?.trim(), readOnly: isGenerating || !suggestion?.trim(), onChange: () => setHasSuggestionContent((suggestionRteRef.current?.getPlainText() ?? '').trim().length > 0) }), onCancel: () => {
|
|
165
165
|
setShowAIPopover(false);
|
|
166
166
|
setSuggestion(undefined);
|
|
167
167
|
setIsGenerating(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedEditRegion.js","sourceRoot":"","sources":["../../../src/components/Feed/FeedEditRegion.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport type { FC, KeyboardEvent } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n AIRewrite,\n Button,\n defaultThemeProp,\n Flex,\n getActiveElement,\n Icon,\n isInstance,\n Progress,\n useAfterInitialEffect,\n useElement,\n useI18n,\n useLiveLog,\n useOuterEvent\n} from '@pega/cosmos-react-core';\nimport type { AIAction } from '@pega/cosmos-react-core';\nimport { extractMentions, restoreMentionPlaceholders } from '@pega/cosmos-react-rte';\nimport type { RichTextEditorState } from '@pega/cosmos-react-rte';\n\nimport FeedRichText from './FeedRichText';\nimport type { FeedEditRegionProps, RecipientMenuItem } from './Feed.types';\nimport { StyledActions } from './FeedInputRegion';\nimport FeedButton from './FeedButton';\nimport { FeedContext } from './Feed.context';\nimport FeedVisibilityControls from './FeedVisibilityControls';\n\nconst StyledInputContainer = styled.div(({ theme }) => {\n return css`\n width: calc(100% - (${theme.base.spacing} + ${theme.base['hit-area']['mouse-min']}));\n position: relative;\n\n @media (pointer: coarse) {\n width: calc(100% - (${theme.base.spacing} + ${theme.base['hit-area']['finger-min']}));\n }\n `;\n});\n\nStyledInputContainer.defaultProps = defaultThemeProp;\n\nconst FeedEditRegion: FC<FeedEditRegionProps> = (props: FeedEditRegionProps) => {\n const {\n defaultValue,\n variant,\n id,\n content,\n visibility,\n recipients = [],\n recipientInput,\n banners,\n progress,\n onRewriteClick,\n onEditSubmit,\n onEditCancel,\n emptyEditText,\n setEmptyEditText,\n onUnmount\n } = props;\n\n const t = useI18n();\n const { announcePolite } = useLiveLog();\n const { setShowSearchResults } = useContext(FeedContext);\n const rteRef = useRef<RichTextEditorState>(null);\n const editTextAreaRef = useRef<HTMLDivElement>(null);\n const postButtonRef = useRef<HTMLButtonElement>(null);\n const isSubmitButtonClicked = useRef(false);\n const previouslyFocusedElementRef = useRef<Element | null>(null);\n const [aiButtonEl, setAIButtonEl] = useElement<HTMLButtonElement>();\n const [showAIPopover, setShowAIPopover] = useState(false);\n const [isGenerating, setIsGenerating] = useState(false);\n const [suggestion, setSuggestion] = useState<string | undefined>(undefined);\n const [hasSuggestionContent, setHasSuggestionContent] = useState(false);\n const suggestionRteRef = useRef<RichTextEditorState>(null);\n\n // Sync AI-generated suggestion into the suggestion FeedRichText whenever it changes\n useEffect(() => {\n if (suggestion !== undefined) {\n suggestionRteRef.current?.clear();\n suggestionRteRef.current?.insertMarkdown?.(suggestion);\n setHasSuggestionContent(true);\n } else {\n suggestionRteRef.current?.clear();\n setHasSuggestionContent(false);\n }\n }, [suggestion]);\n\n const [contentModified, setContentModified] = useState(false);\n const [recipientsModified, setRecipientsModified] = useState(false);\n\n const valueRef = useRef(defaultValue ?? content ?? '');\n\n const announceLabel = t(variant === 'post' ? 'feed_edit_posted' : 'feed_edit_commented');\n\n useOuterEvent('mousedown', [editTextAreaRef], () => {\n if (emptyEditText) onEditCancel?.(id);\n });\n\n const handleEdit = () => {\n isSubmitButtonClicked.current = true;\n setShowSearchResults?.(false);\n if (!emptyEditText && (contentModified || recipientsModified)) {\n onEditSubmit({\n id,\n value: rteRef.current?.getPlainText() || '',\n visibility,\n recipients: recipientInput?.recipients ?? recipients\n });\n announcePolite({ message: announceLabel, type: 'success' });\n }\n };\n\n const handleGenerate = (rewriteAction: AIAction, additionalInstructions: string) => {\n const originalContent = rteRef.current?.getPlainText() || '';\n if (!originalContent) return;\n\n const { cleanText, mentionMap, userPlaceholders } = extractMentions(originalContent);\n\n // Capture in closure so concurrent Generate calls don't corrupt each other's restore map\n const capturedMentionMap = mentionMap;\n const capturedUserPlaceholders = userPlaceholders;\n\n setIsGenerating(true);\n setSuggestion(undefined);\n\n onRewriteClick?.(\n cleanText,\n rewriteAction,\n additionalInstructions,\n (rewrittenText: string) => {\n const restoredText = restoreMentionPlaceholders(\n rewrittenText,\n capturedMentionMap,\n capturedUserPlaceholders\n );\n setIsGenerating(false);\n setSuggestion(restoredText.trim() ? restoredText : undefined);\n },\n true\n );\n };\n\n const handleApplyRewrite = () => {\n const editedText = suggestionRteRef.current?.getPlainText() ?? suggestion ?? '';\n rteRef.current?.insertMarkdown?.(editedText);\n valueRef.current = editedText;\n\n // Manually update states since programmatic updates might not trigger onChange\n setEmptyEditText(editedText.trim() === '');\n setContentModified(editedText !== content);\n\n // Close popover and reset AI state\n setShowAIPopover(false);\n setSuggestion(undefined);\n\n // Return focus to RTE\n rteRef.current?.focus();\n };\n\n // If the API call fails, progress will flip back to false without calling the success callback\n // Clear the loading state so the Generate button re-enables\n useAfterInitialEffect(() => {\n if (!progress) setIsGenerating(false);\n }, [progress]);\n\n const onKeyDown = (event: KeyboardEvent) => {\n if ((event.metaKey || event.ctrlKey) && event.key === 'Enter') handleEdit();\n };\n\n useEffect(() => {\n if (rteRef.current) {\n rteRef.current?.focus();\n }\n }, [rteRef]);\n\n // Using layout effect to capture the focused element prior to editor taking focus.\n useLayoutEffect(() => {\n previouslyFocusedElementRef.current = getActiveElement();\n\n return () => {\n const el = previouslyFocusedElementRef.current;\n if (isInstance(el, HTMLElement) && el.isConnected) {\n el.focus();\n }\n };\n }, []);\n\n useEffect(() => {\n if (banners && isSubmitButtonClicked.current && postButtonRef.current) {\n postButtonRef.current.focus();\n isSubmitButtonClicked.current = false;\n }\n }, [banners]);\n\n useEffect(() => {\n if (recipientInput) {\n if (recipients.length !== recipientInput.recipients.length) {\n setRecipientsModified(true);\n } else {\n const recipientIntersection: RecipientMenuItem[] = [];\n recipients.forEach(recipient => {\n if (recipientInput.recipients.find(r => r.id === recipient.id)) {\n recipientIntersection.push(recipient);\n }\n });\n\n if (recipientIntersection.length !== recipientInput.recipients.length) {\n setRecipientsModified(true);\n } else {\n setRecipientsModified(false);\n }\n }\n }\n }, [recipients, recipientInput?.recipients]);\n\n const label = t(variant === 'post' ? 'feed_edit_post' : 'feed_edit_comment');\n\n useEffect(() => {\n return () => {\n onUnmount?.(valueRef.current);\n };\n }, []);\n\n return (\n <Flex container={{ gap: 1, alignItems: 'end' }}>\n <Flex\n as={StyledInputContainer}\n ref={editTextAreaRef}\n container={{ direction: 'column', gap: 1 }}\n inert={progress ? '' : undefined}\n >\n {banners}\n\n {visibility === 'private' && !!recipientInput && (\n <FeedVisibilityControls\n visibilityMode='private'\n visibility='private'\n recipientInput={recipientInput}\n />\n )}\n\n <FeedRichText\n label={label}\n onChange={() => {\n const value = rteRef.current?.getPlainText();\n setEmptyEditText(value?.trim() === '');\n // TODO: onChange is running on mount. It shouldn't...\n setContentModified(value !== content);\n valueRef.current = value ?? '';\n }}\n onKeyDown={onKeyDown}\n defaultValue={defaultValue}\n ref={rteRef}\n />\n\n <Progress\n visible={!!progress}\n focusOnVisible\n placement='local'\n message={typeof progress === 'string' ? progress : undefined}\n />\n </Flex>\n <Flex as={StyledActions} container={{ direction: 'column', gap: 0.25, pad: [0.25, 0] }}>\n <Button\n variant='simple'\n as={FeedButton}\n onClick={() => onEditCancel?.(id)}\n icon\n label={t('cancel')}\n >\n <Icon name='times' />\n </Button>\n\n {/* AI Rewrite Button */}\n {onRewriteClick && (\n <Button\n variant='simple'\n disabled={emptyEditText || !!progress}\n as={FeedButton}\n onClick={() => setShowAIPopover(true)}\n icon\n label={t('ai_rewrite_title')}\n ref={setAIButtonEl}\n >\n <Icon name='polaris' />\n </Button>\n )}\n\n <Button\n as={FeedButton}\n disabled={emptyEditText || (!contentModified && !recipientsModified) || !!progress}\n variant='simple'\n onClick={handleEdit}\n icon\n label={t('update')}\n ref={postButtonRef}\n >\n <Icon name='send' />\n </Button>\n </Flex>\n\n {/* AI Rewrite Popover */}\n {aiButtonEl && showAIPopover && onRewriteClick && (\n <AIRewrite\n target={aiButtonEl}\n isGenerating={isGenerating}\n suggestion={hasSuggestionContent ? suggestion : undefined}\n onGenerate={handleGenerate}\n onSubmit={handleApplyRewrite}\n suggestionEditor={\n <FeedRichText\n ref={suggestionRteRef}\n label={t('ai_rewrite_result_label')}\n labelHidden\n disabled={isGenerating || !suggestion?.trim()}\n readOnly={false}\n onChange={() =>\n setHasSuggestionContent(\n (suggestionRteRef.current?.getPlainText() ?? '').trim().length > 0\n )\n }\n />\n }\n onCancel={() => {\n setShowAIPopover(false);\n setSuggestion(undefined);\n setIsGenerating(false);\n aiButtonEl.focus();\n }}\n />\n )}\n </Flex>\n );\n};\n\nexport default FeedEditRegion;\n"]}
|
|
1
|
+
{"version":3,"file":"FeedEditRegion.js","sourceRoot":"","sources":["../../../src/components/Feed/FeedEditRegion.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport type { FC, KeyboardEvent } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n AIRewrite,\n Button,\n defaultThemeProp,\n Flex,\n getActiveElement,\n Icon,\n isInstance,\n Progress,\n useAfterInitialEffect,\n useElement,\n useI18n,\n useLiveLog,\n useOuterEvent\n} from '@pega/cosmos-react-core';\nimport type { AIAction } from '@pega/cosmos-react-core';\nimport { extractMentions, restoreMentionPlaceholders } from '@pega/cosmos-react-rte';\nimport type { RichTextEditorState } from '@pega/cosmos-react-rte';\n\nimport FeedRichText from './FeedRichText';\nimport type { FeedEditRegionProps, RecipientMenuItem } from './Feed.types';\nimport { StyledActions } from './FeedInputRegion';\nimport FeedButton from './FeedButton';\nimport { FeedContext } from './Feed.context';\nimport FeedVisibilityControls from './FeedVisibilityControls';\n\nconst StyledInputContainer = styled.div(({ theme }) => {\n return css`\n width: calc(100% - (${theme.base.spacing} + ${theme.base['hit-area']['mouse-min']}));\n position: relative;\n\n @media (pointer: coarse) {\n width: calc(100% - (${theme.base.spacing} + ${theme.base['hit-area']['finger-min']}));\n }\n `;\n});\n\nStyledInputContainer.defaultProps = defaultThemeProp;\n\nconst FeedEditRegion: FC<FeedEditRegionProps> = (props: FeedEditRegionProps) => {\n const {\n defaultValue,\n variant,\n id,\n content,\n visibility,\n recipients = [],\n recipientInput,\n banners,\n progress,\n onRewriteClick,\n onEditSubmit,\n onEditCancel,\n emptyEditText,\n setEmptyEditText,\n onUnmount\n } = props;\n\n const t = useI18n();\n const { announcePolite } = useLiveLog();\n const { setShowSearchResults } = useContext(FeedContext);\n const rteRef = useRef<RichTextEditorState>(null);\n const editTextAreaRef = useRef<HTMLDivElement>(null);\n const postButtonRef = useRef<HTMLButtonElement>(null);\n const isSubmitButtonClicked = useRef(false);\n const previouslyFocusedElementRef = useRef<Element | null>(null);\n const [aiButtonEl, setAIButtonEl] = useElement<HTMLButtonElement>();\n const [showAIPopover, setShowAIPopover] = useState(false);\n const [isGenerating, setIsGenerating] = useState(false);\n const [suggestion, setSuggestion] = useState<string | undefined>(undefined);\n const [hasSuggestionContent, setHasSuggestionContent] = useState(false);\n const suggestionRteRef = useRef<RichTextEditorState>(null);\n\n // Sync AI-generated suggestion into the suggestion FeedRichText whenever it changes\n useEffect(() => {\n if (suggestion !== undefined) {\n suggestionRteRef.current?.clear();\n suggestionRteRef.current?.insertMarkdown?.(suggestion);\n setHasSuggestionContent(true);\n } else {\n suggestionRteRef.current?.clear();\n setHasSuggestionContent(false);\n }\n }, [suggestion]);\n\n const [contentModified, setContentModified] = useState(false);\n const [recipientsModified, setRecipientsModified] = useState(false);\n\n const valueRef = useRef(defaultValue ?? content ?? '');\n\n const announceLabel = t(variant === 'post' ? 'feed_edit_posted' : 'feed_edit_commented');\n\n useOuterEvent('mousedown', [editTextAreaRef], () => {\n if (emptyEditText) onEditCancel?.(id);\n });\n\n const handleEdit = () => {\n isSubmitButtonClicked.current = true;\n setShowSearchResults?.(false);\n if (!emptyEditText && (contentModified || recipientsModified)) {\n onEditSubmit({\n id,\n value: rteRef.current?.getPlainText() || '',\n visibility,\n recipients: recipientInput?.recipients ?? recipients\n });\n announcePolite({ message: announceLabel, type: 'success' });\n }\n };\n\n const handleGenerate = (rewriteAction: AIAction, additionalInstructions: string) => {\n const originalContent = rteRef.current?.getPlainText() || '';\n if (!originalContent) return;\n\n const { cleanText, mentionMap, userPlaceholders } = extractMentions(originalContent);\n\n // Capture in closure so concurrent Generate calls don't corrupt each other's restore map\n const capturedMentionMap = mentionMap;\n const capturedUserPlaceholders = userPlaceholders;\n\n setIsGenerating(true);\n setSuggestion(undefined);\n\n onRewriteClick?.(\n cleanText,\n rewriteAction,\n additionalInstructions,\n (rewrittenText: string) => {\n const restoredText = restoreMentionPlaceholders(\n rewrittenText,\n capturedMentionMap,\n capturedUserPlaceholders\n );\n setIsGenerating(false);\n setSuggestion(restoredText.trim() ? restoredText : undefined);\n },\n true\n );\n };\n\n const handleApplyRewrite = () => {\n const editedText = suggestionRteRef.current?.getPlainText() ?? suggestion ?? '';\n rteRef.current?.insertMarkdown?.(editedText);\n valueRef.current = editedText;\n\n // Manually update states since programmatic updates might not trigger onChange\n setEmptyEditText(editedText.trim() === '');\n setContentModified(editedText !== content);\n\n // Close popover and reset AI state\n setShowAIPopover(false);\n setSuggestion(undefined);\n\n // Return focus to RTE\n rteRef.current?.focus();\n };\n\n // If the API call fails, progress will flip back to false without calling the success callback\n // Clear the loading state so the Generate button re-enables\n useAfterInitialEffect(() => {\n if (!progress) setIsGenerating(false);\n }, [progress]);\n\n const onKeyDown = (event: KeyboardEvent) => {\n if ((event.metaKey || event.ctrlKey) && event.key === 'Enter') handleEdit();\n };\n\n useEffect(() => {\n if (rteRef.current) {\n rteRef.current?.focus();\n }\n }, [rteRef]);\n\n // Using layout effect to capture the focused element prior to editor taking focus.\n useLayoutEffect(() => {\n previouslyFocusedElementRef.current = getActiveElement();\n\n return () => {\n const el = previouslyFocusedElementRef.current;\n if (isInstance(el, HTMLElement) && el.isConnected) {\n el.focus();\n }\n };\n }, []);\n\n useEffect(() => {\n if (banners && isSubmitButtonClicked.current && postButtonRef.current) {\n postButtonRef.current.focus();\n isSubmitButtonClicked.current = false;\n }\n }, [banners]);\n\n useEffect(() => {\n if (recipientInput) {\n if (recipients.length !== recipientInput.recipients.length) {\n setRecipientsModified(true);\n } else {\n const recipientIntersection: RecipientMenuItem[] = [];\n recipients.forEach(recipient => {\n if (recipientInput.recipients.find(r => r.id === recipient.id)) {\n recipientIntersection.push(recipient);\n }\n });\n\n if (recipientIntersection.length !== recipientInput.recipients.length) {\n setRecipientsModified(true);\n } else {\n setRecipientsModified(false);\n }\n }\n }\n }, [recipients, recipientInput?.recipients]);\n\n const label = t(variant === 'post' ? 'feed_edit_post' : 'feed_edit_comment');\n\n useEffect(() => {\n return () => {\n onUnmount?.(valueRef.current);\n };\n }, []);\n\n return (\n <Flex container={{ gap: 1, alignItems: 'end' }}>\n <Flex\n as={StyledInputContainer}\n ref={editTextAreaRef}\n container={{ direction: 'column', gap: 1 }}\n inert={progress ? '' : undefined}\n >\n {banners}\n\n {visibility === 'private' && !!recipientInput && (\n <FeedVisibilityControls\n visibilityMode='private'\n visibility='private'\n recipientInput={recipientInput}\n />\n )}\n\n <FeedRichText\n label={label}\n onChange={() => {\n const value = rteRef.current?.getPlainText();\n setEmptyEditText(value?.trim() === '');\n // TODO: onChange is running on mount. It shouldn't...\n setContentModified(value !== content);\n valueRef.current = value ?? '';\n }}\n onKeyDown={onKeyDown}\n defaultValue={defaultValue}\n ref={rteRef}\n />\n\n <Progress\n visible={!!progress}\n focusOnVisible\n placement='local'\n message={typeof progress === 'string' ? progress : undefined}\n />\n </Flex>\n <Flex as={StyledActions} container={{ direction: 'column', gap: 0.25, pad: [0.25, 0] }}>\n <Button\n variant='simple'\n as={FeedButton}\n onClick={() => onEditCancel?.(id)}\n icon\n label={t('cancel')}\n >\n <Icon name='times' />\n </Button>\n\n {/* AI Rewrite Button */}\n {onRewriteClick && (\n <Button\n variant='simple'\n disabled={emptyEditText || !!progress}\n as={FeedButton}\n onClick={() => setShowAIPopover(true)}\n icon\n label={t('ai_rewrite_title')}\n ref={setAIButtonEl}\n >\n <Icon name='polaris' />\n </Button>\n )}\n\n <Button\n as={FeedButton}\n disabled={emptyEditText || (!contentModified && !recipientsModified) || !!progress}\n variant='simple'\n onClick={handleEdit}\n icon\n label={t('update')}\n ref={postButtonRef}\n >\n <Icon name='send' />\n </Button>\n </Flex>\n\n {/* AI Rewrite Popover */}\n {aiButtonEl && showAIPopover && onRewriteClick && (\n <AIRewrite\n target={aiButtonEl}\n isGenerating={isGenerating}\n suggestion={hasSuggestionContent ? suggestion : undefined}\n onGenerate={handleGenerate}\n onSubmit={handleApplyRewrite}\n suggestionEditor={\n <FeedRichText\n ref={suggestionRteRef}\n label={t('ai_rewrite_result_label')}\n labelHidden\n disabled={isGenerating || !suggestion?.trim()}\n readOnly={isGenerating || !suggestion?.trim()}\n onChange={() =>\n setHasSuggestionContent(\n (suggestionRteRef.current?.getPlainText() ?? '').trim().length > 0\n )\n }\n />\n }\n onCancel={() => {\n setShowAIPopover(false);\n setSuggestion(undefined);\n setIsGenerating(false);\n aiButtonEl.focus();\n }}\n />\n )}\n </Flex>\n );\n};\n\nexport default FeedEditRegion;\n"]}
|
|
@@ -177,7 +177,7 @@ const FeedInputRegion = (props) => {
|
|
|
177
177
|
// Must trick input to believe there is no value when activated so that the same file may be added consecutively.
|
|
178
178
|
onClick: (event) => {
|
|
179
179
|
event.target.value = '';
|
|
180
|
-
} })] }), _jsx(FeedAttachments, { variant: variant, attachments: attachments, disabled: !!progress }), aiButtonEl && showAIPopover && onRewriteClick && (_jsx(AIRewrite, { target: aiButtonEl, isGenerating: isGenerating, suggestion: hasSuggestionContent ? suggestion : undefined, onGenerate: handleGenerate, onSubmit: handleApplyRewrite, suggestionEditor: _jsx(FeedRichText, { ref: suggestionRteRef, label: t('ai_rewrite_result_label'), labelHidden: true, disabled: isGenerating || !suggestion?.trim(), readOnly:
|
|
180
|
+
} })] }), _jsx(FeedAttachments, { variant: variant, attachments: attachments, disabled: !!progress }), aiButtonEl && showAIPopover && onRewriteClick && (_jsx(AIRewrite, { target: aiButtonEl, isGenerating: isGenerating, suggestion: hasSuggestionContent ? suggestion : undefined, onGenerate: handleGenerate, onSubmit: handleApplyRewrite, suggestionEditor: _jsx(FeedRichText, { ref: suggestionRteRef, label: t('ai_rewrite_result_label'), labelHidden: true, disabled: isGenerating || !suggestion?.trim(), readOnly: isGenerating || !suggestion?.trim(), onChange: () => setHasSuggestionContent((suggestionRteRef.current?.getPlainText() ?? '').trim().length > 0) }), onCancel: () => {
|
|
181
181
|
setShowAIPopover(false);
|
|
182
182
|
setSuggestion(undefined);
|
|
183
183
|
setIsGenerating(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedInputRegion.js","sourceRoot":"","sources":["../../../src/components/Feed/FeedInputRegion.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport type { FC, KeyboardEvent, MouseEvent } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n AIRewrite,\n Avatar,\n Button,\n defaultThemeProp,\n Flex,\n getActiveElement,\n Icon,\n isInstance,\n Progress,\n useAfterInitialEffect,\n useElement,\n useI18n,\n useLiveLog,\n usePrevious\n} from '@pega/cosmos-react-core';\nimport type { AIAction, ForwardProps } from '@pega/cosmos-react-core';\nimport { extractMentions, restoreMentionPlaceholders } from '@pega/cosmos-react-rte';\nimport type { RichTextEditorState } from '@pega/cosmos-react-rte';\n\nimport { FeedContext } from './Feed.context';\nimport FeedAttachments from './FeedAttachments';\nimport FeedButton from './FeedButton';\nimport FeedRichText from './FeedRichText';\nimport type { FeedInputRegionProps } from './Feed.types';\n\nconst StyledAvatar = styled(Avatar)(({ theme }) => {\n return css`\n margin-block-start: calc(0.5 * ${theme.base.spacing});\n `;\n});\n\nStyledAvatar.defaultProps = defaultThemeProp;\n\nconst StyledContent = styled.div`\n width: 100%;\n overflow-y: hidden;\n position: relative;\n`;\n\nexport const StyledActions = styled.div`\n ${FeedButton} + ${FeedButton} {\n margin-inline-start: 0;\n }\n`;\n\nStyledActions.defaultProps = defaultThemeProp;\n\nconst HiddenFileInput = styled.input`\n display: none;\n`;\n\nconst FeedInputRegion: FC<ForwardProps & FeedInputRegionProps> = (\n props: ForwardProps & FeedInputRegionProps\n) => {\n const {\n defaultValue,\n variant,\n id,\n banners,\n progress,\n onRewriteClick,\n attachments = [],\n onFilesAdded,\n onSubmit,\n rteRef,\n recipients,\n postType,\n postTypeMenu,\n visibility,\n visibilityControl,\n onUnmount\n } = props;\n\n const t = useI18n();\n const { announcePolite } = useLiveLog();\n const { setShowSearchResults } = useContext(FeedContext);\n const { avatarSrc, fullname, username, userStatus } = useContext(FeedContext).userInfo;\n\n const [emptyText, setEmptyText] = useState(true);\n const [attachmentEl, setAttachmentEl] = useElement<HTMLInputElement>();\n const [aiButtonEl, setAIButtonEl] = useElement<HTMLButtonElement>();\n const [showAIPopover, setShowAIPopover] = useState(false);\n const [isGenerating, setIsGenerating] = useState(false);\n const [suggestion, setSuggestion] = useState<string | undefined>(undefined);\n const [hasSuggestionContent, setHasSuggestionContent] = useState(false);\n const suggestionRteRef = useRef<RichTextEditorState>(null);\n\n // Sync AI-generated suggestion into the suggestion FeedRichText whenever it changes\n useEffect(() => {\n if (suggestion !== undefined) {\n suggestionRteRef.current?.clear();\n suggestionRteRef.current?.insertMarkdown?.(suggestion);\n setHasSuggestionContent(true);\n } else {\n suggestionRteRef.current?.clear();\n setHasSuggestionContent(false);\n }\n }, [suggestion]);\n const prevAttachments = usePrevious(attachments);\n const suppressNextAnnouncement = useRef(false);\n const postButtonRef = useRef<HTMLButtonElement>(null);\n const isSubmitButtonClicked = useRef(false);\n const previouslyFocusedElementRef = useRef<Element | null>(null);\n const valueRef = useRef(defaultValue ?? '');\n\n const handleSubmit = () => {\n setShowSearchResults?.(false);\n\n if ((!emptyText || attachments.length > 0) && attachments.every(x => !x.error)) {\n onSubmit({\n id,\n value: rteRef.current?.getPlainText() || '',\n attachments: attachments || [],\n username,\n postType,\n visibility,\n recipients: variant === 'post' ? recipients : undefined,\n clear: () => {\n // Clear the RTE content and reset focus state\n rteRef.current?.clear();\n rteRef.current?.focus();\n isSubmitButtonClicked.current = false;\n }\n });\n suppressNextAnnouncement.current = true;\n isSubmitButtonClicked.current = true;\n }\n };\n\n const handleGenerate = (rewriteAction: AIAction, additionalInstructions: string) => {\n const originalContent = rteRef.current?.getPlainText() || '';\n if (!originalContent) return;\n\n const { cleanText, mentionMap, userPlaceholders } = extractMentions(originalContent);\n\n // Capture in closure so concurrent Generate calls don't corrupt each other's restore map\n const capturedMentionMap = mentionMap;\n const capturedUserPlaceholders = userPlaceholders;\n\n setIsGenerating(true);\n setSuggestion(undefined);\n\n onRewriteClick?.(\n cleanText,\n rewriteAction,\n additionalInstructions,\n (rewrittenText: string) => {\n const restoredText = restoreMentionPlaceholders(\n rewrittenText,\n capturedMentionMap,\n capturedUserPlaceholders\n );\n setIsGenerating(false);\n setSuggestion(restoredText.trim() ? restoredText : undefined);\n },\n false\n );\n };\n\n const handleApplyRewrite = () => {\n const editedText = suggestionRteRef.current?.getPlainText() ?? suggestion ?? '';\n rteRef.current?.insertMarkdown?.(editedText);\n valueRef.current = editedText;\n\n // Manually update state since programmatic updates might not trigger onChange\n setEmptyText(editedText.trim() === '');\n\n // Close popover and reset AI state\n setShowAIPopover(false);\n setSuggestion(undefined);\n\n // Return focus to RTE\n rteRef.current?.focus();\n };\n\n // If the API call fails, progress will flip back to false without calling the success callback\n // Clear the loading state so the Generate button re-enables\n useAfterInitialEffect(() => {\n if (!progress) setIsGenerating(false);\n }, [progress]);\n\n const onKeyDown = (event: KeyboardEvent) => {\n if ((event.metaKey || event.ctrlKey) && event.key === 'Enter') handleSubmit();\n };\n\n const inputLabel =\n postType?.label || t(variant === 'post' ? 'feed_new_post' : 'feed_new_comment');\n const submitLabel = t(variant === 'post' ? 'feed_new_post_submit' : 'feed_new_comment_submit');\n\n // Using layout effect to capture the focused element prior to editor taking focus.\n useLayoutEffect(() => {\n previouslyFocusedElementRef.current = getActiveElement();\n\n return () => {\n // For reply variant, restore focus to the element that was previously focused\n\n const el = previouslyFocusedElementRef.current;\n if (variant === 'reply' && isInstance(el, HTMLElement) && el.isConnected) {\n el.focus();\n }\n };\n }, []);\n\n useEffect(() => {\n if (banners && isSubmitButtonClicked.current && postButtonRef.current) {\n postButtonRef.current.focus();\n isSubmitButtonClicked.current = false;\n }\n }, [banners]);\n\n useAfterInitialEffect(() => {\n if (!prevAttachments) return;\n\n if (prevAttachments.length !== attachments.length && !suppressNextAnnouncement.current) {\n const difference = attachments.length - prevAttachments.length;\n const absoluteDifference = Math.abs(difference);\n announcePolite({\n message: t(\n `feed_attachments_${difference > 0 ? 'added' : 'removed'}`,\n [absoluteDifference],\n {\n count: absoluteDifference\n }\n )\n });\n }\n suppressNextAnnouncement.current = false;\n }, [attachments.length]);\n\n useEffect(() => {\n return () => {\n onUnmount?.(valueRef.current);\n };\n }, []);\n\n return (\n <>\n <Flex container={{ alignItems: 'start' }}>\n <StyledAvatar\n name={fullname}\n size={variant === 'post' ? 'l' : 'm'}\n imageSrc={avatarSrc}\n status={userStatus}\n />\n\n <Flex\n as={StyledContent}\n container={{\n direction: 'column',\n gap: variant === 'post' ? 0.5 : 0,\n pad: [0.5, 0.5, 0.5, 1]\n }}\n inert={progress ? '' : undefined}\n >\n {(!!visibilityControl || !!banners) && postTypeMenu}\n {banners}\n {visibilityControl}\n\n <FeedRichText\n defaultValue={defaultValue}\n label={!!postTypeMenu && !visibilityControl && !banners ? postTypeMenu : inputLabel}\n onChange={() => {\n setEmptyText(rteRef.current?.getPlainText().trim() === '');\n valueRef.current = rteRef.current?.getPlainText() ?? '';\n }}\n onKeyDown={onKeyDown}\n ref={rteRef}\n />\n\n <Progress\n visible={!!progress}\n focusOnVisible\n placement='local'\n message={typeof progress === 'string' ? progress : undefined}\n />\n </Flex>\n\n <Flex\n as={StyledActions}\n container={{ direction: 'column', gap: 0.25, pad: [0.75, 0, 0.75, 0.5] }}\n item={{ alignSelf: 'end' }}\n >\n {onFilesAdded && (\n <Button\n variant='simple'\n disabled={!!progress}\n as={FeedButton}\n onClick={() => {\n setShowSearchResults?.(false);\n attachmentEl?.click();\n }}\n icon\n label={t('feed_attach_files')}\n >\n <Icon name='paper-clip' />\n </Button>\n )}\n\n {/* AI Rewrite Button */}\n {onRewriteClick && (\n <Button\n variant='simple'\n disabled={emptyText || !!progress}\n as={FeedButton}\n onClick={() => setShowAIPopover(true)}\n icon\n label={t('ai_rewrite_title')}\n ref={setAIButtonEl}\n >\n <Icon name='polaris' />\n </Button>\n )}\n\n {!progress && (\n <Button\n as={FeedButton}\n disabled={\n (emptyText && attachments.length === 0) ||\n attachments.some(x => x.error) ||\n !!progress\n }\n variant='simple'\n onClick={handleSubmit}\n icon\n label={submitLabel}\n ref={postButtonRef}\n >\n <Icon name='send' />\n </Button>\n )}\n </Flex>\n\n <HiddenFileInput\n ref={setAttachmentEl}\n type='file'\n multiple\n tabIndex={-1}\n onChange={() => {\n if (attachmentEl?.files) {\n onFilesAdded?.(Array.from(attachmentEl?.files));\n }\n }}\n // Must trick input to believe there is no value when activated so that the same file may be added consecutively.\n onClick={(event: MouseEvent) => {\n (event.target as HTMLInputElement).value = '';\n }}\n />\n </Flex>\n\n <FeedAttachments variant={variant} attachments={attachments} disabled={!!progress} />\n\n {/* AI Rewrite Popover */}\n {aiButtonEl && showAIPopover && onRewriteClick && (\n <AIRewrite\n target={aiButtonEl}\n isGenerating={isGenerating}\n suggestion={hasSuggestionContent ? suggestion : undefined}\n onGenerate={handleGenerate}\n onSubmit={handleApplyRewrite}\n suggestionEditor={\n <FeedRichText\n ref={suggestionRteRef}\n label={t('ai_rewrite_result_label')}\n labelHidden\n disabled={isGenerating || !suggestion?.trim()}\n readOnly={false}\n onChange={() =>\n setHasSuggestionContent(\n (suggestionRteRef.current?.getPlainText() ?? '').trim().length > 0\n )\n }\n />\n }\n onCancel={() => {\n setShowAIPopover(false);\n setSuggestion(undefined);\n setIsGenerating(false);\n aiButtonEl.focus();\n }}\n />\n )}\n </>\n );\n};\n\nexport default FeedInputRegion;\n"]}
|
|
1
|
+
{"version":3,"file":"FeedInputRegion.js","sourceRoot":"","sources":["../../../src/components/Feed/FeedInputRegion.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport type { FC, KeyboardEvent, MouseEvent } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n AIRewrite,\n Avatar,\n Button,\n defaultThemeProp,\n Flex,\n getActiveElement,\n Icon,\n isInstance,\n Progress,\n useAfterInitialEffect,\n useElement,\n useI18n,\n useLiveLog,\n usePrevious\n} from '@pega/cosmos-react-core';\nimport type { AIAction, ForwardProps } from '@pega/cosmos-react-core';\nimport { extractMentions, restoreMentionPlaceholders } from '@pega/cosmos-react-rte';\nimport type { RichTextEditorState } from '@pega/cosmos-react-rte';\n\nimport { FeedContext } from './Feed.context';\nimport FeedAttachments from './FeedAttachments';\nimport FeedButton from './FeedButton';\nimport FeedRichText from './FeedRichText';\nimport type { FeedInputRegionProps } from './Feed.types';\n\nconst StyledAvatar = styled(Avatar)(({ theme }) => {\n return css`\n margin-block-start: calc(0.5 * ${theme.base.spacing});\n `;\n});\n\nStyledAvatar.defaultProps = defaultThemeProp;\n\nconst StyledContent = styled.div`\n width: 100%;\n overflow-y: hidden;\n position: relative;\n`;\n\nexport const StyledActions = styled.div`\n ${FeedButton} + ${FeedButton} {\n margin-inline-start: 0;\n }\n`;\n\nStyledActions.defaultProps = defaultThemeProp;\n\nconst HiddenFileInput = styled.input`\n display: none;\n`;\n\nconst FeedInputRegion: FC<ForwardProps & FeedInputRegionProps> = (\n props: ForwardProps & FeedInputRegionProps\n) => {\n const {\n defaultValue,\n variant,\n id,\n banners,\n progress,\n onRewriteClick,\n attachments = [],\n onFilesAdded,\n onSubmit,\n rteRef,\n recipients,\n postType,\n postTypeMenu,\n visibility,\n visibilityControl,\n onUnmount\n } = props;\n\n const t = useI18n();\n const { announcePolite } = useLiveLog();\n const { setShowSearchResults } = useContext(FeedContext);\n const { avatarSrc, fullname, username, userStatus } = useContext(FeedContext).userInfo;\n\n const [emptyText, setEmptyText] = useState(true);\n const [attachmentEl, setAttachmentEl] = useElement<HTMLInputElement>();\n const [aiButtonEl, setAIButtonEl] = useElement<HTMLButtonElement>();\n const [showAIPopover, setShowAIPopover] = useState(false);\n const [isGenerating, setIsGenerating] = useState(false);\n const [suggestion, setSuggestion] = useState<string | undefined>(undefined);\n const [hasSuggestionContent, setHasSuggestionContent] = useState(false);\n const suggestionRteRef = useRef<RichTextEditorState>(null);\n\n // Sync AI-generated suggestion into the suggestion FeedRichText whenever it changes\n useEffect(() => {\n if (suggestion !== undefined) {\n suggestionRteRef.current?.clear();\n suggestionRteRef.current?.insertMarkdown?.(suggestion);\n setHasSuggestionContent(true);\n } else {\n suggestionRteRef.current?.clear();\n setHasSuggestionContent(false);\n }\n }, [suggestion]);\n const prevAttachments = usePrevious(attachments);\n const suppressNextAnnouncement = useRef(false);\n const postButtonRef = useRef<HTMLButtonElement>(null);\n const isSubmitButtonClicked = useRef(false);\n const previouslyFocusedElementRef = useRef<Element | null>(null);\n const valueRef = useRef(defaultValue ?? '');\n\n const handleSubmit = () => {\n setShowSearchResults?.(false);\n\n if ((!emptyText || attachments.length > 0) && attachments.every(x => !x.error)) {\n onSubmit({\n id,\n value: rteRef.current?.getPlainText() || '',\n attachments: attachments || [],\n username,\n postType,\n visibility,\n recipients: variant === 'post' ? recipients : undefined,\n clear: () => {\n // Clear the RTE content and reset focus state\n rteRef.current?.clear();\n rteRef.current?.focus();\n isSubmitButtonClicked.current = false;\n }\n });\n suppressNextAnnouncement.current = true;\n isSubmitButtonClicked.current = true;\n }\n };\n\n const handleGenerate = (rewriteAction: AIAction, additionalInstructions: string) => {\n const originalContent = rteRef.current?.getPlainText() || '';\n if (!originalContent) return;\n\n const { cleanText, mentionMap, userPlaceholders } = extractMentions(originalContent);\n\n // Capture in closure so concurrent Generate calls don't corrupt each other's restore map\n const capturedMentionMap = mentionMap;\n const capturedUserPlaceholders = userPlaceholders;\n\n setIsGenerating(true);\n setSuggestion(undefined);\n\n onRewriteClick?.(\n cleanText,\n rewriteAction,\n additionalInstructions,\n (rewrittenText: string) => {\n const restoredText = restoreMentionPlaceholders(\n rewrittenText,\n capturedMentionMap,\n capturedUserPlaceholders\n );\n setIsGenerating(false);\n setSuggestion(restoredText.trim() ? restoredText : undefined);\n },\n false\n );\n };\n\n const handleApplyRewrite = () => {\n const editedText = suggestionRteRef.current?.getPlainText() ?? suggestion ?? '';\n rteRef.current?.insertMarkdown?.(editedText);\n valueRef.current = editedText;\n\n // Manually update state since programmatic updates might not trigger onChange\n setEmptyText(editedText.trim() === '');\n\n // Close popover and reset AI state\n setShowAIPopover(false);\n setSuggestion(undefined);\n\n // Return focus to RTE\n rteRef.current?.focus();\n };\n\n // If the API call fails, progress will flip back to false without calling the success callback\n // Clear the loading state so the Generate button re-enables\n useAfterInitialEffect(() => {\n if (!progress) setIsGenerating(false);\n }, [progress]);\n\n const onKeyDown = (event: KeyboardEvent) => {\n if ((event.metaKey || event.ctrlKey) && event.key === 'Enter') handleSubmit();\n };\n\n const inputLabel =\n postType?.label || t(variant === 'post' ? 'feed_new_post' : 'feed_new_comment');\n const submitLabel = t(variant === 'post' ? 'feed_new_post_submit' : 'feed_new_comment_submit');\n\n // Using layout effect to capture the focused element prior to editor taking focus.\n useLayoutEffect(() => {\n previouslyFocusedElementRef.current = getActiveElement();\n\n return () => {\n // For reply variant, restore focus to the element that was previously focused\n\n const el = previouslyFocusedElementRef.current;\n if (variant === 'reply' && isInstance(el, HTMLElement) && el.isConnected) {\n el.focus();\n }\n };\n }, []);\n\n useEffect(() => {\n if (banners && isSubmitButtonClicked.current && postButtonRef.current) {\n postButtonRef.current.focus();\n isSubmitButtonClicked.current = false;\n }\n }, [banners]);\n\n useAfterInitialEffect(() => {\n if (!prevAttachments) return;\n\n if (prevAttachments.length !== attachments.length && !suppressNextAnnouncement.current) {\n const difference = attachments.length - prevAttachments.length;\n const absoluteDifference = Math.abs(difference);\n announcePolite({\n message: t(\n `feed_attachments_${difference > 0 ? 'added' : 'removed'}`,\n [absoluteDifference],\n {\n count: absoluteDifference\n }\n )\n });\n }\n suppressNextAnnouncement.current = false;\n }, [attachments.length]);\n\n useEffect(() => {\n return () => {\n onUnmount?.(valueRef.current);\n };\n }, []);\n\n return (\n <>\n <Flex container={{ alignItems: 'start' }}>\n <StyledAvatar\n name={fullname}\n size={variant === 'post' ? 'l' : 'm'}\n imageSrc={avatarSrc}\n status={userStatus}\n />\n\n <Flex\n as={StyledContent}\n container={{\n direction: 'column',\n gap: variant === 'post' ? 0.5 : 0,\n pad: [0.5, 0.5, 0.5, 1]\n }}\n inert={progress ? '' : undefined}\n >\n {(!!visibilityControl || !!banners) && postTypeMenu}\n {banners}\n {visibilityControl}\n\n <FeedRichText\n defaultValue={defaultValue}\n label={!!postTypeMenu && !visibilityControl && !banners ? postTypeMenu : inputLabel}\n onChange={() => {\n setEmptyText(rteRef.current?.getPlainText().trim() === '');\n valueRef.current = rteRef.current?.getPlainText() ?? '';\n }}\n onKeyDown={onKeyDown}\n ref={rteRef}\n />\n\n <Progress\n visible={!!progress}\n focusOnVisible\n placement='local'\n message={typeof progress === 'string' ? progress : undefined}\n />\n </Flex>\n\n <Flex\n as={StyledActions}\n container={{ direction: 'column', gap: 0.25, pad: [0.75, 0, 0.75, 0.5] }}\n item={{ alignSelf: 'end' }}\n >\n {onFilesAdded && (\n <Button\n variant='simple'\n disabled={!!progress}\n as={FeedButton}\n onClick={() => {\n setShowSearchResults?.(false);\n attachmentEl?.click();\n }}\n icon\n label={t('feed_attach_files')}\n >\n <Icon name='paper-clip' />\n </Button>\n )}\n\n {/* AI Rewrite Button */}\n {onRewriteClick && (\n <Button\n variant='simple'\n disabled={emptyText || !!progress}\n as={FeedButton}\n onClick={() => setShowAIPopover(true)}\n icon\n label={t('ai_rewrite_title')}\n ref={setAIButtonEl}\n >\n <Icon name='polaris' />\n </Button>\n )}\n\n {!progress && (\n <Button\n as={FeedButton}\n disabled={\n (emptyText && attachments.length === 0) ||\n attachments.some(x => x.error) ||\n !!progress\n }\n variant='simple'\n onClick={handleSubmit}\n icon\n label={submitLabel}\n ref={postButtonRef}\n >\n <Icon name='send' />\n </Button>\n )}\n </Flex>\n\n <HiddenFileInput\n ref={setAttachmentEl}\n type='file'\n multiple\n tabIndex={-1}\n onChange={() => {\n if (attachmentEl?.files) {\n onFilesAdded?.(Array.from(attachmentEl?.files));\n }\n }}\n // Must trick input to believe there is no value when activated so that the same file may be added consecutively.\n onClick={(event: MouseEvent) => {\n (event.target as HTMLInputElement).value = '';\n }}\n />\n </Flex>\n\n <FeedAttachments variant={variant} attachments={attachments} disabled={!!progress} />\n\n {/* AI Rewrite Popover */}\n {aiButtonEl && showAIPopover && onRewriteClick && (\n <AIRewrite\n target={aiButtonEl}\n isGenerating={isGenerating}\n suggestion={hasSuggestionContent ? suggestion : undefined}\n onGenerate={handleGenerate}\n onSubmit={handleApplyRewrite}\n suggestionEditor={\n <FeedRichText\n ref={suggestionRteRef}\n label={t('ai_rewrite_result_label')}\n labelHidden\n disabled={isGenerating || !suggestion?.trim()}\n readOnly={isGenerating || !suggestion?.trim()}\n onChange={() =>\n setHasSuggestionContent(\n (suggestionRteRef.current?.getPlainText() ?? '').trim().length > 0\n )\n }\n />\n }\n onCancel={() => {\n setShowAIPopover(false);\n setSuggestion(undefined);\n setIsGenerating(false);\n aiButtonEl.focus();\n }}\n />\n )}\n </>\n );\n};\n\nexport default FeedInputRegion;\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pega/cosmos-react-social",
|
|
3
|
-
"version": "10.0.0-build.2.
|
|
3
|
+
"version": "10.0.0-build.2.7",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE",
|
|
5
5
|
"author": "Pegasystems",
|
|
6
6
|
"sideEffects": [
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
"build": "tsc -b tsconfig.build.json"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@pega/cosmos-react-core": "10.0.0-build.2.
|
|
21
|
-
"@pega/cosmos-react-rte": "10.0.0-build.2.
|
|
22
|
-
"@pega/cosmos-react-work": "10.0.0-build.2.
|
|
20
|
+
"@pega/cosmos-react-core": "10.0.0-build.2.7",
|
|
21
|
+
"@pega/cosmos-react-rte": "10.0.0-build.2.7",
|
|
22
|
+
"@pega/cosmos-react-work": "10.0.0-build.2.7",
|
|
23
23
|
"@types/parse5": "^6.0.0",
|
|
24
24
|
"@types/react": "^17.0.62 || ^18.3.3",
|
|
25
25
|
"@types/react-dom": "^17.0.20 || ^18.3.0",
|