@gravity-ui/navigation 0.0.7 → 0.2.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/CHANGELOG.md +24 -0
- package/build/cjs/components/ActionBar/ActionBar.d.ts +28 -0
- package/build/cjs/components/ActionBar/Group/ActionBarGroup.d.ts +10 -0
- package/build/cjs/components/ActionBar/Item/ActionBarItem.d.ts +11 -0
- package/build/cjs/components/ActionBar/Section/ActionBarSection.d.ts +9 -0
- package/build/cjs/components/ActionBar/Separator/ActionBarSeparator.d.ts +5 -0
- package/build/cjs/components/ActionBar/__stories__/ActionBar.stories.d.ts +44 -0
- package/build/cjs/components/ActionBar/__stories__/ActionBarShowcase.d.ts +2 -0
- package/build/cjs/components/ActionBar/index.d.ts +5 -0
- package/build/cjs/components/ActionBar/types.d.ts +3 -0
- package/build/cjs/{types/components → components}/AsideHeader/AsideHeader.d.ts +2 -7
- package/build/cjs/{types/components → components}/AsideHeader/Content.d.ts +0 -0
- package/build/cjs/{types/components → components}/AsideHeader/__stories__/AsideHeader.stories.d.ts +0 -0
- package/build/cjs/{types/components → components}/AsideHeader/__stories__/AsideHeaderShowcase.d.ts +0 -0
- package/build/cjs/components/AsideHeader/__stories__/getAsideHeaderWrapper.d.ts +3 -0
- package/build/cjs/{types/components → components}/AsideHeader/__stories__/moc.d.ts +0 -0
- package/build/cjs/{types/components → components}/CompositeBar/CompositeBar.d.ts +3 -2
- package/build/{esm/types → cjs}/components/CompositeBar/Item/Item.d.ts +1 -0
- package/build/cjs/{types/components → components}/CompositeBar/__stories__/CompositeBar.stories.d.ts +0 -0
- package/build/cjs/{types/components → components}/CompositeBar/__stories__/moc.d.ts +0 -0
- package/build/cjs/{types/components → components}/CompositeBar/constants.d.ts +0 -0
- package/build/cjs/components/CompositeBar/utils.d.ts +6 -0
- package/build/cjs/{types/components → components}/Drawer/Drawer.d.ts +0 -0
- package/build/cjs/{types/components → components}/Drawer/__stories__/Drawer.stories.d.ts +0 -0
- package/build/cjs/{types/components → components}/Drawer/__stories__/DrawerShowcase.d.ts +0 -0
- package/build/cjs/{types/components → components}/FooterItem/FooterItem.d.ts +1 -1
- package/build/cjs/{types/components → components}/FooterItem/__stories__/FooterItem.stories.d.ts +0 -0
- package/build/cjs/{types/components → components}/ItemTooltip/ItemTooltip.d.ts +0 -0
- package/build/cjs/{types/components → components}/Logo/Logo.d.ts +0 -0
- package/build/cjs/components/Settings/Settings.d.ts +49 -0
- package/build/cjs/components/Settings/SettingsMenu/SettingsMenu.d.ts +27 -0
- package/build/cjs/components/Settings/SettingsSearch/SettingsSearch.d.ts +10 -0
- package/build/{esm/types/components/AsideHeader/__stories__/AsideHeader.stories.d.ts → cjs/components/Settings/__stories__/Settings.stories.d.ts} +0 -0
- package/build/cjs/components/Settings/__stories__/SettingsDemo.d.ts +13 -0
- package/build/cjs/components/Settings/collect-settings.d.ts +40 -0
- package/build/cjs/components/Settings/helpers.d.ts +6 -0
- package/build/cjs/components/Settings/index.d.ts +1 -0
- package/build/cjs/{types/components → components}/constants.d.ts +0 -0
- package/build/cjs/{types/components → components}/index.d.ts +2 -0
- package/build/cjs/{types/components → components}/types.d.ts +1 -1
- package/build/cjs/{types/components → components}/utils/cn.d.ts +0 -0
- package/build/cjs/{types/index.d.ts → index.d.ts} +0 -0
- package/build/cjs/index.js +1187 -191
- package/build/cjs/index.js.map +1 -1
- package/build/esm/components/ActionBar/ActionBar.d.ts +28 -0
- package/build/esm/components/ActionBar/Group/ActionBarGroup.d.ts +10 -0
- package/build/esm/components/ActionBar/Item/ActionBarItem.d.ts +11 -0
- package/build/esm/components/ActionBar/Section/ActionBarSection.d.ts +9 -0
- package/build/esm/components/ActionBar/Separator/ActionBarSeparator.d.ts +5 -0
- package/build/esm/components/ActionBar/__stories__/ActionBar.stories.d.ts +44 -0
- package/build/esm/components/ActionBar/__stories__/ActionBarShowcase.d.ts +2 -0
- package/build/esm/components/ActionBar/index.d.ts +5 -0
- package/build/esm/components/ActionBar/types.d.ts +3 -0
- package/build/esm/{types/components → components}/AsideHeader/AsideHeader.d.ts +2 -7
- package/build/esm/{types/components → components}/AsideHeader/Content.d.ts +0 -0
- package/build/esm/{types/components/Drawer/__stories__/Drawer.stories.d.ts → components/AsideHeader/__stories__/AsideHeader.stories.d.ts} +0 -0
- package/build/esm/{types/components → components}/AsideHeader/__stories__/AsideHeaderShowcase.d.ts +0 -0
- package/build/esm/components/AsideHeader/__stories__/getAsideHeaderWrapper.d.ts +3 -0
- package/build/esm/{types/components → components}/AsideHeader/__stories__/moc.d.ts +0 -0
- package/build/esm/{types/components → components}/CompositeBar/CompositeBar.d.ts +3 -2
- package/build/{cjs/types → esm}/components/CompositeBar/Item/Item.d.ts +1 -0
- package/build/esm/{types/components → components}/CompositeBar/__stories__/CompositeBar.stories.d.ts +0 -0
- package/build/esm/{types/components → components}/CompositeBar/__stories__/moc.d.ts +0 -0
- package/build/esm/{types/components → components}/CompositeBar/constants.d.ts +0 -0
- package/build/esm/components/CompositeBar/utils.d.ts +6 -0
- package/build/esm/{types/components → components}/Drawer/Drawer.d.ts +0 -0
- package/build/esm/components/Drawer/__stories__/Drawer.stories.d.ts +4 -0
- package/build/esm/{types/components → components}/Drawer/__stories__/DrawerShowcase.d.ts +0 -0
- package/build/esm/{types/components → components}/FooterItem/FooterItem.d.ts +1 -1
- package/build/esm/{types/components → components}/FooterItem/__stories__/FooterItem.stories.d.ts +0 -0
- package/build/esm/{types/components → components}/ItemTooltip/ItemTooltip.d.ts +0 -0
- package/build/esm/{types/components → components}/Logo/Logo.d.ts +0 -0
- package/build/esm/components/Settings/Settings.d.ts +49 -0
- package/build/esm/components/Settings/SettingsMenu/SettingsMenu.d.ts +27 -0
- package/build/esm/components/Settings/SettingsSearch/SettingsSearch.d.ts +10 -0
- package/build/esm/components/Settings/__stories__/Settings.stories.d.ts +4 -0
- package/build/esm/components/Settings/__stories__/SettingsDemo.d.ts +13 -0
- package/build/esm/components/Settings/collect-settings.d.ts +40 -0
- package/build/esm/components/Settings/helpers.d.ts +6 -0
- package/build/esm/components/Settings/index.d.ts +1 -0
- package/build/esm/{types/components → components}/constants.d.ts +0 -0
- package/build/esm/{types/components → components}/index.d.ts +2 -0
- package/build/esm/{types/components → components}/types.d.ts +1 -1
- package/build/esm/{types/components → components}/utils/cn.d.ts +0 -0
- package/build/esm/{types/index.d.ts → index.d.ts} +0 -0
- package/build/esm/index.js +1187 -193
- package/build/esm/index.js.map +1 -1
- package/package.json +1 -1
- package/build/cjs/types/components/CompositeBar/utils.d.ts +0 -4
- package/build/esm/types/components/CompositeBar/utils.d.ts +0 -4
package/build/cjs/index.js
CHANGED
|
@@ -87,6 +87,84 @@ function block(name) {
|
|
|
87
87
|
return _default(`${NAMESPACE}${name}`);
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
+
function styleInject(css, ref) {
|
|
91
|
+
if ( ref === void 0 ) ref = {};
|
|
92
|
+
var insertAt = ref.insertAt;
|
|
93
|
+
|
|
94
|
+
if (!css || typeof document === 'undefined') { return; }
|
|
95
|
+
|
|
96
|
+
var head = document.head || document.getElementsByTagName('head')[0];
|
|
97
|
+
var style = document.createElement('style');
|
|
98
|
+
style.type = 'text/css';
|
|
99
|
+
|
|
100
|
+
if (insertAt === 'top') {
|
|
101
|
+
if (head.firstChild) {
|
|
102
|
+
head.insertBefore(style, head.firstChild);
|
|
103
|
+
} else {
|
|
104
|
+
head.appendChild(style);
|
|
105
|
+
}
|
|
106
|
+
} else {
|
|
107
|
+
head.appendChild(style);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (style.styleSheet) {
|
|
111
|
+
style.styleSheet.cssText = css;
|
|
112
|
+
} else {
|
|
113
|
+
style.appendChild(document.createTextNode(css));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
var css_248z$d = ".ycn-action-bar-group {\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: flex-start;\n margin: 0;\n padding: 0;\n}\n.ycn-action-bar-group_pull_left {\n margin-left: 0;\n margin-right: auto;\n}\n.ycn-action-bar-group_pull_right {\n margin-left: auto;\n margin-right: 0;\n}\n.ycn-action-bar-group_pull_center {\n margin-left: auto;\n margin-right: auto;\n}";
|
|
118
|
+
styleInject(css_248z$d);
|
|
119
|
+
|
|
120
|
+
const b$e = block('action-bar-group');
|
|
121
|
+
const ActionBarGroup = ({ children, className, pull }) => {
|
|
122
|
+
return (React__default["default"].createElement("ul", { className: b$e({ pull }, className), role: "group" }, children));
|
|
123
|
+
};
|
|
124
|
+
ActionBarGroup.displayName = 'ActionBar.Group';
|
|
125
|
+
|
|
126
|
+
var css_248z$c = ".ycn-action-bar-item {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n.ycn-action-bar-item_pull_left {\n margin-left: 0;\n margin-right: auto;\n}\n.ycn-action-bar-item_pull_right {\n margin-left: auto;\n margin-right: 0;\n}\n.ycn-action-bar-item_pull_center {\n margin-left: auto;\n margin-right: auto;\n}\n.ycn-action-bar-item + .ycn-action-bar-item_spacing {\n margin-left: 8px;\n}";
|
|
127
|
+
styleInject(css_248z$c);
|
|
128
|
+
|
|
129
|
+
const b$d = block('action-bar-item');
|
|
130
|
+
const ActionBarItem = ({ children, className, pull, spacing = true }) => {
|
|
131
|
+
return React__default["default"].createElement("li", { className: b$d({ pull, spacing }, className) }, children);
|
|
132
|
+
};
|
|
133
|
+
ActionBarItem.displayName = 'ActionBar.Item';
|
|
134
|
+
|
|
135
|
+
var css_248z$b = ".ycn-action-bar-section {\n display: flex;\n flex-flow: row nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.ycn-action-bar-section + .ycn-action-bar-section {\n border-left: solid 1px var(--yc-color-line-generic);\n}\n.ycn-action-bar-section_type_primary {\n flex: 1 1 auto;\n padding-left: 20px;\n padding-right: 20px;\n}\n.ycn-action-bar-section_type_secondary {\n padding-left: 6px;\n padding-right: 6px;\n}";
|
|
136
|
+
styleInject(css_248z$b);
|
|
137
|
+
|
|
138
|
+
const b$c = block('action-bar-section');
|
|
139
|
+
const ActionBarSection = ({ children, type = 'primary' }) => {
|
|
140
|
+
return React__default["default"].createElement("div", { className: b$c({ type }) }, children);
|
|
141
|
+
};
|
|
142
|
+
ActionBarSection.displayName = 'ActionBar.Section';
|
|
143
|
+
|
|
144
|
+
var css_248z$a = ".ycn-action-bar-separator {\n list-style: none;\n margin: 0;\n padding: 0;\n margin-left: 6px;\n margin-right: 6px;\n border-right: solid 1px var(--yc-color-line-generic);\n height: 40px;\n}";
|
|
145
|
+
styleInject(css_248z$a);
|
|
146
|
+
|
|
147
|
+
const b$b = block('action-bar-separator');
|
|
148
|
+
const ActionBarSeparator = () => {
|
|
149
|
+
return React__default["default"].createElement("li", { role: "separator", className: b$b() });
|
|
150
|
+
};
|
|
151
|
+
ActionBarSeparator.displayName = 'ActionBar.Separator';
|
|
152
|
+
|
|
153
|
+
var css_248z$9 = ".ycn-action-bar {\n box-sizing: border-box;\n height: 40px;\n border-bottom: solid 1px var(--yc-color-line-generic);\n display: flex;\n flex-flow: row nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}";
|
|
154
|
+
styleInject(css_248z$9);
|
|
155
|
+
|
|
156
|
+
const b$a = block('action-bar');
|
|
157
|
+
const ActionBar = ({ children, className, 'aria-label': ariaLabel }) => {
|
|
158
|
+
return (React__default["default"].createElement("section", { className: b$a(null, className), "aria-label": ariaLabel }, children));
|
|
159
|
+
};
|
|
160
|
+
ActionBar.displayName = 'ActionBar';
|
|
161
|
+
const PublicActionBar = Object.assign(ActionBar, {
|
|
162
|
+
Section: ActionBarSection,
|
|
163
|
+
Group: ActionBarGroup,
|
|
164
|
+
Item: ActionBarItem,
|
|
165
|
+
Separator: ActionBarSeparator,
|
|
166
|
+
});
|
|
167
|
+
|
|
90
168
|
exports.Dict = void 0;
|
|
91
169
|
(function (Dict) {
|
|
92
170
|
Dict["ExpandButton"] = "button_expand";
|
|
@@ -97,7 +175,7 @@ exports.Dict = void 0;
|
|
|
97
175
|
const ASIDE_HEADER_FOOTER_ICON_SIZE = 20;
|
|
98
176
|
const ASIDE_HEADER_COMPACT_WIDTH = 56;
|
|
99
177
|
const ASIDE_HEADER_EXPANDED_WIDTH = 236;
|
|
100
|
-
const defaultDict = {
|
|
178
|
+
const defaultDict$1 = {
|
|
101
179
|
[exports.Dict.CollapseButton]: 'Collapse',
|
|
102
180
|
[exports.Dict.ExpandButton]: 'Expand',
|
|
103
181
|
[exports.Dict.MoreButton]: 'More',
|
|
@@ -107,14 +185,12 @@ function _extends$4() {
|
|
|
107
185
|
_extends$4 = Object.assign ? Object.assign.bind() : function (target) {
|
|
108
186
|
for (var i = 1; i < arguments.length; i++) {
|
|
109
187
|
var source = arguments[i];
|
|
110
|
-
|
|
111
188
|
for (var key in source) {
|
|
112
189
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
113
190
|
target[key] = source[key];
|
|
114
191
|
}
|
|
115
192
|
}
|
|
116
193
|
}
|
|
117
|
-
|
|
118
194
|
return target;
|
|
119
195
|
};
|
|
120
196
|
return _extends$4.apply(this, arguments);
|
|
@@ -125,13 +201,11 @@ function _objectWithoutPropertiesLoose(source, excluded) {
|
|
|
125
201
|
var target = {};
|
|
126
202
|
var sourceKeys = Object.keys(source);
|
|
127
203
|
var key, i;
|
|
128
|
-
|
|
129
204
|
for (i = 0; i < sourceKeys.length; i++) {
|
|
130
205
|
key = sourceKeys[i];
|
|
131
206
|
if (excluded.indexOf(key) >= 0) continue;
|
|
132
207
|
target[key] = source[key];
|
|
133
208
|
}
|
|
134
|
-
|
|
135
209
|
return target;
|
|
136
210
|
}
|
|
137
211
|
|
|
@@ -1398,6 +1472,10 @@ var classNamesShape = process.env.NODE_ENV !== 'production' ? propTypes.exports.
|
|
|
1398
1472
|
|
|
1399
1473
|
var TransitionGroupContext = React__default["default"].createContext(null);
|
|
1400
1474
|
|
|
1475
|
+
var forceReflow = function forceReflow(node) {
|
|
1476
|
+
return node.scrollTop;
|
|
1477
|
+
};
|
|
1478
|
+
|
|
1401
1479
|
var UNMOUNTED = 'unmounted';
|
|
1402
1480
|
var EXITED = 'exited';
|
|
1403
1481
|
var ENTERING = 'entering';
|
|
@@ -1617,6 +1695,14 @@ var Transition = /*#__PURE__*/function (_React$Component) {
|
|
|
1617
1695
|
this.cancelNextCallback();
|
|
1618
1696
|
|
|
1619
1697
|
if (nextStatus === ENTERING) {
|
|
1698
|
+
if (this.props.unmountOnExit || this.props.mountOnEnter) {
|
|
1699
|
+
var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM__default["default"].findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749
|
|
1700
|
+
// With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.
|
|
1701
|
+
// To make the animation happen, we have to separate each rendering and avoid being processed as batched.
|
|
1702
|
+
|
|
1703
|
+
if (node) forceReflow(node);
|
|
1704
|
+
}
|
|
1705
|
+
|
|
1620
1706
|
this.performEnter(mounting);
|
|
1621
1707
|
} else {
|
|
1622
1708
|
this.performExit();
|
|
@@ -1809,7 +1895,10 @@ Transition.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
1809
1895
|
* [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).
|
|
1810
1896
|
*/
|
|
1811
1897
|
nodeRef: propTypes.exports.shape({
|
|
1812
|
-
current: typeof Element === 'undefined' ? propTypes.exports.any :
|
|
1898
|
+
current: typeof Element === 'undefined' ? propTypes.exports.any : function (propValue, key, componentName, location, propFullName, secret) {
|
|
1899
|
+
var value = propValue[key];
|
|
1900
|
+
return propTypes.exports.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);
|
|
1901
|
+
}
|
|
1813
1902
|
}),
|
|
1814
1903
|
|
|
1815
1904
|
/**
|
|
@@ -2217,13 +2306,12 @@ var CSSTransition = /*#__PURE__*/function (_React$Component) {
|
|
|
2217
2306
|
|
|
2218
2307
|
if (type === 'appear' && phase === 'done' && doneClassName) {
|
|
2219
2308
|
className += " " + doneClassName;
|
|
2220
|
-
} // This is
|
|
2309
|
+
} // This is to force a repaint,
|
|
2221
2310
|
// which is necessary in order to transition styles when adding a class name.
|
|
2222
2311
|
|
|
2223
2312
|
|
|
2224
2313
|
if (phase === 'active') {
|
|
2225
|
-
|
|
2226
|
-
node && node.scrollTop;
|
|
2314
|
+
if (node) forceReflow(node);
|
|
2227
2315
|
}
|
|
2228
2316
|
|
|
2229
2317
|
if (className) {
|
|
@@ -2409,7 +2497,6 @@ function _assertThisInitialized(self) {
|
|
|
2409
2497
|
if (self === void 0) {
|
|
2410
2498
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
2411
2499
|
}
|
|
2412
|
-
|
|
2413
2500
|
return self;
|
|
2414
2501
|
}
|
|
2415
2502
|
|
|
@@ -3113,42 +3200,15 @@ SwitchTransition.defaultProps = {
|
|
|
3113
3200
|
mode: modes.out
|
|
3114
3201
|
};
|
|
3115
3202
|
|
|
3116
|
-
|
|
3117
|
-
|
|
3118
|
-
var insertAt = ref.insertAt;
|
|
3119
|
-
|
|
3120
|
-
if (!css || typeof document === 'undefined') { return; }
|
|
3121
|
-
|
|
3122
|
-
var head = document.head || document.getElementsByTagName('head')[0];
|
|
3123
|
-
var style = document.createElement('style');
|
|
3124
|
-
style.type = 'text/css';
|
|
3125
|
-
|
|
3126
|
-
if (insertAt === 'top') {
|
|
3127
|
-
if (head.firstChild) {
|
|
3128
|
-
head.insertBefore(style, head.firstChild);
|
|
3129
|
-
} else {
|
|
3130
|
-
head.appendChild(style);
|
|
3131
|
-
}
|
|
3132
|
-
} else {
|
|
3133
|
-
head.appendChild(style);
|
|
3134
|
-
}
|
|
3135
|
-
|
|
3136
|
-
if (style.styleSheet) {
|
|
3137
|
-
style.styleSheet.cssText = css;
|
|
3138
|
-
} else {
|
|
3139
|
-
style.appendChild(document.createTextNode(css));
|
|
3140
|
-
}
|
|
3141
|
-
}
|
|
3142
|
-
|
|
3143
|
-
var css_248z$6 = ".ycn-drawer__item {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n height: 100%;\n will-change: transform;\n background-color: var(--yc-color-base-background);\n}\n.ycn-drawer__item-transition-enter {\n transform: translate(-100%, 0);\n}\n.ycn-drawer__item-transition-enter-active {\n transform: translate(0, 0);\n transition: transform 300ms;\n}\n.ycn-drawer__item-transition-enter-done {\n filter: blur(0px);\n transform: translateZ(0);\n}\n.ycn-drawer__item-transition-exit {\n transform: translate(0, 0);\n}\n.ycn-drawer__item-transition-exit-active {\n transform: translate(-100%, 0);\n transition: transform 300ms;\n}\n.ycn-drawer__item-transition-exit-done {\n visibility: hidden;\n}\n.ycn-drawer__veil {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n background-color: var(--yc-color-sfx-veil);\n}\n.ycn-drawer__veil-transition-enter {\n opacity: 0;\n}\n.ycn-drawer__veil-transition-enter-active {\n opacity: 1;\n transition: opacity 300ms;\n}\n.ycn-drawer__veil-transition-exit {\n opacity: 1;\n}\n.ycn-drawer__veil-transition-exit-active {\n opacity: 0;\n transition: opacity 300ms;\n}\n.ycn-drawer__veil-transition-exit-done {\n visibility: hidden;\n}";
|
|
3144
|
-
styleInject(css_248z$6);
|
|
3203
|
+
var css_248z$8 = ".ycn-drawer__item {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n height: 100%;\n will-change: transform;\n background-color: var(--yc-color-base-background);\n}\n.ycn-drawer__item-transition-enter {\n transform: translate(-100%, 0);\n}\n.ycn-drawer__item-transition-enter-active {\n transform: translate(0, 0);\n transition: transform 300ms;\n}\n.ycn-drawer__item-transition-enter-done {\n filter: blur(0px);\n transform: translateZ(0);\n}\n.ycn-drawer__item-transition-exit {\n transform: translate(0, 0);\n}\n.ycn-drawer__item-transition-exit-active {\n transform: translate(-100%, 0);\n transition: transform 300ms;\n}\n.ycn-drawer__item-transition-exit-done {\n visibility: hidden;\n}\n.ycn-drawer__veil {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n background-color: var(--yc-color-sfx-veil);\n}\n.ycn-drawer__veil-transition-enter {\n opacity: 0;\n}\n.ycn-drawer__veil-transition-enter-active {\n opacity: 1;\n transition: opacity 300ms;\n}\n.ycn-drawer__veil-transition-exit {\n opacity: 1;\n}\n.ycn-drawer__veil-transition-exit-active {\n opacity: 0;\n transition: opacity 300ms;\n}\n.ycn-drawer__veil-transition-exit-done {\n visibility: hidden;\n}";
|
|
3204
|
+
styleInject(css_248z$8);
|
|
3145
3205
|
|
|
3146
|
-
const b$
|
|
3206
|
+
const b$9 = block('drawer');
|
|
3147
3207
|
const TIMEOUT = 300;
|
|
3148
3208
|
const DrawerItem = ({ visible, content, className }) => {
|
|
3149
3209
|
const itemRef = React__default["default"].useRef(null);
|
|
3150
|
-
return (React__default["default"].createElement(CSSTransition, { in: visible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$
|
|
3151
|
-
React__default["default"].createElement("div", { ref: itemRef, className: b$
|
|
3210
|
+
return (React__default["default"].createElement(CSSTransition, { in: visible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$9('item-transition'), nodeRef: itemRef },
|
|
3211
|
+
React__default["default"].createElement("div", { ref: itemRef, className: b$9('item', className) }, content)));
|
|
3152
3212
|
};
|
|
3153
3213
|
const Drawer = ({ className, children, style, onVeilClick, onEscape, preventScrollBody = true, }) => {
|
|
3154
3214
|
let someItemVisible = false;
|
|
@@ -3206,9 +3266,9 @@ const Drawer = ({ className, children, style, onVeilClick, onEscape, preventScro
|
|
|
3206
3266
|
const veilRef = React__default["default"].useRef(null);
|
|
3207
3267
|
return (React__default["default"].createElement(Transition, { in: someItemVisible, timeout: { enter: 0, exit: TIMEOUT }, mountOnEnter: true, unmountOnExit: true, nodeRef: containerRef }, (state) => {
|
|
3208
3268
|
const childrenVisible = someItemVisible && state === 'entered';
|
|
3209
|
-
return (React__default["default"].createElement("div", { ref: containerRef, className: b$
|
|
3210
|
-
React__default["default"].createElement(CSSTransition, { in: childrenVisible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$
|
|
3211
|
-
React__default["default"].createElement("div", { ref: veilRef, className: b$
|
|
3269
|
+
return (React__default["default"].createElement("div", { ref: containerRef, className: b$9(null, className), style: style },
|
|
3270
|
+
React__default["default"].createElement(CSSTransition, { in: childrenVisible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$9('veil-transition'), nodeRef: veilRef },
|
|
3271
|
+
React__default["default"].createElement("div", { ref: veilRef, className: b$9('veil'), onClick: onVeilClick })),
|
|
3212
3272
|
React__default["default"].Children.map(children, (child) => {
|
|
3213
3273
|
const childElem = child;
|
|
3214
3274
|
if (childElem.type === DrawerItem) {
|
|
@@ -3220,10 +3280,10 @@ const Drawer = ({ className, children, style, onVeilClick, onEscape, preventScro
|
|
|
3220
3280
|
}));
|
|
3221
3281
|
};
|
|
3222
3282
|
|
|
3223
|
-
var css_248z$
|
|
3224
|
-
styleInject(css_248z$
|
|
3283
|
+
var css_248z$7 = ".ycn-logo {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n height: 40px;\n}\n.ycn-logo__logo-btn-place {\n flex-shrink: 0;\n width: var(--aside-header-min-width);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.ycn-logo__btn-logo.yc-button_view_flat.yc-button_size_l {\n --yc-button-height: 38px;\n}\n.ycn-logo__logo {\n font-size: var(--yc-text-body-2-font-size);\n line-height: var(--yc-text-body-2-line-height);\n font-weight: var(--yc-text-body-font-weight);\n vertical-align: middle;\n}\n.ycn-logo__logo-link, .ycn-logo__logo-link:hover, .ycn-logo__logo-link:active, .ycn-logo__logo-link:visited, .ycn-logo__logo-link:focus {\n text-decoration: none;\n outline: none;\n color: inherit;\n}\n.yc-root .ycn-logo__btn-logo.button2_theme_flat.button2_hovered_yes::before {\n background-color: transparent;\n}";
|
|
3284
|
+
styleInject(css_248z$7);
|
|
3225
3285
|
|
|
3226
|
-
const b$
|
|
3286
|
+
const b$8 = block('logo');
|
|
3227
3287
|
const Logo = ({ text, compact, icon, iconSrc, iconClassName, iconSize = 24, textSize = 15, href = '/', wrapper, onClick, }) => {
|
|
3228
3288
|
const hasClickHandler = typeof onClick === 'function';
|
|
3229
3289
|
const hasWrapper = typeof wrapper === 'function';
|
|
@@ -3241,18 +3301,18 @@ const Logo = ({ text, compact, icon, iconSrc, iconClassName, iconSize = 24, text
|
|
|
3241
3301
|
else if (icon) {
|
|
3242
3302
|
buttonIcon = React__default["default"].createElement(uikit.Icon, { data: icon, size: iconSize, className: iconClassName });
|
|
3243
3303
|
}
|
|
3244
|
-
const button = (React__default["default"].createElement(uikit.Button, Object.assign({ view: "flat", size: "l", className: b$
|
|
3304
|
+
const button = (React__default["default"].createElement(uikit.Button, Object.assign({ view: "flat", size: "l", className: b$8('btn-logo'), component: hasWrapper ? 'span' : undefined, onClick: onClick }, linkProps), buttonIcon));
|
|
3245
3305
|
let logo;
|
|
3246
3306
|
if (typeof text === 'function') {
|
|
3247
3307
|
logo = text();
|
|
3248
3308
|
}
|
|
3249
3309
|
else {
|
|
3250
|
-
logo = (React__default["default"].createElement("div", { className: b$
|
|
3310
|
+
logo = (React__default["default"].createElement("div", { className: b$8('logo'), style: { fontSize: textSize } }, text));
|
|
3251
3311
|
}
|
|
3252
|
-
return (React__default["default"].createElement("div", { className: b$
|
|
3253
|
-
React__default["default"].createElement("div", { className: b$
|
|
3312
|
+
return (React__default["default"].createElement("div", { className: b$8() },
|
|
3313
|
+
React__default["default"].createElement("div", { className: b$8('logo-btn-place') }, hasWrapper ? wrapper(button, compact) : button),
|
|
3254
3314
|
!compact &&
|
|
3255
|
-
(hasWrapper ? (wrapper(logo, compact)) : (React__default["default"].createElement("a", Object.assign({}, linkProps, { className: b$
|
|
3315
|
+
(hasWrapper ? (wrapper(logo, compact)) : (React__default["default"].createElement("a", Object.assign({}, linkProps, { className: b$8('logo-link'), onClick: onClick }), logo)))));
|
|
3256
3316
|
};
|
|
3257
3317
|
|
|
3258
3318
|
var classCallCheck = function (instance, Constructor) {
|
|
@@ -3749,6 +3809,8 @@ function getItemHeight(item) {
|
|
|
3749
3809
|
switch (item.type) {
|
|
3750
3810
|
case 'action':
|
|
3751
3811
|
return 50;
|
|
3812
|
+
case 'divider':
|
|
3813
|
+
return 15;
|
|
3752
3814
|
default:
|
|
3753
3815
|
return ITEM_HEIGHT;
|
|
3754
3816
|
}
|
|
@@ -3756,15 +3818,36 @@ function getItemHeight(item) {
|
|
|
3756
3818
|
function getItemsHeight(items) {
|
|
3757
3819
|
return items.reduce((sum, item) => sum + getItemHeight(item), 0);
|
|
3758
3820
|
}
|
|
3759
|
-
|
|
3821
|
+
function getSelectedItemIndex(items) {
|
|
3760
3822
|
const index = items.findIndex(({ current }) => Boolean(current));
|
|
3761
3823
|
return index === -1 ? undefined : index;
|
|
3762
|
-
}
|
|
3824
|
+
}
|
|
3825
|
+
function getPinnedItems(items) {
|
|
3826
|
+
const pinnedItems = [];
|
|
3827
|
+
for (const item of items) {
|
|
3828
|
+
if (item.pinned) {
|
|
3829
|
+
pinnedItems.push(item);
|
|
3830
|
+
}
|
|
3831
|
+
else if (item.type === 'divider') {
|
|
3832
|
+
if (pinnedItems.length > 0 && pinnedItems[pinnedItems.length - 1].type !== 'divider') {
|
|
3833
|
+
pinnedItems.push(item);
|
|
3834
|
+
}
|
|
3835
|
+
}
|
|
3836
|
+
}
|
|
3837
|
+
return pinnedItems;
|
|
3838
|
+
}
|
|
3839
|
+
function getItemsMinHeight(items) {
|
|
3840
|
+
const pinnedItems = getPinnedItems(items);
|
|
3841
|
+
const afterMoreButtonItems = items.filter((item) => item.afterMoreButton);
|
|
3842
|
+
return (getItemsHeight(pinnedItems) +
|
|
3843
|
+
getItemsHeight(afterMoreButtonItems) +
|
|
3844
|
+
(pinnedItems.length === items.length ? 0 : ITEM_HEIGHT));
|
|
3845
|
+
}
|
|
3763
3846
|
|
|
3764
|
-
var css_248z$
|
|
3765
|
-
styleInject(css_248z$
|
|
3847
|
+
var css_248z$6 = ".ycn-item-tooltip.yc-popup {\n animation-name: none;\n box-shadow: none;\n border: none;\n}\n.ycn-item-tooltip__text {\n padding: 6px 12px;\n background-color: var(--yc-color-base-float-heavy);\n color: var(--yc-color-text-light-primary);\n border-radius: 4px;\n}";
|
|
3848
|
+
styleInject(css_248z$6);
|
|
3766
3849
|
|
|
3767
|
-
const b$
|
|
3850
|
+
const b$7 = block('item-tooltip');
|
|
3768
3851
|
const popupPlacement = ['right'];
|
|
3769
3852
|
const ItemTooltip = ({ anchor, text }) => {
|
|
3770
3853
|
const anchorRef = React__default["default"].useRef(anchor);
|
|
@@ -3774,26 +3857,29 @@ const ItemTooltip = ({ anchor, text }) => {
|
|
|
3774
3857
|
if (!anchor) {
|
|
3775
3858
|
return null;
|
|
3776
3859
|
}
|
|
3777
|
-
return (React__default["default"].createElement(uikit.Popup, { className: b$
|
|
3778
|
-
React__default["default"].createElement("div", { className: b$
|
|
3860
|
+
return (React__default["default"].createElement(uikit.Popup, { className: b$7(), open: true, anchorRef: anchorRef, placement: popupPlacement, disableEscapeKeyDown: true, disableOutsideClick: true, disableLayer: true },
|
|
3861
|
+
React__default["default"].createElement("div", { className: b$7('text') }, text)));
|
|
3779
3862
|
};
|
|
3780
3863
|
|
|
3781
|
-
var css_248z$
|
|
3782
|
-
styleInject(css_248z$
|
|
3864
|
+
var css_248z$5 = ".ycn-composite-bar-item {\n --composite-bar-item-action-size: 36px;\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n cursor: pointer;\n}\n.ycn-composite-bar-item__icon {\n color: var(--yc-color-text-misc);\n}\n.ycn-composite-bar-item__icon-place {\n flex-shrink: 0;\n width: var(--aside-header-min-width);\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n}\n.ycn-composite-bar-item__title {\n display: flex;\n overflow: hidden;\n}\n.ycn-composite-bar-item__title-text {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.ycn-composite-bar-item__title-adornment {\n margin: 0 10px;\n}\n.ycn-composite-bar-item__collapse-item {\n display: flex;\n padding: 0 16px;\n align-items: center;\n width: 100%;\n height: 100%;\n cursor: pointer;\n}\n.ycn-composite-bar-item__collapse-item .ycn-composite-bar-item__title-adornment {\n margin-right: 0;\n}\n.ycn-composite-bar-item__menu-divider {\n margin: 0 8px;\n width: 100%;\n border-top: 1px solid var(--yc-color-line-generic);\n cursor: default;\n}\n.ycn-composite-bar-item__collapse-items-popup-content {\n padding: 4px 0;\n}\n.ycn-composite-bar-item__link {\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n}\n.ycn-composite-bar-item__link, .ycn-composite-bar-item__link:hover, .ycn-composite-bar-item__link:active, .ycn-composite-bar-item__link:visited, .ycn-composite-bar-item__link:focus {\n text-decoration: none;\n outline: none;\n color: inherit;\n}\n.ycn-composite-bar-item__btn-icon {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.ycn-composite-bar-item_type_action {\n justify-content: center;\n height: var(--composite-bar-item-action-size);\n margin: 0 10px 8px;\n background: var(--yc-color-base-float);\n box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.03), 0px 5px 6px rgba(0, 0, 0, 0.12);\n border-radius: var(--composite-bar-item-action-size);\n transition: transform 0.1s ease-out, background-color 0.15s linear;\n}\n.ycn-composite-bar-item_type_action:focus {\n box-shadow: 0 0 0 2px var(--yc-color-line-misc);\n}\n.ycn-composite-bar-item_type_action:focus:not(:focus-visible) {\n box-shadow: none;\n}\n.ycn-composite-bar-item_type_action:hover {\n background-color: var(--yc-color-base-float-hover);\n}\n.ycn-composite-bar-item_type_action:active {\n box-shadow: 0 1px 2px var(--yc-color-sfx-shadow);\n transition: none;\n transform: scale(0.96);\n}\n.ycn-composite-bar-item_type_action .ycn-composite-bar-item__icon-place {\n width: var(--composite-bar-item-action-size);\n}\n.ycn-composite-bar-item_type_action .ycn-composite-bar-item__title {\n margin-right: 16px;\n}\n.ycn-composite-bar-item:not(.ycn-composite-bar-item_compact).ycn-composite-bar-item_current.ycn-composite-bar-item_type_regular {\n background-color: var(--yc-color-base-selection);\n}\n.ycn-composite-bar-item:not(.ycn-composite-bar-item_compact):not(.ycn-composite-bar-item_current):hover.ycn-composite-bar-item_type_regular {\n background-color: var(--yc-color-base-simple-hover);\n}\n.ycn-composite-bar-item_compact.ycn-composite-bar-item_type_action {\n width: var(--composite-bar-item-action-size);\n}\n.ycn-composite-bar-item_compact.ycn-composite-bar-item_type_action .ycn-composite-bar-item__title {\n margin: 0;\n}\n.ycn-composite-bar-item_compact.ycn-composite-bar-item_current.ycn-composite-bar-item_type_regular .ycn-composite-bar-item__btn-icon {\n position: relative;\n background-color: transparent;\n}\n.ycn-composite-bar-item_compact.ycn-composite-bar-item_current.ycn-composite-bar-item_type_regular .ycn-composite-bar-item__btn-icon::before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: -1;\n width: 38px;\n height: 38px;\n margin-top: -19px;\n margin-left: -19px;\n border-radius: 7px;\n}\n.ycn-composite-bar-item_compact.ycn-composite-bar-item_current.ycn-composite-bar-item_type_regular .ycn-composite-bar-item__btn-icon::before {\n background-color: var(--yc-color-base-selection);\n}\n.ycn-composite-bar-item_compact:not(.ycn-composite-bar-item_current):hover.ycn-composite-bar-item_type_regular .ycn-composite-bar-item__btn-icon {\n position: relative;\n background-color: transparent;\n}\n.ycn-composite-bar-item_compact:not(.ycn-composite-bar-item_current):hover.ycn-composite-bar-item_type_regular .ycn-composite-bar-item__btn-icon::before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: -1;\n width: 38px;\n height: 38px;\n margin-top: -19px;\n margin-left: -19px;\n border-radius: 7px;\n}\n.ycn-composite-bar-item_compact:not(.ycn-composite-bar-item_current):hover.ycn-composite-bar-item_type_regular .ycn-composite-bar-item__btn-icon::before {\n background-color: var(--yc-color-base-simple-hover);\n}";
|
|
3865
|
+
styleInject(css_248z$5);
|
|
3783
3866
|
|
|
3784
|
-
const b$
|
|
3867
|
+
const b$6 = block('composite-bar-item');
|
|
3785
3868
|
function renderItemTitle(item) {
|
|
3786
|
-
let titleNode = React__default["default"].createElement("div", { className: b$
|
|
3869
|
+
let titleNode = React__default["default"].createElement("div", { className: b$6('title-text') }, item.title);
|
|
3787
3870
|
if (item.rightAdornment) {
|
|
3788
3871
|
titleNode = (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
3789
3872
|
titleNode,
|
|
3790
|
-
React__default["default"].createElement("div", { className: b$
|
|
3873
|
+
React__default["default"].createElement("div", { className: b$6('title-adornment') }, item.rightAdornment)));
|
|
3791
3874
|
}
|
|
3792
3875
|
return titleNode;
|
|
3793
3876
|
}
|
|
3794
3877
|
const defaultPopupPlacement = ['right-end'];
|
|
3795
3878
|
const defaultPopupOffset = [-20, 8];
|
|
3796
|
-
const Item = ({ item, compact, className, collapseItems, onMouseLeave, onMouseEnter, enableTooltip = true, popupVisible = false, popupAnchor, popupPlacement = defaultPopupPlacement, popupOffset = defaultPopupOffset, renderPopupContent, onClosePopup, }) => {
|
|
3879
|
+
const Item = ({ item, compact, className, collapseItems, onMouseLeave, onMouseEnter, enableTooltip = true, popupVisible = false, popupAnchor, popupPlacement = defaultPopupPlacement, popupOffset = defaultPopupOffset, renderPopupContent, onClosePopup, onItemClick, }) => {
|
|
3880
|
+
if (item.type === 'divider') {
|
|
3881
|
+
return React__default["default"].createElement("div", { className: b$6('menu-divider') });
|
|
3882
|
+
}
|
|
3797
3883
|
const [tooltipAnchor, setTooltipAnchor] = React__default["default"].useState(null);
|
|
3798
3884
|
const [open, toggleOpen] = React__default["default"].useState(false);
|
|
3799
3885
|
const ref = React__default["default"].useRef(null);
|
|
@@ -3813,14 +3899,19 @@ const Item = ({ item, compact, className, collapseItems, onMouseLeave, onMouseEn
|
|
|
3813
3899
|
}
|
|
3814
3900
|
onClosePopup === null || onClosePopup === void 0 ? void 0 : onClosePopup();
|
|
3815
3901
|
}, [onClosePopup]);
|
|
3816
|
-
const node = (React__default["default"].createElement("div", { className: b$
|
|
3817
|
-
if (typeof item.onItemClick === 'function') {
|
|
3818
|
-
item.onItemClick(item, false);
|
|
3819
|
-
}
|
|
3902
|
+
const node = (React__default["default"].createElement("div", { className: b$6({ type, current, compact }, className), ref: ref, onClick: () => {
|
|
3820
3903
|
if (collapsedItem) {
|
|
3904
|
+
/**
|
|
3905
|
+
* If we call onItemClick for collapsedItem then:
|
|
3906
|
+
* - User get unexpected item in onItemClick callback
|
|
3907
|
+
* - onClosePanel calls twice for each popuped item, as result it will prevent opening of panelItems
|
|
3908
|
+
*/
|
|
3821
3909
|
toggleOpen(!open);
|
|
3822
3910
|
setTooltipAnchor(null);
|
|
3823
3911
|
}
|
|
3912
|
+
else {
|
|
3913
|
+
onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item, false);
|
|
3914
|
+
}
|
|
3824
3915
|
}, onMouseEnter: () => {
|
|
3825
3916
|
if (!compact) {
|
|
3826
3917
|
onMouseEnter === null || onMouseEnter === void 0 ? void 0 : onMouseEnter();
|
|
@@ -3830,7 +3921,7 @@ const Item = ({ item, compact, className, collapseItems, onMouseLeave, onMouseEn
|
|
|
3830
3921
|
onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave();
|
|
3831
3922
|
}
|
|
3832
3923
|
} },
|
|
3833
|
-
React__default["default"].createElement("div", { className: b$
|
|
3924
|
+
React__default["default"].createElement("div", { className: b$6('icon-place') }, compact ? (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
3834
3925
|
React__default["default"].createElement("div", { onMouseEnter: (event) => {
|
|
3835
3926
|
if (!open) {
|
|
3836
3927
|
setTooltipAnchor(event.currentTarget);
|
|
@@ -3839,51 +3930,47 @@ const Item = ({ item, compact, className, collapseItems, onMouseLeave, onMouseEn
|
|
|
3839
3930
|
}, onMouseLeave: () => {
|
|
3840
3931
|
setTooltipAnchor(null);
|
|
3841
3932
|
onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave();
|
|
3842
|
-
}, className: b$
|
|
3843
|
-
enableTooltip && React__default["default"].createElement(ItemTooltip, { anchor: tooltipAnchor, text: tooltipText }))) : (icon && React__default["default"].createElement(uikit.Icon, { data: icon, size: iconSize, className: b$
|
|
3844
|
-
React__default["default"].createElement("div", { className: b$
|
|
3933
|
+
}, className: b$6('btn-icon') }, icon && React__default["default"].createElement(uikit.Icon, { data: icon, size: iconSize, className: b$6('icon') })),
|
|
3934
|
+
enableTooltip && React__default["default"].createElement(ItemTooltip, { anchor: tooltipAnchor, text: tooltipText }))) : (icon && React__default["default"].createElement(uikit.Icon, { data: icon, size: iconSize, className: b$6('icon') }))),
|
|
3935
|
+
React__default["default"].createElement("div", { className: b$6('title'), title: typeof item.title === 'string' ? item.title : undefined }, renderItemTitle(item)),
|
|
3845
3936
|
collapsedItem && (collapseItems === null || collapseItems === void 0 ? void 0 : collapseItems.length) && Boolean(anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) && (React__default["default"].createElement(uikit.Popup, { placement: POPUP_PLACEMENT, open: open, anchorRef: ref, onClose: () => toggleOpen(false) },
|
|
3846
|
-
React__default["default"].createElement("div", { className: b$
|
|
3847
|
-
React__default["default"].createElement(uikit.List, { itemClassName: b$
|
|
3848
|
-
const collapseNode = (React__default["default"].createElement("div", { className: b$
|
|
3849
|
-
|
|
3850
|
-
collapseItem.onItemClick(collapseItem, true);
|
|
3851
|
-
}
|
|
3937
|
+
React__default["default"].createElement("div", { className: b$6('collapse-items-popup-content') },
|
|
3938
|
+
React__default["default"].createElement(uikit.List, { itemClassName: b$6('root-collapse-item'), items: collapseItems, selectedItemIndex: getSelectedItemIndex(collapseItems), itemHeight: POPUP_ITEM_HEIGHT, itemsHeight: collapseItems.length * POPUP_ITEM_HEIGHT, virtualized: false, filterable: false, sortable: false, renderItem: (collapseItem) => {
|
|
3939
|
+
const collapseNode = (React__default["default"].createElement("div", { className: b$6('collapse-item'), onClick: () => {
|
|
3940
|
+
onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(collapseItem, true);
|
|
3852
3941
|
} }, renderItemTitle(collapseItem)));
|
|
3853
3942
|
if (typeof collapseItem.itemWrapper === 'function') {
|
|
3854
3943
|
return collapseItem.itemWrapper(collapseNode, collapseItem, true, compact);
|
|
3855
3944
|
}
|
|
3856
|
-
return collapseItem.link ? (React__default["default"].createElement("a", { href: collapseItem.link, className: b$
|
|
3945
|
+
return collapseItem.link ? (React__default["default"].createElement("a", { href: collapseItem.link, className: b$6('link') }, collapseNode)) : (collapseNode);
|
|
3857
3946
|
} })))),
|
|
3858
|
-
renderPopupContent && Boolean(anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) && (React__default["default"].createElement(uikit.Popup, { className: b$
|
|
3947
|
+
renderPopupContent && Boolean(anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) && (React__default["default"].createElement(uikit.Popup, { className: b$6('popup'), open: popupVisible, placement: popupPlacement, offset: popupOffset, anchorRef: anchorRef, onClose: onClose }, renderPopupContent()))));
|
|
3859
3948
|
if (typeof item.itemWrapper === 'function') {
|
|
3860
3949
|
return item.itemWrapper(node, item, false, compact);
|
|
3861
3950
|
}
|
|
3862
|
-
return item.link ? (React__default["default"].createElement("a", { href: item.link, className: b$
|
|
3951
|
+
return item.link ? (React__default["default"].createElement("a", { href: item.link, className: b$6('link') }, node)) : (node);
|
|
3863
3952
|
};
|
|
3864
3953
|
Item.displayName = 'Item';
|
|
3865
3954
|
|
|
3866
3955
|
var _path$2;
|
|
3867
|
-
|
|
3868
3956
|
function _extends$2() { _extends$2 = 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$2.apply(this, arguments); }
|
|
3869
|
-
|
|
3870
3957
|
var SvgDots = function SvgDots(props) {
|
|
3871
3958
|
return /*#__PURE__*/React__namespace.createElement("svg", _extends$2({
|
|
3872
3959
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3873
3960
|
width: 16,
|
|
3874
|
-
height: 16
|
|
3875
|
-
role: "img"
|
|
3961
|
+
height: 16
|
|
3876
3962
|
}, props), _path$2 || (_path$2 = /*#__PURE__*/React__namespace.createElement("path", {
|
|
3877
3963
|
d: "M14 6.125a1.874 1.874 0 1 1 .001 3.749A1.874 1.874 0 0 1 14 6.125zm-5.906 0a1.874 1.874 0 1 1 0 3.749 1.874 1.874 0 0 1 0-3.749zM2 6.125a1.874 1.874 0 1 1 .001 3.749A1.874 1.874 0 0 1 2 6.125z",
|
|
3878
3964
|
fill: "currentColor",
|
|
3879
3965
|
fillRule: "evenodd"
|
|
3880
3966
|
})));
|
|
3881
3967
|
};
|
|
3968
|
+
var dotsIcon = SvgDots;
|
|
3882
3969
|
|
|
3883
|
-
var css_248z$
|
|
3884
|
-
styleInject(css_248z$
|
|
3970
|
+
var css_248z$4 = ".ycn-composite-bar {\n flex: 1 0 auto;\n width: 100%;\n min-height: 40px;\n}\n.ycn-composite-bar .ycn-composite-bar__root-menu-item[class] {\n background-color: transparent;\n}";
|
|
3971
|
+
styleInject(css_248z$4);
|
|
3885
3972
|
|
|
3886
|
-
const b$
|
|
3973
|
+
const b$5 = block('composite-bar');
|
|
3887
3974
|
class CompositeBar extends React__default["default"].Component {
|
|
3888
3975
|
constructor() {
|
|
3889
3976
|
super(...arguments);
|
|
@@ -3894,15 +3981,14 @@ class CompositeBar extends React__default["default"].Component {
|
|
|
3894
3981
|
}
|
|
3895
3982
|
render() {
|
|
3896
3983
|
const { enableCollapsing, items } = this.props;
|
|
3984
|
+
if (items.length === 0) {
|
|
3985
|
+
return null;
|
|
3986
|
+
}
|
|
3897
3987
|
if (!enableCollapsing) {
|
|
3898
|
-
return React__default["default"].createElement("div", { className: b$
|
|
3988
|
+
return React__default["default"].createElement("div", { className: b$5() }, this.renderMenu());
|
|
3899
3989
|
}
|
|
3900
|
-
const
|
|
3901
|
-
|
|
3902
|
-
const minHeight = getItemsHeight(pinnedItems) +
|
|
3903
|
-
getItemsHeight(afterMoreButtonItems) +
|
|
3904
|
-
(pinnedItems.length === items.length ? 0 : ITEM_HEIGHT);
|
|
3905
|
-
return (React__default["default"].createElement("div", { className: b$2({ autosizer: true }), style: { minHeight } }, items.length !== 0 && (React__default["default"].createElement(AutoSizer, null, ({ width, height }) => {
|
|
3990
|
+
const minHeight = getItemsMinHeight(items);
|
|
3991
|
+
return (React__default["default"].createElement("div", { className: b$5({ autosizer: true }), style: { minHeight } }, items.length !== 0 && (React__default["default"].createElement(AutoSizer, null, ({ width, height }) => {
|
|
3906
3992
|
const style = {
|
|
3907
3993
|
width,
|
|
3908
3994
|
height,
|
|
@@ -3911,68 +3997,75 @@ class CompositeBar extends React__default["default"].Component {
|
|
|
3911
3997
|
}))));
|
|
3912
3998
|
}
|
|
3913
3999
|
renderAutosizeMenu(height) {
|
|
3914
|
-
const {
|
|
3915
|
-
const
|
|
3916
|
-
|
|
3917
|
-
const capacity = Math.max(1, Math.floor((height - extraItemHeight) / ITEM_HEIGHT));
|
|
3918
|
-
let listItems;
|
|
3919
|
-
let collapseItems = [];
|
|
3920
|
-
const regularItems = items.filter((item) => !item.afterMoreButton);
|
|
3921
|
-
if (capacity === 1) {
|
|
3922
|
-
listItems = regularItems.filter((item) => item.pinned);
|
|
3923
|
-
collapseItems = [...regularItems.filter((item) => !item.pinned)];
|
|
3924
|
-
}
|
|
3925
|
-
else if (capacity < items.length) {
|
|
3926
|
-
const extraCount = regularItems.filter((item, idx) => item.pinned && idx >= capacity - 1).length;
|
|
3927
|
-
const pinnedFlag = regularItems.reduceRight((acc, curr, idx) => {
|
|
3928
|
-
const useExtraCount = !curr.pinned && idx < capacity - 1 && acc.extraCount > 0;
|
|
3929
|
-
acc.flags.unshift(curr.pinned || useExtraCount);
|
|
3930
|
-
return {
|
|
3931
|
-
flags: acc.flags,
|
|
3932
|
-
extraCount: acc.extraCount - Number(useExtraCount),
|
|
3933
|
-
};
|
|
3934
|
-
}, { flags: [], extraCount }).flags;
|
|
3935
|
-
listItems = regularItems.filter((item, idx) => item.pinned || (idx < capacity - 1 && !pinnedFlag[idx]));
|
|
3936
|
-
collapseItems = regularItems.filter((item, idx) => !item.pinned && (idx >= capacity - 1 || pinnedFlag[idx]));
|
|
3937
|
-
}
|
|
3938
|
-
else {
|
|
3939
|
-
listItems = [...regularItems];
|
|
3940
|
-
}
|
|
3941
|
-
if ((collapseItems === null || collapseItems === void 0 ? void 0 : collapseItems.length) === 1) {
|
|
3942
|
-
listItems = listItems.concat(collapseItems);
|
|
3943
|
-
}
|
|
3944
|
-
else if ((collapseItems === null || collapseItems === void 0 ? void 0 : collapseItems.length) > 1) {
|
|
3945
|
-
listItems.push(this.getMoreButtonItem(dict));
|
|
3946
|
-
}
|
|
3947
|
-
if (afterMoreButtonItems.length) {
|
|
3948
|
-
listItems = listItems.concat(afterMoreButtonItems);
|
|
3949
|
-
}
|
|
3950
|
-
return (React__default["default"].createElement(uikit.List, { ref: this.listRef, items: listItems, selectedItemIndex: getSelectedItemIndex(listItems), itemHeight: getItemHeight, itemClassName: b$2('root-menu-item'), itemsHeight: getItemsHeight, virtualized: false, filterable: false, sortable: false, onItemClick: onItemClick, renderItem: (item) => (React__default["default"].createElement(Item, { item: item, onMouseLeave: () => {
|
|
4000
|
+
const { compact, onItemClick } = this.props;
|
|
4001
|
+
const { listItems, collapseItems } = this.getAutosizeListItems(height);
|
|
4002
|
+
return (React__default["default"].createElement(uikit.List, { ref: this.listRef, items: listItems, selectedItemIndex: getSelectedItemIndex(listItems), itemHeight: getItemHeight, itemClassName: b$5('root-menu-item'), itemsHeight: getItemsHeight, virtualized: false, filterable: false, sortable: false, renderItem: (item) => (React__default["default"].createElement(Item, { item: item, onMouseLeave: () => {
|
|
3951
4003
|
var _a;
|
|
3952
4004
|
if (compact) {
|
|
3953
4005
|
(_a = this.listRef.current) === null || _a === void 0 ? void 0 : _a.activateItem(undefined);
|
|
3954
4006
|
}
|
|
3955
|
-
}, compact: compact, collapseItems: collapseItems })) }));
|
|
4007
|
+
}, compact: compact, collapseItems: collapseItems, onItemClick: onItemClick })) }));
|
|
3956
4008
|
}
|
|
3957
4009
|
renderMenu() {
|
|
3958
4010
|
const { items, onItemClick, compact } = this.props;
|
|
3959
|
-
return (React__default["default"].createElement(uikit.List, { ref: this.listRef, items: items, selectedItemIndex: getSelectedItemIndex(items), itemHeight: getItemHeight, itemClassName: b$
|
|
4011
|
+
return (React__default["default"].createElement(uikit.List, { ref: this.listRef, items: items, selectedItemIndex: getSelectedItemIndex(items), itemHeight: getItemHeight, itemClassName: b$5('root-menu-item'), itemsHeight: getItemsHeight, virtualized: false, filterable: false, sortable: false, renderItem: (item) => (React__default["default"].createElement(Item, { item: item, onMouseLeave: () => {
|
|
3960
4012
|
var _a;
|
|
3961
4013
|
if (compact) {
|
|
3962
4014
|
(_a = this.listRef.current) === null || _a === void 0 ? void 0 : _a.activateItem(undefined);
|
|
3963
4015
|
}
|
|
3964
|
-
}, compact: compact })) }));
|
|
4016
|
+
}, compact: compact, onItemClick: onItemClick })) }));
|
|
3965
4017
|
}
|
|
3966
|
-
getMoreButtonItem(
|
|
4018
|
+
getMoreButtonItem() {
|
|
3967
4019
|
var _a;
|
|
3968
|
-
const
|
|
4020
|
+
const { dict } = this.props;
|
|
4021
|
+
const title = (_a = dict === null || dict === void 0 ? void 0 : dict[exports.Dict.MoreButton]) !== null && _a !== void 0 ? _a : defaultDict$1[exports.Dict.MoreButton];
|
|
3969
4022
|
return {
|
|
3970
4023
|
id: COLLAPSE_ITEM_ID,
|
|
3971
4024
|
title,
|
|
3972
|
-
icon:
|
|
4025
|
+
icon: dotsIcon,
|
|
3973
4026
|
iconSize: 16,
|
|
3974
4027
|
};
|
|
3975
4028
|
}
|
|
4029
|
+
getAutosizeListItems(height) {
|
|
4030
|
+
const { items } = this.props;
|
|
4031
|
+
const afterMoreButtonItems = items.filter((item) => item.afterMoreButton);
|
|
4032
|
+
const regularItems = items.filter((item) => !item.afterMoreButton);
|
|
4033
|
+
const listItems = [...regularItems, ...afterMoreButtonItems];
|
|
4034
|
+
const allItemsHeight = getItemsHeight(listItems);
|
|
4035
|
+
if (allItemsHeight <= height) {
|
|
4036
|
+
return { listItems, collapseItems: [] };
|
|
4037
|
+
}
|
|
4038
|
+
const collapseItem = this.getMoreButtonItem();
|
|
4039
|
+
const collapseItemHeight = getItemHeight(collapseItem);
|
|
4040
|
+
listItems.splice(regularItems.length, 0, collapseItem);
|
|
4041
|
+
const collapseItems = [];
|
|
4042
|
+
let listHeight = allItemsHeight + collapseItemHeight;
|
|
4043
|
+
let index = listItems.length;
|
|
4044
|
+
while (listHeight > height) {
|
|
4045
|
+
if (index === 0) {
|
|
4046
|
+
break;
|
|
4047
|
+
}
|
|
4048
|
+
index--;
|
|
4049
|
+
const item = listItems[index];
|
|
4050
|
+
if (item.pinned || item.id === COLLAPSE_ITEM_ID || item.afterMoreButton) {
|
|
4051
|
+
continue;
|
|
4052
|
+
}
|
|
4053
|
+
if (item.type === 'divider') {
|
|
4054
|
+
if (index + 1 < listItems.length && listItems[index + 1].type === 'divider') {
|
|
4055
|
+
listHeight -= getItemHeight(item);
|
|
4056
|
+
listItems.splice(index, 1);
|
|
4057
|
+
}
|
|
4058
|
+
continue;
|
|
4059
|
+
}
|
|
4060
|
+
listHeight -= getItemHeight(item);
|
|
4061
|
+
collapseItems.unshift(...listItems.splice(index, 1));
|
|
4062
|
+
}
|
|
4063
|
+
if (listItems[index].type === 'divider' &&
|
|
4064
|
+
(index === 0 || listItems[index - 1].type === 'divider')) {
|
|
4065
|
+
listItems.splice(index, 1);
|
|
4066
|
+
}
|
|
4067
|
+
return { listItems, collapseItems };
|
|
4068
|
+
}
|
|
3976
4069
|
}
|
|
3977
4070
|
|
|
3978
4071
|
/* Used by renderContent AsideHeader prop */
|
|
@@ -3985,70 +4078,64 @@ const Content = ({ size, className, renderContent }) => {
|
|
|
3985
4078
|
};
|
|
3986
4079
|
|
|
3987
4080
|
var _path$1;
|
|
3988
|
-
|
|
3989
4081
|
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); }
|
|
3990
|
-
|
|
3991
4082
|
var SvgControlMenuButton = function SvgControlMenuButton(props) {
|
|
3992
4083
|
return /*#__PURE__*/React__namespace.createElement("svg", _extends$1({
|
|
3993
4084
|
width: 8,
|
|
3994
4085
|
height: 8,
|
|
3995
4086
|
fill: "currentColor",
|
|
3996
|
-
xmlns: "http://www.w3.org/2000/svg"
|
|
3997
|
-
role: "img"
|
|
4087
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
3998
4088
|
}, props), _path$1 || (_path$1 = /*#__PURE__*/React__namespace.createElement("path", {
|
|
3999
4089
|
d: "m.72 7.64 6.39-3.2a.5.5 0 0 0 0-.89L.72.36A.5.5 0 0 0 0 .81v6.38c0 .37.4.61.72.45Z"
|
|
4000
4090
|
})));
|
|
4001
4091
|
};
|
|
4092
|
+
var controlMenuButtonIcon = SvgControlMenuButton;
|
|
4002
4093
|
|
|
4003
4094
|
var _path;
|
|
4004
|
-
|
|
4005
4095
|
function _extends() { _extends = 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.apply(this, arguments); }
|
|
4006
|
-
|
|
4007
4096
|
var SvgDividerCollapsed = function SvgDividerCollapsed(props) {
|
|
4008
4097
|
return /*#__PURE__*/React__namespace.createElement("svg", _extends({
|
|
4009
4098
|
width: 56,
|
|
4010
4099
|
height: 29,
|
|
4011
4100
|
fill: "currentColor",
|
|
4012
|
-
xmlns: "http://www.w3.org/2000/svg"
|
|
4013
|
-
role: "img"
|
|
4101
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
4014
4102
|
}, props), _path || (_path = /*#__PURE__*/React__namespace.createElement("path", {
|
|
4015
4103
|
d: "M56 0v29c-.8-1-7-6.1-17.7-8.4L13 15.7A16 16 0 0 1 0 0Z"
|
|
4016
4104
|
})));
|
|
4017
4105
|
};
|
|
4106
|
+
var headerDividerCollapsedIcon = SvgDividerCollapsed;
|
|
4018
4107
|
|
|
4019
|
-
var css_248z$
|
|
4020
|
-
styleInject(css_248z$
|
|
4108
|
+
var css_248z$3 = ".yc-root {\n --aside-header-background-color: var(--yc-color-base-info);\n --aside-header-collapse-button-divider-line-color: var(\n --aside-header-header-divider-line-color\n );\n}\n\n.yc-root_theme_light {\n --aside-header-divider-line-color: transparent;\n --aside-header-header-divider-line-color: var(--yc-color-line-generic);\n}\n\n.yc-root_theme_dark {\n --aside-header-divider-line-color: var(--yc-color-base-light-simple-hover);\n --aside-header-header-divider-line-color: var(--yc-color-base-light-simple-hover);\n}\n\n.ycn-aside-header {\n --aside-header-min-width: 56px;\n height: 100%;\n width: 100%;\n position: relative;\n background-color: var(--yc-color-base-background);\n}\n.ycn-aside-header__aside {\n position: sticky;\n top: 0;\n left: 0;\n height: 100vh;\n width: inherit;\n display: flex;\n flex-direction: column;\n background-color: var(--yc-color-base-background);\n z-index: 100;\n box-sizing: border-box;\n}\n.ycn-aside-header__aside::after {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n width: 1px;\n height: 100%;\n content: \"\";\n background-color: var(--aside-header-divider-line-color);\n}\n.ycn-aside-header__aside-popup-anchor {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n}\n.ycn-aside-header__aside-content {\n --gradient-height: 334px;\n display: flex;\n flex-direction: column;\n overflow-x: hidden;\n width: inherit;\n height: inherit;\n position: relative;\n z-index: 2;\n user-select: none;\n background: linear-gradient(180deg, var(--aside-header-background-color) calc(var(--gradient-height) * 0.33), transparent calc(var(--gradient-height) * 0.88));\n}\n.ycn-aside-header__aside-content::after {\n position: absolute;\n top: 0;\n right: -100px;\n bottom: 0;\n width: 100px;\n content: \"\";\n box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.1), 0px 0px 24px rgba(0, 0, 0, 0.08);\n}\n.ycn-aside-header__aside-content > .ycn-aside-header-logo {\n margin: 8px 0;\n}\n.ycn-aside-header_compact .ycn-aside-header__aside-content {\n background: transparent;\n}\n.ycn-aside-header__header {\n --aside-header-header-divider-height: 29px;\n position: relative;\n z-index: 1;\n flex: none;\n box-sizing: border-box;\n width: 100%;\n padding-top: 8px;\n padding-bottom: 22px;\n}\n.ycn-aside-header__header .ycn-aside-header__header-divider {\n position: absolute;\n bottom: 0;\n left: 0;\n z-index: -2;\n display: none;\n color: var(--aside-header-background-color);\n}\n.ycn-aside-header__header::before {\n position: absolute;\n top: 0;\n left: 0;\n z-index: -2;\n display: none;\n width: 100%;\n height: calc(100% - var(--aside-header-header-divider-height));\n content: \"\";\n background-color: var(--aside-header-background-color);\n}\n.ycn-aside-header__header::after {\n position: absolute;\n bottom: 12px;\n left: 0;\n z-index: -2;\n width: 100%;\n height: 1px;\n content: \"\";\n background-color: var(--aside-header-header-divider-line-color);\n}\n.ycn-aside-header_compact .ycn-aside-header__header::before {\n display: block;\n}\n.ycn-aside-header_compact .ycn-aside-header__header::after {\n display: none;\n}\n.ycn-aside-header_compact .ycn-aside-header__header .ycn-aside-header__header-divider {\n display: block;\n}\n.ycn-aside-header__footer {\n flex-shrink: 0;\n width: 100%;\n margin: 8px 0;\n display: flex;\n flex-direction: column;\n}\n.ycn-aside-header__panels {\n z-index: 98;\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n overflow: auto;\n}\n.ycn-aside-header__panel {\n height: 100%;\n}\n.ycn-aside-header__pane-container {\n display: flex;\n outline: none;\n overflow: visible;\n user-select: text;\n flex-direction: row;\n}\n.ycn-aside-header__content {\n width: calc(100% - var(--aside-header-size));\n z-index: 95;\n}\n.ycn-aside-header__collapse-button {\n --yc-button-background-color-hover: transparent;\n overflow: hidden;\n box-sizing: border-box;\n flex: none;\n width: 100%;\n height: 20px;\n border-top: 1px solid var(--aside-header-collapse-button-divider-line-color);\n margin-top: auto;\n}\n.ycn-aside-header__collapse-button:not(.ycn-aside-header__collapse-button_compact) .ycn-aside-header__collapse-icon {\n transform: rotate(180deg);\n}\n.ycn-aside-header__collapse-button .ycn-aside-header__collapse-icon {\n color: var(--yc-color-text-secondary);\n}\n.ycn-aside-header__collapse-button:hover .ycn-aside-header__collapse-icon {\n color: var(--yc-color-text-primary);\n}";
|
|
4109
|
+
styleInject(css_248z$3);
|
|
4021
4110
|
|
|
4022
|
-
const b$
|
|
4111
|
+
const b$4 = block('aside-header');
|
|
4023
4112
|
class AsideHeader extends React__default["default"].Component {
|
|
4024
|
-
constructor(
|
|
4025
|
-
super(
|
|
4113
|
+
constructor() {
|
|
4114
|
+
super(...arguments);
|
|
4026
4115
|
this.asideRef = React__default["default"].createRef();
|
|
4027
4116
|
this.renderFirstPane = (size) => {
|
|
4028
|
-
const { dict, menuItems, panelItems } = this.props;
|
|
4029
|
-
|
|
4030
|
-
|
|
4031
|
-
|
|
4032
|
-
React__default["default"].createElement("div", { className: b$
|
|
4033
|
-
React__default["default"].createElement("div", { className: b$1('aside-content') },
|
|
4117
|
+
const { dict, menuItems, panelItems, compact } = this.props;
|
|
4118
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
4119
|
+
React__default["default"].createElement("div", { className: b$4('aside'), style: { width: size } },
|
|
4120
|
+
React__default["default"].createElement("div", { className: b$4('aside-popup-anchor'), ref: this.asideRef }),
|
|
4121
|
+
React__default["default"].createElement("div", { className: b$4('aside-content') },
|
|
4034
4122
|
this.renderHeader(),
|
|
4035
|
-
React__default["default"].createElement(CompositeBar, { items: menuItems, compact: compact, enableCollapsing: true, dict: dict, onItemClick: this.
|
|
4123
|
+
React__default["default"].createElement(CompositeBar, { items: menuItems, compact: compact, enableCollapsing: true, dict: dict, onItemClick: this.onItemClick }),
|
|
4036
4124
|
this.renderFooter(size),
|
|
4037
4125
|
this.renderCollapseButton())),
|
|
4038
4126
|
panelItems && this.renderPanels(size)));
|
|
4039
4127
|
};
|
|
4040
4128
|
this.renderSecondPane = (size) => {
|
|
4041
|
-
return (React__default["default"].createElement(Content, { size: size, renderContent: this.props.renderContent, className: b$
|
|
4129
|
+
return (React__default["default"].createElement(Content, { size: size, renderContent: this.props.renderContent, className: b$4('content') }));
|
|
4042
4130
|
};
|
|
4043
4131
|
this.renderLogo = () => React__default["default"].createElement(Logo, Object.assign({}, this.props.logo, { compact: this.props.compact }));
|
|
4044
|
-
this.renderHeader = () => (React__default["default"].createElement("div", { className: b$
|
|
4132
|
+
this.renderHeader = () => (React__default["default"].createElement("div", { className: b$4('header') },
|
|
4045
4133
|
this.renderLogo(),
|
|
4046
|
-
React__default["default"].createElement(CompositeBar, { items: this.props.subheaderItems, compact: this.props.compact, enableCollapsing: false }),
|
|
4047
|
-
React__default["default"].createElement(uikit.Icon, { data:
|
|
4134
|
+
React__default["default"].createElement(CompositeBar, { items: this.props.subheaderItems, compact: this.props.compact, enableCollapsing: false, onItemClick: this.onItemClick }),
|
|
4135
|
+
React__default["default"].createElement(uikit.Icon, { data: headerDividerCollapsedIcon, className: b$4('header-divider'), width: ASIDE_HEADER_COMPACT_WIDTH, height: "29" })));
|
|
4048
4136
|
this.renderFooter = (size) => {
|
|
4049
|
-
|
|
4050
|
-
|
|
4051
|
-
return (React__default["default"].createElement("div", { className: b$1('footer') }, (_b = (_a = this.props).renderFooter) === null || _b === void 0 ? void 0 : _b.call(_a, {
|
|
4137
|
+
const { compact, renderFooter } = this.props;
|
|
4138
|
+
return (React__default["default"].createElement("div", { className: b$4('footer') }, renderFooter === null || renderFooter === void 0 ? void 0 : renderFooter({
|
|
4052
4139
|
size,
|
|
4053
4140
|
compact,
|
|
4054
4141
|
asideRef: this.asideRef,
|
|
@@ -4056,44 +4143,34 @@ class AsideHeader extends React__default["default"].Component {
|
|
|
4056
4143
|
};
|
|
4057
4144
|
this.renderPanels = (size) => {
|
|
4058
4145
|
const { panelItems } = this.props;
|
|
4059
|
-
return (React__default["default"].createElement(Drawer, { className: b$
|
|
4146
|
+
return (React__default["default"].createElement(Drawer, { className: b$4('panels'), onVeilClick: this.onCloseDrawer, onEscape: this.onCloseDrawer, style: { left: size } }, panelItems.map((item) => (React__default["default"].createElement(DrawerItem, Object.assign({ key: item.id }, item))))));
|
|
4060
4147
|
};
|
|
4061
4148
|
this.renderCollapseButton = () => {
|
|
4062
4149
|
var _a;
|
|
4063
4150
|
const { compact, dict } = this.props;
|
|
4064
4151
|
const typeButton = compact ? exports.Dict.ExpandButton : exports.Dict.CollapseButton;
|
|
4065
|
-
return (React__default["default"].createElement(uikit.Button, { className: b$
|
|
4066
|
-
React__default["default"].createElement(uikit.Icon, { data:
|
|
4152
|
+
return (React__default["default"].createElement(uikit.Button, { className: b$4('collapse-button', { compact }), view: "flat", onClick: this.onCollapseButtonClick, title: (_a = dict === null || dict === void 0 ? void 0 : dict[typeButton]) !== null && _a !== void 0 ? _a : defaultDict$1[typeButton] },
|
|
4153
|
+
React__default["default"].createElement(uikit.Icon, { data: controlMenuButtonIcon, className: b$4('collapse-icon'), width: "16", height: "10" })));
|
|
4067
4154
|
};
|
|
4068
4155
|
this.onCollapseButtonClick = () => {
|
|
4069
4156
|
var _a, _b;
|
|
4070
|
-
|
|
4071
|
-
this.setState({ compact: newCompact });
|
|
4072
|
-
(_b = (_a = this.props).onChangeCompact) === null || _b === void 0 ? void 0 : _b.call(_a, newCompact);
|
|
4157
|
+
(_b = (_a = this.props).onChangeCompact) === null || _b === void 0 ? void 0 : _b.call(_a, !this.props.compact);
|
|
4073
4158
|
};
|
|
4074
4159
|
this.onCloseDrawer = () => {
|
|
4075
4160
|
var _a, _b;
|
|
4076
4161
|
(_b = (_a = this.props).onClosePanel) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
4077
4162
|
};
|
|
4078
|
-
this.
|
|
4079
|
-
var _a, _b;
|
|
4163
|
+
this.onItemClick = (item, collapsed) => {
|
|
4164
|
+
var _a, _b, _c;
|
|
4080
4165
|
(_b = (_a = this.props).onClosePanel) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
4081
|
-
|
|
4082
|
-
this.state = {
|
|
4083
|
-
compact: Boolean(props.compact),
|
|
4166
|
+
(_c = item.onItemClick) === null || _c === void 0 ? void 0 : _c.call(item, item, collapsed);
|
|
4084
4167
|
};
|
|
4085
4168
|
}
|
|
4086
|
-
componentDidUpdate(prevProps) {
|
|
4087
|
-
if (prevProps.compact !== this.props.compact) {
|
|
4088
|
-
this.setState({ compact: Boolean(this.props.compact) });
|
|
4089
|
-
}
|
|
4090
|
-
}
|
|
4091
4169
|
render() {
|
|
4092
|
-
const { className } = this.props;
|
|
4093
|
-
const { compact } = this.state;
|
|
4170
|
+
const { className, compact } = this.props;
|
|
4094
4171
|
const size = compact ? ASIDE_HEADER_COMPACT_WIDTH : ASIDE_HEADER_EXPANDED_WIDTH;
|
|
4095
|
-
return (React__default["default"].createElement("div", { className: b$
|
|
4096
|
-
React__default["default"].createElement("div", { className: b$
|
|
4172
|
+
return (React__default["default"].createElement("div", { className: b$4({ compact }, className) },
|
|
4173
|
+
React__default["default"].createElement("div", { className: b$4('pane-container') },
|
|
4097
4174
|
this.renderFirstPane(size),
|
|
4098
4175
|
this.renderSecondPane(size))));
|
|
4099
4176
|
}
|
|
@@ -4131,17 +4208,936 @@ function __rest(s, e) {
|
|
|
4131
4208
|
return t;
|
|
4132
4209
|
}
|
|
4133
4210
|
|
|
4134
|
-
var css_248z = ".ycn-footer-item {\n width: 100%;\n height: 40px;\n}";
|
|
4135
|
-
styleInject(css_248z);
|
|
4211
|
+
var css_248z$2 = ".ycn-footer-item {\n width: 100%;\n height: 40px;\n}";
|
|
4212
|
+
styleInject(css_248z$2);
|
|
4136
4213
|
|
|
4137
|
-
const b = block('footer-item');
|
|
4214
|
+
const b$3 = block('footer-item');
|
|
4138
4215
|
const FooterItem = (_a) => {
|
|
4139
4216
|
var { item } = _a, props = __rest(_a, ["item"]);
|
|
4140
|
-
return (React__default["default"].createElement(Item, Object.assign({}, props, { item: Object.assign({ iconSize: ASIDE_HEADER_FOOTER_ICON_SIZE }, item), className: b({ compact: props.compact }) })));
|
|
4217
|
+
return (React__default["default"].createElement(Item, Object.assign({}, props, { item: Object.assign({ iconSize: ASIDE_HEADER_FOOTER_ICON_SIZE }, item), className: b$3({ compact: props.compact }), onItemClick: item.onItemClick })));
|
|
4141
4218
|
};
|
|
4142
4219
|
|
|
4220
|
+
/**
|
|
4221
|
+
* This method returns the first argument it receives.
|
|
4222
|
+
*
|
|
4223
|
+
* @static
|
|
4224
|
+
* @since 0.1.0
|
|
4225
|
+
* @memberOf _
|
|
4226
|
+
* @category Util
|
|
4227
|
+
* @param {*} value Any value.
|
|
4228
|
+
* @returns {*} Returns `value`.
|
|
4229
|
+
* @example
|
|
4230
|
+
*
|
|
4231
|
+
* var object = { 'a': 1 };
|
|
4232
|
+
*
|
|
4233
|
+
* console.log(_.identity(object) === object);
|
|
4234
|
+
* // => true
|
|
4235
|
+
*/
|
|
4236
|
+
|
|
4237
|
+
function identity(value) {
|
|
4238
|
+
return value;
|
|
4239
|
+
}
|
|
4240
|
+
|
|
4241
|
+
var identity_1 = identity;
|
|
4242
|
+
|
|
4243
|
+
/**
|
|
4244
|
+
* Checks if `value` is the
|
|
4245
|
+
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
|
|
4246
|
+
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
|
|
4247
|
+
*
|
|
4248
|
+
* @static
|
|
4249
|
+
* @memberOf _
|
|
4250
|
+
* @since 0.1.0
|
|
4251
|
+
* @category Lang
|
|
4252
|
+
* @param {*} value The value to check.
|
|
4253
|
+
* @returns {boolean} Returns `true` if `value` is an object, else `false`.
|
|
4254
|
+
* @example
|
|
4255
|
+
*
|
|
4256
|
+
* _.isObject({});
|
|
4257
|
+
* // => true
|
|
4258
|
+
*
|
|
4259
|
+
* _.isObject([1, 2, 3]);
|
|
4260
|
+
* // => true
|
|
4261
|
+
*
|
|
4262
|
+
* _.isObject(_.noop);
|
|
4263
|
+
* // => true
|
|
4264
|
+
*
|
|
4265
|
+
* _.isObject(null);
|
|
4266
|
+
* // => false
|
|
4267
|
+
*/
|
|
4268
|
+
|
|
4269
|
+
function isObject$2(value) {
|
|
4270
|
+
var type = typeof value;
|
|
4271
|
+
return value != null && (type == 'object' || type == 'function');
|
|
4272
|
+
}
|
|
4273
|
+
|
|
4274
|
+
var isObject_1 = isObject$2;
|
|
4275
|
+
|
|
4276
|
+
/** Detect free variable `global` from Node.js. */
|
|
4277
|
+
|
|
4278
|
+
var freeGlobal$1 = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
|
|
4279
|
+
|
|
4280
|
+
var _freeGlobal = freeGlobal$1;
|
|
4281
|
+
|
|
4282
|
+
var freeGlobal = _freeGlobal;
|
|
4283
|
+
|
|
4284
|
+
/** Detect free variable `self`. */
|
|
4285
|
+
var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
|
|
4286
|
+
|
|
4287
|
+
/** Used as a reference to the global object. */
|
|
4288
|
+
var root$2 = freeGlobal || freeSelf || Function('return this')();
|
|
4289
|
+
|
|
4290
|
+
var _root = root$2;
|
|
4291
|
+
|
|
4292
|
+
var root$1 = _root;
|
|
4293
|
+
|
|
4294
|
+
/**
|
|
4295
|
+
* Gets the timestamp of the number of milliseconds that have elapsed since
|
|
4296
|
+
* the Unix epoch (1 January 1970 00:00:00 UTC).
|
|
4297
|
+
*
|
|
4298
|
+
* @static
|
|
4299
|
+
* @memberOf _
|
|
4300
|
+
* @since 2.4.0
|
|
4301
|
+
* @category Date
|
|
4302
|
+
* @returns {number} Returns the timestamp.
|
|
4303
|
+
* @example
|
|
4304
|
+
*
|
|
4305
|
+
* _.defer(function(stamp) {
|
|
4306
|
+
* console.log(_.now() - stamp);
|
|
4307
|
+
* }, _.now());
|
|
4308
|
+
* // => Logs the number of milliseconds it took for the deferred invocation.
|
|
4309
|
+
*/
|
|
4310
|
+
var now$1 = function() {
|
|
4311
|
+
return root$1.Date.now();
|
|
4312
|
+
};
|
|
4313
|
+
|
|
4314
|
+
var now_1 = now$1;
|
|
4315
|
+
|
|
4316
|
+
/** Used to match a single whitespace character. */
|
|
4317
|
+
|
|
4318
|
+
var reWhitespace = /\s/;
|
|
4319
|
+
|
|
4320
|
+
/**
|
|
4321
|
+
* Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
|
|
4322
|
+
* character of `string`.
|
|
4323
|
+
*
|
|
4324
|
+
* @private
|
|
4325
|
+
* @param {string} string The string to inspect.
|
|
4326
|
+
* @returns {number} Returns the index of the last non-whitespace character.
|
|
4327
|
+
*/
|
|
4328
|
+
function trimmedEndIndex$1(string) {
|
|
4329
|
+
var index = string.length;
|
|
4330
|
+
|
|
4331
|
+
while (index-- && reWhitespace.test(string.charAt(index))) {}
|
|
4332
|
+
return index;
|
|
4333
|
+
}
|
|
4334
|
+
|
|
4335
|
+
var _trimmedEndIndex = trimmedEndIndex$1;
|
|
4336
|
+
|
|
4337
|
+
var trimmedEndIndex = _trimmedEndIndex;
|
|
4338
|
+
|
|
4339
|
+
/** Used to match leading whitespace. */
|
|
4340
|
+
var reTrimStart = /^\s+/;
|
|
4341
|
+
|
|
4342
|
+
/**
|
|
4343
|
+
* The base implementation of `_.trim`.
|
|
4344
|
+
*
|
|
4345
|
+
* @private
|
|
4346
|
+
* @param {string} string The string to trim.
|
|
4347
|
+
* @returns {string} Returns the trimmed string.
|
|
4348
|
+
*/
|
|
4349
|
+
function baseTrim$1(string) {
|
|
4350
|
+
return string
|
|
4351
|
+
? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')
|
|
4352
|
+
: string;
|
|
4353
|
+
}
|
|
4354
|
+
|
|
4355
|
+
var _baseTrim = baseTrim$1;
|
|
4356
|
+
|
|
4357
|
+
var root = _root;
|
|
4358
|
+
|
|
4359
|
+
/** Built-in value references. */
|
|
4360
|
+
var Symbol$3 = root.Symbol;
|
|
4361
|
+
|
|
4362
|
+
var _Symbol = Symbol$3;
|
|
4363
|
+
|
|
4364
|
+
var Symbol$2 = _Symbol;
|
|
4365
|
+
|
|
4366
|
+
/** Used for built-in method references. */
|
|
4367
|
+
var objectProto$1 = Object.prototype;
|
|
4368
|
+
|
|
4369
|
+
/** Used to check objects for own properties. */
|
|
4370
|
+
var hasOwnProperty = objectProto$1.hasOwnProperty;
|
|
4371
|
+
|
|
4372
|
+
/**
|
|
4373
|
+
* Used to resolve the
|
|
4374
|
+
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
|
|
4375
|
+
* of values.
|
|
4376
|
+
*/
|
|
4377
|
+
var nativeObjectToString$1 = objectProto$1.toString;
|
|
4378
|
+
|
|
4379
|
+
/** Built-in value references. */
|
|
4380
|
+
var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : undefined;
|
|
4381
|
+
|
|
4382
|
+
/**
|
|
4383
|
+
* A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
|
|
4384
|
+
*
|
|
4385
|
+
* @private
|
|
4386
|
+
* @param {*} value The value to query.
|
|
4387
|
+
* @returns {string} Returns the raw `toStringTag`.
|
|
4388
|
+
*/
|
|
4389
|
+
function getRawTag$1(value) {
|
|
4390
|
+
var isOwn = hasOwnProperty.call(value, symToStringTag$1),
|
|
4391
|
+
tag = value[symToStringTag$1];
|
|
4392
|
+
|
|
4393
|
+
try {
|
|
4394
|
+
value[symToStringTag$1] = undefined;
|
|
4395
|
+
var unmasked = true;
|
|
4396
|
+
} catch (e) {}
|
|
4397
|
+
|
|
4398
|
+
var result = nativeObjectToString$1.call(value);
|
|
4399
|
+
if (unmasked) {
|
|
4400
|
+
if (isOwn) {
|
|
4401
|
+
value[symToStringTag$1] = tag;
|
|
4402
|
+
} else {
|
|
4403
|
+
delete value[symToStringTag$1];
|
|
4404
|
+
}
|
|
4405
|
+
}
|
|
4406
|
+
return result;
|
|
4407
|
+
}
|
|
4408
|
+
|
|
4409
|
+
var _getRawTag = getRawTag$1;
|
|
4410
|
+
|
|
4411
|
+
/** Used for built-in method references. */
|
|
4412
|
+
|
|
4413
|
+
var objectProto = Object.prototype;
|
|
4414
|
+
|
|
4415
|
+
/**
|
|
4416
|
+
* Used to resolve the
|
|
4417
|
+
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
|
|
4418
|
+
* of values.
|
|
4419
|
+
*/
|
|
4420
|
+
var nativeObjectToString = objectProto.toString;
|
|
4421
|
+
|
|
4422
|
+
/**
|
|
4423
|
+
* Converts `value` to a string using `Object.prototype.toString`.
|
|
4424
|
+
*
|
|
4425
|
+
* @private
|
|
4426
|
+
* @param {*} value The value to convert.
|
|
4427
|
+
* @returns {string} Returns the converted string.
|
|
4428
|
+
*/
|
|
4429
|
+
function objectToString$1(value) {
|
|
4430
|
+
return nativeObjectToString.call(value);
|
|
4431
|
+
}
|
|
4432
|
+
|
|
4433
|
+
var _objectToString = objectToString$1;
|
|
4434
|
+
|
|
4435
|
+
var Symbol$1 = _Symbol,
|
|
4436
|
+
getRawTag = _getRawTag,
|
|
4437
|
+
objectToString = _objectToString;
|
|
4438
|
+
|
|
4439
|
+
/** `Object#toString` result references. */
|
|
4440
|
+
var nullTag = '[object Null]',
|
|
4441
|
+
undefinedTag = '[object Undefined]';
|
|
4442
|
+
|
|
4443
|
+
/** Built-in value references. */
|
|
4444
|
+
var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined;
|
|
4445
|
+
|
|
4446
|
+
/**
|
|
4447
|
+
* The base implementation of `getTag` without fallbacks for buggy environments.
|
|
4448
|
+
*
|
|
4449
|
+
* @private
|
|
4450
|
+
* @param {*} value The value to query.
|
|
4451
|
+
* @returns {string} Returns the `toStringTag`.
|
|
4452
|
+
*/
|
|
4453
|
+
function baseGetTag$1(value) {
|
|
4454
|
+
if (value == null) {
|
|
4455
|
+
return value === undefined ? undefinedTag : nullTag;
|
|
4456
|
+
}
|
|
4457
|
+
return (symToStringTag && symToStringTag in Object(value))
|
|
4458
|
+
? getRawTag(value)
|
|
4459
|
+
: objectToString(value);
|
|
4460
|
+
}
|
|
4461
|
+
|
|
4462
|
+
var _baseGetTag = baseGetTag$1;
|
|
4463
|
+
|
|
4464
|
+
/**
|
|
4465
|
+
* Checks if `value` is object-like. A value is object-like if it's not `null`
|
|
4466
|
+
* and has a `typeof` result of "object".
|
|
4467
|
+
*
|
|
4468
|
+
* @static
|
|
4469
|
+
* @memberOf _
|
|
4470
|
+
* @since 4.0.0
|
|
4471
|
+
* @category Lang
|
|
4472
|
+
* @param {*} value The value to check.
|
|
4473
|
+
* @returns {boolean} Returns `true` if `value` is object-like, else `false`.
|
|
4474
|
+
* @example
|
|
4475
|
+
*
|
|
4476
|
+
* _.isObjectLike({});
|
|
4477
|
+
* // => true
|
|
4478
|
+
*
|
|
4479
|
+
* _.isObjectLike([1, 2, 3]);
|
|
4480
|
+
* // => true
|
|
4481
|
+
*
|
|
4482
|
+
* _.isObjectLike(_.noop);
|
|
4483
|
+
* // => false
|
|
4484
|
+
*
|
|
4485
|
+
* _.isObjectLike(null);
|
|
4486
|
+
* // => false
|
|
4487
|
+
*/
|
|
4488
|
+
|
|
4489
|
+
function isObjectLike$1(value) {
|
|
4490
|
+
return value != null && typeof value == 'object';
|
|
4491
|
+
}
|
|
4492
|
+
|
|
4493
|
+
var isObjectLike_1 = isObjectLike$1;
|
|
4494
|
+
|
|
4495
|
+
var baseGetTag = _baseGetTag,
|
|
4496
|
+
isObjectLike = isObjectLike_1;
|
|
4497
|
+
|
|
4498
|
+
/** `Object#toString` result references. */
|
|
4499
|
+
var symbolTag = '[object Symbol]';
|
|
4500
|
+
|
|
4501
|
+
/**
|
|
4502
|
+
* Checks if `value` is classified as a `Symbol` primitive or object.
|
|
4503
|
+
*
|
|
4504
|
+
* @static
|
|
4505
|
+
* @memberOf _
|
|
4506
|
+
* @since 4.0.0
|
|
4507
|
+
* @category Lang
|
|
4508
|
+
* @param {*} value The value to check.
|
|
4509
|
+
* @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
|
|
4510
|
+
* @example
|
|
4511
|
+
*
|
|
4512
|
+
* _.isSymbol(Symbol.iterator);
|
|
4513
|
+
* // => true
|
|
4514
|
+
*
|
|
4515
|
+
* _.isSymbol('abc');
|
|
4516
|
+
* // => false
|
|
4517
|
+
*/
|
|
4518
|
+
function isSymbol$1(value) {
|
|
4519
|
+
return typeof value == 'symbol' ||
|
|
4520
|
+
(isObjectLike(value) && baseGetTag(value) == symbolTag);
|
|
4521
|
+
}
|
|
4522
|
+
|
|
4523
|
+
var isSymbol_1 = isSymbol$1;
|
|
4524
|
+
|
|
4525
|
+
var baseTrim = _baseTrim,
|
|
4526
|
+
isObject$1 = isObject_1,
|
|
4527
|
+
isSymbol = isSymbol_1;
|
|
4528
|
+
|
|
4529
|
+
/** Used as references for various `Number` constants. */
|
|
4530
|
+
var NAN = 0 / 0;
|
|
4531
|
+
|
|
4532
|
+
/** Used to detect bad signed hexadecimal string values. */
|
|
4533
|
+
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
|
|
4534
|
+
|
|
4535
|
+
/** Used to detect binary string values. */
|
|
4536
|
+
var reIsBinary = /^0b[01]+$/i;
|
|
4537
|
+
|
|
4538
|
+
/** Used to detect octal string values. */
|
|
4539
|
+
var reIsOctal = /^0o[0-7]+$/i;
|
|
4540
|
+
|
|
4541
|
+
/** Built-in method references without a dependency on `root`. */
|
|
4542
|
+
var freeParseInt = parseInt;
|
|
4543
|
+
|
|
4544
|
+
/**
|
|
4545
|
+
* Converts `value` to a number.
|
|
4546
|
+
*
|
|
4547
|
+
* @static
|
|
4548
|
+
* @memberOf _
|
|
4549
|
+
* @since 4.0.0
|
|
4550
|
+
* @category Lang
|
|
4551
|
+
* @param {*} value The value to process.
|
|
4552
|
+
* @returns {number} Returns the number.
|
|
4553
|
+
* @example
|
|
4554
|
+
*
|
|
4555
|
+
* _.toNumber(3.2);
|
|
4556
|
+
* // => 3.2
|
|
4557
|
+
*
|
|
4558
|
+
* _.toNumber(Number.MIN_VALUE);
|
|
4559
|
+
* // => 5e-324
|
|
4560
|
+
*
|
|
4561
|
+
* _.toNumber(Infinity);
|
|
4562
|
+
* // => Infinity
|
|
4563
|
+
*
|
|
4564
|
+
* _.toNumber('3.2');
|
|
4565
|
+
* // => 3.2
|
|
4566
|
+
*/
|
|
4567
|
+
function toNumber$1(value) {
|
|
4568
|
+
if (typeof value == 'number') {
|
|
4569
|
+
return value;
|
|
4570
|
+
}
|
|
4571
|
+
if (isSymbol(value)) {
|
|
4572
|
+
return NAN;
|
|
4573
|
+
}
|
|
4574
|
+
if (isObject$1(value)) {
|
|
4575
|
+
var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
|
|
4576
|
+
value = isObject$1(other) ? (other + '') : other;
|
|
4577
|
+
}
|
|
4578
|
+
if (typeof value != 'string') {
|
|
4579
|
+
return value === 0 ? value : +value;
|
|
4580
|
+
}
|
|
4581
|
+
value = baseTrim(value);
|
|
4582
|
+
var isBinary = reIsBinary.test(value);
|
|
4583
|
+
return (isBinary || reIsOctal.test(value))
|
|
4584
|
+
? freeParseInt(value.slice(2), isBinary ? 2 : 8)
|
|
4585
|
+
: (reIsBadHex.test(value) ? NAN : +value);
|
|
4586
|
+
}
|
|
4587
|
+
|
|
4588
|
+
var toNumber_1 = toNumber$1;
|
|
4589
|
+
|
|
4590
|
+
var isObject = isObject_1,
|
|
4591
|
+
now = now_1,
|
|
4592
|
+
toNumber = toNumber_1;
|
|
4593
|
+
|
|
4594
|
+
/** Error message constants. */
|
|
4595
|
+
var FUNC_ERROR_TEXT = 'Expected a function';
|
|
4596
|
+
|
|
4597
|
+
/* Built-in method references for those with the same name as other `lodash` methods. */
|
|
4598
|
+
var nativeMax = Math.max,
|
|
4599
|
+
nativeMin = Math.min;
|
|
4600
|
+
|
|
4601
|
+
/**
|
|
4602
|
+
* Creates a debounced function that delays invoking `func` until after `wait`
|
|
4603
|
+
* milliseconds have elapsed since the last time the debounced function was
|
|
4604
|
+
* invoked. The debounced function comes with a `cancel` method to cancel
|
|
4605
|
+
* delayed `func` invocations and a `flush` method to immediately invoke them.
|
|
4606
|
+
* Provide `options` to indicate whether `func` should be invoked on the
|
|
4607
|
+
* leading and/or trailing edge of the `wait` timeout. The `func` is invoked
|
|
4608
|
+
* with the last arguments provided to the debounced function. Subsequent
|
|
4609
|
+
* calls to the debounced function return the result of the last `func`
|
|
4610
|
+
* invocation.
|
|
4611
|
+
*
|
|
4612
|
+
* **Note:** If `leading` and `trailing` options are `true`, `func` is
|
|
4613
|
+
* invoked on the trailing edge of the timeout only if the debounced function
|
|
4614
|
+
* is invoked more than once during the `wait` timeout.
|
|
4615
|
+
*
|
|
4616
|
+
* If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
|
|
4617
|
+
* until to the next tick, similar to `setTimeout` with a timeout of `0`.
|
|
4618
|
+
*
|
|
4619
|
+
* See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
|
|
4620
|
+
* for details over the differences between `_.debounce` and `_.throttle`.
|
|
4621
|
+
*
|
|
4622
|
+
* @static
|
|
4623
|
+
* @memberOf _
|
|
4624
|
+
* @since 0.1.0
|
|
4625
|
+
* @category Function
|
|
4626
|
+
* @param {Function} func The function to debounce.
|
|
4627
|
+
* @param {number} [wait=0] The number of milliseconds to delay.
|
|
4628
|
+
* @param {Object} [options={}] The options object.
|
|
4629
|
+
* @param {boolean} [options.leading=false]
|
|
4630
|
+
* Specify invoking on the leading edge of the timeout.
|
|
4631
|
+
* @param {number} [options.maxWait]
|
|
4632
|
+
* The maximum time `func` is allowed to be delayed before it's invoked.
|
|
4633
|
+
* @param {boolean} [options.trailing=true]
|
|
4634
|
+
* Specify invoking on the trailing edge of the timeout.
|
|
4635
|
+
* @returns {Function} Returns the new debounced function.
|
|
4636
|
+
* @example
|
|
4637
|
+
*
|
|
4638
|
+
* // Avoid costly calculations while the window size is in flux.
|
|
4639
|
+
* jQuery(window).on('resize', _.debounce(calculateLayout, 150));
|
|
4640
|
+
*
|
|
4641
|
+
* // Invoke `sendMail` when clicked, debouncing subsequent calls.
|
|
4642
|
+
* jQuery(element).on('click', _.debounce(sendMail, 300, {
|
|
4643
|
+
* 'leading': true,
|
|
4644
|
+
* 'trailing': false
|
|
4645
|
+
* }));
|
|
4646
|
+
*
|
|
4647
|
+
* // Ensure `batchLog` is invoked once after 1 second of debounced calls.
|
|
4648
|
+
* var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
|
|
4649
|
+
* var source = new EventSource('/stream');
|
|
4650
|
+
* jQuery(source).on('message', debounced);
|
|
4651
|
+
*
|
|
4652
|
+
* // Cancel the trailing debounced invocation.
|
|
4653
|
+
* jQuery(window).on('popstate', debounced.cancel);
|
|
4654
|
+
*/
|
|
4655
|
+
function debounce(func, wait, options) {
|
|
4656
|
+
var lastArgs,
|
|
4657
|
+
lastThis,
|
|
4658
|
+
maxWait,
|
|
4659
|
+
result,
|
|
4660
|
+
timerId,
|
|
4661
|
+
lastCallTime,
|
|
4662
|
+
lastInvokeTime = 0,
|
|
4663
|
+
leading = false,
|
|
4664
|
+
maxing = false,
|
|
4665
|
+
trailing = true;
|
|
4666
|
+
|
|
4667
|
+
if (typeof func != 'function') {
|
|
4668
|
+
throw new TypeError(FUNC_ERROR_TEXT);
|
|
4669
|
+
}
|
|
4670
|
+
wait = toNumber(wait) || 0;
|
|
4671
|
+
if (isObject(options)) {
|
|
4672
|
+
leading = !!options.leading;
|
|
4673
|
+
maxing = 'maxWait' in options;
|
|
4674
|
+
maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
|
|
4675
|
+
trailing = 'trailing' in options ? !!options.trailing : trailing;
|
|
4676
|
+
}
|
|
4677
|
+
|
|
4678
|
+
function invokeFunc(time) {
|
|
4679
|
+
var args = lastArgs,
|
|
4680
|
+
thisArg = lastThis;
|
|
4681
|
+
|
|
4682
|
+
lastArgs = lastThis = undefined;
|
|
4683
|
+
lastInvokeTime = time;
|
|
4684
|
+
result = func.apply(thisArg, args);
|
|
4685
|
+
return result;
|
|
4686
|
+
}
|
|
4687
|
+
|
|
4688
|
+
function leadingEdge(time) {
|
|
4689
|
+
// Reset any `maxWait` timer.
|
|
4690
|
+
lastInvokeTime = time;
|
|
4691
|
+
// Start the timer for the trailing edge.
|
|
4692
|
+
timerId = setTimeout(timerExpired, wait);
|
|
4693
|
+
// Invoke the leading edge.
|
|
4694
|
+
return leading ? invokeFunc(time) : result;
|
|
4695
|
+
}
|
|
4696
|
+
|
|
4697
|
+
function remainingWait(time) {
|
|
4698
|
+
var timeSinceLastCall = time - lastCallTime,
|
|
4699
|
+
timeSinceLastInvoke = time - lastInvokeTime,
|
|
4700
|
+
timeWaiting = wait - timeSinceLastCall;
|
|
4701
|
+
|
|
4702
|
+
return maxing
|
|
4703
|
+
? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
|
|
4704
|
+
: timeWaiting;
|
|
4705
|
+
}
|
|
4706
|
+
|
|
4707
|
+
function shouldInvoke(time) {
|
|
4708
|
+
var timeSinceLastCall = time - lastCallTime,
|
|
4709
|
+
timeSinceLastInvoke = time - lastInvokeTime;
|
|
4710
|
+
|
|
4711
|
+
// Either this is the first call, activity has stopped and we're at the
|
|
4712
|
+
// trailing edge, the system time has gone backwards and we're treating
|
|
4713
|
+
// it as the trailing edge, or we've hit the `maxWait` limit.
|
|
4714
|
+
return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
|
|
4715
|
+
(timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
|
|
4716
|
+
}
|
|
4717
|
+
|
|
4718
|
+
function timerExpired() {
|
|
4719
|
+
var time = now();
|
|
4720
|
+
if (shouldInvoke(time)) {
|
|
4721
|
+
return trailingEdge(time);
|
|
4722
|
+
}
|
|
4723
|
+
// Restart the timer.
|
|
4724
|
+
timerId = setTimeout(timerExpired, remainingWait(time));
|
|
4725
|
+
}
|
|
4726
|
+
|
|
4727
|
+
function trailingEdge(time) {
|
|
4728
|
+
timerId = undefined;
|
|
4729
|
+
|
|
4730
|
+
// Only invoke if we have `lastArgs` which means `func` has been
|
|
4731
|
+
// debounced at least once.
|
|
4732
|
+
if (trailing && lastArgs) {
|
|
4733
|
+
return invokeFunc(time);
|
|
4734
|
+
}
|
|
4735
|
+
lastArgs = lastThis = undefined;
|
|
4736
|
+
return result;
|
|
4737
|
+
}
|
|
4738
|
+
|
|
4739
|
+
function cancel() {
|
|
4740
|
+
if (timerId !== undefined) {
|
|
4741
|
+
clearTimeout(timerId);
|
|
4742
|
+
}
|
|
4743
|
+
lastInvokeTime = 0;
|
|
4744
|
+
lastArgs = lastCallTime = lastThis = timerId = undefined;
|
|
4745
|
+
}
|
|
4746
|
+
|
|
4747
|
+
function flush() {
|
|
4748
|
+
return timerId === undefined ? result : trailingEdge(now());
|
|
4749
|
+
}
|
|
4750
|
+
|
|
4751
|
+
function debounced() {
|
|
4752
|
+
var time = now(),
|
|
4753
|
+
isInvoking = shouldInvoke(time);
|
|
4754
|
+
|
|
4755
|
+
lastArgs = arguments;
|
|
4756
|
+
lastThis = this;
|
|
4757
|
+
lastCallTime = time;
|
|
4758
|
+
|
|
4759
|
+
if (isInvoking) {
|
|
4760
|
+
if (timerId === undefined) {
|
|
4761
|
+
return leadingEdge(lastCallTime);
|
|
4762
|
+
}
|
|
4763
|
+
if (maxing) {
|
|
4764
|
+
// Handle invocations in a tight loop.
|
|
4765
|
+
clearTimeout(timerId);
|
|
4766
|
+
timerId = setTimeout(timerExpired, wait);
|
|
4767
|
+
return invokeFunc(lastCallTime);
|
|
4768
|
+
}
|
|
4769
|
+
}
|
|
4770
|
+
if (timerId === undefined) {
|
|
4771
|
+
timerId = setTimeout(timerExpired, wait);
|
|
4772
|
+
}
|
|
4773
|
+
return result;
|
|
4774
|
+
}
|
|
4775
|
+
debounced.cancel = cancel;
|
|
4776
|
+
debounced.flush = flush;
|
|
4777
|
+
return debounced;
|
|
4778
|
+
}
|
|
4779
|
+
|
|
4780
|
+
var debounce_1 = debounce;
|
|
4781
|
+
|
|
4782
|
+
function useStableCallback(func) {
|
|
4783
|
+
const funcRef = React__namespace.useRef();
|
|
4784
|
+
React__namespace.useEffect(() => {
|
|
4785
|
+
funcRef.current = func;
|
|
4786
|
+
return () => {
|
|
4787
|
+
funcRef.current = undefined;
|
|
4788
|
+
};
|
|
4789
|
+
}, [func]);
|
|
4790
|
+
return React__namespace.useCallback((...args) => {
|
|
4791
|
+
if (typeof funcRef.current === 'function') {
|
|
4792
|
+
return funcRef.current(...args);
|
|
4793
|
+
}
|
|
4794
|
+
return undefined;
|
|
4795
|
+
}, []);
|
|
4796
|
+
}
|
|
4797
|
+
function useCurrent(value) {
|
|
4798
|
+
const ref = React__namespace.useRef(value);
|
|
4799
|
+
ref.current = value;
|
|
4800
|
+
return React__namespace.useCallback(() => ref.current, []);
|
|
4801
|
+
}
|
|
4802
|
+
function invariant(cond, message) {
|
|
4803
|
+
if (!cond) {
|
|
4804
|
+
throw new Error(message);
|
|
4805
|
+
}
|
|
4806
|
+
}
|
|
4807
|
+
function escapeStringForRegExp(input) {
|
|
4808
|
+
return input.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
4809
|
+
}
|
|
4810
|
+
|
|
4811
|
+
const b$2 = block('settings-search');
|
|
4812
|
+
function SettingsSearch({ className, onChange, debounce = 200, inputRef, placeholder, }) {
|
|
4813
|
+
const onChangeStable = useStableCallback(onChange);
|
|
4814
|
+
const handleUpdate = React__default["default"].useCallback(debounce_1(onChangeStable, debounce), [debounce]);
|
|
4815
|
+
return (React__default["default"].createElement("div", { className: b$2(null, className) },
|
|
4816
|
+
React__default["default"].createElement(uikit.TextInput, { controlRef: inputRef, hasClear: true, autoFocus: true, placeholder: placeholder, onUpdate: handleUpdate })));
|
|
4817
|
+
}
|
|
4818
|
+
|
|
4819
|
+
var css_248z$1 = ".ycn-settings-menu__group-heading {\n font-weight: var(--yc-text-accent-font-weight);\n display: inline-block;\n padding: 0 20px;\n margin-bottom: 12px;\n line-height: 18px;\n}\n.ycn-settings-menu__group + .ycn-settings-menu__group {\n margin-top: 24px;\n}\n.ycn-settings-menu__item {\n display: flex;\n align-items: center;\n height: 40px;\n padding: 0 20px;\n cursor: pointer;\n color: var(--yc-color-text-primary);\n}\n.ycn-settings-menu__item-icon {\n color: var(--yc-color-text-misc);\n margin-right: 5px;\n}\n.ycn-settings-menu__item:hover, .ycn-settings-menu__item_focused {\n background: var(--yc-color-base-simple-hover);\n}\n.ycn-settings-menu__item_selected {\n background: var(--yc-color-base-selection);\n}\n.ycn-settings-menu__item_selected:hover, .ycn-settings-menu__item_selected.ycn-settings-menu__item_focused {\n background: var(--yc-color-base-selection-hover);\n}\n.ycn-settings-menu__item_disabled {\n color: var(--yc-color-text-secondary);\n cursor: auto;\n}\n.ycn-settings-menu__item_disabled:hover {\n background: none;\n}\n.ycn-settings-menu__item_disabled .ycn-settings-menu__item-icon {\n color: var(--yc-color-base-misc-heavy);\n}\n.ycn-settings-menu__item_badge {\n position: relative;\n}\n.ycn-settings-menu__item_badge::after {\n content: \"\";\n display: block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: var(--yc-color-text-danger);\n position: absolute;\n right: 9px;\n top: calc(50% - 3px);\n}";
|
|
4820
|
+
styleInject(css_248z$1);
|
|
4821
|
+
|
|
4822
|
+
const b$1 = block('settings-menu');
|
|
4823
|
+
const SettingsMenu = React__default["default"].forwardRef(
|
|
4824
|
+
// eslint-disable-next-line prefer-arrow-callback
|
|
4825
|
+
function SettingsMenu({ items, onChange, activeItem }, ref) {
|
|
4826
|
+
const [focusItem, setFocus] = React__default["default"].useState();
|
|
4827
|
+
const containerRef = React__default["default"].useRef(null);
|
|
4828
|
+
const handleChange = useStableCallback(onChange);
|
|
4829
|
+
const getFocused = useCurrent(focusItem);
|
|
4830
|
+
React__default["default"].useImperativeHandle(ref, () => ({
|
|
4831
|
+
handleKeyDown(event) {
|
|
4832
|
+
if (!containerRef.current) {
|
|
4833
|
+
return false;
|
|
4834
|
+
}
|
|
4835
|
+
const focused = getFocused();
|
|
4836
|
+
if (focused && event.key === 'Enter') {
|
|
4837
|
+
handleChange(focused);
|
|
4838
|
+
return true;
|
|
4839
|
+
}
|
|
4840
|
+
else if (event.key === 'ArrowDown') {
|
|
4841
|
+
setFocus(focusNext(containerRef.current, focused, 1));
|
|
4842
|
+
return true;
|
|
4843
|
+
}
|
|
4844
|
+
else if (event.key === 'ArrowUp') {
|
|
4845
|
+
setFocus(focusNext(containerRef.current, focused, -1));
|
|
4846
|
+
return true;
|
|
4847
|
+
}
|
|
4848
|
+
return false;
|
|
4849
|
+
},
|
|
4850
|
+
clearFocus() {
|
|
4851
|
+
setFocus(undefined);
|
|
4852
|
+
},
|
|
4853
|
+
}), [getFocused, handleChange]);
|
|
4854
|
+
return (React__default["default"].createElement("div", { ref: containerRef, className: b$1() }, items.map((firstLevelItem) => {
|
|
4855
|
+
if ('groupTitle' in firstLevelItem) {
|
|
4856
|
+
return (React__default["default"].createElement("div", { key: firstLevelItem.groupTitle, className: b$1('group') },
|
|
4857
|
+
React__default["default"].createElement("span", { className: b$1('group-heading') }, firstLevelItem.groupTitle),
|
|
4858
|
+
firstLevelItem.items.map((item) => {
|
|
4859
|
+
return renderMenuItem(item, onChange, activeItem, focusItem);
|
|
4860
|
+
})));
|
|
4861
|
+
}
|
|
4862
|
+
return renderMenuItem(firstLevelItem, onChange, activeItem, focusItem);
|
|
4863
|
+
})));
|
|
4864
|
+
});
|
|
4865
|
+
function renderMenuItem(item, onChange, activeItem, focusItem) {
|
|
4866
|
+
return (React__default["default"].createElement("span", { key: item.title, className: b$1('item', {
|
|
4867
|
+
selected: activeItem === item.id,
|
|
4868
|
+
disabled: item.disabled,
|
|
4869
|
+
focused: focusItem === item.id,
|
|
4870
|
+
badge: item.withBadge,
|
|
4871
|
+
}), onClick: () => {
|
|
4872
|
+
if (!item.disabled) {
|
|
4873
|
+
onChange(item.id);
|
|
4874
|
+
}
|
|
4875
|
+
}, "data-id": item.id },
|
|
4876
|
+
item.icon ? React__default["default"].createElement(uikit.Icon, Object.assign({ size: 16 }, item.icon, { className: b$1('item-icon') })) : undefined,
|
|
4877
|
+
React__default["default"].createElement("span", null, item.title)));
|
|
4878
|
+
}
|
|
4879
|
+
function focusNext(container, focused, direction) {
|
|
4880
|
+
var _a;
|
|
4881
|
+
const elements = container.querySelectorAll(`.${b$1('item')}:not(.${b$1('item')}_disabled)`);
|
|
4882
|
+
if (elements.length === 0) {
|
|
4883
|
+
return undefined;
|
|
4884
|
+
}
|
|
4885
|
+
let currentIndex = direction > 0 ? -1 : 0;
|
|
4886
|
+
if (focused) {
|
|
4887
|
+
currentIndex = Array.prototype.findIndex.call(elements, (element) => element.getAttribute('data-id') === focused);
|
|
4888
|
+
}
|
|
4889
|
+
currentIndex = (elements.length + currentIndex + direction) % elements.length;
|
|
4890
|
+
return (_a = elements[currentIndex].getAttribute('data-id')) !== null && _a !== void 0 ? _a : undefined;
|
|
4891
|
+
}
|
|
4892
|
+
|
|
4893
|
+
function getSettingsFromChildren(children, searchText = '') {
|
|
4894
|
+
// 'abc def fg' -> abc.*?cde.*?fg
|
|
4895
|
+
const preparedFilter = escapeStringForRegExp(searchText).replace(/\s+/g, '.*?');
|
|
4896
|
+
const filterRe = new RegExp(preparedFilter, 'i');
|
|
4897
|
+
return getSettingsFromChildrenRecursive(children, '', filterRe);
|
|
4898
|
+
}
|
|
4899
|
+
function getSettingsFromChildrenRecursive(children, basepath = '', filterRe) {
|
|
4900
|
+
const menu = [];
|
|
4901
|
+
const pages = {};
|
|
4902
|
+
let hasGroup = false;
|
|
4903
|
+
let hasItems = false;
|
|
4904
|
+
React__default["default"].Children.forEach(children, (element) => {
|
|
4905
|
+
var _a, _b;
|
|
4906
|
+
if (!React__default["default"].isValidElement(element)) {
|
|
4907
|
+
// Ignore non-elements.
|
|
4908
|
+
return;
|
|
4909
|
+
}
|
|
4910
|
+
if (element.type === React__default["default"].Fragment) {
|
|
4911
|
+
// Transparently support React.Fragment and its children.
|
|
4912
|
+
const { menu: menuFragment, pages: pagesFragment } = getSettingsFromChildrenRecursive(element.props.children, basepath, filterRe);
|
|
4913
|
+
menu.push(...menuFragment);
|
|
4914
|
+
Object.assign(pages, pagesFragment);
|
|
4915
|
+
}
|
|
4916
|
+
else if (element.props.groupTitle) {
|
|
4917
|
+
if (process.env.NODE_ENV === 'development') {
|
|
4918
|
+
invariant(!hasItems, 'Setting menu must not mix groups and pages on one level');
|
|
4919
|
+
}
|
|
4920
|
+
const pageId = `${basepath}/${(_a = element.props.id) !== null && _a !== void 0 ? _a : element.props.groupTitle}`;
|
|
4921
|
+
hasGroup = true;
|
|
4922
|
+
const { menu: menuFragment, pages: pagesFragment } = getSettingsFromChildrenRecursive(element.props.children, pageId, filterRe);
|
|
4923
|
+
if (process.env.NODE_ENV === 'development') {
|
|
4924
|
+
const hasInnerGroup = menuFragment.some((item) => 'groupTitle' in item);
|
|
4925
|
+
invariant(!hasInnerGroup, `Group ${element.props.groupTitle} should not include groups`);
|
|
4926
|
+
}
|
|
4927
|
+
menu.push({
|
|
4928
|
+
groupTitle: element.props.groupTitle,
|
|
4929
|
+
// @ts-ignore
|
|
4930
|
+
items: menuFragment,
|
|
4931
|
+
});
|
|
4932
|
+
Object.assign(pages, pagesFragment);
|
|
4933
|
+
}
|
|
4934
|
+
else {
|
|
4935
|
+
hasItems = true;
|
|
4936
|
+
const pageId = `${basepath}/${(_b = element.props.id) !== null && _b !== void 0 ? _b : element.props.title}`;
|
|
4937
|
+
if (process.env.NODE_ENV === 'development') {
|
|
4938
|
+
invariant(Boolean(element.props.title), 'Component must include title prop');
|
|
4939
|
+
invariant(!hasGroup, 'Setting menu must not mix groups and pages on one level');
|
|
4940
|
+
invariant(!pages[pageId], `Setting menu page id must be uniq (${pageId})`);
|
|
4941
|
+
}
|
|
4942
|
+
pages[pageId] = getSettingsPageFromChildren(element.props.children, filterRe);
|
|
4943
|
+
pages[pageId].id = pageId;
|
|
4944
|
+
menu.push({
|
|
4945
|
+
id: pageId,
|
|
4946
|
+
title: element.props.title,
|
|
4947
|
+
icon: element.props.icon,
|
|
4948
|
+
withBadge: pages[pageId].withBadge,
|
|
4949
|
+
disabled: pages[pageId].hidden,
|
|
4950
|
+
});
|
|
4951
|
+
}
|
|
4952
|
+
});
|
|
4953
|
+
return { menu, pages };
|
|
4954
|
+
}
|
|
4955
|
+
function getSettingsPageFromChildren(children, filterRe) {
|
|
4956
|
+
const page = { id: '', sections: [], hidden: true };
|
|
4957
|
+
React__default["default"].Children.forEach(children, (element) => {
|
|
4958
|
+
if (!React__default["default"].isValidElement(element)) {
|
|
4959
|
+
// Ignore non-elements.
|
|
4960
|
+
return;
|
|
4961
|
+
}
|
|
4962
|
+
if (element.type === React__default["default"].Fragment) {
|
|
4963
|
+
// Transparently support React.Fragment and its children.
|
|
4964
|
+
const { sections, withBadge, hidden } = getSettingsPageFromChildren(element.props.children, filterRe);
|
|
4965
|
+
page.sections.push(...sections);
|
|
4966
|
+
page.withBadge = withBadge || page.withBadge;
|
|
4967
|
+
page.hidden = hidden && page.hidden;
|
|
4968
|
+
}
|
|
4969
|
+
else {
|
|
4970
|
+
const { title, header, withBadge } = element.props;
|
|
4971
|
+
const { items, hidden } = getSettingsItemsFromChildren(element.props.children, filterRe);
|
|
4972
|
+
page.withBadge = withBadge || page.withBadge;
|
|
4973
|
+
page.hidden = hidden && page.hidden;
|
|
4974
|
+
page.sections.push({
|
|
4975
|
+
title,
|
|
4976
|
+
header,
|
|
4977
|
+
withBadge,
|
|
4978
|
+
items,
|
|
4979
|
+
hidden,
|
|
4980
|
+
});
|
|
4981
|
+
}
|
|
4982
|
+
});
|
|
4983
|
+
return page;
|
|
4984
|
+
}
|
|
4985
|
+
function getSettingsItemsFromChildren(children, filterRe) {
|
|
4986
|
+
let hidden = true;
|
|
4987
|
+
const items = [];
|
|
4988
|
+
React__default["default"].Children.forEach(children, (element) => {
|
|
4989
|
+
if (!React__default["default"].isValidElement(element)) {
|
|
4990
|
+
// Ignore non-elements.
|
|
4991
|
+
return;
|
|
4992
|
+
}
|
|
4993
|
+
if (element.type === React__default["default"].Fragment) {
|
|
4994
|
+
// Transparently support React.Fragment and its children.
|
|
4995
|
+
const fragmentItems = getSettingsItemsFromChildren(element.props.children, filterRe);
|
|
4996
|
+
items.push(...fragmentItems.items);
|
|
4997
|
+
hidden = hidden && fragmentItems.hidden;
|
|
4998
|
+
}
|
|
4999
|
+
else {
|
|
5000
|
+
const item = {
|
|
5001
|
+
title: element.props.title,
|
|
5002
|
+
renderTitleComponent: element.props.renderTitleComponent,
|
|
5003
|
+
element,
|
|
5004
|
+
hidden: !filterRe.test(element.props.title),
|
|
5005
|
+
};
|
|
5006
|
+
items.push(item);
|
|
5007
|
+
hidden = hidden && item.hidden;
|
|
5008
|
+
}
|
|
5009
|
+
});
|
|
5010
|
+
return { items, hidden };
|
|
5011
|
+
}
|
|
5012
|
+
|
|
5013
|
+
var css_248z = ".ycn-settings {\n display: grid;\n grid-template-columns: 216px 1fr;\n width: 834px;\n height: 100%;\n}\n.ycn-settings_loading {\n grid-template-columns: auto;\n}\n.ycn-settings__loader {\n align-self: center;\n justify-self: center;\n}\n.ycn-settings__not-found {\n display: grid;\n align-items: center;\n justify-items: center;\n height: 100%;\n}\n.ycn-settings__menu {\n border-right: 1px solid var(--yc-color-line-generic);\n}\n.ycn-settings__heading {\n font-size: var(--yc-text-subheader-2-font-size);\n line-height: var(--yc-text-subheader-2-line-height);\n font-weight: var(--yc-text-subheader-font-weight);\n margin: 20px 20px 0;\n}\n.ycn-settings__search {\n margin: 12px 20px 16px;\n}\n.ycn-settings__page {\n padding: 20px;\n overflow-y: auto;\n}\n.ycn-settings__section-heading {\n font-size: var(--yc-text-subheader-2-font-size);\n line-height: var(--yc-text-subheader-2-line-height);\n font-weight: var(--yc-text-subheader-font-weight);\n margin: 0;\n}\n.ycn-settings__section-item {\n margin-top: 24px;\n}\n.ycn-settings__section + .ycn-settings__section {\n margin-top: 32px;\n}\n.ycn-settings__item {\n display: grid;\n grid-template-columns: 216px 1fr;\n justify-items: start;\n}\n.ycn-settings__item_align_top {\n align-items: start;\n}\n.ycn-settings__item_align_center {\n align-items: center;\n}\n.ycn-settings__item-heading_badge {\n position: relative;\n}\n.ycn-settings__item-heading_badge::after {\n content: \"\";\n display: block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: var(--yc-color-text-danger);\n position: absolute;\n right: -8px;\n top: 1px;\n}\n.ycn-settings__found {\n font-weight: var(--yc-text-accent-font-weight);\n background: var(--yc-color-base-selection);\n}";
|
|
5014
|
+
styleInject(css_248z);
|
|
5015
|
+
|
|
5016
|
+
const b = block('settings');
|
|
5017
|
+
const defaultDict = {
|
|
5018
|
+
heading_settings: 'Settings',
|
|
5019
|
+
placeholder_search: 'Search settings',
|
|
5020
|
+
not_found: 'No results found',
|
|
5021
|
+
};
|
|
5022
|
+
function Settings(_a) {
|
|
5023
|
+
var { loading, renderLoading, children } = _a, props = __rest(_a, ["loading", "renderLoading", "children"]);
|
|
5024
|
+
if (loading) {
|
|
5025
|
+
return (React__default["default"].createElement("div", { className: b({ loading: true }) }, typeof renderLoading === 'function' ? (renderLoading()) : (React__default["default"].createElement(uikit.Loader, { className: b('loader'), size: "m" }))));
|
|
5026
|
+
}
|
|
5027
|
+
return React__default["default"].createElement(SettingsContent, Object.assign({}, props), children);
|
|
5028
|
+
}
|
|
5029
|
+
Settings.defaultProps = {
|
|
5030
|
+
dict: defaultDict,
|
|
5031
|
+
};
|
|
5032
|
+
function SettingsContent({ initialPage, onPageChange, children, renderNotFound, dict, }) {
|
|
5033
|
+
var _a, _b;
|
|
5034
|
+
const [search, setSearch] = React__default["default"].useState('');
|
|
5035
|
+
const { menu, pages } = getSettingsFromChildren(children, search);
|
|
5036
|
+
const pageKeys = Object.keys(pages);
|
|
5037
|
+
const [selectedPage, setCurrentPage] = React__default["default"].useState(initialPage && pageKeys.includes(initialPage) ? initialPage : undefined);
|
|
5038
|
+
const searchInputRef = React__default["default"].useRef(null);
|
|
5039
|
+
const menuRef = React__default["default"].useRef(null);
|
|
5040
|
+
React__default["default"].useEffect(() => {
|
|
5041
|
+
var _a;
|
|
5042
|
+
(_a = menuRef.current) === null || _a === void 0 ? void 0 : _a.clearFocus();
|
|
5043
|
+
}, [search]);
|
|
5044
|
+
React__default["default"].useEffect(() => {
|
|
5045
|
+
const handler = () => {
|
|
5046
|
+
var _a;
|
|
5047
|
+
(_a = menuRef.current) === null || _a === void 0 ? void 0 : _a.clearFocus();
|
|
5048
|
+
};
|
|
5049
|
+
window.addEventListener('click', handler);
|
|
5050
|
+
return () => {
|
|
5051
|
+
window.removeEventListener('click', handler);
|
|
5052
|
+
};
|
|
5053
|
+
}, []);
|
|
5054
|
+
let activePage = selectedPage;
|
|
5055
|
+
if (!activePage || ((_a = pages[activePage]) === null || _a === void 0 ? void 0 : _a.hidden)) {
|
|
5056
|
+
activePage = (_b = Object.values(pages).find(({ hidden }) => !hidden)) === null || _b === void 0 ? void 0 : _b.id;
|
|
5057
|
+
}
|
|
5058
|
+
const handlePageChange = (newPage) => {
|
|
5059
|
+
setCurrentPage((prevPage) => {
|
|
5060
|
+
if (prevPage !== newPage) {
|
|
5061
|
+
onPageChange === null || onPageChange === void 0 ? void 0 : onPageChange(newPage);
|
|
5062
|
+
}
|
|
5063
|
+
return newPage;
|
|
5064
|
+
});
|
|
5065
|
+
};
|
|
5066
|
+
React__default["default"].useEffect(() => {
|
|
5067
|
+
if (activePage !== selectedPage) {
|
|
5068
|
+
handlePageChange(activePage);
|
|
5069
|
+
}
|
|
5070
|
+
});
|
|
5071
|
+
const renderPageContent = () => {
|
|
5072
|
+
if (!activePage) {
|
|
5073
|
+
return typeof renderNotFound === 'function' ? (renderNotFound()) : (React__default["default"].createElement("div", { className: b('not-found') }, dict === null || dict === void 0 ? void 0 : dict.not_found));
|
|
5074
|
+
}
|
|
5075
|
+
return pages[activePage].sections
|
|
5076
|
+
.filter((section) => !section.hidden)
|
|
5077
|
+
.map((section) => (React__default["default"].createElement("div", { key: section.title, className: b('section') },
|
|
5078
|
+
React__default["default"].createElement("h3", { className: b('section-heading') }, section.title),
|
|
5079
|
+
section.header ? section.header : null,
|
|
5080
|
+
section.items.map(({ hidden, title, element }) => hidden ? null : (React__default["default"].createElement("div", { key: title, className: b('section-item') }, React__default["default"].cloneElement(element, Object.assign(Object.assign({}, element.props), { title: search && title ? prepareTitle(title, search) : title }))))))));
|
|
5081
|
+
};
|
|
5082
|
+
return (React__default["default"].createElement("div", { className: b() },
|
|
5083
|
+
React__default["default"].createElement("div", { className: b('menu'), onClick: () => {
|
|
5084
|
+
if (searchInputRef.current) {
|
|
5085
|
+
searchInputRef.current.focus();
|
|
5086
|
+
}
|
|
5087
|
+
}, onKeyDown: (event) => {
|
|
5088
|
+
if (menuRef.current) {
|
|
5089
|
+
if (menuRef.current.handleKeyDown(event)) {
|
|
5090
|
+
event.preventDefault();
|
|
5091
|
+
}
|
|
5092
|
+
}
|
|
5093
|
+
} },
|
|
5094
|
+
React__default["default"].createElement("h2", { className: b('heading') }, dict === null || dict === void 0 ? void 0 : dict.heading_settings),
|
|
5095
|
+
React__default["default"].createElement(SettingsSearch, { inputRef: searchInputRef, className: b('search'), onChange: setSearch, placeholder: dict === null || dict === void 0 ? void 0 : dict.placeholder_search }),
|
|
5096
|
+
React__default["default"].createElement(SettingsMenu, { ref: menuRef, items: menu, onChange: handlePageChange, activeItem: activePage })),
|
|
5097
|
+
React__default["default"].createElement("div", { className: b('page') }, renderPageContent())));
|
|
5098
|
+
}
|
|
5099
|
+
Settings.Group = function SettingsGroup({ children }) {
|
|
5100
|
+
return React__default["default"].createElement(React__default["default"].Fragment, null, children);
|
|
5101
|
+
};
|
|
5102
|
+
Settings.Page = function SettingsPage({ children }) {
|
|
5103
|
+
return React__default["default"].createElement(React__default["default"].Fragment, null, children);
|
|
5104
|
+
};
|
|
5105
|
+
Settings.Section = function SettingsSection({ children }) {
|
|
5106
|
+
return React__default["default"].createElement(React__default["default"].Fragment, null, children);
|
|
5107
|
+
};
|
|
5108
|
+
Settings.Item = function SettingsItem({ title, children, align = 'center', withBadge, renderTitleComponent = identity_1, }) {
|
|
5109
|
+
return (React__default["default"].createElement("div", { className: b('item', { align }) },
|
|
5110
|
+
React__default["default"].createElement("label", { className: b('item-heading', { badge: withBadge }) }, renderTitleComponent(title)),
|
|
5111
|
+
React__default["default"].createElement("div", null, children)));
|
|
5112
|
+
};
|
|
5113
|
+
function prepareTitle(string, search) {
|
|
5114
|
+
let temp = string.slice(0);
|
|
5115
|
+
const title = [];
|
|
5116
|
+
const parts = escapeStringForRegExp(search).split(' ').filter(Boolean);
|
|
5117
|
+
let key = 0;
|
|
5118
|
+
for (const part of parts) {
|
|
5119
|
+
const regex = new RegExp(part, 'ig');
|
|
5120
|
+
const match = regex.exec(temp);
|
|
5121
|
+
if (match) {
|
|
5122
|
+
const m = match[0];
|
|
5123
|
+
const i = match.index;
|
|
5124
|
+
if (i > 0) {
|
|
5125
|
+
title.push(temp.slice(0, i));
|
|
5126
|
+
}
|
|
5127
|
+
title.push(React__default["default"].createElement("strong", { key: key++, className: b('found') }, m));
|
|
5128
|
+
temp = temp.slice(i + m.length);
|
|
5129
|
+
}
|
|
5130
|
+
}
|
|
5131
|
+
if (temp) {
|
|
5132
|
+
title.push(temp);
|
|
5133
|
+
}
|
|
5134
|
+
return title;
|
|
5135
|
+
}
|
|
5136
|
+
|
|
5137
|
+
exports.ActionBar = PublicActionBar;
|
|
4143
5138
|
exports.AsideHeader = AsideHeader;
|
|
4144
5139
|
exports.Drawer = Drawer;
|
|
4145
5140
|
exports.DrawerItem = DrawerItem;
|
|
4146
5141
|
exports.FooterItem = FooterItem;
|
|
5142
|
+
exports.Settings = Settings;
|
|
4147
5143
|
//# sourceMappingURL=index.js.map
|