@red-hat-developer-hub/backstage-plugin-intelligent-assistant 5.0.1 → 5.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/dist/alpha.d.ts +1 -2
- package/dist/components/Attachment.esm.js +10 -12
- package/dist/components/Attachment.esm.js.map +1 -1
- package/dist/components/CollapsedHistoryStrip.esm.js +46 -51
- package/dist/components/CollapsedHistoryStrip.esm.js.map +1 -1
- package/dist/components/FilePreview.esm.js +3 -2
- package/dist/components/FilePreview.esm.js.map +1 -1
- package/dist/components/LightSpeedChat.esm.js +580 -745
- package/dist/components/LightSpeedChat.esm.js.map +1 -1
- package/dist/components/LightspeedChatBox.esm.js +2 -3
- package/dist/components/LightspeedChatBox.esm.js.map +1 -1
- package/dist/components/LightspeedChatBoxHeader.esm.js +38 -34
- package/dist/components/LightspeedChatBoxHeader.esm.js.map +1 -1
- package/dist/components/LightspeedChatContainer.esm.js +6 -8
- package/dist/components/LightspeedChatContainer.esm.js.map +1 -1
- package/dist/components/LightspeedChatModelsState.esm.js +67 -73
- package/dist/components/LightspeedChatModelsState.esm.js.map +1 -1
- package/dist/components/LightspeedDrawerContext.esm.js.map +1 -1
- package/dist/components/LightspeedDrawerProvider.esm.js +13 -16
- package/dist/components/LightspeedDrawerProvider.esm.js.map +1 -1
- package/dist/components/LightspeedFABContent.esm.js +40 -9
- package/dist/components/LightspeedFABContent.esm.js.map +1 -1
- package/dist/components/LightspeedPage.esm.js +1 -10
- package/dist/components/LightspeedPage.esm.js.map +1 -1
- package/dist/components/McpConfigureServerModal.esm.js +79 -86
- package/dist/components/McpConfigureServerModal.esm.js.map +1 -1
- package/dist/components/McpServersSettings.esm.js +246 -212
- package/dist/components/McpServersSettings.esm.js.map +1 -1
- package/dist/components/MessageBarModelSelector.esm.js +29 -33
- package/dist/components/MessageBarModelSelector.esm.js.map +1 -1
- package/dist/components/PermissionRequiredState.esm.js +63 -63
- package/dist/components/PermissionRequiredState.esm.js.map +1 -1
- package/dist/components/RenameConversationModal.esm.js +38 -31
- package/dist/components/RenameConversationModal.esm.js.map +1 -1
- package/dist/components/Router.esm.js +4 -13
- package/dist/components/Router.esm.js.map +1 -1
- package/dist/components/ToastAlertGroup.esm.js +24 -40
- package/dist/components/ToastAlertGroup.esm.js.map +1 -1
- package/dist/components/ToolCallContent.esm.js +8 -11
- package/dist/components/ToolCallContent.esm.js.map +1 -1
- package/dist/components/notebooks/AddDocumentModal.esm.js +232 -252
- package/dist/components/notebooks/AddDocumentModal.esm.js.map +1 -1
- package/dist/components/notebooks/DeleteDocumentModal.esm.js +35 -77
- package/dist/components/notebooks/DeleteDocumentModal.esm.js.map +1 -1
- package/dist/components/notebooks/DeleteNotebookModal.esm.js +46 -81
- package/dist/components/notebooks/DeleteNotebookModal.esm.js.map +1 -1
- package/dist/components/notebooks/DocumentSidebar.esm.js +172 -196
- package/dist/components/notebooks/DocumentSidebar.esm.js.map +1 -1
- package/dist/components/notebooks/FileListItem.esm.js +69 -57
- package/dist/components/notebooks/FileListItem.esm.js.map +1 -1
- package/dist/components/notebooks/FileTypeIcon.esm.js +17 -27
- package/dist/components/notebooks/FileTypeIcon.esm.js.map +1 -1
- package/dist/components/notebooks/NotebookCard.esm.js +86 -25
- package/dist/components/notebooks/NotebookCard.esm.js.map +1 -1
- package/dist/components/notebooks/NotebookView.esm.js +367 -380
- package/dist/components/notebooks/NotebookView.esm.js.map +1 -1
- package/dist/components/notebooks/NotebooksTab.esm.js +93 -30
- package/dist/components/notebooks/NotebooksTab.esm.js.map +1 -1
- package/dist/components/notebooks/OverwriteConfirmModal.esm.js +142 -184
- package/dist/components/notebooks/OverwriteConfirmModal.esm.js.map +1 -1
- package/dist/components/notebooks/UploadResourceScreen.esm.js +58 -50
- package/dist/components/notebooks/UploadResourceScreen.esm.js.map +1 -1
- package/dist/components/notebooks/notebookDialogStyles.esm.js +33 -37
- package/dist/components/notebooks/notebookDialogStyles.esm.js.map +1 -1
- package/dist/const.esm.js +15 -2
- package/dist/const.esm.js.map +1 -1
- package/dist/hooks/useAutoScroll.esm.js +11 -11
- package/dist/hooks/useAutoScroll.esm.js.map +1 -1
- package/dist/hooks/useBufferedMessages.esm.js +5 -5
- package/dist/hooks/useBufferedMessages.esm.js.map +1 -1
- package/dist/hooks/useIsMobile.esm.js +3 -3
- package/dist/hooks/useIsMobile.esm.js.map +1 -1
- package/dist/translations/de.esm.js +1 -2
- package/dist/translations/de.esm.js.map +1 -1
- package/dist/translations/es.esm.js +1 -2
- package/dist/translations/es.esm.js.map +1 -1
- package/dist/translations/fr.esm.js +1 -2
- package/dist/translations/fr.esm.js.map +1 -1
- package/dist/translations/it.esm.js +1 -2
- package/dist/translations/it.esm.js.map +1 -1
- package/dist/translations/ja.esm.js +1 -2
- package/dist/translations/ja.esm.js.map +1 -1
- package/dist/translations/ref.esm.js +1 -2
- package/dist/translations/ref.esm.js.map +1 -1
- package/dist/types.esm.js.map +1 -1
- package/dist/utils/fab-anchor-utils.esm.js +41 -0
- package/dist/utils/fab-anchor-utils.esm.js.map +1 -0
- package/dist/utils/scoped-dialog-utils.esm.js +6 -3
- package/dist/utils/scoped-dialog-utils.esm.js.map +1 -1
- package/package.json +4 -8
- package/dist/utils/generateClassName.esm.js +0 -12
- package/dist/utils/generateClassName.esm.js.map +0 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useState, useRef, useCallback } from 'react';
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
3
|
+
import { styled } from '@mui/material/styles';
|
|
4
|
+
import Typography from '@mui/material/Typography';
|
|
5
|
+
import { TextInput, Button, MenuToggle, Dropdown, Tooltip, HelperText, HelperTextItem, Spinner, DropdownList, DropdownItem } from '@patternfly/react-core';
|
|
5
6
|
import { AddCircleOIcon, PenIcon, TrashIcon, EllipsisVIcon } from '@patternfly/react-icons';
|
|
6
7
|
import { NOTEBOOK_MAX_TITLE_LENGTH, NOTEBOOK_MAX_FILES } from '../../const.esm.js';
|
|
7
8
|
import { useInlineEdit } from '../../hooks/notebooks/useInlineEdit.esm.js';
|
|
@@ -9,167 +10,159 @@ import { useTranslation } from '../../hooks/useTranslation.esm.js';
|
|
|
9
10
|
import { FileTypeIcon } from './FileTypeIcon.esm.js';
|
|
10
11
|
import { SidebarCollapseIcon } from './SidebarCollapseIcon.esm.js';
|
|
11
12
|
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
13
|
+
const Sidebar = styled("div")(({ theme }) => ({
|
|
14
|
+
display: "flex",
|
|
15
|
+
flexDirection: "column",
|
|
16
|
+
width: "100%",
|
|
17
|
+
height: "100%",
|
|
18
|
+
padding: theme.spacing(2),
|
|
19
|
+
overflow: "hidden"
|
|
20
|
+
}));
|
|
21
|
+
const TitleRow = styled("div")(({ theme }) => ({
|
|
22
|
+
display: "flex",
|
|
23
|
+
alignItems: "center",
|
|
24
|
+
justifyContent: "space-between",
|
|
25
|
+
marginBottom: theme.spacing(2),
|
|
26
|
+
gap: theme.spacing(1)
|
|
27
|
+
}));
|
|
28
|
+
const NotebookTitle = styled(Typography)({
|
|
29
|
+
fontWeight: 500,
|
|
30
|
+
fontSize: "1.25rem",
|
|
31
|
+
lineHeight: "2rem",
|
|
32
|
+
letterSpacing: "-0.25px",
|
|
33
|
+
overflow: "hidden",
|
|
34
|
+
textOverflow: "ellipsis",
|
|
35
|
+
whiteSpace: "nowrap",
|
|
36
|
+
flex: "0 1 auto",
|
|
37
|
+
minWidth: 0,
|
|
38
|
+
cursor: "pointer",
|
|
39
|
+
borderRadius: 4,
|
|
40
|
+
padding: "2px 6px",
|
|
41
|
+
"&:hover": {
|
|
42
|
+
backgroundColor: "var(--pf-t--global--background--color--action--plain--hover)"
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
const TitleInput = styled(TextInput)({
|
|
46
|
+
flex: 1,
|
|
47
|
+
minWidth: 0,
|
|
48
|
+
"--pf-v6-c-form-control--FontSize": "1.25rem",
|
|
49
|
+
"--pf-v6-c-form-control--LineHeight": "2rem",
|
|
50
|
+
"--pf-v6-c-form-control--before--BorderStyle": "none",
|
|
51
|
+
"& input": {
|
|
29
52
|
fontWeight: 500,
|
|
30
|
-
fontSize: "1.25rem",
|
|
31
|
-
lineHeight: "2rem",
|
|
32
53
|
letterSpacing: "-0.25px",
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
lineHeight: "2rem"
|
|
70
|
-
},
|
|
71
|
-
addButton: {
|
|
72
|
-
textTransform: "none"
|
|
73
|
-
},
|
|
74
|
-
documentsList: {
|
|
75
|
-
marginTop: theme.spacing(2),
|
|
76
|
-
display: "flex",
|
|
77
|
-
flexDirection: "column",
|
|
78
|
-
gap: theme.spacing(0.5),
|
|
79
|
-
overflowY: "auto",
|
|
80
|
-
flex: 1
|
|
81
|
-
},
|
|
82
|
-
documentItem: {
|
|
83
|
-
display: "flex",
|
|
84
|
-
alignItems: "flex-start",
|
|
85
|
-
gap: theme.spacing(1),
|
|
86
|
-
padding: `${theme.spacing(1)}px ${theme.spacing(0.5)}px`,
|
|
87
|
-
borderRadius: 4,
|
|
88
|
-
"&:hover": {
|
|
89
|
-
backgroundColor: "var(--pf-t--global--background--color--action--plain--hover)"
|
|
90
|
-
},
|
|
91
|
-
"&:hover .doc-kebab": {
|
|
92
|
-
visibility: "visible"
|
|
93
|
-
},
|
|
94
|
-
"&:focus-within .doc-kebab": {
|
|
95
|
-
visibility: "visible"
|
|
96
|
-
}
|
|
97
|
-
},
|
|
98
|
-
fileIcon: {
|
|
99
|
-
flexShrink: 0,
|
|
100
|
-
color: theme.palette.grey[500],
|
|
101
|
-
fontSize: "1rem"
|
|
54
|
+
padding: "0 4px",
|
|
55
|
+
outline: "none"
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
const CollapseButton = styled(Button)({
|
|
59
|
+
flexShrink: 0
|
|
60
|
+
});
|
|
61
|
+
const DocumentsRow = styled("div")({
|
|
62
|
+
display: "flex",
|
|
63
|
+
alignItems: "center",
|
|
64
|
+
justifyContent: "space-between"
|
|
65
|
+
});
|
|
66
|
+
const DocumentCount = styled(Typography)({
|
|
67
|
+
fontWeight: 700,
|
|
68
|
+
fontSize: "1.125rem",
|
|
69
|
+
lineHeight: "2rem"
|
|
70
|
+
});
|
|
71
|
+
const AddButton = styled(Button)({
|
|
72
|
+
textTransform: "none"
|
|
73
|
+
});
|
|
74
|
+
const DocumentsList = styled("div")(({ theme }) => ({
|
|
75
|
+
marginTop: theme.spacing(2),
|
|
76
|
+
display: "flex",
|
|
77
|
+
flexDirection: "column",
|
|
78
|
+
gap: theme.spacing(0.5),
|
|
79
|
+
overflowY: "auto",
|
|
80
|
+
flex: 1
|
|
81
|
+
}));
|
|
82
|
+
const DocumentItem = styled("div")(({ theme }) => ({
|
|
83
|
+
display: "flex",
|
|
84
|
+
alignItems: "flex-start",
|
|
85
|
+
gap: theme.spacing(1),
|
|
86
|
+
padding: `${theme.spacing(1)} ${theme.spacing(0.5)}`,
|
|
87
|
+
borderRadius: 4,
|
|
88
|
+
"&:hover": {
|
|
89
|
+
backgroundColor: "var(--pf-t--global--background--color--action--plain--hover)"
|
|
102
90
|
},
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
minWidth: 0,
|
|
106
|
-
overflow: "hidden",
|
|
107
|
-
textOverflow: "ellipsis",
|
|
108
|
-
whiteSpace: "nowrap",
|
|
109
|
-
fontSize: "0.875rem",
|
|
110
|
-
lineHeight: "1.25rem",
|
|
111
|
-
cursor: "pointer",
|
|
112
|
-
borderRadius: 4,
|
|
113
|
-
padding: "2px 6px",
|
|
114
|
-
"&:hover": {
|
|
115
|
-
backgroundColor: "var(--pf-t--global--background--color--action--plain--hover)"
|
|
116
|
-
}
|
|
91
|
+
"&:hover .doc-kebab": {
|
|
92
|
+
visibility: "visible"
|
|
117
93
|
},
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
94
|
+
"&:focus-within .doc-kebab": {
|
|
95
|
+
visibility: "visible"
|
|
96
|
+
}
|
|
97
|
+
}));
|
|
98
|
+
const FileName = styled(Typography)({
|
|
99
|
+
flex: 1,
|
|
100
|
+
minWidth: 0,
|
|
101
|
+
overflow: "hidden",
|
|
102
|
+
textOverflow: "ellipsis",
|
|
103
|
+
whiteSpace: "nowrap",
|
|
104
|
+
fontSize: "0.875rem",
|
|
105
|
+
lineHeight: "1.25rem",
|
|
106
|
+
cursor: "pointer",
|
|
107
|
+
borderRadius: 4,
|
|
108
|
+
padding: "2px 6px",
|
|
109
|
+
"&:hover": {
|
|
110
|
+
backgroundColor: "var(--pf-t--global--background--color--action--plain--hover)"
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
const RenameContainer = styled("div")({
|
|
114
|
+
display: "flex",
|
|
115
|
+
alignItems: "center",
|
|
116
|
+
flexWrap: "wrap",
|
|
117
|
+
flex: 1,
|
|
118
|
+
minWidth: 0
|
|
119
|
+
});
|
|
120
|
+
const RenameInput = styled(TextInput)({
|
|
121
|
+
flex: 1,
|
|
122
|
+
minWidth: 0,
|
|
123
|
+
alignItems: "center",
|
|
124
|
+
"--pf-v6-c-form-control--m-error--after--BorderWidth": "2px",
|
|
125
|
+
"--pf-v6-c-form-control--FontSize": "0.875rem",
|
|
126
|
+
"--pf-v6-c-form-control--LineHeight": "1.25rem",
|
|
127
|
+
"& input": {
|
|
128
|
+
padding: "2px 4px",
|
|
129
|
+
outline: "none"
|
|
124
130
|
},
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
minWidth: 0,
|
|
131
|
+
"& .pf-v6-c-form-control__utilities": {
|
|
132
|
+
alignSelf: "center",
|
|
128
133
|
alignItems: "center",
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
"--pf-v6-c-form-control--LineHeight": "1.25rem",
|
|
132
|
-
"& input": {
|
|
133
|
-
padding: "2px 4px",
|
|
134
|
-
outline: "none"
|
|
135
|
-
},
|
|
136
|
-
// Override PF6 asymmetric padding to center the error icon vertically
|
|
137
|
-
"& .pf-v6-c-form-control__utilities": {
|
|
138
|
-
alignSelf: "center",
|
|
139
|
-
alignItems: "center",
|
|
140
|
-
paddingTop: 0,
|
|
141
|
-
paddingBottom: 0
|
|
142
|
-
}
|
|
143
|
-
},
|
|
144
|
-
renameExtension: {
|
|
145
|
-
flexShrink: 0,
|
|
146
|
-
fontSize: "0.875rem",
|
|
147
|
-
lineHeight: "1.25rem",
|
|
148
|
-
whiteSpace: "nowrap"
|
|
149
|
-
},
|
|
150
|
-
renameHelperText: {
|
|
151
|
-
width: "100%",
|
|
152
|
-
paddingTop: 4,
|
|
153
|
-
"& .pf-v6-c-helper-text__item-text": {
|
|
154
|
-
color: "var(--pf-t--global--color--status--danger--default)"
|
|
155
|
-
}
|
|
156
|
-
},
|
|
157
|
-
spinnerContainer: {
|
|
158
|
-
flexShrink: 0
|
|
159
|
-
},
|
|
160
|
-
kebabToggle: {
|
|
161
|
-
padding: 0,
|
|
162
|
-
flexShrink: 0,
|
|
163
|
-
visibility: "hidden"
|
|
164
|
-
},
|
|
165
|
-
kebabDropdownMenu: {
|
|
166
|
-
"& .pf-v6-c-menu__list": {
|
|
167
|
-
paddingInlineStart: 0,
|
|
168
|
-
marginBlockStart: 0,
|
|
169
|
-
marginBlockEnd: 0
|
|
170
|
-
}
|
|
134
|
+
paddingTop: 0,
|
|
135
|
+
paddingBottom: 0
|
|
171
136
|
}
|
|
172
|
-
})
|
|
137
|
+
});
|
|
138
|
+
const RenameExtension = styled(Typography)({
|
|
139
|
+
flexShrink: 0,
|
|
140
|
+
fontSize: "0.875rem",
|
|
141
|
+
lineHeight: "1.25rem",
|
|
142
|
+
whiteSpace: "nowrap"
|
|
143
|
+
});
|
|
144
|
+
const RenameHelperText = styled("div")({
|
|
145
|
+
width: "100%",
|
|
146
|
+
paddingTop: 4,
|
|
147
|
+
"& .pf-v6-c-helper-text__item-text": {
|
|
148
|
+
color: "var(--pf-t--global--color--status--danger--default)"
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
const SpinnerContainer = styled("div")({
|
|
152
|
+
flexShrink: 0
|
|
153
|
+
});
|
|
154
|
+
const KebabToggle = styled(MenuToggle)({
|
|
155
|
+
padding: 0,
|
|
156
|
+
flexShrink: 0,
|
|
157
|
+
visibility: "hidden"
|
|
158
|
+
});
|
|
159
|
+
const KebabDropdown = styled(Dropdown)({
|
|
160
|
+
"& .pf-v6-c-menu__list": {
|
|
161
|
+
paddingInlineStart: 0,
|
|
162
|
+
marginBlockStart: 0,
|
|
163
|
+
marginBlockEnd: 0
|
|
164
|
+
}
|
|
165
|
+
});
|
|
173
166
|
const splitFileName = (fileName) => {
|
|
174
167
|
if (!fileName) return { baseName: "", extension: "" };
|
|
175
168
|
const lastDot = fileName.lastIndexOf(".");
|
|
@@ -193,7 +186,6 @@ const DocumentSidebar = ({
|
|
|
193
186
|
onRenameDocument,
|
|
194
187
|
onRenameNotebook
|
|
195
188
|
}) => {
|
|
196
|
-
const classes = useStyles();
|
|
197
189
|
const { t } = useTranslation();
|
|
198
190
|
const [openMenuDocId, setOpenMenuDocId] = useState(null);
|
|
199
191
|
const [editingDocId, setEditingDocId] = useState(null);
|
|
@@ -285,13 +277,12 @@ const DocumentSidebar = ({
|
|
|
285
277
|
);
|
|
286
278
|
const totalCount = documents.length + activePending.length;
|
|
287
279
|
const isAddDisabled = totalCount >= NOTEBOOK_MAX_FILES;
|
|
288
|
-
return /* @__PURE__ */ jsxs(
|
|
289
|
-
/* @__PURE__ */ jsxs(
|
|
280
|
+
return /* @__PURE__ */ jsxs(Sidebar, { children: [
|
|
281
|
+
/* @__PURE__ */ jsxs(TitleRow, { children: [
|
|
290
282
|
isEditingTitle ? /* @__PURE__ */ jsx(
|
|
291
|
-
|
|
283
|
+
TitleInput,
|
|
292
284
|
{
|
|
293
285
|
ref: titleInputRef,
|
|
294
|
-
className: classes.titleInput,
|
|
295
286
|
value: editTitle,
|
|
296
287
|
onChange: (_event, value) => setEditTitle(value),
|
|
297
288
|
onBlur: saveTitle,
|
|
@@ -299,27 +290,25 @@ const DocumentSidebar = ({
|
|
|
299
290
|
"aria-label": t("notebooks.rename.inline.tooltip")
|
|
300
291
|
}
|
|
301
292
|
) : /* @__PURE__ */ jsx(
|
|
302
|
-
|
|
293
|
+
NotebookTitle,
|
|
303
294
|
{
|
|
304
|
-
className: classes.title,
|
|
305
295
|
title: t("notebooks.rename.inline.tooltip"),
|
|
306
296
|
onClick: startEditingTitle,
|
|
307
297
|
children: notebookName
|
|
308
298
|
}
|
|
309
299
|
),
|
|
310
300
|
/* @__PURE__ */ jsx(Tooltip, { content: t("notebook.view.sidebar.collapse"), position: "right", children: /* @__PURE__ */ jsx(
|
|
311
|
-
|
|
301
|
+
CollapseButton,
|
|
312
302
|
{
|
|
313
303
|
variant: "plain",
|
|
314
|
-
className: classes.collapseButton,
|
|
315
304
|
onClick: onToggleCollapse,
|
|
316
305
|
"aria-label": t("notebook.view.sidebar.collapse"),
|
|
317
306
|
children: /* @__PURE__ */ jsx(SidebarCollapseIcon, {})
|
|
318
307
|
}
|
|
319
308
|
) })
|
|
320
309
|
] }),
|
|
321
|
-
/* @__PURE__ */ jsxs(
|
|
322
|
-
/* @__PURE__ */ jsx(
|
|
310
|
+
/* @__PURE__ */ jsxs(DocumentsRow, { children: [
|
|
311
|
+
/* @__PURE__ */ jsx(DocumentCount, { children: t("notebook.view.documents.count", {
|
|
323
312
|
count: totalCount
|
|
324
313
|
}) }),
|
|
325
314
|
isAddDisabled ? /* @__PURE__ */ jsx(
|
|
@@ -327,42 +316,31 @@ const DocumentSidebar = ({
|
|
|
327
316
|
{
|
|
328
317
|
content: hasUploadsInProgress ? t("notebook.view.documents.uploadsInProgress") : t("notebook.view.documents.maxReached"),
|
|
329
318
|
position: "top",
|
|
330
|
-
children: /* @__PURE__ */ jsx(Typography, { component: "div", children: /* @__PURE__ */ jsx(
|
|
331
|
-
Button,
|
|
332
|
-
{
|
|
333
|
-
variant: "link",
|
|
334
|
-
className: classes.addButton,
|
|
335
|
-
icon: /* @__PURE__ */ jsx(AddCircleOIcon, {}),
|
|
336
|
-
isDisabled: true,
|
|
337
|
-
children: t("notebook.view.documents.add")
|
|
338
|
-
}
|
|
339
|
-
) })
|
|
319
|
+
children: /* @__PURE__ */ jsx(Typography, { component: "div", children: /* @__PURE__ */ jsx(AddButton, { variant: "link", icon: /* @__PURE__ */ jsx(AddCircleOIcon, {}), isDisabled: true, children: t("notebook.view.documents.add") }) })
|
|
340
320
|
}
|
|
341
321
|
) : /* @__PURE__ */ jsx(
|
|
342
|
-
|
|
322
|
+
AddButton,
|
|
343
323
|
{
|
|
344
324
|
variant: "link",
|
|
345
|
-
className: classes.addButton,
|
|
346
325
|
icon: /* @__PURE__ */ jsx(AddCircleOIcon, {}),
|
|
347
326
|
onClick: onAddDocument,
|
|
348
327
|
children: t("notebook.view.documents.add")
|
|
349
328
|
}
|
|
350
329
|
)
|
|
351
330
|
] }),
|
|
352
|
-
(documents.length > 0 || activePending.length > 0) && /* @__PURE__ */ jsxs(
|
|
353
|
-
documents.map((doc) => /* @__PURE__ */ jsxs(
|
|
331
|
+
(documents.length > 0 || activePending.length > 0) && /* @__PURE__ */ jsxs(DocumentsList, { children: [
|
|
332
|
+
documents.map((doc) => /* @__PURE__ */ jsxs(DocumentItem, { children: [
|
|
354
333
|
/* @__PURE__ */ jsx(FileTypeIcon, { fileName: doc.title }),
|
|
355
334
|
editingDocId === doc.document_id ? (() => {
|
|
356
335
|
const validationError = getValidationError(
|
|
357
336
|
doc.document_id,
|
|
358
337
|
doc.title
|
|
359
338
|
);
|
|
360
|
-
return /* @__PURE__ */ jsxs(
|
|
339
|
+
return /* @__PURE__ */ jsxs(RenameContainer, { children: [
|
|
361
340
|
/* @__PURE__ */ jsx(
|
|
362
|
-
|
|
341
|
+
RenameInput,
|
|
363
342
|
{
|
|
364
343
|
ref: inputRef,
|
|
365
|
-
className: classes.renameInput,
|
|
366
344
|
value: editName,
|
|
367
345
|
onChange: (_event, value) => setEditName(value),
|
|
368
346
|
onBlur: () => saveRename(doc.document_id, doc.title),
|
|
@@ -371,28 +349,26 @@ const DocumentSidebar = ({
|
|
|
371
349
|
"aria-label": t("notebook.document.rename")
|
|
372
350
|
}
|
|
373
351
|
),
|
|
374
|
-
/* @__PURE__ */ jsx(
|
|
375
|
-
validationError && /* @__PURE__ */ jsx(
|
|
352
|
+
/* @__PURE__ */ jsx(RenameExtension, { children: splitFileName(doc.title).extension }),
|
|
353
|
+
validationError && /* @__PURE__ */ jsx(RenameHelperText, { children: /* @__PURE__ */ jsx(HelperText, { children: /* @__PURE__ */ jsx(HelperTextItem, { variant: "error", children: validationError }) }) })
|
|
376
354
|
] });
|
|
377
355
|
})() : /* @__PURE__ */ jsx(
|
|
378
|
-
|
|
356
|
+
FileName,
|
|
379
357
|
{
|
|
380
|
-
className: classes.fileName,
|
|
381
358
|
title: t("notebook.document.rename.tooltip"),
|
|
382
359
|
onClick: () => startEditing(doc.document_id, doc.title),
|
|
383
360
|
children: doc.title
|
|
384
361
|
}
|
|
385
362
|
),
|
|
386
|
-
deletingDocumentIds?.has(doc.document_id) ? /* @__PURE__ */ jsx(
|
|
363
|
+
deletingDocumentIds?.has(doc.document_id) ? /* @__PURE__ */ jsx(SpinnerContainer, { children: /* @__PURE__ */ jsx(
|
|
387
364
|
Spinner,
|
|
388
365
|
{
|
|
389
366
|
size: "md",
|
|
390
367
|
"aria-label": t("notebook.document.delete")
|
|
391
368
|
}
|
|
392
369
|
) }) : /* @__PURE__ */ jsx(
|
|
393
|
-
|
|
370
|
+
KebabDropdown,
|
|
394
371
|
{
|
|
395
|
-
className: classes.kebabDropdownMenu,
|
|
396
372
|
isOpen: openMenuDocId === doc.document_id,
|
|
397
373
|
popperProps: {
|
|
398
374
|
position: "end",
|
|
@@ -400,11 +376,11 @@ const DocumentSidebar = ({
|
|
|
400
376
|
},
|
|
401
377
|
onOpenChange: (isOpen) => setOpenMenuDocId(isOpen ? doc.document_id : null),
|
|
402
378
|
toggle: (toggleRef) => /* @__PURE__ */ jsx(
|
|
403
|
-
|
|
379
|
+
KebabToggle,
|
|
404
380
|
{
|
|
405
381
|
ref: toggleRef,
|
|
406
382
|
variant: "plain",
|
|
407
|
-
className:
|
|
383
|
+
className: "doc-kebab",
|
|
408
384
|
style: openMenuDocId === doc.document_id ? { visibility: "visible" } : void 0,
|
|
409
385
|
isExpanded: openMenuDocId === doc.document_id,
|
|
410
386
|
onClick: (event) => {
|
|
@@ -447,10 +423,10 @@ const DocumentSidebar = ({
|
|
|
447
423
|
}
|
|
448
424
|
)
|
|
449
425
|
] }, doc.document_id)),
|
|
450
|
-
activePending.map((fileName) => /* @__PURE__ */ jsxs(
|
|
426
|
+
activePending.map((fileName) => /* @__PURE__ */ jsxs(DocumentItem, { children: [
|
|
451
427
|
/* @__PURE__ */ jsx(FileTypeIcon, { fileName }),
|
|
452
|
-
/* @__PURE__ */ jsx(
|
|
453
|
-
!completedFileNames?.has(fileName) && /* @__PURE__ */ jsx(
|
|
428
|
+
/* @__PURE__ */ jsx(FileName, { children: fileName }),
|
|
429
|
+
!completedFileNames?.has(fileName) && /* @__PURE__ */ jsx(SpinnerContainer, { children: /* @__PURE__ */ jsx(
|
|
454
430
|
Spinner,
|
|
455
431
|
{
|
|
456
432
|
size: "md",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentSidebar.esm.js","sources":["../../../src/components/notebooks/DocumentSidebar.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, useRef, useState } from 'react';\n\nimport { makeStyles, Typography } from '@material-ui/core';\nimport {\n Button,\n Dropdown,\n DropdownItem,\n DropdownList,\n HelperText,\n HelperTextItem,\n MenuToggle,\n Spinner,\n TextInput,\n Tooltip,\n} from '@patternfly/react-core';\nimport {\n AddCircleOIcon,\n EllipsisVIcon,\n PenIcon,\n TrashIcon,\n} from '@patternfly/react-icons';\n\nimport { NOTEBOOK_MAX_FILES, NOTEBOOK_MAX_TITLE_LENGTH } from '../../const';\nimport { useInlineEdit } from '../../hooks/notebooks/useInlineEdit';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { SessionDocument } from '../../types';\nimport { FileTypeIcon } from './FileTypeIcon';\nimport { SidebarCollapseIcon } from './SidebarCollapseIcon';\n\nconst useStyles = makeStyles(theme => ({\n sidebar: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n padding: theme.spacing(2),\n overflow: 'hidden',\n },\n titleRow: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: theme.spacing(2),\n gap: theme.spacing(1),\n },\n title: {\n fontWeight: 500,\n fontSize: '1.25rem',\n lineHeight: '2rem',\n letterSpacing: '-0.25px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n flex: '0 1 auto',\n minWidth: 0,\n cursor: 'pointer',\n borderRadius: 4,\n padding: '2px 6px',\n '&:hover': {\n backgroundColor:\n 'var(--pf-t--global--background--color--action--plain--hover)',\n },\n },\n titleInput: {\n flex: 1,\n minWidth: 0,\n '--pf-v6-c-form-control--FontSize': '1.25rem',\n '--pf-v6-c-form-control--LineHeight': '2rem',\n '--pf-v6-c-form-control--before--BorderStyle': 'none',\n '& input': {\n fontWeight: 500,\n letterSpacing: '-0.25px',\n padding: '0 4px',\n outline: 'none',\n },\n },\n collapseButton: {\n flexShrink: 0,\n },\n documentsRow: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n documentCount: {\n fontWeight: 700,\n fontSize: '1.125rem',\n lineHeight: '2rem',\n },\n addButton: {\n textTransform: 'none',\n },\n documentsList: {\n marginTop: theme.spacing(2),\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.5),\n overflowY: 'auto',\n flex: 1,\n },\n documentItem: {\n display: 'flex',\n alignItems: 'flex-start',\n gap: theme.spacing(1),\n padding: `${theme.spacing(1)}px ${theme.spacing(0.5)}px`,\n borderRadius: 4,\n '&:hover': {\n backgroundColor:\n 'var(--pf-t--global--background--color--action--plain--hover)',\n },\n '&:hover .doc-kebab': {\n visibility: 'visible',\n },\n '&:focus-within .doc-kebab': {\n visibility: 'visible',\n },\n },\n fileIcon: {\n flexShrink: 0,\n color: theme.palette.grey[500],\n fontSize: '1rem',\n },\n fileName: {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontSize: '0.875rem',\n lineHeight: '1.25rem',\n cursor: 'pointer',\n borderRadius: 4,\n padding: '2px 6px',\n '&:hover': {\n backgroundColor:\n 'var(--pf-t--global--background--color--action--plain--hover)',\n },\n },\n renameContainer: {\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap' as const,\n flex: 1,\n minWidth: 0,\n },\n renameInput: {\n flex: 1,\n minWidth: 0,\n alignItems: 'center',\n '--pf-v6-c-form-control--m-error--after--BorderWidth': '2px',\n '--pf-v6-c-form-control--FontSize': '0.875rem',\n '--pf-v6-c-form-control--LineHeight': '1.25rem',\n '& input': {\n padding: '2px 4px',\n outline: 'none',\n },\n // Override PF6 asymmetric padding to center the error icon vertically\n '& .pf-v6-c-form-control__utilities': {\n alignSelf: 'center',\n alignItems: 'center',\n paddingTop: 0,\n paddingBottom: 0,\n },\n },\n renameExtension: {\n flexShrink: 0,\n fontSize: '0.875rem',\n lineHeight: '1.25rem',\n whiteSpace: 'nowrap',\n },\n renameHelperText: {\n width: '100%',\n paddingTop: 4,\n '& .pf-v6-c-helper-text__item-text': {\n color: 'var(--pf-t--global--color--status--danger--default)',\n },\n },\n spinnerContainer: {\n flexShrink: 0,\n },\n kebabToggle: {\n padding: 0,\n flexShrink: 0,\n visibility: 'hidden' as const,\n },\n kebabDropdownMenu: {\n '& .pf-v6-c-menu__list': {\n paddingInlineStart: 0,\n marginBlockStart: 0,\n marginBlockEnd: 0,\n },\n },\n}));\n\nconst splitFileName = (\n fileName: string,\n): { baseName: string; extension: string } => {\n if (!fileName) return { baseName: '', extension: '' };\n const lastDot = fileName.lastIndexOf('.');\n if (lastDot <= 0) return { baseName: fileName, extension: '' };\n return {\n baseName: fileName.slice(0, lastDot),\n extension: fileName.slice(lastDot),\n };\n};\n\ntype DocumentSidebarProps = {\n notebookName: string;\n documents: SessionDocument[];\n uploadingFileNames: string[];\n completedFileNames?: Set<string>;\n deletingDocumentIds?: Set<string>;\n collapsed: boolean;\n hasUploadsInProgress?: boolean;\n onToggleCollapse: () => void;\n onAddDocument: () => void;\n onDeleteDocument?: (documentId: string) => void;\n onRenameDocument?: (documentId: string, newTitle: string) => void;\n onRenameNotebook?: (newName: string) => void;\n};\n\nexport const DocumentSidebar = ({\n notebookName,\n documents,\n uploadingFileNames,\n completedFileNames,\n deletingDocumentIds,\n collapsed,\n hasUploadsInProgress,\n onToggleCollapse,\n onAddDocument,\n onDeleteDocument,\n onRenameDocument,\n onRenameNotebook,\n}: DocumentSidebarProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const [openMenuDocId, setOpenMenuDocId] = useState<string | null>(null);\n const [editingDocId, setEditingDocId] = useState<string | null>(null);\n const [editName, setEditName] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n\n const startEditing = useCallback((docId: string, currentTitle: string) => {\n const { baseName } = splitFileName(currentTitle);\n setEditingDocId(docId);\n setEditName(baseName);\n setOpenMenuDocId(null);\n setTimeout(() => {\n inputRef.current?.focus();\n inputRef.current?.select();\n }, 0);\n }, []);\n\n const cancelEditing = useCallback(() => {\n setEditingDocId(null);\n setEditName('');\n }, []);\n\n const getValidationError = useCallback(\n (docId: string, originalTitle: string): string | null => {\n const trimmedBase = editName.trim();\n if (!trimmedBase) return null;\n const { baseName, extension } = splitFileName(originalTitle);\n if (trimmedBase === baseName) return null;\n const newFullName = trimmedBase + extension;\n if (newFullName.length > NOTEBOOK_MAX_TITLE_LENGTH) {\n return t('notebook.document.rename.tooLong');\n }\n const conflict = documents.some(\n d => d.document_id !== docId && d.title === newFullName,\n );\n return conflict ? t('notebook.document.rename.conflict') : null;\n },\n [editName, documents, t],\n );\n\n const saveRename = useCallback(\n (docId: string, originalTitle: string) => {\n const trimmedBase = editName.trim();\n const { baseName, extension } = splitFileName(originalTitle);\n if (!trimmedBase || trimmedBase === baseName) {\n cancelEditing();\n return;\n }\n const newFullName = trimmedBase + extension;\n if (newFullName.length > NOTEBOOK_MAX_TITLE_LENGTH) {\n cancelEditing();\n return;\n }\n if (\n documents.some(d => d.document_id !== docId && d.title === newFullName)\n ) {\n cancelEditing();\n return;\n }\n onRenameDocument?.(docId, newFullName);\n cancelEditing();\n },\n [editName, documents, onRenameDocument, cancelEditing],\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent, docId: string, originalTitle: string) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n saveRename(docId, originalTitle);\n } else if (event.key === 'Escape') {\n event.preventDefault();\n cancelEditing();\n }\n },\n [saveRename, cancelEditing],\n );\n\n const {\n isEditing: isEditingTitle,\n editValue: editTitle,\n setEditValue: setEditTitle,\n inputRef: titleInputRef,\n startEditing: startEditingTitle,\n save: saveTitle,\n handleKeyDown: handleTitleKeyDown,\n } = useInlineEdit({\n currentName: notebookName,\n onSave: newName => onRenameNotebook?.(newName),\n });\n\n if (collapsed) {\n return null;\n }\n\n const uploadedNames = new Set(documents.map(d => d.title));\n const activePending = uploadingFileNames.filter(\n name => !uploadedNames.has(name),\n );\n const totalCount = documents.length + activePending.length;\n const isAddDisabled = totalCount >= NOTEBOOK_MAX_FILES;\n\n return (\n <div className={classes.sidebar}>\n <div className={classes.titleRow}>\n {isEditingTitle ? (\n <TextInput\n ref={titleInputRef}\n className={classes.titleInput}\n value={editTitle}\n onChange={(_event, value) => setEditTitle(value)}\n onBlur={saveTitle}\n onKeyDown={handleTitleKeyDown}\n aria-label={t('notebooks.rename.inline.tooltip')}\n />\n ) : (\n <Typography\n className={classes.title}\n title={t('notebooks.rename.inline.tooltip')}\n onClick={startEditingTitle}\n >\n {notebookName}\n </Typography>\n )}\n <Tooltip content={t('notebook.view.sidebar.collapse')} position=\"right\">\n <Button\n variant=\"plain\"\n className={classes.collapseButton}\n onClick={onToggleCollapse}\n aria-label={t('notebook.view.sidebar.collapse')}\n >\n <SidebarCollapseIcon />\n </Button>\n </Tooltip>\n </div>\n\n <div className={classes.documentsRow}>\n <Typography className={classes.documentCount}>\n {(t as Function)('notebook.view.documents.count', {\n count: totalCount,\n })}\n </Typography>\n {isAddDisabled ? (\n <Tooltip\n content={\n hasUploadsInProgress\n ? t('notebook.view.documents.uploadsInProgress')\n : t('notebook.view.documents.maxReached')\n }\n position=\"top\"\n >\n <Typography component=\"div\">\n <Button\n variant=\"link\"\n className={classes.addButton}\n icon={<AddCircleOIcon />}\n isDisabled\n >\n {t('notebook.view.documents.add')}\n </Button>\n </Typography>\n </Tooltip>\n ) : (\n <Button\n variant=\"link\"\n className={classes.addButton}\n icon={<AddCircleOIcon />}\n onClick={onAddDocument}\n >\n {t('notebook.view.documents.add')}\n </Button>\n )}\n </div>\n\n {(documents.length > 0 || activePending.length > 0) && (\n <div className={classes.documentsList}>\n {documents.map(doc => (\n <div key={doc.document_id} className={classes.documentItem}>\n <FileTypeIcon fileName={doc.title} />\n {editingDocId === doc.document_id ? (\n (() => {\n const validationError = getValidationError(\n doc.document_id,\n doc.title,\n );\n return (\n <div className={classes.renameContainer}>\n <TextInput\n ref={inputRef}\n className={classes.renameInput}\n value={editName}\n onChange={(_event, value) => setEditName(value)}\n onBlur={() => saveRename(doc.document_id, doc.title)}\n onKeyDown={event =>\n handleKeyDown(event, doc.document_id, doc.title)\n }\n validated={validationError ? 'error' : 'default'}\n aria-label={t('notebook.document.rename')}\n />\n <Typography className={classes.renameExtension}>\n {splitFileName(doc.title).extension}\n </Typography>\n {validationError && (\n <div className={classes.renameHelperText}>\n <HelperText>\n <HelperTextItem variant=\"error\">\n {validationError}\n </HelperTextItem>\n </HelperText>\n </div>\n )}\n </div>\n );\n })()\n ) : (\n <Typography\n className={classes.fileName}\n title={t('notebook.document.rename.tooltip')}\n onClick={() => startEditing(doc.document_id, doc.title)}\n >\n {doc.title}\n </Typography>\n )}\n {deletingDocumentIds?.has(doc.document_id) ? (\n <div className={classes.spinnerContainer}>\n <Spinner\n size=\"md\"\n aria-label={t('notebook.document.delete')}\n />\n </div>\n ) : (\n <Dropdown\n className={classes.kebabDropdownMenu}\n isOpen={openMenuDocId === doc.document_id}\n popperProps={{\n position: 'end',\n preventOverflow: true,\n }}\n onOpenChange={isOpen =>\n setOpenMenuDocId(isOpen ? doc.document_id : null)\n }\n toggle={toggleRef => (\n <MenuToggle\n ref={toggleRef}\n variant=\"plain\"\n className={`${classes.kebabToggle} doc-kebab`}\n style={\n openMenuDocId === doc.document_id\n ? { visibility: 'visible' }\n : undefined\n }\n isExpanded={openMenuDocId === doc.document_id}\n onClick={event => {\n event.stopPropagation();\n setOpenMenuDocId(current =>\n current === doc.document_id ? null : doc.document_id,\n );\n }}\n aria-label={`${t('aria.options.label')} ${doc.title}`}\n >\n <EllipsisVIcon />\n </MenuToggle>\n )}\n >\n <DropdownList>\n <DropdownItem\n key=\"rename\"\n icon={<PenIcon />}\n onClick={event => {\n event.stopPropagation();\n startEditing(doc.document_id, doc.title);\n }}\n >\n {t('notebook.document.rename')}\n </DropdownItem>\n <DropdownItem\n key=\"delete\"\n icon={<TrashIcon />}\n onClick={event => {\n event.stopPropagation();\n setOpenMenuDocId(null);\n onDeleteDocument?.(doc.document_id);\n }}\n >\n {t('notebook.document.delete')}\n </DropdownItem>\n </DropdownList>\n </Dropdown>\n )}\n </div>\n ))}\n {activePending.map(fileName => (\n <div key={`pending-${fileName}`} className={classes.documentItem}>\n <FileTypeIcon fileName={fileName} />\n <Typography className={classes.fileName}>{fileName}</Typography>\n {!completedFileNames?.has(fileName) && (\n <div className={classes.spinnerContainer}>\n <Spinner\n size=\"md\"\n aria-label={t('notebook.view.documents.uploading')}\n />\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DocumentSidebar.esm.js","sources":["../../../src/components/notebooks/DocumentSidebar.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, useRef, useState } from 'react';\n\nimport { styled } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\nimport {\n Button,\n Dropdown,\n DropdownItem,\n DropdownList,\n HelperText,\n HelperTextItem,\n MenuToggle,\n Spinner,\n TextInput,\n Tooltip,\n} from '@patternfly/react-core';\nimport {\n AddCircleOIcon,\n EllipsisVIcon,\n PenIcon,\n TrashIcon,\n} from '@patternfly/react-icons';\n\nimport { NOTEBOOK_MAX_FILES, NOTEBOOK_MAX_TITLE_LENGTH } from '../../const';\nimport { useInlineEdit } from '../../hooks/notebooks/useInlineEdit';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { SessionDocument } from '../../types';\nimport { FileTypeIcon } from './FileTypeIcon';\nimport { SidebarCollapseIcon } from './SidebarCollapseIcon';\n\nconst Sidebar = styled('div')(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n padding: theme.spacing(2),\n overflow: 'hidden',\n}));\n\nconst TitleRow = styled('div')(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: theme.spacing(2),\n gap: theme.spacing(1),\n}));\n\nconst NotebookTitle = styled(Typography)({\n fontWeight: 500,\n fontSize: '1.25rem',\n lineHeight: '2rem',\n letterSpacing: '-0.25px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n flex: '0 1 auto',\n minWidth: 0,\n cursor: 'pointer',\n borderRadius: 4,\n padding: '2px 6px',\n '&:hover': {\n backgroundColor:\n 'var(--pf-t--global--background--color--action--plain--hover)',\n },\n});\n\nconst TitleInput = styled(TextInput)({\n flex: 1,\n minWidth: 0,\n '--pf-v6-c-form-control--FontSize': '1.25rem',\n '--pf-v6-c-form-control--LineHeight': '2rem',\n '--pf-v6-c-form-control--before--BorderStyle': 'none',\n '& input': {\n fontWeight: 500,\n letterSpacing: '-0.25px',\n padding: '0 4px',\n outline: 'none',\n },\n});\n\nconst CollapseButton = styled(Button)({\n flexShrink: 0,\n});\n\nconst DocumentsRow = styled('div')({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n});\n\nconst DocumentCount = styled(Typography)({\n fontWeight: 700,\n fontSize: '1.125rem',\n lineHeight: '2rem',\n});\n\nconst AddButton = styled(Button)({\n textTransform: 'none',\n});\n\nconst DocumentsList = styled('div')(({ theme }) => ({\n marginTop: theme.spacing(2),\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.5),\n overflowY: 'auto',\n flex: 1,\n}));\n\nconst DocumentItem = styled('div')(({ theme }) => ({\n display: 'flex',\n alignItems: 'flex-start',\n gap: theme.spacing(1),\n padding: `${theme.spacing(1)} ${theme.spacing(0.5)}`,\n borderRadius: 4,\n '&:hover': {\n backgroundColor:\n 'var(--pf-t--global--background--color--action--plain--hover)',\n },\n '&:hover .doc-kebab': {\n visibility: 'visible',\n },\n '&:focus-within .doc-kebab': {\n visibility: 'visible',\n },\n}));\n\nconst FileName = styled(Typography)({\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontSize: '0.875rem',\n lineHeight: '1.25rem',\n cursor: 'pointer',\n borderRadius: 4,\n padding: '2px 6px',\n '&:hover': {\n backgroundColor:\n 'var(--pf-t--global--background--color--action--plain--hover)',\n },\n});\n\nconst RenameContainer = styled('div')({\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n flex: 1,\n minWidth: 0,\n});\n\nconst RenameInput = styled(TextInput)({\n flex: 1,\n minWidth: 0,\n alignItems: 'center',\n '--pf-v6-c-form-control--m-error--after--BorderWidth': '2px',\n '--pf-v6-c-form-control--FontSize': '0.875rem',\n '--pf-v6-c-form-control--LineHeight': '1.25rem',\n '& input': {\n padding: '2px 4px',\n outline: 'none',\n },\n '& .pf-v6-c-form-control__utilities': {\n alignSelf: 'center',\n alignItems: 'center',\n paddingTop: 0,\n paddingBottom: 0,\n },\n});\n\nconst RenameExtension = styled(Typography)({\n flexShrink: 0,\n fontSize: '0.875rem',\n lineHeight: '1.25rem',\n whiteSpace: 'nowrap',\n});\n\nconst RenameHelperText = styled('div')({\n width: '100%',\n paddingTop: 4,\n '& .pf-v6-c-helper-text__item-text': {\n color: 'var(--pf-t--global--color--status--danger--default)',\n },\n});\n\nconst SpinnerContainer = styled('div')({\n flexShrink: 0,\n});\n\nconst KebabToggle = styled(MenuToggle)({\n padding: 0,\n flexShrink: 0,\n visibility: 'hidden',\n});\n\nconst KebabDropdown = styled(Dropdown)({\n '& .pf-v6-c-menu__list': {\n paddingInlineStart: 0,\n marginBlockStart: 0,\n marginBlockEnd: 0,\n },\n});\n\nconst splitFileName = (\n fileName: string,\n): { baseName: string; extension: string } => {\n if (!fileName) return { baseName: '', extension: '' };\n const lastDot = fileName.lastIndexOf('.');\n if (lastDot <= 0) return { baseName: fileName, extension: '' };\n return {\n baseName: fileName.slice(0, lastDot),\n extension: fileName.slice(lastDot),\n };\n};\n\ntype DocumentSidebarProps = {\n notebookName: string;\n documents: SessionDocument[];\n uploadingFileNames: string[];\n completedFileNames?: Set<string>;\n deletingDocumentIds?: Set<string>;\n collapsed: boolean;\n hasUploadsInProgress?: boolean;\n onToggleCollapse: () => void;\n onAddDocument: () => void;\n onDeleteDocument?: (documentId: string) => void;\n onRenameDocument?: (documentId: string, newTitle: string) => void;\n onRenameNotebook?: (newName: string) => void;\n};\n\nexport const DocumentSidebar = ({\n notebookName,\n documents,\n uploadingFileNames,\n completedFileNames,\n deletingDocumentIds,\n collapsed,\n hasUploadsInProgress,\n onToggleCollapse,\n onAddDocument,\n onDeleteDocument,\n onRenameDocument,\n onRenameNotebook,\n}: DocumentSidebarProps) => {\n const { t } = useTranslation();\n const [openMenuDocId, setOpenMenuDocId] = useState<string | null>(null);\n const [editingDocId, setEditingDocId] = useState<string | null>(null);\n const [editName, setEditName] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n\n const startEditing = useCallback((docId: string, currentTitle: string) => {\n const { baseName } = splitFileName(currentTitle);\n setEditingDocId(docId);\n setEditName(baseName);\n setOpenMenuDocId(null);\n setTimeout(() => {\n inputRef.current?.focus();\n inputRef.current?.select();\n }, 0);\n }, []);\n\n const cancelEditing = useCallback(() => {\n setEditingDocId(null);\n setEditName('');\n }, []);\n\n const getValidationError = useCallback(\n (docId: string, originalTitle: string): string | null => {\n const trimmedBase = editName.trim();\n if (!trimmedBase) return null;\n const { baseName, extension } = splitFileName(originalTitle);\n if (trimmedBase === baseName) return null;\n const newFullName = trimmedBase + extension;\n if (newFullName.length > NOTEBOOK_MAX_TITLE_LENGTH) {\n return t('notebook.document.rename.tooLong');\n }\n const conflict = documents.some(\n d => d.document_id !== docId && d.title === newFullName,\n );\n return conflict ? t('notebook.document.rename.conflict') : null;\n },\n [editName, documents, t],\n );\n\n const saveRename = useCallback(\n (docId: string, originalTitle: string) => {\n const trimmedBase = editName.trim();\n const { baseName, extension } = splitFileName(originalTitle);\n if (!trimmedBase || trimmedBase === baseName) {\n cancelEditing();\n return;\n }\n const newFullName = trimmedBase + extension;\n if (newFullName.length > NOTEBOOK_MAX_TITLE_LENGTH) {\n cancelEditing();\n return;\n }\n if (\n documents.some(d => d.document_id !== docId && d.title === newFullName)\n ) {\n cancelEditing();\n return;\n }\n onRenameDocument?.(docId, newFullName);\n cancelEditing();\n },\n [editName, documents, onRenameDocument, cancelEditing],\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent, docId: string, originalTitle: string) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n saveRename(docId, originalTitle);\n } else if (event.key === 'Escape') {\n event.preventDefault();\n cancelEditing();\n }\n },\n [saveRename, cancelEditing],\n );\n\n const {\n isEditing: isEditingTitle,\n editValue: editTitle,\n setEditValue: setEditTitle,\n inputRef: titleInputRef,\n startEditing: startEditingTitle,\n save: saveTitle,\n handleKeyDown: handleTitleKeyDown,\n } = useInlineEdit({\n currentName: notebookName,\n onSave: newName => onRenameNotebook?.(newName),\n });\n\n if (collapsed) {\n return null;\n }\n\n const uploadedNames = new Set(documents.map(d => d.title));\n const activePending = uploadingFileNames.filter(\n name => !uploadedNames.has(name),\n );\n const totalCount = documents.length + activePending.length;\n const isAddDisabled = totalCount >= NOTEBOOK_MAX_FILES;\n\n return (\n <Sidebar>\n <TitleRow>\n {isEditingTitle ? (\n <TitleInput\n ref={titleInputRef}\n value={editTitle}\n onChange={(_event, value) => setEditTitle(value)}\n onBlur={saveTitle}\n onKeyDown={handleTitleKeyDown}\n aria-label={t('notebooks.rename.inline.tooltip')}\n />\n ) : (\n <NotebookTitle\n title={t('notebooks.rename.inline.tooltip')}\n onClick={startEditingTitle}\n >\n {notebookName}\n </NotebookTitle>\n )}\n <Tooltip content={t('notebook.view.sidebar.collapse')} position=\"right\">\n <CollapseButton\n variant=\"plain\"\n onClick={onToggleCollapse}\n aria-label={t('notebook.view.sidebar.collapse')}\n >\n <SidebarCollapseIcon />\n </CollapseButton>\n </Tooltip>\n </TitleRow>\n\n <DocumentsRow>\n <DocumentCount>\n {(t as Function)('notebook.view.documents.count', {\n count: totalCount,\n })}\n </DocumentCount>\n {isAddDisabled ? (\n <Tooltip\n content={\n hasUploadsInProgress\n ? t('notebook.view.documents.uploadsInProgress')\n : t('notebook.view.documents.maxReached')\n }\n position=\"top\"\n >\n <Typography component=\"div\">\n <AddButton variant=\"link\" icon={<AddCircleOIcon />} isDisabled>\n {t('notebook.view.documents.add')}\n </AddButton>\n </Typography>\n </Tooltip>\n ) : (\n <AddButton\n variant=\"link\"\n icon={<AddCircleOIcon />}\n onClick={onAddDocument}\n >\n {t('notebook.view.documents.add')}\n </AddButton>\n )}\n </DocumentsRow>\n\n {(documents.length > 0 || activePending.length > 0) && (\n <DocumentsList>\n {documents.map(doc => (\n <DocumentItem key={doc.document_id}>\n <FileTypeIcon fileName={doc.title} />\n {editingDocId === doc.document_id ? (\n (() => {\n const validationError = getValidationError(\n doc.document_id,\n doc.title,\n );\n return (\n <RenameContainer>\n <RenameInput\n ref={inputRef}\n value={editName}\n onChange={(_event, value) => setEditName(value)}\n onBlur={() => saveRename(doc.document_id, doc.title)}\n onKeyDown={event =>\n handleKeyDown(event, doc.document_id, doc.title)\n }\n validated={validationError ? 'error' : 'default'}\n aria-label={t('notebook.document.rename')}\n />\n <RenameExtension>\n {splitFileName(doc.title).extension}\n </RenameExtension>\n {validationError && (\n <RenameHelperText>\n <HelperText>\n <HelperTextItem variant=\"error\">\n {validationError}\n </HelperTextItem>\n </HelperText>\n </RenameHelperText>\n )}\n </RenameContainer>\n );\n })()\n ) : (\n <FileName\n title={t('notebook.document.rename.tooltip')}\n onClick={() => startEditing(doc.document_id, doc.title)}\n >\n {doc.title}\n </FileName>\n )}\n {deletingDocumentIds?.has(doc.document_id) ? (\n <SpinnerContainer>\n <Spinner\n size=\"md\"\n aria-label={t('notebook.document.delete')}\n />\n </SpinnerContainer>\n ) : (\n <KebabDropdown\n isOpen={openMenuDocId === doc.document_id}\n popperProps={{\n position: 'end',\n preventOverflow: true,\n }}\n onOpenChange={isOpen =>\n setOpenMenuDocId(isOpen ? doc.document_id : null)\n }\n toggle={toggleRef => (\n <KebabToggle\n ref={toggleRef}\n variant=\"plain\"\n className=\"doc-kebab\"\n style={\n openMenuDocId === doc.document_id\n ? { visibility: 'visible' }\n : undefined\n }\n isExpanded={openMenuDocId === doc.document_id}\n onClick={event => {\n event.stopPropagation();\n setOpenMenuDocId(current =>\n current === doc.document_id ? null : doc.document_id,\n );\n }}\n aria-label={`${t('aria.options.label')} ${doc.title}`}\n >\n <EllipsisVIcon />\n </KebabToggle>\n )}\n >\n <DropdownList>\n <DropdownItem\n key=\"rename\"\n icon={<PenIcon />}\n onClick={event => {\n event.stopPropagation();\n startEditing(doc.document_id, doc.title);\n }}\n >\n {t('notebook.document.rename')}\n </DropdownItem>\n <DropdownItem\n key=\"delete\"\n icon={<TrashIcon />}\n onClick={event => {\n event.stopPropagation();\n setOpenMenuDocId(null);\n onDeleteDocument?.(doc.document_id);\n }}\n >\n {t('notebook.document.delete')}\n </DropdownItem>\n </DropdownList>\n </KebabDropdown>\n )}\n </DocumentItem>\n ))}\n {activePending.map(fileName => (\n <DocumentItem key={`pending-${fileName}`}>\n <FileTypeIcon fileName={fileName} />\n <FileName>{fileName}</FileName>\n {!completedFileNames?.has(fileName) && (\n <SpinnerContainer>\n <Spinner\n size=\"md\"\n aria-label={t('notebook.view.documents.uploading')}\n />\n </SpinnerContainer>\n )}\n </DocumentItem>\n ))}\n </DocumentsList>\n )}\n </Sidebar>\n );\n};\n"],"names":[],"mappings":"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"}
|