@skbkontur/side-menu 1.12.9 → 2.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 +32 -0
- package/README.md +61 -195
- package/SideMenuDataTids.d.ts +1 -0
- package/SideMenuDataTids.js +1 -0
- package/hooks/useAnimateOnMount.js +3 -2
- package/lib/theming/ThemeHelpers.js +14 -3
- package/lib/utils/scripts.d.ts +2 -10
- package/lib/utils/scripts.js +3 -75
- package/package.json +2 -2
- package/src/Navigation.d.ts +50 -0
- package/src/Navigation.js +150 -0
- package/src/SideMenu/SideMenu.d.ts +8 -0
- package/src/SideMenu/SideMenu.js +53 -34
- package/src/SideMenu/SideMenu.styles.d.ts +1 -0
- package/src/SideMenu/SideMenu.styles.js +5 -2
- package/src/SideMenuBody/SideMenuBody.js +7 -9
- package/src/SideMenuContext.d.ts +2 -9
- package/src/SideMenuDropdown/SideMenuDropdown.d.ts +1 -3
- package/src/SideMenuDropdown/SideMenuDropdown.js +1 -1
- package/src/SideMenuFooter/SideMenuFooter.js +3 -11
- package/src/SideMenuHeader/SideMenuHeader.js +3 -2
- package/src/SideMenuSubItem/SideMenuSubItem.js +3 -16
- package/src/SideMenuSubLink/SideMenuSubLink.js +4 -17
- package/src/Tree.d.ts +17 -0
- package/src/Tree.js +133 -0
- package/src/internal/BackButton.d.ts +0 -1
- package/src/internal/BackButton.js +3 -15
- package/src/internal/ClickableElement.d.ts +1 -5
- package/src/internal/ClickableElement.js +48 -45
- package/src/internal/InnerSubMenu.d.ts +1 -1
- package/src/internal/InnerSubMenu.js +10 -19
- package/src/internal/ItemContent/Caption.d.ts +2 -1
- package/src/internal/ItemContent/Caption.js +6 -5
- package/src/internal/ItemContent/ItemContent.d.ts +3 -1
- package/src/internal/ItemContent/ItemContent.js +6 -4
- package/src/internal/NestedMenu.d.ts +2 -2
- package/src/internal/NestedMenu.js +6 -16
- package/src/internal/SeparatedSubMenu.d.ts +2 -3
- package/src/internal/SeparatedSubMenu.js +17 -43
- package/src/internal/SideMenuLogotype.js +3 -3
- package/src/internal/SubMenu.d.ts +1 -4
- package/src/internal/SubMenu.js +8 -10
- package/hooks/useActiveState.d.ts +0 -1
- package/hooks/useActiveState.js +0 -12
- package/hooks/useOpenedState.d.ts +0 -2
- package/hooks/useOpenedState.js +0 -14
- package/hooks/useOpenedSubElementState.d.ts +0 -1
- package/hooks/useOpenedSubElementState.js +0 -12
- package/src/internal/InnerBody.d.ts +0 -14
- package/src/internal/InnerBody.js +0 -108
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,38 @@
|
|
|
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
|
+
## [2.0.2](https://git.skbkontur.ru/ui/ui-parking/compare/@skbkontur/side-menu@2.0.0...@skbkontur/side-menu@2.0.2) (2024-07-18)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @skbkontur/side-menu
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [2.0.1](https://git.skbkontur.ru/ui/ui-parking/compare/@skbkontur/side-menu@2.0.0...@skbkontur/side-menu@2.0.1) (2024-07-18)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @skbkontur/side-menu
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# [2.0.0](https://git.skbkontur.ru/ui/ui-parking/compare/@skbkontur/side-menu@1.12.9...@skbkontur/side-menu@2.0.0) (2024-07-09)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Features
|
|
26
|
+
|
|
27
|
+
* allow menu items at any level ([cfb1705](https://git.skbkontur.ru/ui/ui-parking/commits/cfb170500cb475b4601525e6bd74c121388e2da5))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
### BREAKING CHANGES
|
|
31
|
+
|
|
32
|
+
* allow menu items at any level
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
6
38
|
## [1.12.9](https://git.skbkontur.ru/ui/ui-parking/compare/@skbkontur/side-menu@1.12.8...@skbkontur/side-menu@1.12.9) (2024-06-07)
|
|
7
39
|
|
|
8
40
|
**Note:** Version bump only for package @skbkontur/side-menu
|
package/README.md
CHANGED
|
@@ -202,6 +202,9 @@ const renderModal = () => {
|
|
|
202
202
|
```
|
|
203
203
|
|
|
204
204
|
SideMenu с ручным управлением.
|
|
205
|
+
|
|
206
|
+
Для управления активным пунктом меню используйте проп `activeItem`.
|
|
207
|
+
|
|
205
208
|
Для `SideMenu.Link` при отсутствии `id` будет использован `href`
|
|
206
209
|
|
|
207
210
|
```jsx harmony
|
|
@@ -247,203 +250,66 @@ const items = [
|
|
|
247
250
|
"https://google.com"
|
|
248
251
|
];
|
|
249
252
|
|
|
250
|
-
<div style={{height: '600px', display: 'flex', position: 'relative'}}>
|
|
253
|
+
<div style={{ height: '600px', display: 'flex', position: 'relative' }}>
|
|
251
254
|
<ThemeContext.Provider value={ThemeFactory.create({ sideMenuProductColor: '#64b419' }, THEME_2022)}>
|
|
252
|
-
<SideMenu
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
</SideMenu>
|
|
307
|
-
|
|
308
|
-
<div style={isSeparatedMenu? {position: 'absolute', left: '464px'}:{}}>
|
|
309
|
-
<p>Active Item: {activeItem}</p>
|
|
310
|
-
<Select items={items} value={activeItem} onValueChange={setActiveItem} />
|
|
311
|
-
<Switcher
|
|
312
|
-
caption="isSeparatedMenu: "
|
|
313
|
-
items={[
|
|
314
|
-
{
|
|
315
|
-
label: 'True',
|
|
316
|
-
value: true,
|
|
317
|
-
},
|
|
318
|
-
{
|
|
319
|
-
label: 'False',
|
|
320
|
-
value: false,
|
|
321
|
-
}
|
|
322
|
-
]
|
|
323
|
-
}
|
|
324
|
-
value={isSeparatedMenu}
|
|
325
|
-
onValueChange={setIsSeparatedMenu}
|
|
326
|
-
/>
|
|
327
|
-
</div>
|
|
328
|
-
</div>
|
|
329
|
-
```
|
|
330
|
-
|
|
331
|
-
Если не хочется передавать свой `id`, то для ручного управления можно воспользоваться автоматически сгенерированными айдишниками. А также комбинировать свои `id` с автоматически сгенерированными.
|
|
332
|
-
|
|
333
|
-
Автоматическая генерация айдишников происходит по следующей схеме:
|
|
334
|
-
элементы меню первого уровня получают `id` равный `body-x`, где `x` - индекс элемента.
|
|
335
|
-
Элементы меню следующих уровней добавляют свой индекс: `body-x-y`.
|
|
336
|
-
|
|
337
|
-
Например, в пункте `Документы к подписанию` передан проп `id='documents'`, а также есть автоматически сгенерированный `id='body-0'`. Управлять можно по любому из них.
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
```jsx harmony
|
|
341
|
-
import { useState } from 'react';
|
|
342
|
-
import { getKonturAvatarUrl } from '@skbkontur/react-ui-addons';
|
|
343
|
-
import { Kontur, Ofd } from '@skbkontur/logos';
|
|
344
|
-
import { ThemeContext, ThemeFactory, MenuItem, Select, Switcher, MenuSeparator, THEME_2022 } from '@skbkontur/react-ui';
|
|
345
|
-
import { SideMenu } from './index';
|
|
346
|
-
import { DocTextIcon24Regular } from '@skbkontur/icons/icons/DocTextIcon/DocTextIcon24Regular';
|
|
347
|
-
import { CommentRectTextIcon24Regular } from '@skbkontur/icons/icons/CommentRectTextIcon/CommentRectTextIcon24Regular';
|
|
348
|
-
import { LightbulbIcon24Regular } from '@skbkontur/icons/icons/LightbulbIcon/LightbulbIcon24Regular';
|
|
349
|
-
import { BookOpenTextIcon24Regular } from '@skbkontur/icons/icons/BookOpenTextIcon/BookOpenTextIcon24Regular';
|
|
350
|
-
import { BookmarkIcon24Regular } from '@skbkontur/icons/icons/BookmarkIcon/BookmarkIcon24Regular';
|
|
351
|
-
import { StackHDownIcon24Regular } from '@skbkontur/icons/icons/StackHDownIcon/StackHDownIcon24Regular';
|
|
352
|
-
import { SettingsGearIcon24Regular } from '@skbkontur/icons/icons/SettingsGearIcon/SettingsGearIcon24Regular';
|
|
353
|
-
import { FaceAHappyIcon24Regular } from '@skbkontur/icons/icons/FaceAHappyIcon/FaceAHappyIcon24Regular';
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
const [activeItem, setActiveItem] = useState(undefined);
|
|
358
|
-
const [isSeparatedMenu, setIsSeparatedMenu] = useState(false)
|
|
359
|
-
|
|
360
|
-
const items = [
|
|
361
|
-
'body-0',
|
|
362
|
-
'documents',
|
|
363
|
-
'body-0-0',
|
|
364
|
-
'my-id-for-incoming-documents',
|
|
365
|
-
'body-0-1',
|
|
366
|
-
'body-0-1-0',
|
|
367
|
-
'body-0-1-1',
|
|
368
|
-
'body-0-2',
|
|
369
|
-
'body-0-3',
|
|
370
|
-
'body-0-4',
|
|
371
|
-
'body-0-5',
|
|
372
|
-
'body-0-6',
|
|
373
|
-
'body-1',
|
|
374
|
-
'body-2',
|
|
375
|
-
'body-2-0',
|
|
376
|
-
'body-2-1',
|
|
377
|
-
'body-2-2',
|
|
378
|
-
'body-2-3',
|
|
379
|
-
'body-2-4',
|
|
380
|
-
'body-3',
|
|
381
|
-
'body-4',
|
|
382
|
-
'body-5',
|
|
383
|
-
'600',
|
|
384
|
-
'footer-0',
|
|
385
|
-
'footer-1',
|
|
386
|
-
'footer-2',
|
|
387
|
-
];
|
|
388
|
-
|
|
389
|
-
<div style={{height: '600px', display: 'flex', position: 'relative'}}>
|
|
390
|
-
<ThemeContext.Provider value={ThemeFactory.create({ sideMenuProductColor: '#64b419' }, THEME_2022)}>
|
|
391
|
-
<SideMenu value={activeItem} onValueChange={setActiveItem} isSeparatedMenu={isSeparatedMenu}>
|
|
392
|
-
<SideMenu.Header konturLogo={<Kontur/>} productLogo={<Ofd/>} withWidget={false}/>
|
|
393
|
-
<SideMenu.Body>
|
|
394
|
-
<SideMenu.Item icon={<DocTextIcon24Regular/>} caption={'Документы к подписанию'} marker={'2'} id={'documents'}>
|
|
395
|
-
<SideMenu.SubItem caption={'Входящие'} id={'my-id-for-incoming-documents'}/>
|
|
396
|
-
<SideMenu.SubItem caption={'Исходящие'} marker={'2'}>
|
|
397
|
-
<SideMenu.SubItem caption={'Исходящие1'}/>
|
|
398
|
-
<SideMenu.SubItem caption={'Исходящие2'}/>
|
|
399
|
-
</SideMenu.SubItem>
|
|
400
|
-
<SideMenu.SubItem caption={'Внутренние'}/>
|
|
401
|
-
<SideMenu.SubItem caption={'Черновики'}/>
|
|
402
|
-
<SideMenu.SubItem caption={'Удаленные'}/>
|
|
403
|
-
<SideMenu.SubItemHeader>Согласованные</SideMenu.SubItemHeader>
|
|
404
|
-
<SideMenu.SubItem caption={'Требуют обработки'}/>
|
|
405
|
-
<SideMenu.SubItem caption={'Обработанные'}/>
|
|
406
|
-
</SideMenu.Item>
|
|
407
|
-
<SideMenu.Item icon={<FaceAHappyIcon24Regular />} caption={'Контрагенты'}/>
|
|
408
|
-
<SideMenu.Item icon={<CommentRectTextIcon24Regular/>} caption={'Сообщения'} marker={'5'}>
|
|
409
|
-
<SideMenu.SubItem caption={'Входящие'} marker={'5'}/>
|
|
410
|
-
<SideMenu.SubItem caption={'Исходящие'}/>
|
|
411
|
-
<SideMenu.SubItem caption={'Внутренние'}/>
|
|
412
|
-
<SideMenu.SubItem caption={'Черновики'}/>
|
|
413
|
-
<SideMenu.SubItem caption={'Удаленные'}/>
|
|
414
|
-
</SideMenu.Item>
|
|
415
|
-
<SideMenu.Item icon={<LightbulbIcon24Regular/>} caption={'Справочная'}/>
|
|
416
|
-
<SideMenu.Divider />
|
|
417
|
-
<SideMenu.Item icon={<BookOpenTextIcon24Regular/>} caption={'Еще раздел'}/>
|
|
418
|
-
<SideMenu.Item icon={<BookmarkIcon24Regular/>} caption={'Отчетность'} id={'600'}/>
|
|
419
|
-
</SideMenu.Body>
|
|
420
|
-
<SideMenu.Footer>
|
|
421
|
-
<SideMenu.Organisations icon={<StackHDownIcon24Regular/>}>
|
|
422
|
-
<MenuItem>СКБ Контур</MenuItem>
|
|
423
|
-
<MenuItem>Сириус Базинес</MenuItem>
|
|
424
|
-
<MenuItem>Контур НТТ</MenuItem>
|
|
425
|
-
<MenuItem>Промэлектроника</MenuItem>
|
|
426
|
-
<MenuSeparator />
|
|
427
|
-
<MenuItem>Список организаций</MenuItem>
|
|
428
|
-
</SideMenu.Organisations>
|
|
429
|
-
<SideMenu.Item icon={<SettingsGearIcon24Regular/>} caption={'Реквизиты и настройки'}/>
|
|
430
|
-
<SideMenu.Avatar
|
|
431
|
-
userName={'Ишматова Елена'}
|
|
432
|
-
avatarUrl={getKonturAvatarUrl({
|
|
433
|
-
userId: '992408aa-050e-41e9-9a48-6bf2f2f20d94'
|
|
434
|
-
})}
|
|
435
|
-
>
|
|
436
|
-
<MenuItem href={'https://cabinet.kontur.ru'} target="_blank">
|
|
437
|
-
Личный кабинет
|
|
438
|
-
</MenuItem>
|
|
439
|
-
<MenuItem >Безопасность</MenuItem>
|
|
440
|
-
<MenuSeparator />
|
|
441
|
-
<MenuItem >Выйти</MenuItem>
|
|
442
|
-
</SideMenu.Avatar>
|
|
443
|
-
</SideMenu.Footer>
|
|
444
|
-
</SideMenu>
|
|
255
|
+
<SideMenu activeItem={activeItem} onActiveItemChange={setActiveItem} isSeparatedMenu={isSeparatedMenu}>
|
|
256
|
+
<SideMenu.Header konturLogo={<Kontur />} productLogo={<Ofd />} withWidget={false} />
|
|
257
|
+
<SideMenu.Body>
|
|
258
|
+
<SideMenu.Item icon={<DocTextIcon24Regular />} caption={'Документы к подписанию id=100'} marker={'2'} id={'100'}>
|
|
259
|
+
<SideMenu.SubItem caption={'Входящие id=110'} id={'110'} />
|
|
260
|
+
<SideMenu.SubItem caption={'Исходящие id=120'} marker={'2'} id={'120'}>
|
|
261
|
+
<SideMenu.SubItem caption={'Исходящие1 id=121'} id={'121'} />
|
|
262
|
+
<SideMenu.SubItem caption={'Исходящие2 id=122'} id={'122'} />
|
|
263
|
+
</SideMenu.SubItem>
|
|
264
|
+
<SideMenu.SubItem caption={'Внутренние id=130'} id={'130'} />
|
|
265
|
+
<SideMenu.SubItem caption={'Черновики id=140'} id={'140'} />
|
|
266
|
+
<SideMenu.SubItem caption={'Удаленные id=150'} id={'150'} />
|
|
267
|
+
<SideMenu.SubItemHeader>Согласованные</SideMenu.SubItemHeader>
|
|
268
|
+
<SideMenu.SubItem caption={'Требуют обработки id=160'} id={'160'} />
|
|
269
|
+
<SideMenu.SubItem caption={'Обработанные id=170'} id={'170'} />
|
|
270
|
+
</SideMenu.Item>
|
|
271
|
+
<SideMenu.Item icon={<FaceAHappyIcon24Regular />} caption={'Контрагенты id=200'} id={'200'} />
|
|
272
|
+
<SideMenu.Item icon={<CommentRectTextIcon24Regular />} caption={'Сообщения id=300'} marker={'5'} id={'300'}>
|
|
273
|
+
<SideMenu.SubItem caption={'Входящие id=310'} marker={'5'} id={'310'} />
|
|
274
|
+
<SideMenu.SubItem caption={'Исходящие id=320'} id={'320'} />
|
|
275
|
+
<SideMenu.SubItem caption={'Внутренние id=330'} id={'330'} />
|
|
276
|
+
<SideMenu.SubItem caption={'Черновики id=340'} id={'340'} />
|
|
277
|
+
<SideMenu.SubItem caption={'Удаленные id=350'} id={'350'} />
|
|
278
|
+
</SideMenu.Item>
|
|
279
|
+
<SideMenu.Item icon={<LightbulbIcon24Regular />} caption={'Справочная id=400'} id={'400'} />
|
|
280
|
+
<SideMenu.Divider />
|
|
281
|
+
<SideMenu.Item icon={<BookOpenTextIcon24Regular />} caption={'Еще раздел id=500'} id={'500'} />
|
|
282
|
+
<SideMenu.Item icon={<BookmarkIcon24Regular />} caption={'Отчетность id=600'} id={'600'} />
|
|
283
|
+
<SideMenu.Link href={'https://google.com'} icon={<AttachLinkIcon24Regular />} caption={'Ссылка'}
|
|
284
|
+
target={'_blank'} />
|
|
285
|
+
</SideMenu.Body>
|
|
286
|
+
<SideMenu.Footer>
|
|
287
|
+
<SideMenu.Dropdown icon={<StackHDownIcon24Regular />}>
|
|
288
|
+
<MenuItem>СКБ Контур</MenuItem>
|
|
289
|
+
<MenuItem>Сириус Базинес</MenuItem>
|
|
290
|
+
<MenuItem>Контур НТТ</MenuItem>
|
|
291
|
+
<MenuItem>Промэлектроника</MenuItem>
|
|
292
|
+
<MenuSeparator />
|
|
293
|
+
<MenuItem>Список организаций</MenuItem>
|
|
294
|
+
</SideMenu.Dropdown>
|
|
295
|
+
<SideMenu.Item icon={<SettingsGearIcon24Regular />} caption={'Реквизиты и настройки'} />
|
|
296
|
+
<SideMenu.Avatar
|
|
297
|
+
userName={'Ишматова Елена'}
|
|
298
|
+
avatarUrl={getKonturAvatarUrl({
|
|
299
|
+
userId: '992408aa-050e-41e9-9a48-6bf2f2f20d94'
|
|
300
|
+
})}
|
|
301
|
+
>
|
|
302
|
+
<MenuItem href={'https://cabinet.kontur.ru'} target="_blank">
|
|
303
|
+
Личный кабинет
|
|
304
|
+
</MenuItem>
|
|
305
|
+
<MenuItem>Безопасность</MenuItem>
|
|
306
|
+
<MenuSeparator />
|
|
307
|
+
<MenuItem>Выйти</MenuItem>
|
|
308
|
+
</SideMenu.Avatar>
|
|
309
|
+
</SideMenu.Footer>
|
|
310
|
+
</SideMenu>
|
|
445
311
|
</ThemeContext.Provider>
|
|
446
|
-
<div style={isSeparatedMenu? {position: 'absolute', left: '464px'}:{}}>
|
|
312
|
+
<div style={isSeparatedMenu ? { position: 'absolute', left: '464px' } : {}}>
|
|
447
313
|
<p>Active Item: {activeItem}</p>
|
|
448
314
|
<Select items={items} value={activeItem} onValueChange={setActiveItem} />
|
|
449
315
|
<Switcher
|
package/SideMenuDataTids.d.ts
CHANGED
package/SideMenuDataTids.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { __read } from "tslib";
|
|
1
2
|
import { useEffect, useState } from 'react';
|
|
2
3
|
export function useAnimateOnMount(isMounted, delayTime, mountStyles, unmountStyles) {
|
|
3
|
-
var _a = useState(isMounted ? mountStyles : unmountStyles), style = _a[0], setStyle = _a[1];
|
|
4
|
-
var _b = useState(isMounted), shouldShowComponent = _b[0], setShouldShowComponent = _b[1];
|
|
4
|
+
var _a = __read(useState(isMounted ? mountStyles : unmountStyles), 2), style = _a[0], setStyle = _a[1];
|
|
5
|
+
var _b = __read(useState(isMounted), 2), shouldShowComponent = _b[0], setShouldShowComponent = _b[1];
|
|
5
6
|
useEffect(function () {
|
|
6
7
|
var timeoutId;
|
|
7
8
|
if (isMounted) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { __values } from "tslib";
|
|
1
2
|
import { isFunction } from '@skbkontur/react-ui/lib/utils';
|
|
2
3
|
import { memo } from '../utils/memo';
|
|
3
4
|
import { SideMenuThemeInternal, isSideMenuTheme, markAsSideMenuTheme } from '../../internal/themes/SideMenuTheme';
|
|
@@ -12,6 +13,7 @@ import { SideMenuThemeInternal, isSideMenuTheme, markAsSideMenuTheme } from '../
|
|
|
12
13
|
* and using ReactUI's ThemeContext.Provider for overriding them.
|
|
13
14
|
*/
|
|
14
15
|
export var createSideMenuTheme = function (theme) {
|
|
16
|
+
var e_1, _a;
|
|
15
17
|
if (isSideMenuTheme(theme))
|
|
16
18
|
return theme;
|
|
17
19
|
var sideMenuTheme = Object.create(theme, Object.assign(Object.getOwnPropertyDescriptors(SideMenuThemeInternal), {}));
|
|
@@ -28,9 +30,18 @@ export var createSideMenuTheme = function (theme) {
|
|
|
28
30
|
},
|
|
29
31
|
});
|
|
30
32
|
};
|
|
31
|
-
|
|
32
|
-
var
|
|
33
|
-
|
|
33
|
+
try {
|
|
34
|
+
for (var _b = __values(Object.keys(sideMenuTheme)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
35
|
+
var key = _c.value;
|
|
36
|
+
_loop_1(key);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
40
|
+
finally {
|
|
41
|
+
try {
|
|
42
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
43
|
+
}
|
|
44
|
+
finally { if (e_1) throw e_1.error; }
|
|
34
45
|
}
|
|
35
46
|
return markAsSideMenuTheme(sideMenuTheme);
|
|
36
47
|
};
|
package/lib/utils/scripts.d.ts
CHANGED
|
@@ -1,13 +1,5 @@
|
|
|
1
|
-
import React
|
|
2
|
-
import { FlattedArrayElementType } from '../../src/internal/InnerBody';
|
|
3
|
-
export declare const getItemId: (prefix: 'body' | 'footer', id: string | number) => string;
|
|
4
|
-
export declare const isClickableSubElement: (element: string) => boolean;
|
|
5
|
-
export declare const isClickableElement: (element: string) => boolean;
|
|
6
|
-
export declare const getAllParents: (id: string, flattedArrayOfAllElements: FlattedArrayElementType[]) => string[];
|
|
7
|
-
export declare const getChildrenIdArray: (childrenArray: FlattedArrayElementType[], id: string, isIdGenerated?: boolean) => string[];
|
|
8
|
-
export declare const getElementsChildren: (element: ReactElement, levelIndex: string) => FlattedArrayElementType[];
|
|
9
|
-
export declare const isParentOpened: (id: string | undefined, generatedId: string | undefined, openedParents: string[] | undefined) => boolean | "" | undefined;
|
|
10
|
-
export declare const isElementActive: (id: string | undefined, activeMenuItem: string | undefined | null) => boolean;
|
|
1
|
+
import React from 'react';
|
|
11
2
|
export declare const isBrowser: boolean;
|
|
12
3
|
export declare const isTouchDevice: () => boolean;
|
|
13
4
|
export declare const isKonturIcon: (icon: React.ReactElement) => boolean;
|
|
5
|
+
export declare const generateId: () => string;
|
package/lib/utils/scripts.js
CHANGED
|
@@ -1,78 +1,3 @@
|
|
|
1
|
-
import React, { isValidElement } from 'react';
|
|
2
|
-
import { isNonNullable } from '@skbkontur/react-ui/lib/utils';
|
|
3
|
-
export var getItemId = function (prefix, id) {
|
|
4
|
-
return prefix + "-" + id;
|
|
5
|
-
};
|
|
6
|
-
var SideMenuClickableSubElements = ['SideMenuSubItem', 'SideMenuSubLink'];
|
|
7
|
-
export var isClickableSubElement = function (element) {
|
|
8
|
-
return SideMenuClickableSubElements.includes(element);
|
|
9
|
-
};
|
|
10
|
-
var SideMenuClickableElements = ['SideMenuItem', 'SideMenuLink'];
|
|
11
|
-
export var isClickableElement = function (element) {
|
|
12
|
-
return SideMenuClickableElements.includes(element);
|
|
13
|
-
};
|
|
14
|
-
export var getAllParents = function (id, flattedArrayOfAllElements) {
|
|
15
|
-
var parentsArray = [];
|
|
16
|
-
var element = flattedArrayOfAllElements.find(function (element) { return element.id === id || element.generatedId === id; });
|
|
17
|
-
if (element && element.id && isNonNullable(element.parentId)) {
|
|
18
|
-
parentsArray.push(element.parentId);
|
|
19
|
-
parentsArray.push.apply(parentsArray, getAllParents(element.parentId, flattedArrayOfAllElements));
|
|
20
|
-
}
|
|
21
|
-
else if (element && isNonNullable(element.generatedParentId)) {
|
|
22
|
-
parentsArray.push(element.generatedParentId);
|
|
23
|
-
parentsArray.push.apply(parentsArray, getAllParents(element.generatedParentId, flattedArrayOfAllElements));
|
|
24
|
-
}
|
|
25
|
-
return parentsArray;
|
|
26
|
-
};
|
|
27
|
-
export var getChildrenIdArray = function (childrenArray, id, isIdGenerated) {
|
|
28
|
-
if (isIdGenerated === void 0) { isIdGenerated = false; }
|
|
29
|
-
var parentId = isIdGenerated ? 'generatedParentId' : 'parentId';
|
|
30
|
-
var childId = isIdGenerated ? 'generatedId' : 'id';
|
|
31
|
-
return childrenArray.filter(function (el) { return el[parentId] === id; }).map(function (el) { return el[childId]; });
|
|
32
|
-
};
|
|
33
|
-
export var getElementsChildren = function (element, levelIndex) {
|
|
34
|
-
var childrenArray = [];
|
|
35
|
-
if (element.props.children) {
|
|
36
|
-
var childLevelIndex_1 = 0;
|
|
37
|
-
React.Children.map(element.props.children, function (child) {
|
|
38
|
-
var _a, _b;
|
|
39
|
-
var isClickableComponent =
|
|
40
|
-
// @ts-expect-error: accessing private property
|
|
41
|
-
isClickableElement((_a = child === null || child === void 0 ? void 0 : child.type) === null || _a === void 0 ? void 0 : _a.__KONTUR_REACT_UI__) ||
|
|
42
|
-
// @ts-expect-error: accessing private property
|
|
43
|
-
isClickableSubElement((_b = child === null || child === void 0 ? void 0 : child.type) === null || _b === void 0 ? void 0 : _b.__KONTUR_REACT_UI__);
|
|
44
|
-
if (isValidElement(child) && isClickableComponent) {
|
|
45
|
-
var id = child.props.id;
|
|
46
|
-
var generatedId = levelIndex + "-" + childLevelIndex_1;
|
|
47
|
-
var subChildrenArray = getElementsChildren(child, levelIndex + "-" + childLevelIndex_1);
|
|
48
|
-
var childrenIdArray = getChildrenIdArray(subChildrenArray, id);
|
|
49
|
-
var generatedChildrenIdArray = getChildrenIdArray(subChildrenArray, generatedId, true);
|
|
50
|
-
childrenArray.push({
|
|
51
|
-
id: id || child.props.href,
|
|
52
|
-
generatedId: generatedId,
|
|
53
|
-
parentId: element.props.id || element.props.href,
|
|
54
|
-
generatedParentId: "" + levelIndex,
|
|
55
|
-
childrenId: childrenIdArray,
|
|
56
|
-
generatedChildrenId: generatedChildrenIdArray,
|
|
57
|
-
});
|
|
58
|
-
childrenArray.push.apply(childrenArray, subChildrenArray);
|
|
59
|
-
childLevelIndex_1++;
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
return childrenArray;
|
|
64
|
-
};
|
|
65
|
-
export var isParentOpened = function (id, generatedId, openedParents) {
|
|
66
|
-
if (!openedParents || (openedParents === null || openedParents === void 0 ? void 0 : openedParents.length) === 0) {
|
|
67
|
-
return false;
|
|
68
|
-
}
|
|
69
|
-
var idIsOpened = id && openedParents.includes(id);
|
|
70
|
-
var generatedIdIsOpened = generatedId && openedParents.includes(generatedId);
|
|
71
|
-
return idIsOpened || generatedIdIsOpened;
|
|
72
|
-
};
|
|
73
|
-
export var isElementActive = function (id, activeMenuItem) {
|
|
74
|
-
return !!id && !!activeMenuItem && id === activeMenuItem;
|
|
75
|
-
};
|
|
76
1
|
export var isBrowser = typeof window !== 'undefined';
|
|
77
2
|
export var isTouchDevice = function () {
|
|
78
3
|
return isBrowser && ('ontouchstart' in window || navigator.maxTouchPoints > 0);
|
|
@@ -80,3 +5,6 @@ export var isTouchDevice = function () {
|
|
|
80
5
|
export var isKonturIcon = function (icon) {
|
|
81
6
|
return Object.prototype.hasOwnProperty.call(icon === null || icon === void 0 ? void 0 : icon.type, '__KONTUR_ICON__');
|
|
82
7
|
};
|
|
8
|
+
export var generateId = function () {
|
|
9
|
+
return Date.now().toString(36) + Math.random().toString(36).substr(2);
|
|
10
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skbkontur/side-menu",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@skbkontur/icons": "^1.10.0",
|
|
26
|
-
"@skbkontur/react-ui-addons": "^4.11.
|
|
26
|
+
"@skbkontur/react-ui-addons": "^4.11.4",
|
|
27
27
|
"tslib": "^1"
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
import { Tree, TreeNode } from './Tree';
|
|
3
|
+
export declare const navigationAttribute = "data-navigation-id";
|
|
4
|
+
export declare const navigationAttributeForSeparatedMenu = "data-parent-navigation-id";
|
|
5
|
+
export interface NavigableElement {
|
|
6
|
+
setIsActive: (value: boolean) => void;
|
|
7
|
+
setIsOpened: (value: boolean) => void;
|
|
8
|
+
setIsNestedSubMenu: (value: boolean) => void;
|
|
9
|
+
setHasSubIcons: (value: boolean) => void;
|
|
10
|
+
setIsFirstLevelParentOfActiveMenuItem: (value: boolean) => void;
|
|
11
|
+
isSubMenu?: boolean;
|
|
12
|
+
}
|
|
13
|
+
interface MenuNavigationOptions {
|
|
14
|
+
rootRef: RefObject<HTMLDivElement> | null;
|
|
15
|
+
activeMenuItem?: string;
|
|
16
|
+
setActiveMenuItem: (id: string) => void;
|
|
17
|
+
isSeparatedMenu: boolean;
|
|
18
|
+
isSeparatedMenuShown: boolean;
|
|
19
|
+
setIsSeparatedMenuShown: (value: boolean) => void;
|
|
20
|
+
isOpened?: boolean;
|
|
21
|
+
isDesktopQuery?: boolean;
|
|
22
|
+
isMobile?: boolean;
|
|
23
|
+
isCollapsable?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare class MenuNavigation {
|
|
26
|
+
navigationTree: Tree | null;
|
|
27
|
+
activeMenuItem?: string;
|
|
28
|
+
isSeparatedMenuShown?: boolean;
|
|
29
|
+
setIsSeparatedMenuShown?: (value: boolean) => void;
|
|
30
|
+
activeMenuItemTreeNode?: TreeNode;
|
|
31
|
+
private readonly rootRef;
|
|
32
|
+
private readonly setActiveMenuItem?;
|
|
33
|
+
private isSeparatedMenu;
|
|
34
|
+
private readonly isOpened?;
|
|
35
|
+
private readonly isDesktop?;
|
|
36
|
+
private readonly isMobile?;
|
|
37
|
+
private readonly isCollapsable?;
|
|
38
|
+
constructor(options: MenuNavigationOptions);
|
|
39
|
+
updateNavigationTree(): void;
|
|
40
|
+
addValue(id: string, value: NavigableElement): void;
|
|
41
|
+
switchActiveMenuItem(id?: string, isButton?: boolean): void;
|
|
42
|
+
switchIsSeparatedMenu(value: boolean): void;
|
|
43
|
+
private setHighlightedFirstLevelMenuItemInMinimizedInnerMenu;
|
|
44
|
+
private getFirstLevelParent;
|
|
45
|
+
private openMenuItems;
|
|
46
|
+
private openAllParents;
|
|
47
|
+
private getParentId;
|
|
48
|
+
private switchVisibilityOfSeparatedMenu;
|
|
49
|
+
}
|
|
50
|
+
export {};
|