@inceptionbg/iui 2.0.14 → 2.0.16

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 (35) hide show
  1. package/dist/NoAccessPage-BmizYfw0.js +2 -0
  2. package/dist/{NoAccessPage-DBq5IzIf.js.map → NoAccessPage-BmizYfw0.js.map} +1 -1
  3. package/dist/NotFoundPage-Cv544vAr.js +2 -0
  4. package/dist/{NotFoundPage-DM-I96ar.js.map → NotFoundPage-Cv544vAr.js.map} +1 -1
  5. package/dist/index.d.ts +7 -4
  6. package/dist/index.js +1 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/iui.css +1 -1
  9. package/package.json +2 -3
  10. package/src/components/Dialog/Dialog.tsx +3 -3
  11. package/src/components/Dialog/components/DialogFooter.tsx +18 -16
  12. package/src/components/Header/Components/UserMenu.tsx +15 -14
  13. package/src/components/Inputs/TextInput.tsx +1 -0
  14. package/src/components/List/ListItem.tsx +1 -1
  15. package/src/components/Menu/Menu.tsx +3 -0
  16. package/src/components/Pullover/Pullover.tsx +22 -22
  17. package/src/components/Table/Table.tsx +18 -29
  18. package/src/components/Table/components/columns/ColumnsList.tsx +59 -0
  19. package/src/components/Table/components/columns/TableColumnsEdit.tsx +116 -0
  20. package/src/components/Table/components/edit/TableEditRow.tsx +13 -19
  21. package/src/components/Table/components/header/TableHeaderRow.tsx +1 -1
  22. package/src/components/Table/contexts/TableContext.tsx +1 -9
  23. package/src/components/Table/hooks/localHooks/useLocalTableColumns.tsx +21 -24
  24. package/src/components/Table/hooks/useTableColumns.ts +16 -8
  25. package/src/components/Tabs/Tabs.tsx +1 -0
  26. package/src/index.ts +1 -1
  27. package/src/styles/components/_badge.scss +1 -1
  28. package/src/styles/components/_header.scss +4 -7
  29. package/src/styles/components/_list.scss +1 -1
  30. package/src/styles/components/_table.scss +49 -38
  31. package/src/styles/variables/_variables.scss +9 -0
  32. package/src/types/IHeader.ts +1 -1
  33. package/src/types/ITable.ts +1 -0
  34. package/dist/NoAccessPage-DBq5IzIf.js +0 -2
  35. package/dist/NotFoundPage-DM-I96ar.js +0 -2
@@ -17,10 +17,12 @@ import { TableFilters } from './components/filters/TableFilters';
17
17
  import { TableEditRow } from './components/edit/TableEditRow';
18
18
  import { TablePrint } from './components/print/TablePrint';
19
19
  import { TableTemplates } from './components/templates/TableTemplates';
20
+ import { TableColumnsEdit } from './components/columns/TableColumnsEdit';
21
+ import { useLocalTableColumns } from './hooks/localHooks/useLocalTableColumns';
20
22
 
21
23
  export const TableContent: FC = () => {
22
24
  const {
23
- columnData: { columns },
25
+ columnData,
24
26
  customHeader,
25
27
  headerWrap,
26
28
  data,
@@ -39,12 +41,15 @@ export const TableContent: FC = () => {
39
41
  const [extendedRow, setExtendedRow] = useState('');
40
42
 
41
43
  const { t } = useTranslation();
44
+ const { visibleColumns } = useLocalTableColumns();
42
45
  const { focusedRow } = useLocalTableKeyboard();
46
+
43
47
  const noTotalRows = footer?.totalRows === undefined;
44
48
 
45
49
  return (
46
50
  <Loader isLoading={!!isLoading}>
47
51
  <div
52
+ id={props.id}
48
53
  // onKeyDown={handleKeyDown}
49
54
  className={clsx('iui-table', props.className, {
50
55
  'pb-3': data.length === 0,
@@ -52,28 +57,9 @@ export const TableContent: FC = () => {
52
57
  // tabIndex={-1}
53
58
  >
54
59
  <div className="iui-table-header-actions">
55
- {/* {(!!filterData ||
56
- !!sortData ||
57
- !!setColumns ||
58
- !!printData ||
59
- !!customPrintData) && (
60
- <TableOptions
61
- columns={cols}
62
- columnsData={
63
- setColumns
64
- ? { columns, setColumns, withSearch: withColumnsSearch }
65
- : undefined
66
- }
67
- filterData={filterData}
68
- sortData={sortData}
69
- printData={printData}
70
- customPrintData={customPrintData}
71
- templates={templates}
72
- additionsalOptions={additionsalOptions}
73
- />
74
- )} */}
75
60
  {props.selectActions.length > 0 && <TableSelect />}
76
61
  {props.filterData && <TableFilters />}
62
+ {!!columnData.setColumns && <TableColumnsEdit />}
77
63
  {props.sortData && <TableSort />}
78
64
  {props.templateData && <TableTemplates />}
79
65
  {props.printData && <TablePrint />}
@@ -100,7 +86,7 @@ export const TableContent: FC = () => {
100
86
  >
101
87
  <table className="full-width">
102
88
  <HeaderTable
103
- columns={columns}
89
+ columns={visibleColumns}
104
90
  customHeader={customHeader}
105
91
  headerWrap={headerWrap}
106
92
  maxHeight={maxHeight}
@@ -117,7 +103,7 @@ export const TableContent: FC = () => {
117
103
  <Fragment key={row.uuid}>
118
104
  {/* ////// EDITABLE ROW ////// */}
119
105
  {!!editable && row.uuid === editable.selectedItem?.uuid ? (
120
- <TableEditRow />
106
+ <TableEditRow columns={visibleColumns} />
121
107
  ) : (
122
108
  ////// REGULAR ROW //////
123
109
  <tr
@@ -137,7 +123,7 @@ export const TableContent: FC = () => {
137
123
  );
138
124
  }}
139
125
  >
140
- {columns.map(column => {
126
+ {visibleColumns.map(column => {
141
127
  const cell = row.cells[column.id];
142
128
  return (
143
129
  <Tooltip
@@ -186,7 +172,7 @@ export const TableContent: FC = () => {
186
172
  {/* ////// EXTENDABLE ROW ////// */}
187
173
  {isExtended && (
188
174
  <tr>
189
- <td colSpan={columns.length} className={rowHeight}>
175
+ <td colSpan={visibleColumns.length} className={rowHeight}>
190
176
  {row.extendable!.element}
191
177
  </td>
192
178
  </tr>
@@ -197,7 +183,7 @@ export const TableContent: FC = () => {
197
183
  </>
198
184
  ) : (
199
185
  <tr>
200
- <td colSpan={columns.length}>{t('NoResults')}</td>
186
+ <td colSpan={visibleColumns.length}>{t('NoResults')}</td>
201
187
  </tr>
202
188
  )}
203
189
  </tbody>
@@ -214,7 +200,10 @@ export const TableContent: FC = () => {
214
200
  })}
215
201
  onClick={() => editable.setIsAdding(true)}
216
202
  >
217
- <td className={`text-center ${rowHeight}`} colSpan={columns.length}>
203
+ <td
204
+ className={`text-center ${rowHeight}`}
205
+ colSpan={visibleColumns.length}
206
+ >
218
207
  <div className="flex center gap-2">
219
208
  <FontAwesomeIcon icon={faPlus} className="c-primary icon24" />
220
209
  <p>{editable.addLabel || t('AddItem')}</p>
@@ -222,13 +211,13 @@ export const TableContent: FC = () => {
222
211
  </td>
223
212
  </tr>
224
213
  ) : (
225
- <TableEditRow />
214
+ <TableEditRow columns={visibleColumns} />
226
215
  ))}
227
216
  {!!sumRows &&
228
217
  !!data.length &&
229
218
  sumRows.map(row => (
230
219
  <tr key={row.uuid}>
231
- {columns.map(({ id: columnId }) => (
220
+ {visibleColumns.map(({ id: columnId }) => (
232
221
  <td
233
222
  key={columnId}
234
223
  align={row.cells[columnId]?.align || 'right'}
@@ -0,0 +1,59 @@
1
+ import { useEffect, useState, type FC } from 'react';
2
+ import { Draggable, Droppable } from '@hello-pangea/dnd';
3
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
4
+ import { ITableColumn } from '../../../../types/ITable';
5
+ import { faGripDotsVertical } from '../../../../assets/icons/solid/faGripDotsVertical';
6
+
7
+ interface Props {
8
+ id: 'hidden' | 'visible';
9
+ items: ITableColumn[];
10
+ search: string;
11
+ }
12
+
13
+ export const ColumnsList: FC<Props> = ({ id, items, search }) => {
14
+ const [filteredItems, setFilteredItems] = useState<ITableColumn[]>([]);
15
+
16
+ useEffect(() => {
17
+ if (search.length) {
18
+ setFilteredItems(
19
+ items.filter(e =>
20
+ (typeof e.label === 'string' ? e.label : (e.labelForFilter ?? ''))
21
+ .toLocaleLowerCase()
22
+ .includes(search.toLocaleLowerCase())
23
+ )
24
+ );
25
+ }
26
+ }, [search, items]);
27
+
28
+ const list = search.length ? filteredItems : items;
29
+
30
+ return (
31
+ <Droppable droppableId={id}>
32
+ {({ droppableProps, innerRef, placeholder }) => (
33
+ <div {...droppableProps} ref={innerRef} className="list-box">
34
+ {list.map(c => (
35
+ <Draggable key={c.id} draggableId={c.id} index={items.indexOf(c)}>
36
+ {({ innerRef, draggableProps, dragHandleProps }, snapshot) => (
37
+ <div
38
+ className={`item ${snapshot.isDragging ? 'dragging' : ''}`}
39
+ ref={innerRef}
40
+ {...draggableProps}
41
+ {...dragHandleProps}
42
+ style={{
43
+ ...draggableProps.style,
44
+ top: 'unset',
45
+ left: 'unset',
46
+ }}
47
+ >
48
+ {c.label}
49
+ <FontAwesomeIcon icon={faGripDotsVertical} />
50
+ </div>
51
+ )}
52
+ </Draggable>
53
+ ))}
54
+ {placeholder}
55
+ </div>
56
+ )}
57
+ </Droppable>
58
+ );
59
+ };
@@ -0,0 +1,116 @@
1
+ import { FC, useEffect, useState } from 'react';
2
+ import { DragDropContext, DropResult } from '@hello-pangea/dnd';
3
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
4
+ import { ITableColumn } from '../../../../types/ITable';
5
+ import { faArrowRightArrowLeft } from '../../../../assets/icons/regular/faArrowRightArrowLeft';
6
+ import { useTranslation } from 'react-i18next';
7
+ import { ColumnsList } from './ColumnsList';
8
+ import { SearchInput } from '../../../Inputs/SearchInput';
9
+ import { Pullover } from '../../../Pullover/Pullover';
10
+ import { useTableContext } from '../../contexts/TableContext';
11
+ import { usePopupControl } from '../../../../hooks/usePopupControl';
12
+ import { IconButton } from '../../../Button/IconButton';
13
+ import { faLineColumns } from '../../../../assets/icons/light/faLineColumns';
14
+
15
+ export const TableColumnsEdit: FC = () => {
16
+ const [hidden, setHidden] = useState<ITableColumn[]>([]);
17
+ const [visible, setVisible] = useState<ITableColumn[]>([]);
18
+ const [searchHidden, setSearchHidden] = useState('');
19
+ const [searchVisible, setSearchVisible] = useState('');
20
+
21
+ const { t } = useTranslation();
22
+ const {
23
+ columnData: { defaultColumns, setColumns },
24
+ } = useTableContext();
25
+ const { control, onClose, onOpen } = usePopupControl();
26
+
27
+ useEffect(() => {
28
+ if (control.isOpen) {
29
+ let hiddenCols: ITableColumn[] = [];
30
+ let visibleCols: ITableColumn[] = [];
31
+ defaultColumns.forEach(col =>
32
+ !!col.hidden ? hiddenCols.push(col) : visibleCols.push(col)
33
+ );
34
+ setHidden(hiddenCols);
35
+ setVisible(visibleCols);
36
+ }
37
+ }, [control.isOpen, defaultColumns]);
38
+
39
+ const onDragEnd = ({ source, destination }: DropResult) => {
40
+ if (!destination) return;
41
+ const hiddenCols = [...hidden];
42
+ const visibleCols = [...visible];
43
+ const destinationIsHidden = destination.droppableId === 'hidden';
44
+
45
+ const sourceList = source.droppableId === 'hidden' ? hiddenCols : visibleCols;
46
+ const destinationList = destinationIsHidden ? hiddenCols : visibleCols;
47
+
48
+ const [removed] = sourceList.splice(source.index, 1);
49
+ destinationList.splice(destination.index, 0, removed);
50
+ if (source.droppableId !== destination.droppableId) {
51
+ destinationList[destination.index].hidden = destinationIsHidden;
52
+ setHidden(hiddenCols);
53
+ setVisible(visibleCols);
54
+ } else {
55
+ destinationIsHidden ? setHidden(hiddenCols) : setVisible(visibleCols);
56
+ }
57
+ };
58
+
59
+ const onSubmit = () => {
60
+ if (setColumns) {
61
+ const newColumns = [...visible, ...hidden];
62
+ setColumns(newColumns);
63
+ onClose();
64
+ }
65
+ };
66
+
67
+ return (
68
+ <>
69
+ <IconButton
70
+ tooltip={t('Columns')}
71
+ icon={faLineColumns}
72
+ active={control.isOpen}
73
+ onClick={onOpen}
74
+ size="s"
75
+ variant="outlined"
76
+ />
77
+
78
+ <DragDropContext onDragEnd={onDragEnd}>
79
+ <Pullover
80
+ control={control}
81
+ header={{ title: t('Columns') }}
82
+ footer={{
83
+ confirmButton: {
84
+ label: t('Confirm'),
85
+ onClick: onSubmit,
86
+ },
87
+ }}
88
+ >
89
+ <div className="dual-list-container">
90
+ <p className="pb-3">{t('DragDropListsInfo')}</p>
91
+ <div className="dual-list-content">
92
+ <p className="bold ml-2">{t('HiddenColumns')}:</p>
93
+ <div />
94
+ <p className="bold ml-2">{t('SelectedColumns')}:</p>
95
+
96
+ {/* {withSearch && (
97
+ <> */}
98
+ <SearchInput onSearch={setSearchHidden} />
99
+ <div />
100
+ <SearchInput onSearch={setSearchVisible} />
101
+ {/* </>
102
+ )} */}
103
+ <ColumnsList id="hidden" items={hidden} search={searchHidden} />
104
+
105
+ <div className="exchange-icon">
106
+ <FontAwesomeIcon icon={faArrowRightArrowLeft} />
107
+ </div>
108
+
109
+ <ColumnsList id="visible" items={visible} search={searchVisible} />
110
+ </div>
111
+ </div>
112
+ </Pullover>
113
+ </DragDropContext>
114
+ </>
115
+ );
116
+ };
@@ -1,15 +1,12 @@
1
1
  import { FC, useEffect, useRef } from 'react';
2
- import { ITableDataItem } from '../../../../types/ITable';
2
+ import { ITableColumn, ITableDataItem } from '../../../../types/ITable';
3
3
  import { IconButton } from '../../../Button/IconButton';
4
4
  import { faCheck, faXmark } from '../../../../assets/icons';
5
5
  import { useTableContext } from '../../contexts/TableContext';
6
6
  import { useGetFocusableElements } from '../../../../hooks/useGetFocusableElements';
7
7
 
8
- export const TableEditRow: FC = () => {
9
- const {
10
- columnData: { columns },
11
- editable,
12
- } = useTableContext();
8
+ export const TableEditRow: FC<{ columns: ITableColumn[] }> = ({ columns }) => {
9
+ const { editable } = useTableContext();
13
10
 
14
11
  const elementRef = useRef(null);
15
12
 
@@ -54,19 +51,16 @@ export const TableEditRow: FC = () => {
54
51
 
55
52
  return (
56
53
  <tr ref={elementRef} data-id={rowData.uuid} className="edit-row">
57
- {columns.map(
58
- column =>
59
- !column.hidden && (
60
- <td
61
- key={column.id}
62
- align={column.align}
63
- colSpan={rowData.cells[column.id]?.span}
64
- className={rowData.cells[column.id]?.className}
65
- >
66
- {rowData.cells[column.id]?.value ?? ''}
67
- </td>
68
- )
69
- )}
54
+ {columns.map(column => (
55
+ <td
56
+ key={column.id}
57
+ align={column.align}
58
+ colSpan={rowData.cells[column.id]?.span}
59
+ className={rowData.cells[column.id]?.className}
60
+ >
61
+ {rowData.cells[column.id]?.value ?? ''}
62
+ </td>
63
+ ))}
70
64
  </tr>
71
65
  );
72
66
  };
@@ -40,7 +40,7 @@ export const TableHeaderRow: FC<Props> = ({ row, print }) => {
40
40
  ? { width: col.width }
41
41
  : undefined
42
42
  }
43
- hidden={col.hidden}
43
+ // hidden={col.hidden}
44
44
  >
45
45
  <div className="flex align-center">
46
46
  {typeof col.label === 'string' ? (
@@ -15,7 +15,6 @@ import {
15
15
  ITableSelectedAction,
16
16
  } from '../../../types/ITable';
17
17
  import { useLocalTablePagination } from '../hooks/localHooks/useLocalTablePagination';
18
- import { useLocalTableColumns } from '../hooks/localHooks/useLocalTableColumns';
19
18
  import { useLocalTableData } from '../hooks/localHooks/useLocalTableData';
20
19
 
21
20
  interface ITableContext extends ITable {
@@ -86,20 +85,13 @@ export const TableProvider = ({
86
85
  rowSelect,
87
86
  });
88
87
 
89
- useLocalTableColumns({
90
- columnData,
91
- hasSelect: selectActions.length > 0,
92
- data,
93
- rowSelect,
94
- hasItemActions: updatedDataActions.hasItemActions,
95
- });
96
-
97
88
  const tableContextValue: ITableContext = {
98
89
  ...rest,
99
90
  data,
100
91
  dataActions: updatedDataActions,
101
92
  columnData,
102
93
  selectActions,
94
+ rowSelect,
103
95
  };
104
96
 
105
97
  if (editable) tableContextValue.editable = { ...editable, isAdding, setIsAdding };
@@ -1,33 +1,28 @@
1
- import { useEffect } from 'react';
2
- import { ITable, ITableColumn, ITableColumnsData } from '../../../../types/ITable';
1
+ import { useMemo } from 'react';
2
+ import { ITableColumn } from '../../../../types/ITable';
3
3
  import { useTranslation } from 'react-i18next';
4
4
  import { Checkbox } from '../../../Inputs/Checkbox';
5
+ import { useTableContext } from '../../contexts/TableContext';
5
6
 
6
- interface Props {
7
- columnData: ITableColumnsData;
8
- hasSelect: boolean;
9
- data: ITable['data'];
10
- rowSelect: ITable['rowSelect'];
11
- hasItemActions?: boolean;
12
- }
13
-
14
- export const useLocalTableColumns = ({
15
- columnData: { defaultColumns, setColumns },
16
- hasSelect,
17
- data,
18
- rowSelect,
19
- hasItemActions,
20
- }: Props) => {
7
+ export const useLocalTableColumns = () => {
21
8
  const { t } = useTranslation();
22
9
 
23
- useEffect(() => {
24
- const activeColumns = defaultColumns.filter(e => !e.hidden && !e.unavailable);
25
- // const activeColumns = defaultColumns.filter(e => !e.unavailable);
10
+ const {
11
+ columnData: { columns },
12
+ selectActions,
13
+ data,
14
+ rowSelect,
15
+ dataActions: { hasItemActions } = {},
16
+ } = useTableContext();
17
+
18
+ const visibleColumns = useMemo(() => {
19
+ const hasSelect = rowSelect && selectActions.length > 0;
20
+ const filteredColumns = columns.filter(column => !column.hidden);
26
21
 
27
22
  let newCols: ITableColumn[] = [];
28
23
 
29
24
  // Select Column
30
- if (hasSelect && rowSelect) {
25
+ if (hasSelect) {
31
26
  const selectableData = data.filter(e => !e.disableSelect);
32
27
  const selectedSome =
33
28
  !!rowSelect.selectedRows.size &&
@@ -57,7 +52,7 @@ export const useLocalTableColumns = ({
57
52
  newCols.push(selectColumn);
58
53
  }
59
54
 
60
- newCols = newCols.concat(activeColumns);
55
+ newCols = newCols.concat(filteredColumns);
61
56
  hasItemActions &&
62
57
  newCols.push({
63
58
  id: 'actions',
@@ -66,6 +61,8 @@ export const useLocalTableColumns = ({
66
61
  className: 'actions-col',
67
62
  });
68
63
 
69
- setColumns?.(newCols);
70
- }, [defaultColumns, setColumns, hasSelect, data, rowSelect, hasItemActions, t]);
64
+ return newCols;
65
+ }, [columns, selectActions.length, data, rowSelect, hasItemActions, t]);
66
+
67
+ return { visibleColumns };
71
68
  };
@@ -1,28 +1,36 @@
1
- import { useEffect, useMemo, useState } from 'react';
1
+ import { useLayoutEffect, useMemo, useState } from 'react';
2
2
  import { ITableColumn, ITableColumnsData } from '../../../types/ITable';
3
3
 
4
4
  export interface ITableColumnsProps {
5
5
  defaultColumns: ITableColumn[];
6
6
  templateColumns?: ITableColumn[];
7
+ enableEdit?: boolean;
7
8
  }
8
9
 
9
10
  export const useTableColumns = ({
10
11
  defaultColumns,
11
12
  templateColumns,
13
+ enableEdit,
12
14
  }: ITableColumnsProps): ITableColumnsData => {
13
- const [columns, setColumns] = useState<ITableColumn[]>(defaultColumns);
15
+ const [columns, setColumns] = useState<ITableColumn[]>([]);
14
16
 
15
- useEffect(() => {
16
- setColumns(defaultColumns);
17
- }, [defaultColumns, templateColumns]);
17
+ const availableColumns = useMemo(
18
+ () => defaultColumns.filter(e => !e.unavailable),
19
+ [defaultColumns]
20
+ );
21
+
22
+ useLayoutEffect(() => {
23
+ setColumns(availableColumns);
24
+ }, [availableColumns, templateColumns]);
18
25
 
19
26
  const columnData = useMemo(
20
27
  () => ({
21
- defaultColumns,
28
+ defaultColumns: availableColumns,
22
29
  columns,
23
- setColumns,
30
+ setColumns: enableEdit ? setColumns : undefined,
24
31
  }),
25
- [defaultColumns, columns]
32
+ [availableColumns, columns, enableEdit]
26
33
  );
34
+
27
35
  return columnData;
28
36
  };
@@ -36,6 +36,7 @@ export const Tabs: FC<Props> = ({
36
36
  <div className="iui-tabs">
37
37
  {filteredTabs.map(tab => (
38
38
  <div
39
+ id={tab.value}
39
40
  key={tab.value}
40
41
  className={clsx('iui-tab clickable', {
41
42
  selected: (control?.value || selected) === tab.value,
package/src/index.ts CHANGED
@@ -2,7 +2,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
2
2
  import type { IconDefinition } from '@fortawesome/fontawesome-svg-core';
3
3
  import clsx from 'clsx';
4
4
  import dayjs from 'dayjs';
5
- import { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd';
5
+ import { DragDropContext, Draggable, Droppable } from '@hello-pangea/dnd';
6
6
  import { ToastContainer } from 'react-toastify';
7
7
 
8
8
  import type { IFormWrapper } from './components/Wrappers/FormWrapper';
@@ -15,7 +15,7 @@
15
15
  padding: 0 4px;
16
16
  &.primary {
17
17
  color: var(--text-inverse);
18
- border: 2px solid white;
18
+ border: 2px solid var(--background);
19
19
  background-color: var(--primary);
20
20
  }
21
21
  // SIZES
@@ -118,13 +118,10 @@
118
118
  text-overflow: ellipsis;
119
119
  }
120
120
  }
121
- .user-badge {
122
- min-height: 10px;
123
- max-height: 10px;
124
- min-width: 10px;
125
- max-width: 10px;
126
- background: var(--danger);
127
- border-radius: 50px;
121
+ .user-notif-badge {
122
+ border: 1px solid var(--primary);
123
+ background-color: var(--danger);
124
+ right: -5px;
128
125
  }
129
126
  }
130
127
  .header-user-menu {
@@ -35,7 +35,7 @@
35
35
  cursor: default;
36
36
  opacity: 0.5;
37
37
  }
38
- &:not(.disabled) {
38
+ &.clickable:not(.disabled) {
39
39
  cursor: pointer;
40
40
  &:hover {
41
41
  background-color: var(--neutral-hover);