@red-hat-developer-hub/backstage-plugin-intelligent-assistant 4.1.0 → 4.3.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 (57) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +23 -0
  3. package/config.schema.json +117 -0
  4. package/dist/api/NotebooksApiClient.esm.js +3 -2
  5. package/dist/api/NotebooksApiClient.esm.js.map +1 -1
  6. package/dist/api/notebooksApi.esm.js.map +1 -1
  7. package/dist/components/LightSpeedChat.esm.js +280 -118
  8. package/dist/components/LightSpeedChat.esm.js.map +1 -1
  9. package/dist/components/LightspeedDrawerContext.esm.js.map +1 -1
  10. package/dist/components/LightspeedDrawerProvider.esm.js +5 -4
  11. package/dist/components/LightspeedDrawerProvider.esm.js.map +1 -1
  12. package/dist/components/ToastAlertGroup.esm.js +56 -0
  13. package/dist/components/ToastAlertGroup.esm.js.map +1 -0
  14. package/dist/components/notebooks/AddDocumentModal.esm.js +165 -144
  15. package/dist/components/notebooks/AddDocumentModal.esm.js.map +1 -1
  16. package/dist/components/notebooks/DeleteDocumentModal.esm.js +73 -38
  17. package/dist/components/notebooks/DeleteDocumentModal.esm.js.map +1 -1
  18. package/dist/components/notebooks/DeleteNotebookModal.esm.js +80 -40
  19. package/dist/components/notebooks/DeleteNotebookModal.esm.js.map +1 -1
  20. package/dist/components/notebooks/NotebookHeaderActions.esm.js +78 -0
  21. package/dist/components/notebooks/NotebookHeaderActions.esm.js.map +1 -0
  22. package/dist/components/notebooks/NotebookStreamProvider.esm.js +47 -0
  23. package/dist/components/notebooks/NotebookStreamProvider.esm.js.map +1 -0
  24. package/dist/components/notebooks/NotebookView.esm.js +284 -349
  25. package/dist/components/notebooks/NotebookView.esm.js.map +1 -1
  26. package/dist/components/notebooks/NotebooksTab.esm.js +2 -2
  27. package/dist/components/notebooks/NotebooksTab.esm.js.map +1 -1
  28. package/dist/components/notebooks/OverwriteConfirmModal.esm.js +126 -82
  29. package/dist/components/notebooks/OverwriteConfirmModal.esm.js.map +1 -1
  30. package/dist/components/notebooks/SidebarCollapseIcon.esm.js +8 -6
  31. package/dist/components/notebooks/SidebarCollapseIcon.esm.js.map +1 -1
  32. package/dist/components/notebooks/UploadResourceScreen.esm.js +1 -0
  33. package/dist/components/notebooks/UploadResourceScreen.esm.js.map +1 -1
  34. package/dist/components/notebooks/notebookDialogStyles.esm.js +40 -0
  35. package/dist/components/notebooks/notebookDialogStyles.esm.js.map +1 -0
  36. package/dist/components/notebooks/notebookStreamStore.esm.js +282 -0
  37. package/dist/components/notebooks/notebookStreamStore.esm.js.map +1 -0
  38. package/dist/hooks/notebooks/useCreateNotebookMessage.esm.js +3 -2
  39. package/dist/hooks/notebooks/useCreateNotebookMessage.esm.js.map +1 -1
  40. package/dist/hooks/useConversationMessages.esm.js +31 -108
  41. package/dist/hooks/useConversationMessages.esm.js.map +1 -1
  42. package/dist/hooks/useLightspeedProviderState.esm.js +14 -5
  43. package/dist/hooks/useLightspeedProviderState.esm.js.map +1 -1
  44. package/dist/index.esm.js +2 -2
  45. package/dist/index.esm.js.map +1 -1
  46. package/dist/utils/dom-extractor.esm.js +816 -0
  47. package/dist/utils/dom-extractor.esm.js.map +1 -0
  48. package/dist/utils/dom-selectors.esm.js +91 -0
  49. package/dist/utils/dom-selectors.esm.js.map +1 -0
  50. package/dist/utils/scoped-dialog-utils.esm.js +35 -0
  51. package/dist/utils/scoped-dialog-utils.esm.js.map +1 -0
  52. package/dist/utils/sensitive-data-redactor.esm.js +66 -0
  53. package/dist/utils/sensitive-data-redactor.esm.js.map +1 -0
  54. package/dist/utils/stream-event-helpers.esm.js +105 -0
  55. package/dist/utils/stream-event-helpers.esm.js.map +1 -0
  56. package/package.json +14 -14
  57. package/config.d.ts +0 -99
@@ -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 { 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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"}
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 { getScopedDialogProps } from '../../utils/scoped-dialog-utils';\nimport { FileTypeIcon } from './FileTypeIcon';\nimport { notebookDialogStyles } from './notebookDialogStyles';\n\nconst useStyles = makeStyles(theme => ({\n ...notebookDialogStyles(theme),\n titleTextCompact: {\n fontWeight: 600,\n fontSize: '1rem',\n lineHeight: '1.375rem',\n letterSpacing: '-0.25px',\n },\n closeButton: {\n color: theme.palette.text.primary,\n },\n dialogContent: {\n padding: '0 24px 24px',\n },\n dialogContentCompact: {\n padding: '0 16px 16px',\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 fileItemCompact: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n padding: `${theme.spacing(1)}px 0`,\n borderBottom:\n '1px solid var(--pf-t--global--border--color--default, #c7c7c7)',\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 dialogActionsCompact: {\n justifyContent: 'flex-start',\n padding: '12px 16px !important',\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 isCompact?: boolean;\n};\n\nexport const OverwriteConfirmModal = ({\n isOpen,\n onClose,\n onConfirm,\n onBack,\n allFiles,\n duplicateFileNames,\n isCompact = false,\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 const scopedProps = getScopedDialogProps(isCompact);\n\n return (\n <Dialog\n open={isOpen}\n onClose={handleClose}\n aria-labelledby=\"overwrite-confirm-modal-title\"\n {...scopedProps}\n PaperProps={{\n className: isCompact ? classes.dialogPaperCompact : classes.dialogPaper,\n ...scopedProps.PaperProps,\n }}\n >\n <DialogTitle\n className={isCompact ? classes.dialogTitleCompact : classes.dialogTitle}\n >\n <Typography\n component=\"h2\"\n className={isCompact ? classes.titleTextCompact : classes.titleText}\n >\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 fontSize={isCompact ? 'small' : 'medium'} />\n </IconButton>\n </DialogTitle>\n\n <DialogContent\n className={\n isCompact ? classes.dialogContentCompact : classes.dialogContent\n }\n >\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\n key={file.name}\n className={isCompact ? classes.fileItemCompact : classes.fileItem}\n >\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\n className={\n isCompact ? classes.dialogActionsCompact : classes.dialogActions\n }\n >\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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"}
@@ -1,26 +1,28 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
 
3
- const SidebarCollapseIcon = ({ className }) => /* @__PURE__ */ jsx(
3
+ const SidebarCollapseIcon = ({ className, size = 24 }) => /* @__PURE__ */ jsx(
4
4
  "svg",
5
5
  {
6
6
  className,
7
- width: "24",
8
- height: "24",
7
+ width: size,
8
+ height: size,
9
9
  viewBox: "0 0 24 24",
10
10
  fill: "none",
11
11
  xmlns: "http://www.w3.org/2000/svg",
12
+ style: { display: "block" },
12
13
  children: /* @__PURE__ */ jsx("path", { d: "M16 21V3H14V21H16ZM12 17V7L7 12L12 17Z", fill: "currentColor" })
13
14
  }
14
15
  );
15
- const SidebarExpandIcon = ({ className }) => /* @__PURE__ */ jsx(
16
+ const SidebarExpandIcon = ({ className, size = 24 }) => /* @__PURE__ */ jsx(
16
17
  "svg",
17
18
  {
18
19
  className,
19
- width: "24",
20
- height: "24",
20
+ width: size,
21
+ height: size,
21
22
  viewBox: "0 0 24 24",
22
23
  fill: "none",
23
24
  xmlns: "http://www.w3.org/2000/svg",
25
+ style: { display: "block" },
24
26
  children: /* @__PURE__ */ jsx("path", { d: "M9 21V3H11V21H9ZM13 17V7L18 12L13 17Z", fill: "currentColor" })
25
27
  }
26
28
  );
@@ -1 +1 @@
1
- {"version":3,"file":"SidebarCollapseIcon.esm.js","sources":["../../../src/components/notebooks/SidebarCollapseIcon.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\ntype IconProps = {\n className?: string;\n};\n\nexport const SidebarCollapseIcon = ({ className }: IconProps) => (\n <svg\n className={className}\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M16 21V3H14V21H16ZM12 17V7L7 12L12 17Z\" fill=\"currentColor\" />\n </svg>\n);\n\nexport const SidebarExpandIcon = ({ className }: IconProps) => (\n <svg\n className={className}\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M9 21V3H11V21H9ZM13 17V7L18 12L13 17Z\" fill=\"currentColor\" />\n </svg>\n);\n\ntype AddCircleFilledIconProps = IconProps & {\n disabled?: boolean;\n};\n\nexport const AddCircleFilledIcon = ({\n className,\n disabled,\n}: AddCircleFilledIconProps) => (\n <svg\n className={className}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.75 0C12.0312 1.02089e-05 15.5 3.46877 15.5 7.75C15.5 12.0312 12.0312 15.5 7.75 15.5C3.46877 15.5 1.02086e-05 12.0312 0 7.75C0 3.46876 3.46876 0 7.75 0ZM6.875 3.25C6.66876 3.25 6.5 3.41876 6.5 3.625V6.5H3.625C3.41876 6.5 3.25 6.66876 3.25 6.875V8.625C3.25001 8.83123 3.41877 9 3.625 9H6.5V11.875C6.50002 12.0812 6.66877 12.25 6.875 12.25H8.625C8.83122 12.25 8.99998 12.0812 9 11.875V9H11.875C12.0812 8.99998 12.25 8.83122 12.25 8.625V6.875C12.25 6.66877 12.0812 6.50002 11.875 6.5H9V3.625C9 3.41877 8.83123 3.25001 8.625 3.25H6.875Z\"\n fill={disabled ? '#8a8d90' : '#0066CC'}\n />\n </svg>\n);\n"],"names":[],"mappings":";;AAoBO,MAAM,mBAAA,GAAsB,CAAC,EAAE,SAAA,EAAU,qBAC9C,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA;AAAA,IACA,KAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAO,IAAA;AAAA,IACP,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAK,MAAA;AAAA,IACL,KAAA,EAAM,4BAAA;AAAA,IAEN,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,wCAAA,EAAyC,MAAK,cAAA,EAAe;AAAA;AACvE;AAGK,MAAM,iBAAA,GAAoB,CAAC,EAAE,SAAA,EAAU,qBAC5C,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA;AAAA,IACA,KAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAO,IAAA;AAAA,IACP,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAK,MAAA;AAAA,IACL,KAAA,EAAM,4BAAA;AAAA,IAEN,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uCAAA,EAAwC,MAAK,cAAA,EAAe;AAAA;AACtE;AAOK,MAAM,sBAAsB,CAAC;AAAA,EAClC,SAAA;AAAA,EACA;AACF,CAAA,qBACE,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA;AAAA,IACA,KAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAO,IAAA;AAAA,IACP,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAK,MAAA;AAAA,IACL,KAAA,EAAM,4BAAA;AAAA,IAEN,QAAA,kBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,whBAAA;AAAA,QACF,IAAA,EAAM,WAAW,SAAA,GAAY;AAAA;AAAA;AAC/B;AACF;;;;"}
1
+ {"version":3,"file":"SidebarCollapseIcon.esm.js","sources":["../../../src/components/notebooks/SidebarCollapseIcon.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\ntype IconProps = {\n className?: string;\n size?: number;\n};\n\nexport const SidebarCollapseIcon = ({ className, size = 24 }: IconProps) => (\n <svg\n className={className}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ display: 'block' }}\n >\n <path d=\"M16 21V3H14V21H16ZM12 17V7L7 12L12 17Z\" fill=\"currentColor\" />\n </svg>\n);\n\nexport const SidebarExpandIcon = ({ className, size = 24 }: IconProps) => (\n <svg\n className={className}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ display: 'block' }}\n >\n <path d=\"M9 21V3H11V21H9ZM13 17V7L18 12L13 17Z\" fill=\"currentColor\" />\n </svg>\n);\n\ntype AddCircleFilledIconProps = {\n className?: string;\n disabled?: boolean;\n};\n\nexport const AddCircleFilledIcon = ({\n className,\n disabled,\n}: AddCircleFilledIconProps) => (\n <svg\n className={className}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.75 0C12.0312 1.02089e-05 15.5 3.46877 15.5 7.75C15.5 12.0312 12.0312 15.5 7.75 15.5C3.46877 15.5 1.02086e-05 12.0312 0 7.75C0 3.46876 3.46876 0 7.75 0ZM6.875 3.25C6.66876 3.25 6.5 3.41876 6.5 3.625V6.5H3.625C3.41876 6.5 3.25 6.66876 3.25 6.875V8.625C3.25001 8.83123 3.41877 9 3.625 9H6.5V11.875C6.50002 12.0812 6.66877 12.25 6.875 12.25H8.625C8.83122 12.25 8.99998 12.0812 9 11.875V9H11.875C12.0812 8.99998 12.25 8.83122 12.25 8.625V6.875C12.25 6.66877 12.0812 6.50002 11.875 6.5H9V3.625C9 3.41877 8.83123 3.25001 8.625 3.25H6.875Z\"\n fill={disabled ? '#8a8d90' : '#0066CC'}\n />\n </svg>\n);\n"],"names":[],"mappings":";;AAqBO,MAAM,sBAAsB,CAAC,EAAE,SAAA,EAAW,IAAA,GAAO,IAAG,qBACzD,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA;AAAA,IACA,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,IAAA;AAAA,IACR,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAK,MAAA;AAAA,IACL,KAAA,EAAM,4BAAA;AAAA,IACN,KAAA,EAAO,EAAE,OAAA,EAAS,OAAA,EAAQ;AAAA,IAE1B,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,wCAAA,EAAyC,MAAK,cAAA,EAAe;AAAA;AACvE;AAGK,MAAM,oBAAoB,CAAC,EAAE,SAAA,EAAW,IAAA,GAAO,IAAG,qBACvD,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA;AAAA,IACA,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,IAAA;AAAA,IACR,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAK,MAAA;AAAA,IACL,KAAA,EAAM,4BAAA;AAAA,IACN,KAAA,EAAO,EAAE,OAAA,EAAS,OAAA,EAAQ;AAAA,IAE1B,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uCAAA,EAAwC,MAAK,cAAA,EAAe;AAAA;AACtE;AAQK,MAAM,sBAAsB,CAAC;AAAA,EAClC,SAAA;AAAA,EACA;AACF,CAAA,qBACE,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA;AAAA,IACA,KAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAO,IAAA;AAAA,IACP,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAK,MAAA;AAAA,IACL,KAAA,EAAM,4BAAA;AAAA,IAEN,QAAA,kBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,whBAAA;AAAA,QACF,IAAA,EAAM,WAAW,SAAA,GAAY;AAAA;AAAA;AAC/B;AACF;;;;"}
@@ -66,6 +66,7 @@ const UploadResourceScreen = ({
66
66
  variant: "secondary",
67
67
  className: classes.uploadButton,
68
68
  icon: /* @__PURE__ */ jsx(AddCircleOIcon, {}),
69
+ iconPosition: "start",
69
70
  onClick: onUploadClick,
70
71
  children: t("notebook.view.upload.action")
71
72
  }
@@ -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 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 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=\"start\"\n onClick={onUploadClick}\n >\n {t('notebook.view.upload.action')}\n </Button>\n </>\n )}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAuBA,MAAM,SAAA,GAAY,WAAW,CAAA,KAAA,MAAU;AAAA,EACrC,SAAA,EAAW;AAAA,IACT,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,QAAA;AAAA,IAChB,IAAA,EAAM,CAAA;AAAA,IACN,SAAA,EAAW,QAAA;AAAA,IACX,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,GACtB;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,QAAA,EAAU,EAAA;AAAA,IACV,KAAA,EAAO,0CAAA;AAAA,IACP,uBAAA,EAAyB;AAAA,MACvB,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA,UAAA,EAAY;AAAA,IACV,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,GACtB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,UAAA,EAAY,GAAA;AAAA,IACZ,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EAAY,MAAA;AAAA,IACZ,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,KAAA,EAAO,0CAAA;AAAA,IACP,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,aAAA,EAAe,MAAA;AAAA,IACf,YAAA,EAAc,GAAA;AAAA,IACd,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC5B,YAAA,EAAc,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA;AAEjC,CAAA,CAAE,CAAA;AAOK,MAAM,uBAAuB,CAAC;AAAA,EACnC,aAAA;AAAA,EACA,YAAA,GAAe;AACjB,CAAA,KAAiC;AAC/B,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,SAAA,EACtB,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAW,OAAA,CAAQ,IAAA,EAAM,CAAA;AAAA,IACrC,+BACC,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,UAAA,EACtB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,MAAK,IAAA,EAAK,CAAA;AAAA,4BAClB,UAAA,EAAA,EAAW,SAAA,EAAW,QAAQ,OAAA,EAC5B,QAAA,EAAA,CAAA,CAAE,kCAAkC,CAAA,EACvC;AAAA,OAAA,EACF,CAAA;AAAA,0BACC,UAAA,EAAA,EAAW,SAAA,EAAW,QAAQ,WAAA,EAC5B,QAAA,EAAA,CAAA,CAAE,sCAAsC,CAAA,EAC3C;AAAA,KAAA,EACF,oBAEA,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,cAAW,SAAA,EAAW,OAAA,CAAQ,OAAA,EAC5B,QAAA,EAAA,CAAA,CAAE,8BAA8B,CAAA,EACnC,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,WAAA;AAAA,UACR,WAAW,OAAA,CAAQ,YAAA;AAAA,UACnB,IAAA,sBAAO,cAAA,EAAA,EAAe,CAAA;AAAA,UACtB,YAAA,EAAa,OAAA;AAAA,UACb,OAAA,EAAS,aAAA;AAAA,UAER,YAAE,6BAA6B;AAAA;AAAA;AAClC,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;;;;"}
@@ -0,0 +1,40 @@
1
+ const notebookDialogStyles = (theme) => ({
2
+ dialogPaper: {
3
+ borderRadius: 24,
4
+ maxWidth: 578
5
+ },
6
+ dialogPaperCompact: {
7
+ borderRadius: 12,
8
+ maxWidth: "300px"
9
+ },
10
+ dialogTitle: {
11
+ display: "flex",
12
+ alignItems: "center",
13
+ justifyContent: "space-between",
14
+ padding: "24px 24px 16px"
15
+ },
16
+ dialogTitleCompact: {
17
+ display: "flex",
18
+ alignItems: "center",
19
+ justifyContent: "space-between",
20
+ padding: "16px 16px 12px !important"
21
+ },
22
+ titleText: {
23
+ fontWeight: 500,
24
+ fontSize: "1.25rem",
25
+ lineHeight: "1.625rem",
26
+ letterSpacing: "-0.25px"
27
+ },
28
+ closeButton: {
29
+ color: theme.palette.text.primary
30
+ },
31
+ dialogContent: {
32
+ padding: "0 24px 24px"
33
+ },
34
+ dialogContentCompact: {
35
+ padding: "0 16px 16px !important"
36
+ }
37
+ });
38
+
39
+ export { notebookDialogStyles };
40
+ //# sourceMappingURL=notebookDialogStyles.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notebookDialogStyles.esm.js","sources":["../../../src/components/notebooks/notebookDialogStyles.ts"],"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 { Theme } from '@material-ui/core/styles';\n\nexport const notebookDialogStyles = (theme: Theme) =>\n ({\n dialogPaper: {\n borderRadius: 24,\n maxWidth: 578,\n },\n dialogPaperCompact: {\n borderRadius: 12,\n maxWidth: '300px',\n },\n dialogTitle: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '24px 24px 16px',\n },\n dialogTitleCompact: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '16px 16px 12px !important',\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 dialogContentCompact: {\n padding: '0 16px 16px !important',\n },\n }) as const;\n"],"names":[],"mappings":"AAkBO,MAAM,oBAAA,GAAuB,CAAC,KAAA,MAClC;AAAA,EACC,WAAA,EAAa;AAAA,IACX,YAAA,EAAc,EAAA;AAAA,IACd,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,YAAA,EAAc,EAAA;AAAA,IACd,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,WAAA,EAAa;AAAA,IACX,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,eAAA;AAAA,IAChB,OAAA,EAAS;AAAA,GACX;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,eAAA;AAAA,IAChB,OAAA,EAAS;AAAA,GACX;AAAA,EACA,SAAA,EAAW;AAAA,IACT,UAAA,EAAY,GAAA;AAAA,IACZ,QAAA,EAAU,SAAA;AAAA,IACV,UAAA,EAAY,UAAA;AAAA,IACZ,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK;AAAA,GAC5B;AAAA,EACA,aAAA,EAAe;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA,oBAAA,EAAsB;AAAA,IACpB,OAAA,EAAS;AAAA;AAEb,CAAA;;;;"}
@@ -0,0 +1,282 @@
1
+ import { TEMP_CONVERSATION_ID } from '../../const.esm.js';
2
+ import { setSharedToolCallsCache, migrateSharedToolCallsCacheSessionPrefixToConversation, clearSharedToolCallsCacheSessionPrefix } from '../../hooks/toolCallsCacheStore.esm.js';
3
+ import { normalizeChatUserInput, createUserMessage, getTimestamp, createBotMessage, transformDocumentsToSources } from '../../utils/lightspeed-chatbox-utils.esm.js';
4
+ import queryClient from '../../utils/queryClient.esm.js';
5
+ import { createTempToolCallsCacheSessionPrefix, parseSSEBuffer, parseToolCallFromEvent, toolCallIdKey, normalizeToolCalls, parseToolResultFromEvent, applyToolResultToToolCalls } from '../../utils/stream-event-helpers.esm.js';
6
+
7
+ const IDLE_SNAPSHOT = Object.freeze({
8
+ messages: [],
9
+ conversationId: "",
10
+ requestId: "",
11
+ status: "idle"
12
+ });
13
+ function createNotebookStreamStore() {
14
+ const entries = /* @__PURE__ */ new Map();
15
+ const ensureEntry = (sessionId) => {
16
+ let entry = entries.get(sessionId);
17
+ if (!entry) {
18
+ entry = {
19
+ snapshot: IDLE_SNAPSHOT,
20
+ listeners: /* @__PURE__ */ new Set(),
21
+ generation: 0,
22
+ pendingToolCalls: {}
23
+ };
24
+ entries.set(sessionId, entry);
25
+ }
26
+ return entry;
27
+ };
28
+ const emit = (sessionId, next) => {
29
+ const entry = ensureEntry(sessionId);
30
+ entry.snapshot = { ...entry.snapshot, ...next };
31
+ entry.listeners.forEach((l) => l());
32
+ };
33
+ const updateSessionConversationId = (sessionId, conversationId) => {
34
+ queryClient.setQueryData(
35
+ ["notebooks", "session", sessionId],
36
+ (old) => old ? {
37
+ ...old,
38
+ metadata: { ...old.metadata, conversation_id: conversationId }
39
+ } : old
40
+ );
41
+ };
42
+ async function runStream(sessionId, params) {
43
+ const {
44
+ prompt,
45
+ seedMessages,
46
+ userName,
47
+ avatar,
48
+ botAvatar,
49
+ selectedModel,
50
+ createMessage
51
+ } = params;
52
+ const entry = ensureEntry(sessionId);
53
+ const signal = entry.abort.signal;
54
+ const runGeneration = entry.generation;
55
+ entry.pendingToolCalls = {};
56
+ const isStale = () => signal.aborted || entry.generation !== runGeneration;
57
+ let convId = params.conversationId;
58
+ let requestId = "";
59
+ let newConversationId = "";
60
+ const startedOnTemp = convId === TEMP_CONVERSATION_ID;
61
+ const toolCallsCacheKeyPrefix = startedOnTemp ? createTempToolCallsCacheSessionPrefix() : convId;
62
+ let working = [
63
+ ...seedMessages,
64
+ createUserMessage({
65
+ avatar,
66
+ name: userName,
67
+ content: prompt,
68
+ timestamp: getTimestamp(Date.now()) ?? ""
69
+ }),
70
+ createBotMessage({
71
+ avatar: botAvatar,
72
+ isLoading: true,
73
+ name: selectedModel,
74
+ content: "",
75
+ timestamp: ""
76
+ })
77
+ ];
78
+ const commit = (status = "streaming") => emit(sessionId, {
79
+ messages: [...working],
80
+ conversationId: convId,
81
+ requestId,
82
+ status
83
+ });
84
+ const updateLast = (fn) => {
85
+ if (working.length === 0) return;
86
+ const lastIndex = working.length - 1;
87
+ working = [...working.slice(0, lastIndex), fn({ ...working[lastIndex] })];
88
+ };
89
+ commit("streaming");
90
+ const finalMessages = [];
91
+ let buffer = "";
92
+ try {
93
+ const reader = await createMessage(prompt, { signal });
94
+ if (isStale()) return;
95
+ const decoder = new TextDecoder("utf-8");
96
+ let streamEnded = false;
97
+ while (!streamEnded) {
98
+ if (isStale()) return;
99
+ const { value, done } = await reader.read();
100
+ if (isStale()) return;
101
+ if (done) break;
102
+ buffer += decoder.decode(value, { stream: true });
103
+ const { events: parsedEvents, remainder } = parseSSEBuffer(buffer);
104
+ buffer = remainder;
105
+ for (const { event, data } of parsedEvents) {
106
+ if (event === "start") {
107
+ requestId = data?.request_id;
108
+ if (startedOnTemp) {
109
+ newConversationId = data?.conversation_id;
110
+ if (newConversationId) {
111
+ updateSessionConversationId(sessionId, newConversationId);
112
+ }
113
+ }
114
+ commit("streaming");
115
+ }
116
+ if (event === "tool_call") {
117
+ const toolCall = parseToolCallFromEvent(data);
118
+ if (toolCall && data.id !== null) {
119
+ entry.pendingToolCalls[toolCallIdKey(data.id)] = toolCall;
120
+ const lastIndex = working.length - 1;
121
+ const messageIndex = Math.floor(lastIndex / 2);
122
+ updateLast((last) => {
123
+ const nextToolCalls = [
124
+ ...normalizeToolCalls(last.toolCalls),
125
+ toolCall
126
+ ];
127
+ setSharedToolCallsCache(
128
+ `${toolCallsCacheKeyPrefix}-${messageIndex}`,
129
+ nextToolCalls
130
+ );
131
+ return { ...last, toolCalls: nextToolCalls };
132
+ });
133
+ commit("streaming");
134
+ }
135
+ }
136
+ if (event === "tool_result") {
137
+ const result = parseToolResultFromEvent(
138
+ data,
139
+ entry.pendingToolCalls
140
+ );
141
+ if (result) {
142
+ const lastIndex = working.length - 1;
143
+ const messageIndex = Math.floor(lastIndex / 2);
144
+ updateLast((last) => {
145
+ const updatedToolCalls = applyToolResultToToolCalls(
146
+ last.toolCalls || [],
147
+ result
148
+ );
149
+ setSharedToolCallsCache(
150
+ `${toolCallsCacheKeyPrefix}-${messageIndex}`,
151
+ updatedToolCalls
152
+ );
153
+ return { ...last, toolCalls: updatedToolCalls };
154
+ });
155
+ delete entry.pendingToolCalls[result.toolIdKey];
156
+ commit("streaming");
157
+ }
158
+ }
159
+ if (event === "token") {
160
+ const content = data?.token || "";
161
+ finalMessages.push(content);
162
+ updateLast((last) => {
163
+ const next = { ...last };
164
+ if ((next.content ?? "").trim().length > 0) {
165
+ next.isLoading = false;
166
+ }
167
+ next.content = (next.content ?? "") + content;
168
+ next.name = data?.response_metadata?.model || selectedModel;
169
+ next.timestamp = getTimestamp(
170
+ data?.response_metadata?.created_at || Date.now()
171
+ );
172
+ return next;
173
+ });
174
+ commit("streaming");
175
+ }
176
+ if (event === "interrupted") {
177
+ if (startedOnTemp && data?.conversation_id) {
178
+ newConversationId = data.conversation_id;
179
+ }
180
+ updateLast((last) => ({ ...last, isLoading: false }));
181
+ commit("streaming");
182
+ streamEnded = true;
183
+ break;
184
+ }
185
+ if (event === "end") {
186
+ const documents = data?.referenced_documents || [];
187
+ const sources = transformDocumentsToSources(documents);
188
+ updateLast((last) => ({
189
+ ...last,
190
+ isLoading: false,
191
+ ...sources ? { sources } : {}
192
+ }));
193
+ commit("streaming");
194
+ }
195
+ }
196
+ if (streamEnded) break;
197
+ }
198
+ } catch (e) {
199
+ if (isStale()) return;
200
+ updateLast((last) => ({
201
+ ...last,
202
+ isLoading: false,
203
+ content: `${last.content ?? ""}${e}`,
204
+ error: { title: e?.message },
205
+ timestamp: getTimestamp(Date.now())
206
+ }));
207
+ finalMessages.push(`${e}`);
208
+ emit(sessionId, {
209
+ messages: [...working],
210
+ conversationId: newConversationId || convId,
211
+ requestId,
212
+ status: "error"
213
+ });
214
+ return;
215
+ }
216
+ if (isStale()) return;
217
+ if (startedOnTemp && newConversationId) {
218
+ migrateSharedToolCallsCacheSessionPrefixToConversation(
219
+ toolCallsCacheKeyPrefix,
220
+ newConversationId
221
+ );
222
+ convId = newConversationId;
223
+ updateSessionConversationId(sessionId, newConversationId);
224
+ } else if (startedOnTemp) {
225
+ clearSharedToolCallsCacheSessionPrefix(toolCallsCacheKeyPrefix);
226
+ }
227
+ commit("complete");
228
+ queryClient.invalidateQueries({
229
+ queryKey: ["conversationMessages", convId]
230
+ });
231
+ queryClient.invalidateQueries({ queryKey: ["notebooks", "sessions"] });
232
+ }
233
+ return {
234
+ subscribe(sessionId, listener) {
235
+ const entry = ensureEntry(sessionId);
236
+ entry.listeners.add(listener);
237
+ return () => {
238
+ entry.listeners.delete(listener);
239
+ };
240
+ },
241
+ getSnapshot(sessionId) {
242
+ return entries.get(sessionId)?.snapshot ?? IDLE_SNAPSHOT;
243
+ },
244
+ send(sessionId, params) {
245
+ if (!normalizeChatUserInput(params.prompt)) return;
246
+ const entry = ensureEntry(sessionId);
247
+ entry.abort?.abort();
248
+ entry.abort = new AbortController();
249
+ entry.generation++;
250
+ void runStream(sessionId, params);
251
+ },
252
+ stop(sessionId) {
253
+ const entry = entries.get(sessionId);
254
+ if (!entry) return;
255
+ entry.abort?.abort();
256
+ const messages = entry.snapshot.messages;
257
+ const lastIndex = messages.length - 1;
258
+ const nextMessages = lastIndex >= 0 ? [
259
+ ...messages.slice(0, lastIndex),
260
+ { ...messages[lastIndex], isLoading: false }
261
+ ] : messages;
262
+ emit(sessionId, {
263
+ messages: nextMessages,
264
+ requestId: "",
265
+ status: "stopped"
266
+ });
267
+ },
268
+ clear(sessionId) {
269
+ const entry = entries.get(sessionId);
270
+ if (!entry) return;
271
+ entry.abort?.abort();
272
+ entries.delete(sessionId);
273
+ },
274
+ clearAll() {
275
+ entries.forEach((entry) => entry.abort?.abort());
276
+ entries.clear();
277
+ }
278
+ };
279
+ }
280
+
281
+ export { createNotebookStreamStore };
282
+ //# sourceMappingURL=notebookStreamStore.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notebookStreamStore.esm.js","sources":["../../../src/components/notebooks/notebookStreamStore.ts"],"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 { MessageProps } from '@patternfly/chatbot';\n\nimport { TEMP_CONVERSATION_ID } from '../../const';\nimport {\n clearSharedToolCallsCacheSessionPrefix,\n migrateSharedToolCallsCacheSessionPrefixToConversation,\n setSharedToolCallsCache,\n} from '../../hooks/toolCallsCacheStore';\nimport { NotebookSession, ToolCall } from '../../types';\nimport {\n createBotMessage,\n createUserMessage,\n getTimestamp,\n normalizeChatUserInput,\n transformDocumentsToSources,\n} from '../../utils/lightspeed-chatbox-utils';\nimport queryClient from '../../utils/queryClient';\nimport {\n applyToolResultToToolCalls,\n createTempToolCallsCacheSessionPrefix,\n normalizeToolCalls,\n parseSSEBuffer,\n parseToolCallFromEvent,\n parseToolResultFromEvent,\n toolCallIdKey,\n} from '../../utils/stream-event-helpers';\n\n/**\n * External store that owns notebook message streaming, keyed by notebook\n * `sessionId`. The store lives above the display-mode remount boundary\n * (mounted by {@link NotebookStreamProvider}) so a stream started in one mode\n * (overlay/docked/fullscreen) keeps running when the notebook view unmounts and\n * remounts in another mode. The view is a pure subscriber: it never owns the\n * stream lifecycle, and the stream is aborted only on explicit intent\n * (stop/close/delete/provider-unmount), never on unmount.\n */\n\nexport type ExtendedMessageProps = MessageProps & { toolCalls?: ToolCall[] };\n\nexport type NotebookStreamStatus =\n 'idle' | 'streaming' | 'complete' | 'stopped' | 'error';\n\nexport interface NotebookStreamSnapshot {\n messages: ExtendedMessageProps[];\n conversationId: string;\n requestId: string;\n status: NotebookStreamStatus;\n}\n\nexport interface NotebookSendParams {\n prompt: string;\n /** Current on-screen messages the new turn is appended to. */\n seedMessages: ExtendedMessageProps[];\n /** Current conversation id (may be the provisional temp id). */\n conversationId: string;\n userName?: string;\n avatar: string;\n botAvatar: string;\n selectedModel: string;\n /** Bound to the notebook session; returns the SSE reader. */\n createMessage: (\n prompt: string,\n options?: { signal?: AbortSignal },\n ) => Promise<ReadableStreamDefaultReader<Uint8Array>>;\n}\n\nexport interface NotebookStreamStore {\n subscribe(sessionId: string, listener: () => void): () => void;\n getSnapshot(sessionId: string): NotebookStreamSnapshot;\n send(sessionId: string, params: NotebookSendParams): void;\n stop(sessionId: string): void;\n clear(sessionId: string): void;\n clearAll(): void;\n}\n\nconst IDLE_SNAPSHOT: NotebookStreamSnapshot = Object.freeze({\n messages: [],\n conversationId: '',\n requestId: '',\n status: 'idle',\n});\n\ninterface Entry {\n snapshot: NotebookStreamSnapshot;\n listeners: Set<() => void>;\n abort?: AbortController;\n generation: number;\n pendingToolCalls: Record<string, ToolCall>;\n}\n\nexport function createNotebookStreamStore(): NotebookStreamStore {\n const entries = new Map<string, Entry>();\n\n const ensureEntry = (sessionId: string): Entry => {\n let entry = entries.get(sessionId);\n if (!entry) {\n entry = {\n snapshot: IDLE_SNAPSHOT,\n listeners: new Set(),\n generation: 0,\n pendingToolCalls: {},\n };\n entries.set(sessionId, entry);\n }\n return entry;\n };\n\n const emit = (\n sessionId: string,\n next: Partial<NotebookStreamSnapshot> & {\n messages?: ExtendedMessageProps[];\n },\n ) => {\n const entry = ensureEntry(sessionId);\n entry.snapshot = { ...entry.snapshot, ...next };\n entry.listeners.forEach(l => l());\n };\n\n const updateSessionConversationId = (\n sessionId: string,\n conversationId: string,\n ) => {\n queryClient.setQueryData<NotebookSession>(\n ['notebooks', 'session', sessionId],\n old =>\n old\n ? {\n ...old,\n metadata: { ...old.metadata, conversation_id: conversationId },\n }\n : old,\n );\n };\n\n async function runStream(sessionId: string, params: NotebookSendParams) {\n const {\n prompt,\n seedMessages,\n userName,\n avatar,\n botAvatar,\n selectedModel,\n createMessage,\n } = params;\n\n const entry = ensureEntry(sessionId);\n const signal = entry.abort!.signal;\n const runGeneration = entry.generation;\n entry.pendingToolCalls = {};\n\n const isStale = () => signal.aborted || entry.generation !== runGeneration;\n\n let convId = params.conversationId;\n let requestId = '';\n let newConversationId = '';\n const startedOnTemp = convId === TEMP_CONVERSATION_ID;\n const toolCallsCacheKeyPrefix = startedOnTemp\n ? createTempToolCallsCacheSessionPrefix()\n : convId;\n\n let working: ExtendedMessageProps[] = [\n ...seedMessages,\n createUserMessage({\n avatar,\n name: userName,\n content: prompt,\n timestamp: getTimestamp(Date.now()) ?? '',\n }),\n createBotMessage({\n avatar: botAvatar,\n isLoading: true,\n name: selectedModel,\n content: '',\n timestamp: '',\n }),\n ];\n\n const commit = (status: NotebookStreamStatus = 'streaming') =>\n emit(sessionId, {\n messages: [...working],\n conversationId: convId,\n requestId,\n status,\n });\n\n const updateLast = (\n fn: (msg: ExtendedMessageProps) => ExtendedMessageProps,\n ) => {\n if (working.length === 0) return;\n const lastIndex = working.length - 1;\n working = [...working.slice(0, lastIndex), fn({ ...working[lastIndex] })];\n };\n\n commit('streaming');\n\n const finalMessages: string[] = [];\n let buffer = '';\n\n try {\n const reader = await createMessage(prompt, { signal });\n if (isStale()) return;\n\n const decoder = new TextDecoder('utf-8');\n let streamEnded = false;\n\n while (!streamEnded) {\n if (isStale()) return;\n\n const { value, done } = await reader.read();\n if (isStale()) return;\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const { events: parsedEvents, remainder } = parseSSEBuffer(buffer);\n buffer = remainder;\n\n for (const { event, data } of parsedEvents) {\n if (event === 'start') {\n requestId = data?.request_id;\n if (startedOnTemp) {\n newConversationId = data?.conversation_id;\n if (newConversationId) {\n updateSessionConversationId(sessionId, newConversationId);\n }\n }\n commit('streaming');\n }\n\n if (event === 'tool_call') {\n const toolCall = parseToolCallFromEvent(data);\n\n if (toolCall && data.id !== null) {\n entry.pendingToolCalls[toolCallIdKey(data.id)] = toolCall;\n const lastIndex = working.length - 1;\n const messageIndex = Math.floor(lastIndex / 2);\n updateLast(last => {\n const nextToolCalls = [\n ...normalizeToolCalls(last.toolCalls),\n toolCall,\n ];\n setSharedToolCallsCache(\n `${toolCallsCacheKeyPrefix}-${messageIndex}`,\n nextToolCalls,\n );\n return { ...last, toolCalls: nextToolCalls };\n });\n commit('streaming');\n }\n }\n\n if (event === 'tool_result') {\n const result = parseToolResultFromEvent(\n data,\n entry.pendingToolCalls,\n );\n\n if (result) {\n const lastIndex = working.length - 1;\n const messageIndex = Math.floor(lastIndex / 2);\n updateLast(last => {\n const updatedToolCalls = applyToolResultToToolCalls(\n last.toolCalls || [],\n result,\n );\n setSharedToolCallsCache(\n `${toolCallsCacheKeyPrefix}-${messageIndex}`,\n updatedToolCalls,\n );\n return { ...last, toolCalls: updatedToolCalls };\n });\n delete entry.pendingToolCalls[result.toolIdKey];\n commit('streaming');\n }\n }\n\n if (event === 'token') {\n const content = data?.token || '';\n finalMessages.push(content);\n updateLast(last => {\n const next = { ...last };\n if ((next.content ?? '').trim().length > 0) {\n next.isLoading = false;\n }\n next.content = (next.content ?? '') + content;\n next.name = data?.response_metadata?.model || selectedModel;\n next.timestamp = getTimestamp(\n data?.response_metadata?.created_at || Date.now(),\n );\n return next;\n });\n commit('streaming');\n }\n\n if (event === 'interrupted') {\n if (startedOnTemp && data?.conversation_id) {\n newConversationId = data.conversation_id;\n }\n updateLast(last => ({ ...last, isLoading: false }));\n commit('streaming');\n streamEnded = true;\n break;\n }\n\n if (event === 'end') {\n const documents = data?.referenced_documents || [];\n const sources = transformDocumentsToSources(documents);\n updateLast(last => ({\n ...last,\n isLoading: false,\n ...(sources ? { sources } : {}),\n }));\n commit('streaming');\n }\n }\n if (streamEnded) break;\n }\n } catch (e: any) {\n if (isStale()) return;\n updateLast(last => ({\n ...last,\n isLoading: false,\n content: `${last.content ?? ''}${e}`,\n error: { title: e?.message },\n timestamp: getTimestamp(Date.now()),\n }));\n finalMessages.push(`${e}`);\n emit(sessionId, {\n messages: [...working],\n conversationId: newConversationId || convId,\n requestId,\n status: 'error',\n });\n return;\n }\n\n if (isStale()) return;\n\n // Migrate temp conversation to its real id (tool-call cache + session cache).\n if (startedOnTemp && newConversationId) {\n migrateSharedToolCallsCacheSessionPrefixToConversation(\n toolCallsCacheKeyPrefix,\n newConversationId,\n );\n convId = newConversationId;\n updateSessionConversationId(sessionId, newConversationId);\n } else if (startedOnTemp) {\n clearSharedToolCallsCacheSessionPrefix(toolCallsCacheKeyPrefix);\n }\n\n // Status stays 'complete' (never reverts to 'idle') so the in-memory\n // transcript is preserved across remounts. The view layer merges this with\n // react-query's refetch which fires after invalidation below. If the\n // notebook is later closed/deleted, clear() drops the entry entirely and\n // getSnapshot falls back to IDLE_SNAPSHOT; the next open re-fetches from\n // the server via useConversationMessages.\n commit('complete');\n\n queryClient.invalidateQueries({\n queryKey: ['conversationMessages', convId],\n });\n queryClient.invalidateQueries({ queryKey: ['notebooks', 'sessions'] });\n }\n\n return {\n subscribe(sessionId, listener) {\n const entry = ensureEntry(sessionId);\n entry.listeners.add(listener);\n return () => {\n entry.listeners.delete(listener);\n };\n },\n\n getSnapshot(sessionId) {\n return entries.get(sessionId)?.snapshot ?? IDLE_SNAPSHOT;\n },\n\n send(sessionId, params) {\n if (!normalizeChatUserInput(params.prompt)) return;\n const entry = ensureEntry(sessionId);\n entry.abort?.abort();\n entry.abort = new AbortController();\n entry.generation++;\n void runStream(sessionId, params);\n },\n\n stop(sessionId) {\n const entry = entries.get(sessionId);\n if (!entry) return;\n entry.abort?.abort();\n const messages = entry.snapshot.messages;\n const lastIndex = messages.length - 1;\n const nextMessages =\n lastIndex >= 0\n ? [\n ...messages.slice(0, lastIndex),\n { ...messages[lastIndex], isLoading: false },\n ]\n : messages;\n emit(sessionId, {\n messages: nextMessages,\n requestId: '',\n status: 'stopped',\n });\n },\n\n clear(sessionId) {\n const entry = entries.get(sessionId);\n if (!entry) return;\n entry.abort?.abort();\n entries.delete(sessionId);\n },\n\n clearAll() {\n entries.forEach(entry => entry.abort?.abort());\n entries.clear();\n },\n };\n}\n"],"names":[],"mappings":"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"}
@@ -7,12 +7,13 @@ const useCreateNotebookMessage = () => {
7
7
  return useMutation({
8
8
  mutationFn: async ({
9
9
  prompt,
10
- sessionId
10
+ sessionId,
11
+ signal
11
12
  }) => {
12
13
  if (!sessionId) {
13
14
  throw new Error("Failed to generate AI response");
14
15
  }
15
- return await notebooksApi.querySession(sessionId, prompt);
16
+ return await notebooksApi.querySession(sessionId, prompt, { signal });
16
17
  },
17
18
  onError: (error) => {
18
19
  console.warn(error);
@@ -1 +1 @@
1
- {"version":3,"file":"useCreateNotebookMessage.esm.js","sources":["../../../src/hooks/notebooks/useCreateNotebookMessage.ts"],"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 { useApi } from '@backstage/core-plugin-api';\n\nimport { useMutation, type UseMutationResult } from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\n\nexport type CreateNotebookMessageVariables = {\n prompt: string;\n sessionId: string;\n};\n\nexport const useCreateNotebookMessage = (): UseMutationResult<\n ReadableStreamDefaultReader<Uint8Array>,\n Error,\n CreateNotebookMessageVariables\n> => {\n const notebooksApi = useApi(notebooksApiRef);\n\n return useMutation({\n mutationFn: async ({\n prompt,\n sessionId,\n }: CreateNotebookMessageVariables) => {\n if (!sessionId) {\n throw new Error('Failed to generate AI response');\n }\n\n return await notebooksApi.querySession(sessionId, prompt);\n },\n onError: error => {\n // eslint-disable-next-line\n console.warn(error);\n },\n });\n};\n"],"names":[],"mappings":";;;;AA2BO,MAAM,2BAA2B,MAInC;AACH,EAAA,MAAM,YAAA,GAAe,OAAO,eAAe,CAAA;AAE3C,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,YAAY,OAAO;AAAA,MACjB,MAAA;AAAA,MACA;AAAA,KACF,KAAsC;AACpC,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAAA,MAClD;AAEA,MAAA,OAAO,MAAM,YAAA,CAAa,YAAA,CAAa,SAAA,EAAW,MAAM,CAAA;AAAA,IAC1D,CAAA;AAAA,IACA,SAAS,CAAA,KAAA,KAAS;AAEhB,MAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,IACpB;AAAA,GACD,CAAA;AACH;;;;"}
1
+ {"version":3,"file":"useCreateNotebookMessage.esm.js","sources":["../../../src/hooks/notebooks/useCreateNotebookMessage.ts"],"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 { useApi } from '@backstage/core-plugin-api';\n\nimport { useMutation, type UseMutationResult } from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\n\nexport type CreateNotebookMessageVariables = {\n prompt: string;\n sessionId: string;\n signal?: AbortSignal;\n};\n\nexport const useCreateNotebookMessage = (): UseMutationResult<\n ReadableStreamDefaultReader<Uint8Array>,\n Error,\n CreateNotebookMessageVariables\n> => {\n const notebooksApi = useApi(notebooksApiRef);\n\n return useMutation({\n mutationFn: async ({\n prompt,\n sessionId,\n signal,\n }: CreateNotebookMessageVariables) => {\n if (!sessionId) {\n throw new Error('Failed to generate AI response');\n }\n\n return await notebooksApi.querySession(sessionId, prompt, { signal });\n },\n onError: error => {\n // eslint-disable-next-line\n console.warn(error);\n },\n });\n};\n"],"names":[],"mappings":";;;;AA4BO,MAAM,2BAA2B,MAInC;AACH,EAAA,MAAM,YAAA,GAAe,OAAO,eAAe,CAAA;AAE3C,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,YAAY,OAAO;AAAA,MACjB,MAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF,KAAsC;AACpC,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAAA,MAClD;AAEA,MAAA,OAAO,MAAM,YAAA,CAAa,YAAA,CAAa,WAAW,MAAA,EAAQ,EAAE,QAAQ,CAAA;AAAA,IACtE,CAAA;AAAA,IACA,SAAS,CAAA,KAAA,KAAS;AAEhB,MAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,IACpB;AAAA,GACD,CAAA;AACH;;;;"}