@semcore/dropdown-menu 2.3.10 → 3.0.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 +20 -0
- package/lib/cjs/DropdownMenu.js +29 -70
- package/lib/cjs/DropdownMenu.js.map +1 -1
- package/lib/cjs/index.d.ts +110 -0
- package/lib/cjs/index.js +2 -19
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/style/dropdown-menu.shadow.css +9 -19
- package/lib/es6/DropdownMenu.js +28 -67
- package/lib/es6/DropdownMenu.js.map +1 -1
- package/lib/es6/index.d.ts +110 -0
- package/lib/es6/index.js +0 -1
- package/lib/es6/index.js.map +1 -1
- package/lib/es6/style/dropdown-menu.shadow.css +9 -19
- package/lib/types/index.d.ts +0 -11
- package/package.json +7 -3
- package/src/DropdownMenu.jsx +2 -38
- package/src/index.d.ts +0 -11
- package/src/index.js +0 -1
- package/src/style/dropdown-menu.shadow.css +9 -19
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
CHANGELOG.md standards are inspired by [keepachangelog.com](https://keepachangelog.com/en/1.0.0/).
|
|
4
4
|
|
|
5
|
+
## [3.0.0] - 2022-05-17
|
|
6
|
+
|
|
7
|
+
### BREAK
|
|
8
|
+
|
|
9
|
+
- Updated styles according to the library redesign policy.
|
|
10
|
+
- Removed deprecated props `onSelect, optionCount, triggerType`.
|
|
11
|
+
- Removed value "xl" for "size".
|
|
12
|
+
|
|
13
|
+
## [2.3.12] - 2022-04-25
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- Version patch update due to children dependencies update (`@semcore/scroll-area` [3.7.0 ~> 3.7.1]).
|
|
18
|
+
|
|
19
|
+
## [2.3.11] - 2022-04-21
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- Version patch update due to children dependencies update (`@semcore/scroll-area` [3.6.4 ~> 3.7.0]).
|
|
24
|
+
|
|
5
25
|
## [2.3.10] - 2022-03-14
|
|
6
26
|
|
|
7
27
|
### Changed
|
package/lib/cjs/DropdownMenu.js
CHANGED
|
@@ -11,10 +11,10 @@ exports["default"] = void 0;
|
|
|
11
11
|
|
|
12
12
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
13
|
|
|
14
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
-
|
|
16
14
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
17
15
|
|
|
16
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
17
|
+
|
|
18
18
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
19
19
|
|
|
20
20
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
@@ -41,11 +41,8 @@ var _flexBox = require("@semcore/flex-box");
|
|
|
41
41
|
|
|
42
42
|
var _scrollArea = _interopRequireDefault(require("@semcore/scroll-area"));
|
|
43
43
|
|
|
44
|
-
var
|
|
45
|
-
|
|
46
|
-
var _excluded = ["Children", "optionCount", "triggerType", "onSelect"],
|
|
47
|
-
_excluded2 = ["className"],
|
|
48
|
-
_excluded3 = ["className"];
|
|
44
|
+
var _excluded = ["className"],
|
|
45
|
+
_excluded2 = ["className"];
|
|
49
46
|
|
|
50
47
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
51
48
|
|
|
@@ -64,24 +61,23 @@ var style = (
|
|
|
64
61
|
/*__reshadow_css_start__*/
|
|
65
62
|
_core.sstyled.insert(
|
|
66
63
|
/*__inner_css_start__*/
|
|
67
|
-
".
|
|
64
|
+
".___SDropdownMenuList_wus9c_gg_{max-height:240px;margin:4px 0;padding:0;position:relative;min-height:26px;min-width:32px}.___SDropdownMenuItem_wus9c_gg_{display:flex;align-items:center;position:relative;text-decoration:none;box-sizing:border-box;cursor:pointer;width:100%;text-align:left;line-height:normal}.___SDropdownMenuItem_wus9c_gg_:hover{background-color:#f4f5f9}.___SDropdownMenuItem_wus9c_gg_:focus{outline:none}.___SDropdownMenuItem_wus9c_gg_.__highlighted_wus9c_gg_{z-index:1;box-shadow:0 0 0 3px rgba(0, 143, 248, 0.2) inset}.___SDropdownMenuItem_wus9c_gg_.__selected_wus9c_gg_{background-color:rgba(196,229,254,.7)}.___SDropdownMenuItem_wus9c_gg_.__selected_wus9c_gg_:hover{background-color:#c4e5fe}.___SDropdownMenuItem_wus9c_gg_.__disabled_wus9c_gg_{opacity:0.3;cursor:default;pointer-events:none}.___SDropdownMenuItem_wus9c_gg_._size_l_wus9c_gg_{font-size:16px;line-height:1.5;padding:8px 12px;min-height:40px}.___SDropdownMenuItem_wus9c_gg_._size_m_wus9c_gg_{font-size:14px;line-height:1.42;padding:6px 8px;min-height:32px}.___SDropdownMenuItem_wus9c_gg_.__notInteractive_wus9c_gg_{cursor:default}.___SDropdownMenuItem_wus9c_gg_.__notInteractive_wus9c_gg_:hover{background:none}.___SDropdownMenuItem_wus9c_gg_._variant_hint_wus9c_gg_{color:#6c6e79;cursor:default}.___SDropdownMenuItem_wus9c_gg_._variant_hint_wus9c_gg_:hover{background:none}.___SDropdownMenuItem_wus9c_gg_._variant_title_wus9c_gg_{font-weight:700;cursor:default}.___SDropdownMenuItem_wus9c_gg_._variant_title_wus9c_gg_:hover{background:none}.___SDropdownMenuItemAddon_wus9c_gg_{display:inline-flex;margin-left:8px;margin-right:8px}.___SDropdownMenuItemAddon_wus9c_gg_:first-child{margin-left:0}.___SDropdownMenuItemAddon_wus9c_gg_:last-child{margin-right:0}.___SPopper_wus9c_gg_:focus{box-shadow:0 0 0 3px rgba(0, 143, 248, 0.2)}"
|
|
68
65
|
/*__inner_css_end__*/
|
|
69
|
-
, "
|
|
66
|
+
, "1c6qqff_gg_")
|
|
70
67
|
/*__reshadow_css_end__*/
|
|
71
68
|
, {
|
|
72
|
-
"__SDropdownMenuList": "
|
|
73
|
-
"__SDropdownMenuItem": "
|
|
74
|
-
"_highlighted": "
|
|
75
|
-
"_selected": "
|
|
76
|
-
"_disabled": "
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"__SPopper": "___SPopper_1sdvk_gg_"
|
|
69
|
+
"__SDropdownMenuList": "___SDropdownMenuList_wus9c_gg_",
|
|
70
|
+
"__SDropdownMenuItem": "___SDropdownMenuItem_wus9c_gg_",
|
|
71
|
+
"_highlighted": "__highlighted_wus9c_gg_",
|
|
72
|
+
"_selected": "__selected_wus9c_gg_",
|
|
73
|
+
"_disabled": "__disabled_wus9c_gg_",
|
|
74
|
+
"_size_l": "_size_l_wus9c_gg_",
|
|
75
|
+
"_size_m": "_size_m_wus9c_gg_",
|
|
76
|
+
"_notInteractive": "__notInteractive_wus9c_gg_",
|
|
77
|
+
"_variant_hint": "_variant_hint_wus9c_gg_",
|
|
78
|
+
"_variant_title": "_variant_title_wus9c_gg_",
|
|
79
|
+
"__SDropdownMenuItemAddon": "___SDropdownMenuItemAddon_wus9c_gg_",
|
|
80
|
+
"__SPopper": "___SPopper_wus9c_gg_"
|
|
85
81
|
});
|
|
86
82
|
var KEYS = ['ArrowDown', 'ArrowUp', 'Enter', ' '];
|
|
87
83
|
var INTERACTION_TAGS = ['INPUT', 'TEXTAREA'];
|
|
@@ -129,20 +125,6 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
|
|
|
129
125
|
break;
|
|
130
126
|
}
|
|
131
127
|
});
|
|
132
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "bindHandlerFallbackSelect", function (props, index) {
|
|
133
|
-
return function () {
|
|
134
|
-
var _this$asProps = _this.asProps,
|
|
135
|
-
onSelect = _this$asProps.onSelect,
|
|
136
|
-
multiselect = _this$asProps.multiselect;
|
|
137
|
-
var result = onSelect(_objectSpread({
|
|
138
|
-
index: index
|
|
139
|
-
}, props));
|
|
140
|
-
|
|
141
|
-
if (!multiselect && result !== false) {
|
|
142
|
-
_this.handlers.visible(false);
|
|
143
|
-
}
|
|
144
|
-
};
|
|
145
|
-
});
|
|
146
128
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "scrollToNode", function (node) {
|
|
147
129
|
_this._highlightedItem = node;
|
|
148
130
|
|
|
@@ -195,17 +177,12 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
|
|
|
195
177
|
}, {
|
|
196
178
|
key: "getItemProps",
|
|
197
179
|
value: function getItemProps(props, index) {
|
|
198
|
-
var _this$
|
|
199
|
-
size = _this$
|
|
200
|
-
highlightedIndex = _this$
|
|
201
|
-
onSelect = _this$asProps2.onSelect;
|
|
180
|
+
var _this$asProps = this.asProps,
|
|
181
|
+
size = _this$asProps.size,
|
|
182
|
+
highlightedIndex = _this$asProps.highlightedIndex;
|
|
202
183
|
var highlighted = index === highlightedIndex;
|
|
203
184
|
var extraProps = {};
|
|
204
185
|
|
|
205
|
-
if (onSelect !== undefined) {
|
|
206
|
-
extraProps.onClick = this.bindHandlerFallbackSelect(props, index);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
186
|
this._items.push(props);
|
|
210
187
|
|
|
211
188
|
if (highlighted) {
|
|
@@ -279,27 +256,10 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
|
|
|
279
256
|
}, {
|
|
280
257
|
key: "render",
|
|
281
258
|
value: function render() {
|
|
282
|
-
var _ref = this
|
|
283
|
-
|
|
284
|
-
var _this$asProps3 = this.asProps,
|
|
285
|
-
Children = _this$asProps3.Children,
|
|
286
|
-
optionCount = _this$asProps3.optionCount,
|
|
287
|
-
triggerType = _this$asProps3.triggerType,
|
|
288
|
-
onSelect = _this$asProps3.onSelect,
|
|
289
|
-
other = (0, _objectWithoutProperties2["default"])(_this$asProps3, _excluded);
|
|
259
|
+
var _ref = this.asProps;
|
|
260
|
+
var Children = this.asProps.Children;
|
|
290
261
|
var props = {};
|
|
291
262
|
this._items = [];
|
|
292
|
-
|
|
293
|
-
_logger["default"].warn(onSelect !== undefined, "Property 'onSelect' is deprecated, subscribe to the 'onClick' of the needed 'Item'", other['data-ui-name'] || DropdownMenu.displayName);
|
|
294
|
-
|
|
295
|
-
_logger["default"].warn(optionCount !== undefined, "The 'optionCount' property is deprecated and is now automatically determined from the number of Item", other['data-ui-name'] || DropdownMenu.displayName);
|
|
296
|
-
|
|
297
|
-
_logger["default"].warn(triggerType !== undefined, "The 'triggerType' property is deprecated, use 'interaction=\"focus\"'", other['data-ui-name'] || DropdownMenu.displayName);
|
|
298
|
-
|
|
299
|
-
if (triggerType === 'input') {
|
|
300
|
-
props.interaction = 'focus';
|
|
301
|
-
}
|
|
302
|
-
|
|
303
263
|
return /*#__PURE__*/_react["default"].createElement(_dropdown["default"], (0, _core.assignProps)(_objectSpread({}, props), _ref), /*#__PURE__*/_react["default"].createElement(Children, null));
|
|
304
264
|
}
|
|
305
265
|
}]);
|
|
@@ -315,7 +275,7 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
|
|
|
315
275
|
});
|
|
316
276
|
|
|
317
277
|
function List(props) {
|
|
318
|
-
var _ref2 =
|
|
278
|
+
var _ref2 = arguments[0],
|
|
319
279
|
_ref6;
|
|
320
280
|
|
|
321
281
|
var SDropdownMenuList = _flexBox.Box;
|
|
@@ -326,8 +286,7 @@ function List(props) {
|
|
|
326
286
|
}
|
|
327
287
|
|
|
328
288
|
function Menu() {
|
|
329
|
-
var _ref3 =
|
|
330
|
-
|
|
289
|
+
var _ref3 = arguments[0];
|
|
331
290
|
return /*#__PURE__*/_react["default"].createElement(DropdownMenu.Popper, null, /*#__PURE__*/_react["default"].createElement(DropdownMenu.List, (0, _core.assignProps)({}, _ref3)));
|
|
332
291
|
}
|
|
333
292
|
|
|
@@ -337,7 +296,7 @@ function Item(props) {
|
|
|
337
296
|
SDropdownMenuItem = _useFlex2[0],
|
|
338
297
|
_useFlex2$ = _useFlex2[1],
|
|
339
298
|
className = _useFlex2$.className,
|
|
340
|
-
other = (0, _objectWithoutProperties2["default"])(_useFlex2$,
|
|
299
|
+
other = (0, _objectWithoutProperties2["default"])(_useFlex2$, _excluded);
|
|
341
300
|
|
|
342
301
|
var styles = (0, _core.sstyled)(props.styles);
|
|
343
302
|
return /*#__PURE__*/_react["default"].createElement(SDropdownMenuItem, (0, _extends2["default"])({
|
|
@@ -355,7 +314,7 @@ function Addon(props) {
|
|
|
355
314
|
SDropdownMenuItemAddon = _useBox2[0],
|
|
356
315
|
_useBox2$ = _useBox2[1],
|
|
357
316
|
className = _useBox2$.className,
|
|
358
|
-
other = (0, _objectWithoutProperties2["default"])(_useBox2$,
|
|
317
|
+
other = (0, _objectWithoutProperties2["default"])(_useBox2$, _excluded2);
|
|
359
318
|
|
|
360
319
|
var styles = (0, _core.sstyled)(props.styles);
|
|
361
320
|
return /*#__PURE__*/_react["default"].createElement(SDropdownMenuItemAddon, (0, _extends2["default"])({
|
|
@@ -364,7 +323,7 @@ function Addon(props) {
|
|
|
364
323
|
}
|
|
365
324
|
|
|
366
325
|
function Hint(props) {
|
|
367
|
-
var _ref4 =
|
|
326
|
+
var _ref4 = arguments[0],
|
|
368
327
|
_ref7;
|
|
369
328
|
|
|
370
329
|
var SDropdownMenuItem = _flexBox.Flex;
|
|
@@ -374,7 +333,7 @@ function Hint(props) {
|
|
|
374
333
|
}
|
|
375
334
|
|
|
376
335
|
function Title(props) {
|
|
377
|
-
var _ref5 =
|
|
336
|
+
var _ref5 = arguments[0],
|
|
378
337
|
_ref8;
|
|
379
338
|
|
|
380
339
|
var SDropdownMenuItem = _flexBox.Flex;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/DropdownMenu.jsx"],"names":["KEYS","INTERACTION_TAGS","DropdownMenuRoot","e","amount","shiftKey","key","includes","target","tagName","preventDefault","handlers","visible","moveHighlightedIndex","_highlightedItem","click","props","index","asProps","onSelect","multiselect","result","node","scrollIntoView","highlightedIndex","prevHighlightedIndex","block","inline","size","onKeyDown","handlerKeyDown","tabIndex","highlighted","extraProps","undefined","onClick","bindHandlerFallbackSelect","_items","push","ref","scrollToNode","itemsLastIndex","length","selectedIndex","findIndex","item","selected","newIndex","disabled","Children","optionCount","triggerType","other","logger","warn","DropdownMenu","displayName","interaction","Dropdown","Component","style","defaultVisible","defaultHighlightedIndex","List","SDropdownMenuList","Box","styles","ScrollAreaComponent","Menu","Item","forwardRef","SDropdownMenuItem","className","cn","Addon","SDropdownMenuItemAddon","Hint","Flex","Title","Trigger","Popper","ItemTitle","ItemHint","parent"],"mappings":"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","sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport createComponent, { Component, sstyled, Root } from '@semcore/core';\nimport Dropdown from '@semcore/dropdown';\nimport { Box, Flex, useBox, useFlex } from '@semcore/flex-box';\nimport ScrollAreaComponent from '@semcore/scroll-area';\nimport logger from '@semcore/utils/lib/logger';\n\nimport style from './style/dropdown-menu.shadow.css';\n\nconst KEYS = ['ArrowDown', 'ArrowUp', 'Enter', ' '];\nconst INTERACTION_TAGS = ['INPUT', 'TEXTAREA'];\n\nclass DropdownMenuRoot extends Component {\n static displayName = 'DropdownMenu';\n static style = style;\n\n static defaultProps = {\n size: 'm',\n defaultVisible: false,\n defaultHighlightedIndex: null,\n };\n\n _items = [];\n\n _highlightedItem = null;\n\n prevHighlightedIndex = null;\n\n uncontrolledProps() {\n return {\n highlightedIndex: null,\n visible: null,\n };\n }\n\n handlerKeyDown = (e) => {\n const amount = e.shiftKey ? 5 : 1;\n\n if (e.key === ' ' && INTERACTION_TAGS.includes(e.target.tagName)) return;\n if (!KEYS.includes(e.key)) return;\n\n e.preventDefault();\n\n this.handlers.visible(true);\n\n switch (e.key) {\n case 'ArrowDown':\n this.moveHighlightedIndex(amount, e);\n break;\n case 'ArrowUp':\n this.moveHighlightedIndex(-amount, e);\n break;\n case ' ':\n case 'Enter':\n if (this._highlightedItem) this._highlightedItem.click();\n break;\n }\n };\n\n bindHandlerFallbackSelect = (props, index) => () => {\n const { onSelect, multiselect } = this.asProps;\n const result = onSelect({\n index,\n ...props,\n });\n\n if (!multiselect && result !== false) {\n this.handlers.visible(false);\n }\n };\n\n getTriggerProps() {\n const { size } = this.asProps;\n return {\n size,\n onKeyDown: this.handlerKeyDown,\n };\n }\n\n getListProps() {\n const { size } = this.asProps;\n return {\n size,\n };\n }\n\n getPopperProps() {\n return {\n tabIndex: 0,\n onKeyDown: this.handlerKeyDown,\n };\n }\n\n getItemProps(props, index) {\n const { size, highlightedIndex, onSelect } = this.asProps;\n const highlighted = index === highlightedIndex;\n const extraProps = {};\n\n if (onSelect !== undefined) {\n extraProps.onClick = this.bindHandlerFallbackSelect(props, index);\n }\n\n this._items.push(props);\n if (highlighted) {\n extraProps.ref = this.scrollToNode;\n }\n\n return {\n size,\n highlighted,\n ...extraProps,\n };\n }\n\n getItemHintProps() {\n const { size } = this.asProps;\n return {\n size,\n };\n }\n\n getItemTitleProps() {\n const { size } = this.asProps;\n return {\n size,\n };\n }\n\n scrollToNode = (node) => {\n this._highlightedItem = node;\n if (node && node.scrollIntoView) {\n if (this.asProps.highlightedIndex !== this.prevHighlightedIndex) {\n this.prevHighlightedIndex = this.asProps.highlightedIndex;\n node.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n };\n\n moveHighlightedIndex(amount, e) {\n let { highlightedIndex } = this.asProps;\n const itemsLastIndex = this._items.length - 1;\n const selectedIndex = this._items.findIndex((item) => item.selected);\n\n if (itemsLastIndex < 0) return;\n\n if (highlightedIndex == null) {\n if (selectedIndex !== -1) {\n highlightedIndex = selectedIndex;\n } else {\n highlightedIndex = amount < 0 ? 0 : itemsLastIndex;\n }\n }\n\n let newIndex = highlightedIndex + amount;\n if (newIndex < 0) {\n newIndex = amount + itemsLastIndex + 1;\n } else if (newIndex > itemsLastIndex) {\n newIndex = newIndex - itemsLastIndex - 1;\n }\n\n if (this._items[newIndex] && this._items[newIndex].disabled) {\n this.moveHighlightedIndex(amount < 0 ? amount - 1 : amount + 1, e);\n } else {\n this.handlers.highlightedIndex(newIndex, e);\n }\n }\n\n componentDidUpdate() {\n const { visible } = this.asProps;\n\n if (!visible) {\n this.handlers.highlightedIndex(null);\n }\n }\n\n render() {\n const { Children, optionCount, triggerType, onSelect, ...other } = this.asProps;\n const props = {};\n\n this._items = [];\n\n logger.warn(\n onSelect !== undefined,\n \"Property 'onSelect' is deprecated, subscribe to the 'onClick' of the needed 'Item'\",\n other['data-ui-name'] || DropdownMenu.displayName,\n );\n logger.warn(\n optionCount !== undefined,\n \"The 'optionCount' property is deprecated and is now automatically determined from the number of Item\",\n other['data-ui-name'] || DropdownMenu.displayName,\n );\n logger.warn(\n triggerType !== undefined,\n \"The 'triggerType' property is deprecated, use 'interaction=\\\"focus\\\"'\",\n other['data-ui-name'] || DropdownMenu.displayName,\n );\n if (triggerType === 'input') {\n props.interaction = 'focus';\n }\n\n return (\n <Root render={Dropdown} {...props}>\n <Children />\n </Root>\n );\n }\n}\n\nfunction List(props) {\n const SDropdownMenuList = Root;\n return sstyled(props.styles)(\n <SDropdownMenuList render={Box} tag={ScrollAreaComponent} role=\"menu\" />,\n );\n}\n\nfunction Menu() {\n return (\n <DropdownMenu.Popper>\n <Root render={DropdownMenu.List} />\n </DropdownMenu.Popper>\n );\n}\n\nfunction Item(props) {\n const [SDropdownMenuItem, { className, ...other }] = useFlex(props, props.forwardRef);\n const styles = sstyled(props.styles);\n return (\n <SDropdownMenuItem\n role=\"menuitem\"\n tabIndex={-1}\n className={\n cn(\n styles.cn('SDropdownMenuItem', {\n ...props,\n highlighted: !props.disabled && props.highlighted,\n }).className,\n className,\n ) || undefined\n }\n {...other}\n />\n );\n}\n\nfunction Addon(props) {\n const [SDropdownMenuItemAddon, { className, ...other }] = useBox(props, props.forwardRef);\n const styles = sstyled(props.styles);\n return (\n <SDropdownMenuItemAddon\n className={cn(styles.cn('SDropdownMenuItemAddon', props).className, className) || undefined}\n {...other}\n />\n );\n}\n\nfunction Hint(props) {\n const SDropdownMenuItem = Root;\n return sstyled(props.styles)(<SDropdownMenuItem render={Flex} variant=\"hint\" />);\n}\n\nfunction Title(props) {\n const SDropdownMenuItem = Root;\n return sstyled(props.styles)(<SDropdownMenuItem render={Flex} variant=\"title\" />);\n}\n\nconst DropdownMenu = createComponent(\n DropdownMenuRoot,\n {\n Trigger: Dropdown.Trigger,\n Popper: Dropdown.Popper,\n List,\n Menu,\n Item: [Item, { Addon }],\n ItemTitle: Title,\n ItemHint: Hint,\n },\n {\n parent: [Dropdown],\n },\n);\n\nexport default DropdownMenu;\n"],"file":"DropdownMenu.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/DropdownMenu.jsx"],"names":["KEYS","INTERACTION_TAGS","DropdownMenuRoot","e","amount","shiftKey","key","includes","target","tagName","preventDefault","handlers","visible","moveHighlightedIndex","_highlightedItem","click","node","scrollIntoView","asProps","highlightedIndex","prevHighlightedIndex","block","inline","size","onKeyDown","handlerKeyDown","tabIndex","props","index","highlighted","extraProps","_items","push","ref","scrollToNode","itemsLastIndex","length","selectedIndex","findIndex","item","selected","newIndex","disabled","Children","Dropdown","Component","style","defaultVisible","defaultHighlightedIndex","List","SDropdownMenuList","Box","styles","ScrollAreaComponent","Menu","DropdownMenu","Item","forwardRef","SDropdownMenuItem","className","other","cn","undefined","Addon","SDropdownMenuItemAddon","Hint","Flex","Title","Trigger","Popper","ItemTitle","ItemHint","parent"],"mappings":"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","sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport createComponent, { Component, sstyled, Root } from '@semcore/core';\nimport Dropdown from '@semcore/dropdown';\nimport { Box, Flex, useBox, useFlex } from '@semcore/flex-box';\nimport ScrollAreaComponent from '@semcore/scroll-area';\n\nimport style from './style/dropdown-menu.shadow.css';\n\nconst KEYS = ['ArrowDown', 'ArrowUp', 'Enter', ' '];\nconst INTERACTION_TAGS = ['INPUT', 'TEXTAREA'];\n\nclass DropdownMenuRoot extends Component {\n static displayName = 'DropdownMenu';\n static style = style;\n\n static defaultProps = {\n size: 'm',\n defaultVisible: false,\n defaultHighlightedIndex: null,\n };\n\n _items = [];\n\n _highlightedItem = null;\n\n prevHighlightedIndex = null;\n\n uncontrolledProps() {\n return {\n highlightedIndex: null,\n visible: null,\n };\n }\n\n handlerKeyDown = (e) => {\n const amount = e.shiftKey ? 5 : 1;\n\n if (e.key === ' ' && INTERACTION_TAGS.includes(e.target.tagName)) return;\n if (!KEYS.includes(e.key)) return;\n\n e.preventDefault();\n\n this.handlers.visible(true);\n\n switch (e.key) {\n case 'ArrowDown':\n this.moveHighlightedIndex(amount, e);\n break;\n case 'ArrowUp':\n this.moveHighlightedIndex(-amount, e);\n break;\n case ' ':\n case 'Enter':\n if (this._highlightedItem) this._highlightedItem.click();\n break;\n }\n };\n\n getTriggerProps() {\n const { size } = this.asProps;\n return {\n size,\n onKeyDown: this.handlerKeyDown,\n };\n }\n\n getListProps() {\n const { size } = this.asProps;\n return {\n size,\n };\n }\n\n getPopperProps() {\n return {\n tabIndex: 0,\n onKeyDown: this.handlerKeyDown,\n };\n }\n\n getItemProps(props, index) {\n const { size, highlightedIndex } = this.asProps;\n const highlighted = index === highlightedIndex;\n const extraProps = {};\n\n this._items.push(props);\n if (highlighted) {\n extraProps.ref = this.scrollToNode;\n }\n\n return {\n size,\n highlighted,\n ...extraProps,\n };\n }\n\n getItemHintProps() {\n const { size } = this.asProps;\n return {\n size,\n };\n }\n\n getItemTitleProps() {\n const { size } = this.asProps;\n return {\n size,\n };\n }\n\n scrollToNode = (node) => {\n this._highlightedItem = node;\n if (node && node.scrollIntoView) {\n if (this.asProps.highlightedIndex !== this.prevHighlightedIndex) {\n this.prevHighlightedIndex = this.asProps.highlightedIndex;\n node.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n };\n\n moveHighlightedIndex(amount, e) {\n let { highlightedIndex } = this.asProps;\n const itemsLastIndex = this._items.length - 1;\n const selectedIndex = this._items.findIndex((item) => item.selected);\n\n if (itemsLastIndex < 0) return;\n\n if (highlightedIndex == null) {\n if (selectedIndex !== -1) {\n highlightedIndex = selectedIndex;\n } else {\n highlightedIndex = amount < 0 ? 0 : itemsLastIndex;\n }\n }\n\n let newIndex = highlightedIndex + amount;\n if (newIndex < 0) {\n newIndex = amount + itemsLastIndex + 1;\n } else if (newIndex > itemsLastIndex) {\n newIndex = newIndex - itemsLastIndex - 1;\n }\n\n if (this._items[newIndex] && this._items[newIndex].disabled) {\n this.moveHighlightedIndex(amount < 0 ? amount - 1 : amount + 1, e);\n } else {\n this.handlers.highlightedIndex(newIndex, e);\n }\n }\n\n componentDidUpdate() {\n const { visible } = this.asProps;\n\n if (!visible) {\n this.handlers.highlightedIndex(null);\n }\n }\n\n render() {\n const { Children } = this.asProps;\n const props = {};\n\n this._items = [];\n\n return (\n <Root render={Dropdown} {...props}>\n <Children />\n </Root>\n );\n }\n}\n\nfunction List(props) {\n const SDropdownMenuList = Root;\n return sstyled(props.styles)(\n <SDropdownMenuList render={Box} tag={ScrollAreaComponent} role=\"menu\" />,\n );\n}\n\nfunction Menu() {\n return (\n <DropdownMenu.Popper>\n <Root render={DropdownMenu.List} />\n </DropdownMenu.Popper>\n );\n}\n\nfunction Item(props) {\n const [SDropdownMenuItem, { className, ...other }] = useFlex(props, props.forwardRef);\n const styles = sstyled(props.styles);\n return (\n <SDropdownMenuItem\n role=\"menuitem\"\n tabIndex={-1}\n className={\n cn(\n styles.cn('SDropdownMenuItem', {\n ...props,\n highlighted: !props.disabled && props.highlighted,\n }).className,\n className,\n ) || undefined\n }\n {...other}\n />\n );\n}\n\nfunction Addon(props) {\n const [SDropdownMenuItemAddon, { className, ...other }] = useBox(props, props.forwardRef);\n const styles = sstyled(props.styles);\n return (\n <SDropdownMenuItemAddon\n className={cn(styles.cn('SDropdownMenuItemAddon', props).className, className) || undefined}\n {...other}\n />\n );\n}\n\nfunction Hint(props) {\n const SDropdownMenuItem = Root;\n return sstyled(props.styles)(<SDropdownMenuItem render={Flex} variant=\"hint\" />);\n}\n\nfunction Title(props) {\n const SDropdownMenuItem = Root;\n return sstyled(props.styles)(<SDropdownMenuItem render={Flex} variant=\"title\" />);\n}\n\nconst DropdownMenu = createComponent(\n DropdownMenuRoot,\n {\n Trigger: Dropdown.Trigger,\n Popper: Dropdown.Popper,\n List,\n Menu,\n Item: [Item, { Addon }],\n ItemTitle: Title,\n ItemHint: Hint,\n },\n {\n parent: [Dropdown],\n },\n);\n\nexport default DropdownMenu;\n"],"file":"DropdownMenu.js"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { CProps, PropGetterFn, ReturnEl } from '@semcore/core';
|
|
2
|
+
import Dropdown, { IDropdownContext, IDropdownProps, IDropdownHandlers } from '@semcore/dropdown';
|
|
3
|
+
import { Box, IBoxProps, IFlexProps } from '@semcore/flex-box';
|
|
4
|
+
import { IScrollAreaProps } from '@semcore/scroll-area';
|
|
5
|
+
|
|
6
|
+
export type DropdownMenuSize = 'm' | 'l' | 'xl';
|
|
7
|
+
|
|
8
|
+
export interface IDropdownMenuProps extends IDropdownProps {
|
|
9
|
+
/**
|
|
10
|
+
* Size of the menu
|
|
11
|
+
* @default m
|
|
12
|
+
*/
|
|
13
|
+
size?: DropdownMenuSize;
|
|
14
|
+
/**
|
|
15
|
+
* Index of the element selected by default
|
|
16
|
+
*/
|
|
17
|
+
defaultHighlightedIndex?: number;
|
|
18
|
+
/**
|
|
19
|
+
* Index of the selected item
|
|
20
|
+
*/
|
|
21
|
+
highlightedIndex?: number;
|
|
22
|
+
/**
|
|
23
|
+
* Callback for highlightedIndex change
|
|
24
|
+
* highlightedIndex - Index of the selected item
|
|
25
|
+
*/
|
|
26
|
+
onHighlightedIndexChange?: (highlightedIndex: number) => void;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface IDropdownMenuListProps extends IBoxProps, IScrollAreaProps {
|
|
30
|
+
/**
|
|
31
|
+
* Size of the menu
|
|
32
|
+
* @default m
|
|
33
|
+
*/
|
|
34
|
+
size?: DropdownMenuSize;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface IDropdownMenuMenuProps extends IDropdownMenuListProps {}
|
|
38
|
+
|
|
39
|
+
export interface IDropdownMenuItemProps extends IFlexProps {
|
|
40
|
+
/**
|
|
41
|
+
* Enables selected state
|
|
42
|
+
*/
|
|
43
|
+
selected?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Disables the component
|
|
46
|
+
*/
|
|
47
|
+
disabled?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Adds focus styles around
|
|
50
|
+
*/
|
|
51
|
+
highlighted?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Makes the element non-interactive
|
|
54
|
+
*/
|
|
55
|
+
notInteractive?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Size of the component
|
|
58
|
+
* @default m
|
|
59
|
+
*/
|
|
60
|
+
size?: DropdownMenuSize;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface IDropdownMenuItemHintProps extends IFlexProps {
|
|
64
|
+
/**
|
|
65
|
+
* Size of the component
|
|
66
|
+
* @default m
|
|
67
|
+
*/
|
|
68
|
+
size?: DropdownMenuSize;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface IDropdownMenuItemTitleProps extends IFlexProps {
|
|
72
|
+
/**
|
|
73
|
+
* Size of the component
|
|
74
|
+
* @default m
|
|
75
|
+
*/
|
|
76
|
+
size?: DropdownMenuSize;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export interface IDropdownMenuContext extends IDropdownContext {
|
|
80
|
+
getListProps: PropGetterFn;
|
|
81
|
+
getItemProps: PropGetterFn;
|
|
82
|
+
getItemHintProps: PropGetterFn;
|
|
83
|
+
getItemTitleProps: PropGetterFn;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export interface IDropdownMenuHandlers extends IDropdownHandlers {
|
|
87
|
+
highlightedIndex: (index: number) => void;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
declare const DropdownMenu: (<T>(
|
|
91
|
+
props: CProps<IDropdownMenuProps & T, IDropdownMenuContext, IDropdownMenuHandlers>,
|
|
92
|
+
) => ReturnEl) & {
|
|
93
|
+
Trigger: typeof Dropdown.Trigger;
|
|
94
|
+
Popper: typeof Dropdown.Popper;
|
|
95
|
+
List: <T>(
|
|
96
|
+
props: CProps<IDropdownMenuListProps & T, IDropdownMenuContext, IDropdownMenuHandlers>,
|
|
97
|
+
) => ReturnEl;
|
|
98
|
+
Menu: <T>(
|
|
99
|
+
props: CProps<IDropdownMenuMenuProps & T, IDropdownMenuContext, IDropdownMenuHandlers>,
|
|
100
|
+
) => ReturnEl;
|
|
101
|
+
Item: (<T>(
|
|
102
|
+
props: CProps<IDropdownMenuItemProps & T, IDropdownMenuContext, IDropdownMenuHandlers>,
|
|
103
|
+
) => ReturnEl) & {
|
|
104
|
+
Addon: typeof Box;
|
|
105
|
+
};
|
|
106
|
+
ItemTitle: <T>(props: IDropdownMenuItemTitleProps & T) => ReturnEl;
|
|
107
|
+
ItemHint: <T>(props: IDropdownMenuItemHintProps & T) => ReturnEl;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
export default DropdownMenu;
|
package/lib/cjs/index.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
var _exportNames = {};
|
|
9
8
|
Object.defineProperty(exports, "default", {
|
|
10
9
|
enumerable: true,
|
|
11
10
|
get: function get() {
|
|
@@ -13,21 +12,5 @@ Object.defineProperty(exports, "default", {
|
|
|
13
12
|
}
|
|
14
13
|
});
|
|
15
14
|
|
|
16
|
-
var _DropdownMenu =
|
|
17
|
-
|
|
18
|
-
Object.keys(_DropdownMenu).forEach(function (key) {
|
|
19
|
-
if (key === "default" || key === "__esModule") return;
|
|
20
|
-
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
21
|
-
if (key in exports && exports[key] === _DropdownMenu[key]) return;
|
|
22
|
-
Object.defineProperty(exports, key, {
|
|
23
|
-
enumerable: true,
|
|
24
|
-
get: function get() {
|
|
25
|
-
return _DropdownMenu[key];
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
31
|
-
|
|
32
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
15
|
+
var _DropdownMenu = _interopRequireDefault(require("./DropdownMenu"));
|
|
33
16
|
//# sourceMappingURL=index.js.map
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA","sourcesContent":["export { default } from './DropdownMenu';\n"],"file":"index.js"}
|
|
@@ -21,7 +21,7 @@ SDropdownMenuItem {
|
|
|
21
21
|
line-height: normal;
|
|
22
22
|
|
|
23
23
|
&:hover {
|
|
24
|
-
background-color:
|
|
24
|
+
background-color: var(--gray-50);
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
&:focus {
|
|
@@ -31,14 +31,14 @@ SDropdownMenuItem {
|
|
|
31
31
|
|
|
32
32
|
SDropdownMenuItem[highlighted] {
|
|
33
33
|
z-index: 1;
|
|
34
|
-
box-shadow: var(--
|
|
34
|
+
box-shadow: var(--keyboard-focus) inset;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
SDropdownMenuItem[selected] {
|
|
38
|
-
background-color: color-mod(var(--
|
|
38
|
+
background-color: color-mod(var(--blue-100) a(70%));
|
|
39
39
|
|
|
40
40
|
&:hover {
|
|
41
|
-
background-color:
|
|
41
|
+
background-color: var(--blue-100);
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
@@ -48,30 +48,20 @@ SDropdownMenuItem[disabled] {
|
|
|
48
48
|
pointer-events: none;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
SDropdownMenuItem[size='
|
|
51
|
+
SDropdownMenuItem[size='l'] {
|
|
52
52
|
font-size: var(--fs-300);
|
|
53
53
|
line-height: var(--lh-300);
|
|
54
|
-
|
|
55
54
|
padding: 8px 12px;
|
|
56
|
-
min-height:
|
|
55
|
+
min-height: 40px;
|
|
57
56
|
}
|
|
58
57
|
|
|
59
|
-
SDropdownMenuItem[size='
|
|
58
|
+
SDropdownMenuItem[size='m'] {
|
|
60
59
|
font-size: var(--fs-200);
|
|
61
60
|
line-height: var(--lh-200);
|
|
62
|
-
|
|
63
61
|
padding: 6px 8px;
|
|
64
62
|
min-height: 32px;
|
|
65
63
|
}
|
|
66
64
|
|
|
67
|
-
SDropdownMenuItem[size='m'] {
|
|
68
|
-
font-size: var(--fs-100);
|
|
69
|
-
line-height: var(--lh-100);
|
|
70
|
-
|
|
71
|
-
padding: 4px 8px;
|
|
72
|
-
min-height: 26px;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
65
|
SDropdownMenuItem[notInteractive] {
|
|
76
66
|
cursor: default;
|
|
77
67
|
|
|
@@ -81,7 +71,7 @@ SDropdownMenuItem[notInteractive] {
|
|
|
81
71
|
}
|
|
82
72
|
|
|
83
73
|
SDropdownMenuItem[variant='hint'] {
|
|
84
|
-
color: var(--
|
|
74
|
+
color: var(--gray-500);
|
|
85
75
|
cursor: default;
|
|
86
76
|
|
|
87
77
|
&:hover {
|
|
@@ -114,6 +104,6 @@ SDropdownMenuItemAddon {
|
|
|
114
104
|
|
|
115
105
|
SPopper {
|
|
116
106
|
&:focus {
|
|
117
|
-
box-shadow: var(--
|
|
107
|
+
box-shadow: var(--keyboard-focus);
|
|
118
108
|
}
|
|
119
109
|
}
|
package/lib/es6/DropdownMenu.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
-
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
2
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
3
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
4
4
|
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
5
5
|
import _createClass from "@babel/runtime/helpers/createClass";
|
|
6
6
|
import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
|
|
@@ -14,9 +14,8 @@ import { assignProps as _assignProps4 } from "@semcore/core";
|
|
|
14
14
|
import { assignProps as _assignProps3 } from "@semcore/core";
|
|
15
15
|
import { assignProps as _assignProps2 } from "@semcore/core";
|
|
16
16
|
import { assignProps as _assignProps } from "@semcore/core";
|
|
17
|
-
var _excluded = ["
|
|
18
|
-
_excluded2 = ["className"]
|
|
19
|
-
_excluded3 = ["className"];
|
|
17
|
+
var _excluded = ["className"],
|
|
18
|
+
_excluded2 = ["className"];
|
|
20
19
|
|
|
21
20
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
22
21
|
|
|
@@ -32,31 +31,29 @@ import createComponent, { Component, sstyled, Root } from '@semcore/core';
|
|
|
32
31
|
import Dropdown from '@semcore/dropdown';
|
|
33
32
|
import { Box, Flex, useBox, useFlex } from '@semcore/flex-box';
|
|
34
33
|
import ScrollAreaComponent from '@semcore/scroll-area';
|
|
35
|
-
import logger from '@semcore/utils/lib/logger';
|
|
36
34
|
|
|
37
35
|
/*__reshadow-styles__:"./style/dropdown-menu.shadow.css"*/
|
|
38
36
|
var style = (
|
|
39
37
|
/*__reshadow_css_start__*/
|
|
40
38
|
_sstyled.insert(
|
|
41
39
|
/*__inner_css_start__*/
|
|
42
|
-
".
|
|
40
|
+
".___SDropdownMenuList_wus9c_gg_{max-height:240px;margin:4px 0;padding:0;position:relative;min-height:26px;min-width:32px}.___SDropdownMenuItem_wus9c_gg_{display:flex;align-items:center;position:relative;text-decoration:none;box-sizing:border-box;cursor:pointer;width:100%;text-align:left;line-height:normal}.___SDropdownMenuItem_wus9c_gg_:hover{background-color:#f4f5f9}.___SDropdownMenuItem_wus9c_gg_:focus{outline:none}.___SDropdownMenuItem_wus9c_gg_.__highlighted_wus9c_gg_{z-index:1;box-shadow:0 0 0 3px rgba(0, 143, 248, 0.2) inset}.___SDropdownMenuItem_wus9c_gg_.__selected_wus9c_gg_{background-color:rgba(196,229,254,.7)}.___SDropdownMenuItem_wus9c_gg_.__selected_wus9c_gg_:hover{background-color:#c4e5fe}.___SDropdownMenuItem_wus9c_gg_.__disabled_wus9c_gg_{opacity:0.3;cursor:default;pointer-events:none}.___SDropdownMenuItem_wus9c_gg_._size_l_wus9c_gg_{font-size:16px;line-height:1.5;padding:8px 12px;min-height:40px}.___SDropdownMenuItem_wus9c_gg_._size_m_wus9c_gg_{font-size:14px;line-height:1.42;padding:6px 8px;min-height:32px}.___SDropdownMenuItem_wus9c_gg_.__notInteractive_wus9c_gg_{cursor:default}.___SDropdownMenuItem_wus9c_gg_.__notInteractive_wus9c_gg_:hover{background:none}.___SDropdownMenuItem_wus9c_gg_._variant_hint_wus9c_gg_{color:#6c6e79;cursor:default}.___SDropdownMenuItem_wus9c_gg_._variant_hint_wus9c_gg_:hover{background:none}.___SDropdownMenuItem_wus9c_gg_._variant_title_wus9c_gg_{font-weight:700;cursor:default}.___SDropdownMenuItem_wus9c_gg_._variant_title_wus9c_gg_:hover{background:none}.___SDropdownMenuItemAddon_wus9c_gg_{display:inline-flex;margin-left:8px;margin-right:8px}.___SDropdownMenuItemAddon_wus9c_gg_:first-child{margin-left:0}.___SDropdownMenuItemAddon_wus9c_gg_:last-child{margin-right:0}.___SPopper_wus9c_gg_:focus{box-shadow:0 0 0 3px rgba(0, 143, 248, 0.2)}"
|
|
43
41
|
/*__inner_css_end__*/
|
|
44
|
-
, "
|
|
42
|
+
, "1c6qqff_gg_")
|
|
45
43
|
/*__reshadow_css_end__*/
|
|
46
44
|
, {
|
|
47
|
-
"__SDropdownMenuList": "
|
|
48
|
-
"__SDropdownMenuItem": "
|
|
49
|
-
"_highlighted": "
|
|
50
|
-
"_selected": "
|
|
51
|
-
"_disabled": "
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"__SPopper": "___SPopper_1sdvk_gg_"
|
|
45
|
+
"__SDropdownMenuList": "___SDropdownMenuList_wus9c_gg_",
|
|
46
|
+
"__SDropdownMenuItem": "___SDropdownMenuItem_wus9c_gg_",
|
|
47
|
+
"_highlighted": "__highlighted_wus9c_gg_",
|
|
48
|
+
"_selected": "__selected_wus9c_gg_",
|
|
49
|
+
"_disabled": "__disabled_wus9c_gg_",
|
|
50
|
+
"_size_l": "_size_l_wus9c_gg_",
|
|
51
|
+
"_size_m": "_size_m_wus9c_gg_",
|
|
52
|
+
"_notInteractive": "__notInteractive_wus9c_gg_",
|
|
53
|
+
"_variant_hint": "_variant_hint_wus9c_gg_",
|
|
54
|
+
"_variant_title": "_variant_title_wus9c_gg_",
|
|
55
|
+
"__SDropdownMenuItemAddon": "___SDropdownMenuItemAddon_wus9c_gg_",
|
|
56
|
+
"__SPopper": "___SPopper_wus9c_gg_"
|
|
60
57
|
});
|
|
61
58
|
var KEYS = ['ArrowDown', 'ArrowUp', 'Enter', ' '];
|
|
62
59
|
var INTERACTION_TAGS = ['INPUT', 'TEXTAREA'];
|
|
@@ -109,21 +106,6 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
|
|
|
109
106
|
}
|
|
110
107
|
});
|
|
111
108
|
|
|
112
|
-
_defineProperty(_assertThisInitialized(_this), "bindHandlerFallbackSelect", function (props, index) {
|
|
113
|
-
return function () {
|
|
114
|
-
var _this$asProps = _this.asProps,
|
|
115
|
-
onSelect = _this$asProps.onSelect,
|
|
116
|
-
multiselect = _this$asProps.multiselect;
|
|
117
|
-
var result = onSelect(_objectSpread({
|
|
118
|
-
index: index
|
|
119
|
-
}, props));
|
|
120
|
-
|
|
121
|
-
if (!multiselect && result !== false) {
|
|
122
|
-
_this.handlers.visible(false);
|
|
123
|
-
}
|
|
124
|
-
};
|
|
125
|
-
});
|
|
126
|
-
|
|
127
109
|
_defineProperty(_assertThisInitialized(_this), "scrollToNode", function (node) {
|
|
128
110
|
_this._highlightedItem = node;
|
|
129
111
|
|
|
@@ -177,17 +159,12 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
|
|
|
177
159
|
}, {
|
|
178
160
|
key: "getItemProps",
|
|
179
161
|
value: function getItemProps(props, index) {
|
|
180
|
-
var _this$
|
|
181
|
-
size = _this$
|
|
182
|
-
highlightedIndex = _this$
|
|
183
|
-
onSelect = _this$asProps2.onSelect;
|
|
162
|
+
var _this$asProps = this.asProps,
|
|
163
|
+
size = _this$asProps.size,
|
|
164
|
+
highlightedIndex = _this$asProps.highlightedIndex;
|
|
184
165
|
var highlighted = index === highlightedIndex;
|
|
185
166
|
var extraProps = {};
|
|
186
167
|
|
|
187
|
-
if (onSelect !== undefined) {
|
|
188
|
-
extraProps.onClick = this.bindHandlerFallbackSelect(props, index);
|
|
189
|
-
}
|
|
190
|
-
|
|
191
168
|
this._items.push(props);
|
|
192
169
|
|
|
193
170
|
if (highlighted) {
|
|
@@ -261,25 +238,10 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
|
|
|
261
238
|
}, {
|
|
262
239
|
key: "render",
|
|
263
240
|
value: function render() {
|
|
264
|
-
var _ref = this
|
|
265
|
-
|
|
266
|
-
var _this$asProps3 = this.asProps,
|
|
267
|
-
Children = _this$asProps3.Children,
|
|
268
|
-
optionCount = _this$asProps3.optionCount,
|
|
269
|
-
triggerType = _this$asProps3.triggerType,
|
|
270
|
-
onSelect = _this$asProps3.onSelect,
|
|
271
|
-
other = _objectWithoutProperties(_this$asProps3, _excluded);
|
|
272
|
-
|
|
241
|
+
var _ref = this.asProps;
|
|
242
|
+
var Children = this.asProps.Children;
|
|
273
243
|
var props = {};
|
|
274
244
|
this._items = [];
|
|
275
|
-
logger.warn(onSelect !== undefined, "Property 'onSelect' is deprecated, subscribe to the 'onClick' of the needed 'Item'", other['data-ui-name'] || DropdownMenu.displayName);
|
|
276
|
-
logger.warn(optionCount !== undefined, "The 'optionCount' property is deprecated and is now automatically determined from the number of Item", other['data-ui-name'] || DropdownMenu.displayName);
|
|
277
|
-
logger.warn(triggerType !== undefined, "The 'triggerType' property is deprecated, use 'interaction=\"focus\"'", other['data-ui-name'] || DropdownMenu.displayName);
|
|
278
|
-
|
|
279
|
-
if (triggerType === 'input') {
|
|
280
|
-
props.interaction = 'focus';
|
|
281
|
-
}
|
|
282
|
-
|
|
283
245
|
return /*#__PURE__*/React.createElement(Dropdown, _assignProps(_objectSpread({}, props), _ref), /*#__PURE__*/React.createElement(Children, null));
|
|
284
246
|
}
|
|
285
247
|
}]);
|
|
@@ -298,7 +260,7 @@ _defineProperty(DropdownMenuRoot, "defaultProps", {
|
|
|
298
260
|
});
|
|
299
261
|
|
|
300
262
|
function List(props) {
|
|
301
|
-
var _ref2 =
|
|
263
|
+
var _ref2 = arguments[0],
|
|
302
264
|
_ref6;
|
|
303
265
|
|
|
304
266
|
var SDropdownMenuList = Box;
|
|
@@ -309,8 +271,7 @@ function List(props) {
|
|
|
309
271
|
}
|
|
310
272
|
|
|
311
273
|
function Menu() {
|
|
312
|
-
var _ref3 =
|
|
313
|
-
|
|
274
|
+
var _ref3 = arguments[0];
|
|
314
275
|
return /*#__PURE__*/React.createElement(DropdownMenu.Popper, null, /*#__PURE__*/React.createElement(DropdownMenu.List, _assignProps3({}, _ref3)));
|
|
315
276
|
}
|
|
316
277
|
|
|
@@ -320,7 +281,7 @@ function Item(props) {
|
|
|
320
281
|
SDropdownMenuItem = _useFlex2[0],
|
|
321
282
|
_useFlex2$ = _useFlex2[1],
|
|
322
283
|
className = _useFlex2$.className,
|
|
323
|
-
other = _objectWithoutProperties(_useFlex2$,
|
|
284
|
+
other = _objectWithoutProperties(_useFlex2$, _excluded);
|
|
324
285
|
|
|
325
286
|
var styles = sstyled(props.styles);
|
|
326
287
|
return /*#__PURE__*/React.createElement(SDropdownMenuItem, _extends({
|
|
@@ -338,7 +299,7 @@ function Addon(props) {
|
|
|
338
299
|
SDropdownMenuItemAddon = _useBox2[0],
|
|
339
300
|
_useBox2$ = _useBox2[1],
|
|
340
301
|
className = _useBox2$.className,
|
|
341
|
-
other = _objectWithoutProperties(_useBox2$,
|
|
302
|
+
other = _objectWithoutProperties(_useBox2$, _excluded2);
|
|
342
303
|
|
|
343
304
|
var styles = sstyled(props.styles);
|
|
344
305
|
return /*#__PURE__*/React.createElement(SDropdownMenuItemAddon, _extends({
|
|
@@ -347,7 +308,7 @@ function Addon(props) {
|
|
|
347
308
|
}
|
|
348
309
|
|
|
349
310
|
function Hint(props) {
|
|
350
|
-
var _ref4 =
|
|
311
|
+
var _ref4 = arguments[0],
|
|
351
312
|
_ref7;
|
|
352
313
|
|
|
353
314
|
var SDropdownMenuItem = Flex;
|
|
@@ -357,7 +318,7 @@ function Hint(props) {
|
|
|
357
318
|
}
|
|
358
319
|
|
|
359
320
|
function Title(props) {
|
|
360
|
-
var _ref5 =
|
|
321
|
+
var _ref5 = arguments[0],
|
|
361
322
|
_ref8;
|
|
362
323
|
|
|
363
324
|
var SDropdownMenuItem = Flex;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/DropdownMenu.jsx"],"names":["React","cn","createComponent","Component","sstyled","Root","Dropdown","Box","Flex","useBox","useFlex","ScrollAreaComponent","logger","KEYS","INTERACTION_TAGS","DropdownMenuRoot","e","amount","shiftKey","key","includes","target","tagName","preventDefault","handlers","visible","moveHighlightedIndex","_highlightedItem","click","props","index","asProps","onSelect","multiselect","result","node","scrollIntoView","highlightedIndex","prevHighlightedIndex","block","inline","size","onKeyDown","handlerKeyDown","tabIndex","highlighted","extraProps","undefined","onClick","bindHandlerFallbackSelect","_items","push","ref","scrollToNode","itemsLastIndex","length","selectedIndex","findIndex","item","selected","newIndex","disabled","Children","optionCount","triggerType","other","warn","DropdownMenu","displayName","interaction","style","defaultVisible","defaultHighlightedIndex","List","SDropdownMenuList","styles","Menu","Item","forwardRef","SDropdownMenuItem","className","Addon","SDropdownMenuItemAddon","Hint","Title","Trigger","Popper","ItemTitle","ItemHint","parent"],"mappings":"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","sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport createComponent, { Component, sstyled, Root } from '@semcore/core';\nimport Dropdown from '@semcore/dropdown';\nimport { Box, Flex, useBox, useFlex } from '@semcore/flex-box';\nimport ScrollAreaComponent from '@semcore/scroll-area';\nimport logger from '@semcore/utils/lib/logger';\n\nimport style from './style/dropdown-menu.shadow.css';\n\nconst KEYS = ['ArrowDown', 'ArrowUp', 'Enter', ' '];\nconst INTERACTION_TAGS = ['INPUT', 'TEXTAREA'];\n\nclass DropdownMenuRoot extends Component {\n static displayName = 'DropdownMenu';\n static style = style;\n\n static defaultProps = {\n size: 'm',\n defaultVisible: false,\n defaultHighlightedIndex: null,\n };\n\n _items = [];\n\n _highlightedItem = null;\n\n prevHighlightedIndex = null;\n\n uncontrolledProps() {\n return {\n highlightedIndex: null,\n visible: null,\n };\n }\n\n handlerKeyDown = (e) => {\n const amount = e.shiftKey ? 5 : 1;\n\n if (e.key === ' ' && INTERACTION_TAGS.includes(e.target.tagName)) return;\n if (!KEYS.includes(e.key)) return;\n\n e.preventDefault();\n\n this.handlers.visible(true);\n\n switch (e.key) {\n case 'ArrowDown':\n this.moveHighlightedIndex(amount, e);\n break;\n case 'ArrowUp':\n this.moveHighlightedIndex(-amount, e);\n break;\n case ' ':\n case 'Enter':\n if (this._highlightedItem) this._highlightedItem.click();\n break;\n }\n };\n\n bindHandlerFallbackSelect = (props, index) => () => {\n const { onSelect, multiselect } = this.asProps;\n const result = onSelect({\n index,\n ...props,\n });\n\n if (!multiselect && result !== false) {\n this.handlers.visible(false);\n }\n };\n\n getTriggerProps() {\n const { size } = this.asProps;\n return {\n size,\n onKeyDown: this.handlerKeyDown,\n };\n }\n\n getListProps() {\n const { size } = this.asProps;\n return {\n size,\n };\n }\n\n getPopperProps() {\n return {\n tabIndex: 0,\n onKeyDown: this.handlerKeyDown,\n };\n }\n\n getItemProps(props, index) {\n const { size, highlightedIndex, onSelect } = this.asProps;\n const highlighted = index === highlightedIndex;\n const extraProps = {};\n\n if (onSelect !== undefined) {\n extraProps.onClick = this.bindHandlerFallbackSelect(props, index);\n }\n\n this._items.push(props);\n if (highlighted) {\n extraProps.ref = this.scrollToNode;\n }\n\n return {\n size,\n highlighted,\n ...extraProps,\n };\n }\n\n getItemHintProps() {\n const { size } = this.asProps;\n return {\n size,\n };\n }\n\n getItemTitleProps() {\n const { size } = this.asProps;\n return {\n size,\n };\n }\n\n scrollToNode = (node) => {\n this._highlightedItem = node;\n if (node && node.scrollIntoView) {\n if (this.asProps.highlightedIndex !== this.prevHighlightedIndex) {\n this.prevHighlightedIndex = this.asProps.highlightedIndex;\n node.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n };\n\n moveHighlightedIndex(amount, e) {\n let { highlightedIndex } = this.asProps;\n const itemsLastIndex = this._items.length - 1;\n const selectedIndex = this._items.findIndex((item) => item.selected);\n\n if (itemsLastIndex < 0) return;\n\n if (highlightedIndex == null) {\n if (selectedIndex !== -1) {\n highlightedIndex = selectedIndex;\n } else {\n highlightedIndex = amount < 0 ? 0 : itemsLastIndex;\n }\n }\n\n let newIndex = highlightedIndex + amount;\n if (newIndex < 0) {\n newIndex = amount + itemsLastIndex + 1;\n } else if (newIndex > itemsLastIndex) {\n newIndex = newIndex - itemsLastIndex - 1;\n }\n\n if (this._items[newIndex] && this._items[newIndex].disabled) {\n this.moveHighlightedIndex(amount < 0 ? amount - 1 : amount + 1, e);\n } else {\n this.handlers.highlightedIndex(newIndex, e);\n }\n }\n\n componentDidUpdate() {\n const { visible } = this.asProps;\n\n if (!visible) {\n this.handlers.highlightedIndex(null);\n }\n }\n\n render() {\n const { Children, optionCount, triggerType, onSelect, ...other } = this.asProps;\n const props = {};\n\n this._items = [];\n\n logger.warn(\n onSelect !== undefined,\n \"Property 'onSelect' is deprecated, subscribe to the 'onClick' of the needed 'Item'\",\n other['data-ui-name'] || DropdownMenu.displayName,\n );\n logger.warn(\n optionCount !== undefined,\n \"The 'optionCount' property is deprecated and is now automatically determined from the number of Item\",\n other['data-ui-name'] || DropdownMenu.displayName,\n );\n logger.warn(\n triggerType !== undefined,\n \"The 'triggerType' property is deprecated, use 'interaction=\\\"focus\\\"'\",\n other['data-ui-name'] || DropdownMenu.displayName,\n );\n if (triggerType === 'input') {\n props.interaction = 'focus';\n }\n\n return (\n <Root render={Dropdown} {...props}>\n <Children />\n </Root>\n );\n }\n}\n\nfunction List(props) {\n const SDropdownMenuList = Root;\n return sstyled(props.styles)(\n <SDropdownMenuList render={Box} tag={ScrollAreaComponent} role=\"menu\" />,\n );\n}\n\nfunction Menu() {\n return (\n <DropdownMenu.Popper>\n <Root render={DropdownMenu.List} />\n </DropdownMenu.Popper>\n );\n}\n\nfunction Item(props) {\n const [SDropdownMenuItem, { className, ...other }] = useFlex(props, props.forwardRef);\n const styles = sstyled(props.styles);\n return (\n <SDropdownMenuItem\n role=\"menuitem\"\n tabIndex={-1}\n className={\n cn(\n styles.cn('SDropdownMenuItem', {\n ...props,\n highlighted: !props.disabled && props.highlighted,\n }).className,\n className,\n ) || undefined\n }\n {...other}\n />\n );\n}\n\nfunction Addon(props) {\n const [SDropdownMenuItemAddon, { className, ...other }] = useBox(props, props.forwardRef);\n const styles = sstyled(props.styles);\n return (\n <SDropdownMenuItemAddon\n className={cn(styles.cn('SDropdownMenuItemAddon', props).className, className) || undefined}\n {...other}\n />\n );\n}\n\nfunction Hint(props) {\n const SDropdownMenuItem = Root;\n return sstyled(props.styles)(<SDropdownMenuItem render={Flex} variant=\"hint\" />);\n}\n\nfunction Title(props) {\n const SDropdownMenuItem = Root;\n return sstyled(props.styles)(<SDropdownMenuItem render={Flex} variant=\"title\" />);\n}\n\nconst DropdownMenu = createComponent(\n DropdownMenuRoot,\n {\n Trigger: Dropdown.Trigger,\n Popper: Dropdown.Popper,\n List,\n Menu,\n Item: [Item, { Addon }],\n ItemTitle: Title,\n ItemHint: Hint,\n },\n {\n parent: [Dropdown],\n },\n);\n\nexport default DropdownMenu;\n"],"file":"DropdownMenu.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/DropdownMenu.jsx"],"names":["React","cn","createComponent","Component","sstyled","Root","Dropdown","Box","Flex","useBox","useFlex","ScrollAreaComponent","KEYS","INTERACTION_TAGS","DropdownMenuRoot","e","amount","shiftKey","key","includes","target","tagName","preventDefault","handlers","visible","moveHighlightedIndex","_highlightedItem","click","node","scrollIntoView","asProps","highlightedIndex","prevHighlightedIndex","block","inline","size","onKeyDown","handlerKeyDown","tabIndex","props","index","highlighted","extraProps","_items","push","ref","scrollToNode","itemsLastIndex","length","selectedIndex","findIndex","item","selected","newIndex","disabled","Children","style","defaultVisible","defaultHighlightedIndex","List","SDropdownMenuList","styles","Menu","DropdownMenu","Item","forwardRef","SDropdownMenuItem","className","other","undefined","Addon","SDropdownMenuItemAddon","Hint","Title","Trigger","Popper","ItemTitle","ItemHint","parent"],"mappings":"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","sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport createComponent, { Component, sstyled, Root } from '@semcore/core';\nimport Dropdown from '@semcore/dropdown';\nimport { Box, Flex, useBox, useFlex } from '@semcore/flex-box';\nimport ScrollAreaComponent from '@semcore/scroll-area';\n\nimport style from './style/dropdown-menu.shadow.css';\n\nconst KEYS = ['ArrowDown', 'ArrowUp', 'Enter', ' '];\nconst INTERACTION_TAGS = ['INPUT', 'TEXTAREA'];\n\nclass DropdownMenuRoot extends Component {\n static displayName = 'DropdownMenu';\n static style = style;\n\n static defaultProps = {\n size: 'm',\n defaultVisible: false,\n defaultHighlightedIndex: null,\n };\n\n _items = [];\n\n _highlightedItem = null;\n\n prevHighlightedIndex = null;\n\n uncontrolledProps() {\n return {\n highlightedIndex: null,\n visible: null,\n };\n }\n\n handlerKeyDown = (e) => {\n const amount = e.shiftKey ? 5 : 1;\n\n if (e.key === ' ' && INTERACTION_TAGS.includes(e.target.tagName)) return;\n if (!KEYS.includes(e.key)) return;\n\n e.preventDefault();\n\n this.handlers.visible(true);\n\n switch (e.key) {\n case 'ArrowDown':\n this.moveHighlightedIndex(amount, e);\n break;\n case 'ArrowUp':\n this.moveHighlightedIndex(-amount, e);\n break;\n case ' ':\n case 'Enter':\n if (this._highlightedItem) this._highlightedItem.click();\n break;\n }\n };\n\n getTriggerProps() {\n const { size } = this.asProps;\n return {\n size,\n onKeyDown: this.handlerKeyDown,\n };\n }\n\n getListProps() {\n const { size } = this.asProps;\n return {\n size,\n };\n }\n\n getPopperProps() {\n return {\n tabIndex: 0,\n onKeyDown: this.handlerKeyDown,\n };\n }\n\n getItemProps(props, index) {\n const { size, highlightedIndex } = this.asProps;\n const highlighted = index === highlightedIndex;\n const extraProps = {};\n\n this._items.push(props);\n if (highlighted) {\n extraProps.ref = this.scrollToNode;\n }\n\n return {\n size,\n highlighted,\n ...extraProps,\n };\n }\n\n getItemHintProps() {\n const { size } = this.asProps;\n return {\n size,\n };\n }\n\n getItemTitleProps() {\n const { size } = this.asProps;\n return {\n size,\n };\n }\n\n scrollToNode = (node) => {\n this._highlightedItem = node;\n if (node && node.scrollIntoView) {\n if (this.asProps.highlightedIndex !== this.prevHighlightedIndex) {\n this.prevHighlightedIndex = this.asProps.highlightedIndex;\n node.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n };\n\n moveHighlightedIndex(amount, e) {\n let { highlightedIndex } = this.asProps;\n const itemsLastIndex = this._items.length - 1;\n const selectedIndex = this._items.findIndex((item) => item.selected);\n\n if (itemsLastIndex < 0) return;\n\n if (highlightedIndex == null) {\n if (selectedIndex !== -1) {\n highlightedIndex = selectedIndex;\n } else {\n highlightedIndex = amount < 0 ? 0 : itemsLastIndex;\n }\n }\n\n let newIndex = highlightedIndex + amount;\n if (newIndex < 0) {\n newIndex = amount + itemsLastIndex + 1;\n } else if (newIndex > itemsLastIndex) {\n newIndex = newIndex - itemsLastIndex - 1;\n }\n\n if (this._items[newIndex] && this._items[newIndex].disabled) {\n this.moveHighlightedIndex(amount < 0 ? amount - 1 : amount + 1, e);\n } else {\n this.handlers.highlightedIndex(newIndex, e);\n }\n }\n\n componentDidUpdate() {\n const { visible } = this.asProps;\n\n if (!visible) {\n this.handlers.highlightedIndex(null);\n }\n }\n\n render() {\n const { Children } = this.asProps;\n const props = {};\n\n this._items = [];\n\n return (\n <Root render={Dropdown} {...props}>\n <Children />\n </Root>\n );\n }\n}\n\nfunction List(props) {\n const SDropdownMenuList = Root;\n return sstyled(props.styles)(\n <SDropdownMenuList render={Box} tag={ScrollAreaComponent} role=\"menu\" />,\n );\n}\n\nfunction Menu() {\n return (\n <DropdownMenu.Popper>\n <Root render={DropdownMenu.List} />\n </DropdownMenu.Popper>\n );\n}\n\nfunction Item(props) {\n const [SDropdownMenuItem, { className, ...other }] = useFlex(props, props.forwardRef);\n const styles = sstyled(props.styles);\n return (\n <SDropdownMenuItem\n role=\"menuitem\"\n tabIndex={-1}\n className={\n cn(\n styles.cn('SDropdownMenuItem', {\n ...props,\n highlighted: !props.disabled && props.highlighted,\n }).className,\n className,\n ) || undefined\n }\n {...other}\n />\n );\n}\n\nfunction Addon(props) {\n const [SDropdownMenuItemAddon, { className, ...other }] = useBox(props, props.forwardRef);\n const styles = sstyled(props.styles);\n return (\n <SDropdownMenuItemAddon\n className={cn(styles.cn('SDropdownMenuItemAddon', props).className, className) || undefined}\n {...other}\n />\n );\n}\n\nfunction Hint(props) {\n const SDropdownMenuItem = Root;\n return sstyled(props.styles)(<SDropdownMenuItem render={Flex} variant=\"hint\" />);\n}\n\nfunction Title(props) {\n const SDropdownMenuItem = Root;\n return sstyled(props.styles)(<SDropdownMenuItem render={Flex} variant=\"title\" />);\n}\n\nconst DropdownMenu = createComponent(\n DropdownMenuRoot,\n {\n Trigger: Dropdown.Trigger,\n Popper: Dropdown.Popper,\n List,\n Menu,\n Item: [Item, { Addon }],\n ItemTitle: Title,\n ItemHint: Hint,\n },\n {\n parent: [Dropdown],\n },\n);\n\nexport default DropdownMenu;\n"],"file":"DropdownMenu.js"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { CProps, PropGetterFn, ReturnEl } from '@semcore/core';
|
|
2
|
+
import Dropdown, { IDropdownContext, IDropdownProps, IDropdownHandlers } from '@semcore/dropdown';
|
|
3
|
+
import { Box, IBoxProps, IFlexProps } from '@semcore/flex-box';
|
|
4
|
+
import { IScrollAreaProps } from '@semcore/scroll-area';
|
|
5
|
+
|
|
6
|
+
export type DropdownMenuSize = 'm' | 'l' | 'xl';
|
|
7
|
+
|
|
8
|
+
export interface IDropdownMenuProps extends IDropdownProps {
|
|
9
|
+
/**
|
|
10
|
+
* Size of the menu
|
|
11
|
+
* @default m
|
|
12
|
+
*/
|
|
13
|
+
size?: DropdownMenuSize;
|
|
14
|
+
/**
|
|
15
|
+
* Index of the element selected by default
|
|
16
|
+
*/
|
|
17
|
+
defaultHighlightedIndex?: number;
|
|
18
|
+
/**
|
|
19
|
+
* Index of the selected item
|
|
20
|
+
*/
|
|
21
|
+
highlightedIndex?: number;
|
|
22
|
+
/**
|
|
23
|
+
* Callback for highlightedIndex change
|
|
24
|
+
* highlightedIndex - Index of the selected item
|
|
25
|
+
*/
|
|
26
|
+
onHighlightedIndexChange?: (highlightedIndex: number) => void;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface IDropdownMenuListProps extends IBoxProps, IScrollAreaProps {
|
|
30
|
+
/**
|
|
31
|
+
* Size of the menu
|
|
32
|
+
* @default m
|
|
33
|
+
*/
|
|
34
|
+
size?: DropdownMenuSize;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface IDropdownMenuMenuProps extends IDropdownMenuListProps {}
|
|
38
|
+
|
|
39
|
+
export interface IDropdownMenuItemProps extends IFlexProps {
|
|
40
|
+
/**
|
|
41
|
+
* Enables selected state
|
|
42
|
+
*/
|
|
43
|
+
selected?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Disables the component
|
|
46
|
+
*/
|
|
47
|
+
disabled?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Adds focus styles around
|
|
50
|
+
*/
|
|
51
|
+
highlighted?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Makes the element non-interactive
|
|
54
|
+
*/
|
|
55
|
+
notInteractive?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Size of the component
|
|
58
|
+
* @default m
|
|
59
|
+
*/
|
|
60
|
+
size?: DropdownMenuSize;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface IDropdownMenuItemHintProps extends IFlexProps {
|
|
64
|
+
/**
|
|
65
|
+
* Size of the component
|
|
66
|
+
* @default m
|
|
67
|
+
*/
|
|
68
|
+
size?: DropdownMenuSize;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface IDropdownMenuItemTitleProps extends IFlexProps {
|
|
72
|
+
/**
|
|
73
|
+
* Size of the component
|
|
74
|
+
* @default m
|
|
75
|
+
*/
|
|
76
|
+
size?: DropdownMenuSize;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export interface IDropdownMenuContext extends IDropdownContext {
|
|
80
|
+
getListProps: PropGetterFn;
|
|
81
|
+
getItemProps: PropGetterFn;
|
|
82
|
+
getItemHintProps: PropGetterFn;
|
|
83
|
+
getItemTitleProps: PropGetterFn;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export interface IDropdownMenuHandlers extends IDropdownHandlers {
|
|
87
|
+
highlightedIndex: (index: number) => void;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
declare const DropdownMenu: (<T>(
|
|
91
|
+
props: CProps<IDropdownMenuProps & T, IDropdownMenuContext, IDropdownMenuHandlers>,
|
|
92
|
+
) => ReturnEl) & {
|
|
93
|
+
Trigger: typeof Dropdown.Trigger;
|
|
94
|
+
Popper: typeof Dropdown.Popper;
|
|
95
|
+
List: <T>(
|
|
96
|
+
props: CProps<IDropdownMenuListProps & T, IDropdownMenuContext, IDropdownMenuHandlers>,
|
|
97
|
+
) => ReturnEl;
|
|
98
|
+
Menu: <T>(
|
|
99
|
+
props: CProps<IDropdownMenuMenuProps & T, IDropdownMenuContext, IDropdownMenuHandlers>,
|
|
100
|
+
) => ReturnEl;
|
|
101
|
+
Item: (<T>(
|
|
102
|
+
props: CProps<IDropdownMenuItemProps & T, IDropdownMenuContext, IDropdownMenuHandlers>,
|
|
103
|
+
) => ReturnEl) & {
|
|
104
|
+
Addon: typeof Box;
|
|
105
|
+
};
|
|
106
|
+
ItemTitle: <T>(props: IDropdownMenuItemTitleProps & T) => ReturnEl;
|
|
107
|
+
ItemHint: <T>(props: IDropdownMenuItemHintProps & T) => ReturnEl;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
export default DropdownMenu;
|
package/lib/es6/index.js
CHANGED
package/lib/es6/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.js"],"names":["default"],"mappings":"AAAA,SAASA,OAAT,QAAwB,gBAAxB
|
|
1
|
+
{"version":3,"sources":["../../src/index.js"],"names":["default"],"mappings":"AAAA,SAASA,OAAT,QAAwB,gBAAxB","sourcesContent":["export { default } from './DropdownMenu';\n"],"file":"index.js"}
|
|
@@ -21,7 +21,7 @@ SDropdownMenuItem {
|
|
|
21
21
|
line-height: normal;
|
|
22
22
|
|
|
23
23
|
&:hover {
|
|
24
|
-
background-color:
|
|
24
|
+
background-color: var(--gray-50);
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
&:focus {
|
|
@@ -31,14 +31,14 @@ SDropdownMenuItem {
|
|
|
31
31
|
|
|
32
32
|
SDropdownMenuItem[highlighted] {
|
|
33
33
|
z-index: 1;
|
|
34
|
-
box-shadow: var(--
|
|
34
|
+
box-shadow: var(--keyboard-focus) inset;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
SDropdownMenuItem[selected] {
|
|
38
|
-
background-color: color-mod(var(--
|
|
38
|
+
background-color: color-mod(var(--blue-100) a(70%));
|
|
39
39
|
|
|
40
40
|
&:hover {
|
|
41
|
-
background-color:
|
|
41
|
+
background-color: var(--blue-100);
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
@@ -48,30 +48,20 @@ SDropdownMenuItem[disabled] {
|
|
|
48
48
|
pointer-events: none;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
SDropdownMenuItem[size='
|
|
51
|
+
SDropdownMenuItem[size='l'] {
|
|
52
52
|
font-size: var(--fs-300);
|
|
53
53
|
line-height: var(--lh-300);
|
|
54
|
-
|
|
55
54
|
padding: 8px 12px;
|
|
56
|
-
min-height:
|
|
55
|
+
min-height: 40px;
|
|
57
56
|
}
|
|
58
57
|
|
|
59
|
-
SDropdownMenuItem[size='
|
|
58
|
+
SDropdownMenuItem[size='m'] {
|
|
60
59
|
font-size: var(--fs-200);
|
|
61
60
|
line-height: var(--lh-200);
|
|
62
|
-
|
|
63
61
|
padding: 6px 8px;
|
|
64
62
|
min-height: 32px;
|
|
65
63
|
}
|
|
66
64
|
|
|
67
|
-
SDropdownMenuItem[size='m'] {
|
|
68
|
-
font-size: var(--fs-100);
|
|
69
|
-
line-height: var(--lh-100);
|
|
70
|
-
|
|
71
|
-
padding: 4px 8px;
|
|
72
|
-
min-height: 26px;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
65
|
SDropdownMenuItem[notInteractive] {
|
|
76
66
|
cursor: default;
|
|
77
67
|
|
|
@@ -81,7 +71,7 @@ SDropdownMenuItem[notInteractive] {
|
|
|
81
71
|
}
|
|
82
72
|
|
|
83
73
|
SDropdownMenuItem[variant='hint'] {
|
|
84
|
-
color: var(--
|
|
74
|
+
color: var(--gray-500);
|
|
85
75
|
cursor: default;
|
|
86
76
|
|
|
87
77
|
&:hover {
|
|
@@ -114,6 +104,6 @@ SDropdownMenuItemAddon {
|
|
|
114
104
|
|
|
115
105
|
SPopper {
|
|
116
106
|
&:focus {
|
|
117
|
-
box-shadow: var(--
|
|
107
|
+
box-shadow: var(--keyboard-focus);
|
|
118
108
|
}
|
|
119
109
|
}
|
package/lib/types/index.d.ts
CHANGED
|
@@ -24,17 +24,6 @@ export interface IDropdownMenuProps extends IDropdownProps {
|
|
|
24
24
|
* highlightedIndex - Index of the selected item
|
|
25
25
|
*/
|
|
26
26
|
onHighlightedIndexChange?: (highlightedIndex: number) => void;
|
|
27
|
-
/** @deprecated v2.0.0 */
|
|
28
|
-
optionCount?: number;
|
|
29
|
-
/** Trigger type selection
|
|
30
|
-
* @deprecated v2.0.0 */
|
|
31
|
-
triggerType?: 'button' | 'input';
|
|
32
|
-
/** Handler in option selection
|
|
33
|
-
* @deprecated v2.0.0 */
|
|
34
|
-
onSelect?: (item: any) => void;
|
|
35
|
-
/** Multiple choice of options
|
|
36
|
-
* @deprecated v2.0.0 {@link ISelectProps.multiselect} */
|
|
37
|
-
multiselect?: boolean;
|
|
38
27
|
}
|
|
39
28
|
|
|
40
29
|
export interface IDropdownMenuListProps extends IBoxProps, IScrollAreaProps {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@semcore/dropdown-menu",
|
|
3
3
|
"description": "SEMRush DropdownMenu Component",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "3.0.0",
|
|
5
5
|
"main": "lib/cjs/index.js",
|
|
6
6
|
"module": "lib/es6/index.js",
|
|
7
7
|
"typings": "lib/types/index.d.ts",
|
|
@@ -14,9 +14,10 @@
|
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@semcore/utils": "^3.15",
|
|
17
|
-
"@semcore/dropdown": "^
|
|
17
|
+
"@semcore/dropdown": "^3",
|
|
18
18
|
"@semcore/flex-box": "^4",
|
|
19
|
-
"@semcore/scroll-area": "^
|
|
19
|
+
"@semcore/scroll-area": "^4.0.0",
|
|
20
|
+
"classnames": "2.2.6"
|
|
20
21
|
},
|
|
21
22
|
"peerDependencies": {
|
|
22
23
|
"@semcore/core": "^1.11",
|
|
@@ -29,5 +30,8 @@
|
|
|
29
30
|
"type": "git",
|
|
30
31
|
"url": "https://github.com/semrush/intergalactic.git",
|
|
31
32
|
"directory": "semcore/dropdown-menu"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@semcore/jest-preset-ui": "1.0.0"
|
|
32
36
|
}
|
|
33
37
|
}
|
package/src/DropdownMenu.jsx
CHANGED
|
@@ -4,7 +4,6 @@ import createComponent, { Component, sstyled, Root } from '@semcore/core';
|
|
|
4
4
|
import Dropdown from '@semcore/dropdown';
|
|
5
5
|
import { Box, Flex, useBox, useFlex } from '@semcore/flex-box';
|
|
6
6
|
import ScrollAreaComponent from '@semcore/scroll-area';
|
|
7
|
-
import logger from '@semcore/utils/lib/logger';
|
|
8
7
|
|
|
9
8
|
import style from './style/dropdown-menu.shadow.css';
|
|
10
9
|
|
|
@@ -58,18 +57,6 @@ class DropdownMenuRoot extends Component {
|
|
|
58
57
|
}
|
|
59
58
|
};
|
|
60
59
|
|
|
61
|
-
bindHandlerFallbackSelect = (props, index) => () => {
|
|
62
|
-
const { onSelect, multiselect } = this.asProps;
|
|
63
|
-
const result = onSelect({
|
|
64
|
-
index,
|
|
65
|
-
...props,
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
if (!multiselect && result !== false) {
|
|
69
|
-
this.handlers.visible(false);
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
|
|
73
60
|
getTriggerProps() {
|
|
74
61
|
const { size } = this.asProps;
|
|
75
62
|
return {
|
|
@@ -93,14 +80,10 @@ class DropdownMenuRoot extends Component {
|
|
|
93
80
|
}
|
|
94
81
|
|
|
95
82
|
getItemProps(props, index) {
|
|
96
|
-
const { size, highlightedIndex
|
|
83
|
+
const { size, highlightedIndex } = this.asProps;
|
|
97
84
|
const highlighted = index === highlightedIndex;
|
|
98
85
|
const extraProps = {};
|
|
99
86
|
|
|
100
|
-
if (onSelect !== undefined) {
|
|
101
|
-
extraProps.onClick = this.bindHandlerFallbackSelect(props, index);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
87
|
this._items.push(props);
|
|
105
88
|
if (highlighted) {
|
|
106
89
|
extraProps.ref = this.scrollToNode;
|
|
@@ -178,30 +161,11 @@ class DropdownMenuRoot extends Component {
|
|
|
178
161
|
}
|
|
179
162
|
|
|
180
163
|
render() {
|
|
181
|
-
const { Children
|
|
164
|
+
const { Children } = this.asProps;
|
|
182
165
|
const props = {};
|
|
183
166
|
|
|
184
167
|
this._items = [];
|
|
185
168
|
|
|
186
|
-
logger.warn(
|
|
187
|
-
onSelect !== undefined,
|
|
188
|
-
"Property 'onSelect' is deprecated, subscribe to the 'onClick' of the needed 'Item'",
|
|
189
|
-
other['data-ui-name'] || DropdownMenu.displayName,
|
|
190
|
-
);
|
|
191
|
-
logger.warn(
|
|
192
|
-
optionCount !== undefined,
|
|
193
|
-
"The 'optionCount' property is deprecated and is now automatically determined from the number of Item",
|
|
194
|
-
other['data-ui-name'] || DropdownMenu.displayName,
|
|
195
|
-
);
|
|
196
|
-
logger.warn(
|
|
197
|
-
triggerType !== undefined,
|
|
198
|
-
"The 'triggerType' property is deprecated, use 'interaction=\"focus\"'",
|
|
199
|
-
other['data-ui-name'] || DropdownMenu.displayName,
|
|
200
|
-
);
|
|
201
|
-
if (triggerType === 'input') {
|
|
202
|
-
props.interaction = 'focus';
|
|
203
|
-
}
|
|
204
|
-
|
|
205
169
|
return (
|
|
206
170
|
<Root render={Dropdown} {...props}>
|
|
207
171
|
<Children />
|
package/src/index.d.ts
CHANGED
|
@@ -24,17 +24,6 @@ export interface IDropdownMenuProps extends IDropdownProps {
|
|
|
24
24
|
* highlightedIndex - Index of the selected item
|
|
25
25
|
*/
|
|
26
26
|
onHighlightedIndexChange?: (highlightedIndex: number) => void;
|
|
27
|
-
/** @deprecated v2.0.0 */
|
|
28
|
-
optionCount?: number;
|
|
29
|
-
/** Trigger type selection
|
|
30
|
-
* @deprecated v2.0.0 */
|
|
31
|
-
triggerType?: 'button' | 'input';
|
|
32
|
-
/** Handler in option selection
|
|
33
|
-
* @deprecated v2.0.0 */
|
|
34
|
-
onSelect?: (item: any) => void;
|
|
35
|
-
/** Multiple choice of options
|
|
36
|
-
* @deprecated v2.0.0 {@link ISelectProps.multiselect} */
|
|
37
|
-
multiselect?: boolean;
|
|
38
27
|
}
|
|
39
28
|
|
|
40
29
|
export interface IDropdownMenuListProps extends IBoxProps, IScrollAreaProps {
|
package/src/index.js
CHANGED
|
@@ -21,7 +21,7 @@ SDropdownMenuItem {
|
|
|
21
21
|
line-height: normal;
|
|
22
22
|
|
|
23
23
|
&:hover {
|
|
24
|
-
background-color:
|
|
24
|
+
background-color: var(--gray-50);
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
&:focus {
|
|
@@ -31,14 +31,14 @@ SDropdownMenuItem {
|
|
|
31
31
|
|
|
32
32
|
SDropdownMenuItem[highlighted] {
|
|
33
33
|
z-index: 1;
|
|
34
|
-
box-shadow: var(--
|
|
34
|
+
box-shadow: var(--keyboard-focus) inset;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
SDropdownMenuItem[selected] {
|
|
38
|
-
background-color: color-mod(var(--
|
|
38
|
+
background-color: color-mod(var(--blue-100) a(70%));
|
|
39
39
|
|
|
40
40
|
&:hover {
|
|
41
|
-
background-color:
|
|
41
|
+
background-color: var(--blue-100);
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
@@ -48,30 +48,20 @@ SDropdownMenuItem[disabled] {
|
|
|
48
48
|
pointer-events: none;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
SDropdownMenuItem[size='
|
|
51
|
+
SDropdownMenuItem[size='l'] {
|
|
52
52
|
font-size: var(--fs-300);
|
|
53
53
|
line-height: var(--lh-300);
|
|
54
|
-
|
|
55
54
|
padding: 8px 12px;
|
|
56
|
-
min-height:
|
|
55
|
+
min-height: 40px;
|
|
57
56
|
}
|
|
58
57
|
|
|
59
|
-
SDropdownMenuItem[size='
|
|
58
|
+
SDropdownMenuItem[size='m'] {
|
|
60
59
|
font-size: var(--fs-200);
|
|
61
60
|
line-height: var(--lh-200);
|
|
62
|
-
|
|
63
61
|
padding: 6px 8px;
|
|
64
62
|
min-height: 32px;
|
|
65
63
|
}
|
|
66
64
|
|
|
67
|
-
SDropdownMenuItem[size='m'] {
|
|
68
|
-
font-size: var(--fs-100);
|
|
69
|
-
line-height: var(--lh-100);
|
|
70
|
-
|
|
71
|
-
padding: 4px 8px;
|
|
72
|
-
min-height: 26px;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
65
|
SDropdownMenuItem[notInteractive] {
|
|
76
66
|
cursor: default;
|
|
77
67
|
|
|
@@ -81,7 +71,7 @@ SDropdownMenuItem[notInteractive] {
|
|
|
81
71
|
}
|
|
82
72
|
|
|
83
73
|
SDropdownMenuItem[variant='hint'] {
|
|
84
|
-
color: var(--
|
|
74
|
+
color: var(--gray-500);
|
|
85
75
|
cursor: default;
|
|
86
76
|
|
|
87
77
|
&:hover {
|
|
@@ -114,6 +104,6 @@ SDropdownMenuItemAddon {
|
|
|
114
104
|
|
|
115
105
|
SPopper {
|
|
116
106
|
&:focus {
|
|
117
|
-
box-shadow: var(--
|
|
107
|
+
box-shadow: var(--keyboard-focus);
|
|
118
108
|
}
|
|
119
109
|
}
|