@red-hat-developer-hub/backstage-plugin-lightspeed 2.8.3 → 2.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/alpha/LightspeedFAB.esm.js +22 -31
- package/dist/alpha/LightspeedFAB.esm.js.map +1 -1
- package/dist/components/LightSpeedChat.esm.js +7 -1
- package/dist/components/LightSpeedChat.esm.js.map +1 -1
- package/dist/components/LightspeedDrawerProvider.esm.js +3 -6
- package/dist/components/LightspeedDrawerProvider.esm.js.map +1 -1
- package/dist/components/LightspeedFAB.esm.js +22 -31
- package/dist/components/LightspeedFAB.esm.js.map +1 -1
- package/dist/components/notebooks/NotebookView.esm.js +2 -1
- package/dist/components/notebooks/NotebookView.esm.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
## @red-hat-developer-hub/backstage-plugin-lightspeed
|
|
2
2
|
|
|
3
|
+
## 2.8.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 52ac724: fix(lightspeed): prevent JSS class name prefix from leaking into host application styles
|
|
8
|
+
- @red-hat-developer-hub/backstage-plugin-lightspeed-common@2.8.5
|
|
9
|
+
|
|
10
|
+
## 2.8.4
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- 556c5a1: fix(lightspeed): fix toast notifications being obscured by Global Header
|
|
15
|
+
- @red-hat-developer-hub/backstage-plugin-lightspeed-common@2.8.4
|
|
16
|
+
|
|
3
17
|
## 2.8.3
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
@@ -1,48 +1,35 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { StylesProvider as StylesProvider$1 } from '@material-ui/core/styles';
|
|
3
2
|
import CloseIcon from '@mui/icons-material/Close';
|
|
3
|
+
import Box from '@mui/material/Box';
|
|
4
4
|
import Fab from '@mui/material/Fab';
|
|
5
5
|
import Tooltip from '@mui/material/Tooltip';
|
|
6
|
-
import { makeStyles, StylesProvider } from '@mui/styles';
|
|
7
6
|
import { ChatbotDisplayMode } from '@patternfly/chatbot';
|
|
8
7
|
import { LightspeedFABIcon } from '../components/LightspeedIcon.esm.js';
|
|
9
8
|
import { DOCKED_CONTENT_OFFSET } from '../const.esm.js';
|
|
10
9
|
import { useLightspeedDrawerContext } from '../hooks/useLightspeedDrawerContext.esm.js';
|
|
11
10
|
import { useTranslation } from '../hooks/useTranslation.esm.js';
|
|
12
|
-
import { generateClassName, generateClassNameV4 } from '../utils/generateClassName.esm.js';
|
|
13
11
|
|
|
14
|
-
const
|
|
15
|
-
fab: {
|
|
16
|
-
opacity: "1 !important",
|
|
17
|
-
backgroundColor: `${theme?.palette?.primary?.main ?? "#1976d2"} !important`,
|
|
18
|
-
color: `${theme?.palette?.primary?.contrastText ?? "#fff"} !important`,
|
|
19
|
-
boxShadow: `${theme?.shadows?.[6] ?? "0px 3px 5px -1px rgba(0,0,0,0.2), 0px 6px 10px 0px rgba(0,0,0,0.14), 0px 1px 18px 0px rgba(0,0,0,0.12)"} !important`
|
|
20
|
-
},
|
|
21
|
-
"fab-button": {
|
|
22
|
-
bottom: `calc(${theme?.spacing?.(2) ?? "16px"} + 1.5em)`,
|
|
23
|
-
right: `calc(${theme?.spacing?.(2) ?? "16px"} + 1.5em)`,
|
|
24
|
-
alignItems: "end",
|
|
25
|
-
zIndex: 200,
|
|
26
|
-
display: "flex",
|
|
27
|
-
position: "fixed",
|
|
28
|
-
// When ApplicationDrawer is docked, match main content inset
|
|
29
|
-
"body.docked-drawer-open &": {
|
|
30
|
-
transition: "margin-right 0.3s ease",
|
|
31
|
-
marginRight: DOCKED_CONTENT_OFFSET
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}));
|
|
35
|
-
const LightspeedFABInner = () => {
|
|
12
|
+
const LightspeedFAB = () => {
|
|
36
13
|
const { t } = useTranslation();
|
|
37
14
|
const { isChatbotActive, toggleChatbot, displayMode } = useLightspeedDrawerContext();
|
|
38
|
-
const fabButton = useStyles();
|
|
39
15
|
if (displayMode === ChatbotDisplayMode.embedded) {
|
|
40
16
|
return null;
|
|
41
17
|
}
|
|
42
18
|
return /* @__PURE__ */ jsx(
|
|
43
|
-
|
|
19
|
+
Box,
|
|
44
20
|
{
|
|
45
|
-
|
|
21
|
+
sx: (theme) => ({
|
|
22
|
+
bottom: `calc(${theme.spacing(2)} + 1.5em)`,
|
|
23
|
+
right: `calc(${theme.spacing(2)} + 1.5em)`,
|
|
24
|
+
alignItems: "end",
|
|
25
|
+
zIndex: 200,
|
|
26
|
+
display: "flex",
|
|
27
|
+
position: "fixed",
|
|
28
|
+
"body.docked-drawer-open &": {
|
|
29
|
+
transition: "margin-right 0.3s ease",
|
|
30
|
+
marginRight: DOCKED_CONTENT_OFFSET
|
|
31
|
+
}
|
|
32
|
+
}),
|
|
46
33
|
id: "lightspeed-fab",
|
|
47
34
|
"data-testid": "lightspeed-fab",
|
|
48
35
|
children: /* @__PURE__ */ jsx(
|
|
@@ -58,8 +45,13 @@ const LightspeedFABInner = () => {
|
|
|
58
45
|
size: "small",
|
|
59
46
|
onClick: toggleChatbot,
|
|
60
47
|
"aria-label": isChatbotActive ? t("tooltip.fab.close") : t("tooltip.fab.open"),
|
|
61
|
-
|
|
62
|
-
|
|
48
|
+
sx: (theme) => ({
|
|
49
|
+
borderRadius: "100% !important",
|
|
50
|
+
opacity: "1 !important",
|
|
51
|
+
backgroundColor: `${theme.palette?.primary?.main ?? "#1976d2"} !important`,
|
|
52
|
+
color: `${theme.palette?.primary?.contrastText ?? "#fff"} !important`,
|
|
53
|
+
boxShadow: `${theme.shadows?.[6] ?? "0px 3px 5px -1px rgba(0,0,0,0.2), 0px 6px 10px 0px rgba(0,0,0,0.14), 0px 1px 18px 0px rgba(0,0,0,0.12)"} !important`
|
|
54
|
+
}),
|
|
63
55
|
children: isChatbotActive ? /* @__PURE__ */ jsx(CloseIcon, { fontSize: "small" }) : /* @__PURE__ */ jsx(LightspeedFABIcon, {})
|
|
64
56
|
}
|
|
65
57
|
)
|
|
@@ -68,7 +60,6 @@ const LightspeedFABInner = () => {
|
|
|
68
60
|
}
|
|
69
61
|
);
|
|
70
62
|
};
|
|
71
|
-
const LightspeedFAB = () => /* @__PURE__ */ jsx(StylesProvider, { generateClassName, children: /* @__PURE__ */ jsx(StylesProvider$1, { generateClassName: generateClassNameV4, children: /* @__PURE__ */ jsx(LightspeedFABInner, {}) }) });
|
|
72
63
|
|
|
73
64
|
export { LightspeedFAB };
|
|
74
65
|
//# sourceMappingURL=LightspeedFAB.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LightspeedFAB.esm.js","sources":["../../src/alpha/LightspeedFAB.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
|
|
1
|
+
{"version":3,"file":"LightspeedFAB.esm.js","sources":["../../src/alpha/LightspeedFAB.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 Close from '@mui/icons-material/Close';\nimport Box from '@mui/material/Box';\nimport Fab from '@mui/material/Fab';\nimport Tooltip from '@mui/material/Tooltip';\nimport { ChatbotDisplayMode } from '@patternfly/chatbot';\n\nimport { LightspeedFABIcon } from '../components/LightspeedIcon';\nimport { DOCKED_CONTENT_OFFSET } from '../const';\nimport { useLightspeedDrawerContext } from '../hooks/useLightspeedDrawerContext';\nimport { useTranslation } from '../hooks/useTranslation';\n\n/**\n * @alpha\n * Lightspeed Floating action button to open/close the lightspeed chatbot\n */\nexport const LightspeedFAB = () => {\n const { t } = useTranslation();\n const { isChatbotActive, toggleChatbot, displayMode } =\n useLightspeedDrawerContext();\n\n if (displayMode === ChatbotDisplayMode.embedded) {\n return null;\n }\n\n return (\n <Box\n sx={theme => ({\n bottom: `calc(${theme.spacing(2)} + 1.5em)`,\n right: `calc(${theme.spacing(2)} + 1.5em)`,\n alignItems: 'end',\n zIndex: 200,\n display: 'flex',\n position: 'fixed',\n 'body.docked-drawer-open &': {\n transition: 'margin-right 0.3s ease',\n marginRight: DOCKED_CONTENT_OFFSET,\n },\n })}\n id=\"lightspeed-fab\"\n data-testid=\"lightspeed-fab\"\n >\n <Tooltip\n title={isChatbotActive ? t('tooltip.fab.close') : t('tooltip.fab.open')}\n placement=\"left\"\n >\n <Fab\n color=\"primary\"\n variant=\"circular\"\n size=\"small\"\n onClick={toggleChatbot}\n aria-label={\n isChatbotActive ? t('tooltip.fab.close') : t('tooltip.fab.open')\n }\n sx={theme => ({\n borderRadius: '100% !important',\n opacity: '1 !important',\n backgroundColor: `${theme.palette?.primary?.main ?? '#1976d2'} !important`,\n color: `${theme.palette?.primary?.contrastText ?? '#fff'} !important`,\n boxShadow: `${\n theme.shadows?.[6] ??\n '0px 3px 5px -1px rgba(0,0,0,0.2), 0px 6px 10px 0px rgba(0,0,0,0.14), 0px 1px 18px 0px rgba(0,0,0,0.12)'\n } !important`,\n })}\n >\n {isChatbotActive ? <Close fontSize=\"small\" /> : <LightspeedFABIcon />}\n </Fab>\n </Tooltip>\n </Box>\n );\n};\n"],"names":["Close"],"mappings":";;;;;;;;;;;AA+BO,MAAM,gBAAgB,MAAM;AACjC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,MAAM,EAAE,eAAA,EAAiB,aAAA,EAAe,WAAA,KACtC,0BAAA,EAA2B;AAE7B,EAAA,IAAI,WAAA,KAAgB,mBAAmB,QAAA,EAAU;AAC/C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,IAAI,CAAA,KAAA,MAAU;AAAA,QACZ,MAAA,EAAQ,CAAA,KAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,SAAA,CAAA;AAAA,QAChC,KAAA,EAAO,CAAA,KAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,SAAA,CAAA;AAAA,QAC/B,UAAA,EAAY,KAAA;AAAA,QACZ,MAAA,EAAQ,GAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,QAAA,EAAU,OAAA;AAAA,QACV,2BAAA,EAA6B;AAAA,UAC3B,UAAA,EAAY,wBAAA;AAAA,UACZ,WAAA,EAAa;AAAA;AACf,OACF,CAAA;AAAA,MACA,EAAA,EAAG,gBAAA;AAAA,MACH,aAAA,EAAY,gBAAA;AAAA,MAEZ,QAAA,kBAAA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,OAAO,eAAA,GAAkB,CAAA,CAAE,mBAAmB,CAAA,GAAI,EAAE,kBAAkB,CAAA;AAAA,UACtE,SAAA,EAAU,MAAA;AAAA,UAEV,QAAA,kBAAA,GAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,SAAA;AAAA,cACN,OAAA,EAAQ,UAAA;AAAA,cACR,IAAA,EAAK,OAAA;AAAA,cACL,OAAA,EAAS,aAAA;AAAA,cACT,cACE,eAAA,GAAkB,CAAA,CAAE,mBAAmB,CAAA,GAAI,EAAE,kBAAkB,CAAA;AAAA,cAEjE,IAAI,CAAA,KAAA,MAAU;AAAA,gBACZ,YAAA,EAAc,iBAAA;AAAA,gBACd,OAAA,EAAS,cAAA;AAAA,gBACT,iBAAiB,CAAA,EAAG,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,QAAQ,SAAS,CAAA,WAAA,CAAA;AAAA,gBAC7D,OAAO,CAAA,EAAG,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,gBAAgB,MAAM,CAAA,WAAA,CAAA;AAAA,gBACxD,WAAW,CAAA,EACT,KAAA,CAAM,OAAA,GAAU,CAAC,KACjB,wGACF,CAAA,WAAA;AAAA,eACF,CAAA;AAAA,cAEC,4CAAkB,GAAA,CAACA,SAAA,EAAA,EAAM,UAAS,OAAA,EAAQ,CAAA,uBAAM,iBAAA,EAAA,EAAkB;AAAA;AAAA;AACrE;AAAA;AACF;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -322,7 +322,8 @@ const useStyles = makeStyles((theme) => ({
|
|
|
322
322
|
toastAlertGroup: {
|
|
323
323
|
"--pf-v6-c-alert-group--m-toast--InsetInlineEnd": `${theme.spacing(2.5)}px`,
|
|
324
324
|
"--pf-v6-c-alert-group--m-toast--InsetBlockStart": `${theme.spacing(2.5)}px`,
|
|
325
|
-
"--pf-v6-c-alert-group--m-toast--MaxWidth": "350px"
|
|
325
|
+
"--pf-v6-c-alert-group--m-toast--MaxWidth": "350px",
|
|
326
|
+
"--pf-v6-c-alert-group--m-toast--ZIndex": "9999"
|
|
326
327
|
},
|
|
327
328
|
toastAlert: {
|
|
328
329
|
maxWidth: "350px",
|
|
@@ -1611,10 +1612,15 @@ const LightspeedChat = ({
|
|
|
1611
1612
|
minHeight: theme.spacing(6),
|
|
1612
1613
|
paddingLeft: theme.spacing(2),
|
|
1613
1614
|
paddingRight: theme.spacing(2),
|
|
1615
|
+
"& .MuiTabs-flexContainer": {
|
|
1616
|
+
gap: theme.spacing(2)
|
|
1617
|
+
},
|
|
1614
1618
|
'& [role="tab"]': {
|
|
1615
1619
|
fontWeight: 700,
|
|
1616
1620
|
textTransform: "none",
|
|
1617
1621
|
opacity: 1,
|
|
1622
|
+
padding: `${theme.spacing(1)} ${theme.spacing(2)}`,
|
|
1623
|
+
borderRadius: theme.spacing(0.5),
|
|
1618
1624
|
'&:not([aria-selected="true"])': {
|
|
1619
1625
|
color: `${theme.palette.text.primary} !important`
|
|
1620
1626
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LightSpeedChat.esm.js","sources":["../../src/components/LightSpeedChat.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 {\n ChangeEvent,\n MouseEvent,\n Ref,\n SyntheticEvent,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n FileRejection,\n type DropEvent as ReactDropzoneDropEvent,\n} from 'react-dropzone';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\n\nimport { Button, makeStyles } from '@material-ui/core';\nimport Tab from '@mui/material/Tab';\nimport Tabs from '@mui/material/Tabs';\nimport {\n Chatbot,\n ChatbotAlert,\n ChatbotContent,\n ChatbotDisplayMode,\n ChatbotFooter,\n ChatbotFootnote,\n ChatbotHeader,\n ChatbotHeaderMain,\n ChatbotHeaderMenu,\n ChatbotHeaderTitle,\n FileDropZone,\n MessageBar,\n MessageProps,\n Settings,\n} from '@patternfly/chatbot';\nimport ChatbotConversationHistoryNav from '@patternfly/chatbot/dist/dynamic/ChatbotConversationHistoryNav';\nimport {\n Alert,\n AlertActionCloseButton,\n AlertGroup,\n AlertVariant,\n DropdownItem,\n Label,\n MenuToggle,\n MenuToggleElement,\n Select,\n SelectList,\n SelectOption,\n Title,\n Tooltip,\n type AlertProps,\n} from '@patternfly/react-core';\nimport {\n PlusIcon,\n SearchIcon,\n SortAmountDownAltIcon,\n SortAmountDownIcon,\n} from '@patternfly/react-icons';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport {\n supportedFileTypes,\n TEMP_CONVERSATION_ID,\n UNTITLED_NOTEBOOK_NAME,\n} from '../const';\nimport {\n useBackstageUserIdentity,\n useConversationMessages,\n useConversations,\n useIsMobile,\n useLastOpenedConversation,\n useLightspeedDeletePermission,\n useLightspeedNotebooksPermission,\n useNotebookConversationIds,\n useNotebookSession,\n useNotebookSessions,\n usePinnedChatsSettings,\n useSortSettings,\n useStopConversation,\n} from '../hooks';\nimport { useCreateNotebook } from '../hooks/notebooks/useCreateNotebook';\nimport { useNotebookDocuments } from '../hooks/notebooks/useNotebookDocuments';\nimport { useLightspeedDrawerContext } from '../hooks/useLightspeedDrawerContext';\nimport { useLightspeedUpdatePermission } from '../hooks/useLightspeedUpdatePermission';\nimport { useTranslation } from '../hooks/useTranslation';\nimport { useWelcomePrompts } from '../hooks/useWelcomePrompts';\nimport logo from '../images/logo.svg';\nimport { ConversationSummary, NotebookSession } from '../types';\nimport { getAttachments } from '../utils/attachment-utils';\nimport {\n getCategorizeMessages,\n getFootnoteProps,\n SortOption,\n} from '../utils/lightspeed-chatbox-utils';\nimport Attachment from './Attachment';\nimport { useFileAttachmentContext } from './AttachmentContext';\nimport { CollapsedHistoryStrip, PencilIcon } from './CollapsedHistoryStrip';\nimport { DeleteModal } from './DeleteModal';\nimport FilePreview from './FilePreview';\nimport { LightspeedChatBox } from './LightspeedChatBox';\nimport { LightspeedChatBoxHeader } from './LightspeedChatBoxHeader';\nimport { McpServersSettings } from './McpServersSettings';\nimport { MessageBarModelSelector } from './MessageBarModelSelector';\nimport { DeleteNotebookModal } from './notebooks/DeleteNotebookModal';\nimport { NotebooksTab } from './notebooks/NotebooksTab';\nimport { NotebookView } from './notebooks/NotebookView';\nimport { RenameNotebookModal } from './notebooks/RenameNotebookModal';\nimport PermissionRequiredState from './PermissionRequiredState';\nimport { RenameConversationModal } from './RenameConversationModal';\n\nconst COLLAPSE_PANEL_ICON_SVG = `url(\"data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16 21V3H14V21H16ZM12 17V7L7 12L12 17Z' fill='black'/%3E%3C/svg%3E\") no-repeat center`;\n\nconst ConditionalWrapper = ({\n condition,\n wrapper,\n children,\n}: {\n condition: boolean;\n wrapper: (children: React.ReactNode) => React.ReactNode;\n children: React.ReactNode;\n}) => (condition ? wrapper(children) : children);\n\nconst useStyles = makeStyles(theme => ({\n body: {\n // remove default margin and padding from common elements\n // lists excluded for proper formatting\n '& h1, & h2, & h3, & h4, & h5, & h6, & p, & li': {\n margin: 0,\n padding: 0,\n },\n '& .pf-chatbot__content': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n },\n header: {\n padding: `${theme.spacing(3)}px ${theme.spacing(3)}px 0 ${theme.spacing(\n 3,\n )}px !important`,\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default) !important',\n },\n errorContainer: {\n padding: theme.spacing(3),\n },\n drawerFileDropZone: {\n gap: 0,\n rowGap: 0,\n columnGap: 0,\n '--pf-v6-c-multiple-file-upload--Gap': '0',\n '--pf-v5-c-multiple-file-upload--Gap': '0',\n flex: 1,\n minWidth: 0,\n },\n headerMenu: {\n // align hamburger icon with title\n '& .pf-v6-c-button': {\n display: 'flex',\n alignItems: 'center',\n },\n },\n headerLogo: {\n width: 48,\n height: 48,\n marginRight: theme.spacing(1.5),\n flexShrink: 0,\n },\n headerTitle: {\n justifyContent: 'left !important',\n '& h1': {\n fontSize: '32px !important',\n fontWeight: '700 !important',\n lineHeight: '36.4px !important',\n fontFamily: '\"Red Hat Display\", sans-serif !important',\n },\n },\n headerDivider: {\n paddingTop: 8,\n borderBottom: '1px solid var(--pf-t--global--border--color--default)',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n notebooksContainer: {\n padding: theme.spacing(3),\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n overflowY: 'auto',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n notebooksHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: theme.spacing(4),\n },\n notebooksHeading: {\n marginBottom: 0,\n },\n notebooksHeadingEmpty: {\n '&&': {\n marginBottom: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n },\n },\n notebooksEmptyState: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n },\n notebooksIcon: {\n fontSize: 48,\n color: 'var(--pf-t--global--icon--color--subtle)',\n marginBottom: theme.spacing(1.5),\n },\n notebooksDescription: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(3),\n maxWidth: 420,\n },\n notebooksAction: {\n textTransform: 'none',\n borderRadius: 999,\n paddingLeft: theme.spacing(3),\n paddingRight: theme.spacing(3),\n },\n notebooksActionEmpty: {\n textTransform: 'none',\n borderRadius: 999,\n paddingLeft: theme.spacing(3),\n paddingRight: theme.spacing(3),\n marginTop: theme.spacing(3),\n },\n notebooksGrid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(3, minmax(0, 1fr))',\n gap: theme.spacing(2),\n width: '100%',\n maxWidth: '100%',\n paddingBottom: theme.spacing(3),\n [theme.breakpoints.down('md')]: {\n gridTemplateColumns: 'repeat(2, minmax(0, 1fr))',\n },\n [theme.breakpoints.down('sm')]: {\n gridTemplateColumns: 'repeat(1, minmax(0, 1fr))',\n },\n },\n notebookCard: {\n borderRadius: theme.spacing(1.5),\n display: 'flex',\n flexDirection: 'column',\n '&:hover': {\n borderColor: 'var(--pf-t--global--border--color--hover)',\n borderWidth: '1px',\n borderStyle: 'solid',\n cursor: 'pointer',\n },\n },\n notebookCardHeader: {\n padding: theme.spacing(2),\n paddingBottom: 0,\n alignItems: 'center',\n },\n notebookCardDivider: {\n borderTop: '1px solid var(--pf-t--global--border--color--default)',\n marginTop: theme.spacing(1),\n },\n notebookCardBody: {\n padding: theme.spacing(2),\n paddingTop: theme.spacing(1.5),\n },\n notebookDocuments: {\n paddingTop: theme.spacing(1),\n paddingLeft: theme.spacing(2),\n },\n notebookUpdated: {\n paddingBottom: theme.spacing(5),\n paddingLeft: theme.spacing(2),\n paddingTop: theme.spacing(2),\n },\n notebookTitle: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n minWidth: 0,\n flex: 1,\n },\n notebookCardHeaderActions: {\n marginLeft: theme.spacing(1),\n },\n notebookTitleText: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n notebookMenuButton: {\n color: theme.palette.text.secondary,\n },\n notebookDropdownList: {\n paddingTop: 0,\n paddingBottom: 0,\n paddingInlineStart: 0,\n },\n notebookDropdownMenu: {\n '--pf-v6-c-menu--PaddingBlockStart': '0',\n '--pf-v6-c-menu--PaddingBlockEnd': '0',\n },\n notebookDropdownItem: {\n justifyContent: 'flex-start',\n textAlign: 'left',\n paddingLeft: theme.spacing(1.5),\n paddingRight: theme.spacing(1.5),\n },\n footer: {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n '&>.pf-chatbot__footer-container': {\n width: '95% !important',\n maxWidth: 'unset !important',\n },\n '& .pf-chatbot__message-bar': {\n backgroundColor:\n theme.palette.type === 'light'\n ? theme.palette.grey[100]\n : 'var(--pf-t--global--background--color--secondary--default)',\n },\n },\n fullscreenFooter: {\n '&>.pf-chatbot__footer-container': {\n width: '100% !important',\n padding: theme.spacing(1.5),\n maxWidth: 'unset !important',\n margin: '0 auto',\n },\n },\n messageBar: {\n border: '1px solid var(--pf-t--global--border--color--default)',\n borderRadius: 24,\n padding: theme.spacing(0.5),\n '&::after': {\n display: 'none',\n },\n },\n sortDropdown: {\n padding: 0,\n margin: 0,\n },\n // Outer content wrapper (library may override overflow; we rely on inner scroll wrapper).\n chatbotContent: {\n minHeight: 0,\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n '& .pf-chatbot__jump': {\n left: '50% !important',\n right: 'auto !important',\n transform: 'translateX(-50%)',\n visibility: 'hidden',\n pointerEvents: 'none',\n },\n '& .pf-chatbot__message-contents': {\n overflowX: 'hidden',\n overflowWrap: 'break-word',\n wordBreak: 'break-word',\n },\n },\n chatbotContentHasOverflow: {\n '& .pf-chatbot__jump': {\n visibility: 'visible',\n pointerEvents: 'auto',\n },\n },\n // Inner scroll container we control: always scrollable so zoomed-in users see full content.\n chatbotContentScroll: {\n minHeight: 0,\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n overflowY: 'auto',\n WebkitOverflowScrolling: 'touch',\n },\n chatbotContentScrollNewChat: {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n toastAlertGroup: {\n '--pf-v6-c-alert-group--m-toast--InsetInlineEnd': `${theme.spacing(2.5)}px`,\n '--pf-v6-c-alert-group--m-toast--InsetBlockStart': `${theme.spacing(2.5)}px`,\n '--pf-v6-c-alert-group--m-toast--MaxWidth': '350px',\n },\n toastAlert: {\n maxWidth: '350px',\n '& .pf-v6-c-alert__title': {\n margin: 0,\n },\n },\n // When present, pushes welcome content to bottom (zoom out). Scroll up to see important box (zoom in).\n chatbotContentSpacer: {\n flex: 1,\n minHeight: 0,\n },\n settingsFlat: {\n height: '100%',\n width: '100%',\n '&.pf-chatbot__settings-form-container': {\n background:\n 'var(--pf-v6-c-table--BackgroundColor, var(--pf-t--global--background--color--primary--default))',\n padding: 0,\n margin: 0,\n minHeight: '100%',\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n maxWidth: 'none',\n },\n '& .pf-chatbot__settings-form': {\n margin: 0,\n padding: 0,\n background:\n 'var(--pf-v6-c-table--BackgroundColor, var(--pf-t--global--background--color--primary--default))',\n minHeight: '100%',\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n maxWidth: 'none',\n },\n '& .pf-chatbot__settings-form-row': {\n background:\n 'var(--pf-v6-c-table--BackgroundColor, var(--pf-t--global--background--color--primary--default))',\n border: 0,\n margin: 0,\n padding: 0,\n minHeight: '100%',\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n maxWidth: 'none',\n },\n '& .pf-chatbot__settings-label': {\n display: 'none',\n },\n },\n mcpFullscreenLayout: {\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr) minmax(0, 1fr)',\n minHeight: 0,\n height: '100%',\n flex: 1,\n width: '100%',\n minWidth: 0,\n overflow: 'hidden',\n },\n mcpChatPane: {\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0,\n width: '100%',\n minWidth: 0,\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n },\n mcpSettingsPane: {\n width: '100%',\n minWidth: 0,\n borderLeft: `1px solid ${theme.palette.divider}`,\n backgroundColor:\n 'var(--pf-v6-c-table--BackgroundColor, var(--pf-t--global--background--color--primary--default))',\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0,\n overflow: 'auto',\n },\n mcpCollapsedDrawerOrderFix: {\n '& .pf-v6-c-drawer.pf-m-panel-left > .pf-v6-c-drawer__main > .pf-v6-c-drawer__content, & .pf-v5-c-drawer.pf-m-panel-left > .pf-v5-c-drawer__main > .pf-v5-c-drawer__content':\n {\n order: 'unset',\n },\n '& .pf-v6-c-drawer:not(.pf-m-expanded) > .pf-v6-c-drawer__main > .pf-v6-c-drawer__panel, & .pf-v5-c-drawer:not(.pf-m-expanded) > .pf-v5-c-drawer__main > .pf-v5-c-drawer__panel':\n {\n visibility: 'hidden',\n opacity: 0,\n transition: 'none !important',\n },\n },\n // TODO: These PatternFly drawer overrides are needed because PF Chatbot doesn't\n // provide clean APIs for custom expand/collapse icons and positioning.\n // Remove once PatternFly supports these features.\n // See: https://github.com/patternfly/chatbot/issues/834\n fullscreenChatLayout: {\n display: 'flex',\n flexDirection: 'row',\n flex: 1,\n minHeight: 0,\n height: '100%',\n width: '100%',\n '& .pf-v6-c-drawer, & .pf-v5-c-drawer': {\n flex: 1,\n minWidth: 0,\n },\n '& .pf-v6-c-drawer__content, & .pf-v5-c-drawer__content': {\n flex: 1,\n minWidth: 0,\n },\n '& .pf-v6-c-drawer:not(.pf-m-expanded) > .pf-v6-c-drawer__main > .pf-v6-c-drawer__panel, & .pf-v5-c-drawer:not(.pf-m-expanded) > .pf-v5-c-drawer__main > .pf-v5-c-drawer__panel':\n {\n display: 'none',\n },\n '& .pf-v6-c-drawer__close, & .pf-v5-c-drawer__close': {\n marginTop: -48,\n marginRight: -24,\n },\n '& .pf-v6-c-drawer__close .pf-v6-c-button svg, & .pf-v5-c-drawer__close .pf-v5-c-button svg':\n {\n display: 'none',\n },\n '& .pf-v6-c-drawer__close .pf-v6-c-button, & .pf-v5-c-drawer__close .pf-v5-c-button':\n {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n '&::before': {\n content: '\"\"',\n display: 'block',\n width: 24,\n height: 24,\n mask: COLLAPSE_PANEL_ICON_SVG,\n WebkitMask: COLLAPSE_PANEL_ICON_SVG,\n backgroundColor: 'currentColor',\n },\n },\n '& .pf-chatbot__menu-item': {\n cursor: 'pointer',\n },\n '& .pf-chatbot__menu-item .pf-v6-c-menu-toggle, & .pf-chatbot__menu-item .pf-v5-c-menu-toggle':\n {\n opacity: 0,\n transition: 'opacity 0.15s ease-in-out',\n },\n '& .pf-chatbot__menu-item:hover .pf-v6-c-menu-toggle, & .pf-chatbot__menu-item:hover .pf-v5-c-menu-toggle':\n {\n opacity: 1,\n },\n },\n fullscreenMainContent: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n minWidth: 0,\n overflow: 'hidden',\n },\n}));\n\ntype LightspeedChatProps = {\n selectedModel: string;\n topicRestrictionEnabled: boolean;\n selectedProvider: string;\n userName?: string;\n avatar?: string;\n profileLoading: boolean;\n handleSelectedModel: (item: string) => void;\n models: { label: string; value: string; provider: string }[];\n};\n\nexport const LightspeedChat = ({\n selectedModel,\n topicRestrictionEnabled,\n selectedProvider,\n userName,\n avatar,\n profileLoading,\n handleSelectedModel,\n models,\n}: LightspeedChatProps) => {\n const isMobile = useIsMobile();\n const classes = useStyles();\n const { t } = useTranslation();\n const navigate = useNavigate();\n const configApi = useApi(configApiRef);\n const notebooksEnabled =\n configApi.getOptionalBoolean('lightspeed.notebooks.enabled') ?? false;\n const notebooksRouteMatch = useMatch('/lightspeed/notebooks');\n const notebookViewRouteMatch = useMatch('/lightspeed/notebooks/:notebookId');\n const routeNotebookId = notebookViewRouteMatch?.params?.notebookId;\n const isOnNotebookRoute = Boolean(\n notebooksRouteMatch || notebookViewRouteMatch,\n );\n const shouldShowTabs = notebooksEnabled || isOnNotebookRoute;\n const {\n displayMode,\n setDisplayMode,\n currentConversationId: routeConversationId,\n setCurrentConversationId,\n draftMessage,\n setDraftMessage,\n consumePendingOverlayThreadHandoff,\n shellViewTab,\n setShellViewTab,\n } = useLightspeedDrawerContext();\n const isFullscreenMode = displayMode === ChatbotDisplayMode.embedded;\n const location = useLocation();\n const isNotebooksFullscreenPath =\n location.pathname === '/lightspeed/notebooks' ||\n location.pathname.startsWith('/lightspeed/notebooks/');\n const user = useBackstageUserIdentity();\n const [filterValue, setFilterValue] = useState<string>('');\n const [announcement, setAnnouncement] = useState<string>('');\n const [activeTab, setActiveTab] = useState<number>(() => {\n if (!isFullscreenMode) {\n return 0;\n }\n if (notebooksRouteMatch || notebookViewRouteMatch) {\n return 1;\n }\n const p = location.pathname;\n if (p.startsWith('/lightspeed/conversation/')) {\n return 0;\n }\n if (shellViewTab === 1) {\n return 1;\n }\n return 0;\n });\n const { allowed: hasNotebooksAccess, loading: notebooksPermissionLoading } =\n useLightspeedNotebooksPermission();\n const notebooksPermissionResolved =\n !notebooksPermissionLoading && hasNotebooksAccess;\n\n const { data: notebookConversationIdsArray = [] } =\n useNotebookConversationIds();\n const { data: notebooks = [], refetch: refetchNotebooks } =\n useNotebookSessions(notebooksPermissionResolved);\n const hasNotebooks = notebooks.length > 0;\n const [openNotebookMenuId, setOpenNotebookMenuId] = useState<string | null>(\n null,\n );\n const [renameNotebookId, setRenameNotebookId] = useState<string | null>(null);\n const [deleteNotebookId, setDeleteNotebookId] = useState<string | null>(null);\n const [activeNotebook, setActiveNotebook] = useState<NotebookSession | null>(\n null,\n );\n const {\n data: routeNotebook,\n isLoading: routeNotebookLoading,\n isError: routeNotebookError,\n } = useNotebookSession(routeNotebookId);\n\n useEffect(() => {\n if (routeNotebookId && routeNotebook && !routeNotebookLoading) {\n setActiveNotebook(routeNotebook);\n } else if (routeNotebookId && routeNotebookError) {\n navigate('/lightspeed/notebooks', { replace: true });\n } else if (!routeNotebookId && notebooksRouteMatch) {\n setActiveNotebook(null);\n }\n }, [\n routeNotebookId,\n routeNotebook,\n routeNotebookLoading,\n routeNotebookError,\n notebooksRouteMatch,\n navigate,\n ]);\n\n const [notebookAlerts, setNotebookAlerts] = useState<Partial<AlertProps>[]>(\n [],\n );\n const createNotebookMutation = useCreateNotebook();\n const { data: notebookDocuments = [] } = useNotebookDocuments(\n activeNotebook?.session_id,\n );\n const [conversationId, setConversationId] = useState<string>('');\n const [requestId, setRequestId] = useState<string>('');\n const [newChatCreated, setNewChatCreated] = useState<boolean>(false);\n const [isSendButtonDisabled, setIsSendButtonDisabled] =\n useState<boolean>(false);\n const [targetConversationId, setTargetConversationId] = useState<string>('');\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState<boolean>(false);\n const [isRenameModalOpen, setIsRenameModalOpen] = useState<boolean>(false);\n const [isSortSelectOpen, setIsSortSelectOpen] = useState<boolean>(false);\n const [isMcpSettingsOpen, setIsMcpSettingsOpen] = useState<boolean>(false);\n const [chatHeaderBgColor, setChatHeaderBgColor] = useState<string>();\n const contentScrollRef = useRef<HTMLDivElement>(null);\n const bottomSentinelRef = useRef<HTMLDivElement>(null);\n const [messageBarKey, setMessageBarKey] = useState(0);\n const [hasChatContentOverflow, setHasChatContentOverflow] = useState(false);\n const wasStoppedByUserRef = useRef(false);\n const { isReady, lastOpenedId, setLastOpenedId, clearLastOpenedId } =\n useLastOpenedConversation(user);\n const showChatPanel = !isFullscreenMode || activeTab === 0;\n const showNotebooksPanel =\n (notebooksEnabled || isOnNotebookRoute) && activeTab !== 0;\n const [isChatHistoryDrawerOpen, setIsChatHistoryDrawerOpen] =\n useState<boolean>(!isMobile && isFullscreenMode);\n\n // Fullscreen: URL drives Chat vs Notebooks, but shellViewTab must win when entering\n // fullscreen from overlay/docked on Notebooks while navigation still lands on /lightspeed.\n useLayoutEffect(() => {\n if (!isFullscreenMode) {\n return;\n }\n if (isNotebooksFullscreenPath) {\n setActiveTab(1);\n setShellViewTab(1);\n return;\n }\n const isBaseLightspeedChatRoute =\n location.pathname === '/lightspeed' ||\n location.pathname === '/lightspeed/';\n if (shellViewTab === 1 && isBaseLightspeedChatRoute) {\n navigate('/lightspeed/notebooks', { replace: true });\n return;\n }\n setActiveTab(0);\n setShellViewTab(0);\n }, [\n isFullscreenMode,\n isNotebooksFullscreenPath,\n shellViewTab,\n location.pathname,\n navigate,\n setShellViewTab,\n ]);\n\n const handleNotebookTabSelect = (_event: SyntheticEvent, nextTab: number) => {\n setActiveTab(nextTab);\n setShellViewTab(nextTab);\n if (nextTab === 1) {\n navigate('/lightspeed/notebooks');\n if (notebooksPermissionResolved) {\n refetchNotebooks();\n }\n } else {\n navigate(\n routeConversationId\n ? `/lightspeed/conversation/${routeConversationId}`\n : '/lightspeed',\n );\n }\n };\n\n const setDisplayModeFromHeader = useCallback(\n (mode: ChatbotDisplayMode) => {\n if (mode !== ChatbotDisplayMode.embedded) {\n setDisplayMode(mode);\n return;\n }\n if (activeTab === 1) {\n const sid = activeNotebook?.session_id;\n setDisplayMode(\n mode,\n undefined,\n sid ? { notebookSessionId: sid } : 'notebooks',\n );\n } else {\n setDisplayMode(mode);\n }\n },\n [setDisplayMode, activeTab, activeNotebook?.session_id],\n );\n\n const handleCreateNotebook = useCallback(() => {\n createNotebookMutation.mutate(\n { name: UNTITLED_NOTEBOOK_NAME },\n {\n onSuccess: (session: NotebookSession) => {\n navigate(`/lightspeed/notebooks/${session.session_id}`);\n },\n },\n );\n }, [createNotebookMutation, navigate]);\n\n const handleCloseNotebook = useCallback(() => {\n navigate('/lightspeed/notebooks');\n refetchNotebooks();\n }, [navigate, refetchNotebooks]);\n\n const handleRemoveNotebookAlert = (key: React.Key) => {\n setNotebookAlerts(prevAlerts =>\n prevAlerts.filter(alert => alert.key !== key),\n );\n };\n\n const handleNotebookDeleted = () => {\n const key = Date.now();\n setNotebookAlerts(prevAlerts => [\n { title: t('notebooks.delete.toast'), variant: 'success', key },\n ...prevAlerts,\n ]);\n };\n // Open the chat history drawer when entering fullscreen mode on desktop\n useEffect(() => {\n if (!isMobile && isFullscreenMode) {\n setIsChatHistoryDrawerOpen(true);\n }\n }, [isMobile, isFullscreenMode]);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const headerElement = document.querySelector('.pf-chatbot__header');\n if (!headerElement) return;\n const computedBg = window.getComputedStyle(headerElement).backgroundColor;\n if (computedBg) {\n setChatHeaderBgColor(computedBg);\n }\n }, [displayMode, isMcpSettingsOpen]);\n\n const {\n isPinningChatsEnabled,\n pinnedChats,\n handlePinningChatsToggle,\n pinChat,\n unpinChat,\n } = usePinnedChatsSettings(user);\n\n const { selectedSort, handleSortChange } = useSortSettings(user);\n\n const {\n uploadError,\n showAlert,\n fileContents,\n setShowAlert,\n setFileContents,\n handleFileUpload,\n setUploadError,\n } = useFileAttachmentContext();\n\n // After leaving fullscreen for overlay/docked, provider signals a one-shot handoff so a\n // new LightspeedChat mount does not briefly apply stale lastOpened from storage.\n useLayoutEffect(() => {\n if (!isReady) return;\n\n if (isFullscreenMode) {\n return;\n }\n\n const handoff = consumePendingOverlayThreadHandoff?.() ?? false;\n if (handoff) {\n if (routeConversationId) {\n setConversationId(routeConversationId);\n setNewChatCreated(false);\n } else {\n setConversationId(TEMP_CONVERSATION_ID);\n setNewChatCreated(true);\n }\n return;\n }\n\n if (routeConversationId && routeConversationId !== conversationId) {\n setConversationId(routeConversationId);\n setNewChatCreated(false);\n } else if (\n !routeConversationId &&\n conversationId === '' &&\n lastOpenedId !== null\n ) {\n setConversationId(lastOpenedId);\n }\n }, [\n isReady,\n isFullscreenMode,\n routeConversationId,\n conversationId,\n lastOpenedId,\n consumePendingOverlayThreadHandoff,\n ]);\n\n // Sync conversationId with lastOpenedId — fullscreen only (overlay uses layout effect above).\n useEffect(() => {\n if (!isReady || !isFullscreenMode) {\n return;\n }\n if (lastOpenedId !== null) {\n setConversationId(lastOpenedId);\n }\n }, [lastOpenedId, isReady, isFullscreenMode]);\n\n const queryClient = useQueryClient();\n\n const {\n data: conversations = [],\n isLoading,\n isRefetching,\n } = useConversations();\n\n const { allowed: hasDeleteAccess } = useLightspeedDeletePermission();\n const { allowed: hasUpdateAccess } = useLightspeedUpdatePermission();\n const samplePrompts = useWelcomePrompts();\n useEffect(() => {\n if (!user || !isReady) return;\n const onOverlayLikeSurface = isFullscreenMode || !routeConversationId;\n const stillOnProvisionalThread =\n !conversationId || conversationId === TEMP_CONVERSATION_ID;\n\n if (lastOpenedId === null) {\n if (onOverlayLikeSurface && stillOnProvisionalThread) {\n setConversationId(TEMP_CONVERSATION_ID);\n }\n }\n // Only treat as blank \"new chat\" while there is no persisted thread id yet. Otherwise\n // after the first stream assigns a real conversationId, lastOpenedId can lag one frame\n // and this effect would flip newChatCreated back to true and hide the New chat button.\n if (lastOpenedId === TEMP_CONVERSATION_ID || lastOpenedId === null) {\n if (onOverlayLikeSurface && stillOnProvisionalThread) {\n setNewChatCreated(true);\n }\n }\n }, [\n user,\n isReady,\n lastOpenedId,\n setConversationId,\n isFullscreenMode,\n routeConversationId,\n conversationId,\n ]);\n\n useEffect(() => {\n // Clear last opened conversationId when there are no conversations.\n if (\n !isLoading &&\n !isRefetching &&\n conversations.length === 0 &&\n lastOpenedId\n ) {\n clearLastOpenedId();\n // Stale last-opened pointed at a missing thread; align with blank new chat so\n // provisional UI (e.g. hide New chat) matches storage.\n setConversationId(TEMP_CONVERSATION_ID);\n setNewChatCreated(true);\n setCurrentConversationId(undefined);\n }\n }, [\n isLoading,\n isRefetching,\n conversations,\n lastOpenedId,\n clearLastOpenedId,\n setCurrentConversationId,\n ]);\n\n useEffect(() => {\n if (\n !isLoading &&\n !isRefetching &&\n routeConversationId &&\n isFullscreenMode\n ) {\n const conversationExists = conversations.some(\n (c: ConversationSummary) => c.conversation_id === routeConversationId,\n );\n if (!conversationExists) {\n // New threads can be missing from the summaries list until refetch completes; if we\n // already show this id locally (e.g. streaming), do not reset to a new chat.\n if (routeConversationId !== conversationId) {\n // Conversation from route doesn't exist, start a new chat\n setConversationId(TEMP_CONVERSATION_ID);\n setCurrentConversationId(undefined);\n setNewChatCreated(true);\n }\n } else if (conversationId !== routeConversationId) {\n setConversationId(routeConversationId);\n }\n }\n }, [\n isLoading,\n isRefetching,\n routeConversationId,\n conversations,\n displayMode,\n conversationId,\n setCurrentConversationId,\n isFullscreenMode,\n ]);\n\n useEffect(() => {\n // Update last opened conversation whenever `conversationId` changes\n if (conversationId) {\n setLastOpenedId(conversationId);\n }\n }, [conversationId, setLastOpenedId]);\n\n const viewConversationId = useMemo(\n () =>\n !isFullscreenMode && routeConversationId\n ? routeConversationId\n : conversationId,\n [isFullscreenMode, routeConversationId, conversationId],\n );\n\n const onStart = (conv_id: string) => {\n setConversationId(conv_id);\n setCurrentConversationId(conv_id);\n };\n\n const onRequestIdReady = (request_id: string) => {\n setRequestId(request_id);\n };\n\n const onComplete = (message: string) => {\n setIsSendButtonDisabled(false);\n if (!wasStoppedByUserRef.current) {\n setAnnouncement(`Message from Bot: ${message}`);\n }\n wasStoppedByUserRef.current = false;\n queryClient.invalidateQueries({\n queryKey: ['conversations'],\n });\n queryClient.invalidateQueries({\n queryKey: ['conversationMessages', viewConversationId],\n });\n setNewChatCreated(false);\n };\n\n const {\n conversationMessages,\n handleInputPrompt,\n scrollToBottomRef,\n streamingConversationId,\n } = useConversationMessages(\n viewConversationId,\n userName,\n selectedModel,\n selectedProvider,\n avatar,\n onComplete,\n onStart,\n undefined,\n onRequestIdReady,\n );\n\n const streamingUiMatchesView =\n isSendButtonDisabled &&\n streamingConversationId !== null &&\n viewConversationId === streamingConversationId;\n\n const [messages, setMessages] =\n useState<MessageProps[]>(conversationMessages);\n\n const sendMessage = (message: string | number) => {\n if (!message.toString().trim()) return;\n\n wasStoppedByUserRef.current = false;\n if (viewConversationId !== TEMP_CONVERSATION_ID) {\n setNewChatCreated(false);\n }\n setAnnouncement(\n t('conversation.announcement.userMessage' as any, {\n prompt: message.toString(),\n }),\n );\n handleInputPrompt(message.toString(), getAttachments(fileContents));\n setIsSendButtonDisabled(true);\n setFileContents([]);\n setDraftMessage('');\n };\n\n const onNewChat = useCallback(() => {\n (async () => {\n setIsMcpSettingsOpen(false);\n if (conversationId !== TEMP_CONVERSATION_ID) {\n setMessages([]);\n setFileContents([]);\n setUploadError({ message: null });\n setDraftMessage('');\n setConversationId(TEMP_CONVERSATION_ID);\n setNewChatCreated(true);\n setCurrentConversationId(undefined);\n if (!isFullscreenMode) {\n setIsChatHistoryDrawerOpen(false);\n }\n } else {\n // Already on new chat: reset so scroll/layout works (e.g. after opening new chat again from another convo then back).\n setMessages([]);\n setNewChatCreated(true);\n }\n })();\n }, [\n conversationId,\n setFileContents,\n setUploadError,\n setDraftMessage,\n setCurrentConversationId,\n isFullscreenMode,\n ]);\n\n const openDeleteModal = (conversation_id: string) => {\n setTargetConversationId(conversation_id);\n setIsDeleteModalOpen(true);\n };\n\n const openChatRenameModal = (conversation_id: string) => {\n setTargetConversationId(conversation_id);\n setIsRenameModalOpen(true);\n };\n\n const handleDeleteConversation = useCallback(() => {\n if (targetConversationId === lastOpenedId) {\n onNewChat();\n clearLastOpenedId();\n }\n setIsDeleteModalOpen(false);\n }, [clearLastOpenedId, lastOpenedId, onNewChat, targetConversationId]);\n\n const additionalMessageProps = useCallback(\n (conversationSummary: ConversationSummary) => {\n const isChatFavorite = pinnedChats?.find(\n c => c === conversationSummary.conversation_id,\n );\n return {\n menuItems: (\n <>\n <DropdownItem\n isDisabled={!hasUpdateAccess}\n onClick={() =>\n openChatRenameModal(conversationSummary.conversation_id)\n }\n >\n {t('conversation.rename')}\n </DropdownItem>\n {isPinningChatsEnabled && (\n <>\n {isChatFavorite ? (\n <DropdownItem\n onClick={() =>\n unpinChat(conversationSummary.conversation_id)\n }\n >\n {t('conversation.removeFromPinnedChats')}\n </DropdownItem>\n ) : (\n <DropdownItem\n onClick={() => pinChat(conversationSummary.conversation_id)}\n >\n {t('conversation.addToPinnedChats')}\n </DropdownItem>\n )}\n </>\n )}\n <DropdownItem\n isDisabled={!hasDeleteAccess}\n onClick={() =>\n openDeleteModal(conversationSummary.conversation_id)\n }\n >\n {t('conversation.delete')}\n </DropdownItem>\n </>\n ),\n };\n },\n [\n pinnedChats,\n hasDeleteAccess,\n isPinningChatsEnabled,\n hasUpdateAccess,\n t,\n pinChat,\n unpinChat,\n ],\n );\n\n const notebookConversationIds = useMemo(\n () => new Set(notebookConversationIdsArray),\n [notebookConversationIdsArray],\n );\n\n const chatOnlyConversations = useMemo(\n () =>\n conversations.filter(\n c => !notebookConversationIds.has(c.conversation_id),\n ),\n [conversations, notebookConversationIds],\n );\n\n const categorizedMessages = useMemo(\n () =>\n getCategorizeMessages(\n chatOnlyConversations,\n pinnedChats,\n additionalMessageProps,\n t,\n selectedSort,\n ),\n [\n additionalMessageProps,\n chatOnlyConversations,\n pinnedChats,\n t,\n selectedSort,\n ],\n );\n\n const filterConversations = useCallback(\n (targetValue: string) => {\n const pinnedChatsKey =\n t('conversation.category.pinnedChats') || 'Pinned chats';\n let isNoPinnedChatsSearchResults = false;\n let isNoRecentChatsSearchResults = false;\n const filteredConversations = Object.entries(categorizedMessages).reduce(\n (acc, [key, items]) => {\n const filteredItems = items.filter(item =>\n (item.text ?? '')\n .toLocaleLowerCase('en-US')\n .includes(targetValue.toLocaleLowerCase('en-US')),\n );\n const isPinnedCategory = key === pinnedChatsKey;\n if (isPinnedCategory && isPinningChatsEnabled) {\n if (filteredItems.length > 0) {\n acc[pinnedChatsKey] = filteredItems;\n } else {\n isNoPinnedChatsSearchResults =\n categorizedMessages[pinnedChatsKey].length > 0;\n acc[pinnedChatsKey] = [\n {\n id: isNoPinnedChatsSearchResults\n ? 'no-pinned-chats-search-results'\n : 'no-pinned-chats',\n text: isNoPinnedChatsSearchResults\n ? t('common.noSearchResults')\n : t('chatbox.emptyState.noPinnedChats'),\n noIcon: true,\n additionalProps: {\n isDisabled: true,\n },\n },\n ];\n }\n } else if (!isPinnedCategory) {\n if (filteredItems.length > 0) {\n acc[key] = filteredItems;\n } else {\n isNoRecentChatsSearchResults =\n categorizedMessages[key].length > 0;\n\n acc[key] = [\n {\n id: isNoRecentChatsSearchResults\n ? 'no-recent-chats-search-results'\n : 'no-recent-chats',\n text: isNoRecentChatsSearchResults\n ? t('common.noSearchResults')\n : t('chatbox.emptyState.noRecentChats'),\n noIcon: true,\n additionalProps: {\n isDisabled: true,\n },\n },\n ];\n }\n }\n return acc;\n },\n {} as any,\n );\n // If both sections had items but search filtered them all out, return empty object\n // so PatternFly's default empty state shows instead of custom empty state messages\n if (isNoPinnedChatsSearchResults && isNoRecentChatsSearchResults) {\n return {};\n }\n return filteredConversations;\n },\n [categorizedMessages, isPinningChatsEnabled, t],\n );\n\n useEffect(() => {\n setMessages(conversationMessages);\n }, [conversationMessages]);\n\n const onSelectActiveItem = useCallback(\n (_: MouseEvent | undefined, selectedItem: string | number | undefined) => {\n setIsMcpSettingsOpen(false);\n setNewChatCreated(false);\n const newConvId = String(selectedItem);\n setConversationId((c_id: string) => {\n if (c_id !== selectedItem) {\n return newConvId;\n }\n return c_id;\n });\n setCurrentConversationId(newConvId);\n setFileContents([]);\n setUploadError({ message: null });\n setDraftMessage('');\n scrollToBottomRef.current?.scrollToBottom();\n },\n [\n setConversationId,\n setUploadError,\n setFileContents,\n setDraftMessage,\n scrollToBottomRef,\n setCurrentConversationId,\n setIsMcpSettingsOpen,\n ],\n );\n\n const conversationFound = !!conversations.find(\n (c: ConversationSummary) => c.conversation_id === viewConversationId,\n );\n\n const getMaxPrompts = () => {\n if (isFullscreenMode) {\n return samplePrompts?.length; // In the Fullscreen mode, show all prompts\n }\n if (displayMode === ChatbotDisplayMode.docked) {\n return 2; // In the docked mode, show 2 prompts\n }\n return 1; // In the overlay mode, show 1 prompt\n };\n const maxPrompts = getMaxPrompts();\n\n const welcomePrompts =\n (newChatCreated && conversationMessages.length === 0) ||\n (!conversationFound && conversationMessages.length === 0)\n ? samplePrompts?.slice(0, maxPrompts).map(prompt => {\n const p = prompt as { title: string; message: string };\n return {\n title: p.title,\n message: p.message,\n onClick: () => {\n sendMessage(p.message);\n },\n };\n })\n : [];\n\n // Scroll to bottom when welcome content appears (sentinel + useLayoutEffect/RAF + ResizeObserver).\n useLayoutEffect(() => {\n if (welcomePrompts.length === 0) return undefined;\n const el = contentScrollRef.current;\n const sentinel = bottomSentinelRef.current;\n if (!el) return undefined;\n\n const scrollToBottom = () => {\n if (sentinel && typeof sentinel.scrollIntoView === 'function') {\n sentinel.scrollIntoView({ block: 'end', behavior: 'auto' });\n } else {\n el.scrollTop = el.scrollHeight;\n }\n };\n\n const rafId =\n typeof requestAnimationFrame !== 'undefined'\n ? requestAnimationFrame(() => scrollToBottom())\n : null;\n if (rafId === null) scrollToBottom();\n const resizeObserver =\n typeof ResizeObserver !== 'undefined'\n ? new ResizeObserver(() => scrollToBottom())\n : undefined;\n resizeObserver?.observe(el);\n\n return () => {\n if (rafId !== null && typeof cancelAnimationFrame !== 'undefined') {\n cancelAnimationFrame(rafId);\n }\n resizeObserver?.disconnect();\n };\n }, [welcomePrompts.length]);\n\n useEffect(() => {\n const scrollContainer = contentScrollRef.current;\n if (!scrollContainer) {\n setHasChatContentOverflow(false);\n return undefined;\n }\n\n const getMessageBox = () =>\n scrollContainer.querySelector(\n '.pf-chatbot__messagebox',\n ) as HTMLElement | null;\n\n const messageBoxOwnsScroll = (messageBox: HTMLElement | null) => {\n if (!messageBox || typeof window === 'undefined') {\n return false;\n }\n const overflowY = window.getComputedStyle(messageBox).overflowY;\n return (\n overflowY === 'auto' ||\n overflowY === 'scroll' ||\n overflowY === 'overlay'\n );\n };\n\n const getScrollTarget = () => {\n const messageBox = getMessageBox();\n return messageBoxOwnsScroll(messageBox) ? messageBox! : scrollContainer;\n };\n\n let observedScrollTarget: HTMLElement | null = getScrollTarget();\n let rafId: number | null = null;\n let updateScheduled = false;\n\n const updateOverflow = () => {\n const scrollTarget = observedScrollTarget ?? scrollContainer;\n setHasChatContentOverflow(\n scrollTarget.scrollHeight > scrollTarget.clientHeight + 1,\n );\n };\n\n const scheduleOverflowUpdate = () => {\n if (updateScheduled) {\n return;\n }\n updateScheduled = true;\n if (typeof requestAnimationFrame !== 'undefined') {\n rafId = requestAnimationFrame(() => {\n updateScheduled = false;\n updateOverflow();\n });\n } else {\n updateScheduled = false;\n updateOverflow();\n }\n };\n\n scheduleOverflowUpdate();\n\n // Use capture so scroll events from inner messagebox also trigger updates.\n scrollContainer.addEventListener('scroll', scheduleOverflowUpdate, {\n passive: true,\n capture: true,\n });\n\n const resizeObserver =\n typeof ResizeObserver !== 'undefined'\n ? new ResizeObserver(() => scheduleOverflowUpdate())\n : undefined;\n resizeObserver?.observe(scrollContainer);\n if (observedScrollTarget !== scrollContainer) {\n resizeObserver?.observe(observedScrollTarget);\n }\n\n const syncObservedScrollTarget = () => {\n const nextScrollTarget = getScrollTarget();\n if (nextScrollTarget === observedScrollTarget) {\n return;\n }\n if (observedScrollTarget && observedScrollTarget !== scrollContainer) {\n resizeObserver?.unobserve(observedScrollTarget);\n }\n if (nextScrollTarget !== scrollContainer) {\n resizeObserver?.observe(nextScrollTarget);\n }\n observedScrollTarget = nextScrollTarget;\n };\n\n const mutationObserver =\n typeof MutationObserver !== 'undefined'\n ? new MutationObserver(() => {\n syncObservedScrollTarget();\n scheduleOverflowUpdate();\n })\n : undefined;\n mutationObserver?.observe(scrollContainer, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n\n if (typeof window !== 'undefined') {\n window.addEventListener('resize', updateOverflow);\n }\n\n return () => {\n if (rafId !== null && typeof cancelAnimationFrame !== 'undefined') {\n cancelAnimationFrame(rafId);\n }\n scrollContainer.removeEventListener(\n 'scroll',\n scheduleOverflowUpdate,\n true,\n );\n if (observedScrollTarget && observedScrollTarget !== scrollContainer) {\n resizeObserver?.unobserve(observedScrollTarget);\n }\n resizeObserver?.disconnect();\n mutationObserver?.disconnect();\n if (typeof window !== 'undefined') {\n window.removeEventListener('resize', updateOverflow);\n }\n };\n }, [\n conversationId,\n displayMode,\n isMcpSettingsOpen,\n messages.length,\n welcomePrompts.length,\n ]);\n\n const handleFilter = useCallback((value: string) => {\n setFilterValue(value);\n }, []);\n\n const onChatHistoryDrawerToggle = useCallback(() => {\n setIsChatHistoryDrawerOpen(isOpen => !isOpen);\n }, []);\n\n const onSortToggle = useCallback(() => {\n setIsSortSelectOpen(prev => !prev);\n }, []);\n\n const onSortSelect = useCallback(\n (_event?: MouseEvent<Element>, value?: string | number) => {\n handleSortChange(value as SortOption);\n setIsSortSelectOpen(false);\n },\n [handleSortChange],\n );\n\n const getSortLabel = useCallback(\n (option: SortOption): string => {\n const labels: Record<SortOption, string> = {\n newest: t('sort.newest'),\n oldest: t('sort.oldest'),\n alphabeticalAsc: t('sort.alphabeticalAsc'),\n alphabeticalDesc: t('sort.alphabeticalDesc'),\n };\n return labels[option];\n },\n [t],\n );\n\n const sortToggle = useCallback(\n (toggleRef: Ref<MenuToggleElement>) => (\n <Tooltip content={`${t('sort.label')} - ${getSortLabel(selectedSort)}`}>\n <MenuToggle\n ref={toggleRef}\n aria-label={t('sort.label')}\n variant=\"plain\"\n onClick={onSortToggle}\n isExpanded={isSortSelectOpen}\n >\n {selectedSort === 'oldest' || selectedSort === 'alphabeticalDesc' ? (\n <SortAmountDownAltIcon />\n ) : (\n <SortAmountDownIcon />\n )}\n </MenuToggle>\n </Tooltip>\n ),\n [t, getSortLabel, selectedSort, onSortToggle, isSortSelectOpen],\n );\n\n const sortDropdown = useMemo(\n () => (\n <Select\n id=\"sort-select\"\n isOpen={isSortSelectOpen}\n selected={selectedSort}\n onSelect={onSortSelect}\n onOpenChange={(isOpen: boolean) => setIsSortSelectOpen(isOpen)}\n popperProps={{ position: 'end' }}\n toggle={sortToggle}\n shouldFocusToggleOnSelect\n >\n <SelectList className={classes.sortDropdown}>\n <SelectOption value=\"newest\">{t('sort.newest')}</SelectOption>\n <SelectOption value=\"oldest\">{t('sort.oldest')}</SelectOption>\n <SelectOption value=\"alphabeticalAsc\">\n {t('sort.alphabeticalAsc')}\n </SelectOption>\n <SelectOption value=\"alphabeticalDesc\">\n {t('sort.alphabeticalDesc')}\n </SelectOption>\n </SelectList>\n </Select>\n ),\n [\n isSortSelectOpen,\n selectedSort,\n onSortSelect,\n sortToggle,\n t,\n classes.sortDropdown,\n ],\n );\n\n const handleAttach = (data: File[], event: ReactDropzoneDropEvent) => {\n if (\n 'preventDefault' in event &&\n typeof event.preventDefault === 'function'\n ) {\n event.preventDefault();\n }\n handleFileUpload(data);\n };\n\n const { mutate: stopConversation } = useStopConversation();\n\n const handleStopButton = () => {\n wasStoppedByUserRef.current = true;\n if (requestId) {\n stopConversation(requestId);\n setRequestId('');\n }\n setIsSendButtonDisabled(false);\n setAnnouncement(t('conversation.announcement.responseStopped'));\n const lastUserMessage = [...conversationMessages]\n .reverse()\n .find((m: { role?: string }) => m.role === 'user');\n const restoredPrompt = (lastUserMessage?.content as string) ?? '';\n setDraftMessage(restoredPrompt.trim());\n if (restoredPrompt) setMessageBarKey(k => k + 1);\n setFileContents([]);\n setUploadError({ message: null });\n };\n\n const handleDraftMessage = (\n _e: ChangeEvent<HTMLTextAreaElement>,\n value: string | number,\n ) => setDraftMessage(value as any);\n\n const onAttachRejected = (data: FileRejection[]) => {\n data.forEach(attachment => {\n const hasInvalidTypeError = attachment.errors.some(\n (e: { code: string }) => e.code === 'file-invalid-type',\n );\n if (hasInvalidTypeError) {\n setShowAlert(true);\n setUploadError({\n message: t('file.upload.error.unsupportedType'),\n });\n }\n });\n };\n\n const chatMainContent = (\n <>\n <ChatbotContent\n className={`${classes.chatbotContent} ${\n hasChatContentOverflow ? classes.chatbotContentHasOverflow : ''\n }`}\n >\n <div\n ref={contentScrollRef}\n className={`${classes.chatbotContentScroll}${\n welcomePrompts.length > 0\n ? ` ${classes.chatbotContentScrollNewChat}`\n : ''\n }`}\n >\n {welcomePrompts.length > 0 && (\n <div className={classes.chatbotContentSpacer} aria-hidden />\n )}\n <LightspeedChatBox\n userName={userName}\n messages={messages}\n profileLoading={profileLoading}\n announcement={announcement}\n ref={scrollToBottomRef}\n welcomePrompts={welcomePrompts}\n conversationId={conversationId}\n isStreaming={streamingUiMatchesView}\n topicRestrictionEnabled={topicRestrictionEnabled}\n displayMode={displayMode}\n />\n {welcomePrompts.length > 0 && (\n <div\n ref={bottomSentinelRef}\n aria-hidden\n style={{ height: 0, flexShrink: 0 }}\n />\n )}\n </div>\n </ChatbotContent>\n <ChatbotFooter\n className={`${classes.footer} ${classes.fullscreenFooter}`}\n >\n <FilePreview />\n <MessageBar\n key={messageBarKey}\n className={classes.messageBar}\n onSendMessage={sendMessage}\n isSendButtonDisabled={isSendButtonDisabled}\n hasAttachButton\n attachButtonPosition=\"start\"\n handleAttach={handleAttach}\n hasMicrophoneButton\n value={draftMessage}\n onChange={handleDraftMessage}\n hasStopButton={streamingUiMatchesView}\n handleStopButton={\n streamingUiMatchesView ? handleStopButton : undefined\n }\n buttonProps={{\n attach: {\n inputTestId: 'attachment-input',\n tooltipContent: t('tooltip.attach'),\n 'aria-label': t('tooltip.attach'),\n icon: <PlusIcon />,\n },\n microphone: {\n tooltipContent: {\n active: t('tooltip.microphone.active'),\n inactive: t('tooltip.microphone.inactive'),\n },\n },\n send: {\n tooltipContent: t('tooltip.send'),\n },\n }}\n additionalActions={\n <MessageBarModelSelector\n selectedModel={selectedModel}\n models={models}\n onSelect={item => {\n setIsMcpSettingsOpen(false);\n onNewChat();\n handleSelectedModel(item);\n }}\n disabled={isSendButtonDisabled}\n />\n }\n forceMultilineLayout\n allowedFileTypes={supportedFileTypes}\n onAttachRejected={onAttachRejected}\n placeholder={t('chatbox.message.placeholder')}\n />\n <ChatbotFootnote {...getFootnoteProps(t)} />\n </ChatbotFooter>\n </>\n );\n\n const mcpSettingsPanel = (\n <McpServersSettings\n onClose={() => setIsMcpSettingsOpen(false)}\n backgroundColor={chatHeaderBgColor}\n />\n );\n\n const mainPanelContent = (() => {\n if (!isMcpSettingsOpen) {\n return <>{chatMainContent}</>;\n }\n\n if (isFullscreenMode) {\n return (\n <div className={classes.mcpFullscreenLayout}>\n <div className={classes.mcpChatPane}>{chatMainContent}</div>\n <div className={classes.mcpSettingsPane}>{mcpSettingsPanel}</div>\n </div>\n );\n }\n\n return (\n <Settings\n className={classes.settingsFlat}\n fields={[\n {\n id: 'mcp-servers-settings',\n label: '',\n field: mcpSettingsPanel,\n },\n ]}\n />\n );\n })();\n\n let drawerPanelStyle: { [key: string]: string | number } | undefined;\n if (!isFullscreenMode) {\n drawerPanelStyle = { zIndex: 1300 };\n } else if (isMcpSettingsOpen) {\n drawerPanelStyle = { width: 320, minWidth: 320, maxWidth: 320 };\n } else {\n drawerPanelStyle = { minWidth: 232, maxWidth: 400 };\n }\n\n return (\n <>\n {notebookAlerts.length > 0 && (\n <AlertGroup\n hasAnimations\n isToast\n isLiveRegion\n className={classes.toastAlertGroup}\n >\n {notebookAlerts.map(({ key, title, variant }) => (\n <Alert\n key={key}\n variant={AlertVariant[variant ?? 'success']}\n title={title}\n className={classes.toastAlert}\n timeout={2000}\n onTimeout={() => handleRemoveNotebookAlert(key as React.Key)}\n actionClose={\n <AlertActionCloseButton\n title={title as string}\n variantLabel={`${variant ?? 'success'} alert`}\n onClose={() => handleRemoveNotebookAlert(key as React.Key)}\n />\n }\n />\n ))}\n </AlertGroup>\n )}\n {isDeleteModalOpen && (\n <DeleteModal\n isOpen={isDeleteModalOpen}\n conversationId={targetConversationId}\n onClose={() => setIsDeleteModalOpen(false)}\n onConfirm={handleDeleteConversation}\n />\n )}\n {isRenameModalOpen && (\n <RenameConversationModal\n isOpen={isRenameModalOpen}\n onClose={() => setIsRenameModalOpen(false)}\n conversationId={targetConversationId}\n />\n )}\n {renameNotebookId && (\n <RenameNotebookModal\n isOpen={Boolean(renameNotebookId)}\n onClose={() => setRenameNotebookId(null)}\n sessionId={renameNotebookId}\n currentName={\n notebooks.find(n => n.session_id === renameNotebookId)?.name ?? ''\n }\n />\n )}\n {deleteNotebookId && (\n <DeleteNotebookModal\n isOpen={Boolean(deleteNotebookId)}\n onClose={() => setDeleteNotebookId(null)}\n onDeleted={handleNotebookDeleted}\n sessionId={deleteNotebookId}\n name={\n notebooks.find(n => n.session_id === deleteNotebookId)?.name ?? ''\n }\n />\n )}\n <Chatbot\n displayMode={ChatbotDisplayMode.embedded}\n className={`${classes.body} ${\n isMcpSettingsOpen && !isChatHistoryDrawerOpen\n ? classes.mcpCollapsedDrawerOrderFix\n : ''\n }`}\n >\n <ChatbotHeader className={classes.header}>\n <ChatbotHeaderMain>\n {showChatPanel && !isFullscreenMode && (\n <ChatbotHeaderMenu\n aria-expanded={isChatHistoryDrawerOpen}\n onMenuToggle={onChatHistoryDrawerToggle}\n className={classes.headerMenu}\n tooltipContent={t('tooltip.chatHistoryMenu')}\n aria-label={t('aria.chatHistoryMenu')}\n />\n )}\n {isFullscreenMode && (\n <>\n <img\n src={logo as any}\n alt={t('icon.lightspeed.alt')}\n className={classes.headerLogo}\n />\n <ChatbotHeaderTitle className={classes.headerTitle}>\n <Title headingLevel=\"h1\" size=\"3xl\">\n {t('chatbox.header.title')}\n </Title>\n </ChatbotHeaderTitle>\n </>\n )}\n </ChatbotHeaderMain>\n\n <LightspeedChatBoxHeader\n selectedModel={selectedModel}\n handleSelectedModel={item => {\n setIsMcpSettingsOpen(false);\n onNewChat();\n handleSelectedModel(item);\n }}\n models={models}\n isPinningChatsEnabled={isPinningChatsEnabled}\n isModelSelectorDisabled={isSendButtonDisabled}\n hideModelSelector\n showChatTabOptions={!showNotebooksPanel}\n setDisplayMode={setDisplayModeFromHeader}\n displayMode={displayMode}\n onPinnedChatsToggle={handlePinningChatsToggle}\n onMcpSettingsClick={() => setIsMcpSettingsOpen(true)}\n />\n </ChatbotHeader>\n {isFullscreenMode && <div className={classes.headerDivider} />}\n {isFullscreenMode && shouldShowTabs && (\n <Tabs\n value={activeTab}\n onChange={handleNotebookTabSelect}\n aria-label={t('tabs.ariaLabel')}\n variant=\"standard\"\n textColor=\"primary\"\n sx={theme => ({\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n borderBottom:\n '1px solid var(--pf-t--global--border--color--default)',\n minHeight: theme.spacing(6),\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n '& [role=\"tab\"]': {\n fontWeight: 700,\n textTransform: 'none',\n opacity: 1,\n '&:not([aria-selected=\"true\"])': {\n color: `${theme.palette.text.primary} !important`,\n },\n '&:hover': {\n background: 'none !important',\n backgroundColor: 'transparent !important',\n backgroundImage: 'none !important',\n },\n '&:not([aria-selected=\"true\"]):hover': {\n color: 'var(--pf-t--global--text--color--brand--default)',\n },\n '&[aria-selected=\"true\"]:hover': {\n color: `${theme.palette.primary.main} !important`,\n },\n },\n '& [class*=\"Tabs-indicator\"]': {\n height: 3,\n },\n })}\n >\n <Tab\n disableRipple\n label={t('tabs.chat')}\n aria-label={t('tabs.chat')}\n />\n <Tab\n disableRipple\n label={\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 8,\n }}\n >\n {t('tabs.notebooks')}\n <Label\n color=\"purple\"\n style={{\n alignSelf: 'center',\n margin: 0,\n lineHeight: 1,\n }}\n >\n {t('tabs.notebooks.devPreview')}\n </Label>\n </span>\n }\n aria-label={t('tabs.notebooks')}\n />\n </Tabs>\n )}\n {showChatPanel && (\n <ConditionalWrapper\n condition={isFullscreenMode}\n wrapper={children => (\n <div className={classes.fullscreenChatLayout}>\n {!isChatHistoryDrawerOpen && (\n <CollapsedHistoryStrip\n onExpand={() => setIsChatHistoryDrawerOpen(true)}\n onNewChat={onNewChat}\n newChatDisabled={newChatCreated}\n />\n )}\n {children}\n </div>\n )}\n >\n <ChatbotConversationHistoryNav\n drawerPanelContentProps={{\n isResizable: isFullscreenMode,\n hasNoBorder: !isFullscreenMode,\n style: drawerPanelStyle,\n }}\n reverseButtonOrder\n displayMode={ChatbotDisplayMode.embedded}\n onDrawerToggle={onChatHistoryDrawerToggle}\n title=\"\"\n navTitleIcon={null}\n isDrawerOpen={isChatHistoryDrawerOpen}\n drawerCloseButtonProps={{\n 'aria-label': t('aria.closeDrawerPanel'),\n }}\n setIsDrawerOpen={setIsChatHistoryDrawerOpen}\n activeItemId={viewConversationId}\n onSelectActiveItem={onSelectActiveItem}\n conversations={filterConversations(filterValue)}\n onNewChat={newChatCreated ? undefined : onNewChat}\n newChatButtonText={t('button.newChat')}\n newChatButtonProps={{\n icon: isFullscreenMode ? <PencilIcon /> : <PlusIcon />,\n }}\n handleTextInputChange={handleFilter}\n searchInputPlaceholder={t('chatbox.search.placeholder')}\n searchInputAriaLabel={t('aria.search.placeholder')}\n searchInputProps={{\n value: filterValue,\n onClear: () => {\n setFilterValue('');\n },\n }}\n searchActionEnd={sortDropdown}\n noResultsState={\n filterValue &&\n Object.keys(filterConversations(filterValue)).length === 0\n ? {\n bodyText: t('chatbox.emptyState.noResults.body'),\n titleText: t('chatbox.emptyState.noResults.title'),\n icon: SearchIcon,\n }\n : undefined\n }\n drawerContent={\n <FileDropZone\n className={classes.drawerFileDropZone}\n onFileDrop={(e, data) => handleAttach(data, e)}\n displayMode={ChatbotDisplayMode.embedded}\n infoText={t('chatbox.fileUpload.infoText')}\n allowedFileTypes={supportedFileTypes}\n onAttachRejected={onAttachRejected}\n >\n {showAlert && uploadError.message && (\n <div className={classes.errorContainer}>\n <ChatbotAlert\n component=\"h4\"\n title={t('chatbox.fileUpload.failed')}\n variant={uploadError.type ?? 'danger'}\n isInline\n onClose={() => setUploadError({ message: null })}\n >\n {uploadError.message}\n </ChatbotAlert>\n </div>\n )}\n {mainPanelContent}\n </FileDropZone>\n }\n />\n </ConditionalWrapper>\n )}\n {showNotebooksPanel &&\n !notebooksPermissionLoading &&\n hasNotebooksAccess &&\n activeNotebook && (\n <NotebookView\n sessionId={activeNotebook.session_id}\n notebookName={activeNotebook.name}\n documents={notebookDocuments}\n metadata={activeNotebook.metadata}\n topicSummary={\n conversations.find(\n c =>\n c.conversation_id ===\n activeNotebook.metadata?.conversation_id,\n )?.topic_summary ?? undefined\n }\n userName={userName}\n avatar={avatar}\n profileLoading={profileLoading}\n topicRestrictionEnabled={topicRestrictionEnabled}\n onClose={handleCloseNotebook}\n />\n )}\n {showNotebooksPanel &&\n !notebooksPermissionLoading &&\n hasNotebooksAccess &&\n !activeNotebook && (\n <NotebooksTab\n notebooks={notebooks}\n hasNotebooks={hasNotebooks}\n classes={classes}\n openNotebookMenuId={openNotebookMenuId}\n setOpenNotebookMenuId={setOpenNotebookMenuId}\n onSelectNotebook={(notebook: NotebookSession) => {\n navigate(`/lightspeed/notebooks/${notebook.session_id}`);\n }}\n onRename={setRenameNotebookId}\n onDelete={setDeleteNotebookId}\n onCreateNotebook={handleCreateNotebook}\n t={t}\n />\n )}\n {showNotebooksPanel &&\n !notebooksPermissionLoading &&\n !hasNotebooksAccess && (\n <PermissionRequiredState\n subject={t('permission.subject.notebooks')}\n permissions={['lightspeed.notebooks.use']}\n action={\n <Button\n variant=\"outlined\"\n color=\"primary\"\n style={{ borderRadius: '20px' }}\n onClick={() => {\n setActiveTab(0);\n setShellViewTab(0);\n }}\n >\n {t('permission.notebooks.goBack')}\n </Button>\n }\n />\n )}\n </Chatbot>\n <Attachment />\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LightSpeedChat.esm.js","sources":["../../src/components/LightSpeedChat.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 {\n ChangeEvent,\n MouseEvent,\n Ref,\n SyntheticEvent,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n FileRejection,\n type DropEvent as ReactDropzoneDropEvent,\n} from 'react-dropzone';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\n\nimport { Button, makeStyles } from '@material-ui/core';\nimport Tab from '@mui/material/Tab';\nimport Tabs from '@mui/material/Tabs';\nimport {\n Chatbot,\n ChatbotAlert,\n ChatbotContent,\n ChatbotDisplayMode,\n ChatbotFooter,\n ChatbotFootnote,\n ChatbotHeader,\n ChatbotHeaderMain,\n ChatbotHeaderMenu,\n ChatbotHeaderTitle,\n FileDropZone,\n MessageBar,\n MessageProps,\n Settings,\n} from '@patternfly/chatbot';\nimport ChatbotConversationHistoryNav from '@patternfly/chatbot/dist/dynamic/ChatbotConversationHistoryNav';\nimport {\n Alert,\n AlertActionCloseButton,\n AlertGroup,\n AlertVariant,\n DropdownItem,\n Label,\n MenuToggle,\n MenuToggleElement,\n Select,\n SelectList,\n SelectOption,\n Title,\n Tooltip,\n type AlertProps,\n} from '@patternfly/react-core';\nimport {\n PlusIcon,\n SearchIcon,\n SortAmountDownAltIcon,\n SortAmountDownIcon,\n} from '@patternfly/react-icons';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport {\n supportedFileTypes,\n TEMP_CONVERSATION_ID,\n UNTITLED_NOTEBOOK_NAME,\n} from '../const';\nimport {\n useBackstageUserIdentity,\n useConversationMessages,\n useConversations,\n useIsMobile,\n useLastOpenedConversation,\n useLightspeedDeletePermission,\n useLightspeedNotebooksPermission,\n useNotebookConversationIds,\n useNotebookSession,\n useNotebookSessions,\n usePinnedChatsSettings,\n useSortSettings,\n useStopConversation,\n} from '../hooks';\nimport { useCreateNotebook } from '../hooks/notebooks/useCreateNotebook';\nimport { useNotebookDocuments } from '../hooks/notebooks/useNotebookDocuments';\nimport { useLightspeedDrawerContext } from '../hooks/useLightspeedDrawerContext';\nimport { useLightspeedUpdatePermission } from '../hooks/useLightspeedUpdatePermission';\nimport { useTranslation } from '../hooks/useTranslation';\nimport { useWelcomePrompts } from '../hooks/useWelcomePrompts';\nimport logo from '../images/logo.svg';\nimport { ConversationSummary, NotebookSession } from '../types';\nimport { getAttachments } from '../utils/attachment-utils';\nimport {\n getCategorizeMessages,\n getFootnoteProps,\n SortOption,\n} from '../utils/lightspeed-chatbox-utils';\nimport Attachment from './Attachment';\nimport { useFileAttachmentContext } from './AttachmentContext';\nimport { CollapsedHistoryStrip, PencilIcon } from './CollapsedHistoryStrip';\nimport { DeleteModal } from './DeleteModal';\nimport FilePreview from './FilePreview';\nimport { LightspeedChatBox } from './LightspeedChatBox';\nimport { LightspeedChatBoxHeader } from './LightspeedChatBoxHeader';\nimport { McpServersSettings } from './McpServersSettings';\nimport { MessageBarModelSelector } from './MessageBarModelSelector';\nimport { DeleteNotebookModal } from './notebooks/DeleteNotebookModal';\nimport { NotebooksTab } from './notebooks/NotebooksTab';\nimport { NotebookView } from './notebooks/NotebookView';\nimport { RenameNotebookModal } from './notebooks/RenameNotebookModal';\nimport PermissionRequiredState from './PermissionRequiredState';\nimport { RenameConversationModal } from './RenameConversationModal';\n\nconst COLLAPSE_PANEL_ICON_SVG = `url(\"data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16 21V3H14V21H16ZM12 17V7L7 12L12 17Z' fill='black'/%3E%3C/svg%3E\") no-repeat center`;\n\nconst ConditionalWrapper = ({\n condition,\n wrapper,\n children,\n}: {\n condition: boolean;\n wrapper: (children: React.ReactNode) => React.ReactNode;\n children: React.ReactNode;\n}) => (condition ? wrapper(children) : children);\n\nconst useStyles = makeStyles(theme => ({\n body: {\n // remove default margin and padding from common elements\n // lists excluded for proper formatting\n '& h1, & h2, & h3, & h4, & h5, & h6, & p, & li': {\n margin: 0,\n padding: 0,\n },\n '& .pf-chatbot__content': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n },\n header: {\n padding: `${theme.spacing(3)}px ${theme.spacing(3)}px 0 ${theme.spacing(\n 3,\n )}px !important`,\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default) !important',\n },\n errorContainer: {\n padding: theme.spacing(3),\n },\n drawerFileDropZone: {\n gap: 0,\n rowGap: 0,\n columnGap: 0,\n '--pf-v6-c-multiple-file-upload--Gap': '0',\n '--pf-v5-c-multiple-file-upload--Gap': '0',\n flex: 1,\n minWidth: 0,\n },\n headerMenu: {\n // align hamburger icon with title\n '& .pf-v6-c-button': {\n display: 'flex',\n alignItems: 'center',\n },\n },\n headerLogo: {\n width: 48,\n height: 48,\n marginRight: theme.spacing(1.5),\n flexShrink: 0,\n },\n headerTitle: {\n justifyContent: 'left !important',\n '& h1': {\n fontSize: '32px !important',\n fontWeight: '700 !important',\n lineHeight: '36.4px !important',\n fontFamily: '\"Red Hat Display\", sans-serif !important',\n },\n },\n headerDivider: {\n paddingTop: 8,\n borderBottom: '1px solid var(--pf-t--global--border--color--default)',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n notebooksContainer: {\n padding: theme.spacing(3),\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n overflowY: 'auto',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n notebooksHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: theme.spacing(4),\n },\n notebooksHeading: {\n marginBottom: 0,\n },\n notebooksHeadingEmpty: {\n '&&': {\n marginBottom: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n },\n },\n notebooksEmptyState: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n },\n notebooksIcon: {\n fontSize: 48,\n color: 'var(--pf-t--global--icon--color--subtle)',\n marginBottom: theme.spacing(1.5),\n },\n notebooksDescription: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(3),\n maxWidth: 420,\n },\n notebooksAction: {\n textTransform: 'none',\n borderRadius: 999,\n paddingLeft: theme.spacing(3),\n paddingRight: theme.spacing(3),\n },\n notebooksActionEmpty: {\n textTransform: 'none',\n borderRadius: 999,\n paddingLeft: theme.spacing(3),\n paddingRight: theme.spacing(3),\n marginTop: theme.spacing(3),\n },\n notebooksGrid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(3, minmax(0, 1fr))',\n gap: theme.spacing(2),\n width: '100%',\n maxWidth: '100%',\n paddingBottom: theme.spacing(3),\n [theme.breakpoints.down('md')]: {\n gridTemplateColumns: 'repeat(2, minmax(0, 1fr))',\n },\n [theme.breakpoints.down('sm')]: {\n gridTemplateColumns: 'repeat(1, minmax(0, 1fr))',\n },\n },\n notebookCard: {\n borderRadius: theme.spacing(1.5),\n display: 'flex',\n flexDirection: 'column',\n '&:hover': {\n borderColor: 'var(--pf-t--global--border--color--hover)',\n borderWidth: '1px',\n borderStyle: 'solid',\n cursor: 'pointer',\n },\n },\n notebookCardHeader: {\n padding: theme.spacing(2),\n paddingBottom: 0,\n alignItems: 'center',\n },\n notebookCardDivider: {\n borderTop: '1px solid var(--pf-t--global--border--color--default)',\n marginTop: theme.spacing(1),\n },\n notebookCardBody: {\n padding: theme.spacing(2),\n paddingTop: theme.spacing(1.5),\n },\n notebookDocuments: {\n paddingTop: theme.spacing(1),\n paddingLeft: theme.spacing(2),\n },\n notebookUpdated: {\n paddingBottom: theme.spacing(5),\n paddingLeft: theme.spacing(2),\n paddingTop: theme.spacing(2),\n },\n notebookTitle: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n minWidth: 0,\n flex: 1,\n },\n notebookCardHeaderActions: {\n marginLeft: theme.spacing(1),\n },\n notebookTitleText: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n notebookMenuButton: {\n color: theme.palette.text.secondary,\n },\n notebookDropdownList: {\n paddingTop: 0,\n paddingBottom: 0,\n paddingInlineStart: 0,\n },\n notebookDropdownMenu: {\n '--pf-v6-c-menu--PaddingBlockStart': '0',\n '--pf-v6-c-menu--PaddingBlockEnd': '0',\n },\n notebookDropdownItem: {\n justifyContent: 'flex-start',\n textAlign: 'left',\n paddingLeft: theme.spacing(1.5),\n paddingRight: theme.spacing(1.5),\n },\n footer: {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n '&>.pf-chatbot__footer-container': {\n width: '95% !important',\n maxWidth: 'unset !important',\n },\n '& .pf-chatbot__message-bar': {\n backgroundColor:\n theme.palette.type === 'light'\n ? theme.palette.grey[100]\n : 'var(--pf-t--global--background--color--secondary--default)',\n },\n },\n fullscreenFooter: {\n '&>.pf-chatbot__footer-container': {\n width: '100% !important',\n padding: theme.spacing(1.5),\n maxWidth: 'unset !important',\n margin: '0 auto',\n },\n },\n messageBar: {\n border: '1px solid var(--pf-t--global--border--color--default)',\n borderRadius: 24,\n padding: theme.spacing(0.5),\n '&::after': {\n display: 'none',\n },\n },\n sortDropdown: {\n padding: 0,\n margin: 0,\n },\n // Outer content wrapper (library may override overflow; we rely on inner scroll wrapper).\n chatbotContent: {\n minHeight: 0,\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n '& .pf-chatbot__jump': {\n left: '50% !important',\n right: 'auto !important',\n transform: 'translateX(-50%)',\n visibility: 'hidden',\n pointerEvents: 'none',\n },\n '& .pf-chatbot__message-contents': {\n overflowX: 'hidden',\n overflowWrap: 'break-word',\n wordBreak: 'break-word',\n },\n },\n chatbotContentHasOverflow: {\n '& .pf-chatbot__jump': {\n visibility: 'visible',\n pointerEvents: 'auto',\n },\n },\n // Inner scroll container we control: always scrollable so zoomed-in users see full content.\n chatbotContentScroll: {\n minHeight: 0,\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n overflowY: 'auto',\n WebkitOverflowScrolling: 'touch',\n },\n chatbotContentScrollNewChat: {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n toastAlertGroup: {\n '--pf-v6-c-alert-group--m-toast--InsetInlineEnd': `${theme.spacing(2.5)}px`,\n '--pf-v6-c-alert-group--m-toast--InsetBlockStart': `${theme.spacing(2.5)}px`,\n '--pf-v6-c-alert-group--m-toast--MaxWidth': '350px',\n '--pf-v6-c-alert-group--m-toast--ZIndex': '9999',\n },\n toastAlert: {\n maxWidth: '350px',\n '& .pf-v6-c-alert__title': {\n margin: 0,\n },\n },\n // When present, pushes welcome content to bottom (zoom out). Scroll up to see important box (zoom in).\n chatbotContentSpacer: {\n flex: 1,\n minHeight: 0,\n },\n settingsFlat: {\n height: '100%',\n width: '100%',\n '&.pf-chatbot__settings-form-container': {\n background:\n 'var(--pf-v6-c-table--BackgroundColor, var(--pf-t--global--background--color--primary--default))',\n padding: 0,\n margin: 0,\n minHeight: '100%',\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n maxWidth: 'none',\n },\n '& .pf-chatbot__settings-form': {\n margin: 0,\n padding: 0,\n background:\n 'var(--pf-v6-c-table--BackgroundColor, var(--pf-t--global--background--color--primary--default))',\n minHeight: '100%',\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n maxWidth: 'none',\n },\n '& .pf-chatbot__settings-form-row': {\n background:\n 'var(--pf-v6-c-table--BackgroundColor, var(--pf-t--global--background--color--primary--default))',\n border: 0,\n margin: 0,\n padding: 0,\n minHeight: '100%',\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n maxWidth: 'none',\n },\n '& .pf-chatbot__settings-label': {\n display: 'none',\n },\n },\n mcpFullscreenLayout: {\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr) minmax(0, 1fr)',\n minHeight: 0,\n height: '100%',\n flex: 1,\n width: '100%',\n minWidth: 0,\n overflow: 'hidden',\n },\n mcpChatPane: {\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0,\n width: '100%',\n minWidth: 0,\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n },\n mcpSettingsPane: {\n width: '100%',\n minWidth: 0,\n borderLeft: `1px solid ${theme.palette.divider}`,\n backgroundColor:\n 'var(--pf-v6-c-table--BackgroundColor, var(--pf-t--global--background--color--primary--default))',\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0,\n overflow: 'auto',\n },\n mcpCollapsedDrawerOrderFix: {\n '& .pf-v6-c-drawer.pf-m-panel-left > .pf-v6-c-drawer__main > .pf-v6-c-drawer__content, & .pf-v5-c-drawer.pf-m-panel-left > .pf-v5-c-drawer__main > .pf-v5-c-drawer__content':\n {\n order: 'unset',\n },\n '& .pf-v6-c-drawer:not(.pf-m-expanded) > .pf-v6-c-drawer__main > .pf-v6-c-drawer__panel, & .pf-v5-c-drawer:not(.pf-m-expanded) > .pf-v5-c-drawer__main > .pf-v5-c-drawer__panel':\n {\n visibility: 'hidden',\n opacity: 0,\n transition: 'none !important',\n },\n },\n // TODO: These PatternFly drawer overrides are needed because PF Chatbot doesn't\n // provide clean APIs for custom expand/collapse icons and positioning.\n // Remove once PatternFly supports these features.\n // See: https://github.com/patternfly/chatbot/issues/834\n fullscreenChatLayout: {\n display: 'flex',\n flexDirection: 'row',\n flex: 1,\n minHeight: 0,\n height: '100%',\n width: '100%',\n '& .pf-v6-c-drawer, & .pf-v5-c-drawer': {\n flex: 1,\n minWidth: 0,\n },\n '& .pf-v6-c-drawer__content, & .pf-v5-c-drawer__content': {\n flex: 1,\n minWidth: 0,\n },\n '& .pf-v6-c-drawer:not(.pf-m-expanded) > .pf-v6-c-drawer__main > .pf-v6-c-drawer__panel, & .pf-v5-c-drawer:not(.pf-m-expanded) > .pf-v5-c-drawer__main > .pf-v5-c-drawer__panel':\n {\n display: 'none',\n },\n '& .pf-v6-c-drawer__close, & .pf-v5-c-drawer__close': {\n marginTop: -48,\n marginRight: -24,\n },\n '& .pf-v6-c-drawer__close .pf-v6-c-button svg, & .pf-v5-c-drawer__close .pf-v5-c-button svg':\n {\n display: 'none',\n },\n '& .pf-v6-c-drawer__close .pf-v6-c-button, & .pf-v5-c-drawer__close .pf-v5-c-button':\n {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n '&::before': {\n content: '\"\"',\n display: 'block',\n width: 24,\n height: 24,\n mask: COLLAPSE_PANEL_ICON_SVG,\n WebkitMask: COLLAPSE_PANEL_ICON_SVG,\n backgroundColor: 'currentColor',\n },\n },\n '& .pf-chatbot__menu-item': {\n cursor: 'pointer',\n },\n '& .pf-chatbot__menu-item .pf-v6-c-menu-toggle, & .pf-chatbot__menu-item .pf-v5-c-menu-toggle':\n {\n opacity: 0,\n transition: 'opacity 0.15s ease-in-out',\n },\n '& .pf-chatbot__menu-item:hover .pf-v6-c-menu-toggle, & .pf-chatbot__menu-item:hover .pf-v5-c-menu-toggle':\n {\n opacity: 1,\n },\n },\n fullscreenMainContent: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n minWidth: 0,\n overflow: 'hidden',\n },\n}));\n\ntype LightspeedChatProps = {\n selectedModel: string;\n topicRestrictionEnabled: boolean;\n selectedProvider: string;\n userName?: string;\n avatar?: string;\n profileLoading: boolean;\n handleSelectedModel: (item: string) => void;\n models: { label: string; value: string; provider: string }[];\n};\n\nexport const LightspeedChat = ({\n selectedModel,\n topicRestrictionEnabled,\n selectedProvider,\n userName,\n avatar,\n profileLoading,\n handleSelectedModel,\n models,\n}: LightspeedChatProps) => {\n const isMobile = useIsMobile();\n const classes = useStyles();\n const { t } = useTranslation();\n const navigate = useNavigate();\n const configApi = useApi(configApiRef);\n const notebooksEnabled =\n configApi.getOptionalBoolean('lightspeed.notebooks.enabled') ?? false;\n const notebooksRouteMatch = useMatch('/lightspeed/notebooks');\n const notebookViewRouteMatch = useMatch('/lightspeed/notebooks/:notebookId');\n const routeNotebookId = notebookViewRouteMatch?.params?.notebookId;\n const isOnNotebookRoute = Boolean(\n notebooksRouteMatch || notebookViewRouteMatch,\n );\n const shouldShowTabs = notebooksEnabled || isOnNotebookRoute;\n const {\n displayMode,\n setDisplayMode,\n currentConversationId: routeConversationId,\n setCurrentConversationId,\n draftMessage,\n setDraftMessage,\n consumePendingOverlayThreadHandoff,\n shellViewTab,\n setShellViewTab,\n } = useLightspeedDrawerContext();\n const isFullscreenMode = displayMode === ChatbotDisplayMode.embedded;\n const location = useLocation();\n const isNotebooksFullscreenPath =\n location.pathname === '/lightspeed/notebooks' ||\n location.pathname.startsWith('/lightspeed/notebooks/');\n const user = useBackstageUserIdentity();\n const [filterValue, setFilterValue] = useState<string>('');\n const [announcement, setAnnouncement] = useState<string>('');\n const [activeTab, setActiveTab] = useState<number>(() => {\n if (!isFullscreenMode) {\n return 0;\n }\n if (notebooksRouteMatch || notebookViewRouteMatch) {\n return 1;\n }\n const p = location.pathname;\n if (p.startsWith('/lightspeed/conversation/')) {\n return 0;\n }\n if (shellViewTab === 1) {\n return 1;\n }\n return 0;\n });\n const { allowed: hasNotebooksAccess, loading: notebooksPermissionLoading } =\n useLightspeedNotebooksPermission();\n const notebooksPermissionResolved =\n !notebooksPermissionLoading && hasNotebooksAccess;\n\n const { data: notebookConversationIdsArray = [] } =\n useNotebookConversationIds();\n const { data: notebooks = [], refetch: refetchNotebooks } =\n useNotebookSessions(notebooksPermissionResolved);\n const hasNotebooks = notebooks.length > 0;\n const [openNotebookMenuId, setOpenNotebookMenuId] = useState<string | null>(\n null,\n );\n const [renameNotebookId, setRenameNotebookId] = useState<string | null>(null);\n const [deleteNotebookId, setDeleteNotebookId] = useState<string | null>(null);\n const [activeNotebook, setActiveNotebook] = useState<NotebookSession | null>(\n null,\n );\n const {\n data: routeNotebook,\n isLoading: routeNotebookLoading,\n isError: routeNotebookError,\n } = useNotebookSession(routeNotebookId);\n\n useEffect(() => {\n if (routeNotebookId && routeNotebook && !routeNotebookLoading) {\n setActiveNotebook(routeNotebook);\n } else if (routeNotebookId && routeNotebookError) {\n navigate('/lightspeed/notebooks', { replace: true });\n } else if (!routeNotebookId && notebooksRouteMatch) {\n setActiveNotebook(null);\n }\n }, [\n routeNotebookId,\n routeNotebook,\n routeNotebookLoading,\n routeNotebookError,\n notebooksRouteMatch,\n navigate,\n ]);\n\n const [notebookAlerts, setNotebookAlerts] = useState<Partial<AlertProps>[]>(\n [],\n );\n const createNotebookMutation = useCreateNotebook();\n const { data: notebookDocuments = [] } = useNotebookDocuments(\n activeNotebook?.session_id,\n );\n const [conversationId, setConversationId] = useState<string>('');\n const [requestId, setRequestId] = useState<string>('');\n const [newChatCreated, setNewChatCreated] = useState<boolean>(false);\n const [isSendButtonDisabled, setIsSendButtonDisabled] =\n useState<boolean>(false);\n const [targetConversationId, setTargetConversationId] = useState<string>('');\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState<boolean>(false);\n const [isRenameModalOpen, setIsRenameModalOpen] = useState<boolean>(false);\n const [isSortSelectOpen, setIsSortSelectOpen] = useState<boolean>(false);\n const [isMcpSettingsOpen, setIsMcpSettingsOpen] = useState<boolean>(false);\n const [chatHeaderBgColor, setChatHeaderBgColor] = useState<string>();\n const contentScrollRef = useRef<HTMLDivElement>(null);\n const bottomSentinelRef = useRef<HTMLDivElement>(null);\n const [messageBarKey, setMessageBarKey] = useState(0);\n const [hasChatContentOverflow, setHasChatContentOverflow] = useState(false);\n const wasStoppedByUserRef = useRef(false);\n const { isReady, lastOpenedId, setLastOpenedId, clearLastOpenedId } =\n useLastOpenedConversation(user);\n const showChatPanel = !isFullscreenMode || activeTab === 0;\n const showNotebooksPanel =\n (notebooksEnabled || isOnNotebookRoute) && activeTab !== 0;\n const [isChatHistoryDrawerOpen, setIsChatHistoryDrawerOpen] =\n useState<boolean>(!isMobile && isFullscreenMode);\n\n // Fullscreen: URL drives Chat vs Notebooks, but shellViewTab must win when entering\n // fullscreen from overlay/docked on Notebooks while navigation still lands on /lightspeed.\n useLayoutEffect(() => {\n if (!isFullscreenMode) {\n return;\n }\n if (isNotebooksFullscreenPath) {\n setActiveTab(1);\n setShellViewTab(1);\n return;\n }\n const isBaseLightspeedChatRoute =\n location.pathname === '/lightspeed' ||\n location.pathname === '/lightspeed/';\n if (shellViewTab === 1 && isBaseLightspeedChatRoute) {\n navigate('/lightspeed/notebooks', { replace: true });\n return;\n }\n setActiveTab(0);\n setShellViewTab(0);\n }, [\n isFullscreenMode,\n isNotebooksFullscreenPath,\n shellViewTab,\n location.pathname,\n navigate,\n setShellViewTab,\n ]);\n\n const handleNotebookTabSelect = (_event: SyntheticEvent, nextTab: number) => {\n setActiveTab(nextTab);\n setShellViewTab(nextTab);\n if (nextTab === 1) {\n navigate('/lightspeed/notebooks');\n if (notebooksPermissionResolved) {\n refetchNotebooks();\n }\n } else {\n navigate(\n routeConversationId\n ? `/lightspeed/conversation/${routeConversationId}`\n : '/lightspeed',\n );\n }\n };\n\n const setDisplayModeFromHeader = useCallback(\n (mode: ChatbotDisplayMode) => {\n if (mode !== ChatbotDisplayMode.embedded) {\n setDisplayMode(mode);\n return;\n }\n if (activeTab === 1) {\n const sid = activeNotebook?.session_id;\n setDisplayMode(\n mode,\n undefined,\n sid ? { notebookSessionId: sid } : 'notebooks',\n );\n } else {\n setDisplayMode(mode);\n }\n },\n [setDisplayMode, activeTab, activeNotebook?.session_id],\n );\n\n const handleCreateNotebook = useCallback(() => {\n createNotebookMutation.mutate(\n { name: UNTITLED_NOTEBOOK_NAME },\n {\n onSuccess: (session: NotebookSession) => {\n navigate(`/lightspeed/notebooks/${session.session_id}`);\n },\n },\n );\n }, [createNotebookMutation, navigate]);\n\n const handleCloseNotebook = useCallback(() => {\n navigate('/lightspeed/notebooks');\n refetchNotebooks();\n }, [navigate, refetchNotebooks]);\n\n const handleRemoveNotebookAlert = (key: React.Key) => {\n setNotebookAlerts(prevAlerts =>\n prevAlerts.filter(alert => alert.key !== key),\n );\n };\n\n const handleNotebookDeleted = () => {\n const key = Date.now();\n setNotebookAlerts(prevAlerts => [\n { title: t('notebooks.delete.toast'), variant: 'success', key },\n ...prevAlerts,\n ]);\n };\n // Open the chat history drawer when entering fullscreen mode on desktop\n useEffect(() => {\n if (!isMobile && isFullscreenMode) {\n setIsChatHistoryDrawerOpen(true);\n }\n }, [isMobile, isFullscreenMode]);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const headerElement = document.querySelector('.pf-chatbot__header');\n if (!headerElement) return;\n const computedBg = window.getComputedStyle(headerElement).backgroundColor;\n if (computedBg) {\n setChatHeaderBgColor(computedBg);\n }\n }, [displayMode, isMcpSettingsOpen]);\n\n const {\n isPinningChatsEnabled,\n pinnedChats,\n handlePinningChatsToggle,\n pinChat,\n unpinChat,\n } = usePinnedChatsSettings(user);\n\n const { selectedSort, handleSortChange } = useSortSettings(user);\n\n const {\n uploadError,\n showAlert,\n fileContents,\n setShowAlert,\n setFileContents,\n handleFileUpload,\n setUploadError,\n } = useFileAttachmentContext();\n\n // After leaving fullscreen for overlay/docked, provider signals a one-shot handoff so a\n // new LightspeedChat mount does not briefly apply stale lastOpened from storage.\n useLayoutEffect(() => {\n if (!isReady) return;\n\n if (isFullscreenMode) {\n return;\n }\n\n const handoff = consumePendingOverlayThreadHandoff?.() ?? false;\n if (handoff) {\n if (routeConversationId) {\n setConversationId(routeConversationId);\n setNewChatCreated(false);\n } else {\n setConversationId(TEMP_CONVERSATION_ID);\n setNewChatCreated(true);\n }\n return;\n }\n\n if (routeConversationId && routeConversationId !== conversationId) {\n setConversationId(routeConversationId);\n setNewChatCreated(false);\n } else if (\n !routeConversationId &&\n conversationId === '' &&\n lastOpenedId !== null\n ) {\n setConversationId(lastOpenedId);\n }\n }, [\n isReady,\n isFullscreenMode,\n routeConversationId,\n conversationId,\n lastOpenedId,\n consumePendingOverlayThreadHandoff,\n ]);\n\n // Sync conversationId with lastOpenedId — fullscreen only (overlay uses layout effect above).\n useEffect(() => {\n if (!isReady || !isFullscreenMode) {\n return;\n }\n if (lastOpenedId !== null) {\n setConversationId(lastOpenedId);\n }\n }, [lastOpenedId, isReady, isFullscreenMode]);\n\n const queryClient = useQueryClient();\n\n const {\n data: conversations = [],\n isLoading,\n isRefetching,\n } = useConversations();\n\n const { allowed: hasDeleteAccess } = useLightspeedDeletePermission();\n const { allowed: hasUpdateAccess } = useLightspeedUpdatePermission();\n const samplePrompts = useWelcomePrompts();\n useEffect(() => {\n if (!user || !isReady) return;\n const onOverlayLikeSurface = isFullscreenMode || !routeConversationId;\n const stillOnProvisionalThread =\n !conversationId || conversationId === TEMP_CONVERSATION_ID;\n\n if (lastOpenedId === null) {\n if (onOverlayLikeSurface && stillOnProvisionalThread) {\n setConversationId(TEMP_CONVERSATION_ID);\n }\n }\n // Only treat as blank \"new chat\" while there is no persisted thread id yet. Otherwise\n // after the first stream assigns a real conversationId, lastOpenedId can lag one frame\n // and this effect would flip newChatCreated back to true and hide the New chat button.\n if (lastOpenedId === TEMP_CONVERSATION_ID || lastOpenedId === null) {\n if (onOverlayLikeSurface && stillOnProvisionalThread) {\n setNewChatCreated(true);\n }\n }\n }, [\n user,\n isReady,\n lastOpenedId,\n setConversationId,\n isFullscreenMode,\n routeConversationId,\n conversationId,\n ]);\n\n useEffect(() => {\n // Clear last opened conversationId when there are no conversations.\n if (\n !isLoading &&\n !isRefetching &&\n conversations.length === 0 &&\n lastOpenedId\n ) {\n clearLastOpenedId();\n // Stale last-opened pointed at a missing thread; align with blank new chat so\n // provisional UI (e.g. hide New chat) matches storage.\n setConversationId(TEMP_CONVERSATION_ID);\n setNewChatCreated(true);\n setCurrentConversationId(undefined);\n }\n }, [\n isLoading,\n isRefetching,\n conversations,\n lastOpenedId,\n clearLastOpenedId,\n setCurrentConversationId,\n ]);\n\n useEffect(() => {\n if (\n !isLoading &&\n !isRefetching &&\n routeConversationId &&\n isFullscreenMode\n ) {\n const conversationExists = conversations.some(\n (c: ConversationSummary) => c.conversation_id === routeConversationId,\n );\n if (!conversationExists) {\n // New threads can be missing from the summaries list until refetch completes; if we\n // already show this id locally (e.g. streaming), do not reset to a new chat.\n if (routeConversationId !== conversationId) {\n // Conversation from route doesn't exist, start a new chat\n setConversationId(TEMP_CONVERSATION_ID);\n setCurrentConversationId(undefined);\n setNewChatCreated(true);\n }\n } else if (conversationId !== routeConversationId) {\n setConversationId(routeConversationId);\n }\n }\n }, [\n isLoading,\n isRefetching,\n routeConversationId,\n conversations,\n displayMode,\n conversationId,\n setCurrentConversationId,\n isFullscreenMode,\n ]);\n\n useEffect(() => {\n // Update last opened conversation whenever `conversationId` changes\n if (conversationId) {\n setLastOpenedId(conversationId);\n }\n }, [conversationId, setLastOpenedId]);\n\n const viewConversationId = useMemo(\n () =>\n !isFullscreenMode && routeConversationId\n ? routeConversationId\n : conversationId,\n [isFullscreenMode, routeConversationId, conversationId],\n );\n\n const onStart = (conv_id: string) => {\n setConversationId(conv_id);\n setCurrentConversationId(conv_id);\n };\n\n const onRequestIdReady = (request_id: string) => {\n setRequestId(request_id);\n };\n\n const onComplete = (message: string) => {\n setIsSendButtonDisabled(false);\n if (!wasStoppedByUserRef.current) {\n setAnnouncement(`Message from Bot: ${message}`);\n }\n wasStoppedByUserRef.current = false;\n queryClient.invalidateQueries({\n queryKey: ['conversations'],\n });\n queryClient.invalidateQueries({\n queryKey: ['conversationMessages', viewConversationId],\n });\n setNewChatCreated(false);\n };\n\n const {\n conversationMessages,\n handleInputPrompt,\n scrollToBottomRef,\n streamingConversationId,\n } = useConversationMessages(\n viewConversationId,\n userName,\n selectedModel,\n selectedProvider,\n avatar,\n onComplete,\n onStart,\n undefined,\n onRequestIdReady,\n );\n\n const streamingUiMatchesView =\n isSendButtonDisabled &&\n streamingConversationId !== null &&\n viewConversationId === streamingConversationId;\n\n const [messages, setMessages] =\n useState<MessageProps[]>(conversationMessages);\n\n const sendMessage = (message: string | number) => {\n if (!message.toString().trim()) return;\n\n wasStoppedByUserRef.current = false;\n if (viewConversationId !== TEMP_CONVERSATION_ID) {\n setNewChatCreated(false);\n }\n setAnnouncement(\n t('conversation.announcement.userMessage' as any, {\n prompt: message.toString(),\n }),\n );\n handleInputPrompt(message.toString(), getAttachments(fileContents));\n setIsSendButtonDisabled(true);\n setFileContents([]);\n setDraftMessage('');\n };\n\n const onNewChat = useCallback(() => {\n (async () => {\n setIsMcpSettingsOpen(false);\n if (conversationId !== TEMP_CONVERSATION_ID) {\n setMessages([]);\n setFileContents([]);\n setUploadError({ message: null });\n setDraftMessage('');\n setConversationId(TEMP_CONVERSATION_ID);\n setNewChatCreated(true);\n setCurrentConversationId(undefined);\n if (!isFullscreenMode) {\n setIsChatHistoryDrawerOpen(false);\n }\n } else {\n // Already on new chat: reset so scroll/layout works (e.g. after opening new chat again from another convo then back).\n setMessages([]);\n setNewChatCreated(true);\n }\n })();\n }, [\n conversationId,\n setFileContents,\n setUploadError,\n setDraftMessage,\n setCurrentConversationId,\n isFullscreenMode,\n ]);\n\n const openDeleteModal = (conversation_id: string) => {\n setTargetConversationId(conversation_id);\n setIsDeleteModalOpen(true);\n };\n\n const openChatRenameModal = (conversation_id: string) => {\n setTargetConversationId(conversation_id);\n setIsRenameModalOpen(true);\n };\n\n const handleDeleteConversation = useCallback(() => {\n if (targetConversationId === lastOpenedId) {\n onNewChat();\n clearLastOpenedId();\n }\n setIsDeleteModalOpen(false);\n }, [clearLastOpenedId, lastOpenedId, onNewChat, targetConversationId]);\n\n const additionalMessageProps = useCallback(\n (conversationSummary: ConversationSummary) => {\n const isChatFavorite = pinnedChats?.find(\n c => c === conversationSummary.conversation_id,\n );\n return {\n menuItems: (\n <>\n <DropdownItem\n isDisabled={!hasUpdateAccess}\n onClick={() =>\n openChatRenameModal(conversationSummary.conversation_id)\n }\n >\n {t('conversation.rename')}\n </DropdownItem>\n {isPinningChatsEnabled && (\n <>\n {isChatFavorite ? (\n <DropdownItem\n onClick={() =>\n unpinChat(conversationSummary.conversation_id)\n }\n >\n {t('conversation.removeFromPinnedChats')}\n </DropdownItem>\n ) : (\n <DropdownItem\n onClick={() => pinChat(conversationSummary.conversation_id)}\n >\n {t('conversation.addToPinnedChats')}\n </DropdownItem>\n )}\n </>\n )}\n <DropdownItem\n isDisabled={!hasDeleteAccess}\n onClick={() =>\n openDeleteModal(conversationSummary.conversation_id)\n }\n >\n {t('conversation.delete')}\n </DropdownItem>\n </>\n ),\n };\n },\n [\n pinnedChats,\n hasDeleteAccess,\n isPinningChatsEnabled,\n hasUpdateAccess,\n t,\n pinChat,\n unpinChat,\n ],\n );\n\n const notebookConversationIds = useMemo(\n () => new Set(notebookConversationIdsArray),\n [notebookConversationIdsArray],\n );\n\n const chatOnlyConversations = useMemo(\n () =>\n conversations.filter(\n c => !notebookConversationIds.has(c.conversation_id),\n ),\n [conversations, notebookConversationIds],\n );\n\n const categorizedMessages = useMemo(\n () =>\n getCategorizeMessages(\n chatOnlyConversations,\n pinnedChats,\n additionalMessageProps,\n t,\n selectedSort,\n ),\n [\n additionalMessageProps,\n chatOnlyConversations,\n pinnedChats,\n t,\n selectedSort,\n ],\n );\n\n const filterConversations = useCallback(\n (targetValue: string) => {\n const pinnedChatsKey =\n t('conversation.category.pinnedChats') || 'Pinned chats';\n let isNoPinnedChatsSearchResults = false;\n let isNoRecentChatsSearchResults = false;\n const filteredConversations = Object.entries(categorizedMessages).reduce(\n (acc, [key, items]) => {\n const filteredItems = items.filter(item =>\n (item.text ?? '')\n .toLocaleLowerCase('en-US')\n .includes(targetValue.toLocaleLowerCase('en-US')),\n );\n const isPinnedCategory = key === pinnedChatsKey;\n if (isPinnedCategory && isPinningChatsEnabled) {\n if (filteredItems.length > 0) {\n acc[pinnedChatsKey] = filteredItems;\n } else {\n isNoPinnedChatsSearchResults =\n categorizedMessages[pinnedChatsKey].length > 0;\n acc[pinnedChatsKey] = [\n {\n id: isNoPinnedChatsSearchResults\n ? 'no-pinned-chats-search-results'\n : 'no-pinned-chats',\n text: isNoPinnedChatsSearchResults\n ? t('common.noSearchResults')\n : t('chatbox.emptyState.noPinnedChats'),\n noIcon: true,\n additionalProps: {\n isDisabled: true,\n },\n },\n ];\n }\n } else if (!isPinnedCategory) {\n if (filteredItems.length > 0) {\n acc[key] = filteredItems;\n } else {\n isNoRecentChatsSearchResults =\n categorizedMessages[key].length > 0;\n\n acc[key] = [\n {\n id: isNoRecentChatsSearchResults\n ? 'no-recent-chats-search-results'\n : 'no-recent-chats',\n text: isNoRecentChatsSearchResults\n ? t('common.noSearchResults')\n : t('chatbox.emptyState.noRecentChats'),\n noIcon: true,\n additionalProps: {\n isDisabled: true,\n },\n },\n ];\n }\n }\n return acc;\n },\n {} as any,\n );\n // If both sections had items but search filtered them all out, return empty object\n // so PatternFly's default empty state shows instead of custom empty state messages\n if (isNoPinnedChatsSearchResults && isNoRecentChatsSearchResults) {\n return {};\n }\n return filteredConversations;\n },\n [categorizedMessages, isPinningChatsEnabled, t],\n );\n\n useEffect(() => {\n setMessages(conversationMessages);\n }, [conversationMessages]);\n\n const onSelectActiveItem = useCallback(\n (_: MouseEvent | undefined, selectedItem: string | number | undefined) => {\n setIsMcpSettingsOpen(false);\n setNewChatCreated(false);\n const newConvId = String(selectedItem);\n setConversationId((c_id: string) => {\n if (c_id !== selectedItem) {\n return newConvId;\n }\n return c_id;\n });\n setCurrentConversationId(newConvId);\n setFileContents([]);\n setUploadError({ message: null });\n setDraftMessage('');\n scrollToBottomRef.current?.scrollToBottom();\n },\n [\n setConversationId,\n setUploadError,\n setFileContents,\n setDraftMessage,\n scrollToBottomRef,\n setCurrentConversationId,\n setIsMcpSettingsOpen,\n ],\n );\n\n const conversationFound = !!conversations.find(\n (c: ConversationSummary) => c.conversation_id === viewConversationId,\n );\n\n const getMaxPrompts = () => {\n if (isFullscreenMode) {\n return samplePrompts?.length; // In the Fullscreen mode, show all prompts\n }\n if (displayMode === ChatbotDisplayMode.docked) {\n return 2; // In the docked mode, show 2 prompts\n }\n return 1; // In the overlay mode, show 1 prompt\n };\n const maxPrompts = getMaxPrompts();\n\n const welcomePrompts =\n (newChatCreated && conversationMessages.length === 0) ||\n (!conversationFound && conversationMessages.length === 0)\n ? samplePrompts?.slice(0, maxPrompts).map(prompt => {\n const p = prompt as { title: string; message: string };\n return {\n title: p.title,\n message: p.message,\n onClick: () => {\n sendMessage(p.message);\n },\n };\n })\n : [];\n\n // Scroll to bottom when welcome content appears (sentinel + useLayoutEffect/RAF + ResizeObserver).\n useLayoutEffect(() => {\n if (welcomePrompts.length === 0) return undefined;\n const el = contentScrollRef.current;\n const sentinel = bottomSentinelRef.current;\n if (!el) return undefined;\n\n const scrollToBottom = () => {\n if (sentinel && typeof sentinel.scrollIntoView === 'function') {\n sentinel.scrollIntoView({ block: 'end', behavior: 'auto' });\n } else {\n el.scrollTop = el.scrollHeight;\n }\n };\n\n const rafId =\n typeof requestAnimationFrame !== 'undefined'\n ? requestAnimationFrame(() => scrollToBottom())\n : null;\n if (rafId === null) scrollToBottom();\n const resizeObserver =\n typeof ResizeObserver !== 'undefined'\n ? new ResizeObserver(() => scrollToBottom())\n : undefined;\n resizeObserver?.observe(el);\n\n return () => {\n if (rafId !== null && typeof cancelAnimationFrame !== 'undefined') {\n cancelAnimationFrame(rafId);\n }\n resizeObserver?.disconnect();\n };\n }, [welcomePrompts.length]);\n\n useEffect(() => {\n const scrollContainer = contentScrollRef.current;\n if (!scrollContainer) {\n setHasChatContentOverflow(false);\n return undefined;\n }\n\n const getMessageBox = () =>\n scrollContainer.querySelector(\n '.pf-chatbot__messagebox',\n ) as HTMLElement | null;\n\n const messageBoxOwnsScroll = (messageBox: HTMLElement | null) => {\n if (!messageBox || typeof window === 'undefined') {\n return false;\n }\n const overflowY = window.getComputedStyle(messageBox).overflowY;\n return (\n overflowY === 'auto' ||\n overflowY === 'scroll' ||\n overflowY === 'overlay'\n );\n };\n\n const getScrollTarget = () => {\n const messageBox = getMessageBox();\n return messageBoxOwnsScroll(messageBox) ? messageBox! : scrollContainer;\n };\n\n let observedScrollTarget: HTMLElement | null = getScrollTarget();\n let rafId: number | null = null;\n let updateScheduled = false;\n\n const updateOverflow = () => {\n const scrollTarget = observedScrollTarget ?? scrollContainer;\n setHasChatContentOverflow(\n scrollTarget.scrollHeight > scrollTarget.clientHeight + 1,\n );\n };\n\n const scheduleOverflowUpdate = () => {\n if (updateScheduled) {\n return;\n }\n updateScheduled = true;\n if (typeof requestAnimationFrame !== 'undefined') {\n rafId = requestAnimationFrame(() => {\n updateScheduled = false;\n updateOverflow();\n });\n } else {\n updateScheduled = false;\n updateOverflow();\n }\n };\n\n scheduleOverflowUpdate();\n\n // Use capture so scroll events from inner messagebox also trigger updates.\n scrollContainer.addEventListener('scroll', scheduleOverflowUpdate, {\n passive: true,\n capture: true,\n });\n\n const resizeObserver =\n typeof ResizeObserver !== 'undefined'\n ? new ResizeObserver(() => scheduleOverflowUpdate())\n : undefined;\n resizeObserver?.observe(scrollContainer);\n if (observedScrollTarget !== scrollContainer) {\n resizeObserver?.observe(observedScrollTarget);\n }\n\n const syncObservedScrollTarget = () => {\n const nextScrollTarget = getScrollTarget();\n if (nextScrollTarget === observedScrollTarget) {\n return;\n }\n if (observedScrollTarget && observedScrollTarget !== scrollContainer) {\n resizeObserver?.unobserve(observedScrollTarget);\n }\n if (nextScrollTarget !== scrollContainer) {\n resizeObserver?.observe(nextScrollTarget);\n }\n observedScrollTarget = nextScrollTarget;\n };\n\n const mutationObserver =\n typeof MutationObserver !== 'undefined'\n ? new MutationObserver(() => {\n syncObservedScrollTarget();\n scheduleOverflowUpdate();\n })\n : undefined;\n mutationObserver?.observe(scrollContainer, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n\n if (typeof window !== 'undefined') {\n window.addEventListener('resize', updateOverflow);\n }\n\n return () => {\n if (rafId !== null && typeof cancelAnimationFrame !== 'undefined') {\n cancelAnimationFrame(rafId);\n }\n scrollContainer.removeEventListener(\n 'scroll',\n scheduleOverflowUpdate,\n true,\n );\n if (observedScrollTarget && observedScrollTarget !== scrollContainer) {\n resizeObserver?.unobserve(observedScrollTarget);\n }\n resizeObserver?.disconnect();\n mutationObserver?.disconnect();\n if (typeof window !== 'undefined') {\n window.removeEventListener('resize', updateOverflow);\n }\n };\n }, [\n conversationId,\n displayMode,\n isMcpSettingsOpen,\n messages.length,\n welcomePrompts.length,\n ]);\n\n const handleFilter = useCallback((value: string) => {\n setFilterValue(value);\n }, []);\n\n const onChatHistoryDrawerToggle = useCallback(() => {\n setIsChatHistoryDrawerOpen(isOpen => !isOpen);\n }, []);\n\n const onSortToggle = useCallback(() => {\n setIsSortSelectOpen(prev => !prev);\n }, []);\n\n const onSortSelect = useCallback(\n (_event?: MouseEvent<Element>, value?: string | number) => {\n handleSortChange(value as SortOption);\n setIsSortSelectOpen(false);\n },\n [handleSortChange],\n );\n\n const getSortLabel = useCallback(\n (option: SortOption): string => {\n const labels: Record<SortOption, string> = {\n newest: t('sort.newest'),\n oldest: t('sort.oldest'),\n alphabeticalAsc: t('sort.alphabeticalAsc'),\n alphabeticalDesc: t('sort.alphabeticalDesc'),\n };\n return labels[option];\n },\n [t],\n );\n\n const sortToggle = useCallback(\n (toggleRef: Ref<MenuToggleElement>) => (\n <Tooltip content={`${t('sort.label')} - ${getSortLabel(selectedSort)}`}>\n <MenuToggle\n ref={toggleRef}\n aria-label={t('sort.label')}\n variant=\"plain\"\n onClick={onSortToggle}\n isExpanded={isSortSelectOpen}\n >\n {selectedSort === 'oldest' || selectedSort === 'alphabeticalDesc' ? (\n <SortAmountDownAltIcon />\n ) : (\n <SortAmountDownIcon />\n )}\n </MenuToggle>\n </Tooltip>\n ),\n [t, getSortLabel, selectedSort, onSortToggle, isSortSelectOpen],\n );\n\n const sortDropdown = useMemo(\n () => (\n <Select\n id=\"sort-select\"\n isOpen={isSortSelectOpen}\n selected={selectedSort}\n onSelect={onSortSelect}\n onOpenChange={(isOpen: boolean) => setIsSortSelectOpen(isOpen)}\n popperProps={{ position: 'end' }}\n toggle={sortToggle}\n shouldFocusToggleOnSelect\n >\n <SelectList className={classes.sortDropdown}>\n <SelectOption value=\"newest\">{t('sort.newest')}</SelectOption>\n <SelectOption value=\"oldest\">{t('sort.oldest')}</SelectOption>\n <SelectOption value=\"alphabeticalAsc\">\n {t('sort.alphabeticalAsc')}\n </SelectOption>\n <SelectOption value=\"alphabeticalDesc\">\n {t('sort.alphabeticalDesc')}\n </SelectOption>\n </SelectList>\n </Select>\n ),\n [\n isSortSelectOpen,\n selectedSort,\n onSortSelect,\n sortToggle,\n t,\n classes.sortDropdown,\n ],\n );\n\n const handleAttach = (data: File[], event: ReactDropzoneDropEvent) => {\n if (\n 'preventDefault' in event &&\n typeof event.preventDefault === 'function'\n ) {\n event.preventDefault();\n }\n handleFileUpload(data);\n };\n\n const { mutate: stopConversation } = useStopConversation();\n\n const handleStopButton = () => {\n wasStoppedByUserRef.current = true;\n if (requestId) {\n stopConversation(requestId);\n setRequestId('');\n }\n setIsSendButtonDisabled(false);\n setAnnouncement(t('conversation.announcement.responseStopped'));\n const lastUserMessage = [...conversationMessages]\n .reverse()\n .find((m: { role?: string }) => m.role === 'user');\n const restoredPrompt = (lastUserMessage?.content as string) ?? '';\n setDraftMessage(restoredPrompt.trim());\n if (restoredPrompt) setMessageBarKey(k => k + 1);\n setFileContents([]);\n setUploadError({ message: null });\n };\n\n const handleDraftMessage = (\n _e: ChangeEvent<HTMLTextAreaElement>,\n value: string | number,\n ) => setDraftMessage(value as any);\n\n const onAttachRejected = (data: FileRejection[]) => {\n data.forEach(attachment => {\n const hasInvalidTypeError = attachment.errors.some(\n (e: { code: string }) => e.code === 'file-invalid-type',\n );\n if (hasInvalidTypeError) {\n setShowAlert(true);\n setUploadError({\n message: t('file.upload.error.unsupportedType'),\n });\n }\n });\n };\n\n const chatMainContent = (\n <>\n <ChatbotContent\n className={`${classes.chatbotContent} ${\n hasChatContentOverflow ? classes.chatbotContentHasOverflow : ''\n }`}\n >\n <div\n ref={contentScrollRef}\n className={`${classes.chatbotContentScroll}${\n welcomePrompts.length > 0\n ? ` ${classes.chatbotContentScrollNewChat}`\n : ''\n }`}\n >\n {welcomePrompts.length > 0 && (\n <div className={classes.chatbotContentSpacer} aria-hidden />\n )}\n <LightspeedChatBox\n userName={userName}\n messages={messages}\n profileLoading={profileLoading}\n announcement={announcement}\n ref={scrollToBottomRef}\n welcomePrompts={welcomePrompts}\n conversationId={conversationId}\n isStreaming={streamingUiMatchesView}\n topicRestrictionEnabled={topicRestrictionEnabled}\n displayMode={displayMode}\n />\n {welcomePrompts.length > 0 && (\n <div\n ref={bottomSentinelRef}\n aria-hidden\n style={{ height: 0, flexShrink: 0 }}\n />\n )}\n </div>\n </ChatbotContent>\n <ChatbotFooter\n className={`${classes.footer} ${classes.fullscreenFooter}`}\n >\n <FilePreview />\n <MessageBar\n key={messageBarKey}\n className={classes.messageBar}\n onSendMessage={sendMessage}\n isSendButtonDisabled={isSendButtonDisabled}\n hasAttachButton\n attachButtonPosition=\"start\"\n handleAttach={handleAttach}\n hasMicrophoneButton\n value={draftMessage}\n onChange={handleDraftMessage}\n hasStopButton={streamingUiMatchesView}\n handleStopButton={\n streamingUiMatchesView ? handleStopButton : undefined\n }\n buttonProps={{\n attach: {\n inputTestId: 'attachment-input',\n tooltipContent: t('tooltip.attach'),\n 'aria-label': t('tooltip.attach'),\n icon: <PlusIcon />,\n },\n microphone: {\n tooltipContent: {\n active: t('tooltip.microphone.active'),\n inactive: t('tooltip.microphone.inactive'),\n },\n },\n send: {\n tooltipContent: t('tooltip.send'),\n },\n }}\n additionalActions={\n <MessageBarModelSelector\n selectedModel={selectedModel}\n models={models}\n onSelect={item => {\n setIsMcpSettingsOpen(false);\n onNewChat();\n handleSelectedModel(item);\n }}\n disabled={isSendButtonDisabled}\n />\n }\n forceMultilineLayout\n allowedFileTypes={supportedFileTypes}\n onAttachRejected={onAttachRejected}\n placeholder={t('chatbox.message.placeholder')}\n />\n <ChatbotFootnote {...getFootnoteProps(t)} />\n </ChatbotFooter>\n </>\n );\n\n const mcpSettingsPanel = (\n <McpServersSettings\n onClose={() => setIsMcpSettingsOpen(false)}\n backgroundColor={chatHeaderBgColor}\n />\n );\n\n const mainPanelContent = (() => {\n if (!isMcpSettingsOpen) {\n return <>{chatMainContent}</>;\n }\n\n if (isFullscreenMode) {\n return (\n <div className={classes.mcpFullscreenLayout}>\n <div className={classes.mcpChatPane}>{chatMainContent}</div>\n <div className={classes.mcpSettingsPane}>{mcpSettingsPanel}</div>\n </div>\n );\n }\n\n return (\n <Settings\n className={classes.settingsFlat}\n fields={[\n {\n id: 'mcp-servers-settings',\n label: '',\n field: mcpSettingsPanel,\n },\n ]}\n />\n );\n })();\n\n let drawerPanelStyle: { [key: string]: string | number } | undefined;\n if (!isFullscreenMode) {\n drawerPanelStyle = { zIndex: 1300 };\n } else if (isMcpSettingsOpen) {\n drawerPanelStyle = { width: 320, minWidth: 320, maxWidth: 320 };\n } else {\n drawerPanelStyle = { minWidth: 232, maxWidth: 400 };\n }\n\n return (\n <>\n {notebookAlerts.length > 0 && (\n <AlertGroup\n hasAnimations\n isToast\n isLiveRegion\n className={classes.toastAlertGroup}\n >\n {notebookAlerts.map(({ key, title, variant }) => (\n <Alert\n key={key}\n variant={AlertVariant[variant ?? 'success']}\n title={title}\n className={classes.toastAlert}\n timeout={2000}\n onTimeout={() => handleRemoveNotebookAlert(key as React.Key)}\n actionClose={\n <AlertActionCloseButton\n title={title as string}\n variantLabel={`${variant ?? 'success'} alert`}\n onClose={() => handleRemoveNotebookAlert(key as React.Key)}\n />\n }\n />\n ))}\n </AlertGroup>\n )}\n {isDeleteModalOpen && (\n <DeleteModal\n isOpen={isDeleteModalOpen}\n conversationId={targetConversationId}\n onClose={() => setIsDeleteModalOpen(false)}\n onConfirm={handleDeleteConversation}\n />\n )}\n {isRenameModalOpen && (\n <RenameConversationModal\n isOpen={isRenameModalOpen}\n onClose={() => setIsRenameModalOpen(false)}\n conversationId={targetConversationId}\n />\n )}\n {renameNotebookId && (\n <RenameNotebookModal\n isOpen={Boolean(renameNotebookId)}\n onClose={() => setRenameNotebookId(null)}\n sessionId={renameNotebookId}\n currentName={\n notebooks.find(n => n.session_id === renameNotebookId)?.name ?? ''\n }\n />\n )}\n {deleteNotebookId && (\n <DeleteNotebookModal\n isOpen={Boolean(deleteNotebookId)}\n onClose={() => setDeleteNotebookId(null)}\n onDeleted={handleNotebookDeleted}\n sessionId={deleteNotebookId}\n name={\n notebooks.find(n => n.session_id === deleteNotebookId)?.name ?? ''\n }\n />\n )}\n <Chatbot\n displayMode={ChatbotDisplayMode.embedded}\n className={`${classes.body} ${\n isMcpSettingsOpen && !isChatHistoryDrawerOpen\n ? classes.mcpCollapsedDrawerOrderFix\n : ''\n }`}\n >\n <ChatbotHeader className={classes.header}>\n <ChatbotHeaderMain>\n {showChatPanel && !isFullscreenMode && (\n <ChatbotHeaderMenu\n aria-expanded={isChatHistoryDrawerOpen}\n onMenuToggle={onChatHistoryDrawerToggle}\n className={classes.headerMenu}\n tooltipContent={t('tooltip.chatHistoryMenu')}\n aria-label={t('aria.chatHistoryMenu')}\n />\n )}\n {isFullscreenMode && (\n <>\n <img\n src={logo as any}\n alt={t('icon.lightspeed.alt')}\n className={classes.headerLogo}\n />\n <ChatbotHeaderTitle className={classes.headerTitle}>\n <Title headingLevel=\"h1\" size=\"3xl\">\n {t('chatbox.header.title')}\n </Title>\n </ChatbotHeaderTitle>\n </>\n )}\n </ChatbotHeaderMain>\n\n <LightspeedChatBoxHeader\n selectedModel={selectedModel}\n handleSelectedModel={item => {\n setIsMcpSettingsOpen(false);\n onNewChat();\n handleSelectedModel(item);\n }}\n models={models}\n isPinningChatsEnabled={isPinningChatsEnabled}\n isModelSelectorDisabled={isSendButtonDisabled}\n hideModelSelector\n showChatTabOptions={!showNotebooksPanel}\n setDisplayMode={setDisplayModeFromHeader}\n displayMode={displayMode}\n onPinnedChatsToggle={handlePinningChatsToggle}\n onMcpSettingsClick={() => setIsMcpSettingsOpen(true)}\n />\n </ChatbotHeader>\n {isFullscreenMode && <div className={classes.headerDivider} />}\n {isFullscreenMode && shouldShowTabs && (\n <Tabs\n value={activeTab}\n onChange={handleNotebookTabSelect}\n aria-label={t('tabs.ariaLabel')}\n variant=\"standard\"\n textColor=\"primary\"\n sx={theme => ({\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n borderBottom:\n '1px solid var(--pf-t--global--border--color--default)',\n minHeight: theme.spacing(6),\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n '& .MuiTabs-flexContainer': {\n gap: theme.spacing(2),\n },\n '& [role=\"tab\"]': {\n fontWeight: 700,\n textTransform: 'none',\n opacity: 1,\n padding: `${theme.spacing(1)} ${theme.spacing(2)}`,\n borderRadius: theme.spacing(0.5),\n '&:not([aria-selected=\"true\"])': {\n color: `${theme.palette.text.primary} !important`,\n },\n '&:hover': {\n background: 'none !important',\n backgroundColor: 'transparent !important',\n backgroundImage: 'none !important',\n },\n '&:not([aria-selected=\"true\"]):hover': {\n color: 'var(--pf-t--global--text--color--brand--default)',\n },\n '&[aria-selected=\"true\"]:hover': {\n color: `${theme.palette.primary.main} !important`,\n },\n },\n '& [class*=\"Tabs-indicator\"]': {\n height: 3,\n },\n })}\n >\n <Tab\n disableRipple\n label={t('tabs.chat')}\n aria-label={t('tabs.chat')}\n />\n <Tab\n disableRipple\n label={\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 8,\n }}\n >\n {t('tabs.notebooks')}\n <Label\n color=\"purple\"\n style={{\n alignSelf: 'center',\n margin: 0,\n lineHeight: 1,\n }}\n >\n {t('tabs.notebooks.devPreview')}\n </Label>\n </span>\n }\n aria-label={t('tabs.notebooks')}\n />\n </Tabs>\n )}\n {showChatPanel && (\n <ConditionalWrapper\n condition={isFullscreenMode}\n wrapper={children => (\n <div className={classes.fullscreenChatLayout}>\n {!isChatHistoryDrawerOpen && (\n <CollapsedHistoryStrip\n onExpand={() => setIsChatHistoryDrawerOpen(true)}\n onNewChat={onNewChat}\n newChatDisabled={newChatCreated}\n />\n )}\n {children}\n </div>\n )}\n >\n <ChatbotConversationHistoryNav\n drawerPanelContentProps={{\n isResizable: isFullscreenMode,\n hasNoBorder: !isFullscreenMode,\n style: drawerPanelStyle,\n }}\n reverseButtonOrder\n displayMode={ChatbotDisplayMode.embedded}\n onDrawerToggle={onChatHistoryDrawerToggle}\n title=\"\"\n navTitleIcon={null}\n isDrawerOpen={isChatHistoryDrawerOpen}\n drawerCloseButtonProps={{\n 'aria-label': t('aria.closeDrawerPanel'),\n }}\n setIsDrawerOpen={setIsChatHistoryDrawerOpen}\n activeItemId={viewConversationId}\n onSelectActiveItem={onSelectActiveItem}\n conversations={filterConversations(filterValue)}\n onNewChat={newChatCreated ? undefined : onNewChat}\n newChatButtonText={t('button.newChat')}\n newChatButtonProps={{\n icon: isFullscreenMode ? <PencilIcon /> : <PlusIcon />,\n }}\n handleTextInputChange={handleFilter}\n searchInputPlaceholder={t('chatbox.search.placeholder')}\n searchInputAriaLabel={t('aria.search.placeholder')}\n searchInputProps={{\n value: filterValue,\n onClear: () => {\n setFilterValue('');\n },\n }}\n searchActionEnd={sortDropdown}\n noResultsState={\n filterValue &&\n Object.keys(filterConversations(filterValue)).length === 0\n ? {\n bodyText: t('chatbox.emptyState.noResults.body'),\n titleText: t('chatbox.emptyState.noResults.title'),\n icon: SearchIcon,\n }\n : undefined\n }\n drawerContent={\n <FileDropZone\n className={classes.drawerFileDropZone}\n onFileDrop={(e, data) => handleAttach(data, e)}\n displayMode={ChatbotDisplayMode.embedded}\n infoText={t('chatbox.fileUpload.infoText')}\n allowedFileTypes={supportedFileTypes}\n onAttachRejected={onAttachRejected}\n >\n {showAlert && uploadError.message && (\n <div className={classes.errorContainer}>\n <ChatbotAlert\n component=\"h4\"\n title={t('chatbox.fileUpload.failed')}\n variant={uploadError.type ?? 'danger'}\n isInline\n onClose={() => setUploadError({ message: null })}\n >\n {uploadError.message}\n </ChatbotAlert>\n </div>\n )}\n {mainPanelContent}\n </FileDropZone>\n }\n />\n </ConditionalWrapper>\n )}\n {showNotebooksPanel &&\n !notebooksPermissionLoading &&\n hasNotebooksAccess &&\n activeNotebook && (\n <NotebookView\n sessionId={activeNotebook.session_id}\n notebookName={activeNotebook.name}\n documents={notebookDocuments}\n metadata={activeNotebook.metadata}\n topicSummary={\n conversations.find(\n c =>\n c.conversation_id ===\n activeNotebook.metadata?.conversation_id,\n )?.topic_summary ?? undefined\n }\n userName={userName}\n avatar={avatar}\n profileLoading={profileLoading}\n topicRestrictionEnabled={topicRestrictionEnabled}\n onClose={handleCloseNotebook}\n />\n )}\n {showNotebooksPanel &&\n !notebooksPermissionLoading &&\n hasNotebooksAccess &&\n !activeNotebook && (\n <NotebooksTab\n notebooks={notebooks}\n hasNotebooks={hasNotebooks}\n classes={classes}\n openNotebookMenuId={openNotebookMenuId}\n setOpenNotebookMenuId={setOpenNotebookMenuId}\n onSelectNotebook={(notebook: NotebookSession) => {\n navigate(`/lightspeed/notebooks/${notebook.session_id}`);\n }}\n onRename={setRenameNotebookId}\n onDelete={setDeleteNotebookId}\n onCreateNotebook={handleCreateNotebook}\n t={t}\n />\n )}\n {showNotebooksPanel &&\n !notebooksPermissionLoading &&\n !hasNotebooksAccess && (\n <PermissionRequiredState\n subject={t('permission.subject.notebooks')}\n permissions={['lightspeed.notebooks.use']}\n action={\n <Button\n variant=\"outlined\"\n color=\"primary\"\n style={{ borderRadius: '20px' }}\n onClick={() => {\n setActiveTab(0);\n setShellViewTab(0);\n }}\n >\n {t('permission.notebooks.goBack')}\n </Button>\n }\n />\n )}\n </Chatbot>\n <Attachment />\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { StylesProvider, makeStyles } from '@mui/styles';
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { makeStyles } from '@mui/styles';
|
|
4
3
|
import { ChatbotModal } from '@patternfly/chatbot';
|
|
5
4
|
import { DOCKED_CONTENT_OFFSET } from '../const.esm.js';
|
|
6
5
|
import { useLightspeedProviderState } from '../hooks/useLightspeedProviderState.esm.js';
|
|
7
|
-
import { generateClassName, generateClassNameV4 } from '../utils/generateClassName.esm.js';
|
|
8
6
|
import { LightspeedChatContainer } from './LightspeedChatContainer.esm.js';
|
|
9
7
|
import { LightspeedDrawerContext } from './LightspeedDrawerContext.esm.js';
|
|
10
8
|
|
|
@@ -21,7 +19,7 @@ const useStyles = makeStyles((theme) => ({
|
|
|
21
19
|
}
|
|
22
20
|
}
|
|
23
21
|
}));
|
|
24
|
-
const
|
|
22
|
+
const LightspeedDrawerProvider = ({ children }) => {
|
|
25
23
|
const classes = useStyles();
|
|
26
24
|
const { contextValue, shouldRenderOverlayModal, closeChatbot } = useLightspeedProviderState();
|
|
27
25
|
return /* @__PURE__ */ jsxs(LightspeedDrawerContext.Provider, { value: contextValue, children: [
|
|
@@ -41,7 +39,6 @@ const LightspeedDrawerProviderInner = ({ children }) => {
|
|
|
41
39
|
)
|
|
42
40
|
] });
|
|
43
41
|
};
|
|
44
|
-
const LightspeedDrawerProvider = ({ children }) => /* @__PURE__ */ jsx(StylesProvider, { generateClassName, children: /* @__PURE__ */ jsx(StylesProvider$1, { generateClassName: generateClassNameV4, children: /* @__PURE__ */ jsx(LightspeedDrawerProviderInner, { children }) }) });
|
|
45
42
|
|
|
46
43
|
export { LightspeedDrawerProvider };
|
|
47
44
|
//# sourceMappingURL=LightspeedDrawerProvider.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LightspeedDrawerProvider.esm.js","sources":["../../src/components/LightspeedDrawerProvider.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 { PropsWithChildren } from 'react';\n\nimport {
|
|
1
|
+
{"version":3,"file":"LightspeedDrawerProvider.esm.js","sources":["../../src/components/LightspeedDrawerProvider.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 { PropsWithChildren } from 'react';\n\nimport { makeStyles } from '@mui/styles';\nimport { ChatbotModal } from '@patternfly/chatbot';\n\nimport { DOCKED_CONTENT_OFFSET } from '../const';\nimport { useLightspeedProviderState } from '../hooks/useLightspeedProviderState';\nimport { LightspeedChatContainer } from './LightspeedChatContainer';\nimport { LightspeedDrawerContext } from './LightspeedDrawerContext';\n\nconst useStyles = makeStyles(theme => ({\n chatbotModal: {\n boxShadow:\n '0 14px 20px -7px rgba(0, 0, 0, 0.22), 0 32px 50px 6px rgba(0, 0, 0, 0.16), 0 12px 60px 12px rgba(0, 0, 0, 0.14) !important',\n bottom: `calc(${theme?.spacing?.(2) ?? '16px'} + 5em)`,\n right: `calc(${theme?.spacing?.(2) ?? '16px'} + 1.5em)`,\n maxWidth: 'min(30rem, calc(100vw - 32px)) !important',\n overflowX: 'hidden' as const,\n transition: 'margin-right 0.3s ease',\n 'body.docked-drawer-open &': {\n marginRight: DOCKED_CONTENT_OFFSET,\n },\n },\n}));\n\n/**\n * @public\n */\nexport const LightspeedDrawerProvider = ({ children }: PropsWithChildren) => {\n const classes = useStyles();\n const { contextValue, shouldRenderOverlayModal, closeChatbot } =\n useLightspeedProviderState();\n\n return (\n <LightspeedDrawerContext.Provider value={contextValue}>\n {children}\n {shouldRenderOverlayModal && (\n <ChatbotModal\n isOpen\n displayMode={contextValue.displayMode}\n disableFocusTrap\n onEscapePress={() => closeChatbot()}\n ouiaId=\"LightspeedChatbotModal\"\n aria-labelledby=\"lightspeed-chatpopup-modal\"\n className={classes.chatbotModal}\n >\n <LightspeedChatContainer />\n </ChatbotModal>\n )}\n </LightspeedDrawerContext.Provider>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AA0BA,MAAM,SAAA,GAAY,WAAW,CAAA,KAAA,MAAU;AAAA,EACrC,YAAA,EAAc;AAAA,IACZ,SAAA,EACE,4HAAA;AAAA,IACF,QAAQ,CAAA,KAAA,EAAQ,KAAA,EAAO,OAAA,GAAU,CAAC,KAAK,MAAM,CAAA,OAAA,CAAA;AAAA,IAC7C,OAAO,CAAA,KAAA,EAAQ,KAAA,EAAO,OAAA,GAAU,CAAC,KAAK,MAAM,CAAA,SAAA,CAAA;AAAA,IAC5C,QAAA,EAAU,2CAAA;AAAA,IACV,SAAA,EAAW,QAAA;AAAA,IACX,UAAA,EAAY,wBAAA;AAAA,IACZ,2BAAA,EAA6B;AAAA,MAC3B,WAAA,EAAa;AAAA;AACf;AAEJ,CAAA,CAAE,CAAA;AAKK,MAAM,wBAAA,GAA2B,CAAC,EAAE,QAAA,EAAS,KAAyB;AAC3E,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,EAAE,YAAA,EAAc,wBAAA,EAA0B,YAAA,KAC9C,0BAAA,EAA2B;AAE7B,EAAA,uBACE,IAAA,CAAC,uBAAA,CAAwB,QAAA,EAAxB,EAAiC,OAAO,YAAA,EACtC,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,wBAAA,oBACC,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAM,IAAA;AAAA,QACN,aAAa,YAAA,CAAa,WAAA;AAAA,QAC1B,gBAAA,EAAgB,IAAA;AAAA,QAChB,aAAA,EAAe,MAAM,YAAA,EAAa;AAAA,QAClC,MAAA,EAAO,wBAAA;AAAA,QACP,iBAAA,EAAgB,4BAAA;AAAA,QAChB,WAAW,OAAA,CAAQ,YAAA;AAAA,QAEnB,8BAAC,uBAAA,EAAA,EAAwB;AAAA;AAAA;AAC3B,GAAA,EAEJ,CAAA;AAEJ;;;;"}
|
|
@@ -1,48 +1,35 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { StylesProvider as StylesProvider$1 } from '@material-ui/core/styles';
|
|
3
2
|
import CloseIcon from '@mui/icons-material/Close';
|
|
3
|
+
import Box from '@mui/material/Box';
|
|
4
4
|
import Fab from '@mui/material/Fab';
|
|
5
5
|
import Tooltip from '@mui/material/Tooltip';
|
|
6
|
-
import { StylesProvider, makeStyles } from '@mui/styles';
|
|
7
6
|
import { ChatbotDisplayMode } from '@patternfly/chatbot';
|
|
8
7
|
import { DOCKED_CONTENT_OFFSET } from '../const.esm.js';
|
|
9
8
|
import { useLightspeedDrawerContext } from '../hooks/useLightspeedDrawerContext.esm.js';
|
|
10
9
|
import { useTranslation } from '../hooks/useTranslation.esm.js';
|
|
11
|
-
import { generateClassName, generateClassNameV4 } from '../utils/generateClassName.esm.js';
|
|
12
10
|
import { LightspeedFABIcon } from './LightspeedIcon.esm.js';
|
|
13
11
|
|
|
14
|
-
const
|
|
15
|
-
fab: {
|
|
16
|
-
opacity: "1 !important",
|
|
17
|
-
backgroundColor: `${theme?.palette?.primary?.main ?? "#1976d2"} !important`,
|
|
18
|
-
color: `${theme?.palette?.primary?.contrastText ?? "#fff"} !important`,
|
|
19
|
-
boxShadow: `${theme?.shadows?.[6] ?? "0px 3px 5px -1px rgba(0,0,0,0.2), 0px 6px 10px 0px rgba(0,0,0,0.14), 0px 1px 18px 0px rgba(0,0,0,0.12)"} !important`
|
|
20
|
-
},
|
|
21
|
-
"fab-button": {
|
|
22
|
-
bottom: `calc(${theme?.spacing?.(2) ?? "16px"} + 1.5em)`,
|
|
23
|
-
right: `calc(${theme?.spacing?.(2) ?? "16px"} + 1.5em)`,
|
|
24
|
-
alignItems: "end",
|
|
25
|
-
zIndex: 200,
|
|
26
|
-
display: "flex",
|
|
27
|
-
position: "fixed",
|
|
28
|
-
// When ApplicationDrawer is docked, match main content inset
|
|
29
|
-
"body.docked-drawer-open &": {
|
|
30
|
-
transition: "margin-right 0.3s ease",
|
|
31
|
-
marginRight: DOCKED_CONTENT_OFFSET
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}));
|
|
35
|
-
const LightspeedFABInner = () => {
|
|
12
|
+
const LightspeedFAB = () => {
|
|
36
13
|
const { t } = useTranslation();
|
|
37
14
|
const { isChatbotActive, toggleChatbot, displayMode } = useLightspeedDrawerContext();
|
|
38
|
-
const fabButton = useStyles();
|
|
39
15
|
if (displayMode === ChatbotDisplayMode.embedded) {
|
|
40
16
|
return null;
|
|
41
17
|
}
|
|
42
18
|
return /* @__PURE__ */ jsx(
|
|
43
|
-
|
|
19
|
+
Box,
|
|
44
20
|
{
|
|
45
|
-
|
|
21
|
+
sx: (theme) => ({
|
|
22
|
+
bottom: `calc(${theme.spacing(2)} + 1.5em)`,
|
|
23
|
+
right: `calc(${theme.spacing(2)} + 1.5em)`,
|
|
24
|
+
alignItems: "end",
|
|
25
|
+
zIndex: 200,
|
|
26
|
+
display: "flex",
|
|
27
|
+
position: "fixed",
|
|
28
|
+
"body.docked-drawer-open &": {
|
|
29
|
+
transition: "margin-right 0.3s ease",
|
|
30
|
+
marginRight: DOCKED_CONTENT_OFFSET
|
|
31
|
+
}
|
|
32
|
+
}),
|
|
46
33
|
id: "lightspeed-fab",
|
|
47
34
|
"data-testid": "lightspeed-fab",
|
|
48
35
|
children: /* @__PURE__ */ jsx(
|
|
@@ -58,8 +45,13 @@ const LightspeedFABInner = () => {
|
|
|
58
45
|
size: "small",
|
|
59
46
|
onClick: toggleChatbot,
|
|
60
47
|
"aria-label": isChatbotActive ? t("tooltip.fab.close") : t("tooltip.fab.open"),
|
|
61
|
-
|
|
62
|
-
|
|
48
|
+
sx: (theme) => ({
|
|
49
|
+
borderRadius: "100% !important",
|
|
50
|
+
opacity: "1 !important",
|
|
51
|
+
backgroundColor: `${theme.palette?.primary?.main ?? "#1976d2"} !important`,
|
|
52
|
+
color: `${theme.palette?.primary?.contrastText ?? "#fff"} !important`,
|
|
53
|
+
boxShadow: `${theme.shadows?.[6] ?? "0px 3px 5px -1px rgba(0,0,0,0.2), 0px 6px 10px 0px rgba(0,0,0,0.14), 0px 1px 18px 0px rgba(0,0,0,0.12)"} !important`
|
|
54
|
+
}),
|
|
63
55
|
children: isChatbotActive ? /* @__PURE__ */ jsx(CloseIcon, { fontSize: "small" }) : /* @__PURE__ */ jsx(LightspeedFABIcon, {})
|
|
64
56
|
}
|
|
65
57
|
)
|
|
@@ -68,7 +60,6 @@ const LightspeedFABInner = () => {
|
|
|
68
60
|
}
|
|
69
61
|
);
|
|
70
62
|
};
|
|
71
|
-
const LightspeedFAB = () => /* @__PURE__ */ jsx(StylesProvider, { generateClassName, children: /* @__PURE__ */ jsx(StylesProvider$1, { generateClassName: generateClassNameV4, children: /* @__PURE__ */ jsx(LightspeedFABInner, {}) }) });
|
|
72
63
|
|
|
73
64
|
export { LightspeedFAB };
|
|
74
65
|
//# sourceMappingURL=LightspeedFAB.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LightspeedFAB.esm.js","sources":["../../src/components/LightspeedFAB.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
|
|
1
|
+
{"version":3,"file":"LightspeedFAB.esm.js","sources":["../../src/components/LightspeedFAB.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 Close from '@mui/icons-material/Close';\nimport Box from '@mui/material/Box';\nimport Fab from '@mui/material/Fab';\nimport Tooltip from '@mui/material/Tooltip';\nimport { ChatbotDisplayMode } from '@patternfly/chatbot';\n\nimport { DOCKED_CONTENT_OFFSET } from '../const';\nimport { useLightspeedDrawerContext } from '../hooks/useLightspeedDrawerContext';\nimport { useTranslation } from '../hooks/useTranslation';\nimport { LightspeedFABIcon } from './LightspeedIcon';\n\n/**\n * @public\n * Lightspeed Floating action button to open/close the lightspeed chatbot\n */\nexport const LightspeedFAB = () => {\n const { t } = useTranslation();\n const { isChatbotActive, toggleChatbot, displayMode } =\n useLightspeedDrawerContext();\n\n if (displayMode === ChatbotDisplayMode.embedded) {\n return null;\n }\n\n return (\n <Box\n sx={theme => ({\n bottom: `calc(${theme.spacing(2)} + 1.5em)`,\n right: `calc(${theme.spacing(2)} + 1.5em)`,\n alignItems: 'end',\n zIndex: 200,\n display: 'flex',\n position: 'fixed',\n 'body.docked-drawer-open &': {\n transition: 'margin-right 0.3s ease',\n marginRight: DOCKED_CONTENT_OFFSET,\n },\n })}\n id=\"lightspeed-fab\"\n data-testid=\"lightspeed-fab\"\n >\n <Tooltip\n title={isChatbotActive ? t('tooltip.fab.close') : t('tooltip.fab.open')}\n placement=\"left\"\n >\n <Fab\n color=\"primary\"\n variant=\"circular\"\n size=\"small\"\n onClick={toggleChatbot}\n aria-label={\n isChatbotActive ? t('tooltip.fab.close') : t('tooltip.fab.open')\n }\n sx={theme => ({\n borderRadius: '100% !important',\n opacity: '1 !important',\n backgroundColor: `${theme.palette?.primary?.main ?? '#1976d2'} !important`,\n color: `${theme.palette?.primary?.contrastText ?? '#fff'} !important`,\n boxShadow: `${\n theme.shadows?.[6] ??\n '0px 3px 5px -1px rgba(0,0,0,0.2), 0px 6px 10px 0px rgba(0,0,0,0.14), 0px 1px 18px 0px rgba(0,0,0,0.12)'\n } !important`,\n })}\n >\n {isChatbotActive ? <Close fontSize=\"small\" /> : <LightspeedFABIcon />}\n </Fab>\n </Tooltip>\n </Box>\n );\n};\n"],"names":["Close"],"mappings":";;;;;;;;;;;AA+BO,MAAM,gBAAgB,MAAM;AACjC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,MAAM,EAAE,eAAA,EAAiB,aAAA,EAAe,WAAA,KACtC,0BAAA,EAA2B;AAE7B,EAAA,IAAI,WAAA,KAAgB,mBAAmB,QAAA,EAAU;AAC/C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,IAAI,CAAA,KAAA,MAAU;AAAA,QACZ,MAAA,EAAQ,CAAA,KAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,SAAA,CAAA;AAAA,QAChC,KAAA,EAAO,CAAA,KAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,SAAA,CAAA;AAAA,QAC/B,UAAA,EAAY,KAAA;AAAA,QACZ,MAAA,EAAQ,GAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,QAAA,EAAU,OAAA;AAAA,QACV,2BAAA,EAA6B;AAAA,UAC3B,UAAA,EAAY,wBAAA;AAAA,UACZ,WAAA,EAAa;AAAA;AACf,OACF,CAAA;AAAA,MACA,EAAA,EAAG,gBAAA;AAAA,MACH,aAAA,EAAY,gBAAA;AAAA,MAEZ,QAAA,kBAAA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,OAAO,eAAA,GAAkB,CAAA,CAAE,mBAAmB,CAAA,GAAI,EAAE,kBAAkB,CAAA;AAAA,UACtE,SAAA,EAAU,MAAA;AAAA,UAEV,QAAA,kBAAA,GAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,SAAA;AAAA,cACN,OAAA,EAAQ,UAAA;AAAA,cACR,IAAA,EAAK,OAAA;AAAA,cACL,OAAA,EAAS,aAAA;AAAA,cACT,cACE,eAAA,GAAkB,CAAA,CAAE,mBAAmB,CAAA,GAAI,EAAE,kBAAkB,CAAA;AAAA,cAEjE,IAAI,CAAA,KAAA,MAAU;AAAA,gBACZ,YAAA,EAAc,iBAAA;AAAA,gBACd,OAAA,EAAS,cAAA;AAAA,gBACT,iBAAiB,CAAA,EAAG,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,QAAQ,SAAS,CAAA,WAAA,CAAA;AAAA,gBAC7D,OAAO,CAAA,EAAG,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,gBAAgB,MAAM,CAAA,WAAA,CAAA;AAAA,gBACxD,WAAW,CAAA,EACT,KAAA,CAAM,OAAA,GAAU,CAAC,KACjB,wGACF,CAAA,WAAA;AAAA,eACF,CAAA;AAAA,cAEC,4CAAkB,GAAA,CAACA,SAAA,EAAA,EAAM,UAAS,OAAA,EAAQ,CAAA,uBAAM,iBAAA,EAAA,EAAkB;AAAA;AAAA;AACrE;AAAA;AACF;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -121,7 +121,8 @@ const useStyles = makeStyles((theme) => ({
|
|
|
121
121
|
toastAlertGroup: {
|
|
122
122
|
"--pf-v6-c-alert-group--m-toast--InsetInlineEnd": `${theme.spacing(2.5)}px`,
|
|
123
123
|
"--pf-v6-c-alert-group--m-toast--InsetBlockStart": `${theme.spacing(2.5)}px`,
|
|
124
|
-
"--pf-v6-c-alert-group--m-toast--MaxWidth": "350px"
|
|
124
|
+
"--pf-v6-c-alert-group--m-toast--MaxWidth": "350px",
|
|
125
|
+
"--pf-v6-c-alert-group--m-toast--ZIndex": "9999"
|
|
125
126
|
},
|
|
126
127
|
toastAlert: {
|
|
127
128
|
maxWidth: "350px",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotebookView.esm.js","sources":["../../../src/components/notebooks/NotebookView.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\n\nimport { makeStyles, Typography } from '@material-ui/core';\nimport {\n ChatbotContent,\n ChatbotFooter,\n ChatbotFootnote,\n MessageBar,\n MessageProps,\n} from '@patternfly/chatbot';\nimport {\n Alert,\n AlertActionCloseButton,\n AlertGroup,\n AlertVariant,\n Button,\n Drawer,\n DrawerContent,\n DrawerContentBody,\n DrawerPanelContent,\n Tooltip,\n type AlertProps,\n} from '@patternfly/react-core';\nimport { TimesIcon } from '@patternfly/react-icons';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\nimport {\n NOTEBOOK_MAX_FILES,\n TEMP_CONVERSATION_ID,\n UNTITLED_NOTEBOOK_NAME,\n} from '../../const';\nimport { useCreateNotebookMessage } from '../../hooks/notebooks/useCreateNotebookMessage';\nimport {\n useDocumentStatusPolling,\n type PendingUpload,\n} from '../../hooks/notebooks/useDocumentStatusPolling';\nimport { useConversationMessages } from '../../hooks/useConversationMessages';\nimport { CreateMessageVariables } from '../../hooks/useCreateCoversationMessage';\nimport { useNotebookWelcomePrompts } from '../../hooks/useNotebookWelcomePrompts';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { NotebookSessionMetadata, SessionDocument } from '../../types';\nimport { LightspeedChatBox } from '../LightspeedChatBox';\nimport { AddDocumentModal } from './AddDocumentModal';\nimport { DeleteDocumentModal } from './DeleteDocumentModal';\nimport { DocumentSidebar } from './DocumentSidebar';\nimport { OverwriteConfirmModal } from './OverwriteConfirmModal';\nimport { AddCircleFilledIcon, SidebarExpandIcon } from './SidebarCollapseIcon';\nimport { UploadResourceScreen } from './UploadResourceScreen';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n height: '100%',\n backgroundColor: 'var(--pf-t--global--background--color--primary--default)',\n },\n drawerContainer: {\n flex: 1,\n minHeight: 0,\n '& .pf-v6-c-drawer__panel, & .pf-v5-c-drawer__panel': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default) !important',\n },\n '& .pf-v6-c-drawer__panel-main, & .pf-v5-c-drawer__panel-main': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default) !important',\n },\n '& .pf-v6-c-drawer__panel-body, & .pf-v5-c-drawer__panel-body': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default) !important',\n },\n '& .pf-v6-c-drawer__splitter, & .pf-v5-c-drawer__splitter': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n },\n expandStrip: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: theme.spacing(1.5),\n gap: theme.spacing(1),\n borderRight: '1px solid var(--pf-t--global--border--color--default)',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n addIconButton: {\n padding: 0,\n minWidth: 0,\n lineHeight: 1,\n },\n mainArea: {\n display: 'flex',\n flexDirection: 'row',\n height: '100%',\n minWidth: 0,\n },\n topBar: {\n display: 'flex',\n justifyContent: 'flex-end',\n padding: `${theme.spacing(1.5)}px ${theme.spacing(2)}px`,\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n closeButton: {\n textTransform: 'none',\n },\n mainContent: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n },\n drawerContentBody: {\n backgroundColor: 'var(--pf-t--global--background--color--primary--default)',\n height: '100%',\n },\n contentColumn: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minWidth: 0,\n minHeight: 0,\n overflow: 'hidden',\n },\n notebookDisclaimerStrip: {\n width: '100%',\n maxWidth: 'unset',\n margin: 0,\n padding: `0 0 ${theme.spacing(1)}px`,\n boxSizing: 'border-box',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n '& .pf-v6-c-alert, & .pf-v5-c-alert': {\n backgroundColor:\n 'var(--pf-t--global--background--color--secondary--default) !important',\n },\n '& .pf-v6-c-alert__content, & .pf-v5-c-alert__content': {\n backgroundColor: 'transparent !important',\n },\n '& .pf-v6-c-alert__body, & .pf-v5-c-alert__body': {\n backgroundColor: 'transparent !important',\n },\n '& .pf-v6-c-alert__description, & .pf-v5-c-alert__description': {\n backgroundColor: 'transparent !important',\n },\n },\n notebookDisclaimerInner: {\n width: '95%',\n maxWidth: 'unset',\n margin: '0 auto',\n },\n toastAlertGroup: {\n '--pf-v6-c-alert-group--m-toast--InsetInlineEnd': `${theme.spacing(2.5)}px`,\n '--pf-v6-c-alert-group--m-toast--InsetBlockStart': `${theme.spacing(2.5)}px`,\n '--pf-v6-c-alert-group--m-toast--MaxWidth': '350px',\n },\n toastAlert: {\n maxWidth: '350px',\n '& .pf-v6-c-alert__title': {\n margin: 0,\n },\n },\n welcomeContainer: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n overflow: 'auto',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n notebookEmptyUpload: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0,\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n notebookContentArea: {\n width: '95%',\n maxWidth: 'unset',\n margin: `${theme.spacing(3)}px auto 0 auto`,\n padding: 0,\n },\n notebookHeading: {\n fontSize: '2rem',\n fontWeight: 500,\n lineHeight: 1.25,\n padding: `${theme.spacing(1)}px 0`,\n },\n notebookSummary: {\n fontSize: '1rem',\n lineHeight: 2,\n color: 'var(--pf-t--global--text--color--regular)',\n paddingTop: theme.spacing(0.5),\n },\n promptSuggestions: {\n display: 'flex',\n flexWrap: 'wrap' as const,\n gap: theme.spacing(1),\n width: '95%',\n maxWidth: 'unset',\n margin: `${theme.spacing(3)}px auto ${theme.spacing(3)}px auto`,\n justifyContent: 'flex-start',\n },\n promptPill: {\n appearance: 'none' as const,\n background: 'transparent',\n border: `1px solid var(--pf-t--global--border--color--default)`,\n borderRadius: '999px',\n padding: `${theme.spacing(1)}px ${theme.spacing(2.5)}px`,\n fontSize: '0.875rem',\n color: 'var(--pf-t--global--text--color--regular)',\n cursor: 'pointer',\n transition: 'background-color 0.15s, border-color 0.15s',\n '&:hover': {\n backgroundColor:\n 'var(--pf-t--global--background--color--secondary--default)',\n borderColor: 'var(--pf-t--global--border--color--hover)',\n },\n },\n footer: {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n '&>.pf-chatbot__footer-container': {\n width: '95% !important',\n maxWidth: 'unset !important',\n },\n '& .pf-chatbot__message-bar': {\n backgroundColor:\n theme.palette.type === 'light'\n ? theme.palette.grey[100]\n : 'var(--pf-t--global--background--color--secondary--default)',\n },\n },\n chatContent: {\n minHeight: 0,\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n overflow: 'auto',\n },\n}));\n\ntype NotebookViewProps = {\n sessionId: string;\n notebookName?: string;\n documents?: SessionDocument[];\n metadata?: NotebookSessionMetadata;\n topicSummary?: string;\n userName?: string;\n avatar?: string;\n profileLoading: boolean;\n topicRestrictionEnabled: boolean;\n onClose: () => void;\n};\n\nexport const NotebookView = ({\n sessionId,\n notebookName = UNTITLED_NOTEBOOK_NAME,\n documents = [],\n metadata,\n topicSummary,\n userName,\n avatar,\n profileLoading,\n topicRestrictionEnabled,\n onClose,\n}: NotebookViewProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const configApi = useApi(configApiRef);\n const notebooksApi = useApi(notebooksApiRef);\n const { mutateAsync: notebookCreateMessage } = useCreateNotebookMessage();\n\n // Use notebook-specific model from config instead of chat's selected model\n const notebookModel =\n configApi.getOptionalString('lightspeed.notebooks.queryDefaults.model') ||\n '';\n\n const [conversationId, setConversationId] = useState(\n metadata?.conversation_id ?? TEMP_CONVERSATION_ID,\n );\n const [isSendButtonDisabled, setIsSendButtonDisabled] = useState(false);\n const [announcement, setAnnouncement] = useState<string | undefined>(\n undefined,\n );\n const [deletingDocumentIds, setDeletingDocumentIds] = useState<Set<string>>(\n new Set(),\n );\n const [deleteDocumentTarget, setDeleteDocumentTarget] = useState<{\n id: string;\n name: string;\n } | null>(null);\n\n const handleDeleteDocument = useCallback((documentId: string) => {\n setDeleteDocumentTarget({ id: documentId, name: documentId });\n }, []);\n\n const onComplete = useCallback(\n (message: string) => {\n setIsSendButtonDisabled(false);\n setAnnouncement(`Message from Bot: ${message}`);\n queryClient.invalidateQueries({\n queryKey: ['conversationMessages', conversationId],\n });\n },\n [queryClient, conversationId],\n );\n\n const onStart = useCallback((conv_id: string) => {\n setConversationId(conv_id);\n }, []);\n\n const createMessageAdapter = useCallback(\n async (vars: CreateMessageVariables) => {\n return notebookCreateMessage({\n prompt: vars.prompt,\n sessionId,\n });\n },\n [notebookCreateMessage, sessionId],\n );\n\n const { conversationMessages, handleInputPrompt, scrollToBottomRef } =\n useConversationMessages(\n conversationId,\n userName,\n notebookModel,\n '',\n avatar,\n onComplete,\n onStart,\n createMessageAdapter,\n );\n\n const [messages, setMessages] =\n useState<MessageProps[]>(conversationMessages);\n\n useEffect(() => {\n setMessages(conversationMessages);\n }, [conversationMessages]);\n\n const sendMessage = useCallback(\n (message: string | number) => {\n setAnnouncement(\n t('conversation.announcement.userMessage' as any, {\n prompt: message.toString(),\n }),\n );\n handleInputPrompt(message.toString(), []);\n setIsSendButtonDisabled(true);\n },\n [handleInputPrompt, t],\n );\n\n const notebookPrompts = useNotebookWelcomePrompts();\n const welcomePrompts = notebookPrompts.map(title => ({\n title,\n onClick: () => sendMessage(title),\n }));\n\n const [sidebarCollapsed, setSidebarCollapsed] = useState(false);\n const [isUploadModalOpen, setIsUploadModalOpen] = useState(false);\n const [uploadingFileNames, setUploadingFileNames] = useState<string[]>([]);\n const [pendingUploads, setPendingUploads] = useState<PendingUpload[]>([]);\n const [toastAlerts, setToastAlerts] = useState<Partial<AlertProps>[]>([]);\n const processedIds = useRef<Set<string>>(new Set());\n const [completedFileNames, setCompletedFileNames] = useState<Set<string>>(\n new Set(),\n );\n const [filesToOverwrite, setFilesToOverwrite] = useState<File[]>([]);\n const [isOverwriteModalOpen, setIsOverwriteModalOpen] = useState(false);\n const [filesToAddToModal, setFilesToAddToModal] = useState<File[]>([]);\n\n const confirmDeleteDocument = useCallback(async () => {\n if (!deleteDocumentTarget) return;\n const { id: documentId, name: documentName } = deleteDocumentTarget;\n setDeleteDocumentTarget(null);\n setDeletingDocumentIds(prev => new Set(prev).add(documentId));\n try {\n await notebooksApi.deleteDocument(sessionId, documentId);\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'documents', sessionId],\n });\n setToastAlerts(prev => [\n {\n key: Date.now() + documentId,\n title: (t as Function)('notebook.document.delete.success', {\n documentName,\n }) as string,\n variant: 'success',\n },\n ...prev,\n ]);\n } finally {\n setDeletingDocumentIds(prev => {\n const next = new Set(prev);\n next.delete(documentId);\n return next;\n });\n }\n }, [deleteDocumentTarget, notebooksApi, sessionId, queryClient, t]);\n\n const handleOpenUploadModal = () => setIsUploadModalOpen(true);\n const handleCloseUploadModal = () => setIsUploadModalOpen(false);\n\n const handleFilesUploading = (files: File[]) => {\n setUploadingFileNames(prev => {\n const newNames = files\n .map(f => f.name)\n .filter(name => !prev.includes(name));\n return [...prev, ...newNames];\n });\n };\n\n const handleUploadStarted = (info: {\n fileName: string;\n documentId: string;\n }) => {\n processedIds.current.delete(info.documentId);\n setPendingUploads(prev => [\n ...prev,\n { fileName: info.fileName, documentId: info.documentId },\n ]);\n };\n\n const handleUploadFailed = (fileName: string) => {\n setUploadingFileNames(prev => prev.filter(n => n !== fileName));\n setToastAlerts(prev => [\n {\n key: Date.now() + fileName,\n title: (t as Function)('notebook.upload.failed', {\n fileName,\n }) as string,\n variant: 'danger',\n },\n ...prev,\n ]);\n };\n\n const handleDuplicatesFound = (files: File[]) => {\n setFilesToOverwrite(files);\n setIsOverwriteModalOpen(true);\n };\n\n const handleOverwriteConfirm = () => {\n const files = filesToOverwrite;\n setIsOverwriteModalOpen(false);\n setFilesToOverwrite([]);\n\n if (files.length === 0) return;\n\n setFilesToAddToModal(files);\n };\n\n const handleFilesAddedToModal = () => {\n setFilesToAddToModal([]);\n };\n\n const handleOverwriteCancel = () => {\n setIsOverwriteModalOpen(false);\n setFilesToOverwrite([]);\n };\n\n const pollingResults = useDocumentStatusPolling(sessionId, pendingUploads);\n\n useEffect(() => {\n const completedOrFailed = pollingResults.filter(\n r =>\n (r.status === 'completed' ||\n r.status === 'failed' ||\n r.status === 'cancelled') &&\n !processedIds.current.has(r.documentId),\n );\n\n if (completedOrFailed.length === 0) return;\n\n const idsToRemove = new Set<string>();\n const namesToRemove = new Set<string>();\n const newAlerts: Partial<AlertProps>[] = [];\n\n const newCompletedNames = new Set<string>();\n\n for (const result of completedOrFailed) {\n processedIds.current.add(result.documentId);\n idsToRemove.add(result.documentId);\n namesToRemove.add(result.fileName);\n if (result.status === 'completed') {\n newCompletedNames.add(result.fileName);\n }\n\n if (result.status !== 'completed') {\n const errorDetail = result.error ? ` ${result.error}` : '';\n newAlerts.push({\n key: Date.now() + result.documentId,\n title: `${\n (t as Function)('notebook.upload.failed', {\n fileName: result.fileName,\n }) as string\n }${errorDetail}`,\n variant: 'danger',\n });\n }\n }\n\n setPendingUploads(prev => prev.filter(u => !idsToRemove.has(u.documentId)));\n setUploadingFileNames(prev =>\n prev.filter(name => !namesToRemove.has(name)),\n );\n if (newCompletedNames.size > 0) {\n setCompletedFileNames(prev => new Set([...prev, ...newCompletedNames]));\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'documents', sessionId],\n });\n }\n setToastAlerts(prev => [...newAlerts, ...prev]);\n }, [pollingResults, t, queryClient, sessionId]);\n\n const handleRemoveToastAlert = (key: React.Key) => {\n setToastAlerts(prev => prev.filter(a => a.key !== key));\n };\n\n const hasDocuments = documents.length > 0 || uploadingFileNames.length > 0;\n const totalDocumentCount = documents.length + uploadingFileNames.length;\n const isAddDisabled = totalDocumentCount >= NOTEBOOK_MAX_FILES;\n\n const panelContent = (\n <DrawerPanelContent\n isResizable\n defaultSize=\"310px\"\n minSize=\"232px\"\n maxSize=\"50%\"\n resizeAriaLabel={t('notebook.view.sidebar.resize')}\n >\n <DocumentSidebar\n notebookName={notebookName}\n documents={documents}\n uploadingFileNames={uploadingFileNames}\n completedFileNames={completedFileNames}\n deletingDocumentIds={deletingDocumentIds}\n collapsed={sidebarCollapsed}\n onToggleCollapse={() => setSidebarCollapsed(prev => !prev)}\n onAddDocument={handleOpenUploadModal}\n onDeleteDocument={handleDeleteDocument}\n />\n </DrawerPanelContent>\n );\n\n const renderNotebookDisclaimerAlert = () => (\n <div className={classes.notebookDisclaimerStrip}>\n <div className={classes.notebookDisclaimerInner}>\n <Alert isInline variant=\"info\" title={t('aria.important')}>\n {t('disclaimer.withoutValidation')}\n </Alert>\n </div>\n </div>\n );\n\n const renderMainContent = () => {\n if (!hasDocuments && messages.length === 0) {\n return (\n <Typography component=\"span\" className={classes.notebookEmptyUpload}>\n <UploadResourceScreen onUploadClick={handleOpenUploadModal} />\n </Typography>\n );\n }\n if (messages.length > 0) {\n return (\n <ChatbotContent className={classes.chatContent}>\n <LightspeedChatBox\n userName={userName}\n messages={messages}\n profileLoading={profileLoading}\n announcement={announcement}\n ref={scrollToBottomRef}\n welcomePrompts={[]}\n conversationId={conversationId}\n isStreaming={isSendButtonDisabled}\n topicRestrictionEnabled={topicRestrictionEnabled}\n />\n </ChatbotContent>\n );\n }\n return (\n <div className={classes.welcomeContainer}>\n <div style={{ flex: 1 }} />\n {renderNotebookDisclaimerAlert()}\n <div className={classes.notebookContentArea}>\n <Typography className={classes.notebookHeading}>\n {notebookName}\n </Typography>\n {topicSummary && (\n <Typography className={classes.notebookSummary}>\n {topicSummary}\n </Typography>\n )}\n </div>\n {welcomePrompts.length > 0 && (\n <div className={classes.promptSuggestions}>\n {welcomePrompts.map(prompt => (\n <button\n key={prompt.title}\n type=\"button\"\n className={classes.promptPill}\n onClick={prompt.onClick}\n >\n {prompt.title}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n };\n\n return (\n <div className={classes.root}>\n {toastAlerts.length > 0 && (\n <AlertGroup\n hasAnimations\n isToast\n isLiveRegion\n className={classes.toastAlertGroup}\n >\n {toastAlerts.map(({ key, title, variant }) => (\n <Alert\n key={key}\n variant={AlertVariant[variant ?? 'success']}\n title={title}\n className={classes.toastAlert}\n timeout={2000}\n onTimeout={() => handleRemoveToastAlert(key as React.Key)}\n actionClose={\n <AlertActionCloseButton\n title={title as string}\n variantLabel={`${variant ?? 'success'} alert`}\n onClose={() => handleRemoveToastAlert(key as React.Key)}\n />\n }\n />\n ))}\n </AlertGroup>\n )}\n <Drawer\n isExpanded={!sidebarCollapsed}\n isInline\n position=\"start\"\n className={classes.drawerContainer}\n >\n <DrawerContent\n panelContent={!sidebarCollapsed ? panelContent : undefined}\n >\n <DrawerContentBody className={classes.drawerContentBody}>\n <div className={classes.mainArea}>\n {sidebarCollapsed && (\n <div className={classes.expandStrip}>\n <Tooltip\n content={t('notebook.view.sidebar.expand')}\n position=\"right\"\n >\n <Button\n variant=\"plain\"\n onClick={() => setSidebarCollapsed(false)}\n aria-label={t('notebook.view.sidebar.expand')}\n size=\"sm\"\n >\n <SidebarExpandIcon />\n </Button>\n </Tooltip>\n <Tooltip\n content={\n isAddDisabled\n ? t('notebook.view.documents.maxReached')\n : t('notebook.view.documents.add')\n }\n position=\"right\"\n >\n <Typography component=\"span\">\n <Button\n variant=\"plain\"\n className={classes.addIconButton}\n onClick={\n isAddDisabled ? undefined : handleOpenUploadModal\n }\n aria-label={t('notebook.view.documents.add')}\n isDisabled={isAddDisabled}\n >\n <AddCircleFilledIcon disabled={isAddDisabled} />\n </Button>\n </Typography>\n </Tooltip>\n </div>\n )}\n\n <div className={classes.contentColumn}>\n <div className={classes.topBar}>\n <Button\n variant=\"link\"\n className={classes.closeButton}\n onClick={onClose}\n icon={<TimesIcon />}\n iconPosition=\"end\"\n >\n {t('notebook.view.close')}\n </Button>\n </div>\n\n <div className={classes.mainContent}>{renderMainContent()}</div>\n\n {!hasDocuments &&\n messages.length === 0 &&\n renderNotebookDisclaimerAlert()}\n\n <ChatbotFooter className={classes.footer}>\n {documents.length === 0 ? (\n <Tooltip\n content={t('notebook.view.input.disabledTooltip')}\n position=\"top\"\n >\n <div>\n <MessageBar\n hasAttachButton={false}\n hasMicrophoneButton={false}\n hasStopButton={false}\n isSendButtonDisabled\n isDisabled\n onSendMessage={sendMessage}\n placeholder={t('notebook.view.input.placeholder')}\n />\n </div>\n </Tooltip>\n ) : (\n <MessageBar\n hasAttachButton={false}\n hasMicrophoneButton\n hasStopButton={false}\n isSendButtonDisabled={isSendButtonDisabled}\n onSendMessage={sendMessage}\n placeholder={t('notebook.view.input.placeholder')}\n />\n )}\n <ChatbotFootnote label={t('footer.accuracy.label')} />\n </ChatbotFooter>\n </div>\n </div>\n </DrawerContentBody>\n </DrawerContent>\n </Drawer>\n\n <AddDocumentModal\n isOpen={isUploadModalOpen}\n onClose={handleCloseUploadModal}\n sessionId={sessionId}\n existingDocumentNames={documents.map(d => d.title)}\n onFilesUploading={handleFilesUploading}\n onUploadStarted={handleUploadStarted}\n onUploadFailed={handleUploadFailed}\n onDuplicatesFound={handleDuplicatesFound}\n filesToAdd={filesToAddToModal}\n onFilesAdded={handleFilesAddedToModal}\n />\n\n <OverwriteConfirmModal\n isOpen={isOverwriteModalOpen}\n onClose={handleOverwriteCancel}\n onConfirm={handleOverwriteConfirm}\n fileNames={filesToOverwrite.map(f => f.name)}\n />\n\n <DeleteDocumentModal\n isOpen={deleteDocumentTarget !== null}\n onClose={() => setDeleteDocumentTarget(null)}\n onConfirm={confirmDeleteDocument}\n documentName={deleteDocumentTarget?.name ?? ''}\n />\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NotebookView.esm.js","sources":["../../../src/components/notebooks/NotebookView.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\n\nimport { makeStyles, Typography } from '@material-ui/core';\nimport {\n ChatbotContent,\n ChatbotFooter,\n ChatbotFootnote,\n MessageBar,\n MessageProps,\n} from '@patternfly/chatbot';\nimport {\n Alert,\n AlertActionCloseButton,\n AlertGroup,\n AlertVariant,\n Button,\n Drawer,\n DrawerContent,\n DrawerContentBody,\n DrawerPanelContent,\n Tooltip,\n type AlertProps,\n} from '@patternfly/react-core';\nimport { TimesIcon } from '@patternfly/react-icons';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\nimport {\n NOTEBOOK_MAX_FILES,\n TEMP_CONVERSATION_ID,\n UNTITLED_NOTEBOOK_NAME,\n} from '../../const';\nimport { useCreateNotebookMessage } from '../../hooks/notebooks/useCreateNotebookMessage';\nimport {\n useDocumentStatusPolling,\n type PendingUpload,\n} from '../../hooks/notebooks/useDocumentStatusPolling';\nimport { useConversationMessages } from '../../hooks/useConversationMessages';\nimport { CreateMessageVariables } from '../../hooks/useCreateCoversationMessage';\nimport { useNotebookWelcomePrompts } from '../../hooks/useNotebookWelcomePrompts';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { NotebookSessionMetadata, SessionDocument } from '../../types';\nimport { LightspeedChatBox } from '../LightspeedChatBox';\nimport { AddDocumentModal } from './AddDocumentModal';\nimport { DeleteDocumentModal } from './DeleteDocumentModal';\nimport { DocumentSidebar } from './DocumentSidebar';\nimport { OverwriteConfirmModal } from './OverwriteConfirmModal';\nimport { AddCircleFilledIcon, SidebarExpandIcon } from './SidebarCollapseIcon';\nimport { UploadResourceScreen } from './UploadResourceScreen';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n height: '100%',\n backgroundColor: 'var(--pf-t--global--background--color--primary--default)',\n },\n drawerContainer: {\n flex: 1,\n minHeight: 0,\n '& .pf-v6-c-drawer__panel, & .pf-v5-c-drawer__panel': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default) !important',\n },\n '& .pf-v6-c-drawer__panel-main, & .pf-v5-c-drawer__panel-main': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default) !important',\n },\n '& .pf-v6-c-drawer__panel-body, & .pf-v5-c-drawer__panel-body': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default) !important',\n },\n '& .pf-v6-c-drawer__splitter, & .pf-v5-c-drawer__splitter': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n },\n expandStrip: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: theme.spacing(1.5),\n gap: theme.spacing(1),\n borderRight: '1px solid var(--pf-t--global--border--color--default)',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n addIconButton: {\n padding: 0,\n minWidth: 0,\n lineHeight: 1,\n },\n mainArea: {\n display: 'flex',\n flexDirection: 'row',\n height: '100%',\n minWidth: 0,\n },\n topBar: {\n display: 'flex',\n justifyContent: 'flex-end',\n padding: `${theme.spacing(1.5)}px ${theme.spacing(2)}px`,\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n closeButton: {\n textTransform: 'none',\n },\n mainContent: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n },\n drawerContentBody: {\n backgroundColor: 'var(--pf-t--global--background--color--primary--default)',\n height: '100%',\n },\n contentColumn: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minWidth: 0,\n minHeight: 0,\n overflow: 'hidden',\n },\n notebookDisclaimerStrip: {\n width: '100%',\n maxWidth: 'unset',\n margin: 0,\n padding: `0 0 ${theme.spacing(1)}px`,\n boxSizing: 'border-box',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n '& .pf-v6-c-alert, & .pf-v5-c-alert': {\n backgroundColor:\n 'var(--pf-t--global--background--color--secondary--default) !important',\n },\n '& .pf-v6-c-alert__content, & .pf-v5-c-alert__content': {\n backgroundColor: 'transparent !important',\n },\n '& .pf-v6-c-alert__body, & .pf-v5-c-alert__body': {\n backgroundColor: 'transparent !important',\n },\n '& .pf-v6-c-alert__description, & .pf-v5-c-alert__description': {\n backgroundColor: 'transparent !important',\n },\n },\n notebookDisclaimerInner: {\n width: '95%',\n maxWidth: 'unset',\n margin: '0 auto',\n },\n toastAlertGroup: {\n '--pf-v6-c-alert-group--m-toast--InsetInlineEnd': `${theme.spacing(2.5)}px`,\n '--pf-v6-c-alert-group--m-toast--InsetBlockStart': `${theme.spacing(2.5)}px`,\n '--pf-v6-c-alert-group--m-toast--MaxWidth': '350px',\n '--pf-v6-c-alert-group--m-toast--ZIndex': '9999',\n },\n toastAlert: {\n maxWidth: '350px',\n '& .pf-v6-c-alert__title': {\n margin: 0,\n },\n },\n welcomeContainer: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n overflow: 'auto',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n notebookEmptyUpload: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0,\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n notebookContentArea: {\n width: '95%',\n maxWidth: 'unset',\n margin: `${theme.spacing(3)}px auto 0 auto`,\n padding: 0,\n },\n notebookHeading: {\n fontSize: '2rem',\n fontWeight: 500,\n lineHeight: 1.25,\n padding: `${theme.spacing(1)}px 0`,\n },\n notebookSummary: {\n fontSize: '1rem',\n lineHeight: 2,\n color: 'var(--pf-t--global--text--color--regular)',\n paddingTop: theme.spacing(0.5),\n },\n promptSuggestions: {\n display: 'flex',\n flexWrap: 'wrap' as const,\n gap: theme.spacing(1),\n width: '95%',\n maxWidth: 'unset',\n margin: `${theme.spacing(3)}px auto ${theme.spacing(3)}px auto`,\n justifyContent: 'flex-start',\n },\n promptPill: {\n appearance: 'none' as const,\n background: 'transparent',\n border: `1px solid var(--pf-t--global--border--color--default)`,\n borderRadius: '999px',\n padding: `${theme.spacing(1)}px ${theme.spacing(2.5)}px`,\n fontSize: '0.875rem',\n color: 'var(--pf-t--global--text--color--regular)',\n cursor: 'pointer',\n transition: 'background-color 0.15s, border-color 0.15s',\n '&:hover': {\n backgroundColor:\n 'var(--pf-t--global--background--color--secondary--default)',\n borderColor: 'var(--pf-t--global--border--color--hover)',\n },\n },\n footer: {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n '&>.pf-chatbot__footer-container': {\n width: '95% !important',\n maxWidth: 'unset !important',\n },\n '& .pf-chatbot__message-bar': {\n backgroundColor:\n theme.palette.type === 'light'\n ? theme.palette.grey[100]\n : 'var(--pf-t--global--background--color--secondary--default)',\n },\n },\n chatContent: {\n minHeight: 0,\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n overflow: 'auto',\n },\n}));\n\ntype NotebookViewProps = {\n sessionId: string;\n notebookName?: string;\n documents?: SessionDocument[];\n metadata?: NotebookSessionMetadata;\n topicSummary?: string;\n userName?: string;\n avatar?: string;\n profileLoading: boolean;\n topicRestrictionEnabled: boolean;\n onClose: () => void;\n};\n\nexport const NotebookView = ({\n sessionId,\n notebookName = UNTITLED_NOTEBOOK_NAME,\n documents = [],\n metadata,\n topicSummary,\n userName,\n avatar,\n profileLoading,\n topicRestrictionEnabled,\n onClose,\n}: NotebookViewProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const configApi = useApi(configApiRef);\n const notebooksApi = useApi(notebooksApiRef);\n const { mutateAsync: notebookCreateMessage } = useCreateNotebookMessage();\n\n // Use notebook-specific model from config instead of chat's selected model\n const notebookModel =\n configApi.getOptionalString('lightspeed.notebooks.queryDefaults.model') ||\n '';\n\n const [conversationId, setConversationId] = useState(\n metadata?.conversation_id ?? TEMP_CONVERSATION_ID,\n );\n const [isSendButtonDisabled, setIsSendButtonDisabled] = useState(false);\n const [announcement, setAnnouncement] = useState<string | undefined>(\n undefined,\n );\n const [deletingDocumentIds, setDeletingDocumentIds] = useState<Set<string>>(\n new Set(),\n );\n const [deleteDocumentTarget, setDeleteDocumentTarget] = useState<{\n id: string;\n name: string;\n } | null>(null);\n\n const handleDeleteDocument = useCallback((documentId: string) => {\n setDeleteDocumentTarget({ id: documentId, name: documentId });\n }, []);\n\n const onComplete = useCallback(\n (message: string) => {\n setIsSendButtonDisabled(false);\n setAnnouncement(`Message from Bot: ${message}`);\n queryClient.invalidateQueries({\n queryKey: ['conversationMessages', conversationId],\n });\n },\n [queryClient, conversationId],\n );\n\n const onStart = useCallback((conv_id: string) => {\n setConversationId(conv_id);\n }, []);\n\n const createMessageAdapter = useCallback(\n async (vars: CreateMessageVariables) => {\n return notebookCreateMessage({\n prompt: vars.prompt,\n sessionId,\n });\n },\n [notebookCreateMessage, sessionId],\n );\n\n const { conversationMessages, handleInputPrompt, scrollToBottomRef } =\n useConversationMessages(\n conversationId,\n userName,\n notebookModel,\n '',\n avatar,\n onComplete,\n onStart,\n createMessageAdapter,\n );\n\n const [messages, setMessages] =\n useState<MessageProps[]>(conversationMessages);\n\n useEffect(() => {\n setMessages(conversationMessages);\n }, [conversationMessages]);\n\n const sendMessage = useCallback(\n (message: string | number) => {\n setAnnouncement(\n t('conversation.announcement.userMessage' as any, {\n prompt: message.toString(),\n }),\n );\n handleInputPrompt(message.toString(), []);\n setIsSendButtonDisabled(true);\n },\n [handleInputPrompt, t],\n );\n\n const notebookPrompts = useNotebookWelcomePrompts();\n const welcomePrompts = notebookPrompts.map(title => ({\n title,\n onClick: () => sendMessage(title),\n }));\n\n const [sidebarCollapsed, setSidebarCollapsed] = useState(false);\n const [isUploadModalOpen, setIsUploadModalOpen] = useState(false);\n const [uploadingFileNames, setUploadingFileNames] = useState<string[]>([]);\n const [pendingUploads, setPendingUploads] = useState<PendingUpload[]>([]);\n const [toastAlerts, setToastAlerts] = useState<Partial<AlertProps>[]>([]);\n const processedIds = useRef<Set<string>>(new Set());\n const [completedFileNames, setCompletedFileNames] = useState<Set<string>>(\n new Set(),\n );\n const [filesToOverwrite, setFilesToOverwrite] = useState<File[]>([]);\n const [isOverwriteModalOpen, setIsOverwriteModalOpen] = useState(false);\n const [filesToAddToModal, setFilesToAddToModal] = useState<File[]>([]);\n\n const confirmDeleteDocument = useCallback(async () => {\n if (!deleteDocumentTarget) return;\n const { id: documentId, name: documentName } = deleteDocumentTarget;\n setDeleteDocumentTarget(null);\n setDeletingDocumentIds(prev => new Set(prev).add(documentId));\n try {\n await notebooksApi.deleteDocument(sessionId, documentId);\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'documents', sessionId],\n });\n setToastAlerts(prev => [\n {\n key: Date.now() + documentId,\n title: (t as Function)('notebook.document.delete.success', {\n documentName,\n }) as string,\n variant: 'success',\n },\n ...prev,\n ]);\n } finally {\n setDeletingDocumentIds(prev => {\n const next = new Set(prev);\n next.delete(documentId);\n return next;\n });\n }\n }, [deleteDocumentTarget, notebooksApi, sessionId, queryClient, t]);\n\n const handleOpenUploadModal = () => setIsUploadModalOpen(true);\n const handleCloseUploadModal = () => setIsUploadModalOpen(false);\n\n const handleFilesUploading = (files: File[]) => {\n setUploadingFileNames(prev => {\n const newNames = files\n .map(f => f.name)\n .filter(name => !prev.includes(name));\n return [...prev, ...newNames];\n });\n };\n\n const handleUploadStarted = (info: {\n fileName: string;\n documentId: string;\n }) => {\n processedIds.current.delete(info.documentId);\n setPendingUploads(prev => [\n ...prev,\n { fileName: info.fileName, documentId: info.documentId },\n ]);\n };\n\n const handleUploadFailed = (fileName: string) => {\n setUploadingFileNames(prev => prev.filter(n => n !== fileName));\n setToastAlerts(prev => [\n {\n key: Date.now() + fileName,\n title: (t as Function)('notebook.upload.failed', {\n fileName,\n }) as string,\n variant: 'danger',\n },\n ...prev,\n ]);\n };\n\n const handleDuplicatesFound = (files: File[]) => {\n setFilesToOverwrite(files);\n setIsOverwriteModalOpen(true);\n };\n\n const handleOverwriteConfirm = () => {\n const files = filesToOverwrite;\n setIsOverwriteModalOpen(false);\n setFilesToOverwrite([]);\n\n if (files.length === 0) return;\n\n setFilesToAddToModal(files);\n };\n\n const handleFilesAddedToModal = () => {\n setFilesToAddToModal([]);\n };\n\n const handleOverwriteCancel = () => {\n setIsOverwriteModalOpen(false);\n setFilesToOverwrite([]);\n };\n\n const pollingResults = useDocumentStatusPolling(sessionId, pendingUploads);\n\n useEffect(() => {\n const completedOrFailed = pollingResults.filter(\n r =>\n (r.status === 'completed' ||\n r.status === 'failed' ||\n r.status === 'cancelled') &&\n !processedIds.current.has(r.documentId),\n );\n\n if (completedOrFailed.length === 0) return;\n\n const idsToRemove = new Set<string>();\n const namesToRemove = new Set<string>();\n const newAlerts: Partial<AlertProps>[] = [];\n\n const newCompletedNames = new Set<string>();\n\n for (const result of completedOrFailed) {\n processedIds.current.add(result.documentId);\n idsToRemove.add(result.documentId);\n namesToRemove.add(result.fileName);\n if (result.status === 'completed') {\n newCompletedNames.add(result.fileName);\n }\n\n if (result.status !== 'completed') {\n const errorDetail = result.error ? ` ${result.error}` : '';\n newAlerts.push({\n key: Date.now() + result.documentId,\n title: `${\n (t as Function)('notebook.upload.failed', {\n fileName: result.fileName,\n }) as string\n }${errorDetail}`,\n variant: 'danger',\n });\n }\n }\n\n setPendingUploads(prev => prev.filter(u => !idsToRemove.has(u.documentId)));\n setUploadingFileNames(prev =>\n prev.filter(name => !namesToRemove.has(name)),\n );\n if (newCompletedNames.size > 0) {\n setCompletedFileNames(prev => new Set([...prev, ...newCompletedNames]));\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'documents', sessionId],\n });\n }\n setToastAlerts(prev => [...newAlerts, ...prev]);\n }, [pollingResults, t, queryClient, sessionId]);\n\n const handleRemoveToastAlert = (key: React.Key) => {\n setToastAlerts(prev => prev.filter(a => a.key !== key));\n };\n\n const hasDocuments = documents.length > 0 || uploadingFileNames.length > 0;\n const totalDocumentCount = documents.length + uploadingFileNames.length;\n const isAddDisabled = totalDocumentCount >= NOTEBOOK_MAX_FILES;\n\n const panelContent = (\n <DrawerPanelContent\n isResizable\n defaultSize=\"310px\"\n minSize=\"232px\"\n maxSize=\"50%\"\n resizeAriaLabel={t('notebook.view.sidebar.resize')}\n >\n <DocumentSidebar\n notebookName={notebookName}\n documents={documents}\n uploadingFileNames={uploadingFileNames}\n completedFileNames={completedFileNames}\n deletingDocumentIds={deletingDocumentIds}\n collapsed={sidebarCollapsed}\n onToggleCollapse={() => setSidebarCollapsed(prev => !prev)}\n onAddDocument={handleOpenUploadModal}\n onDeleteDocument={handleDeleteDocument}\n />\n </DrawerPanelContent>\n );\n\n const renderNotebookDisclaimerAlert = () => (\n <div className={classes.notebookDisclaimerStrip}>\n <div className={classes.notebookDisclaimerInner}>\n <Alert isInline variant=\"info\" title={t('aria.important')}>\n {t('disclaimer.withoutValidation')}\n </Alert>\n </div>\n </div>\n );\n\n const renderMainContent = () => {\n if (!hasDocuments && messages.length === 0) {\n return (\n <Typography component=\"span\" className={classes.notebookEmptyUpload}>\n <UploadResourceScreen onUploadClick={handleOpenUploadModal} />\n </Typography>\n );\n }\n if (messages.length > 0) {\n return (\n <ChatbotContent className={classes.chatContent}>\n <LightspeedChatBox\n userName={userName}\n messages={messages}\n profileLoading={profileLoading}\n announcement={announcement}\n ref={scrollToBottomRef}\n welcomePrompts={[]}\n conversationId={conversationId}\n isStreaming={isSendButtonDisabled}\n topicRestrictionEnabled={topicRestrictionEnabled}\n />\n </ChatbotContent>\n );\n }\n return (\n <div className={classes.welcomeContainer}>\n <div style={{ flex: 1 }} />\n {renderNotebookDisclaimerAlert()}\n <div className={classes.notebookContentArea}>\n <Typography className={classes.notebookHeading}>\n {notebookName}\n </Typography>\n {topicSummary && (\n <Typography className={classes.notebookSummary}>\n {topicSummary}\n </Typography>\n )}\n </div>\n {welcomePrompts.length > 0 && (\n <div className={classes.promptSuggestions}>\n {welcomePrompts.map(prompt => (\n <button\n key={prompt.title}\n type=\"button\"\n className={classes.promptPill}\n onClick={prompt.onClick}\n >\n {prompt.title}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n };\n\n return (\n <div className={classes.root}>\n {toastAlerts.length > 0 && (\n <AlertGroup\n hasAnimations\n isToast\n isLiveRegion\n className={classes.toastAlertGroup}\n >\n {toastAlerts.map(({ key, title, variant }) => (\n <Alert\n key={key}\n variant={AlertVariant[variant ?? 'success']}\n title={title}\n className={classes.toastAlert}\n timeout={2000}\n onTimeout={() => handleRemoveToastAlert(key as React.Key)}\n actionClose={\n <AlertActionCloseButton\n title={title as string}\n variantLabel={`${variant ?? 'success'} alert`}\n onClose={() => handleRemoveToastAlert(key as React.Key)}\n />\n }\n />\n ))}\n </AlertGroup>\n )}\n <Drawer\n isExpanded={!sidebarCollapsed}\n isInline\n position=\"start\"\n className={classes.drawerContainer}\n >\n <DrawerContent\n panelContent={!sidebarCollapsed ? panelContent : undefined}\n >\n <DrawerContentBody className={classes.drawerContentBody}>\n <div className={classes.mainArea}>\n {sidebarCollapsed && (\n <div className={classes.expandStrip}>\n <Tooltip\n content={t('notebook.view.sidebar.expand')}\n position=\"right\"\n >\n <Button\n variant=\"plain\"\n onClick={() => setSidebarCollapsed(false)}\n aria-label={t('notebook.view.sidebar.expand')}\n size=\"sm\"\n >\n <SidebarExpandIcon />\n </Button>\n </Tooltip>\n <Tooltip\n content={\n isAddDisabled\n ? t('notebook.view.documents.maxReached')\n : t('notebook.view.documents.add')\n }\n position=\"right\"\n >\n <Typography component=\"span\">\n <Button\n variant=\"plain\"\n className={classes.addIconButton}\n onClick={\n isAddDisabled ? undefined : handleOpenUploadModal\n }\n aria-label={t('notebook.view.documents.add')}\n isDisabled={isAddDisabled}\n >\n <AddCircleFilledIcon disabled={isAddDisabled} />\n </Button>\n </Typography>\n </Tooltip>\n </div>\n )}\n\n <div className={classes.contentColumn}>\n <div className={classes.topBar}>\n <Button\n variant=\"link\"\n className={classes.closeButton}\n onClick={onClose}\n icon={<TimesIcon />}\n iconPosition=\"end\"\n >\n {t('notebook.view.close')}\n </Button>\n </div>\n\n <div className={classes.mainContent}>{renderMainContent()}</div>\n\n {!hasDocuments &&\n messages.length === 0 &&\n renderNotebookDisclaimerAlert()}\n\n <ChatbotFooter className={classes.footer}>\n {documents.length === 0 ? (\n <Tooltip\n content={t('notebook.view.input.disabledTooltip')}\n position=\"top\"\n >\n <div>\n <MessageBar\n hasAttachButton={false}\n hasMicrophoneButton={false}\n hasStopButton={false}\n isSendButtonDisabled\n isDisabled\n onSendMessage={sendMessage}\n placeholder={t('notebook.view.input.placeholder')}\n />\n </div>\n </Tooltip>\n ) : (\n <MessageBar\n hasAttachButton={false}\n hasMicrophoneButton\n hasStopButton={false}\n isSendButtonDisabled={isSendButtonDisabled}\n onSendMessage={sendMessage}\n placeholder={t('notebook.view.input.placeholder')}\n />\n )}\n <ChatbotFootnote label={t('footer.accuracy.label')} />\n </ChatbotFooter>\n </div>\n </div>\n </DrawerContentBody>\n </DrawerContent>\n </Drawer>\n\n <AddDocumentModal\n isOpen={isUploadModalOpen}\n onClose={handleCloseUploadModal}\n sessionId={sessionId}\n existingDocumentNames={documents.map(d => d.title)}\n onFilesUploading={handleFilesUploading}\n onUploadStarted={handleUploadStarted}\n onUploadFailed={handleUploadFailed}\n onDuplicatesFound={handleDuplicatesFound}\n filesToAdd={filesToAddToModal}\n onFilesAdded={handleFilesAddedToModal}\n />\n\n <OverwriteConfirmModal\n isOpen={isOverwriteModalOpen}\n onClose={handleOverwriteCancel}\n onConfirm={handleOverwriteConfirm}\n fileNames={filesToOverwrite.map(f => f.name)}\n />\n\n <DeleteDocumentModal\n isOpen={deleteDocumentTarget !== null}\n onClose={() => setDeleteDocumentTarget(null)}\n onConfirm={confirmDeleteDocument}\n documentName={deleteDocumentTarget?.name ?? ''}\n />\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -34,7 +34,7 @@ declare const LightspeedIcon: () => react_jsx_runtime.JSX.Element;
|
|
|
34
34
|
* @public
|
|
35
35
|
* Lightspeed Floating action button to open/close the lightspeed chatbot
|
|
36
36
|
*/
|
|
37
|
-
declare const LightspeedFAB: () => react_jsx_runtime.JSX.Element;
|
|
37
|
+
declare const LightspeedFAB: () => react_jsx_runtime.JSX.Element | null;
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
40
|
* @public
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@red-hat-developer-hub/backstage-plugin-lightspeed",
|
|
3
|
-
"version": "2.8.
|
|
3
|
+
"version": "2.8.5",
|
|
4
4
|
"main": "./dist/index.esm.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"@patternfly/react-icons": "^6.3.1",
|
|
87
87
|
"@patternfly/react-table": "^6.4.1",
|
|
88
88
|
"@red-hat-developer-hub/backstage-plugin-app-react": "^0.0.5",
|
|
89
|
-
"@red-hat-developer-hub/backstage-plugin-lightspeed-common": "^2.8.
|
|
89
|
+
"@red-hat-developer-hub/backstage-plugin-lightspeed-common": "^2.8.5",
|
|
90
90
|
"@red-hat-developer-hub/backstage-plugin-theme": "^0.12.0",
|
|
91
91
|
"@tanstack/react-query": "^5.59.15",
|
|
92
92
|
"monaco-editor": "^0.55.0",
|