@red-hat-developer-hub/backstage-plugin-intelligent-assistant 5.2.0 → 5.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/README.md +14 -2
- package/dist/alpha.d.ts +24 -0
- package/dist/components/AttachmentContext.esm.js +1 -1
- package/dist/components/ChatLoadingFallback.esm.js +37 -0
- package/dist/components/ChatLoadingFallback.esm.js.map +1 -0
- package/dist/components/CollapsedHistoryStrip.esm.js +1 -1
- package/dist/components/LightSpeedChat.esm.js +76 -29
- package/dist/components/LightSpeedChat.esm.js.map +1 -1
- package/dist/components/LightspeedChatBox.esm.js +2 -2
- package/dist/components/LightspeedChatBoxHeader.esm.js +30 -2
- package/dist/components/LightspeedChatBoxHeader.esm.js.map +1 -1
- package/dist/components/LightspeedChatContainer.esm.js +20 -4
- package/dist/components/LightspeedChatContainer.esm.js.map +1 -1
- package/dist/components/LightspeedDrawerContext.esm.js.map +1 -1
- package/dist/components/LightspeedDrawerProvider.esm.js +11 -25
- package/dist/components/LightspeedDrawerProvider.esm.js.map +1 -1
- package/dist/components/LightspeedFABContent.esm.js +14 -2
- package/dist/components/LightspeedFABContent.esm.js.map +1 -1
- package/dist/components/LightspeedOverlayChat.esm.js +39 -0
- package/dist/components/LightspeedOverlayChat.esm.js.map +1 -0
- package/dist/components/McpConfigureServerModal.esm.js +2 -2
- package/dist/components/MessageBarModelSelector.esm.js +105 -13
- package/dist/components/MessageBarModelSelector.esm.js.map +1 -1
- package/dist/components/ScreenContextChip.esm.js +172 -0
- package/dist/components/ScreenContextChip.esm.js.map +1 -0
- package/dist/components/ToastAlertGroup.esm.js +1 -1
- package/dist/components/criticalFabBundle.esm.js +3 -0
- package/dist/components/criticalFabBundle.esm.js.map +1 -0
- package/dist/components/loaders.esm.js +11 -0
- package/dist/components/loaders.esm.js.map +1 -0
- package/dist/components/notebooks/AddDocumentModal.esm.js +2 -2
- package/dist/components/notebooks/DocumentSidebar.esm.js +1 -1
- package/dist/components/notebooks/NotebookCard.esm.js +1 -1
- package/dist/components/notebooks/NotebookStreamProvider.esm.js +1 -1
- package/dist/components/notebooks/NotebookView.esm.js +3 -3
- package/dist/components/notebooks/OverwriteConfirmModal.esm.js +1 -1
- package/dist/components/notebooks/UploadResourceScreen.esm.js +1 -1
- package/dist/components/notebooks/notebookStreamStore.esm.js +1 -1
- package/dist/components/notebooks/notebookStreamStore.esm.js.map +1 -1
- package/dist/const.esm.js +9 -1
- package/dist/const.esm.js.map +1 -1
- package/dist/fabModule.esm.js +51 -0
- package/dist/fabModule.esm.js.map +1 -0
- package/dist/hooks/screenContextLabelSubscription.esm.js +113 -0
- package/dist/hooks/screenContextLabelSubscription.esm.js.map +1 -0
- package/dist/hooks/useConversationMessages.esm.js +2 -1
- package/dist/hooks/useConversationMessages.esm.js.map +1 -1
- package/dist/hooks/useDisplayModeSettings.esm.js +1 -1
- package/dist/hooks/useDisplayModeSettings.esm.js.map +1 -1
- package/dist/hooks/useLightspeedProviderState.esm.js +1 -2
- package/dist/hooks/useLightspeedProviderState.esm.js.map +1 -1
- package/dist/hooks/useScreenContextLabelRevision.esm.js +13 -0
- package/dist/hooks/useScreenContextLabelRevision.esm.js.map +1 -0
- package/dist/hooks/useScreenContextSettings.esm.js +110 -0
- package/dist/hooks/useScreenContextSettings.esm.js.map +1 -0
- package/dist/hooks/useWindowLocation.esm.js +28 -0
- package/dist/hooks/useWindowLocation.esm.js.map +1 -0
- package/dist/index.d.ts +1 -15
- package/dist/index.esm.js +7 -69
- package/dist/index.esm.js.map +1 -1
- package/dist/intelligent-assistant-fab-module.d.ts +12 -4
- package/dist/intelligent-assistant-fab-module.esm.js +1 -1
- package/dist/intelligent-assistant-translations-module.d.ts +10 -4
- package/dist/intelligent-assistant-translations-module.esm.js +1 -1
- package/dist/lazy/LazyLightspeedChatDrawerContent.esm.js +13 -0
- package/dist/lazy/LazyLightspeedChatDrawerContent.esm.js.map +1 -0
- package/dist/lazy/LazyLightspeedFabRootWrapper.esm.js +17 -0
- package/dist/lazy/LazyLightspeedFabRootWrapper.esm.js.map +1 -0
- package/dist/legacy.d.ts +14 -16
- package/dist/legacy.esm.js +2 -9
- package/dist/legacy.esm.js.map +1 -1
- package/dist/loadChatPatternflyStyles.esm.js +14 -0
- package/dist/loadChatPatternflyStyles.esm.js.map +1 -0
- package/dist/muiClassNameConfig.esm.js +6 -0
- package/dist/muiClassNameConfig.esm.js.map +1 -0
- package/dist/plugin.esm.js +4 -4
- package/dist/plugin.esm.js.map +1 -1
- package/dist/translations/de.esm.js +24 -0
- package/dist/translations/de.esm.js.map +1 -1
- package/dist/translations/es.esm.js +24 -0
- package/dist/translations/es.esm.js.map +1 -1
- package/dist/translations/fr.esm.js +24 -0
- package/dist/translations/fr.esm.js.map +1 -1
- package/dist/translations/it.esm.js +24 -0
- package/dist/translations/it.esm.js.map +1 -1
- package/dist/translations/ja.esm.js +24 -0
- package/dist/translations/ja.esm.js.map +1 -1
- package/dist/translations/ref.esm.js +24 -0
- package/dist/translations/ref.esm.js.map +1 -1
- package/dist/translationsModule.esm.js +18 -0
- package/dist/translationsModule.esm.js.map +1 -0
- package/dist/types.esm.js.map +1 -1
- package/dist/utils/dom-selectors.esm.js +22 -2
- package/dist/utils/dom-selectors.esm.js.map +1 -1
- package/dist/utils/lightspeed-chatbox-message-utils.esm.js +145 -0
- package/dist/utils/lightspeed-chatbox-message-utils.esm.js.map +1 -0
- package/dist/utils/lightspeed-chatbox-utils.esm.js +20 -144
- package/dist/utils/lightspeed-chatbox-utils.esm.js.map +1 -1
- package/dist/utils/screen-capture.esm.js +116 -0
- package/dist/utils/screen-capture.esm.js.map +1 -0
- package/dist/utils/screen-context-utils.esm.js +343 -0
- package/dist/utils/screen-context-utils.esm.js.map +1 -0
- package/dist/utils/sensitive-data-redactor.esm.js +39 -1
- package/dist/utils/sensitive-data-redactor.esm.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { useState, useEffect } from 'react';
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useEffect, useMemo, Fragment } from 'react';
|
|
3
3
|
import { styled } from '@mui/material/styles';
|
|
4
4
|
import Typography from '@mui/material/Typography';
|
|
5
|
-
import {
|
|
6
|
-
import { AngleDownIcon } from '@patternfly/react-icons';
|
|
5
|
+
import { DropdownList, DropdownItem, Tooltip, Dropdown, MenuToggle } from '@patternfly/react-core';
|
|
6
|
+
import { CheckIcon, AngleDownIcon, OutlinedImageIcon } from '@patternfly/react-icons';
|
|
7
7
|
import { useTranslation } from '../hooks/useTranslation.esm.js';
|
|
8
8
|
|
|
9
9
|
const SelectorToggle = styled(MenuToggle)(({ theme }) => ({
|
|
@@ -26,10 +26,64 @@ const SelectorToggle = styled(MenuToggle)(({ theme }) => ({
|
|
|
26
26
|
opacity: 0.5
|
|
27
27
|
}
|
|
28
28
|
}));
|
|
29
|
+
const VisionIndicatorIcon = styled(OutlinedImageIcon)(({ theme }) => ({
|
|
30
|
+
width: 16,
|
|
31
|
+
height: 16,
|
|
32
|
+
color: theme.palette.text.secondary,
|
|
33
|
+
flexShrink: 0
|
|
34
|
+
}));
|
|
35
|
+
const VisionIndicatorWrap = styled("span")({
|
|
36
|
+
display: "inline-flex",
|
|
37
|
+
alignItems: "center",
|
|
38
|
+
lineHeight: 1
|
|
39
|
+
});
|
|
40
|
+
const VisionSlot = styled("span")({
|
|
41
|
+
display: "inline-flex",
|
|
42
|
+
alignItems: "center",
|
|
43
|
+
justifyContent: "center",
|
|
44
|
+
flexShrink: 0,
|
|
45
|
+
width: 16,
|
|
46
|
+
height: 16
|
|
47
|
+
});
|
|
48
|
+
const TickSlot = styled("span")(({ theme }) => ({
|
|
49
|
+
display: "inline-flex",
|
|
50
|
+
alignItems: "center",
|
|
51
|
+
justifyContent: "center",
|
|
52
|
+
flexShrink: 0,
|
|
53
|
+
width: "1em",
|
|
54
|
+
height: "1em",
|
|
55
|
+
color: theme.palette.primary.main
|
|
56
|
+
}));
|
|
57
|
+
const ModelLabel = styled("span")({
|
|
58
|
+
flex: "1 1 auto",
|
|
59
|
+
minWidth: 0,
|
|
60
|
+
overflow: "hidden",
|
|
61
|
+
textOverflow: "ellipsis",
|
|
62
|
+
whiteSpace: "nowrap"
|
|
63
|
+
});
|
|
64
|
+
const ModelItemContent = styled("span")({
|
|
65
|
+
display: "flex",
|
|
66
|
+
alignItems: "center",
|
|
67
|
+
gap: 8,
|
|
68
|
+
width: "100%",
|
|
69
|
+
minWidth: 0
|
|
70
|
+
});
|
|
29
71
|
const StyledDropdown = styled(Dropdown)({
|
|
30
72
|
"& ul, & li": {
|
|
31
73
|
padding: 0,
|
|
32
74
|
margin: 0
|
|
75
|
+
},
|
|
76
|
+
"& .pf-v6-c-menu__item-main": {
|
|
77
|
+
width: "100%"
|
|
78
|
+
},
|
|
79
|
+
"& .pf-v6-c-menu__item-text": {
|
|
80
|
+
flex: "1 1 auto",
|
|
81
|
+
minWidth: 0,
|
|
82
|
+
overflow: "hidden"
|
|
83
|
+
},
|
|
84
|
+
// We render our own fixed tick column; hide PF's conditional select icon.
|
|
85
|
+
"& .pf-v6-c-menu__item-select-icon": {
|
|
86
|
+
display: "none"
|
|
33
87
|
}
|
|
34
88
|
});
|
|
35
89
|
const MessageBarModelSelector = ({
|
|
@@ -47,6 +101,14 @@ const MessageBarModelSelector = ({
|
|
|
47
101
|
}
|
|
48
102
|
}, [disabled]);
|
|
49
103
|
const selectedModelLabel = models.find((m) => m.value === selectedModel)?.label ?? selectedModel;
|
|
104
|
+
const visionScreenshotTooltip = useMemo(
|
|
105
|
+
() => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
106
|
+
t("modelSelector.visionScreenshot.line1"),
|
|
107
|
+
/* @__PURE__ */ jsx("br", {}),
|
|
108
|
+
t("modelSelector.visionScreenshot.line2")
|
|
109
|
+
] }),
|
|
110
|
+
[t]
|
|
111
|
+
);
|
|
50
112
|
const toggle = (toggleRef) => /* @__PURE__ */ jsxs(
|
|
51
113
|
SelectorToggle,
|
|
52
114
|
{
|
|
@@ -78,15 +140,45 @@ const MessageBarModelSelector = ({
|
|
|
78
140
|
toggle,
|
|
79
141
|
isScrollable: models.length > 10,
|
|
80
142
|
maxMenuHeight: models.length > 10 ? "240px" : void 0,
|
|
81
|
-
children: /* @__PURE__ */ jsx(DropdownList, { children: models.map((model) =>
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
143
|
+
children: /* @__PURE__ */ jsx(DropdownList, { children: models.map((model) => {
|
|
144
|
+
const isSelected = selectedModel === model.value;
|
|
145
|
+
return /* @__PURE__ */ jsx(
|
|
146
|
+
DropdownItem,
|
|
147
|
+
{
|
|
148
|
+
value: model.value,
|
|
149
|
+
isSelected,
|
|
150
|
+
children: /* @__PURE__ */ jsxs(ModelItemContent, { children: [
|
|
151
|
+
/* @__PURE__ */ jsx(ModelLabel, { title: model.label, children: model.label }),
|
|
152
|
+
model.supportsVision ? /* @__PURE__ */ jsx(VisionSlot, { className: "lightspeed-model-vision-slot", children: /* @__PURE__ */ jsx(Tooltip, { content: visionScreenshotTooltip, children: /* @__PURE__ */ jsx(
|
|
153
|
+
VisionIndicatorWrap,
|
|
154
|
+
{
|
|
155
|
+
"aria-label": t(
|
|
156
|
+
"modelSelector.visionScreenshot.ariaLabel"
|
|
157
|
+
),
|
|
158
|
+
onClick: (event) => event.stopPropagation(),
|
|
159
|
+
onMouseDown: (event) => event.stopPropagation(),
|
|
160
|
+
children: /* @__PURE__ */ jsx(VisionIndicatorIcon, { "aria-hidden": true })
|
|
161
|
+
}
|
|
162
|
+
) }) }) : /* @__PURE__ */ jsx(
|
|
163
|
+
VisionSlot,
|
|
164
|
+
{
|
|
165
|
+
className: "lightspeed-model-vision-slot",
|
|
166
|
+
"aria-hidden": true
|
|
167
|
+
}
|
|
168
|
+
),
|
|
169
|
+
/* @__PURE__ */ jsx(
|
|
170
|
+
TickSlot,
|
|
171
|
+
{
|
|
172
|
+
className: "lightspeed-model-tick-slot",
|
|
173
|
+
"aria-hidden": !isSelected,
|
|
174
|
+
children: isSelected ? /* @__PURE__ */ jsx(CheckIcon, { "aria-hidden": true }) : null
|
|
175
|
+
}
|
|
176
|
+
)
|
|
177
|
+
] })
|
|
178
|
+
},
|
|
179
|
+
model.value
|
|
180
|
+
);
|
|
181
|
+
}) })
|
|
90
182
|
}
|
|
91
183
|
);
|
|
92
184
|
if (disabled && disabledTooltip) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageBarModelSelector.esm.js","sources":["../../src/components/MessageBarModelSelector.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 { Ref, useEffect, useState } from 'react';\n\nimport { styled } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\nimport {\n Dropdown,\n DropdownItem,\n DropdownList,\n MenuToggle,\n MenuToggleElement,\n Tooltip,\n} from '@patternfly/react-core';\nimport { AngleDownIcon } from '@patternfly/react-icons';\n\nimport { useTranslation } from '../hooks/useTranslation';\n\ntype MessageBarModelSelectorProps = {\n selectedModel: string;\n models: { label: string; value: string; provider: string }[];\n onSelect: (model: string) => void;\n disabled?: boolean;\n disabledTooltip?: string;\n};\n\nconst SelectorToggle = styled(MenuToggle)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n color: theme.palette.text.secondary,\n fontSize: 14,\n fontWeight: 500,\n cursor: 'pointer',\n padding: '4px 8px',\n borderRadius: 8,\n border: 'none',\n background: 'transparent',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n '&:disabled': {\n cursor: 'not-allowed',\n opacity: 0.5,\n },\n}));\n\nconst StyledDropdown = styled(Dropdown)({\n '& ul, & li': {\n padding: 0,\n margin: 0,\n },\n});\n\nexport const MessageBarModelSelector = ({\n selectedModel,\n models,\n onSelect,\n disabled = false,\n disabledTooltip,\n}: MessageBarModelSelectorProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const { t } = useTranslation();\n\n useEffect(() => {\n if (disabled) {\n setIsOpen(false);\n }\n }, [disabled]);\n\n const selectedModelLabel =\n models.find(m => m.value === selectedModel)?.label ?? selectedModel;\n\n const toggle = (toggleRef: Ref<MenuToggleElement>) => (\n <SelectorToggle\n ref={toggleRef}\n onClick={() => setIsOpen(!isOpen)}\n isExpanded={isOpen}\n isDisabled={disabled}\n variant=\"plain\"\n aria-label={t('aria.chatbotSelector')}\n >\n {selectedModelLabel}\n <AngleDownIcon />\n </SelectorToggle>\n );\n\n const dropdown = (\n <StyledDropdown\n isOpen={isOpen && !disabled}\n onSelect={(_e, value) => {\n if (disabled) return;\n onSelect(value as string);\n setIsOpen(false);\n }}\n onOpenChange={open => setIsOpen(open)}\n popperProps={{ position: 'left' }}\n shouldFocusToggleOnSelect\n shouldFocusFirstItemOnOpen={false}\n toggle={toggle}\n isScrollable={models.length > 10}\n maxMenuHeight={models.length > 10 ? '240px' : undefined}\n >\n <DropdownList>\n {models.map(model => (\n <DropdownItem\n value={model.value}\n key={model.value}\n isSelected={selectedModel === model.value}\n >\n {model.label}\n </DropdownItem>\n ))}\n </DropdownList>\n </StyledDropdown>\n );\n\n if (disabled && disabledTooltip) {\n return (\n <Tooltip content={disabledTooltip}>\n <Typography component=\"span\">{dropdown}</Typography>\n </Tooltip>\n );\n }\n\n return dropdown;\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MessageBarModelSelector.esm.js","sources":["../../src/components/MessageBarModelSelector.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 { Fragment, Ref, useEffect, useMemo, useState } from 'react';\n\nimport { styled } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\nimport {\n Dropdown,\n DropdownItem,\n DropdownList,\n MenuToggle,\n MenuToggleElement,\n Tooltip,\n} from '@patternfly/react-core';\nimport {\n AngleDownIcon,\n CheckIcon,\n OutlinedImageIcon,\n} from '@patternfly/react-icons';\n\nimport { useTranslation } from '../hooks/useTranslation';\n\ntype MessageBarModelSelectorProps = {\n selectedModel: string;\n models: {\n label: string;\n value: string;\n provider: string;\n supportsVision?: boolean;\n }[];\n onSelect: (model: string) => void;\n disabled?: boolean;\n disabledTooltip?: string;\n};\n\nconst SelectorToggle = styled(MenuToggle)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n color: theme.palette.text.secondary,\n fontSize: 14,\n fontWeight: 500,\n cursor: 'pointer',\n padding: '4px 8px',\n borderRadius: 8,\n border: 'none',\n background: 'transparent',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n '&:disabled': {\n cursor: 'not-allowed',\n opacity: 0.5,\n },\n}));\n\nconst VisionIndicatorIcon = styled(OutlinedImageIcon)(({ theme }) => ({\n width: 16,\n height: 16,\n color: theme.palette.text.secondary,\n flexShrink: 0,\n}));\n\nconst VisionIndicatorWrap = styled('span')({\n display: 'inline-flex',\n alignItems: 'center',\n lineHeight: 1,\n});\n\n/** Fixed-width slot so vision icons align across rows (empty when unsupported). */\nconst VisionSlot = styled('span')({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n width: 16,\n height: 16,\n});\n\n/** Fixed-width slot so the select tick aligns across rows (empty when not selected). */\nconst TickSlot = styled('span')(({ theme }) => ({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n width: '1em',\n height: '1em',\n color: theme.palette.primary.main,\n}));\n\nconst ModelLabel = styled('span')({\n flex: '1 1 auto',\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n});\n\nconst ModelItemContent = styled('span')({\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n width: '100%',\n minWidth: 0,\n});\n\nconst StyledDropdown = styled(Dropdown)({\n '& ul, & li': {\n padding: 0,\n margin: 0,\n },\n '& .pf-v6-c-menu__item-main': {\n width: '100%',\n },\n '& .pf-v6-c-menu__item-text': {\n flex: '1 1 auto',\n minWidth: 0,\n overflow: 'hidden',\n },\n // We render our own fixed tick column; hide PF's conditional select icon.\n '& .pf-v6-c-menu__item-select-icon': {\n display: 'none',\n },\n});\n\nexport const MessageBarModelSelector = ({\n selectedModel,\n models,\n onSelect,\n disabled = false,\n disabledTooltip,\n}: MessageBarModelSelectorProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const { t } = useTranslation();\n\n useEffect(() => {\n if (disabled) {\n setIsOpen(false);\n }\n }, [disabled]);\n\n const selectedModelLabel =\n models.find(m => m.value === selectedModel)?.label ?? selectedModel;\n\n const visionScreenshotTooltip = useMemo(\n () => (\n <Fragment>\n {t('modelSelector.visionScreenshot.line1')}\n <br />\n {t('modelSelector.visionScreenshot.line2')}\n </Fragment>\n ),\n [t],\n );\n\n const toggle = (toggleRef: Ref<MenuToggleElement>) => (\n <SelectorToggle\n ref={toggleRef}\n onClick={() => setIsOpen(!isOpen)}\n isExpanded={isOpen}\n isDisabled={disabled}\n variant=\"plain\"\n aria-label={t('aria.chatbotSelector')}\n >\n {selectedModelLabel}\n <AngleDownIcon />\n </SelectorToggle>\n );\n\n const dropdown = (\n <StyledDropdown\n isOpen={isOpen && !disabled}\n onSelect={(_e, value) => {\n if (disabled) return;\n onSelect(value as string);\n setIsOpen(false);\n }}\n onOpenChange={open => setIsOpen(open)}\n popperProps={{ position: 'left' }}\n shouldFocusToggleOnSelect\n shouldFocusFirstItemOnOpen={false}\n toggle={toggle}\n isScrollable={models.length > 10}\n maxMenuHeight={models.length > 10 ? '240px' : undefined}\n >\n <DropdownList>\n {models.map(model => {\n const isSelected = selectedModel === model.value;\n return (\n <DropdownItem\n value={model.value}\n key={model.value}\n isSelected={isSelected}\n >\n <ModelItemContent>\n <ModelLabel title={model.label}>{model.label}</ModelLabel>\n {model.supportsVision ? (\n <VisionSlot className=\"lightspeed-model-vision-slot\">\n <Tooltip content={visionScreenshotTooltip}>\n <VisionIndicatorWrap\n aria-label={t(\n 'modelSelector.visionScreenshot.ariaLabel',\n )}\n onClick={event => event.stopPropagation()}\n onMouseDown={event => event.stopPropagation()}\n >\n <VisionIndicatorIcon aria-hidden />\n </VisionIndicatorWrap>\n </Tooltip>\n </VisionSlot>\n ) : (\n <VisionSlot\n className=\"lightspeed-model-vision-slot\"\n aria-hidden\n />\n )}\n <TickSlot\n className=\"lightspeed-model-tick-slot\"\n aria-hidden={!isSelected}\n >\n {isSelected ? <CheckIcon aria-hidden /> : null}\n </TickSlot>\n </ModelItemContent>\n </DropdownItem>\n );\n })}\n </DropdownList>\n </StyledDropdown>\n );\n\n if (disabled && disabledTooltip) {\n return (\n <Tooltip content={disabledTooltip}>\n <Typography component=\"span\">{dropdown}</Typography>\n </Tooltip>\n );\n }\n\n return dropdown;\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useMemo, Fragment } from 'react';
|
|
3
|
+
import { styled, keyframes } from '@mui/material/styles';
|
|
4
|
+
import { Tooltip, Label } from '@patternfly/react-core';
|
|
5
|
+
import { PauseIcon } from '@patternfly/react-icons';
|
|
6
|
+
import { useScreenContextLabelRevision } from '../hooks/useScreenContextLabelRevision.esm.js';
|
|
7
|
+
import { useTranslation } from '../hooks/useTranslation.esm.js';
|
|
8
|
+
import { useWindowLocation } from '../hooks/useWindowLocation.esm.js';
|
|
9
|
+
import { resolveScreenContextChipLabel, SOFTWARE_TEMPLATES_LIST_CHIP_LABEL, getScreenContextTooltipLine1Text, getScreenContextTooltipLine2Key } from '../utils/screen-context-utils.esm.js';
|
|
10
|
+
|
|
11
|
+
const CHIP_MAX_WIDTH_PX = 150;
|
|
12
|
+
const CHIP_HEIGHT_PX = 24;
|
|
13
|
+
const pulse = keyframes`
|
|
14
|
+
0% { opacity: 0.45; transform: scale(0.92); }
|
|
15
|
+
50% { opacity: 1; transform: scale(1); }
|
|
16
|
+
100% { opacity: 0.45; transform: scale(0.92); }
|
|
17
|
+
`;
|
|
18
|
+
const ChipWrap = styled("div")({
|
|
19
|
+
display: "inline-flex",
|
|
20
|
+
height: CHIP_HEIGHT_PX,
|
|
21
|
+
maxWidth: CHIP_MAX_WIDTH_PX,
|
|
22
|
+
minWidth: 0,
|
|
23
|
+
flexShrink: 0
|
|
24
|
+
});
|
|
25
|
+
const FixedSizeChipLabel = styled(Label)({
|
|
26
|
+
height: CHIP_HEIGHT_PX,
|
|
27
|
+
maxWidth: CHIP_MAX_WIDTH_PX,
|
|
28
|
+
width: "max-content",
|
|
29
|
+
boxSizing: "border-box",
|
|
30
|
+
display: "inline-flex",
|
|
31
|
+
alignItems: "center",
|
|
32
|
+
flexShrink: 0,
|
|
33
|
+
"--pf-v6-c-label--PaddingBlockStart": "0",
|
|
34
|
+
"--pf-v6-c-label--PaddingBlockEnd": "0",
|
|
35
|
+
"--pf-v6-c-label--MinWidth": "auto",
|
|
36
|
+
"& .pf-v6-c-label__content": {
|
|
37
|
+
maxWidth: "100%",
|
|
38
|
+
height: "100%",
|
|
39
|
+
minWidth: 0,
|
|
40
|
+
boxSizing: "border-box"
|
|
41
|
+
},
|
|
42
|
+
"& .pf-v6-c-label__text": {
|
|
43
|
+
overflow: "hidden",
|
|
44
|
+
textOverflow: "ellipsis",
|
|
45
|
+
whiteSpace: "nowrap",
|
|
46
|
+
minWidth: 0
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
const RecordingDot = styled("span")({
|
|
50
|
+
display: "inline-block",
|
|
51
|
+
width: 8,
|
|
52
|
+
height: 8,
|
|
53
|
+
borderRadius: "50%",
|
|
54
|
+
backgroundColor: "var(--pf-t--global--icon--color--status--danger--default)",
|
|
55
|
+
animation: `${pulse} 1.4s ease-in-out infinite`
|
|
56
|
+
});
|
|
57
|
+
const ChipText = styled("span")({
|
|
58
|
+
overflow: "hidden",
|
|
59
|
+
textOverflow: "ellipsis",
|
|
60
|
+
whiteSpace: "nowrap",
|
|
61
|
+
minWidth: 0
|
|
62
|
+
});
|
|
63
|
+
const LINE2_I18N = {
|
|
64
|
+
fullContext: "contextChip.tooltip.line2.fullContext",
|
|
65
|
+
adminLimited: "contextChip.tooltip.line2.adminLimited",
|
|
66
|
+
screenshotOnly: "contextChip.tooltip.line2.screenshotOnly",
|
|
67
|
+
domOffNoVision: "contextChip.tooltip.line2.domOffNoVision",
|
|
68
|
+
textOnlyNoVision: "contextChip.tooltip.line2.textOnlyNoVision",
|
|
69
|
+
textOnlyAdminScreenshotsOff: "contextChip.tooltip.line2.textOnlyAdminScreenshotsOff",
|
|
70
|
+
textOnlyCombined: "contextChip.tooltip.line2.textOnlyCombined"
|
|
71
|
+
};
|
|
72
|
+
const ScreenContextChip = ({
|
|
73
|
+
state,
|
|
74
|
+
chipLabel,
|
|
75
|
+
domEnabled,
|
|
76
|
+
screenshotsEnabled,
|
|
77
|
+
supportsVision,
|
|
78
|
+
onTogglePaused
|
|
79
|
+
}) => {
|
|
80
|
+
const { t } = useTranslation();
|
|
81
|
+
const { pathname, search } = useWindowLocation();
|
|
82
|
+
useScreenContextLabelRevision();
|
|
83
|
+
const { label: resolvedLabel, routeKind } = resolveScreenContextChipLabel({
|
|
84
|
+
pathname,
|
|
85
|
+
search
|
|
86
|
+
});
|
|
87
|
+
const label = chipLabel ?? resolvedLabel;
|
|
88
|
+
const displayLabel = label === SOFTWARE_TEMPLATES_LIST_CHIP_LABEL ? t("contextChip.label.softwareTemplates") : label;
|
|
89
|
+
const tooltipContent = useMemo(() => {
|
|
90
|
+
if (state === "unavailable") {
|
|
91
|
+
return t("contextChip.tooltip.unavailable");
|
|
92
|
+
}
|
|
93
|
+
if (state === "paused") {
|
|
94
|
+
return t("contextChip.tooltip.paused");
|
|
95
|
+
}
|
|
96
|
+
const line1 = getScreenContextTooltipLine1Text(
|
|
97
|
+
{
|
|
98
|
+
chipLabel: displayLabel,
|
|
99
|
+
routeKind,
|
|
100
|
+
pathname
|
|
101
|
+
},
|
|
102
|
+
(key, options) => t(key, options)
|
|
103
|
+
);
|
|
104
|
+
const line2Key = getScreenContextTooltipLine2Key({
|
|
105
|
+
domEnabled,
|
|
106
|
+
screenshotsEnabled,
|
|
107
|
+
supportsVision
|
|
108
|
+
});
|
|
109
|
+
const line2 = t(LINE2_I18N[line2Key], {});
|
|
110
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
111
|
+
line1,
|
|
112
|
+
/* @__PURE__ */ jsx("br", {}),
|
|
113
|
+
line2
|
|
114
|
+
] });
|
|
115
|
+
}, [
|
|
116
|
+
state,
|
|
117
|
+
displayLabel,
|
|
118
|
+
routeKind,
|
|
119
|
+
pathname,
|
|
120
|
+
domEnabled,
|
|
121
|
+
screenshotsEnabled,
|
|
122
|
+
supportsVision,
|
|
123
|
+
t
|
|
124
|
+
]);
|
|
125
|
+
if (state === "unavailable") {
|
|
126
|
+
return /* @__PURE__ */ jsx(ChipWrap, { className: "lightspeed-page-context-label lightspeed-page-context-label-unavailable", children: /* @__PURE__ */ jsx(Tooltip, { content: tooltipContent, children: /* @__PURE__ */ jsx(
|
|
127
|
+
FixedSizeChipLabel,
|
|
128
|
+
{
|
|
129
|
+
color: "grey",
|
|
130
|
+
variant: "outline",
|
|
131
|
+
isCompact: true,
|
|
132
|
+
className: "lightspeed-context-chip-unavailable-label",
|
|
133
|
+
children: /* @__PURE__ */ jsx(ChipText, { children: t("contextChip.label.unavailable") })
|
|
134
|
+
}
|
|
135
|
+
) }) });
|
|
136
|
+
}
|
|
137
|
+
if (state === "paused") {
|
|
138
|
+
return /* @__PURE__ */ jsx(ChipWrap, { className: "lightspeed-page-context-label lightspeed-page-context-label-paused", children: /* @__PURE__ */ jsx(Tooltip, { content: tooltipContent, children: /* @__PURE__ */ jsx(
|
|
139
|
+
FixedSizeChipLabel,
|
|
140
|
+
{
|
|
141
|
+
color: "grey",
|
|
142
|
+
variant: "outline",
|
|
143
|
+
isCompact: true,
|
|
144
|
+
isClickable: true,
|
|
145
|
+
onClick: onTogglePaused,
|
|
146
|
+
icon: /* @__PURE__ */ jsx(PauseIcon, { "aria-hidden": true }),
|
|
147
|
+
className: "lightspeed-page-context-chip-clickable lightspeed-context-chip-paused-label",
|
|
148
|
+
"aria-label": t("contextChip.aria.resume"),
|
|
149
|
+
children: /* @__PURE__ */ jsx(ChipText, { children: t("contextChip.label.paused") })
|
|
150
|
+
}
|
|
151
|
+
) }) });
|
|
152
|
+
}
|
|
153
|
+
return /* @__PURE__ */ jsx(ChipWrap, { className: "lightspeed-page-context-label lightspeed-page-context-label-recording lightspeed-page-context-chip-clickable", children: /* @__PURE__ */ jsx(Tooltip, { content: tooltipContent, children: /* @__PURE__ */ jsx(
|
|
154
|
+
FixedSizeChipLabel,
|
|
155
|
+
{
|
|
156
|
+
color: "red",
|
|
157
|
+
variant: "outline",
|
|
158
|
+
isCompact: true,
|
|
159
|
+
isClickable: true,
|
|
160
|
+
onClick: onTogglePaused,
|
|
161
|
+
icon: /* @__PURE__ */ jsx(RecordingDot, { "aria-hidden": true }),
|
|
162
|
+
className: "lightspeed-context-chip-recording-label",
|
|
163
|
+
"aria-label": t("contextChip.aria.pause", {
|
|
164
|
+
label: displayLabel
|
|
165
|
+
}),
|
|
166
|
+
children: /* @__PURE__ */ jsx(ChipText, { children: displayLabel })
|
|
167
|
+
}
|
|
168
|
+
) }) });
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
export { ScreenContextChip };
|
|
172
|
+
//# sourceMappingURL=ScreenContextChip.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenContextChip.esm.js","sources":["../../src/components/ScreenContextChip.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 { Fragment, useMemo } from 'react';\n\nimport { keyframes, styled } from '@mui/material/styles';\nimport { Label, Tooltip } from '@patternfly/react-core';\nimport { PauseIcon } from '@patternfly/react-icons';\n\nimport { useScreenContextLabelRevision } from '../hooks/useScreenContextLabelRevision';\nimport { useTranslation } from '../hooks/useTranslation';\nimport { useWindowLocation } from '../hooks/useWindowLocation';\nimport {\n getScreenContextTooltipLine1Text,\n getScreenContextTooltipLine2Key,\n resolveScreenContextChipLabel,\n ScreenContextTooltipLine2Key,\n SOFTWARE_TEMPLATES_LIST_CHIP_LABEL,\n} from '../utils/screen-context-utils';\n\nexport type ScreenContextChipState = 'recording' | 'paused' | 'unavailable';\n\n/** Prototype max width; shorter labels shrink to content. */\nconst CHIP_MAX_WIDTH_PX = 150;\nconst CHIP_HEIGHT_PX = 24;\n\nconst pulse = keyframes`\n 0% { opacity: 0.45; transform: scale(0.92); }\n 50% { opacity: 1; transform: scale(1); }\n 100% { opacity: 0.45; transform: scale(0.92); }\n`;\n\nconst ChipWrap = styled('div')({\n display: 'inline-flex',\n height: CHIP_HEIGHT_PX,\n maxWidth: CHIP_MAX_WIDTH_PX,\n minWidth: 0,\n flexShrink: 0,\n});\n\nconst FixedSizeChipLabel = styled(Label)({\n height: CHIP_HEIGHT_PX,\n maxWidth: CHIP_MAX_WIDTH_PX,\n width: 'max-content',\n boxSizing: 'border-box',\n display: 'inline-flex',\n alignItems: 'center',\n flexShrink: 0,\n '--pf-v6-c-label--PaddingBlockStart': '0',\n '--pf-v6-c-label--PaddingBlockEnd': '0',\n '--pf-v6-c-label--MinWidth': 'auto',\n '& .pf-v6-c-label__content': {\n maxWidth: '100%',\n height: '100%',\n minWidth: 0,\n boxSizing: 'border-box',\n },\n '& .pf-v6-c-label__text': {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n minWidth: 0,\n },\n});\n\nconst RecordingDot = styled('span')({\n display: 'inline-block',\n width: 8,\n height: 8,\n borderRadius: '50%',\n backgroundColor: 'var(--pf-t--global--icon--color--status--danger--default)',\n animation: `${pulse} 1.4s ease-in-out infinite`,\n});\n\nconst ChipText = styled('span')({\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n minWidth: 0,\n});\n\nconst LINE2_I18N: Record<ScreenContextTooltipLine2Key, string> = {\n fullContext: 'contextChip.tooltip.line2.fullContext',\n adminLimited: 'contextChip.tooltip.line2.adminLimited',\n screenshotOnly: 'contextChip.tooltip.line2.screenshotOnly',\n domOffNoVision: 'contextChip.tooltip.line2.domOffNoVision',\n textOnlyNoVision: 'contextChip.tooltip.line2.textOnlyNoVision',\n textOnlyAdminScreenshotsOff:\n 'contextChip.tooltip.line2.textOnlyAdminScreenshotsOff',\n textOnlyCombined: 'contextChip.tooltip.line2.textOnlyCombined',\n};\n\nexport type ScreenContextChipProps = {\n state: ScreenContextChipState;\n chipLabel?: string;\n domEnabled: boolean;\n screenshotsEnabled: boolean;\n supportsVision: boolean;\n onTogglePaused?: () => void;\n};\n\nexport const ScreenContextChip = ({\n state,\n chipLabel,\n domEnabled,\n screenshotsEnabled,\n supportsVision,\n onTogglePaused,\n}: ScreenContextChipProps) => {\n const { t } = useTranslation();\n const { pathname, search } = useWindowLocation();\n useScreenContextLabelRevision();\n\n const { label: resolvedLabel, routeKind } = resolveScreenContextChipLabel({\n pathname,\n search,\n });\n\n const label = chipLabel ?? resolvedLabel;\n const displayLabel =\n label === SOFTWARE_TEMPLATES_LIST_CHIP_LABEL\n ? t('contextChip.label.softwareTemplates')\n : label;\n\n const tooltipContent = useMemo(() => {\n if (state === 'unavailable') {\n return t('contextChip.tooltip.unavailable');\n }\n if (state === 'paused') {\n return t('contextChip.tooltip.paused');\n }\n\n const line1 = getScreenContextTooltipLine1Text(\n {\n chipLabel: displayLabel,\n routeKind,\n pathname,\n },\n (key, options) => t(key as any, options as any),\n );\n const line2Key = getScreenContextTooltipLine2Key({\n domEnabled,\n screenshotsEnabled,\n supportsVision,\n });\n const line2 = t(LINE2_I18N[line2Key] as any, {} as any);\n return (\n <Fragment>\n {line1}\n <br />\n {line2}\n </Fragment>\n );\n }, [\n state,\n displayLabel,\n routeKind,\n pathname,\n domEnabled,\n screenshotsEnabled,\n supportsVision,\n t,\n ]);\n\n if (state === 'unavailable') {\n return (\n <ChipWrap className=\"lightspeed-page-context-label lightspeed-page-context-label-unavailable\">\n <Tooltip content={tooltipContent}>\n <FixedSizeChipLabel\n color=\"grey\"\n variant=\"outline\"\n isCompact\n className=\"lightspeed-context-chip-unavailable-label\"\n >\n <ChipText>{t('contextChip.label.unavailable')}</ChipText>\n </FixedSizeChipLabel>\n </Tooltip>\n </ChipWrap>\n );\n }\n\n if (state === 'paused') {\n return (\n <ChipWrap className=\"lightspeed-page-context-label lightspeed-page-context-label-paused\">\n <Tooltip content={tooltipContent}>\n <FixedSizeChipLabel\n color=\"grey\"\n variant=\"outline\"\n isCompact\n isClickable\n onClick={onTogglePaused}\n icon={<PauseIcon aria-hidden />}\n className=\"lightspeed-page-context-chip-clickable lightspeed-context-chip-paused-label\"\n aria-label={t('contextChip.aria.resume')}\n >\n <ChipText>{t('contextChip.label.paused')}</ChipText>\n </FixedSizeChipLabel>\n </Tooltip>\n </ChipWrap>\n );\n }\n\n return (\n <ChipWrap className=\"lightspeed-page-context-label lightspeed-page-context-label-recording lightspeed-page-context-chip-clickable\">\n <Tooltip content={tooltipContent}>\n <FixedSizeChipLabel\n color=\"red\"\n variant=\"outline\"\n isCompact\n isClickable\n onClick={onTogglePaused}\n icon={<RecordingDot aria-hidden />}\n className=\"lightspeed-context-chip-recording-label\"\n aria-label={t('contextChip.aria.pause' as any, {\n label: displayLabel,\n })}\n >\n <ChipText>{displayLabel}</ChipText>\n </FixedSizeChipLabel>\n </Tooltip>\n </ChipWrap>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { styled } from '@mui/material/styles';
|
|
3
|
-
import {
|
|
3
|
+
import { AlertVariant, AlertActionCloseButton, AlertGroup, Alert } from '@patternfly/react-core';
|
|
4
4
|
|
|
5
5
|
const ToastAlerts = styled(AlertGroup)(() => ({
|
|
6
6
|
"--pf-v6-c-alert-group--m-toast--MaxWidth": "350px !important"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"criticalFabBundle.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
let criticalFabBundlePromise;
|
|
2
|
+
const loadCriticalFabBundle = () => {
|
|
3
|
+
criticalFabBundlePromise ??= import('./criticalFabBundle.esm.js').catch((error) => {
|
|
4
|
+
criticalFabBundlePromise = void 0;
|
|
5
|
+
throw error;
|
|
6
|
+
});
|
|
7
|
+
return criticalFabBundlePromise;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export { loadCriticalFabBundle };
|
|
11
|
+
//# sourceMappingURL=loaders.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loaders.esm.js","sources":["../../src/components/loaders.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ntype CriticalFabBundle = typeof import('./criticalFabBundle');\n\nlet criticalFabBundlePromise: Promise<CriticalFabBundle> | undefined;\n\nexport const loadCriticalFabBundle = (): Promise<CriticalFabBundle> => {\n criticalFabBundlePromise ??= import('./criticalFabBundle').catch(error => {\n criticalFabBundlePromise = undefined;\n throw error;\n });\n return criticalFabBundlePromise;\n};\n"],"names":[],"mappings":"AAkBA,IAAI,wBAAA;AAEG,MAAM,wBAAwB,MAAkC;AACrE,EAAA,wBAAA,KAA6B,OAAO,4BAAqB,CAAA,CAAE,KAAA,CAAM,CAAA,KAAA,KAAS;AACxE,IAAA,wBAAA,GAA2B,MAAA;AAC3B,IAAA,MAAM,KAAA;AAAA,EACR,CAAC,CAAA;AACD,EAAA,OAAO,wBAAA;AACT;;;;"}
|
|
@@ -10,9 +10,9 @@ import DialogTitle from '@mui/material/DialogTitle';
|
|
|
10
10
|
import IconButton from '@mui/material/IconButton';
|
|
11
11
|
import { styled } from '@mui/material/styles';
|
|
12
12
|
import Typography from '@mui/material/Typography';
|
|
13
|
-
import {
|
|
13
|
+
import { MultipleFileUpload, MultipleFileUploadMain, Tooltip, Alert, MultipleFileUploadContext } from '@patternfly/react-core';
|
|
14
14
|
import { UploadIcon } from '@patternfly/react-icons';
|
|
15
|
-
import {
|
|
15
|
+
import { NOTEBOOK_MAX_FILES, NOTEBOOK_EXTENSION_TO_FILE_TYPE } from '../../const.esm.js';
|
|
16
16
|
import { useUploadDocument } from '../../hooks/notebooks/useUploadDocument.esm.js';
|
|
17
17
|
import { useTranslation } from '../../hooks/useTranslation.esm.js';
|
|
18
18
|
import { runFileUploads } from '../../utils/notebook-upload-runner.esm.js';
|
|
@@ -2,7 +2,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { useState, useRef, useCallback } from 'react';
|
|
3
3
|
import { styled } from '@mui/material/styles';
|
|
4
4
|
import Typography from '@mui/material/Typography';
|
|
5
|
-
import {
|
|
5
|
+
import { Tooltip, HelperText, HelperTextItem, Spinner, DropdownList, DropdownItem, TextInput, Button, Dropdown, MenuToggle } from '@patternfly/react-core';
|
|
6
6
|
import { AddCircleOIcon, PenIcon, TrashIcon, EllipsisVIcon } from '@patternfly/react-icons';
|
|
7
7
|
import { NOTEBOOK_MAX_TITLE_LENGTH, NOTEBOOK_MAX_FILES } from '../../const.esm.js';
|
|
8
8
|
import { useInlineEdit } from '../../hooks/notebooks/useInlineEdit.esm.js';
|
|
@@ -2,7 +2,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { useCallback } from 'react';
|
|
3
3
|
import { styled } from '@mui/material/styles';
|
|
4
4
|
import Typography from '@mui/material/Typography';
|
|
5
|
-
import { Card, CardHeader,
|
|
5
|
+
import { TextInput, Card, CardHeader, CardTitle, Dropdown, DropdownList, DropdownItem, MenuToggle, CardBody } from '@patternfly/react-core';
|
|
6
6
|
import { CatalogIcon, PenIcon, TrashIcon, EllipsisVIcon } from '@patternfly/react-icons';
|
|
7
7
|
import { useInlineEdit } from '../../hooks/notebooks/useInlineEdit.esm.js';
|
|
8
8
|
import { formatUpdatedLabel } from '../../utils/notebooks-utils.esm.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import {
|
|
2
|
+
import { useContext, createContext, useCallback, useSyncExternalStore, useRef, useEffect } from 'react';
|
|
3
3
|
import { createNotebookStreamStore } from './notebookStreamStore.esm.js';
|
|
4
4
|
|
|
5
5
|
const NotebookStreamContext = createContext(null);
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { useState, useCallback, useEffect, useRef } from 'react';
|
|
3
3
|
import { useApi, configApiRef } from '@backstage/core-plugin-api';
|
|
4
|
-
import {
|
|
4
|
+
import { useTheme, styled } from '@mui/material/styles';
|
|
5
5
|
import Typography from '@mui/material/Typography';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { MessageBar, ChatbotFooter, ChatbotContent } from '@patternfly/chatbot';
|
|
7
|
+
import { DrawerPanelContent, Tooltip, Button, Drawer, DrawerContent, DrawerContentBody, Alert } from '@patternfly/react-core';
|
|
8
8
|
import { TimesIcon, PlusIcon } from '@patternfly/react-icons';
|
|
9
9
|
import { useQueryClient } from '@tanstack/react-query';
|
|
10
10
|
import { notebooksApiRef } from '../../api/notebooksApi.esm.js';
|
|
@@ -8,7 +8,7 @@ import DialogTitle from '@mui/material/DialogTitle';
|
|
|
8
8
|
import IconButton from '@mui/material/IconButton';
|
|
9
9
|
import { styled } from '@mui/material/styles';
|
|
10
10
|
import Typography from '@mui/material/Typography';
|
|
11
|
-
import {
|
|
11
|
+
import { Button, Alert } from '@patternfly/react-core';
|
|
12
12
|
import { ExclamationTriangleIcon } from '@patternfly/react-icons';
|
|
13
13
|
import { useTranslation } from '../../hooks/useTranslation.esm.js';
|
|
14
14
|
import { getScopedDialogProps } from '../../utils/scoped-dialog-utils.esm.js';
|
|
@@ -2,7 +2,7 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
|
2
2
|
import Box from '@mui/material/Box';
|
|
3
3
|
import { styled } from '@mui/material/styles';
|
|
4
4
|
import Typography from '@mui/material/Typography';
|
|
5
|
-
import {
|
|
5
|
+
import { Spinner, Button } from '@patternfly/react-core';
|
|
6
6
|
import { AddCircleOIcon } from '@patternfly/react-icons';
|
|
7
7
|
import { CatalogIcon } from '@patternfly/react-icons/dist/esm/icons';
|
|
8
8
|
import { useTranslation } from '../../hooks/useTranslation.esm.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TEMP_CONVERSATION_ID } from '../../const.esm.js';
|
|
2
2
|
import { setSharedToolCallsCache, migrateSharedToolCallsCacheSessionPrefixToConversation, clearSharedToolCallsCacheSessionPrefix } from '../../hooks/toolCallsCacheStore.esm.js';
|
|
3
|
-
import { normalizeChatUserInput, createUserMessage, getTimestamp, createBotMessage, transformDocumentsToSources } from '../../utils/lightspeed-chatbox-utils.esm.js';
|
|
3
|
+
import { normalizeChatUserInput, createUserMessage, getTimestamp, createBotMessage, transformDocumentsToSources } from '../../utils/lightspeed-chatbox-message-utils.esm.js';
|
|
4
4
|
import queryClient from '../../utils/queryClient.esm.js';
|
|
5
5
|
import { createTempToolCallsCacheSessionPrefix, parseSSEBuffer, parseToolCallFromEvent, toolCallIdKey, normalizeToolCalls, parseToolResultFromEvent, applyToolResultToToolCalls } from '../../utils/stream-event-helpers.esm.js';
|
|
6
6
|
|