@gravity-ui/navigation 0.20.0 → 0.21.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.
- package/build/cjs/components/Settings/Settings.d.ts +3 -1
- package/build/cjs/components/Settings/SettingsSearch/SettingsSearch.d.ts +2 -1
- package/build/cjs/index.js +15 -11
- package/build/cjs/index.js.map +1 -1
- package/build/esm/components/Settings/Settings.d.ts +3 -1
- package/build/esm/components/Settings/SettingsSearch/SettingsSearch.d.ts +2 -1
- package/build/esm/index.js +15 -11
- package/build/esm/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,6 +7,7 @@ export interface SettingsProps {
|
|
|
7
7
|
filterPlaceholder?: string;
|
|
8
8
|
emptyPlaceholder?: string;
|
|
9
9
|
initialPage?: string;
|
|
10
|
+
initialSearch?: string;
|
|
10
11
|
onPageChange?: (page: string | undefined) => void;
|
|
11
12
|
renderNotFound?: () => React.ReactNode;
|
|
12
13
|
renderLoading?: () => React.ReactNode;
|
|
@@ -36,6 +37,7 @@ export interface SettingsSectionProps {
|
|
|
36
37
|
}
|
|
37
38
|
export interface SettingsItemProps {
|
|
38
39
|
title: string;
|
|
40
|
+
highlightedTitle?: React.ReactNode | null;
|
|
39
41
|
renderTitleComponent?: (highlightedTitle: React.ReactNode | null) => React.ReactNode;
|
|
40
42
|
align?: 'top' | 'center';
|
|
41
43
|
children: React.ReactNode;
|
|
@@ -51,5 +53,5 @@ export declare namespace Settings {
|
|
|
51
53
|
var Group: ({ children }: SettingsGroupProps) => React.JSX.Element;
|
|
52
54
|
var Page: ({ children }: SettingsPageProps) => React.JSX.Element;
|
|
53
55
|
var Section: ({ children }: SettingsSectionProps) => React.JSX.Element;
|
|
54
|
-
var Item: ({ title, children, align, withBadge, renderTitleComponent, mode, description, }: SettingsItemProps) => React.JSX.Element;
|
|
56
|
+
var Item: ({ title, highlightedTitle, children, align, withBadge, renderTitleComponent, mode, description, }: SettingsItemProps) => React.JSX.Element;
|
|
55
57
|
}
|
|
@@ -2,6 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { TextInputSize } from '@gravity-ui/uikit';
|
|
3
3
|
interface SettingsSearchProps {
|
|
4
4
|
className?: string;
|
|
5
|
+
initialValue?: string;
|
|
5
6
|
onChange: (search: string) => void;
|
|
6
7
|
debounce?: number;
|
|
7
8
|
inputRef?: React.Ref<HTMLInputElement>;
|
|
@@ -9,5 +10,5 @@ interface SettingsSearchProps {
|
|
|
9
10
|
placeholder?: string;
|
|
10
11
|
autoFocus?: boolean;
|
|
11
12
|
}
|
|
12
|
-
export declare function SettingsSearch({ className, onChange, debounce, inputRef, inputSize, placeholder, autoFocus, }: SettingsSearchProps): React.JSX.Element;
|
|
13
|
+
export declare function SettingsSearch({ className, initialValue, onChange, debounce, inputRef, inputSize, placeholder, autoFocus, }: SettingsSearchProps): React.JSX.Element;
|
|
13
14
|
export {};
|
package/build/esm/index.js
CHANGED
|
@@ -5087,11 +5087,15 @@ function escapeStringForRegExp(input) {
|
|
|
5087
5087
|
}
|
|
5088
5088
|
|
|
5089
5089
|
const b$9 = block('settings-search');
|
|
5090
|
-
function SettingsSearch({ className, onChange, debounce = 200, inputRef, inputSize, placeholder, autoFocus = true, }) {
|
|
5091
|
-
const
|
|
5092
|
-
const
|
|
5090
|
+
function SettingsSearch({ className, initialValue, onChange, debounce = 200, inputRef, inputSize, placeholder, autoFocus = true, }) {
|
|
5091
|
+
const [value, setValue] = React__default.useState(initialValue !== null && initialValue !== void 0 ? initialValue : '');
|
|
5092
|
+
const onChangeDebounced = useStableCallback(debounce_1(onChange, debounce));
|
|
5093
|
+
const handleUpdate = useStableCallback((updated) => {
|
|
5094
|
+
setValue(updated);
|
|
5095
|
+
onChangeDebounced(updated);
|
|
5096
|
+
});
|
|
5093
5097
|
return (React__default.createElement("div", { className: b$9(null, className) },
|
|
5094
|
-
React__default.createElement(TextInput, { controlRef: inputRef, hasClear: true, autoFocus: autoFocus, size: inputSize, placeholder: placeholder, onUpdate: handleUpdate })));
|
|
5098
|
+
React__default.createElement(TextInput, { value: value, controlRef: inputRef, hasClear: true, autoFocus: autoFocus, size: inputSize, placeholder: placeholder, onUpdate: handleUpdate })));
|
|
5095
5099
|
}
|
|
5096
5100
|
|
|
5097
5101
|
var css_248z$8 = ".gn-settings-menu__group-heading {\n font-weight: var(--g-text-accent-font-weight);\n display: inline-block;\n padding: 0 20px;\n margin-bottom: 12px;\n line-height: 18px;\n}\n.gn-settings-menu__group + .gn-settings-menu__group {\n margin-top: 24px;\n}\n.gn-settings-menu__item {\n display: flex;\n align-items: center;\n height: 40px;\n padding: 0 20px;\n cursor: pointer;\n color: var(--g-color-text-primary);\n}\n.gn-settings-menu__item-icon {\n color: var(--g-color-text-misc);\n margin-right: 5px;\n}\n.gn-settings-menu__item:hover, .gn-settings-menu__item_focused {\n background: var(--g-color-base-simple-hover);\n}\n.gn-settings-menu__item_selected {\n background: var(--g-color-base-selection);\n}\n.gn-settings-menu__item_selected:hover, .gn-settings-menu__item_selected.gn-settings-menu__item_focused {\n background: var(--g-color-base-selection-hover);\n}\n.gn-settings-menu__item_disabled {\n color: var(--g-color-text-secondary);\n cursor: auto;\n}\n.gn-settings-menu__item_disabled:hover {\n background: none;\n}\n.gn-settings-menu__item_disabled .gn-settings-menu__item-icon {\n color: var(--g-color-base-misc-heavy);\n}\n.gn-settings-menu__item_badge {\n position: relative;\n}\n.gn-settings-menu__item_badge::after {\n content: \"\";\n display: block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: var(--g-color-text-danger);\n position: absolute;\n right: 9px;\n top: calc(50% - 3px);\n}";
|
|
@@ -5363,9 +5367,9 @@ const getPageTitleById = (menu, activePage) => {
|
|
|
5363
5367
|
}
|
|
5364
5368
|
return '';
|
|
5365
5369
|
};
|
|
5366
|
-
function SettingsContent({ initialPage, children, renderNotFound, title = i18n$1('label_title'), filterPlaceholder = i18n$1('label_filter-placeholder'), emptyPlaceholder = i18n$1('label_empty-placeholder'), view, onPageChange, onClose, }) {
|
|
5370
|
+
function SettingsContent({ initialPage, initialSearch, children, renderNotFound, title = i18n$1('label_title'), filterPlaceholder = i18n$1('label_filter-placeholder'), emptyPlaceholder = i18n$1('label_empty-placeholder'), view, onPageChange, onClose, }) {
|
|
5367
5371
|
var _a, _b;
|
|
5368
|
-
const [search, setSearch] = React__default.useState('');
|
|
5372
|
+
const [search, setSearch] = React__default.useState(initialSearch !== null && initialSearch !== void 0 ? initialSearch : '');
|
|
5369
5373
|
const { menu, pages } = getSettingsFromChildren(children, search);
|
|
5370
5374
|
const pageKeys = Object.keys(pages);
|
|
5371
5375
|
const [selectedPage, setCurrentPage] = React__default.useState(initialPage && pageKeys.includes(initialPage) ? initialPage : undefined);
|
|
@@ -5414,13 +5418,13 @@ function SettingsContent({ initialPage, children, renderNotFound, title = i18n$1
|
|
|
5414
5418
|
section.showTitle && (React__default.createElement("h3", { className: b$6('section-heading') }, section.title)),
|
|
5415
5419
|
section.header &&
|
|
5416
5420
|
(isMobile ? (React__default.createElement("div", { className: b$6('section-subheader') }, section.header)) : (section.header)),
|
|
5417
|
-
section.items.map(({ hidden, title, element }) => hidden ? null : (React__default.createElement("div", { key: title, className: b$6('section-item') }, React__default.cloneElement(element, Object.assign(Object.assign({}, element.props), {
|
|
5421
|
+
section.items.map(({ hidden, title, element }) => hidden ? null : (React__default.createElement("div", { key: title, className: b$6('section-item') }, React__default.cloneElement(element, Object.assign(Object.assign({}, element.props), { highlightedTitle: search && title
|
|
5418
5422
|
? prepareTitle(title, search)
|
|
5419
5423
|
: title })))))))))));
|
|
5420
5424
|
};
|
|
5421
5425
|
return (React__default.createElement("div", { className: b$6({ view }) },
|
|
5422
5426
|
isMobile ? (React__default.createElement(React__default.Fragment, null,
|
|
5423
|
-
React__default.createElement(SettingsSearch, { inputRef: searchInputRef, className: b$6('search'), onChange: setSearch, autoFocus: false, inputSize: 'l' }),
|
|
5427
|
+
React__default.createElement(SettingsSearch, { inputRef: searchInputRef, className: b$6('search'), initialValue: initialSearch, onChange: setSearch, autoFocus: false, inputSize: 'l' }),
|
|
5424
5428
|
React__default.createElement(SettingsMenuMobile, { items: menu, onChange: handlePageChange, activeItemId: activePage, className: b$6('tabs') }))) : (React__default.createElement("div", { className: b$6('menu'), onClick: () => {
|
|
5425
5429
|
if (searchInputRef.current) {
|
|
5426
5430
|
searchInputRef.current.focus();
|
|
@@ -5433,7 +5437,7 @@ function SettingsContent({ initialPage, children, renderNotFound, title = i18n$1
|
|
|
5433
5437
|
}
|
|
5434
5438
|
} },
|
|
5435
5439
|
React__default.createElement(Title, null, title),
|
|
5436
|
-
React__default.createElement(SettingsSearch, { inputRef: searchInputRef, className: b$6('search'), onChange: setSearch, placeholder: filterPlaceholder, autoFocus: true }),
|
|
5440
|
+
React__default.createElement(SettingsSearch, { inputRef: searchInputRef, className: b$6('search'), initialValue: initialSearch, onChange: setSearch, placeholder: filterPlaceholder, autoFocus: true }),
|
|
5437
5441
|
React__default.createElement(SettingsMenu, { ref: menuRef, items: menu, onChange: handlePageChange, activeItemId: activePage }))),
|
|
5438
5442
|
React__default.createElement("div", { className: b$6('page') }, renderPageContent())));
|
|
5439
5443
|
}
|
|
@@ -5446,9 +5450,9 @@ Settings.Page = function SettingsPage({ children }) {
|
|
|
5446
5450
|
Settings.Section = function SettingsSection({ children }) {
|
|
5447
5451
|
return React__default.createElement(React__default.Fragment, null, children);
|
|
5448
5452
|
};
|
|
5449
|
-
Settings.Item = function SettingsItem({ title, children, align = 'center', withBadge, renderTitleComponent = identity_1, mode, description, }) {
|
|
5453
|
+
Settings.Item = function SettingsItem({ title, highlightedTitle, children, align = 'center', withBadge, renderTitleComponent = identity_1, mode, description, }) {
|
|
5450
5454
|
const { renderRightAdornment, showRightAdornmentOnHover } = useSettingsContext();
|
|
5451
|
-
const titleNode = (React__default.createElement("span", { className: b$6('item-title', { badge: withBadge }) }, renderTitleComponent(
|
|
5455
|
+
const titleNode = (React__default.createElement("span", { className: b$6('item-title', { badge: withBadge }) }, renderTitleComponent(highlightedTitle)));
|
|
5452
5456
|
return (React__default.createElement("div", { className: b$6('item', { align, mode }) },
|
|
5453
5457
|
React__default.createElement("label", { className: b$6('item-heading') },
|
|
5454
5458
|
renderRightAdornment ? (React__default.createElement(Flex, { className: b$6('item-title-wrapper'), gap: 3 },
|