intergalactic 15.60.1 → 15.61.0-prerelease-5e9c09fb

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.
Files changed (117) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/base-trigger/lib/cjs/BaseTrigger.js +18 -18
  3. package/base-trigger/lib/cjs/ButtonTrigger.js +3 -3
  4. package/base-trigger/lib/cjs/FilterTrigger.js +7 -7
  5. package/base-trigger/lib/cjs/LinkTrigger.js +12 -12
  6. package/base-trigger/lib/es6/BaseTrigger.js +18 -18
  7. package/base-trigger/lib/es6/ButtonTrigger.js +3 -3
  8. package/base-trigger/lib/es6/FilterTrigger.js +7 -7
  9. package/base-trigger/lib/es6/LinkTrigger.js +12 -12
  10. package/d3-chart/lib/cjs/Area.js +11 -11
  11. package/d3-chart/lib/cjs/Axis.js +14 -14
  12. package/d3-chart/lib/cjs/Bar.js +10 -10
  13. package/d3-chart/lib/cjs/Bubble.js +12 -12
  14. package/d3-chart/lib/cjs/Donut.js +9 -9
  15. package/d3-chart/lib/cjs/Dots.js +8 -8
  16. package/d3-chart/lib/cjs/HorizontalBar.js +10 -10
  17. package/d3-chart/lib/cjs/Hover.js +3 -3
  18. package/d3-chart/lib/cjs/Line.js +9 -9
  19. package/d3-chart/lib/cjs/Plot.js +3 -3
  20. package/d3-chart/lib/cjs/Radar.js +19 -19
  21. package/d3-chart/lib/cjs/RadialTree.js +11 -11
  22. package/d3-chart/lib/cjs/ReferenceLine.js +9 -9
  23. package/d3-chart/lib/cjs/ScatterPlot.js +9 -9
  24. package/d3-chart/lib/cjs/Tooltip.js +9 -9
  25. package/d3-chart/lib/cjs/Venn.js +9 -9
  26. package/d3-chart/lib/cjs/a11y/PlotA11yModule.js +2 -2
  27. package/d3-chart/lib/cjs/a11y/PlotA11yView.js +2 -2
  28. package/d3-chart/lib/cjs/component/ChartLegend/LegendFlex/LegendFlex.js +4 -4
  29. package/d3-chart/lib/cjs/component/ChartLegend/LegendItem/LegendItem.js +17 -17
  30. package/d3-chart/lib/cjs/component/ChartLegend/LegendTable/LegendTable.js +6 -6
  31. package/d3-chart/lib/es6/Area.js +11 -11
  32. package/d3-chart/lib/es6/Axis.js +14 -14
  33. package/d3-chart/lib/es6/Bar.js +10 -10
  34. package/d3-chart/lib/es6/Bubble.js +12 -12
  35. package/d3-chart/lib/es6/Donut.js +9 -9
  36. package/d3-chart/lib/es6/Dots.js +8 -8
  37. package/d3-chart/lib/es6/HorizontalBar.js +10 -10
  38. package/d3-chart/lib/es6/Hover.js +3 -3
  39. package/d3-chart/lib/es6/Line.js +9 -9
  40. package/d3-chart/lib/es6/Plot.js +3 -3
  41. package/d3-chart/lib/es6/Radar.js +19 -19
  42. package/d3-chart/lib/es6/RadialTree.js +11 -11
  43. package/d3-chart/lib/es6/ReferenceLine.js +9 -9
  44. package/d3-chart/lib/es6/ScatterPlot.js +9 -9
  45. package/d3-chart/lib/es6/Tooltip.js +9 -9
  46. package/d3-chart/lib/es6/Venn.js +9 -9
  47. package/d3-chart/lib/es6/a11y/PlotA11yModule.js +2 -2
  48. package/d3-chart/lib/es6/a11y/PlotA11yView.js +2 -2
  49. package/d3-chart/lib/es6/component/ChartLegend/LegendFlex/LegendFlex.js +4 -4
  50. package/d3-chart/lib/es6/component/ChartLegend/LegendItem/LegendItem.js +17 -17
  51. package/d3-chart/lib/es6/component/ChartLegend/LegendTable/LegendTable.js +6 -6
  52. package/date-picker/lib/cjs/components/Calendar.js +21 -21
  53. package/date-picker/lib/cjs/components/DateRangeComparatorAbstract.js +26 -26
  54. package/date-picker/lib/cjs/components/InputTrigger.js +26 -26
  55. package/date-picker/lib/cjs/components/PickerAbstract.js +26 -26
  56. package/date-picker/lib/cjs/components/RangePickerAbstract.js +26 -26
  57. package/date-picker/lib/es6/components/Calendar.js +21 -21
  58. package/date-picker/lib/es6/components/DateRangeComparatorAbstract.js +26 -26
  59. package/date-picker/lib/es6/components/InputTrigger.js +26 -26
  60. package/date-picker/lib/es6/components/PickerAbstract.js +26 -26
  61. package/date-picker/lib/es6/components/RangePickerAbstract.js +26 -26
  62. package/dropdown/lib/cjs/Dropdown.js +2 -2
  63. package/dropdown/lib/es6/Dropdown.js +2 -2
  64. package/dropdown-menu/index.d.ts +9 -0
  65. package/dropdown-menu/lib/cjs/DropdownMenu.js +311 -95
  66. package/dropdown-menu/lib/cjs/DropdownMenu.js.map +1 -1
  67. package/dropdown-menu/lib/cjs/index.d.js.map +1 -1
  68. package/dropdown-menu/lib/cjs/style/dropdown-menu.shadow.css +20 -1
  69. package/dropdown-menu/lib/cjs/styleScrollArea.js +6 -6
  70. package/dropdown-menu/lib/es6/DropdownMenu.js +316 -97
  71. package/dropdown-menu/lib/es6/DropdownMenu.js.map +1 -1
  72. package/dropdown-menu/lib/es6/index.d.js.map +1 -1
  73. package/dropdown-menu/lib/es6/style/dropdown-menu.shadow.css +20 -1
  74. package/dropdown-menu/lib/es6/styleScrollArea.js +6 -6
  75. package/dropdown-menu/lib/types/index.d.ts +9 -0
  76. package/feature-popover/lib/cjs/FeaturePopover.js +10 -10
  77. package/feature-popover/lib/es6/FeaturePopover.js +10 -10
  78. package/format-text/lib/cjs/FormatText.js +5 -5
  79. package/format-text/lib/cjs/style/format-text.shadow.css +3 -1
  80. package/format-text/lib/es6/FormatText.js +5 -5
  81. package/format-text/lib/es6/style/format-text.shadow.css +3 -1
  82. package/link/lib/cjs/Link.js +12 -12
  83. package/link/lib/cjs/style/link.shadow.css +4 -6
  84. package/link/lib/es6/Link.js +12 -12
  85. package/link/lib/es6/style/link.shadow.css +4 -6
  86. package/package.json +3 -3
  87. package/popper/lib/cjs/Popper.js +6 -6
  88. package/popper/lib/es6/Popper.js +6 -6
  89. package/select/lib/cjs/InputSearch.js +6 -6
  90. package/select/lib/cjs/Select.js +9 -9
  91. package/select/lib/es6/InputSearch.js +6 -6
  92. package/select/lib/es6/Select.js +9 -9
  93. package/tag/index.d.ts +35 -33
  94. package/tag/lib/cjs/Tag.js +89 -56
  95. package/tag/lib/cjs/Tag.js.map +1 -1
  96. package/tag/lib/cjs/index.d.js.map +1 -1
  97. package/tag/lib/cjs/style/tag.shadow.css +27 -2
  98. package/tag/lib/es6/Tag.js +89 -56
  99. package/tag/lib/es6/Tag.js.map +1 -1
  100. package/tag/lib/es6/index.d.js.map +1 -1
  101. package/tag/lib/es6/style/tag.shadow.css +27 -2
  102. package/tag/lib/types/index.d.ts +35 -33
  103. package/time-picker/lib/cjs/TimePicker.js +12 -12
  104. package/time-picker/lib/es6/TimePicker.js +12 -12
  105. package/tooltip/lib/cjs/Tooltip.js +7 -7
  106. package/tooltip/lib/es6/Tooltip.js +7 -7
  107. package/utils/lib/themes/auto.css +6 -6
  108. package/utils/lib/themes/dark.css +0 -2
  109. package/utils/lib/themes/dark.json +0 -1
  110. package/utils/lib/themes/default.css +6 -4
  111. package/utils/lib/themes/default.json +3 -2
  112. package/utils/lib/themes/light.css +6 -4
  113. package/utils/lib/themes/light.json +3 -2
  114. package/utils/lib/use/useFocusLock.js +5 -0
  115. package/utils/lib/use/useFocusLock.js.map +1 -1
  116. package/utils/lib/use/useFocusLock.mjs +5 -0
  117. package/utils/lib/use/useFocusLock.mjs.map +1 -1
@@ -27,24 +27,27 @@ var _i18nEnhance = _interopRequireDefault(require("intergalactic/utils/lib/enhan
27
27
  var _intergalacticDynamicLocales = require("./translations/__intergalactic-dynamic-locales");
28
28
  var _useFocusLock = require("intergalactic/utils/lib/use/useFocusLock");
29
29
  var _styleScrollArea = _interopRequireDefault(require("./styleScrollArea"));
30
- var _excluded = ["className"],
31
- _excluded2 = ["className"];
30
+ var _setFocus = require("intergalactic/utils/src/focus-lock/setFocus");
31
+ var _isFocusInside = require("intergalactic/utils/src/focus-lock/isFocusInside");
32
+ var _getFocusableIn = require("intergalactic/utils/src/focus-lock/getFocusableIn");
33
+ var _excluded = ["className"];
32
34
  /*__reshadow-styles__:"./style/dropdown-menu.shadow.css"*/
33
- var style = ( /*__reshadow_css_start__*/_core.sstyled.insert( /*__inner_css_start__*/".___SDropdownMenuItem_1d6qz_gg_,.___SDropdownMenuList_1d6qz_gg_{position:relative;color:var(--intergalactic-text-primary, #191b23)}.___SDropdownMenuList_1d6qz_gg_{max-height:240px;padding:var(--intergalactic-spacing-1x, 4px)0;min-height:26px;min-width:32px;box-sizing:content-box;z-index:0}.___SDropdownMenuItem_1d6qz_gg_{display:flex;align-items:center;-webkit-text-decoration:none;text-decoration:none;box-sizing:border-box;cursor:pointer;width:100%;text-align:left;line-height:normal}@media (hover:hover){.___SDropdownMenuItem_1d6qz_gg_:hover{background-color:var(--intergalactic-dropdown-menu-item-hover, #f4f5f9)}}.___SDropdownMenuItem_1d6qz_gg_:focus{outline:0}.___SDropdownMenuItem_1d6qz_gg_.__selected_1d6qz_gg_{background-color:var(--intergalactic-dropdown-menu-item-selected, rgba(196, 229, 254, 0.7));box-shadow:2px 0 0 0 var(--intergalactic-control-primary-info, #008ff8) inset}@media (hover:hover){.___SDropdownMenuItem_1d6qz_gg_.__selected_1d6qz_gg_:hover{background-color:var(--intergalactic-dropdown-menu-item-selected-hover, #c4e5fe)}}.___SDropdownMenuItem_1d6qz_gg_.__highlighted_1d6qz_gg_{z-index:1;box-shadow:var(--intergalactic-keyboard-focus, 0px 0px 0px 3px rgba(0, 143, 248, 0.5)) inset}.___SDropdownMenuItem_1d6qz_gg_.__disabled_1d6qz_gg_{opacity:var(--intergalactic-disabled-opacity, 0.3);cursor:default;pointer-events:none}.___SDropdownMenuItem_1d6qz_gg_._size_l_1d6qz_gg_{font-size:var(--intergalactic-fs-300, 16px);line-height:var(--intergalactic-lh-300, 150%);padding:var(--intergalactic-spacing-2x, 8px) var(--intergalactic-spacing-3x, 12px);min-height:40px}.___SDropdownMenuItem_1d6qz_gg_._size_m_1d6qz_gg_{font-size:var(--intergalactic-fs-200, 14px);line-height:var(--intergalactic-lh-200, 142%);padding:calc(var(--intergalactic-spacing-1x, 4px) + var(--intergalactic-spacing-05x, 2px)) var(--intergalactic-spacing-2x, 8px);min-height:32px}.___SDropdownMenuItem_1d6qz_gg_.__notInteractive_1d6qz_gg_{cursor:default}@media (hover:hover){.___SDropdownMenuItem_1d6qz_gg_.__notInteractive_1d6qz_gg_:hover{background:0 0}}.___SDropdownMenuItem_1d6qz_gg_._variant_hint_1d6qz_gg_{color:var(--intergalactic-text-secondary, #6c6e79);cursor:default}@media (hover:hover){.___SDropdownMenuItem_1d6qz_gg_._variant_hint_1d6qz_gg_:hover{background:0 0}}.___SDropdownMenuItem_1d6qz_gg_._variant_title_1d6qz_gg_{font-weight:var(--intergalactic-bold, 700);cursor:default}@media (hover:hover){.___SDropdownMenuItem_1d6qz_gg_._variant_title_1d6qz_gg_:hover{background:0 0}}.___SDropdownMenuItemAddon_1d6qz_gg_{display:inline-flex;margin-left:var(--intergalactic-spacing-2x, 8px);margin-right:var(--intergalactic-spacing-2x, 8px)}.___SDropdownMenuItemAddon_1d6qz_gg_:first-child{margin-left:0}.___SDropdownMenuItemAddon_1d6qz_gg_:last-child{margin-right:0}" /*__inner_css_end__*/, "1d6qz_gg_") /*__reshadow_css_end__*/, {
34
- "__SDropdownMenuList": "___SDropdownMenuList_1d6qz_gg_",
35
- "__SDropdownMenuItem": "___SDropdownMenuItem_1d6qz_gg_",
36
- "_highlighted": "__highlighted_1d6qz_gg_",
37
- "_disabled": "__disabled_1d6qz_gg_",
38
- "_size_l": "_size_l_1d6qz_gg_",
39
- "_size_m": "_size_m_1d6qz_gg_",
40
- "_selected": "__selected_1d6qz_gg_",
41
- "_notInteractive": "__notInteractive_1d6qz_gg_",
42
- "_variant_hint": "_variant_hint_1d6qz_gg_",
43
- "_variant_title": "_variant_title_1d6qz_gg_",
44
- "__SDropdownMenuItemAddon": "___SDropdownMenuItemAddon_1d6qz_gg_"
35
+ var style = ( /*__reshadow_css_start__*/_core.sstyled.insert( /*__inner_css_start__*/".___SDropdownMenuItem_14jxy_gg_,.___SDropdownMenuList_14jxy_gg_{position:relative;color:var(--intergalactic-text-primary, #191b23)}.___SDropdownMenuList_14jxy_gg_{max-height:240px;padding:var(--intergalactic-spacing-1x, 4px)0;min-height:26px;min-width:32px;box-sizing:content-box;z-index:0}.___SDropdownMenuItem_14jxy_gg_{display:flex;align-items:center;-webkit-text-decoration:none;text-decoration:none;box-sizing:border-box;cursor:pointer;width:100%;text-align:left;line-height:normal}@media (hover:hover){.___SDropdownMenuItem_14jxy_gg_:hover{background-color:var(--intergalactic-dropdown-menu-item-hover, #f4f5f9)}}.___SDropdownMenuItem_14jxy_gg_:focus{outline:0}.___SDropdownMenuItem_14jxy_gg_.__selected_14jxy_gg_{background-color:var(--intergalactic-dropdown-menu-item-selected, rgba(196, 229, 254, 0.7));box-shadow:2px 0 0 0 var(--intergalactic-control-primary-info, #008ff8) inset}@media (hover:hover){.___SDropdownMenuItem_14jxy_gg_.__selected_14jxy_gg_:hover{background-color:var(--intergalactic-dropdown-menu-item-selected-hover, #c4e5fe)}}.___SDropdownMenuItem_14jxy_gg_.__highlighted_14jxy_gg_:not(:focus-within){z-index:1;box-shadow:var(--intergalactic-keyboard-focus, 0px 0px 0px 3px rgba(0, 143, 248, 0.5)) inset}.___SDropdownMenuItem_14jxy_gg_.__disabled_14jxy_gg_{opacity:var(--intergalactic-disabled-opacity, 0.3);cursor:default;pointer-events:none}.___SDropdownMenuItem_14jxy_gg_._size_l_14jxy_gg_{font-size:var(--intergalactic-fs-300, 16px);line-height:var(--intergalactic-lh-300, 150%);padding:var(--intergalactic-spacing-2x, 8px) var(--intergalactic-spacing-3x, 12px);min-height:40px}.___SDropdownMenuItem_14jxy_gg_._size_m_14jxy_gg_{font-size:var(--intergalactic-fs-200, 14px);line-height:var(--intergalactic-lh-200, 142%);padding:calc(var(--intergalactic-spacing-1x, 4px) + var(--intergalactic-spacing-05x, 2px)) var(--intergalactic-spacing-2x, 8px);min-height:32px}.___SDropdownMenuItem_14jxy_gg_.__notInteractive_14jxy_gg_{cursor:default}@media (hover:hover){.___SDropdownMenuItem_14jxy_gg_.__notInteractive_14jxy_gg_:hover{background:0 0}}.___SDropdownMenuItem_14jxy_gg_._variant_hint_14jxy_gg_{color:var(--intergalactic-text-secondary, #6c6e79);cursor:default}@media (hover:hover){.___SDropdownMenuItem_14jxy_gg_._variant_hint_14jxy_gg_:hover{background:0 0}}.___SDropdownMenuItem_14jxy_gg_._variant_title_14jxy_gg_{font-weight:var(--intergalactic-bold, 700);cursor:default}@media (hover:hover){.___SDropdownMenuItem_14jxy_gg_._variant_title_14jxy_gg_:hover{background:0 0}}.___SDropdownMenuItem_14jxy_gg_.__visible_14jxy_gg_{background-color:var(--intergalactic-dropdown-menu-item-hover, #f4f5f9)}.___SDropdownMenuItem_14jxy_gg_.__nesting-trigger_14jxy_gg_{justify-content:space-between}.___SDropdownMenuItemAddon_14jxy_gg_{display:inline-flex;margin-left:var(--intergalactic-spacing-2x, 8px);margin-right:var(--intergalactic-spacing-2x, 8px)}.___SDropdownMenuItemAddon_14jxy_gg_:first-child{margin-left:0}.___SDropdownMenuItemAddon_14jxy_gg_:last-child{margin-right:0}.___SDropdownMenuNesting_14jxy_gg_,.___SDropdownMenuNesting_14jxy_gg_._size_l_14jxy_gg_,.___SDropdownMenuNesting_14jxy_gg_._size_m_14jxy_gg_{padding:0}.___SDropdownMenuNesting_14jxy_gg_.__highlighted_14jxy_gg_{z-index:1;box-shadow:var(--intergalactic-keyboard-focus, 0px 0px 0px 3px rgba(0, 143, 248, 0.5)) inset}" /*__inner_css_end__*/, "14jxy_gg_") /*__reshadow_css_end__*/, {
36
+ "__SDropdownMenuList": "___SDropdownMenuList_14jxy_gg_",
37
+ "__SDropdownMenuItem": "___SDropdownMenuItem_14jxy_gg_",
38
+ "_highlighted": "__highlighted_14jxy_gg_",
39
+ "_disabled": "__disabled_14jxy_gg_",
40
+ "_size_l": "_size_l_14jxy_gg_",
41
+ "_size_m": "_size_m_14jxy_gg_",
42
+ "_visible": "__visible_14jxy_gg_",
43
+ "_nesting-trigger": "__nesting-trigger_14jxy_gg_",
44
+ "__SDropdownMenuNesting": "___SDropdownMenuNesting_14jxy_gg_",
45
+ "_selected": "__selected_14jxy_gg_",
46
+ "_notInteractive": "__notInteractive_14jxy_gg_",
47
+ "_variant_hint": "_variant_hint_14jxy_gg_",
48
+ "_variant_title": "_variant_title_14jxy_gg_",
49
+ "__SDropdownMenuItemAddon": "___SDropdownMenuItemAddon_14jxy_gg_"
45
50
  });
46
- var KEYS = ['ArrowDown', 'ArrowUp', 'Enter', ' '];
47
- var INTERACTION_TAGS = ['INPUT', 'TEXTAREA', 'BUTTON'];
48
51
  var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
49
52
  (0, _inherits2["default"])(DropdownMenuRoot, _Component);
50
53
  var _super = (0, _createSuper2["default"])(DropdownMenuRoot);
@@ -55,55 +58,194 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
55
58
  args[_key] = arguments[_key];
56
59
  }
57
60
  _this = _super.call.apply(_super, [this].concat(args));
61
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
62
+ focusLockItemIndex: null
63
+ });
58
64
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "popperRef", /*#__PURE__*/_react["default"].createRef());
65
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "triggerRef", /*#__PURE__*/_react["default"].createRef());
59
66
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "itemProps", []);
67
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "itemRefs", []);
60
68
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "highlightedItemRef", /*#__PURE__*/_react["default"].createRef());
69
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "ignoreTriggerKeyboardFocusUntil", 0);
61
70
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "prevHighlightedIndex", null);
71
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "focusTrigger", function () {
72
+ var trigger = _this.triggerRef.current;
73
+ if (!trigger) return;
74
+ if ((0, _isFocusInside.isFocusInside)(trigger)) return;
75
+ (0, _setFocus.setFocus)(trigger);
76
+ });
62
77
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "bindHandlerKeyDown", function (place) {
63
78
  return function (e) {
64
79
  var amount = e.shiftKey ? 5 : 1;
65
80
  var targetTagName = e.target.tagName;
66
- if (e.key === ' ' && INTERACTION_TAGS.includes(targetTagName)) return;
81
+ var _this$asProps = _this.asProps,
82
+ visible = _this$asProps.visible,
83
+ highlightedIndex = _this$asProps.highlightedIndex,
84
+ placement = _this$asProps.placement;
85
+ if (e.key === ' ' && ['INPUT', 'TEXTAREA', 'BUTTON'].includes(targetTagName)) return;
67
86
  if (e.key === 'Enter') {
68
87
  if (targetTagName === 'TEXTAREA') return;
69
88
  if (place === 'popper' && (targetTagName === 'BUTTON' || targetTagName === 'A')) return;
70
89
  }
71
- var visible = _this.asProps.visible;
72
- var element = _this.popperRef.current;
73
- if (place === 'popper' && visible && e.key === 'Tab' && (0, _useFocusLock.hasFocusableIn)(element)) {
74
- _this.handlers.highlightedIndex(null);
90
+ if (visible && e.key === 'Tab') {
91
+ var item = highlightedIndex !== null && _this.itemRefs[highlightedIndex];
92
+ if (item && (0, _getFocusableIn.getFocusableIn)(item).length !== 0) {
93
+ _this.setState({
94
+ focusLockItemIndex: highlightedIndex
95
+ });
96
+ } else {
97
+ _this.handlers.highlightedIndex(null);
98
+ }
75
99
  return;
76
100
  }
77
- if (!KEYS.includes(e.key)) return;
78
- e.preventDefault();
79
- var isVisible = _this.asProps.visible;
80
- _this.handlers.visible(true);
101
+ if (e.key === 'Escape' && _this.state.focusLockItemIndex !== null) {
102
+ _this.setState({
103
+ focusLockItemIndex: null
104
+ });
105
+ return false;
106
+ }
107
+ var verticalPlacement = !placement || placement.startsWith('top') || placement.startsWith('bottom');
108
+ if (['ArrowDown', 'ArrowUp'].includes(e.key) && verticalPlacement) {
109
+ e.preventDefault();
110
+ _this.handlers.visible(true);
111
+ }
112
+ if (['ArrowLeft', 'ArrowRight'].includes(e.key) && !verticalPlacement) {
113
+ var show = e.key === 'ArrowRight' && placement.startsWith('right') || e.key === 'ArrowLeft' && placement.startsWith('left');
114
+ var hide = e.key === 'ArrowLeft' && placement.startsWith('right') || e.key === 'ArrowRight' && placement.startsWith('left');
115
+ var visibleChanged = visible && hide || !visible && show;
116
+ if (show) {
117
+ _this.handlers.visible(true);
118
+ } else if (hide) {
119
+ _this.handlers.visible(false);
120
+ }
121
+ if (visibleChanged) {
122
+ e.preventDefault();
123
+ e.stopPropagation();
124
+ return;
125
+ }
126
+ }
127
+ if (['ArrowLeft', 'ArrowRight'].includes(e.key)) {
128
+ var _item = highlightedIndex !== null && _this.itemRefs[highlightedIndex];
129
+ var focusable = (0, _getFocusableIn.getFocusableIn)(_item);
130
+ if (focusable.length > 0 && _item) {
131
+ var focusedIndex = focusable.indexOf(document.activeElement);
132
+ if (e.key === 'ArrowRight') {
133
+ if (focusedIndex === -1) {
134
+ _this.setState({
135
+ focusLockItemIndex: highlightedIndex
136
+ });
137
+ }
138
+ var nextFocused = focusable[focusedIndex + 1];
139
+ if (nextFocused) {
140
+ e.preventDefault();
141
+ e.stopPropagation();
142
+ nextFocused.focus();
143
+ }
144
+ } else if (e.key === 'ArrowLeft') {
145
+ if (focusedIndex === 0) {
146
+ _this.setState({
147
+ focusLockItemIndex: null
148
+ });
149
+ }
150
+ var prevFocused = focusable[focusedIndex - 1];
151
+ if (prevFocused) {
152
+ e.preventDefault();
153
+ e.stopPropagation();
154
+ prevFocused.focus();
155
+ }
156
+ }
157
+ }
158
+ }
81
159
  switch (e.key) {
82
160
  case 'ArrowDown':
83
161
  {
84
- isVisible && _this.moveHighlightedIndex(amount, e);
85
- (targetTagName === 'BUTTON' || targetTagName === 'A') && (element === null || element === void 0 ? void 0 : element.focus());
162
+ if (visible) {
163
+ _this.moveHighlightedIndex(amount, e);
164
+ if ((0, _isFocusInside.isFocusInside)(_this.popperRef.current)) {
165
+ _this.focusTrigger();
166
+ }
167
+ e.preventDefault();
168
+ e.stopPropagation();
169
+ }
86
170
  break;
87
171
  }
88
172
  case 'ArrowUp':
89
173
  {
90
- isVisible && _this.moveHighlightedIndex(-amount, e);
91
- (targetTagName === 'BUTTON' || targetTagName === 'A') && (element === null || element === void 0 ? void 0 : element.focus());
174
+ if (visible) {
175
+ _this.moveHighlightedIndex(-amount, e);
176
+ if ((0, _isFocusInside.isFocusInside)(_this.popperRef.current)) {
177
+ _this.focusTrigger();
178
+ }
179
+ e.preventDefault();
180
+ e.stopPropagation();
181
+ }
92
182
  break;
93
183
  }
94
184
  case ' ':
95
185
  case 'Enter':
96
186
  if (_this.highlightedItemRef.current) {
187
+ e.stopPropagation();
188
+ e.preventDefault();
97
189
  _this.highlightedItemRef.current.click();
98
190
  } else {
99
- if (place === 'trigger') _this.handlers.visible(false);
191
+ if (place === 'trigger') {
192
+ _this.handlers.visible(false);
193
+ e.preventDefault();
194
+ }
100
195
  }
101
196
  break;
102
197
  }
103
198
  };
104
199
  });
200
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleTriggerKeyboardFocus", function () {
201
+ if (_this.ignoreTriggerKeyboardFocusUntil > Date.now()) return false;
202
+ });
203
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleNestingClick", function (event) {
204
+ var _focusable$;
205
+ var itemIndex = _this.itemRefs.indexOf(event.currentTarget);
206
+ if (itemIndex === -1) return;
207
+ var focusable = (0, _getFocusableIn.getFocusableIn)(event.currentTarget);
208
+ (_focusable$ = focusable[0]) === null || _focusable$ === void 0 ? void 0 : _focusable$.focus();
209
+ if (focusable[0] && _this.state.focusLockItemIndex === null) {
210
+ _this.setState({
211
+ focusLockItemIndex: null
212
+ });
213
+ event.preventDefault();
214
+ event.stopPropagation();
215
+ }
216
+ });
217
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleNestingKeyDown", function (event) {
218
+ if (event.key === ' ') {
219
+ _this.handleNestingClick(event);
220
+ }
221
+ });
222
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getNestingProps", function () {
223
+ var size = _this.asProps.size;
224
+ return {
225
+ size: size,
226
+ onClick: _this.handleNestingClick,
227
+ onKeyDown: _this.handleNestingKeyDown
228
+ };
229
+ });
230
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleNestedVisibleChange", function (lastUserInteraction) {
231
+ if (_this.asProps.visible && _this.asProps.highlightedIndex === null && lastUserInteraction === 'keyboard') {
232
+ _this.handlers.highlightedIndex(0);
233
+ }
234
+ });
235
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getNestingTriggerProps", function () {
236
+ var _this$asProps2 = _this.asProps,
237
+ size = _this$asProps2.size,
238
+ visible = _this$asProps2.visible;
239
+ return {
240
+ size: size,
241
+ visible: visible,
242
+ onNestedVisibleChange: _this.handleNestedVisibleChange
243
+ };
244
+ });
105
245
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "scrollToNode", function (node) {
106
- _this.highlightedItemRef.current = node;
246
+ if (node) {
247
+ _this.highlightedItemRef.current = node;
248
+ }
107
249
  setTimeout(function () {
108
250
  if (node !== null && node !== void 0 && node.scrollIntoView) {
109
251
  if (_this.asProps.highlightedIndex !== _this.prevHighlightedIndex) {
@@ -121,21 +263,26 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
121
263
  (0, _createClass2["default"])(DropdownMenuRoot, [{
122
264
  key: "uncontrolledProps",
123
265
  value: function uncontrolledProps() {
266
+ var _this2 = this;
124
267
  return {
125
268
  highlightedIndex: null,
126
- visible: null
269
+ visible: [null, function (visible) {
270
+ if (!visible) {
271
+ _this2.ignoreTriggerKeyboardFocusUntil = Date.now() + 100;
272
+ }
273
+ }]
127
274
  };
128
275
  }
129
276
  }, {
130
277
  key: "getTriggerProps",
131
278
  value: function getTriggerProps() {
132
- var _this$asProps = this.asProps,
133
- size = _this$asProps.size,
134
- uid = _this$asProps.uid,
135
- disablePortal = _this$asProps.disablePortal,
136
- visible = _this$asProps.visible,
137
- getI18nText = _this$asProps.getI18nText,
138
- highlightedIndex = _this$asProps.highlightedIndex;
279
+ var _this$asProps3 = this.asProps,
280
+ size = _this$asProps3.size,
281
+ uid = _this$asProps3.uid,
282
+ disablePortal = _this$asProps3.disablePortal,
283
+ visible = _this$asProps3.visible,
284
+ getI18nText = _this$asProps3.getI18nText,
285
+ highlightedIndex = _this$asProps3.highlightedIndex;
139
286
  return {
140
287
  size: size,
141
288
  id: "igc-".concat(uid, "-trigger"),
@@ -143,15 +290,17 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
143
290
  focusHint: visible && !disablePortal ? getI18nText('triggerHint') : undefined,
144
291
  'aria-expanded': visible ? 'true' : 'false',
145
292
  'aria-activedescendant': visible && highlightedIndex !== null ? "igc-".concat(uid, "-option-").concat(highlightedIndex) : undefined,
146
- onKeyDown: this.bindHandlerKeyDown('trigger')
293
+ onKeyDown: this.bindHandlerKeyDown('trigger'),
294
+ ref: this.triggerRef,
295
+ onKeyboardFocus: this.handleTriggerKeyboardFocus
147
296
  };
148
297
  }
149
298
  }, {
150
299
  key: "getListProps",
151
300
  value: function getListProps() {
152
- var _this$asProps2 = this.asProps,
153
- size = _this$asProps2.size,
154
- uid = _this$asProps2.uid;
301
+ var _this$asProps4 = this.asProps,
302
+ size = _this$asProps4.size,
303
+ uid = _this$asProps4.uid;
155
304
  return {
156
305
  size: size,
157
306
  uid: uid,
@@ -161,12 +310,12 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
161
310
  }, {
162
311
  key: "getPopperProps",
163
312
  value: function getPopperProps() {
164
- var _this$asProps3 = this.asProps,
165
- uid = _this$asProps3.uid,
166
- disablePortal = _this$asProps3.disablePortal,
167
- ignorePortalsStacking = _this$asProps3.ignorePortalsStacking,
168
- interaction = _this$asProps3.interaction,
169
- highlightedIndex = _this$asProps3.highlightedIndex;
313
+ var _this$asProps5 = this.asProps,
314
+ uid = _this$asProps5.uid,
315
+ disablePortal = _this$asProps5.disablePortal,
316
+ ignorePortalsStacking = _this$asProps5.ignorePortalsStacking,
317
+ interaction = _this$asProps5.interaction,
318
+ highlightedIndex = _this$asProps5.highlightedIndex;
170
319
  return {
171
320
  ref: this.popperRef,
172
321
  tabIndex: 0,
@@ -181,21 +330,29 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
181
330
  }, {
182
331
  key: "getItemProps",
183
332
  value: function getItemProps(props, index) {
184
- var _this$asProps4 = this.asProps,
185
- size = _this$asProps4.size,
186
- highlightedIndex = _this$asProps4.highlightedIndex,
187
- uid = _this$asProps4.uid;
333
+ var _this3 = this;
334
+ var _this$asProps6 = this.asProps,
335
+ size = _this$asProps6.size,
336
+ highlightedIndex = _this$asProps6.highlightedIndex,
337
+ uid = _this$asProps6.uid;
188
338
  var highlighted = index === highlightedIndex;
189
- var extraProps = {};
339
+ var ref = this.itemRefs[index];
190
340
  this.itemProps[index] = props;
191
341
  if (highlighted) {
192
- extraProps.ref = this.scrollToNode;
342
+ ref = function ref(node) {
343
+ _this3.itemRefs[index] = node;
344
+ _this3.scrollToNode(node);
345
+ };
193
346
  }
194
- return (0, _objectSpread2["default"])({
347
+ return {
195
348
  id: "igc-".concat(uid, "-option-").concat(index),
196
349
  size: size,
197
- highlighted: highlighted
198
- }, extraProps);
350
+ highlighted: highlighted,
351
+ focusLock: this.state.focusLockItemIndex === index,
352
+ triggerRef: this.triggerRef,
353
+ ref: ref,
354
+ index: index
355
+ };
199
356
  }
200
357
  }, {
201
358
  key: "getItemHintProps",
@@ -226,6 +383,8 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
226
383
  if (highlightedIndex == null) {
227
384
  if (selectedIndex !== -1) {
228
385
  highlightedIndex = selectedIndex;
386
+ } else if (this.highlightedItemRef.current) {
387
+ highlightedIndex = this.prevHighlightedIndex;
229
388
  } else {
230
389
  highlightedIndex = amount < 0 ? 0 : itemsLastIndex;
231
390
  }
@@ -245,22 +404,25 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
245
404
  }, {
246
405
  key: "componentDidUpdate",
247
406
  value: function componentDidUpdate() {
248
- var visible = this.asProps.visible;
249
- if (!visible) {
407
+ var _this4 = this;
408
+ if (!this.asProps.visible) {
250
409
  this.handlers.highlightedIndex(null);
251
410
  }
411
+ if ((this.state.focusLockItemIndex !== this.asProps.highlightedIndex || !this.asProps.visible) && this.state.focusLockItemIndex !== null) {
412
+ setTimeout(function () {
413
+ _this4.setState({
414
+ focusLockItemIndex: null
415
+ });
416
+ }, 0);
417
+ }
252
418
  }
253
419
  }, {
254
420
  key: "render",
255
421
  value: function render() {
256
422
  var _ref = this.asProps;
257
- var _this$asProps5 = this.asProps,
258
- Children = _this$asProps5.Children,
259
- interaction = _this$asProps5.interaction,
260
- dataUiName = _this$asProps5['data-ui-name'];
261
- var props = {};
423
+ var Children = this.asProps.Children;
262
424
  this.itemProps = [];
263
- return /*#__PURE__*/_react["default"].createElement(_dropdown["default"], (0, _core.assignProps)((0, _objectSpread2["default"])({}, props), _ref), /*#__PURE__*/_react["default"].createElement(Children, null));
425
+ return /*#__PURE__*/_react["default"].createElement(_dropdown["default"], (0, _core.assignProps)({}, _ref), /*#__PURE__*/_react["default"].createElement(Children, null));
264
426
  }
265
427
  }]);
266
428
  return DropdownMenuRoot;
@@ -278,10 +440,10 @@ var DropdownMenuRoot = /*#__PURE__*/function (_Component) {
278
440
  });
279
441
  function List(props) {
280
442
  var _ref2 = arguments[0],
281
- _ref7;
443
+ _ref10;
282
444
  var SDropdownMenuList = _scrollArea["default"];
283
445
  var uid = props.uid;
284
- return _ref7 = (0, _core.sstyled)(props.styles), /*#__PURE__*/_react["default"].createElement(SDropdownMenuList, _ref7.cn("SDropdownMenuList", (0, _objectSpread2["default"])({}, (0, _core.assignProps)({
446
+ return _ref10 = (0, _core.sstyled)(props.styles), /*#__PURE__*/_react["default"].createElement(SDropdownMenuList, _ref10.cn("SDropdownMenuList", (0, _objectSpread2["default"])({}, (0, _core.assignProps)({
285
447
  "tabIndex": null,
286
448
  "role": 'menu',
287
449
  "aria-labelledby": "igc-".concat(uid, "-trigger"),
@@ -309,22 +471,72 @@ function Menu(props) {
309
471
  };
310
472
  return /*#__PURE__*/_react["default"].createElement(DropdownMenu.Popper, popperProps, /*#__PURE__*/_react["default"].createElement(DropdownMenu.List, (0, _core.assignProps)({}, _ref3)));
311
473
  }
312
- function Item(props) {
313
- var _useFlex = (0, _flexBox.useFlex)(props, props.forwardRef),
314
- _useFlex2 = (0, _slicedToArray2["default"])(_useFlex, 2),
315
- SDropdownMenuItem = _useFlex2[0],
316
- _useFlex2$ = _useFlex2[1],
317
- className = _useFlex2$.className,
318
- other = (0, _objectWithoutProperties2["default"])(_useFlex2$, _excluded);
319
- var styles = (0, _core.sstyled)(props.styles);
320
- return /*#__PURE__*/_react["default"].createElement(SDropdownMenuItem, (0, _extends2["default"])({
321
- role: "menuitem",
322
- tabIndex: -1,
323
- id: props.label,
324
- className: (0, _classnames["default"])(styles.cn('SDropdownMenuItem', (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, props), {}, {
325
- highlighted: !props.disabled && props.highlighted
326
- })).className, className) || undefined
327
- }, other));
474
+ function Item(_ref16) {
475
+ var _ref4 = arguments[0],
476
+ _ref11;
477
+ var styles = _ref16.styles,
478
+ label = _ref16.label,
479
+ triggerRef = _ref16.triggerRef,
480
+ focusLock = _ref16.focusLock,
481
+ disabled = _ref16.disabled,
482
+ highlighted = _ref16.highlighted;
483
+ var SDropdownMenuItem = _flexBox.Flex;
484
+ var ref = _react["default"].useRef();
485
+ (0, _useFocusLock.useFocusLock)(ref, false, triggerRef, !focusLock || disabled, true);
486
+ return _ref11 = (0, _core.sstyled)(styles), /*#__PURE__*/_react["default"].createElement(SDropdownMenuItem, _ref11.cn("SDropdownMenuItem", (0, _objectSpread2["default"])({}, (0, _core.assignProps)({
487
+ "ref": ref,
488
+ "role": 'menuitem',
489
+ "tabIndex": -1,
490
+ "id": label,
491
+ "use:highlighted": !disabled && highlighted
492
+ }, _ref4))));
493
+ }
494
+ function Nesting(_ref17) {
495
+ var _ref5 = arguments[0],
496
+ _ref12;
497
+ var styles = _ref17.styles;
498
+ var SDropdownMenuNesting = DropdownMenu.Item;
499
+ return _ref12 = (0, _core.sstyled)(styles), /*#__PURE__*/_react["default"].createElement(SDropdownMenuNesting, _ref12.cn("SDropdownMenuNesting", (0, _objectSpread2["default"])({}, (0, _core.assignProps)({
500
+ "aria-haspopup": 'true'
501
+ }, _ref5))));
502
+ }
503
+ function NestingTrigger(_ref18) {
504
+ var _ref6 = arguments[0],
505
+ _ref13;
506
+ var styles = _ref18.styles,
507
+ visible = _ref18.visible,
508
+ onNestedVisibleChange = _ref18.onNestedVisibleChange;
509
+ var SDropdownMenuItem = _flexBox.Flex;
510
+ var lastUserInteractionRef = _react["default"].useRef(undefined);
511
+ _react["default"].useEffect(function () {
512
+ onNestedVisibleChange(lastUserInteractionRef.current);
513
+ }, [visible]);
514
+ var handleMouseEvent = _react["default"].useCallback(function () {
515
+ lastUserInteractionRef.current = 'mouse';
516
+ }, []);
517
+ var handleKeyboardEvent = _react["default"].useCallback(function () {
518
+ lastUserInteractionRef.current = 'keyboard';
519
+ }, []);
520
+ _react["default"].useEffect(function () {
521
+ document.addEventListener('mouseover', handleMouseEvent, {
522
+ capture: true
523
+ });
524
+ document.addEventListener('keydown', handleKeyboardEvent, {
525
+ capture: true
526
+ });
527
+ return function () {
528
+ document.removeEventListener('mouseover', handleMouseEvent, {
529
+ capture: true
530
+ });
531
+ document.removeEventListener('keydown', handleKeyboardEvent, {
532
+ capture: true
533
+ });
534
+ };
535
+ }, []);
536
+ return _ref13 = (0, _core.sstyled)(styles), /*#__PURE__*/_react["default"].createElement(SDropdownMenuItem, _ref13.cn("SDropdownMenuItem", (0, _objectSpread2["default"])({}, (0, _core.assignProps)({
537
+ "nesting-trigger": true,
538
+ "tabIndex": 0
539
+ }, _ref6))));
328
540
  }
329
541
  function Addon(props) {
330
542
  var _useBox = (0, _flexBox.useBox)(props, props.forwardRef),
@@ -332,33 +544,33 @@ function Addon(props) {
332
544
  SDropdownMenuItemAddon = _useBox2[0],
333
545
  _useBox2$ = _useBox2[1],
334
546
  className = _useBox2$.className,
335
- other = (0, _objectWithoutProperties2["default"])(_useBox2$, _excluded2);
547
+ other = (0, _objectWithoutProperties2["default"])(_useBox2$, _excluded);
336
548
  var styles = (0, _core.sstyled)(props.styles);
337
549
  return /*#__PURE__*/_react["default"].createElement(SDropdownMenuItemAddon, (0, _extends2["default"])({
338
550
  className: (0, _classnames["default"])(styles.cn('SDropdownMenuItemAddon', props).className, className) || undefined
339
551
  }, other));
340
552
  }
341
553
  function Hint(props) {
342
- var _ref4 = arguments[0],
343
- _ref8;
554
+ var _ref7 = arguments[0],
555
+ _ref14;
344
556
  var SDropdownMenuItem = _flexBox.Flex;
345
- return _ref8 = (0, _core.sstyled)(props.styles), /*#__PURE__*/_react["default"].createElement(SDropdownMenuItem, _ref8.cn("SDropdownMenuItem", (0, _objectSpread2["default"])({}, (0, _core.assignProps)({
557
+ return _ref14 = (0, _core.sstyled)(props.styles), /*#__PURE__*/_react["default"].createElement(SDropdownMenuItem, _ref14.cn("SDropdownMenuItem", (0, _objectSpread2["default"])({}, (0, _core.assignProps)({
346
558
  "variant": 'hint'
347
- }, _ref4))));
559
+ }, _ref7))));
348
560
  }
349
561
  function Title(props) {
350
- var _ref5 = arguments[0],
351
- _ref9;
562
+ var _ref8 = arguments[0],
563
+ _ref15;
352
564
  var SDropdownMenuItem = _flexBox.Flex;
353
- return _ref9 = (0, _core.sstyled)(props.styles), /*#__PURE__*/_react["default"].createElement(SDropdownMenuItem, _ref9.cn("SDropdownMenuItem", (0, _objectSpread2["default"])({}, (0, _core.assignProps)({
565
+ return _ref15 = (0, _core.sstyled)(props.styles), /*#__PURE__*/_react["default"].createElement(SDropdownMenuItem, _ref15.cn("SDropdownMenuItem", (0, _objectSpread2["default"])({}, (0, _core.assignProps)({
354
566
  "variant": 'title'
355
- }, _ref5))));
567
+ }, _ref8))));
356
568
  }
357
569
  function Trigger() {
358
- var _ref6 = arguments[0];
570
+ var _ref9 = arguments[0];
359
571
  return /*#__PURE__*/_react["default"].createElement(_dropdown["default"].Trigger, (0, _core.assignProps)({
360
572
  "aria-haspopup": 'true'
361
- }, _ref6));
573
+ }, _ref9));
362
574
  }
363
575
  var DropdownMenu = (0, _core["default"])(DropdownMenuRoot, {
364
576
  Trigger: Trigger,
@@ -368,6 +580,10 @@ var DropdownMenu = (0, _core["default"])(DropdownMenuRoot, {
368
580
  Item: [Item, {
369
581
  Addon: Addon
370
582
  }],
583
+ Nesting: [Nesting, {
584
+ Trigger: NestingTrigger,
585
+ Addon: Addon
586
+ }],
371
587
  ItemTitle: Title,
372
588
  ItemHint: Hint
373
589
  }, {