@gravity-ui/navigation 1.4.0 → 1.4.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/README.md +5 -5
- package/build/cjs/AsideHeader.js +1 -1
- package/build/cjs/FooterItem.js +1 -1
- package/build/cjs/{Item-ff00938b.js → Item-eaaec1a7.js} +6 -2
- package/build/cjs/Item-eaaec1a7.js.map +1 -0
- package/build/cjs/PageLayoutAside.js +1 -1
- package/build/cjs/{Settings-4b4e8a46.js → Settings-6db7b88c.js} +173 -172
- package/build/cjs/Settings-6db7b88c.js.map +1 -0
- package/build/cjs/components/Settings/Selection/index.d.ts +1 -1
- package/build/cjs/components/Settings/index.d.ts +1 -0
- package/build/cjs/index.js +3 -2
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/index5.js +2 -1
- package/build/cjs/index5.js.map +1 -1
- package/build/esm/AsideHeader.js +1 -1
- package/build/esm/FooterItem.js +1 -1
- package/build/esm/{Item-30c88899.js → Item-57b00fa0.js} +6 -2
- package/build/esm/Item-57b00fa0.js.map +1 -0
- package/build/esm/PageLayoutAside.js +1 -1
- package/build/esm/{Settings-d2e34d31.js → Settings-21bc1aba.js} +159 -159
- package/build/esm/Settings-21bc1aba.js.map +1 -0
- package/build/esm/components/Settings/Selection/index.d.ts +1 -1
- package/build/esm/components/Settings/index.d.ts +1 -0
- package/build/esm/index.js +2 -2
- package/build/esm/index5.js +1 -1
- package/package.json +1 -1
- package/build/cjs/Item-ff00938b.js.map +0 -1
- package/build/cjs/Settings-4b4e8a46.js.map +0 -1
- package/build/esm/Item-30c88899.js.map +0 -1
- package/build/esm/Settings-d2e34d31.js.map +0 -1
package/README.md
CHANGED
|
@@ -41,14 +41,14 @@ you may need to switch usage of `AsideHeader` to advanced style with `PageLayout
|
|
|
41
41
|
+);
|
|
42
42
|
|
|
43
43
|
- <AsideHeader renderContent={renderContent} {...restProps} />
|
|
44
|
-
+ <PageLayout
|
|
45
|
-
+ <PageLayout.Content>
|
|
46
|
-
+ <ContentExample />
|
|
47
|
-
+ </PageLayout.Content>
|
|
48
|
-
+
|
|
44
|
+
+ <PageLayout>
|
|
49
45
|
+ <Suspense fallback={null}>
|
|
50
46
|
+ <PageLayoutAside {...restProps} />
|
|
51
47
|
+ </Suspense>
|
|
48
|
+
+
|
|
49
|
+
+ <PageLayout.Content>
|
|
50
|
+
+ <ContentExample />
|
|
51
|
+
+ </PageLayout.Content>
|
|
52
52
|
+ </PageLayout>
|
|
53
53
|
```
|
|
54
54
|
|
package/build/cjs/AsideHeader.js
CHANGED
|
@@ -13,7 +13,7 @@ require('./utils-e82025ce.js');
|
|
|
13
13
|
require('./style-inject.es-935afc04.js');
|
|
14
14
|
require('@bem-react/classname');
|
|
15
15
|
require('@gravity-ui/uikit');
|
|
16
|
-
require('./Item-
|
|
16
|
+
require('./Item-eaaec1a7.js');
|
|
17
17
|
require('@gravity-ui/icons');
|
|
18
18
|
require('./debounce-8772fd80.js');
|
|
19
19
|
require('./registerKeyset-f4ce9ee7.js');
|
package/build/cjs/FooterItem.js
CHANGED
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var tslib_es6 = require('./tslib.es6-705c6589.js');
|
|
6
6
|
var React = require('react');
|
|
7
7
|
var styleInject_es = require('./style-inject.es-935afc04.js');
|
|
8
|
-
var Item = require('./Item-
|
|
8
|
+
var Item = require('./Item-eaaec1a7.js');
|
|
9
9
|
var constants = require('./constants-9783dc2d.js');
|
|
10
10
|
require('@bem-react/classname');
|
|
11
11
|
require('@gravity-ui/uikit');
|
|
@@ -239,15 +239,19 @@ const Item = (props) => {
|
|
|
239
239
|
const iconNode = icon ? React__default["default"].createElement(uikit.Icon, { data: icon, size: iconSize, className: b('icon') }) : null;
|
|
240
240
|
const titleNode = renderItemTitle(item);
|
|
241
241
|
const params = { icon: iconNode, title: titleNode };
|
|
242
|
+
let highlightedNode = null;
|
|
242
243
|
let node;
|
|
243
244
|
const opts = { compact: Boolean(compact), collapsed: false, item, ref };
|
|
244
245
|
if (typeof item.itemWrapper === 'function') {
|
|
245
246
|
node = item.itemWrapper(params, makeNode, opts);
|
|
247
|
+
highlightedNode =
|
|
248
|
+
bringForward &&
|
|
249
|
+
item.itemWrapper(params, ({ icon: iconEl }) => makeIconNode(iconEl), opts);
|
|
246
250
|
}
|
|
247
251
|
else {
|
|
248
252
|
node = makeNode(params);
|
|
253
|
+
highlightedNode = bringForward && makeIconNode(iconNode);
|
|
249
254
|
}
|
|
250
|
-
const highlightedNode = makeIconNode(iconNode);
|
|
251
255
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
252
256
|
bringForward && (React__default["default"].createElement(HighlightedItem, { iconNode: highlightedNode, iconRef: highlightedRef, onClick: (event) => onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item, false, event), onClickCapture: onItemClickCapture })),
|
|
253
257
|
node,
|
|
@@ -291,4 +295,4 @@ exports.getItemsMinHeight = getItemsMinHeight;
|
|
|
291
295
|
exports.getMoreButtonItem = getMoreButtonItem;
|
|
292
296
|
exports.getSelectedItemIndex = getSelectedItemIndex;
|
|
293
297
|
exports.isMenuItem = isMenuItem;
|
|
294
|
-
//# sourceMappingURL=Item-
|
|
298
|
+
//# sourceMappingURL=Item-eaaec1a7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Item-eaaec1a7.js","sources":["../../../src/components/CompositeBar/constants.ts","../../../src/components/CompositeBar/utils.ts","../../../src/components/CompositeBar/HighlightedItem/HighlightedItem.tsx","../../../src/components/CompositeBar/Item/Item.tsx"],"sourcesContent":["import {PopupPlacement} from '@gravity-ui/uikit';\n\nexport const ITEM_HEIGHT = 40;\nexport const ITEM_TYPE_REGULAR = 'regular';\nexport const COLLAPSE_ITEM_ID = 'collapse-item-id';\n\nexport const POPUP_PLACEMENT: PopupPlacement = ['right-start', 'right-end', 'right'];\nexport const POPUP_ITEM_HEIGHT = 28;\n","import {Ellipsis} from '@gravity-ui/icons';\nimport {MenuItem} from './../types';\nimport {COLLAPSE_ITEM_ID, ITEM_HEIGHT} from './constants';\nimport {CompositeBarItem} from '../CompositeBar/CompositeBar';\n\nexport function getItemHeight(item: CompositeBarItem) {\n if (!isMenuItem(item)) {\n return ITEM_HEIGHT;\n }\n\n switch (item.type) {\n case 'action':\n return 50;\n case 'divider':\n return 15;\n\n default:\n return ITEM_HEIGHT;\n }\n}\n\nexport function getItemsHeight<T extends CompositeBarItem>(items: T[]) {\n return items.reduce((sum, item) => sum + getItemHeight(item), 0);\n}\n\nexport function getSelectedItemIndex(items: MenuItem[]) {\n const index = items.findIndex(({current}) => Boolean(current));\n return index === -1 ? undefined : index;\n}\n\nexport function getPinnedItems(items: MenuItem[]) {\n const pinnedItems: MenuItem[] = [];\n for (const item of items) {\n if (item.pinned) {\n pinnedItems.push(item);\n } else if (item.type === 'divider') {\n if (pinnedItems.length > 0 && pinnedItems[pinnedItems.length - 1].type !== 'divider') {\n pinnedItems.push(item);\n }\n }\n }\n return pinnedItems;\n}\n\nexport function getItemsMinHeight(items: MenuItem[]) {\n const pinnedItems = getPinnedItems(items);\n const afterMoreButtonItems = items.filter((item) => item.afterMoreButton);\n\n return (\n getItemsHeight(pinnedItems) +\n getItemsHeight(afterMoreButtonItems) +\n (pinnedItems.length === items.length ? 0 : ITEM_HEIGHT)\n );\n}\n\nexport function getMoreButtonItem(menuMoreTitle?: string): MenuItem {\n return {\n id: COLLAPSE_ITEM_ID,\n title: menuMoreTitle,\n icon: Ellipsis,\n iconSize: 18,\n };\n}\n\nexport function getAutosizeListItems(\n items: MenuItem[],\n height: number,\n collapseItem: MenuItem,\n): {\n listItems: MenuItem[];\n collapseItems: MenuItem[];\n} {\n const afterMoreButtonItems = items.filter((item) => item.afterMoreButton);\n const regularItems = items.filter((item) => !item.afterMoreButton);\n const listItems = [...regularItems, ...afterMoreButtonItems];\n\n const allItemsHeight = getItemsHeight(listItems);\n if (allItemsHeight <= height) {\n return {listItems, collapseItems: []};\n }\n\n const collapseItemHeight = getItemHeight(collapseItem);\n\n listItems.splice(regularItems.length, 0, collapseItem);\n const collapseItems: MenuItem[] = [];\n\n let listHeight = allItemsHeight + collapseItemHeight;\n let index = listItems.length;\n while (listHeight > height) {\n if (index === 0) {\n break;\n }\n index--;\n\n const item = listItems[index];\n if (item.pinned || item.id === COLLAPSE_ITEM_ID || item.afterMoreButton) {\n continue;\n }\n if (item.type === 'divider') {\n if (index + 1 < listItems.length && listItems[index + 1]?.type === 'divider') {\n listHeight -= getItemHeight(item);\n listItems.splice(index, 1);\n }\n continue;\n }\n listHeight -= getItemHeight(item);\n collapseItems.unshift(...listItems.splice(index, 1));\n }\n if (\n listItems[index]?.type === 'divider' &&\n (index === 0 || listItems[index - 1]?.type === 'divider')\n ) {\n listItems.splice(index, 1);\n }\n\n return {listItems, collapseItems};\n}\n\nexport function isMenuItem(item: CompositeBarItem): item is MenuItem {\n return (item as MenuItem)?.id !== undefined;\n}\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport debounceFn from 'lodash/debounce';\n\nimport {Portal} from '@gravity-ui/uikit';\n\nimport {useAsideHeaderInnerContext} from '../../AsideHeader/AsideHeaderContext';\nimport {block} from '../../utils/cn';\n\nimport './HighlightedItem.scss';\n\nconst b = block('composite-bar-highlighted-item');\n\ninterface ItemInnerProps {\n iconRef: React.RefObject<HTMLDivElement>;\n iconNode: React.ReactNode;\n onClick?: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;\n onClickCapture?: (event: React.SyntheticEvent) => void;\n}\n\nconst DEBOUNCE_TIME = 200;\n\nexport const HighlightedItem: React.FC<ItemInnerProps> = ({\n iconRef,\n iconNode,\n onClick,\n onClickCapture,\n}: ItemInnerProps) => {\n const {openModalSubscriber} = useAsideHeaderInnerContext();\n const [{top, left, width, height}, setPosition] = useState({\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n });\n const [isModalOpen, setIsModalOpen] = useState<boolean>(false);\n\n const handleResizeDebounced = useMemo(\n () =>\n debounceFn(\n () => {\n const {\n top = 0,\n left = 0,\n width = 0,\n height = 0,\n } = iconRef?.current?.getBoundingClientRect() || {};\n\n setPosition({\n top: top + window.scrollY,\n left: left + window.scrollX,\n width,\n height,\n });\n },\n DEBOUNCE_TIME,\n {leading: true},\n ),\n [iconRef],\n );\n\n const handleResize = useCallback(() => handleResizeDebounced(), [handleResizeDebounced]);\n\n useEffect(() => {\n if (!isModalOpen) {\n return;\n }\n\n handleResize();\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [handleResize, isModalOpen]);\n\n openModalSubscriber?.((open: boolean) => {\n setIsModalOpen(open);\n });\n\n if (!iconNode || !isModalOpen) {\n return null;\n }\n\n return (\n <Portal>\n <div\n className={b()}\n style={{left, top, width, height}}\n onClick={onClick}\n onClickCapture={onClickCapture}\n data-toast\n >\n <div className={b('icon')}>{iconNode}</div>\n </div>\n </Portal>\n );\n};\n\nHighlightedItem.displayName = 'HighlightedItem';\n","import React from 'react';\nimport {block} from '../../utils/cn';\n\nimport {List, Icon, Popup, PopupPlacement, PopupProps, Tooltip} from '@gravity-ui/uikit';\n\nimport {MakeItemParams, MenuItem} from '../../types';\nimport {getSelectedItemIndex} from '../utils';\nimport {ASIDE_HEADER_ICON_SIZE} from '../../constants';\nimport {\n COLLAPSE_ITEM_ID,\n POPUP_ITEM_HEIGHT,\n POPUP_PLACEMENT,\n ITEM_TYPE_REGULAR,\n} from '../constants';\n\nimport {HighlightedItem} from '../HighlightedItem/HighlightedItem';\nimport {useAsideHeaderContext} from '../../AsideHeader/AsideHeaderContext';\n\nimport './Item.scss';\n\nconst b = block('composite-bar-item');\n\ninterface ItemPopup {\n popupVisible?: PopupProps['open'];\n popupAnchor?: PopupProps['anchorRef'];\n popupPlacement?: PopupProps['placement'];\n popupOffset?: PopupProps['offset'];\n popupKeepMounted?: PopupProps['keepMounted'];\n renderPopupContent?: () => React.ReactNode;\n onClosePopup?: () => void;\n}\n\nexport interface ItemProps extends ItemPopup {\n item: MenuItem;\n enableTooltip?: boolean;\n onItemClick?: (\n item: MenuItem,\n collapsed: boolean,\n event: React.MouseEvent<HTMLDivElement, MouseEvent>,\n ) => void;\n onItemClickCapture?: (event: React.SyntheticEvent) => void;\n bringForward?: boolean;\n}\n\ninterface ItemInnerProps extends ItemProps {\n className?: string;\n collapseItems?: MenuItem[];\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n}\n\nfunction renderItemTitle(item: MenuItem) {\n let titleNode = <div className={b('title-text')}>{item.title}</div>;\n\n if (item.rightAdornment) {\n titleNode = (\n <React.Fragment>\n {titleNode}\n <div className={b('title-adornment')}>{item.rightAdornment}</div>\n </React.Fragment>\n );\n }\n\n return titleNode;\n}\n\nexport const defaultPopupPlacement: PopupPlacement = ['right-end'];\nexport const defaultPopupOffset: NonNullable<PopupProps['offset']> = [-20, 8];\n\nexport const Item: React.FC<ItemInnerProps> = (props) => {\n const {\n item,\n className,\n collapseItems,\n onMouseLeave,\n onMouseEnter,\n enableTooltip = true,\n popupVisible = false,\n popupAnchor,\n popupPlacement = defaultPopupPlacement,\n popupOffset = defaultPopupOffset,\n popupKeepMounted,\n renderPopupContent,\n onClosePopup,\n onItemClick,\n onItemClickCapture,\n bringForward,\n } = props;\n\n const {compact} = useAsideHeaderContext();\n\n const [open, toggleOpen] = React.useState<boolean>(false);\n\n const ref = React.useRef<HTMLDivElement>(null);\n const anchorRef = popupAnchor || ref;\n const highlightedRef = React.useRef<HTMLDivElement>(null);\n\n const type = item.type || ITEM_TYPE_REGULAR;\n const current = item.current || false;\n const tooltipText = item.tooltipText || item.title;\n const icon = item.icon;\n const iconSize = item.iconSize || ASIDE_HEADER_ICON_SIZE;\n const collapsedItem = item.id === COLLAPSE_ITEM_ID;\n\n const modifiers: Required<PopupProps>['modifiers'] = React.useMemo(\n () => [\n {\n name: 'compact',\n enabled: true,\n options: {compact},\n phase: 'main',\n fn() {},\n },\n ],\n [compact],\n );\n\n const onClose = React.useCallback(\n (event: MouseEvent | KeyboardEvent) => {\n if (\n event instanceof MouseEvent &&\n event.target &&\n ref.current?.contains(event.target as Node)\n ) {\n return;\n }\n onClosePopup?.();\n },\n [onClosePopup],\n );\n\n if (item.type === 'divider') {\n return <div className={b('menu-divider')} />;\n }\n\n const makeIconNode = (iconEl: React.ReactNode): React.ReactNode => {\n return compact ? (\n <Tooltip\n content={tooltipText}\n disabled={!enableTooltip || (collapsedItem && open) || popupVisible}\n placement=\"right\"\n className={b('icon-tooltip', {'item-type': type})}\n >\n <div\n onMouseEnter={() => onMouseEnter?.()}\n onMouseLeave={() => onMouseLeave?.()}\n className={b('btn-icon')}\n >\n {iconEl}\n </div>\n </Tooltip>\n ) : (\n iconEl\n );\n };\n\n const makeNode = ({icon: iconEl, title: titleEl}: MakeItemParams) => {\n const createdNode = (\n <React.Fragment>\n <div\n className={b({type, current, compact}, className)}\n ref={ref}\n onClick={(event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (collapsedItem) {\n /**\n * If we call onItemClick for collapsedItem then:\n * - User get unexpected item in onItemClick callback\n * - onClosePanel calls twice for each popuped item, as result it will prevent opening of panelItems\n */\n toggleOpen(!open);\n } else {\n onItemClick?.(item, false, event);\n }\n }}\n onClickCapture={onItemClickCapture}\n onMouseEnter={() => {\n if (!compact) {\n onMouseEnter?.();\n }\n }}\n onMouseLeave={() => {\n if (!compact) {\n onMouseLeave?.();\n }\n }}\n >\n <div className={b('icon-place')} ref={highlightedRef}>\n {makeIconNode(iconEl)}\n </div>\n\n <div\n className={b('title')}\n title={typeof item.title === 'string' ? item.title : undefined}\n >\n {titleEl}\n </div>\n </div>\n {renderPopupContent && Boolean(anchorRef?.current) && (\n <Popup\n contentClassName={b('popup')}\n open={popupVisible}\n keepMounted={popupKeepMounted}\n placement={popupPlacement}\n offset={popupOffset}\n anchorRef={anchorRef}\n onClose={onClose}\n modifiers={modifiers}\n >\n {renderPopupContent()}\n </Popup>\n )}\n </React.Fragment>\n );\n\n return item.link ? (\n <a href={item.link} className={b('link')}>\n {createdNode}\n </a>\n ) : (\n createdNode\n );\n };\n\n const iconNode = icon ? <Icon data={icon} size={iconSize} className={b('icon')} /> : null;\n const titleNode = renderItemTitle(item);\n const params = {icon: iconNode, title: titleNode};\n let highlightedNode = null;\n let node;\n\n const opts = {compact: Boolean(compact), collapsed: false, item, ref};\n\n if (typeof item.itemWrapper === 'function') {\n node = item.itemWrapper(params, makeNode, opts) as React.ReactElement;\n highlightedNode =\n bringForward &&\n (item.itemWrapper(\n params,\n ({icon: iconEl}) => makeIconNode(iconEl),\n opts,\n ) as React.ReactElement);\n } else {\n node = makeNode(params);\n highlightedNode = bringForward && makeIconNode(iconNode);\n }\n\n return (\n <>\n {bringForward && (\n <HighlightedItem\n iconNode={highlightedNode}\n iconRef={highlightedRef}\n onClick={(event: React.MouseEvent<HTMLDivElement, MouseEvent>) =>\n onItemClick?.(item, false, event)\n }\n onClickCapture={onItemClickCapture}\n />\n )}\n {node}\n {open && collapsedItem && collapseItems?.length && Boolean(anchorRef?.current) && (\n <CollapsedPopup {...props} anchorRef={ref} onClose={() => toggleOpen(false)} />\n )}\n </>\n );\n};\n\nItem.displayName = 'Item';\n\ninterface CollapsedPopupProps {\n anchorRef: React.RefObject<HTMLElement>;\n onClose: () => void;\n}\n\nfunction CollapsedPopup({\n onItemClick,\n collapseItems,\n anchorRef,\n onClose,\n}: ItemInnerProps & CollapsedPopupProps) {\n const {compact} = useAsideHeaderContext();\n return collapseItems?.length ? (\n <Popup placement={POPUP_PLACEMENT} open={true} anchorRef={anchorRef} onClose={onClose}>\n <div className={b('collapse-items-popup-content')}>\n <List\n itemClassName={b('root-collapse-item')}\n items={collapseItems}\n selectedItemIndex={getSelectedItemIndex(collapseItems)}\n itemHeight={POPUP_ITEM_HEIGHT}\n itemsHeight={collapseItems.length * POPUP_ITEM_HEIGHT}\n virtualized={false}\n filterable={false}\n sortable={false}\n onItemClick={onClose}\n renderItem={(collapseItem) => {\n const makeCollapseNode = ({title: titleEl}: MakeItemParams) => {\n const res = (\n <div\n className={b('collapse-item')}\n onClick={(\n event: React.MouseEvent<HTMLDivElement, MouseEvent>,\n ) => {\n onItemClick?.(collapseItem, true, event);\n }}\n >\n {titleEl}\n </div>\n );\n\n return collapseItem.link ? (\n <a href={collapseItem.link} className={b('link')}>\n {res}\n </a>\n ) : (\n res\n );\n };\n\n const titleNode = renderItemTitle(collapseItem);\n const params = {title: titleNode};\n const opts = {\n compact: Boolean(compact),\n collapsed: true,\n item: collapseItem,\n ref: anchorRef,\n };\n if (typeof collapseItem.itemWrapper === 'function') {\n return collapseItem.itemWrapper(params, makeCollapseNode, opts);\n } else {\n return makeCollapseNode(params);\n }\n }}\n />\n </div>\n </Popup>\n ) : null;\n}\n"],"names":["Ellipsis","b","block","useAsideHeaderInnerContext","useState","useMemo","debounceFn","useCallback","useEffect","React","Portal","useAsideHeaderContext","ASIDE_HEADER_ICON_SIZE","Tooltip","Popup","Icon","List"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var React = require('react');
|
|
6
6
|
var uikit = require('@gravity-ui/uikit');
|
|
7
7
|
var styleInject_es = require('./style-inject.es-935afc04.js');
|
|
8
|
-
var Item = require('./Item-
|
|
8
|
+
var Item = require('./Item-eaaec1a7.js');
|
|
9
9
|
var constants = require('./constants-9783dc2d.js');
|
|
10
10
|
var AsideHeaderContext = require('./AsideHeaderContext.js');
|
|
11
11
|
var utils = require('./utils-e82025ce.js');
|
|
@@ -11,49 +11,26 @@ var Title = require('./Title-d58ff158.js');
|
|
|
11
11
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
12
12
|
|
|
13
13
|
function _interopNamespace(e) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
14
|
+
if (e && e.__esModule) return e;
|
|
15
|
+
var n = Object.create(null);
|
|
16
|
+
if (e) {
|
|
17
|
+
Object.keys(e).forEach(function (k) {
|
|
18
|
+
if (k !== 'default') {
|
|
19
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
20
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
get: function () { return e[k]; }
|
|
23
|
+
});
|
|
24
|
+
}
|
|
23
25
|
});
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
n["default"] = e;
|
|
28
|
-
return Object.freeze(n);
|
|
26
|
+
}
|
|
27
|
+
n["default"] = e;
|
|
28
|
+
return Object.freeze(n);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
32
32
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
33
33
|
|
|
34
|
-
/**
|
|
35
|
-
* This method returns the first argument it receives.
|
|
36
|
-
*
|
|
37
|
-
* @static
|
|
38
|
-
* @since 0.1.0
|
|
39
|
-
* @memberOf _
|
|
40
|
-
* @category Util
|
|
41
|
-
* @param {*} value Any value.
|
|
42
|
-
* @returns {*} Returns `value`.
|
|
43
|
-
* @example
|
|
44
|
-
*
|
|
45
|
-
* var object = { 'a': 1 };
|
|
46
|
-
*
|
|
47
|
-
* console.log(_.identity(object) === object);
|
|
48
|
-
* // => true
|
|
49
|
-
*/
|
|
50
|
-
|
|
51
|
-
function identity(value) {
|
|
52
|
-
return value;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
var identity_1 = identity;
|
|
56
|
-
|
|
57
34
|
function useStableCallback(func) {
|
|
58
35
|
const funcRef = React__namespace.useRef();
|
|
59
36
|
React__namespace.useEffect(() => {
|
|
@@ -83,140 +60,6 @@ function escapeStringForRegExp(input) {
|
|
|
83
60
|
return input.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
84
61
|
}
|
|
85
62
|
|
|
86
|
-
const b$3 = styleInject_es.block('settings-search');
|
|
87
|
-
function SettingsSearch({ className, initialValue, onChange, debounce: debounce$1 = 200, inputRef, inputSize, placeholder, autoFocus = true, }) {
|
|
88
|
-
const [value, setValue] = React__default["default"].useState(initialValue !== null && initialValue !== void 0 ? initialValue : '');
|
|
89
|
-
const onChangeDebounced = useStableCallback(debounce.debounce_1(onChange, debounce$1));
|
|
90
|
-
const handleUpdate = useStableCallback((updated) => {
|
|
91
|
-
setValue(updated);
|
|
92
|
-
onChangeDebounced(updated);
|
|
93
|
-
});
|
|
94
|
-
return (React__default["default"].createElement("div", { className: b$3(null, className) },
|
|
95
|
-
React__default["default"].createElement(uikit.TextInput, { value: value, controlRef: inputRef, hasClear: true, autoFocus: autoFocus, size: inputSize, placeholder: placeholder, onUpdate: handleUpdate })));
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
var css_248z$2 = ".gn-settings-menu__group-heading{display:inline-block;font-weight:var(--g-text-accent-font-weight);line-height:18px;margin-bottom:12px;padding:0 20px}.gn-settings-menu__group+.gn-settings-menu__group{margin-top:24px}.gn-settings-menu__item{align-items:center;color:var(--g-color-text-primary);cursor:pointer;display:flex;height:40px;padding:0 20px}.gn-settings-menu__item-icon{color:var(--g-color-text-misc);margin-right:5px}.gn-settings-menu__item:hover,.gn-settings-menu__item_focused{background:var(--g-color-base-simple-hover)}.gn-settings-menu__item_selected{background:var(--g-color-base-selection)}.gn-settings-menu__item_selected.gn-settings-menu__item_focused,.gn-settings-menu__item_selected:hover{background:var(--g-color-base-selection-hover)}.gn-settings-menu__item_disabled{color:var(--g-color-text-secondary);cursor:auto}.gn-settings-menu__item_disabled:hover{background:none}.gn-settings-menu__item_disabled .gn-settings-menu__item-icon{color:var(--g-color-base-misc-heavy)}.gn-settings-menu__item_badge{position:relative}.gn-settings-menu__item_badge:after{background-color:var(--g-color-text-danger);border-radius:50%;content:\"\";display:block;height:6px;position:absolute;right:9px;top:calc(50% - 3px);width:6px}";
|
|
99
|
-
styleInject_es.styleInject(css_248z$2);
|
|
100
|
-
|
|
101
|
-
const b$2 = styleInject_es.block('settings-menu');
|
|
102
|
-
const SettingsMenu = React__default["default"].forwardRef(
|
|
103
|
-
// eslint-disable-next-line prefer-arrow-callback
|
|
104
|
-
function SettingsMenu({ items, onChange, activeItemId }, ref) {
|
|
105
|
-
const [focusItemId, setFocusId] = React__default["default"].useState();
|
|
106
|
-
const containerRef = React__default["default"].useRef(null);
|
|
107
|
-
const handleChange = useStableCallback(onChange);
|
|
108
|
-
const getFocused = useCurrent(focusItemId);
|
|
109
|
-
React__default["default"].useImperativeHandle(ref, () => ({
|
|
110
|
-
handleKeyDown(event) {
|
|
111
|
-
if (!containerRef.current) {
|
|
112
|
-
return false;
|
|
113
|
-
}
|
|
114
|
-
const focused = getFocused();
|
|
115
|
-
if (focused && event.key === 'Enter') {
|
|
116
|
-
handleChange(focused);
|
|
117
|
-
return true;
|
|
118
|
-
}
|
|
119
|
-
else if (event.key === 'ArrowDown') {
|
|
120
|
-
setFocusId(focusNext(containerRef.current, focused, 1));
|
|
121
|
-
return true;
|
|
122
|
-
}
|
|
123
|
-
else if (event.key === 'ArrowUp') {
|
|
124
|
-
setFocusId(focusNext(containerRef.current, focused, -1));
|
|
125
|
-
return true;
|
|
126
|
-
}
|
|
127
|
-
return false;
|
|
128
|
-
},
|
|
129
|
-
clearFocus() {
|
|
130
|
-
setFocusId(undefined);
|
|
131
|
-
},
|
|
132
|
-
}), [getFocused, handleChange]);
|
|
133
|
-
return (React__default["default"].createElement("div", { ref: containerRef, className: b$2() }, items.map((firstLevelItem) => {
|
|
134
|
-
if ('groupTitle' in firstLevelItem) {
|
|
135
|
-
return (React__default["default"].createElement("div", { key: firstLevelItem.groupTitle, className: b$2('group') },
|
|
136
|
-
React__default["default"].createElement("span", { className: b$2('group-heading') }, firstLevelItem.groupTitle),
|
|
137
|
-
firstLevelItem.items.map((item) => {
|
|
138
|
-
return renderMenuItem(item, onChange, activeItemId, focusItemId);
|
|
139
|
-
})));
|
|
140
|
-
}
|
|
141
|
-
return renderMenuItem(firstLevelItem, onChange, activeItemId, focusItemId);
|
|
142
|
-
})));
|
|
143
|
-
});
|
|
144
|
-
function renderMenuItem(item, onChange, activeItemId, focusItemId) {
|
|
145
|
-
return (React__default["default"].createElement("span", { key: item.title, className: b$2('item', {
|
|
146
|
-
selected: activeItemId === item.id,
|
|
147
|
-
disabled: item.disabled,
|
|
148
|
-
focused: focusItemId === item.id,
|
|
149
|
-
badge: item.withBadge,
|
|
150
|
-
}), onClick: () => {
|
|
151
|
-
if (!item.disabled) {
|
|
152
|
-
onChange(item.id);
|
|
153
|
-
}
|
|
154
|
-
}, "data-id": item.id },
|
|
155
|
-
item.icon ? React__default["default"].createElement(uikit.Icon, Object.assign({ size: 16 }, item.icon, { className: b$2('item-icon') })) : undefined,
|
|
156
|
-
React__default["default"].createElement("span", null, item.title)));
|
|
157
|
-
}
|
|
158
|
-
function focusNext(container, focused, direction) {
|
|
159
|
-
var _a;
|
|
160
|
-
const elements = container.querySelectorAll(`.${b$2('item')}:not(.${b$2('item')}_disabled)`);
|
|
161
|
-
if (elements.length === 0) {
|
|
162
|
-
return undefined;
|
|
163
|
-
}
|
|
164
|
-
let currentIndex = direction > 0 ? -1 : 0;
|
|
165
|
-
if (focused) {
|
|
166
|
-
currentIndex = Array.prototype.findIndex.call(elements, (element) => element.getAttribute('data-id') === focused);
|
|
167
|
-
}
|
|
168
|
-
currentIndex = (elements.length + currentIndex + direction) % elements.length;
|
|
169
|
-
return (_a = elements[currentIndex].getAttribute('data-id')) !== null && _a !== void 0 ? _a : undefined;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
var css_248z$1 = ".gn-settings-menu-mobile.yc-tabs_direction_horizontal{-ms-overflow-style:none;flex-wrap:nowrap;overflow-x:auto;overscroll-behavior-x:none;scrollbar-width:none}.gn-settings-menu-mobile.yc-tabs_direction_horizontal::-webkit-scrollbar{display:none}.gn-settings-menu-mobile__item_badge{position:relative}.gn-settings-menu-mobile__item_badge:after{background-color:var(--g-color-text-danger);border-radius:50%;content:\"\";display:block;height:6px;position:absolute;right:-8px;top:11px;width:6px}";
|
|
173
|
-
styleInject_es.styleInject(css_248z$1);
|
|
174
|
-
|
|
175
|
-
const b$1 = styleInject_es.block('settings-menu-mobile');
|
|
176
|
-
const SettingsMenuMobile = ({ items, onChange, activeItemId, className, }) => {
|
|
177
|
-
const ref = React__default["default"].useRef(null);
|
|
178
|
-
const tabItems = React__default["default"].useMemo(() => {
|
|
179
|
-
const tabItems = [];
|
|
180
|
-
items.forEach((firstLevelItem) => {
|
|
181
|
-
if ('groupTitle' in firstLevelItem) {
|
|
182
|
-
tabItems.push(...firstLevelItem.items.map(({ id, title, disabled, withBadge }) => ({
|
|
183
|
-
id,
|
|
184
|
-
title,
|
|
185
|
-
disabled,
|
|
186
|
-
className: b$1('item', { badge: withBadge }),
|
|
187
|
-
})));
|
|
188
|
-
}
|
|
189
|
-
else {
|
|
190
|
-
const { id, title, disabled, withBadge } = firstLevelItem;
|
|
191
|
-
tabItems.push({ id, title, disabled, className: b$1('item', { badge: withBadge }) });
|
|
192
|
-
}
|
|
193
|
-
});
|
|
194
|
-
return tabItems;
|
|
195
|
-
}, [items]);
|
|
196
|
-
const handleTouchMove = (e) => {
|
|
197
|
-
e.stopPropagation();
|
|
198
|
-
};
|
|
199
|
-
return (React__default["default"].createElement("div", { ref: ref, onTouchMove: handleTouchMove },
|
|
200
|
-
React__default["default"].createElement(uikit.Tabs, { items: tabItems, className: b$1(null, className), size: "l", activeTab: activeItemId, onSelectTab: onChange })));
|
|
201
|
-
};
|
|
202
|
-
|
|
203
|
-
var label_title$1 = "Settings";
|
|
204
|
-
var en = {
|
|
205
|
-
label_title: label_title$1,
|
|
206
|
-
"label_filter-placeholder": "Search settings",
|
|
207
|
-
"label_empty-placeholder": "No results found"
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
var label_title = "Настройки";
|
|
211
|
-
var ru = {
|
|
212
|
-
label_title: label_title,
|
|
213
|
-
"label_filter-placeholder": "Найти настройки",
|
|
214
|
-
"label_empty-placeholder": "Ничего не найдено"
|
|
215
|
-
};
|
|
216
|
-
|
|
217
|
-
const COMPONENT = 'Settings';
|
|
218
|
-
var i18n = registerKeyset.registerKeyset({ en, ru }, COMPONENT);
|
|
219
|
-
|
|
220
63
|
function getSettingsFromChildren(children, searchText = '') {
|
|
221
64
|
// 'abc def fg' -> abc.*?cde.*?fg
|
|
222
65
|
const preparedFilter = escapeStringForRegExp(searchText).replace(/\s+/g, '.*?');
|
|
@@ -374,6 +217,163 @@ function useSettingsSelectionContext() {
|
|
|
374
217
|
return React__default["default"].useContext(context);
|
|
375
218
|
}
|
|
376
219
|
|
|
220
|
+
/**
|
|
221
|
+
* This method returns the first argument it receives.
|
|
222
|
+
*
|
|
223
|
+
* @static
|
|
224
|
+
* @since 0.1.0
|
|
225
|
+
* @memberOf _
|
|
226
|
+
* @category Util
|
|
227
|
+
* @param {*} value Any value.
|
|
228
|
+
* @returns {*} Returns `value`.
|
|
229
|
+
* @example
|
|
230
|
+
*
|
|
231
|
+
* var object = { 'a': 1 };
|
|
232
|
+
*
|
|
233
|
+
* console.log(_.identity(object) === object);
|
|
234
|
+
* // => true
|
|
235
|
+
*/
|
|
236
|
+
|
|
237
|
+
function identity(value) {
|
|
238
|
+
return value;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
var identity_1 = identity;
|
|
242
|
+
|
|
243
|
+
const b$3 = styleInject_es.block('settings-search');
|
|
244
|
+
function SettingsSearch({ className, initialValue, onChange, debounce: debounce$1 = 200, inputRef, inputSize, placeholder, autoFocus = true, }) {
|
|
245
|
+
const [value, setValue] = React__default["default"].useState(initialValue !== null && initialValue !== void 0 ? initialValue : '');
|
|
246
|
+
const onChangeDebounced = useStableCallback(debounce.debounce_1(onChange, debounce$1));
|
|
247
|
+
const handleUpdate = useStableCallback((updated) => {
|
|
248
|
+
setValue(updated);
|
|
249
|
+
onChangeDebounced(updated);
|
|
250
|
+
});
|
|
251
|
+
return (React__default["default"].createElement("div", { className: b$3(null, className) },
|
|
252
|
+
React__default["default"].createElement(uikit.TextInput, { value: value, controlRef: inputRef, hasClear: true, autoFocus: autoFocus, size: inputSize, placeholder: placeholder, onUpdate: handleUpdate })));
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
var css_248z$2 = ".gn-settings-menu__group-heading{display:inline-block;font-weight:var(--g-text-accent-font-weight);line-height:18px;margin-bottom:12px;padding:0 20px}.gn-settings-menu__group+.gn-settings-menu__group{margin-top:24px}.gn-settings-menu__item{align-items:center;color:var(--g-color-text-primary);cursor:pointer;display:flex;height:40px;padding:0 20px}.gn-settings-menu__item-icon{color:var(--g-color-text-misc);margin-right:5px}.gn-settings-menu__item:hover,.gn-settings-menu__item_focused{background:var(--g-color-base-simple-hover)}.gn-settings-menu__item_selected{background:var(--g-color-base-selection)}.gn-settings-menu__item_selected.gn-settings-menu__item_focused,.gn-settings-menu__item_selected:hover{background:var(--g-color-base-selection-hover)}.gn-settings-menu__item_disabled{color:var(--g-color-text-secondary);cursor:auto}.gn-settings-menu__item_disabled:hover{background:none}.gn-settings-menu__item_disabled .gn-settings-menu__item-icon{color:var(--g-color-base-misc-heavy)}.gn-settings-menu__item_badge{position:relative}.gn-settings-menu__item_badge:after{background-color:var(--g-color-text-danger);border-radius:50%;content:\"\";display:block;height:6px;position:absolute;right:9px;top:calc(50% - 3px);width:6px}";
|
|
256
|
+
styleInject_es.styleInject(css_248z$2);
|
|
257
|
+
|
|
258
|
+
const b$2 = styleInject_es.block('settings-menu');
|
|
259
|
+
const SettingsMenu = React__default["default"].forwardRef(
|
|
260
|
+
// eslint-disable-next-line prefer-arrow-callback
|
|
261
|
+
function SettingsMenu({ items, onChange, activeItemId }, ref) {
|
|
262
|
+
const [focusItemId, setFocusId] = React__default["default"].useState();
|
|
263
|
+
const containerRef = React__default["default"].useRef(null);
|
|
264
|
+
const handleChange = useStableCallback(onChange);
|
|
265
|
+
const getFocused = useCurrent(focusItemId);
|
|
266
|
+
React__default["default"].useImperativeHandle(ref, () => ({
|
|
267
|
+
handleKeyDown(event) {
|
|
268
|
+
if (!containerRef.current) {
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
const focused = getFocused();
|
|
272
|
+
if (focused && event.key === 'Enter') {
|
|
273
|
+
handleChange(focused);
|
|
274
|
+
return true;
|
|
275
|
+
}
|
|
276
|
+
else if (event.key === 'ArrowDown') {
|
|
277
|
+
setFocusId(focusNext(containerRef.current, focused, 1));
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
else if (event.key === 'ArrowUp') {
|
|
281
|
+
setFocusId(focusNext(containerRef.current, focused, -1));
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
284
|
+
return false;
|
|
285
|
+
},
|
|
286
|
+
clearFocus() {
|
|
287
|
+
setFocusId(undefined);
|
|
288
|
+
},
|
|
289
|
+
}), [getFocused, handleChange]);
|
|
290
|
+
return (React__default["default"].createElement("div", { ref: containerRef, className: b$2() }, items.map((firstLevelItem) => {
|
|
291
|
+
if ('groupTitle' in firstLevelItem) {
|
|
292
|
+
return (React__default["default"].createElement("div", { key: firstLevelItem.groupTitle, className: b$2('group') },
|
|
293
|
+
React__default["default"].createElement("span", { className: b$2('group-heading') }, firstLevelItem.groupTitle),
|
|
294
|
+
firstLevelItem.items.map((item) => {
|
|
295
|
+
return renderMenuItem(item, onChange, activeItemId, focusItemId);
|
|
296
|
+
})));
|
|
297
|
+
}
|
|
298
|
+
return renderMenuItem(firstLevelItem, onChange, activeItemId, focusItemId);
|
|
299
|
+
})));
|
|
300
|
+
});
|
|
301
|
+
function renderMenuItem(item, onChange, activeItemId, focusItemId) {
|
|
302
|
+
return (React__default["default"].createElement("span", { key: item.title, className: b$2('item', {
|
|
303
|
+
selected: activeItemId === item.id,
|
|
304
|
+
disabled: item.disabled,
|
|
305
|
+
focused: focusItemId === item.id,
|
|
306
|
+
badge: item.withBadge,
|
|
307
|
+
}), onClick: () => {
|
|
308
|
+
if (!item.disabled) {
|
|
309
|
+
onChange(item.id);
|
|
310
|
+
}
|
|
311
|
+
}, "data-id": item.id },
|
|
312
|
+
item.icon ? React__default["default"].createElement(uikit.Icon, Object.assign({ size: 16 }, item.icon, { className: b$2('item-icon') })) : undefined,
|
|
313
|
+
React__default["default"].createElement("span", null, item.title)));
|
|
314
|
+
}
|
|
315
|
+
function focusNext(container, focused, direction) {
|
|
316
|
+
var _a;
|
|
317
|
+
const elements = container.querySelectorAll(`.${b$2('item')}:not(.${b$2('item')}_disabled)`);
|
|
318
|
+
if (elements.length === 0) {
|
|
319
|
+
return undefined;
|
|
320
|
+
}
|
|
321
|
+
let currentIndex = direction > 0 ? -1 : 0;
|
|
322
|
+
if (focused) {
|
|
323
|
+
currentIndex = Array.prototype.findIndex.call(elements, (element) => element.getAttribute('data-id') === focused);
|
|
324
|
+
}
|
|
325
|
+
currentIndex = (elements.length + currentIndex + direction) % elements.length;
|
|
326
|
+
return (_a = elements[currentIndex].getAttribute('data-id')) !== null && _a !== void 0 ? _a : undefined;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
var css_248z$1 = ".gn-settings-menu-mobile.yc-tabs_direction_horizontal{-ms-overflow-style:none;flex-wrap:nowrap;overflow-x:auto;overscroll-behavior-x:none;scrollbar-width:none}.gn-settings-menu-mobile.yc-tabs_direction_horizontal::-webkit-scrollbar{display:none}.gn-settings-menu-mobile__item_badge{position:relative}.gn-settings-menu-mobile__item_badge:after{background-color:var(--g-color-text-danger);border-radius:50%;content:\"\";display:block;height:6px;position:absolute;right:-8px;top:11px;width:6px}";
|
|
330
|
+
styleInject_es.styleInject(css_248z$1);
|
|
331
|
+
|
|
332
|
+
const b$1 = styleInject_es.block('settings-menu-mobile');
|
|
333
|
+
const SettingsMenuMobile = ({ items, onChange, activeItemId, className, }) => {
|
|
334
|
+
const ref = React__default["default"].useRef(null);
|
|
335
|
+
const tabItems = React__default["default"].useMemo(() => {
|
|
336
|
+
const tabItems = [];
|
|
337
|
+
items.forEach((firstLevelItem) => {
|
|
338
|
+
if ('groupTitle' in firstLevelItem) {
|
|
339
|
+
tabItems.push(...firstLevelItem.items.map(({ id, title, disabled, withBadge }) => ({
|
|
340
|
+
id,
|
|
341
|
+
title,
|
|
342
|
+
disabled,
|
|
343
|
+
className: b$1('item', { badge: withBadge }),
|
|
344
|
+
})));
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
const { id, title, disabled, withBadge } = firstLevelItem;
|
|
348
|
+
tabItems.push({ id, title, disabled, className: b$1('item', { badge: withBadge }) });
|
|
349
|
+
}
|
|
350
|
+
});
|
|
351
|
+
return tabItems;
|
|
352
|
+
}, [items]);
|
|
353
|
+
const handleTouchMove = (e) => {
|
|
354
|
+
e.stopPropagation();
|
|
355
|
+
};
|
|
356
|
+
return (React__default["default"].createElement("div", { ref: ref, onTouchMove: handleTouchMove },
|
|
357
|
+
React__default["default"].createElement(uikit.Tabs, { items: tabItems, className: b$1(null, className), size: "l", activeTab: activeItemId, onSelectTab: onChange })));
|
|
358
|
+
};
|
|
359
|
+
|
|
360
|
+
var label_title$1 = "Settings";
|
|
361
|
+
var en = {
|
|
362
|
+
label_title: label_title$1,
|
|
363
|
+
"label_filter-placeholder": "Search settings",
|
|
364
|
+
"label_empty-placeholder": "No results found"
|
|
365
|
+
};
|
|
366
|
+
|
|
367
|
+
var label_title = "Настройки";
|
|
368
|
+
var ru = {
|
|
369
|
+
label_title: label_title,
|
|
370
|
+
"label_filter-placeholder": "Найти настройки",
|
|
371
|
+
"label_empty-placeholder": "Ничего не найдено"
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
const COMPONENT = 'Settings';
|
|
375
|
+
var i18n = registerKeyset.registerKeyset({ en, ru }, COMPONENT);
|
|
376
|
+
|
|
377
377
|
function isSectionSelected(selected, pageId, section) {
|
|
378
378
|
var _a;
|
|
379
379
|
if (!selected.section || selected.setting) {
|
|
@@ -568,4 +568,5 @@ function prepareTitle(string, search) {
|
|
|
568
568
|
|
|
569
569
|
exports.Settings = Settings;
|
|
570
570
|
exports.useSettingsContext = useSettingsContext;
|
|
571
|
-
|
|
571
|
+
exports.useSettingsSelectionContext = useSettingsSelectionContext;
|
|
572
|
+
//# sourceMappingURL=Settings-6db7b88c.js.map
|