@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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @red-hat-developer-hub/backstage-plugin-intelligent-assistant
2
2
 
3
+ ## 5.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - c37b5f1: Gate Intelligent Assistant UI by consolidated RBAC permissions (`intelligent-assistant.chat`, `intelligent-assistant.notebooks`, `intelligent-assistant.mcp.tools`, `intelligent-assistant.skills`). Features are hidden when access is denied instead of showing permission-denied screens or read-only MCP mode.
8
+
9
+ ### Patch Changes
10
+
11
+ - a9d54a1: Add createExtensionTester coverage for the NFS extensions and modules
12
+ - @red-hat-developer-hub/backstage-plugin-intelligent-assistant-common@5.1.0
13
+
14
+ ## 5.0.2
15
+
16
+ ### Patch Changes
17
+
18
+ - 249596b: `GET /v1/models` now returns a `supportsVision` flag on each model, so the frontend can gate image attachments directly from the model list without a per-user `POST /v1/validate-model-vision` round-trip. Each LLM's capability is probed once via a lightweight LCS test-inference and memoised in a shared cache keyed by the model identifier: a confirmed `true` for 24h, a `false` only briefly (LCS returns the same 5xx for a genuinely non-vision model and a transient error, so a real model recovers quickly). Non-LLM models (e.g. embeddings) are reported as `supportsVision: false` without a probe, and a single failed probe no longer blocks the whole list.
19
+ - 726c1de: Migrate Material UI v4 usages to MUI v5.
20
+ - 63be96e: Updated dependency `react-router-dom` to `^6.30.6`.
21
+ - @red-hat-developer-hub/backstage-plugin-intelligent-assistant-common@5.0.2
22
+
3
23
  ## 5.0.1
4
24
 
5
25
  ### Patch Changes
package/dist/alpha.d.ts CHANGED
@@ -5,8 +5,7 @@ import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api'
5
5
  * @alpha
6
6
  **/
7
7
  declare const intelligentAssistantTranslationRef: _backstage_frontend_plugin_api.TranslationRef<"plugin.intelligent-assistant", {
8
- readonly 'disclaimer.withoutValidation': string;
9
- readonly 'disclaimer.withValidation': string;
8
+ readonly disclaimer: string;
10
9
  readonly 'prompts.codeReadability.title': string;
11
10
  readonly 'prompts.codeReadability.message': string;
12
11
  readonly 'prompts.debugging.title': string;
@@ -118,11 +117,6 @@ declare const intelligentAssistantTranslationRef: _backstage_frontend_plugin_api
118
117
  readonly 'conversation.rename.confirm.title': string;
119
118
  readonly 'conversation.rename.confirm.action': string;
120
119
  readonly 'conversation.rename.placeholder': string;
121
- readonly 'permission.required.title': string;
122
- readonly 'permission.required.description': string;
123
- readonly 'permission.subject.plugin': string;
124
- readonly 'permission.subject.notebooks': string;
125
- readonly 'permission.notebooks.goBack': string;
126
120
  readonly 'lcore.notConfigured.title': string;
127
121
  readonly 'lcore.notConfigured.description': string;
128
122
  readonly 'lcore.notConfigured.developerLightspeedDocs': string;
@@ -194,7 +188,6 @@ declare const intelligentAssistantTranslationRef: _backstage_frontend_plugin_api
194
188
  readonly 'modal.title.preview': string;
195
189
  readonly 'modal.title.edit': string;
196
190
  readonly 'icon.lightspeed.alt': string;
197
- readonly 'icon.permissionRequired.alt': string;
198
191
  readonly 'message.options.label': string;
199
192
  readonly 'file.upload.error.alreadyExists': string;
200
193
  readonly 'file.upload.error.multipleFiles': string;
@@ -230,7 +223,6 @@ declare const intelligentAssistantTranslationRef: _backstage_frontend_plugin_api
230
223
  readonly 'mcp.settings.title': string;
231
224
  readonly 'mcp.settings.selectedCount': string;
232
225
  readonly 'mcp.settings.closeAriaLabel': string;
233
- readonly 'mcp.settings.readOnlyAccess': string;
234
226
  readonly 'mcp.settings.tableAriaLabel': string;
235
227
  readonly 'mcp.settings.enabled': string;
236
228
  readonly 'mcp.settings.name': string;
@@ -1,18 +1,17 @@
1
- import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
- import { makeStyles } from '@material-ui/core';
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { styled } from '@mui/material/styles';
3
3
  import { ChatbotDisplayMode } from '@patternfly/chatbot';
4
4
  import { AttachmentEdit } from '@patternfly/chatbot/dist/dynamic/AttachmentEdit';
5
5
  import { PreviewAttachment } from '@patternfly/chatbot/dist/dynamic/PreviewAttachment';
6
6
  import { useTranslation } from '../hooks/useTranslation.esm.js';
7
7
  import { useFileAttachmentContext } from './AttachmentContext.esm.js';
8
8
 
9
- const useStyles = makeStyles(() => ({
10
- modalFooter: {
11
- "&>button": {
12
- width: "12% !important"
13
- }
9
+ const MODAL_FOOTER_CLASS = "ia-attachment-modal-footer";
10
+ const AttachmentScope = styled("div")({
11
+ [`& .${MODAL_FOOTER_CLASS} > button`]: {
12
+ width: "12% !important"
14
13
  }
15
- }));
14
+ });
16
15
  const Attachment = () => {
17
16
  const {
18
17
  currentFileContent,
@@ -20,7 +19,6 @@ const Attachment = () => {
20
19
  modalState,
21
20
  setCurrentFileContent
22
21
  } = useFileAttachmentContext();
23
- const classes = useStyles();
24
22
  const { t } = useTranslation();
25
23
  if (!currentFileContent) {
26
24
  return null;
@@ -33,7 +31,7 @@ const Attachment = () => {
33
31
  setIsEditModalOpen,
34
32
  setIsPreviewModalOpen
35
33
  } = modalState;
36
- return /* @__PURE__ */ jsxs(Fragment, { children: [
34
+ return /* @__PURE__ */ jsxs(AttachmentScope, { children: [
37
35
  /* @__PURE__ */ jsx(
38
36
  PreviewAttachment,
39
37
  {
@@ -43,7 +41,7 @@ const Attachment = () => {
43
41
  secondaryActionButtonText: t("modal.close"),
44
42
  primaryActionButtonText: t("modal.edit"),
45
43
  title: t("modal.title.preview"),
46
- modalFooterClassName: classes.modalFooter,
44
+ modalFooterClassName: MODAL_FOOTER_CLASS,
47
45
  onEdit: () => {
48
46
  setIsPreviewModalOpen(false);
49
47
  setIsEditModalOpen(true);
@@ -66,7 +64,7 @@ const Attachment = () => {
66
64
  title: t("modal.title.edit"),
67
65
  secondaryActionButtonText: t("modal.cancel"),
68
66
  primaryActionButtonText: t("modal.save"),
69
- modalFooterClassName: classes.modalFooter,
67
+ modalFooterClassName: MODAL_FOOTER_CLASS,
70
68
  onSave: (_event, content) => {
71
69
  setCurrentFileContent({
72
70
  ...currentFileContent,
@@ -1 +1 @@
1
- {"version":3,"file":"Attachment.esm.js","sources":["../../src/components/Attachment.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { makeStyles } from '@material-ui/core';\nimport { ChatbotDisplayMode } from '@patternfly/chatbot';\nimport { AttachmentEdit } from '@patternfly/chatbot/dist/dynamic/AttachmentEdit';\nimport { PreviewAttachment } from '@patternfly/chatbot/dist/dynamic/PreviewAttachment';\n\nimport { useTranslation } from '../hooks/useTranslation';\nimport { useFileAttachmentContext } from './AttachmentContext';\n\nconst useStyles = makeStyles(() => ({\n modalFooter: {\n '&>button': {\n width: '12% !important',\n },\n },\n}));\nconst Attachment = () => {\n const {\n currentFileContent,\n setFileContents,\n modalState,\n setCurrentFileContent,\n } = useFileAttachmentContext();\n const classes = useStyles();\n const { t } = useTranslation();\n\n if (!currentFileContent) {\n return null;\n }\n const {\n previewModalKey,\n isPreviewModalOpen,\n isEditModalOpen,\n setPreviewModalKey,\n setIsEditModalOpen,\n setIsPreviewModalOpen,\n } = modalState;\n\n return (\n <>\n <PreviewAttachment\n key={previewModalKey}\n code={currentFileContent?.content}\n fileName={currentFileContent?.name}\n isModalOpen={isPreviewModalOpen}\n secondaryActionButtonText={t('modal.close')}\n primaryActionButtonText={t('modal.edit')}\n title={t('modal.title.preview')}\n modalFooterClassName={classes.modalFooter}\n onEdit={() => {\n setIsPreviewModalOpen(false);\n setIsEditModalOpen(true);\n }}\n onDismiss={() => {\n setCurrentFileContent(undefined);\n setIsPreviewModalOpen(false);\n }}\n handleModalToggle={() => setIsPreviewModalOpen(false)}\n displayMode={ChatbotDisplayMode.fullscreen}\n />\n <AttachmentEdit\n key={currentFileContent?.content}\n code={currentFileContent?.content}\n fileName={currentFileContent?.name}\n isModalOpen={isEditModalOpen}\n title={t('modal.title.edit')}\n secondaryActionButtonText={t('modal.cancel')}\n primaryActionButtonText={t('modal.save')}\n modalFooterClassName={classes.modalFooter}\n onSave={(_event, content) => {\n setCurrentFileContent({\n ...currentFileContent,\n content,\n });\n setFileContents(prev => {\n const existingIndex = prev.findIndex(\n f => f.name === currentFileContent?.name,\n );\n\n if (existingIndex !== -1) {\n // Update the existing file's content\n const updated = [...prev];\n updated[existingIndex] = {\n ...updated[existingIndex],\n content: content as string,\n };\n return updated;\n }\n\n // File doesn't exist, add a new one\n return [\n ...prev,\n {\n name: currentFileContent?.name,\n type: currentFileContent?.type,\n content: content as string,\n },\n ];\n });\n\n setPreviewModalKey(prev => prev + 1);\n setIsEditModalOpen(false);\n setIsPreviewModalOpen(true);\n }}\n onCancel={() => setCurrentFileContent(undefined)}\n handleModalToggle={() => setIsEditModalOpen(false)}\n displayMode={ChatbotDisplayMode.fullscreen}\n />\n </>\n );\n};\n\nexport default Attachment;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Attachment.esm.js","sources":["../../src/components/Attachment.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 { styled } from '@mui/material/styles';\nimport { ChatbotDisplayMode } from '@patternfly/chatbot';\nimport { AttachmentEdit } from '@patternfly/chatbot/dist/dynamic/AttachmentEdit';\nimport { PreviewAttachment } from '@patternfly/chatbot/dist/dynamic/PreviewAttachment';\n\nimport { useTranslation } from '../hooks/useTranslation';\nimport { useFileAttachmentContext } from './AttachmentContext';\n\nconst MODAL_FOOTER_CLASS = 'ia-attachment-modal-footer';\n\nconst AttachmentScope = styled('div')({\n [`& .${MODAL_FOOTER_CLASS} > button`]: {\n width: '12% !important',\n },\n});\n\nconst Attachment = () => {\n const {\n currentFileContent,\n setFileContents,\n modalState,\n setCurrentFileContent,\n } = useFileAttachmentContext();\n const { t } = useTranslation();\n\n if (!currentFileContent) {\n return null;\n }\n const {\n previewModalKey,\n isPreviewModalOpen,\n isEditModalOpen,\n setPreviewModalKey,\n setIsEditModalOpen,\n setIsPreviewModalOpen,\n } = modalState;\n\n return (\n <AttachmentScope>\n <PreviewAttachment\n key={previewModalKey}\n code={currentFileContent?.content}\n fileName={currentFileContent?.name}\n isModalOpen={isPreviewModalOpen}\n secondaryActionButtonText={t('modal.close')}\n primaryActionButtonText={t('modal.edit')}\n title={t('modal.title.preview')}\n modalFooterClassName={MODAL_FOOTER_CLASS}\n onEdit={() => {\n setIsPreviewModalOpen(false);\n setIsEditModalOpen(true);\n }}\n onDismiss={() => {\n setCurrentFileContent(undefined);\n setIsPreviewModalOpen(false);\n }}\n handleModalToggle={() => setIsPreviewModalOpen(false)}\n displayMode={ChatbotDisplayMode.fullscreen}\n />\n <AttachmentEdit\n key={currentFileContent?.content}\n code={currentFileContent?.content}\n fileName={currentFileContent?.name}\n isModalOpen={isEditModalOpen}\n title={t('modal.title.edit')}\n secondaryActionButtonText={t('modal.cancel')}\n primaryActionButtonText={t('modal.save')}\n modalFooterClassName={MODAL_FOOTER_CLASS}\n onSave={(_event, content) => {\n setCurrentFileContent({\n ...currentFileContent,\n content,\n });\n setFileContents(prev => {\n const existingIndex = prev.findIndex(\n f => f.name === currentFileContent?.name,\n );\n\n if (existingIndex !== -1) {\n // Update the existing file's content\n const updated = [...prev];\n updated[existingIndex] = {\n ...updated[existingIndex],\n content: content as string,\n };\n return updated;\n }\n\n // File doesn't exist, add a new one\n return [\n ...prev,\n {\n name: currentFileContent?.name,\n type: currentFileContent?.type,\n content: content as string,\n },\n ];\n });\n\n setPreviewModalKey(prev => prev + 1);\n setIsEditModalOpen(false);\n setIsPreviewModalOpen(true);\n }}\n onCancel={() => setCurrentFileContent(undefined)}\n handleModalToggle={() => setIsEditModalOpen(false)}\n displayMode={ChatbotDisplayMode.fullscreen}\n />\n </AttachmentScope>\n );\n};\n\nexport default Attachment;\n"],"names":[],"mappings":";;;;;;;;AAwBA,MAAM,kBAAA,GAAqB,4BAAA;AAE3B,MAAM,eAAA,GAAkB,MAAA,CAAO,KAAK,CAAA,CAAE;AAAA,EACpC,CAAC,CAAA,GAAA,EAAM,kBAAkB,CAAA,SAAA,CAAW,GAAG;AAAA,IACrC,KAAA,EAAO;AAAA;AAEX,CAAC,CAAA;AAED,MAAM,aAAa,MAAM;AACvB,EAAA,MAAM;AAAA,IACJ,kBAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,MACE,wBAAA,EAAyB;AAC7B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAE7B,EAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM;AAAA,IACJ,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GACF,GAAI,UAAA;AAEJ,EAAA,4BACG,eAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QAEC,MAAM,kBAAA,EAAoB,OAAA;AAAA,QAC1B,UAAU,kBAAA,EAAoB,IAAA;AAAA,QAC9B,WAAA,EAAa,kBAAA;AAAA,QACb,yBAAA,EAA2B,EAAE,aAAa,CAAA;AAAA,QAC1C,uBAAA,EAAyB,EAAE,YAAY,CAAA;AAAA,QACvC,KAAA,EAAO,EAAE,qBAAqB,CAAA;AAAA,QAC9B,oBAAA,EAAsB,kBAAA;AAAA,QACtB,QAAQ,MAAM;AACZ,UAAA,qBAAA,CAAsB,KAAK,CAAA;AAC3B,UAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,QACzB,CAAA;AAAA,QACA,WAAW,MAAM;AACf,UAAA,qBAAA,CAAsB,MAAS,CAAA;AAC/B,UAAA,qBAAA,CAAsB,KAAK,CAAA;AAAA,QAC7B,CAAA;AAAA,QACA,iBAAA,EAAmB,MAAM,qBAAA,CAAsB,KAAK,CAAA;AAAA,QACpD,aAAa,kBAAA,CAAmB;AAAA,OAAA;AAAA,MAjB3B;AAAA,KAkBP;AAAA,oBACA,GAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QAEC,MAAM,kBAAA,EAAoB,OAAA;AAAA,QAC1B,UAAU,kBAAA,EAAoB,IAAA;AAAA,QAC9B,WAAA,EAAa,eAAA;AAAA,QACb,KAAA,EAAO,EAAE,kBAAkB,CAAA;AAAA,QAC3B,yBAAA,EAA2B,EAAE,cAAc,CAAA;AAAA,QAC3C,uBAAA,EAAyB,EAAE,YAAY,CAAA;AAAA,QACvC,oBAAA,EAAsB,kBAAA;AAAA,QACtB,MAAA,EAAQ,CAAC,MAAA,EAAQ,OAAA,KAAY;AAC3B,UAAA,qBAAA,CAAsB;AAAA,YACpB,GAAG,kBAAA;AAAA,YACH;AAAA,WACD,CAAA;AACD,UAAA,eAAA,CAAgB,CAAA,IAAA,KAAQ;AACtB,YAAA,MAAM,gBAAgB,IAAA,CAAK,SAAA;AAAA,cACzB,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,KAAS,kBAAA,EAAoB;AAAA,aACtC;AAEA,YAAA,IAAI,kBAAkB,EAAA,EAAI;AAExB,cAAA,MAAM,OAAA,GAAU,CAAC,GAAG,IAAI,CAAA;AACxB,cAAA,OAAA,CAAQ,aAAa,CAAA,GAAI;AAAA,gBACvB,GAAG,QAAQ,aAAa,CAAA;AAAA,gBACxB;AAAA,eACF;AACA,cAAA,OAAO,OAAA;AAAA,YACT;AAGA,YAAA,OAAO;AAAA,cACL,GAAG,IAAA;AAAA,cACH;AAAA,gBACE,MAAM,kBAAA,EAAoB,IAAA;AAAA,gBAC1B,MAAM,kBAAA,EAAoB,IAAA;AAAA,gBAC1B;AAAA;AACF,aACF;AAAA,UACF,CAAC,CAAA;AAED,UAAA,kBAAA,CAAmB,CAAA,IAAA,KAAQ,OAAO,CAAC,CAAA;AACnC,UAAA,kBAAA,CAAmB,KAAK,CAAA;AACxB,UAAA,qBAAA,CAAsB,IAAI,CAAA;AAAA,QAC5B,CAAA;AAAA,QACA,QAAA,EAAU,MAAM,qBAAA,CAAsB,MAAS,CAAA;AAAA,QAC/C,iBAAA,EAAmB,MAAM,kBAAA,CAAmB,KAAK,CAAA;AAAA,QACjD,aAAa,kBAAA,CAAmB;AAAA,OAAA;AAAA,MA7C3B,kBAAA,EAAoB;AAAA;AA8C3B,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1,79 +1,74 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { makeStyles } from '@material-ui/core';
3
- import { Tooltip, Button } from '@patternfly/react-core';
2
+ import { styled } from '@mui/material/styles';
3
+ import { Button, Tooltip } from '@patternfly/react-core';
4
4
  import { PenIcon } from '@patternfly/react-icons';
5
5
  import { useTranslation } from '../hooks/useTranslation.esm.js';
6
6
  import { SidebarExpandIcon } from './notebooks/SidebarCollapseIcon.esm.js';
7
7
 
8
- const useStyles = makeStyles((theme) => ({
9
- strip: {
10
- display: "flex",
11
- flexDirection: "column",
12
- alignItems: "center",
13
- paddingTop: theme.spacing(1.5),
14
- gap: theme.spacing(1.5),
15
- borderRight: "1px solid var(--pf-t--global--border--color--default)",
16
- width: 48,
17
- minWidth: 48,
18
- flexShrink: 0,
19
- backgroundColor: "var(--pf-t--global--background--color--primary--default)",
20
- height: "100%"
8
+ const Strip = styled("div")(({ theme }) => ({
9
+ display: "flex",
10
+ flexDirection: "column",
11
+ alignItems: "center",
12
+ paddingTop: theme.spacing(1.5),
13
+ gap: theme.spacing(1.5),
14
+ borderRight: "1px solid var(--pf-t--global--border--color--default)",
15
+ width: 48,
16
+ minWidth: 48,
17
+ flexShrink: 0,
18
+ backgroundColor: "var(--pf-t--global--background--color--primary--default)",
19
+ height: "100%"
20
+ }));
21
+ const IconButton = styled(Button)({
22
+ padding: "8px !important",
23
+ minWidth: 0,
24
+ lineHeight: 1,
25
+ borderRadius: "8px !important",
26
+ border: "1px solid var(--pf-t--global--border--color--default) !important",
27
+ color: "var(--pf-t--global--icon--color--regular)",
28
+ "& svg": {
29
+ width: 18,
30
+ height: 18
21
31
  },
22
- iconButton: {
23
- padding: "8px !important",
24
- minWidth: 0,
25
- lineHeight: 1,
26
- borderRadius: "8px !important",
27
- border: "1px solid var(--pf-t--global--border--color--default) !important",
28
- color: "var(--pf-t--global--icon--color--regular)",
29
- "& svg": {
30
- width: 18,
31
- height: 18
32
- },
33
- "&:hover": {
34
- color: "var(--pf-t--global--icon--color--hover) !important",
35
- backgroundColor: "var(--pf-t--global--background--color--action--plain--hover) !important"
36
- }
32
+ "&:hover": {
33
+ color: "var(--pf-t--global--icon--color--hover) !important",
34
+ backgroundColor: "var(--pf-t--global--background--color--action--plain--hover) !important"
35
+ }
36
+ });
37
+ const NewChatIconButton = styled(Button)({
38
+ padding: "8px !important",
39
+ minWidth: 0,
40
+ lineHeight: 1,
41
+ borderRadius: "8px !important",
42
+ border: "1px solid var(--pf-t--global--border--color--default) !important",
43
+ color: "var(--pf-t--global--color--brand--default) !important",
44
+ "&:hover": {
45
+ color: "var(--pf-t--global--color--brand--hover) !important",
46
+ backgroundColor: "var(--pf-t--global--background--color--action--plain--hover) !important"
37
47
  },
38
- newChatIconButton: {
39
- padding: "8px !important",
40
- minWidth: 0,
41
- lineHeight: 1,
42
- borderRadius: "8px !important",
43
- border: "1px solid var(--pf-t--global--border--color--default) !important",
44
- color: "var(--pf-t--global--color--brand--default) !important",
45
- "&:hover": {
46
- color: "var(--pf-t--global--color--brand--hover) !important",
47
- backgroundColor: "var(--pf-t--global--background--color--action--plain--hover) !important"
48
- },
49
- "&:disabled": {
50
- color: "var(--pf-t--global--text--color--disabled) !important"
51
- }
48
+ "&:disabled": {
49
+ color: "var(--pf-t--global--text--color--disabled) !important"
52
50
  }
53
- }));
51
+ });
54
52
  const CollapsedHistoryStrip = ({
55
53
  onExpand,
56
54
  onNewChat,
57
55
  newChatDisabled = false
58
56
  }) => {
59
- const classes = useStyles();
60
57
  const { t } = useTranslation();
61
- return /* @__PURE__ */ jsxs("div", { className: classes.strip, children: [
58
+ return /* @__PURE__ */ jsxs(Strip, { children: [
62
59
  /* @__PURE__ */ jsx(Tooltip, { content: t("tooltip.expandHistoryPanel"), position: "right", children: /* @__PURE__ */ jsx(
63
- Button,
60
+ IconButton,
64
61
  {
65
62
  variant: "plain",
66
- className: classes.iconButton,
67
63
  onClick: onExpand,
68
64
  "aria-label": t("tooltip.expandHistoryPanel"),
69
65
  children: /* @__PURE__ */ jsx(SidebarExpandIcon, {})
70
66
  }
71
67
  ) }),
72
68
  /* @__PURE__ */ jsx(Tooltip, { content: t("tooltip.quickNewChat"), position: "right", children: /* @__PURE__ */ jsx(
73
- Button,
69
+ NewChatIconButton,
74
70
  {
75
71
  variant: "plain",
76
- className: classes.newChatIconButton,
77
72
  onClick: onNewChat,
78
73
  "aria-label": t("tooltip.quickNewChat"),
79
74
  isDisabled: newChatDisabled,
@@ -1 +1 @@
1
- {"version":3,"file":"CollapsedHistoryStrip.esm.js","sources":["../../src/components/CollapsedHistoryStrip.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { makeStyles } from '@material-ui/core';\nimport { Button, Tooltip } from '@patternfly/react-core';\nimport { PenIcon } from '@patternfly/react-icons';\n\nimport { useTranslation } from '../hooks/useTranslation';\nimport { SidebarExpandIcon } from './notebooks/SidebarCollapseIcon';\n\nconst useStyles = makeStyles(theme => ({\n strip: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: theme.spacing(1.5),\n gap: theme.spacing(1.5),\n borderRight: '1px solid var(--pf-t--global--border--color--default)',\n width: 48,\n minWidth: 48,\n flexShrink: 0,\n backgroundColor: 'var(--pf-t--global--background--color--primary--default)',\n height: '100%',\n },\n iconButton: {\n padding: '8px !important',\n minWidth: 0,\n lineHeight: 1,\n borderRadius: '8px !important',\n border: '1px solid var(--pf-t--global--border--color--default) !important',\n color: 'var(--pf-t--global--icon--color--regular)',\n '& svg': {\n width: 18,\n height: 18,\n },\n '&:hover': {\n color: 'var(--pf-t--global--icon--color--hover) !important',\n backgroundColor:\n 'var(--pf-t--global--background--color--action--plain--hover) !important',\n },\n },\n newChatIconButton: {\n padding: '8px !important',\n minWidth: 0,\n lineHeight: 1,\n borderRadius: '8px !important',\n border: '1px solid var(--pf-t--global--border--color--default) !important',\n color: 'var(--pf-t--global--color--brand--default) !important',\n '&:hover': {\n color: 'var(--pf-t--global--color--brand--hover) !important',\n backgroundColor:\n 'var(--pf-t--global--background--color--action--plain--hover) !important',\n },\n '&:disabled': {\n color: 'var(--pf-t--global--text--color--disabled) !important',\n },\n },\n}));\n\ntype CollapsedHistoryStripProps = {\n onExpand: () => void;\n onNewChat: () => void;\n newChatDisabled?: boolean;\n};\n\nexport const CollapsedHistoryStrip = ({\n onExpand,\n onNewChat,\n newChatDisabled = false,\n}: CollapsedHistoryStripProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <div className={classes.strip}>\n <Tooltip content={t('tooltip.expandHistoryPanel')} position=\"right\">\n <Button\n variant=\"plain\"\n className={classes.iconButton}\n onClick={onExpand}\n aria-label={t('tooltip.expandHistoryPanel')}\n >\n <SidebarExpandIcon />\n </Button>\n </Tooltip>\n <Tooltip content={t('tooltip.quickNewChat')} position=\"right\">\n <Button\n variant=\"plain\"\n className={classes.newChatIconButton}\n onClick={onNewChat}\n aria-label={t('tooltip.quickNewChat')}\n isDisabled={newChatDisabled}\n >\n <PenIcon />\n </Button>\n </Tooltip>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAuBA,MAAM,SAAA,GAAY,WAAW,CAAA,KAAA,MAAU;AAAA,EACrC,KAAA,EAAO;AAAA,IACL,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,GAAG,CAAA;AAAA,IACtB,WAAA,EAAa,uDAAA;AAAA,IACb,KAAA,EAAO,EAAA;AAAA,IACP,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,CAAA;AAAA,IACZ,eAAA,EAAiB,0DAAA;AAAA,IACjB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,UAAA,EAAY;AAAA,IACV,OAAA,EAAS,gBAAA;AAAA,IACT,QAAA,EAAU,CAAA;AAAA,IACV,UAAA,EAAY,CAAA;AAAA,IACZ,YAAA,EAAc,gBAAA;AAAA,IACd,MAAA,EAAQ,kEAAA;AAAA,IACR,KAAA,EAAO,2CAAA;AAAA,IACP,OAAA,EAAS;AAAA,MACP,KAAA,EAAO,EAAA;AAAA,MACP,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,SAAA,EAAW;AAAA,MACT,KAAA,EAAO,oDAAA;AAAA,MACP,eAAA,EACE;AAAA;AACJ,GACF;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,OAAA,EAAS,gBAAA;AAAA,IACT,QAAA,EAAU,CAAA;AAAA,IACV,UAAA,EAAY,CAAA;AAAA,IACZ,YAAA,EAAc,gBAAA;AAAA,IACd,MAAA,EAAQ,kEAAA;AAAA,IACR,KAAA,EAAO,uDAAA;AAAA,IACP,SAAA,EAAW;AAAA,MACT,KAAA,EAAO,qDAAA;AAAA,MACP,eAAA,EACE;AAAA,KACJ;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,KAAA,EAAO;AAAA;AACT;AAEJ,CAAA,CAAE,CAAA;AAQK,MAAM,wBAAwB,CAAC;AAAA,EACpC,QAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA,GAAkB;AACpB,CAAA,KAAkC;AAChC,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAE7B,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,KAAA,EACtB,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAQ,OAAA,EAAS,CAAA,CAAE,4BAA4B,CAAA,EAAG,UAAS,OAAA,EAC1D,QAAA,kBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,WAAW,OAAA,CAAQ,UAAA;AAAA,QACnB,OAAA,EAAS,QAAA;AAAA,QACT,YAAA,EAAY,EAAE,4BAA4B,CAAA;AAAA,QAE1C,8BAAC,iBAAA,EAAA,EAAkB;AAAA;AAAA,KACrB,EACF,CAAA;AAAA,wBACC,OAAA,EAAA,EAAQ,OAAA,EAAS,EAAE,sBAAsB,CAAA,EAAG,UAAS,OAAA,EACpD,QAAA,kBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,WAAW,OAAA,CAAQ,iBAAA;AAAA,QACnB,OAAA,EAAS,SAAA;AAAA,QACT,YAAA,EAAY,EAAE,sBAAsB,CAAA;AAAA,QACpC,UAAA,EAAY,eAAA;AAAA,QAEZ,8BAAC,OAAA,EAAA,EAAQ;AAAA;AAAA,KACX,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"CollapsedHistoryStrip.esm.js","sources":["../../src/components/CollapsedHistoryStrip.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 { styled } from '@mui/material/styles';\nimport { Button, Tooltip } from '@patternfly/react-core';\nimport { PenIcon } from '@patternfly/react-icons';\n\nimport { useTranslation } from '../hooks/useTranslation';\nimport { SidebarExpandIcon } from './notebooks/SidebarCollapseIcon';\n\nconst Strip = styled('div')(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: theme.spacing(1.5),\n gap: theme.spacing(1.5),\n borderRight: '1px solid var(--pf-t--global--border--color--default)',\n width: 48,\n minWidth: 48,\n flexShrink: 0,\n backgroundColor: 'var(--pf-t--global--background--color--primary--default)',\n height: '100%',\n}));\n\nconst IconButton = styled(Button)({\n padding: '8px !important',\n minWidth: 0,\n lineHeight: 1,\n borderRadius: '8px !important',\n border: '1px solid var(--pf-t--global--border--color--default) !important',\n color: 'var(--pf-t--global--icon--color--regular)',\n '& svg': {\n width: 18,\n height: 18,\n },\n '&:hover': {\n color: 'var(--pf-t--global--icon--color--hover) !important',\n backgroundColor:\n 'var(--pf-t--global--background--color--action--plain--hover) !important',\n },\n});\n\nconst NewChatIconButton = styled(Button)({\n padding: '8px !important',\n minWidth: 0,\n lineHeight: 1,\n borderRadius: '8px !important',\n border: '1px solid var(--pf-t--global--border--color--default) !important',\n color: 'var(--pf-t--global--color--brand--default) !important',\n '&:hover': {\n color: 'var(--pf-t--global--color--brand--hover) !important',\n backgroundColor:\n 'var(--pf-t--global--background--color--action--plain--hover) !important',\n },\n '&:disabled': {\n color: 'var(--pf-t--global--text--color--disabled) !important',\n },\n});\n\ntype CollapsedHistoryStripProps = {\n onExpand: () => void;\n onNewChat: () => void;\n newChatDisabled?: boolean;\n};\n\nexport const CollapsedHistoryStrip = ({\n onExpand,\n onNewChat,\n newChatDisabled = false,\n}: CollapsedHistoryStripProps) => {\n const { t } = useTranslation();\n\n return (\n <Strip>\n <Tooltip content={t('tooltip.expandHistoryPanel')} position=\"right\">\n <IconButton\n variant=\"plain\"\n onClick={onExpand}\n aria-label={t('tooltip.expandHistoryPanel')}\n >\n <SidebarExpandIcon />\n </IconButton>\n </Tooltip>\n <Tooltip content={t('tooltip.quickNewChat')} position=\"right\">\n <NewChatIconButton\n variant=\"plain\"\n onClick={onNewChat}\n aria-label={t('tooltip.quickNewChat')}\n isDisabled={newChatDisabled}\n >\n <PenIcon />\n </NewChatIconButton>\n </Tooltip>\n </Strip>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAuBA,MAAM,QAAQ,MAAA,CAAO,KAAK,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EAC1C,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,GAAG,CAAA;AAAA,EACtB,WAAA,EAAa,uDAAA;AAAA,EACb,KAAA,EAAO,EAAA;AAAA,EACP,QAAA,EAAU,EAAA;AAAA,EACV,UAAA,EAAY,CAAA;AAAA,EACZ,eAAA,EAAiB,0DAAA;AAAA,EACjB,MAAA,EAAQ;AACV,CAAA,CAAE,CAAA;AAEF,MAAM,UAAA,GAAa,MAAA,CAAO,MAAM,CAAA,CAAE;AAAA,EAChC,OAAA,EAAS,gBAAA;AAAA,EACT,QAAA,EAAU,CAAA;AAAA,EACV,UAAA,EAAY,CAAA;AAAA,EACZ,YAAA,EAAc,gBAAA;AAAA,EACd,MAAA,EAAQ,kEAAA;AAAA,EACR,KAAA,EAAO,2CAAA;AAAA,EACP,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,EAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,oDAAA;AAAA,IACP,eAAA,EACE;AAAA;AAEN,CAAC,CAAA;AAED,MAAM,iBAAA,GAAoB,MAAA,CAAO,MAAM,CAAA,CAAE;AAAA,EACvC,OAAA,EAAS,gBAAA;AAAA,EACT,QAAA,EAAU,CAAA;AAAA,EACV,UAAA,EAAY,CAAA;AAAA,EACZ,YAAA,EAAc,gBAAA;AAAA,EACd,MAAA,EAAQ,kEAAA;AAAA,EACR,KAAA,EAAO,uDAAA;AAAA,EACP,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,qDAAA;AAAA,IACP,eAAA,EACE;AAAA,GACJ;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,KAAA,EAAO;AAAA;AAEX,CAAC,CAAA;AAQM,MAAM,wBAAwB,CAAC;AAAA,EACpC,QAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA,GAAkB;AACpB,CAAA,KAAkC;AAChC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAE7B,EAAA,4BACG,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAQ,OAAA,EAAS,CAAA,CAAE,4BAA4B,CAAA,EAAG,UAAS,OAAA,EAC1D,QAAA,kBAAA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,OAAA,EAAS,QAAA;AAAA,QACT,YAAA,EAAY,EAAE,4BAA4B,CAAA;AAAA,QAE1C,8BAAC,iBAAA,EAAA,EAAkB;AAAA;AAAA,KACrB,EACF,CAAA;AAAA,wBACC,OAAA,EAAA,EAAQ,OAAA,EAAS,EAAE,sBAAsB,CAAA,EAAG,UAAS,OAAA,EACpD,QAAA,kBAAA,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,OAAA,EAAS,SAAA;AAAA,QACT,YAAA,EAAY,EAAE,sBAAsB,CAAA;AAAA,QACpC,UAAA,EAAY,eAAA;AAAA,QAEZ,8BAAC,OAAA,EAAA,EAAQ;AAAA;AAAA,KACX,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1,5 +1,6 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
- import { Divider } from '@material-ui/core';
2
+ import Box from '@mui/material/Box';
3
+ import Divider from '@mui/material/Divider';
3
4
  import { FileDetailsLabel } from '@patternfly/chatbot';
4
5
  import { useFileAttachmentContext } from './AttachmentContext.esm.js';
5
6
 
@@ -30,7 +31,7 @@ const FilePreview = () => {
30
31
  };
31
32
  return /* @__PURE__ */ jsxs(Fragment, { children: [
32
33
  fileContents.length > 0 && /* @__PURE__ */ jsx(Divider, {}),
33
- fileContents && /* @__PURE__ */ jsx("div", { style: { display: "flex", gap: "10px" }, children: fileContents.map((file, index) => /* @__PURE__ */ jsx(
34
+ fileContents && /* @__PURE__ */ jsx(Box, { sx: { display: "flex", gap: "10px" }, children: fileContents.map((file, index) => /* @__PURE__ */ jsx(
34
35
  FileDetailsLabel,
35
36
  {
36
37
  fileName: file.name,
@@ -1 +1 @@
1
- {"version":3,"file":"FilePreview.esm.js","sources":["../../src/components/FilePreview.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 { Divider } from '@material-ui/core';\nimport { FileDetailsLabel } from '@patternfly/chatbot';\n\nimport { useFileAttachmentContext } from './AttachmentContext';\n\nconst FilePreview = () => {\n const {\n fileContents,\n isLoadingFile,\n modalState,\n setFileContents,\n setCurrentFileContent,\n } = useFileAttachmentContext();\n\n const { setIsEditModalOpen, setIsPreviewModalOpen, setPreviewModalKey } =\n modalState;\n\n const onAttachmentClick = (_: React.MouseEvent, name: string) => {\n const file = fileContents?.find(f => f.name === name);\n setCurrentFileContent({\n name,\n type: file?.type ?? 'text/plain',\n content: file?.content ?? '',\n });\n setPreviewModalKey(prev => prev + 1); // update key to re-render content\n setIsEditModalOpen(false);\n setIsPreviewModalOpen(true);\n };\n\n const removeFile = (indexToRemove: number) => {\n setFileContents(prevContents =>\n prevContents.filter((_, index) => index !== indexToRemove),\n );\n };\n\n return (\n <>\n {fileContents.length > 0 && <Divider />}\n {fileContents && (\n <div style={{ display: 'flex', gap: '10px' }}>\n {fileContents.map((file, index) => (\n <FileDetailsLabel\n key={index}\n fileName={file.name}\n isLoading={isLoadingFile[file.name]}\n onClick={onAttachmentClick}\n onClose={() => {\n removeFile(index);\n }}\n />\n ))}\n </div>\n )}\n </>\n );\n};\n\nexport default FilePreview;\n"],"names":[],"mappings":";;;;;AAqBA,MAAM,cAAc,MAAM;AACxB,EAAA,MAAM;AAAA,IACJ,YAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,MACE,wBAAA,EAAyB;AAE7B,EAAA,MAAM,EAAE,kBAAA,EAAoB,qBAAA,EAAuB,kBAAA,EAAmB,GACpE,UAAA;AAEF,EAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,EAAqB,IAAA,KAAiB;AAC/D,IAAA,MAAM,OAAO,YAAA,EAAc,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,IAAI,CAAA;AACpD,IAAA,qBAAA,CAAsB;AAAA,MACpB,IAAA;AAAA,MACA,IAAA,EAAM,MAAM,IAAA,IAAQ,YAAA;AAAA,MACpB,OAAA,EAAS,MAAM,OAAA,IAAW;AAAA,KAC3B,CAAA;AACD,IAAA,kBAAA,CAAmB,CAAA,IAAA,KAAQ,OAAO,CAAC,CAAA;AACnC,IAAA,kBAAA,CAAmB,KAAK,CAAA;AACxB,IAAA,qBAAA,CAAsB,IAAI,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,aAAA,KAA0B;AAC5C,IAAA,eAAA;AAAA,MAAgB,kBACd,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA,EAAG,KAAA,KAAU,UAAU,aAAa;AAAA,KAC3D;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,YAAA,CAAa,MAAA,GAAS,CAAA,oBAAK,GAAA,CAAC,OAAA,EAAA,EAAQ,CAAA;AAAA,IACpC,YAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAO,EACxC,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,MAAM,KAAA,qBACvB,GAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QAEC,UAAU,IAAA,CAAK,IAAA;AAAA,QACf,SAAA,EAAW,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AAAA,QAClC,OAAA,EAAS,iBAAA;AAAA,QACT,SAAS,MAAM;AACb,UAAA,UAAA,CAAW,KAAK,CAAA;AAAA,QAClB;AAAA,OAAA;AAAA,MANK;AAAA,KAQR,CAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"FilePreview.esm.js","sources":["../../src/components/FilePreview.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 Box from '@mui/material/Box';\nimport Divider from '@mui/material/Divider';\nimport { FileDetailsLabel } from '@patternfly/chatbot';\n\nimport { useFileAttachmentContext } from './AttachmentContext';\n\nconst FilePreview = () => {\n const {\n fileContents,\n isLoadingFile,\n modalState,\n setFileContents,\n setCurrentFileContent,\n } = useFileAttachmentContext();\n\n const { setIsEditModalOpen, setIsPreviewModalOpen, setPreviewModalKey } =\n modalState;\n\n const onAttachmentClick = (_: React.MouseEvent, name: string) => {\n const file = fileContents?.find(f => f.name === name);\n setCurrentFileContent({\n name,\n type: file?.type ?? 'text/plain',\n content: file?.content ?? '',\n });\n setPreviewModalKey(prev => prev + 1); // update key to re-render content\n setIsEditModalOpen(false);\n setIsPreviewModalOpen(true);\n };\n\n const removeFile = (indexToRemove: number) => {\n setFileContents(prevContents =>\n prevContents.filter((_, index) => index !== indexToRemove),\n );\n };\n\n return (\n <>\n {fileContents.length > 0 && <Divider />}\n {fileContents && (\n <Box sx={{ display: 'flex', gap: '10px' }}>\n {fileContents.map((file, index) => (\n <FileDetailsLabel\n key={index}\n fileName={file.name}\n isLoading={isLoadingFile[file.name]}\n onClick={onAttachmentClick}\n onClose={() => {\n removeFile(index);\n }}\n />\n ))}\n </Box>\n )}\n </>\n );\n};\n\nexport default FilePreview;\n"],"names":[],"mappings":";;;;;;AAsBA,MAAM,cAAc,MAAM;AACxB,EAAA,MAAM;AAAA,IACJ,YAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,MACE,wBAAA,EAAyB;AAE7B,EAAA,MAAM,EAAE,kBAAA,EAAoB,qBAAA,EAAuB,kBAAA,EAAmB,GACpE,UAAA;AAEF,EAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,EAAqB,IAAA,KAAiB;AAC/D,IAAA,MAAM,OAAO,YAAA,EAAc,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,IAAI,CAAA;AACpD,IAAA,qBAAA,CAAsB;AAAA,MACpB,IAAA;AAAA,MACA,IAAA,EAAM,MAAM,IAAA,IAAQ,YAAA;AAAA,MACpB,OAAA,EAAS,MAAM,OAAA,IAAW;AAAA,KAC3B,CAAA;AACD,IAAA,kBAAA,CAAmB,CAAA,IAAA,KAAQ,OAAO,CAAC,CAAA;AACnC,IAAA,kBAAA,CAAmB,KAAK,CAAA;AACxB,IAAA,qBAAA,CAAsB,IAAI,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,aAAA,KAA0B;AAC5C,IAAA,eAAA;AAAA,MAAgB,kBACd,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA,EAAG,KAAA,KAAU,UAAU,aAAa;AAAA,KAC3D;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,YAAA,CAAa,MAAA,GAAS,CAAA,oBAAK,GAAA,CAAC,OAAA,EAAA,EAAQ,CAAA;AAAA,IACpC,YAAA,oBACC,GAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,EAAE,OAAA,EAAS,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAO,EACrC,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,MAAM,KAAA,qBACvB,GAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QAEC,UAAU,IAAA,CAAK,IAAA;AAAA,QACf,SAAA,EAAW,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AAAA,QAClC,OAAA,EAAS,iBAAA;AAAA,QACT,SAAS,MAAM;AACb,UAAA,UAAA,CAAW,KAAK,CAAA;AAAA,QAClB;AAAA,OAAA;AAAA,MANK;AAAA,KAQR,CAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ;;;;"}