@gravity-ui/navigation 0.1.0 → 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 +16 -0
- package/build/cjs/{types/components → components}/ActionBar/ActionBar.d.ts +0 -0
- package/build/cjs/{types/components → components}/ActionBar/Group/ActionBarGroup.d.ts +0 -0
- package/build/cjs/{types/components → components}/ActionBar/Item/ActionBarItem.d.ts +0 -0
- package/build/cjs/{types/components → components}/ActionBar/Section/ActionBarSection.d.ts +0 -0
- package/build/cjs/{types/components → components}/ActionBar/Separator/ActionBarSeparator.d.ts +0 -0
- package/build/cjs/{types/components → components}/ActionBar/__stories__/ActionBar.stories.d.ts +0 -0
- package/build/cjs/{types/components → components}/ActionBar/__stories__/ActionBarShowcase.d.ts +0 -0
- package/build/cjs/{types/components → components}/ActionBar/index.d.ts +0 -0
- package/build/cjs/{types/components → components}/ActionBar/types.d.ts +0 -0
- package/build/{esm/types → cjs}/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/{types/components → components}/AsideHeader/__stories__/getAsideHeaderWrapper.d.ts +0 -0
- package/build/cjs/{types/components → components}/AsideHeader/__stories__/moc.d.ts +0 -0
- package/build/cjs/{types/components → components}/CompositeBar/CompositeBar.d.ts +1 -1
- 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/{types/components → components}/CompositeBar/utils.d.ts +0 -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/{esm/types → cjs}/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 +1 -0
- package/build/cjs/{types/components → components}/types.d.ts +0 -0
- 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 +1053 -141
- package/build/cjs/index.js.map +1 -1
- package/build/esm/{types/components → components}/ActionBar/ActionBar.d.ts +0 -0
- package/build/esm/{types/components → components}/ActionBar/Group/ActionBarGroup.d.ts +0 -0
- package/build/esm/{types/components → components}/ActionBar/Item/ActionBarItem.d.ts +0 -0
- package/build/esm/{types/components → components}/ActionBar/Section/ActionBarSection.d.ts +0 -0
- package/build/esm/{types/components → components}/ActionBar/Separator/ActionBarSeparator.d.ts +0 -0
- package/build/esm/{types/components → components}/ActionBar/__stories__/ActionBar.stories.d.ts +0 -0
- package/build/esm/{types/components → components}/ActionBar/__stories__/ActionBarShowcase.d.ts +0 -0
- package/build/esm/{types/components → components}/ActionBar/index.d.ts +0 -0
- package/build/esm/{types/components → components}/ActionBar/types.d.ts +0 -0
- package/build/{cjs/types → esm}/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/{types/components → components}/AsideHeader/__stories__/getAsideHeaderWrapper.d.ts +0 -0
- package/build/esm/{types/components → components}/AsideHeader/__stories__/moc.d.ts +0 -0
- package/build/esm/{types/components → components}/CompositeBar/CompositeBar.d.ts +1 -1
- 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/{types/components → components}/CompositeBar/utils.d.ts +0 -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/{cjs/types → esm}/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 +1 -0
- package/build/esm/{types/components → components}/types.d.ts +0 -0
- 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 +1054 -143
- package/build/esm/index.js.map +1 -1
- package/package.json +1 -1
package/build/cjs/index.js
CHANGED
|
@@ -114,48 +114,48 @@ function styleInject(css, ref) {
|
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
var css_248z$
|
|
118
|
-
styleInject(css_248z$
|
|
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
119
|
|
|
120
|
-
const b$
|
|
120
|
+
const b$e = block('action-bar-group');
|
|
121
121
|
const ActionBarGroup = ({ children, className, pull }) => {
|
|
122
|
-
return (React__default["default"].createElement("ul", { className: b$
|
|
122
|
+
return (React__default["default"].createElement("ul", { className: b$e({ pull }, className), role: "group" }, children));
|
|
123
123
|
};
|
|
124
124
|
ActionBarGroup.displayName = 'ActionBar.Group';
|
|
125
125
|
|
|
126
|
-
var css_248z$
|
|
127
|
-
styleInject(css_248z$
|
|
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
128
|
|
|
129
|
-
const b$
|
|
129
|
+
const b$d = block('action-bar-item');
|
|
130
130
|
const ActionBarItem = ({ children, className, pull, spacing = true }) => {
|
|
131
|
-
return React__default["default"].createElement("li", { className: b$
|
|
131
|
+
return React__default["default"].createElement("li", { className: b$d({ pull, spacing }, className) }, children);
|
|
132
132
|
};
|
|
133
133
|
ActionBarItem.displayName = 'ActionBar.Item';
|
|
134
134
|
|
|
135
|
-
var css_248z$
|
|
136
|
-
styleInject(css_248z$
|
|
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
137
|
|
|
138
|
-
const b$
|
|
138
|
+
const b$c = block('action-bar-section');
|
|
139
139
|
const ActionBarSection = ({ children, type = 'primary' }) => {
|
|
140
|
-
return React__default["default"].createElement("div", { className: b$
|
|
140
|
+
return React__default["default"].createElement("div", { className: b$c({ type }) }, children);
|
|
141
141
|
};
|
|
142
142
|
ActionBarSection.displayName = 'ActionBar.Section';
|
|
143
143
|
|
|
144
|
-
var css_248z$
|
|
145
|
-
styleInject(css_248z$
|
|
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
146
|
|
|
147
|
-
const b$
|
|
147
|
+
const b$b = block('action-bar-separator');
|
|
148
148
|
const ActionBarSeparator = () => {
|
|
149
|
-
return React__default["default"].createElement("li", { role: "separator", className: b$
|
|
149
|
+
return React__default["default"].createElement("li", { role: "separator", className: b$b() });
|
|
150
150
|
};
|
|
151
151
|
ActionBarSeparator.displayName = 'ActionBar.Separator';
|
|
152
152
|
|
|
153
|
-
var css_248z$
|
|
154
|
-
styleInject(css_248z$
|
|
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
155
|
|
|
156
|
-
const b$
|
|
156
|
+
const b$a = block('action-bar');
|
|
157
157
|
const ActionBar = ({ children, className, 'aria-label': ariaLabel }) => {
|
|
158
|
-
return (React__default["default"].createElement("section", { className: b$
|
|
158
|
+
return (React__default["default"].createElement("section", { className: b$a(null, className), "aria-label": ariaLabel }, children));
|
|
159
159
|
};
|
|
160
160
|
ActionBar.displayName = 'ActionBar';
|
|
161
161
|
const PublicActionBar = Object.assign(ActionBar, {
|
|
@@ -175,7 +175,7 @@ exports.Dict = void 0;
|
|
|
175
175
|
const ASIDE_HEADER_FOOTER_ICON_SIZE = 20;
|
|
176
176
|
const ASIDE_HEADER_COMPACT_WIDTH = 56;
|
|
177
177
|
const ASIDE_HEADER_EXPANDED_WIDTH = 236;
|
|
178
|
-
const defaultDict = {
|
|
178
|
+
const defaultDict$1 = {
|
|
179
179
|
[exports.Dict.CollapseButton]: 'Collapse',
|
|
180
180
|
[exports.Dict.ExpandButton]: 'Expand',
|
|
181
181
|
[exports.Dict.MoreButton]: 'More',
|
|
@@ -185,14 +185,12 @@ function _extends$4() {
|
|
|
185
185
|
_extends$4 = Object.assign ? Object.assign.bind() : function (target) {
|
|
186
186
|
for (var i = 1; i < arguments.length; i++) {
|
|
187
187
|
var source = arguments[i];
|
|
188
|
-
|
|
189
188
|
for (var key in source) {
|
|
190
189
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
191
190
|
target[key] = source[key];
|
|
192
191
|
}
|
|
193
192
|
}
|
|
194
193
|
}
|
|
195
|
-
|
|
196
194
|
return target;
|
|
197
195
|
};
|
|
198
196
|
return _extends$4.apply(this, arguments);
|
|
@@ -203,13 +201,11 @@ function _objectWithoutPropertiesLoose(source, excluded) {
|
|
|
203
201
|
var target = {};
|
|
204
202
|
var sourceKeys = Object.keys(source);
|
|
205
203
|
var key, i;
|
|
206
|
-
|
|
207
204
|
for (i = 0; i < sourceKeys.length; i++) {
|
|
208
205
|
key = sourceKeys[i];
|
|
209
206
|
if (excluded.indexOf(key) >= 0) continue;
|
|
210
207
|
target[key] = source[key];
|
|
211
208
|
}
|
|
212
|
-
|
|
213
209
|
return target;
|
|
214
210
|
}
|
|
215
211
|
|
|
@@ -1476,6 +1472,10 @@ var classNamesShape = process.env.NODE_ENV !== 'production' ? propTypes.exports.
|
|
|
1476
1472
|
|
|
1477
1473
|
var TransitionGroupContext = React__default["default"].createContext(null);
|
|
1478
1474
|
|
|
1475
|
+
var forceReflow = function forceReflow(node) {
|
|
1476
|
+
return node.scrollTop;
|
|
1477
|
+
};
|
|
1478
|
+
|
|
1479
1479
|
var UNMOUNTED = 'unmounted';
|
|
1480
1480
|
var EXITED = 'exited';
|
|
1481
1481
|
var ENTERING = 'entering';
|
|
@@ -1695,6 +1695,14 @@ var Transition = /*#__PURE__*/function (_React$Component) {
|
|
|
1695
1695
|
this.cancelNextCallback();
|
|
1696
1696
|
|
|
1697
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
|
+
|
|
1698
1706
|
this.performEnter(mounting);
|
|
1699
1707
|
} else {
|
|
1700
1708
|
this.performExit();
|
|
@@ -1887,7 +1895,10 @@ Transition.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
1887
1895
|
* [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).
|
|
1888
1896
|
*/
|
|
1889
1897
|
nodeRef: propTypes.exports.shape({
|
|
1890
|
-
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
|
+
}
|
|
1891
1902
|
}),
|
|
1892
1903
|
|
|
1893
1904
|
/**
|
|
@@ -2295,13 +2306,12 @@ var CSSTransition = /*#__PURE__*/function (_React$Component) {
|
|
|
2295
2306
|
|
|
2296
2307
|
if (type === 'appear' && phase === 'done' && doneClassName) {
|
|
2297
2308
|
className += " " + doneClassName;
|
|
2298
|
-
} // This is
|
|
2309
|
+
} // This is to force a repaint,
|
|
2299
2310
|
// which is necessary in order to transition styles when adding a class name.
|
|
2300
2311
|
|
|
2301
2312
|
|
|
2302
2313
|
if (phase === 'active') {
|
|
2303
|
-
|
|
2304
|
-
node && node.scrollTop;
|
|
2314
|
+
if (node) forceReflow(node);
|
|
2305
2315
|
}
|
|
2306
2316
|
|
|
2307
2317
|
if (className) {
|
|
@@ -2487,7 +2497,6 @@ function _assertThisInitialized(self) {
|
|
|
2487
2497
|
if (self === void 0) {
|
|
2488
2498
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
2489
2499
|
}
|
|
2490
|
-
|
|
2491
2500
|
return self;
|
|
2492
2501
|
}
|
|
2493
2502
|
|
|
@@ -3191,15 +3200,15 @@ SwitchTransition.defaultProps = {
|
|
|
3191
3200
|
mode: modes.out
|
|
3192
3201
|
};
|
|
3193
3202
|
|
|
3194
|
-
var css_248z$
|
|
3195
|
-
styleInject(css_248z$
|
|
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);
|
|
3196
3205
|
|
|
3197
|
-
const b$
|
|
3206
|
+
const b$9 = block('drawer');
|
|
3198
3207
|
const TIMEOUT = 300;
|
|
3199
3208
|
const DrawerItem = ({ visible, content, className }) => {
|
|
3200
3209
|
const itemRef = React__default["default"].useRef(null);
|
|
3201
|
-
return (React__default["default"].createElement(CSSTransition, { in: visible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$
|
|
3202
|
-
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)));
|
|
3203
3212
|
};
|
|
3204
3213
|
const Drawer = ({ className, children, style, onVeilClick, onEscape, preventScrollBody = true, }) => {
|
|
3205
3214
|
let someItemVisible = false;
|
|
@@ -3257,9 +3266,9 @@ const Drawer = ({ className, children, style, onVeilClick, onEscape, preventScro
|
|
|
3257
3266
|
const veilRef = React__default["default"].useRef(null);
|
|
3258
3267
|
return (React__default["default"].createElement(Transition, { in: someItemVisible, timeout: { enter: 0, exit: TIMEOUT }, mountOnEnter: true, unmountOnExit: true, nodeRef: containerRef }, (state) => {
|
|
3259
3268
|
const childrenVisible = someItemVisible && state === 'entered';
|
|
3260
|
-
return (React__default["default"].createElement("div", { ref: containerRef, className: b$
|
|
3261
|
-
React__default["default"].createElement(CSSTransition, { in: childrenVisible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$
|
|
3262
|
-
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 })),
|
|
3263
3272
|
React__default["default"].Children.map(children, (child) => {
|
|
3264
3273
|
const childElem = child;
|
|
3265
3274
|
if (childElem.type === DrawerItem) {
|
|
@@ -3271,10 +3280,10 @@ const Drawer = ({ className, children, style, onVeilClick, onEscape, preventScro
|
|
|
3271
3280
|
}));
|
|
3272
3281
|
};
|
|
3273
3282
|
|
|
3274
|
-
var css_248z$
|
|
3275
|
-
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);
|
|
3276
3285
|
|
|
3277
|
-
const b$
|
|
3286
|
+
const b$8 = block('logo');
|
|
3278
3287
|
const Logo = ({ text, compact, icon, iconSrc, iconClassName, iconSize = 24, textSize = 15, href = '/', wrapper, onClick, }) => {
|
|
3279
3288
|
const hasClickHandler = typeof onClick === 'function';
|
|
3280
3289
|
const hasWrapper = typeof wrapper === 'function';
|
|
@@ -3292,18 +3301,18 @@ const Logo = ({ text, compact, icon, iconSrc, iconClassName, iconSize = 24, text
|
|
|
3292
3301
|
else if (icon) {
|
|
3293
3302
|
buttonIcon = React__default["default"].createElement(uikit.Icon, { data: icon, size: iconSize, className: iconClassName });
|
|
3294
3303
|
}
|
|
3295
|
-
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));
|
|
3296
3305
|
let logo;
|
|
3297
3306
|
if (typeof text === 'function') {
|
|
3298
3307
|
logo = text();
|
|
3299
3308
|
}
|
|
3300
3309
|
else {
|
|
3301
|
-
logo = (React__default["default"].createElement("div", { className: b$
|
|
3310
|
+
logo = (React__default["default"].createElement("div", { className: b$8('logo'), style: { fontSize: textSize } }, text));
|
|
3302
3311
|
}
|
|
3303
|
-
return (React__default["default"].createElement("div", { className: b$
|
|
3304
|
-
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),
|
|
3305
3314
|
!compact &&
|
|
3306
|
-
(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)))));
|
|
3307
3316
|
};
|
|
3308
3317
|
|
|
3309
3318
|
var classCallCheck = function (instance, Constructor) {
|
|
@@ -3835,10 +3844,10 @@ function getItemsMinHeight(items) {
|
|
|
3835
3844
|
(pinnedItems.length === items.length ? 0 : ITEM_HEIGHT));
|
|
3836
3845
|
}
|
|
3837
3846
|
|
|
3838
|
-
var css_248z$
|
|
3839
|
-
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);
|
|
3840
3849
|
|
|
3841
|
-
const b$
|
|
3850
|
+
const b$7 = block('item-tooltip');
|
|
3842
3851
|
const popupPlacement = ['right'];
|
|
3843
3852
|
const ItemTooltip = ({ anchor, text }) => {
|
|
3844
3853
|
const anchorRef = React__default["default"].useRef(anchor);
|
|
@@ -3848,28 +3857,28 @@ const ItemTooltip = ({ anchor, text }) => {
|
|
|
3848
3857
|
if (!anchor) {
|
|
3849
3858
|
return null;
|
|
3850
3859
|
}
|
|
3851
|
-
return (React__default["default"].createElement(uikit.Popup, { className: b$
|
|
3852
|
-
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)));
|
|
3853
3862
|
};
|
|
3854
3863
|
|
|
3855
|
-
var css_248z$
|
|
3856
|
-
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);
|
|
3857
3866
|
|
|
3858
|
-
const b$
|
|
3867
|
+
const b$6 = block('composite-bar-item');
|
|
3859
3868
|
function renderItemTitle(item) {
|
|
3860
|
-
let titleNode = React__default["default"].createElement("div", { className: b$
|
|
3869
|
+
let titleNode = React__default["default"].createElement("div", { className: b$6('title-text') }, item.title);
|
|
3861
3870
|
if (item.rightAdornment) {
|
|
3862
3871
|
titleNode = (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
3863
3872
|
titleNode,
|
|
3864
|
-
React__default["default"].createElement("div", { className: b$
|
|
3873
|
+
React__default["default"].createElement("div", { className: b$6('title-adornment') }, item.rightAdornment)));
|
|
3865
3874
|
}
|
|
3866
3875
|
return titleNode;
|
|
3867
3876
|
}
|
|
3868
3877
|
const defaultPopupPlacement = ['right-end'];
|
|
3869
3878
|
const defaultPopupOffset = [-20, 8];
|
|
3870
|
-
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, }) => {
|
|
3871
3880
|
if (item.type === 'divider') {
|
|
3872
|
-
return React__default["default"].createElement("div", { className: b$
|
|
3881
|
+
return React__default["default"].createElement("div", { className: b$6('menu-divider') });
|
|
3873
3882
|
}
|
|
3874
3883
|
const [tooltipAnchor, setTooltipAnchor] = React__default["default"].useState(null);
|
|
3875
3884
|
const [open, toggleOpen] = React__default["default"].useState(false);
|
|
@@ -3890,14 +3899,19 @@ const Item = ({ item, compact, className, collapseItems, onMouseLeave, onMouseEn
|
|
|
3890
3899
|
}
|
|
3891
3900
|
onClosePopup === null || onClosePopup === void 0 ? void 0 : onClosePopup();
|
|
3892
3901
|
}, [onClosePopup]);
|
|
3893
|
-
const node = (React__default["default"].createElement("div", { className: b$
|
|
3894
|
-
if (typeof item.onItemClick === 'function') {
|
|
3895
|
-
item.onItemClick(item, false);
|
|
3896
|
-
}
|
|
3902
|
+
const node = (React__default["default"].createElement("div", { className: b$6({ type, current, compact }, className), ref: ref, onClick: () => {
|
|
3897
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
|
+
*/
|
|
3898
3909
|
toggleOpen(!open);
|
|
3899
3910
|
setTooltipAnchor(null);
|
|
3900
3911
|
}
|
|
3912
|
+
else {
|
|
3913
|
+
onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item, false);
|
|
3914
|
+
}
|
|
3901
3915
|
}, onMouseEnter: () => {
|
|
3902
3916
|
if (!compact) {
|
|
3903
3917
|
onMouseEnter === null || onMouseEnter === void 0 ? void 0 : onMouseEnter();
|
|
@@ -3907,7 +3921,7 @@ const Item = ({ item, compact, className, collapseItems, onMouseLeave, onMouseEn
|
|
|
3907
3921
|
onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave();
|
|
3908
3922
|
}
|
|
3909
3923
|
} },
|
|
3910
|
-
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,
|
|
3911
3925
|
React__default["default"].createElement("div", { onMouseEnter: (event) => {
|
|
3912
3926
|
if (!open) {
|
|
3913
3927
|
setTooltipAnchor(event.currentTarget);
|
|
@@ -3916,51 +3930,47 @@ const Item = ({ item, compact, className, collapseItems, onMouseLeave, onMouseEn
|
|
|
3916
3930
|
}, onMouseLeave: () => {
|
|
3917
3931
|
setTooltipAnchor(null);
|
|
3918
3932
|
onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave();
|
|
3919
|
-
}, className: b$
|
|
3920
|
-
enableTooltip && React__default["default"].createElement(ItemTooltip, { anchor: tooltipAnchor, text: tooltipText }))) : (icon && React__default["default"].createElement(uikit.Icon, { data: icon, size: iconSize, className: b$
|
|
3921
|
-
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)),
|
|
3922
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) },
|
|
3923
|
-
React__default["default"].createElement("div", { className: b$
|
|
3924
|
-
React__default["default"].createElement(uikit.List, { itemClassName: b$
|
|
3925
|
-
const collapseNode = (React__default["default"].createElement("div", { className: b$
|
|
3926
|
-
|
|
3927
|
-
collapseItem.onItemClick(collapseItem, true);
|
|
3928
|
-
}
|
|
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);
|
|
3929
3941
|
} }, renderItemTitle(collapseItem)));
|
|
3930
3942
|
if (typeof collapseItem.itemWrapper === 'function') {
|
|
3931
3943
|
return collapseItem.itemWrapper(collapseNode, collapseItem, true, compact);
|
|
3932
3944
|
}
|
|
3933
|
-
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);
|
|
3934
3946
|
} })))),
|
|
3935
|
-
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()))));
|
|
3936
3948
|
if (typeof item.itemWrapper === 'function') {
|
|
3937
3949
|
return item.itemWrapper(node, item, false, compact);
|
|
3938
3950
|
}
|
|
3939
|
-
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);
|
|
3940
3952
|
};
|
|
3941
3953
|
Item.displayName = 'Item';
|
|
3942
3954
|
|
|
3943
3955
|
var _path$2;
|
|
3944
|
-
|
|
3945
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); }
|
|
3946
|
-
|
|
3947
3957
|
var SvgDots = function SvgDots(props) {
|
|
3948
3958
|
return /*#__PURE__*/React__namespace.createElement("svg", _extends$2({
|
|
3949
3959
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3950
3960
|
width: 16,
|
|
3951
|
-
height: 16
|
|
3952
|
-
role: "img"
|
|
3961
|
+
height: 16
|
|
3953
3962
|
}, props), _path$2 || (_path$2 = /*#__PURE__*/React__namespace.createElement("path", {
|
|
3954
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",
|
|
3955
3964
|
fill: "currentColor",
|
|
3956
3965
|
fillRule: "evenodd"
|
|
3957
3966
|
})));
|
|
3958
3967
|
};
|
|
3968
|
+
var dotsIcon = SvgDots;
|
|
3959
3969
|
|
|
3960
|
-
var css_248z$
|
|
3961
|
-
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);
|
|
3962
3972
|
|
|
3963
|
-
const b$
|
|
3973
|
+
const b$5 = block('composite-bar');
|
|
3964
3974
|
class CompositeBar extends React__default["default"].Component {
|
|
3965
3975
|
constructor() {
|
|
3966
3976
|
super(...arguments);
|
|
@@ -3975,10 +3985,10 @@ class CompositeBar extends React__default["default"].Component {
|
|
|
3975
3985
|
return null;
|
|
3976
3986
|
}
|
|
3977
3987
|
if (!enableCollapsing) {
|
|
3978
|
-
return React__default["default"].createElement("div", { className: b$
|
|
3988
|
+
return React__default["default"].createElement("div", { className: b$5() }, this.renderMenu());
|
|
3979
3989
|
}
|
|
3980
3990
|
const minHeight = getItemsMinHeight(items);
|
|
3981
|
-
return (React__default["default"].createElement("div", { className: b$
|
|
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 }) => {
|
|
3982
3992
|
const style = {
|
|
3983
3993
|
width,
|
|
3984
3994
|
height,
|
|
@@ -3989,30 +3999,30 @@ class CompositeBar extends React__default["default"].Component {
|
|
|
3989
3999
|
renderAutosizeMenu(height) {
|
|
3990
4000
|
const { compact, onItemClick } = this.props;
|
|
3991
4001
|
const { listItems, collapseItems } = this.getAutosizeListItems(height);
|
|
3992
|
-
return (React__default["default"].createElement(uikit.List, { ref: this.listRef, items: listItems, selectedItemIndex: getSelectedItemIndex(listItems), itemHeight: getItemHeight, itemClassName: b$
|
|
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: () => {
|
|
3993
4003
|
var _a;
|
|
3994
4004
|
if (compact) {
|
|
3995
4005
|
(_a = this.listRef.current) === null || _a === void 0 ? void 0 : _a.activateItem(undefined);
|
|
3996
4006
|
}
|
|
3997
|
-
}, compact: compact, collapseItems: collapseItems })) }));
|
|
4007
|
+
}, compact: compact, collapseItems: collapseItems, onItemClick: onItemClick })) }));
|
|
3998
4008
|
}
|
|
3999
4009
|
renderMenu() {
|
|
4000
4010
|
const { items, onItemClick, compact } = this.props;
|
|
4001
|
-
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: () => {
|
|
4002
4012
|
var _a;
|
|
4003
4013
|
if (compact) {
|
|
4004
4014
|
(_a = this.listRef.current) === null || _a === void 0 ? void 0 : _a.activateItem(undefined);
|
|
4005
4015
|
}
|
|
4006
|
-
}, compact: compact })) }));
|
|
4016
|
+
}, compact: compact, onItemClick: onItemClick })) }));
|
|
4007
4017
|
}
|
|
4008
4018
|
getMoreButtonItem() {
|
|
4009
4019
|
var _a;
|
|
4010
4020
|
const { dict } = this.props;
|
|
4011
|
-
const title = (_a = dict === null || dict === void 0 ? void 0 : dict[exports.Dict.MoreButton]) !== null && _a !== void 0 ? _a : defaultDict[exports.Dict.MoreButton];
|
|
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];
|
|
4012
4022
|
return {
|
|
4013
4023
|
id: COLLAPSE_ITEM_ID,
|
|
4014
4024
|
title,
|
|
4015
|
-
icon:
|
|
4025
|
+
icon: dotsIcon,
|
|
4016
4026
|
iconSize: 16,
|
|
4017
4027
|
};
|
|
4018
4028
|
}
|
|
@@ -4068,70 +4078,64 @@ const Content = ({ size, className, renderContent }) => {
|
|
|
4068
4078
|
};
|
|
4069
4079
|
|
|
4070
4080
|
var _path$1;
|
|
4071
|
-
|
|
4072
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); }
|
|
4073
|
-
|
|
4074
4082
|
var SvgControlMenuButton = function SvgControlMenuButton(props) {
|
|
4075
4083
|
return /*#__PURE__*/React__namespace.createElement("svg", _extends$1({
|
|
4076
4084
|
width: 8,
|
|
4077
4085
|
height: 8,
|
|
4078
4086
|
fill: "currentColor",
|
|
4079
|
-
xmlns: "http://www.w3.org/2000/svg"
|
|
4080
|
-
role: "img"
|
|
4087
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
4081
4088
|
}, props), _path$1 || (_path$1 = /*#__PURE__*/React__namespace.createElement("path", {
|
|
4082
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"
|
|
4083
4090
|
})));
|
|
4084
4091
|
};
|
|
4092
|
+
var controlMenuButtonIcon = SvgControlMenuButton;
|
|
4085
4093
|
|
|
4086
4094
|
var _path;
|
|
4087
|
-
|
|
4088
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); }
|
|
4089
|
-
|
|
4090
4096
|
var SvgDividerCollapsed = function SvgDividerCollapsed(props) {
|
|
4091
4097
|
return /*#__PURE__*/React__namespace.createElement("svg", _extends({
|
|
4092
4098
|
width: 56,
|
|
4093
4099
|
height: 29,
|
|
4094
4100
|
fill: "currentColor",
|
|
4095
|
-
xmlns: "http://www.w3.org/2000/svg"
|
|
4096
|
-
role: "img"
|
|
4101
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
4097
4102
|
}, props), _path || (_path = /*#__PURE__*/React__namespace.createElement("path", {
|
|
4098
4103
|
d: "M56 0v29c-.8-1-7-6.1-17.7-8.4L13 15.7A16 16 0 0 1 0 0Z"
|
|
4099
4104
|
})));
|
|
4100
4105
|
};
|
|
4106
|
+
var headerDividerCollapsedIcon = SvgDividerCollapsed;
|
|
4101
4107
|
|
|
4102
|
-
var css_248z$
|
|
4103
|
-
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);
|
|
4104
4110
|
|
|
4105
|
-
const b$
|
|
4111
|
+
const b$4 = block('aside-header');
|
|
4106
4112
|
class AsideHeader extends React__default["default"].Component {
|
|
4107
|
-
constructor(
|
|
4108
|
-
super(
|
|
4113
|
+
constructor() {
|
|
4114
|
+
super(...arguments);
|
|
4109
4115
|
this.asideRef = React__default["default"].createRef();
|
|
4110
4116
|
this.renderFirstPane = (size) => {
|
|
4111
|
-
const { dict, menuItems, panelItems } = this.props;
|
|
4112
|
-
|
|
4113
|
-
|
|
4114
|
-
|
|
4115
|
-
React__default["default"].createElement("div", { className: b$
|
|
4116
|
-
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') },
|
|
4117
4122
|
this.renderHeader(),
|
|
4118
|
-
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 }),
|
|
4119
4124
|
this.renderFooter(size),
|
|
4120
4125
|
this.renderCollapseButton())),
|
|
4121
4126
|
panelItems && this.renderPanels(size)));
|
|
4122
4127
|
};
|
|
4123
4128
|
this.renderSecondPane = (size) => {
|
|
4124
|
-
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') }));
|
|
4125
4130
|
};
|
|
4126
4131
|
this.renderLogo = () => React__default["default"].createElement(Logo, Object.assign({}, this.props.logo, { compact: this.props.compact }));
|
|
4127
|
-
this.renderHeader = () => (React__default["default"].createElement("div", { className: b$
|
|
4132
|
+
this.renderHeader = () => (React__default["default"].createElement("div", { className: b$4('header') },
|
|
4128
4133
|
this.renderLogo(),
|
|
4129
|
-
React__default["default"].createElement(CompositeBar, { items: this.props.subheaderItems, compact: this.props.compact, enableCollapsing: false }),
|
|
4130
|
-
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" })));
|
|
4131
4136
|
this.renderFooter = (size) => {
|
|
4132
|
-
|
|
4133
|
-
|
|
4134
|
-
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({
|
|
4135
4139
|
size,
|
|
4136
4140
|
compact,
|
|
4137
4141
|
asideRef: this.asideRef,
|
|
@@ -4139,44 +4143,34 @@ class AsideHeader extends React__default["default"].Component {
|
|
|
4139
4143
|
};
|
|
4140
4144
|
this.renderPanels = (size) => {
|
|
4141
4145
|
const { panelItems } = this.props;
|
|
4142
|
-
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))))));
|
|
4143
4147
|
};
|
|
4144
4148
|
this.renderCollapseButton = () => {
|
|
4145
4149
|
var _a;
|
|
4146
4150
|
const { compact, dict } = this.props;
|
|
4147
4151
|
const typeButton = compact ? exports.Dict.ExpandButton : exports.Dict.CollapseButton;
|
|
4148
|
-
return (React__default["default"].createElement(uikit.Button, { className: b$
|
|
4149
|
-
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" })));
|
|
4150
4154
|
};
|
|
4151
4155
|
this.onCollapseButtonClick = () => {
|
|
4152
4156
|
var _a, _b;
|
|
4153
|
-
|
|
4154
|
-
this.setState({ compact: newCompact });
|
|
4155
|
-
(_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);
|
|
4156
4158
|
};
|
|
4157
4159
|
this.onCloseDrawer = () => {
|
|
4158
4160
|
var _a, _b;
|
|
4159
4161
|
(_b = (_a = this.props).onClosePanel) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
4160
4162
|
};
|
|
4161
|
-
this.
|
|
4162
|
-
var _a, _b;
|
|
4163
|
+
this.onItemClick = (item, collapsed) => {
|
|
4164
|
+
var _a, _b, _c;
|
|
4163
4165
|
(_b = (_a = this.props).onClosePanel) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
4164
|
-
|
|
4165
|
-
this.state = {
|
|
4166
|
-
compact: Boolean(props.compact),
|
|
4166
|
+
(_c = item.onItemClick) === null || _c === void 0 ? void 0 : _c.call(item, item, collapsed);
|
|
4167
4167
|
};
|
|
4168
4168
|
}
|
|
4169
|
-
componentDidUpdate(prevProps) {
|
|
4170
|
-
if (prevProps.compact !== this.props.compact) {
|
|
4171
|
-
this.setState({ compact: Boolean(this.props.compact) });
|
|
4172
|
-
}
|
|
4173
|
-
}
|
|
4174
4169
|
render() {
|
|
4175
|
-
const { className } = this.props;
|
|
4176
|
-
const { compact } = this.state;
|
|
4170
|
+
const { className, compact } = this.props;
|
|
4177
4171
|
const size = compact ? ASIDE_HEADER_COMPACT_WIDTH : ASIDE_HEADER_EXPANDED_WIDTH;
|
|
4178
|
-
return (React__default["default"].createElement("div", { className: b$
|
|
4179
|
-
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') },
|
|
4180
4174
|
this.renderFirstPane(size),
|
|
4181
4175
|
this.renderSecondPane(size))));
|
|
4182
4176
|
}
|
|
@@ -4214,18 +4208,936 @@ function __rest(s, e) {
|
|
|
4214
4208
|
return t;
|
|
4215
4209
|
}
|
|
4216
4210
|
|
|
4217
|
-
var css_248z = ".ycn-footer-item {\n width: 100%;\n height: 40px;\n}";
|
|
4218
|
-
styleInject(css_248z);
|
|
4211
|
+
var css_248z$2 = ".ycn-footer-item {\n width: 100%;\n height: 40px;\n}";
|
|
4212
|
+
styleInject(css_248z$2);
|
|
4219
4213
|
|
|
4220
|
-
const b = block('footer-item');
|
|
4214
|
+
const b$3 = block('footer-item');
|
|
4221
4215
|
const FooterItem = (_a) => {
|
|
4222
4216
|
var { item } = _a, props = __rest(_a, ["item"]);
|
|
4223
|
-
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 })));
|
|
4218
|
+
};
|
|
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)));
|
|
4224
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
|
+
}
|
|
4225
5136
|
|
|
4226
5137
|
exports.ActionBar = PublicActionBar;
|
|
4227
5138
|
exports.AsideHeader = AsideHeader;
|
|
4228
5139
|
exports.Drawer = Drawer;
|
|
4229
5140
|
exports.DrawerItem = DrawerItem;
|
|
4230
5141
|
exports.FooterItem = FooterItem;
|
|
5142
|
+
exports.Settings = Settings;
|
|
4231
5143
|
//# sourceMappingURL=index.js.map
|