@gravity-ui/navigation 0.15.0 → 0.16.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/AsideHeader/AsideHeader.d.ts +4 -2
- package/build/cjs/components/AsideHeader/i18n/index.d.ts +2 -0
- package/build/cjs/components/CompositeBar/CompositeBar.d.ts +2 -2
- package/build/cjs/components/CompositeBar/utils.d.ts +2 -2
- package/build/cjs/components/MobileHeader/Burger/Burger.d.ts +5 -2
- package/build/cjs/components/MobileHeader/MobileHeader.d.ts +2 -0
- package/build/cjs/components/MobileHeader/i18n/index.d.ts +2 -0
- package/build/cjs/components/Settings/Settings.d.ts +4 -7
- package/build/cjs/components/Settings/i18n/index.d.ts +2 -0
- package/build/cjs/components/Title/Title.d.ts +1 -3
- package/build/cjs/components/Title/i18n/index.d.ts +2 -0
- package/build/cjs/components/constants.d.ts +0 -7
- package/build/cjs/components/index.d.ts +1 -0
- package/build/cjs/components/types.d.ts +0 -10
- package/build/cjs/components/utils/registerKeyset.d.ts +5 -0
- package/build/cjs/i18n.d.ts +2 -0
- package/build/cjs/index.js +302 -54
- package/build/cjs/index.js.map +1 -1
- package/build/esm/components/AsideHeader/AsideHeader.d.ts +4 -2
- package/build/esm/components/AsideHeader/i18n/index.d.ts +2 -0
- package/build/esm/components/CompositeBar/CompositeBar.d.ts +2 -2
- package/build/esm/components/CompositeBar/utils.d.ts +2 -2
- package/build/esm/components/MobileHeader/Burger/Burger.d.ts +5 -2
- package/build/esm/components/MobileHeader/MobileHeader.d.ts +2 -0
- package/build/esm/components/MobileHeader/i18n/index.d.ts +2 -0
- package/build/esm/components/Settings/Settings.d.ts +4 -7
- package/build/esm/components/Settings/i18n/index.d.ts +2 -0
- package/build/esm/components/Title/Title.d.ts +1 -3
- package/build/esm/components/Title/i18n/index.d.ts +2 -0
- package/build/esm/components/constants.d.ts +0 -7
- package/build/esm/components/index.d.ts +1 -0
- package/build/esm/components/types.d.ts +0 -10
- package/build/esm/components/utils/registerKeyset.d.ts +5 -0
- package/build/esm/i18n.d.ts +2 -0
- package/build/esm/index.js +302 -55
- package/build/esm/index.js.map +1 -1
- package/package.json +2 -1
package/build/cjs/index.js
CHANGED
|
@@ -94,28 +94,9 @@ function block(name) {
|
|
|
94
94
|
return _default(`${NAMESPACE}${name}`);
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
exports.MobileHeaderDict = void 0;
|
|
98
|
-
(function (MobileHeaderDict) {
|
|
99
|
-
MobileHeaderDict["CloseBurger"] = "button_close-burger";
|
|
100
|
-
MobileHeaderDict["OpenBurger"] = "button_open-burger";
|
|
101
|
-
})(exports.MobileHeaderDict || (exports.MobileHeaderDict = {}));
|
|
102
|
-
exports.Dict = void 0;
|
|
103
|
-
(function (Dict) {
|
|
104
|
-
Dict["ExpandButton"] = "button_expand";
|
|
105
|
-
Dict["CollapseButton"] = "button_collapse";
|
|
106
|
-
Dict["MoreButton"] = "button_more";
|
|
107
|
-
})(exports.Dict || (exports.Dict = {}));
|
|
108
|
-
|
|
109
97
|
const ASIDE_HEADER_FOOTER_ICON_SIZE = 20;
|
|
110
98
|
const ASIDE_HEADER_COMPACT_WIDTH = 56;
|
|
111
99
|
const ASIDE_HEADER_EXPANDED_WIDTH = 236;
|
|
112
|
-
const defaultDict$2 = {
|
|
113
|
-
[exports.Dict.CollapseButton]: 'Collapse',
|
|
114
|
-
[exports.Dict.ExpandButton]: 'Expand',
|
|
115
|
-
[exports.Dict.MoreButton]: 'More',
|
|
116
|
-
[exports.MobileHeaderDict.CloseBurger]: 'Close menu',
|
|
117
|
-
[exports.MobileHeaderDict.OpenBurger]: 'Open menu',
|
|
118
|
-
};
|
|
119
100
|
|
|
120
101
|
function _extends$2() {
|
|
121
102
|
_extends$2 = Object.assign ? Object.assign.bind() : function (target) {
|
|
@@ -1384,7 +1365,7 @@ function removeClass$1(element, className) {
|
|
|
1384
1365
|
}
|
|
1385
1366
|
}
|
|
1386
1367
|
|
|
1387
|
-
var config = {
|
|
1368
|
+
var config$1 = {
|
|
1388
1369
|
disabled: false
|
|
1389
1370
|
};
|
|
1390
1371
|
|
|
@@ -1664,7 +1645,7 @@ var Transition = /*#__PURE__*/function (_React$Component) {
|
|
|
1664
1645
|
var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED
|
|
1665
1646
|
// if we are mounting and running this it means appear _must_ be set
|
|
1666
1647
|
|
|
1667
|
-
if (!mounting && !enter || config.disabled) {
|
|
1648
|
+
if (!mounting && !enter || config$1.disabled) {
|
|
1668
1649
|
this.safeSetState({
|
|
1669
1650
|
status: ENTERED
|
|
1670
1651
|
}, function () {
|
|
@@ -1696,7 +1677,7 @@ var Transition = /*#__PURE__*/function (_React$Component) {
|
|
|
1696
1677
|
var timeouts = this.getTimeouts();
|
|
1697
1678
|
var maybeNode = this.props.nodeRef ? undefined : ReactDOM__default["default"].findDOMNode(this); // no exit animation skip right to EXITED
|
|
1698
1679
|
|
|
1699
|
-
if (!exit || config.disabled) {
|
|
1680
|
+
if (!exit || config$1.disabled) {
|
|
1700
1681
|
this.safeSetState({
|
|
1701
1682
|
status: EXITED
|
|
1702
1683
|
}, function () {
|
|
@@ -3675,12 +3656,10 @@ function getItemsMinHeight(items) {
|
|
|
3675
3656
|
getItemsHeight(afterMoreButtonItems) +
|
|
3676
3657
|
(pinnedItems.length === items.length ? 0 : ITEM_HEIGHT));
|
|
3677
3658
|
}
|
|
3678
|
-
function getMoreButtonItem(
|
|
3679
|
-
var _a;
|
|
3680
|
-
const title = (_a = dict === null || dict === void 0 ? void 0 : dict[exports.Dict.MoreButton]) !== null && _a !== void 0 ? _a : defaultDict$2[exports.Dict.MoreButton];
|
|
3659
|
+
function getMoreButtonItem(menuMoreTitle) {
|
|
3681
3660
|
return {
|
|
3682
3661
|
id: COLLAPSE_ITEM_ID,
|
|
3683
|
-
title,
|
|
3662
|
+
title: menuMoreTitle,
|
|
3684
3663
|
icon: icons.Ellipsis,
|
|
3685
3664
|
iconSize: 18,
|
|
3686
3665
|
};
|
|
@@ -3964,14 +3943,14 @@ const CompositeBarView = ({ type, items, onItemClick, collapseItems, multipleToo
|
|
|
3964
3943
|
} })),
|
|
3965
3944
|
type === 'menu' && (React__default["default"].createElement(MultipleTooltip, { open: compact && multipleTooltip && multipleTooltipActive, anchorRef: tooltipRef, placement: ['right-start'], items: items }))));
|
|
3966
3945
|
};
|
|
3967
|
-
const CompositeBar = ({ type, items,
|
|
3946
|
+
const CompositeBar = ({ type, items, menuMoreTitle, onItemClick, multipleTooltip = false, }) => {
|
|
3968
3947
|
if (items.length === 0) {
|
|
3969
3948
|
return null;
|
|
3970
3949
|
}
|
|
3971
3950
|
let node;
|
|
3972
3951
|
if (type === 'menu') {
|
|
3973
3952
|
const minHeight = getItemsMinHeight(items);
|
|
3974
|
-
const collapseItem = getMoreButtonItem(
|
|
3953
|
+
const collapseItem = getMoreButtonItem(menuMoreTitle);
|
|
3975
3954
|
node = (React__default["default"].createElement("div", { className: b$j({ autosizer: true }), style: { minHeight } }, items.length !== 0 && (React__default["default"].createElement(AutoSizer, null, ({ width, height }) => {
|
|
3976
3955
|
const { listItems, collapseItems } = getAutosizeListItems(items, height, collapseItem);
|
|
3977
3956
|
return (React__default["default"].createElement("div", { style: { width, height } },
|
|
@@ -4001,6 +3980,237 @@ function fakeDisplayName(newDisplayName, Component) {
|
|
|
4001
3980
|
return Fake;
|
|
4002
3981
|
}
|
|
4003
3982
|
|
|
3983
|
+
const PARAM_REGEXP = /{{(.*?)}}/g;
|
|
3984
|
+
function replaceParams(keyValue, params) {
|
|
3985
|
+
let result = '';
|
|
3986
|
+
let lastIndex = (PARAM_REGEXP.lastIndex = 0);
|
|
3987
|
+
let match;
|
|
3988
|
+
while ((match = PARAM_REGEXP.exec(keyValue))) {
|
|
3989
|
+
if (lastIndex !== match.index) {
|
|
3990
|
+
result += keyValue.slice(lastIndex, match.index);
|
|
3991
|
+
}
|
|
3992
|
+
lastIndex = PARAM_REGEXP.lastIndex;
|
|
3993
|
+
const [all, key] = match;
|
|
3994
|
+
if (Object.prototype.hasOwnProperty.call(params, key)) {
|
|
3995
|
+
result += params[key];
|
|
3996
|
+
}
|
|
3997
|
+
else {
|
|
3998
|
+
result += all;
|
|
3999
|
+
}
|
|
4000
|
+
}
|
|
4001
|
+
if (lastIndex < keyValue.length) {
|
|
4002
|
+
result += keyValue.slice(lastIndex);
|
|
4003
|
+
}
|
|
4004
|
+
return result;
|
|
4005
|
+
}
|
|
4006
|
+
|
|
4007
|
+
var PluralForm;
|
|
4008
|
+
(function (PluralForm) {
|
|
4009
|
+
PluralForm[PluralForm["One"] = 0] = "One";
|
|
4010
|
+
PluralForm[PluralForm["Few"] = 1] = "Few";
|
|
4011
|
+
PluralForm[PluralForm["Many"] = 2] = "Many";
|
|
4012
|
+
PluralForm[PluralForm["None"] = 3] = "None";
|
|
4013
|
+
})(PluralForm || (PluralForm = {}));
|
|
4014
|
+
|
|
4015
|
+
function pluralizerEn (count, pluralForms) {
|
|
4016
|
+
if (count === 0) {
|
|
4017
|
+
return pluralForms.None;
|
|
4018
|
+
}
|
|
4019
|
+
if (count === 1 || count === -1) {
|
|
4020
|
+
return pluralForms.One;
|
|
4021
|
+
}
|
|
4022
|
+
return pluralForms.Many;
|
|
4023
|
+
}
|
|
4024
|
+
|
|
4025
|
+
function pluralizerRu (count, pluralForms) {
|
|
4026
|
+
// the rules for negative numbers are the same
|
|
4027
|
+
const lastDigit = Math.abs(count % 10);
|
|
4028
|
+
const last2Digits = Math.abs(count % 100);
|
|
4029
|
+
if (count === 0) {
|
|
4030
|
+
return pluralForms.None;
|
|
4031
|
+
}
|
|
4032
|
+
if (lastDigit === 1 && last2Digits !== 11) {
|
|
4033
|
+
return pluralForms.One;
|
|
4034
|
+
}
|
|
4035
|
+
if ((lastDigit > 1 && lastDigit < 5) && (last2Digits < 10 || last2Digits > 20)) {
|
|
4036
|
+
return pluralForms.Few;
|
|
4037
|
+
}
|
|
4038
|
+
return pluralForms.Many;
|
|
4039
|
+
}
|
|
4040
|
+
|
|
4041
|
+
class I18N {
|
|
4042
|
+
constructor(options) {
|
|
4043
|
+
this.data = {};
|
|
4044
|
+
this.lang = undefined;
|
|
4045
|
+
this.pluralizers = {
|
|
4046
|
+
en: pluralizerEn,
|
|
4047
|
+
ru: pluralizerRu,
|
|
4048
|
+
};
|
|
4049
|
+
this.logger = null;
|
|
4050
|
+
this.logger = (options === null || options === void 0 ? void 0 : options.logger) || null;
|
|
4051
|
+
}
|
|
4052
|
+
setLang(lang) {
|
|
4053
|
+
this.lang = lang;
|
|
4054
|
+
}
|
|
4055
|
+
configurePluralization(pluralizers) {
|
|
4056
|
+
this.pluralizers = Object.assign({}, this.pluralizers, pluralizers);
|
|
4057
|
+
}
|
|
4058
|
+
registerKeyset(lang, keysetName, data = {}) {
|
|
4059
|
+
if (this.data[lang] && Object.prototype.hasOwnProperty.call(this.data[lang], keysetName)) {
|
|
4060
|
+
throw new Error(`Keyset '${keysetName}' is already registered, aborting!`);
|
|
4061
|
+
}
|
|
4062
|
+
this.data[lang] = Object.assign({}, this.data[lang], { [keysetName]: data });
|
|
4063
|
+
}
|
|
4064
|
+
registerKeysets(lang, data) {
|
|
4065
|
+
Object.keys(data).forEach((keysetName) => {
|
|
4066
|
+
this.registerKeyset(lang, keysetName, data[keysetName]);
|
|
4067
|
+
});
|
|
4068
|
+
}
|
|
4069
|
+
has(keysetName, key, lang) {
|
|
4070
|
+
const languageData = this.getLanguageData(lang);
|
|
4071
|
+
return Boolean(languageData && languageData[keysetName] && languageData[keysetName][key]);
|
|
4072
|
+
}
|
|
4073
|
+
i18n(keysetName, key, params) {
|
|
4074
|
+
const languageData = this.getLanguageData(this.lang);
|
|
4075
|
+
if (typeof languageData === 'undefined') {
|
|
4076
|
+
throw new Error(`Language '${this.lang}' is not defined, make sure you call setLang for the same language you called registerKeysets for!`);
|
|
4077
|
+
}
|
|
4078
|
+
if (Object.keys(languageData).length === 0) {
|
|
4079
|
+
this.warn('Language data is empty.');
|
|
4080
|
+
return key;
|
|
4081
|
+
}
|
|
4082
|
+
const keyset = languageData[keysetName];
|
|
4083
|
+
if (!keyset) {
|
|
4084
|
+
this.warn('Keyset not found.', keysetName);
|
|
4085
|
+
return key;
|
|
4086
|
+
}
|
|
4087
|
+
if (Object.keys(keyset).length === 0) {
|
|
4088
|
+
this.warn('Keyset is empty.', keysetName);
|
|
4089
|
+
return key;
|
|
4090
|
+
}
|
|
4091
|
+
const keyValue = keyset && keyset[key];
|
|
4092
|
+
let result;
|
|
4093
|
+
if (typeof keyValue === 'undefined') {
|
|
4094
|
+
this.warn('Missing key.', keysetName, key);
|
|
4095
|
+
return key;
|
|
4096
|
+
}
|
|
4097
|
+
if (Array.isArray(keyValue)) {
|
|
4098
|
+
if (keyValue.length < 3) {
|
|
4099
|
+
this.warn('Missing required plurals', keysetName, key);
|
|
4100
|
+
return key;
|
|
4101
|
+
}
|
|
4102
|
+
const count = Number(params === null || params === void 0 ? void 0 : params.count);
|
|
4103
|
+
if (Number.isNaN(count)) {
|
|
4104
|
+
this.warn('Missing params.count for key.', keysetName, key);
|
|
4105
|
+
return key;
|
|
4106
|
+
}
|
|
4107
|
+
const pluralizer = this.getLanguagePluralizer(this.lang);
|
|
4108
|
+
result = keyValue[pluralizer(count, PluralForm)] || keyValue[PluralForm.Many];
|
|
4109
|
+
if (keyValue[PluralForm.None] === undefined) {
|
|
4110
|
+
this.warn('Missing key for 0', keysetName, key);
|
|
4111
|
+
}
|
|
4112
|
+
}
|
|
4113
|
+
else {
|
|
4114
|
+
result = keyValue;
|
|
4115
|
+
}
|
|
4116
|
+
if (params) {
|
|
4117
|
+
result = replaceParams(result, params);
|
|
4118
|
+
}
|
|
4119
|
+
return result;
|
|
4120
|
+
}
|
|
4121
|
+
keyset(keysetName) {
|
|
4122
|
+
return (key, params) => {
|
|
4123
|
+
return this.i18n(keysetName, key, params);
|
|
4124
|
+
};
|
|
4125
|
+
}
|
|
4126
|
+
warn(msg, keyset, key) {
|
|
4127
|
+
var _a;
|
|
4128
|
+
let cacheKey = '';
|
|
4129
|
+
if (keyset) {
|
|
4130
|
+
cacheKey += keyset;
|
|
4131
|
+
if (key) {
|
|
4132
|
+
cacheKey += `.${key}`;
|
|
4133
|
+
}
|
|
4134
|
+
}
|
|
4135
|
+
else {
|
|
4136
|
+
cacheKey = 'languageData';
|
|
4137
|
+
}
|
|
4138
|
+
(_a = this.logger) === null || _a === void 0 ? void 0 : _a.log(`I18n: ${msg}`, {
|
|
4139
|
+
level: 'info',
|
|
4140
|
+
logger: cacheKey,
|
|
4141
|
+
extra: {
|
|
4142
|
+
type: 'i18n'
|
|
4143
|
+
}
|
|
4144
|
+
});
|
|
4145
|
+
}
|
|
4146
|
+
getLanguageData(lang) {
|
|
4147
|
+
const langCode = lang || this.lang;
|
|
4148
|
+
return langCode ? this.data[langCode] : undefined;
|
|
4149
|
+
}
|
|
4150
|
+
getLanguagePluralizer(lang) {
|
|
4151
|
+
const pluralizer = lang ? this.pluralizers[lang] : undefined;
|
|
4152
|
+
if (!pluralizer) {
|
|
4153
|
+
this.warn(`Pluralization is not configured for language '${lang}', falling back to the english ruleset`);
|
|
4154
|
+
}
|
|
4155
|
+
return pluralizer || pluralizerEn;
|
|
4156
|
+
}
|
|
4157
|
+
}
|
|
4158
|
+
|
|
4159
|
+
exports.Lang = void 0;
|
|
4160
|
+
(function (Lang) {
|
|
4161
|
+
Lang["Ru"] = "ru";
|
|
4162
|
+
Lang["En"] = "en";
|
|
4163
|
+
})(exports.Lang || (exports.Lang = {}));
|
|
4164
|
+
let subs = [];
|
|
4165
|
+
const config = {
|
|
4166
|
+
lang: exports.Lang.En,
|
|
4167
|
+
};
|
|
4168
|
+
const configure = (newConfig) => {
|
|
4169
|
+
Object.assign(config, newConfig);
|
|
4170
|
+
subs.forEach((sub) => {
|
|
4171
|
+
sub(config);
|
|
4172
|
+
});
|
|
4173
|
+
};
|
|
4174
|
+
const subscribeConfigure = (sub) => {
|
|
4175
|
+
subs.push(sub);
|
|
4176
|
+
return () => {
|
|
4177
|
+
subs = subs.filter((item) => item !== sub);
|
|
4178
|
+
};
|
|
4179
|
+
};
|
|
4180
|
+
const getConfig = () => config;
|
|
4181
|
+
|
|
4182
|
+
const i18n$4 = new I18N();
|
|
4183
|
+
i18n$4.setLang(getConfig().lang);
|
|
4184
|
+
subscribeConfigure((config) => {
|
|
4185
|
+
i18n$4.setLang(config.lang);
|
|
4186
|
+
});
|
|
4187
|
+
|
|
4188
|
+
function registerKeyset(data, keysetName) {
|
|
4189
|
+
Object.entries(data).forEach(([lang, keys]) => i18n$4.registerKeyset(lang, keysetName, keys));
|
|
4190
|
+
return i18n$4.keyset(keysetName);
|
|
4191
|
+
}
|
|
4192
|
+
|
|
4193
|
+
var button_collapse$1 = "Collapse";
|
|
4194
|
+
var button_expand$1 = "Expand";
|
|
4195
|
+
var label_more$1 = "More";
|
|
4196
|
+
var en$3 = {
|
|
4197
|
+
button_collapse: button_collapse$1,
|
|
4198
|
+
button_expand: button_expand$1,
|
|
4199
|
+
label_more: label_more$1
|
|
4200
|
+
};
|
|
4201
|
+
|
|
4202
|
+
var button_collapse = "Свернуть";
|
|
4203
|
+
var button_expand = "Развернуть";
|
|
4204
|
+
var label_more = "Ещё";
|
|
4205
|
+
var ru$3 = {
|
|
4206
|
+
button_collapse: button_collapse,
|
|
4207
|
+
button_expand: button_expand,
|
|
4208
|
+
label_more: label_more
|
|
4209
|
+
};
|
|
4210
|
+
|
|
4211
|
+
const COMPONENT$3 = 'AsideHeader';
|
|
4212
|
+
var i18n$3 = registerKeyset({ en: en$3, ru: ru$3 }, COMPONENT$3);
|
|
4213
|
+
|
|
4004
4214
|
var _path$1;
|
|
4005
4215
|
function _extends$1() { _extends$1 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$1.apply(this, arguments); }
|
|
4006
4216
|
var SvgControlMenuButton = function SvgControlMenuButton(props) {
|
|
@@ -4042,13 +4252,13 @@ class AsideHeader extends React__default["default"].Component {
|
|
|
4042
4252
|
super(...arguments);
|
|
4043
4253
|
this.asideRef = React__default["default"].createRef();
|
|
4044
4254
|
this.renderFirstPane = (size) => {
|
|
4045
|
-
const {
|
|
4255
|
+
const { menuItems, panelItems, headerDecoration, multipleTooltip, menuMoreTitle } = this.props;
|
|
4046
4256
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
4047
4257
|
React__default["default"].createElement("div", { className: b$i('aside'), style: { width: size } },
|
|
4048
4258
|
React__default["default"].createElement("div", { className: b$i('aside-popup-anchor'), ref: this.asideRef }),
|
|
4049
4259
|
React__default["default"].createElement("div", { className: b$i('aside-content', { ['with-decoration']: headerDecoration }) },
|
|
4050
4260
|
this.renderHeader(),
|
|
4051
|
-
(menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? (React__default["default"].createElement(CompositeBar, { type: "menu", items: menuItems,
|
|
4261
|
+
(menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? (React__default["default"].createElement(CompositeBar, { type: "menu", items: menuItems, menuMoreTitle: menuMoreTitle !== null && menuMoreTitle !== void 0 ? menuMoreTitle : i18n$3('label_more'), onItemClick: this.onItemClick, multipleTooltip: multipleTooltip })) : (React__default["default"].createElement("div", { className: b$i('menu-items') })),
|
|
4052
4262
|
this.renderFooter(size),
|
|
4053
4263
|
this.renderCollapseButton())),
|
|
4054
4264
|
panelItems && this.renderPanels(size)));
|
|
@@ -4074,10 +4284,11 @@ class AsideHeader extends React__default["default"].Component {
|
|
|
4074
4284
|
return (React__default["default"].createElement(Drawer, { className: b$i('panels'), onVeilClick: this.onCloseDrawer, onEscape: this.onCloseDrawer, style: { left: size } }, panelItems.map((item) => (React__default["default"].createElement(DrawerItem, Object.assign({ key: item.id }, item))))));
|
|
4075
4285
|
};
|
|
4076
4286
|
this.renderCollapseButton = () => {
|
|
4077
|
-
|
|
4078
|
-
const
|
|
4079
|
-
|
|
4080
|
-
|
|
4287
|
+
const { expandTitle, collapseTitle, compact } = this.props;
|
|
4288
|
+
const buttonTitle = compact
|
|
4289
|
+
? expandTitle || i18n$3('button_expand')
|
|
4290
|
+
: collapseTitle || i18n$3('button_collapse');
|
|
4291
|
+
return (React__default["default"].createElement(uikit.Button, { className: b$i('collapse-button', { compact }), view: "flat", onClick: this.onCollapseButtonClick, title: buttonTitle },
|
|
4081
4292
|
React__default["default"].createElement(NotIcon, { data: controlMenuButtonIcon, className: b$i('collapse-icon'), width: "16", height: "10" })));
|
|
4082
4293
|
};
|
|
4083
4294
|
this.onCollapseButtonClick = () => {
|
|
@@ -4208,18 +4419,28 @@ const PublicActionBar = Object.assign(ActionBar, {
|
|
|
4208
4419
|
Separator: ActionBarSeparator,
|
|
4209
4420
|
});
|
|
4210
4421
|
|
|
4422
|
+
var button_close$1 = "Close";
|
|
4423
|
+
var en$2 = {
|
|
4424
|
+
button_close: button_close$1
|
|
4425
|
+
};
|
|
4426
|
+
|
|
4427
|
+
var button_close = "Закрыть";
|
|
4428
|
+
var ru$2 = {
|
|
4429
|
+
button_close: button_close
|
|
4430
|
+
};
|
|
4431
|
+
|
|
4432
|
+
const COMPONENT$2 = 'Title';
|
|
4433
|
+
var i18n$2 = registerKeyset({ en: en$2, ru: ru$2 }, COMPONENT$2);
|
|
4434
|
+
|
|
4211
4435
|
var css_248z$a = ".gn-title {\n box-sizing: border-box;\n padding: 14px 10px 14px 20px;\n min-height: 64px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.gn-title_separator {\n border-bottom: 1px solid var(--g-color-line-generic);\n}\n.gn-title__text {\n margin: 0;\n margin-right: 20px;\n}";
|
|
4212
4436
|
styleInject(css_248z$a);
|
|
4213
4437
|
|
|
4214
4438
|
const b$b = block('title');
|
|
4215
|
-
const
|
|
4216
|
-
close: 'Close',
|
|
4217
|
-
};
|
|
4218
|
-
const Title = ({ children, closeIconSize = 23, hasSeparator, dict = defaultDict$1, onClose, }) => {
|
|
4439
|
+
const Title = ({ children, closeIconSize = 23, hasSeparator, closeTitle = i18n$2('button_close'), onClose, }) => {
|
|
4219
4440
|
return (React__default["default"].createElement("div", { className: b$b({ separator: hasSeparator }) },
|
|
4220
4441
|
React__default["default"].createElement(uikit.Text, { className: b$b('text'), as: 'h3', variant: 'subheader-3' }, children),
|
|
4221
4442
|
onClose && (React__default["default"].createElement(uikit.Button, { onClick: onClose, view: "flat", size: "l", extraProps: {
|
|
4222
|
-
'aria-label':
|
|
4443
|
+
'aria-label': closeTitle,
|
|
4223
4444
|
} },
|
|
4224
4445
|
React__default["default"].createElement(uikit.Icon, { data: icons.Xmark, size: closeIconSize })))));
|
|
4225
4446
|
};
|
|
@@ -4981,6 +5202,23 @@ const SettingsMenuMobile = ({ items, onChange, activeItemId, className, }) => {
|
|
|
4981
5202
|
React__default["default"].createElement(uikit.Tabs, { items: tabItems, className: b$7(null, className), size: "l", activeTab: activeItemId, onSelectTab: onChange })));
|
|
4982
5203
|
};
|
|
4983
5204
|
|
|
5205
|
+
var label_title$1 = "Settings";
|
|
5206
|
+
var en$1 = {
|
|
5207
|
+
label_title: label_title$1,
|
|
5208
|
+
"label_filter-placeholder": "Search settings",
|
|
5209
|
+
"label_empty-placeholder": "No results found"
|
|
5210
|
+
};
|
|
5211
|
+
|
|
5212
|
+
var label_title = "Настройки";
|
|
5213
|
+
var ru$1 = {
|
|
5214
|
+
label_title: label_title,
|
|
5215
|
+
"label_filter-placeholder": "Найти настройки",
|
|
5216
|
+
"label_empty-placeholder": "Ничего не найдено"
|
|
5217
|
+
};
|
|
5218
|
+
|
|
5219
|
+
const COMPONENT$1 = 'Settings';
|
|
5220
|
+
var i18n$1 = registerKeyset({ en: en$1, ru: ru$1 }, COMPONENT$1);
|
|
5221
|
+
|
|
4984
5222
|
function getSettingsFromChildren(children, searchText = '') {
|
|
4985
5223
|
// 'abc def fg' -> abc.*?cde.*?fg
|
|
4986
5224
|
const preparedFilter = escapeStringForRegExp(searchText).replace(/\s+/g, '.*?');
|
|
@@ -5106,11 +5344,6 @@ var css_248z$6 = ".gn-settings {\n display: grid;\n grid-template-columns: 216
|
|
|
5106
5344
|
styleInject(css_248z$6);
|
|
5107
5345
|
|
|
5108
5346
|
const b$6 = block('settings');
|
|
5109
|
-
const defaultDict = {
|
|
5110
|
-
heading_settings: 'Settings',
|
|
5111
|
-
placeholder_search: 'Search settings',
|
|
5112
|
-
not_found: 'No results found',
|
|
5113
|
-
};
|
|
5114
5347
|
function Settings(_a) {
|
|
5115
5348
|
var { loading, renderLoading, children, view = 'normal' } = _a, props = __rest(_a, ["loading", "renderLoading", "children", "view"]);
|
|
5116
5349
|
if (loading) {
|
|
@@ -5130,10 +5363,7 @@ const getPageTitleById = (menu, activePage) => {
|
|
|
5130
5363
|
}
|
|
5131
5364
|
return '';
|
|
5132
5365
|
};
|
|
5133
|
-
|
|
5134
|
-
dict: defaultDict,
|
|
5135
|
-
};
|
|
5136
|
-
function SettingsContent({ initialPage, children, renderNotFound, dict, view, onPageChange, onClose, }) {
|
|
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, }) {
|
|
5137
5367
|
var _a, _b;
|
|
5138
5368
|
const [search, setSearch] = React__default["default"].useState('');
|
|
5139
5369
|
const { menu, pages } = getSettingsFromChildren(children, search);
|
|
@@ -5175,7 +5405,7 @@ function SettingsContent({ initialPage, children, renderNotFound, dict, view, on
|
|
|
5175
5405
|
});
|
|
5176
5406
|
const renderPageContent = () => {
|
|
5177
5407
|
if (!activePage) {
|
|
5178
|
-
return typeof renderNotFound === 'function' ? (renderNotFound()) : (React__default["default"].createElement("div", { className: b$6('not-found') },
|
|
5408
|
+
return typeof renderNotFound === 'function' ? (renderNotFound()) : (React__default["default"].createElement("div", { className: b$6('not-found') }, emptyPlaceholder));
|
|
5179
5409
|
}
|
|
5180
5410
|
const filteredSections = pages[activePage].sections.filter((section) => !section.hidden);
|
|
5181
5411
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
@@ -5202,8 +5432,8 @@ function SettingsContent({ initialPage, children, renderNotFound, dict, view, on
|
|
|
5202
5432
|
}
|
|
5203
5433
|
}
|
|
5204
5434
|
} },
|
|
5205
|
-
React__default["default"].createElement(Title, null,
|
|
5206
|
-
React__default["default"].createElement(SettingsSearch, { inputRef: searchInputRef, className: b$6('search'), onChange: setSearch, placeholder:
|
|
5435
|
+
React__default["default"].createElement(Title, null, title),
|
|
5436
|
+
React__default["default"].createElement(SettingsSearch, { inputRef: searchInputRef, className: b$6('search'), onChange: setSearch, placeholder: filterPlaceholder, autoFocus: true }),
|
|
5207
5437
|
React__default["default"].createElement(SettingsMenu, { ref: menuRef, items: menu, onChange: handlePageChange, activeItemId: activePage }))),
|
|
5208
5438
|
React__default["default"].createElement("div", { className: b$6('page') }, renderPageContent())));
|
|
5209
5439
|
}
|
|
@@ -5266,7 +5496,7 @@ var css_248z$5 = ".gn-mobile-header-burger {\n margin: 0;\n padding: 0;\n fon
|
|
|
5266
5496
|
styleInject(css_248z$5);
|
|
5267
5497
|
|
|
5268
5498
|
const b$5 = block('mobile-header-burger');
|
|
5269
|
-
const Burger = React__default["default"].memo(({ opened, className, onClick }) => (React__default["default"].createElement("button", { className: b$5({ opened }, className), onClick: onClick, "aria-label": opened ?
|
|
5499
|
+
const Burger = React__default["default"].memo(({ closeTitle, openTitle, opened, className, onClick }) => (React__default["default"].createElement("button", { className: b$5({ opened }, className), onClick: onClick, "aria-label": opened ? closeTitle : openTitle },
|
|
5270
5500
|
React__default["default"].createElement("span", { className: b$5('icon') },
|
|
5271
5501
|
React__default["default"].createElement("span", { className: b$5('icon-dash') })))));
|
|
5272
5502
|
Burger.displayName = 'Burger';
|
|
@@ -5372,11 +5602,28 @@ const BurgerMenu = React__default["default"].memo(({ items = [], renderFooter, m
|
|
|
5372
5602
|
});
|
|
5373
5603
|
BurgerMenu.displayName = 'BurgerMenu';
|
|
5374
5604
|
|
|
5605
|
+
var burger_button_close$1 = "Close menu";
|
|
5606
|
+
var burger_button_open$1 = "Open menu";
|
|
5607
|
+
var en = {
|
|
5608
|
+
burger_button_close: burger_button_close$1,
|
|
5609
|
+
burger_button_open: burger_button_open$1
|
|
5610
|
+
};
|
|
5611
|
+
|
|
5612
|
+
var burger_button_close = "Закрыть меню";
|
|
5613
|
+
var burger_button_open = "Открыть меню";
|
|
5614
|
+
var ru = {
|
|
5615
|
+
burger_button_close: burger_button_close,
|
|
5616
|
+
burger_button_open: burger_button_open
|
|
5617
|
+
};
|
|
5618
|
+
|
|
5619
|
+
const COMPONENT = 'MobileHeader';
|
|
5620
|
+
var i18n = registerKeyset({ en, ru }, COMPONENT);
|
|
5621
|
+
|
|
5375
5622
|
var css_248z$1 = ".gn-mobile-header {\n --mobile-header-min-heigth: 50px;\n --mobile-header-icon-size: 20px;\n background-color: var(--g-color-base-background);\n}\n.gn-mobile-header__header {\n background-color: var(--g-color-base-background);\n border-bottom: 1px solid var(--g-color-line-generic);\n position: sticky;\n top: 0;\n padding: 0 10px;\n box-sizing: border-box;\n display: flex;\n justify-content: space-between;\n align-items: center;\n z-index: 100;\n}\n.gn-mobile-header__burger {\n padding: 12px;\n}\n.gn-mobile-header__burger-menu, .gn-mobile-header__panel-item {\n background-color: var(--g-color-base-background);\n width: 320px;\n max-width: 90vw;\n max-height: 100%;\n}\n.gn-mobile-header__user-menu {\n overflow-y: auto;\n}\n.gn-mobile-header__panels {\n z-index: 98;\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: var(--mobile-header-min-heigth);\n overflow: hidden;\n}\n.gn-mobile-header__content {\n overflow: auto;\n}";
|
|
5376
5623
|
styleInject(css_248z$1);
|
|
5377
5624
|
|
|
5378
5625
|
const b$1 = block('mobile-header');
|
|
5379
|
-
const MobileHeader = React__default["default"].forwardRef(({ logo, burgerMenu, panelItems = [], renderContent, sideItemRenderContent, onClosePanel, onEvent, className, }, ref) => {
|
|
5626
|
+
const MobileHeader = React__default["default"].forwardRef(({ logo, burgerMenu, burgerCloseTitle = i18n('burger_button_close'), burgerOpenTitle = i18n('burger_button_open'), panelItems = [], renderContent, sideItemRenderContent, onClosePanel, onEvent, className, }, ref) => {
|
|
5380
5627
|
const targetRef = useForwardRef(ref);
|
|
5381
5628
|
const [compact] = React.useState(true);
|
|
5382
5629
|
const [visiblePanel, setVisiblePanel] = React.useState(null);
|
|
@@ -5466,7 +5713,7 @@ const MobileHeader = React__default["default"].forwardRef(({ logo, burgerMenu, p
|
|
|
5466
5713
|
}, [targetRef, onBurgerClose, onBurgerOpen]);
|
|
5467
5714
|
return (React__default["default"].createElement("div", { className: b$1({ compact }, className), ref: targetRef },
|
|
5468
5715
|
React__default["default"].createElement("header", { className: b$1('header'), style: { height: size } },
|
|
5469
|
-
React__default["default"].createElement(Burger, { opened: visiblePanel === burgerPanelItem.id, onClick: () => onPanelToggle(BURGER_PANEL_ITEM_ID), className: b$1('burger') }),
|
|
5716
|
+
React__default["default"].createElement(Burger, { opened: visiblePanel === burgerPanelItem.id, onClick: () => onPanelToggle(BURGER_PANEL_ITEM_ID), className: b$1('burger'), closeTitle: burgerCloseTitle, openTitle: burgerOpenTitle }),
|
|
5470
5717
|
React__default["default"].createElement(Logo, Object.assign({}, logo, { compact: compact, onClick: onLogoClick })),
|
|
5471
5718
|
React__default["default"].createElement("div", { className: b$1('side-item') }, sideItemRenderContent === null || sideItemRenderContent === void 0 ? void 0 : sideItemRenderContent({ size }))),
|
|
5472
5719
|
React__default["default"].createElement(Drawer, { className: b$1('panels'), onVeilClick: onCloseDrawer, onEscape: onCloseDrawer, style: { top: size } }, [burgerPanelItem, ...panelItems].map((item) => (React__default["default"].createElement(DrawerItem, Object.assign({}, item, { key: item.id, visible: visiblePanel === item.id, className: b$1('panel-item', item.className) }))))),
|
|
@@ -5504,5 +5751,6 @@ exports.MobileHeader = MobileHeader;
|
|
|
5504
5751
|
exports.MobileHeaderFooterItem = FooterItem;
|
|
5505
5752
|
exports.Settings = Settings;
|
|
5506
5753
|
exports.Title = Title;
|
|
5754
|
+
exports.configure = configure;
|
|
5507
5755
|
exports.useAsideHeaderContext = useAsideHeaderContext;
|
|
5508
5756
|
//# sourceMappingURL=index.js.map
|