@red-hat-developer-hub/backstage-plugin-intelligent-assistant 5.0.1 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/alpha.d.ts +1 -9
  3. package/dist/components/Attachment.esm.js +10 -12
  4. package/dist/components/Attachment.esm.js.map +1 -1
  5. package/dist/components/CollapsedHistoryStrip.esm.js +46 -51
  6. package/dist/components/CollapsedHistoryStrip.esm.js.map +1 -1
  7. package/dist/components/FilePreview.esm.js +3 -2
  8. package/dist/components/FilePreview.esm.js.map +1 -1
  9. package/dist/components/LightSpeedChat.esm.js +655 -787
  10. package/dist/components/LightSpeedChat.esm.js.map +1 -1
  11. package/dist/components/LightspeedChatBox.esm.js +2 -3
  12. package/dist/components/LightspeedChatBox.esm.js.map +1 -1
  13. package/dist/components/LightspeedChatBoxHeader.esm.js +40 -35
  14. package/dist/components/LightspeedChatBoxHeader.esm.js.map +1 -1
  15. package/dist/components/LightspeedChatContainer.esm.js +43 -67
  16. package/dist/components/LightspeedChatContainer.esm.js.map +1 -1
  17. package/dist/components/LightspeedChatModelsState.esm.js +67 -73
  18. package/dist/components/LightspeedChatModelsState.esm.js.map +1 -1
  19. package/dist/components/LightspeedDrawerContext.esm.js.map +1 -1
  20. package/dist/components/LightspeedDrawerProvider.esm.js +13 -16
  21. package/dist/components/LightspeedDrawerProvider.esm.js.map +1 -1
  22. package/dist/components/LightspeedFABContent.esm.js +49 -9
  23. package/dist/components/LightspeedFABContent.esm.js.map +1 -1
  24. package/dist/components/LightspeedPage.esm.js +12 -12
  25. package/dist/components/LightspeedPage.esm.js.map +1 -1
  26. package/dist/components/McpConfigureServerModal.esm.js +81 -89
  27. package/dist/components/McpConfigureServerModal.esm.js.map +1 -1
  28. package/dist/components/McpServersSettings.esm.js +259 -239
  29. package/dist/components/McpServersSettings.esm.js.map +1 -1
  30. package/dist/components/MessageBarModelSelector.esm.js +29 -33
  31. package/dist/components/MessageBarModelSelector.esm.js.map +1 -1
  32. package/dist/components/RenameConversationModal.esm.js +38 -31
  33. package/dist/components/RenameConversationModal.esm.js.map +1 -1
  34. package/dist/components/Router.esm.js +4 -13
  35. package/dist/components/Router.esm.js.map +1 -1
  36. package/dist/components/ToastAlertGroup.esm.js +24 -40
  37. package/dist/components/ToastAlertGroup.esm.js.map +1 -1
  38. package/dist/components/ToolCallContent.esm.js +8 -11
  39. package/dist/components/ToolCallContent.esm.js.map +1 -1
  40. package/dist/components/notebooks/AddDocumentModal.esm.js +232 -252
  41. package/dist/components/notebooks/AddDocumentModal.esm.js.map +1 -1
  42. package/dist/components/notebooks/DeleteDocumentModal.esm.js +35 -77
  43. package/dist/components/notebooks/DeleteDocumentModal.esm.js.map +1 -1
  44. package/dist/components/notebooks/DeleteNotebookModal.esm.js +46 -81
  45. package/dist/components/notebooks/DeleteNotebookModal.esm.js.map +1 -1
  46. package/dist/components/notebooks/DocumentSidebar.esm.js +172 -196
  47. package/dist/components/notebooks/DocumentSidebar.esm.js.map +1 -1
  48. package/dist/components/notebooks/FileListItem.esm.js +69 -57
  49. package/dist/components/notebooks/FileListItem.esm.js.map +1 -1
  50. package/dist/components/notebooks/FileTypeIcon.esm.js +17 -27
  51. package/dist/components/notebooks/FileTypeIcon.esm.js.map +1 -1
  52. package/dist/components/notebooks/NotebookCard.esm.js +86 -25
  53. package/dist/components/notebooks/NotebookCard.esm.js.map +1 -1
  54. package/dist/components/notebooks/NotebookView.esm.js +367 -380
  55. package/dist/components/notebooks/NotebookView.esm.js.map +1 -1
  56. package/dist/components/notebooks/NotebooksTab.esm.js +93 -30
  57. package/dist/components/notebooks/NotebooksTab.esm.js.map +1 -1
  58. package/dist/components/notebooks/OverwriteConfirmModal.esm.js +142 -184
  59. package/dist/components/notebooks/OverwriteConfirmModal.esm.js.map +1 -1
  60. package/dist/components/notebooks/UploadResourceScreen.esm.js +58 -50
  61. package/dist/components/notebooks/UploadResourceScreen.esm.js.map +1 -1
  62. package/dist/components/notebooks/notebookDialogStyles.esm.js +33 -37
  63. package/dist/components/notebooks/notebookDialogStyles.esm.js.map +1 -1
  64. package/dist/const.esm.js +15 -2
  65. package/dist/const.esm.js.map +1 -1
  66. package/dist/hooks/useAllModels.esm.js +2 -1
  67. package/dist/hooks/useAllModels.esm.js.map +1 -1
  68. package/dist/hooks/useAutoScroll.esm.js +11 -11
  69. package/dist/hooks/useAutoScroll.esm.js.map +1 -1
  70. package/dist/hooks/useBufferedMessages.esm.js +5 -5
  71. package/dist/hooks/useBufferedMessages.esm.js.map +1 -1
  72. package/dist/hooks/useConversations.esm.js +2 -1
  73. package/dist/hooks/useConversations.esm.js.map +1 -1
  74. package/dist/hooks/useIaChatPermission.esm.js +15 -0
  75. package/dist/hooks/useIaChatPermission.esm.js.map +1 -0
  76. package/dist/hooks/useIaMcpToolsPermission.esm.js +15 -0
  77. package/dist/hooks/useIaMcpToolsPermission.esm.js.map +1 -0
  78. package/dist/hooks/{notebooks/useLightspeedNotebooksPermission.esm.js → useIaNotebooksPermission.esm.js} +4 -5
  79. package/dist/hooks/useIaNotebooksPermission.esm.js.map +1 -0
  80. package/dist/hooks/useIsMobile.esm.js +3 -3
  81. package/dist/hooks/useIsMobile.esm.js.map +1 -1
  82. package/dist/hooks/useMcpConfigureModal.esm.js +5 -9
  83. package/dist/hooks/useMcpConfigureModal.esm.js.map +1 -1
  84. package/dist/hooks/useNotebookConversationIds.esm.js +2 -1
  85. package/dist/hooks/useNotebookConversationIds.esm.js.map +1 -1
  86. package/dist/hooks/useQuestionValidation.esm.js +3 -2
  87. package/dist/hooks/useQuestionValidation.esm.js.map +1 -1
  88. package/dist/hooks/useWelcomePrompts.esm.js +2 -2
  89. package/dist/hooks/useWelcomePrompts.esm.js.map +1 -1
  90. package/dist/translations/de.esm.js +1 -9
  91. package/dist/translations/de.esm.js.map +1 -1
  92. package/dist/translations/es.esm.js +1 -9
  93. package/dist/translations/es.esm.js.map +1 -1
  94. package/dist/translations/fr.esm.js +1 -9
  95. package/dist/translations/fr.esm.js.map +1 -1
  96. package/dist/translations/it.esm.js +1 -9
  97. package/dist/translations/it.esm.js.map +1 -1
  98. package/dist/translations/ja.esm.js +1 -9
  99. package/dist/translations/ja.esm.js.map +1 -1
  100. package/dist/translations/ref.esm.js +1 -10
  101. package/dist/translations/ref.esm.js.map +1 -1
  102. package/dist/types.esm.js.map +1 -1
  103. package/dist/utils/fab-anchor-utils.esm.js +41 -0
  104. package/dist/utils/fab-anchor-utils.esm.js.map +1 -0
  105. package/dist/utils/scoped-dialog-utils.esm.js +6 -3
  106. package/dist/utils/scoped-dialog-utils.esm.js.map +1 -1
  107. package/package.json +5 -8
  108. package/dist/components/PermissionRequiredIcon.esm.js +0 -18
  109. package/dist/components/PermissionRequiredIcon.esm.js.map +0 -1
  110. package/dist/components/PermissionRequiredState.esm.js +0 -88
  111. package/dist/components/PermissionRequiredState.esm.js.map +0 -1
  112. package/dist/hooks/notebooks/useLightspeedNotebooksPermission.esm.js.map +0 -1
  113. package/dist/hooks/useLightspeedDeletePermission.esm.js +0 -12
  114. package/dist/hooks/useLightspeedDeletePermission.esm.js.map +0 -1
  115. package/dist/hooks/useLightspeedUpdatePermission.esm.js +0 -12
  116. package/dist/hooks/useLightspeedUpdatePermission.esm.js.map +0 -1
  117. package/dist/hooks/useLightspeedViewPermission.esm.js +0 -16
  118. package/dist/hooks/useLightspeedViewPermission.esm.js.map +0 -1
  119. package/dist/images/permission-required.svg +0 -319
  120. package/dist/utils/generateClassName.esm.js +0 -12
  121. package/dist/utils/generateClassName.esm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"NotebookView.esm.js","sources":["../../../src/components/notebooks/NotebookView.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\n\nimport { makeStyles, Typography } from '@material-ui/core';\nimport { useTheme } from '@material-ui/core/styles';\nimport { ChatbotContent, ChatbotFooter, MessageBar } from '@patternfly/chatbot';\nimport {\n Alert,\n Button,\n Drawer,\n DrawerContent,\n DrawerContentBody,\n DrawerPanelContent,\n Tooltip,\n type AlertProps,\n} from '@patternfly/react-core';\nimport { PlusIcon, TimesIcon } from '@patternfly/react-icons';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\nimport {\n NOTEBOOK_MAX_FILES,\n TEMP_CONVERSATION_ID,\n UNTITLED_NOTEBOOK_NAME,\n} from '../../const';\nimport { useCreateNotebookMessage } from '../../hooks/notebooks/useCreateNotebookMessage';\nimport {\n useDocumentStatusPolling,\n type PendingUpload,\n} from '../../hooks/notebooks/useDocumentStatusPolling';\nimport { useRenameDocument } from '../../hooks/notebooks/useRenameDocument';\nimport { useRenameNotebookWithAlert } from '../../hooks/notebooks/useRenameNotebookWithAlert';\nimport { useUploadDocument } from '../../hooks/notebooks/useUploadDocument';\nimport { useConversationMessages } from '../../hooks/useConversationMessages';\nimport { useNotebookWelcomePrompts } from '../../hooks/useNotebookWelcomePrompts';\nimport { useStopConversation } from '../../hooks/useStopConversation';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport botAvatarDark from '../../images/bot-avatar-dark.svg';\nimport botAvatarLight from '../../images/bot-avatar.svg';\nimport userAvatar from '../../images/user-avatar.svg';\nimport { NotebookSessionMetadata, SessionDocument } from '../../types';\nimport { ChatbotFootnoteWithIcon } from '../../utils/lightspeed-chatbox-utils';\nimport { runFileUploads } from '../../utils/notebook-upload-runner';\nimport { LightspeedChatBox } from '../LightspeedChatBox';\nimport { ToastAlertGroup } from '../ToastAlertGroup';\nimport { AddDocumentModal } from './AddDocumentModal';\nimport { DeleteDocumentModal } from './DeleteDocumentModal';\nimport { DocumentSidebar } from './DocumentSidebar';\nimport { useNotebookStream } from './NotebookStreamProvider';\nimport { OverwriteConfirmModal } from './OverwriteConfirmModal';\nimport { AddCircleFilledIcon, SidebarExpandIcon } from './SidebarCollapseIcon';\nimport { UploadResourceScreen } from './UploadResourceScreen';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n minWidth: 0,\n width: '100%',\n overflow: 'hidden',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n drawerContent: {\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n },\n drawerContainer: {\n flex: 1,\n minHeight: 0,\n minWidth: 0,\n '& .pf-v6-c-drawer__panel, & .pf-v5-c-drawer__panel': {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n },\n expandStrip: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: theme.spacing(1.5),\n gap: theme.spacing(1),\n borderRight: '1px solid var(--pf-t--global--border--color--default)',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n addIconButton: {\n padding: 0,\n minWidth: 0,\n lineHeight: 1,\n },\n mainArea: {\n display: 'flex',\n flexDirection: 'row',\n flex: 1,\n minHeight: 0,\n minWidth: 0,\n },\n topBar: {\n display: 'flex',\n justifyContent: 'flex-end',\n padding: `${theme.spacing(1.5)}px ${theme.spacing(2)}px`,\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n closeButton: {\n textTransform: 'none',\n },\n mainContent: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n minWidth: 0,\n },\n drawerContentBody: {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n minWidth: 0,\n },\n contentColumn: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minWidth: 0,\n minHeight: 0,\n overflow: 'hidden',\n },\n notebookDisclaimerStrip: {\n width: '100%',\n maxWidth: 'unset',\n margin: 0,\n padding: `0 0 ${theme.spacing(1)}px`,\n boxSizing: 'border-box',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n notebookDisclaimerInner: {\n width: '95%',\n maxWidth: 'unset',\n margin: '0 auto',\n },\n welcomeContainer: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n overflow: 'auto',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n notebookEmptyUpload: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0,\n minWidth: 0,\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n },\n notebookContentArea: {\n width: '95%',\n maxWidth: 'unset',\n margin: `${theme.spacing(3)}px auto 0 auto`,\n padding: 0,\n },\n notebookHeading: {\n fontSize: '2rem',\n fontWeight: 500,\n lineHeight: 1.25,\n padding: `${theme.spacing(1)}px 0`,\n },\n notebookSummary: {\n fontSize: '1rem',\n lineHeight: 2,\n color: 'var(--pf-t--global--text--color--regular)',\n paddingTop: theme.spacing(0.5),\n },\n promptSuggestions: {\n display: 'flex',\n flexWrap: 'wrap' as const,\n gap: theme.spacing(1),\n width: '95%',\n maxWidth: 'unset',\n margin: `${theme.spacing(3)}px auto ${theme.spacing(3)}px auto`,\n justifyContent: 'flex-start',\n },\n promptPill: {\n appearance: 'none' as const,\n background: 'transparent',\n border: `1px solid var(--pf-t--global--border--color--default)`,\n borderRadius: '999px',\n padding: `${theme.spacing(1)}px ${theme.spacing(2.5)}px`,\n fontSize: '0.875rem',\n color: 'var(--pf-t--global--text--color--regular)',\n cursor: 'pointer',\n transition: 'background-color 0.15s, border-color 0.15s',\n '&:hover': {\n backgroundColor:\n 'var(--pf-t--global--background--color--secondary--default)',\n borderColor: 'var(--pf-t--global--border--color--hover)',\n },\n },\n footer: {\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default) !important',\n '&>.pf-chatbot__footer-container': {\n width: '95% !important',\n maxWidth: 'unset !important',\n },\n '& .pf-chatbot__message-bar': {\n backgroundColor:\n theme.palette.type === 'light'\n ? theme.palette.grey[100]\n : 'var(--pf-t--global--background--color--secondary--default)',\n },\n },\n chatContent: {\n minHeight: 0,\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n overflow: 'auto',\n backgroundColor:\n 'var(--pf-t--global--background--color--floating--default)',\n '& .pf-chatbot__message-contents': {\n overflowX: 'hidden',\n overflowWrap: 'break-word',\n wordBreak: 'break-word',\n },\n },\n}));\n\ntype NotebookViewProps = {\n sessionId: string;\n notebookName?: string;\n documents?: SessionDocument[];\n isDocumentsFetching?: boolean;\n metadata?: NotebookSessionMetadata;\n topicSummary?: string;\n userName?: string;\n avatar?: string;\n profileLoading: boolean;\n topicRestrictionEnabled: boolean;\n onClose: () => void;\n isCompact?: boolean;\n sidebarCollapsed: boolean;\n onSidebarCollapsedChange: (collapsed: boolean) => void;\n isUploadModalOpen: boolean;\n onUploadModalOpenChange: (open: boolean) => void;\n onUploadsInProgressChange?: (inProgress: boolean) => void;\n};\n\nexport const NotebookView = ({\n sessionId,\n notebookName = UNTITLED_NOTEBOOK_NAME,\n documents = [],\n isDocumentsFetching = false,\n metadata,\n topicSummary,\n userName,\n avatar,\n profileLoading,\n topicRestrictionEnabled,\n onClose,\n isCompact = false,\n sidebarCollapsed,\n onSidebarCollapsedChange,\n isUploadModalOpen,\n onUploadModalOpenChange,\n onUploadsInProgressChange,\n}: NotebookViewProps) => {\n const classes = useStyles();\n const theme = useTheme();\n const botAvatar =\n theme.palette.type === 'dark' ? botAvatarDark : botAvatarLight;\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const configApi = useApi(configApiRef);\n const notebooksApi = useApi(notebooksApiRef);\n const { mutateAsync: notebookCreateMessage } = useCreateNotebookMessage();\n\n // Use notebook-specific model from config instead of chat's selected model\n const notebookModel =\n configApi.getOptionalString(\n 'intelligent-assistant.notebooks.queryDefaults.model',\n ) || '';\n\n const [conversationId, setConversationId] = useState(\n metadata?.conversation_id ?? TEMP_CONVERSATION_ID,\n );\n const { mutate: stopConversation } = useStopConversation();\n\n // Streaming lives in a store above the display-mode remount boundary, so it\n // survives overlay/docked/fullscreen switches. This view only subscribes.\n const {\n messages: streamMessages,\n status: streamStatus,\n requestId,\n send: sendNotebookStream,\n stop: stopNotebookStream,\n } = useNotebookStream(sessionId);\n const isStreaming = streamStatus === 'streaming';\n\n const [announcement, setAnnouncement] = useState<string | undefined>(\n undefined,\n );\n const [deletingDocumentIds, setDeletingDocumentIds] = useState<Set<string>>(\n new Set(),\n );\n const [deleteDocumentTarget, setDeleteDocumentTarget] = useState<{\n id: string;\n name: string;\n } | null>(null);\n\n const handleDeleteDocument = useCallback((documentId: string) => {\n setDeleteDocumentTarget({ id: documentId, name: documentId });\n }, []);\n\n const { mutateAsync: renameDocument } = useRenameDocument();\n\n // Read-only: persisted (server) messages + transform. Displayed when the\n // store has no live/finished stream for this session. Sending is handled by\n // the stream store, not this hook.\n const { conversationMessages, scrollToBottomRef } = useConversationMessages(\n conversationId,\n userName,\n notebookModel,\n '',\n avatar,\n );\n\n // Show the store's transcript whenever there is an active or finished stream\n // for this session; otherwise fall back to persisted server messages.\n const messages =\n streamStatus === 'idle' ? conversationMessages : streamMessages;\n\n // Keep the local conversation id in sync when the store resolves a temp\n // conversation to its real id (written into the session query cache).\n useEffect(() => {\n if (\n metadata?.conversation_id &&\n metadata.conversation_id !== conversationId\n ) {\n setConversationId(metadata.conversation_id);\n }\n }, [metadata?.conversation_id, conversationId]);\n\n // Announce the completed bot response for screen readers.\n const prevStatusRef = useRef(streamStatus);\n useEffect(() => {\n if (prevStatusRef.current === 'streaming' && streamStatus === 'complete') {\n const last = streamMessages[streamMessages.length - 1];\n if (last?.role === 'bot' && last.content) {\n setAnnouncement(`Message from Bot: ${last.content}`);\n }\n }\n prevStatusRef.current = streamStatus;\n }, [streamStatus, streamMessages]);\n\n const sendMessage = useCallback(\n (message: string | number) => {\n const text = message.toString();\n if (!text.trim()) return;\n setAnnouncement(\n t('conversation.announcement.userMessage' as any, { prompt: text }),\n );\n sendNotebookStream({\n prompt: text,\n seedMessages: messages,\n conversationId,\n userName,\n avatar: avatar || userAvatar,\n botAvatar,\n selectedModel: notebookModel,\n createMessage: (prompt: string, options?: { signal?: AbortSignal }) =>\n notebookCreateMessage({ prompt, sessionId, signal: options?.signal }),\n });\n },\n [\n sendNotebookStream,\n messages,\n conversationId,\n userName,\n avatar,\n botAvatar,\n notebookModel,\n notebookCreateMessage,\n sessionId,\n t,\n ],\n );\n\n const handleStopButton = useCallback(() => {\n if (requestId) {\n stopConversation(requestId);\n }\n stopNotebookStream();\n setAnnouncement(t('conversation.announcement.responseStopped'));\n }, [requestId, stopConversation, stopNotebookStream, t]);\n\n const notebookPrompts = useNotebookWelcomePrompts();\n const welcomePrompts = notebookPrompts.map(title => ({\n title,\n onClick: () => sendMessage(title),\n }));\n\n const uploadMutation = useUploadDocument();\n\n const [uploadingFileNames, setUploadingFileNames] = useState<string[]>([]);\n const [pendingUploads, setPendingUploads] = useState<PendingUpload[]>([]);\n const [toastAlerts, setToastAlerts] = useState<Partial<AlertProps>[]>([]);\n const processedIds = useRef<Set<string>>(new Set());\n const [completedFileNames, setCompletedFileNames] = useState<Set<string>>(\n new Set(),\n );\n const [filesToOverwrite, setFilesToOverwrite] = useState<File[]>([]);\n const [allFilesForOverwrite, setAllFilesForOverwrite] = useState<File[]>([]);\n const [isOverwriteModalOpen, setIsOverwriteModalOpen] = useState(false);\n const [filesToAddToModal, setFilesToAddToModal] = useState<File[]>([]);\n\n const handleRenameDocument = useCallback(\n async (documentId: string, newTitle: string) => {\n try {\n await renameDocument({ sessionId, documentId, newTitle });\n } catch {\n setToastAlerts(prev => [\n {\n key: Date.now() + documentId,\n title: (t as Function)('notebook.document.rename.error', {\n documentName: documentId,\n }) as string,\n variant: 'danger',\n },\n ...prev,\n ]);\n }\n },\n [renameDocument, sessionId, t],\n );\n const handleRenameNotebook = useRenameNotebookWithAlert({\n setAlerts: setToastAlerts,\n getNotebookName: () => notebookName,\n });\n\n const confirmDeleteDocument = useCallback(async () => {\n if (!deleteDocumentTarget) return;\n const { id: documentId, name: documentName } = deleteDocumentTarget;\n setDeleteDocumentTarget(null);\n setDeletingDocumentIds(prev => new Set(prev).add(documentId));\n try {\n await notebooksApi.deleteDocument(sessionId, documentId);\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'documents', sessionId],\n });\n setToastAlerts(prev => [\n {\n key: Date.now() + documentId,\n title: (t as Function)('notebook.document.delete.success', {\n documentName,\n }) as string,\n variant: 'success',\n },\n ...prev,\n ]);\n } finally {\n setDeletingDocumentIds(prev => {\n const next = new Set(prev);\n next.delete(documentId);\n return next;\n });\n }\n }, [deleteDocumentTarget, notebooksApi, sessionId, queryClient, t]);\n\n const handleOpenUploadModal = () => onUploadModalOpenChange(true);\n const handleCloseUploadModal = () => onUploadModalOpenChange(false);\n\n const handleCloseNotebook = () => {\n onClose();\n };\n\n const handleFilesUploading = (files: File[]) => {\n setUploadingFileNames(prev => {\n const newNames = files\n .map(f => f.name)\n .filter(name => !prev.includes(name));\n return [...prev, ...newNames];\n });\n };\n\n const handleUploadStarted = (info: {\n fileName: string;\n documentId: string;\n }) => {\n processedIds.current.delete(info.documentId);\n setPendingUploads(prev => [\n ...prev,\n { fileName: info.fileName, documentId: info.documentId },\n ]);\n };\n\n const handleUploadFailed = (fileName: string) => {\n setUploadingFileNames(prev => prev.filter(n => n !== fileName));\n setToastAlerts(prev => [\n {\n key: Date.now() + fileName,\n title: (t as Function)('notebook.upload.failed', {\n fileName,\n }) as string,\n variant: 'danger',\n },\n ...prev,\n ]);\n };\n\n const handleDuplicatesFound = (duplicateFiles: File[], allFiles: File[]) => {\n setFilesToOverwrite(duplicateFiles);\n setAllFilesForOverwrite(allFiles);\n onUploadModalOpenChange(false);\n setIsOverwriteModalOpen(true);\n };\n\n const handleOverwriteConfirm = (filesToUpload: File[]) => {\n setIsOverwriteModalOpen(false);\n setFilesToOverwrite([]);\n setAllFilesForOverwrite([]);\n\n if (filesToUpload.length === 0) return;\n\n runFileUploads(uploadMutation, sessionId, filesToUpload, {\n onUploading: handleFilesUploading,\n onStarted: handleUploadStarted,\n onFailed: handleUploadFailed,\n });\n };\n\n const handleFilesAddedToModal = () => {\n setFilesToAddToModal([]);\n };\n\n const handleOverwriteBack = () => {\n setIsOverwriteModalOpen(false);\n setFilesToAddToModal(allFilesForOverwrite);\n setFilesToOverwrite([]);\n setAllFilesForOverwrite([]);\n onUploadModalOpenChange(true);\n };\n\n const handleOverwriteCancel = () => {\n setIsOverwriteModalOpen(false);\n setFilesToOverwrite([]);\n setAllFilesForOverwrite([]);\n };\n\n const pollingResults = useDocumentStatusPolling(sessionId, pendingUploads);\n\n useEffect(() => {\n const completedOrFailed = pollingResults.filter(\n r =>\n (r.status === 'completed' ||\n r.status === 'failed' ||\n r.status === 'cancelled') &&\n !processedIds.current.has(r.documentId),\n );\n\n if (completedOrFailed.length === 0) return;\n\n const idsToRemove = new Set<string>();\n const namesToRemove = new Set<string>();\n const newAlerts: Partial<AlertProps>[] = [];\n\n const newCompletedNames = new Set<string>();\n\n for (const result of completedOrFailed) {\n processedIds.current.add(result.documentId);\n idsToRemove.add(result.documentId);\n namesToRemove.add(result.fileName);\n if (result.status === 'completed') {\n newCompletedNames.add(result.fileName);\n }\n\n if (result.status !== 'completed') {\n const errorDetail = result.error ? ` ${result.error}` : '';\n newAlerts.push({\n key: Date.now() + result.documentId,\n title: `${\n (t as Function)('notebook.upload.failed', {\n fileName: result.fileName,\n }) as string\n }${errorDetail}`,\n variant: 'danger',\n });\n }\n }\n\n setPendingUploads(prev => prev.filter(u => !idsToRemove.has(u.documentId)));\n setUploadingFileNames(prev =>\n prev.filter(name => !namesToRemove.has(name)),\n );\n if (newCompletedNames.size > 0) {\n setCompletedFileNames(prev => new Set([...prev, ...newCompletedNames]));\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'documents', sessionId],\n });\n }\n setToastAlerts(prev => [...newAlerts, ...prev]);\n }, [pollingResults, t, queryClient, sessionId]);\n\n const handleRemoveToastAlert = (key: React.Key) => {\n setToastAlerts(prev => prev.filter(a => a.key !== key));\n };\n\n const totalDocumentCount = documents.length + uploadingFileNames.length;\n const hasUploadsInProgress = pendingUploads.length > 0 || isDocumentsFetching;\n const hasNoDocuments = documents.length === 0;\n const isAddDisabled =\n totalDocumentCount >= NOTEBOOK_MAX_FILES || hasUploadsInProgress;\n\n useEffect(() => {\n onUploadsInProgressChange?.(hasUploadsInProgress);\n }, [hasUploadsInProgress, onUploadsInProgressChange]);\n\n const panelContent = (\n <DrawerPanelContent\n isResizable={!isCompact}\n defaultSize={isCompact ? '100%' : '310px'}\n minSize={isCompact ? '100%' : '232px'}\n maxSize={isCompact ? '100%' : '50%'}\n resizeAriaLabel={t('notebook.view.sidebar.resize')}\n >\n <DocumentSidebar\n notebookName={notebookName}\n documents={documents}\n uploadingFileNames={uploadingFileNames}\n completedFileNames={completedFileNames}\n deletingDocumentIds={deletingDocumentIds}\n collapsed={sidebarCollapsed}\n hasUploadsInProgress={hasUploadsInProgress}\n onToggleCollapse={() => onSidebarCollapsedChange(!sidebarCollapsed)}\n onAddDocument={handleOpenUploadModal}\n onDeleteDocument={handleDeleteDocument}\n onRenameDocument={handleRenameDocument}\n onRenameNotebook={newName => handleRenameNotebook(sessionId, newName)}\n />\n </DrawerPanelContent>\n );\n\n const renderNotebookDisclaimerAlert = () => (\n <div className={classes.notebookDisclaimerStrip}>\n <div className={classes.notebookDisclaimerInner}>\n <Alert isInline variant=\"info\" title={t('aria.important')}>\n {t('disclaimer.withoutValidation')}\n </Alert>\n </div>\n </div>\n );\n\n const renderMainContent = () => {\n if (hasNoDocuments && messages.length === 0) {\n return (\n <Typography component=\"span\" className={classes.notebookEmptyUpload}>\n <UploadResourceScreen\n onUploadClick={handleOpenUploadModal}\n isProcessing={uploadingFileNames.length > 0}\n />\n </Typography>\n );\n }\n if (messages.length > 0) {\n return (\n <ChatbotContent className={classes.chatContent}>\n <LightspeedChatBox\n userName={userName}\n messages={messages}\n profileLoading={profileLoading}\n announcement={announcement}\n ref={scrollToBottomRef}\n welcomePrompts={[]}\n conversationId={conversationId}\n isStreaming={isStreaming}\n topicRestrictionEnabled={topicRestrictionEnabled}\n showSourcesChipPopover\n />\n </ChatbotContent>\n );\n }\n return (\n <div className={classes.welcomeContainer}>\n <div style={{ flex: 1 }} />\n {renderNotebookDisclaimerAlert()}\n <div className={classes.notebookContentArea}>\n <Typography className={classes.notebookHeading}>\n {notebookName}\n </Typography>\n {topicSummary && (\n <Typography className={classes.notebookSummary}>\n {topicSummary}\n </Typography>\n )}\n </div>\n {welcomePrompts.length > 0 && (\n <div className={classes.promptSuggestions}>\n {welcomePrompts.map(prompt => (\n <button\n key={prompt.title}\n type=\"button\"\n className={classes.promptPill}\n onClick={prompt.onClick}\n >\n {prompt.title}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n };\n\n return (\n <div\n className={classes.root}\n style={isCompact ? { position: 'relative' as const } : undefined}\n >\n <ToastAlertGroup\n alerts={toastAlerts}\n onRemoveAlert={handleRemoveToastAlert}\n />\n <Drawer\n isExpanded={!sidebarCollapsed}\n isInline\n position=\"start\"\n className={classes.drawerContainer}\n >\n <DrawerContent\n panelContent={!sidebarCollapsed ? panelContent : undefined}\n className={classes.drawerContent}\n >\n <DrawerContentBody className={classes.drawerContentBody}>\n <div className={classes.mainArea}>\n {sidebarCollapsed && !isCompact && (\n <div className={classes.expandStrip}>\n <Tooltip\n content={t('notebook.view.sidebar.expand')}\n position=\"right\"\n >\n <Button\n variant=\"plain\"\n onClick={() => onSidebarCollapsedChange(false)}\n aria-label={t('notebook.view.sidebar.expand')}\n size=\"sm\"\n >\n <SidebarExpandIcon />\n </Button>\n </Tooltip>\n <Tooltip\n content={(() => {\n if (hasUploadsInProgress)\n return t('notebook.view.documents.uploadsInProgress');\n if (isAddDisabled)\n return t('notebook.view.documents.maxReached');\n return t('notebook.view.documents.add');\n })()}\n position=\"right\"\n >\n <Typography component=\"span\">\n <Button\n variant=\"plain\"\n className={classes.addIconButton}\n onClick={\n isAddDisabled ? undefined : handleOpenUploadModal\n }\n aria-label={t('notebook.view.documents.add')}\n isDisabled={isAddDisabled}\n >\n <AddCircleFilledIcon disabled={isAddDisabled} />\n </Button>\n </Typography>\n </Tooltip>\n </div>\n )}\n\n <div className={classes.contentColumn}>\n {!isCompact && (\n <div className={classes.topBar}>\n <Button\n variant=\"link\"\n className={classes.closeButton}\n onClick={handleCloseNotebook}\n icon={<TimesIcon />}\n iconPosition=\"end\"\n >\n {t('notebook.view.close')}\n </Button>\n </div>\n )}\n\n <div className={classes.mainContent}>{renderMainContent()}</div>\n\n {hasNoDocuments &&\n messages.length === 0 &&\n renderNotebookDisclaimerAlert()}\n\n <ChatbotFooter className={classes.footer}>\n {(() => {\n const addResourceAction = (\n <Button\n variant=\"plain\"\n onClick={handleOpenUploadModal}\n aria-label={t('notebook.view.documents.add')}\n size=\"sm\"\n >\n <PlusIcon />\n </Button>\n );\n return hasNoDocuments ? (\n <Tooltip\n content={t('notebook.view.input.disabledTooltip')}\n position=\"top\"\n >\n <div>\n <MessageBar\n hasAttachButton={false}\n hasMicrophoneButton={false}\n hasStopButton={false}\n isSendButtonDisabled\n isDisabled\n onSendMessage={sendMessage}\n placeholder={t('notebook.view.input.placeholder')}\n forceMultilineLayout\n additionalActions={addResourceAction}\n buttonProps={{\n send: {\n tooltipContent: t('tooltip.send'),\n },\n }}\n />\n </div>\n </Tooltip>\n ) : (\n <MessageBar\n hasAttachButton={false}\n hasMicrophoneButton\n hasStopButton={isStreaming}\n handleStopButton={\n isStreaming ? handleStopButton : undefined\n }\n isSendButtonDisabled={isStreaming}\n onSendMessage={sendMessage}\n placeholder={t('notebook.view.input.placeholder')}\n forceMultilineLayout\n additionalActions={addResourceAction}\n buttonProps={{\n microphone: {\n tooltipContent: {\n active: t('tooltip.microphone.active'),\n inactive: t('tooltip.microphone.inactive'),\n },\n },\n send: {\n tooltipContent: t('tooltip.send'),\n },\n }}\n />\n );\n })()}\n <ChatbotFootnoteWithIcon label={t('footer.accuracy.label')} />\n </ChatbotFooter>\n </div>\n </div>\n </DrawerContentBody>\n </DrawerContent>\n </Drawer>\n\n <AddDocumentModal\n isOpen={isUploadModalOpen}\n onClose={handleCloseUploadModal}\n sessionId={sessionId}\n existingDocumentNames={documents.map(d => d.title)}\n hasUploadsInProgress={hasUploadsInProgress}\n onFilesUploading={handleFilesUploading}\n onUploadStarted={handleUploadStarted}\n onUploadFailed={handleUploadFailed}\n onDuplicatesFound={handleDuplicatesFound}\n filesToAdd={filesToAddToModal}\n onFilesAdded={handleFilesAddedToModal}\n isCompact={isCompact}\n />\n\n <OverwriteConfirmModal\n isOpen={isOverwriteModalOpen}\n onClose={handleOverwriteCancel}\n onConfirm={handleOverwriteConfirm}\n onBack={handleOverwriteBack}\n allFiles={allFilesForOverwrite}\n duplicateFileNames={filesToOverwrite.map(f => f.name)}\n isCompact={isCompact}\n />\n\n <DeleteDocumentModal\n isOpen={deleteDocumentTarget !== null}\n onClose={() => setDeleteDocumentTarget(null)}\n onConfirm={confirmDeleteDocument}\n documentName={deleteDocumentTarget?.name ?? ''}\n isCompact={isCompact}\n />\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsEA,MAAM,SAAA,GAAY,WAAW,CAAA,KAAA,MAAU;AAAA,EACrC,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,IAAA,EAAM,CAAA;AAAA,IACN,SAAA,EAAW,CAAA;AAAA,IACX,QAAA,EAAU,CAAA;AAAA,IACV,KAAA,EAAO,MAAA;AAAA,IACP,QAAA,EAAU,QAAA;AAAA,IACV,eAAA,EACE;AAAA,GACJ;AAAA,EACA,aAAA,EAAe;AAAA,IACb,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,CAAA;AAAA,IACN,SAAA,EAAW,CAAA;AAAA,IACX,QAAA,EAAU,CAAA;AAAA,IACV,oDAAA,EAAsD;AAAA,MACpD,eAAA,EACE;AAAA;AACJ,GACF;AAAA,EACA,WAAA,EAAa;AAAA,IACX,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,UAAA,EAAY,QAAA;AAAA,IACZ,UAAA,EAAY,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAAA,IAC7B,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IACpB,WAAA,EAAa,uDAAA;AAAA,IACb,eAAA,EACE;AAAA,GACJ;AAAA,EACA,aAAA,EAAe;AAAA,IACb,OAAA,EAAS,CAAA;AAAA,IACT,QAAA,EAAU,CAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,KAAA;AAAA,IACf,IAAA,EAAM,CAAA;AAAA,IACN,SAAA,EAAW,CAAA;AAAA,IACX,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,MAAA;AAAA,IACT,cAAA,EAAgB,UAAA;AAAA,IAChB,OAAA,EAAS,CAAA,EAAG,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAC,CAAA,GAAA,EAAM,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,IACpD,eAAA,EACE;AAAA,GACJ;AAAA,EACA,WAAA,EAAa;AAAA,IACX,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,IAAA,EAAM,CAAA;AAAA,IACN,SAAA,EAAW,CAAA;AAAA,IACX,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,eAAA,EACE,2DAAA;AAAA,IACF,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,IAAA,EAAM,CAAA;AAAA,IACN,SAAA,EAAW,CAAA;AAAA,IACX,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,aAAA,EAAe;AAAA,IACb,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,SAAA,EAAW,CAAA;AAAA,IACX,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,KAAA,EAAO,MAAA;AAAA,IACP,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ,CAAA;AAAA,IACR,OAAA,EAAS,CAAA,IAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,IAChC,SAAA,EAAW,YAAA;AAAA,IACX,eAAA,EACE;AAAA,GACJ;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,KAAA,EAAO,KAAA;AAAA,IACP,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,IAAA,EAAM,CAAA;AAAA,IACN,SAAA,EAAW,CAAA;AAAA,IACX,QAAA,EAAU,MAAA;AAAA,IACV,eAAA,EACE;AAAA,GACJ;AAAA,EACA,mBAAA,EAAqB;AAAA,IACnB,IAAA,EAAM,CAAA;AAAA,IACN,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,SAAA,EAAW,CAAA;AAAA,IACX,QAAA,EAAU,CAAA;AAAA,IACV,eAAA,EACE;AAAA,GACJ;AAAA,EACA,mBAAA,EAAqB;AAAA,IACnB,KAAA,EAAO,KAAA;AAAA,IACP,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ,CAAA,EAAG,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,cAAA,CAAA;AAAA,IAC3B,OAAA,EAAS;AAAA,GACX;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,UAAA,EAAY,IAAA;AAAA,IACZ,OAAA,EAAS,CAAA,EAAG,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,IAAA;AAAA,GAC9B;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,CAAA;AAAA,IACZ,KAAA,EAAO,2CAAA;AAAA,IACP,UAAA,EAAY,KAAA,CAAM,OAAA,CAAQ,GAAG;AAAA,GAC/B;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,OAAA,EAAS,MAAA;AAAA,IACT,QAAA,EAAU,MAAA;AAAA,IACV,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IACpB,KAAA,EAAO,KAAA;AAAA,IACP,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ,CAAA,EAAG,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,QAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,OAAA,CAAA;AAAA,IACtD,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,UAAA,EAAY;AAAA,IACV,UAAA,EAAY,MAAA;AAAA,IACZ,UAAA,EAAY,aAAA;AAAA,IACZ,MAAA,EAAQ,CAAA,qDAAA,CAAA;AAAA,IACR,YAAA,EAAc,OAAA;AAAA,IACd,OAAA,EAAS,CAAA,EAAG,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAA,CAAA;AAAA,IACpD,QAAA,EAAU,UAAA;AAAA,IACV,KAAA,EAAO,2CAAA;AAAA,IACP,MAAA,EAAQ,SAAA;AAAA,IACR,UAAA,EAAY,4CAAA;AAAA,IACZ,SAAA,EAAW;AAAA,MACT,eAAA,EACE,4DAAA;AAAA,MACF,WAAA,EAAa;AAAA;AACf,GACF;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,eAAA,EACE,sEAAA;AAAA,IACF,iCAAA,EAAmC;AAAA,MACjC,KAAA,EAAO,gBAAA;AAAA,MACP,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,4BAAA,EAA8B;AAAA,MAC5B,eAAA,EACE,MAAM,OAAA,CAAQ,IAAA,KAAS,UACnB,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,GACtB;AAAA;AACR,GACF;AAAA,EACA,WAAA,EAAa;AAAA,IACX,SAAA,EAAW,CAAA;AAAA,IACX,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU,MAAA;AAAA,IACV,eAAA,EACE,2DAAA;AAAA,IACF,iCAAA,EAAmC;AAAA,MACjC,SAAA,EAAW,QAAA;AAAA,MACX,YAAA,EAAc,YAAA;AAAA,MACd,SAAA,EAAW;AAAA;AACb;AAEJ,CAAA,CAAE,CAAA;AAsBK,MAAM,eAAe,CAAC;AAAA,EAC3B,SAAA;AAAA,EACA,YAAA,GAAe,sBAAA;AAAA,EACf,YAAY,EAAC;AAAA,EACb,mBAAA,GAAsB,KAAA;AAAA,EACtB,QAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,uBAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,gBAAA;AAAA,EACA,wBAAA;AAAA,EACA,iBAAA;AAAA,EACA,uBAAA;AAAA,EACA;AACF,CAAA,KAAyB;AACvB,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,QAAQ,QAAA,EAAS;AACvB,EAAA,MAAM,SAAA,GACJ,KAAA,CAAM,OAAA,CAAQ,IAAA,KAAS,SAAS,aAAA,GAAgB,cAAA;AAClD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,MAAM,cAAc,cAAA,EAAe;AACnC,EAAA,MAAM,SAAA,GAAY,OAAO,YAAY,CAAA;AACrC,EAAA,MAAM,YAAA,GAAe,OAAO,eAAe,CAAA;AAC3C,EAAA,MAAM,EAAE,WAAA,EAAa,qBAAA,EAAsB,GAAI,wBAAA,EAAyB;AAGxE,EAAA,MAAM,gBACJ,SAAA,CAAU,iBAAA;AAAA,IACR;AAAA,GACF,IAAK,EAAA;AAEP,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,QAAA;AAAA,IAC1C,UAAU,eAAA,IAAmB;AAAA,GAC/B;AACA,EAAA,MAAM,EAAE,MAAA,EAAQ,gBAAA,EAAiB,GAAI,mBAAA,EAAoB;AAIzD,EAAA,MAAM;AAAA,IACJ,QAAA,EAAU,cAAA;AAAA,IACV,MAAA,EAAQ,YAAA;AAAA,IACR,SAAA;AAAA,IACA,IAAA,EAAM,kBAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR,GAAI,kBAAkB,SAAS,CAAA;AAC/B,EAAA,MAAM,cAAc,YAAA,KAAiB,WAAA;AAErC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,QAAA;AAAA,IACtC;AAAA,GACF;AACA,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAI,QAAA;AAAA,wBAChD,GAAA;AAAI,GACV;AACA,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAI,SAG9C,IAAI,CAAA;AAEd,EAAA,MAAM,oBAAA,GAAuB,WAAA,CAAY,CAAC,UAAA,KAAuB;AAC/D,IAAA,uBAAA,CAAwB,EAAE,EAAA,EAAI,UAAA,EAAY,IAAA,EAAM,YAAY,CAAA;AAAA,EAC9D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,EAAE,WAAA,EAAa,cAAA,EAAe,GAAI,iBAAA,EAAkB;AAK1D,EAAA,MAAM,EAAE,oBAAA,EAAsB,iBAAA,EAAkB,GAAI,uBAAA;AAAA,IAClD,cAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA,EAAA;AAAA,IACA;AAAA,GACF;AAIA,EAAA,MAAM,QAAA,GACJ,YAAA,KAAiB,MAAA,GAAS,oBAAA,GAAuB,cAAA;AAInD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IACE,QAAA,EAAU,eAAA,IACV,QAAA,CAAS,eAAA,KAAoB,cAAA,EAC7B;AACA,MAAA,iBAAA,CAAkB,SAAS,eAAe,CAAA;AAAA,IAC5C;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,eAAA,EAAiB,cAAc,CAAC,CAAA;AAG9C,EAAA,MAAM,aAAA,GAAgB,OAAO,YAAY,CAAA;AACzC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,aAAA,CAAc,OAAA,KAAY,WAAA,IAAe,YAAA,KAAiB,UAAA,EAAY;AACxE,MAAA,MAAM,IAAA,GAAO,cAAA,CAAe,cAAA,CAAe,MAAA,GAAS,CAAC,CAAA;AACrD,MAAA,IAAI,IAAA,EAAM,IAAA,KAAS,KAAA,IAAS,IAAA,CAAK,OAAA,EAAS;AACxC,QAAA,eAAA,CAAgB,CAAA,kBAAA,EAAqB,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AAAA,MACrD;AAAA,IACF;AACA,IAAA,aAAA,CAAc,OAAA,GAAU,YAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,YAAA,EAAc,cAAc,CAAC,CAAA;AAEjC,EAAA,MAAM,WAAA,GAAc,WAAA;AAAA,IAClB,CAAC,OAAA,KAA6B;AAC5B,MAAA,MAAM,IAAA,GAAO,QAAQ,QAAA,EAAS;AAC9B,MAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAK,EAAG;AAClB,MAAA,eAAA;AAAA,QACE,CAAA,CAAE,uCAAA,EAAgD,EAAE,MAAA,EAAQ,MAAM;AAAA,OACpE;AACA,MAAA,kBAAA,CAAmB;AAAA,QACjB,MAAA,EAAQ,IAAA;AAAA,QACR,YAAA,EAAc,QAAA;AAAA,QACd,cAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAQ,MAAA,IAAU,UAAA;AAAA,QAClB,SAAA;AAAA,QACA,aAAA,EAAe,aAAA;AAAA,QACf,aAAA,EAAe,CAAC,MAAA,EAAgB,OAAA,KAC9B,qBAAA,CAAsB,EAAE,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ;AAAA,OACvE,CAAA;AAAA,IACH,CAAA;AAAA,IACA;AAAA,MACE,kBAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,aAAA;AAAA,MACA,qBAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAM,gBAAA,GAAmB,YAAY,MAAM;AACzC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,gBAAA,CAAiB,SAAS,CAAA;AAAA,IAC5B;AACA,IAAA,kBAAA,EAAmB;AACnB,IAAA,eAAA,CAAgB,CAAA,CAAE,2CAA2C,CAAC,CAAA;AAAA,EAChE,GAAG,CAAC,SAAA,EAAW,gBAAA,EAAkB,kBAAA,EAAoB,CAAC,CAAC,CAAA;AAEvD,EAAA,MAAM,kBAAkB,yBAAA,EAA0B;AAClD,EAAA,MAAM,cAAA,GAAiB,eAAA,CAAgB,GAAA,CAAI,CAAA,KAAA,MAAU;AAAA,IACnD,KAAA;AAAA,IACA,OAAA,EAAS,MAAM,WAAA,CAAY,KAAK;AAAA,GAClC,CAAE,CAAA;AAEF,EAAA,MAAM,iBAAiB,iBAAA,EAAkB;AAEzC,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAI,QAAA,CAAmB,EAAE,CAAA;AACzE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,QAAA,CAA0B,EAAE,CAAA;AACxE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,QAAA,CAAgC,EAAE,CAAA;AACxE,EAAA,MAAM,YAAA,GAAe,MAAA,iBAAoB,IAAI,GAAA,EAAK,CAAA;AAClD,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAI,QAAA;AAAA,wBAC9C,GAAA;AAAI,GACV;AACA,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,QAAA,CAAiB,EAAE,CAAA;AACnE,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAI,QAAA,CAAiB,EAAE,CAAA;AAC3E,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAI,SAAS,KAAK,CAAA;AACtE,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAI,QAAA,CAAiB,EAAE,CAAA;AAErE,EAAA,MAAM,oBAAA,GAAuB,WAAA;AAAA,IAC3B,OAAO,YAAoB,QAAA,KAAqB;AAC9C,MAAA,IAAI;AACF,QAAA,MAAM,cAAA,CAAe,EAAE,SAAA,EAAW,UAAA,EAAY,UAAU,CAAA;AAAA,MAC1D,CAAA,CAAA,MAAQ;AACN,QAAA,cAAA,CAAe,CAAA,IAAA,KAAQ;AAAA,UACrB;AAAA,YACE,GAAA,EAAK,IAAA,CAAK,GAAA,EAAI,GAAI,UAAA;AAAA,YAClB,KAAA,EAAQ,EAAe,gCAAA,EAAkC;AAAA,cACvD,YAAA,EAAc;AAAA,aACf,CAAA;AAAA,YACD,OAAA,EAAS;AAAA,WACX;AAAA,UACA,GAAG;AAAA,SACJ,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,IACA,CAAC,cAAA,EAAgB,SAAA,EAAW,CAAC;AAAA,GAC/B;AACA,EAAA,MAAM,uBAAuB,0BAAA,CAA2B;AAAA,IACtD,SAAA,EAAW,cAAA;AAAA,IACX,iBAAiB,MAAM;AAAA,GACxB,CAAA;AAED,EAAA,MAAM,qBAAA,GAAwB,YAAY,YAAY;AACpD,IAAA,IAAI,CAAC,oBAAA,EAAsB;AAC3B,IAAA,MAAM,EAAE,EAAA,EAAI,UAAA,EAAY,IAAA,EAAM,cAAa,GAAI,oBAAA;AAC/C,IAAA,uBAAA,CAAwB,IAAI,CAAA;AAC5B,IAAA,sBAAA,CAAuB,UAAQ,IAAI,GAAA,CAAI,IAAI,CAAA,CAAE,GAAA,CAAI,UAAU,CAAC,CAAA;AAC5D,IAAA,IAAI;AACF,MAAA,MAAM,YAAA,CAAa,cAAA,CAAe,SAAA,EAAW,UAAU,CAAA;AACvD,MAAA,WAAA,CAAY,iBAAA,CAAkB;AAAA,QAC5B,QAAA,EAAU,CAAC,WAAA,EAAa,WAAA,EAAa,SAAS;AAAA,OAC/C,CAAA;AACD,MAAA,cAAA,CAAe,CAAA,IAAA,KAAQ;AAAA,QACrB;AAAA,UACE,GAAA,EAAK,IAAA,CAAK,GAAA,EAAI,GAAI,UAAA;AAAA,UAClB,KAAA,EAAQ,EAAe,kCAAA,EAAoC;AAAA,YACzD;AAAA,WACD,CAAA;AAAA,UACD,OAAA,EAAS;AAAA,SACX;AAAA,QACA,GAAG;AAAA,OACJ,CAAA;AAAA,IACH,CAAA,SAAE;AACA,MAAA,sBAAA,CAAuB,CAAA,IAAA,KAAQ;AAC7B,QAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,QAAA,IAAA,CAAK,OAAO,UAAU,CAAA;AACtB,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH;AAAA,EACF,GAAG,CAAC,oBAAA,EAAsB,cAAc,SAAA,EAAW,WAAA,EAAa,CAAC,CAAC,CAAA;AAElE,EAAA,MAAM,qBAAA,GAAwB,MAAM,uBAAA,CAAwB,IAAI,CAAA;AAChE,EAAA,MAAM,sBAAA,GAAyB,MAAM,uBAAA,CAAwB,KAAK,CAAA;AAElE,EAAA,MAAM,sBAAsB,MAAM;AAChC,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,MAAM,oBAAA,GAAuB,CAAC,KAAA,KAAkB;AAC9C,IAAA,qBAAA,CAAsB,CAAA,IAAA,KAAQ;AAC5B,MAAA,MAAM,QAAA,GAAW,KAAA,CACd,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,IAAI,CAAA,CACf,MAAA,CAAO,CAAA,IAAA,KAAQ,CAAC,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA;AACtC,MAAA,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,QAAQ,CAAA;AAAA,IAC9B,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,CAAC,IAAA,KAGvB;AACJ,IAAA,YAAA,CAAa,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA;AAC3C,IAAA,iBAAA,CAAkB,CAAA,IAAA,KAAQ;AAAA,MACxB,GAAG,IAAA;AAAA,MACH,EAAE,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,UAAA,EAAY,KAAK,UAAA;AAAW,KACxD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,QAAA,KAAqB;AAC/C,IAAA,qBAAA,CAAsB,UAAQ,IAAA,CAAK,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,KAAM,QAAQ,CAAC,CAAA;AAC9D,IAAA,cAAA,CAAe,CAAA,IAAA,KAAQ;AAAA,MACrB;AAAA,QACE,GAAA,EAAK,IAAA,CAAK,GAAA,EAAI,GAAI,QAAA;AAAA,QAClB,KAAA,EAAQ,EAAe,wBAAA,EAA0B;AAAA,UAC/C;AAAA,SACD,CAAA;AAAA,QACD,OAAA,EAAS;AAAA,OACX;AAAA,MACA,GAAG;AAAA,KACJ,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,qBAAA,GAAwB,CAAC,cAAA,EAAwB,QAAA,KAAqB;AAC1E,IAAA,mBAAA,CAAoB,cAAc,CAAA;AAClC,IAAA,uBAAA,CAAwB,QAAQ,CAAA;AAChC,IAAA,uBAAA,CAAwB,KAAK,CAAA;AAC7B,IAAA,uBAAA,CAAwB,IAAI,CAAA;AAAA,EAC9B,CAAA;AAEA,EAAA,MAAM,sBAAA,GAAyB,CAAC,aAAA,KAA0B;AACxD,IAAA,uBAAA,CAAwB,KAAK,CAAA;AAC7B,IAAA,mBAAA,CAAoB,EAAE,CAAA;AACtB,IAAA,uBAAA,CAAwB,EAAE,CAAA;AAE1B,IAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAEhC,IAAA,cAAA,CAAe,cAAA,EAAgB,WAAW,aAAA,EAAe;AAAA,MACvD,WAAA,EAAa,oBAAA;AAAA,MACb,SAAA,EAAW,mBAAA;AAAA,MACX,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,0BAA0B,MAAM;AACpC,IAAA,oBAAA,CAAqB,EAAE,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,sBAAsB,MAAM;AAChC,IAAA,uBAAA,CAAwB,KAAK,CAAA;AAC7B,IAAA,oBAAA,CAAqB,oBAAoB,CAAA;AACzC,IAAA,mBAAA,CAAoB,EAAE,CAAA;AACtB,IAAA,uBAAA,CAAwB,EAAE,CAAA;AAC1B,IAAA,uBAAA,CAAwB,IAAI,CAAA;AAAA,EAC9B,CAAA;AAEA,EAAA,MAAM,wBAAwB,MAAM;AAClC,IAAA,uBAAA,CAAwB,KAAK,CAAA;AAC7B,IAAA,mBAAA,CAAoB,EAAE,CAAA;AACtB,IAAA,uBAAA,CAAwB,EAAE,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,wBAAA,CAAyB,SAAA,EAAW,cAAc,CAAA;AAEzE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,oBAAoB,cAAA,CAAe,MAAA;AAAA,MACvC,CAAA,CAAA,KAAA,CACG,CAAA,CAAE,MAAA,KAAW,WAAA,IACZ,EAAE,MAAA,KAAW,QAAA,IACb,CAAA,CAAE,MAAA,KAAW,gBACf,CAAC,YAAA,CAAa,OAAA,CAAQ,GAAA,CAAI,EAAE,UAAU;AAAA,KAC1C;AAEA,IAAA,IAAI,iBAAA,CAAkB,WAAW,CAAA,EAAG;AAEpC,IAAA,MAAM,WAAA,uBAAkB,GAAA,EAAY;AACpC,IAAA,MAAM,aAAA,uBAAoB,GAAA,EAAY;AACtC,IAAA,MAAM,YAAmC,EAAC;AAE1C,IAAA,MAAM,iBAAA,uBAAwB,GAAA,EAAY;AAE1C,IAAA,KAAA,MAAW,UAAU,iBAAA,EAAmB;AACtC,MAAA,YAAA,CAAa,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,UAAU,CAAA;AAC1C,MAAA,WAAA,CAAY,GAAA,CAAI,OAAO,UAAU,CAAA;AACjC,MAAA,aAAA,CAAc,GAAA,CAAI,OAAO,QAAQ,CAAA;AACjC,MAAA,IAAI,MAAA,CAAO,WAAW,WAAA,EAAa;AACjC,QAAA,iBAAA,CAAkB,GAAA,CAAI,OAAO,QAAQ,CAAA;AAAA,MACvC;AAEA,MAAA,IAAI,MAAA,CAAO,WAAW,WAAA,EAAa;AACjC,QAAA,MAAM,cAAc,MAAA,CAAO,KAAA,GAAQ,CAAA,CAAA,EAAI,MAAA,CAAO,KAAK,CAAA,CAAA,GAAK,EAAA;AACxD,QAAA,SAAA,CAAU,IAAA,CAAK;AAAA,UACb,GAAA,EAAK,IAAA,CAAK,GAAA,EAAI,GAAI,MAAA,CAAO,UAAA;AAAA,UACzB,KAAA,EAAO,CAAA,EACJ,CAAA,CAAe,wBAAA,EAA0B;AAAA,YACxC,UAAU,MAAA,CAAO;AAAA,WAClB,CACH,CAAA,EAAG,WAAW,CAAA,CAAA;AAAA,UACd,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,iBAAA,CAAkB,CAAA,IAAA,KAAQ,IAAA,CAAK,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,YAAY,GAAA,CAAI,CAAA,CAAE,UAAU,CAAC,CAAC,CAAA;AAC1E,IAAA,qBAAA;AAAA,MAAsB,CAAA,IAAA,KACpB,KAAK,MAAA,CAAO,CAAA,IAAA,KAAQ,CAAC,aAAA,CAAc,GAAA,CAAI,IAAI,CAAC;AAAA,KAC9C;AACA,IAAA,IAAI,iBAAA,CAAkB,OAAO,CAAA,EAAG;AAC9B,MAAA,qBAAA,CAAsB,CAAA,IAAA,yBAAY,GAAA,CAAI,CAAC,GAAG,IAAA,EAAM,GAAG,iBAAiB,CAAC,CAAC,CAAA;AACtE,MAAA,WAAA,CAAY,iBAAA,CAAkB;AAAA,QAC5B,QAAA,EAAU,CAAC,WAAA,EAAa,WAAA,EAAa,SAAS;AAAA,OAC/C,CAAA;AAAA,IACH;AACA,IAAA,cAAA,CAAe,UAAQ,CAAC,GAAG,SAAA,EAAW,GAAG,IAAI,CAAC,CAAA;AAAA,EAChD,GAAG,CAAC,cAAA,EAAgB,CAAA,EAAG,WAAA,EAAa,SAAS,CAAC,CAAA;AAE9C,EAAA,MAAM,sBAAA,GAAyB,CAAC,GAAA,KAAmB;AACjD,IAAA,cAAA,CAAe,UAAQ,IAAA,CAAK,MAAA,CAAO,OAAK,CAAA,CAAE,GAAA,KAAQ,GAAG,CAAC,CAAA;AAAA,EACxD,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,SAAA,CAAU,MAAA,GAAS,kBAAA,CAAmB,MAAA;AACjE,EAAA,MAAM,oBAAA,GAAuB,cAAA,CAAe,MAAA,GAAS,CAAA,IAAK,mBAAA;AAC1D,EAAA,MAAM,cAAA,GAAiB,UAAU,MAAA,KAAW,CAAA;AAC5C,EAAA,MAAM,aAAA,GACJ,sBAAsB,kBAAA,IAAsB,oBAAA;AAE9C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,yBAAA,GAA4B,oBAAoB,CAAA;AAAA,EAClD,CAAA,EAAG,CAAC,oBAAA,EAAsB,yBAAyB,CAAC,CAAA;AAEpD,EAAA,MAAM,YAAA,mBACJ,GAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,aAAa,CAAC,SAAA;AAAA,MACd,WAAA,EAAa,YAAY,MAAA,GAAS,OAAA;AAAA,MAClC,OAAA,EAAS,YAAY,MAAA,GAAS,OAAA;AAAA,MAC9B,OAAA,EAAS,YAAY,MAAA,GAAS,KAAA;AAAA,MAC9B,eAAA,EAAiB,EAAE,8BAA8B,CAAA;AAAA,MAEjD,QAAA,kBAAA,GAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,YAAA;AAAA,UACA,SAAA;AAAA,UACA,kBAAA;AAAA,UACA,kBAAA;AAAA,UACA,mBAAA;AAAA,UACA,SAAA,EAAW,gBAAA;AAAA,UACX,oBAAA;AAAA,UACA,gBAAA,EAAkB,MAAM,wBAAA,CAAyB,CAAC,gBAAgB,CAAA;AAAA,UAClE,aAAA,EAAe,qBAAA;AAAA,UACf,gBAAA,EAAkB,oBAAA;AAAA,UAClB,gBAAA,EAAkB,oBAAA;AAAA,UAClB,gBAAA,EAAkB,CAAA,OAAA,KAAW,oBAAA,CAAqB,SAAA,EAAW,OAAO;AAAA;AAAA;AACtE;AAAA,GACF;AAGF,EAAA,MAAM,6BAAA,GAAgC,sBACpC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,uBAAA,EACtB,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,uBAAA,EACtB,QAAA,kBAAA,GAAA,CAAC,SAAM,QAAA,EAAQ,IAAA,EAAC,OAAA,EAAQ,MAAA,EAAO,KAAA,EAAO,CAAA,CAAE,gBAAgB,CAAA,EACrD,QAAA,EAAA,CAAA,CAAE,8BAA8B,CAAA,EACnC,CAAA,EACF,CAAA,EACF,CAAA;AAGF,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAA,IAAI,cAAA,IAAkB,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAC3C,MAAA,2BACG,UAAA,EAAA,EAAW,SAAA,EAAU,MAAA,EAAO,SAAA,EAAW,QAAQ,mBAAA,EAC9C,QAAA,kBAAA,GAAA;AAAA,QAAC,oBAAA;AAAA,QAAA;AAAA,UACC,aAAA,EAAe,qBAAA;AAAA,UACf,YAAA,EAAc,mBAAmB,MAAA,GAAS;AAAA;AAAA,OAC5C,EACF,CAAA;AAAA,IAEJ;AACA,IAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,MAAA,uBACE,GAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAW,OAAA,CAAQ,WAAA,EACjC,QAAA,kBAAA,GAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,QAAA;AAAA,UACA,QAAA;AAAA,UACA,cAAA;AAAA,UACA,YAAA;AAAA,UACA,GAAA,EAAK,iBAAA;AAAA,UACL,gBAAgB,EAAC;AAAA,UACjB,cAAA;AAAA,UACA,WAAA;AAAA,UACA,uBAAA;AAAA,UACA,sBAAA,EAAsB;AAAA;AAAA,OACxB,EACF,CAAA;AAAA,IAEJ;AACA,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,gBAAA,EACtB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,IAAA,EAAM,GAAE,EAAG,CAAA;AAAA,MACxB,6BAAA,EAA8B;AAAA,sBAC/B,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,mBAAA,EACtB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,OAAA,CAAQ,eAAA,EAC5B,QAAA,EAAA,YAAA,EACH,CAAA;AAAA,QACC,gCACC,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,OAAA,CAAQ,iBAC5B,QAAA,EAAA,YAAA,EACH;AAAA,OAAA,EAEJ,CAAA;AAAA,MACC,cAAA,CAAe,MAAA,GAAS,CAAA,oBACvB,GAAA,CAAC,KAAA,EAAA,EAAI,WAAW,OAAA,CAAQ,iBAAA,EACrB,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,CAAA,MAAA,qBAClB,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,WAAW,OAAA,CAAQ,UAAA;AAAA,UACnB,SAAS,MAAA,CAAO,OAAA;AAAA,UAEf,QAAA,EAAA,MAAA,CAAO;AAAA,SAAA;AAAA,QALH,MAAA,CAAO;AAAA,OAOf,CAAA,EACH;AAAA,KAAA,EAEJ,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAW,OAAA,CAAQ,IAAA;AAAA,MACnB,KAAA,EAAO,SAAA,GAAY,EAAE,QAAA,EAAU,YAAoB,GAAI,MAAA;AAAA,MAEvD,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,MAAA,EAAQ,WAAA;AAAA,YACR,aAAA,EAAe;AAAA;AAAA,SACjB;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,YAAY,CAAC,gBAAA;AAAA,YACb,QAAA,EAAQ,IAAA;AAAA,YACR,QAAA,EAAS,OAAA;AAAA,YACT,WAAW,OAAA,CAAQ,eAAA;AAAA,YAEnB,QAAA,kBAAA,GAAA;AAAA,cAAC,aAAA;AAAA,cAAA;AAAA,gBACC,YAAA,EAAc,CAAC,gBAAA,GAAmB,YAAA,GAAe,MAAA;AAAA,gBACjD,WAAW,OAAA,CAAQ,aAAA;AAAA,gBAEnB,QAAA,kBAAA,GAAA,CAAC,qBAAkB,SAAA,EAAW,OAAA,CAAQ,mBACpC,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,QAAA,EACrB,QAAA,EAAA;AAAA,kBAAA,gBAAA,IAAoB,CAAC,SAAA,oBACpB,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,QAAQ,WAAA,EACtB,QAAA,EAAA;AAAA,oCAAA,GAAA;AAAA,sBAAC,OAAA;AAAA,sBAAA;AAAA,wBACC,OAAA,EAAS,EAAE,8BAA8B,CAAA;AAAA,wBACzC,QAAA,EAAS,OAAA;AAAA,wBAET,QAAA,kBAAA,GAAA;AAAA,0BAAC,MAAA;AAAA,0BAAA;AAAA,4BACC,OAAA,EAAQ,OAAA;AAAA,4BACR,OAAA,EAAS,MAAM,wBAAA,CAAyB,KAAK,CAAA;AAAA,4BAC7C,YAAA,EAAY,EAAE,8BAA8B,CAAA;AAAA,4BAC5C,IAAA,EAAK,IAAA;AAAA,4BAEL,8BAAC,iBAAA,EAAA,EAAkB;AAAA;AAAA;AACrB;AAAA,qBACF;AAAA,oCACA,GAAA;AAAA,sBAAC,OAAA;AAAA,sBAAA;AAAA,wBACC,UAAU,MAAM;AACd,0BAAA,IAAI,oBAAA;AACF,4BAAA,OAAO,EAAE,2CAA2C,CAAA;AACtD,0BAAA,IAAI,aAAA;AACF,4BAAA,OAAO,EAAE,oCAAoC,CAAA;AAC/C,0BAAA,OAAO,EAAE,6BAA6B,CAAA;AAAA,wBACxC,CAAA,GAAG;AAAA,wBACH,QAAA,EAAS,OAAA;AAAA,wBAET,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,MAAA,EACpB,QAAA,kBAAA,GAAA;AAAA,0BAAC,MAAA;AAAA,0BAAA;AAAA,4BACC,OAAA,EAAQ,OAAA;AAAA,4BACR,WAAW,OAAA,CAAQ,aAAA;AAAA,4BACnB,OAAA,EACE,gBAAgB,MAAA,GAAY,qBAAA;AAAA,4BAE9B,YAAA,EAAY,EAAE,6BAA6B,CAAA;AAAA,4BAC3C,UAAA,EAAY,aAAA;AAAA,4BAEZ,QAAA,kBAAA,GAAA,CAAC,mBAAA,EAAA,EAAoB,QAAA,EAAU,aAAA,EAAe;AAAA;AAAA,yBAChD,EACF;AAAA;AAAA;AACF,mBAAA,EACF,CAAA;AAAA,kCAGF,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,aAAA,EACrB,QAAA,EAAA;AAAA,oBAAA,CAAC,SAAA,oBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,QAAQ,MAAA,EACtB,QAAA,kBAAA,GAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,OAAA,EAAQ,MAAA;AAAA,wBACR,WAAW,OAAA,CAAQ,WAAA;AAAA,wBACnB,OAAA,EAAS,mBAAA;AAAA,wBACT,IAAA,sBAAO,SAAA,EAAA,EAAU,CAAA;AAAA,wBACjB,YAAA,EAAa,KAAA;AAAA,wBAEZ,YAAE,qBAAqB;AAAA;AAAA,qBAC1B,EACF,CAAA;AAAA,wCAGD,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,WAAA,EAAc,6BAAkB,EAAE,CAAA;AAAA,oBAEzD,cAAA,IACC,QAAA,CAAS,MAAA,KAAW,CAAA,IACpB,6BAAA,EAA8B;AAAA,oCAEhC,IAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAW,OAAA,CAAQ,MAAA,EAC9B,QAAA,EAAA;AAAA,sBAAA,CAAA,MAAM;AACN,wBAAA,MAAM,iBAAA,mBACJ,GAAA;AAAA,0BAAC,MAAA;AAAA,0BAAA;AAAA,4BACC,OAAA,EAAQ,OAAA;AAAA,4BACR,OAAA,EAAS,qBAAA;AAAA,4BACT,YAAA,EAAY,EAAE,6BAA6B,CAAA;AAAA,4BAC3C,IAAA,EAAK,IAAA;AAAA,4BAEL,8BAAC,QAAA,EAAA,EAAS;AAAA;AAAA,yBACZ;AAEF,wBAAA,OAAO,cAAA,mBACL,GAAA;AAAA,0BAAC,OAAA;AAAA,0BAAA;AAAA,4BACC,OAAA,EAAS,EAAE,qCAAqC,CAAA;AAAA,4BAChD,QAAA,EAAS,KAAA;AAAA,4BAET,8BAAC,KAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,8BAAC,UAAA;AAAA,8BAAA;AAAA,gCACC,eAAA,EAAiB,KAAA;AAAA,gCACjB,mBAAA,EAAqB,KAAA;AAAA,gCACrB,aAAA,EAAe,KAAA;AAAA,gCACf,oBAAA,EAAoB,IAAA;AAAA,gCACpB,UAAA,EAAU,IAAA;AAAA,gCACV,aAAA,EAAe,WAAA;AAAA,gCACf,WAAA,EAAa,EAAE,iCAAiC,CAAA;AAAA,gCAChD,oBAAA,EAAoB,IAAA;AAAA,gCACpB,iBAAA,EAAmB,iBAAA;AAAA,gCACnB,WAAA,EAAa;AAAA,kCACX,IAAA,EAAM;AAAA,oCACJ,cAAA,EAAgB,EAAE,cAAc;AAAA;AAClC;AACF;AAAA,6BACF,EACF;AAAA;AAAA,yBACF,mBAEA,GAAA;AAAA,0BAAC,UAAA;AAAA,0BAAA;AAAA,4BACC,eAAA,EAAiB,KAAA;AAAA,4BACjB,mBAAA,EAAmB,IAAA;AAAA,4BACnB,aAAA,EAAe,WAAA;AAAA,4BACf,gBAAA,EACE,cAAc,gBAAA,GAAmB,MAAA;AAAA,4BAEnC,oBAAA,EAAsB,WAAA;AAAA,4BACtB,aAAA,EAAe,WAAA;AAAA,4BACf,WAAA,EAAa,EAAE,iCAAiC,CAAA;AAAA,4BAChD,oBAAA,EAAoB,IAAA;AAAA,4BACpB,iBAAA,EAAmB,iBAAA;AAAA,4BACnB,WAAA,EAAa;AAAA,8BACX,UAAA,EAAY;AAAA,gCACV,cAAA,EAAgB;AAAA,kCACd,MAAA,EAAQ,EAAE,2BAA2B,CAAA;AAAA,kCACrC,QAAA,EAAU,EAAE,6BAA6B;AAAA;AAC3C,+BACF;AAAA,8BACA,IAAA,EAAM;AAAA,gCACJ,cAAA,EAAgB,EAAE,cAAc;AAAA;AAClC;AACF;AAAA,yBACF;AAAA,sBAEJ,CAAA,GAAG;AAAA,sCACH,GAAA,CAAC,uBAAA,EAAA,EAAwB,KAAA,EAAO,CAAA,CAAE,uBAAuB,CAAA,EAAG;AAAA,qBAAA,EAC9D;AAAA,mBAAA,EACF;AAAA,iBAAA,EACF,CAAA,EACF;AAAA;AAAA;AACF;AAAA,SACF;AAAA,wBAEA,GAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YACC,MAAA,EAAQ,iBAAA;AAAA,YACR,OAAA,EAAS,sBAAA;AAAA,YACT,SAAA;AAAA,YACA,qBAAA,EAAuB,SAAA,CAAU,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,KAAK,CAAA;AAAA,YACjD,oBAAA;AAAA,YACA,gBAAA,EAAkB,oBAAA;AAAA,YAClB,eAAA,EAAiB,mBAAA;AAAA,YACjB,cAAA,EAAgB,kBAAA;AAAA,YAChB,iBAAA,EAAmB,qBAAA;AAAA,YACnB,UAAA,EAAY,iBAAA;AAAA,YACZ,YAAA,EAAc,uBAAA;AAAA,YACd;AAAA;AAAA,SACF;AAAA,wBAEA,GAAA;AAAA,UAAC,qBAAA;AAAA,UAAA;AAAA,YACC,MAAA,EAAQ,oBAAA;AAAA,YACR,OAAA,EAAS,qBAAA;AAAA,YACT,SAAA,EAAW,sBAAA;AAAA,YACX,MAAA,EAAQ,mBAAA;AAAA,YACR,QAAA,EAAU,oBAAA;AAAA,YACV,kBAAA,EAAoB,gBAAA,CAAiB,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,IAAI,CAAA;AAAA,YACpD;AAAA;AAAA,SACF;AAAA,wBAEA,GAAA;AAAA,UAAC,mBAAA;AAAA,UAAA;AAAA,YACC,QAAQ,oBAAA,KAAyB,IAAA;AAAA,YACjC,OAAA,EAAS,MAAM,uBAAA,CAAwB,IAAI,CAAA;AAAA,YAC3C,SAAA,EAAW,qBAAA;AAAA,YACX,YAAA,EAAc,sBAAsB,IAAA,IAAQ,EAAA;AAAA,YAC5C;AAAA;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"NotebookView.esm.js","sources":["../../../src/components/notebooks/NotebookView.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\n\nimport { styled, useTheme } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\nimport { ChatbotContent, ChatbotFooter, MessageBar } from '@patternfly/chatbot';\nimport {\n Alert,\n Button,\n Drawer,\n DrawerContent,\n DrawerContentBody,\n DrawerPanelContent,\n Tooltip,\n type AlertProps,\n} from '@patternfly/react-core';\nimport { PlusIcon, TimesIcon } from '@patternfly/react-icons';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\nimport {\n NOTEBOOK_MAX_FILES,\n TEMP_CONVERSATION_ID,\n UNTITLED_NOTEBOOK_NAME,\n} from '../../const';\nimport { useCreateNotebookMessage } from '../../hooks/notebooks/useCreateNotebookMessage';\nimport {\n useDocumentStatusPolling,\n type PendingUpload,\n} from '../../hooks/notebooks/useDocumentStatusPolling';\nimport { useRenameDocument } from '../../hooks/notebooks/useRenameDocument';\nimport { useRenameNotebookWithAlert } from '../../hooks/notebooks/useRenameNotebookWithAlert';\nimport { useUploadDocument } from '../../hooks/notebooks/useUploadDocument';\nimport { useConversationMessages } from '../../hooks/useConversationMessages';\nimport { useNotebookWelcomePrompts } from '../../hooks/useNotebookWelcomePrompts';\nimport { useStopConversation } from '../../hooks/useStopConversation';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport botAvatarDark from '../../images/bot-avatar-dark.svg';\nimport botAvatarLight from '../../images/bot-avatar.svg';\nimport userAvatar from '../../images/user-avatar.svg';\nimport { NotebookSessionMetadata, SessionDocument } from '../../types';\nimport { ChatbotFootnoteWithIcon } from '../../utils/lightspeed-chatbox-utils';\nimport { runFileUploads } from '../../utils/notebook-upload-runner';\nimport { LightspeedChatBox } from '../LightspeedChatBox';\nimport { ToastAlertGroup } from '../ToastAlertGroup';\nimport { AddDocumentModal } from './AddDocumentModal';\nimport { DeleteDocumentModal } from './DeleteDocumentModal';\nimport { DocumentSidebar } from './DocumentSidebar';\nimport { useNotebookStream } from './NotebookStreamProvider';\nimport { OverwriteConfirmModal } from './OverwriteConfirmModal';\nimport { AddCircleFilledIcon, SidebarExpandIcon } from './SidebarCollapseIcon';\nimport { UploadResourceScreen } from './UploadResourceScreen';\n\nconst floatingBg = 'var(--pf-t--global--background--color--floating--default)';\n\nconst Root = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n minWidth: 0,\n width: '100%',\n overflow: 'hidden',\n backgroundColor: floatingBg,\n});\n\nconst StyledDrawer = styled(Drawer)({\n flex: 1,\n minHeight: 0,\n minWidth: 0,\n '& .pf-v6-c-drawer__panel, & .pf-v5-c-drawer__panel': {\n backgroundColor: floatingBg,\n },\n});\n\nconst StyledDrawerContent = styled(DrawerContent)({\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n});\n\nconst StyledDrawerContentBody = styled(DrawerContentBody)({\n backgroundColor: floatingBg,\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n minWidth: 0,\n});\n\nconst MainArea = styled('div')({\n display: 'flex',\n flexDirection: 'row',\n flex: 1,\n minHeight: 0,\n minWidth: 0,\n});\n\nconst AddIconButton = styled(Button)({\n padding: 0,\n minWidth: 0,\n lineHeight: 1,\n});\n\nconst ExpandStrip = styled('div')(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: theme.spacing(1.5),\n gap: theme.spacing(1),\n borderRight: '1px solid var(--pf-t--global--border--color--default)',\n backgroundColor: floatingBg,\n}));\n\nconst ContentColumn = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minWidth: 0,\n minHeight: 0,\n overflow: 'hidden',\n});\n\nconst TopBar = styled('div')(({ theme }) => ({\n display: 'flex',\n justifyContent: 'flex-end',\n padding: `${theme.spacing(1.5)} ${theme.spacing(2)}`,\n backgroundColor: floatingBg,\n}));\n\nconst MainContent = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n minWidth: 0,\n});\n\nconst DisclaimerStrip = styled('div')(({ theme }) => ({\n width: '100%',\n maxWidth: 'unset',\n margin: 0,\n padding: `0 0 ${theme.spacing(1)}`,\n boxSizing: 'border-box',\n backgroundColor: floatingBg,\n}));\n\nconst DisclaimerInner = styled('div')({\n width: '95%',\n maxWidth: 'unset',\n margin: '0 auto',\n});\n\nconst WelcomeContainer = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n overflow: 'auto',\n backgroundColor: floatingBg,\n});\n\nconst NotebookContentArea = styled('div')(({ theme }) => ({\n width: '95%',\n maxWidth: 'unset',\n margin: `${theme.spacing(3)} auto 0 auto`,\n padding: 0,\n}));\n\nconst PromptSuggestions = styled('div')(({ theme }) => ({\n display: 'flex',\n flexWrap: 'wrap',\n gap: theme.spacing(1),\n width: '95%',\n maxWidth: 'unset',\n margin: `${theme.spacing(3)} auto ${theme.spacing(3)} auto`,\n justifyContent: 'flex-start',\n}));\n\nconst PromptPill = styled('button')(({ theme }) => ({\n appearance: 'none',\n background: 'transparent',\n border: '1px solid var(--pf-t--global--border--color--default)',\n borderRadius: '999px',\n padding: `${theme.spacing(1)} ${theme.spacing(2.5)}`,\n fontSize: '0.875rem',\n color: 'var(--pf-t--global--text--color--regular)',\n cursor: 'pointer',\n transition: 'background-color 0.15s, border-color 0.15s',\n '&:hover': {\n backgroundColor:\n 'var(--pf-t--global--background--color--secondary--default)',\n borderColor: 'var(--pf-t--global--border--color--hover)',\n },\n}));\n\nconst StyledChatbotContent = styled(ChatbotContent)({\n minHeight: 0,\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n overflow: 'auto',\n backgroundColor: floatingBg,\n '& .pf-chatbot__message-contents': {\n overflowX: 'hidden',\n overflowWrap: 'break-word',\n wordBreak: 'break-word',\n },\n});\n\nconst StyledChatbotFooter = styled(ChatbotFooter)(({ theme }) => ({\n backgroundColor: `${floatingBg} !important`,\n '&>.pf-chatbot__footer-container': {\n width: '95% !important',\n maxWidth: 'unset !important',\n },\n '& .pf-chatbot__message-bar': {\n backgroundColor:\n theme.palette.mode === 'light'\n ? theme.palette.grey[100]\n : 'var(--pf-t--global--background--color--secondary--default)',\n },\n}));\n\ntype NotebookViewProps = {\n sessionId: string;\n notebookName?: string;\n documents?: SessionDocument[];\n isDocumentsFetching?: boolean;\n metadata?: NotebookSessionMetadata;\n topicSummary?: string;\n userName?: string;\n avatar?: string;\n profileLoading: boolean;\n topicRestrictionEnabled: boolean;\n onClose: () => void;\n isCompact?: boolean;\n sidebarCollapsed: boolean;\n onSidebarCollapsedChange: (collapsed: boolean) => void;\n isUploadModalOpen: boolean;\n onUploadModalOpenChange: (open: boolean) => void;\n onUploadsInProgressChange?: (inProgress: boolean) => void;\n};\n\nexport const NotebookView = ({\n sessionId,\n notebookName = UNTITLED_NOTEBOOK_NAME,\n documents = [],\n isDocumentsFetching = false,\n metadata,\n topicSummary,\n userName,\n avatar,\n profileLoading,\n topicRestrictionEnabled,\n onClose,\n isCompact = false,\n sidebarCollapsed,\n onSidebarCollapsedChange,\n isUploadModalOpen,\n onUploadModalOpenChange,\n onUploadsInProgressChange,\n}: NotebookViewProps) => {\n const theme = useTheme();\n const botAvatar =\n theme.palette.mode === 'dark' ? botAvatarDark : botAvatarLight;\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const configApi = useApi(configApiRef);\n const notebooksApi = useApi(notebooksApiRef);\n const { mutateAsync: notebookCreateMessage } = useCreateNotebookMessage();\n\n // Use notebook-specific model from config instead of chat's selected model\n const notebookModel =\n configApi.getOptionalString(\n 'intelligent-assistant.notebooks.queryDefaults.model',\n ) || '';\n\n const [conversationId, setConversationId] = useState(\n metadata?.conversation_id ?? TEMP_CONVERSATION_ID,\n );\n const { mutate: stopConversation } = useStopConversation();\n\n // Streaming lives in a store above the display-mode remount boundary, so it\n // survives overlay/docked/fullscreen switches. This view only subscribes.\n const {\n messages: streamMessages,\n status: streamStatus,\n requestId,\n send: sendNotebookStream,\n stop: stopNotebookStream,\n } = useNotebookStream(sessionId);\n const isStreaming = streamStatus === 'streaming';\n\n const [announcement, setAnnouncement] = useState<string | undefined>(\n undefined,\n );\n const [deletingDocumentIds, setDeletingDocumentIds] = useState<Set<string>>(\n new Set(),\n );\n const [deleteDocumentTarget, setDeleteDocumentTarget] = useState<{\n id: string;\n name: string;\n } | null>(null);\n\n const handleDeleteDocument = useCallback((documentId: string) => {\n setDeleteDocumentTarget({ id: documentId, name: documentId });\n }, []);\n\n const { mutateAsync: renameDocument } = useRenameDocument();\n\n // Read-only: persisted (server) messages + transform. Displayed when the\n // store has no live/finished stream for this session. Sending is handled by\n // the stream store, not this hook.\n const { conversationMessages, scrollToBottomRef } = useConversationMessages(\n conversationId,\n userName,\n notebookModel,\n '',\n avatar,\n );\n\n // Show the store's transcript whenever there is an active or finished stream\n // for this session; otherwise fall back to persisted server messages.\n const messages =\n streamStatus === 'idle' ? conversationMessages : streamMessages;\n\n // Keep the local conversation id in sync when the store resolves a temp\n // conversation to its real id (written into the session query cache).\n useEffect(() => {\n if (\n metadata?.conversation_id &&\n metadata.conversation_id !== conversationId\n ) {\n setConversationId(metadata.conversation_id);\n }\n }, [metadata?.conversation_id, conversationId]);\n\n // Announce the completed bot response for screen readers.\n const prevStatusRef = useRef(streamStatus);\n useEffect(() => {\n if (prevStatusRef.current === 'streaming' && streamStatus === 'complete') {\n const last = streamMessages[streamMessages.length - 1];\n if (last?.role === 'bot' && last.content) {\n setAnnouncement(`Message from Bot: ${last.content}`);\n }\n }\n prevStatusRef.current = streamStatus;\n }, [streamStatus, streamMessages]);\n\n const sendMessage = useCallback(\n (message: string | number) => {\n const text = message.toString();\n if (!text.trim()) return;\n setAnnouncement(\n t('conversation.announcement.userMessage' as any, { prompt: text }),\n );\n sendNotebookStream({\n prompt: text,\n seedMessages: messages,\n conversationId,\n userName,\n avatar: avatar || userAvatar,\n botAvatar,\n selectedModel: notebookModel,\n createMessage: (prompt: string, options?: { signal?: AbortSignal }) =>\n notebookCreateMessage({ prompt, sessionId, signal: options?.signal }),\n });\n },\n [\n sendNotebookStream,\n messages,\n conversationId,\n userName,\n avatar,\n botAvatar,\n notebookModel,\n notebookCreateMessage,\n sessionId,\n t,\n ],\n );\n\n const handleStopButton = useCallback(() => {\n if (requestId) {\n stopConversation(requestId);\n }\n stopNotebookStream();\n setAnnouncement(t('conversation.announcement.responseStopped'));\n }, [requestId, stopConversation, stopNotebookStream, t]);\n\n const notebookPrompts = useNotebookWelcomePrompts();\n const welcomePrompts = notebookPrompts.map(title => ({\n title,\n onClick: () => sendMessage(title),\n }));\n\n const uploadMutation = useUploadDocument();\n\n const [uploadingFileNames, setUploadingFileNames] = useState<string[]>([]);\n const [pendingUploads, setPendingUploads] = useState<PendingUpload[]>([]);\n const [toastAlerts, setToastAlerts] = useState<Partial<AlertProps>[]>([]);\n const processedIds = useRef<Set<string>>(new Set());\n const [completedFileNames, setCompletedFileNames] = useState<Set<string>>(\n new Set(),\n );\n const [filesToOverwrite, setFilesToOverwrite] = useState<File[]>([]);\n const [allFilesForOverwrite, setAllFilesForOverwrite] = useState<File[]>([]);\n const [isOverwriteModalOpen, setIsOverwriteModalOpen] = useState(false);\n const [filesToAddToModal, setFilesToAddToModal] = useState<File[]>([]);\n\n const handleRenameDocument = useCallback(\n async (documentId: string, newTitle: string) => {\n try {\n await renameDocument({ sessionId, documentId, newTitle });\n } catch {\n setToastAlerts(prev => [\n {\n key: Date.now() + documentId,\n title: (t as Function)('notebook.document.rename.error', {\n documentName: documentId,\n }) as string,\n variant: 'danger',\n },\n ...prev,\n ]);\n }\n },\n [renameDocument, sessionId, t],\n );\n const handleRenameNotebook = useRenameNotebookWithAlert({\n setAlerts: setToastAlerts,\n getNotebookName: () => notebookName,\n });\n\n const confirmDeleteDocument = useCallback(async () => {\n if (!deleteDocumentTarget) return;\n const { id: documentId, name: documentName } = deleteDocumentTarget;\n setDeleteDocumentTarget(null);\n setDeletingDocumentIds(prev => new Set(prev).add(documentId));\n try {\n await notebooksApi.deleteDocument(sessionId, documentId);\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'documents', sessionId],\n });\n setToastAlerts(prev => [\n {\n key: Date.now() + documentId,\n title: (t as Function)('notebook.document.delete.success', {\n documentName,\n }) as string,\n variant: 'success',\n },\n ...prev,\n ]);\n } finally {\n setDeletingDocumentIds(prev => {\n const next = new Set(prev);\n next.delete(documentId);\n return next;\n });\n }\n }, [deleteDocumentTarget, notebooksApi, sessionId, queryClient, t]);\n\n const handleOpenUploadModal = () => onUploadModalOpenChange(true);\n const handleCloseUploadModal = () => onUploadModalOpenChange(false);\n\n const handleCloseNotebook = () => {\n onClose();\n };\n\n const handleFilesUploading = (files: File[]) => {\n setUploadingFileNames(prev => {\n const newNames = files\n .map(f => f.name)\n .filter(name => !prev.includes(name));\n return [...prev, ...newNames];\n });\n };\n\n const handleUploadStarted = (info: {\n fileName: string;\n documentId: string;\n }) => {\n processedIds.current.delete(info.documentId);\n setPendingUploads(prev => [\n ...prev,\n { fileName: info.fileName, documentId: info.documentId },\n ]);\n };\n\n const handleUploadFailed = (fileName: string) => {\n setUploadingFileNames(prev => prev.filter(n => n !== fileName));\n setToastAlerts(prev => [\n {\n key: Date.now() + fileName,\n title: (t as Function)('notebook.upload.failed', {\n fileName,\n }) as string,\n variant: 'danger',\n },\n ...prev,\n ]);\n };\n\n const handleDuplicatesFound = (duplicateFiles: File[], allFiles: File[]) => {\n setFilesToOverwrite(duplicateFiles);\n setAllFilesForOverwrite(allFiles);\n onUploadModalOpenChange(false);\n setIsOverwriteModalOpen(true);\n };\n\n const handleOverwriteConfirm = (filesToUpload: File[]) => {\n setIsOverwriteModalOpen(false);\n setFilesToOverwrite([]);\n setAllFilesForOverwrite([]);\n\n if (filesToUpload.length === 0) return;\n\n runFileUploads(uploadMutation, sessionId, filesToUpload, {\n onUploading: handleFilesUploading,\n onStarted: handleUploadStarted,\n onFailed: handleUploadFailed,\n });\n };\n\n const handleFilesAddedToModal = () => {\n setFilesToAddToModal([]);\n };\n\n const handleOverwriteBack = () => {\n setIsOverwriteModalOpen(false);\n setFilesToAddToModal(allFilesForOverwrite);\n setFilesToOverwrite([]);\n setAllFilesForOverwrite([]);\n onUploadModalOpenChange(true);\n };\n\n const handleOverwriteCancel = () => {\n setIsOverwriteModalOpen(false);\n setFilesToOverwrite([]);\n setAllFilesForOverwrite([]);\n };\n\n const pollingResults = useDocumentStatusPolling(sessionId, pendingUploads);\n\n useEffect(() => {\n const completedOrFailed = pollingResults.filter(\n r =>\n (r.status === 'completed' ||\n r.status === 'failed' ||\n r.status === 'cancelled') &&\n !processedIds.current.has(r.documentId),\n );\n\n if (completedOrFailed.length === 0) return;\n\n const idsToRemove = new Set<string>();\n const namesToRemove = new Set<string>();\n const newAlerts: Partial<AlertProps>[] = [];\n\n const newCompletedNames = new Set<string>();\n\n for (const result of completedOrFailed) {\n processedIds.current.add(result.documentId);\n idsToRemove.add(result.documentId);\n namesToRemove.add(result.fileName);\n if (result.status === 'completed') {\n newCompletedNames.add(result.fileName);\n }\n\n if (result.status !== 'completed') {\n const errorDetail = result.error ? ` ${result.error}` : '';\n newAlerts.push({\n key: Date.now() + result.documentId,\n title: `${\n (t as Function)('notebook.upload.failed', {\n fileName: result.fileName,\n }) as string\n }${errorDetail}`,\n variant: 'danger',\n });\n }\n }\n\n setPendingUploads(prev => prev.filter(u => !idsToRemove.has(u.documentId)));\n setUploadingFileNames(prev =>\n prev.filter(name => !namesToRemove.has(name)),\n );\n if (newCompletedNames.size > 0) {\n setCompletedFileNames(prev => new Set([...prev, ...newCompletedNames]));\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'documents', sessionId],\n });\n }\n setToastAlerts(prev => [...newAlerts, ...prev]);\n }, [pollingResults, t, queryClient, sessionId]);\n\n const handleRemoveToastAlert = (key: React.Key) => {\n setToastAlerts(prev => prev.filter(a => a.key !== key));\n };\n\n const totalDocumentCount = documents.length + uploadingFileNames.length;\n const hasUploadsInProgress = pendingUploads.length > 0 || isDocumentsFetching;\n const hasNoDocuments = documents.length === 0;\n const isAddDisabled =\n totalDocumentCount >= NOTEBOOK_MAX_FILES || hasUploadsInProgress;\n\n useEffect(() => {\n onUploadsInProgressChange?.(hasUploadsInProgress);\n }, [hasUploadsInProgress, onUploadsInProgressChange]);\n\n const panelContent = (\n <DrawerPanelContent\n isResizable={!isCompact}\n defaultSize={isCompact ? '100%' : '310px'}\n minSize={isCompact ? '100%' : '232px'}\n maxSize={isCompact ? '100%' : '50%'}\n resizeAriaLabel={t('notebook.view.sidebar.resize')}\n >\n <DocumentSidebar\n notebookName={notebookName}\n documents={documents}\n uploadingFileNames={uploadingFileNames}\n completedFileNames={completedFileNames}\n deletingDocumentIds={deletingDocumentIds}\n collapsed={sidebarCollapsed}\n hasUploadsInProgress={hasUploadsInProgress}\n onToggleCollapse={() => onSidebarCollapsedChange(!sidebarCollapsed)}\n onAddDocument={handleOpenUploadModal}\n onDeleteDocument={handleDeleteDocument}\n onRenameDocument={handleRenameDocument}\n onRenameNotebook={newName => handleRenameNotebook(sessionId, newName)}\n />\n </DrawerPanelContent>\n );\n\n const renderNotebookDisclaimerAlert = () => (\n <DisclaimerStrip>\n <DisclaimerInner>\n <Alert isInline variant=\"info\" title={t('aria.important')}>\n {t('disclaimer')}\n </Alert>\n </DisclaimerInner>\n </DisclaimerStrip>\n );\n\n const renderMainContent = () => {\n if (hasNoDocuments && messages.length === 0) {\n return (\n <Typography\n component=\"span\"\n sx={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0,\n minWidth: 0,\n backgroundColor: floatingBg,\n }}\n >\n <UploadResourceScreen\n onUploadClick={handleOpenUploadModal}\n isProcessing={uploadingFileNames.length > 0}\n />\n </Typography>\n );\n }\n if (messages.length > 0) {\n return (\n <StyledChatbotContent>\n <LightspeedChatBox\n userName={userName}\n messages={messages}\n profileLoading={profileLoading}\n announcement={announcement}\n ref={scrollToBottomRef}\n welcomePrompts={[]}\n conversationId={conversationId}\n isStreaming={isStreaming}\n topicRestrictionEnabled={topicRestrictionEnabled}\n showSourcesChipPopover\n />\n </StyledChatbotContent>\n );\n }\n return (\n <WelcomeContainer>\n <div style={{ flex: 1 }} />\n {renderNotebookDisclaimerAlert()}\n <NotebookContentArea>\n <Typography\n sx={{ fontSize: '2rem', fontWeight: 500, lineHeight: 1.25, py: 1 }}\n >\n {notebookName}\n </Typography>\n {topicSummary && (\n <Typography\n sx={{\n fontSize: '1rem',\n lineHeight: 2,\n color: 'var(--pf-t--global--text--color--regular)',\n pt: 0.5,\n }}\n >\n {topicSummary}\n </Typography>\n )}\n </NotebookContentArea>\n {welcomePrompts.length > 0 && (\n <PromptSuggestions>\n {welcomePrompts.map(prompt => (\n <PromptPill\n key={prompt.title}\n type=\"button\"\n onClick={prompt.onClick}\n >\n {prompt.title}\n </PromptPill>\n ))}\n </PromptSuggestions>\n )}\n </WelcomeContainer>\n );\n };\n\n return (\n <Root sx={isCompact ? { position: 'relative' } : undefined}>\n <ToastAlertGroup\n alerts={toastAlerts}\n onRemoveAlert={handleRemoveToastAlert}\n />\n <StyledDrawer isExpanded={!sidebarCollapsed} isInline position=\"start\">\n <StyledDrawerContent\n panelContent={!sidebarCollapsed ? panelContent : undefined}\n >\n <StyledDrawerContentBody>\n <MainArea>\n {sidebarCollapsed && !isCompact && (\n <ExpandStrip>\n <Tooltip\n content={t('notebook.view.sidebar.expand')}\n position=\"right\"\n >\n <Button\n variant=\"plain\"\n onClick={() => onSidebarCollapsedChange(false)}\n aria-label={t('notebook.view.sidebar.expand')}\n size=\"sm\"\n >\n <SidebarExpandIcon />\n </Button>\n </Tooltip>\n <Tooltip\n content={(() => {\n if (hasUploadsInProgress)\n return t('notebook.view.documents.uploadsInProgress');\n if (isAddDisabled)\n return t('notebook.view.documents.maxReached');\n return t('notebook.view.documents.add');\n })()}\n position=\"right\"\n >\n <Typography component=\"span\">\n <AddIconButton\n variant=\"plain\"\n onClick={\n isAddDisabled ? undefined : handleOpenUploadModal\n }\n aria-label={t('notebook.view.documents.add')}\n isDisabled={isAddDisabled}\n >\n <AddCircleFilledIcon disabled={isAddDisabled} />\n </AddIconButton>\n </Typography>\n </Tooltip>\n </ExpandStrip>\n )}\n\n <ContentColumn>\n {!isCompact && (\n <TopBar>\n <Button\n variant=\"link\"\n style={{ textTransform: 'none' }}\n onClick={handleCloseNotebook}\n icon={<TimesIcon />}\n iconPosition=\"end\"\n >\n {t('notebook.view.close')}\n </Button>\n </TopBar>\n )}\n\n <MainContent>{renderMainContent()}</MainContent>\n\n {hasNoDocuments &&\n messages.length === 0 &&\n renderNotebookDisclaimerAlert()}\n\n <StyledChatbotFooter>\n {(() => {\n const addResourceAction = (\n <Button\n variant=\"plain\"\n onClick={handleOpenUploadModal}\n aria-label={t('notebook.view.documents.add')}\n size=\"sm\"\n >\n <PlusIcon />\n </Button>\n );\n return hasNoDocuments ? (\n <Tooltip\n content={t('notebook.view.input.disabledTooltip')}\n position=\"top\"\n >\n <div>\n <MessageBar\n hasAttachButton={false}\n hasMicrophoneButton={false}\n hasStopButton={false}\n isSendButtonDisabled\n isDisabled\n onSendMessage={sendMessage}\n placeholder={t('notebook.view.input.placeholder')}\n forceMultilineLayout\n additionalActions={addResourceAction}\n buttonProps={{\n send: {\n tooltipContent: t('tooltip.send'),\n },\n }}\n />\n </div>\n </Tooltip>\n ) : (\n <MessageBar\n hasAttachButton={false}\n hasMicrophoneButton\n hasStopButton={isStreaming}\n handleStopButton={\n isStreaming ? handleStopButton : undefined\n }\n isSendButtonDisabled={isStreaming}\n onSendMessage={sendMessage}\n placeholder={t('notebook.view.input.placeholder')}\n forceMultilineLayout\n additionalActions={addResourceAction}\n buttonProps={{\n microphone: {\n tooltipContent: {\n active: t('tooltip.microphone.active'),\n inactive: t('tooltip.microphone.inactive'),\n },\n },\n send: {\n tooltipContent: t('tooltip.send'),\n },\n }}\n />\n );\n })()}\n <ChatbotFootnoteWithIcon label={t('footer.accuracy.label')} />\n </StyledChatbotFooter>\n </ContentColumn>\n </MainArea>\n </StyledDrawerContentBody>\n </StyledDrawerContent>\n </StyledDrawer>\n\n <AddDocumentModal\n isOpen={isUploadModalOpen}\n onClose={handleCloseUploadModal}\n sessionId={sessionId}\n existingDocumentNames={documents.map(d => d.title)}\n hasUploadsInProgress={hasUploadsInProgress}\n onFilesUploading={handleFilesUploading}\n onUploadStarted={handleUploadStarted}\n onUploadFailed={handleUploadFailed}\n onDuplicatesFound={handleDuplicatesFound}\n filesToAdd={filesToAddToModal}\n onFilesAdded={handleFilesAddedToModal}\n isCompact={isCompact}\n />\n\n <OverwriteConfirmModal\n isOpen={isOverwriteModalOpen}\n onClose={handleOverwriteCancel}\n onConfirm={handleOverwriteConfirm}\n onBack={handleOverwriteBack}\n allFiles={allFilesForOverwrite}\n duplicateFileNames={filesToOverwrite.map(f => f.name)}\n isCompact={isCompact}\n />\n\n <DeleteDocumentModal\n isOpen={deleteDocumentTarget !== null}\n onClose={() => setDeleteDocumentTarget(null)}\n onConfirm={confirmDeleteDocument}\n documentName={deleteDocumentTarget?.name ?? ''}\n isCompact={isCompact}\n />\n </Root>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsEA,MAAM,UAAA,GAAa,2DAAA;AAEnB,MAAM,IAAA,GAAO,MAAA,CAAO,KAAK,CAAA,CAAE;AAAA,EACzB,OAAA,EAAS,MAAA;AAAA,EACT,aAAA,EAAe,QAAA;AAAA,EACf,IAAA,EAAM,CAAA;AAAA,EACN,SAAA,EAAW,CAAA;AAAA,EACX,QAAA,EAAU,CAAA;AAAA,EACV,KAAA,EAAO,MAAA;AAAA,EACP,QAAA,EAAU,QAAA;AAAA,EACV,eAAA,EAAiB;AACnB,CAAC,CAAA;AAED,MAAM,YAAA,GAAe,MAAA,CAAO,MAAM,CAAA,CAAE;AAAA,EAClC,IAAA,EAAM,CAAA;AAAA,EACN,SAAA,EAAW,CAAA;AAAA,EACX,QAAA,EAAU,CAAA;AAAA,EACV,oDAAA,EAAsD;AAAA,IACpD,eAAA,EAAiB;AAAA;AAErB,CAAC,CAAA;AAED,MAAM,mBAAA,GAAsB,MAAA,CAAO,aAAa,CAAA,CAAE;AAAA,EAChD,OAAA,EAAS,MAAA;AAAA,EACT,aAAA,EAAe,QAAA;AAAA,EACf,QAAA,EAAU;AACZ,CAAC,CAAA;AAED,MAAM,uBAAA,GAA0B,MAAA,CAAO,iBAAiB,CAAA,CAAE;AAAA,EACxD,eAAA,EAAiB,UAAA;AAAA,EACjB,OAAA,EAAS,MAAA;AAAA,EACT,aAAA,EAAe,QAAA;AAAA,EACf,IAAA,EAAM,CAAA;AAAA,EACN,SAAA,EAAW,CAAA;AAAA,EACX,QAAA,EAAU;AACZ,CAAC,CAAA;AAED,MAAM,QAAA,GAAW,MAAA,CAAO,KAAK,CAAA,CAAE;AAAA,EAC7B,OAAA,EAAS,MAAA;AAAA,EACT,aAAA,EAAe,KAAA;AAAA,EACf,IAAA,EAAM,CAAA;AAAA,EACN,SAAA,EAAW,CAAA;AAAA,EACX,QAAA,EAAU;AACZ,CAAC,CAAA;AAED,MAAM,aAAA,GAAgB,MAAA,CAAO,MAAM,CAAA,CAAE;AAAA,EACnC,OAAA,EAAS,CAAA;AAAA,EACT,QAAA,EAAU,CAAA;AAAA,EACV,UAAA,EAAY;AACd,CAAC,CAAA;AAED,MAAM,cAAc,MAAA,CAAO,KAAK,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EAChD,OAAA,EAAS,MAAA;AAAA,EACT,aAAA,EAAe,QAAA;AAAA,EACf,UAAA,EAAY,QAAA;AAAA,EACZ,UAAA,EAAY,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC7B,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,EACpB,WAAA,EAAa,uDAAA;AAAA,EACb,eAAA,EAAiB;AACnB,CAAA,CAAE,CAAA;AAEF,MAAM,aAAA,GAAgB,MAAA,CAAO,KAAK,CAAA,CAAE;AAAA,EAClC,OAAA,EAAS,MAAA;AAAA,EACT,aAAA,EAAe,QAAA;AAAA,EACf,IAAA,EAAM,CAAA;AAAA,EACN,QAAA,EAAU,CAAA;AAAA,EACV,SAAA,EAAW,CAAA;AAAA,EACX,QAAA,EAAU;AACZ,CAAC,CAAA;AAED,MAAM,SAAS,MAAA,CAAO,KAAK,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EAC3C,OAAA,EAAS,MAAA;AAAA,EACT,cAAA,EAAgB,UAAA;AAAA,EAChB,OAAA,EAAS,CAAA,EAAG,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,EAClD,eAAA,EAAiB;AACnB,CAAA,CAAE,CAAA;AAEF,MAAM,WAAA,GAAc,MAAA,CAAO,KAAK,CAAA,CAAE;AAAA,EAChC,OAAA,EAAS,MAAA;AAAA,EACT,aAAA,EAAe,QAAA;AAAA,EACf,IAAA,EAAM,CAAA;AAAA,EACN,SAAA,EAAW,CAAA;AAAA,EACX,QAAA,EAAU;AACZ,CAAC,CAAA;AAED,MAAM,kBAAkB,MAAA,CAAO,KAAK,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EACpD,KAAA,EAAO,MAAA;AAAA,EACP,QAAA,EAAU,OAAA;AAAA,EACV,MAAA,EAAQ,CAAA;AAAA,EACR,OAAA,EAAS,CAAA,IAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,EAChC,SAAA,EAAW,YAAA;AAAA,EACX,eAAA,EAAiB;AACnB,CAAA,CAAE,CAAA;AAEF,MAAM,eAAA,GAAkB,MAAA,CAAO,KAAK,CAAA,CAAE;AAAA,EACpC,KAAA,EAAO,KAAA;AAAA,EACP,QAAA,EAAU,OAAA;AAAA,EACV,MAAA,EAAQ;AACV,CAAC,CAAA;AAED,MAAM,gBAAA,GAAmB,MAAA,CAAO,KAAK,CAAA,CAAE;AAAA,EACrC,OAAA,EAAS,MAAA;AAAA,EACT,aAAA,EAAe,QAAA;AAAA,EACf,IAAA,EAAM,CAAA;AAAA,EACN,SAAA,EAAW,CAAA;AAAA,EACX,QAAA,EAAU,MAAA;AAAA,EACV,eAAA,EAAiB;AACnB,CAAC,CAAA;AAED,MAAM,sBAAsB,MAAA,CAAO,KAAK,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EACxD,KAAA,EAAO,KAAA;AAAA,EACP,QAAA,EAAU,OAAA;AAAA,EACV,MAAA,EAAQ,CAAA,EAAG,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,YAAA,CAAA;AAAA,EAC3B,OAAA,EAAS;AACX,CAAA,CAAE,CAAA;AAEF,MAAM,oBAAoB,MAAA,CAAO,KAAK,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EACtD,OAAA,EAAS,MAAA;AAAA,EACT,QAAA,EAAU,MAAA;AAAA,EACV,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,EACpB,KAAA,EAAO,KAAA;AAAA,EACP,QAAA,EAAU,OAAA;AAAA,EACV,MAAA,EAAQ,CAAA,EAAG,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,MAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,KAAA,CAAA;AAAA,EACpD,cAAA,EAAgB;AAClB,CAAA,CAAE,CAAA;AAEF,MAAM,aAAa,MAAA,CAAO,QAAQ,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EAClD,UAAA,EAAY,MAAA;AAAA,EACZ,UAAA,EAAY,aAAA;AAAA,EACZ,MAAA,EAAQ,uDAAA;AAAA,EACR,YAAA,EAAc,OAAA;AAAA,EACd,OAAA,EAAS,CAAA,EAAG,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAC,CAAA,CAAA;AAAA,EAClD,QAAA,EAAU,UAAA;AAAA,EACV,KAAA,EAAO,2CAAA;AAAA,EACP,MAAA,EAAQ,SAAA;AAAA,EACR,UAAA,EAAY,4CAAA;AAAA,EACZ,SAAA,EAAW;AAAA,IACT,eAAA,EACE,4DAAA;AAAA,IACF,WAAA,EAAa;AAAA;AAEjB,CAAA,CAAE,CAAA;AAEF,MAAM,oBAAA,GAAuB,MAAA,CAAO,cAAc,CAAA,CAAE;AAAA,EAClD,SAAA,EAAW,CAAA;AAAA,EACX,OAAA,EAAS,MAAA;AAAA,EACT,aAAA,EAAe,QAAA;AAAA,EACf,IAAA,EAAM,CAAA;AAAA,EACN,QAAA,EAAU,MAAA;AAAA,EACV,eAAA,EAAiB,UAAA;AAAA,EACjB,iCAAA,EAAmC;AAAA,IACjC,SAAA,EAAW,QAAA;AAAA,IACX,YAAA,EAAc,YAAA;AAAA,IACd,SAAA,EAAW;AAAA;AAEf,CAAC,CAAA;AAED,MAAM,sBAAsB,MAAA,CAAO,aAAa,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EAChE,eAAA,EAAiB,GAAG,UAAU,CAAA,WAAA,CAAA;AAAA,EAC9B,iCAAA,EAAmC;AAAA,IACjC,KAAA,EAAO,gBAAA;AAAA,IACP,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,4BAAA,EAA8B;AAAA,IAC5B,eAAA,EACE,MAAM,OAAA,CAAQ,IAAA,KAAS,UACnB,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,GACtB;AAAA;AAEV,CAAA,CAAE,CAAA;AAsBK,MAAM,eAAe,CAAC;AAAA,EAC3B,SAAA;AAAA,EACA,YAAA,GAAe,sBAAA;AAAA,EACf,YAAY,EAAC;AAAA,EACb,mBAAA,GAAsB,KAAA;AAAA,EACtB,QAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,uBAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,gBAAA;AAAA,EACA,wBAAA;AAAA,EACA,iBAAA;AAAA,EACA,uBAAA;AAAA,EACA;AACF,CAAA,KAAyB;AACvB,EAAA,MAAM,QAAQ,QAAA,EAAS;AACvB,EAAA,MAAM,SAAA,GACJ,KAAA,CAAM,OAAA,CAAQ,IAAA,KAAS,SAAS,aAAA,GAAgB,cAAA;AAClD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,MAAM,cAAc,cAAA,EAAe;AACnC,EAAA,MAAM,SAAA,GAAY,OAAO,YAAY,CAAA;AACrC,EAAA,MAAM,YAAA,GAAe,OAAO,eAAe,CAAA;AAC3C,EAAA,MAAM,EAAE,WAAA,EAAa,qBAAA,EAAsB,GAAI,wBAAA,EAAyB;AAGxE,EAAA,MAAM,gBACJ,SAAA,CAAU,iBAAA;AAAA,IACR;AAAA,GACF,IAAK,EAAA;AAEP,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,QAAA;AAAA,IAC1C,UAAU,eAAA,IAAmB;AAAA,GAC/B;AACA,EAAA,MAAM,EAAE,MAAA,EAAQ,gBAAA,EAAiB,GAAI,mBAAA,EAAoB;AAIzD,EAAA,MAAM;AAAA,IACJ,QAAA,EAAU,cAAA;AAAA,IACV,MAAA,EAAQ,YAAA;AAAA,IACR,SAAA;AAAA,IACA,IAAA,EAAM,kBAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR,GAAI,kBAAkB,SAAS,CAAA;AAC/B,EAAA,MAAM,cAAc,YAAA,KAAiB,WAAA;AAErC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,QAAA;AAAA,IACtC;AAAA,GACF;AACA,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAI,QAAA;AAAA,wBAChD,GAAA;AAAI,GACV;AACA,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAI,SAG9C,IAAI,CAAA;AAEd,EAAA,MAAM,oBAAA,GAAuB,WAAA,CAAY,CAAC,UAAA,KAAuB;AAC/D,IAAA,uBAAA,CAAwB,EAAE,EAAA,EAAI,UAAA,EAAY,IAAA,EAAM,YAAY,CAAA;AAAA,EAC9D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,EAAE,WAAA,EAAa,cAAA,EAAe,GAAI,iBAAA,EAAkB;AAK1D,EAAA,MAAM,EAAE,oBAAA,EAAsB,iBAAA,EAAkB,GAAI,uBAAA;AAAA,IAClD,cAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA,EAAA;AAAA,IACA;AAAA,GACF;AAIA,EAAA,MAAM,QAAA,GACJ,YAAA,KAAiB,MAAA,GAAS,oBAAA,GAAuB,cAAA;AAInD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IACE,QAAA,EAAU,eAAA,IACV,QAAA,CAAS,eAAA,KAAoB,cAAA,EAC7B;AACA,MAAA,iBAAA,CAAkB,SAAS,eAAe,CAAA;AAAA,IAC5C;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,eAAA,EAAiB,cAAc,CAAC,CAAA;AAG9C,EAAA,MAAM,aAAA,GAAgB,OAAO,YAAY,CAAA;AACzC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,aAAA,CAAc,OAAA,KAAY,WAAA,IAAe,YAAA,KAAiB,UAAA,EAAY;AACxE,MAAA,MAAM,IAAA,GAAO,cAAA,CAAe,cAAA,CAAe,MAAA,GAAS,CAAC,CAAA;AACrD,MAAA,IAAI,IAAA,EAAM,IAAA,KAAS,KAAA,IAAS,IAAA,CAAK,OAAA,EAAS;AACxC,QAAA,eAAA,CAAgB,CAAA,kBAAA,EAAqB,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AAAA,MACrD;AAAA,IACF;AACA,IAAA,aAAA,CAAc,OAAA,GAAU,YAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,YAAA,EAAc,cAAc,CAAC,CAAA;AAEjC,EAAA,MAAM,WAAA,GAAc,WAAA;AAAA,IAClB,CAAC,OAAA,KAA6B;AAC5B,MAAA,MAAM,IAAA,GAAO,QAAQ,QAAA,EAAS;AAC9B,MAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAK,EAAG;AAClB,MAAA,eAAA;AAAA,QACE,CAAA,CAAE,uCAAA,EAAgD,EAAE,MAAA,EAAQ,MAAM;AAAA,OACpE;AACA,MAAA,kBAAA,CAAmB;AAAA,QACjB,MAAA,EAAQ,IAAA;AAAA,QACR,YAAA,EAAc,QAAA;AAAA,QACd,cAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAQ,MAAA,IAAU,UAAA;AAAA,QAClB,SAAA;AAAA,QACA,aAAA,EAAe,aAAA;AAAA,QACf,aAAA,EAAe,CAAC,MAAA,EAAgB,OAAA,KAC9B,qBAAA,CAAsB,EAAE,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ;AAAA,OACvE,CAAA;AAAA,IACH,CAAA;AAAA,IACA;AAAA,MACE,kBAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,aAAA;AAAA,MACA,qBAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAM,gBAAA,GAAmB,YAAY,MAAM;AACzC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,gBAAA,CAAiB,SAAS,CAAA;AAAA,IAC5B;AACA,IAAA,kBAAA,EAAmB;AACnB,IAAA,eAAA,CAAgB,CAAA,CAAE,2CAA2C,CAAC,CAAA;AAAA,EAChE,GAAG,CAAC,SAAA,EAAW,gBAAA,EAAkB,kBAAA,EAAoB,CAAC,CAAC,CAAA;AAEvD,EAAA,MAAM,kBAAkB,yBAAA,EAA0B;AAClD,EAAA,MAAM,cAAA,GAAiB,eAAA,CAAgB,GAAA,CAAI,CAAA,KAAA,MAAU;AAAA,IACnD,KAAA;AAAA,IACA,OAAA,EAAS,MAAM,WAAA,CAAY,KAAK;AAAA,GAClC,CAAE,CAAA;AAEF,EAAA,MAAM,iBAAiB,iBAAA,EAAkB;AAEzC,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAI,QAAA,CAAmB,EAAE,CAAA;AACzE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,QAAA,CAA0B,EAAE,CAAA;AACxE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,QAAA,CAAgC,EAAE,CAAA;AACxE,EAAA,MAAM,YAAA,GAAe,MAAA,iBAAoB,IAAI,GAAA,EAAK,CAAA;AAClD,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAI,QAAA;AAAA,wBAC9C,GAAA;AAAI,GACV;AACA,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,QAAA,CAAiB,EAAE,CAAA;AACnE,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAI,QAAA,CAAiB,EAAE,CAAA;AAC3E,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAI,SAAS,KAAK,CAAA;AACtE,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAI,QAAA,CAAiB,EAAE,CAAA;AAErE,EAAA,MAAM,oBAAA,GAAuB,WAAA;AAAA,IAC3B,OAAO,YAAoB,QAAA,KAAqB;AAC9C,MAAA,IAAI;AACF,QAAA,MAAM,cAAA,CAAe,EAAE,SAAA,EAAW,UAAA,EAAY,UAAU,CAAA;AAAA,MAC1D,CAAA,CAAA,MAAQ;AACN,QAAA,cAAA,CAAe,CAAA,IAAA,KAAQ;AAAA,UACrB;AAAA,YACE,GAAA,EAAK,IAAA,CAAK,GAAA,EAAI,GAAI,UAAA;AAAA,YAClB,KAAA,EAAQ,EAAe,gCAAA,EAAkC;AAAA,cACvD,YAAA,EAAc;AAAA,aACf,CAAA;AAAA,YACD,OAAA,EAAS;AAAA,WACX;AAAA,UACA,GAAG;AAAA,SACJ,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,IACA,CAAC,cAAA,EAAgB,SAAA,EAAW,CAAC;AAAA,GAC/B;AACA,EAAA,MAAM,uBAAuB,0BAAA,CAA2B;AAAA,IACtD,SAAA,EAAW,cAAA;AAAA,IACX,iBAAiB,MAAM;AAAA,GACxB,CAAA;AAED,EAAA,MAAM,qBAAA,GAAwB,YAAY,YAAY;AACpD,IAAA,IAAI,CAAC,oBAAA,EAAsB;AAC3B,IAAA,MAAM,EAAE,EAAA,EAAI,UAAA,EAAY,IAAA,EAAM,cAAa,GAAI,oBAAA;AAC/C,IAAA,uBAAA,CAAwB,IAAI,CAAA;AAC5B,IAAA,sBAAA,CAAuB,UAAQ,IAAI,GAAA,CAAI,IAAI,CAAA,CAAE,GAAA,CAAI,UAAU,CAAC,CAAA;AAC5D,IAAA,IAAI;AACF,MAAA,MAAM,YAAA,CAAa,cAAA,CAAe,SAAA,EAAW,UAAU,CAAA;AACvD,MAAA,WAAA,CAAY,iBAAA,CAAkB;AAAA,QAC5B,QAAA,EAAU,CAAC,WAAA,EAAa,WAAA,EAAa,SAAS;AAAA,OAC/C,CAAA;AACD,MAAA,cAAA,CAAe,CAAA,IAAA,KAAQ;AAAA,QACrB;AAAA,UACE,GAAA,EAAK,IAAA,CAAK,GAAA,EAAI,GAAI,UAAA;AAAA,UAClB,KAAA,EAAQ,EAAe,kCAAA,EAAoC;AAAA,YACzD;AAAA,WACD,CAAA;AAAA,UACD,OAAA,EAAS;AAAA,SACX;AAAA,QACA,GAAG;AAAA,OACJ,CAAA;AAAA,IACH,CAAA,SAAE;AACA,MAAA,sBAAA,CAAuB,CAAA,IAAA,KAAQ;AAC7B,QAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,QAAA,IAAA,CAAK,OAAO,UAAU,CAAA;AACtB,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH;AAAA,EACF,GAAG,CAAC,oBAAA,EAAsB,cAAc,SAAA,EAAW,WAAA,EAAa,CAAC,CAAC,CAAA;AAElE,EAAA,MAAM,qBAAA,GAAwB,MAAM,uBAAA,CAAwB,IAAI,CAAA;AAChE,EAAA,MAAM,sBAAA,GAAyB,MAAM,uBAAA,CAAwB,KAAK,CAAA;AAElE,EAAA,MAAM,sBAAsB,MAAM;AAChC,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,MAAM,oBAAA,GAAuB,CAAC,KAAA,KAAkB;AAC9C,IAAA,qBAAA,CAAsB,CAAA,IAAA,KAAQ;AAC5B,MAAA,MAAM,QAAA,GAAW,KAAA,CACd,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,IAAI,CAAA,CACf,MAAA,CAAO,CAAA,IAAA,KAAQ,CAAC,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA;AACtC,MAAA,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,QAAQ,CAAA;AAAA,IAC9B,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,CAAC,IAAA,KAGvB;AACJ,IAAA,YAAA,CAAa,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA;AAC3C,IAAA,iBAAA,CAAkB,CAAA,IAAA,KAAQ;AAAA,MACxB,GAAG,IAAA;AAAA,MACH,EAAE,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,UAAA,EAAY,KAAK,UAAA;AAAW,KACxD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,QAAA,KAAqB;AAC/C,IAAA,qBAAA,CAAsB,UAAQ,IAAA,CAAK,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,KAAM,QAAQ,CAAC,CAAA;AAC9D,IAAA,cAAA,CAAe,CAAA,IAAA,KAAQ;AAAA,MACrB;AAAA,QACE,GAAA,EAAK,IAAA,CAAK,GAAA,EAAI,GAAI,QAAA;AAAA,QAClB,KAAA,EAAQ,EAAe,wBAAA,EAA0B;AAAA,UAC/C;AAAA,SACD,CAAA;AAAA,QACD,OAAA,EAAS;AAAA,OACX;AAAA,MACA,GAAG;AAAA,KACJ,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,qBAAA,GAAwB,CAAC,cAAA,EAAwB,QAAA,KAAqB;AAC1E,IAAA,mBAAA,CAAoB,cAAc,CAAA;AAClC,IAAA,uBAAA,CAAwB,QAAQ,CAAA;AAChC,IAAA,uBAAA,CAAwB,KAAK,CAAA;AAC7B,IAAA,uBAAA,CAAwB,IAAI,CAAA;AAAA,EAC9B,CAAA;AAEA,EAAA,MAAM,sBAAA,GAAyB,CAAC,aAAA,KAA0B;AACxD,IAAA,uBAAA,CAAwB,KAAK,CAAA;AAC7B,IAAA,mBAAA,CAAoB,EAAE,CAAA;AACtB,IAAA,uBAAA,CAAwB,EAAE,CAAA;AAE1B,IAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAEhC,IAAA,cAAA,CAAe,cAAA,EAAgB,WAAW,aAAA,EAAe;AAAA,MACvD,WAAA,EAAa,oBAAA;AAAA,MACb,SAAA,EAAW,mBAAA;AAAA,MACX,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,0BAA0B,MAAM;AACpC,IAAA,oBAAA,CAAqB,EAAE,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,sBAAsB,MAAM;AAChC,IAAA,uBAAA,CAAwB,KAAK,CAAA;AAC7B,IAAA,oBAAA,CAAqB,oBAAoB,CAAA;AACzC,IAAA,mBAAA,CAAoB,EAAE,CAAA;AACtB,IAAA,uBAAA,CAAwB,EAAE,CAAA;AAC1B,IAAA,uBAAA,CAAwB,IAAI,CAAA;AAAA,EAC9B,CAAA;AAEA,EAAA,MAAM,wBAAwB,MAAM;AAClC,IAAA,uBAAA,CAAwB,KAAK,CAAA;AAC7B,IAAA,mBAAA,CAAoB,EAAE,CAAA;AACtB,IAAA,uBAAA,CAAwB,EAAE,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,wBAAA,CAAyB,SAAA,EAAW,cAAc,CAAA;AAEzE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,oBAAoB,cAAA,CAAe,MAAA;AAAA,MACvC,CAAA,CAAA,KAAA,CACG,CAAA,CAAE,MAAA,KAAW,WAAA,IACZ,EAAE,MAAA,KAAW,QAAA,IACb,CAAA,CAAE,MAAA,KAAW,gBACf,CAAC,YAAA,CAAa,OAAA,CAAQ,GAAA,CAAI,EAAE,UAAU;AAAA,KAC1C;AAEA,IAAA,IAAI,iBAAA,CAAkB,WAAW,CAAA,EAAG;AAEpC,IAAA,MAAM,WAAA,uBAAkB,GAAA,EAAY;AACpC,IAAA,MAAM,aAAA,uBAAoB,GAAA,EAAY;AACtC,IAAA,MAAM,YAAmC,EAAC;AAE1C,IAAA,MAAM,iBAAA,uBAAwB,GAAA,EAAY;AAE1C,IAAA,KAAA,MAAW,UAAU,iBAAA,EAAmB;AACtC,MAAA,YAAA,CAAa,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,UAAU,CAAA;AAC1C,MAAA,WAAA,CAAY,GAAA,CAAI,OAAO,UAAU,CAAA;AACjC,MAAA,aAAA,CAAc,GAAA,CAAI,OAAO,QAAQ,CAAA;AACjC,MAAA,IAAI,MAAA,CAAO,WAAW,WAAA,EAAa;AACjC,QAAA,iBAAA,CAAkB,GAAA,CAAI,OAAO,QAAQ,CAAA;AAAA,MACvC;AAEA,MAAA,IAAI,MAAA,CAAO,WAAW,WAAA,EAAa;AACjC,QAAA,MAAM,cAAc,MAAA,CAAO,KAAA,GAAQ,CAAA,CAAA,EAAI,MAAA,CAAO,KAAK,CAAA,CAAA,GAAK,EAAA;AACxD,QAAA,SAAA,CAAU,IAAA,CAAK;AAAA,UACb,GAAA,EAAK,IAAA,CAAK,GAAA,EAAI,GAAI,MAAA,CAAO,UAAA;AAAA,UACzB,KAAA,EAAO,CAAA,EACJ,CAAA,CAAe,wBAAA,EAA0B;AAAA,YACxC,UAAU,MAAA,CAAO;AAAA,WAClB,CACH,CAAA,EAAG,WAAW,CAAA,CAAA;AAAA,UACd,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,iBAAA,CAAkB,CAAA,IAAA,KAAQ,IAAA,CAAK,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,YAAY,GAAA,CAAI,CAAA,CAAE,UAAU,CAAC,CAAC,CAAA;AAC1E,IAAA,qBAAA;AAAA,MAAsB,CAAA,IAAA,KACpB,KAAK,MAAA,CAAO,CAAA,IAAA,KAAQ,CAAC,aAAA,CAAc,GAAA,CAAI,IAAI,CAAC;AAAA,KAC9C;AACA,IAAA,IAAI,iBAAA,CAAkB,OAAO,CAAA,EAAG;AAC9B,MAAA,qBAAA,CAAsB,CAAA,IAAA,yBAAY,GAAA,CAAI,CAAC,GAAG,IAAA,EAAM,GAAG,iBAAiB,CAAC,CAAC,CAAA;AACtE,MAAA,WAAA,CAAY,iBAAA,CAAkB;AAAA,QAC5B,QAAA,EAAU,CAAC,WAAA,EAAa,WAAA,EAAa,SAAS;AAAA,OAC/C,CAAA;AAAA,IACH;AACA,IAAA,cAAA,CAAe,UAAQ,CAAC,GAAG,SAAA,EAAW,GAAG,IAAI,CAAC,CAAA;AAAA,EAChD,GAAG,CAAC,cAAA,EAAgB,CAAA,EAAG,WAAA,EAAa,SAAS,CAAC,CAAA;AAE9C,EAAA,MAAM,sBAAA,GAAyB,CAAC,GAAA,KAAmB;AACjD,IAAA,cAAA,CAAe,UAAQ,IAAA,CAAK,MAAA,CAAO,OAAK,CAAA,CAAE,GAAA,KAAQ,GAAG,CAAC,CAAA;AAAA,EACxD,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,SAAA,CAAU,MAAA,GAAS,kBAAA,CAAmB,MAAA;AACjE,EAAA,MAAM,oBAAA,GAAuB,cAAA,CAAe,MAAA,GAAS,CAAA,IAAK,mBAAA;AAC1D,EAAA,MAAM,cAAA,GAAiB,UAAU,MAAA,KAAW,CAAA;AAC5C,EAAA,MAAM,aAAA,GACJ,sBAAsB,kBAAA,IAAsB,oBAAA;AAE9C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,yBAAA,GAA4B,oBAAoB,CAAA;AAAA,EAClD,CAAA,EAAG,CAAC,oBAAA,EAAsB,yBAAyB,CAAC,CAAA;AAEpD,EAAA,MAAM,YAAA,mBACJ,GAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,aAAa,CAAC,SAAA;AAAA,MACd,WAAA,EAAa,YAAY,MAAA,GAAS,OAAA;AAAA,MAClC,OAAA,EAAS,YAAY,MAAA,GAAS,OAAA;AAAA,MAC9B,OAAA,EAAS,YAAY,MAAA,GAAS,KAAA;AAAA,MAC9B,eAAA,EAAiB,EAAE,8BAA8B,CAAA;AAAA,MAEjD,QAAA,kBAAA,GAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,YAAA;AAAA,UACA,SAAA;AAAA,UACA,kBAAA;AAAA,UACA,kBAAA;AAAA,UACA,mBAAA;AAAA,UACA,SAAA,EAAW,gBAAA;AAAA,UACX,oBAAA;AAAA,UACA,gBAAA,EAAkB,MAAM,wBAAA,CAAyB,CAAC,gBAAgB,CAAA;AAAA,UAClE,aAAA,EAAe,qBAAA;AAAA,UACf,gBAAA,EAAkB,oBAAA;AAAA,UAClB,gBAAA,EAAkB,oBAAA;AAAA,UAClB,gBAAA,EAAkB,CAAA,OAAA,KAAW,oBAAA,CAAqB,SAAA,EAAW,OAAO;AAAA;AAAA;AACtE;AAAA,GACF;AAGF,EAAA,MAAM,6BAAA,GAAgC,sBACpC,GAAA,CAAC,eAAA,EAAA,EACC,8BAAC,eAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,SAAM,QAAA,EAAQ,IAAA,EAAC,SAAQ,MAAA,EAAO,KAAA,EAAO,EAAE,gBAAgB,CAAA,EACrD,YAAE,YAAY,CAAA,EACjB,GACF,CAAA,EACF,CAAA;AAGF,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAA,IAAI,cAAA,IAAkB,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAC3C,MAAA,uBACE,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,MAAA;AAAA,UACV,EAAA,EAAI;AAAA,YACF,IAAA,EAAM,CAAA;AAAA,YACN,OAAA,EAAS,MAAA;AAAA,YACT,aAAA,EAAe,QAAA;AAAA,YACf,SAAA,EAAW,CAAA;AAAA,YACX,QAAA,EAAU,CAAA;AAAA,YACV,eAAA,EAAiB;AAAA,WACnB;AAAA,UAEA,QAAA,kBAAA,GAAA;AAAA,YAAC,oBAAA;AAAA,YAAA;AAAA,cACC,aAAA,EAAe,qBAAA;AAAA,cACf,YAAA,EAAc,mBAAmB,MAAA,GAAS;AAAA;AAAA;AAC5C;AAAA,OACF;AAAA,IAEJ;AACA,IAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,MAAA,2BACG,oBAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,QAAA;AAAA,UACA,QAAA;AAAA,UACA,cAAA;AAAA,UACA,YAAA;AAAA,UACA,GAAA,EAAK,iBAAA;AAAA,UACL,gBAAgB,EAAC;AAAA,UACjB,cAAA;AAAA,UACA,WAAA;AAAA,UACA,uBAAA;AAAA,UACA,sBAAA,EAAsB;AAAA;AAAA,OACxB,EACF,CAAA;AAAA,IAEJ;AACA,IAAA,4BACG,gBAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,IAAA,EAAM,GAAE,EAAG,CAAA;AAAA,MACxB,6BAAA,EAA8B;AAAA,2BAC9B,mBAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,EAAE,QAAA,EAAU,MAAA,EAAQ,YAAY,GAAA,EAAK,UAAA,EAAY,IAAA,EAAM,EAAA,EAAI,CAAA,EAAE;AAAA,YAEhE,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QACC,YAAA,oBACC,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI;AAAA,cACF,QAAA,EAAU,MAAA;AAAA,cACV,UAAA,EAAY,CAAA;AAAA,cACZ,KAAA,EAAO,2CAAA;AAAA,cACP,EAAA,EAAI;AAAA,aACN;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA;AACH,OAAA,EAEJ,CAAA;AAAA,MACC,eAAe,MAAA,GAAS,CAAA,wBACtB,iBAAA,EAAA,EACE,QAAA,EAAA,cAAA,CAAe,IAAI,CAAA,MAAA,qBAClB,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,SAAS,MAAA,CAAO,OAAA;AAAA,UAEf,QAAA,EAAA,MAAA,CAAO;AAAA,SAAA;AAAA,QAJH,MAAA,CAAO;AAAA,OAMf,CAAA,EACH;AAAA,KAAA,EAEJ,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACE,IAAA,CAAC,QAAK,EAAA,EAAI,SAAA,GAAY,EAAE,QAAA,EAAU,UAAA,KAAe,MAAA,EAC/C,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,WAAA;AAAA,QACR,aAAA,EAAe;AAAA;AAAA,KACjB;AAAA,oBACA,GAAA,CAAC,gBAAa,UAAA,EAAY,CAAC,kBAAkB,QAAA,EAAQ,IAAA,EAAC,UAAS,OAAA,EAC7D,QAAA,kBAAA,GAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAc,CAAC,gBAAA,GAAmB,YAAA,GAAe,MAAA;AAAA,QAEjD,QAAA,kBAAA,GAAA,CAAC,uBAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,gBAAA,IAAoB,CAAC,SAAA,oBACpB,IAAA,CAAC,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,EAAE,8BAA8B,CAAA;AAAA,gBACzC,QAAA,EAAS,OAAA;AAAA,gBAET,QAAA,kBAAA,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAQ,OAAA;AAAA,oBACR,OAAA,EAAS,MAAM,wBAAA,CAAyB,KAAK,CAAA;AAAA,oBAC7C,YAAA,EAAY,EAAE,8BAA8B,CAAA;AAAA,oBAC5C,IAAA,EAAK,IAAA;AAAA,oBAEL,8BAAC,iBAAA,EAAA,EAAkB;AAAA;AAAA;AACrB;AAAA,aACF;AAAA,4BACA,GAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,UAAU,MAAM;AACd,kBAAA,IAAI,oBAAA;AACF,oBAAA,OAAO,EAAE,2CAA2C,CAAA;AACtD,kBAAA,IAAI,aAAA;AACF,oBAAA,OAAO,EAAE,oCAAoC,CAAA;AAC/C,kBAAA,OAAO,EAAE,6BAA6B,CAAA;AAAA,gBACxC,CAAA,GAAG;AAAA,gBACH,QAAA,EAAS,OAAA;AAAA,gBAET,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,MAAA,EACpB,QAAA,kBAAA,GAAA;AAAA,kBAAC,aAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAQ,OAAA;AAAA,oBACR,OAAA,EACE,gBAAgB,MAAA,GAAY,qBAAA;AAAA,oBAE9B,YAAA,EAAY,EAAE,6BAA6B,CAAA;AAAA,oBAC3C,UAAA,EAAY,aAAA;AAAA,oBAEZ,QAAA,kBAAA,GAAA,CAAC,mBAAA,EAAA,EAAoB,QAAA,EAAU,aAAA,EAAe;AAAA;AAAA,iBAChD,EACF;AAAA;AAAA;AACF,WAAA,EACF,CAAA;AAAA,+BAGD,aAAA,EAAA,EACE,QAAA,EAAA;AAAA,YAAA,CAAC,SAAA,wBACC,MAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,MAAA;AAAA,gBACR,KAAA,EAAO,EAAE,aAAA,EAAe,MAAA,EAAO;AAAA,gBAC/B,OAAA,EAAS,mBAAA;AAAA,gBACT,IAAA,sBAAO,SAAA,EAAA,EAAU,CAAA;AAAA,gBACjB,YAAA,EAAa,KAAA;AAAA,gBAEZ,YAAE,qBAAqB;AAAA;AAAA,aAC1B,EACF,CAAA;AAAA,4BAGF,GAAA,CAAC,WAAA,EAAA,EAAa,QAAA,EAAA,iBAAA,EAAkB,EAAE,CAAA;AAAA,YAEjC,cAAA,IACC,QAAA,CAAS,MAAA,KAAW,CAAA,IACpB,6BAAA,EAA8B;AAAA,iCAE/B,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,cAAA,CAAA,MAAM;AACN,gBAAA,MAAM,iBAAA,mBACJ,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAQ,OAAA;AAAA,oBACR,OAAA,EAAS,qBAAA;AAAA,oBACT,YAAA,EAAY,EAAE,6BAA6B,CAAA;AAAA,oBAC3C,IAAA,EAAK,IAAA;AAAA,oBAEL,8BAAC,QAAA,EAAA,EAAS;AAAA;AAAA,iBACZ;AAEF,gBAAA,OAAO,cAAA,mBACL,GAAA;AAAA,kBAAC,OAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAS,EAAE,qCAAqC,CAAA;AAAA,oBAChD,QAAA,EAAS,KAAA;AAAA,oBAET,8BAAC,KAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,sBAAC,UAAA;AAAA,sBAAA;AAAA,wBACC,eAAA,EAAiB,KAAA;AAAA,wBACjB,mBAAA,EAAqB,KAAA;AAAA,wBACrB,aAAA,EAAe,KAAA;AAAA,wBACf,oBAAA,EAAoB,IAAA;AAAA,wBACpB,UAAA,EAAU,IAAA;AAAA,wBACV,aAAA,EAAe,WAAA;AAAA,wBACf,WAAA,EAAa,EAAE,iCAAiC,CAAA;AAAA,wBAChD,oBAAA,EAAoB,IAAA;AAAA,wBACpB,iBAAA,EAAmB,iBAAA;AAAA,wBACnB,WAAA,EAAa;AAAA,0BACX,IAAA,EAAM;AAAA,4BACJ,cAAA,EAAgB,EAAE,cAAc;AAAA;AAClC;AACF;AAAA,qBACF,EACF;AAAA;AAAA,iBACF,mBAEA,GAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBACC,eAAA,EAAiB,KAAA;AAAA,oBACjB,mBAAA,EAAmB,IAAA;AAAA,oBACnB,aAAA,EAAe,WAAA;AAAA,oBACf,gBAAA,EACE,cAAc,gBAAA,GAAmB,MAAA;AAAA,oBAEnC,oBAAA,EAAsB,WAAA;AAAA,oBACtB,aAAA,EAAe,WAAA;AAAA,oBACf,WAAA,EAAa,EAAE,iCAAiC,CAAA;AAAA,oBAChD,oBAAA,EAAoB,IAAA;AAAA,oBACpB,iBAAA,EAAmB,iBAAA;AAAA,oBACnB,WAAA,EAAa;AAAA,sBACX,UAAA,EAAY;AAAA,wBACV,cAAA,EAAgB;AAAA,0BACd,MAAA,EAAQ,EAAE,2BAA2B,CAAA;AAAA,0BACrC,QAAA,EAAU,EAAE,6BAA6B;AAAA;AAC3C,uBACF;AAAA,sBACA,IAAA,EAAM;AAAA,wBACJ,cAAA,EAAgB,EAAE,cAAc;AAAA;AAClC;AACF;AAAA,iBACF;AAAA,cAEJ,CAAA,GAAG;AAAA,8BACH,GAAA,CAAC,uBAAA,EAAA,EAAwB,KAAA,EAAO,CAAA,CAAE,uBAAuB,CAAA,EAAG;AAAA,aAAA,EAC9D;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA,EACF;AAAA;AAAA,KACF,EACF,CAAA;AAAA,oBAEA,GAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,iBAAA;AAAA,QACR,OAAA,EAAS,sBAAA;AAAA,QACT,SAAA;AAAA,QACA,qBAAA,EAAuB,SAAA,CAAU,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,KAAK,CAAA;AAAA,QACjD,oBAAA;AAAA,QACA,gBAAA,EAAkB,oBAAA;AAAA,QAClB,eAAA,EAAiB,mBAAA;AAAA,QACjB,cAAA,EAAgB,kBAAA;AAAA,QAChB,iBAAA,EAAmB,qBAAA;AAAA,QACnB,UAAA,EAAY,iBAAA;AAAA,QACZ,YAAA,EAAc,uBAAA;AAAA,QACd;AAAA;AAAA,KACF;AAAA,oBAEA,GAAA;AAAA,MAAC,qBAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,oBAAA;AAAA,QACR,OAAA,EAAS,qBAAA;AAAA,QACT,SAAA,EAAW,sBAAA;AAAA,QACX,MAAA,EAAQ,mBAAA;AAAA,QACR,QAAA,EAAU,oBAAA;AAAA,QACV,kBAAA,EAAoB,gBAAA,CAAiB,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,IAAI,CAAA;AAAA,QACpD;AAAA;AAAA,KACF;AAAA,oBAEA,GAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,QAAQ,oBAAA,KAAyB,IAAA;AAAA,QACjC,OAAA,EAAS,MAAM,uBAAA,CAAwB,IAAI,CAAA;AAAA,QAC3C,SAAA,EAAW,qBAAA;AAAA,QACX,YAAA,EAAc,sBAAsB,IAAA,IAAQ,EAAA;AAAA,QAC5C;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1,14 +1,95 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { Typography } from '@material-ui/core';
2
+ import { styled } from '@mui/material/styles';
3
+ import Typography from '@mui/material/Typography';
3
4
  import { Button } from '@patternfly/react-core';
4
5
  import { AddCircleOIcon } from '@patternfly/react-icons';
5
6
  import { CatalogIcon } from '@patternfly/react-icons/dist/esm/icons';
6
7
  import { NotebookCard } from './NotebookCard.esm.js';
7
8
 
9
+ const Container = styled("div")(({ theme }) => ({
10
+ padding: theme.spacing(3),
11
+ height: "100%",
12
+ display: "flex",
13
+ flexDirection: "column",
14
+ flex: 1,
15
+ minHeight: 0,
16
+ overflowY: "auto",
17
+ backgroundColor: "var(--pf-t--global--background--color--floating--default)"
18
+ }));
19
+ const Header = styled("div")(({ theme }) => ({
20
+ display: "flex",
21
+ alignItems: "center",
22
+ justifyContent: "space-between",
23
+ flexWrap: "wrap",
24
+ gap: theme.spacing(1),
25
+ marginBottom: theme.spacing(4)
26
+ }));
27
+ const Heading = styled(Typography)({
28
+ marginBottom: 0,
29
+ whiteSpace: "nowrap",
30
+ fontSize: "1.25rem"
31
+ });
32
+ const EmptyHeading = styled(Typography)(({ theme }) => ({
33
+ "&&": {
34
+ marginBottom: theme.spacing(1),
35
+ paddingBottom: theme.spacing(1)
36
+ }
37
+ }));
38
+ const EmptyState = styled("div")({
39
+ flex: 1,
40
+ display: "flex",
41
+ flexDirection: "column",
42
+ alignItems: "center",
43
+ justifyContent: "center",
44
+ textAlign: "center"
45
+ });
46
+ const EmptyIcon = styled(CatalogIcon)(({ theme }) => ({
47
+ fontSize: 48,
48
+ color: "var(--pf-t--global--icon--color--subtle)",
49
+ marginBottom: theme.spacing(1.5),
50
+ "& > .pf-v6-icon-rh-ui": {
51
+ display: "none !important"
52
+ }
53
+ }));
54
+ const Description = styled(Typography)(({ theme }) => ({
55
+ marginTop: theme.spacing(1),
56
+ marginBottom: theme.spacing(3),
57
+ maxWidth: 420
58
+ }));
59
+ const ActionButton = styled(Button)(({ theme }) => ({
60
+ textTransform: "none",
61
+ borderRadius: 999,
62
+ paddingLeft: theme.spacing(3),
63
+ paddingRight: theme.spacing(3)
64
+ }));
65
+ const EmptyActionButton = styled(ActionButton)(({ theme }) => ({
66
+ marginTop: theme.spacing(3)
67
+ }));
68
+ const Grid = styled("div", {
69
+ shouldForwardProp: (prop) => prop !== "isCompact"
70
+ })(({ theme, isCompact }) => ({
71
+ display: "grid",
72
+ gap: theme.spacing(2),
73
+ width: "100%",
74
+ maxWidth: "100%",
75
+ ...isCompact ? {
76
+ gridTemplateColumns: "repeat(auto-fill, minmax(280px, 1fr))",
77
+ paddingBottom: theme.spacing(6)
78
+ } : {
79
+ gridTemplateColumns: "repeat(3, minmax(0, 1fr))",
80
+ paddingBottom: theme.spacing(3),
81
+ [theme.breakpoints.down("md")]: {
82
+ gridTemplateColumns: "repeat(2, minmax(0, 1fr))"
83
+ },
84
+ [theme.breakpoints.down("sm")]: {
85
+ gridTemplateColumns: "repeat(1, minmax(0, 1fr))"
86
+ }
87
+ }
88
+ }));
8
89
  const NotebooksTab = ({
9
90
  notebooks,
10
91
  hasNotebooks,
11
- classes,
92
+ isCompact = false,
12
93
  openNotebookMenuId,
13
94
  setOpenNotebookMenuId,
14
95
  onSelectNotebook,
@@ -16,46 +97,28 @@ const NotebooksTab = ({
16
97
  onDelete,
17
98
  onCreateNotebook,
18
99
  t
19
- }) => /* @__PURE__ */ jsxs("div", { className: classes.notebooksContainer, children: [
20
- /* @__PURE__ */ jsxs("div", { className: classes.notebooksHeader, children: [
21
- /* @__PURE__ */ jsx(Typography, { variant: "h6", className: classes.notebooksHeading, children: t("notebooks.title") }),
100
+ }) => /* @__PURE__ */ jsxs(Container, { children: [
101
+ /* @__PURE__ */ jsxs(Header, { children: [
102
+ /* @__PURE__ */ jsx(Heading, { variant: "h6", children: t("notebooks.title") }),
22
103
  hasNotebooks && /* @__PURE__ */ jsx(
23
- Button,
104
+ ActionButton,
24
105
  {
25
106
  variant: "primary",
26
- className: classes.notebooksAction,
27
107
  icon: /* @__PURE__ */ jsx(AddCircleOIcon, {}),
28
108
  onClick: onCreateNotebook,
29
109
  children: t("notebooks.empty.action")
30
110
  }
31
111
  )
32
112
  ] }),
33
- !hasNotebooks ? /* @__PURE__ */ jsxs("div", { className: classes.notebooksEmptyState, children: [
34
- /* @__PURE__ */ jsx(CatalogIcon, { className: classes.notebooksIcon }),
35
- /* @__PURE__ */ jsx(Typography, { variant: "h6", className: classes.notebooksHeadingEmpty, children: t("notebooks.empty.title") }),
36
- /* @__PURE__ */ jsx(
37
- Typography,
38
- {
39
- variant: "body2",
40
- color: "textSecondary",
41
- className: classes.notebooksDescription,
42
- children: t("notebooks.empty.description")
43
- }
44
- ),
45
- /* @__PURE__ */ jsx(
46
- Button,
47
- {
48
- variant: "primary",
49
- className: classes.notebooksActionEmpty,
50
- onClick: onCreateNotebook,
51
- children: t("notebooks.empty.action")
52
- }
53
- )
54
- ] }) : /* @__PURE__ */ jsx("div", { className: classes.notebooksGrid, children: notebooks.map((notebook) => /* @__PURE__ */ jsx(
113
+ !hasNotebooks ? /* @__PURE__ */ jsxs(EmptyState, { children: [
114
+ /* @__PURE__ */ jsx(EmptyIcon, {}),
115
+ /* @__PURE__ */ jsx(EmptyHeading, { variant: "h6", children: t("notebooks.empty.title") }),
116
+ /* @__PURE__ */ jsx(Description, { variant: "body2", color: "text.secondary", children: t("notebooks.empty.description") }),
117
+ /* @__PURE__ */ jsx(EmptyActionButton, { variant: "primary", onClick: onCreateNotebook, children: t("notebooks.empty.action") })
118
+ ] }) : /* @__PURE__ */ jsx(Grid, { isCompact, children: notebooks.map((notebook) => /* @__PURE__ */ jsx(
55
119
  NotebookCard,
56
120
  {
57
121
  notebook,
58
- classes,
59
122
  openNotebookMenuId,
60
123
  setOpenNotebookMenuId,
61
124
  onClick: onSelectNotebook,
@@ -1 +1 @@
1
- {"version":3,"file":"NotebooksTab.esm.js","sources":["../../../src/components/notebooks/NotebooksTab.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 type { TranslationFunction } from '@backstage/core-plugin-api/alpha';\n\nimport { Typography } from '@material-ui/core';\nimport { Button } from '@patternfly/react-core';\nimport { AddCircleOIcon } from '@patternfly/react-icons';\nimport { CatalogIcon } from '@patternfly/react-icons/dist/esm/icons';\n\nimport { intelligentAssistantTranslationRef } from '../../translations/ref';\nimport { NotebookSession } from '../../types';\nimport { NotebookCard } from './NotebookCard';\n\ntype NotebooksTabProps = {\n notebooks: NotebookSession[];\n hasNotebooks: boolean;\n classes: Record<string, string>;\n openNotebookMenuId: string | null;\n setOpenNotebookMenuId: React.Dispatch<React.SetStateAction<string | null>>;\n onSelectNotebook: (notebook: NotebookSession) => void;\n onRename: (sessionId: string, newName: string) => void;\n onDelete: (sessionId: string) => void;\n onCreateNotebook: () => void;\n t: TranslationFunction<typeof intelligentAssistantTranslationRef.T>;\n};\n\nexport const NotebooksTab = ({\n notebooks,\n hasNotebooks,\n classes,\n openNotebookMenuId,\n setOpenNotebookMenuId,\n onSelectNotebook,\n onRename,\n onDelete,\n onCreateNotebook,\n t,\n}: NotebooksTabProps) => (\n <div className={classes.notebooksContainer}>\n <div className={classes.notebooksHeader}>\n <Typography variant=\"h6\" className={classes.notebooksHeading}>\n {t('notebooks.title')}\n </Typography>\n {hasNotebooks && (\n <Button\n variant=\"primary\"\n className={classes.notebooksAction}\n icon={<AddCircleOIcon />}\n onClick={onCreateNotebook}\n >\n {t('notebooks.empty.action')}\n </Button>\n )}\n </div>\n {!hasNotebooks ? (\n <div className={classes.notebooksEmptyState}>\n <CatalogIcon className={classes.notebooksIcon} />\n <Typography variant=\"h6\" className={classes.notebooksHeadingEmpty}>\n {t('notebooks.empty.title')}\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n className={classes.notebooksDescription}\n >\n {t('notebooks.empty.description')}\n </Typography>\n <Button\n variant=\"primary\"\n className={classes.notebooksActionEmpty}\n onClick={onCreateNotebook}\n >\n {t('notebooks.empty.action')}\n </Button>\n </div>\n ) : (\n <div className={classes.notebooksGrid}>\n {notebooks.map(notebook => (\n <NotebookCard\n key={notebook.session_id}\n notebook={notebook}\n classes={classes}\n openNotebookMenuId={openNotebookMenuId}\n setOpenNotebookMenuId={setOpenNotebookMenuId}\n onClick={onSelectNotebook}\n onRename={onRename}\n onDelete={onDelete}\n t={t}\n />\n ))}\n </div>\n )}\n </div>\n);\n"],"names":[],"mappings":";;;;;;;AAwCO,MAAM,eAAe,CAAC;AAAA,EAC3B,SAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,kBAAA;AAAA,EACA,qBAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,qBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,kBAAA,EACtB,QAAA,EAAA;AAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,eAAA,EACtB,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAQ,IAAA,EAAK,SAAA,EAAW,QAAQ,gBAAA,EACzC,QAAA,EAAA,CAAA,CAAE,iBAAiB,CAAA,EACtB,CAAA;AAAA,IACC,YAAA,oBACC,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,SAAA;AAAA,QACR,WAAW,OAAA,CAAQ,eAAA;AAAA,QACnB,IAAA,sBAAO,cAAA,EAAA,EAAe,CAAA;AAAA,QACtB,OAAA,EAAS,gBAAA;AAAA,QAER,YAAE,wBAAwB;AAAA;AAAA;AAC7B,GAAA,EAEJ,CAAA;AAAA,EACC,CAAC,YAAA,mBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,QAAQ,mBAAA,EACtB,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAW,OAAA,CAAQ,aAAA,EAAe,CAAA;AAAA,oBAC/C,GAAA,CAAC,cAAW,OAAA,EAAQ,IAAA,EAAK,WAAW,OAAA,CAAQ,qBAAA,EACzC,QAAA,EAAA,CAAA,CAAE,uBAAuB,CAAA,EAC5B,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,KAAA,EAAM,eAAA;AAAA,QACN,WAAW,OAAA,CAAQ,oBAAA;AAAA,QAElB,YAAE,6BAA6B;AAAA;AAAA,KAClC;AAAA,oBACA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,SAAA;AAAA,QACR,WAAW,OAAA,CAAQ,oBAAA;AAAA,QACnB,OAAA,EAAS,gBAAA;AAAA,QAER,YAAE,wBAAwB;AAAA;AAAA;AAC7B,GAAA,EACF,CAAA,uBAEC,KAAA,EAAA,EAAI,SAAA,EAAW,QAAQ,aAAA,EACrB,QAAA,EAAA,SAAA,CAAU,IAAI,CAAA,QAAA,qBACb,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MAEC,QAAA;AAAA,MACA,OAAA;AAAA,MACA,kBAAA;AAAA,MACA,qBAAA;AAAA,MACA,OAAA,EAAS,gBAAA;AAAA,MACT,QAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KAAA;AAAA,IARK,QAAA,CAAS;AAAA,GAUjB,CAAA,EACH;AAAA,CAAA,EAEJ;;;;"}
1
+ {"version":3,"file":"NotebooksTab.esm.js","sources":["../../../src/components/notebooks/NotebooksTab.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 type { TranslationFunction } from '@backstage/core-plugin-api/alpha';\n\nimport { styled } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\nimport { Button } from '@patternfly/react-core';\nimport { AddCircleOIcon } from '@patternfly/react-icons';\nimport { CatalogIcon } from '@patternfly/react-icons/dist/esm/icons';\n\nimport { intelligentAssistantTranslationRef } from '../../translations/ref';\nimport { NotebookSession } from '../../types';\nimport { NotebookCard } from './NotebookCard';\n\nconst Container = styled('div')(({ theme }) => ({\n padding: theme.spacing(3),\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n overflowY: 'auto',\n backgroundColor: 'var(--pf-t--global--background--color--floating--default)',\n}));\n\nconst Header = styled('div')(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n flexWrap: 'wrap',\n gap: theme.spacing(1),\n marginBottom: theme.spacing(4),\n}));\n\nconst Heading = styled(Typography)({\n marginBottom: 0,\n whiteSpace: 'nowrap',\n fontSize: '1.25rem',\n});\n\nconst EmptyHeading = styled(Typography)(({ theme }) => ({\n '&&': {\n marginBottom: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n },\n}));\n\nconst EmptyState = styled('div')({\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n});\n\nconst EmptyIcon = styled(CatalogIcon)(({ theme }) => ({\n fontSize: 48,\n color: 'var(--pf-t--global--icon--color--subtle)',\n marginBottom: theme.spacing(1.5),\n '& > .pf-v6-icon-rh-ui': {\n display: 'none !important',\n },\n}));\n\nconst Description = styled(Typography)(({ theme }) => ({\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(3),\n maxWidth: 420,\n}));\n\nconst ActionButton = styled(Button)(({ theme }) => ({\n textTransform: 'none',\n borderRadius: 999,\n paddingLeft: theme.spacing(3),\n paddingRight: theme.spacing(3),\n}));\n\nconst EmptyActionButton = styled(ActionButton)(({ theme }) => ({\n marginTop: theme.spacing(3),\n}));\n\nconst Grid = styled('div', {\n shouldForwardProp: prop => prop !== 'isCompact',\n})<{ isCompact?: boolean }>(({ theme, isCompact }) => ({\n display: 'grid',\n gap: theme.spacing(2),\n width: '100%',\n maxWidth: '100%',\n ...(isCompact\n ? {\n gridTemplateColumns: 'repeat(auto-fill, minmax(280px, 1fr))',\n paddingBottom: theme.spacing(6),\n }\n : {\n gridTemplateColumns: 'repeat(3, minmax(0, 1fr))',\n paddingBottom: theme.spacing(3),\n [theme.breakpoints.down('md')]: {\n gridTemplateColumns: 'repeat(2, minmax(0, 1fr))',\n },\n [theme.breakpoints.down('sm')]: {\n gridTemplateColumns: 'repeat(1, minmax(0, 1fr))',\n },\n }),\n}));\n\ntype NotebooksTabProps = {\n notebooks: NotebookSession[];\n hasNotebooks: boolean;\n isCompact?: boolean;\n openNotebookMenuId: string | null;\n setOpenNotebookMenuId: React.Dispatch<React.SetStateAction<string | null>>;\n onSelectNotebook: (notebook: NotebookSession) => void;\n onRename: (sessionId: string, newName: string) => void;\n onDelete: (sessionId: string) => void;\n onCreateNotebook: () => void;\n t: TranslationFunction<typeof intelligentAssistantTranslationRef.T>;\n};\n\nexport const NotebooksTab = ({\n notebooks,\n hasNotebooks,\n isCompact = false,\n openNotebookMenuId,\n setOpenNotebookMenuId,\n onSelectNotebook,\n onRename,\n onDelete,\n onCreateNotebook,\n t,\n}: NotebooksTabProps) => (\n <Container>\n <Header>\n <Heading variant=\"h6\">{t('notebooks.title')}</Heading>\n {hasNotebooks && (\n <ActionButton\n variant=\"primary\"\n icon={<AddCircleOIcon />}\n onClick={onCreateNotebook}\n >\n {t('notebooks.empty.action')}\n </ActionButton>\n )}\n </Header>\n {!hasNotebooks ? (\n <EmptyState>\n <EmptyIcon />\n <EmptyHeading variant=\"h6\">{t('notebooks.empty.title')}</EmptyHeading>\n <Description variant=\"body2\" color=\"text.secondary\">\n {t('notebooks.empty.description')}\n </Description>\n <EmptyActionButton variant=\"primary\" onClick={onCreateNotebook}>\n {t('notebooks.empty.action')}\n </EmptyActionButton>\n </EmptyState>\n ) : (\n <Grid isCompact={isCompact}>\n {notebooks.map(notebook => (\n <NotebookCard\n key={notebook.session_id}\n notebook={notebook}\n openNotebookMenuId={openNotebookMenuId}\n setOpenNotebookMenuId={setOpenNotebookMenuId}\n onClick={onSelectNotebook}\n onRename={onRename}\n onDelete={onDelete}\n t={t}\n />\n ))}\n </Grid>\n )}\n </Container>\n);\n"],"names":[],"mappings":"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"}