@skbkontur/side-menu 0.2.0 → 0.2.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 +20 -0
- package/README.md +131 -135
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/package.json +2 -2
- package/src/InnerSubMenu.d.ts +9 -0
- package/src/InnerSubMenu.js +18 -0
- package/src/RightBorder.d.ts +8 -0
- package/src/RightBorder.js +71 -0
- package/src/SeparatedSubMenu.d.ts +8 -0
- package/src/SeparatedSubMenu.js +42 -0
- package/src/SideMenu.d.ts +23 -50
- package/src/SideMenu.js +81 -143
- package/src/SideMenu.styles.d.ts +8 -4
- package/src/SideMenu.styles.js +52 -44
- package/src/SideMenuAvatar.d.ts +6 -22
- package/src/SideMenuAvatar.js +10 -41
- package/src/SideMenuBody.d.ts +5 -7
- package/src/SideMenuBody.js +22 -15
- package/src/SideMenuBodyChildren.d.ts +6 -0
- package/src/SideMenuBodyChildren.js +26 -0
- package/src/SideMenuContext.d.ts +7 -6
- package/src/SideMenuContext.js +1 -1
- package/src/SideMenuDivider.d.ts +5 -10
- package/src/SideMenuDivider.js +11 -19
- package/src/SideMenuDropdown.d.ts +13 -0
- package/src/SideMenuDropdown.js +29 -0
- package/src/SideMenuFooter.d.ts +5 -7
- package/src/SideMenuFooter.js +19 -6
- package/src/SideMenuHeader.d.ts +4 -26
- package/src/SideMenuHeader.js +32 -76
- package/src/SideMenuItem.d.ts +9 -35
- package/src/SideMenuItem.js +134 -165
- package/src/SideMenuLogotype.d.ts +6 -0
- package/src/SideMenuLogotype.js +65 -0
- package/src/SideMenuOrganisations.d.ts +4 -16
- package/src/SideMenuOrganisations.js +12 -35
- package/src/SideMenuSubItem.d.ts +3 -17
- package/src/SideMenuSubItem.js +27 -42
- package/src/SideMenuSubItemHeader.d.ts +5 -12
- package/src/SideMenuSubItemHeader.js +13 -21
- package/src/SideMenuDropdownMenuSeparator.d.ts +0 -11
- package/src/SideMenuDropdownMenuSeparator.js +0 -25
- package/src/SideMenuSubItemButtons.d.ts +0 -15
- package/src/SideMenuSubItemButtons.js +0 -25
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,26 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [0.2.2](https://git.skbkontur.ru/ui/ui-parking/compare/@skbkontur/side-menu@0.2.1...@skbkontur/side-menu@0.2.2) (2022-10-11)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @skbkontur/side-menu
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [0.2.1](https://git.skbkontur.ru/ui/ui-parking/compare/@skbkontur/side-menu@0.2.0...@skbkontur/side-menu@0.2.1) (2022-09-30)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Reverts
|
|
18
|
+
|
|
19
|
+
* Revert "chore(SideMenuDropdown): delete disable animation" ([4c4f0af](https://git.skbkontur.ru/ui/ui-parking/commits/4c4f0afb573bf62ff749d059b48d650d8d3e7db3))
|
|
20
|
+
* Revert "chore: delete span around icon" ([660b128](https://git.skbkontur.ru/ui/ui-parking/commits/660b128ab4b769446d7a1246727f1fadbe354b4d))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
6
26
|
# [0.2.0](https://git.skbkontur.ru/ui/ui-parking/compare/@skbkontur/side-menu@0.1.4...@skbkontur/side-menu@0.2.0) (2022-07-25)
|
|
7
27
|
|
|
8
28
|
|
package/README.md
CHANGED
|
@@ -3,73 +3,75 @@
|
|
|
3
3
|
SideMenu в фирменном стиле (макеты живут [здесь](https://www.figma.com/file/XA8Ytcx8bxemYAkF7eGVSv/%D0%9A%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82-%D0%BB%D0%B5%D0%B2%D0%BE%D0%B3%D0%BE-%D0%BC%D0%B5%D0%BD%D1%8E?node-id=0%3A1)).
|
|
4
4
|
|
|
5
5
|
```jsx harmony
|
|
6
|
-
import {getKonturAvatarUrl} from '@skbkontur/react-ui-addons';
|
|
7
|
-
import {Kontur, Ofd} from '@skbkontur/logos';
|
|
8
|
-
import {MenuItem
|
|
9
|
-
import {SideMenu} from './index';
|
|
6
|
+
import { getKonturAvatarUrl } from '@skbkontur/react-ui-addons';
|
|
7
|
+
import { Kontur, Ofd } from '@skbkontur/logos';
|
|
8
|
+
import { MenuItem } from '@skbkontur/react-ui';
|
|
9
|
+
import { SideMenu } from './index';
|
|
10
10
|
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
DocTextIcon24Regular,
|
|
12
|
+
CommentRectTextIcon24Regular,
|
|
13
|
+
LightbulbIcon24Regular,
|
|
14
|
+
BookOpenTextIcon24Regular,
|
|
15
|
+
BookmarkIcon24Regular,
|
|
16
|
+
StackHDownIcon24Regular,
|
|
17
|
+
SettingsGearIcon24Regular,
|
|
18
18
|
} from '@skbkontur/icons';
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
const myTheme = ThemeFactory.create({addonsSideMenuHeaderPosition: 'sticky', addonsSideMenuBodyMarginTop: '0px'});
|
|
22
|
-
|
|
23
20
|
<div style={{height: '600px'}}>
|
|
24
|
-
<
|
|
25
|
-
<SideMenu
|
|
26
|
-
|
|
27
|
-
<SideMenu.
|
|
28
|
-
<SideMenu.
|
|
29
|
-
|
|
30
|
-
<SideMenu.SubItem caption={'Исходящие'}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
<SideMenu.
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
21
|
+
<SideMenu>
|
|
22
|
+
<SideMenu.Header konturLogo={<Kontur/>} productLogo={<Ofd/>}/>
|
|
23
|
+
<SideMenu.Body>
|
|
24
|
+
<SideMenu.Item icon={<DocTextIcon24Regular/>} caption={'Документы к подписанию'} marker={'новое'}>
|
|
25
|
+
<SideMenu.SubItem caption={'Входящие'}/>
|
|
26
|
+
<SideMenu.SubItem caption={'Исходящие'} marker={'2'}>
|
|
27
|
+
<SideMenu.SubItem caption={'Исходящие1'}/>
|
|
28
|
+
<SideMenu.SubItem caption={'Исходящие2'}/>
|
|
29
|
+
</SideMenu.SubItem>
|
|
30
|
+
<SideMenu.SubItem caption={'Внутренние'}/>
|
|
31
|
+
<SideMenu.SubItem caption={'Черновики'}/>
|
|
32
|
+
<SideMenu.SubItem caption={'Удаленные'}/>
|
|
33
|
+
<SideMenu.SubItemHeader>Согласованные</SideMenu.SubItemHeader>
|
|
34
|
+
<SideMenu.SubItem caption={'Требуют обработки'}/>
|
|
35
|
+
<SideMenu.SubItem caption={'Обработанные'}/>
|
|
36
|
+
</SideMenu.Item>
|
|
37
|
+
<SideMenu.Item caption={'Контрагенты'}/>
|
|
38
|
+
<SideMenu.Item icon={<CommentRectTextIcon24Regular/>} caption={'Сообщения'} marker={'5'}>
|
|
39
|
+
<SideMenu.SubItem caption={'Входящие'} marker={'5'}/>
|
|
40
|
+
<SideMenu.SubItem caption={'Исходящие'}/>
|
|
41
|
+
<SideMenu.SubItem caption={'Внутренние'}/>
|
|
42
|
+
<SideMenu.SubItem caption={'Черновики'}/>
|
|
43
|
+
<SideMenu.SubItem caption={'Удаленные'}/>
|
|
44
|
+
</SideMenu.Item>
|
|
45
|
+
<SideMenu.Item icon={<LightbulbIcon24Regular/>} caption={'Справочная'}/>
|
|
46
|
+
<SideMenu.Divider/>
|
|
47
|
+
<SideMenu.Item icon={<BookOpenTextIcon24Regular/>} caption={'Еще раздел'}/>
|
|
48
|
+
<SideMenu.Item icon={<BookmarkIcon24Regular/>} caption={'Отчетность'}/>
|
|
49
|
+
</SideMenu.Body>
|
|
50
|
+
<SideMenu.Footer>
|
|
51
|
+
<SideMenu.Organisations icon={<StackHDownIcon24Regular/>}>
|
|
52
|
+
<MenuItem>СКБ Контур</MenuItem>
|
|
53
|
+
<MenuItem>Сириус Базинес</MenuItem>
|
|
54
|
+
<MenuItem>Контур НТТ</MenuItem>
|
|
55
|
+
<MenuItem>Промэлектроника</MenuItem>
|
|
50
56
|
<SideMenu.Divider/>
|
|
51
|
-
<
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
<SideMenu.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
/>
|
|
70
|
-
</SideMenu.Footer>
|
|
71
|
-
</SideMenu>
|
|
72
|
-
</ThemeContext.Provider>
|
|
57
|
+
<MenuItem>Список организаций</MenuItem>
|
|
58
|
+
</SideMenu.Organisations>
|
|
59
|
+
<SideMenu.Item icon={<SettingsGearIcon24Regular/>} caption={'Реквизиты и настройки'}/>
|
|
60
|
+
<SideMenu.Avatar
|
|
61
|
+
userName={'Ишматова Елена'}
|
|
62
|
+
avatarUrl={getKonturAvatarUrl({
|
|
63
|
+
userId: '992408aa-050e-41e9-9a48-6bf2f2f20d94'
|
|
64
|
+
})}
|
|
65
|
+
>
|
|
66
|
+
<MenuItem href={'https://cabinet.kontur.ru'} target="_blank">
|
|
67
|
+
Личный кабинет
|
|
68
|
+
</MenuItem>
|
|
69
|
+
<MenuItem >Безопасность</MenuItem>
|
|
70
|
+
<SideMenu.Divider />
|
|
71
|
+
<MenuItem >Выйти</MenuItem>
|
|
72
|
+
</SideMenu.Avatar>
|
|
73
|
+
</SideMenu.Footer>
|
|
74
|
+
</SideMenu>
|
|
73
75
|
</div>
|
|
74
76
|
```
|
|
75
77
|
|
|
@@ -78,16 +80,11 @@ SideMenu с меню второго уровня в отдельной коло
|
|
|
78
80
|
```jsx harmony
|
|
79
81
|
import { getKonturAvatarUrl } from '@skbkontur/react-ui-addons';
|
|
80
82
|
import { Buhgalteria, Kontur } from '@skbkontur/logos';
|
|
81
|
-
import { MenuItem,
|
|
83
|
+
import { MenuItem, Modal, Input } from '@skbkontur/react-ui';
|
|
82
84
|
import { SideMenu } from './index';
|
|
83
85
|
import {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
DoubleCheckIcon24Regular,
|
|
87
|
-
QuestionSquareIcon24Regular,
|
|
88
|
-
DivideCircleIcon24Regular,
|
|
89
|
-
PlusSquareIcon24Regular,
|
|
90
|
-
WarningTriangleIcon24Regular
|
|
86
|
+
StackHDownIcon24Regular,
|
|
87
|
+
SettingsGearIcon24Regular,
|
|
91
88
|
} from '@skbkontur/icons';
|
|
92
89
|
|
|
93
90
|
const [opened, setOpened] = React.useState(false);
|
|
@@ -113,74 +110,73 @@ const renderModal = () => {
|
|
|
113
110
|
);
|
|
114
111
|
}
|
|
115
112
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
<
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
</SideMenu.SubItemButtons>
|
|
128
|
-
<SideMenu.SubItem caption={'Входящие'} marker={'5'}>
|
|
129
|
-
<SideMenu.SubItem caption={'Входящие бла-бла-бла'}>
|
|
130
|
-
<SideMenu.SubItem caption={'Входящие11'}>
|
|
131
|
-
<SideMenu.SubItem caption={'Входящие111'}/>
|
|
132
|
-
<SideMenu.SubItem caption={'Входящие112'}/>
|
|
133
|
-
<SideMenu.SubItem caption={'Входящие113'}/>
|
|
134
|
-
</SideMenu.SubItem>
|
|
135
|
-
<SideMenu.SubItem caption={'Входящие12'}/>
|
|
136
|
-
<SideMenu.SubItem caption={'Входящие13'}/>
|
|
113
|
+
<div style={{height: '600px', width: '100%'}}>
|
|
114
|
+
<SideMenu isSeparatedMenu={true}>
|
|
115
|
+
<SideMenu.Header konturLogo={<Kontur/>} productLogo={<Buhgalteria/>}/>
|
|
116
|
+
<SideMenu.Body>
|
|
117
|
+
<SideMenu.Item caption={'Документы'} marker={'новое'}>
|
|
118
|
+
<SideMenu.SubItem caption={'Входящие'} marker={'5'}>
|
|
119
|
+
<SideMenu.SubItem caption={'Входящие бла-бла-бла'}>
|
|
120
|
+
<SideMenu.SubItem caption={'Входящие11'}>
|
|
121
|
+
<SideMenu.SubItem caption={'Входящие111'}/>
|
|
122
|
+
<SideMenu.SubItem caption={'Входящие112'}/>
|
|
123
|
+
<SideMenu.SubItem caption={'Входящие113'}/>
|
|
137
124
|
</SideMenu.SubItem>
|
|
138
|
-
<SideMenu.SubItem caption={'Входящие
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
<SideMenu.SubItem caption={'Входящие
|
|
145
|
-
<SideMenu.SubItem caption={'Входящие
|
|
125
|
+
<SideMenu.SubItem caption={'Входящие12'}/>
|
|
126
|
+
<SideMenu.SubItem caption={'Входящие13'}/>
|
|
127
|
+
</SideMenu.SubItem>
|
|
128
|
+
<SideMenu.SubItem caption={'Входящие2'}>
|
|
129
|
+
<SideMenu.SubItem caption={'Входящие21'}>
|
|
130
|
+
<SideMenu.SubItem caption={'Входящие211'}/>
|
|
131
|
+
<SideMenu.SubItem caption={'Входящие212'}/>
|
|
132
|
+
<SideMenu.SubItem caption={'Входящие213'}/>
|
|
146
133
|
</SideMenu.SubItem>
|
|
147
|
-
<SideMenu.SubItem caption={'Входящие
|
|
134
|
+
<SideMenu.SubItem caption={'Входящие22'}/>
|
|
135
|
+
<SideMenu.SubItem caption={'Входящие23'}/>
|
|
148
136
|
</SideMenu.SubItem>
|
|
149
|
-
<SideMenu.SubItem caption={'
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
<SideMenu.
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
<SideMenu.
|
|
137
|
+
<SideMenu.SubItem caption={'Входящие3'}/>
|
|
138
|
+
</SideMenu.SubItem>
|
|
139
|
+
<SideMenu.SubItem caption={'Исходящие'}/>
|
|
140
|
+
<SideMenu.SubItem caption={'Внутренние'}/>
|
|
141
|
+
<SideMenu.SubItem caption={'Черновики'}/>
|
|
142
|
+
<SideMenu.SubItem caption={'Удаленные'}/>
|
|
143
|
+
<SideMenu.SubItemHeader>Согласованные</SideMenu.SubItemHeader>
|
|
144
|
+
<SideMenu.SubItem caption={'Требуют обработки'}/>
|
|
145
|
+
<SideMenu.SubItem caption={'Обработанные'}/>
|
|
146
|
+
</SideMenu.Item>
|
|
147
|
+
<SideMenu.Item caption={'Контрагенты'}/>
|
|
148
|
+
<SideMenu.Item caption={'Сообщения'} marker={'5'}>
|
|
149
|
+
<SideMenu.SubItem caption={'Входящие'} marker={'5'}/>
|
|
150
|
+
<SideMenu.SubItem caption={'Исходящие'}/>
|
|
151
|
+
<SideMenu.SubItem caption={'Внутренние'}/>
|
|
152
|
+
<SideMenu.SubItem caption={'Черновики'}/>
|
|
153
|
+
<SideMenu.SubItem caption={'Удаленные'}/>
|
|
154
|
+
</SideMenu.Item>
|
|
155
|
+
<SideMenu.Item caption={'Справочная'}/>
|
|
156
|
+
<SideMenu.Divider />
|
|
157
|
+
<SideMenu.Item caption={'Еще раздел'}/>
|
|
158
|
+
<SideMenu.Item caption={'Отчетность'}/>
|
|
159
|
+
</SideMenu.Body>
|
|
160
|
+
<SideMenu.Footer>
|
|
161
|
+
<div>
|
|
162
|
+
{opened && renderModal()}
|
|
163
|
+
<SideMenu.Item icon={<StackHDownIcon24Regular/>} caption={'СКБ Контур'} onClick={open}/>
|
|
164
|
+
</div>
|
|
165
|
+
<SideMenu.Item icon={<SettingsGearIcon24Regular/>} caption={'Реквизиты и настройки'}/>
|
|
166
|
+
<SideMenu.Avatar
|
|
167
|
+
userName={'Ишматова Елена'}
|
|
168
|
+
avatarUrl={getKonturAvatarUrl({
|
|
169
|
+
userId: '992408aa-050e-41e9-9a48-6bf2f2f20d94'
|
|
170
|
+
})}
|
|
171
|
+
>
|
|
172
|
+
<MenuItem href={'https://cabinet.kontur.ru'} target="_blank">
|
|
173
|
+
Личный кабинет
|
|
174
|
+
</MenuItem>
|
|
175
|
+
<MenuItem >Безопасность</MenuItem>
|
|
166
176
|
<SideMenu.Divider />
|
|
167
|
-
<
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
<div>
|
|
172
|
-
{opened && renderModal()}
|
|
173
|
-
<SideMenu.Item icon={<PlusSquareIcon24Regular/>} caption={'СКБ Контур'} _onClick={open}/>
|
|
174
|
-
</div>
|
|
175
|
-
<SideMenu.Item icon={<WarningTriangleIcon24Regular/>} caption={'Реквизиты и настройки'}/>
|
|
176
|
-
<SideMenu.Avatar
|
|
177
|
-
userName={'Ишматова Елена'}
|
|
178
|
-
avatarUrl={getKonturAvatarUrl({
|
|
179
|
-
userId: '992408aa-050e-41e9-9a48-6bf2f2f20d94'
|
|
180
|
-
})}
|
|
181
|
-
/>
|
|
182
|
-
</SideMenu.Footer>
|
|
183
|
-
</SideMenu>
|
|
184
|
-
</ThemeContext.Provider>
|
|
177
|
+
<MenuItem >Выйти</MenuItem>
|
|
178
|
+
</SideMenu.Avatar>
|
|
179
|
+
</SideMenu.Footer>
|
|
180
|
+
</SideMenu>
|
|
185
181
|
</div>
|
|
186
182
|
```
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skbkontur/side-menu",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"@skbkontur/react-ui": "4.0.0"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@skbkontur/
|
|
26
|
+
"@skbkontur/icons": "0.6.2",
|
|
27
27
|
"tslib": "^1"
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface InnerSubMenuProps {
|
|
3
|
+
children?: React.ReactNode;
|
|
4
|
+
id: string;
|
|
5
|
+
}
|
|
6
|
+
declare const InnerSubMenuWithStaticFields: React.ForwardRefExoticComponent<InnerSubMenuProps & React.RefAttributes<HTMLDivElement>> & {
|
|
7
|
+
__KONTUR_REACT_UI__: string;
|
|
8
|
+
};
|
|
9
|
+
export { InnerSubMenuWithStaticFields as InnerSubMenu };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Подменю, раскрывающееся внутри основного меню
|
|
4
|
+
*
|
|
5
|
+
* @visibleName InnerSubMenu
|
|
6
|
+
*/
|
|
7
|
+
var InnerSubMenu = forwardRef(function (_a, ref) {
|
|
8
|
+
var children = _a.children, id = _a.id;
|
|
9
|
+
return (React.createElement(React.Fragment, null, React.Children.map(children, function (child) {
|
|
10
|
+
if (React.isValidElement(child)) {
|
|
11
|
+
return React.cloneElement(child, { parent: id, ref: ref });
|
|
12
|
+
}
|
|
13
|
+
return child;
|
|
14
|
+
})));
|
|
15
|
+
});
|
|
16
|
+
InnerSubMenu.displayName = 'InnerSubMenu';
|
|
17
|
+
var InnerSubMenuWithStaticFields = Object.assign(InnerSubMenu, { __KONTUR_REACT_UI__: 'InnerSubMenu' });
|
|
18
|
+
export { InnerSubMenuWithStaticFields as InnerSubMenu };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface RightBorderProps {
|
|
3
|
+
setIsMinimised: (value: boolean) => void;
|
|
4
|
+
}
|
|
5
|
+
declare const RightBorderWithStaticFields: React.ForwardRefExoticComponent<RightBorderProps & React.RefAttributes<HTMLDivElement>> & {
|
|
6
|
+
__KONTUR_REACT_UI__: string;
|
|
7
|
+
};
|
|
8
|
+
export { RightBorderWithStaticFields as RightBorder };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import React, { forwardRef, useContext, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
3
|
+
import { customStyles, jsStyles } from './SideMenu.styles';
|
|
4
|
+
import { SideMenuContext } from './SideMenuContext';
|
|
5
|
+
/**
|
|
6
|
+
* Элемент интерактивной правой границы
|
|
7
|
+
*
|
|
8
|
+
* @visibleName RightBorder
|
|
9
|
+
*/
|
|
10
|
+
var RightBorder = forwardRef(function (_a, ref) {
|
|
11
|
+
var _b;
|
|
12
|
+
var setIsMinimised = _a.setIsMinimised;
|
|
13
|
+
var context = useContext(SideMenuContext);
|
|
14
|
+
var resizeTimer = null;
|
|
15
|
+
var _c = useState(false), isAbleToResize = _c[0], setIsAbleToResize = _c[1];
|
|
16
|
+
var rightBorderRef = useRef(null);
|
|
17
|
+
var handleMouseEnter = function () {
|
|
18
|
+
resizeTimer = setTimeout(function () {
|
|
19
|
+
setIsAbleToResize(true);
|
|
20
|
+
}, 500);
|
|
21
|
+
};
|
|
22
|
+
var handleMouseLeave = function () {
|
|
23
|
+
if (resizeTimer) {
|
|
24
|
+
clearTimeout(resizeTimer);
|
|
25
|
+
}
|
|
26
|
+
setIsAbleToResize(false);
|
|
27
|
+
};
|
|
28
|
+
var isMouseDown = false, startX = 0;
|
|
29
|
+
var checkStart = function (event) {
|
|
30
|
+
startX = event.pageX;
|
|
31
|
+
isMouseDown = true;
|
|
32
|
+
};
|
|
33
|
+
var checkMove = function (event) {
|
|
34
|
+
if (!isMouseDown) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (event.pageX < startX && isAbleToResize) {
|
|
38
|
+
setIsMinimised(true);
|
|
39
|
+
}
|
|
40
|
+
return;
|
|
41
|
+
};
|
|
42
|
+
var checkEnd = function () {
|
|
43
|
+
isMouseDown = false;
|
|
44
|
+
};
|
|
45
|
+
var swipe = function (rightBorder) {
|
|
46
|
+
if (rightBorder) {
|
|
47
|
+
rightBorder.addEventListener('mousedown', checkStart);
|
|
48
|
+
rightBorder.addEventListener('mousemove', checkMove);
|
|
49
|
+
document.addEventListener('mouseup', checkEnd);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
useEffect(function () {
|
|
53
|
+
if (rightBorderRef.current) {
|
|
54
|
+
swipe(rightBorderRef.current);
|
|
55
|
+
}
|
|
56
|
+
return function () {
|
|
57
|
+
if (rightBorderRef.current) {
|
|
58
|
+
rightBorderRef.current.removeEventListener('mousedown', checkStart, true);
|
|
59
|
+
rightBorderRef.current.removeEventListener('mousemove', checkMove, true);
|
|
60
|
+
}
|
|
61
|
+
document.removeEventListener('mouseup', checkEnd, true);
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
return (React.createElement("div", { className: cx((_b = {},
|
|
65
|
+
_b[jsStyles.rightBorder()] = true,
|
|
66
|
+
_b[jsStyles.resizableRightBorder()] = isAbleToResize,
|
|
67
|
+
_b)), ref: rightBorderRef || ref, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave }, isAbleToResize && React.createElement("div", { className: customStyles.rightBorderHovered(context.productColor) })));
|
|
68
|
+
});
|
|
69
|
+
RightBorder.displayName = 'RightBorder';
|
|
70
|
+
var RightBorderWithStaticFields = Object.assign(RightBorder, { __KONTUR_REACT_UI__: 'RightBorder' });
|
|
71
|
+
export { RightBorderWithStaticFields as RightBorder };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface SeparatedSubMenuProps {
|
|
3
|
+
children?: React.ReactNode;
|
|
4
|
+
}
|
|
5
|
+
declare const SeparatedSubMenuWithStaticFields: React.ForwardRefExoticComponent<SeparatedSubMenuProps & React.RefAttributes<HTMLDivElement>> & {
|
|
6
|
+
__KONTUR_REACT_UI__: string;
|
|
7
|
+
};
|
|
8
|
+
export { SeparatedSubMenuWithStaticFields as SeparatedSubMenu };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { __assign } from "tslib";
|
|
2
|
+
import React, { forwardRef, useContext } from 'react';
|
|
3
|
+
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
4
|
+
import { jsStyles } from './SideMenu.styles';
|
|
5
|
+
import { SideMenuContext } from './SideMenuContext';
|
|
6
|
+
/**
|
|
7
|
+
* Отдельностоящее подменю
|
|
8
|
+
*
|
|
9
|
+
* @visibleName SeparatedSubMenu
|
|
10
|
+
*/
|
|
11
|
+
var SeparatedSubMenu = forwardRef(function (_a, ref) {
|
|
12
|
+
var _b;
|
|
13
|
+
var children = _a.children;
|
|
14
|
+
var context = useContext(SideMenuContext);
|
|
15
|
+
var isSubItemWithChildren = function (child) {
|
|
16
|
+
// @ts-expect-error: accessing private property
|
|
17
|
+
return (child === null || child === void 0 ? void 0 : child.type.__KONTUR_REACT_UI__) === 'SideMenuSubItem' && child.props.children;
|
|
18
|
+
};
|
|
19
|
+
var hasSubItems = function (children) {
|
|
20
|
+
return React.Children.toArray(children).some(function (child) {
|
|
21
|
+
if (React.isValidElement(child)) {
|
|
22
|
+
return isSubItemWithChildren(child);
|
|
23
|
+
}
|
|
24
|
+
return child;
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
return (React.createElement("div", { className: cx((_b = {}, _b[jsStyles.root()] = true, _b[jsStyles.separatedMenu()] = true, _b)), ref: ref },
|
|
28
|
+
React.createElement(SideMenuContext.Provider, { value: __assign({ hasSubIcons: hasSubItems(children) }, context) }, React.Children.map(children, function (child) {
|
|
29
|
+
if (React.isValidElement(child)) {
|
|
30
|
+
// @ts-expect-error: accessing private property
|
|
31
|
+
if ((child === null || child === void 0 ? void 0 : child.type.__KONTUR_REACT_UI__) === 'SideMenuSubItemHeader' && !hasSubItems(children)) {
|
|
32
|
+
return React.cloneElement(child, {
|
|
33
|
+
className: jsStyles.subItemHeaderWithoutIcons(),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return child;
|
|
37
|
+
}
|
|
38
|
+
}))));
|
|
39
|
+
});
|
|
40
|
+
SeparatedSubMenu.displayName = 'SeparatedSubMenu';
|
|
41
|
+
var SeparatedSubMenuWithStaticFields = Object.assign(SeparatedSubMenu, { __KONTUR_REACT_UI__: 'SeparatedSubMenu' });
|
|
42
|
+
export { SeparatedSubMenuWithStaticFields as SeparatedSubMenu };
|
package/src/SideMenu.d.ts
CHANGED
|
@@ -1,60 +1,33 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { CommonProps } from '@skbkontur/react-ui/internal/CommonWrapper';
|
|
3
3
|
import { SideMenuOrganisations } from './SideMenuOrganisations';
|
|
4
|
+
import { SideMenuBody } from './SideMenuBody';
|
|
5
|
+
import { SideMenuFooter } from './SideMenuFooter';
|
|
4
6
|
import { SideMenuHeader } from './SideMenuHeader';
|
|
5
7
|
import { SideMenuItem } from './SideMenuItem';
|
|
6
8
|
import { SideMenuAvatar } from './SideMenuAvatar';
|
|
7
9
|
import { SideMenuSubItem } from './SideMenuSubItem';
|
|
8
10
|
import { SideMenuDivider } from './SideMenuDivider';
|
|
9
11
|
import { SideMenuSubItemHeader } from './SideMenuSubItemHeader';
|
|
10
|
-
|
|
11
|
-
import { SideMenuDropdownMenuSeparator } from './SideMenuDropdownMenuSeparator';
|
|
12
|
-
declare type SideMenuInterface = {
|
|
12
|
+
export interface SideMenuProps extends CommonProps {
|
|
13
13
|
children?: React.ReactNode;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
size: 'small' | 'large';
|
|
17
|
-
isSeparatedMenu: boolean;
|
|
18
|
-
};
|
|
19
|
-
export declare type SideMenuProps = SideMenuInterface & Partial<DefaultProps>;
|
|
20
|
-
declare type SideMenuComponentProps = SideMenuInterface & DefaultProps;
|
|
21
|
-
declare type SideMenuState = {
|
|
22
|
-
isMinimised: boolean;
|
|
23
|
-
isAbleToResize: boolean;
|
|
24
|
-
activeItem: Nullable<React.ReactNode>;
|
|
25
|
-
activeSubItem: Nullable<React.ReactNode>;
|
|
26
|
-
hasScrollBar: boolean;
|
|
27
|
-
isTransitioned: boolean;
|
|
28
|
-
};
|
|
29
|
-
export declare class SideMenu extends React.Component<SideMenuComponentProps, SideMenuState> {
|
|
30
|
-
static __KONTUR_REACT_UI__: string;
|
|
31
|
-
private scrollTimer;
|
|
32
|
-
private transitionTimer;
|
|
33
|
-
static defaultProps: DefaultProps;
|
|
34
|
-
constructor(props: SideMenuComponentProps);
|
|
35
|
-
componentDidMount(): void;
|
|
36
|
-
componentWillUnmount(): void;
|
|
37
|
-
static Body: React.FC<import("./SideMenuBody").SideMenuBodyProps>;
|
|
38
|
-
static Footer: React.FC<import("./SideMenuFooter").SideMenuFooterProps>;
|
|
39
|
-
static Header: typeof SideMenuHeader;
|
|
40
|
-
static Item: typeof SideMenuItem;
|
|
41
|
-
static SubItem: typeof SideMenuSubItem;
|
|
42
|
-
static SubItemHeader: typeof SideMenuSubItemHeader;
|
|
43
|
-
static Avatar: typeof SideMenuAvatar;
|
|
44
|
-
static Organisations: typeof SideMenuOrganisations;
|
|
45
|
-
static Divider: typeof SideMenuDivider;
|
|
46
|
-
static SubItemButtons: typeof SideMenuSubItemButtons;
|
|
47
|
-
static DropdownMenuSeparator: typeof SideMenuDropdownMenuSeparator;
|
|
48
|
-
private resizeTimer;
|
|
49
|
-
private readonly rightBorderRef;
|
|
50
|
-
render(): JSX.Element;
|
|
51
|
-
private renderMain;
|
|
52
|
-
private setActiveItem;
|
|
53
|
-
private setActiveSubItem;
|
|
54
|
-
private handleMouseEnter;
|
|
55
|
-
private handleMouseLeave;
|
|
56
|
-
private showMinimisedRoot;
|
|
57
|
-
private handleScroll;
|
|
58
|
-
private swipe;
|
|
14
|
+
size?: 'small' | 'large';
|
|
15
|
+
isSeparatedMenu?: boolean;
|
|
59
16
|
}
|
|
60
|
-
|
|
17
|
+
interface SubComponents {
|
|
18
|
+
Body: typeof SideMenuBody;
|
|
19
|
+
Footer: typeof SideMenuFooter;
|
|
20
|
+
Header: typeof SideMenuHeader;
|
|
21
|
+
Item: typeof SideMenuItem;
|
|
22
|
+
SubItem: typeof SideMenuSubItem;
|
|
23
|
+
SubItemHeader: typeof SideMenuSubItemHeader;
|
|
24
|
+
Avatar: typeof SideMenuAvatar;
|
|
25
|
+
Organisations: typeof SideMenuOrganisations;
|
|
26
|
+
Divider: typeof SideMenuDivider;
|
|
27
|
+
__KONTUR_REACT_UI__: string;
|
|
28
|
+
}
|
|
29
|
+
export declare const SideMenuDataTids: {
|
|
30
|
+
root: string;
|
|
31
|
+
};
|
|
32
|
+
declare const SideMenuWithStaticFields: React.ForwardRefExoticComponent<SideMenuProps & React.RefAttributes<HTMLElement>> & SubComponents;
|
|
33
|
+
export { SideMenuWithStaticFields as SideMenu };
|