@red-hat-developer-hub/backstage-plugin-lightspeed 2.6.2 → 2.6.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"LightspeedChatBoxHeader.esm.js","sources":["../../src/components/LightspeedChatBoxHeader.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, useState } from 'react';\n\nimport { createStyles, makeStyles } from '@material-ui/core';\nimport ToggleOffOutlinedIcon from '@mui/icons-material/ToggleOffOutlined';\nimport ToggleOnOutlinedIcon from '@mui/icons-material/ToggleOnOutlined';\nimport Divider from '@mui/material/Divider';\nimport {\n ChatbotDisplayMode,\n ChatbotHeaderActions,\n ChatbotHeaderOptionsDropdown,\n} from '@patternfly/chatbot';\nimport {\n Dropdown,\n DropdownGroup,\n DropdownItem,\n DropdownList,\n MenuToggle,\n MenuToggleElement,\n} from '@patternfly/react-core';\nimport {\n ExpandIcon,\n OpenDrawerRightIcon,\n OutlinedWindowRestoreIcon,\n} from '@patternfly/react-icons';\n\nimport { useTranslation } from '../hooks/useTranslation';\nimport { McpSettingsIcon } from './McpSettingsIcon';\n\ntype LightspeedChatBoxHeaderProps = {\n displayMode: ChatbotDisplayMode;\n selectedModel: string;\n handleSelectedModel: (item: string) => void;\n models: { label: string; value: string; provider: string }[];\n isPinningChatsEnabled: boolean;\n onPinnedChatsToggle: (state: boolean) => void;\n onMcpSettingsClick: () => void;\n isModelSelectorDisabled?: boolean;\n hideModelSelector?: boolean;\n setDisplayMode: (mode: ChatbotDisplayMode) => void;\n};\n\nconst useStyles = makeStyles(theme =>\n createStyles({\n dropdown: {\n '& ul, & li': {\n padding: 0,\n margin: 0,\n },\n },\n header: {\n backgroundColor: theme.palette.action.disabled,\n },\n optionsToggle: {\n '& svg': {\n transform: 'none !important',\n },\n },\n groupTitle: {\n fontWeight: 'bold',\n },\n }),\n);\n\nexport const LightspeedChatBoxHeader = ({\n selectedModel,\n displayMode,\n handleSelectedModel,\n models,\n isPinningChatsEnabled,\n onPinnedChatsToggle,\n onMcpSettingsClick,\n isModelSelectorDisabled = false,\n hideModelSelector = false,\n setDisplayMode,\n}: LightspeedChatBoxHeaderProps) => {\n const [isOptionsMenuOpen, setIsOptionsMenuOpen] = useState(false);\n const { t } = useTranslation();\n\n const styles = useStyles();\n\n const maxLabelLength = Math.max(\n ...models.map(m => m.label.length),\n selectedModel.length,\n 1,\n );\n const toggleMinWidth = `${maxLabelLength + 4}ch`;\n\n const toggle = (toggleRef: Ref<MenuToggleElement>) => (\n <MenuToggle\n className={isModelSelectorDisabled ? styles.header : ''}\n variant=\"secondary\"\n aria-label={t('aria.chatbotSelector')}\n ref={toggleRef}\n isExpanded={isOptionsMenuOpen}\n isDisabled={isModelSelectorDisabled}\n onClick={() => setIsOptionsMenuOpen(!isOptionsMenuOpen)}\n style={{ minWidth: toggleMinWidth }}\n >\n {selectedModel}\n </MenuToggle>\n );\n\n const handlePinningChatsToggle = (state: boolean) => {\n onPinnedChatsToggle(state);\n };\n\n const handleDockedToWindow = () => {\n setDisplayMode(ChatbotDisplayMode.docked);\n };\n\n const handleFullscreen = () => {\n setDisplayMode(ChatbotDisplayMode.embedded);\n };\n\n const handleOverlay = () => {\n setDisplayMode(ChatbotDisplayMode.default);\n };\n\n const isOverlayMode = displayMode === ChatbotDisplayMode.default;\n const scrollThreshold = isOverlayMode ? 8 : 10;\n const isModelDropdownScrollable = models.length > scrollThreshold;\n\n return (\n <ChatbotHeaderActions>\n {!hideModelSelector && (\n <Dropdown\n className={styles.dropdown}\n isOpen={isOptionsMenuOpen}\n onSelect={(_e, value) => {\n handleSelectedModel(value as string);\n setIsOptionsMenuOpen(false);\n }}\n onOpenChange={isOpen => setIsOptionsMenuOpen(isOpen)}\n popperProps={{ position: 'right' }}\n shouldFocusToggleOnSelect\n shouldFocusFirstItemOnOpen={false}\n toggle={toggle}\n isScrollable={isModelDropdownScrollable}\n maxMenuHeight={isModelDropdownScrollable ? '240px' : undefined}\n >\n <DropdownList>\n {models.map(model => (\n <DropdownGroup className={styles.groupTitle} key={model.label}>\n <DropdownItem\n value={model.value}\n key={model.value}\n isSelected={selectedModel === model.value}\n >\n {model.label}\n </DropdownItem>\n </DropdownGroup>\n ))}\n </DropdownList>\n </Dropdown>\n )}\n <ChatbotHeaderOptionsDropdown\n isCompact\n toggleProps={{\n 'aria-label': t('aria.settings.label'),\n className: styles.optionsToggle,\n }}\n tooltipProps={{\n content: t('tooltip.settings'),\n }}\n >\n <DropdownGroup>\n <DropdownList>\n <DropdownItem key=\"displayModeLabel\" isDisabled>\n {t('settings.displayMode.label')}\n </DropdownItem>\n <DropdownItem\n value={ChatbotDisplayMode.default}\n key=\"switchDisplayOverlay\"\n icon={<OutlinedWindowRestoreIcon />}\n onClick={handleOverlay}\n isSelected={displayMode === ChatbotDisplayMode.default}\n >\n {t('settings.displayMode.overlay')}\n </DropdownItem>\n <DropdownItem\n value={ChatbotDisplayMode.docked}\n key=\"switchDisplayDock\"\n icon={<OpenDrawerRightIcon />}\n onClick={handleDockedToWindow}\n isSelected={displayMode === ChatbotDisplayMode.docked}\n >\n {t('settings.displayMode.docked')}\n </DropdownItem>\n <DropdownItem\n value={ChatbotDisplayMode.embedded}\n key=\"switchDisplayFullscreen\"\n icon={<ExpandIcon />}\n onClick={handleFullscreen}\n isSelected={displayMode === ChatbotDisplayMode.embedded}\n >\n {t('settings.displayMode.fullscreen')}\n </DropdownItem>\n </DropdownList>\n </DropdownGroup>\n <Divider />\n <DropdownGroup>\n <DropdownList>\n {isPinningChatsEnabled ? (\n <DropdownItem\n value=\"disablePinningChats\"\n key=\"disablePinningChat\"\n icon={<ToggleOnOutlinedIcon sx={{ marginTop: '8px' }} />}\n description={t('settings.pinned.enabled.description')}\n onClick={() => handlePinningChatsToggle(false)}\n >\n {t('settings.pinned.disable')}\n </DropdownItem>\n ) : (\n <DropdownItem\n value=\"enablePinningChats\"\n key=\"enablePinningChats\"\n icon={<ToggleOffOutlinedIcon sx={{ marginTop: '8px' }} />}\n description={t('settings.pinned.disabled.description')}\n onClick={() => handlePinningChatsToggle(true)}\n >\n {t('settings.pinned.enable')}\n </DropdownItem>\n )}\n <DropdownItem\n value=\"mcpSettings\"\n key=\"mcpSettings\"\n icon={<McpSettingsIcon />}\n onClick={onMcpSettingsClick}\n >\n {t('settings.mcp.label')}\n </DropdownItem>\n </DropdownList>\n </DropdownGroup>\n </ChatbotHeaderOptionsDropdown>\n </ChatbotHeaderActions>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LightspeedChatBoxHeader.esm.js","sources":["../../src/components/LightspeedChatBoxHeader.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, useState } from 'react';\n\nimport { createStyles, makeStyles } from '@material-ui/core';\nimport ToggleOffOutlinedIcon from '@mui/icons-material/ToggleOffOutlined';\nimport ToggleOnOutlinedIcon from '@mui/icons-material/ToggleOnOutlined';\nimport Divider from '@mui/material/Divider';\nimport {\n ChatbotDisplayMode,\n ChatbotHeaderActions,\n ChatbotHeaderOptionsDropdown,\n} from '@patternfly/chatbot';\nimport {\n Dropdown,\n DropdownGroup,\n DropdownItem,\n DropdownList,\n MenuToggle,\n MenuToggleElement,\n} from '@patternfly/react-core';\nimport {\n ExpandIcon,\n OpenDrawerRightIcon,\n OutlinedWindowRestoreIcon,\n} from '@patternfly/react-icons';\n\nimport { useTranslation } from '../hooks/useTranslation';\nimport { McpSettingsIcon } from './McpSettingsIcon';\n\ntype LightspeedChatBoxHeaderProps = {\n displayMode: ChatbotDisplayMode;\n selectedModel: string;\n handleSelectedModel: (item: string) => void;\n models: { label: string; value: string; provider: string }[];\n isPinningChatsEnabled: boolean;\n onPinnedChatsToggle: (state: boolean) => void;\n onMcpSettingsClick: () => void;\n isModelSelectorDisabled?: boolean;\n hideModelSelector?: boolean;\n /** When false, omits pinned-chats and MCP entries (Chat tab only). */\n showChatTabOptions?: boolean;\n setDisplayMode: (mode: ChatbotDisplayMode) => void;\n};\n\nconst useStyles = makeStyles(theme =>\n createStyles({\n dropdown: {\n '& ul, & li': {\n padding: 0,\n margin: 0,\n },\n },\n header: {\n backgroundColor: theme.palette.action.disabled,\n },\n optionsToggle: {\n '& svg': {\n transform: 'none !important',\n },\n },\n groupTitle: {\n fontWeight: 'bold',\n },\n }),\n);\n\nexport const LightspeedChatBoxHeader = ({\n selectedModel,\n displayMode,\n handleSelectedModel,\n models,\n isPinningChatsEnabled,\n onPinnedChatsToggle,\n onMcpSettingsClick,\n isModelSelectorDisabled = false,\n hideModelSelector = false,\n showChatTabOptions = true,\n setDisplayMode,\n}: LightspeedChatBoxHeaderProps) => {\n const [isOptionsMenuOpen, setIsOptionsMenuOpen] = useState(false);\n const { t } = useTranslation();\n\n const styles = useStyles();\n\n const maxLabelLength = Math.max(\n ...models.map(m => m.label.length),\n selectedModel.length,\n 1,\n );\n const toggleMinWidth = `${maxLabelLength + 4}ch`;\n\n const toggle = (toggleRef: Ref<MenuToggleElement>) => (\n <MenuToggle\n className={isModelSelectorDisabled ? styles.header : ''}\n variant=\"secondary\"\n aria-label={t('aria.chatbotSelector')}\n ref={toggleRef}\n isExpanded={isOptionsMenuOpen}\n isDisabled={isModelSelectorDisabled}\n onClick={() => setIsOptionsMenuOpen(!isOptionsMenuOpen)}\n style={{ minWidth: toggleMinWidth }}\n >\n {selectedModel}\n </MenuToggle>\n );\n\n const handlePinningChatsToggle = (state: boolean) => {\n onPinnedChatsToggle(state);\n };\n\n const handleDockedToWindow = () => {\n setDisplayMode(ChatbotDisplayMode.docked);\n };\n\n const handleFullscreen = () => {\n setDisplayMode(ChatbotDisplayMode.embedded);\n };\n\n const handleOverlay = () => {\n setDisplayMode(ChatbotDisplayMode.default);\n };\n\n const isOverlayMode = displayMode === ChatbotDisplayMode.default;\n const scrollThreshold = isOverlayMode ? 8 : 10;\n const isModelDropdownScrollable = models.length > scrollThreshold;\n\n return (\n <ChatbotHeaderActions>\n {!hideModelSelector && (\n <Dropdown\n className={styles.dropdown}\n isOpen={isOptionsMenuOpen}\n onSelect={(_e, value) => {\n handleSelectedModel(value as string);\n setIsOptionsMenuOpen(false);\n }}\n onOpenChange={isOpen => setIsOptionsMenuOpen(isOpen)}\n popperProps={{ position: 'right' }}\n shouldFocusToggleOnSelect\n shouldFocusFirstItemOnOpen={false}\n toggle={toggle}\n isScrollable={isModelDropdownScrollable}\n maxMenuHeight={isModelDropdownScrollable ? '240px' : undefined}\n >\n <DropdownList>\n {models.map(model => (\n <DropdownGroup className={styles.groupTitle} key={model.label}>\n <DropdownItem\n value={model.value}\n key={model.value}\n isSelected={selectedModel === model.value}\n >\n {model.label}\n </DropdownItem>\n </DropdownGroup>\n ))}\n </DropdownList>\n </Dropdown>\n )}\n <ChatbotHeaderOptionsDropdown\n isCompact\n toggleProps={{\n 'aria-label': t('aria.settings.label'),\n className: styles.optionsToggle,\n }}\n tooltipProps={{\n content: t('tooltip.settings'),\n }}\n >\n <DropdownGroup>\n <DropdownList>\n <DropdownItem key=\"displayModeLabel\" isDisabled>\n {t('settings.displayMode.label')}\n </DropdownItem>\n <DropdownItem\n value={ChatbotDisplayMode.default}\n key=\"switchDisplayOverlay\"\n icon={<OutlinedWindowRestoreIcon />}\n onClick={handleOverlay}\n isSelected={displayMode === ChatbotDisplayMode.default}\n >\n {t('settings.displayMode.overlay')}\n </DropdownItem>\n <DropdownItem\n value={ChatbotDisplayMode.docked}\n key=\"switchDisplayDock\"\n icon={<OpenDrawerRightIcon />}\n onClick={handleDockedToWindow}\n isSelected={displayMode === ChatbotDisplayMode.docked}\n >\n {t('settings.displayMode.docked')}\n </DropdownItem>\n <DropdownItem\n value={ChatbotDisplayMode.embedded}\n key=\"switchDisplayFullscreen\"\n icon={<ExpandIcon />}\n onClick={handleFullscreen}\n isSelected={displayMode === ChatbotDisplayMode.embedded}\n >\n {t('settings.displayMode.fullscreen')}\n </DropdownItem>\n </DropdownList>\n </DropdownGroup>\n {showChatTabOptions && (\n <>\n <Divider />\n <DropdownGroup>\n <DropdownList>\n {isPinningChatsEnabled ? (\n <DropdownItem\n value=\"disablePinningChats\"\n key=\"disablePinningChat\"\n icon={<ToggleOnOutlinedIcon sx={{ marginTop: '8px' }} />}\n description={t('settings.pinned.enabled.description')}\n onClick={() => handlePinningChatsToggle(false)}\n >\n {t('settings.pinned.disable')}\n </DropdownItem>\n ) : (\n <DropdownItem\n value=\"enablePinningChats\"\n key=\"enablePinningChats\"\n icon={<ToggleOffOutlinedIcon sx={{ marginTop: '8px' }} />}\n description={t('settings.pinned.disabled.description')}\n onClick={() => handlePinningChatsToggle(true)}\n >\n {t('settings.pinned.enable')}\n </DropdownItem>\n )}\n <DropdownItem\n value=\"mcpSettings\"\n key=\"mcpSettings\"\n icon={<McpSettingsIcon />}\n onClick={onMcpSettingsClick}\n >\n {t('settings.mcp.label')}\n </DropdownItem>\n </DropdownList>\n </DropdownGroup>\n </>\n )}\n </ChatbotHeaderOptionsDropdown>\n </ChatbotHeaderActions>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LightspeedDrawerContext.esm.js","sources":["../../src/components/LightspeedDrawerContext.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 { createContext } from 'react';\n\nimport { ChatbotDisplayMode } from '@patternfly/chatbot';\n\nimport { FileContent } from '../types';\n\n/**\n * Type for LightspeedDrawerContext\n *\n * @public\n */\nexport interface LightspeedDrawerContextType {\n /**\n * Whether the chatbot is active\n */\n isChatbotActive: boolean;\n /**\n * Toggle the chatbot open/closed\n */\n toggleChatbot: () => void;\n /**\n * The current display mode\n */\n displayMode: ChatbotDisplayMode;\n /**\n * Set the display mode (overlay, docked, or fullscreen/embedded)\n */\n setDisplayMode: (mode: ChatbotDisplayMode) => void;\n /**\n * The drawer width (for docked mode)\n */\n drawerWidth: number;\n /**\n * The function for setting the drawer width\n */\n setDrawerWidth: React.Dispatch<React.SetStateAction<number>>;\n /**\n * The current conversation ID\n */\n currentConversationId?: string;\n /**\n * Set the current conversation ID and update the route if in embedded mode\n * Pass undefined to clear the conversation (example: for new chat)\n */\n setCurrentConversationId: (id: string | undefined) => void;\n /**\n * The message in the chat input box\n * Used to preserve input content when switching between display modes\n */\n draftMessage: string;\n /**\n * To save the input message as a draft when switching modes\n */\n setDraftMessage: (message: string) => void;\n /**\n * The file attachments in the chat input\n * Used to preserve file attachments when switching between display modes\n */\n draftFileContents: FileContent[];\n /**\n * To save file attachments as a draft when switching modes\n */\n setDraftFileContents: (files: FileContent[]) => void;\n /**\n * @internal After leaving fullscreen for overlay/docked, the next overlay/docked chat\n * mount should seed the thread from currentConversationId (or TEMP) instead of storage\n * lastOpened. Returns true at most once per handoff.\n */\n consumePendingOverlayThreadHandoff?: () => boolean;\n}\n\n/**\n * @public\n */\nexport const LightspeedDrawerContext = createContext<\n LightspeedDrawerContextType | undefined\n>(undefined);\n"],"names":[],"mappings":";;AA0FO,MAAM,uBAAA,GAA0B,cAErC,MAAS;;;;"}
1
+ {"version":3,"file":"LightspeedDrawerContext.esm.js","sources":["../../src/components/LightspeedDrawerContext.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 { createContext } from 'react';\n\nimport { ChatbotDisplayMode } from '@patternfly/chatbot';\n\nimport { FileContent } from '../types';\n\n/**\n * When switching to fullscreen (embedded), open the notebooks list or a specific session.\n *\n * @public\n */\nexport type LightspeedEmbeddedNotebooksTarget =\n | 'notebooks'\n | { notebookSessionId: string };\n\n/**\n * Type for LightspeedDrawerContext\n *\n * @public\n */\nexport interface LightspeedDrawerContextType {\n /**\n * Whether the chatbot is active\n */\n isChatbotActive: boolean;\n /**\n * Toggle the chatbot open/closed\n */\n toggleChatbot: () => void;\n /**\n * The current display mode\n */\n displayMode: ChatbotDisplayMode;\n /**\n * Set the display mode (overlay, docked, or fullscreen/embedded).\n * When entering embedded mode, optional `embeddedNotebooks` navigates to\n * `/lightspeed/notebooks` (or a session URL) instead of the chat route.\n * Leaving embedded for overlay or docked resets the shell tab to Chat\n * (Notebooks is only available in fullscreen).\n */\n setDisplayMode: (\n mode: ChatbotDisplayMode,\n conversationIdParam?: string,\n embeddedNotebooks?: LightspeedEmbeddedNotebooksTarget,\n ) => void;\n /**\n * The drawer width (for docked mode)\n */\n drawerWidth: number;\n /**\n * The function for setting the drawer width\n */\n setDrawerWidth: React.Dispatch<React.SetStateAction<number>>;\n /**\n * The current conversation ID\n */\n currentConversationId?: string;\n /**\n * Set the current conversation ID and update the route if in embedded mode\n * Pass undefined to clear the conversation (example: for new chat)\n */\n setCurrentConversationId: (id: string | undefined) => void;\n /**\n * The message in the chat input box\n * Used to preserve input content when switching between display modes\n */\n draftMessage: string;\n /**\n * To save the input message as a draft when switching modes\n */\n setDraftMessage: (message: string) => void;\n /**\n * The file attachments in the chat input\n * Used to preserve file attachments when switching between display modes\n */\n draftFileContents: FileContent[];\n /**\n * To save file attachments as a draft when switching modes\n */\n setDraftFileContents: (files: FileContent[]) => void;\n /**\n * @internal After leaving fullscreen for overlay/docked, the next overlay/docked chat\n * mount should seed the thread from currentConversationId (or TEMP) instead of storage\n * lastOpened. Returns true at most once per handoff.\n */\n consumePendingOverlayThreadHandoff?: () => boolean;\n /**\n * Chat tab is 0, Notebooks tab is 1. Persisted across overlay/docked/fullscreen remounts\n * (each display mode mounts its own `LightspeedChat` tree).\n */\n shellViewTab: number;\n setShellViewTab: (tab: number) => void;\n}\n\n/**\n * @public\n */\nexport const LightspeedDrawerContext = createContext<\n LightspeedDrawerContextType | undefined\n>(undefined);\n"],"names":[],"mappings":";;AAiHO,MAAM,uBAAA,GAA0B,cAErC,MAAS;;;;"}
@@ -6,6 +6,7 @@ import { makeStyles } from '@mui/styles';
6
6
  import { ChatbotDisplayMode } from '@patternfly/chatbot';
7
7
  import { DOCKED_CONTENT_OFFSET } from '../const.esm.js';
8
8
  import { useLightspeedDrawerContext } from '../hooks/useLightspeedDrawerContext.esm.js';
9
+ import { useTranslation } from '../hooks/useTranslation.esm.js';
9
10
  import { LightspeedFABIcon } from './LightspeedIcon.esm.js';
10
11
 
11
12
  const useStyles = makeStyles((theme) => ({
@@ -30,6 +31,7 @@ const useStyles = makeStyles((theme) => ({
30
31
  }
31
32
  }));
32
33
  const LightspeedFAB = () => {
34
+ const { t } = useTranslation();
33
35
  const { isChatbotActive, toggleChatbot, displayMode } = useLightspeedDrawerContext();
34
36
  const fabButton = useStyles();
35
37
  if (displayMode === ChatbotDisplayMode.embedded) {
@@ -44,7 +46,7 @@ const LightspeedFAB = () => {
44
46
  children: /* @__PURE__ */ jsx(
45
47
  Tooltip,
46
48
  {
47
- title: isChatbotActive ? "Close Lightspeed" : "Open Lightspeed",
49
+ title: isChatbotActive ? t("tooltip.fab.close") : t("tooltip.fab.open"),
48
50
  placement: "left",
49
51
  children: /* @__PURE__ */ jsx(
50
52
  Fab,
@@ -53,7 +55,7 @@ const LightspeedFAB = () => {
53
55
  variant: "circular",
54
56
  size: "small",
55
57
  onClick: toggleChatbot,
56
- "aria-label": isChatbotActive ? "lightspeed-close" : "lightspeed-open",
58
+ "aria-label": isChatbotActive ? t("tooltip.fab.close") : t("tooltip.fab.open"),
57
59
  className: fabButton.fab,
58
60
  sx: { borderRadius: "100% !important" },
59
61
  children: isChatbotActive ? /* @__PURE__ */ jsx(CloseIcon, { fontSize: "small" }) : /* @__PURE__ */ jsx(LightspeedFABIcon, {})
@@ -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 Close from '@mui/icons-material/Close';\nimport Fab from '@mui/material/Fab';\nimport Tooltip from '@mui/material/Tooltip';\nimport { makeStyles } from '@mui/styles';\nimport { ChatbotDisplayMode } from '@patternfly/chatbot';\n\nimport { DOCKED_CONTENT_OFFSET } from '../const';\nimport { useLightspeedDrawerContext } from '../hooks/useLightspeedDrawerContext';\nimport { LightspeedFABIcon } from './LightspeedIcon';\n\nconst useStyles = makeStyles(theme => ({\n fab: {\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 'fab-button': {\n bottom: `calc(${theme?.spacing?.(2) ?? '16px'} + 1.5em)`,\n right: `calc(${theme?.spacing?.(2) ?? '16px'} + 1.5em)`,\n alignItems: 'end',\n zIndex: 200,\n display: 'flex',\n position: 'fixed',\n\n // When ApplicationDrawer is docked, match main content inset\n 'body.docked-drawer-open &': {\n transition: 'margin-right 0.3s ease',\n marginRight: DOCKED_CONTENT_OFFSET,\n },\n },\n}));\n\n/**\n * @public\n * Lightspeed Floating action button to open/close the lightspeed chatbot\n */\n\nexport const LightspeedFAB = () => {\n const { isChatbotActive, toggleChatbot, displayMode } =\n useLightspeedDrawerContext();\n const fabButton = useStyles();\n\n if (displayMode === ChatbotDisplayMode.embedded) {\n return null;\n }\n\n return (\n <div\n className={fabButton['fab-button']}\n id=\"lightspeed-fab\"\n data-testid=\"lightspeed-fab\"\n >\n <Tooltip\n title={isChatbotActive ? 'Close Lightspeed' : 'Open Lightspeed'}\n placement=\"left\"\n >\n <Fab\n color=\"primary\"\n variant=\"circular\"\n size=\"small\"\n onClick={toggleChatbot}\n aria-label={isChatbotActive ? 'lightspeed-close' : 'lightspeed-open'}\n className={fabButton.fab}\n sx={{ borderRadius: '100% !important' }}\n >\n {isChatbotActive ? <Close fontSize=\"small\" /> : <LightspeedFABIcon />}\n </Fab>\n </Tooltip>\n </div>\n );\n};\n"],"names":["Close"],"mappings":";;;;;;;;;;AA0BA,MAAM,SAAA,GAAY,WAAW,CAAA,KAAA,MAAU;AAAA,EACrC,GAAA,EAAK;AAAA,IACH,OAAA,EAAS,cAAA;AAAA,IACT,iBAAiB,CAAA,EAAG,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,QAAQ,SAAS,CAAA,WAAA,CAAA;AAAA,IAC9D,OAAO,CAAA,EAAG,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,gBAAgB,MAAM,CAAA,WAAA,CAAA;AAAA,IACzD,WAAW,CAAA,EACT,KAAA,EAAO,OAAA,GAAU,CAAC,KAClB,wGACF,CAAA,WAAA;AAAA,GACF;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,QAAQ,CAAA,KAAA,EAAQ,KAAA,EAAO,OAAA,GAAU,CAAC,KAAK,MAAM,CAAA,SAAA,CAAA;AAAA,IAC7C,OAAO,CAAA,KAAA,EAAQ,KAAA,EAAO,OAAA,GAAU,CAAC,KAAK,MAAM,CAAA,SAAA,CAAA;AAAA,IAC5C,UAAA,EAAY,KAAA;AAAA,IACZ,MAAA,EAAQ,GAAA;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,QAAA,EAAU,OAAA;AAAA;AAAA,IAGV,2BAAA,EAA6B;AAAA,MAC3B,UAAA,EAAY,wBAAA;AAAA,MACZ,WAAA,EAAa;AAAA;AACf;AAEJ,CAAA,CAAE,CAAA;AAOK,MAAM,gBAAgB,MAAM;AACjC,EAAA,MAAM,EAAE,eAAA,EAAiB,aAAA,EAAe,WAAA,KACtC,0BAAA,EAA2B;AAC7B,EAAA,MAAM,YAAY,SAAA,EAAU;AAE5B,EAAA,IAAI,WAAA,KAAgB,mBAAmB,QAAA,EAAU;AAC/C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,UAAU,YAAY,CAAA;AAAA,MACjC,EAAA,EAAG,gBAAA;AAAA,MACH,aAAA,EAAY,gBAAA;AAAA,MAEZ,QAAA,kBAAA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,kBAAkB,kBAAA,GAAqB,iBAAA;AAAA,UAC9C,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,YAAA,EAAY,kBAAkB,kBAAA,GAAqB,iBAAA;AAAA,cACnD,WAAW,SAAA,CAAU,GAAA;AAAA,cACrB,EAAA,EAAI,EAAE,YAAA,EAAc,iBAAA,EAAkB;AAAA,cAErC,4CAAkB,GAAA,CAACA,SAAA,EAAA,EAAM,UAAS,OAAA,EAAQ,CAAA,uBAAM,iBAAA,EAAA,EAAkB;AAAA;AAAA;AACrE;AAAA;AACF;AAAA,GACF;AAEJ;;;;"}
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 Fab from '@mui/material/Fab';\nimport Tooltip from '@mui/material/Tooltip';\nimport { makeStyles } from '@mui/styles';\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\nconst useStyles = makeStyles(theme => ({\n fab: {\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 'fab-button': {\n bottom: `calc(${theme?.spacing?.(2) ?? '16px'} + 1.5em)`,\n right: `calc(${theme?.spacing?.(2) ?? '16px'} + 1.5em)`,\n alignItems: 'end',\n zIndex: 200,\n display: 'flex',\n position: 'fixed',\n\n // When ApplicationDrawer is docked, match main content inset\n 'body.docked-drawer-open &': {\n transition: 'margin-right 0.3s ease',\n marginRight: DOCKED_CONTENT_OFFSET,\n },\n },\n}));\n\n/**\n * @public\n * Lightspeed Floating action button to open/close the lightspeed chatbot\n */\n\nexport const LightspeedFAB = () => {\n const { t } = useTranslation();\n const { isChatbotActive, toggleChatbot, displayMode } =\n useLightspeedDrawerContext();\n const fabButton = useStyles();\n\n if (displayMode === ChatbotDisplayMode.embedded) {\n return null;\n }\n\n return (\n <div\n className={fabButton['fab-button']}\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 className={fabButton.fab}\n sx={{ borderRadius: '100% !important' }}\n >\n {isChatbotActive ? <Close fontSize=\"small\" /> : <LightspeedFABIcon />}\n </Fab>\n </Tooltip>\n </div>\n );\n};\n"],"names":["Close"],"mappings":";;;;;;;;;;;AA2BA,MAAM,SAAA,GAAY,WAAW,CAAA,KAAA,MAAU;AAAA,EACrC,GAAA,EAAK;AAAA,IACH,OAAA,EAAS,cAAA;AAAA,IACT,iBAAiB,CAAA,EAAG,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,QAAQ,SAAS,CAAA,WAAA,CAAA;AAAA,IAC9D,OAAO,CAAA,EAAG,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,gBAAgB,MAAM,CAAA,WAAA,CAAA;AAAA,IACzD,WAAW,CAAA,EACT,KAAA,EAAO,OAAA,GAAU,CAAC,KAClB,wGACF,CAAA,WAAA;AAAA,GACF;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,QAAQ,CAAA,KAAA,EAAQ,KAAA,EAAO,OAAA,GAAU,CAAC,KAAK,MAAM,CAAA,SAAA,CAAA;AAAA,IAC7C,OAAO,CAAA,KAAA,EAAQ,KAAA,EAAO,OAAA,GAAU,CAAC,KAAK,MAAM,CAAA,SAAA,CAAA;AAAA,IAC5C,UAAA,EAAY,KAAA;AAAA,IACZ,MAAA,EAAQ,GAAA;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,QAAA,EAAU,OAAA;AAAA;AAAA,IAGV,2BAAA,EAA6B;AAAA,MAC3B,UAAA,EAAY,wBAAA;AAAA,MACZ,WAAA,EAAa;AAAA;AACf;AAEJ,CAAA,CAAE,CAAA;AAOK,MAAM,gBAAgB,MAAM;AACjC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,MAAM,EAAE,eAAA,EAAiB,aAAA,EAAe,WAAA,KACtC,0BAAA,EAA2B;AAC7B,EAAA,MAAM,YAAY,SAAA,EAAU;AAE5B,EAAA,IAAI,WAAA,KAAgB,mBAAmB,QAAA,EAAU;AAC/C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,UAAU,YAAY,CAAA;AAAA,MACjC,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,WAAW,SAAA,CAAU,GAAA;AAAA,cACrB,EAAA,EAAI,EAAE,YAAA,EAAc,iBAAA,EAAkB;AAAA,cAErC,4CAAkB,GAAA,CAACA,SAAA,EAAA,EAAM,UAAS,OAAA,EAAQ,CAAA,uBAAM,iBAAA,EAAA,EAAkB;AAAA;AAAA;AACrE;AAAA;AACF;AAAA,GACF;AAEJ;;;;"}
@@ -25,10 +25,19 @@ function useLightspeedProviderState() {
25
25
  const [currentConversationIdState, setCurrentConversationIdState] = useState(void 0);
26
26
  const [draftMessage, setDraftMessageState] = useState("");
27
27
  const [draftFileContents, setDraftFileContentsState] = useState([]);
28
+ const [shellViewTab, setShellViewTabState] = useState(0);
29
+ const shellViewTabRef = useRef(shellViewTab);
30
+ shellViewTabRef.current = shellViewTab;
31
+ const setShellViewTab = useCallback((tab) => {
32
+ const next = tab === 1 ? 1 : 0;
33
+ shellViewTabRef.current = next;
34
+ setShellViewTabState(next);
35
+ }, []);
28
36
  const openedViaFABRef = useRef(false);
29
37
  const dockedAfterLeavingFullscreenRef = useRef(false);
30
38
  const leavingLightspeedForNonEmbeddedShellRef = useRef(false);
31
39
  const pendingOverlayThreadHandoffRef = useRef(false);
40
+ const lightspeedPathnamePrevRef = useRef(null);
32
41
  const isLightspeedRouteRef = useRef(false);
33
42
  const persistedDisplayModeRef = useRef(persistedDisplayMode);
34
43
  const isLightspeedRoute = location.pathname.startsWith(LIGHTSPEED_PATH);
@@ -65,6 +74,10 @@ function useLightspeedProviderState() {
65
74
  navigate("/catalog", { replace: true });
66
75
  }, [navigate]);
67
76
  useEffect(() => {
77
+ const pathname = location.pathname;
78
+ const prevPathname = lightspeedPathnamePrevRef.current;
79
+ const isUnderLightspeedPath = (p) => Boolean(p && p.startsWith(LIGHTSPEED_PATH));
80
+ const isInternalLightspeedRouteChange = isUnderLightspeedPath(prevPathname) && isUnderLightspeedPath(pathname) && prevPathname !== pathname;
68
81
  if (!isLightspeedRoute) {
69
82
  leavingLightspeedForNonEmbeddedShellRef.current = false;
70
83
  }
@@ -74,10 +87,12 @@ function useLightspeedProviderState() {
74
87
  setCurrentConversationIdState(void 0);
75
88
  }
76
89
  if (isLightspeedRoute) {
77
- if (leavingLightspeedForNonEmbeddedShellRef.current && persistedDisplayMode !== ChatbotDisplayMode.embedded) {
78
- setDisplayModeState(persistedDisplayMode);
79
- } else {
80
- setDisplayModeState(ChatbotDisplayMode.embedded);
90
+ if (!isInternalLightspeedRouteChange) {
91
+ if (leavingLightspeedForNonEmbeddedShellRef.current && persistedDisplayMode !== ChatbotDisplayMode.embedded) {
92
+ setDisplayModeState(persistedDisplayMode);
93
+ } else {
94
+ setDisplayModeState(ChatbotDisplayMode.embedded);
95
+ }
81
96
  }
82
97
  setIsOpen(true);
83
98
  if (!dockedAfterLeavingFullscreenRef.current) {
@@ -88,7 +103,14 @@ function useLightspeedProviderState() {
88
103
  } else {
89
104
  setDisplayModeState(persistedDisplayMode);
90
105
  }
91
- }, [closeDrawer, conversationId, isLightspeedRoute, persistedDisplayMode]);
106
+ lightspeedPathnamePrevRef.current = pathname;
107
+ }, [
108
+ closeDrawer,
109
+ conversationId,
110
+ isLightspeedRoute,
111
+ location.pathname,
112
+ persistedDisplayMode
113
+ ]);
92
114
  useEffect(() => {
93
115
  if (!isLightspeedRoute && isOpen && displayModeState === ChatbotDisplayMode.docked) {
94
116
  openDrawer(LIGHTSPEED_APP_DRAWER_ID);
@@ -100,7 +122,11 @@ function useLightspeedProviderState() {
100
122
  const rawMode = persistedDisplayMode || ChatbotDisplayMode.default;
101
123
  if (rawMode === ChatbotDisplayMode.embedded) {
102
124
  if (!isLightspeedRoute) {
103
- navigate(lightspeedRoutePath(currentConversationIdState));
125
+ if (shellViewTabRef.current === 1) {
126
+ navigate(`${LIGHTSPEED_PATH}/notebooks`);
127
+ } else {
128
+ navigate(lightspeedRoutePath(currentConversationIdState));
129
+ }
104
130
  }
105
131
  setDisplayModeState(ChatbotDisplayMode.embedded);
106
132
  closeDrawer(LIGHTSPEED_APP_DRAWER_ID);
@@ -167,17 +193,25 @@ function useLightspeedProviderState() {
167
193
  return true;
168
194
  }, []);
169
195
  const setDisplayMode = useCallback(
170
- (mode, conversationIdParam) => {
196
+ (mode, conversationIdParam, embeddedNotebooks) => {
171
197
  if (mode === displayModeState) {
172
198
  return;
173
199
  }
174
200
  setPersistedDisplayMode(mode);
175
201
  syncShellDrawerForMode(mode);
176
202
  if (mode === ChatbotDisplayMode.embedded) {
177
- const convId = conversationIdParam ?? currentConversationIdState;
178
- navigate(lightspeedRoutePath(convId));
203
+ if (embeddedNotebooks) {
204
+ const path = embeddedNotebooks === "notebooks" ? `${LIGHTSPEED_PATH}/notebooks` : `${LIGHTSPEED_PATH}/notebooks/${embeddedNotebooks.notebookSessionId}`;
205
+ navigate(path);
206
+ } else if (shellViewTabRef.current === 1) {
207
+ navigate(`${LIGHTSPEED_PATH}/notebooks`);
208
+ } else {
209
+ const convId = conversationIdParam ?? currentConversationIdState;
210
+ navigate(lightspeedRoutePath(convId));
211
+ }
179
212
  setIsOpen(true);
180
213
  } else {
214
+ setShellViewTab(0);
181
215
  if (isLightspeedRoute) {
182
216
  leavingLightspeedForNonEmbeddedShellRef.current = true;
183
217
  pendingOverlayThreadHandoffRef.current = true;
@@ -193,6 +227,7 @@ function useLightspeedProviderState() {
193
227
  leaveLightspeedRouteForShellDisplayMode,
194
228
  navigate,
195
229
  setPersistedDisplayMode,
230
+ setShellViewTab,
196
231
  syncShellDrawerForMode
197
232
  ]
198
233
  );
@@ -211,7 +246,9 @@ function useLightspeedProviderState() {
211
246
  setDraftMessage,
212
247
  draftFileContents,
213
248
  setDraftFileContents,
214
- consumePendingOverlayThreadHandoff
249
+ consumePendingOverlayThreadHandoff,
250
+ shellViewTab,
251
+ setShellViewTab
215
252
  }),
216
253
  [
217
254
  isOpen,
@@ -225,7 +262,9 @@ function useLightspeedProviderState() {
225
262
  setDraftMessage,
226
263
  draftFileContents,
227
264
  setDraftFileContents,
228
- consumePendingOverlayThreadHandoff
265
+ consumePendingOverlayThreadHandoff,
266
+ shellViewTab,
267
+ setShellViewTab
229
268
  ]
230
269
  );
231
270
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"useLightspeedProviderState.esm.js","sources":["../../src/hooks/useLightspeedProviderState.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\nimport { ChatbotDisplayMode } from '@patternfly/chatbot';\n\nimport { useAppDrawer } from '@red-hat-developer-hub/backstage-plugin-app-react';\n\nimport type { LightspeedDrawerContextType } from '../components/LightspeedDrawerContext';\nimport { LIGHTSPEED_APP_DRAWER_ID } from '../const';\nimport type { FileContent } from '../types';\nimport { useBackstageUserIdentity } from './useBackstageUserIdentity';\nimport { useDisplayModeSettings } from './useDisplayModeSettings';\n\nconst LIGHTSPEED_PATH = '/lightspeed';\n\nfunction lightspeedRoutePath(conversationId?: string): string {\n return conversationId\n ? `${LIGHTSPEED_PATH}/conversation/${conversationId}`\n : LIGHTSPEED_PATH;\n}\n\n/**\n * Encapsulates LightspeedDrawerProvider state, routing, and ApplicationDrawer sync.\n *\n * @internal\n */\nexport function useLightspeedProviderState(): {\n contextValue: LightspeedDrawerContextType;\n shouldRenderOverlayModal: boolean;\n closeChatbot: () => void;\n} {\n const navigate = useNavigate();\n const location = useLocation();\n const { openDrawer, closeDrawer } = useAppDrawer();\n const user = useBackstageUserIdentity();\n const {\n displayMode: persistedDisplayMode,\n setDisplayMode: setPersistedDisplayMode,\n } = useDisplayModeSettings(user, ChatbotDisplayMode.default);\n\n const [displayModeState, setDisplayModeState] =\n useState<ChatbotDisplayMode>(persistedDisplayMode);\n const [isOpen, setIsOpen] = useState(false);\n const [drawerWidth, setDrawerWidth] = useState(400);\n const [currentConversationIdState, setCurrentConversationIdState] = useState<\n string | undefined\n >(undefined);\n const [draftMessage, setDraftMessageState] = useState('');\n const [draftFileContents, setDraftFileContentsState] = useState<\n FileContent[]\n >([]);\n const openedViaFABRef = useRef(false);\n const dockedAfterLeavingFullscreenRef = useRef(false);\n /** True while navigating off /lightspeed after user chose overlay/docked (URL can lag persisted mode). */\n const leavingLightspeedForNonEmbeddedShellRef = useRef(false);\n /** True until overlay/docked LightspeedChat consumes it (new mount after leaving fullscreen route). */\n const pendingOverlayThreadHandoffRef = useRef(false);\n\n const isLightspeedRouteRef = useRef(false);\n const persistedDisplayModeRef = useRef(persistedDisplayMode);\n\n const isLightspeedRoute = location.pathname.startsWith(LIGHTSPEED_PATH);\n isLightspeedRouteRef.current = isLightspeedRoute;\n persistedDisplayModeRef.current = persistedDisplayMode;\n const conversationMatch = useMatch(\n `${LIGHTSPEED_PATH}/conversation/:conversationId`,\n );\n const conversationId = conversationMatch?.params?.conversationId;\n\n const syncShellDrawerForMode = useCallback(\n (mode: ChatbotDisplayMode) => {\n if (mode === ChatbotDisplayMode.docked) {\n if (isLightspeedRoute) {\n dockedAfterLeavingFullscreenRef.current = true;\n } else {\n openDrawer(LIGHTSPEED_APP_DRAWER_ID);\n }\n } else {\n dockedAfterLeavingFullscreenRef.current = false;\n closeDrawer(LIGHTSPEED_APP_DRAWER_ID);\n }\n },\n [closeDrawer, isLightspeedRoute, openDrawer],\n );\n\n const navigateBackOrGoToCatalog = useCallback(() => {\n if (!openedViaFABRef.current) {\n navigate('/catalog');\n openedViaFABRef.current = true;\n return;\n }\n navigate(-1);\n }, [navigate]);\n\n /**\n * Leaving /lightspeed for overlay/docked must not use navigate(-1): after the first FAB\n * open, navigateBackOrGoToCatalog uses -1 and can land back on /lightspeed (fullscreen).\n */\n const leaveLightspeedRouteForShellDisplayMode = useCallback(() => {\n navigate('/catalog', { replace: true });\n }, [navigate]);\n\n useEffect(() => {\n if (!isLightspeedRoute) {\n leavingLightspeedForNonEmbeddedShellRef.current = false;\n }\n\n if (conversationId) {\n setCurrentConversationIdState(conversationId);\n } else if (isLightspeedRoute) {\n // On `/lightspeed` without a `:conversationId` segment, URL implies a fresh thread.\n // When navigating to another app route (overlay/docked), keep the last id so display\n // mode switches and re-entry to fullscreen stay on the active conversation.\n setCurrentConversationIdState(undefined);\n }\n\n if (isLightspeedRoute) {\n if (\n leavingLightspeedForNonEmbeddedShellRef.current &&\n persistedDisplayMode !== ChatbotDisplayMode.embedded\n ) {\n setDisplayModeState(persistedDisplayMode);\n } else {\n setDisplayModeState(ChatbotDisplayMode.embedded);\n }\n setIsOpen(true);\n if (!dockedAfterLeavingFullscreenRef.current) {\n closeDrawer(LIGHTSPEED_APP_DRAWER_ID);\n }\n } else if (persistedDisplayMode === ChatbotDisplayMode.embedded) {\n // Off /lightspeed there is no fullscreen surface; use overlay so FAB stays available.\n // (Persisted preference remains \"fullscreen\" for the next open.)\n setDisplayModeState(ChatbotDisplayMode.default);\n } else {\n setDisplayModeState(persistedDisplayMode);\n }\n }, [closeDrawer, conversationId, isLightspeedRoute, persistedDisplayMode]);\n\n useEffect(() => {\n if (\n !isLightspeedRoute &&\n isOpen &&\n displayModeState === ChatbotDisplayMode.docked\n ) {\n openDrawer(LIGHTSPEED_APP_DRAWER_ID);\n dockedAfterLeavingFullscreenRef.current = false;\n }\n }, [displayModeState, isLightspeedRoute, isOpen, openDrawer]);\n\n const openChatbot = useCallback(() => {\n openedViaFABRef.current = true;\n const rawMode = persistedDisplayMode || ChatbotDisplayMode.default;\n\n if (rawMode === ChatbotDisplayMode.embedded) {\n if (!isLightspeedRoute) {\n navigate(lightspeedRoutePath(currentConversationIdState));\n }\n setDisplayModeState(ChatbotDisplayMode.embedded);\n closeDrawer(LIGHTSPEED_APP_DRAWER_ID);\n setIsOpen(true);\n return;\n }\n\n setDisplayModeState(rawMode);\n\n if (rawMode === ChatbotDisplayMode.docked) {\n openDrawer(LIGHTSPEED_APP_DRAWER_ID);\n } else {\n closeDrawer(LIGHTSPEED_APP_DRAWER_ID);\n }\n\n setIsOpen(true);\n }, [\n closeDrawer,\n currentConversationIdState,\n isLightspeedRoute,\n navigate,\n openDrawer,\n persistedDisplayMode,\n ]);\n\n const closeChatbot = useCallback(() => {\n dockedAfterLeavingFullscreenRef.current = false;\n if (displayModeState === ChatbotDisplayMode.embedded && isLightspeedRoute) {\n navigateBackOrGoToCatalog();\n }\n if (displayModeState === ChatbotDisplayMode.docked) {\n closeDrawer(LIGHTSPEED_APP_DRAWER_ID);\n }\n setIsOpen(false);\n }, [\n closeDrawer,\n displayModeState,\n isLightspeedRoute,\n navigateBackOrGoToCatalog,\n ]);\n\n const toggleChatbot = useCallback(() => {\n if (isOpen) {\n closeChatbot();\n } else {\n openChatbot();\n }\n }, [isOpen, openChatbot, closeChatbot]);\n\n const setCurrentConversationId = useCallback(\n (id: string | undefined) => {\n setCurrentConversationIdState(id);\n // Refs: first-stream completion calls onStart after unmount / mode change; a stale\n // embedded + /lightspeed closure would navigate back to fullscreen without this.\n if (\n persistedDisplayModeRef.current === ChatbotDisplayMode.embedded &&\n isLightspeedRouteRef.current\n ) {\n navigate(lightspeedRoutePath(id), { replace: true });\n }\n },\n [navigate],\n );\n\n const setDraftMessage = useCallback((message: string) => {\n setDraftMessageState(message);\n }, []);\n\n const setDraftFileContents = useCallback((files: FileContent[]) => {\n setDraftFileContentsState(files);\n }, []);\n\n const consumePendingOverlayThreadHandoff = useCallback(() => {\n if (!pendingOverlayThreadHandoffRef.current) {\n return false;\n }\n pendingOverlayThreadHandoffRef.current = false;\n return true;\n }, []);\n\n const setDisplayMode = useCallback(\n (mode: ChatbotDisplayMode, conversationIdParam?: string) => {\n if (mode === displayModeState) {\n return;\n }\n setPersistedDisplayMode(mode);\n syncShellDrawerForMode(mode);\n\n if (mode === ChatbotDisplayMode.embedded) {\n const convId = conversationIdParam ?? currentConversationIdState;\n navigate(lightspeedRoutePath(convId));\n setIsOpen(true);\n } else {\n if (isLightspeedRoute) {\n leavingLightspeedForNonEmbeddedShellRef.current = true;\n pendingOverlayThreadHandoffRef.current = true;\n leaveLightspeedRouteForShellDisplayMode();\n }\n setIsOpen(true);\n }\n },\n [\n currentConversationIdState,\n displayModeState,\n isLightspeedRoute,\n leaveLightspeedRouteForShellDisplayMode,\n navigate,\n setPersistedDisplayMode,\n syncShellDrawerForMode,\n ],\n );\n\n const shouldRenderOverlayModal =\n isOpen &&\n displayModeState === ChatbotDisplayMode.default &&\n !isLightspeedRoute;\n\n const contextValue = useMemo(\n () => ({\n isChatbotActive: isOpen,\n toggleChatbot,\n displayMode: displayModeState,\n setDisplayMode,\n drawerWidth,\n setDrawerWidth,\n currentConversationId: currentConversationIdState,\n setCurrentConversationId,\n draftMessage,\n setDraftMessage,\n draftFileContents,\n setDraftFileContents,\n consumePendingOverlayThreadHandoff,\n }),\n [\n isOpen,\n toggleChatbot,\n displayModeState,\n setDisplayMode,\n drawerWidth,\n currentConversationIdState,\n setCurrentConversationId,\n draftMessage,\n setDraftMessage,\n draftFileContents,\n setDraftFileContents,\n consumePendingOverlayThreadHandoff,\n ],\n );\n\n return {\n contextValue,\n shouldRenderOverlayModal,\n closeChatbot,\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useLightspeedProviderState.esm.js","sources":["../../src/hooks/useLightspeedProviderState.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\nimport { ChatbotDisplayMode } from '@patternfly/chatbot';\n\nimport { useAppDrawer } from '@red-hat-developer-hub/backstage-plugin-app-react';\n\nimport type {\n LightspeedDrawerContextType,\n LightspeedEmbeddedNotebooksTarget,\n} from '../components/LightspeedDrawerContext';\nimport { LIGHTSPEED_APP_DRAWER_ID } from '../const';\nimport type { FileContent } from '../types';\nimport { useBackstageUserIdentity } from './useBackstageUserIdentity';\nimport { useDisplayModeSettings } from './useDisplayModeSettings';\n\nconst LIGHTSPEED_PATH = '/lightspeed';\n\nfunction lightspeedRoutePath(conversationId?: string): string {\n return conversationId\n ? `${LIGHTSPEED_PATH}/conversation/${conversationId}`\n : LIGHTSPEED_PATH;\n}\n\n/**\n * Encapsulates LightspeedDrawerProvider state, routing, and ApplicationDrawer sync.\n *\n * @internal\n */\nexport function useLightspeedProviderState(): {\n contextValue: LightspeedDrawerContextType;\n shouldRenderOverlayModal: boolean;\n closeChatbot: () => void;\n} {\n const navigate = useNavigate();\n const location = useLocation();\n const { openDrawer, closeDrawer } = useAppDrawer();\n const user = useBackstageUserIdentity();\n const {\n displayMode: persistedDisplayMode,\n setDisplayMode: setPersistedDisplayMode,\n } = useDisplayModeSettings(user, ChatbotDisplayMode.default);\n\n const [displayModeState, setDisplayModeState] =\n useState<ChatbotDisplayMode>(persistedDisplayMode);\n const [isOpen, setIsOpen] = useState(false);\n const [drawerWidth, setDrawerWidth] = useState(400);\n const [currentConversationIdState, setCurrentConversationIdState] = useState<\n string | undefined\n >(undefined);\n const [draftMessage, setDraftMessageState] = useState('');\n const [draftFileContents, setDraftFileContentsState] = useState<\n FileContent[]\n >([]);\n const [shellViewTab, setShellViewTabState] = useState(0);\n const shellViewTabRef = useRef(shellViewTab);\n shellViewTabRef.current = shellViewTab;\n const setShellViewTab = useCallback((tab: number) => {\n const next = tab === 1 ? 1 : 0;\n shellViewTabRef.current = next;\n setShellViewTabState(next);\n }, []);\n const openedViaFABRef = useRef(false);\n const dockedAfterLeavingFullscreenRef = useRef(false);\n /** True while navigating off /lightspeed after user chose overlay/docked (URL can lag persisted mode). */\n const leavingLightspeedForNonEmbeddedShellRef = useRef(false);\n /** True until overlay/docked LightspeedChat consumes it (new mount after leaving fullscreen route). */\n const pendingOverlayThreadHandoffRef = useRef(false);\n /** Used to detect in-app moves (e.g. Chat ↔ Notebooks) so display mode is not reset to embedded. */\n const lightspeedPathnamePrevRef = useRef<string | null>(null);\n\n const isLightspeedRouteRef = useRef(false);\n const persistedDisplayModeRef = useRef(persistedDisplayMode);\n\n const isLightspeedRoute = location.pathname.startsWith(LIGHTSPEED_PATH);\n isLightspeedRouteRef.current = isLightspeedRoute;\n persistedDisplayModeRef.current = persistedDisplayMode;\n const conversationMatch = useMatch(\n `${LIGHTSPEED_PATH}/conversation/:conversationId`,\n );\n const conversationId = conversationMatch?.params?.conversationId;\n\n const syncShellDrawerForMode = useCallback(\n (mode: ChatbotDisplayMode) => {\n if (mode === ChatbotDisplayMode.docked) {\n if (isLightspeedRoute) {\n dockedAfterLeavingFullscreenRef.current = true;\n } else {\n openDrawer(LIGHTSPEED_APP_DRAWER_ID);\n }\n } else {\n dockedAfterLeavingFullscreenRef.current = false;\n closeDrawer(LIGHTSPEED_APP_DRAWER_ID);\n }\n },\n [closeDrawer, isLightspeedRoute, openDrawer],\n );\n\n const navigateBackOrGoToCatalog = useCallback(() => {\n if (!openedViaFABRef.current) {\n navigate('/catalog');\n openedViaFABRef.current = true;\n return;\n }\n navigate(-1);\n }, [navigate]);\n\n /**\n * Leaving /lightspeed for overlay/docked must not use navigate(-1): after the first FAB\n * open, navigateBackOrGoToCatalog uses -1 and can land back on /lightspeed (fullscreen).\n */\n const leaveLightspeedRouteForShellDisplayMode = useCallback(() => {\n navigate('/catalog', { replace: true });\n }, [navigate]);\n\n useEffect(() => {\n const pathname = location.pathname;\n const prevPathname = lightspeedPathnamePrevRef.current;\n const isUnderLightspeedPath = (p: string | null) =>\n Boolean(p && p.startsWith(LIGHTSPEED_PATH));\n const isInternalLightspeedRouteChange =\n isUnderLightspeedPath(prevPathname) &&\n isUnderLightspeedPath(pathname) &&\n prevPathname !== pathname;\n\n if (!isLightspeedRoute) {\n leavingLightspeedForNonEmbeddedShellRef.current = false;\n }\n\n if (conversationId) {\n setCurrentConversationIdState(conversationId);\n } else if (isLightspeedRoute) {\n // On `/lightspeed` without a `:conversationId` segment, URL implies a fresh thread.\n // When navigating to another app route (overlay/docked), keep the last id so display\n // mode switches and re-entry to fullscreen stay on the active conversation.\n setCurrentConversationIdState(undefined);\n }\n\n if (isLightspeedRoute) {\n if (!isInternalLightspeedRouteChange) {\n if (\n leavingLightspeedForNonEmbeddedShellRef.current &&\n persistedDisplayMode !== ChatbotDisplayMode.embedded\n ) {\n setDisplayModeState(persistedDisplayMode);\n } else {\n setDisplayModeState(ChatbotDisplayMode.embedded);\n }\n }\n setIsOpen(true);\n if (!dockedAfterLeavingFullscreenRef.current) {\n closeDrawer(LIGHTSPEED_APP_DRAWER_ID);\n }\n } else if (persistedDisplayMode === ChatbotDisplayMode.embedded) {\n // Off /lightspeed there is no fullscreen surface; use overlay so FAB stays available.\n // (Persisted preference remains \"fullscreen\" for the next open.)\n setDisplayModeState(ChatbotDisplayMode.default);\n } else {\n setDisplayModeState(persistedDisplayMode);\n }\n\n lightspeedPathnamePrevRef.current = pathname;\n }, [\n closeDrawer,\n conversationId,\n isLightspeedRoute,\n location.pathname,\n persistedDisplayMode,\n ]);\n\n useEffect(() => {\n if (\n !isLightspeedRoute &&\n isOpen &&\n displayModeState === ChatbotDisplayMode.docked\n ) {\n openDrawer(LIGHTSPEED_APP_DRAWER_ID);\n dockedAfterLeavingFullscreenRef.current = false;\n }\n }, [displayModeState, isLightspeedRoute, isOpen, openDrawer]);\n\n const openChatbot = useCallback(() => {\n openedViaFABRef.current = true;\n const rawMode = persistedDisplayMode || ChatbotDisplayMode.default;\n\n if (rawMode === ChatbotDisplayMode.embedded) {\n if (!isLightspeedRoute) {\n if (shellViewTabRef.current === 1) {\n navigate(`${LIGHTSPEED_PATH}/notebooks`);\n } else {\n navigate(lightspeedRoutePath(currentConversationIdState));\n }\n }\n setDisplayModeState(ChatbotDisplayMode.embedded);\n closeDrawer(LIGHTSPEED_APP_DRAWER_ID);\n setIsOpen(true);\n return;\n }\n\n setDisplayModeState(rawMode);\n\n if (rawMode === ChatbotDisplayMode.docked) {\n openDrawer(LIGHTSPEED_APP_DRAWER_ID);\n } else {\n closeDrawer(LIGHTSPEED_APP_DRAWER_ID);\n }\n\n setIsOpen(true);\n }, [\n closeDrawer,\n currentConversationIdState,\n isLightspeedRoute,\n navigate,\n openDrawer,\n persistedDisplayMode,\n ]);\n\n const closeChatbot = useCallback(() => {\n dockedAfterLeavingFullscreenRef.current = false;\n if (displayModeState === ChatbotDisplayMode.embedded && isLightspeedRoute) {\n navigateBackOrGoToCatalog();\n }\n if (displayModeState === ChatbotDisplayMode.docked) {\n closeDrawer(LIGHTSPEED_APP_DRAWER_ID);\n }\n setIsOpen(false);\n }, [\n closeDrawer,\n displayModeState,\n isLightspeedRoute,\n navigateBackOrGoToCatalog,\n ]);\n\n const toggleChatbot = useCallback(() => {\n if (isOpen) {\n closeChatbot();\n } else {\n openChatbot();\n }\n }, [isOpen, openChatbot, closeChatbot]);\n\n const setCurrentConversationId = useCallback(\n (id: string | undefined) => {\n setCurrentConversationIdState(id);\n // Refs: first-stream completion calls onStart after unmount / mode change; a stale\n // embedded + /lightspeed closure would navigate back to fullscreen without this.\n if (\n persistedDisplayModeRef.current === ChatbotDisplayMode.embedded &&\n isLightspeedRouteRef.current\n ) {\n navigate(lightspeedRoutePath(id), { replace: true });\n }\n },\n [navigate],\n );\n\n const setDraftMessage = useCallback((message: string) => {\n setDraftMessageState(message);\n }, []);\n\n const setDraftFileContents = useCallback((files: FileContent[]) => {\n setDraftFileContentsState(files);\n }, []);\n\n const consumePendingOverlayThreadHandoff = useCallback(() => {\n if (!pendingOverlayThreadHandoffRef.current) {\n return false;\n }\n pendingOverlayThreadHandoffRef.current = false;\n return true;\n }, []);\n\n const setDisplayMode = useCallback(\n (\n mode: ChatbotDisplayMode,\n conversationIdParam?: string,\n embeddedNotebooks?: LightspeedEmbeddedNotebooksTarget,\n ) => {\n if (mode === displayModeState) {\n return;\n }\n setPersistedDisplayMode(mode);\n syncShellDrawerForMode(mode);\n\n if (mode === ChatbotDisplayMode.embedded) {\n if (embeddedNotebooks) {\n const path =\n embeddedNotebooks === 'notebooks'\n ? `${LIGHTSPEED_PATH}/notebooks`\n : `${LIGHTSPEED_PATH}/notebooks/${embeddedNotebooks.notebookSessionId}`;\n navigate(path);\n } else if (shellViewTabRef.current === 1) {\n navigate(`${LIGHTSPEED_PATH}/notebooks`);\n } else {\n const convId = conversationIdParam ?? currentConversationIdState;\n navigate(lightspeedRoutePath(convId));\n }\n setIsOpen(true);\n } else {\n // Notebooks exist only in fullscreen; leaving embedded for overlay/docked\n // must not keep shellViewTab on Notebooks (next fullscreen open should be Chat).\n setShellViewTab(0);\n if (isLightspeedRoute) {\n leavingLightspeedForNonEmbeddedShellRef.current = true;\n pendingOverlayThreadHandoffRef.current = true;\n leaveLightspeedRouteForShellDisplayMode();\n }\n setIsOpen(true);\n }\n },\n [\n currentConversationIdState,\n displayModeState,\n isLightspeedRoute,\n leaveLightspeedRouteForShellDisplayMode,\n navigate,\n setPersistedDisplayMode,\n setShellViewTab,\n syncShellDrawerForMode,\n ],\n );\n\n const shouldRenderOverlayModal =\n isOpen &&\n displayModeState === ChatbotDisplayMode.default &&\n !isLightspeedRoute;\n\n const contextValue = useMemo(\n () => ({\n isChatbotActive: isOpen,\n toggleChatbot,\n displayMode: displayModeState,\n setDisplayMode,\n drawerWidth,\n setDrawerWidth,\n currentConversationId: currentConversationIdState,\n setCurrentConversationId,\n draftMessage,\n setDraftMessage,\n draftFileContents,\n setDraftFileContents,\n consumePendingOverlayThreadHandoff,\n shellViewTab,\n setShellViewTab,\n }),\n [\n isOpen,\n toggleChatbot,\n displayModeState,\n setDisplayMode,\n drawerWidth,\n currentConversationIdState,\n setCurrentConversationId,\n draftMessage,\n setDraftMessage,\n draftFileContents,\n setDraftFileContents,\n consumePendingOverlayThreadHandoff,\n shellViewTab,\n setShellViewTab,\n ],\n );\n\n return {\n contextValue,\n shouldRenderOverlayModal,\n closeChatbot,\n };\n}\n"],"names":[],"mappings":"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"}
@@ -161,6 +161,8 @@ const lightspeedTranslationDe = createTranslationMessages({
161
161
  "tooltip.backToBottom": "Zur\xFCck zum Ende",
162
162
  "tooltip.settings": "Chatbot-Optionen",
163
163
  "tooltip.close": "Schlie\xDFen",
164
+ "tooltip.fab.open": "Lightspeed \xF6ffnen",
165
+ "tooltip.fab.close": "Lightspeed schlie\xDFen",
164
166
  "modal.title.preview": "Anhang in der Vorschau anzeigen",
165
167
  "modal.title.edit": "Anhang bearbeiten",
166
168
  "icon.lightspeed.alt": "Lightspeed-Symbol",
@@ -1 +1 @@
1
- {"version":3,"file":"de.esm.js","sources":["../../src/translations/de.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\n\nimport { lightspeedTranslationRef } from './ref';\n\n/**\n * de translation for plugin.lightspeed.\n * @public\n */\nconst lightspeedTranslationDe = createTranslationMessages({\n ref: lightspeedTranslationRef,\n messages: {\n 'page.title': 'Lightspeed',\n 'page.subtitle': 'KI-gestützter Entwicklungsassistent',\n 'tabs.ariaLabel': 'Lightspeed-Ansichten',\n 'tabs.chat': 'Chat',\n 'tabs.notebooks': 'Notizbücher',\n 'tabs.notebooks.empty': 'Inhalte der Notizbücher kommen hierhin.',\n 'notebooks.title': 'Meine Notizbücher',\n 'notebooks.empty.title': 'Keine erstellten Notizbücher',\n 'notebooks.empty.description':\n 'Erstellen Sie ein neues Notizbuch, um Ihre Quellen zu organisieren und KI-gestützte Erkenntnisse zu gewinnen.',\n 'notebooks.empty.action': 'Neues Notizbuch erstellen',\n 'notebooks.documents': 'Dokumente',\n 'notebooks.actions.rename': 'Umbenennen',\n 'notebooks.actions.delete': 'Löschen',\n 'notebooks.rename.title': '{{name}} umbenennen?',\n 'notebooks.rename.description':\n 'Bitte geben Sie den neuen Namen für dieses Notizbuch ein und klicken Sie auf „Senden“, um fortzufahren.',\n 'notebooks.rename.label': 'Neuer Name',\n 'notebooks.rename.placeholder': 'Neuer Name',\n 'notebooks.rename.action': 'Senden',\n 'notebooks.delete.title': '{{name}} löschen?',\n 'notebooks.delete.message':\n 'Dieses Notizbuch wird hier nicht mehr angezeigt. Dadurch werden auch zugehörige Aktivitäten wie Eingaben, Antworten und Feedback aus Ihrer Lightspeed-Aktivität gelöscht.',\n 'notebooks.delete.action': 'Löschen',\n 'notebooks.delete.toast': 'Notizbuch gelöscht!',\n 'notebooks.updated.today': 'Heute aktualisiert',\n 'notebooks.updated.yesterday': 'Vor 1 Tag aktualisiert',\n 'notebooks.updated.days': 'Vor {{days}} Tagen aktualisiert',\n 'notebooks.updated.on': 'Aktualisiert am',\n\n // Notebook view\n 'notebook.view.title': 'Unbenanntes Notizbuch',\n 'notebook.view.close': 'Notizbuch schließen',\n 'notebook.view.documents.count': '{{count}} Dokumente',\n 'notebook.view.documents.add': 'Hinzufügen',\n 'notebook.view.upload.heading':\n 'Laden Sie eine Ressource hoch, um zu beginnen',\n 'notebook.view.upload.action': 'Ressource hochladen',\n 'notebook.view.input.placeholder': 'Fragen Sie zu Ihren Dokumenten...',\n 'notebook.view.input.disabledTooltip':\n 'Wählen Sie mindestens eine geladene Ressource aus, um den Chat zu starten',\n 'notebook.view.sidebar.collapse': 'Seitenleiste einklappen',\n 'notebook.view.sidebar.expand': 'Seitenleiste ausklappen',\n 'notebook.view.sidebar.resize': 'Größe der Seitenleiste ändern',\n 'notebook.view.documents.uploading': 'Dokument wird hochgeladen',\n 'notebook.view.documents.maxReached':\n 'Maximal 10 Dokumente sind erlaubt. Löschen Sie ein Dokument, um ein neues hochzuladen.',\n 'notebook.upload.success': '{{fileName}} erfolgreich hochgeladen.',\n 'notebook.upload.failed': 'Hochladen von {{fileName}} fehlgeschlagen.',\n\n // Notebook upload modal\n 'notebook.upload.modal.title': 'Dokument zum Notizbuch hinzufügen',\n 'notebook.upload.modal.dragDropTitle': 'Dateien hierher ziehen und ablegen',\n 'notebook.upload.modal.browseButton': 'Hochladen',\n 'notebook.upload.modal.separator': 'oder',\n 'notebook.upload.modal.infoText':\n 'Akzeptierte Dateitypen: .md, .txt, .pdf, .json, .yaml, .log',\n 'notebook.upload.modal.selectedFiles':\n '{{count}} von {{max}} Dateien ausgewählt',\n 'notebook.upload.modal.addButton': 'Hinzufügen ({{count}})',\n 'notebook.upload.modal.removeFile': '{{fileName}} entfernen',\n 'notebook.upload.error.unsupportedType':\n 'Upload-Fehler: Nicht unterstützte Dateitypen gefunden. Bitte laden Sie nur unterstützte Dateitypen hoch.',\n 'notebook.upload.error.fileTooLarge':\n 'Upload-Fehler: Dateigröße überschreitet das Limit von 25 MB.',\n 'notebook.upload.error.tooManyFiles':\n 'Upload-Fehler: Maximal {{max}} Dateien erlaubt.',\n\n // Notebook overwrite modal\n 'notebook.overwrite.modal.title': 'Dateien überschreiben?',\n 'notebook.overwrite.modal.description':\n 'Die folgenden Dateien existieren bereits in diesem Notizbuch. Möchten Sie sie mit den neuen Versionen überschreiben?',\n 'notebook.overwrite.modal.action': 'Überschreiben',\n 'notebook.document.delete': 'Löschen',\n\n 'prompts.codeReadability.title': 'Hilfe zur Code-Lesbarkeit erhalten',\n 'prompts.codeReadability.message':\n 'Können Sie mir Techniken vorschlagen, mit denen ich meinen Code lesbarer und wartungsfreundlicher gestalten kann?',\n 'prompts.debugging.title': 'Hilfe beim Debuggen erhalten',\n 'prompts.debugging.message':\n 'Meine Anwendung gibt beim Versuch einer Verbindung zur Datenbank einen Fehler aus. Können Sie mir helfen, das Problem zu identifizieren?',\n 'prompts.developmentConcept.title': 'Ein Entwicklungskonzept erläutern',\n 'prompts.developmentConcept.message':\n 'Können Sie erklären, wie eine Microservices-Architektur funktioniert und welche Vorteile sie gegenüber einem monolithischen Design bietet?',\n 'prompts.codeOptimization.title':\n 'Vorschläge zur Codeoptimierung unterbreiten',\n 'prompts.codeOptimization.message':\n 'Können Sie gängige Methoden zur Codeoptimierung vorschlagen, um eine bessere Performance zu erzielen?',\n 'prompts.documentation.title': 'Zusammenfassung von Dokumentation',\n 'prompts.documentation.message':\n 'Können Sie die Dokumentation zur Implementierung der OAuth 2.0-Authentifizierung in einer Webanwendung zusammenfassen?',\n 'prompts.gitWorkflows.title': 'Workflows mit Git',\n 'prompts.gitWorkflows.message':\n 'Ich möchte Änderungen am Code in einem anderen Branch vornehmen, ohne meine bestehende Arbeit zu verlieren. Wie geht man dabei mit Git vor?',\n 'prompts.testingStrategies.title': 'Teststrategien vorschlagen',\n 'prompts.testingStrategies.message':\n 'Können Sie mir einige gängige Teststrategien empfehlen, die meine Anwendung robust und fehlerfrei machen?',\n 'prompts.sortingAlgorithms.title':\n 'Sortieralgorithmen verständlich erklären',\n 'prompts.sortingAlgorithms.message':\n 'Können Sie den Unterschied zwischen Quicksort und Mergesort erklären und wann man welchen Algorithmus verwendet?',\n 'prompts.eventDriven.title': 'Ereignisgesteuerte Architektur verstehen',\n 'prompts.eventDriven.message':\n 'Können Sie erklären, was ereignisgesteuerte Architektur bedeutet und wann ihre Verwendung in der Softwareentwicklung von Vorteil ist?',\n 'prompts.tekton.title': 'Mit Tekton deployen',\n 'prompts.tekton.message':\n 'Können Sie mir helfen, das Deployment meiner Anwendung mithilfe von Tekton-Pipelines zu automatisieren?',\n 'prompts.openshift.title': 'OpenShift-Deployment erstellen',\n 'prompts.openshift.message':\n 'Können Sie mich bei der Erstellung eines neuen Deployments in OpenShift für eine containerisierte Anwendung unterstützen?',\n 'prompts.rhdh.title': 'Erste Schritte mit dem Red Hat Developer Hub',\n 'prompts.rhdh.message':\n 'Können Sie mich bei den ersten Schritten zur Nutzung des Developer Hub als Entwickler unterstützen, z. B. beim Erkunden des Softwarekatalogs und beim Hinzufügen meines Dienstes?',\n 'conversation.delete.confirm.title': 'Chat löschen?',\n 'conversation.delete.confirm.message':\n 'Dieser Chat wird hier nicht mehr angezeigt. Dadurch werden auch zugehörige Aktivitäten wie Prompts, Antworten und Feedback aus Ihrer Lightspeed-Aktivität gelöscht.',\n 'conversation.delete.confirm.action': 'Löschen',\n 'conversation.rename.confirm.title': 'Chat umbenennen?',\n 'conversation.rename.confirm.action': 'Umbenennen',\n 'conversation.rename.placeholder': 'Chatname',\n 'permission.required.title': 'Fehlende Berechtigungen',\n 'permission.required.description':\n 'Um <subject/> anzuzeigen, wenden Sie sich an Ihren Administrator, um die Berechtigung <permissions/> zu erhalten.',\n 'permission.subject.plugin': 'das Lightspeed-Plugin',\n 'permission.subject.notebooks': 'die Lightspeed-Notizbücher',\n 'permission.notebooks.goBack': 'Zurück',\n 'lcore.notConfigured.title': 'Verbinden Sie ein LLM, um zu starten',\n 'lcore.notConfigured.description':\n 'Lightspeed erfordert ein registriertes LLM. Wenden Sie sich an den Plattformadministrator Ihrer Organisation, um die Einrichtung abzuschließen.',\n 'lcore.notConfigured.developerLightspeedDocs':\n 'Developer Lightspeed wird konfiguriert',\n 'lcore.notConfigured.backendDocs': 'Lightspeed-Backend einrichten',\n 'lcore.loadError.title': 'Modelle konnten nicht geladen werden',\n 'lcore.loadError.description':\n 'Das Lightspeed-Backend hat keine Modellliste zurückgegeben. Prüfen Sie, ob der Dienst läuft und erreichbar ist, und versuchen Sie es erneut.',\n 'disclaimer.withValidation':\n 'Diese Funktion nutzt KI-Technologie. Geben Sie bei Ihrer Eingabe keine persönlichen oder sonstigen sensiblen Informationen an. Interaktionen können dazu genutzt werden, die Produkte oder Dienstleistungen von Red Hat zu verbessern.',\n 'disclaimer.withoutValidation':\n 'Diese Funktion nutzt KI-Technologie. Geben Sie bei Ihrer Eingabe keine persönlichen oder sonstigen sensiblen Informationen an. Interaktionen können dazu genutzt werden, die Produkte oder Dienstleistungen von Red Hat zu verbessern.',\n 'footer.accuracy.label':\n 'KI-generierte Inhalte sollten vor der Verwendung stets überprüft werden.',\n 'common.cancel': 'Abbrechen',\n 'common.close': 'Schließen',\n 'common.readMore': 'Mehr lesen',\n 'common.retry': 'Erneut versuchen',\n 'common.loading': 'Wird geladen',\n 'common.noSearchResults': 'Keine Ergebnisse, die der Suche entsprechen',\n 'menu.newConversation': 'Neuer Chat',\n 'chatbox.header.title': 'Developer Lightspeed',\n 'chatbox.search.placeholder': 'Suchen',\n 'chatbox.provider.other': 'Andere',\n 'chatbox.emptyState.noPinnedChats': 'Keine angehefteten Chats',\n 'chatbox.emptyState.noRecentChats': 'Keine letzten Chats',\n 'chatbox.emptyState.noResults.title': 'Keine Ergebnisse gefunden',\n 'chatbox.emptyState.noResults.body':\n 'Passen Sie Ihre Suchanfrage an, und versuchen Sie es erneut. Überprüfen Sie Ihre Rechtschreibung, oder versuchen Sie es mit einem allgemeineren Begriff.',\n 'chatbox.welcome.greeting': 'Hallo {{userName}}',\n 'chatbox.welcome.description': 'Wie kann ich Ihnen heute helfen?',\n 'chatbox.message.placeholder':\n 'Senden Sie eine Nachricht, und laden Sie optional eine JSON-, YAML- oder TXT-Datei hoch ...',\n 'chatbox.fileUpload.failed': 'Datei-Upload fehlgeschlagen',\n 'chatbox.fileUpload.infoText':\n 'Unterstützte Dateitypen: .txt, .yaml und .json. Die maximale Dateigröße beträgt 25 MB.',\n 'aria.chatbotSelector': 'Chatbot-Auswahl',\n 'aria.important': 'Wichtig',\n 'aria.chatHistoryMenu': 'Chatverlauf-Menü',\n 'aria.closeDrawerPanel': 'Drawer-Fenster schließen',\n 'aria.search.placeholder': 'Suchen',\n 'aria.searchPreviousConversations': 'Vorherige Unterhaltungen durchsuchen',\n 'aria.resize': 'Größe ändern',\n 'aria.options.label': 'Optionen',\n 'aria.scroll.down': 'Zurück zum Ende',\n 'aria.scroll.up': 'Zurück zum Anfang',\n 'aria.settings.label': 'Chatbot-Optionen',\n 'aria.close': 'Chatbot schließen',\n 'modal.edit': 'Bearbeiten',\n 'modal.save': 'Speichern',\n 'modal.close': 'Schließen',\n 'modal.cancel': 'Abbrechen',\n 'conversation.delete': 'Löschen',\n 'conversation.rename': 'Umbenennen',\n 'conversation.addToPinnedChats': 'Anheften',\n 'conversation.removeFromPinnedChats': 'Lösen',\n 'conversation.announcement.userMessage':\n 'Nachricht vom Benutzer: {{prompt}}. Nachricht vom Bot wird geladen.',\n 'user.guest': 'Gast',\n 'conversation.announcement.responseStopped': 'Antwort angehalten.',\n 'user.loading': '...',\n 'tooltip.attach': 'Anhängen',\n 'tooltip.send': 'Senden',\n 'tooltip.microphone.active': 'Überwachen beenden',\n 'tooltip.microphone.inactive': 'Mikrofon verwenden',\n 'button.newChat': 'Neuer Chat',\n 'tooltip.chatHistoryMenu': 'Chatverlauf-Menü',\n 'tooltip.responseRecorded': 'Antwort aufgezeichnet',\n 'tooltip.backToTop': 'Zurück zum Anfang',\n 'tooltip.backToBottom': 'Zurück zum Ende',\n 'tooltip.settings': 'Chatbot-Optionen',\n 'tooltip.close': 'Schließen',\n 'modal.title.preview': 'Anhang in der Vorschau anzeigen',\n 'modal.title.edit': 'Anhang bearbeiten',\n 'icon.lightspeed.alt': 'Lightspeed-Symbol',\n 'icon.permissionRequired.alt': \"Symbol für 'Berechtigung erforderlich'\",\n 'message.options.label': 'Optionen',\n 'file.upload.error.alreadyExists': 'Datei existiert bereits.',\n 'file.upload.error.multipleFiles':\n 'Es wurden mehr als eine Datei hochgeladen.',\n 'file.upload.error.unsupportedType':\n 'Nicht unterstützter Dateityp. Unterstützte Typen: .txt, .yaml und .json.',\n 'file.upload.error.fileTooLarge':\n 'Ihre Dateigröße ist zu groß. Bitte stellen Sie sicher, dass Ihre Datei kleiner als 25 MB ist.',\n 'file.upload.error.readFailed':\n 'Datei konnte nicht gelesen werden: {{errorMessage}}',\n 'error.context.fileAttachment':\n 'useFileAttachmentContext muss innerhalb eines FileAttachmentContextProvider liegen',\n 'feedback.form.title': 'Warum haben Sie diese Bewertung gewählt?',\n 'feedback.form.textAreaPlaceholder':\n 'Geben Sie optional zusätzliches Feedback an',\n 'feedback.form.submitWord': 'Absenden',\n 'feedback.tooltips.goodResponse': 'Gute Antwort',\n 'feedback.tooltips.badResponse': 'Schlechte Antwort',\n 'feedback.tooltips.copied': 'Kopiert',\n 'feedback.tooltips.copy': 'Kopieren',\n 'feedback.tooltips.listening': 'Überwachung',\n 'feedback.tooltips.listen': 'Überwachen',\n 'feedback.quickResponses.positive.helpful': 'Hilfreiche Informationen',\n 'feedback.quickResponses.positive.easyToUnderstand': 'Leicht verständlich',\n 'feedback.quickResponses.positive.resolvedIssue':\n 'Mein Problem wurde gelöst',\n 'feedback.quickResponses.negative.didntAnswer':\n 'Meine Frage wurde nicht beantwortet',\n 'feedback.quickResponses.negative.hardToUnderstand': 'Schwer zu verstehen',\n 'feedback.quickResponses.negative.notHelpful': 'Nicht hilfreich',\n 'feedback.completion.title': 'Feedback übermittelt',\n 'feedback.completion.body':\n 'Wir haben Ihre Antwort erhalten. Vielen Dank für Ihr Feedback!',\n 'conversation.category.pinnedChats': 'Angeheftet',\n 'conversation.category.recent': 'Neueste',\n 'settings.pinned.enable': 'Angeheftete Chats aktivieren',\n 'settings.pinned.disable': 'Angeheftete Chats deaktivieren',\n 'settings.pinned.enabled.description':\n 'Angeheftete Chats sind derzeit aktiviert',\n 'settings.pinned.disabled.description':\n 'Angeheftete Chats sind derzeit deaktiviert.',\n 'settings.mcp.label': 'MCP-Einstellungen',\n 'mcp.settings.title': 'MCP-Server',\n 'mcp.settings.selectedCount':\n '{{selectedCount}} von {{totalCount}} ausgewählt',\n 'mcp.settings.closeAriaLabel': 'MCP-Einstellungen schließen',\n 'mcp.settings.readOnlyAccess':\n 'Sie haben schreibgeschützten Zugriff auf MCP-Server.',\n 'mcp.settings.tableAriaLabel': 'MCP-Server-Tabelle',\n 'mcp.settings.enabled': 'Aktiviert',\n 'mcp.settings.name': 'Name',\n 'mcp.settings.status': 'Status',\n 'mcp.settings.edit': 'Bearbeiten',\n 'mcp.settings.loading': 'MCP-Server werden geladen...',\n 'mcp.settings.noneAvailable': 'Keine MCP-Server verfügbar.',\n 'mcp.settings.status.disabled': 'Deaktiviert',\n 'mcp.settings.status.tokenRequired': 'Token erforderlich',\n 'mcp.settings.status.failed': 'Fehlgeschlagen',\n 'mcp.settings.status.oneTool': '{{count}} Tool',\n 'mcp.settings.status.manyTools': '{{count}} Tools',\n 'mcp.settings.status.unknown': 'Unbekannt',\n 'mcp.settings.toggleServerAriaLabel': '{{serverName}} umschalten',\n 'mcp.settings.editServerAriaLabel': '{{serverName}} bearbeiten',\n 'mcp.settings.configureServerTitle': 'Server {{serverName}} konfigurieren',\n 'mcp.settings.closeConfigureModalAriaLabel':\n 'Konfigurationsdialog schließen',\n 'mcp.settings.modalDescription':\n 'Anmeldedaten werden verschlüsselt gespeichert und sind auf Ihr Profil beschränkt. Lightspeed arbeitet mit genau Ihren Berechtigungen.',\n 'mcp.settings.savedToken': 'Gespeicherter Token',\n 'mcp.settings.personalAccessToken': 'Persönlicher Zugriffstoken',\n 'mcp.settings.usingAdminCredential':\n 'Administratoranmeldedaten werden verwendet. Geben Sie einen persönlichen Token ein, um ihn für Ihr Konto zu überschreiben.',\n 'mcp.settings.enterToken': 'Geben Sie Ihren Token ein',\n 'mcp.settings.removePersonalToken': 'Persönlichen Token entfernen',\n 'mcp.settings.token.clearAriaLabel': 'Tokeneingabe löschen',\n 'mcp.settings.token.validating': 'Token wird validiert...',\n 'mcp.settings.token.savingAndValidating':\n 'Token wird gespeichert und validiert...',\n 'mcp.settings.token.urlUnavailableForValidation':\n 'Token kann nicht validiert werden, da die Server-URL nicht verfügbar ist.',\n 'mcp.settings.token.invalidCredentials':\n 'Ungültige Anmeldedaten. Überprüfen Sie Server-URL und Token.',\n 'mcp.settings.token.validationFailed':\n 'Validierung fehlgeschlagen. Überprüfen Sie Server-URL und Token.',\n 'mcp.settings.token.connectionSuccessful': 'Verbindung erfolgreich',\n 'toolCall.header': 'Antwort des Tools: {{toolName}}',\n 'toolCall.thinking': 'Hat {{seconds}} Sekunden nachgedacht',\n 'toolCall.executionTime': 'Ausführungszeit: ',\n 'toolCall.parameters': 'Parameter',\n 'toolCall.response': 'Antwort',\n 'toolCall.showMore': 'Mehr anzeigen',\n 'toolCall.showLess': 'Weniger anzeigen',\n 'toolCall.loading': 'Tool wird ausgeführt...',\n 'toolCall.executing': 'Tool wird ausgeführt...',\n 'toolCall.copyResponse': 'Antwort kopieren',\n 'toolCall.summary': 'Hier ist eine Zusammenfassung Ihrer Antwort.',\n 'toolCall.mcpServer': 'MCP-Server',\n 'settings.displayMode.label': 'Anzeigemodus',\n 'settings.displayMode.overlay': 'Overlay',\n 'settings.displayMode.docked': 'An Fenster andocken',\n 'settings.displayMode.fullscreen': 'Vollbild',\n 'sort.label': 'Unterhaltungen sortieren',\n 'sort.newest': 'Datum (neuestes zuerst)',\n 'sort.oldest': 'Datum (ältestes zuerst)',\n 'sort.alphabeticalAsc': 'Name (A-Z)',\n 'sort.alphabeticalDesc': 'Name (Z-A)',\n 'reasoning.thinking': 'Denkvorgang anzeigen',\n },\n});\n\nexport default lightspeedTranslationDe;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"de.esm.js","sources":["../../src/translations/de.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\n\nimport { lightspeedTranslationRef } from './ref';\n\n/**\n * de translation for plugin.lightspeed.\n * @public\n */\nconst lightspeedTranslationDe = createTranslationMessages({\n ref: lightspeedTranslationRef,\n messages: {\n 'page.title': 'Lightspeed',\n 'page.subtitle': 'KI-gestützter Entwicklungsassistent',\n 'tabs.ariaLabel': 'Lightspeed-Ansichten',\n 'tabs.chat': 'Chat',\n 'tabs.notebooks': 'Notizbücher',\n 'tabs.notebooks.empty': 'Inhalte der Notizbücher kommen hierhin.',\n 'notebooks.title': 'Meine Notizbücher',\n 'notebooks.empty.title': 'Keine erstellten Notizbücher',\n 'notebooks.empty.description':\n 'Erstellen Sie ein neues Notizbuch, um Ihre Quellen zu organisieren und KI-gestützte Erkenntnisse zu gewinnen.',\n 'notebooks.empty.action': 'Neues Notizbuch erstellen',\n 'notebooks.documents': 'Dokumente',\n 'notebooks.actions.rename': 'Umbenennen',\n 'notebooks.actions.delete': 'Löschen',\n 'notebooks.rename.title': '{{name}} umbenennen?',\n 'notebooks.rename.description':\n 'Bitte geben Sie den neuen Namen für dieses Notizbuch ein und klicken Sie auf „Senden“, um fortzufahren.',\n 'notebooks.rename.label': 'Neuer Name',\n 'notebooks.rename.placeholder': 'Neuer Name',\n 'notebooks.rename.action': 'Senden',\n 'notebooks.delete.title': '{{name}} löschen?',\n 'notebooks.delete.message':\n 'Dieses Notizbuch wird hier nicht mehr angezeigt. Dadurch werden auch zugehörige Aktivitäten wie Eingaben, Antworten und Feedback aus Ihrer Lightspeed-Aktivität gelöscht.',\n 'notebooks.delete.action': 'Löschen',\n 'notebooks.delete.toast': 'Notizbuch gelöscht!',\n 'notebooks.updated.today': 'Heute aktualisiert',\n 'notebooks.updated.yesterday': 'Vor 1 Tag aktualisiert',\n 'notebooks.updated.days': 'Vor {{days}} Tagen aktualisiert',\n 'notebooks.updated.on': 'Aktualisiert am',\n\n // Notebook view\n 'notebook.view.title': 'Unbenanntes Notizbuch',\n 'notebook.view.close': 'Notizbuch schließen',\n 'notebook.view.documents.count': '{{count}} Dokumente',\n 'notebook.view.documents.add': 'Hinzufügen',\n 'notebook.view.upload.heading':\n 'Laden Sie eine Ressource hoch, um zu beginnen',\n 'notebook.view.upload.action': 'Ressource hochladen',\n 'notebook.view.input.placeholder': 'Fragen Sie zu Ihren Dokumenten...',\n 'notebook.view.input.disabledTooltip':\n 'Wählen Sie mindestens eine geladene Ressource aus, um den Chat zu starten',\n 'notebook.view.sidebar.collapse': 'Seitenleiste einklappen',\n 'notebook.view.sidebar.expand': 'Seitenleiste ausklappen',\n 'notebook.view.sidebar.resize': 'Größe der Seitenleiste ändern',\n 'notebook.view.documents.uploading': 'Dokument wird hochgeladen',\n 'notebook.view.documents.maxReached':\n 'Maximal 10 Dokumente sind erlaubt. Löschen Sie ein Dokument, um ein neues hochzuladen.',\n 'notebook.upload.success': '{{fileName}} erfolgreich hochgeladen.',\n 'notebook.upload.failed': 'Hochladen von {{fileName}} fehlgeschlagen.',\n\n // Notebook upload modal\n 'notebook.upload.modal.title': 'Dokument zum Notizbuch hinzufügen',\n 'notebook.upload.modal.dragDropTitle': 'Dateien hierher ziehen und ablegen',\n 'notebook.upload.modal.browseButton': 'Hochladen',\n 'notebook.upload.modal.separator': 'oder',\n 'notebook.upload.modal.infoText':\n 'Akzeptierte Dateitypen: .md, .txt, .pdf, .json, .yaml, .log',\n 'notebook.upload.modal.selectedFiles':\n '{{count}} von {{max}} Dateien ausgewählt',\n 'notebook.upload.modal.addButton': 'Hinzufügen ({{count}})',\n 'notebook.upload.modal.removeFile': '{{fileName}} entfernen',\n 'notebook.upload.error.unsupportedType':\n 'Upload-Fehler: Nicht unterstützte Dateitypen gefunden. Bitte laden Sie nur unterstützte Dateitypen hoch.',\n 'notebook.upload.error.fileTooLarge':\n 'Upload-Fehler: Dateigröße überschreitet das Limit von 25 MB.',\n 'notebook.upload.error.tooManyFiles':\n 'Upload-Fehler: Maximal {{max}} Dateien erlaubt.',\n\n // Notebook overwrite modal\n 'notebook.overwrite.modal.title': 'Dateien überschreiben?',\n 'notebook.overwrite.modal.description':\n 'Die folgenden Dateien existieren bereits in diesem Notizbuch. Möchten Sie sie mit den neuen Versionen überschreiben?',\n 'notebook.overwrite.modal.action': 'Überschreiben',\n 'notebook.document.delete': 'Löschen',\n\n 'prompts.codeReadability.title': 'Hilfe zur Code-Lesbarkeit erhalten',\n 'prompts.codeReadability.message':\n 'Können Sie mir Techniken vorschlagen, mit denen ich meinen Code lesbarer und wartungsfreundlicher gestalten kann?',\n 'prompts.debugging.title': 'Hilfe beim Debuggen erhalten',\n 'prompts.debugging.message':\n 'Meine Anwendung gibt beim Versuch einer Verbindung zur Datenbank einen Fehler aus. Können Sie mir helfen, das Problem zu identifizieren?',\n 'prompts.developmentConcept.title': 'Ein Entwicklungskonzept erläutern',\n 'prompts.developmentConcept.message':\n 'Können Sie erklären, wie eine Microservices-Architektur funktioniert und welche Vorteile sie gegenüber einem monolithischen Design bietet?',\n 'prompts.codeOptimization.title':\n 'Vorschläge zur Codeoptimierung unterbreiten',\n 'prompts.codeOptimization.message':\n 'Können Sie gängige Methoden zur Codeoptimierung vorschlagen, um eine bessere Performance zu erzielen?',\n 'prompts.documentation.title': 'Zusammenfassung von Dokumentation',\n 'prompts.documentation.message':\n 'Können Sie die Dokumentation zur Implementierung der OAuth 2.0-Authentifizierung in einer Webanwendung zusammenfassen?',\n 'prompts.gitWorkflows.title': 'Workflows mit Git',\n 'prompts.gitWorkflows.message':\n 'Ich möchte Änderungen am Code in einem anderen Branch vornehmen, ohne meine bestehende Arbeit zu verlieren. Wie geht man dabei mit Git vor?',\n 'prompts.testingStrategies.title': 'Teststrategien vorschlagen',\n 'prompts.testingStrategies.message':\n 'Können Sie mir einige gängige Teststrategien empfehlen, die meine Anwendung robust und fehlerfrei machen?',\n 'prompts.sortingAlgorithms.title':\n 'Sortieralgorithmen verständlich erklären',\n 'prompts.sortingAlgorithms.message':\n 'Können Sie den Unterschied zwischen Quicksort und Mergesort erklären und wann man welchen Algorithmus verwendet?',\n 'prompts.eventDriven.title': 'Ereignisgesteuerte Architektur verstehen',\n 'prompts.eventDriven.message':\n 'Können Sie erklären, was ereignisgesteuerte Architektur bedeutet und wann ihre Verwendung in der Softwareentwicklung von Vorteil ist?',\n 'prompts.tekton.title': 'Mit Tekton deployen',\n 'prompts.tekton.message':\n 'Können Sie mir helfen, das Deployment meiner Anwendung mithilfe von Tekton-Pipelines zu automatisieren?',\n 'prompts.openshift.title': 'OpenShift-Deployment erstellen',\n 'prompts.openshift.message':\n 'Können Sie mich bei der Erstellung eines neuen Deployments in OpenShift für eine containerisierte Anwendung unterstützen?',\n 'prompts.rhdh.title': 'Erste Schritte mit dem Red Hat Developer Hub',\n 'prompts.rhdh.message':\n 'Können Sie mich bei den ersten Schritten zur Nutzung des Developer Hub als Entwickler unterstützen, z. B. beim Erkunden des Softwarekatalogs und beim Hinzufügen meines Dienstes?',\n 'conversation.delete.confirm.title': 'Chat löschen?',\n 'conversation.delete.confirm.message':\n 'Dieser Chat wird hier nicht mehr angezeigt. Dadurch werden auch zugehörige Aktivitäten wie Prompts, Antworten und Feedback aus Ihrer Lightspeed-Aktivität gelöscht.',\n 'conversation.delete.confirm.action': 'Löschen',\n 'conversation.rename.confirm.title': 'Chat umbenennen?',\n 'conversation.rename.confirm.action': 'Umbenennen',\n 'conversation.rename.placeholder': 'Chatname',\n 'permission.required.title': 'Fehlende Berechtigungen',\n 'permission.required.description':\n 'Um <subject/> anzuzeigen, wenden Sie sich an Ihren Administrator, um die Berechtigung <permissions/> zu erhalten.',\n 'permission.subject.plugin': 'das Lightspeed-Plugin',\n 'permission.subject.notebooks': 'die Lightspeed-Notizbücher',\n 'permission.notebooks.goBack': 'Zurück',\n 'lcore.notConfigured.title': 'Verbinden Sie ein LLM, um zu starten',\n 'lcore.notConfigured.description':\n 'Lightspeed erfordert ein registriertes LLM. Wenden Sie sich an den Plattformadministrator Ihrer Organisation, um die Einrichtung abzuschließen.',\n 'lcore.notConfigured.developerLightspeedDocs':\n 'Developer Lightspeed wird konfiguriert',\n 'lcore.notConfigured.backendDocs': 'Lightspeed-Backend einrichten',\n 'lcore.loadError.title': 'Modelle konnten nicht geladen werden',\n 'lcore.loadError.description':\n 'Das Lightspeed-Backend hat keine Modellliste zurückgegeben. Prüfen Sie, ob der Dienst läuft und erreichbar ist, und versuchen Sie es erneut.',\n 'disclaimer.withValidation':\n 'Diese Funktion nutzt KI-Technologie. Geben Sie bei Ihrer Eingabe keine persönlichen oder sonstigen sensiblen Informationen an. Interaktionen können dazu genutzt werden, die Produkte oder Dienstleistungen von Red Hat zu verbessern.',\n 'disclaimer.withoutValidation':\n 'Diese Funktion nutzt KI-Technologie. Geben Sie bei Ihrer Eingabe keine persönlichen oder sonstigen sensiblen Informationen an. Interaktionen können dazu genutzt werden, die Produkte oder Dienstleistungen von Red Hat zu verbessern.',\n 'footer.accuracy.label':\n 'KI-generierte Inhalte sollten vor der Verwendung stets überprüft werden.',\n 'common.cancel': 'Abbrechen',\n 'common.close': 'Schließen',\n 'common.readMore': 'Mehr lesen',\n 'common.retry': 'Erneut versuchen',\n 'common.loading': 'Wird geladen',\n 'common.noSearchResults': 'Keine Ergebnisse, die der Suche entsprechen',\n 'menu.newConversation': 'Neuer Chat',\n 'chatbox.header.title': 'Developer Lightspeed',\n 'chatbox.search.placeholder': 'Suchen',\n 'chatbox.provider.other': 'Andere',\n 'chatbox.emptyState.noPinnedChats': 'Keine angehefteten Chats',\n 'chatbox.emptyState.noRecentChats': 'Keine letzten Chats',\n 'chatbox.emptyState.noResults.title': 'Keine Ergebnisse gefunden',\n 'chatbox.emptyState.noResults.body':\n 'Passen Sie Ihre Suchanfrage an, und versuchen Sie es erneut. Überprüfen Sie Ihre Rechtschreibung, oder versuchen Sie es mit einem allgemeineren Begriff.',\n 'chatbox.welcome.greeting': 'Hallo {{userName}}',\n 'chatbox.welcome.description': 'Wie kann ich Ihnen heute helfen?',\n 'chatbox.message.placeholder':\n 'Senden Sie eine Nachricht, und laden Sie optional eine JSON-, YAML- oder TXT-Datei hoch ...',\n 'chatbox.fileUpload.failed': 'Datei-Upload fehlgeschlagen',\n 'chatbox.fileUpload.infoText':\n 'Unterstützte Dateitypen: .txt, .yaml und .json. Die maximale Dateigröße beträgt 25 MB.',\n 'aria.chatbotSelector': 'Chatbot-Auswahl',\n 'aria.important': 'Wichtig',\n 'aria.chatHistoryMenu': 'Chatverlauf-Menü',\n 'aria.closeDrawerPanel': 'Drawer-Fenster schließen',\n 'aria.search.placeholder': 'Suchen',\n 'aria.searchPreviousConversations': 'Vorherige Unterhaltungen durchsuchen',\n 'aria.resize': 'Größe ändern',\n 'aria.options.label': 'Optionen',\n 'aria.scroll.down': 'Zurück zum Ende',\n 'aria.scroll.up': 'Zurück zum Anfang',\n 'aria.settings.label': 'Chatbot-Optionen',\n 'aria.close': 'Chatbot schließen',\n 'modal.edit': 'Bearbeiten',\n 'modal.save': 'Speichern',\n 'modal.close': 'Schließen',\n 'modal.cancel': 'Abbrechen',\n 'conversation.delete': 'Löschen',\n 'conversation.rename': 'Umbenennen',\n 'conversation.addToPinnedChats': 'Anheften',\n 'conversation.removeFromPinnedChats': 'Lösen',\n 'conversation.announcement.userMessage':\n 'Nachricht vom Benutzer: {{prompt}}. Nachricht vom Bot wird geladen.',\n 'user.guest': 'Gast',\n 'conversation.announcement.responseStopped': 'Antwort angehalten.',\n 'user.loading': '...',\n 'tooltip.attach': 'Anhängen',\n 'tooltip.send': 'Senden',\n 'tooltip.microphone.active': 'Überwachen beenden',\n 'tooltip.microphone.inactive': 'Mikrofon verwenden',\n 'button.newChat': 'Neuer Chat',\n 'tooltip.chatHistoryMenu': 'Chatverlauf-Menü',\n 'tooltip.responseRecorded': 'Antwort aufgezeichnet',\n 'tooltip.backToTop': 'Zurück zum Anfang',\n 'tooltip.backToBottom': 'Zurück zum Ende',\n 'tooltip.settings': 'Chatbot-Optionen',\n 'tooltip.close': 'Schließen',\n 'tooltip.fab.open': 'Lightspeed öffnen',\n 'tooltip.fab.close': 'Lightspeed schließen',\n 'modal.title.preview': 'Anhang in der Vorschau anzeigen',\n 'modal.title.edit': 'Anhang bearbeiten',\n 'icon.lightspeed.alt': 'Lightspeed-Symbol',\n 'icon.permissionRequired.alt': \"Symbol für 'Berechtigung erforderlich'\",\n 'message.options.label': 'Optionen',\n 'file.upload.error.alreadyExists': 'Datei existiert bereits.',\n 'file.upload.error.multipleFiles':\n 'Es wurden mehr als eine Datei hochgeladen.',\n 'file.upload.error.unsupportedType':\n 'Nicht unterstützter Dateityp. Unterstützte Typen: .txt, .yaml und .json.',\n 'file.upload.error.fileTooLarge':\n 'Ihre Dateigröße ist zu groß. Bitte stellen Sie sicher, dass Ihre Datei kleiner als 25 MB ist.',\n 'file.upload.error.readFailed':\n 'Datei konnte nicht gelesen werden: {{errorMessage}}',\n 'error.context.fileAttachment':\n 'useFileAttachmentContext muss innerhalb eines FileAttachmentContextProvider liegen',\n 'feedback.form.title': 'Warum haben Sie diese Bewertung gewählt?',\n 'feedback.form.textAreaPlaceholder':\n 'Geben Sie optional zusätzliches Feedback an',\n 'feedback.form.submitWord': 'Absenden',\n 'feedback.tooltips.goodResponse': 'Gute Antwort',\n 'feedback.tooltips.badResponse': 'Schlechte Antwort',\n 'feedback.tooltips.copied': 'Kopiert',\n 'feedback.tooltips.copy': 'Kopieren',\n 'feedback.tooltips.listening': 'Überwachung',\n 'feedback.tooltips.listen': 'Überwachen',\n 'feedback.quickResponses.positive.helpful': 'Hilfreiche Informationen',\n 'feedback.quickResponses.positive.easyToUnderstand': 'Leicht verständlich',\n 'feedback.quickResponses.positive.resolvedIssue':\n 'Mein Problem wurde gelöst',\n 'feedback.quickResponses.negative.didntAnswer':\n 'Meine Frage wurde nicht beantwortet',\n 'feedback.quickResponses.negative.hardToUnderstand': 'Schwer zu verstehen',\n 'feedback.quickResponses.negative.notHelpful': 'Nicht hilfreich',\n 'feedback.completion.title': 'Feedback übermittelt',\n 'feedback.completion.body':\n 'Wir haben Ihre Antwort erhalten. Vielen Dank für Ihr Feedback!',\n 'conversation.category.pinnedChats': 'Angeheftet',\n 'conversation.category.recent': 'Neueste',\n 'settings.pinned.enable': 'Angeheftete Chats aktivieren',\n 'settings.pinned.disable': 'Angeheftete Chats deaktivieren',\n 'settings.pinned.enabled.description':\n 'Angeheftete Chats sind derzeit aktiviert',\n 'settings.pinned.disabled.description':\n 'Angeheftete Chats sind derzeit deaktiviert.',\n 'settings.mcp.label': 'MCP-Einstellungen',\n 'mcp.settings.title': 'MCP-Server',\n 'mcp.settings.selectedCount':\n '{{selectedCount}} von {{totalCount}} ausgewählt',\n 'mcp.settings.closeAriaLabel': 'MCP-Einstellungen schließen',\n 'mcp.settings.readOnlyAccess':\n 'Sie haben schreibgeschützten Zugriff auf MCP-Server.',\n 'mcp.settings.tableAriaLabel': 'MCP-Server-Tabelle',\n 'mcp.settings.enabled': 'Aktiviert',\n 'mcp.settings.name': 'Name',\n 'mcp.settings.status': 'Status',\n 'mcp.settings.edit': 'Bearbeiten',\n 'mcp.settings.loading': 'MCP-Server werden geladen...',\n 'mcp.settings.noneAvailable': 'Keine MCP-Server verfügbar.',\n 'mcp.settings.status.disabled': 'Deaktiviert',\n 'mcp.settings.status.tokenRequired': 'Token erforderlich',\n 'mcp.settings.status.failed': 'Fehlgeschlagen',\n 'mcp.settings.status.oneTool': '{{count}} Tool',\n 'mcp.settings.status.manyTools': '{{count}} Tools',\n 'mcp.settings.status.unknown': 'Unbekannt',\n 'mcp.settings.toggleServerAriaLabel': '{{serverName}} umschalten',\n 'mcp.settings.editServerAriaLabel': '{{serverName}} bearbeiten',\n 'mcp.settings.configureServerTitle': 'Server {{serverName}} konfigurieren',\n 'mcp.settings.closeConfigureModalAriaLabel':\n 'Konfigurationsdialog schließen',\n 'mcp.settings.modalDescription':\n 'Anmeldedaten werden verschlüsselt gespeichert und sind auf Ihr Profil beschränkt. Lightspeed arbeitet mit genau Ihren Berechtigungen.',\n 'mcp.settings.savedToken': 'Gespeicherter Token',\n 'mcp.settings.personalAccessToken': 'Persönlicher Zugriffstoken',\n 'mcp.settings.usingAdminCredential':\n 'Administratoranmeldedaten werden verwendet. Geben Sie einen persönlichen Token ein, um ihn für Ihr Konto zu überschreiben.',\n 'mcp.settings.enterToken': 'Geben Sie Ihren Token ein',\n 'mcp.settings.removePersonalToken': 'Persönlichen Token entfernen',\n 'mcp.settings.token.clearAriaLabel': 'Tokeneingabe löschen',\n 'mcp.settings.token.validating': 'Token wird validiert...',\n 'mcp.settings.token.savingAndValidating':\n 'Token wird gespeichert und validiert...',\n 'mcp.settings.token.urlUnavailableForValidation':\n 'Token kann nicht validiert werden, da die Server-URL nicht verfügbar ist.',\n 'mcp.settings.token.invalidCredentials':\n 'Ungültige Anmeldedaten. Überprüfen Sie Server-URL und Token.',\n 'mcp.settings.token.validationFailed':\n 'Validierung fehlgeschlagen. Überprüfen Sie Server-URL und Token.',\n 'mcp.settings.token.connectionSuccessful': 'Verbindung erfolgreich',\n 'toolCall.header': 'Antwort des Tools: {{toolName}}',\n 'toolCall.thinking': 'Hat {{seconds}} Sekunden nachgedacht',\n 'toolCall.executionTime': 'Ausführungszeit: ',\n 'toolCall.parameters': 'Parameter',\n 'toolCall.response': 'Antwort',\n 'toolCall.showMore': 'Mehr anzeigen',\n 'toolCall.showLess': 'Weniger anzeigen',\n 'toolCall.loading': 'Tool wird ausgeführt...',\n 'toolCall.executing': 'Tool wird ausgeführt...',\n 'toolCall.copyResponse': 'Antwort kopieren',\n 'toolCall.summary': 'Hier ist eine Zusammenfassung Ihrer Antwort.',\n 'toolCall.mcpServer': 'MCP-Server',\n 'settings.displayMode.label': 'Anzeigemodus',\n 'settings.displayMode.overlay': 'Overlay',\n 'settings.displayMode.docked': 'An Fenster andocken',\n 'settings.displayMode.fullscreen': 'Vollbild',\n 'sort.label': 'Unterhaltungen sortieren',\n 'sort.newest': 'Datum (neuestes zuerst)',\n 'sort.oldest': 'Datum (ältestes zuerst)',\n 'sort.alphabeticalAsc': 'Name (A-Z)',\n 'sort.alphabeticalDesc': 'Name (Z-A)',\n 'reasoning.thinking': 'Denkvorgang anzeigen',\n },\n});\n\nexport default lightspeedTranslationDe;\n"],"names":[],"mappings":"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"}
@@ -161,6 +161,8 @@ const lightspeedTranslationEs = createTranslationMessages({
161
161
  "tooltip.backToBottom": "Volver al final",
162
162
  "tooltip.settings": "Opciones de chatbot",
163
163
  "tooltip.close": "Cerrar",
164
+ "tooltip.fab.open": "Abrir Lightspeed",
165
+ "tooltip.fab.close": "Cerrar Lightspeed",
164
166
  "modal.title.preview": "Previsualizar archivo adjunto",
165
167
  "modal.title.edit": "Modificar archivo adjunto",
166
168
  "icon.lightspeed.alt": "icono de Lightspeed",