@gravity-ui/navigation 6.0.0 → 6.1.0

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.
@@ -26,12 +26,12 @@ function Settings(_a) {
26
26
  return (React.createElement(SettingsContext.SettingsContext.Provider, { value: { renderRightAdornment, renderSectionRightAdornment, showRightAdornmentOnHover } },
27
27
  React.createElement(SettingsContent, Object.assign({ view: view }, props), children)));
28
28
  }
29
- function SettingsContentInnerMobile({ initialSearch, selection, menu, activePage, setSearch, onPageChange, children, }) {
29
+ function SettingsContentInnerMobile({ initialSearch, selection, menu, activePage, setSearch, onPageChange, children, enableTabsScroll, }) {
30
30
  const searchInputRef = React.useRef(null);
31
31
  return (React.createElement(uikit.TabProvider, { value: activePage, onUpdate: onPageChange },
32
32
  React.createElement(React.Fragment, null,
33
33
  React.createElement(SettingsSearch.SettingsSearch, { inputRef: searchInputRef, className: b.b('search'), initialValue: initialSearch, selection: selection, onChange: setSearch, autoFocus: false, inputSize: 'xl' }),
34
- React.createElement(SettingsMenuMobile.SettingsMenuMobile, { items: menu, className: b.b('tabs') })),
34
+ React.createElement(SettingsMenuMobile.SettingsMenuMobile, { items: menu, className: b.b('tabs'), enableTabsScroll: enableTabsScroll })),
35
35
  activePage ? React.createElement(uikit.TabPanel, { value: activePage }, children) : children));
36
36
  }
37
37
  function SettingsContentInnerDesktop({ title, selection, menu, activePage, filterPlaceholder, initialSearch, search, setSearch, onPageChange, children, }) {
@@ -68,7 +68,7 @@ function SettingsContentInnerDesktop({ title, selection, menu, activePage, filte
68
68
  React.createElement(SettingsMenu.SettingsMenu, { ref: menuRef, items: menu, onChange: onPageChange, activeItemId: activePage })),
69
69
  children));
70
70
  }
71
- function SettingsContent({ initialPage, initialSearch, selection, children, renderNotFound, title = index.default('label_title'), filterPlaceholder = index.default('label_filter-placeholder'), emptyPlaceholder = index.default('label_empty-placeholder'), view, onPageChange, onClose, }) {
71
+ function SettingsContent({ initialPage, initialSearch, selection, children, renderNotFound, title = index.default('label_title'), filterPlaceholder = index.default('label_filter-placeholder'), emptyPlaceholder = index.default('label_empty-placeholder'), view, onPageChange, onClose, enableMobileSettingsTabsScroll, }) {
72
72
  var _a;
73
73
  const [search, setSearch] = React.useState(initialSearch !== null && initialSearch !== undefined ? initialSearch : '');
74
74
  const { menu, pages } = collectSettings.getSettingsFromChildren(children, search);
@@ -150,7 +150,7 @@ function SettingsContent({ initialPage, initialSearch, selection, children, rend
150
150
  title,
151
151
  ]);
152
152
  return (React.createElement(context.SettingsSelectionContextProvider, { value: selected },
153
- React.createElement("div", { className: b.b({ view }) }, isMobile ? (React.createElement(SettingsContentInnerMobile, Object.assign({}, contentInnerProps), tabContent)) : (React.createElement(SettingsContentInnerDesktop, Object.assign({}, contentInnerProps), tabContent)))));
153
+ React.createElement("div", { className: b.b({ view }) }, isMobile ? (React.createElement(SettingsContentInnerMobile, Object.assign({}, contentInnerProps, { enableTabsScroll: enableMobileSettingsTabsScroll }), tabContent)) : (React.createElement(SettingsContentInnerDesktop, Object.assign({}, contentInnerProps), tabContent)))));
154
154
  }
155
155
  Settings.Group = function SettingsGroup({ children }) {
156
156
  return React.createElement(React.Fragment, null, children);
@@ -1 +1 @@
1
- {"version":3,"file":"Settings.js","sources":["../../../../../src/components/Settings/Settings.tsx"],"sourcesContent":["import React, {PropsWithChildren} from 'react';\n\nimport {Flex, Loader, TabPanel, TabProvider} from '@gravity-ui/uikit';\nimport identity from 'lodash/identity';\n\nimport {Title} from '../Title';\n\nimport {\n SettingsSelectionContextProvider,\n SettingsSelectionProviderContextValue,\n useSettingsSelectionContext,\n useSettingsSelectionProviderValue,\n} from './Selection/context';\nimport {SettingsContext} from './SettingsContext/SettingsContext';\nimport {useSettingsContext} from './SettingsContext/useSettingsContext';\nimport {SettingsMenu, SettingsMenuInstance} from './SettingsMenu/SettingsMenu';\nimport {SettingsMenuMobile} from './SettingsMenuMobile/SettingsMenuMobile';\nimport {SettingsPageComponent} from './SettingsPage/SettingsPageComponent';\nimport {useAllResultsPage} from './SettingsSearch/AllResultsPage';\nimport {SettingsSearch} from './SettingsSearch/SettingsSearch';\nimport {b} from './b';\nimport {SettingsMenu as SettingsMenuType, getSettingsFromChildren} from './collect-settings';\nimport i18n from './i18n';\nimport type {\n SettingsContentProps,\n SettingsGroupProps,\n SettingsItemProps,\n SettingsPageProps,\n SettingsProps,\n SettingsSectionProps,\n} from './types';\n\nexport function Settings({\n loading,\n renderLoading,\n children,\n view = 'normal',\n renderRightAdornment,\n renderSectionRightAdornment,\n showRightAdornmentOnHover = true,\n ...props\n}: SettingsProps) {\n if (loading) {\n return (\n <div className={b({loading: true, view})}>\n {typeof renderLoading === 'function' ? (\n renderLoading()\n ) : (\n <Loader className={b('loader')} size=\"m\" />\n )}\n </div>\n );\n }\n\n return (\n <SettingsContext.Provider\n value={{renderRightAdornment, renderSectionRightAdornment, showRightAdornmentOnHover}}\n >\n <SettingsContent view={view} {...props}>\n {children}\n </SettingsContent>\n </SettingsContext.Provider>\n );\n}\n\ninterface SettingsContentInnerProps\n extends PropsWithChildren,\n Pick<SettingsContentProps, 'initialSearch' | 'selection' | 'title' | 'filterPlaceholder'> {\n initialSearch?: string;\n selected: SettingsSelectionProviderContextValue;\n activePage?: string;\n menu: SettingsMenuType;\n search: string;\n setSearch: (newValue: string) => void;\n onPageChange: (newPage: string | undefined) => void;\n}\n\nfunction SettingsContentInnerMobile({\n initialSearch,\n selection,\n menu,\n activePage,\n setSearch,\n onPageChange,\n children,\n}: SettingsContentInnerProps) {\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n\n return (\n <TabProvider value={activePage} onUpdate={onPageChange}>\n <React.Fragment>\n <SettingsSearch\n inputRef={searchInputRef}\n className={b('search')}\n initialValue={initialSearch}\n selection={selection}\n onChange={setSearch}\n autoFocus={false}\n inputSize={'xl'}\n />\n <SettingsMenuMobile items={menu} className={b('tabs')} />\n </React.Fragment>\n {activePage ? <TabPanel value={activePage}>{children}</TabPanel> : children}\n </TabProvider>\n );\n}\n\nfunction SettingsContentInnerDesktop({\n title,\n selection,\n menu,\n activePage,\n filterPlaceholder,\n initialSearch,\n search,\n setSearch,\n onPageChange,\n children,\n}: SettingsContentInnerProps) {\n const menuRef = React.useRef<SettingsMenuInstance>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n menuRef.current?.clearFocus();\n }, [search]);\n\n React.useEffect(() => {\n const handler = () => {\n menuRef.current?.clearFocus();\n };\n window.addEventListener('click', handler);\n return () => {\n window.removeEventListener('click', handler);\n };\n }, []);\n\n return (\n <React.Fragment>\n <div\n className={b('menu')}\n onClick={() => {\n if (searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }}\n onKeyDown={(event) => {\n if (menuRef.current) {\n if (menuRef.current.handleKeyDown(event)) {\n event.preventDefault();\n }\n }\n }}\n >\n <Title>{title}</Title>\n <SettingsSearch\n inputRef={searchInputRef}\n className={b('search')}\n initialValue={initialSearch}\n selection={selection}\n onChange={setSearch}\n placeholder={filterPlaceholder}\n autoFocus\n />\n <SettingsMenu\n ref={menuRef}\n items={menu}\n onChange={onPageChange}\n activeItemId={activePage}\n />\n </div>\n {children}\n </React.Fragment>\n );\n}\n\nfunction SettingsContent({\n initialPage,\n initialSearch,\n selection,\n children,\n renderNotFound,\n title = i18n('label_title'),\n filterPlaceholder = i18n('label_filter-placeholder'),\n emptyPlaceholder = i18n('label_empty-placeholder'),\n view,\n onPageChange,\n onClose,\n}: SettingsContentProps) {\n const [search, setSearch] = React.useState(initialSearch ?? '');\n const {menu, pages} = getSettingsFromChildren(children, search);\n\n const selected = useSettingsSelectionProviderValue(pages, selection);\n\n const pageKeys = Object.keys(pages);\n const selectionInitialPage =\n selected.page && pageKeys.includes(selected.page.id) ? selected.page.id : undefined;\n const [selectedPage, setCurrentPage] = React.useState<string | undefined>(\n selectionInitialPage ||\n (initialPage && pageKeys.includes(initialPage) ? initialPage : undefined),\n );\n const isMobile = view === 'mobile';\n\n let activePage = selectedPage;\n\n if (!activePage || !pages[activePage] || pages[activePage].hidden) {\n activePage = Object.values(pages).find(({hidden}) => !hidden)?.id;\n }\n\n const {isAllSearchPage, hasAllSearchResultsPage, allSearchResultsId} = useAllResultsPage({\n pages,\n });\n\n const handlePageChange = React.useCallback(\n (newPage: string | undefined) => {\n setCurrentPage((prevPage) => {\n if (prevPage !== newPage && !isAllSearchPage(newPage)) {\n onPageChange?.(newPage);\n }\n return newPage;\n });\n },\n [isAllSearchPage, onPageChange],\n );\n\n React.useEffect(() => {\n if (hasAllSearchResultsPage) {\n handlePageChange(allSearchResultsId);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [hasAllSearchResultsPage]);\n\n React.useEffect(() => {\n if (activePage !== selectedPage) {\n handlePageChange(activePage);\n }\n });\n\n React.useEffect(() => {\n if (!selectionInitialPage) return;\n setCurrentPage(selectionInitialPage);\n }, [selectionInitialPage]);\n\n React.useEffect(() => {\n if (selected.selectedRef?.current) {\n selected.selectedRef.current.scrollIntoView();\n }\n }, [selected.selectedRef]);\n\n const tabContent = React.useMemo(\n () => (\n <div className={b('page')}>\n <SettingsPageComponent\n menu={menu}\n pages={pages}\n selected={selected}\n search={search}\n isMobile={isMobile}\n page={activePage}\n emptyPlaceholder={emptyPlaceholder}\n renderNotFound={renderNotFound}\n onClose={onClose}\n />\n </div>\n ),\n [\n activePage,\n emptyPlaceholder,\n isMobile,\n menu,\n onClose,\n pages,\n renderNotFound,\n search,\n selected,\n ],\n );\n\n const contentInnerProps = React.useMemo<SettingsContentInnerProps>(\n () => ({\n menu,\n onPageChange: handlePageChange,\n selected,\n setSearch,\n activePage,\n filterPlaceholder,\n selection,\n initialSearch,\n title,\n search,\n }),\n [\n activePage,\n filterPlaceholder,\n handlePageChange,\n initialSearch,\n menu,\n search,\n selected,\n selection,\n title,\n ],\n );\n\n return (\n <SettingsSelectionContextProvider value={selected}>\n <div className={b({view})}>\n {isMobile ? (\n <SettingsContentInnerMobile {...contentInnerProps}>\n {tabContent}\n </SettingsContentInnerMobile>\n ) : (\n <SettingsContentInnerDesktop {...contentInnerProps}>\n {tabContent}\n </SettingsContentInnerDesktop>\n )}\n </div>\n </SettingsSelectionContextProvider>\n );\n}\n\nSettings.Group = function SettingsGroup({children}: SettingsGroupProps) {\n return <React.Fragment>{children}</React.Fragment>;\n};\n\nSettings.Page = function SettingsPage({children}: SettingsPageProps) {\n return <React.Fragment>{children}</React.Fragment>;\n};\n\nSettings.Section = function SettingsSection({children}: SettingsSectionProps) {\n return <React.Fragment>{children}</React.Fragment>;\n};\n\nSettings.Item = function SettingsItem(setting: SettingsItemProps) {\n const {\n id,\n labelId,\n highlightedTitle,\n children,\n align = 'center',\n withBadge,\n renderTitleComponent = identity,\n mode,\n description,\n } = setting;\n\n const selected = useSettingsSelectionContext();\n const isSettingSelected = selected.setting && selected.setting.id === id;\n\n const {renderRightAdornment, showRightAdornmentOnHover} = useSettingsContext();\n const titleComponent = renderTitleComponent(highlightedTitle);\n const titleNode = <span className={b('item-title', {badge: withBadge})}>{titleComponent}</span>;\n\n const showTitle = titleComponent !== null;\n\n return (\n <div\n className={b('item', {\n align,\n mode,\n selected: isSettingSelected,\n title: showTitle ? 'show' : 'hide',\n })}\n ref={isSettingSelected ? selected.selectedRef : undefined}\n >\n {showTitle ? (\n <label className={b('item-heading')} id={labelId}>\n {renderRightAdornment ? (\n <Flex className={b('item-title-wrapper')} gap={3}>\n {titleNode}\n <div\n className={b('item-right-adornment', {\n hidden: showRightAdornmentOnHover,\n })}\n >\n {renderRightAdornment(setting)}\n </div>\n </Flex>\n ) : (\n titleNode\n )}\n {description ? (\n <span className={b('item-description')}>{description}</span>\n ) : null}\n </label>\n ) : null}\n <div className={b('item-content')}>{children}</div>\n </div>\n );\n};\n"],"names":["__rest","b","Loader","SettingsContext","TabProvider","SettingsSearch","SettingsMenuMobile","TabPanel","Title","SettingsMenu","i18n","getSettingsFromChildren","useSettingsSelectionProviderValue","useAllResultsPage","SettingsPageComponent","SettingsSelectionContextProvider","useSettingsSelectionContext","useSettingsContext","Flex"],"mappings":"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"}
1
+ {"version":3,"file":"Settings.js","sources":["../../../../../src/components/Settings/Settings.tsx"],"sourcesContent":["import React, {PropsWithChildren} from 'react';\n\nimport {Flex, Loader, TabPanel, TabProvider} from '@gravity-ui/uikit';\nimport identity from 'lodash/identity';\n\nimport {Title} from '../Title';\n\nimport {\n SettingsSelectionContextProvider,\n SettingsSelectionProviderContextValue,\n useSettingsSelectionContext,\n useSettingsSelectionProviderValue,\n} from './Selection/context';\nimport {SettingsContext} from './SettingsContext/SettingsContext';\nimport {useSettingsContext} from './SettingsContext/useSettingsContext';\nimport {SettingsMenu, SettingsMenuInstance} from './SettingsMenu/SettingsMenu';\nimport {SettingsMenuMobile} from './SettingsMenuMobile/SettingsMenuMobile';\nimport {SettingsPageComponent} from './SettingsPage/SettingsPageComponent';\nimport {useAllResultsPage} from './SettingsSearch/AllResultsPage';\nimport {SettingsSearch} from './SettingsSearch/SettingsSearch';\nimport {b} from './b';\nimport {SettingsMenu as SettingsMenuType, getSettingsFromChildren} from './collect-settings';\nimport i18n from './i18n';\nimport type {\n SettingsContentProps,\n SettingsGroupProps,\n SettingsItemProps,\n SettingsPageProps,\n SettingsProps,\n SettingsSectionProps,\n} from './types';\n\nexport function Settings({\n loading,\n renderLoading,\n children,\n view = 'normal',\n renderRightAdornment,\n renderSectionRightAdornment,\n showRightAdornmentOnHover = true,\n ...props\n}: SettingsProps) {\n if (loading) {\n return (\n <div className={b({loading: true, view})}>\n {typeof renderLoading === 'function' ? (\n renderLoading()\n ) : (\n <Loader className={b('loader')} size=\"m\" />\n )}\n </div>\n );\n }\n\n return (\n <SettingsContext.Provider\n value={{renderRightAdornment, renderSectionRightAdornment, showRightAdornmentOnHover}}\n >\n <SettingsContent view={view} {...props}>\n {children}\n </SettingsContent>\n </SettingsContext.Provider>\n );\n}\n\ninterface SettingsContentInnerProps\n extends PropsWithChildren,\n Pick<SettingsContentProps, 'initialSearch' | 'selection' | 'title' | 'filterPlaceholder'> {\n initialSearch?: string;\n selected: SettingsSelectionProviderContextValue;\n activePage?: string;\n menu: SettingsMenuType;\n search: string;\n setSearch: (newValue: string) => void;\n onPageChange: (newPage: string | undefined) => void;\n}\n\nfunction SettingsContentInnerMobile({\n initialSearch,\n selection,\n menu,\n activePage,\n setSearch,\n onPageChange,\n children,\n enableTabsScroll,\n}: SettingsContentInnerProps & {enableTabsScroll?: boolean}) {\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n\n return (\n <TabProvider value={activePage} onUpdate={onPageChange}>\n <React.Fragment>\n <SettingsSearch\n inputRef={searchInputRef}\n className={b('search')}\n initialValue={initialSearch}\n selection={selection}\n onChange={setSearch}\n autoFocus={false}\n inputSize={'xl'}\n />\n <SettingsMenuMobile\n items={menu}\n className={b('tabs')}\n enableTabsScroll={enableTabsScroll}\n />\n </React.Fragment>\n {activePage ? <TabPanel value={activePage}>{children}</TabPanel> : children}\n </TabProvider>\n );\n}\n\nfunction SettingsContentInnerDesktop({\n title,\n selection,\n menu,\n activePage,\n filterPlaceholder,\n initialSearch,\n search,\n setSearch,\n onPageChange,\n children,\n}: SettingsContentInnerProps) {\n const menuRef = React.useRef<SettingsMenuInstance>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n menuRef.current?.clearFocus();\n }, [search]);\n\n React.useEffect(() => {\n const handler = () => {\n menuRef.current?.clearFocus();\n };\n window.addEventListener('click', handler);\n return () => {\n window.removeEventListener('click', handler);\n };\n }, []);\n\n return (\n <React.Fragment>\n <div\n className={b('menu')}\n onClick={() => {\n if (searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }}\n onKeyDown={(event) => {\n if (menuRef.current) {\n if (menuRef.current.handleKeyDown(event)) {\n event.preventDefault();\n }\n }\n }}\n >\n <Title>{title}</Title>\n <SettingsSearch\n inputRef={searchInputRef}\n className={b('search')}\n initialValue={initialSearch}\n selection={selection}\n onChange={setSearch}\n placeholder={filterPlaceholder}\n autoFocus\n />\n <SettingsMenu\n ref={menuRef}\n items={menu}\n onChange={onPageChange}\n activeItemId={activePage}\n />\n </div>\n {children}\n </React.Fragment>\n );\n}\n\nfunction SettingsContent({\n initialPage,\n initialSearch,\n selection,\n children,\n renderNotFound,\n title = i18n('label_title'),\n filterPlaceholder = i18n('label_filter-placeholder'),\n emptyPlaceholder = i18n('label_empty-placeholder'),\n view,\n onPageChange,\n onClose,\n enableMobileSettingsTabsScroll,\n}: SettingsContentProps) {\n const [search, setSearch] = React.useState(initialSearch ?? '');\n const {menu, pages} = getSettingsFromChildren(children, search);\n\n const selected = useSettingsSelectionProviderValue(pages, selection);\n\n const pageKeys = Object.keys(pages);\n const selectionInitialPage =\n selected.page && pageKeys.includes(selected.page.id) ? selected.page.id : undefined;\n const [selectedPage, setCurrentPage] = React.useState<string | undefined>(\n selectionInitialPage ||\n (initialPage && pageKeys.includes(initialPage) ? initialPage : undefined),\n );\n const isMobile = view === 'mobile';\n\n let activePage = selectedPage;\n\n if (!activePage || !pages[activePage] || pages[activePage].hidden) {\n activePage = Object.values(pages).find(({hidden}) => !hidden)?.id;\n }\n\n const {isAllSearchPage, hasAllSearchResultsPage, allSearchResultsId} = useAllResultsPage({\n pages,\n });\n\n const handlePageChange = React.useCallback(\n (newPage: string | undefined) => {\n setCurrentPage((prevPage) => {\n if (prevPage !== newPage && !isAllSearchPage(newPage)) {\n onPageChange?.(newPage);\n }\n return newPage;\n });\n },\n [isAllSearchPage, onPageChange],\n );\n\n React.useEffect(() => {\n if (hasAllSearchResultsPage) {\n handlePageChange(allSearchResultsId);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [hasAllSearchResultsPage]);\n\n React.useEffect(() => {\n if (activePage !== selectedPage) {\n handlePageChange(activePage);\n }\n });\n\n React.useEffect(() => {\n if (!selectionInitialPage) return;\n setCurrentPage(selectionInitialPage);\n }, [selectionInitialPage]);\n\n React.useEffect(() => {\n if (selected.selectedRef?.current) {\n selected.selectedRef.current.scrollIntoView();\n }\n }, [selected.selectedRef]);\n\n const tabContent = React.useMemo(\n () => (\n <div className={b('page')}>\n <SettingsPageComponent\n menu={menu}\n pages={pages}\n selected={selected}\n search={search}\n isMobile={isMobile}\n page={activePage}\n emptyPlaceholder={emptyPlaceholder}\n renderNotFound={renderNotFound}\n onClose={onClose}\n />\n </div>\n ),\n [\n activePage,\n emptyPlaceholder,\n isMobile,\n menu,\n onClose,\n pages,\n renderNotFound,\n search,\n selected,\n ],\n );\n\n const contentInnerProps = React.useMemo<SettingsContentInnerProps>(\n () => ({\n menu,\n onPageChange: handlePageChange,\n selected,\n setSearch,\n activePage,\n filterPlaceholder,\n selection,\n initialSearch,\n title,\n search,\n }),\n [\n activePage,\n filterPlaceholder,\n handlePageChange,\n initialSearch,\n menu,\n search,\n selected,\n selection,\n title,\n ],\n );\n\n return (\n <SettingsSelectionContextProvider value={selected}>\n <div className={b({view})}>\n {isMobile ? (\n <SettingsContentInnerMobile\n {...contentInnerProps}\n enableTabsScroll={enableMobileSettingsTabsScroll}\n >\n {tabContent}\n </SettingsContentInnerMobile>\n ) : (\n <SettingsContentInnerDesktop {...contentInnerProps}>\n {tabContent}\n </SettingsContentInnerDesktop>\n )}\n </div>\n </SettingsSelectionContextProvider>\n );\n}\n\nSettings.Group = function SettingsGroup({children}: SettingsGroupProps) {\n return <React.Fragment>{children}</React.Fragment>;\n};\n\nSettings.Page = function SettingsPage({children}: SettingsPageProps) {\n return <React.Fragment>{children}</React.Fragment>;\n};\n\nSettings.Section = function SettingsSection({children}: SettingsSectionProps) {\n return <React.Fragment>{children}</React.Fragment>;\n};\n\nSettings.Item = function SettingsItem(setting: SettingsItemProps) {\n const {\n id,\n labelId,\n highlightedTitle,\n children,\n align = 'center',\n withBadge,\n renderTitleComponent = identity,\n mode,\n description,\n } = setting;\n\n const selected = useSettingsSelectionContext();\n const isSettingSelected = selected.setting && selected.setting.id === id;\n\n const {renderRightAdornment, showRightAdornmentOnHover} = useSettingsContext();\n const titleComponent = renderTitleComponent(highlightedTitle);\n const titleNode = <span className={b('item-title', {badge: withBadge})}>{titleComponent}</span>;\n\n const showTitle = titleComponent !== null;\n\n return (\n <div\n className={b('item', {\n align,\n mode,\n selected: isSettingSelected,\n title: showTitle ? 'show' : 'hide',\n })}\n ref={isSettingSelected ? selected.selectedRef : undefined}\n >\n {showTitle ? (\n <label className={b('item-heading')} id={labelId}>\n {renderRightAdornment ? (\n <Flex className={b('item-title-wrapper')} gap={3}>\n {titleNode}\n <div\n className={b('item-right-adornment', {\n hidden: showRightAdornmentOnHover,\n })}\n >\n {renderRightAdornment(setting)}\n </div>\n </Flex>\n ) : (\n titleNode\n )}\n {description ? (\n <span className={b('item-description')}>{description}</span>\n ) : null}\n </label>\n ) : null}\n <div className={b('item-content')}>{children}</div>\n </div>\n );\n};\n"],"names":["__rest","b","Loader","SettingsContext","TabProvider","SettingsSearch","SettingsMenuMobile","TabPanel","Title","SettingsMenu","i18n","getSettingsFromChildren","useSettingsSelectionProviderValue","useAllResultsPage","SettingsPageComponent","SettingsSelectionContextProvider","useSettingsSelectionContext","useSettingsContext","Flex"],"mappings":";;;;;;;;;;;;;;;;;;;AAgCM,SAAU,QAAQ,CAAC,EAST,EAAA;QATS,EACrB,OAAO,EACP,aAAa,EACb,QAAQ,EACR,IAAI,GAAG,QAAQ,EACf,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,GAAG,IAAI,OAEpB,EADT,KAAK,GARaA,YAAA,CAAA,EAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,UAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,6BAAA,EAAA,2BAAA,CASxB,CADW;IAER,IAAI,OAAO,EAAE;QACT,QACI,6BAAK,SAAS,EAAEC,GAAC,CAAC,EAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,EACnC,EAAA,OAAO,aAAa,KAAK,UAAU,IAChC,aAAa,EAAE,KAEf,KAAC,CAAA,aAAA,CAAAC,YAAM,EAAC,EAAA,SAAS,EAAED,GAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAC,GAAG,EAAG,CAAA,CAC9C,CACC;;AAId,IAAA,QACI,KAAA,CAAA,aAAA,CAACE,+BAAe,CAAC,QAAQ,EACrB,EAAA,KAAK,EAAE,EAAC,oBAAoB,EAAE,2BAA2B,EAAE,yBAAyB,EAAC,EAAA;AAErF,QAAA,KAAA,CAAA,aAAA,CAAC,eAAe,EAAA,MAAA,CAAA,MAAA,CAAA,EAAC,IAAI,EAAE,IAAI,EAAA,EAAM,KAAK,CAAA,EACjC,QAAQ,CACK,CACK;AAEnC;AAcA,SAAS,0BAA0B,CAAC,EAChC,aAAa,EACb,SAAS,EACT,IAAI,EACJ,UAAU,EACV,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,gBAAgB,GACuC,EAAA;IACvD,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAmB,IAAI,CAAC;IAE3D,QACI,KAAC,CAAA,aAAA,CAAAC,iBAAW,EAAC,EAAA,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAA;QAClD,KAAC,CAAA,aAAA,CAAA,KAAK,CAAC,QAAQ,EAAA,IAAA;AACX,YAAA,KAAA,CAAA,aAAA,CAACC,6BAAc,EAAA,EACX,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAEJ,GAAC,CAAC,QAAQ,CAAC,EACtB,YAAY,EAAE,aAAa,EAC3B,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,KAAK,EAChB,SAAS,EAAE,IAAI,EACjB,CAAA;AACF,YAAA,KAAA,CAAA,aAAA,CAACK,qCAAkB,EACf,EAAA,KAAK,EAAE,IAAI,EACX,SAAS,EAAEL,GAAC,CAAC,MAAM,CAAC,EACpB,gBAAgB,EAAE,gBAAgB,GACpC,CACW;AAChB,QAAA,UAAU,GAAG,oBAACM,cAAQ,EAAA,EAAC,KAAK,EAAE,UAAU,EAAG,EAAA,QAAQ,CAAY,GAAG,QAAQ,CACjE;AAEtB;AAEA,SAAS,2BAA2B,CAAC,EACjC,KAAK,EACL,SAAS,EACT,IAAI,EACJ,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,MAAM,EACN,SAAS,EACT,YAAY,EACZ,QAAQ,GACgB,EAAA;IACxB,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAuB,IAAI,CAAC;IACxD,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAmB,IAAI,CAAC;AAE3D,IAAA,KAAK,CAAC,SAAS,CAAC,MAAK;;AACjB,QAAA,CAAA,EAAA,GAAA,OAAO,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,SAAA,GAAA,EAAA,CAAA,UAAU,EAAE;AACjC,KAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAEZ,IAAA,KAAK,CAAC,SAAS,CAAC,MAAK;QACjB,MAAM,OAAO,GAAG,MAAK;;AACjB,YAAA,CAAA,EAAA,GAAA,OAAO,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,SAAA,GAAA,EAAA,CAAA,UAAU,EAAE;AACjC,SAAC;AACD,QAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;AACzC,QAAA,OAAO,MAAK;AACR,YAAA,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;AAChD,SAAC;KACJ,EAAE,EAAE,CAAC;AAEN,IAAA,QACI,KAAA,CAAA,aAAA,CAAC,KAAK,CAAC,QAAQ,EAAA,IAAA;QACX,KACI,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAEN,GAAC,CAAC,MAAM,CAAC,EACpB,OAAO,EAAE,MAAK;AACV,gBAAA,IAAI,cAAc,CAAC,OAAO,EAAE;AACxB,oBAAA,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE;;AAEtC,aAAC,EACD,SAAS,EAAE,CAAC,KAAK,KAAI;AACjB,gBAAA,IAAI,OAAO,CAAC,OAAO,EAAE;oBACjB,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;wBACtC,KAAK,CAAC,cAAc,EAAE;;;aAGjC,EAAA;YAED,KAAC,CAAA,aAAA,CAAAO,WAAK,EAAE,IAAA,EAAA,KAAK,CAAS;AACtB,YAAA,KAAA,CAAA,aAAA,CAACH,6BAAc,EAAA,EACX,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAEJ,GAAC,CAAC,QAAQ,CAAC,EACtB,YAAY,EAAE,aAAa,EAC3B,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,SAAS,EACnB,WAAW,EAAE,iBAAiB,EAC9B,SAAS,EACX,IAAA,EAAA,CAAA;AACF,YAAA,KAAA,CAAA,aAAA,CAACQ,yBAAY,EACT,EAAA,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,UAAU,GAC1B,CACA;QACL,QAAQ,CACI;AAEzB;AAEA,SAAS,eAAe,CAAC,EACrB,WAAW,EACX,aAAa,EACb,SAAS,EACT,QAAQ,EACR,cAAc,EACd,KAAK,GAAGC,aAAI,CAAC,aAAa,CAAC,EAC3B,iBAAiB,GAAGA,aAAI,CAAC,0BAA0B,CAAC,EACpD,gBAAgB,GAAGA,aAAI,CAAC,yBAAyB,CAAC,EAClD,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,8BAA8B,GACX,EAAA;;AACnB,IAAA,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,aAAa,aAAb,aAAa,KAAA,SAAA,GAAb,aAAa,GAAI,EAAE,CAAC;AAC/D,IAAA,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAGC,uCAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE/D,MAAM,QAAQ,GAAGC,yCAAiC,CAAC,KAAK,EAAE,SAAS,CAAC;IAEpE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACnC,IAAA,MAAM,oBAAoB,GACtB,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS;IACvF,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CACjD,oBAAoB;AAChB,SAAC,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,WAAW,GAAG,SAAS,CAAC,CAChF;AACD,IAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,QAAQ;IAElC,IAAI,UAAU,GAAG,YAAY;AAE7B,IAAA,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE;QAC/D,UAAU,GAAG,MAAA,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAC,MAAM,EAAC,KAAK,CAAC,MAAM,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,SAAA,GAAA,EAAA,CAAA,EAAE;;IAGrE,MAAM,EAAC,eAAe,EAAE,uBAAuB,EAAE,kBAAkB,EAAC,GAAGC,gCAAiB,CAAC;QACrF,KAAK;AACR,KAAA,CAAC;IAEF,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,CACtC,CAAC,OAA2B,KAAI;AAC5B,QAAA,cAAc,CAAC,CAAC,QAAQ,KAAI;YACxB,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE;AACnD,gBAAA,YAAY,aAAZ,YAAY,KAAA,SAAA,GAAA,SAAA,GAAZ,YAAY,CAAG,OAAO,CAAC;;AAE3B,YAAA,OAAO,OAAO;AAClB,SAAC,CAAC;AACN,KAAC,EACD,CAAC,eAAe,EAAE,YAAY,CAAC,CAClC;AAED,IAAA,KAAK,CAAC,SAAS,CAAC,MAAK;QACjB,IAAI,uBAAuB,EAAE;YACzB,gBAAgB,CAAC,kBAAkB,CAAC;;;AAG5C,KAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC;AAE7B,IAAA,KAAK,CAAC,SAAS,CAAC,MAAK;AACjB,QAAA,IAAI,UAAU,KAAK,YAAY,EAAE;YAC7B,gBAAgB,CAAC,UAAU,CAAC;;AAEpC,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,SAAS,CAAC,MAAK;AACjB,QAAA,IAAI,CAAC,oBAAoB;YAAE;QAC3B,cAAc,CAAC,oBAAoB,CAAC;AACxC,KAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC;AAE1B,IAAA,KAAK,CAAC,SAAS,CAAC,MAAK;;AACjB,QAAA,IAAI,MAAA,QAAQ,CAAC,WAAW,MAAE,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,SAAA,GAAA,EAAA,CAAA,OAAO,EAAE;AAC/B,YAAA,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE;;AAErD,KAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAE1B,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAC5B,OACI,6BAAK,SAAS,EAAEZ,GAAC,CAAC,MAAM,CAAC,EAAA;AACrB,QAAA,KAAA,CAAA,aAAA,CAACa,2CAAqB,EAClB,EAAA,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,UAAU,EAChB,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAClB,CAAA,CACA,CACT,EACD;QACI,UAAU;QACV,gBAAgB;QAChB,QAAQ;QACR,IAAI;QACJ,OAAO;QACP,KAAK;QACL,cAAc;QACd,MAAM;QACN,QAAQ;AACX,KAAA,CACJ;IAED,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CACnC,OAAO;QACH,IAAI;AACJ,QAAA,YAAY,EAAE,gBAAgB;QAC9B,QAAQ;QACR,SAAS;QACT,UAAU;QACV,iBAAiB;QACjB,SAAS;QACT,aAAa;QACb,KAAK;QACL,MAAM;AACT,KAAA,CAAC,EACF;QACI,UAAU;QACV,iBAAiB;QACjB,gBAAgB;QAChB,aAAa;QACb,IAAI;QACJ,MAAM;QACN,QAAQ;QACR,SAAS;QACT,KAAK;AACR,KAAA,CACJ;AAED,IAAA,QACI,KAAC,CAAA,aAAA,CAAAC,wCAAgC,EAAC,EAAA,KAAK,EAAE,QAAQ,EAAA;AAC7C,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEd,GAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAA,EACpB,QAAQ,IACL,oBAAC,0BAA0B,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACnB,iBAAiB,EACrB,EAAA,gBAAgB,EAAE,8BAA8B,KAE/C,UAAU,CACc,KAE7B,KAAA,CAAA,aAAA,CAAC,2BAA2B,EAAK,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,iBAAiB,GAC7C,UAAU,CACe,CACjC,CACC,CACyB;AAE3C;AAEA,QAAQ,CAAC,KAAK,GAAG,SAAS,aAAa,CAAC,EAAC,QAAQ,EAAqB,EAAA;AAClE,IAAA,OAAO,oBAAC,KAAK,CAAC,QAAQ,EAAE,IAAA,EAAA,QAAQ,CAAkB;AACtD,CAAC;AAED,QAAQ,CAAC,IAAI,GAAG,SAAS,YAAY,CAAC,EAAC,QAAQ,EAAoB,EAAA;AAC/D,IAAA,OAAO,oBAAC,KAAK,CAAC,QAAQ,EAAE,IAAA,EAAA,QAAQ,CAAkB;AACtD,CAAC;AAED,QAAQ,CAAC,OAAO,GAAG,SAAS,eAAe,CAAC,EAAC,QAAQ,EAAuB,EAAA;AACxE,IAAA,OAAO,oBAAC,KAAK,CAAC,QAAQ,EAAE,IAAA,EAAA,QAAQ,CAAkB;AACtD,CAAC;AAED,QAAQ,CAAC,IAAI,GAAG,SAAS,YAAY,CAAC,OAA0B,EAAA;IAC5D,MAAM,EACF,EAAE,EACF,OAAO,EACP,gBAAgB,EAChB,QAAQ,EACR,KAAK,GAAG,QAAQ,EAChB,SAAS,EACT,oBAAoB,GAAG,QAAQ,EAC/B,IAAI,EACJ,WAAW,GACd,GAAG,OAAO;AAEX,IAAA,MAAM,QAAQ,GAAGe,mCAA2B,EAAE;AAC9C,IAAA,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE;IAExE,MAAM,EAAC,oBAAoB,EAAE,yBAAyB,EAAC,GAAGC,qCAAkB,EAAE;AAC9E,IAAA,MAAM,cAAc,GAAG,oBAAoB,CAAC,gBAAgB,CAAC;AAC7D,IAAA,MAAM,SAAS,GAAG,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAEhB,GAAC,CAAC,YAAY,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC,EAAG,EAAA,cAAc,CAAQ;AAE/F,IAAA,MAAM,SAAS,GAAG,cAAc,KAAK,IAAI;AAEzC,IAAA,QACI,KACI,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAEA,GAAC,CAAC,MAAM,EAAE;YACjB,KAAK;YACL,IAAI;AACJ,YAAA,QAAQ,EAAE,iBAAiB;YAC3B,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM;AACrC,SAAA,CAAC,EACF,GAAG,EAAE,iBAAiB,GAAG,QAAQ,CAAC,WAAW,GAAG,SAAS,EAAA;AAExD,QAAA,SAAS,IACN,+BAAO,SAAS,EAAEA,GAAC,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,OAAO,EAAA;AAC3C,YAAA,oBAAoB,IACjB,KAAA,CAAA,aAAA,CAACiB,UAAI,EAAC,EAAA,SAAS,EAAEjB,GAAC,CAAC,oBAAoB,CAAC,EAAE,GAAG,EAAE,CAAC,EAAA;gBAC3C,SAAS;AACV,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACI,SAAS,EAAEA,GAAC,CAAC,sBAAsB,EAAE;AACjC,wBAAA,MAAM,EAAE,yBAAyB;AACpC,qBAAA,CAAC,EAED,EAAA,oBAAoB,CAAC,OAAO,CAAC,CAC5B,CACH,KAEP,SAAS,CACZ;YACA,WAAW,IACR,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAEA,GAAC,CAAC,kBAAkB,CAAC,EAAA,EAAG,WAAW,CAAQ,IAC5D,IAAI,CACJ,IACR,IAAI;QACR,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAEA,GAAC,CAAC,cAAc,CAAC,EAAA,EAAG,QAAQ,CAAO,CACjD;AAEd,CAAC;;;;"}
@@ -1,3 +1,3 @@
1
1
  import React from 'react';
2
2
  import { SettingsMenuMobileProps } from '../types';
3
- export declare const SettingsMenuMobile: ({ items, className }: SettingsMenuMobileProps) => React.JSX.Element;
3
+ export declare const SettingsMenuMobile: ({ items, className, enableTabsScroll, }: SettingsMenuMobileProps) => React.JSX.Element;
@@ -7,7 +7,7 @@ var cn = require('../../utils/cn.js');
7
7
  var SettingsMenuMobile_module = require('./SettingsMenuMobile.module.scss.js');
8
8
 
9
9
  const b = cn.createBlock('settings-menu-mobile', SettingsMenuMobile_module.default);
10
- const SettingsMenuMobile = ({ items, className }) => {
10
+ const SettingsMenuMobile = ({ items, className, enableTabsScroll, }) => {
11
11
  const ref = React.useRef(null);
12
12
  const tabItems = React.useMemo(() => {
13
13
  const result = [];
@@ -36,7 +36,7 @@ const SettingsMenuMobile = ({ items, className }) => {
36
36
  e.stopPropagation();
37
37
  };
38
38
  return (React.createElement("div", { ref: ref, onTouchMove: handleTouchMove },
39
- React.createElement(uikit.TabList, { size: "l", className: b(null, className) }, tabItems.map((item) => (React.createElement(uikit.Tab, Object.assign({ key: item.value }, item)))))));
39
+ React.createElement(uikit.TabList, { size: "l", className: b(null, className), contentOverflow: enableTabsScroll ? 'scroll' : 'wrap' }, tabItems.map((item) => (React.createElement(uikit.Tab, Object.assign({ key: item.value }, item)))))));
40
40
  };
41
41
 
42
42
  exports.SettingsMenuMobile = SettingsMenuMobile;
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsMenuMobile.js","sources":["../../../../../../src/components/Settings/SettingsMenuMobile/SettingsMenuMobile.tsx"],"sourcesContent":["import React from 'react';\n\nimport {Tab, TabList, TabProps} from '@gravity-ui/uikit';\n\nimport {createBlock} from '../../utils/cn';\nimport {SettingsMenuMobileProps} from '../types';\n\nimport styles from './SettingsMenuMobile.module.scss';\n\nconst b = createBlock('settings-menu-mobile', styles);\n\nexport const SettingsMenuMobile = ({items, className}: SettingsMenuMobileProps) => {\n const ref = React.useRef<HTMLDivElement>(null);\n\n const tabItems = React.useMemo(() => {\n const result: TabProps[] = [];\n\n items.forEach((firstLevelItem) => {\n if ('groupTitle' in firstLevelItem) {\n result.push(\n ...firstLevelItem.items.map(({id, title, disabled, withBadge}) => ({\n value: id,\n children: title,\n disabled,\n className: b('item', {badge: withBadge}),\n })),\n );\n } else {\n const {id, title, disabled, withBadge} = firstLevelItem;\n result.push({\n value: id,\n children: title,\n disabled,\n className: b('item', {badge: withBadge}),\n });\n }\n });\n return result;\n }, [items]);\n\n const handleTouchMove = (e: React.TouchEvent<HTMLDivElement>) => {\n e.stopPropagation();\n };\n\n return (\n <div ref={ref} onTouchMove={handleTouchMove}>\n <TabList size=\"l\" className={b(null, className)}>\n {tabItems.map((item) => (\n <Tab key={item.value} {...item} />\n ))}\n </TabList>\n </div>\n );\n};\n"],"names":["createBlock","styles","TabList","Tab"],"mappings":";;;;;;;AASA,MAAM,CAAC,GAAGA,cAAW,CAAC,sBAAsB,EAAEC,iCAAM,CAAC;AAExC,MAAA,kBAAkB,GAAG,CAAC,EAAC,KAAK,EAAE,SAAS,EAA0B,KAAI;IAC9E,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC;AAE9C,IAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAK;QAChC,MAAM,MAAM,GAAe,EAAE;AAE7B,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,cAAc,KAAI;AAC7B,YAAA,IAAI,YAAY,IAAI,cAAc,EAAE;gBAChC,MAAM,CAAC,IAAI,CACP,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAC,MAAM;AAC/D,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,QAAQ,EAAE,KAAK;oBACf,QAAQ;oBACR,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC;iBAC3C,CAAC,CAAC,CACN;;iBACE;gBACH,MAAM,EAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAC,GAAG,cAAc;gBACvD,MAAM,CAAC,IAAI,CAAC;AACR,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,QAAQ,EAAE,KAAK;oBACf,QAAQ;oBACR,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC;AAC3C,iBAAA,CAAC;;AAEV,SAAC,CAAC;AACF,QAAA,OAAO,MAAM;AACjB,KAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEX,IAAA,MAAM,eAAe,GAAG,CAAC,CAAmC,KAAI;QAC5D,CAAC,CAAC,eAAe,EAAE;AACvB,KAAC;IAED,QACI,6BAAK,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,eAAe,EAAA;AACvC,QAAA,KAAA,CAAA,aAAA,CAACC,aAAO,EAAC,EAAA,IAAI,EAAC,GAAG,EAAC,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,IAC1C,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,MACf,oBAACC,SAAG,EAAA,MAAA,CAAA,MAAA,CAAA,EAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAA,EAAM,IAAI,CAAI,CAAA,CACrC,CAAC,CACI,CACR;AAEd;;;;"}
1
+ {"version":3,"file":"SettingsMenuMobile.js","sources":["../../../../../../src/components/Settings/SettingsMenuMobile/SettingsMenuMobile.tsx"],"sourcesContent":["import React from 'react';\n\nimport {Tab, TabList, TabProps} from '@gravity-ui/uikit';\n\nimport {createBlock} from '../../utils/cn';\nimport {SettingsMenuMobileProps} from '../types';\n\nimport styles from './SettingsMenuMobile.module.scss';\n\nconst b = createBlock('settings-menu-mobile', styles);\n\nexport const SettingsMenuMobile = ({\n items,\n className,\n enableTabsScroll,\n}: SettingsMenuMobileProps) => {\n const ref = React.useRef<HTMLDivElement>(null);\n\n const tabItems = React.useMemo(() => {\n const result: TabProps[] = [];\n\n items.forEach((firstLevelItem) => {\n if ('groupTitle' in firstLevelItem) {\n result.push(\n ...firstLevelItem.items.map(({id, title, disabled, withBadge}) => ({\n value: id,\n children: title,\n disabled,\n className: b('item', {badge: withBadge}),\n })),\n );\n } else {\n const {id, title, disabled, withBadge} = firstLevelItem;\n result.push({\n value: id,\n children: title,\n disabled,\n className: b('item', {badge: withBadge}),\n });\n }\n });\n return result;\n }, [items]);\n\n const handleTouchMove = (e: React.TouchEvent<HTMLDivElement>) => {\n e.stopPropagation();\n };\n\n return (\n <div ref={ref} onTouchMove={handleTouchMove}>\n <TabList\n size=\"l\"\n className={b(null, className)}\n contentOverflow={enableTabsScroll ? 'scroll' : 'wrap'}\n >\n {tabItems.map((item) => (\n <Tab key={item.value} {...item} />\n ))}\n </TabList>\n </div>\n );\n};\n"],"names":["createBlock","styles","TabList","Tab"],"mappings":";;;;;;;AASA,MAAM,CAAC,GAAGA,cAAW,CAAC,sBAAsB,EAAEC,iCAAM,CAAC;AAE9C,MAAM,kBAAkB,GAAG,CAAC,EAC/B,KAAK,EACL,SAAS,EACT,gBAAgB,GACM,KAAI;IAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC;AAE9C,IAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAK;QAChC,MAAM,MAAM,GAAe,EAAE;AAE7B,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,cAAc,KAAI;AAC7B,YAAA,IAAI,YAAY,IAAI,cAAc,EAAE;gBAChC,MAAM,CAAC,IAAI,CACP,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAC,MAAM;AAC/D,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,QAAQ,EAAE,KAAK;oBACf,QAAQ;oBACR,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC;iBAC3C,CAAC,CAAC,CACN;;iBACE;gBACH,MAAM,EAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAC,GAAG,cAAc;gBACvD,MAAM,CAAC,IAAI,CAAC;AACR,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,QAAQ,EAAE,KAAK;oBACf,QAAQ;oBACR,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC;AAC3C,iBAAA,CAAC;;AAEV,SAAC,CAAC;AACF,QAAA,OAAO,MAAM;AACjB,KAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEX,IAAA,MAAM,eAAe,GAAG,CAAC,CAAmC,KAAI;QAC5D,CAAC,CAAC,eAAe,EAAE;AACvB,KAAC;IAED,QACI,6BAAK,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,eAAe,EAAA;QACvC,KAAC,CAAA,aAAA,CAAAC,aAAO,EACJ,EAAA,IAAI,EAAC,GAAG,EACR,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,EAC7B,eAAe,EAAE,gBAAgB,GAAG,QAAQ,GAAG,MAAM,IAEpD,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,MACf,KAAA,CAAA,aAAA,CAACC,SAAG,EAAA,MAAA,CAAA,MAAA,CAAA,EAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAM,EAAA,IAAI,CAAI,CAAA,CACrC,CAAC,CACI,CACR;AAEd;;;;"}
@@ -23,7 +23,9 @@ export interface SettingsMenuProps {
23
23
  focusItemId?: string;
24
24
  className?: string;
25
25
  }
26
- export type SettingsMenuMobileProps = Omit<SettingsMenuProps, 'activeItemId' | 'focusItemId' | 'onChange'>;
26
+ export type SettingsMenuMobileProps = Omit<SettingsMenuProps, 'activeItemId' | 'focusItemId' | 'onChange'> & {
27
+ enableTabsScroll?: boolean;
28
+ };
27
29
  export interface SettingsProps {
28
30
  children: React.ReactNode;
29
31
  title?: string;
@@ -41,6 +43,7 @@ export interface SettingsProps {
41
43
  renderRightAdornment?: (item: SettingsItemProps) => React.ReactNode;
42
44
  renderSectionRightAdornment?: (section: SettingsPageSection) => React.ReactNode;
43
45
  showRightAdornmentOnHover?: boolean;
46
+ enableMobileSettingsTabsScroll?: boolean;
44
47
  }
45
48
  export interface SettingsGroupProps {
46
49
  id?: string;
@@ -24,12 +24,12 @@ function Settings(_a) {
24
24
  return (React__default.createElement(SettingsContext.Provider, { value: { renderRightAdornment, renderSectionRightAdornment, showRightAdornmentOnHover } },
25
25
  React__default.createElement(SettingsContent, Object.assign({ view: view }, props), children)));
26
26
  }
27
- function SettingsContentInnerMobile({ initialSearch, selection, menu, activePage, setSearch, onPageChange, children, }) {
27
+ function SettingsContentInnerMobile({ initialSearch, selection, menu, activePage, setSearch, onPageChange, children, enableTabsScroll, }) {
28
28
  const searchInputRef = React__default.useRef(null);
29
29
  return (React__default.createElement(TabProvider, { value: activePage, onUpdate: onPageChange },
30
30
  React__default.createElement(React__default.Fragment, null,
31
31
  React__default.createElement(SettingsSearch, { inputRef: searchInputRef, className: b('search'), initialValue: initialSearch, selection: selection, onChange: setSearch, autoFocus: false, inputSize: 'xl' }),
32
- React__default.createElement(SettingsMenuMobile, { items: menu, className: b('tabs') })),
32
+ React__default.createElement(SettingsMenuMobile, { items: menu, className: b('tabs'), enableTabsScroll: enableTabsScroll })),
33
33
  activePage ? React__default.createElement(TabPanel, { value: activePage }, children) : children));
34
34
  }
35
35
  function SettingsContentInnerDesktop({ title, selection, menu, activePage, filterPlaceholder, initialSearch, search, setSearch, onPageChange, children, }) {
@@ -66,7 +66,7 @@ function SettingsContentInnerDesktop({ title, selection, menu, activePage, filte
66
66
  React__default.createElement(SettingsMenu, { ref: menuRef, items: menu, onChange: onPageChange, activeItemId: activePage })),
67
67
  children));
68
68
  }
69
- function SettingsContent({ initialPage, initialSearch, selection, children, renderNotFound, title = i18n('label_title'), filterPlaceholder = i18n('label_filter-placeholder'), emptyPlaceholder = i18n('label_empty-placeholder'), view, onPageChange, onClose, }) {
69
+ function SettingsContent({ initialPage, initialSearch, selection, children, renderNotFound, title = i18n('label_title'), filterPlaceholder = i18n('label_filter-placeholder'), emptyPlaceholder = i18n('label_empty-placeholder'), view, onPageChange, onClose, enableMobileSettingsTabsScroll, }) {
70
70
  var _a;
71
71
  const [search, setSearch] = React__default.useState(initialSearch !== null && initialSearch !== undefined ? initialSearch : '');
72
72
  const { menu, pages } = getSettingsFromChildren(children, search);
@@ -148,7 +148,7 @@ function SettingsContent({ initialPage, initialSearch, selection, children, rend
148
148
  title,
149
149
  ]);
150
150
  return (React__default.createElement(SettingsSelectionContextProvider, { value: selected },
151
- React__default.createElement("div", { className: b({ view }) }, isMobile ? (React__default.createElement(SettingsContentInnerMobile, Object.assign({}, contentInnerProps), tabContent)) : (React__default.createElement(SettingsContentInnerDesktop, Object.assign({}, contentInnerProps), tabContent)))));
151
+ React__default.createElement("div", { className: b({ view }) }, isMobile ? (React__default.createElement(SettingsContentInnerMobile, Object.assign({}, contentInnerProps, { enableTabsScroll: enableMobileSettingsTabsScroll }), tabContent)) : (React__default.createElement(SettingsContentInnerDesktop, Object.assign({}, contentInnerProps), tabContent)))));
152
152
  }
153
153
  Settings.Group = function SettingsGroup({ children }) {
154
154
  return React__default.createElement(React__default.Fragment, null, children);
@@ -1 +1 @@
1
- {"version":3,"file":"Settings.js","sources":["../../../../../src/components/Settings/Settings.tsx"],"sourcesContent":["import React, {PropsWithChildren} from 'react';\n\nimport {Flex, Loader, TabPanel, TabProvider} from '@gravity-ui/uikit';\nimport identity from 'lodash/identity';\n\nimport {Title} from '../Title';\n\nimport {\n SettingsSelectionContextProvider,\n SettingsSelectionProviderContextValue,\n useSettingsSelectionContext,\n useSettingsSelectionProviderValue,\n} from './Selection/context';\nimport {SettingsContext} from './SettingsContext/SettingsContext';\nimport {useSettingsContext} from './SettingsContext/useSettingsContext';\nimport {SettingsMenu, SettingsMenuInstance} from './SettingsMenu/SettingsMenu';\nimport {SettingsMenuMobile} from './SettingsMenuMobile/SettingsMenuMobile';\nimport {SettingsPageComponent} from './SettingsPage/SettingsPageComponent';\nimport {useAllResultsPage} from './SettingsSearch/AllResultsPage';\nimport {SettingsSearch} from './SettingsSearch/SettingsSearch';\nimport {b} from './b';\nimport {SettingsMenu as SettingsMenuType, getSettingsFromChildren} from './collect-settings';\nimport i18n from './i18n';\nimport type {\n SettingsContentProps,\n SettingsGroupProps,\n SettingsItemProps,\n SettingsPageProps,\n SettingsProps,\n SettingsSectionProps,\n} from './types';\n\nexport function Settings({\n loading,\n renderLoading,\n children,\n view = 'normal',\n renderRightAdornment,\n renderSectionRightAdornment,\n showRightAdornmentOnHover = true,\n ...props\n}: SettingsProps) {\n if (loading) {\n return (\n <div className={b({loading: true, view})}>\n {typeof renderLoading === 'function' ? (\n renderLoading()\n ) : (\n <Loader className={b('loader')} size=\"m\" />\n )}\n </div>\n );\n }\n\n return (\n <SettingsContext.Provider\n value={{renderRightAdornment, renderSectionRightAdornment, showRightAdornmentOnHover}}\n >\n <SettingsContent view={view} {...props}>\n {children}\n </SettingsContent>\n </SettingsContext.Provider>\n );\n}\n\ninterface SettingsContentInnerProps\n extends PropsWithChildren,\n Pick<SettingsContentProps, 'initialSearch' | 'selection' | 'title' | 'filterPlaceholder'> {\n initialSearch?: string;\n selected: SettingsSelectionProviderContextValue;\n activePage?: string;\n menu: SettingsMenuType;\n search: string;\n setSearch: (newValue: string) => void;\n onPageChange: (newPage: string | undefined) => void;\n}\n\nfunction SettingsContentInnerMobile({\n initialSearch,\n selection,\n menu,\n activePage,\n setSearch,\n onPageChange,\n children,\n}: SettingsContentInnerProps) {\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n\n return (\n <TabProvider value={activePage} onUpdate={onPageChange}>\n <React.Fragment>\n <SettingsSearch\n inputRef={searchInputRef}\n className={b('search')}\n initialValue={initialSearch}\n selection={selection}\n onChange={setSearch}\n autoFocus={false}\n inputSize={'xl'}\n />\n <SettingsMenuMobile items={menu} className={b('tabs')} />\n </React.Fragment>\n {activePage ? <TabPanel value={activePage}>{children}</TabPanel> : children}\n </TabProvider>\n );\n}\n\nfunction SettingsContentInnerDesktop({\n title,\n selection,\n menu,\n activePage,\n filterPlaceholder,\n initialSearch,\n search,\n setSearch,\n onPageChange,\n children,\n}: SettingsContentInnerProps) {\n const menuRef = React.useRef<SettingsMenuInstance>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n menuRef.current?.clearFocus();\n }, [search]);\n\n React.useEffect(() => {\n const handler = () => {\n menuRef.current?.clearFocus();\n };\n window.addEventListener('click', handler);\n return () => {\n window.removeEventListener('click', handler);\n };\n }, []);\n\n return (\n <React.Fragment>\n <div\n className={b('menu')}\n onClick={() => {\n if (searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }}\n onKeyDown={(event) => {\n if (menuRef.current) {\n if (menuRef.current.handleKeyDown(event)) {\n event.preventDefault();\n }\n }\n }}\n >\n <Title>{title}</Title>\n <SettingsSearch\n inputRef={searchInputRef}\n className={b('search')}\n initialValue={initialSearch}\n selection={selection}\n onChange={setSearch}\n placeholder={filterPlaceholder}\n autoFocus\n />\n <SettingsMenu\n ref={menuRef}\n items={menu}\n onChange={onPageChange}\n activeItemId={activePage}\n />\n </div>\n {children}\n </React.Fragment>\n );\n}\n\nfunction SettingsContent({\n initialPage,\n initialSearch,\n selection,\n children,\n renderNotFound,\n title = i18n('label_title'),\n filterPlaceholder = i18n('label_filter-placeholder'),\n emptyPlaceholder = i18n('label_empty-placeholder'),\n view,\n onPageChange,\n onClose,\n}: SettingsContentProps) {\n const [search, setSearch] = React.useState(initialSearch ?? '');\n const {menu, pages} = getSettingsFromChildren(children, search);\n\n const selected = useSettingsSelectionProviderValue(pages, selection);\n\n const pageKeys = Object.keys(pages);\n const selectionInitialPage =\n selected.page && pageKeys.includes(selected.page.id) ? selected.page.id : undefined;\n const [selectedPage, setCurrentPage] = React.useState<string | undefined>(\n selectionInitialPage ||\n (initialPage && pageKeys.includes(initialPage) ? initialPage : undefined),\n );\n const isMobile = view === 'mobile';\n\n let activePage = selectedPage;\n\n if (!activePage || !pages[activePage] || pages[activePage].hidden) {\n activePage = Object.values(pages).find(({hidden}) => !hidden)?.id;\n }\n\n const {isAllSearchPage, hasAllSearchResultsPage, allSearchResultsId} = useAllResultsPage({\n pages,\n });\n\n const handlePageChange = React.useCallback(\n (newPage: string | undefined) => {\n setCurrentPage((prevPage) => {\n if (prevPage !== newPage && !isAllSearchPage(newPage)) {\n onPageChange?.(newPage);\n }\n return newPage;\n });\n },\n [isAllSearchPage, onPageChange],\n );\n\n React.useEffect(() => {\n if (hasAllSearchResultsPage) {\n handlePageChange(allSearchResultsId);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [hasAllSearchResultsPage]);\n\n React.useEffect(() => {\n if (activePage !== selectedPage) {\n handlePageChange(activePage);\n }\n });\n\n React.useEffect(() => {\n if (!selectionInitialPage) return;\n setCurrentPage(selectionInitialPage);\n }, [selectionInitialPage]);\n\n React.useEffect(() => {\n if (selected.selectedRef?.current) {\n selected.selectedRef.current.scrollIntoView();\n }\n }, [selected.selectedRef]);\n\n const tabContent = React.useMemo(\n () => (\n <div className={b('page')}>\n <SettingsPageComponent\n menu={menu}\n pages={pages}\n selected={selected}\n search={search}\n isMobile={isMobile}\n page={activePage}\n emptyPlaceholder={emptyPlaceholder}\n renderNotFound={renderNotFound}\n onClose={onClose}\n />\n </div>\n ),\n [\n activePage,\n emptyPlaceholder,\n isMobile,\n menu,\n onClose,\n pages,\n renderNotFound,\n search,\n selected,\n ],\n );\n\n const contentInnerProps = React.useMemo<SettingsContentInnerProps>(\n () => ({\n menu,\n onPageChange: handlePageChange,\n selected,\n setSearch,\n activePage,\n filterPlaceholder,\n selection,\n initialSearch,\n title,\n search,\n }),\n [\n activePage,\n filterPlaceholder,\n handlePageChange,\n initialSearch,\n menu,\n search,\n selected,\n selection,\n title,\n ],\n );\n\n return (\n <SettingsSelectionContextProvider value={selected}>\n <div className={b({view})}>\n {isMobile ? (\n <SettingsContentInnerMobile {...contentInnerProps}>\n {tabContent}\n </SettingsContentInnerMobile>\n ) : (\n <SettingsContentInnerDesktop {...contentInnerProps}>\n {tabContent}\n </SettingsContentInnerDesktop>\n )}\n </div>\n </SettingsSelectionContextProvider>\n );\n}\n\nSettings.Group = function SettingsGroup({children}: SettingsGroupProps) {\n return <React.Fragment>{children}</React.Fragment>;\n};\n\nSettings.Page = function SettingsPage({children}: SettingsPageProps) {\n return <React.Fragment>{children}</React.Fragment>;\n};\n\nSettings.Section = function SettingsSection({children}: SettingsSectionProps) {\n return <React.Fragment>{children}</React.Fragment>;\n};\n\nSettings.Item = function SettingsItem(setting: SettingsItemProps) {\n const {\n id,\n labelId,\n highlightedTitle,\n children,\n align = 'center',\n withBadge,\n renderTitleComponent = identity,\n mode,\n description,\n } = setting;\n\n const selected = useSettingsSelectionContext();\n const isSettingSelected = selected.setting && selected.setting.id === id;\n\n const {renderRightAdornment, showRightAdornmentOnHover} = useSettingsContext();\n const titleComponent = renderTitleComponent(highlightedTitle);\n const titleNode = <span className={b('item-title', {badge: withBadge})}>{titleComponent}</span>;\n\n const showTitle = titleComponent !== null;\n\n return (\n <div\n className={b('item', {\n align,\n mode,\n selected: isSettingSelected,\n title: showTitle ? 'show' : 'hide',\n })}\n ref={isSettingSelected ? selected.selectedRef : undefined}\n >\n {showTitle ? (\n <label className={b('item-heading')} id={labelId}>\n {renderRightAdornment ? (\n <Flex className={b('item-title-wrapper')} gap={3}>\n {titleNode}\n <div\n className={b('item-right-adornment', {\n hidden: showRightAdornmentOnHover,\n })}\n >\n {renderRightAdornment(setting)}\n </div>\n </Flex>\n ) : (\n titleNode\n )}\n {description ? (\n <span className={b('item-description')}>{description}</span>\n ) : null}\n </label>\n ) : null}\n <div className={b('item-content')}>{children}</div>\n </div>\n );\n};\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"Settings.js","sources":["../../../../../src/components/Settings/Settings.tsx"],"sourcesContent":["import React, {PropsWithChildren} from 'react';\n\nimport {Flex, Loader, TabPanel, TabProvider} from '@gravity-ui/uikit';\nimport identity from 'lodash/identity';\n\nimport {Title} from '../Title';\n\nimport {\n SettingsSelectionContextProvider,\n SettingsSelectionProviderContextValue,\n useSettingsSelectionContext,\n useSettingsSelectionProviderValue,\n} from './Selection/context';\nimport {SettingsContext} from './SettingsContext/SettingsContext';\nimport {useSettingsContext} from './SettingsContext/useSettingsContext';\nimport {SettingsMenu, SettingsMenuInstance} from './SettingsMenu/SettingsMenu';\nimport {SettingsMenuMobile} from './SettingsMenuMobile/SettingsMenuMobile';\nimport {SettingsPageComponent} from './SettingsPage/SettingsPageComponent';\nimport {useAllResultsPage} from './SettingsSearch/AllResultsPage';\nimport {SettingsSearch} from './SettingsSearch/SettingsSearch';\nimport {b} from './b';\nimport {SettingsMenu as SettingsMenuType, getSettingsFromChildren} from './collect-settings';\nimport i18n from './i18n';\nimport type {\n SettingsContentProps,\n SettingsGroupProps,\n SettingsItemProps,\n SettingsPageProps,\n SettingsProps,\n SettingsSectionProps,\n} from './types';\n\nexport function Settings({\n loading,\n renderLoading,\n children,\n view = 'normal',\n renderRightAdornment,\n renderSectionRightAdornment,\n showRightAdornmentOnHover = true,\n ...props\n}: SettingsProps) {\n if (loading) {\n return (\n <div className={b({loading: true, view})}>\n {typeof renderLoading === 'function' ? (\n renderLoading()\n ) : (\n <Loader className={b('loader')} size=\"m\" />\n )}\n </div>\n );\n }\n\n return (\n <SettingsContext.Provider\n value={{renderRightAdornment, renderSectionRightAdornment, showRightAdornmentOnHover}}\n >\n <SettingsContent view={view} {...props}>\n {children}\n </SettingsContent>\n </SettingsContext.Provider>\n );\n}\n\ninterface SettingsContentInnerProps\n extends PropsWithChildren,\n Pick<SettingsContentProps, 'initialSearch' | 'selection' | 'title' | 'filterPlaceholder'> {\n initialSearch?: string;\n selected: SettingsSelectionProviderContextValue;\n activePage?: string;\n menu: SettingsMenuType;\n search: string;\n setSearch: (newValue: string) => void;\n onPageChange: (newPage: string | undefined) => void;\n}\n\nfunction SettingsContentInnerMobile({\n initialSearch,\n selection,\n menu,\n activePage,\n setSearch,\n onPageChange,\n children,\n enableTabsScroll,\n}: SettingsContentInnerProps & {enableTabsScroll?: boolean}) {\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n\n return (\n <TabProvider value={activePage} onUpdate={onPageChange}>\n <React.Fragment>\n <SettingsSearch\n inputRef={searchInputRef}\n className={b('search')}\n initialValue={initialSearch}\n selection={selection}\n onChange={setSearch}\n autoFocus={false}\n inputSize={'xl'}\n />\n <SettingsMenuMobile\n items={menu}\n className={b('tabs')}\n enableTabsScroll={enableTabsScroll}\n />\n </React.Fragment>\n {activePage ? <TabPanel value={activePage}>{children}</TabPanel> : children}\n </TabProvider>\n );\n}\n\nfunction SettingsContentInnerDesktop({\n title,\n selection,\n menu,\n activePage,\n filterPlaceholder,\n initialSearch,\n search,\n setSearch,\n onPageChange,\n children,\n}: SettingsContentInnerProps) {\n const menuRef = React.useRef<SettingsMenuInstance>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n menuRef.current?.clearFocus();\n }, [search]);\n\n React.useEffect(() => {\n const handler = () => {\n menuRef.current?.clearFocus();\n };\n window.addEventListener('click', handler);\n return () => {\n window.removeEventListener('click', handler);\n };\n }, []);\n\n return (\n <React.Fragment>\n <div\n className={b('menu')}\n onClick={() => {\n if (searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }}\n onKeyDown={(event) => {\n if (menuRef.current) {\n if (menuRef.current.handleKeyDown(event)) {\n event.preventDefault();\n }\n }\n }}\n >\n <Title>{title}</Title>\n <SettingsSearch\n inputRef={searchInputRef}\n className={b('search')}\n initialValue={initialSearch}\n selection={selection}\n onChange={setSearch}\n placeholder={filterPlaceholder}\n autoFocus\n />\n <SettingsMenu\n ref={menuRef}\n items={menu}\n onChange={onPageChange}\n activeItemId={activePage}\n />\n </div>\n {children}\n </React.Fragment>\n );\n}\n\nfunction SettingsContent({\n initialPage,\n initialSearch,\n selection,\n children,\n renderNotFound,\n title = i18n('label_title'),\n filterPlaceholder = i18n('label_filter-placeholder'),\n emptyPlaceholder = i18n('label_empty-placeholder'),\n view,\n onPageChange,\n onClose,\n enableMobileSettingsTabsScroll,\n}: SettingsContentProps) {\n const [search, setSearch] = React.useState(initialSearch ?? '');\n const {menu, pages} = getSettingsFromChildren(children, search);\n\n const selected = useSettingsSelectionProviderValue(pages, selection);\n\n const pageKeys = Object.keys(pages);\n const selectionInitialPage =\n selected.page && pageKeys.includes(selected.page.id) ? selected.page.id : undefined;\n const [selectedPage, setCurrentPage] = React.useState<string | undefined>(\n selectionInitialPage ||\n (initialPage && pageKeys.includes(initialPage) ? initialPage : undefined),\n );\n const isMobile = view === 'mobile';\n\n let activePage = selectedPage;\n\n if (!activePage || !pages[activePage] || pages[activePage].hidden) {\n activePage = Object.values(pages).find(({hidden}) => !hidden)?.id;\n }\n\n const {isAllSearchPage, hasAllSearchResultsPage, allSearchResultsId} = useAllResultsPage({\n pages,\n });\n\n const handlePageChange = React.useCallback(\n (newPage: string | undefined) => {\n setCurrentPage((prevPage) => {\n if (prevPage !== newPage && !isAllSearchPage(newPage)) {\n onPageChange?.(newPage);\n }\n return newPage;\n });\n },\n [isAllSearchPage, onPageChange],\n );\n\n React.useEffect(() => {\n if (hasAllSearchResultsPage) {\n handlePageChange(allSearchResultsId);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [hasAllSearchResultsPage]);\n\n React.useEffect(() => {\n if (activePage !== selectedPage) {\n handlePageChange(activePage);\n }\n });\n\n React.useEffect(() => {\n if (!selectionInitialPage) return;\n setCurrentPage(selectionInitialPage);\n }, [selectionInitialPage]);\n\n React.useEffect(() => {\n if (selected.selectedRef?.current) {\n selected.selectedRef.current.scrollIntoView();\n }\n }, [selected.selectedRef]);\n\n const tabContent = React.useMemo(\n () => (\n <div className={b('page')}>\n <SettingsPageComponent\n menu={menu}\n pages={pages}\n selected={selected}\n search={search}\n isMobile={isMobile}\n page={activePage}\n emptyPlaceholder={emptyPlaceholder}\n renderNotFound={renderNotFound}\n onClose={onClose}\n />\n </div>\n ),\n [\n activePage,\n emptyPlaceholder,\n isMobile,\n menu,\n onClose,\n pages,\n renderNotFound,\n search,\n selected,\n ],\n );\n\n const contentInnerProps = React.useMemo<SettingsContentInnerProps>(\n () => ({\n menu,\n onPageChange: handlePageChange,\n selected,\n setSearch,\n activePage,\n filterPlaceholder,\n selection,\n initialSearch,\n title,\n search,\n }),\n [\n activePage,\n filterPlaceholder,\n handlePageChange,\n initialSearch,\n menu,\n search,\n selected,\n selection,\n title,\n ],\n );\n\n return (\n <SettingsSelectionContextProvider value={selected}>\n <div className={b({view})}>\n {isMobile ? (\n <SettingsContentInnerMobile\n {...contentInnerProps}\n enableTabsScroll={enableMobileSettingsTabsScroll}\n >\n {tabContent}\n </SettingsContentInnerMobile>\n ) : (\n <SettingsContentInnerDesktop {...contentInnerProps}>\n {tabContent}\n </SettingsContentInnerDesktop>\n )}\n </div>\n </SettingsSelectionContextProvider>\n );\n}\n\nSettings.Group = function SettingsGroup({children}: SettingsGroupProps) {\n return <React.Fragment>{children}</React.Fragment>;\n};\n\nSettings.Page = function SettingsPage({children}: SettingsPageProps) {\n return <React.Fragment>{children}</React.Fragment>;\n};\n\nSettings.Section = function SettingsSection({children}: SettingsSectionProps) {\n return <React.Fragment>{children}</React.Fragment>;\n};\n\nSettings.Item = function SettingsItem(setting: SettingsItemProps) {\n const {\n id,\n labelId,\n highlightedTitle,\n children,\n align = 'center',\n withBadge,\n renderTitleComponent = identity,\n mode,\n description,\n } = setting;\n\n const selected = useSettingsSelectionContext();\n const isSettingSelected = selected.setting && selected.setting.id === id;\n\n const {renderRightAdornment, showRightAdornmentOnHover} = useSettingsContext();\n const titleComponent = renderTitleComponent(highlightedTitle);\n const titleNode = <span className={b('item-title', {badge: withBadge})}>{titleComponent}</span>;\n\n const showTitle = titleComponent !== null;\n\n return (\n <div\n className={b('item', {\n align,\n mode,\n selected: isSettingSelected,\n title: showTitle ? 'show' : 'hide',\n })}\n ref={isSettingSelected ? selected.selectedRef : undefined}\n >\n {showTitle ? (\n <label className={b('item-heading')} id={labelId}>\n {renderRightAdornment ? (\n <Flex className={b('item-title-wrapper')} gap={3}>\n {titleNode}\n <div\n className={b('item-right-adornment', {\n hidden: showRightAdornmentOnHover,\n })}\n >\n {renderRightAdornment(setting)}\n </div>\n </Flex>\n ) : (\n titleNode\n )}\n {description ? (\n <span className={b('item-description')}>{description}</span>\n ) : null}\n </label>\n ) : null}\n <div className={b('item-content')}>{children}</div>\n </div>\n );\n};\n"],"names":["React"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import React from 'react';
2
2
  import { SettingsMenuMobileProps } from '../types';
3
- export declare const SettingsMenuMobile: ({ items, className }: SettingsMenuMobileProps) => React.JSX.Element;
3
+ export declare const SettingsMenuMobile: ({ items, className, enableTabsScroll, }: SettingsMenuMobileProps) => React.JSX.Element;
@@ -5,7 +5,7 @@ import { createBlock } from '../../utils/cn.js';
5
5
  import styles from './SettingsMenuMobile.module.scss.js';
6
6
 
7
7
  const b = createBlock('settings-menu-mobile', styles);
8
- const SettingsMenuMobile = ({ items, className }) => {
8
+ const SettingsMenuMobile = ({ items, className, enableTabsScroll, }) => {
9
9
  const ref = React__default.useRef(null);
10
10
  const tabItems = React__default.useMemo(() => {
11
11
  const result = [];
@@ -34,7 +34,7 @@ const SettingsMenuMobile = ({ items, className }) => {
34
34
  e.stopPropagation();
35
35
  };
36
36
  return (React__default.createElement("div", { ref: ref, onTouchMove: handleTouchMove },
37
- React__default.createElement(TabList, { size: "l", className: b(null, className) }, tabItems.map((item) => (React__default.createElement(Tab, Object.assign({ key: item.value }, item)))))));
37
+ React__default.createElement(TabList, { size: "l", className: b(null, className), contentOverflow: enableTabsScroll ? 'scroll' : 'wrap' }, tabItems.map((item) => (React__default.createElement(Tab, Object.assign({ key: item.value }, item)))))));
38
38
  };
39
39
 
40
40
  export { SettingsMenuMobile };
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsMenuMobile.js","sources":["../../../../../../src/components/Settings/SettingsMenuMobile/SettingsMenuMobile.tsx"],"sourcesContent":["import React from 'react';\n\nimport {Tab, TabList, TabProps} from '@gravity-ui/uikit';\n\nimport {createBlock} from '../../utils/cn';\nimport {SettingsMenuMobileProps} from '../types';\n\nimport styles from './SettingsMenuMobile.module.scss';\n\nconst b = createBlock('settings-menu-mobile', styles);\n\nexport const SettingsMenuMobile = ({items, className}: SettingsMenuMobileProps) => {\n const ref = React.useRef<HTMLDivElement>(null);\n\n const tabItems = React.useMemo(() => {\n const result: TabProps[] = [];\n\n items.forEach((firstLevelItem) => {\n if ('groupTitle' in firstLevelItem) {\n result.push(\n ...firstLevelItem.items.map(({id, title, disabled, withBadge}) => ({\n value: id,\n children: title,\n disabled,\n className: b('item', {badge: withBadge}),\n })),\n );\n } else {\n const {id, title, disabled, withBadge} = firstLevelItem;\n result.push({\n value: id,\n children: title,\n disabled,\n className: b('item', {badge: withBadge}),\n });\n }\n });\n return result;\n }, [items]);\n\n const handleTouchMove = (e: React.TouchEvent<HTMLDivElement>) => {\n e.stopPropagation();\n };\n\n return (\n <div ref={ref} onTouchMove={handleTouchMove}>\n <TabList size=\"l\" className={b(null, className)}>\n {tabItems.map((item) => (\n <Tab key={item.value} {...item} />\n ))}\n </TabList>\n </div>\n );\n};\n"],"names":["React"],"mappings":";;;;;AASA,MAAM,CAAC,GAAG,WAAW,CAAC,sBAAsB,EAAE,MAAM,CAAC;AAExC,MAAA,kBAAkB,GAAG,CAAC,EAAC,KAAK,EAAE,SAAS,EAA0B,KAAI;IAC9E,MAAM,GAAG,GAAGA,cAAK,CAAC,MAAM,CAAiB,IAAI,CAAC;AAE9C,IAAA,MAAM,QAAQ,GAAGA,cAAK,CAAC,OAAO,CAAC,MAAK;QAChC,MAAM,MAAM,GAAe,EAAE;AAE7B,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,cAAc,KAAI;AAC7B,YAAA,IAAI,YAAY,IAAI,cAAc,EAAE;gBAChC,MAAM,CAAC,IAAI,CACP,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAC,MAAM;AAC/D,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,QAAQ,EAAE,KAAK;oBACf,QAAQ;oBACR,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC;iBAC3C,CAAC,CAAC,CACN;;iBACE;gBACH,MAAM,EAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAC,GAAG,cAAc;gBACvD,MAAM,CAAC,IAAI,CAAC;AACR,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,QAAQ,EAAE,KAAK;oBACf,QAAQ;oBACR,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC;AAC3C,iBAAA,CAAC;;AAEV,SAAC,CAAC;AACF,QAAA,OAAO,MAAM;AACjB,KAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEX,IAAA,MAAM,eAAe,GAAG,CAAC,CAAmC,KAAI;QAC5D,CAAC,CAAC,eAAe,EAAE;AACvB,KAAC;IAED,QACIA,sCAAK,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,eAAe,EAAA;AACvC,QAAAA,cAAA,CAAA,aAAA,CAAC,OAAO,EAAC,EAAA,IAAI,EAAC,GAAG,EAAC,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,IAC1C,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,MACfA,6BAAC,GAAG,EAAA,MAAA,CAAA,MAAA,CAAA,EAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAA,EAAM,IAAI,CAAI,CAAA,CACrC,CAAC,CACI,CACR;AAEd;;;;"}
1
+ {"version":3,"file":"SettingsMenuMobile.js","sources":["../../../../../../src/components/Settings/SettingsMenuMobile/SettingsMenuMobile.tsx"],"sourcesContent":["import React from 'react';\n\nimport {Tab, TabList, TabProps} from '@gravity-ui/uikit';\n\nimport {createBlock} from '../../utils/cn';\nimport {SettingsMenuMobileProps} from '../types';\n\nimport styles from './SettingsMenuMobile.module.scss';\n\nconst b = createBlock('settings-menu-mobile', styles);\n\nexport const SettingsMenuMobile = ({\n items,\n className,\n enableTabsScroll,\n}: SettingsMenuMobileProps) => {\n const ref = React.useRef<HTMLDivElement>(null);\n\n const tabItems = React.useMemo(() => {\n const result: TabProps[] = [];\n\n items.forEach((firstLevelItem) => {\n if ('groupTitle' in firstLevelItem) {\n result.push(\n ...firstLevelItem.items.map(({id, title, disabled, withBadge}) => ({\n value: id,\n children: title,\n disabled,\n className: b('item', {badge: withBadge}),\n })),\n );\n } else {\n const {id, title, disabled, withBadge} = firstLevelItem;\n result.push({\n value: id,\n children: title,\n disabled,\n className: b('item', {badge: withBadge}),\n });\n }\n });\n return result;\n }, [items]);\n\n const handleTouchMove = (e: React.TouchEvent<HTMLDivElement>) => {\n e.stopPropagation();\n };\n\n return (\n <div ref={ref} onTouchMove={handleTouchMove}>\n <TabList\n size=\"l\"\n className={b(null, className)}\n contentOverflow={enableTabsScroll ? 'scroll' : 'wrap'}\n >\n {tabItems.map((item) => (\n <Tab key={item.value} {...item} />\n ))}\n </TabList>\n </div>\n );\n};\n"],"names":["React"],"mappings":";;;;;AASA,MAAM,CAAC,GAAG,WAAW,CAAC,sBAAsB,EAAE,MAAM,CAAC;AAE9C,MAAM,kBAAkB,GAAG,CAAC,EAC/B,KAAK,EACL,SAAS,EACT,gBAAgB,GACM,KAAI;IAC1B,MAAM,GAAG,GAAGA,cAAK,CAAC,MAAM,CAAiB,IAAI,CAAC;AAE9C,IAAA,MAAM,QAAQ,GAAGA,cAAK,CAAC,OAAO,CAAC,MAAK;QAChC,MAAM,MAAM,GAAe,EAAE;AAE7B,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,cAAc,KAAI;AAC7B,YAAA,IAAI,YAAY,IAAI,cAAc,EAAE;gBAChC,MAAM,CAAC,IAAI,CACP,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAC,MAAM;AAC/D,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,QAAQ,EAAE,KAAK;oBACf,QAAQ;oBACR,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC;iBAC3C,CAAC,CAAC,CACN;;iBACE;gBACH,MAAM,EAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAC,GAAG,cAAc;gBACvD,MAAM,CAAC,IAAI,CAAC;AACR,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,QAAQ,EAAE,KAAK;oBACf,QAAQ;oBACR,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC;AAC3C,iBAAA,CAAC;;AAEV,SAAC,CAAC;AACF,QAAA,OAAO,MAAM;AACjB,KAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEX,IAAA,MAAM,eAAe,GAAG,CAAC,CAAmC,KAAI;QAC5D,CAAC,CAAC,eAAe,EAAE;AACvB,KAAC;IAED,QACIA,sCAAK,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,eAAe,EAAA;QACvCA,cAAC,CAAA,aAAA,CAAA,OAAO,EACJ,EAAA,IAAI,EAAC,GAAG,EACR,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,EAC7B,eAAe,EAAE,gBAAgB,GAAG,QAAQ,GAAG,MAAM,IAEpD,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,MACfA,cAAA,CAAA,aAAA,CAAC,GAAG,EAAA,MAAA,CAAA,MAAA,CAAA,EAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAM,EAAA,IAAI,CAAI,CAAA,CACrC,CAAC,CACI,CACR;AAEd;;;;"}
@@ -23,7 +23,9 @@ export interface SettingsMenuProps {
23
23
  focusItemId?: string;
24
24
  className?: string;
25
25
  }
26
- export type SettingsMenuMobileProps = Omit<SettingsMenuProps, 'activeItemId' | 'focusItemId' | 'onChange'>;
26
+ export type SettingsMenuMobileProps = Omit<SettingsMenuProps, 'activeItemId' | 'focusItemId' | 'onChange'> & {
27
+ enableTabsScroll?: boolean;
28
+ };
27
29
  export interface SettingsProps {
28
30
  children: React.ReactNode;
29
31
  title?: string;
@@ -41,6 +43,7 @@ export interface SettingsProps {
41
43
  renderRightAdornment?: (item: SettingsItemProps) => React.ReactNode;
42
44
  renderSectionRightAdornment?: (section: SettingsPageSection) => React.ReactNode;
43
45
  showRightAdornmentOnHover?: boolean;
46
+ enableMobileSettingsTabsScroll?: boolean;
44
47
  }
45
48
  export interface SettingsGroupProps {
46
49
  id?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/navigation",
3
- "version": "6.0.0",
3
+ "version": "6.1.0",
4
4
  "description": "Gravity UI Navigation components",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -71,7 +71,7 @@
71
71
  "@gravity-ui/prettier-config": "^1.0.0",
72
72
  "@gravity-ui/stylelint-config": "^4.0.1",
73
73
  "@gravity-ui/tsconfig": "^1.0.0",
74
- "@gravity-ui/uikit": "^7.31.0",
74
+ "@gravity-ui/uikit": "^7.42.0",
75
75
  "@jest/globals": "^30.0.5",
76
76
  "@playwright/experimental-ct-react": "^1.49.1",
77
77
  "@playwright/test": "^1.49.1",
@@ -126,7 +126,7 @@
126
126
  "peerDependencies": {
127
127
  "@bem-react/classname": "^1.6.0",
128
128
  "@gravity-ui/icons": "^2.2.0",
129
- "@gravity-ui/uikit": "^7.2.0",
129
+ "@gravity-ui/uikit": "^7.42.0",
130
130
  "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
131
131
  "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
132
132
  },