@red-hat-developer-hub/backstage-plugin-intelligent-assistant 3.2.0 → 4.1.0

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 (63) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/README.md +7 -10
  3. package/config.d.ts +27 -0
  4. package/dist/alpha.d.ts +21 -7
  5. package/dist/api/NotebooksApiClient.esm.js +10 -0
  6. package/dist/api/NotebooksApiClient.esm.js.map +1 -1
  7. package/dist/api/notebooksApi.esm.js.map +1 -1
  8. package/dist/components/LightSpeedChat.esm.js +50 -37
  9. package/dist/components/LightSpeedChat.esm.js.map +1 -1
  10. package/dist/components/LightspeedChatContainer.esm.js +7 -5
  11. package/dist/components/LightspeedChatContainer.esm.js.map +1 -1
  12. package/dist/components/McpServersSettings.esm.js +4 -3
  13. package/dist/components/McpServersSettings.esm.js.map +1 -1
  14. package/dist/components/notebooks/AddDocumentModal.esm.js +181 -66
  15. package/dist/components/notebooks/AddDocumentModal.esm.js.map +1 -1
  16. package/dist/components/notebooks/DocumentSidebar.esm.js +258 -27
  17. package/dist/components/notebooks/DocumentSidebar.esm.js.map +1 -1
  18. package/dist/components/notebooks/FileListItem.esm.js +15 -9
  19. package/dist/components/notebooks/FileListItem.esm.js.map +1 -1
  20. package/dist/components/notebooks/NotebookCard.esm.js +71 -14
  21. package/dist/components/notebooks/NotebookCard.esm.js.map +1 -1
  22. package/dist/components/notebooks/NotebookView.esm.js +202 -42
  23. package/dist/components/notebooks/NotebookView.esm.js.map +1 -1
  24. package/dist/components/notebooks/NotebooksTab.esm.js.map +1 -1
  25. package/dist/components/notebooks/OverwriteConfirmModal.esm.js +122 -42
  26. package/dist/components/notebooks/OverwriteConfirmModal.esm.js.map +1 -1
  27. package/dist/components/notebooks/UploadResourceScreen.esm.js +0 -1
  28. package/dist/components/notebooks/UploadResourceScreen.esm.js.map +1 -1
  29. package/dist/const.esm.js +2 -1
  30. package/dist/const.esm.js.map +1 -1
  31. package/dist/hooks/notebooks/useInlineEdit.esm.js +60 -0
  32. package/dist/hooks/notebooks/useInlineEdit.esm.js.map +1 -0
  33. package/dist/hooks/notebooks/useLightspeedNotebooksPermission.esm.js +4 -3
  34. package/dist/hooks/notebooks/useLightspeedNotebooksPermission.esm.js.map +1 -1
  35. package/dist/hooks/notebooks/useRenameDocument.esm.js +50 -0
  36. package/dist/hooks/notebooks/useRenameDocument.esm.js.map +1 -0
  37. package/dist/hooks/notebooks/useRenameNotebook.esm.js +48 -1
  38. package/dist/hooks/notebooks/useRenameNotebook.esm.js.map +1 -1
  39. package/dist/hooks/notebooks/useRenameNotebookWithAlert.esm.js +34 -0
  40. package/dist/hooks/notebooks/useRenameNotebookWithAlert.esm.js.map +1 -0
  41. package/dist/hooks/useLightspeedDeletePermission.esm.js +2 -2
  42. package/dist/hooks/useLightspeedDeletePermission.esm.js.map +1 -1
  43. package/dist/hooks/useLightspeedUpdatePermission.esm.js +2 -2
  44. package/dist/hooks/useLightspeedUpdatePermission.esm.js.map +1 -1
  45. package/dist/hooks/useLightspeedViewPermission.esm.js +6 -4
  46. package/dist/hooks/useLightspeedViewPermission.esm.js.map +1 -1
  47. package/dist/translations/de.esm.js +31 -17
  48. package/dist/translations/de.esm.js.map +1 -1
  49. package/dist/translations/es.esm.js +31 -17
  50. package/dist/translations/es.esm.js.map +1 -1
  51. package/dist/translations/fr.esm.js +31 -17
  52. package/dist/translations/fr.esm.js.map +1 -1
  53. package/dist/translations/it.esm.js +31 -17
  54. package/dist/translations/it.esm.js.map +1 -1
  55. package/dist/translations/ja.esm.js +31 -17
  56. package/dist/translations/ja.esm.js.map +1 -1
  57. package/dist/translations/ref.esm.js +32 -18
  58. package/dist/translations/ref.esm.js.map +1 -1
  59. package/dist/utils/notebook-upload-runner.esm.js +16 -0
  60. package/dist/utils/notebook-upload-runner.esm.js.map +1 -0
  61. package/package.json +4 -3
  62. package/dist/components/notebooks/RenameNotebookModal.esm.js +0 -187
  63. package/dist/components/notebooks/RenameNotebookModal.esm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"NotebookView.esm.js","sources":["../../../src/components/notebooks/NotebookView.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\n\nimport { makeStyles, Typography } from '@material-ui/core';\nimport {\n ChatbotContent,\n ChatbotFooter,\n MessageBar,\n MessageProps,\n} from '@patternfly/chatbot';\nimport {\n Alert,\n AlertActionCloseButton,\n AlertGroup,\n AlertVariant,\n Button,\n Drawer,\n DrawerContent,\n DrawerContentBody,\n DrawerPanelContent,\n Tooltip,\n type AlertProps,\n} from '@patternfly/react-core';\nimport { TimesIcon } from '@patternfly/react-icons';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\nimport {\n NOTEBOOK_MAX_FILES,\n TEMP_CONVERSATION_ID,\n UNTITLED_NOTEBOOK_NAME,\n} from '../../const';\nimport { useCreateNotebookMessage } from '../../hooks/notebooks/useCreateNotebookMessage';\nimport {\n useDocumentStatusPolling,\n type PendingUpload,\n} from '../../hooks/notebooks/useDocumentStatusPolling';\nimport { useConversationMessages } from '../../hooks/useConversationMessages';\nimport { CreateMessageVariables } from '../../hooks/useCreateCoversationMessage';\nimport { useNotebookWelcomePrompts } from '../../hooks/useNotebookWelcomePrompts';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { NotebookSessionMetadata, SessionDocument } from '../../types';\nimport { ChatbotFootnoteWithIcon } from '../../utils/lightspeed-chatbox-utils';\nimport { LightspeedChatBox } from '../LightspeedChatBox';\nimport { AddDocumentModal } from './AddDocumentModal';\nimport { DeleteDocumentModal } from './DeleteDocumentModal';\nimport { DocumentSidebar } from './DocumentSidebar';\nimport { OverwriteConfirmModal } from './OverwriteConfirmModal';\nimport { AddCircleFilledIcon, SidebarExpandIcon } from './SidebarCollapseIcon';\nimport { UploadResourceScreen } from './UploadResourceScreen';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n height: '100%',\n backgroundColor: 'var(--pf-t--global--background--color--primary--default)',\n },\n drawerContainer: {\n flex: 1,\n minHeight: 0,\n '& .pf-v6-c-drawer__panel, & .pf-v5-c-drawer__panel': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default) !important',\n },\n '& .pf-v6-c-drawer__panel-main, & .pf-v5-c-drawer__panel-main': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default) !important',\n },\n '& .pf-v6-c-drawer__panel-body, & .pf-v5-c-drawer__panel-body': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default) !important',\n },\n '& .pf-v6-c-drawer__splitter, & .pf-v5-c-drawer__splitter': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n },\n expandStrip: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: theme.spacing(1.5),\n gap: theme.spacing(1),\n borderRight: '1px solid var(--pf-t--global--border--color--default)',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n addIconButton: {\n padding: 0,\n minWidth: 0,\n lineHeight: 1,\n },\n mainArea: {\n display: 'flex',\n flexDirection: 'row',\n height: '100%',\n minWidth: 0,\n },\n topBar: {\n display: 'flex',\n justifyContent: 'flex-end',\n padding: `${theme.spacing(1.5)}px ${theme.spacing(2)}px`,\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n closeButton: {\n textTransform: 'none',\n },\n mainContent: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n },\n drawerContentBody: {\n backgroundColor: 'var(--pf-t--global--background--color--primary--default)',\n height: '100%',\n },\n contentColumn: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minWidth: 0,\n minHeight: 0,\n overflow: 'hidden',\n },\n notebookDisclaimerStrip: {\n width: '100%',\n maxWidth: 'unset',\n margin: 0,\n padding: `0 0 ${theme.spacing(1)}px`,\n boxSizing: 'border-box',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n '& .pf-v6-c-alert, & .pf-v5-c-alert': {\n backgroundColor:\n 'var(--pf-t--global--background--color--secondary--default) !important',\n },\n '& .pf-v6-c-alert__content, & .pf-v5-c-alert__content': {\n backgroundColor: 'transparent !important',\n },\n '& .pf-v6-c-alert__body, & .pf-v5-c-alert__body': {\n backgroundColor: 'transparent !important',\n },\n '& .pf-v6-c-alert__description, & .pf-v5-c-alert__description': {\n backgroundColor: 'transparent !important',\n },\n },\n notebookDisclaimerInner: {\n width: '95%',\n maxWidth: 'unset',\n margin: '0 auto',\n },\n toastAlertGroup: {\n '--pf-v6-c-alert-group--m-toast--InsetInlineEnd': `${theme.spacing(2.5)}px`,\n '--pf-v6-c-alert-group--m-toast--InsetBlockStart': `${theme.spacing(2.5)}px`,\n '--pf-v6-c-alert-group--m-toast--MaxWidth': '350px',\n '--pf-v6-c-alert-group--m-toast--ZIndex': '9999',\n },\n toastAlert: {\n maxWidth: '350px',\n '& .pf-v6-c-alert__title': {\n margin: 0,\n },\n },\n welcomeContainer: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n overflow: 'auto',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n notebookEmptyUpload: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0,\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n notebookContentArea: {\n width: '95%',\n maxWidth: 'unset',\n margin: `${theme.spacing(3)}px auto 0 auto`,\n padding: 0,\n },\n notebookHeading: {\n fontSize: '2rem',\n fontWeight: 500,\n lineHeight: 1.25,\n padding: `${theme.spacing(1)}px 0`,\n },\n notebookSummary: {\n fontSize: '1rem',\n lineHeight: 2,\n color: 'var(--pf-t--global--text--color--regular)',\n paddingTop: theme.spacing(0.5),\n },\n promptSuggestions: {\n display: 'flex',\n flexWrap: 'wrap' as const,\n gap: theme.spacing(1),\n width: '95%',\n maxWidth: 'unset',\n margin: `${theme.spacing(3)}px auto ${theme.spacing(3)}px auto`,\n justifyContent: 'flex-start',\n },\n promptPill: {\n appearance: 'none' as const,\n background: 'transparent',\n border: `1px solid var(--pf-t--global--border--color--default)`,\n borderRadius: '999px',\n padding: `${theme.spacing(1)}px ${theme.spacing(2.5)}px`,\n fontSize: '0.875rem',\n color: 'var(--pf-t--global--text--color--regular)',\n cursor: 'pointer',\n transition: 'background-color 0.15s, border-color 0.15s',\n '&:hover': {\n backgroundColor:\n 'var(--pf-t--global--background--color--secondary--default)',\n borderColor: 'var(--pf-t--global--border--color--hover)',\n },\n },\n footer: {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default) !important',\n '&>.pf-chatbot__footer-container': {\n width: '95% !important',\n maxWidth: 'unset !important',\n },\n '& .pf-chatbot__message-bar': {\n backgroundColor:\n theme.palette.type === 'light'\n ? theme.palette.grey[100]\n : 'var(--pf-t--global--background--color--secondary--default)',\n },\n '& .pf-chatbot__button--send, & .pf-chatbot__button--microphone': {\n '--pf-v6-c-button--BorderRadius':\n 'var(--pf-t--global--border--radius--pill)',\n borderRadius: 'var(--pf-t--global--border--radius--pill) !important',\n },\n },\n chatContent: {\n minHeight: 0,\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n overflow: 'auto',\n },\n}));\n\ntype NotebookViewProps = {\n sessionId: string;\n notebookName?: string;\n documents?: SessionDocument[];\n isDocumentsFetching?: boolean;\n metadata?: NotebookSessionMetadata;\n topicSummary?: string;\n userName?: string;\n avatar?: string;\n profileLoading: boolean;\n topicRestrictionEnabled: boolean;\n onClose: () => void;\n};\n\nexport const NotebookView = ({\n sessionId,\n notebookName = UNTITLED_NOTEBOOK_NAME,\n documents = [],\n isDocumentsFetching = false,\n metadata,\n topicSummary,\n userName,\n avatar,\n profileLoading,\n topicRestrictionEnabled,\n onClose,\n}: NotebookViewProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const configApi = useApi(configApiRef);\n const notebooksApi = useApi(notebooksApiRef);\n const { mutateAsync: notebookCreateMessage } = useCreateNotebookMessage();\n\n // Use notebook-specific model from config instead of chat's selected model\n const notebookModel =\n configApi.getOptionalString(\n 'intelligent-assistant.notebooks.queryDefaults.model',\n ) || '';\n\n const [conversationId, setConversationId] = useState(\n metadata?.conversation_id ?? TEMP_CONVERSATION_ID,\n );\n const [isSendButtonDisabled, setIsSendButtonDisabled] = useState(false);\n const [announcement, setAnnouncement] = useState<string | undefined>(\n undefined,\n );\n const [deletingDocumentIds, setDeletingDocumentIds] = useState<Set<string>>(\n new Set(),\n );\n const [deleteDocumentTarget, setDeleteDocumentTarget] = useState<{\n id: string;\n name: string;\n } | null>(null);\n\n const handleDeleteDocument = useCallback((documentId: string) => {\n setDeleteDocumentTarget({ id: documentId, name: documentId });\n }, []);\n\n const onComplete = useCallback(\n (message: string) => {\n setIsSendButtonDisabled(false);\n setAnnouncement(`Message from Bot: ${message}`);\n queryClient.invalidateQueries({\n queryKey: ['conversationMessages', conversationId],\n });\n },\n [queryClient, conversationId],\n );\n\n const onStart = useCallback((conv_id: string) => {\n setConversationId(conv_id);\n }, []);\n\n const createMessageAdapter = useCallback(\n async (vars: CreateMessageVariables) => {\n return notebookCreateMessage({\n prompt: vars.prompt,\n sessionId,\n });\n },\n [notebookCreateMessage, sessionId],\n );\n\n const { conversationMessages, handleInputPrompt, scrollToBottomRef } =\n useConversationMessages(\n conversationId,\n userName,\n notebookModel,\n '',\n avatar,\n onComplete,\n onStart,\n createMessageAdapter,\n );\n\n const [messages, setMessages] =\n useState<MessageProps[]>(conversationMessages);\n\n useEffect(() => {\n setMessages(conversationMessages);\n }, [conversationMessages]);\n\n const sendMessage = useCallback(\n (message: string | number) => {\n setAnnouncement(\n t('conversation.announcement.userMessage' as any, {\n prompt: message.toString(),\n }),\n );\n handleInputPrompt(message.toString(), []);\n setIsSendButtonDisabled(true);\n },\n [handleInputPrompt, t],\n );\n\n const notebookPrompts = useNotebookWelcomePrompts();\n const welcomePrompts = notebookPrompts.map(title => ({\n title,\n onClick: () => sendMessage(title),\n }));\n\n const [sidebarCollapsed, setSidebarCollapsed] = useState(false);\n const [isUploadModalOpen, setIsUploadModalOpen] = useState(false);\n const [uploadingFileNames, setUploadingFileNames] = useState<string[]>([]);\n const [pendingUploads, setPendingUploads] = useState<PendingUpload[]>([]);\n const [toastAlerts, setToastAlerts] = useState<Partial<AlertProps>[]>([]);\n const processedIds = useRef<Set<string>>(new Set());\n const [completedFileNames, setCompletedFileNames] = useState<Set<string>>(\n new Set(),\n );\n const [filesToOverwrite, setFilesToOverwrite] = useState<File[]>([]);\n const [isOverwriteModalOpen, setIsOverwriteModalOpen] = useState(false);\n const [filesToAddToModal, setFilesToAddToModal] = useState<File[]>([]);\n\n const confirmDeleteDocument = useCallback(async () => {\n if (!deleteDocumentTarget) return;\n const { id: documentId, name: documentName } = deleteDocumentTarget;\n setDeleteDocumentTarget(null);\n setDeletingDocumentIds(prev => new Set(prev).add(documentId));\n try {\n await notebooksApi.deleteDocument(sessionId, documentId);\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'documents', sessionId],\n });\n setToastAlerts(prev => [\n {\n key: Date.now() + documentId,\n title: (t as Function)('notebook.document.delete.success', {\n documentName,\n }) as string,\n variant: 'success',\n },\n ...prev,\n ]);\n } finally {\n setDeletingDocumentIds(prev => {\n const next = new Set(prev);\n next.delete(documentId);\n return next;\n });\n }\n }, [deleteDocumentTarget, notebooksApi, sessionId, queryClient, t]);\n\n const handleOpenUploadModal = () => setIsUploadModalOpen(true);\n const handleCloseUploadModal = () => setIsUploadModalOpen(false);\n\n const handleFilesUploading = (files: File[]) => {\n setUploadingFileNames(prev => {\n const newNames = files\n .map(f => f.name)\n .filter(name => !prev.includes(name));\n return [...prev, ...newNames];\n });\n };\n\n const handleUploadStarted = (info: {\n fileName: string;\n documentId: string;\n }) => {\n processedIds.current.delete(info.documentId);\n setPendingUploads(prev => [\n ...prev,\n { fileName: info.fileName, documentId: info.documentId },\n ]);\n };\n\n const handleUploadFailed = (fileName: string) => {\n setUploadingFileNames(prev => prev.filter(n => n !== fileName));\n setToastAlerts(prev => [\n {\n key: Date.now() + fileName,\n title: (t as Function)('notebook.upload.failed', {\n fileName,\n }) as string,\n variant: 'danger',\n },\n ...prev,\n ]);\n };\n\n const handleDuplicatesFound = (files: File[]) => {\n setFilesToOverwrite(files);\n setIsOverwriteModalOpen(true);\n };\n\n const handleOverwriteConfirm = () => {\n const files = filesToOverwrite;\n setIsOverwriteModalOpen(false);\n setFilesToOverwrite([]);\n\n if (files.length === 0) return;\n\n setFilesToAddToModal(files);\n };\n\n const handleFilesAddedToModal = () => {\n setFilesToAddToModal([]);\n };\n\n const handleOverwriteCancel = () => {\n setIsOverwriteModalOpen(false);\n setFilesToOverwrite([]);\n };\n\n const pollingResults = useDocumentStatusPolling(sessionId, pendingUploads);\n\n useEffect(() => {\n const completedOrFailed = pollingResults.filter(\n r =>\n (r.status === 'completed' ||\n r.status === 'failed' ||\n r.status === 'cancelled') &&\n !processedIds.current.has(r.documentId),\n );\n\n if (completedOrFailed.length === 0) return;\n\n const idsToRemove = new Set<string>();\n const namesToRemove = new Set<string>();\n const newAlerts: Partial<AlertProps>[] = [];\n\n const newCompletedNames = new Set<string>();\n\n for (const result of completedOrFailed) {\n processedIds.current.add(result.documentId);\n idsToRemove.add(result.documentId);\n namesToRemove.add(result.fileName);\n if (result.status === 'completed') {\n newCompletedNames.add(result.fileName);\n }\n\n if (result.status !== 'completed') {\n const errorDetail = result.error ? ` ${result.error}` : '';\n newAlerts.push({\n key: Date.now() + result.documentId,\n title: `${\n (t as Function)('notebook.upload.failed', {\n fileName: result.fileName,\n }) as string\n }${errorDetail}`,\n variant: 'danger',\n });\n }\n }\n\n setPendingUploads(prev => prev.filter(u => !idsToRemove.has(u.documentId)));\n setUploadingFileNames(prev =>\n prev.filter(name => !namesToRemove.has(name)),\n );\n if (newCompletedNames.size > 0) {\n setCompletedFileNames(prev => new Set([...prev, ...newCompletedNames]));\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'documents', sessionId],\n });\n }\n setToastAlerts(prev => [...newAlerts, ...prev]);\n }, [pollingResults, t, queryClient, sessionId]);\n\n const handleRemoveToastAlert = (key: React.Key) => {\n setToastAlerts(prev => prev.filter(a => a.key !== key));\n };\n\n const totalDocumentCount = documents.length + uploadingFileNames.length;\n const hasUploadsInProgress = pendingUploads.length > 0 || isDocumentsFetching;\n const hasNoDocuments = documents.length === 0;\n const isAddDisabled =\n totalDocumentCount >= NOTEBOOK_MAX_FILES || hasUploadsInProgress;\n\n const panelContent = (\n <DrawerPanelContent\n isResizable\n defaultSize=\"310px\"\n minSize=\"232px\"\n maxSize=\"50%\"\n resizeAriaLabel={t('notebook.view.sidebar.resize')}\n >\n <DocumentSidebar\n notebookName={notebookName}\n documents={documents}\n uploadingFileNames={uploadingFileNames}\n completedFileNames={completedFileNames}\n deletingDocumentIds={deletingDocumentIds}\n collapsed={sidebarCollapsed}\n hasUploadsInProgress={hasUploadsInProgress}\n onToggleCollapse={() => setSidebarCollapsed(prev => !prev)}\n onAddDocument={handleOpenUploadModal}\n onDeleteDocument={handleDeleteDocument}\n />\n </DrawerPanelContent>\n );\n\n const renderNotebookDisclaimerAlert = () => (\n <div className={classes.notebookDisclaimerStrip}>\n <div className={classes.notebookDisclaimerInner}>\n <Alert isInline variant=\"info\" title={t('aria.important')}>\n {t('disclaimer.withoutValidation')}\n </Alert>\n </div>\n </div>\n );\n\n const renderMainContent = () => {\n if (hasNoDocuments && messages.length === 0) {\n return (\n <Typography component=\"span\" className={classes.notebookEmptyUpload}>\n <UploadResourceScreen\n onUploadClick={handleOpenUploadModal}\n isProcessing={uploadingFileNames.length > 0}\n />\n </Typography>\n );\n }\n if (messages.length > 0) {\n return (\n <ChatbotContent className={classes.chatContent}>\n <LightspeedChatBox\n userName={userName}\n messages={messages}\n profileLoading={profileLoading}\n announcement={announcement}\n ref={scrollToBottomRef}\n welcomePrompts={[]}\n conversationId={conversationId}\n isStreaming={isSendButtonDisabled}\n topicRestrictionEnabled={topicRestrictionEnabled}\n showSourcesChipPopover\n />\n </ChatbotContent>\n );\n }\n return (\n <div className={classes.welcomeContainer}>\n <div style={{ flex: 1 }} />\n {renderNotebookDisclaimerAlert()}\n <div className={classes.notebookContentArea}>\n <Typography className={classes.notebookHeading}>\n {notebookName}\n </Typography>\n {topicSummary && (\n <Typography className={classes.notebookSummary}>\n {topicSummary}\n </Typography>\n )}\n </div>\n {welcomePrompts.length > 0 && (\n <div className={classes.promptSuggestions}>\n {welcomePrompts.map(prompt => (\n <button\n key={prompt.title}\n type=\"button\"\n className={classes.promptPill}\n onClick={prompt.onClick}\n >\n {prompt.title}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n };\n\n return (\n <div className={classes.root}>\n {toastAlerts.length > 0 && (\n <AlertGroup\n hasAnimations\n isToast\n isLiveRegion\n className={classes.toastAlertGroup}\n >\n {toastAlerts.map(({ key, title, variant }) => (\n <Alert\n key={key}\n variant={AlertVariant[variant ?? 'success']}\n title={title}\n className={classes.toastAlert}\n timeout={2000}\n onTimeout={() => handleRemoveToastAlert(key as React.Key)}\n actionClose={\n <AlertActionCloseButton\n title={title as string}\n variantLabel={`${variant ?? 'success'} alert`}\n onClose={() => handleRemoveToastAlert(key as React.Key)}\n />\n }\n />\n ))}\n </AlertGroup>\n )}\n <Drawer\n isExpanded={!sidebarCollapsed}\n isInline\n position=\"start\"\n className={classes.drawerContainer}\n >\n <DrawerContent\n panelContent={!sidebarCollapsed ? panelContent : undefined}\n >\n <DrawerContentBody className={classes.drawerContentBody}>\n <div className={classes.mainArea}>\n {sidebarCollapsed && (\n <div className={classes.expandStrip}>\n <Tooltip\n content={t('notebook.view.sidebar.expand')}\n position=\"right\"\n >\n <Button\n variant=\"plain\"\n onClick={() => setSidebarCollapsed(false)}\n aria-label={t('notebook.view.sidebar.expand')}\n size=\"sm\"\n >\n <SidebarExpandIcon />\n </Button>\n </Tooltip>\n <Tooltip\n content={(() => {\n if (hasUploadsInProgress)\n return t('notebook.view.documents.uploadsInProgress');\n if (isAddDisabled)\n return t('notebook.view.documents.maxReached');\n return t('notebook.view.documents.add');\n })()}\n position=\"right\"\n >\n <Typography component=\"span\">\n <Button\n variant=\"plain\"\n className={classes.addIconButton}\n onClick={\n isAddDisabled ? undefined : handleOpenUploadModal\n }\n aria-label={t('notebook.view.documents.add')}\n isDisabled={isAddDisabled}\n >\n <AddCircleFilledIcon disabled={isAddDisabled} />\n </Button>\n </Typography>\n </Tooltip>\n </div>\n )}\n\n <div className={classes.contentColumn}>\n <div className={classes.topBar}>\n <Button\n variant=\"link\"\n className={classes.closeButton}\n onClick={onClose}\n icon={<TimesIcon />}\n iconPosition=\"end\"\n >\n {t('notebook.view.close')}\n </Button>\n </div>\n\n <div className={classes.mainContent}>{renderMainContent()}</div>\n\n {hasNoDocuments &&\n messages.length === 0 &&\n renderNotebookDisclaimerAlert()}\n\n <ChatbotFooter className={classes.footer}>\n {hasNoDocuments ? (\n <Tooltip\n content={t('notebook.view.input.disabledTooltip')}\n position=\"top\"\n >\n <div>\n <MessageBar\n hasAttachButton={false}\n hasMicrophoneButton={false}\n hasStopButton={false}\n isSendButtonDisabled\n isDisabled\n onSendMessage={sendMessage}\n placeholder={t('notebook.view.input.placeholder')}\n />\n </div>\n </Tooltip>\n ) : (\n <MessageBar\n hasAttachButton={false}\n hasMicrophoneButton\n hasStopButton={false}\n isSendButtonDisabled={isSendButtonDisabled}\n onSendMessage={sendMessage}\n placeholder={t('notebook.view.input.placeholder')}\n />\n )}\n <ChatbotFootnoteWithIcon label={t('footer.accuracy.label')} />\n </ChatbotFooter>\n </div>\n </div>\n </DrawerContentBody>\n </DrawerContent>\n </Drawer>\n\n <AddDocumentModal\n isOpen={isUploadModalOpen}\n onClose={handleCloseUploadModal}\n sessionId={sessionId}\n existingDocumentNames={documents.map(d => d.title)}\n hasUploadsInProgress={hasUploadsInProgress}\n onFilesUploading={handleFilesUploading}\n onUploadStarted={handleUploadStarted}\n onUploadFailed={handleUploadFailed}\n onDuplicatesFound={handleDuplicatesFound}\n filesToAdd={filesToAddToModal}\n onFilesAdded={handleFilesAddedToModal}\n />\n\n <OverwriteConfirmModal\n isOpen={isOverwriteModalOpen}\n onClose={handleOverwriteCancel}\n onConfirm={handleOverwriteConfirm}\n fileNames={filesToOverwrite.map(f => f.name)}\n />\n\n <DeleteDocumentModal\n isOpen={deleteDocumentTarget !== null}\n onClose={() => setDeleteDocumentTarget(null)}\n onConfirm={confirmDeleteDocument}\n documentName={deleteDocumentTarget?.name ?? ''}\n />\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NotebookView.esm.js","sources":["../../../src/components/notebooks/NotebookView.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\n\nimport { makeStyles, Typography } from '@material-ui/core';\nimport {\n ChatbotContent,\n ChatbotFooter,\n MessageBar,\n MessageProps,\n} from '@patternfly/chatbot';\nimport {\n Alert,\n AlertActionCloseButton,\n AlertGroup,\n AlertVariant,\n Button,\n Drawer,\n DrawerContent,\n DrawerContentBody,\n DrawerPanelContent,\n Tooltip,\n type AlertProps,\n} from '@patternfly/react-core';\nimport { PlusIcon, TimesIcon } from '@patternfly/react-icons';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\nimport {\n NOTEBOOK_MAX_FILES,\n TEMP_CONVERSATION_ID,\n UNTITLED_NOTEBOOK_NAME,\n} from '../../const';\nimport { useCreateNotebookMessage } from '../../hooks/notebooks/useCreateNotebookMessage';\nimport {\n useDocumentStatusPolling,\n type PendingUpload,\n} from '../../hooks/notebooks/useDocumentStatusPolling';\nimport { useRenameDocument } from '../../hooks/notebooks/useRenameDocument';\nimport { useRenameNotebookWithAlert } from '../../hooks/notebooks/useRenameNotebookWithAlert';\nimport { useUploadDocument } from '../../hooks/notebooks/useUploadDocument';\nimport { useConversationMessages } from '../../hooks/useConversationMessages';\nimport { CreateMessageVariables } from '../../hooks/useCreateCoversationMessage';\nimport { useNotebookWelcomePrompts } from '../../hooks/useNotebookWelcomePrompts';\nimport { useStopConversation } from '../../hooks/useStopConversation';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { NotebookSessionMetadata, SessionDocument } from '../../types';\nimport { ChatbotFootnoteWithIcon } from '../../utils/lightspeed-chatbox-utils';\nimport { runFileUploads } from '../../utils/notebook-upload-runner';\nimport { LightspeedChatBox } from '../LightspeedChatBox';\nimport { AddDocumentModal } from './AddDocumentModal';\nimport { DeleteDocumentModal } from './DeleteDocumentModal';\nimport { DocumentSidebar } from './DocumentSidebar';\nimport { OverwriteConfirmModal } from './OverwriteConfirmModal';\nimport { AddCircleFilledIcon, SidebarExpandIcon } from './SidebarCollapseIcon';\nimport { UploadResourceScreen } from './UploadResourceScreen';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n height: '100%',\n backgroundColor: 'var(--pf-t--global--background--color--primary--default)',\n },\n drawerContainer: {\n flex: 1,\n minHeight: 0,\n '& .pf-v6-c-drawer__panel, & .pf-v5-c-drawer__panel': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default) !important',\n },\n '& .pf-v6-c-drawer__panel-main, & .pf-v5-c-drawer__panel-main': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default) !important',\n },\n '& .pf-v6-c-drawer__panel-body, & .pf-v5-c-drawer__panel-body': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default) !important',\n },\n '& .pf-v6-c-drawer__splitter, & .pf-v5-c-drawer__splitter': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n },\n expandStrip: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: theme.spacing(1.5),\n gap: theme.spacing(1),\n borderRight: '1px solid var(--pf-t--global--border--color--default)',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n addIconButton: {\n padding: 0,\n minWidth: 0,\n lineHeight: 1,\n },\n mainArea: {\n display: 'flex',\n flexDirection: 'row',\n height: '100%',\n minWidth: 0,\n },\n topBar: {\n display: 'flex',\n justifyContent: 'flex-end',\n padding: `${theme.spacing(1.5)}px ${theme.spacing(2)}px`,\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n closeButton: {\n textTransform: 'none',\n },\n mainContent: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n },\n drawerContentBody: {\n backgroundColor: 'var(--pf-t--global--background--color--primary--default)',\n height: '100%',\n },\n contentColumn: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minWidth: 0,\n minHeight: 0,\n overflow: 'hidden',\n },\n notebookDisclaimerStrip: {\n width: '100%',\n maxWidth: 'unset',\n margin: 0,\n padding: `0 0 ${theme.spacing(1)}px`,\n boxSizing: 'border-box',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n '& .pf-v6-c-alert, & .pf-v5-c-alert': {\n backgroundColor:\n 'var(--pf-t--global--background--color--secondary--default) !important',\n },\n '& .pf-v6-c-alert__content, & .pf-v5-c-alert__content': {\n backgroundColor: 'transparent !important',\n },\n '& .pf-v6-c-alert__body, & .pf-v5-c-alert__body': {\n backgroundColor: 'transparent !important',\n },\n '& .pf-v6-c-alert__description, & .pf-v5-c-alert__description': {\n backgroundColor: 'transparent !important',\n },\n },\n notebookDisclaimerInner: {\n width: '95%',\n maxWidth: 'unset',\n margin: '0 auto',\n },\n toastAlertGroup: {\n '--pf-v6-c-alert-group--m-toast--InsetInlineEnd': `${theme.spacing(2.5)}px`,\n '--pf-v6-c-alert-group--m-toast--InsetBlockStart': `${theme.spacing(2.5)}px`,\n '--pf-v6-c-alert-group--m-toast--MaxWidth': '350px',\n '--pf-v6-c-alert-group--m-toast--ZIndex': '9999',\n },\n toastAlert: {\n maxWidth: '350px',\n '& .pf-v6-c-alert__title': {\n margin: 0,\n },\n },\n welcomeContainer: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n overflow: 'auto',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n notebookEmptyUpload: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0,\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n notebookContentArea: {\n width: '95%',\n maxWidth: 'unset',\n margin: `${theme.spacing(3)}px auto 0 auto`,\n padding: 0,\n },\n notebookHeading: {\n fontSize: '2rem',\n fontWeight: 500,\n lineHeight: 1.25,\n padding: `${theme.spacing(1)}px 0`,\n },\n notebookSummary: {\n fontSize: '1rem',\n lineHeight: 2,\n color: 'var(--pf-t--global--text--color--regular)',\n paddingTop: theme.spacing(0.5),\n },\n promptSuggestions: {\n display: 'flex',\n flexWrap: 'wrap' as const,\n gap: theme.spacing(1),\n width: '95%',\n maxWidth: 'unset',\n margin: `${theme.spacing(3)}px auto ${theme.spacing(3)}px auto`,\n justifyContent: 'flex-start',\n },\n promptPill: {\n appearance: 'none' as const,\n background: 'transparent',\n border: `1px solid var(--pf-t--global--border--color--default)`,\n borderRadius: '999px',\n padding: `${theme.spacing(1)}px ${theme.spacing(2.5)}px`,\n fontSize: '0.875rem',\n color: 'var(--pf-t--global--text--color--regular)',\n cursor: 'pointer',\n transition: 'background-color 0.15s, border-color 0.15s',\n '&:hover': {\n backgroundColor:\n 'var(--pf-t--global--background--color--secondary--default)',\n borderColor: 'var(--pf-t--global--border--color--hover)',\n },\n },\n footer: {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default) !important',\n '&>.pf-chatbot__footer-container': {\n width: '95% !important',\n maxWidth: 'unset !important',\n },\n '& .pf-chatbot__message-bar': {\n backgroundColor:\n theme.palette.type === 'light'\n ? theme.palette.grey[100]\n : 'var(--pf-t--global--background--color--secondary--default)',\n },\n '& .pf-chatbot__button--stop, & .pf-chatbot__button--attach, & .pf-chatbot__button--send, & .pf-chatbot__button--microphone':\n {\n '--pf-v6-c-button--BorderRadius':\n 'var(--pf-t--global--border--radius--pill)',\n borderRadius: 'var(--pf-t--global--border--radius--pill) !important',\n },\n },\n messageBar: {\n border: '1px solid var(--pf-t--global--border--color--default)',\n borderRadius: 24,\n padding: theme.spacing(0.5),\n '&::after': {\n display: 'none',\n },\n },\n addResourceButton: {\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: 4,\n display: 'inline-flex',\n alignItems: 'center',\n color: 'inherit',\n '&:focus-visible': {\n outline: '2px solid var(--pf-t--global--border--color--brand--default)',\n outlineOffset: 2,\n },\n marginLeft: theme.spacing(2),\n },\n chatContent: {\n minHeight: 0,\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n overflow: 'auto',\n },\n}));\n\ntype NotebookViewProps = {\n sessionId: string;\n notebookName?: string;\n documents?: SessionDocument[];\n isDocumentsFetching?: boolean;\n metadata?: NotebookSessionMetadata;\n topicSummary?: string;\n userName?: string;\n avatar?: string;\n profileLoading: boolean;\n topicRestrictionEnabled: boolean;\n onClose: () => void;\n};\n\nexport const NotebookView = ({\n sessionId,\n notebookName = UNTITLED_NOTEBOOK_NAME,\n documents = [],\n isDocumentsFetching = false,\n metadata,\n topicSummary,\n userName,\n avatar,\n profileLoading,\n topicRestrictionEnabled,\n onClose,\n}: NotebookViewProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const configApi = useApi(configApiRef);\n const notebooksApi = useApi(notebooksApiRef);\n const { mutateAsync: notebookCreateMessage } = useCreateNotebookMessage();\n\n // Use notebook-specific model from config instead of chat's selected model\n const notebookModel =\n configApi.getOptionalString(\n 'intelligent-assistant.notebooks.queryDefaults.model',\n ) || '';\n\n const [conversationId, setConversationId] = useState(\n metadata?.conversation_id ?? TEMP_CONVERSATION_ID,\n );\n const [isSendButtonDisabled, setIsSendButtonDisabled] = useState(false);\n const [requestId, setRequestId] = useState('');\n const { mutate: stopConversation } = useStopConversation();\n const wasStoppedByUserRef = useRef(false);\n const autoDeleteRef = useRef({\n isUntitled: false,\n isEmpty: true,\n noPending: true,\n noUploading: true,\n noChat: true,\n });\n const [announcement, setAnnouncement] = useState<string | undefined>(\n undefined,\n );\n const [deletingDocumentIds, setDeletingDocumentIds] = useState<Set<string>>(\n new Set(),\n );\n const [deleteDocumentTarget, setDeleteDocumentTarget] = useState<{\n id: string;\n name: string;\n } | null>(null);\n\n const handleDeleteDocument = useCallback((documentId: string) => {\n setDeleteDocumentTarget({ id: documentId, name: documentId });\n }, []);\n\n const { mutateAsync: renameDocument } = useRenameDocument();\n\n const onComplete = useCallback(\n (message: string) => {\n setIsSendButtonDisabled(false);\n if (!wasStoppedByUserRef.current) {\n setAnnouncement(`Message from Bot: ${message}`);\n }\n wasStoppedByUserRef.current = false;\n queryClient.invalidateQueries({\n queryKey: ['conversationMessages', conversationId],\n });\n },\n [queryClient, conversationId],\n );\n\n const onStart = useCallback((conv_id: string) => {\n setConversationId(conv_id);\n }, []);\n\n const createMessageAdapter = useCallback(\n async (vars: CreateMessageVariables) => {\n return notebookCreateMessage({\n prompt: vars.prompt,\n sessionId,\n });\n },\n [notebookCreateMessage, sessionId],\n );\n\n const onRequestIdReady = useCallback((rid: string) => {\n setRequestId(rid);\n }, []);\n\n const { conversationMessages, handleInputPrompt, scrollToBottomRef } =\n useConversationMessages(\n conversationId,\n userName,\n notebookModel,\n '',\n avatar,\n onComplete,\n onStart,\n createMessageAdapter,\n onRequestIdReady,\n );\n\n const [messages, setMessages] =\n useState<MessageProps[]>(conversationMessages);\n\n useEffect(() => {\n setMessages(conversationMessages);\n }, [conversationMessages]);\n\n const sendMessage = useCallback(\n (message: string | number) => {\n wasStoppedByUserRef.current = false;\n setAnnouncement(\n t('conversation.announcement.userMessage' as any, {\n prompt: message.toString(),\n }),\n );\n handleInputPrompt(message.toString(), []);\n setIsSendButtonDisabled(true);\n },\n [handleInputPrompt, t],\n );\n\n const handleStopButton = useCallback(() => {\n wasStoppedByUserRef.current = true;\n if (requestId) {\n stopConversation(requestId);\n setRequestId('');\n }\n setIsSendButtonDisabled(false);\n setAnnouncement(t('conversation.announcement.responseStopped'));\n }, [requestId, stopConversation, t]);\n\n const notebookPrompts = useNotebookWelcomePrompts();\n const welcomePrompts = notebookPrompts.map(title => ({\n title,\n onClick: () => sendMessage(title),\n }));\n\n const uploadMutation = useUploadDocument();\n\n const [sidebarCollapsed, setSidebarCollapsed] = useState(false);\n const [isUploadModalOpen, setIsUploadModalOpen] = useState(false);\n const [uploadingFileNames, setUploadingFileNames] = useState<string[]>([]);\n const [pendingUploads, setPendingUploads] = useState<PendingUpload[]>([]);\n const [toastAlerts, setToastAlerts] = useState<Partial<AlertProps>[]>([]);\n const processedIds = useRef<Set<string>>(new Set());\n const [completedFileNames, setCompletedFileNames] = useState<Set<string>>(\n new Set(),\n );\n const [filesToOverwrite, setFilesToOverwrite] = useState<File[]>([]);\n const [allFilesForOverwrite, setAllFilesForOverwrite] = useState<File[]>([]);\n const [isOverwriteModalOpen, setIsOverwriteModalOpen] = useState(false);\n const [filesToAddToModal, setFilesToAddToModal] = useState<File[]>([]);\n\n autoDeleteRef.current = {\n isUntitled: notebookName === UNTITLED_NOTEBOOK_NAME,\n isEmpty: documents.length === 0 && completedFileNames.size === 0,\n noPending: !pendingUploads.length,\n noUploading: !uploadingFileNames.length,\n noChat: conversationId === TEMP_CONVERSATION_ID,\n };\n\n useEffect(() => {\n return () => {\n const currentNotebook = autoDeleteRef.current;\n if (\n currentNotebook.isUntitled &&\n currentNotebook.isEmpty &&\n currentNotebook.noPending &&\n currentNotebook.noUploading &&\n currentNotebook.noChat\n ) {\n notebooksApi\n .deleteSession(sessionId)\n .then(() => {\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'sessions'],\n });\n })\n .catch(() => {});\n } else {\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'sessions'],\n });\n }\n };\n }, [notebooksApi, sessionId, queryClient]);\n\n const handleRenameDocument = useCallback(\n async (documentId: string, newTitle: string) => {\n try {\n await renameDocument({ sessionId, documentId, newTitle });\n } catch {\n setToastAlerts(prev => [\n {\n key: Date.now() + documentId,\n title: (t as Function)('notebook.document.rename.error', {\n documentName: documentId,\n }) as string,\n variant: 'danger',\n },\n ...prev,\n ]);\n }\n },\n [renameDocument, sessionId, t],\n );\n const handleRenameNotebook = useRenameNotebookWithAlert({\n setAlerts: setToastAlerts,\n getNotebookName: () => notebookName,\n });\n\n const confirmDeleteDocument = useCallback(async () => {\n if (!deleteDocumentTarget) return;\n const { id: documentId, name: documentName } = deleteDocumentTarget;\n setDeleteDocumentTarget(null);\n setDeletingDocumentIds(prev => new Set(prev).add(documentId));\n try {\n await notebooksApi.deleteDocument(sessionId, documentId);\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'documents', sessionId],\n });\n setToastAlerts(prev => [\n {\n key: Date.now() + documentId,\n title: (t as Function)('notebook.document.delete.success', {\n documentName,\n }) as string,\n variant: 'success',\n },\n ...prev,\n ]);\n } finally {\n setDeletingDocumentIds(prev => {\n const next = new Set(prev);\n next.delete(documentId);\n return next;\n });\n }\n }, [deleteDocumentTarget, notebooksApi, sessionId, queryClient, t]);\n\n const handleOpenUploadModal = () => setIsUploadModalOpen(true);\n const handleCloseUploadModal = () => setIsUploadModalOpen(false);\n\n const handleCloseNotebook = () => {\n onClose();\n };\n\n const handleFilesUploading = (files: File[]) => {\n setUploadingFileNames(prev => {\n const newNames = files\n .map(f => f.name)\n .filter(name => !prev.includes(name));\n return [...prev, ...newNames];\n });\n };\n\n const handleUploadStarted = (info: {\n fileName: string;\n documentId: string;\n }) => {\n processedIds.current.delete(info.documentId);\n setPendingUploads(prev => [\n ...prev,\n { fileName: info.fileName, documentId: info.documentId },\n ]);\n };\n\n const handleUploadFailed = (fileName: string) => {\n setUploadingFileNames(prev => prev.filter(n => n !== fileName));\n setToastAlerts(prev => [\n {\n key: Date.now() + fileName,\n title: (t as Function)('notebook.upload.failed', {\n fileName,\n }) as string,\n variant: 'danger',\n },\n ...prev,\n ]);\n };\n\n const handleDuplicatesFound = (duplicateFiles: File[], allFiles: File[]) => {\n setFilesToOverwrite(duplicateFiles);\n setAllFilesForOverwrite(allFiles);\n setIsUploadModalOpen(false);\n setIsOverwriteModalOpen(true);\n };\n\n const handleOverwriteConfirm = (filesToUpload: File[]) => {\n setIsOverwriteModalOpen(false);\n setFilesToOverwrite([]);\n setAllFilesForOverwrite([]);\n\n if (filesToUpload.length === 0) return;\n\n runFileUploads(uploadMutation, sessionId, filesToUpload, {\n onUploading: handleFilesUploading,\n onStarted: handleUploadStarted,\n onFailed: handleUploadFailed,\n });\n };\n\n const handleFilesAddedToModal = () => {\n setFilesToAddToModal([]);\n };\n\n const handleOverwriteBack = () => {\n setIsOverwriteModalOpen(false);\n setFilesToAddToModal(allFilesForOverwrite);\n setFilesToOverwrite([]);\n setAllFilesForOverwrite([]);\n setIsUploadModalOpen(true);\n };\n\n const handleOverwriteCancel = () => {\n setIsOverwriteModalOpen(false);\n setFilesToOverwrite([]);\n setAllFilesForOverwrite([]);\n };\n\n const pollingResults = useDocumentStatusPolling(sessionId, pendingUploads);\n\n useEffect(() => {\n const completedOrFailed = pollingResults.filter(\n r =>\n (r.status === 'completed' ||\n r.status === 'failed' ||\n r.status === 'cancelled') &&\n !processedIds.current.has(r.documentId),\n );\n\n if (completedOrFailed.length === 0) return;\n\n const idsToRemove = new Set<string>();\n const namesToRemove = new Set<string>();\n const newAlerts: Partial<AlertProps>[] = [];\n\n const newCompletedNames = new Set<string>();\n\n for (const result of completedOrFailed) {\n processedIds.current.add(result.documentId);\n idsToRemove.add(result.documentId);\n namesToRemove.add(result.fileName);\n if (result.status === 'completed') {\n newCompletedNames.add(result.fileName);\n }\n\n if (result.status !== 'completed') {\n const errorDetail = result.error ? ` ${result.error}` : '';\n newAlerts.push({\n key: Date.now() + result.documentId,\n title: `${\n (t as Function)('notebook.upload.failed', {\n fileName: result.fileName,\n }) as string\n }${errorDetail}`,\n variant: 'danger',\n });\n }\n }\n\n setPendingUploads(prev => prev.filter(u => !idsToRemove.has(u.documentId)));\n setUploadingFileNames(prev =>\n prev.filter(name => !namesToRemove.has(name)),\n );\n if (newCompletedNames.size > 0) {\n setCompletedFileNames(prev => new Set([...prev, ...newCompletedNames]));\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'documents', sessionId],\n });\n }\n setToastAlerts(prev => [...newAlerts, ...prev]);\n }, [pollingResults, t, queryClient, sessionId]);\n\n const handleRemoveToastAlert = (key: React.Key) => {\n setToastAlerts(prev => prev.filter(a => a.key !== key));\n };\n\n const totalDocumentCount = documents.length + uploadingFileNames.length;\n const hasUploadsInProgress = pendingUploads.length > 0 || isDocumentsFetching;\n const hasNoDocuments = documents.length === 0;\n const isAddDisabled =\n totalDocumentCount >= NOTEBOOK_MAX_FILES || hasUploadsInProgress;\n\n const panelContent = (\n <DrawerPanelContent\n isResizable\n defaultSize=\"310px\"\n minSize=\"232px\"\n maxSize=\"50%\"\n resizeAriaLabel={t('notebook.view.sidebar.resize')}\n >\n <DocumentSidebar\n notebookName={notebookName}\n documents={documents}\n uploadingFileNames={uploadingFileNames}\n completedFileNames={completedFileNames}\n deletingDocumentIds={deletingDocumentIds}\n collapsed={sidebarCollapsed}\n hasUploadsInProgress={hasUploadsInProgress}\n onToggleCollapse={() => setSidebarCollapsed(prev => !prev)}\n onAddDocument={handleOpenUploadModal}\n onDeleteDocument={handleDeleteDocument}\n onRenameDocument={handleRenameDocument}\n onRenameNotebook={newName => handleRenameNotebook(sessionId, newName)}\n />\n </DrawerPanelContent>\n );\n\n const renderNotebookDisclaimerAlert = () => (\n <div className={classes.notebookDisclaimerStrip}>\n <div className={classes.notebookDisclaimerInner}>\n <Alert isInline variant=\"info\" title={t('aria.important')}>\n {t('disclaimer.withoutValidation')}\n </Alert>\n </div>\n </div>\n );\n\n const renderMainContent = () => {\n if (hasNoDocuments && messages.length === 0) {\n return (\n <Typography component=\"span\" className={classes.notebookEmptyUpload}>\n <UploadResourceScreen\n onUploadClick={handleOpenUploadModal}\n isProcessing={uploadingFileNames.length > 0}\n />\n </Typography>\n );\n }\n if (messages.length > 0) {\n return (\n <ChatbotContent className={classes.chatContent}>\n <LightspeedChatBox\n userName={userName}\n messages={messages}\n profileLoading={profileLoading}\n announcement={announcement}\n ref={scrollToBottomRef}\n welcomePrompts={[]}\n conversationId={conversationId}\n isStreaming={isSendButtonDisabled}\n topicRestrictionEnabled={topicRestrictionEnabled}\n showSourcesChipPopover\n />\n </ChatbotContent>\n );\n }\n return (\n <div className={classes.welcomeContainer}>\n <div style={{ flex: 1 }} />\n {renderNotebookDisclaimerAlert()}\n <div className={classes.notebookContentArea}>\n <Typography className={classes.notebookHeading}>\n {notebookName}\n </Typography>\n {topicSummary && (\n <Typography className={classes.notebookSummary}>\n {topicSummary}\n </Typography>\n )}\n </div>\n {welcomePrompts.length > 0 && (\n <div className={classes.promptSuggestions}>\n {welcomePrompts.map(prompt => (\n <button\n key={prompt.title}\n type=\"button\"\n className={classes.promptPill}\n onClick={prompt.onClick}\n >\n {prompt.title}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n };\n\n return (\n <div className={classes.root}>\n {toastAlerts.length > 0 && (\n <AlertGroup\n hasAnimations\n isToast\n isLiveRegion\n className={classes.toastAlertGroup}\n >\n {toastAlerts.map(({ key, title, variant }) => (\n <Alert\n key={key}\n variant={AlertVariant[variant ?? 'success']}\n title={title}\n className={classes.toastAlert}\n timeout={2000}\n onTimeout={() => handleRemoveToastAlert(key as React.Key)}\n actionClose={\n <AlertActionCloseButton\n title={title as string}\n variantLabel={`${variant ?? 'success'} alert`}\n onClose={() => handleRemoveToastAlert(key as React.Key)}\n />\n }\n />\n ))}\n </AlertGroup>\n )}\n <Drawer\n isExpanded={!sidebarCollapsed}\n isInline\n position=\"start\"\n className={classes.drawerContainer}\n >\n <DrawerContent\n panelContent={!sidebarCollapsed ? panelContent : undefined}\n >\n <DrawerContentBody className={classes.drawerContentBody}>\n <div className={classes.mainArea}>\n {sidebarCollapsed && (\n <div className={classes.expandStrip}>\n <Tooltip\n content={t('notebook.view.sidebar.expand')}\n position=\"right\"\n >\n <Button\n variant=\"plain\"\n onClick={() => setSidebarCollapsed(false)}\n aria-label={t('notebook.view.sidebar.expand')}\n size=\"sm\"\n >\n <SidebarExpandIcon />\n </Button>\n </Tooltip>\n <Tooltip\n content={(() => {\n if (hasUploadsInProgress)\n return t('notebook.view.documents.uploadsInProgress');\n if (isAddDisabled)\n return t('notebook.view.documents.maxReached');\n return t('notebook.view.documents.add');\n })()}\n position=\"right\"\n >\n <Typography component=\"span\">\n <Button\n variant=\"plain\"\n className={classes.addIconButton}\n onClick={\n isAddDisabled ? undefined : handleOpenUploadModal\n }\n aria-label={t('notebook.view.documents.add')}\n isDisabled={isAddDisabled}\n >\n <AddCircleFilledIcon disabled={isAddDisabled} />\n </Button>\n </Typography>\n </Tooltip>\n </div>\n )}\n\n <div className={classes.contentColumn}>\n <div className={classes.topBar}>\n <Button\n variant=\"link\"\n className={classes.closeButton}\n onClick={handleCloseNotebook}\n icon={<TimesIcon />}\n iconPosition=\"end\"\n >\n {t('notebook.view.close')}\n </Button>\n </div>\n\n <div className={classes.mainContent}>{renderMainContent()}</div>\n\n {hasNoDocuments &&\n messages.length === 0 &&\n renderNotebookDisclaimerAlert()}\n\n <ChatbotFooter className={classes.footer}>\n {(() => {\n const addResourceAction = (\n <button\n type=\"button\"\n onClick={() => handleOpenUploadModal()}\n aria-label={t('notebook.view.documents.add')}\n className={classes.addResourceButton}\n >\n <PlusIcon style={{ width: 16, height: 16 }} />\n </button>\n );\n return hasNoDocuments ? (\n <Tooltip\n content={t('notebook.view.input.disabledTooltip')}\n position=\"top\"\n >\n <div>\n <MessageBar\n className={classes.messageBar}\n hasAttachButton={false}\n hasMicrophoneButton={false}\n hasStopButton={false}\n isSendButtonDisabled\n isDisabled\n onSendMessage={sendMessage}\n placeholder={t('notebook.view.input.placeholder')}\n forceMultilineLayout\n additionalActions={addResourceAction}\n buttonProps={{\n send: {\n tooltipContent: t('tooltip.send'),\n },\n }}\n />\n </div>\n </Tooltip>\n ) : (\n <MessageBar\n className={classes.messageBar}\n hasAttachButton={false}\n hasMicrophoneButton\n hasStopButton={isSendButtonDisabled}\n handleStopButton={\n isSendButtonDisabled ? handleStopButton : undefined\n }\n isSendButtonDisabled={isSendButtonDisabled}\n onSendMessage={sendMessage}\n placeholder={t('notebook.view.input.placeholder')}\n forceMultilineLayout\n additionalActions={addResourceAction}\n buttonProps={{\n microphone: {\n tooltipContent: {\n active: t('tooltip.microphone.active'),\n inactive: t('tooltip.microphone.inactive'),\n },\n },\n send: {\n tooltipContent: t('tooltip.send'),\n },\n }}\n />\n );\n })()}\n <ChatbotFootnoteWithIcon label={t('footer.accuracy.label')} />\n </ChatbotFooter>\n </div>\n </div>\n </DrawerContentBody>\n </DrawerContent>\n </Drawer>\n\n <AddDocumentModal\n isOpen={isUploadModalOpen}\n onClose={handleCloseUploadModal}\n sessionId={sessionId}\n existingDocumentNames={documents.map(d => d.title)}\n hasUploadsInProgress={hasUploadsInProgress}\n onFilesUploading={handleFilesUploading}\n onUploadStarted={handleUploadStarted}\n onUploadFailed={handleUploadFailed}\n onDuplicatesFound={handleDuplicatesFound}\n filesToAdd={filesToAddToModal}\n onFilesAdded={handleFilesAddedToModal}\n />\n\n <OverwriteConfirmModal\n isOpen={isOverwriteModalOpen}\n onClose={handleOverwriteCancel}\n onConfirm={handleOverwriteConfirm}\n onBack={handleOverwriteBack}\n allFiles={allFilesForOverwrite}\n duplicateFileNames={filesToOverwrite.map(f => f.name)}\n />\n\n <DeleteDocumentModal\n isOpen={deleteDocumentTarget !== null}\n onClose={() => setDeleteDocumentTarget(null)}\n onConfirm={confirmDeleteDocument}\n documentName={deleteDocumentTarget?.name ?? ''}\n />\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"NotebooksTab.esm.js","sources":["../../../src/components/notebooks/NotebooksTab.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { TranslationFunction } from '@backstage/core-plugin-api/alpha';\n\nimport { Typography } from '@material-ui/core';\nimport { Button } from '@patternfly/react-core';\nimport { PlusCircleIcon } from '@patternfly/react-icons';\nimport { CatalogIcon } from '@patternfly/react-icons/dist/esm/icons';\n\nimport { intelligentAssistantTranslationRef } from '../../translations/ref';\nimport { NotebookSession } from '../../types';\nimport { NotebookCard } from './NotebookCard';\n\ntype NotebooksTabProps = {\n notebooks: NotebookSession[];\n hasNotebooks: boolean;\n classes: Record<string, string>;\n openNotebookMenuId: string | null;\n setOpenNotebookMenuId: React.Dispatch<React.SetStateAction<string | null>>;\n onSelectNotebook: (notebook: NotebookSession) => void;\n onRename: (sessionId: string) => void;\n onDelete: (sessionId: string) => void;\n onCreateNotebook: () => void;\n t: TranslationFunction<typeof intelligentAssistantTranslationRef.T>;\n};\n\nexport const NotebooksTab = ({\n notebooks,\n hasNotebooks,\n classes,\n openNotebookMenuId,\n setOpenNotebookMenuId,\n onSelectNotebook,\n onRename,\n onDelete,\n onCreateNotebook,\n t,\n}: NotebooksTabProps) => (\n <div className={classes.notebooksContainer}>\n <div className={classes.notebooksHeader}>\n <Typography variant=\"h6\" className={classes.notebooksHeading}>\n {t('notebooks.title')}\n </Typography>\n {hasNotebooks && (\n <Button\n variant=\"primary\"\n className={classes.notebooksAction}\n icon={<PlusCircleIcon />}\n onClick={onCreateNotebook}\n >\n {t('notebooks.empty.action')}\n </Button>\n )}\n </div>\n {!hasNotebooks ? (\n <div className={classes.notebooksEmptyState}>\n <CatalogIcon className={classes.notebooksIcon} />\n <Typography variant=\"h6\" className={classes.notebooksHeadingEmpty}>\n {t('notebooks.empty.title')}\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n className={classes.notebooksDescription}\n >\n {t('notebooks.empty.description')}\n </Typography>\n <Button\n variant=\"primary\"\n className={classes.notebooksActionEmpty}\n onClick={onCreateNotebook}\n >\n {t('notebooks.empty.action')}\n </Button>\n </div>\n ) : (\n <div className={classes.notebooksGrid}>\n {notebooks.map(notebook => (\n <NotebookCard\n key={notebook.session_id}\n notebook={notebook}\n classes={classes}\n openNotebookMenuId={openNotebookMenuId}\n setOpenNotebookMenuId={setOpenNotebookMenuId}\n onClick={onSelectNotebook}\n onRename={onRename}\n onDelete={onDelete}\n t={t}\n />\n ))}\n </div>\n )}\n </div>\n);\n"],"names":[],"mappings":";;;;;;;AAwCO,MAAM,eAAe,CAAC;AAAA,EAC3B,SAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,kBAAA;AAAA,EACA,qBAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,qBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,kBAAA,EACtB,QAAA,EAAA;AAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,eAAA,EACtB,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAQ,IAAA,EAAK,SAAA,EAAW,QAAQ,gBAAA,EACzC,QAAA,EAAA,CAAA,CAAE,iBAAiB,CAAA,EACtB,CAAA;AAAA,IACC,YAAA,oBACC,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,SAAA;AAAA,QACR,WAAW,OAAA,CAAQ,eAAA;AAAA,QACnB,IAAA,sBAAO,cAAA,EAAA,EAAe,CAAA;AAAA,QACtB,OAAA,EAAS,gBAAA;AAAA,QAER,YAAE,wBAAwB;AAAA;AAAA;AAC7B,GAAA,EAEJ,CAAA;AAAA,EACC,CAAC,YAAA,mBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,QAAQ,mBAAA,EACtB,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAW,OAAA,CAAQ,aAAA,EAAe,CAAA;AAAA,oBAC/C,GAAA,CAAC,cAAW,OAAA,EAAQ,IAAA,EAAK,WAAW,OAAA,CAAQ,qBAAA,EACzC,QAAA,EAAA,CAAA,CAAE,uBAAuB,CAAA,EAC5B,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,KAAA,EAAM,eAAA;AAAA,QACN,WAAW,OAAA,CAAQ,oBAAA;AAAA,QAElB,YAAE,6BAA6B;AAAA;AAAA,KAClC;AAAA,oBACA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,SAAA;AAAA,QACR,WAAW,OAAA,CAAQ,oBAAA;AAAA,QACnB,OAAA,EAAS,gBAAA;AAAA,QAER,YAAE,wBAAwB;AAAA;AAAA;AAC7B,GAAA,EACF,CAAA,uBAEC,KAAA,EAAA,EAAI,SAAA,EAAW,QAAQ,aAAA,EACrB,QAAA,EAAA,SAAA,CAAU,IAAI,CAAA,QAAA,qBACb,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MAEC,QAAA;AAAA,MACA,OAAA;AAAA,MACA,kBAAA;AAAA,MACA,qBAAA;AAAA,MACA,OAAA,EAAS,gBAAA;AAAA,MACT,QAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KAAA;AAAA,IARK,QAAA,CAAS;AAAA,GAUjB,CAAA,EACH;AAAA,CAAA,EAEJ;;;;"}
1
+ {"version":3,"file":"NotebooksTab.esm.js","sources":["../../../src/components/notebooks/NotebooksTab.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { TranslationFunction } from '@backstage/core-plugin-api/alpha';\n\nimport { Typography } from '@material-ui/core';\nimport { Button } from '@patternfly/react-core';\nimport { PlusCircleIcon } from '@patternfly/react-icons';\nimport { CatalogIcon } from '@patternfly/react-icons/dist/esm/icons';\n\nimport { intelligentAssistantTranslationRef } from '../../translations/ref';\nimport { NotebookSession } from '../../types';\nimport { NotebookCard } from './NotebookCard';\n\ntype NotebooksTabProps = {\n notebooks: NotebookSession[];\n hasNotebooks: boolean;\n classes: Record<string, string>;\n openNotebookMenuId: string | null;\n setOpenNotebookMenuId: React.Dispatch<React.SetStateAction<string | null>>;\n onSelectNotebook: (notebook: NotebookSession) => void;\n onRename: (sessionId: string, newName: string) => void;\n onDelete: (sessionId: string) => void;\n onCreateNotebook: () => void;\n t: TranslationFunction<typeof intelligentAssistantTranslationRef.T>;\n};\n\nexport const NotebooksTab = ({\n notebooks,\n hasNotebooks,\n classes,\n openNotebookMenuId,\n setOpenNotebookMenuId,\n onSelectNotebook,\n onRename,\n onDelete,\n onCreateNotebook,\n t,\n}: NotebooksTabProps) => (\n <div className={classes.notebooksContainer}>\n <div className={classes.notebooksHeader}>\n <Typography variant=\"h6\" className={classes.notebooksHeading}>\n {t('notebooks.title')}\n </Typography>\n {hasNotebooks && (\n <Button\n variant=\"primary\"\n className={classes.notebooksAction}\n icon={<PlusCircleIcon />}\n onClick={onCreateNotebook}\n >\n {t('notebooks.empty.action')}\n </Button>\n )}\n </div>\n {!hasNotebooks ? (\n <div className={classes.notebooksEmptyState}>\n <CatalogIcon className={classes.notebooksIcon} />\n <Typography variant=\"h6\" className={classes.notebooksHeadingEmpty}>\n {t('notebooks.empty.title')}\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n className={classes.notebooksDescription}\n >\n {t('notebooks.empty.description')}\n </Typography>\n <Button\n variant=\"primary\"\n className={classes.notebooksActionEmpty}\n onClick={onCreateNotebook}\n >\n {t('notebooks.empty.action')}\n </Button>\n </div>\n ) : (\n <div className={classes.notebooksGrid}>\n {notebooks.map(notebook => (\n <NotebookCard\n key={notebook.session_id}\n notebook={notebook}\n classes={classes}\n openNotebookMenuId={openNotebookMenuId}\n setOpenNotebookMenuId={setOpenNotebookMenuId}\n onClick={onSelectNotebook}\n onRename={onRename}\n onDelete={onDelete}\n t={t}\n />\n ))}\n </div>\n )}\n </div>\n);\n"],"names":[],"mappings":";;;;;;;AAwCO,MAAM,eAAe,CAAC;AAAA,EAC3B,SAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,kBAAA;AAAA,EACA,qBAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,qBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,kBAAA,EACtB,QAAA,EAAA;AAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,eAAA,EACtB,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAQ,IAAA,EAAK,SAAA,EAAW,QAAQ,gBAAA,EACzC,QAAA,EAAA,CAAA,CAAE,iBAAiB,CAAA,EACtB,CAAA;AAAA,IACC,YAAA,oBACC,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,SAAA;AAAA,QACR,WAAW,OAAA,CAAQ,eAAA;AAAA,QACnB,IAAA,sBAAO,cAAA,EAAA,EAAe,CAAA;AAAA,QACtB,OAAA,EAAS,gBAAA;AAAA,QAER,YAAE,wBAAwB;AAAA;AAAA;AAC7B,GAAA,EAEJ,CAAA;AAAA,EACC,CAAC,YAAA,mBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,QAAQ,mBAAA,EACtB,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAW,OAAA,CAAQ,aAAA,EAAe,CAAA;AAAA,oBAC/C,GAAA,CAAC,cAAW,OAAA,EAAQ,IAAA,EAAK,WAAW,OAAA,CAAQ,qBAAA,EACzC,QAAA,EAAA,CAAA,CAAE,uBAAuB,CAAA,EAC5B,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,KAAA,EAAM,eAAA;AAAA,QACN,WAAW,OAAA,CAAQ,oBAAA;AAAA,QAElB,YAAE,6BAA6B;AAAA;AAAA,KAClC;AAAA,oBACA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,SAAA;AAAA,QACR,WAAW,OAAA,CAAQ,oBAAA;AAAA,QACnB,OAAA,EAAS,gBAAA;AAAA,QAER,YAAE,wBAAwB;AAAA;AAAA;AAC7B,GAAA,EACF,CAAA,uBAEC,KAAA,EAAA,EAAI,SAAA,EAAW,QAAQ,aAAA,EACrB,QAAA,EAAA,SAAA,CAAU,IAAI,CAAA,QAAA,qBACb,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MAEC,QAAA;AAAA,MACA,OAAA;AAAA,MACA,kBAAA;AAAA,MACA,qBAAA;AAAA,MACA,OAAA,EAAS,gBAAA;AAAA,MACT,QAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KAAA;AAAA,IARK,QAAA,CAAS;AAAA,GAUjB,CAAA,EACH;AAAA,CAAA,EAEJ;;;;"}
@@ -1,14 +1,14 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useState, useEffect, useMemo } from 'react';
2
3
  import { makeStyles } from '@material-ui/core/styles';
3
4
  import CloseIcon from '@mui/icons-material/Close';
4
- import Alert from '@mui/material/Alert';
5
- import Button from '@mui/material/Button';
6
5
  import Dialog from '@mui/material/Dialog';
7
- import DialogActions from '@mui/material/DialogActions';
8
6
  import DialogContent from '@mui/material/DialogContent';
9
7
  import DialogTitle from '@mui/material/DialogTitle';
10
8
  import IconButton from '@mui/material/IconButton';
11
9
  import Typography from '@mui/material/Typography';
10
+ import { Alert, Button } from '@patternfly/react-core';
11
+ import { ExclamationTriangleIcon } from '@patternfly/react-icons';
12
12
  import { useTranslation } from '../../hooks/useTranslation.esm.js';
13
13
  import { FileTypeIcon } from './FileTypeIcon.esm.js';
14
14
 
@@ -35,18 +35,44 @@ const useStyles = makeStyles((theme) => ({
35
35
  dialogContent: {
36
36
  padding: "0 24px 24px"
37
37
  },
38
+ warningAlert: {
39
+ "--pf-v6-c-alert--PaddingBlockEnd": "0",
40
+ marginBottom: theme.spacing(2),
41
+ "& .pf-v6-c-alert__title": {
42
+ marginTop: 0
43
+ }
44
+ },
45
+ radioGroup: {
46
+ display: "flex",
47
+ flexDirection: "column",
48
+ gap: theme.spacing(1),
49
+ marginBottom: theme.spacing(2),
50
+ "& label": {
51
+ display: "flex",
52
+ alignItems: "center",
53
+ gap: theme.spacing(1),
54
+ cursor: "pointer",
55
+ fontSize: "0.875rem"
56
+ },
57
+ '& input[type="radio"]': {
58
+ cursor: "pointer"
59
+ }
60
+ },
38
61
  fileList: {
39
62
  margin: 0,
40
63
  padding: 0,
41
- listStyle: "none"
64
+ listStyle: "none",
65
+ maxHeight: 300,
66
+ overflowY: "auto"
42
67
  },
43
68
  fileItem: {
44
69
  display: "flex",
45
70
  alignItems: "center",
46
71
  gap: theme.spacing(1),
47
- padding: `${theme.spacing(2)}px 0`,
48
- borderBottom: "1px solid var(--pf-t--global--border--color--default, #c7c7c7)",
49
- cursor: "pointer"
72
+ padding: `${theme.spacing(1.5)}px ${theme.spacing(1.5)}px`,
73
+ border: "1px solid var(--pf-t--global--border--color--default)",
74
+ borderRadius: 8,
75
+ marginBottom: theme.spacing(1)
50
76
  },
51
77
  fileName: {
52
78
  flex: 1,
@@ -57,48 +83,68 @@ const useStyles = makeStyles((theme) => ({
57
83
  fontSize: "0.875rem",
58
84
  lineHeight: "1.25rem"
59
85
  },
86
+ warningIcon: {
87
+ color: "var(--pf-t--global--color--status--warning--default)",
88
+ fontSize: "1rem",
89
+ flexShrink: 0
90
+ },
60
91
  dialogActions: {
61
- justifyContent: "left",
62
- padding: theme.spacing(2.5),
92
+ display: "flex",
93
+ justifyContent: "flex-start",
94
+ padding: "16px 24px",
63
95
  gap: theme.spacing(1)
64
- },
65
- overwriteButton: {
66
- textTransform: "none",
67
- borderRadius: 999
68
- },
69
- cancelButton: {
70
- textTransform: "none",
71
- borderRadius: 999
72
- },
73
- warningAlert: {
74
- borderRadius: "6px"
75
96
  }
76
97
  }));
77
98
  const OverwriteConfirmModal = ({
78
99
  isOpen,
79
100
  onClose,
80
101
  onConfirm,
81
- fileNames
102
+ onBack,
103
+ allFiles,
104
+ duplicateFileNames
82
105
  }) => {
83
106
  const classes = useStyles();
84
107
  const { t } = useTranslation();
108
+ const [duplicateAction, setDuplicateAction] = useState(
109
+ "replace"
110
+ );
111
+ useEffect(() => {
112
+ if (isOpen) setDuplicateAction("replace");
113
+ }, [isOpen]);
114
+ const duplicateSet = useMemo(
115
+ () => new Set(duplicateFileNames),
116
+ [duplicateFileNames]
117
+ );
118
+ const newFiles = allFiles.filter((f) => !duplicateSet.has(f.name));
119
+ const duplicateFiles = allFiles.filter((f) => duplicateSet.has(f.name));
120
+ const filesToUpload = duplicateAction === "replace" ? allFiles : newFiles;
121
+ const handleConfirm = () => {
122
+ onConfirm(filesToUpload);
123
+ setDuplicateAction("replace");
124
+ };
125
+ const handleClose = () => {
126
+ setDuplicateAction("replace");
127
+ onClose();
128
+ };
85
129
  return /* @__PURE__ */ jsxs(
86
130
  Dialog,
87
131
  {
88
132
  open: isOpen,
89
- onClose,
133
+ onClose: handleClose,
90
134
  "aria-labelledby": "overwrite-confirm-modal-title",
91
135
  PaperProps: {
92
136
  className: classes.dialogPaper
93
137
  },
94
138
  children: [
95
139
  /* @__PURE__ */ jsxs(DialogTitle, { className: classes.dialogTitle, children: [
96
- /* @__PURE__ */ jsx(Typography, { component: "h2", className: classes.titleText, children: t("notebook.overwrite.modal.title") }),
140
+ /* @__PURE__ */ jsx(Typography, { component: "h2", className: classes.titleText, children: t(
141
+ duplicateFiles.length === 1 ? "notebook.overwrite.modal.title.one" : "notebook.overwrite.modal.title.other"
142
+ ) }),
97
143
  /* @__PURE__ */ jsx(
98
144
  IconButton,
99
145
  {
100
146
  "aria-label": t("common.close"),
101
- onClick: onClose,
147
+ onClick: handleClose,
102
148
  className: classes.closeButton,
103
149
  size: "small",
104
150
  children: /* @__PURE__ */ jsx(CloseIcon, {})
@@ -106,32 +152,66 @@ const OverwriteConfirmModal = ({
106
152
  )
107
153
  ] }),
108
154
  /* @__PURE__ */ jsxs(DialogContent, { className: classes.dialogContent, children: [
109
- /* @__PURE__ */ jsx(Alert, { severity: "warning", className: classes.warningAlert, children: t("notebook.overwrite.modal.description") }),
110
- /* @__PURE__ */ jsx("ul", { className: classes.fileList, children: fileNames.map((name) => /* @__PURE__ */ jsxs("li", { className: classes.fileItem, children: [
111
- /* @__PURE__ */ jsx(FileTypeIcon, { fileName: name }),
112
- /* @__PURE__ */ jsx(Typography, { className: classes.fileName, children: name })
113
- ] }, name)) })
114
- ] }),
115
- /* @__PURE__ */ jsxs(DialogActions, { className: classes.dialogActions, children: [
116
155
  /* @__PURE__ */ jsx(
117
- Button,
156
+ Alert,
118
157
  {
119
- variant: "contained",
120
- color: "error",
121
- className: classes.overwriteButton,
122
- onClick: onConfirm,
123
- children: t("notebook.overwrite.modal.action")
158
+ variant: "warning",
159
+ isInline: true,
160
+ title: t(
161
+ duplicateFiles.length === 1 ? "notebook.overwrite.modal.description.one" : "notebook.overwrite.modal.description.other",
162
+ {
163
+ duplicateCount: duplicateFiles.length,
164
+ newCount: newFiles.length
165
+ }
166
+ ),
167
+ className: classes.warningAlert
124
168
  }
125
169
  ),
170
+ /* @__PURE__ */ jsxs("div", { className: classes.radioGroup, children: [
171
+ /* @__PURE__ */ jsxs("label", { children: [
172
+ /* @__PURE__ */ jsx(
173
+ "input",
174
+ {
175
+ type: "radio",
176
+ name: "duplicate-action",
177
+ checked: duplicateAction === "replace",
178
+ onChange: () => setDuplicateAction("replace")
179
+ }
180
+ ),
181
+ t("notebook.overwrite.modal.replace")
182
+ ] }),
183
+ /* @__PURE__ */ jsxs("label", { children: [
184
+ /* @__PURE__ */ jsx(
185
+ "input",
186
+ {
187
+ type: "radio",
188
+ name: "duplicate-action",
189
+ checked: duplicateAction === "ignore",
190
+ onChange: () => setDuplicateAction("ignore")
191
+ }
192
+ ),
193
+ t("notebook.overwrite.modal.ignore")
194
+ ] })
195
+ ] }),
196
+ /* @__PURE__ */ jsx("ul", { className: classes.fileList, children: allFiles.map((file) => /* @__PURE__ */ jsxs("li", { className: classes.fileItem, children: [
197
+ /* @__PURE__ */ jsx(FileTypeIcon, { fileName: file.name }),
198
+ /* @__PURE__ */ jsx(Typography, { className: classes.fileName, children: file.name }),
199
+ duplicateSet.has(file.name) && /* @__PURE__ */ jsx(ExclamationTriangleIcon, { className: classes.warningIcon })
200
+ ] }, file.name)) })
201
+ ] }),
202
+ /* @__PURE__ */ jsxs("div", { className: classes.dialogActions, children: [
126
203
  /* @__PURE__ */ jsx(
127
204
  Button,
128
205
  {
129
- variant: "outlined",
130
- className: classes.cancelButton,
131
- onClick: onClose,
132
- children: t("common.cancel")
206
+ variant: "primary",
207
+ onClick: handleConfirm,
208
+ isDisabled: filesToUpload.length === 0,
209
+ children: t("notebook.overwrite.modal.action", {
210
+ count: filesToUpload.length
211
+ })
133
212
  }
134
- )
213
+ ),
214
+ /* @__PURE__ */ jsx(Button, { variant: "link", onClick: onBack, children: t("notebook.overwrite.modal.back") })
135
215
  ] })
136
216
  ]
137
217
  }
@@ -1 +1 @@
1
- {"version":3,"file":"OverwriteConfirmModal.esm.js","sources":["../../../src/components/notebooks/OverwriteConfirmModal.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Alert from '@mui/material/Alert';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\n\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { FileTypeIcon } from './FileTypeIcon';\n\nconst useStyles = makeStyles(theme => ({\n dialogPaper: {\n borderRadius: 24,\n maxWidth: 578,\n },\n dialogTitle: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '24px 24px 16px',\n },\n titleText: {\n fontWeight: 500,\n fontSize: '1.25rem',\n lineHeight: '1.625rem',\n letterSpacing: '-0.25px',\n },\n closeButton: {\n color: theme.palette.text.primary,\n },\n dialogContent: {\n padding: '0 24px 24px',\n },\n fileList: {\n margin: 0,\n padding: 0,\n listStyle: 'none',\n },\n fileItem: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n padding: `${theme.spacing(2)}px 0`,\n borderBottom:\n '1px solid var(--pf-t--global--border--color--default, #c7c7c7)',\n cursor: 'pointer',\n },\n fileName: {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontSize: '0.875rem',\n lineHeight: '1.25rem',\n },\n dialogActions: {\n justifyContent: 'left',\n padding: theme.spacing(2.5),\n gap: theme.spacing(1),\n },\n overwriteButton: {\n textTransform: 'none',\n borderRadius: 999,\n },\n cancelButton: {\n textTransform: 'none',\n borderRadius: 999,\n },\n warningAlert: {\n borderRadius: '6px',\n },\n}));\n\ntype OverwriteConfirmModalProps = {\n isOpen: boolean;\n onClose: () => void;\n onConfirm: () => void;\n fileNames: string[];\n};\n\nexport const OverwriteConfirmModal = ({\n isOpen,\n onClose,\n onConfirm,\n fileNames,\n}: OverwriteConfirmModalProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n aria-labelledby=\"overwrite-confirm-modal-title\"\n PaperProps={{\n className: classes.dialogPaper,\n }}\n >\n <DialogTitle className={classes.dialogTitle}>\n <Typography component=\"h2\" className={classes.titleText}>\n {t('notebook.overwrite.modal.title')}\n </Typography>\n <IconButton\n aria-label={t('common.close')}\n onClick={onClose}\n className={classes.closeButton}\n size=\"small\"\n >\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n\n <DialogContent className={classes.dialogContent}>\n <Alert severity=\"warning\" className={classes.warningAlert}>\n {t('notebook.overwrite.modal.description')}\n </Alert>\n\n <ul className={classes.fileList}>\n {fileNames.map(name => (\n <li key={name} className={classes.fileItem}>\n <FileTypeIcon fileName={name} />\n <Typography className={classes.fileName}>{name}</Typography>\n </li>\n ))}\n </ul>\n </DialogContent>\n\n <DialogActions className={classes.dialogActions}>\n <Button\n variant=\"contained\"\n color=\"error\"\n className={classes.overwriteButton}\n onClick={onConfirm}\n >\n {t('notebook.overwrite.modal.action')}\n </Button>\n <Button\n variant=\"outlined\"\n className={classes.cancelButton}\n onClick={onClose}\n >\n {t('common.cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OverwriteConfirmModal.esm.js","sources":["../../../src/components/notebooks/OverwriteConfirmModal.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\nimport { Alert, Button } from '@patternfly/react-core';\nimport { ExclamationTriangleIcon } from '@patternfly/react-icons';\n\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { FileTypeIcon } from './FileTypeIcon';\n\nconst useStyles = makeStyles(theme => ({\n dialogPaper: {\n borderRadius: 24,\n maxWidth: 578,\n },\n dialogTitle: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '24px 24px 16px',\n },\n titleText: {\n fontWeight: 500,\n fontSize: '1.25rem',\n lineHeight: '1.625rem',\n letterSpacing: '-0.25px',\n },\n closeButton: {\n color: theme.palette.text.primary,\n },\n dialogContent: {\n padding: '0 24px 24px',\n },\n warningAlert: {\n '--pf-v6-c-alert--PaddingBlockEnd': '0',\n marginBottom: theme.spacing(2),\n '& .pf-v6-c-alert__title': {\n marginTop: 0,\n },\n },\n radioGroup: {\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n marginBottom: theme.spacing(2),\n '& label': {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n cursor: 'pointer',\n fontSize: '0.875rem',\n },\n '& input[type=\"radio\"]': {\n cursor: 'pointer',\n },\n },\n fileList: {\n margin: 0,\n padding: 0,\n listStyle: 'none',\n maxHeight: 300,\n overflowY: 'auto',\n },\n fileItem: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n padding: `${theme.spacing(1.5)}px ${theme.spacing(1.5)}px`,\n border: '1px solid var(--pf-t--global--border--color--default)',\n borderRadius: 8,\n marginBottom: theme.spacing(1),\n },\n fileName: {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontSize: '0.875rem',\n lineHeight: '1.25rem',\n },\n warningIcon: {\n color: 'var(--pf-t--global--color--status--warning--default)',\n fontSize: '1rem',\n flexShrink: 0,\n },\n dialogActions: {\n display: 'flex',\n justifyContent: 'flex-start',\n padding: '16px 24px',\n gap: theme.spacing(1),\n },\n}));\n\ntype OverwriteConfirmModalProps = {\n isOpen: boolean;\n onClose: () => void;\n onConfirm: (filesToUpload: File[]) => void;\n onBack: () => void;\n allFiles: File[];\n duplicateFileNames: string[];\n};\n\nexport const OverwriteConfirmModal = ({\n isOpen,\n onClose,\n onConfirm,\n onBack,\n allFiles,\n duplicateFileNames,\n}: OverwriteConfirmModalProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const [duplicateAction, setDuplicateAction] = useState<'replace' | 'ignore'>(\n 'replace',\n );\n\n useEffect(() => {\n if (isOpen) setDuplicateAction('replace');\n }, [isOpen]);\n\n const duplicateSet = useMemo(\n () => new Set(duplicateFileNames),\n [duplicateFileNames],\n );\n const newFiles = allFiles.filter(f => !duplicateSet.has(f.name));\n const duplicateFiles = allFiles.filter(f => duplicateSet.has(f.name));\n\n const filesToUpload = duplicateAction === 'replace' ? allFiles : newFiles;\n\n const handleConfirm = () => {\n onConfirm(filesToUpload);\n setDuplicateAction('replace');\n };\n\n const handleClose = () => {\n setDuplicateAction('replace');\n onClose();\n };\n\n return (\n <Dialog\n open={isOpen}\n onClose={handleClose}\n aria-labelledby=\"overwrite-confirm-modal-title\"\n PaperProps={{\n className: classes.dialogPaper,\n }}\n >\n <DialogTitle className={classes.dialogTitle}>\n <Typography component=\"h2\" className={classes.titleText}>\n {(t as Function)(\n duplicateFiles.length === 1\n ? 'notebook.overwrite.modal.title.one'\n : 'notebook.overwrite.modal.title.other',\n )}\n </Typography>\n <IconButton\n aria-label={t('common.close')}\n onClick={handleClose}\n className={classes.closeButton}\n size=\"small\"\n >\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n\n <DialogContent className={classes.dialogContent}>\n <Alert\n variant=\"warning\"\n isInline\n title={(t as Function)(\n duplicateFiles.length === 1\n ? 'notebook.overwrite.modal.description.one'\n : 'notebook.overwrite.modal.description.other',\n {\n duplicateCount: duplicateFiles.length,\n newCount: newFiles.length,\n },\n )}\n className={classes.warningAlert}\n />\n\n <div className={classes.radioGroup}>\n <label>\n <input\n type=\"radio\"\n name=\"duplicate-action\"\n checked={duplicateAction === 'replace'}\n onChange={() => setDuplicateAction('replace')}\n />\n {t('notebook.overwrite.modal.replace')}\n </label>\n <label>\n <input\n type=\"radio\"\n name=\"duplicate-action\"\n checked={duplicateAction === 'ignore'}\n onChange={() => setDuplicateAction('ignore')}\n />\n {t('notebook.overwrite.modal.ignore')}\n </label>\n </div>\n\n <ul className={classes.fileList}>\n {allFiles.map(file => (\n <li key={file.name} className={classes.fileItem}>\n <FileTypeIcon fileName={file.name} />\n <Typography className={classes.fileName}>{file.name}</Typography>\n {duplicateSet.has(file.name) && (\n <ExclamationTriangleIcon className={classes.warningIcon} />\n )}\n </li>\n ))}\n </ul>\n </DialogContent>\n\n <div className={classes.dialogActions}>\n <Button\n variant=\"primary\"\n onClick={handleConfirm}\n isDisabled={filesToUpload.length === 0}\n >\n {(t as Function)('notebook.overwrite.modal.action', {\n count: filesToUpload.length,\n })}\n </Button>\n <Button variant=\"link\" onClick={onBack}>\n {t('notebook.overwrite.modal.back')}\n </Button>\n </div>\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -66,7 +66,6 @@ const UploadResourceScreen = ({
66
66
  variant: "secondary",
67
67
  className: classes.uploadButton,
68
68
  icon: /* @__PURE__ */ jsx(AddCircleOIcon, {}),
69
- iconPosition: "end",
70
69
  onClick: onUploadClick,
71
70
  children: t("notebook.view.upload.action")
72
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UploadResourceScreen.esm.js","sources":["../../../src/components/notebooks/UploadResourceScreen.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { makeStyles, Typography } from '@material-ui/core';\nimport { Button, Spinner } from '@patternfly/react-core';\nimport { AddCircleOIcon } from '@patternfly/react-icons';\nimport { CatalogIcon } from '@patternfly/react-icons/dist/esm/icons';\n\nimport { useTranslation } from '../../hooks/useTranslation';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n flex: 1,\n textAlign: 'center',\n gap: theme.spacing(2),\n },\n icon: {\n fontSize: 48,\n color: 'var(--pf-t--global--icon--color--subtle)',\n '& > .pf-v6-icon-rh-ui': {\n display: 'none !important',\n },\n },\n headingRow: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n },\n heading: {\n fontWeight: 500,\n fontSize: '1.5rem',\n lineHeight: '2rem',\n letterSpacing: '-0.25px',\n },\n description: {\n color: 'var(--pf-t--global--text--color--subtle)',\n maxWidth: 400,\n },\n uploadButton: {\n textTransform: 'none',\n borderRadius: 999,\n paddingLeft: theme.spacing(3),\n paddingRight: theme.spacing(3),\n },\n}));\n\ntype UploadResourceScreenProps = {\n onUploadClick: () => void;\n isProcessing?: boolean;\n};\n\nexport const UploadResourceScreen = ({\n onUploadClick,\n isProcessing = false,\n}: UploadResourceScreenProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <div className={classes.container}>\n <CatalogIcon className={classes.icon} />\n {isProcessing ? (\n <>\n <div className={classes.headingRow}>\n <Spinner size=\"md\" />\n <Typography className={classes.heading}>\n {t('notebook.view.processing.heading')}\n </Typography>\n </div>\n <Typography className={classes.description}>\n {t('notebook.view.processing.description')}\n </Typography>\n </>\n ) : (\n <>\n <Typography className={classes.heading}>\n {t('notebook.view.upload.heading')}\n </Typography>\n <Button\n variant=\"secondary\"\n className={classes.uploadButton}\n icon={<AddCircleOIcon />}\n iconPosition=\"end\"\n onClick={onUploadClick}\n >\n {t('notebook.view.upload.action')}\n </Button>\n </>\n )}\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UploadResourceScreen.esm.js","sources":["../../../src/components/notebooks/UploadResourceScreen.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { makeStyles, Typography } from '@material-ui/core';\nimport { Button, Spinner } from '@patternfly/react-core';\nimport { AddCircleOIcon } from '@patternfly/react-icons';\nimport { CatalogIcon } from '@patternfly/react-icons/dist/esm/icons';\n\nimport { useTranslation } from '../../hooks/useTranslation';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n flex: 1,\n textAlign: 'center',\n gap: theme.spacing(2),\n },\n icon: {\n fontSize: 48,\n color: 'var(--pf-t--global--icon--color--subtle)',\n '& > .pf-v6-icon-rh-ui': {\n display: 'none !important',\n },\n },\n headingRow: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n },\n heading: {\n fontWeight: 500,\n fontSize: '1.5rem',\n lineHeight: '2rem',\n letterSpacing: '-0.25px',\n },\n description: {\n color: 'var(--pf-t--global--text--color--subtle)',\n maxWidth: 400,\n },\n uploadButton: {\n textTransform: 'none',\n borderRadius: 999,\n paddingLeft: theme.spacing(3),\n paddingRight: theme.spacing(3),\n },\n}));\n\ntype UploadResourceScreenProps = {\n onUploadClick: () => void;\n isProcessing?: boolean;\n};\n\nexport const UploadResourceScreen = ({\n onUploadClick,\n isProcessing = false,\n}: UploadResourceScreenProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <div className={classes.container}>\n <CatalogIcon className={classes.icon} />\n {isProcessing ? (\n <>\n <div className={classes.headingRow}>\n <Spinner size=\"md\" />\n <Typography className={classes.heading}>\n {t('notebook.view.processing.heading')}\n </Typography>\n </div>\n <Typography className={classes.description}>\n {t('notebook.view.processing.description')}\n </Typography>\n </>\n ) : (\n <>\n <Typography className={classes.heading}>\n {t('notebook.view.upload.heading')}\n </Typography>\n <Button\n variant=\"secondary\"\n className={classes.uploadButton}\n icon={<AddCircleOIcon />}\n onClick={onUploadClick}\n >\n {t('notebook.view.upload.action')}\n </Button>\n </>\n )}\n </div>\n );\n};\n"],"names":[],"mappings":"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"}