@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/esm/index.js
CHANGED
|
@@ -67,28 +67,9 @@ function block(name) {
|
|
|
67
67
|
return _default(`${NAMESPACE}${name}`);
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
var MobileHeaderDict;
|
|
71
|
-
(function (MobileHeaderDict) {
|
|
72
|
-
MobileHeaderDict["CloseBurger"] = "button_close-burger";
|
|
73
|
-
MobileHeaderDict["OpenBurger"] = "button_open-burger";
|
|
74
|
-
})(MobileHeaderDict || (MobileHeaderDict = {}));
|
|
75
|
-
var Dict;
|
|
76
|
-
(function (Dict) {
|
|
77
|
-
Dict["ExpandButton"] = "button_expand";
|
|
78
|
-
Dict["CollapseButton"] = "button_collapse";
|
|
79
|
-
Dict["MoreButton"] = "button_more";
|
|
80
|
-
})(Dict || (Dict = {}));
|
|
81
|
-
|
|
82
70
|
const ASIDE_HEADER_FOOTER_ICON_SIZE = 20;
|
|
83
71
|
const ASIDE_HEADER_COMPACT_WIDTH = 56;
|
|
84
72
|
const ASIDE_HEADER_EXPANDED_WIDTH = 236;
|
|
85
|
-
const defaultDict$2 = {
|
|
86
|
-
[Dict.CollapseButton]: 'Collapse',
|
|
87
|
-
[Dict.ExpandButton]: 'Expand',
|
|
88
|
-
[Dict.MoreButton]: 'More',
|
|
89
|
-
[MobileHeaderDict.CloseBurger]: 'Close menu',
|
|
90
|
-
[MobileHeaderDict.OpenBurger]: 'Open menu',
|
|
91
|
-
};
|
|
92
73
|
|
|
93
74
|
function _extends$2() {
|
|
94
75
|
_extends$2 = Object.assign ? Object.assign.bind() : function (target) {
|
|
@@ -1357,7 +1338,7 @@ function removeClass$1(element, className) {
|
|
|
1357
1338
|
}
|
|
1358
1339
|
}
|
|
1359
1340
|
|
|
1360
|
-
var config = {
|
|
1341
|
+
var config$1 = {
|
|
1361
1342
|
disabled: false
|
|
1362
1343
|
};
|
|
1363
1344
|
|
|
@@ -1637,7 +1618,7 @@ var Transition = /*#__PURE__*/function (_React$Component) {
|
|
|
1637
1618
|
var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED
|
|
1638
1619
|
// if we are mounting and running this it means appear _must_ be set
|
|
1639
1620
|
|
|
1640
|
-
if (!mounting && !enter || config.disabled) {
|
|
1621
|
+
if (!mounting && !enter || config$1.disabled) {
|
|
1641
1622
|
this.safeSetState({
|
|
1642
1623
|
status: ENTERED
|
|
1643
1624
|
}, function () {
|
|
@@ -1669,7 +1650,7 @@ var Transition = /*#__PURE__*/function (_React$Component) {
|
|
|
1669
1650
|
var timeouts = this.getTimeouts();
|
|
1670
1651
|
var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED
|
|
1671
1652
|
|
|
1672
|
-
if (!exit || config.disabled) {
|
|
1653
|
+
if (!exit || config$1.disabled) {
|
|
1673
1654
|
this.safeSetState({
|
|
1674
1655
|
status: EXITED
|
|
1675
1656
|
}, function () {
|
|
@@ -3648,12 +3629,10 @@ function getItemsMinHeight(items) {
|
|
|
3648
3629
|
getItemsHeight(afterMoreButtonItems) +
|
|
3649
3630
|
(pinnedItems.length === items.length ? 0 : ITEM_HEIGHT));
|
|
3650
3631
|
}
|
|
3651
|
-
function getMoreButtonItem(
|
|
3652
|
-
var _a;
|
|
3653
|
-
const title = (_a = dict === null || dict === void 0 ? void 0 : dict[Dict.MoreButton]) !== null && _a !== void 0 ? _a : defaultDict$2[Dict.MoreButton];
|
|
3632
|
+
function getMoreButtonItem(menuMoreTitle) {
|
|
3654
3633
|
return {
|
|
3655
3634
|
id: COLLAPSE_ITEM_ID,
|
|
3656
|
-
title,
|
|
3635
|
+
title: menuMoreTitle,
|
|
3657
3636
|
icon: Ellipsis,
|
|
3658
3637
|
iconSize: 18,
|
|
3659
3638
|
};
|
|
@@ -3937,14 +3916,14 @@ const CompositeBarView = ({ type, items, onItemClick, collapseItems, multipleToo
|
|
|
3937
3916
|
} })),
|
|
3938
3917
|
type === 'menu' && (React__default.createElement(MultipleTooltip, { open: compact && multipleTooltip && multipleTooltipActive, anchorRef: tooltipRef, placement: ['right-start'], items: items }))));
|
|
3939
3918
|
};
|
|
3940
|
-
const CompositeBar = ({ type, items,
|
|
3919
|
+
const CompositeBar = ({ type, items, menuMoreTitle, onItemClick, multipleTooltip = false, }) => {
|
|
3941
3920
|
if (items.length === 0) {
|
|
3942
3921
|
return null;
|
|
3943
3922
|
}
|
|
3944
3923
|
let node;
|
|
3945
3924
|
if (type === 'menu') {
|
|
3946
3925
|
const minHeight = getItemsMinHeight(items);
|
|
3947
|
-
const collapseItem = getMoreButtonItem(
|
|
3926
|
+
const collapseItem = getMoreButtonItem(menuMoreTitle);
|
|
3948
3927
|
node = (React__default.createElement("div", { className: b$j({ autosizer: true }), style: { minHeight } }, items.length !== 0 && (React__default.createElement(AutoSizer, null, ({ width, height }) => {
|
|
3949
3928
|
const { listItems, collapseItems } = getAutosizeListItems(items, height, collapseItem);
|
|
3950
3929
|
return (React__default.createElement("div", { style: { width, height } },
|
|
@@ -3974,6 +3953,237 @@ function fakeDisplayName(newDisplayName, Component) {
|
|
|
3974
3953
|
return Fake;
|
|
3975
3954
|
}
|
|
3976
3955
|
|
|
3956
|
+
const PARAM_REGEXP = /{{(.*?)}}/g;
|
|
3957
|
+
function replaceParams(keyValue, params) {
|
|
3958
|
+
let result = '';
|
|
3959
|
+
let lastIndex = (PARAM_REGEXP.lastIndex = 0);
|
|
3960
|
+
let match;
|
|
3961
|
+
while ((match = PARAM_REGEXP.exec(keyValue))) {
|
|
3962
|
+
if (lastIndex !== match.index) {
|
|
3963
|
+
result += keyValue.slice(lastIndex, match.index);
|
|
3964
|
+
}
|
|
3965
|
+
lastIndex = PARAM_REGEXP.lastIndex;
|
|
3966
|
+
const [all, key] = match;
|
|
3967
|
+
if (Object.prototype.hasOwnProperty.call(params, key)) {
|
|
3968
|
+
result += params[key];
|
|
3969
|
+
}
|
|
3970
|
+
else {
|
|
3971
|
+
result += all;
|
|
3972
|
+
}
|
|
3973
|
+
}
|
|
3974
|
+
if (lastIndex < keyValue.length) {
|
|
3975
|
+
result += keyValue.slice(lastIndex);
|
|
3976
|
+
}
|
|
3977
|
+
return result;
|
|
3978
|
+
}
|
|
3979
|
+
|
|
3980
|
+
var PluralForm;
|
|
3981
|
+
(function (PluralForm) {
|
|
3982
|
+
PluralForm[PluralForm["One"] = 0] = "One";
|
|
3983
|
+
PluralForm[PluralForm["Few"] = 1] = "Few";
|
|
3984
|
+
PluralForm[PluralForm["Many"] = 2] = "Many";
|
|
3985
|
+
PluralForm[PluralForm["None"] = 3] = "None";
|
|
3986
|
+
})(PluralForm || (PluralForm = {}));
|
|
3987
|
+
|
|
3988
|
+
function pluralizerEn (count, pluralForms) {
|
|
3989
|
+
if (count === 0) {
|
|
3990
|
+
return pluralForms.None;
|
|
3991
|
+
}
|
|
3992
|
+
if (count === 1 || count === -1) {
|
|
3993
|
+
return pluralForms.One;
|
|
3994
|
+
}
|
|
3995
|
+
return pluralForms.Many;
|
|
3996
|
+
}
|
|
3997
|
+
|
|
3998
|
+
function pluralizerRu (count, pluralForms) {
|
|
3999
|
+
// the rules for negative numbers are the same
|
|
4000
|
+
const lastDigit = Math.abs(count % 10);
|
|
4001
|
+
const last2Digits = Math.abs(count % 100);
|
|
4002
|
+
if (count === 0) {
|
|
4003
|
+
return pluralForms.None;
|
|
4004
|
+
}
|
|
4005
|
+
if (lastDigit === 1 && last2Digits !== 11) {
|
|
4006
|
+
return pluralForms.One;
|
|
4007
|
+
}
|
|
4008
|
+
if ((lastDigit > 1 && lastDigit < 5) && (last2Digits < 10 || last2Digits > 20)) {
|
|
4009
|
+
return pluralForms.Few;
|
|
4010
|
+
}
|
|
4011
|
+
return pluralForms.Many;
|
|
4012
|
+
}
|
|
4013
|
+
|
|
4014
|
+
class I18N {
|
|
4015
|
+
constructor(options) {
|
|
4016
|
+
this.data = {};
|
|
4017
|
+
this.lang = undefined;
|
|
4018
|
+
this.pluralizers = {
|
|
4019
|
+
en: pluralizerEn,
|
|
4020
|
+
ru: pluralizerRu,
|
|
4021
|
+
};
|
|
4022
|
+
this.logger = null;
|
|
4023
|
+
this.logger = (options === null || options === void 0 ? void 0 : options.logger) || null;
|
|
4024
|
+
}
|
|
4025
|
+
setLang(lang) {
|
|
4026
|
+
this.lang = lang;
|
|
4027
|
+
}
|
|
4028
|
+
configurePluralization(pluralizers) {
|
|
4029
|
+
this.pluralizers = Object.assign({}, this.pluralizers, pluralizers);
|
|
4030
|
+
}
|
|
4031
|
+
registerKeyset(lang, keysetName, data = {}) {
|
|
4032
|
+
if (this.data[lang] && Object.prototype.hasOwnProperty.call(this.data[lang], keysetName)) {
|
|
4033
|
+
throw new Error(`Keyset '${keysetName}' is already registered, aborting!`);
|
|
4034
|
+
}
|
|
4035
|
+
this.data[lang] = Object.assign({}, this.data[lang], { [keysetName]: data });
|
|
4036
|
+
}
|
|
4037
|
+
registerKeysets(lang, data) {
|
|
4038
|
+
Object.keys(data).forEach((keysetName) => {
|
|
4039
|
+
this.registerKeyset(lang, keysetName, data[keysetName]);
|
|
4040
|
+
});
|
|
4041
|
+
}
|
|
4042
|
+
has(keysetName, key, lang) {
|
|
4043
|
+
const languageData = this.getLanguageData(lang);
|
|
4044
|
+
return Boolean(languageData && languageData[keysetName] && languageData[keysetName][key]);
|
|
4045
|
+
}
|
|
4046
|
+
i18n(keysetName, key, params) {
|
|
4047
|
+
const languageData = this.getLanguageData(this.lang);
|
|
4048
|
+
if (typeof languageData === 'undefined') {
|
|
4049
|
+
throw new Error(`Language '${this.lang}' is not defined, make sure you call setLang for the same language you called registerKeysets for!`);
|
|
4050
|
+
}
|
|
4051
|
+
if (Object.keys(languageData).length === 0) {
|
|
4052
|
+
this.warn('Language data is empty.');
|
|
4053
|
+
return key;
|
|
4054
|
+
}
|
|
4055
|
+
const keyset = languageData[keysetName];
|
|
4056
|
+
if (!keyset) {
|
|
4057
|
+
this.warn('Keyset not found.', keysetName);
|
|
4058
|
+
return key;
|
|
4059
|
+
}
|
|
4060
|
+
if (Object.keys(keyset).length === 0) {
|
|
4061
|
+
this.warn('Keyset is empty.', keysetName);
|
|
4062
|
+
return key;
|
|
4063
|
+
}
|
|
4064
|
+
const keyValue = keyset && keyset[key];
|
|
4065
|
+
let result;
|
|
4066
|
+
if (typeof keyValue === 'undefined') {
|
|
4067
|
+
this.warn('Missing key.', keysetName, key);
|
|
4068
|
+
return key;
|
|
4069
|
+
}
|
|
4070
|
+
if (Array.isArray(keyValue)) {
|
|
4071
|
+
if (keyValue.length < 3) {
|
|
4072
|
+
this.warn('Missing required plurals', keysetName, key);
|
|
4073
|
+
return key;
|
|
4074
|
+
}
|
|
4075
|
+
const count = Number(params === null || params === void 0 ? void 0 : params.count);
|
|
4076
|
+
if (Number.isNaN(count)) {
|
|
4077
|
+
this.warn('Missing params.count for key.', keysetName, key);
|
|
4078
|
+
return key;
|
|
4079
|
+
}
|
|
4080
|
+
const pluralizer = this.getLanguagePluralizer(this.lang);
|
|
4081
|
+
result = keyValue[pluralizer(count, PluralForm)] || keyValue[PluralForm.Many];
|
|
4082
|
+
if (keyValue[PluralForm.None] === undefined) {
|
|
4083
|
+
this.warn('Missing key for 0', keysetName, key);
|
|
4084
|
+
}
|
|
4085
|
+
}
|
|
4086
|
+
else {
|
|
4087
|
+
result = keyValue;
|
|
4088
|
+
}
|
|
4089
|
+
if (params) {
|
|
4090
|
+
result = replaceParams(result, params);
|
|
4091
|
+
}
|
|
4092
|
+
return result;
|
|
4093
|
+
}
|
|
4094
|
+
keyset(keysetName) {
|
|
4095
|
+
return (key, params) => {
|
|
4096
|
+
return this.i18n(keysetName, key, params);
|
|
4097
|
+
};
|
|
4098
|
+
}
|
|
4099
|
+
warn(msg, keyset, key) {
|
|
4100
|
+
var _a;
|
|
4101
|
+
let cacheKey = '';
|
|
4102
|
+
if (keyset) {
|
|
4103
|
+
cacheKey += keyset;
|
|
4104
|
+
if (key) {
|
|
4105
|
+
cacheKey += `.${key}`;
|
|
4106
|
+
}
|
|
4107
|
+
}
|
|
4108
|
+
else {
|
|
4109
|
+
cacheKey = 'languageData';
|
|
4110
|
+
}
|
|
4111
|
+
(_a = this.logger) === null || _a === void 0 ? void 0 : _a.log(`I18n: ${msg}`, {
|
|
4112
|
+
level: 'info',
|
|
4113
|
+
logger: cacheKey,
|
|
4114
|
+
extra: {
|
|
4115
|
+
type: 'i18n'
|
|
4116
|
+
}
|
|
4117
|
+
});
|
|
4118
|
+
}
|
|
4119
|
+
getLanguageData(lang) {
|
|
4120
|
+
const langCode = lang || this.lang;
|
|
4121
|
+
return langCode ? this.data[langCode] : undefined;
|
|
4122
|
+
}
|
|
4123
|
+
getLanguagePluralizer(lang) {
|
|
4124
|
+
const pluralizer = lang ? this.pluralizers[lang] : undefined;
|
|
4125
|
+
if (!pluralizer) {
|
|
4126
|
+
this.warn(`Pluralization is not configured for language '${lang}', falling back to the english ruleset`);
|
|
4127
|
+
}
|
|
4128
|
+
return pluralizer || pluralizerEn;
|
|
4129
|
+
}
|
|
4130
|
+
}
|
|
4131
|
+
|
|
4132
|
+
var Lang;
|
|
4133
|
+
(function (Lang) {
|
|
4134
|
+
Lang["Ru"] = "ru";
|
|
4135
|
+
Lang["En"] = "en";
|
|
4136
|
+
})(Lang || (Lang = {}));
|
|
4137
|
+
let subs = [];
|
|
4138
|
+
const config = {
|
|
4139
|
+
lang: Lang.En,
|
|
4140
|
+
};
|
|
4141
|
+
const configure = (newConfig) => {
|
|
4142
|
+
Object.assign(config, newConfig);
|
|
4143
|
+
subs.forEach((sub) => {
|
|
4144
|
+
sub(config);
|
|
4145
|
+
});
|
|
4146
|
+
};
|
|
4147
|
+
const subscribeConfigure = (sub) => {
|
|
4148
|
+
subs.push(sub);
|
|
4149
|
+
return () => {
|
|
4150
|
+
subs = subs.filter((item) => item !== sub);
|
|
4151
|
+
};
|
|
4152
|
+
};
|
|
4153
|
+
const getConfig = () => config;
|
|
4154
|
+
|
|
4155
|
+
const i18n$4 = new I18N();
|
|
4156
|
+
i18n$4.setLang(getConfig().lang);
|
|
4157
|
+
subscribeConfigure((config) => {
|
|
4158
|
+
i18n$4.setLang(config.lang);
|
|
4159
|
+
});
|
|
4160
|
+
|
|
4161
|
+
function registerKeyset(data, keysetName) {
|
|
4162
|
+
Object.entries(data).forEach(([lang, keys]) => i18n$4.registerKeyset(lang, keysetName, keys));
|
|
4163
|
+
return i18n$4.keyset(keysetName);
|
|
4164
|
+
}
|
|
4165
|
+
|
|
4166
|
+
var button_collapse$1 = "Collapse";
|
|
4167
|
+
var button_expand$1 = "Expand";
|
|
4168
|
+
var label_more$1 = "More";
|
|
4169
|
+
var en$3 = {
|
|
4170
|
+
button_collapse: button_collapse$1,
|
|
4171
|
+
button_expand: button_expand$1,
|
|
4172
|
+
label_more: label_more$1
|
|
4173
|
+
};
|
|
4174
|
+
|
|
4175
|
+
var button_collapse = "Свернуть";
|
|
4176
|
+
var button_expand = "Развернуть";
|
|
4177
|
+
var label_more = "Ещё";
|
|
4178
|
+
var ru$3 = {
|
|
4179
|
+
button_collapse: button_collapse,
|
|
4180
|
+
button_expand: button_expand,
|
|
4181
|
+
label_more: label_more
|
|
4182
|
+
};
|
|
4183
|
+
|
|
4184
|
+
const COMPONENT$3 = 'AsideHeader';
|
|
4185
|
+
var i18n$3 = registerKeyset({ en: en$3, ru: ru$3 }, COMPONENT$3);
|
|
4186
|
+
|
|
3977
4187
|
var _path$1;
|
|
3978
4188
|
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); }
|
|
3979
4189
|
var SvgControlMenuButton = function SvgControlMenuButton(props) {
|
|
@@ -4015,13 +4225,13 @@ class AsideHeader extends React__default.Component {
|
|
|
4015
4225
|
super(...arguments);
|
|
4016
4226
|
this.asideRef = React__default.createRef();
|
|
4017
4227
|
this.renderFirstPane = (size) => {
|
|
4018
|
-
const {
|
|
4228
|
+
const { menuItems, panelItems, headerDecoration, multipleTooltip, menuMoreTitle } = this.props;
|
|
4019
4229
|
return (React__default.createElement(React__default.Fragment, null,
|
|
4020
4230
|
React__default.createElement("div", { className: b$i('aside'), style: { width: size } },
|
|
4021
4231
|
React__default.createElement("div", { className: b$i('aside-popup-anchor'), ref: this.asideRef }),
|
|
4022
4232
|
React__default.createElement("div", { className: b$i('aside-content', { ['with-decoration']: headerDecoration }) },
|
|
4023
4233
|
this.renderHeader(),
|
|
4024
|
-
(menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? (React__default.createElement(CompositeBar, { type: "menu", items: menuItems,
|
|
4234
|
+
(menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? (React__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.createElement("div", { className: b$i('menu-items') })),
|
|
4025
4235
|
this.renderFooter(size),
|
|
4026
4236
|
this.renderCollapseButton())),
|
|
4027
4237
|
panelItems && this.renderPanels(size)));
|
|
@@ -4047,10 +4257,11 @@ class AsideHeader extends React__default.Component {
|
|
|
4047
4257
|
return (React__default.createElement(Drawer, { className: b$i('panels'), onVeilClick: this.onCloseDrawer, onEscape: this.onCloseDrawer, style: { left: size } }, panelItems.map((item) => (React__default.createElement(DrawerItem, Object.assign({ key: item.id }, item))))));
|
|
4048
4258
|
};
|
|
4049
4259
|
this.renderCollapseButton = () => {
|
|
4050
|
-
|
|
4051
|
-
const
|
|
4052
|
-
|
|
4053
|
-
|
|
4260
|
+
const { expandTitle, collapseTitle, compact } = this.props;
|
|
4261
|
+
const buttonTitle = compact
|
|
4262
|
+
? expandTitle || i18n$3('button_expand')
|
|
4263
|
+
: collapseTitle || i18n$3('button_collapse');
|
|
4264
|
+
return (React__default.createElement(Button, { className: b$i('collapse-button', { compact }), view: "flat", onClick: this.onCollapseButtonClick, title: buttonTitle },
|
|
4054
4265
|
React__default.createElement(NotIcon, { data: controlMenuButtonIcon, className: b$i('collapse-icon'), width: "16", height: "10" })));
|
|
4055
4266
|
};
|
|
4056
4267
|
this.onCollapseButtonClick = () => {
|
|
@@ -4181,18 +4392,28 @@ const PublicActionBar = Object.assign(ActionBar, {
|
|
|
4181
4392
|
Separator: ActionBarSeparator,
|
|
4182
4393
|
});
|
|
4183
4394
|
|
|
4395
|
+
var button_close$1 = "Close";
|
|
4396
|
+
var en$2 = {
|
|
4397
|
+
button_close: button_close$1
|
|
4398
|
+
};
|
|
4399
|
+
|
|
4400
|
+
var button_close = "Закрыть";
|
|
4401
|
+
var ru$2 = {
|
|
4402
|
+
button_close: button_close
|
|
4403
|
+
};
|
|
4404
|
+
|
|
4405
|
+
const COMPONENT$2 = 'Title';
|
|
4406
|
+
var i18n$2 = registerKeyset({ en: en$2, ru: ru$2 }, COMPONENT$2);
|
|
4407
|
+
|
|
4184
4408
|
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}";
|
|
4185
4409
|
styleInject(css_248z$a);
|
|
4186
4410
|
|
|
4187
4411
|
const b$b = block('title');
|
|
4188
|
-
const
|
|
4189
|
-
close: 'Close',
|
|
4190
|
-
};
|
|
4191
|
-
const Title = ({ children, closeIconSize = 23, hasSeparator, dict = defaultDict$1, onClose, }) => {
|
|
4412
|
+
const Title = ({ children, closeIconSize = 23, hasSeparator, closeTitle = i18n$2('button_close'), onClose, }) => {
|
|
4192
4413
|
return (React__default.createElement("div", { className: b$b({ separator: hasSeparator }) },
|
|
4193
4414
|
React__default.createElement(Text, { className: b$b('text'), as: 'h3', variant: 'subheader-3' }, children),
|
|
4194
4415
|
onClose && (React__default.createElement(Button, { onClick: onClose, view: "flat", size: "l", extraProps: {
|
|
4195
|
-
'aria-label':
|
|
4416
|
+
'aria-label': closeTitle,
|
|
4196
4417
|
} },
|
|
4197
4418
|
React__default.createElement(Icon, { data: Xmark, size: closeIconSize })))));
|
|
4198
4419
|
};
|
|
@@ -4954,6 +5175,23 @@ const SettingsMenuMobile = ({ items, onChange, activeItemId, className, }) => {
|
|
|
4954
5175
|
React__default.createElement(Tabs, { items: tabItems, className: b$7(null, className), size: "l", activeTab: activeItemId, onSelectTab: onChange })));
|
|
4955
5176
|
};
|
|
4956
5177
|
|
|
5178
|
+
var label_title$1 = "Settings";
|
|
5179
|
+
var en$1 = {
|
|
5180
|
+
label_title: label_title$1,
|
|
5181
|
+
"label_filter-placeholder": "Search settings",
|
|
5182
|
+
"label_empty-placeholder": "No results found"
|
|
5183
|
+
};
|
|
5184
|
+
|
|
5185
|
+
var label_title = "Настройки";
|
|
5186
|
+
var ru$1 = {
|
|
5187
|
+
label_title: label_title,
|
|
5188
|
+
"label_filter-placeholder": "Найти настройки",
|
|
5189
|
+
"label_empty-placeholder": "Ничего не найдено"
|
|
5190
|
+
};
|
|
5191
|
+
|
|
5192
|
+
const COMPONENT$1 = 'Settings';
|
|
5193
|
+
var i18n$1 = registerKeyset({ en: en$1, ru: ru$1 }, COMPONENT$1);
|
|
5194
|
+
|
|
4957
5195
|
function getSettingsFromChildren(children, searchText = '') {
|
|
4958
5196
|
// 'abc def fg' -> abc.*?cde.*?fg
|
|
4959
5197
|
const preparedFilter = escapeStringForRegExp(searchText).replace(/\s+/g, '.*?');
|
|
@@ -5079,11 +5317,6 @@ var css_248z$6 = ".gn-settings {\n display: grid;\n grid-template-columns: 216
|
|
|
5079
5317
|
styleInject(css_248z$6);
|
|
5080
5318
|
|
|
5081
5319
|
const b$6 = block('settings');
|
|
5082
|
-
const defaultDict = {
|
|
5083
|
-
heading_settings: 'Settings',
|
|
5084
|
-
placeholder_search: 'Search settings',
|
|
5085
|
-
not_found: 'No results found',
|
|
5086
|
-
};
|
|
5087
5320
|
function Settings(_a) {
|
|
5088
5321
|
var { loading, renderLoading, children, view = 'normal' } = _a, props = __rest(_a, ["loading", "renderLoading", "children", "view"]);
|
|
5089
5322
|
if (loading) {
|
|
@@ -5103,10 +5336,7 @@ const getPageTitleById = (menu, activePage) => {
|
|
|
5103
5336
|
}
|
|
5104
5337
|
return '';
|
|
5105
5338
|
};
|
|
5106
|
-
|
|
5107
|
-
dict: defaultDict,
|
|
5108
|
-
};
|
|
5109
|
-
function SettingsContent({ initialPage, children, renderNotFound, dict, view, onPageChange, onClose, }) {
|
|
5339
|
+
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, }) {
|
|
5110
5340
|
var _a, _b;
|
|
5111
5341
|
const [search, setSearch] = React__default.useState('');
|
|
5112
5342
|
const { menu, pages } = getSettingsFromChildren(children, search);
|
|
@@ -5148,7 +5378,7 @@ function SettingsContent({ initialPage, children, renderNotFound, dict, view, on
|
|
|
5148
5378
|
});
|
|
5149
5379
|
const renderPageContent = () => {
|
|
5150
5380
|
if (!activePage) {
|
|
5151
|
-
return typeof renderNotFound === 'function' ? (renderNotFound()) : (React__default.createElement("div", { className: b$6('not-found') },
|
|
5381
|
+
return typeof renderNotFound === 'function' ? (renderNotFound()) : (React__default.createElement("div", { className: b$6('not-found') }, emptyPlaceholder));
|
|
5152
5382
|
}
|
|
5153
5383
|
const filteredSections = pages[activePage].sections.filter((section) => !section.hidden);
|
|
5154
5384
|
return (React__default.createElement(React__default.Fragment, null,
|
|
@@ -5175,8 +5405,8 @@ function SettingsContent({ initialPage, children, renderNotFound, dict, view, on
|
|
|
5175
5405
|
}
|
|
5176
5406
|
}
|
|
5177
5407
|
} },
|
|
5178
|
-
React__default.createElement(Title, null,
|
|
5179
|
-
React__default.createElement(SettingsSearch, { inputRef: searchInputRef, className: b$6('search'), onChange: setSearch, placeholder:
|
|
5408
|
+
React__default.createElement(Title, null, title),
|
|
5409
|
+
React__default.createElement(SettingsSearch, { inputRef: searchInputRef, className: b$6('search'), onChange: setSearch, placeholder: filterPlaceholder, autoFocus: true }),
|
|
5180
5410
|
React__default.createElement(SettingsMenu, { ref: menuRef, items: menu, onChange: handlePageChange, activeItemId: activePage }))),
|
|
5181
5411
|
React__default.createElement("div", { className: b$6('page') }, renderPageContent())));
|
|
5182
5412
|
}
|
|
@@ -5239,7 +5469,7 @@ var css_248z$5 = ".gn-mobile-header-burger {\n margin: 0;\n padding: 0;\n fon
|
|
|
5239
5469
|
styleInject(css_248z$5);
|
|
5240
5470
|
|
|
5241
5471
|
const b$5 = block('mobile-header-burger');
|
|
5242
|
-
const Burger = React__default.memo(({ opened, className, onClick }) => (React__default.createElement("button", { className: b$5({ opened }, className), onClick: onClick, "aria-label": opened ?
|
|
5472
|
+
const Burger = React__default.memo(({ closeTitle, openTitle, opened, className, onClick }) => (React__default.createElement("button", { className: b$5({ opened }, className), onClick: onClick, "aria-label": opened ? closeTitle : openTitle },
|
|
5243
5473
|
React__default.createElement("span", { className: b$5('icon') },
|
|
5244
5474
|
React__default.createElement("span", { className: b$5('icon-dash') })))));
|
|
5245
5475
|
Burger.displayName = 'Burger';
|
|
@@ -5345,11 +5575,28 @@ const BurgerMenu = React__default.memo(({ items = [], renderFooter, modalItem, c
|
|
|
5345
5575
|
});
|
|
5346
5576
|
BurgerMenu.displayName = 'BurgerMenu';
|
|
5347
5577
|
|
|
5578
|
+
var burger_button_close$1 = "Close menu";
|
|
5579
|
+
var burger_button_open$1 = "Open menu";
|
|
5580
|
+
var en = {
|
|
5581
|
+
burger_button_close: burger_button_close$1,
|
|
5582
|
+
burger_button_open: burger_button_open$1
|
|
5583
|
+
};
|
|
5584
|
+
|
|
5585
|
+
var burger_button_close = "Закрыть меню";
|
|
5586
|
+
var burger_button_open = "Открыть меню";
|
|
5587
|
+
var ru = {
|
|
5588
|
+
burger_button_close: burger_button_close,
|
|
5589
|
+
burger_button_open: burger_button_open
|
|
5590
|
+
};
|
|
5591
|
+
|
|
5592
|
+
const COMPONENT = 'MobileHeader';
|
|
5593
|
+
var i18n = registerKeyset({ en, ru }, COMPONENT);
|
|
5594
|
+
|
|
5348
5595
|
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}";
|
|
5349
5596
|
styleInject(css_248z$1);
|
|
5350
5597
|
|
|
5351
5598
|
const b$1 = block('mobile-header');
|
|
5352
|
-
const MobileHeader = React__default.forwardRef(({ logo, burgerMenu, panelItems = [], renderContent, sideItemRenderContent, onClosePanel, onEvent, className, }, ref) => {
|
|
5599
|
+
const MobileHeader = React__default.forwardRef(({ logo, burgerMenu, burgerCloseTitle = i18n('burger_button_close'), burgerOpenTitle = i18n('burger_button_open'), panelItems = [], renderContent, sideItemRenderContent, onClosePanel, onEvent, className, }, ref) => {
|
|
5353
5600
|
const targetRef = useForwardRef(ref);
|
|
5354
5601
|
const [compact] = useState(true);
|
|
5355
5602
|
const [visiblePanel, setVisiblePanel] = useState(null);
|
|
@@ -5439,7 +5686,7 @@ const MobileHeader = React__default.forwardRef(({ logo, burgerMenu, panelItems =
|
|
|
5439
5686
|
}, [targetRef, onBurgerClose, onBurgerOpen]);
|
|
5440
5687
|
return (React__default.createElement("div", { className: b$1({ compact }, className), ref: targetRef },
|
|
5441
5688
|
React__default.createElement("header", { className: b$1('header'), style: { height: size } },
|
|
5442
|
-
React__default.createElement(Burger, { opened: visiblePanel === burgerPanelItem.id, onClick: () => onPanelToggle(BURGER_PANEL_ITEM_ID), className: b$1('burger') }),
|
|
5689
|
+
React__default.createElement(Burger, { opened: visiblePanel === burgerPanelItem.id, onClick: () => onPanelToggle(BURGER_PANEL_ITEM_ID), className: b$1('burger'), closeTitle: burgerCloseTitle, openTitle: burgerOpenTitle }),
|
|
5443
5690
|
React__default.createElement(Logo, Object.assign({}, logo, { compact: compact, onClick: onLogoClick })),
|
|
5444
5691
|
React__default.createElement("div", { className: b$1('side-item') }, sideItemRenderContent === null || sideItemRenderContent === void 0 ? void 0 : sideItemRenderContent({ size }))),
|
|
5445
5692
|
React__default.createElement(Drawer, { className: b$1('panels'), onVeilClick: onCloseDrawer, onEscape: onCloseDrawer, style: { top: size } }, [burgerPanelItem, ...panelItems].map((item) => (React__default.createElement(DrawerItem, Object.assign({}, item, { key: item.id, visible: visiblePanel === item.id, className: b$1('panel-item', item.className) }))))),
|
|
@@ -5466,5 +5713,5 @@ const FooterItem = ({ icon, iconSize = MOBILE_HEADER_ICON_SIZE, className, modal
|
|
|
5466
5713
|
React__default.createElement(Sheet, { id: modalItem.id, title: modalItem.title, visible: modalItem.visible, className: b('modal', modalItem.className), contentClassName: b('modal-content', modalItem.contentClassName), allowHideOnContentScroll: modalItem.modalAllowHideOnContentScroll, onClose: modalItem.onClose }, (_a = modalItem.renderContent) === null || _a === void 0 ? void 0 : _a.call(modalItem))));
|
|
5467
5714
|
};
|
|
5468
5715
|
|
|
5469
|
-
export { PublicActionBar as ActionBar, AsideHeader, AsideHeaderContextProvider,
|
|
5716
|
+
export { PublicActionBar as ActionBar, AsideHeader, AsideHeaderContextProvider, Drawer, DrawerItem, FooterItem$1 as FooterItem, HotkeysPanel, Lang, MobileHeader, FooterItem as MobileHeaderFooterItem, Settings, Title, configure, useAsideHeaderContext };
|
|
5470
5717
|
//# sourceMappingURL=index.js.map
|