@red-hat-developer-hub/backstage-plugin-lightspeed 2.7.1 → 2.8.1

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 (54) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/config.d.ts +30 -0
  3. package/dist/alpha.d.ts +4 -0
  4. package/dist/api/LightspeedApiClient.esm.js +11 -0
  5. package/dist/api/LightspeedApiClient.esm.js.map +1 -1
  6. package/dist/api/api.esm.js.map +1 -1
  7. package/dist/components/DeleteModal.esm.js +1 -1
  8. package/dist/components/DeleteModal.esm.js.map +1 -1
  9. package/dist/components/LightSpeedChat.esm.js +101 -51
  10. package/dist/components/LightSpeedChat.esm.js.map +1 -1
  11. package/dist/components/LightspeedChatBoxHeader.esm.js +1 -0
  12. package/dist/components/LightspeedChatBoxHeader.esm.js.map +1 -1
  13. package/dist/components/McpServersSettings.esm.js +3 -4
  14. package/dist/components/McpServersSettings.esm.js.map +1 -1
  15. package/dist/components/RenameConversationModal.esm.js +1 -1
  16. package/dist/components/RenameConversationModal.esm.js.map +1 -1
  17. package/dist/components/Router.esm.js +8 -3
  18. package/dist/components/Router.esm.js.map +1 -1
  19. package/dist/components/notebooks/AddDocumentModal.esm.js +1 -1
  20. package/dist/components/notebooks/AddDocumentModal.esm.js.map +1 -1
  21. package/dist/components/notebooks/DeleteNotebookModal.esm.js +1 -1
  22. package/dist/components/notebooks/DeleteNotebookModal.esm.js.map +1 -1
  23. package/dist/components/notebooks/FileListItem.esm.js +1 -1
  24. package/dist/components/notebooks/FileListItem.esm.js.map +1 -1
  25. package/dist/components/notebooks/NotebookView.esm.js +84 -37
  26. package/dist/components/notebooks/NotebookView.esm.js.map +1 -1
  27. package/dist/components/notebooks/OverwriteConfirmModal.esm.js +1 -1
  28. package/dist/components/notebooks/OverwriteConfirmModal.esm.js.map +1 -1
  29. package/dist/components/notebooks/RenameNotebookModal.esm.js +1 -1
  30. package/dist/components/notebooks/RenameNotebookModal.esm.js.map +1 -1
  31. package/dist/const.esm.js +8 -9
  32. package/dist/const.esm.js.map +1 -1
  33. package/dist/hooks/useConversationMessages.esm.js +7 -3
  34. package/dist/hooks/useConversationMessages.esm.js.map +1 -1
  35. package/dist/hooks/useNotebookConversationIds.esm.js +19 -0
  36. package/dist/hooks/useNotebookConversationIds.esm.js.map +1 -0
  37. package/dist/hooks/useNotebookWelcomePrompts.esm.js +14 -0
  38. package/dist/hooks/useNotebookWelcomePrompts.esm.js.map +1 -0
  39. package/dist/translations/de.esm.js +5 -0
  40. package/dist/translations/de.esm.js.map +1 -1
  41. package/dist/translations/es.esm.js +5 -0
  42. package/dist/translations/es.esm.js.map +1 -1
  43. package/dist/translations/fr.esm.js +5 -0
  44. package/dist/translations/fr.esm.js.map +1 -1
  45. package/dist/translations/it.esm.js +5 -0
  46. package/dist/translations/it.esm.js.map +1 -1
  47. package/dist/translations/ja.esm.js +5 -0
  48. package/dist/translations/ja.esm.js.map +1 -1
  49. package/dist/translations/ref.esm.js +5 -0
  50. package/dist/translations/ref.esm.js.map +1 -1
  51. package/dist/types.esm.js.map +1 -1
  52. package/dist/utils/lightspeed-chatbox-utils.esm.js +55 -1
  53. package/dist/utils/lightspeed-chatbox-utils.esm.js.map +1 -1
  54. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"AddDocumentModal.esm.js","sources":["../../../src/components/notebooks/AddDocumentModal.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, useState } from 'react';\nimport { FileRejection } from 'react-dropzone';\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\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';\nimport {\n MultipleFileUpload,\n MultipleFileUploadMain,\n} from '@patternfly/react-core';\nimport { UploadIcon } from '@patternfly/react-icons';\n\nimport { NOTEBOOK_MAX_FILES } from '../../const';\nimport { useUploadDocument } from '../../hooks/notebooks/useUploadDocument';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport {\n getNotebookAcceptedFileTypes,\n validateFiles,\n} from '../../utils/notebook-upload-utils';\nimport { FileListItem } from './FileListItem';\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.grey[700],\n },\n dialogContent: {\n padding: '0 24px 24px',\n },\n errorAlert: {\n marginBottom: theme.spacing(2),\n },\n dropzone: {\n '& .pf-v6-c-multiple-file-upload__main': {\n borderColor: 'var(--pf-t--global--border--color--brand--default)',\n transition: 'background-color 0.2s ease',\n cursor: 'pointer',\n },\n '& .pf-v6-c-multiple-file-upload__main:hover': {\n backgroundColor:\n 'color-mix(in srgb, var(--pf-t--global--color--brand--default) 10%, transparent)',\n },\n },\n fileListContainer: {\n marginTop: theme.spacing(2),\n maxHeight: 200,\n overflowY: 'auto',\n },\n fileListHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: theme.spacing(1),\n },\n fileCount: {\n fontSize: '0.875rem',\n color: theme.palette.text.secondary,\n },\n dialogActions: {\n padding: '16px 24px',\n justifyContent: 'flex-end',\n gap: theme.spacing(1),\n },\n addButton: {\n textTransform: 'none',\n },\n cancelButton: {\n textTransform: 'none',\n },\n}));\n\ntype AddDocumentModalProps = {\n isOpen: boolean;\n onClose: () => void;\n sessionId: string;\n existingDocumentNames: string[];\n onFilesUploading?: (files: File[]) => void;\n onUploadStarted?: (info: { fileName: string; documentId: string }) => void;\n onUploadFailed?: (fileName: string) => void;\n onDuplicatesFound?: (files: File[]) => void;\n filesToAdd?: File[];\n onFilesAdded?: () => void;\n};\n\nexport const AddDocumentModal = ({\n isOpen,\n onClose,\n sessionId,\n existingDocumentNames,\n onFilesUploading,\n onUploadStarted,\n onUploadFailed,\n onDuplicatesFound,\n filesToAdd,\n onFilesAdded,\n}: AddDocumentModalProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const uploadMutation = useUploadDocument();\n const [validationErrors, setValidationErrors] = useState<string[]>([]);\n const [selectedFiles, setSelectedFiles] = useState<File[]>([]);\n\n const totalExistingAndSelected =\n existingDocumentNames.length + selectedFiles.length;\n const remainingSlots = NOTEBOOK_MAX_FILES - totalExistingAndSelected;\n\n useEffect(() => {\n if (filesToAdd && filesToAdd.length > 0) {\n setSelectedFiles(prev => [...prev, ...filesToAdd]);\n onFilesAdded?.();\n }\n }, [filesToAdd, onFilesAdded]);\n\n const handleFileDrop = (_event: unknown, files: File[]) => {\n setValidationErrors([]);\n\n const { valid, errors } = validateFiles(files, totalExistingAndSelected);\n\n if (errors.length > 0) {\n setValidationErrors(errors);\n return;\n }\n\n if (valid.length === 0) return;\n\n const existingNamesSet = new Set([\n ...existingDocumentNames,\n ...selectedFiles.map(f => f.name),\n ]);\n const newFiles = valid.filter(f => !existingNamesSet.has(f.name));\n const duplicateFiles = valid.filter(f =>\n existingDocumentNames.includes(f.name),\n );\n\n if (duplicateFiles.length > 0) {\n onDuplicatesFound?.(duplicateFiles);\n }\n\n if (newFiles.length > 0) {\n setSelectedFiles(prev => [...prev, ...newFiles]);\n }\n };\n\n const handleRemoveFile = (index: number) => {\n setSelectedFiles(prev => prev.filter((_, i) => i !== index));\n };\n\n const handleAddFiles = () => {\n if (selectedFiles.length === 0) return;\n\n onFilesUploading?.(selectedFiles);\n for (const file of selectedFiles) {\n uploadMutation\n .mutateAsync({ sessionId, file })\n .then(data => {\n onUploadStarted?.({\n fileName: file.name,\n documentId: data.document_id,\n });\n })\n .catch(() => {\n onUploadFailed?.(file.name);\n });\n }\n\n setSelectedFiles([]);\n setValidationErrors([]);\n onClose();\n };\n\n const handleDropRejected = (rejections: FileRejection[]) => {\n const hasInvalidType = rejections.some(r =>\n r.errors.some(e => e.code === 'file-invalid-type'),\n );\n if (hasInvalidType) {\n setValidationErrors(['notebook.upload.error.unsupportedType']);\n }\n };\n\n const handleClose = () => {\n setSelectedFiles([]);\n setValidationErrors([]);\n onClose();\n };\n\n return (\n <Dialog\n open={isOpen}\n onClose={handleClose}\n aria-labelledby=\"add-document-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.upload.modal.title')}\n {selectedFiles.length > 0 &&\n ` (${selectedFiles.length}/${NOTEBOOK_MAX_FILES - existingDocumentNames.length})`}\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 {validationErrors.length > 0 && (\n <Alert severity=\"error\" className={classes.errorAlert}>\n {validationErrors\n .map(errorKey => {\n const message = (t as Function)(errorKey) as string;\n return errorKey === 'notebook.upload.error.tooManyFiles'\n ? message.replace('{{max}}', String(NOTEBOOK_MAX_FILES))\n : message;\n })\n .join('\\n')}\n </Alert>\n )}\n\n {remainingSlots > 0 && (\n <MultipleFileUpload\n className={classes.dropzone}\n dropzoneProps={{\n accept: getNotebookAcceptedFileTypes(),\n onDropRejected: handleDropRejected,\n }}\n onFileDrop={handleFileDrop}\n >\n <MultipleFileUploadMain\n titleIcon={<UploadIcon />}\n titleText={t('notebook.upload.modal.dragDropTitle')}\n titleTextSeparator={t('notebook.upload.modal.separator')}\n infoText={t('notebook.upload.modal.infoText')}\n browseButtonText={t('notebook.upload.modal.browseButton')}\n />\n </MultipleFileUpload>\n )}\n\n {selectedFiles.length > 0 && (\n <Box className={classes.fileListContainer}>\n <Box className={classes.fileListHeader}>\n <Typography className={classes.fileCount}>\n {(t as Function)('notebook.upload.modal.selectedFiles', {\n count: selectedFiles.length,\n max: NOTEBOOK_MAX_FILES - existingDocumentNames.length,\n })}\n </Typography>\n </Box>\n {selectedFiles.map((file, index) => (\n <FileListItem\n key={`${file.name}-${index}`}\n file={file}\n onRemove={() => handleRemoveFile(index)}\n removeAriaLabel={(t as Function)(\n 'notebook.upload.modal.removeFile',\n {\n fileName: file.name,\n },\n )}\n />\n ))}\n </Box>\n )}\n </DialogContent>\n\n <DialogActions className={classes.dialogActions}>\n <Button\n onClick={handleClose}\n className={classes.cancelButton}\n color=\"inherit\"\n >\n {t('common.cancel')}\n </Button>\n <Button\n onClick={handleAddFiles}\n className={classes.addButton}\n variant=\"contained\"\n color=\"primary\"\n disabled={selectedFiles.length === 0}\n >\n {(t as Function)('notebook.upload.modal.addButton', {\n count: selectedFiles.length,\n })}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AddDocumentModal.esm.js","sources":["../../../src/components/notebooks/AddDocumentModal.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, useState } from 'react';\nimport { FileRejection } from 'react-dropzone';\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\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';\nimport {\n MultipleFileUpload,\n MultipleFileUploadMain,\n} from '@patternfly/react-core';\nimport { UploadIcon } from '@patternfly/react-icons';\n\nimport { NOTEBOOK_MAX_FILES } from '../../const';\nimport { useUploadDocument } from '../../hooks/notebooks/useUploadDocument';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport {\n getNotebookAcceptedFileTypes,\n validateFiles,\n} from '../../utils/notebook-upload-utils';\nimport { FileListItem } from './FileListItem';\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 errorAlert: {\n marginBottom: theme.spacing(2),\n },\n dropzone: {\n '& .pf-v6-c-multiple-file-upload__main': {\n borderColor: 'var(--pf-t--global--border--color--brand--default)',\n transition: 'background-color 0.2s ease',\n cursor: 'pointer',\n },\n '& .pf-v6-c-multiple-file-upload__main:hover': {\n backgroundColor:\n 'color-mix(in srgb, var(--pf-t--global--color--brand--default) 10%, transparent)',\n },\n },\n fileListContainer: {\n marginTop: theme.spacing(2),\n maxHeight: 200,\n overflowY: 'auto',\n },\n fileListHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: theme.spacing(1),\n },\n fileCount: {\n fontSize: '0.875rem',\n color: theme.palette.text.secondary,\n },\n dialogActions: {\n padding: '16px 24px',\n justifyContent: 'flex-end',\n gap: theme.spacing(1),\n },\n addButton: {\n textTransform: 'none',\n },\n cancelButton: {\n textTransform: 'none',\n },\n}));\n\ntype AddDocumentModalProps = {\n isOpen: boolean;\n onClose: () => void;\n sessionId: string;\n existingDocumentNames: string[];\n onFilesUploading?: (files: File[]) => void;\n onUploadStarted?: (info: { fileName: string; documentId: string }) => void;\n onUploadFailed?: (fileName: string) => void;\n onDuplicatesFound?: (files: File[]) => void;\n filesToAdd?: File[];\n onFilesAdded?: () => void;\n};\n\nexport const AddDocumentModal = ({\n isOpen,\n onClose,\n sessionId,\n existingDocumentNames,\n onFilesUploading,\n onUploadStarted,\n onUploadFailed,\n onDuplicatesFound,\n filesToAdd,\n onFilesAdded,\n}: AddDocumentModalProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const uploadMutation = useUploadDocument();\n const [validationErrors, setValidationErrors] = useState<string[]>([]);\n const [selectedFiles, setSelectedFiles] = useState<File[]>([]);\n\n const totalExistingAndSelected =\n existingDocumentNames.length + selectedFiles.length;\n const remainingSlots = NOTEBOOK_MAX_FILES - totalExistingAndSelected;\n\n useEffect(() => {\n if (filesToAdd && filesToAdd.length > 0) {\n setSelectedFiles(prev => [...prev, ...filesToAdd]);\n onFilesAdded?.();\n }\n }, [filesToAdd, onFilesAdded]);\n\n const handleFileDrop = (_event: unknown, files: File[]) => {\n setValidationErrors([]);\n\n const { valid, errors } = validateFiles(files, totalExistingAndSelected);\n\n if (errors.length > 0) {\n setValidationErrors(errors);\n return;\n }\n\n if (valid.length === 0) return;\n\n const existingNamesSet = new Set([\n ...existingDocumentNames,\n ...selectedFiles.map(f => f.name),\n ]);\n const newFiles = valid.filter(f => !existingNamesSet.has(f.name));\n const duplicateFiles = valid.filter(f =>\n existingDocumentNames.includes(f.name),\n );\n\n if (duplicateFiles.length > 0) {\n onDuplicatesFound?.(duplicateFiles);\n }\n\n if (newFiles.length > 0) {\n setSelectedFiles(prev => [...prev, ...newFiles]);\n }\n };\n\n const handleRemoveFile = (index: number) => {\n setSelectedFiles(prev => prev.filter((_, i) => i !== index));\n };\n\n const handleAddFiles = () => {\n if (selectedFiles.length === 0) return;\n\n onFilesUploading?.(selectedFiles);\n for (const file of selectedFiles) {\n uploadMutation\n .mutateAsync({ sessionId, file })\n .then(data => {\n onUploadStarted?.({\n fileName: file.name,\n documentId: data.document_id,\n });\n })\n .catch(() => {\n onUploadFailed?.(file.name);\n });\n }\n\n setSelectedFiles([]);\n setValidationErrors([]);\n onClose();\n };\n\n const handleDropRejected = (rejections: FileRejection[]) => {\n const hasInvalidType = rejections.some(r =>\n r.errors.some(e => e.code === 'file-invalid-type'),\n );\n if (hasInvalidType) {\n setValidationErrors(['notebook.upload.error.unsupportedType']);\n }\n };\n\n const handleClose = () => {\n setSelectedFiles([]);\n setValidationErrors([]);\n onClose();\n };\n\n return (\n <Dialog\n open={isOpen}\n onClose={handleClose}\n aria-labelledby=\"add-document-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.upload.modal.title')}\n {selectedFiles.length > 0 &&\n ` (${selectedFiles.length}/${NOTEBOOK_MAX_FILES - existingDocumentNames.length})`}\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 {validationErrors.length > 0 && (\n <Alert severity=\"error\" className={classes.errorAlert}>\n {validationErrors\n .map(errorKey => {\n const message = (t as Function)(errorKey) as string;\n return errorKey === 'notebook.upload.error.tooManyFiles'\n ? message.replace('{{max}}', String(NOTEBOOK_MAX_FILES))\n : message;\n })\n .join('\\n')}\n </Alert>\n )}\n\n {remainingSlots > 0 && (\n <MultipleFileUpload\n className={classes.dropzone}\n dropzoneProps={{\n accept: getNotebookAcceptedFileTypes(),\n onDropRejected: handleDropRejected,\n }}\n onFileDrop={handleFileDrop}\n >\n <MultipleFileUploadMain\n titleIcon={<UploadIcon />}\n titleText={t('notebook.upload.modal.dragDropTitle')}\n titleTextSeparator={t('notebook.upload.modal.separator')}\n infoText={t('notebook.upload.modal.infoText')}\n browseButtonText={t('notebook.upload.modal.browseButton')}\n />\n </MultipleFileUpload>\n )}\n\n {selectedFiles.length > 0 && (\n <Box className={classes.fileListContainer}>\n <Box className={classes.fileListHeader}>\n <Typography className={classes.fileCount}>\n {(t as Function)('notebook.upload.modal.selectedFiles', {\n count: selectedFiles.length,\n max: NOTEBOOK_MAX_FILES - existingDocumentNames.length,\n })}\n </Typography>\n </Box>\n {selectedFiles.map((file, index) => (\n <FileListItem\n key={`${file.name}-${index}`}\n file={file}\n onRemove={() => handleRemoveFile(index)}\n removeAriaLabel={(t as Function)(\n 'notebook.upload.modal.removeFile',\n {\n fileName: file.name,\n },\n )}\n />\n ))}\n </Box>\n )}\n </DialogContent>\n\n <DialogActions className={classes.dialogActions}>\n <Button\n onClick={handleClose}\n className={classes.cancelButton}\n color=\"inherit\"\n >\n {t('common.cancel')}\n </Button>\n <Button\n onClick={handleAddFiles}\n className={classes.addButton}\n variant=\"contained\"\n color=\"primary\"\n disabled={selectedFiles.length === 0}\n >\n {(t as Function)('notebook.upload.modal.addButton', {\n count: selectedFiles.length,\n })}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -37,7 +37,7 @@ const useStyles = makeStyles((theme) => ({
37
37
  position: "absolute",
38
38
  right: theme.spacing(1),
39
39
  top: theme.spacing(1),
40
- color: theme.palette.grey[700]
40
+ color: theme.palette.text.primary
41
41
  },
42
42
  errorBox: {
43
43
  maxWidth: 650,
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteNotebookModal.esm.js","sources":["../../../src/components/notebooks/DeleteNotebookModal.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 Box from '@mui/material/Box';\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 { useDeleteNotebook } from '../../hooks/notebooks/useDeleteNotebook';\nimport { useTranslation } from '../../hooks/useTranslation';\n\nconst useStyles = makeStyles(theme => ({\n dialogPaper: {\n borderRadius: 16,\n },\n dialogTitle: {\n padding: '16px 20px',\n fontStyle: 'inherit',\n },\n dialogContent: {\n paddingTop: 0,\n paddingBottom: theme.spacing(5),\n },\n titleRow: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n },\n titleText: {\n fontWeight: 'bold',\n },\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[700],\n },\n errorBox: {\n maxWidth: 650,\n marginLeft: theme.spacing(2.5),\n marginRight: theme.spacing(2.5),\n },\n dialogActions: {\n justifyContent: 'left',\n padding: theme.spacing(2.5),\n gap: theme.spacing(1),\n },\n deleteButton: {\n textTransform: 'none',\n borderRadius: 999,\n },\n cancelButton: {\n textTransform: 'none',\n borderRadius: 999,\n },\n}));\n\nexport const DeleteNotebookModal = ({\n isOpen,\n onClose,\n onDeleted,\n sessionId,\n name,\n}: {\n isOpen: boolean;\n onClose: () => void;\n onDeleted: () => void;\n sessionId: string;\n name: string;\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const { mutateAsync: deleteNotebook, isError, error } = useDeleteNotebook();\n\n const handleDelete = async () => {\n try {\n await deleteNotebook(sessionId);\n onDeleted();\n onClose();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(e);\n }\n };\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n aria-labelledby=\"delete-notebook-modal\"\n aria-describedby=\"delete-notebook-modal-body\"\n fullWidth\n PaperProps={{\n className: classes.dialogPaper,\n }}\n >\n <DialogTitle className={classes.dialogTitle}>\n <Box className={classes.titleRow}>\n <Typography component=\"span\" className={classes.titleText}>\n {t('notebooks.delete.title', { name } as any)}\n </Typography>\n <IconButton\n aria-label=\"close\"\n onClick={onClose}\n title={t('common.close')}\n size=\"large\"\n className={classes.closeButton}\n >\n <CloseIcon />\n </IconButton>\n </Box>\n </DialogTitle>\n <DialogContent\n id=\"delete-notebook-modal-body\"\n className={classes.dialogContent}\n >\n <Typography variant=\"body2\">{t('notebooks.delete.message')}</Typography>\n </DialogContent>\n {isError && (\n <Box className={classes.errorBox}>\n <Alert severity=\"error\">{String(error)}</Alert>\n </Box>\n )}\n <DialogActions className={classes.dialogActions}>\n <Button\n variant=\"contained\"\n color=\"error\"\n className={classes.deleteButton}\n onClick={handleDelete}\n >\n {t('notebooks.delete.action')}\n </Button>\n <Button\n key=\"cancel\"\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":"DeleteNotebookModal.esm.js","sources":["../../../src/components/notebooks/DeleteNotebookModal.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 Box from '@mui/material/Box';\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 { useDeleteNotebook } from '../../hooks/notebooks/useDeleteNotebook';\nimport { useTranslation } from '../../hooks/useTranslation';\n\nconst useStyles = makeStyles(theme => ({\n dialogPaper: {\n borderRadius: 16,\n },\n dialogTitle: {\n padding: '16px 20px',\n fontStyle: 'inherit',\n },\n dialogContent: {\n paddingTop: 0,\n paddingBottom: theme.spacing(5),\n },\n titleRow: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n },\n titleText: {\n fontWeight: 'bold',\n },\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.text.primary,\n },\n errorBox: {\n maxWidth: 650,\n marginLeft: theme.spacing(2.5),\n marginRight: theme.spacing(2.5),\n },\n dialogActions: {\n justifyContent: 'left',\n padding: theme.spacing(2.5),\n gap: theme.spacing(1),\n },\n deleteButton: {\n textTransform: 'none',\n borderRadius: 999,\n },\n cancelButton: {\n textTransform: 'none',\n borderRadius: 999,\n },\n}));\n\nexport const DeleteNotebookModal = ({\n isOpen,\n onClose,\n onDeleted,\n sessionId,\n name,\n}: {\n isOpen: boolean;\n onClose: () => void;\n onDeleted: () => void;\n sessionId: string;\n name: string;\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const { mutateAsync: deleteNotebook, isError, error } = useDeleteNotebook();\n\n const handleDelete = async () => {\n try {\n await deleteNotebook(sessionId);\n onDeleted();\n onClose();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(e);\n }\n };\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n aria-labelledby=\"delete-notebook-modal\"\n aria-describedby=\"delete-notebook-modal-body\"\n fullWidth\n PaperProps={{\n className: classes.dialogPaper,\n }}\n >\n <DialogTitle className={classes.dialogTitle}>\n <Box className={classes.titleRow}>\n <Typography component=\"span\" className={classes.titleText}>\n {t('notebooks.delete.title', { name } as any)}\n </Typography>\n <IconButton\n aria-label=\"close\"\n onClick={onClose}\n title={t('common.close')}\n size=\"large\"\n className={classes.closeButton}\n >\n <CloseIcon />\n </IconButton>\n </Box>\n </DialogTitle>\n <DialogContent\n id=\"delete-notebook-modal-body\"\n className={classes.dialogContent}\n >\n <Typography variant=\"body2\">{t('notebooks.delete.message')}</Typography>\n </DialogContent>\n {isError && (\n <Box className={classes.errorBox}>\n <Alert severity=\"error\">{String(error)}</Alert>\n </Box>\n )}\n <DialogActions className={classes.dialogActions}>\n <Button\n variant=\"contained\"\n color=\"error\"\n className={classes.deleteButton}\n onClick={handleDelete}\n >\n {t('notebooks.delete.action')}\n </Button>\n <Button\n key=\"cancel\"\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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"}
@@ -41,7 +41,7 @@ const useStyles = makeStyles((theme) => ({
41
41
  },
42
42
  removeButton: {
43
43
  padding: 4,
44
- color: theme.palette.grey[600],
44
+ color: theme.palette.action.active,
45
45
  "&:hover": {
46
46
  color: theme.palette.error.main
47
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FileListItem.esm.js","sources":["../../../src/components/notebooks/FileListItem.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 Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\n\nimport { FileTypeIcon } from './FileTypeIcon';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n display: 'flex',\n alignItems: 'center',\n padding: '8px 12px',\n borderRadius: 8,\n backgroundColor: theme.palette.type === 'dark' ? '#2a2a2a' : '#f5f5f5',\n marginBottom: 8,\n '&:last-child': {\n marginBottom: 0,\n },\n },\n fileInfo: {\n display: 'flex',\n alignItems: 'center',\n flex: 1,\n minWidth: 0,\n gap: 12,\n },\n fileName: {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontSize: '0.875rem',\n },\n fileSize: {\n color: theme.palette.text.secondary,\n fontSize: '0.75rem',\n flexShrink: 0,\n marginRight: 8,\n },\n removeButton: {\n padding: 4,\n color: theme.palette.grey[600],\n '&:hover': {\n color: theme.palette.error.main,\n },\n },\n}));\n\ntype FileListItemProps = {\n file: File;\n onRemove: () => void;\n removeAriaLabel?: string;\n};\n\nconst formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;\n};\n\nconst MAX_FILENAME_LENGTH = 30;\n\nconst truncateFileName = (fileName: string, maxLength: number): string => {\n if (fileName.length <= maxLength) return fileName;\n\n const lastDot = fileName.lastIndexOf('.');\n const extension = lastDot >= 0 ? fileName.slice(lastDot) : '';\n const baseName = lastDot >= 0 ? fileName.slice(0, lastDot) : fileName;\n\n const availableLength = maxLength - extension.length - 3;\n if (availableLength <= 0) return fileName;\n\n return `${baseName.slice(0, availableLength)}...${extension}`;\n};\n\nexport const FileListItem = ({\n file,\n onRemove,\n removeAriaLabel = 'Remove file',\n}: FileListItemProps) => {\n const classes = useStyles();\n const displayName = truncateFileName(file.name, MAX_FILENAME_LENGTH);\n\n return (\n <Box className={classes.container}>\n <Box className={classes.fileInfo}>\n <FileTypeIcon fileName={file.name} />\n <Typography className={classes.fileName} title={file.name}>\n {displayName}\n </Typography>\n </Box>\n <Typography className={classes.fileSize}>\n {formatFileSize(file.size)}\n </Typography>\n <IconButton\n className={classes.removeButton}\n onClick={onRemove}\n aria-label={removeAriaLabel}\n size=\"small\"\n >\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileListItem.esm.js","sources":["../../../src/components/notebooks/FileListItem.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 Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\n\nimport { FileTypeIcon } from './FileTypeIcon';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n display: 'flex',\n alignItems: 'center',\n padding: '8px 12px',\n borderRadius: 8,\n backgroundColor: theme.palette.type === 'dark' ? '#2a2a2a' : '#f5f5f5',\n marginBottom: 8,\n '&:last-child': {\n marginBottom: 0,\n },\n },\n fileInfo: {\n display: 'flex',\n alignItems: 'center',\n flex: 1,\n minWidth: 0,\n gap: 12,\n },\n fileName: {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontSize: '0.875rem',\n },\n fileSize: {\n color: theme.palette.text.secondary,\n fontSize: '0.75rem',\n flexShrink: 0,\n marginRight: 8,\n },\n removeButton: {\n padding: 4,\n color: theme.palette.action.active,\n '&:hover': {\n color: theme.palette.error.main,\n },\n },\n}));\n\ntype FileListItemProps = {\n file: File;\n onRemove: () => void;\n removeAriaLabel?: string;\n};\n\nconst formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;\n};\n\nconst MAX_FILENAME_LENGTH = 30;\n\nconst truncateFileName = (fileName: string, maxLength: number): string => {\n if (fileName.length <= maxLength) return fileName;\n\n const lastDot = fileName.lastIndexOf('.');\n const extension = lastDot >= 0 ? fileName.slice(lastDot) : '';\n const baseName = lastDot >= 0 ? fileName.slice(0, lastDot) : fileName;\n\n const availableLength = maxLength - extension.length - 3;\n if (availableLength <= 0) return fileName;\n\n return `${baseName.slice(0, availableLength)}...${extension}`;\n};\n\nexport const FileListItem = ({\n file,\n onRemove,\n removeAriaLabel = 'Remove file',\n}: FileListItemProps) => {\n const classes = useStyles();\n const displayName = truncateFileName(file.name, MAX_FILENAME_LENGTH);\n\n return (\n <Box className={classes.container}>\n <Box className={classes.fileInfo}>\n <FileTypeIcon fileName={file.name} />\n <Typography className={classes.fileName} title={file.name}>\n {displayName}\n </Typography>\n </Box>\n <Typography className={classes.fileSize}>\n {formatFileSize(file.size)}\n </Typography>\n <IconButton\n className={classes.removeButton}\n onClick={onRemove}\n aria-label={removeAriaLabel}\n size=\"small\"\n >\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { useState, useCallback, useEffect, useRef } from 'react';
3
- import { useApi } from '@backstage/core-plugin-api';
3
+ import { useApi, configApiRef } from '@backstage/core-plugin-api';
4
4
  import { Typography, makeStyles } from '@material-ui/core';
5
- import { ChatbotFooter, MessageBar, ChatbotFootnote, ChatbotContent, ChatbotWelcomePrompt } from '@patternfly/chatbot';
5
+ import { ChatbotFooter, MessageBar, ChatbotFootnote, ChatbotContent } from '@patternfly/chatbot';
6
6
  import { DrawerPanelContent, AlertGroup, Alert, AlertVariant, AlertActionCloseButton, Drawer, DrawerContent, DrawerContentBody, Tooltip, Button } from '@patternfly/react-core';
7
7
  import { TimesIcon } from '@patternfly/react-icons';
8
8
  import { useQueryClient } from '@tanstack/react-query';
@@ -11,8 +11,8 @@ import { TEMP_CONVERSATION_ID, UNTITLED_NOTEBOOK_NAME, NOTEBOOK_MAX_FILES } from
11
11
  import { useCreateNotebookMessage } from '../../hooks/notebooks/useCreateNotebookMessage.esm.js';
12
12
  import { useDocumentStatusPolling } from '../../hooks/notebooks/useDocumentStatusPolling.esm.js';
13
13
  import { useConversationMessages } from '../../hooks/useConversationMessages.esm.js';
14
+ import { useNotebookWelcomePrompts } from '../../hooks/useNotebookWelcomePrompts.esm.js';
14
15
  import { useTranslation } from '../../hooks/useTranslation.esm.js';
15
- import { useWelcomePrompts } from '../../hooks/useWelcomePrompts.esm.js';
16
16
  import { LightspeedChatBox } from '../LightspeedChatBox.esm.js';
17
17
  import { AddDocumentModal } from './AddDocumentModal.esm.js';
18
18
  import { DocumentSidebar } from './DocumentSidebar.esm.js';
@@ -31,7 +31,19 @@ const useStyles = makeStyles((theme) => ({
31
31
  },
32
32
  drawerContainer: {
33
33
  flex: 1,
34
- minHeight: 0
34
+ minHeight: 0,
35
+ "& .pf-v6-c-drawer__panel, & .pf-v5-c-drawer__panel": {
36
+ backgroundColor: "var(--pf-t--global--background--color--floating--default) !important"
37
+ },
38
+ "& .pf-v6-c-drawer__panel-main, & .pf-v5-c-drawer__panel-main": {
39
+ backgroundColor: "var(--pf-t--global--background--color--floating--default) !important"
40
+ },
41
+ "& .pf-v6-c-drawer__panel-body, & .pf-v5-c-drawer__panel-body": {
42
+ backgroundColor: "var(--pf-t--global--background--color--floating--default) !important"
43
+ },
44
+ "& .pf-v6-c-drawer__splitter, & .pf-v5-c-drawer__splitter": {
45
+ backgroundColor: "var(--pf-t--global--background--color--floating--default)"
46
+ }
35
47
  },
36
48
  expandStrip: {
37
49
  display: "flex",
@@ -39,7 +51,8 @@ const useStyles = makeStyles((theme) => ({
39
51
  alignItems: "center",
40
52
  paddingTop: theme.spacing(1.5),
41
53
  gap: theme.spacing(1),
42
- borderRight: "1px solid var(--pf-t--global--border--color--default)"
54
+ borderRight: "1px solid var(--pf-t--global--border--color--default)",
55
+ backgroundColor: "var(--pf-t--global--background--color--floating--default)"
43
56
  },
44
57
  addIconButton: {
45
58
  padding: 0,
@@ -55,7 +68,8 @@ const useStyles = makeStyles((theme) => ({
55
68
  topBar: {
56
69
  display: "flex",
57
70
  justifyContent: "flex-end",
58
- padding: `${theme.spacing(1.5)}px ${theme.spacing(2)}px`
71
+ padding: `${theme.spacing(1.5)}px ${theme.spacing(2)}px`,
72
+ backgroundColor: "var(--pf-t--global--background--color--floating--default)"
59
73
  },
60
74
  closeButton: {
61
75
  textTransform: "none"
@@ -78,11 +92,30 @@ const useStyles = makeStyles((theme) => ({
78
92
  minHeight: 0,
79
93
  overflow: "hidden"
80
94
  },
81
- alertContainer: {
95
+ notebookDisclaimerStrip: {
96
+ width: "100%",
97
+ maxWidth: "unset",
98
+ margin: 0,
99
+ padding: `0 0 ${theme.spacing(1)}px`,
100
+ boxSizing: "border-box",
101
+ backgroundColor: "var(--pf-t--global--background--color--floating--default)",
102
+ "& .pf-v6-c-alert, & .pf-v5-c-alert": {
103
+ backgroundColor: "var(--pf-t--global--background--color--secondary--default) !important"
104
+ },
105
+ "& .pf-v6-c-alert__content, & .pf-v5-c-alert__content": {
106
+ backgroundColor: "transparent !important"
107
+ },
108
+ "& .pf-v6-c-alert__body, & .pf-v5-c-alert__body": {
109
+ backgroundColor: "transparent !important"
110
+ },
111
+ "& .pf-v6-c-alert__description, & .pf-v5-c-alert__description": {
112
+ backgroundColor: "transparent !important"
113
+ }
114
+ },
115
+ notebookDisclaimerInner: {
82
116
  width: "95%",
83
117
  maxWidth: "unset",
84
- margin: "0 auto",
85
- padding: `0 0 ${theme.spacing(1)}px`
118
+ margin: "0 auto"
86
119
  },
87
120
  toastAlertGroup: {
88
121
  "--pf-v6-c-alert-group--m-toast--InsetInlineEnd": `${theme.spacing(2.5)}px`,
@@ -129,24 +162,37 @@ const useStyles = makeStyles((theme) => ({
129
162
  paddingTop: theme.spacing(0.5)
130
163
  },
131
164
  promptSuggestions: {
165
+ display: "flex",
166
+ flexWrap: "wrap",
167
+ gap: theme.spacing(1),
132
168
  width: "95%",
133
169
  maxWidth: "unset",
134
- margin: "0 auto"
170
+ margin: `${theme.spacing(3)}px auto ${theme.spacing(3)}px auto`,
171
+ justifyContent: "flex-start"
135
172
  },
136
- footerAlignedAlert: {
137
- maxWidth: "unset",
138
- width: "95%",
139
- margin: "0 auto",
140
- padding: `0 0 ${theme.spacing(1)}px`
173
+ promptPill: {
174
+ appearance: "none",
175
+ background: "transparent",
176
+ border: `1px solid var(--pf-t--global--border--color--default)`,
177
+ borderRadius: "999px",
178
+ padding: `${theme.spacing(1)}px ${theme.spacing(2.5)}px`,
179
+ fontSize: "0.875rem",
180
+ color: "var(--pf-t--global--text--color--regular)",
181
+ cursor: "pointer",
182
+ transition: "background-color 0.15s, border-color 0.15s",
183
+ "&:hover": {
184
+ backgroundColor: "var(--pf-t--global--background--color--secondary--default)",
185
+ borderColor: "var(--pf-t--global--border--color--hover)"
186
+ }
141
187
  },
142
188
  footer: {
143
- backgroundColor: theme.palette.background.paper,
189
+ backgroundColor: "var(--pf-t--global--background--color--floating--default)",
144
190
  "&>.pf-chatbot__footer-container": {
145
191
  width: "95% !important",
146
192
  maxWidth: "unset !important"
147
193
  },
148
194
  "& .pf-chatbot__message-bar": {
149
- backgroundColor: theme.palette.grey[300]
195
+ backgroundColor: theme.palette.type === "light" ? theme.palette.grey[100] : "var(--pf-t--global--background--color--secondary--default)"
150
196
  }
151
197
  },
152
198
  chatContent: {
@@ -167,14 +213,15 @@ const NotebookView = ({
167
213
  avatar,
168
214
  profileLoading,
169
215
  topicRestrictionEnabled,
170
- selectedModel,
171
216
  onClose
172
217
  }) => {
173
218
  const classes = useStyles();
174
219
  const { t } = useTranslation();
175
220
  const queryClient = useQueryClient();
221
+ const configApi = useApi(configApiRef);
176
222
  const notebooksApi = useApi(notebooksApiRef);
177
223
  const { mutateAsync: notebookCreateMessage } = useCreateNotebookMessage();
224
+ const notebookModel = configApi.getOptionalString("lightspeed.notebooks.queryDefaults.model") || "";
178
225
  const [conversationId, setConversationId] = useState(
179
226
  metadata?.conversation_id ?? TEMP_CONVERSATION_ID
180
227
  );
@@ -228,7 +275,7 @@ const NotebookView = ({
228
275
  const { conversationMessages, handleInputPrompt, scrollToBottomRef } = useConversationMessages(
229
276
  conversationId,
230
277
  userName,
231
- selectedModel,
278
+ notebookModel,
232
279
  "",
233
280
  avatar,
234
281
  onComplete,
@@ -251,15 +298,11 @@ const NotebookView = ({
251
298
  },
252
299
  [handleInputPrompt, t]
253
300
  );
254
- const samplePrompts = useWelcomePrompts();
255
- const welcomePrompts = samplePrompts?.map((prompt) => {
256
- const p = prompt;
257
- return {
258
- title: p.title,
259
- message: p.message,
260
- onClick: () => sendMessage(p.message)
261
- };
262
- }) ?? [];
301
+ const notebookPrompts = useNotebookWelcomePrompts();
302
+ const welcomePrompts = notebookPrompts.map((title) => ({
303
+ title,
304
+ onClick: () => sendMessage(title)
305
+ }));
263
306
  const [sidebarCollapsed, setSidebarCollapsed] = useState(false);
264
307
  const [isUploadModalOpen, setIsUploadModalOpen] = useState(false);
265
308
  const [uploadingFileNames, setUploadingFileNames] = useState([]);
@@ -395,6 +438,7 @@ const NotebookView = ({
395
438
  )
396
439
  }
397
440
  );
441
+ const renderNotebookDisclaimerAlert = () => /* @__PURE__ */ jsx("div", { className: classes.notebookDisclaimerStrip, children: /* @__PURE__ */ jsx("div", { className: classes.notebookDisclaimerInner, children: /* @__PURE__ */ jsx(Alert, { isInline: true, variant: "info", title: t("aria.important"), children: t("disclaimer.withoutValidation") }) }) });
398
442
  const renderMainContent = () => {
399
443
  if (!hasDocuments && messages.length === 0) {
400
444
  return /* @__PURE__ */ jsx(Typography, { component: "span", className: classes.notebookEmptyUpload, children: /* @__PURE__ */ jsx(UploadResourceScreen, { onUploadClick: handleOpenUploadModal }) });
@@ -416,19 +460,22 @@ const NotebookView = ({
416
460
  ) });
417
461
  }
418
462
  return /* @__PURE__ */ jsxs("div", { className: classes.welcomeContainer, children: [
419
- /* @__PURE__ */ jsx("div", { className: classes.alertContainer, children: /* @__PURE__ */ jsx(Alert, { isInline: true, variant: "info", title: t("aria.important"), children: t("disclaimer.withoutValidation") }) }),
463
+ /* @__PURE__ */ jsx("div", { style: { flex: 1 } }),
464
+ renderNotebookDisclaimerAlert(),
420
465
  /* @__PURE__ */ jsxs("div", { className: classes.notebookContentArea, children: [
421
466
  /* @__PURE__ */ jsx(Typography, { className: classes.notebookHeading, children: notebookName }),
422
467
  topicSummary && /* @__PURE__ */ jsx(Typography, { className: classes.notebookSummary, children: topicSummary })
423
468
  ] }),
424
- welcomePrompts.length > 0 && /* @__PURE__ */ jsx("div", { className: classes.promptSuggestions, children: /* @__PURE__ */ jsx(
425
- ChatbotWelcomePrompt,
469
+ welcomePrompts.length > 0 && /* @__PURE__ */ jsx("div", { className: classes.promptSuggestions, children: welcomePrompts.map((prompt) => /* @__PURE__ */ jsx(
470
+ "button",
426
471
  {
427
- title: "",
428
- description: "",
429
- prompts: welcomePrompts
430
- }
431
- ) })
472
+ type: "button",
473
+ className: classes.promptPill,
474
+ onClick: prompt.onClick,
475
+ children: prompt.title
476
+ },
477
+ prompt.title
478
+ )) })
432
479
  ] });
433
480
  };
434
481
  return /* @__PURE__ */ jsxs("div", { className: classes.root, children: [
@@ -522,7 +569,7 @@ const NotebookView = ({
522
569
  }
523
570
  ) }),
524
571
  /* @__PURE__ */ jsx("div", { className: classes.mainContent, children: renderMainContent() }),
525
- !hasDocuments && messages.length === 0 && /* @__PURE__ */ jsx("div", { className: classes.footerAlignedAlert, children: /* @__PURE__ */ jsx(Alert, { isInline: true, variant: "info", title: t("aria.important"), children: t("disclaimer.withoutValidation") }) }),
572
+ !hasDocuments && messages.length === 0 && renderNotebookDisclaimerAlert(),
526
573
  /* @__PURE__ */ jsxs(ChatbotFooter, { className: classes.footer, children: [
527
574
  documents.length === 0 ? /* @__PURE__ */ jsx(
528
575
  Tooltip,