@semcore/dropdown-menu 3.0.12 → 3.1.1

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 CHANGED
@@ -2,6 +2,18 @@
2
2
 
3
3
  CHANGELOG.md standards are inspired by [keepachangelog.com](https://keepachangelog.com/en/1.0.0/).
4
4
 
5
+ ## [3.1.1] - 2022-10-04
6
+
7
+ ### Changed
8
+
9
+ - Version patch update due to children dependencies update (`@semcore/dropdown` [3.1.0 ~> 3.1.1], `@semcore/utils` [3.37.1 ~> 3.37.2]).
10
+
11
+ ## [3.1.0] - 2022-09-07
12
+
13
+ ### Added
14
+
15
+ - Screen readers support.
16
+
5
17
  ## [3.0.12] - 2022-08-30
6
18
 
7
19
  ### Changed
@@ -41,6 +41,8 @@ var _flexBox = require("@semcore/flex-box");
41
41
 
42
42
  var _scrollArea = _interopRequireDefault(require("@semcore/scroll-area"));
43
43
 
44
+ var _uniqueID = _interopRequireDefault(require("@semcore/utils/lib/uniqueID"));
45
+
44
46
  var _excluded = ["className"],
45
47
  _excluded2 = ["className"];
46
48
 
@@ -61,23 +63,23 @@ var style = (
61
63
  /*__reshadow_css_start__*/
62
64
  _core.sstyled.insert(
63
65
  /*__inner_css_start__*/
64
- ".___SDropdownMenuList_t5jr0_gg_{max-height:240px;margin:4px 0;padding:0;position:relative;min-height:26px;min-width:32px}.___SDropdownMenuItem_t5jr0_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_t5jr0_gg_:hover{background-color:#f4f5f9}.___SDropdownMenuItem_t5jr0_gg_:focus{outline:none}.___SDropdownMenuItem_t5jr0_gg_.__highlighted_t5jr0_gg_{z-index:1;box-shadow:0 0 0 3px rgba(0, 143, 248, 0.2) inset}.___SDropdownMenuItem_t5jr0_gg_.__selected_t5jr0_gg_{background-color:rgba(196,229,254,.7)}.___SDropdownMenuItem_t5jr0_gg_.__selected_t5jr0_gg_:hover{background-color:#c4e5fe}.___SDropdownMenuItem_t5jr0_gg_.__disabled_t5jr0_gg_{opacity:0.3;cursor:default;pointer-events:none}.___SDropdownMenuItem_t5jr0_gg_._size_l_t5jr0_gg_{font-size:16px;line-height:1.5;padding:8px 12px;min-height:40px}.___SDropdownMenuItem_t5jr0_gg_._size_m_t5jr0_gg_{font-size:14px;line-height:1.42;padding:6px 8px;min-height:32px}.___SDropdownMenuItem_t5jr0_gg_.__notInteractive_t5jr0_gg_{cursor:default}.___SDropdownMenuItem_t5jr0_gg_.__notInteractive_t5jr0_gg_:hover{background:none}.___SDropdownMenuItem_t5jr0_gg_._variant_hint_t5jr0_gg_{color:#6c6e79;cursor:default}.___SDropdownMenuItem_t5jr0_gg_._variant_hint_t5jr0_gg_:hover{background:none}.___SDropdownMenuItem_t5jr0_gg_._variant_title_t5jr0_gg_{font-weight:700;cursor:default}.___SDropdownMenuItem_t5jr0_gg_._variant_title_t5jr0_gg_:hover{background:none}.___SDropdownMenuItemAddon_t5jr0_gg_{display:inline-flex;margin-left:8px;margin-right:8px}.___SDropdownMenuItemAddon_t5jr0_gg_:first-child{margin-left:0}.___SDropdownMenuItemAddon_t5jr0_gg_:last-child{margin-right:0}.___SPopper_t5jr0_gg_:focus{box-shadow:0 0 0 3px rgba(0, 143, 248, 0.2)}"
66
+ ".___SDropdownMenuList_1rlfp_gg_{max-height:240px;margin:4px 0;padding:0;position:relative;min-height:26px;min-width:32px}.___SDropdownMenuItem_1rlfp_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_1rlfp_gg_:hover{background-color:#f4f5f9}.___SDropdownMenuItem_1rlfp_gg_:focus{outline:none}.___SDropdownMenuItem_1rlfp_gg_.__highlighted_1rlfp_gg_{z-index:1;box-shadow:0 0 0 3px rgba(0, 143, 248, 0.2) inset}.___SDropdownMenuItem_1rlfp_gg_.__selected_1rlfp_gg_{background-color:rgba(196,229,254,.7)}.___SDropdownMenuItem_1rlfp_gg_.__selected_1rlfp_gg_:hover{background-color:#c4e5fe}.___SDropdownMenuItem_1rlfp_gg_.__disabled_1rlfp_gg_{opacity:0.3;cursor:default;pointer-events:none}.___SDropdownMenuItem_1rlfp_gg_._size_l_1rlfp_gg_{font-size:16px;line-height:1.5;padding:8px 12px;min-height:40px}.___SDropdownMenuItem_1rlfp_gg_._size_m_1rlfp_gg_{font-size:14px;line-height:1.42;padding:6px 8px;min-height:32px}.___SDropdownMenuItem_1rlfp_gg_.__notInteractive_1rlfp_gg_{cursor:default}.___SDropdownMenuItem_1rlfp_gg_.__notInteractive_1rlfp_gg_:hover{background:none}.___SDropdownMenuItem_1rlfp_gg_._variant_hint_1rlfp_gg_{color:#6c6e79;cursor:default}.___SDropdownMenuItem_1rlfp_gg_._variant_hint_1rlfp_gg_:hover{background:none}.___SDropdownMenuItem_1rlfp_gg_._variant_title_1rlfp_gg_{font-weight:700;cursor:default}.___SDropdownMenuItem_1rlfp_gg_._variant_title_1rlfp_gg_:hover{background:none}.___SDropdownMenuItemAddon_1rlfp_gg_{display:inline-flex;margin-left:8px;margin-right:8px}.___SDropdownMenuItemAddon_1rlfp_gg_:first-child{margin-left:0}.___SDropdownMenuItemAddon_1rlfp_gg_:last-child{margin-right:0}.___SPopper_1rlfp_gg_:focus{box-shadow:0 0 0 3px rgba(0, 143, 248, 0.2)}"
65
67
  /*__inner_css_end__*/
66
- , "t5jr0_gg_")
68
+ , "1rlfp_gg_")
67
69
  /*__reshadow_css_end__*/
68
70
  , {
69
- "__SDropdownMenuList": "___SDropdownMenuList_t5jr0_gg_",
70
- "__SDropdownMenuItem": "___SDropdownMenuItem_t5jr0_gg_",
71
- "_highlighted": "__highlighted_t5jr0_gg_",
72
- "_selected": "__selected_t5jr0_gg_",
73
- "_disabled": "__disabled_t5jr0_gg_",
74
- "_size_l": "_size_l_t5jr0_gg_",
75
- "_size_m": "_size_m_t5jr0_gg_",
76
- "_notInteractive": "__notInteractive_t5jr0_gg_",
77
- "_variant_hint": "_variant_hint_t5jr0_gg_",
78
- "_variant_title": "_variant_title_t5jr0_gg_",
79
- "__SDropdownMenuItemAddon": "___SDropdownMenuItemAddon_t5jr0_gg_",
80
- "__SPopper": "___SPopper_t5jr0_gg_"
71
+ "__SDropdownMenuList": "___SDropdownMenuList_1rlfp_gg_",
72
+ "__SDropdownMenuItem": "___SDropdownMenuItem_1rlfp_gg_",
73
+ "_highlighted": "__highlighted_1rlfp_gg_",
74
+ "_selected": "__selected_1rlfp_gg_",
75
+ "_disabled": "__disabled_1rlfp_gg_",
76
+ "_size_l": "_size_l_1rlfp_gg_",
77
+ "_size_m": "_size_m_1rlfp_gg_",
78
+ "_notInteractive": "__notInteractive_1rlfp_gg_",
79
+ "_variant_hint": "_variant_hint_1rlfp_gg_",
80
+ "_variant_title": "_variant_title_1rlfp_gg_",
81
+ "__SDropdownMenuItemAddon": "___SDropdownMenuItemAddon_1rlfp_gg_",
82
+ "__SPopper": "___SPopper_1rlfp_gg_"
81
83
  });
82
84
  var KEYS = ['ArrowDown', 'ArrowUp', 'Enter', ' '];
83
85
  var INTERACTION_TAGS = ['INPUT', 'TEXTAREA'];
@@ -152,9 +154,17 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
152
154
  }, {
153
155
  key: "getTriggerProps",
154
156
  value: function getTriggerProps() {
155
- var size = this.asProps.size;
157
+ var _this$asProps = this.asProps,
158
+ size = _this$asProps.size,
159
+ uid = _this$asProps.uid,
160
+ disablePortal = _this$asProps.disablePortal,
161
+ visible = _this$asProps.visible;
156
162
  return {
157
163
  size: size,
164
+ id: "igc-".concat(uid, "-trigger"),
165
+ 'aria-controls': visible ? "igc-".concat(uid, "-popper") : undefined,
166
+ 'aria-flowto': visible && !disablePortal ? "igc-".concat(uid, "-popper") : undefined,
167
+ 'aria-label': visible && !disablePortal ? "Press Tab to go to popover" : undefined,
158
168
  onKeyDown: this.handlerKeyDown
159
169
  };
160
170
  }
@@ -163,23 +173,29 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
163
173
  value: function getListProps() {
164
174
  var size = this.asProps.size;
165
175
  return {
166
- size: size
176
+ size: size,
177
+ index: this.asProps.highlightedIndex
167
178
  };
168
179
  }
169
180
  }, {
170
181
  key: "getPopperProps",
171
182
  value: function getPopperProps() {
183
+ var _this$asProps2 = this.asProps,
184
+ uid = _this$asProps2.uid,
185
+ disablePortal = _this$asProps2.disablePortal;
172
186
  return {
173
187
  tabIndex: 0,
174
- onKeyDown: this.handlerKeyDown
188
+ onKeyDown: this.handlerKeyDown,
189
+ id: "igc-".concat(uid, "-popper"),
190
+ 'aria-flowto': !disablePortal ? "igc-".concat(uid, "-trigger") : undefined
175
191
  };
176
192
  }
177
193
  }, {
178
194
  key: "getItemProps",
179
195
  value: function getItemProps(props, index) {
180
- var _this$asProps = this.asProps,
181
- size = _this$asProps.size,
182
- highlightedIndex = _this$asProps.highlightedIndex;
196
+ var _this$asProps3 = this.asProps,
197
+ size = _this$asProps3.size,
198
+ highlightedIndex = _this$asProps3.highlightedIndex;
183
199
  var highlighted = index === highlightedIndex;
184
200
  var extraProps = {};
185
201
 
@@ -268,6 +284,7 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
268
284
 
269
285
  (0, _defineProperty2["default"])(DropdownMenuRoot, "displayName", 'DropdownMenu');
270
286
  (0, _defineProperty2["default"])(DropdownMenuRoot, "style", style);
287
+ (0, _defineProperty2["default"])(DropdownMenuRoot, "enhance", [(0, _uniqueID["default"])()]);
271
288
  (0, _defineProperty2["default"])(DropdownMenuRoot, "defaultProps", {
272
289
  size: 'm',
273
290
  defaultVisible: false,
@@ -276,12 +293,13 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
276
293
 
277
294
  function List(props) {
278
295
  var _ref2 = arguments[0],
279
- _ref6;
296
+ _ref7;
280
297
 
281
298
  var SDropdownMenuList = _flexBox.Box;
282
- return _ref6 = (0, _core.sstyled)(props.styles), /*#__PURE__*/_react["default"].createElement(SDropdownMenuList, _ref6.cn("SDropdownMenuList", _objectSpread({}, (0, _core.assignProps)({
299
+ return _ref7 = (0, _core.sstyled)(props.styles), /*#__PURE__*/_react["default"].createElement(SDropdownMenuList, _ref7.cn("SDropdownMenuList", _objectSpread({}, (0, _core.assignProps)({
283
300
  "tag": _scrollArea["default"],
284
- "role": "menu"
301
+ "role": "menu",
302
+ "aria-activedescendant": props.index
285
303
  }, _ref2))));
286
304
  }
287
305
 
@@ -301,7 +319,8 @@ function Item(props) {
301
319
  var styles = (0, _core.sstyled)(props.styles);
302
320
  return /*#__PURE__*/_react["default"].createElement(SDropdownMenuItem, (0, _extends2["default"])({
303
321
  role: "menuitem",
304
- tabIndex: -1,
322
+ tabIndex: 0,
323
+ id: props.label,
305
324
  className: (0, _classnames["default"])(styles.cn('SDropdownMenuItem', _objectSpread(_objectSpread({}, props), {}, {
306
325
  highlighted: !props.disabled && props.highlighted
307
326
  })).className, className) || undefined
@@ -324,26 +343,38 @@ function Addon(props) {
324
343
 
325
344
  function Hint(props) {
326
345
  var _ref4 = arguments[0],
327
- _ref7;
346
+ _ref8;
328
347
 
329
348
  var SDropdownMenuItem = _flexBox.Flex;
330
- return _ref7 = (0, _core.sstyled)(props.styles), /*#__PURE__*/_react["default"].createElement(SDropdownMenuItem, _ref7.cn("SDropdownMenuItem", _objectSpread({}, (0, _core.assignProps)({
331
- "variant": "hint"
349
+ return _ref8 = (0, _core.sstyled)(props.styles), /*#__PURE__*/_react["default"].createElement(SDropdownMenuItem, _ref8.cn("SDropdownMenuItem", _objectSpread({}, (0, _core.assignProps)({
350
+ "variant": "hint",
351
+ "role": "menuitem",
352
+ "tabIndex": 0
332
353
  }, _ref4))));
333
354
  }
334
355
 
335
356
  function Title(props) {
336
357
  var _ref5 = arguments[0],
337
- _ref8;
358
+ _ref9;
338
359
 
339
360
  var SDropdownMenuItem = _flexBox.Flex;
340
- return _ref8 = (0, _core.sstyled)(props.styles), /*#__PURE__*/_react["default"].createElement(SDropdownMenuItem, _ref8.cn("SDropdownMenuItem", _objectSpread({}, (0, _core.assignProps)({
341
- "variant": "title"
361
+ return _ref9 = (0, _core.sstyled)(props.styles), /*#__PURE__*/_react["default"].createElement(SDropdownMenuItem, _ref9.cn("SDropdownMenuItem", _objectSpread({}, (0, _core.assignProps)({
362
+ "variant": "title",
363
+ "role": "menuitem",
364
+ "tabIndex": 0
342
365
  }, _ref5))));
343
366
  }
344
367
 
368
+ function Trigger() {
369
+ var _ref6 = arguments[0];
370
+ return /*#__PURE__*/_react["default"].createElement(_dropdown["default"].Trigger, (0, _core.assignProps)({
371
+ "type": "button",
372
+ "aria-haspopup": "true"
373
+ }, _ref6));
374
+ }
375
+
345
376
  var DropdownMenu = (0, _core["default"])(DropdownMenuRoot, {
346
- Trigger: _dropdown["default"].Trigger,
377
+ Trigger: Trigger,
347
378
  Popper: _dropdown["default"].Popper,
348
379
  List: List,
349
380
  Menu: Menu,
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMenu.js","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","sstyled","styles","ScrollAreaComponent","Menu","DropdownMenu","Item","useFlex","forwardRef","SDropdownMenuItem","className","other","cn","undefined","Addon","useBox","SDropdownMenuItemAddon","Hint","Flex","Title","createComponent","Trigger","Popper","ItemTitle","ItemHint","parent"],"sources":["../../src/DropdownMenu.jsx"],"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"],"mappings":"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"}
1
+ {"version":3,"file":"DropdownMenu.js","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","uid","disablePortal","id","undefined","onKeyDown","handlerKeyDown","index","tabIndex","props","highlighted","extraProps","_items","push","ref","scrollToNode","itemsLastIndex","length","selectedIndex","findIndex","item","selected","newIndex","disabled","Children","Dropdown","Component","style","uniqueIDEnhancement","defaultVisible","defaultHighlightedIndex","List","SDropdownMenuList","Box","sstyled","styles","ScrollAreaComponent","Menu","DropdownMenu","Item","useFlex","forwardRef","SDropdownMenuItem","className","other","label","cn","Addon","useBox","SDropdownMenuItemAddon","Hint","Flex","Title","Trigger","createComponent","Popper","ItemTitle","ItemHint","parent"],"sources":["../../src/DropdownMenu.jsx"],"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 uniqueIDEnhancement from '@semcore/utils/lib/uniqueID';\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 static enhance = [uniqueIDEnhancement()];\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, uid, disablePortal, visible } = this.asProps;\n\n return {\n size,\n id: `igc-${uid}-trigger`,\n 'aria-controls': visible ? `igc-${uid}-popper` : undefined,\n 'aria-flowto': visible && !disablePortal ? `igc-${uid}-popper` : undefined,\n 'aria-label': visible && !disablePortal ? `Press Tab to go to popover` : undefined,\n onKeyDown: this.handlerKeyDown,\n };\n }\n\n getListProps() {\n const { size } = this.asProps;\n return {\n size,\n index: this.asProps.highlightedIndex,\n };\n }\n\n getPopperProps() {\n const { uid, disablePortal } = this.asProps;\n\n return {\n tabIndex: 0,\n onKeyDown: this.handlerKeyDown,\n id: `igc-${uid}-popper`,\n 'aria-flowto': !disablePortal ? `igc-${uid}-trigger` : undefined,\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\n return sstyled(props.styles)(\n <SDropdownMenuList\n render={Box}\n tag={ScrollAreaComponent}\n role=\"menu\"\n aria-activedescendant={props.index}\n />,\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={0}\n id={props.label}\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)(\n <SDropdownMenuItem render={Flex} variant=\"hint\" role=\"menuitem\" tabIndex={0} />,\n );\n}\n\nfunction Title(props) {\n const SDropdownMenuItem = Root;\n return sstyled(props.styles)(\n <SDropdownMenuItem render={Flex} variant=\"title\" role=\"menuitem\" tabIndex={0} />,\n );\n}\n\nfunction Trigger() {\n return <Root render={Dropdown.Trigger} type=\"button\" aria-haspopup=\"true\" />;\n}\n\nconst DropdownMenu = createComponent(\n DropdownMenuRoot,\n {\n 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"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=index.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.js","names":[],"sources":["../../src/index.d.ts"],"sourcesContent":["import { CProps, PropGetterFn, ReturnEl } from '@semcore/core';\nimport Dropdown, { IDropdownContext, IDropdownProps, IDropdownHandlers } from '@semcore/dropdown';\nimport { Box, IBoxProps, IFlexProps } from '@semcore/flex-box';\nimport { IScrollAreaProps } from '@semcore/scroll-area';\n\nexport type DropdownMenuSize = 'm' | 'l';\n\nexport interface IDropdownMenuProps extends IDropdownProps {\n /**\n * Size of the menu\n * @default m\n */\n size?: DropdownMenuSize;\n /**\n * Index of the element selected by default\n */\n defaultHighlightedIndex?: number;\n /**\n * Index of the selected item\n */\n highlightedIndex?: number;\n /**\n * Callback for highlightedIndex change\n * highlightedIndex - Index of the selected item\n */\n onHighlightedIndexChange?: (highlightedIndex: number) => void;\n}\n\nexport interface IDropdownMenuListProps extends IBoxProps, IScrollAreaProps {\n /**\n * Size of the menu\n * @default m\n */\n size?: DropdownMenuSize;\n}\n\nexport interface IDropdownMenuMenuProps extends IDropdownMenuListProps {}\n\nexport interface IDropdownMenuItemProps extends IFlexProps {\n /**\n * Enables selected state\n */\n selected?: boolean;\n /**\n * Disables the component\n */\n disabled?: boolean;\n /**\n * Adds focus styles around\n */\n highlighted?: boolean;\n /**\n * Makes the element non-interactive\n */\n notInteractive?: boolean;\n /**\n * Size of the component\n * @default m\n */\n size?: DropdownMenuSize;\n}\n\nexport interface IDropdownMenuItemHintProps extends IFlexProps {\n /**\n * Size of the component\n * @default m\n */\n size?: DropdownMenuSize;\n}\n\nexport interface IDropdownMenuItemTitleProps extends IFlexProps {\n /**\n * Size of the component\n * @default m\n */\n size?: DropdownMenuSize;\n}\n\nexport interface IDropdownMenuContext extends IDropdownContext {\n getListProps: PropGetterFn;\n getItemProps: PropGetterFn;\n getItemHintProps: PropGetterFn;\n getItemTitleProps: PropGetterFn;\n}\n\nexport interface IDropdownMenuHandlers extends IDropdownHandlers {\n highlightedIndex: (index: number) => void;\n}\n\ndeclare const DropdownMenu: (<T>(\n props: CProps<IDropdownMenuProps & T, IDropdownMenuContext, IDropdownMenuHandlers>,\n) => ReturnEl) & {\n Trigger: typeof Dropdown.Trigger;\n Popper: typeof Dropdown.Popper;\n List: <T>(\n props: CProps<IDropdownMenuListProps & T, IDropdownMenuContext, IDropdownMenuHandlers>,\n ) => ReturnEl;\n Menu: <T>(\n props: CProps<IDropdownMenuMenuProps & T, IDropdownMenuContext, IDropdownMenuHandlers>,\n ) => ReturnEl;\n Item: (<T>(\n props: CProps<IDropdownMenuItemProps & T, IDropdownMenuContext, IDropdownMenuHandlers>,\n ) => ReturnEl) & {\n Addon: typeof Box;\n };\n ItemTitle: <T>(props: IDropdownMenuItemTitleProps & T) => ReturnEl;\n ItemHint: <T>(props: IDropdownMenuItemHintProps & T) => ReturnEl;\n};\n\nexport default DropdownMenu;\n"],"mappings":""}
@@ -9,6 +9,7 @@ import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstruct
9
9
  import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
10
10
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
11
11
  import { sstyled as _sstyled } from "@semcore/core";
12
+ import { assignProps as _assignProps6 } from "@semcore/core";
12
13
  import { assignProps as _assignProps5 } from "@semcore/core";
13
14
  import { assignProps as _assignProps4 } from "@semcore/core";
14
15
  import { assignProps as _assignProps3 } from "@semcore/core";
@@ -31,29 +32,30 @@ import createComponent, { Component, sstyled, Root } from '@semcore/core';
31
32
  import Dropdown from '@semcore/dropdown';
32
33
  import { Box, Flex, useBox, useFlex } from '@semcore/flex-box';
33
34
  import ScrollAreaComponent from '@semcore/scroll-area';
35
+ import uniqueIDEnhancement from '@semcore/utils/lib/uniqueID';
34
36
 
35
37
  /*__reshadow-styles__:"./style/dropdown-menu.shadow.css"*/
36
38
  var style = (
37
39
  /*__reshadow_css_start__*/
38
40
  _sstyled.insert(
39
41
  /*__inner_css_start__*/
40
- ".___SDropdownMenuList_t5jr0_gg_{max-height:240px;margin:4px 0;padding:0;position:relative;min-height:26px;min-width:32px}.___SDropdownMenuItem_t5jr0_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_t5jr0_gg_:hover{background-color:#f4f5f9}.___SDropdownMenuItem_t5jr0_gg_:focus{outline:none}.___SDropdownMenuItem_t5jr0_gg_.__highlighted_t5jr0_gg_{z-index:1;box-shadow:0 0 0 3px rgba(0, 143, 248, 0.2) inset}.___SDropdownMenuItem_t5jr0_gg_.__selected_t5jr0_gg_{background-color:rgba(196,229,254,.7)}.___SDropdownMenuItem_t5jr0_gg_.__selected_t5jr0_gg_:hover{background-color:#c4e5fe}.___SDropdownMenuItem_t5jr0_gg_.__disabled_t5jr0_gg_{opacity:0.3;cursor:default;pointer-events:none}.___SDropdownMenuItem_t5jr0_gg_._size_l_t5jr0_gg_{font-size:16px;line-height:1.5;padding:8px 12px;min-height:40px}.___SDropdownMenuItem_t5jr0_gg_._size_m_t5jr0_gg_{font-size:14px;line-height:1.42;padding:6px 8px;min-height:32px}.___SDropdownMenuItem_t5jr0_gg_.__notInteractive_t5jr0_gg_{cursor:default}.___SDropdownMenuItem_t5jr0_gg_.__notInteractive_t5jr0_gg_:hover{background:none}.___SDropdownMenuItem_t5jr0_gg_._variant_hint_t5jr0_gg_{color:#6c6e79;cursor:default}.___SDropdownMenuItem_t5jr0_gg_._variant_hint_t5jr0_gg_:hover{background:none}.___SDropdownMenuItem_t5jr0_gg_._variant_title_t5jr0_gg_{font-weight:700;cursor:default}.___SDropdownMenuItem_t5jr0_gg_._variant_title_t5jr0_gg_:hover{background:none}.___SDropdownMenuItemAddon_t5jr0_gg_{display:inline-flex;margin-left:8px;margin-right:8px}.___SDropdownMenuItemAddon_t5jr0_gg_:first-child{margin-left:0}.___SDropdownMenuItemAddon_t5jr0_gg_:last-child{margin-right:0}.___SPopper_t5jr0_gg_:focus{box-shadow:0 0 0 3px rgba(0, 143, 248, 0.2)}"
42
+ ".___SDropdownMenuList_1rlfp_gg_{max-height:240px;margin:4px 0;padding:0;position:relative;min-height:26px;min-width:32px}.___SDropdownMenuItem_1rlfp_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_1rlfp_gg_:hover{background-color:#f4f5f9}.___SDropdownMenuItem_1rlfp_gg_:focus{outline:none}.___SDropdownMenuItem_1rlfp_gg_.__highlighted_1rlfp_gg_{z-index:1;box-shadow:0 0 0 3px rgba(0, 143, 248, 0.2) inset}.___SDropdownMenuItem_1rlfp_gg_.__selected_1rlfp_gg_{background-color:rgba(196,229,254,.7)}.___SDropdownMenuItem_1rlfp_gg_.__selected_1rlfp_gg_:hover{background-color:#c4e5fe}.___SDropdownMenuItem_1rlfp_gg_.__disabled_1rlfp_gg_{opacity:0.3;cursor:default;pointer-events:none}.___SDropdownMenuItem_1rlfp_gg_._size_l_1rlfp_gg_{font-size:16px;line-height:1.5;padding:8px 12px;min-height:40px}.___SDropdownMenuItem_1rlfp_gg_._size_m_1rlfp_gg_{font-size:14px;line-height:1.42;padding:6px 8px;min-height:32px}.___SDropdownMenuItem_1rlfp_gg_.__notInteractive_1rlfp_gg_{cursor:default}.___SDropdownMenuItem_1rlfp_gg_.__notInteractive_1rlfp_gg_:hover{background:none}.___SDropdownMenuItem_1rlfp_gg_._variant_hint_1rlfp_gg_{color:#6c6e79;cursor:default}.___SDropdownMenuItem_1rlfp_gg_._variant_hint_1rlfp_gg_:hover{background:none}.___SDropdownMenuItem_1rlfp_gg_._variant_title_1rlfp_gg_{font-weight:700;cursor:default}.___SDropdownMenuItem_1rlfp_gg_._variant_title_1rlfp_gg_:hover{background:none}.___SDropdownMenuItemAddon_1rlfp_gg_{display:inline-flex;margin-left:8px;margin-right:8px}.___SDropdownMenuItemAddon_1rlfp_gg_:first-child{margin-left:0}.___SDropdownMenuItemAddon_1rlfp_gg_:last-child{margin-right:0}.___SPopper_1rlfp_gg_:focus{box-shadow:0 0 0 3px rgba(0, 143, 248, 0.2)}"
41
43
  /*__inner_css_end__*/
42
- , "t5jr0_gg_")
44
+ , "1rlfp_gg_")
43
45
  /*__reshadow_css_end__*/
44
46
  , {
45
- "__SDropdownMenuList": "___SDropdownMenuList_t5jr0_gg_",
46
- "__SDropdownMenuItem": "___SDropdownMenuItem_t5jr0_gg_",
47
- "_highlighted": "__highlighted_t5jr0_gg_",
48
- "_selected": "__selected_t5jr0_gg_",
49
- "_disabled": "__disabled_t5jr0_gg_",
50
- "_size_l": "_size_l_t5jr0_gg_",
51
- "_size_m": "_size_m_t5jr0_gg_",
52
- "_notInteractive": "__notInteractive_t5jr0_gg_",
53
- "_variant_hint": "_variant_hint_t5jr0_gg_",
54
- "_variant_title": "_variant_title_t5jr0_gg_",
55
- "__SDropdownMenuItemAddon": "___SDropdownMenuItemAddon_t5jr0_gg_",
56
- "__SPopper": "___SPopper_t5jr0_gg_"
47
+ "__SDropdownMenuList": "___SDropdownMenuList_1rlfp_gg_",
48
+ "__SDropdownMenuItem": "___SDropdownMenuItem_1rlfp_gg_",
49
+ "_highlighted": "__highlighted_1rlfp_gg_",
50
+ "_selected": "__selected_1rlfp_gg_",
51
+ "_disabled": "__disabled_1rlfp_gg_",
52
+ "_size_l": "_size_l_1rlfp_gg_",
53
+ "_size_m": "_size_m_1rlfp_gg_",
54
+ "_notInteractive": "__notInteractive_1rlfp_gg_",
55
+ "_variant_hint": "_variant_hint_1rlfp_gg_",
56
+ "_variant_title": "_variant_title_1rlfp_gg_",
57
+ "__SDropdownMenuItemAddon": "___SDropdownMenuItemAddon_1rlfp_gg_",
58
+ "__SPopper": "___SPopper_1rlfp_gg_"
57
59
  });
58
60
  var KEYS = ['ArrowDown', 'ArrowUp', 'Enter', ' '];
59
61
  var INTERACTION_TAGS = ['INPUT', 'TEXTAREA'];
@@ -134,9 +136,17 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
134
136
  }, {
135
137
  key: "getTriggerProps",
136
138
  value: function getTriggerProps() {
137
- var size = this.asProps.size;
139
+ var _this$asProps = this.asProps,
140
+ size = _this$asProps.size,
141
+ uid = _this$asProps.uid,
142
+ disablePortal = _this$asProps.disablePortal,
143
+ visible = _this$asProps.visible;
138
144
  return {
139
145
  size: size,
146
+ id: "igc-".concat(uid, "-trigger"),
147
+ 'aria-controls': visible ? "igc-".concat(uid, "-popper") : undefined,
148
+ 'aria-flowto': visible && !disablePortal ? "igc-".concat(uid, "-popper") : undefined,
149
+ 'aria-label': visible && !disablePortal ? "Press Tab to go to popover" : undefined,
140
150
  onKeyDown: this.handlerKeyDown
141
151
  };
142
152
  }
@@ -145,23 +155,29 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
145
155
  value: function getListProps() {
146
156
  var size = this.asProps.size;
147
157
  return {
148
- size: size
158
+ size: size,
159
+ index: this.asProps.highlightedIndex
149
160
  };
150
161
  }
151
162
  }, {
152
163
  key: "getPopperProps",
153
164
  value: function getPopperProps() {
165
+ var _this$asProps2 = this.asProps,
166
+ uid = _this$asProps2.uid,
167
+ disablePortal = _this$asProps2.disablePortal;
154
168
  return {
155
169
  tabIndex: 0,
156
- onKeyDown: this.handlerKeyDown
170
+ onKeyDown: this.handlerKeyDown,
171
+ id: "igc-".concat(uid, "-popper"),
172
+ 'aria-flowto': !disablePortal ? "igc-".concat(uid, "-trigger") : undefined
157
173
  };
158
174
  }
159
175
  }, {
160
176
  key: "getItemProps",
161
177
  value: function getItemProps(props, index) {
162
- var _this$asProps = this.asProps,
163
- size = _this$asProps.size,
164
- highlightedIndex = _this$asProps.highlightedIndex;
178
+ var _this$asProps3 = this.asProps,
179
+ size = _this$asProps3.size,
180
+ highlightedIndex = _this$asProps3.highlightedIndex;
165
181
  var highlighted = index === highlightedIndex;
166
182
  var extraProps = {};
167
183
 
@@ -253,6 +269,8 @@ _defineProperty(DropdownMenuRoot, "displayName", 'DropdownMenu');
253
269
 
254
270
  _defineProperty(DropdownMenuRoot, "style", style);
255
271
 
272
+ _defineProperty(DropdownMenuRoot, "enhance", [uniqueIDEnhancement()]);
273
+
256
274
  _defineProperty(DropdownMenuRoot, "defaultProps", {
257
275
  size: 'm',
258
276
  defaultVisible: false,
@@ -261,12 +279,13 @@ _defineProperty(DropdownMenuRoot, "defaultProps", {
261
279
 
262
280
  function List(props) {
263
281
  var _ref2 = arguments[0],
264
- _ref6;
282
+ _ref7;
265
283
 
266
284
  var SDropdownMenuList = Box;
267
- return _ref6 = sstyled(props.styles), /*#__PURE__*/React.createElement(SDropdownMenuList, _ref6.cn("SDropdownMenuList", _objectSpread({}, _assignProps2({
285
+ return _ref7 = sstyled(props.styles), /*#__PURE__*/React.createElement(SDropdownMenuList, _ref7.cn("SDropdownMenuList", _objectSpread({}, _assignProps2({
268
286
  "tag": ScrollAreaComponent,
269
- "role": "menu"
287
+ "role": "menu",
288
+ "aria-activedescendant": props.index
270
289
  }, _ref2))));
271
290
  }
272
291
 
@@ -286,7 +305,8 @@ function Item(props) {
286
305
  var styles = sstyled(props.styles);
287
306
  return /*#__PURE__*/React.createElement(SDropdownMenuItem, _extends({
288
307
  role: "menuitem",
289
- tabIndex: -1,
308
+ tabIndex: 0,
309
+ id: props.label,
290
310
  className: cn(styles.cn('SDropdownMenuItem', _objectSpread(_objectSpread({}, props), {}, {
291
311
  highlighted: !props.disabled && props.highlighted
292
312
  })).className, className) || undefined
@@ -309,26 +329,38 @@ function Addon(props) {
309
329
 
310
330
  function Hint(props) {
311
331
  var _ref4 = arguments[0],
312
- _ref7;
332
+ _ref8;
313
333
 
314
334
  var SDropdownMenuItem = Flex;
315
- return _ref7 = sstyled(props.styles), /*#__PURE__*/React.createElement(SDropdownMenuItem, _ref7.cn("SDropdownMenuItem", _objectSpread({}, _assignProps4({
316
- "variant": "hint"
335
+ return _ref8 = sstyled(props.styles), /*#__PURE__*/React.createElement(SDropdownMenuItem, _ref8.cn("SDropdownMenuItem", _objectSpread({}, _assignProps4({
336
+ "variant": "hint",
337
+ "role": "menuitem",
338
+ "tabIndex": 0
317
339
  }, _ref4))));
318
340
  }
319
341
 
320
342
  function Title(props) {
321
343
  var _ref5 = arguments[0],
322
- _ref8;
344
+ _ref9;
323
345
 
324
346
  var SDropdownMenuItem = Flex;
325
- return _ref8 = sstyled(props.styles), /*#__PURE__*/React.createElement(SDropdownMenuItem, _ref8.cn("SDropdownMenuItem", _objectSpread({}, _assignProps5({
326
- "variant": "title"
347
+ return _ref9 = sstyled(props.styles), /*#__PURE__*/React.createElement(SDropdownMenuItem, _ref9.cn("SDropdownMenuItem", _objectSpread({}, _assignProps5({
348
+ "variant": "title",
349
+ "role": "menuitem",
350
+ "tabIndex": 0
327
351
  }, _ref5))));
328
352
  }
329
353
 
354
+ function Trigger() {
355
+ var _ref6 = arguments[0];
356
+ return /*#__PURE__*/React.createElement(Dropdown.Trigger, _assignProps6({
357
+ "type": "button",
358
+ "aria-haspopup": "true"
359
+ }, _ref6));
360
+ }
361
+
330
362
  var DropdownMenu = createComponent(DropdownMenuRoot, {
331
- Trigger: Dropdown.Trigger,
363
+ Trigger: Trigger,
332
364
  Popper: Dropdown.Popper,
333
365
  List: List,
334
366
  Menu: Menu,
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMenu.js","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"],"sources":["../../src/DropdownMenu.jsx"],"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"],"mappings":"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"}
1
+ {"version":3,"file":"DropdownMenu.js","names":["React","cn","createComponent","Component","sstyled","Root","Dropdown","Box","Flex","useBox","useFlex","ScrollAreaComponent","uniqueIDEnhancement","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","uid","disablePortal","id","undefined","onKeyDown","handlerKeyDown","index","tabIndex","props","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","label","Addon","SDropdownMenuItemAddon","Hint","Title","Trigger","Popper","ItemTitle","ItemHint","parent"],"sources":["../../src/DropdownMenu.jsx"],"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 uniqueIDEnhancement from '@semcore/utils/lib/uniqueID';\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 static enhance = [uniqueIDEnhancement()];\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, uid, disablePortal, visible } = this.asProps;\n\n return {\n size,\n id: `igc-${uid}-trigger`,\n 'aria-controls': visible ? `igc-${uid}-popper` : undefined,\n 'aria-flowto': visible && !disablePortal ? `igc-${uid}-popper` : undefined,\n 'aria-label': visible && !disablePortal ? `Press Tab to go to popover` : undefined,\n onKeyDown: this.handlerKeyDown,\n };\n }\n\n getListProps() {\n const { size } = this.asProps;\n return {\n size,\n index: this.asProps.highlightedIndex,\n };\n }\n\n getPopperProps() {\n const { uid, disablePortal } = this.asProps;\n\n return {\n tabIndex: 0,\n onKeyDown: this.handlerKeyDown,\n id: `igc-${uid}-popper`,\n 'aria-flowto': !disablePortal ? `igc-${uid}-trigger` : undefined,\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\n return sstyled(props.styles)(\n <SDropdownMenuList\n render={Box}\n tag={ScrollAreaComponent}\n role=\"menu\"\n aria-activedescendant={props.index}\n />,\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={0}\n id={props.label}\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)(\n <SDropdownMenuItem render={Flex} variant=\"hint\" role=\"menuitem\" tabIndex={0} />,\n );\n}\n\nfunction Title(props) {\n const SDropdownMenuItem = Root;\n return sstyled(props.styles)(\n <SDropdownMenuItem render={Flex} variant=\"title\" role=\"menuitem\" tabIndex={0} />,\n );\n}\n\nfunction Trigger() {\n return <Root render={Dropdown.Trigger} type=\"button\" aria-haspopup=\"true\" />;\n}\n\nconst DropdownMenu = createComponent(\n DropdownMenuRoot,\n {\n 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"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.js","names":[],"sources":["../../src/index.d.ts"],"sourcesContent":["import { CProps, PropGetterFn, ReturnEl } from '@semcore/core';\nimport Dropdown, { IDropdownContext, IDropdownProps, IDropdownHandlers } from '@semcore/dropdown';\nimport { Box, IBoxProps, IFlexProps } from '@semcore/flex-box';\nimport { IScrollAreaProps } from '@semcore/scroll-area';\n\nexport type DropdownMenuSize = 'm' | 'l';\n\nexport interface IDropdownMenuProps extends IDropdownProps {\n /**\n * Size of the menu\n * @default m\n */\n size?: DropdownMenuSize;\n /**\n * Index of the element selected by default\n */\n defaultHighlightedIndex?: number;\n /**\n * Index of the selected item\n */\n highlightedIndex?: number;\n /**\n * Callback for highlightedIndex change\n * highlightedIndex - Index of the selected item\n */\n onHighlightedIndexChange?: (highlightedIndex: number) => void;\n}\n\nexport interface IDropdownMenuListProps extends IBoxProps, IScrollAreaProps {\n /**\n * Size of the menu\n * @default m\n */\n size?: DropdownMenuSize;\n}\n\nexport interface IDropdownMenuMenuProps extends IDropdownMenuListProps {}\n\nexport interface IDropdownMenuItemProps extends IFlexProps {\n /**\n * Enables selected state\n */\n selected?: boolean;\n /**\n * Disables the component\n */\n disabled?: boolean;\n /**\n * Adds focus styles around\n */\n highlighted?: boolean;\n /**\n * Makes the element non-interactive\n */\n notInteractive?: boolean;\n /**\n * Size of the component\n * @default m\n */\n size?: DropdownMenuSize;\n}\n\nexport interface IDropdownMenuItemHintProps extends IFlexProps {\n /**\n * Size of the component\n * @default m\n */\n size?: DropdownMenuSize;\n}\n\nexport interface IDropdownMenuItemTitleProps extends IFlexProps {\n /**\n * Size of the component\n * @default m\n */\n size?: DropdownMenuSize;\n}\n\nexport interface IDropdownMenuContext extends IDropdownContext {\n getListProps: PropGetterFn;\n getItemProps: PropGetterFn;\n getItemHintProps: PropGetterFn;\n getItemTitleProps: PropGetterFn;\n}\n\nexport interface IDropdownMenuHandlers extends IDropdownHandlers {\n highlightedIndex: (index: number) => void;\n}\n\ndeclare const DropdownMenu: (<T>(\n props: CProps<IDropdownMenuProps & T, IDropdownMenuContext, IDropdownMenuHandlers>,\n) => ReturnEl) & {\n Trigger: typeof Dropdown.Trigger;\n Popper: typeof Dropdown.Popper;\n List: <T>(\n props: CProps<IDropdownMenuListProps & T, IDropdownMenuContext, IDropdownMenuHandlers>,\n ) => ReturnEl;\n Menu: <T>(\n props: CProps<IDropdownMenuMenuProps & T, IDropdownMenuContext, IDropdownMenuHandlers>,\n ) => ReturnEl;\n Item: (<T>(\n props: CProps<IDropdownMenuItemProps & T, IDropdownMenuContext, IDropdownMenuHandlers>,\n ) => ReturnEl) & {\n Addon: typeof Box;\n };\n ItemTitle: <T>(props: IDropdownMenuItemTitleProps & T) => ReturnEl;\n ItemHint: <T>(props: IDropdownMenuItemHintProps & T) => ReturnEl;\n};\n\nexport default DropdownMenu;\n"],"mappings":""}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@semcore/dropdown-menu",
3
3
  "description": "Semrush DropdownMenu Component",
4
- "version": "3.0.12",
4
+ "version": "3.1.1",
5
5
  "main": "lib/cjs/index.js",
6
6
  "module": "lib/es6/index.js",
7
7
  "typings": "lib/types/index.d.ts",
@@ -9,14 +9,14 @@
9
9
  "author": "UI-kit team <ui-kit-team@semrush.com>",
10
10
  "license": "MIT",
11
11
  "scripts": {
12
- "build": "build --source=js",
12
+ "build": "pnpm semcore-builder --source=js",
13
13
  "test": "jest"
14
14
  },
15
15
  "dependencies": {
16
- "@semcore/utils": "^3.15",
17
16
  "@semcore/dropdown": "^3",
18
17
  "@semcore/flex-box": "^4",
19
18
  "@semcore/scroll-area": "^4.0.0",
19
+ "@semcore/utils": "^3.15",
20
20
  "classnames": "2.2.6"
21
21
  },
22
22
  "peerDependencies": {
@@ -32,6 +32,9 @@
32
32
  "directory": "semcore/dropdown-menu"
33
33
  },
34
34
  "devDependencies": {
35
+ "@types/react": "16.8 - 17",
36
+ "@guidepup/playwright": "0.6.1",
37
+ "@playwright/test": "1.25.1",
35
38
  "@semcore/jest-preset-ui": "1.0.0"
36
39
  }
37
40
  }
@@ -1,110 +0,0 @@
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';
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;
@@ -1,110 +0,0 @@
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';
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;