@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/cjs/index.js
CHANGED
|
@@ -5114,11 +5114,15 @@ function escapeStringForRegExp(input) {
|
|
|
5114
5114
|
}
|
|
5115
5115
|
|
|
5116
5116
|
const b$9 = block('settings-search');
|
|
5117
|
-
function SettingsSearch({ className, onChange, debounce = 200, inputRef, inputSize, placeholder, autoFocus = true, }) {
|
|
5118
|
-
const
|
|
5119
|
-
const
|
|
5117
|
+
function SettingsSearch({ className, initialValue, onChange, debounce = 200, inputRef, inputSize, placeholder, autoFocus = true, }) {
|
|
5118
|
+
const [value, setValue] = React__default["default"].useState(initialValue !== null && initialValue !== void 0 ? initialValue : '');
|
|
5119
|
+
const onChangeDebounced = useStableCallback(debounce_1(onChange, debounce));
|
|
5120
|
+
const handleUpdate = useStableCallback((updated) => {
|
|
5121
|
+
setValue(updated);
|
|
5122
|
+
onChangeDebounced(updated);
|
|
5123
|
+
});
|
|
5120
5124
|
return (React__default["default"].createElement("div", { className: b$9(null, className) },
|
|
5121
|
-
React__default["default"].createElement(uikit.TextInput, { controlRef: inputRef, hasClear: true, autoFocus: autoFocus, size: inputSize, placeholder: placeholder, onUpdate: handleUpdate })));
|
|
5125
|
+
React__default["default"].createElement(uikit.TextInput, { value: value, controlRef: inputRef, hasClear: true, autoFocus: autoFocus, size: inputSize, placeholder: placeholder, onUpdate: handleUpdate })));
|
|
5122
5126
|
}
|
|
5123
5127
|
|
|
5124
5128
|
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}";
|
|
@@ -5390,9 +5394,9 @@ const getPageTitleById = (menu, activePage) => {
|
|
|
5390
5394
|
}
|
|
5391
5395
|
return '';
|
|
5392
5396
|
};
|
|
5393
|
-
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, }) {
|
|
5397
|
+
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, }) {
|
|
5394
5398
|
var _a, _b;
|
|
5395
|
-
const [search, setSearch] = React__default["default"].useState('');
|
|
5399
|
+
const [search, setSearch] = React__default["default"].useState(initialSearch !== null && initialSearch !== void 0 ? initialSearch : '');
|
|
5396
5400
|
const { menu, pages } = getSettingsFromChildren(children, search);
|
|
5397
5401
|
const pageKeys = Object.keys(pages);
|
|
5398
5402
|
const [selectedPage, setCurrentPage] = React__default["default"].useState(initialPage && pageKeys.includes(initialPage) ? initialPage : undefined);
|
|
@@ -5441,13 +5445,13 @@ function SettingsContent({ initialPage, children, renderNotFound, title = i18n$1
|
|
|
5441
5445
|
section.showTitle && (React__default["default"].createElement("h3", { className: b$6('section-heading') }, section.title)),
|
|
5442
5446
|
section.header &&
|
|
5443
5447
|
(isMobile ? (React__default["default"].createElement("div", { className: b$6('section-subheader') }, section.header)) : (section.header)),
|
|
5444
|
-
section.items.map(({ hidden, title, element }) => hidden ? null : (React__default["default"].createElement("div", { key: title, className: b$6('section-item') }, React__default["default"].cloneElement(element, Object.assign(Object.assign({}, element.props), {
|
|
5448
|
+
section.items.map(({ hidden, title, element }) => hidden ? null : (React__default["default"].createElement("div", { key: title, className: b$6('section-item') }, React__default["default"].cloneElement(element, Object.assign(Object.assign({}, element.props), { highlightedTitle: search && title
|
|
5445
5449
|
? prepareTitle(title, search)
|
|
5446
5450
|
: title })))))))))));
|
|
5447
5451
|
};
|
|
5448
5452
|
return (React__default["default"].createElement("div", { className: b$6({ view }) },
|
|
5449
5453
|
isMobile ? (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
5450
|
-
React__default["default"].createElement(SettingsSearch, { inputRef: searchInputRef, className: b$6('search'), onChange: setSearch, autoFocus: false, inputSize: 'l' }),
|
|
5454
|
+
React__default["default"].createElement(SettingsSearch, { inputRef: searchInputRef, className: b$6('search'), initialValue: initialSearch, onChange: setSearch, autoFocus: false, inputSize: 'l' }),
|
|
5451
5455
|
React__default["default"].createElement(SettingsMenuMobile, { items: menu, onChange: handlePageChange, activeItemId: activePage, className: b$6('tabs') }))) : (React__default["default"].createElement("div", { className: b$6('menu'), onClick: () => {
|
|
5452
5456
|
if (searchInputRef.current) {
|
|
5453
5457
|
searchInputRef.current.focus();
|
|
@@ -5460,7 +5464,7 @@ function SettingsContent({ initialPage, children, renderNotFound, title = i18n$1
|
|
|
5460
5464
|
}
|
|
5461
5465
|
} },
|
|
5462
5466
|
React__default["default"].createElement(Title, null, title),
|
|
5463
|
-
React__default["default"].createElement(SettingsSearch, { inputRef: searchInputRef, className: b$6('search'), onChange: setSearch, placeholder: filterPlaceholder, autoFocus: true }),
|
|
5467
|
+
React__default["default"].createElement(SettingsSearch, { inputRef: searchInputRef, className: b$6('search'), initialValue: initialSearch, onChange: setSearch, placeholder: filterPlaceholder, autoFocus: true }),
|
|
5464
5468
|
React__default["default"].createElement(SettingsMenu, { ref: menuRef, items: menu, onChange: handlePageChange, activeItemId: activePage }))),
|
|
5465
5469
|
React__default["default"].createElement("div", { className: b$6('page') }, renderPageContent())));
|
|
5466
5470
|
}
|
|
@@ -5473,9 +5477,9 @@ Settings.Page = function SettingsPage({ children }) {
|
|
|
5473
5477
|
Settings.Section = function SettingsSection({ children }) {
|
|
5474
5478
|
return React__default["default"].createElement(React__default["default"].Fragment, null, children);
|
|
5475
5479
|
};
|
|
5476
|
-
Settings.Item = function SettingsItem({ title, children, align = 'center', withBadge, renderTitleComponent = identity_1, mode, description, }) {
|
|
5480
|
+
Settings.Item = function SettingsItem({ title, highlightedTitle, children, align = 'center', withBadge, renderTitleComponent = identity_1, mode, description, }) {
|
|
5477
5481
|
const { renderRightAdornment, showRightAdornmentOnHover } = useSettingsContext();
|
|
5478
|
-
const titleNode = (React__default["default"].createElement("span", { className: b$6('item-title', { badge: withBadge }) }, renderTitleComponent(
|
|
5482
|
+
const titleNode = (React__default["default"].createElement("span", { className: b$6('item-title', { badge: withBadge }) }, renderTitleComponent(highlightedTitle)));
|
|
5479
5483
|
return (React__default["default"].createElement("div", { className: b$6('item', { align, mode }) },
|
|
5480
5484
|
React__default["default"].createElement("label", { className: b$6('item-heading') },
|
|
5481
5485
|
renderRightAdornment ? (React__default["default"].createElement(uikit.Flex, { className: b$6('item-title-wrapper'), gap: 3 },
|