react-aria-components 3.0.0-nightly-3f44370de-241118 → 3.0.0-nightly-b3a4d6c11-241119

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 (133) hide show
  1. package/dist/Breadcrumbs.main.js +2 -2
  2. package/dist/Breadcrumbs.main.js.map +1 -1
  3. package/dist/Breadcrumbs.mjs +2 -2
  4. package/dist/Breadcrumbs.module.js +2 -2
  5. package/dist/Breadcrumbs.module.js.map +1 -1
  6. package/dist/Button.main.js.map +1 -1
  7. package/dist/Button.module.js.map +1 -1
  8. package/dist/Collection.main.js.map +1 -1
  9. package/dist/Collection.module.js.map +1 -1
  10. package/dist/ComboBox.main.js +2 -2
  11. package/dist/ComboBox.main.js.map +1 -1
  12. package/dist/ComboBox.mjs +2 -2
  13. package/dist/ComboBox.module.js +2 -2
  14. package/dist/ComboBox.module.js.map +1 -1
  15. package/dist/Dialog.main.js +22 -1
  16. package/dist/Dialog.main.js.map +1 -1
  17. package/dist/Dialog.mjs +23 -2
  18. package/dist/Dialog.module.js +23 -2
  19. package/dist/Dialog.module.js.map +1 -1
  20. package/dist/Disclosure.main.js +1 -1
  21. package/dist/Disclosure.main.js.map +1 -1
  22. package/dist/Disclosure.mjs +1 -1
  23. package/dist/Disclosure.module.js +1 -1
  24. package/dist/Disclosure.module.js.map +1 -1
  25. package/dist/Heading.main.js.map +1 -1
  26. package/dist/Heading.module.js.map +1 -1
  27. package/dist/Menu.main.js +7 -45
  28. package/dist/Menu.main.js.map +1 -1
  29. package/dist/Menu.mjs +9 -47
  30. package/dist/Menu.module.js +9 -47
  31. package/dist/Menu.module.js.map +1 -1
  32. package/dist/OverlayArrow.main.js +1 -1
  33. package/dist/OverlayArrow.main.js.map +1 -1
  34. package/dist/OverlayArrow.mjs +1 -1
  35. package/dist/OverlayArrow.module.js +1 -1
  36. package/dist/OverlayArrow.module.js.map +1 -1
  37. package/dist/Popover.main.js +1 -0
  38. package/dist/Popover.main.js.map +1 -1
  39. package/dist/Popover.mjs +1 -0
  40. package/dist/Popover.module.js +1 -0
  41. package/dist/Popover.module.js.map +1 -1
  42. package/dist/Table.main.js +2 -10
  43. package/dist/Table.main.js.map +1 -1
  44. package/dist/Table.mjs +2 -10
  45. package/dist/Table.module.js +2 -10
  46. package/dist/Table.module.js.map +1 -1
  47. package/dist/Tooltip.main.js +1 -1
  48. package/dist/Tooltip.main.js.map +1 -1
  49. package/dist/Tooltip.mjs +1 -1
  50. package/dist/Tooltip.module.js +1 -1
  51. package/dist/Tooltip.module.js.map +1 -1
  52. package/dist/Virtualizer.main.js.map +1 -1
  53. package/dist/Virtualizer.module.js.map +1 -1
  54. package/dist/types.d.ts +107 -107
  55. package/dist/types.d.ts.map +1 -1
  56. package/i18n/ar-AE.js +1 -1
  57. package/i18n/ar-AE.mjs +1 -1
  58. package/i18n/bg-BG.js +1 -1
  59. package/i18n/bg-BG.mjs +1 -1
  60. package/i18n/cs-CZ.js +1 -1
  61. package/i18n/cs-CZ.mjs +1 -1
  62. package/i18n/da-DK.js +1 -1
  63. package/i18n/da-DK.mjs +1 -1
  64. package/i18n/de-DE.js +1 -1
  65. package/i18n/de-DE.mjs +1 -1
  66. package/i18n/el-GR.js +1 -1
  67. package/i18n/el-GR.mjs +1 -1
  68. package/i18n/en-US.js +1 -1
  69. package/i18n/en-US.mjs +1 -1
  70. package/i18n/es-ES.js +1 -1
  71. package/i18n/es-ES.mjs +1 -1
  72. package/i18n/et-EE.js +1 -1
  73. package/i18n/et-EE.mjs +1 -1
  74. package/i18n/fi-FI.js +1 -1
  75. package/i18n/fi-FI.mjs +1 -1
  76. package/i18n/fr-FR.js +1 -1
  77. package/i18n/fr-FR.mjs +1 -1
  78. package/i18n/he-IL.js +1 -1
  79. package/i18n/he-IL.mjs +1 -1
  80. package/i18n/hr-HR.js +1 -1
  81. package/i18n/hr-HR.mjs +1 -1
  82. package/i18n/hu-HU.js +1 -1
  83. package/i18n/hu-HU.mjs +1 -1
  84. package/i18n/it-IT.js +1 -1
  85. package/i18n/it-IT.mjs +1 -1
  86. package/i18n/ja-JP.js +1 -1
  87. package/i18n/ja-JP.mjs +1 -1
  88. package/i18n/ko-KR.js +1 -1
  89. package/i18n/ko-KR.mjs +1 -1
  90. package/i18n/lt-LT.js +1 -1
  91. package/i18n/lt-LT.mjs +1 -1
  92. package/i18n/lv-LV.js +1 -1
  93. package/i18n/lv-LV.mjs +1 -1
  94. package/i18n/nb-NO.js +1 -1
  95. package/i18n/nb-NO.mjs +1 -1
  96. package/i18n/nl-NL.js +1 -1
  97. package/i18n/nl-NL.mjs +1 -1
  98. package/i18n/pl-PL.js +1 -1
  99. package/i18n/pl-PL.mjs +1 -1
  100. package/i18n/pt-BR.js +1 -1
  101. package/i18n/pt-BR.mjs +1 -1
  102. package/i18n/pt-PT.js +1 -1
  103. package/i18n/pt-PT.mjs +1 -1
  104. package/i18n/ro-RO.js +1 -1
  105. package/i18n/ro-RO.mjs +1 -1
  106. package/i18n/ru-RU.js +1 -1
  107. package/i18n/ru-RU.mjs +1 -1
  108. package/i18n/sk-SK.js +1 -1
  109. package/i18n/sk-SK.mjs +1 -1
  110. package/i18n/sl-SI.js +1 -1
  111. package/i18n/sl-SI.mjs +1 -1
  112. package/i18n/sr-SP.js +1 -1
  113. package/i18n/sr-SP.mjs +1 -1
  114. package/i18n/sv-SE.js +1 -1
  115. package/i18n/sv-SE.mjs +1 -1
  116. package/i18n/tr-TR.js +1 -1
  117. package/i18n/tr-TR.mjs +1 -1
  118. package/i18n/uk-UA.js +1 -1
  119. package/i18n/uk-UA.mjs +1 -1
  120. package/i18n/zh-CN.js +1 -1
  121. package/i18n/zh-CN.mjs +1 -1
  122. package/i18n/zh-TW.js +1 -1
  123. package/i18n/zh-TW.mjs +1 -1
  124. package/package.json +32 -33
  125. package/src/Collection.tsx +1 -1
  126. package/src/Dialog.tsx +15 -2
  127. package/src/Disclosure.tsx +1 -1
  128. package/src/Menu.tsx +7 -33
  129. package/src/OverlayArrow.tsx +5 -3
  130. package/src/Popover.tsx +2 -2
  131. package/src/Table.tsx +1 -2
  132. package/src/Tooltip.tsx +2 -2
  133. package/src/Virtualizer.tsx +2 -2
package/src/Menu.tsx CHANGED
@@ -22,8 +22,8 @@ import {HeaderContext} from './Header';
22
22
  import {KeyboardContext} from './Keyboard';
23
23
  import {MultipleSelectionState, SelectionManager, useMultipleSelectionState} from '@react-stately/selection';
24
24
  import {OverlayTriggerStateContext} from './Dialog';
25
- import {PopoverContext, PopoverProps} from './Popover';
26
- import {PressResponder, useHover, useInteractOutside} from '@react-aria/interactions';
25
+ import {PopoverContext} from './Popover';
26
+ import {PressResponder, useHover} from '@react-aria/interactions';
27
27
  import React, {
28
28
  createContext,
29
29
  ForwardedRef,
@@ -33,7 +33,6 @@ import React, {
33
33
  RefObject,
34
34
  useCallback,
35
35
  useContext,
36
- useEffect,
37
36
  useRef,
38
37
  useState
39
38
  } from 'react';
@@ -120,7 +119,6 @@ export const SubmenuTrigger = /*#__PURE__*/ createBranchComponent('submenutrigg
120
119
  let submenuTriggerState = useSubmenuTriggerState({triggerKey: item.key}, rootMenuTriggerState);
121
120
  let submenuRef = useRef<HTMLDivElement>(null);
122
121
  let itemRef = useObjectRef(ref);
123
- let popoverContext = useSlottedContext(PopoverContext)!;
124
122
  let {parentMenuRef} = useContext(SubmenuTriggerContext)!;
125
123
  let {submenuTriggerProps, submenuProps, popoverProps} = useSubmenuTrigger({
126
124
  parentMenuRef,
@@ -139,7 +137,9 @@ export const SubmenuTrigger = /*#__PURE__*/ createBranchComponent('submenutrigg
139
137
  trigger: 'SubmenuTrigger',
140
138
  triggerRef: itemRef,
141
139
  placement: 'end top',
142
- UNSTABLE_portalContainer: popoverContext.UNSTABLE_portalContainer || undefined,
140
+ // Prevent parent popover from hiding submenu.
141
+ // @ts-ignore
142
+ 'data-react-aria-top-layer': true,
143
143
  ...popoverProps
144
144
  }]
145
145
  ]}>
@@ -174,33 +174,9 @@ function MenuInner<T extends object>({props, collection, menuRef: ref}: MenuInne
174
174
  collection,
175
175
  children: undefined
176
176
  });
177
- let [popoverContainer, setPopoverContainer] = useState<HTMLDivElement | null>(null);
177
+ let triggerState = useContext(RootMenuTriggerStateContext);
178
178
  let {isVirtualized, CollectionRoot} = useContext(CollectionRendererContext);
179
- let {menuProps} = useMenu({...props, isVirtualized}, state, ref);
180
- let rootMenuTriggerState = useContext(RootMenuTriggerStateContext)!;
181
- let popoverContext = useContext(PopoverContext)!;
182
-
183
- let isSubmenu = (popoverContext as PopoverProps)?.trigger === 'SubmenuTrigger';
184
- useInteractOutside({
185
- ref,
186
- onInteractOutside: (e) => {
187
- if (rootMenuTriggerState && !popoverContainer?.contains(e.target as HTMLElement)) {
188
- rootMenuTriggerState.close();
189
- }
190
- },
191
- isDisabled: isSubmenu || rootMenuTriggerState?.expandedKeysStack.length === 0
192
- });
193
-
194
- let prevPopoverContainer = useRef<HTMLDivElement | null>(null) ;
195
- let [leftOffset, setLeftOffset] = useState({left: 0});
196
- useEffect(() => {
197
- if (popoverContainer && prevPopoverContainer.current !== popoverContainer && leftOffset.left === 0) {
198
- prevPopoverContainer.current = popoverContainer;
199
- let {left} = popoverContainer.getBoundingClientRect();
200
- setLeftOffset({left: -1 * left});
201
- }
202
- }, [leftOffset, popoverContainer]);
203
-
179
+ let {menuProps} = useMenu({...props, isVirtualized, onClose: props.onClose || triggerState?.close}, state, ref);
204
180
  let renderProps = useRenderProps({
205
181
  defaultClassName: 'react-aria-Menu',
206
182
  className: props.className,
@@ -221,7 +197,6 @@ function MenuInner<T extends object>({props, collection, menuRef: ref}: MenuInne
221
197
  values={[
222
198
  [MenuStateContext, state],
223
199
  [SeparatorContext, {elementType: 'div'}],
224
- [PopoverContext, {UNSTABLE_portalContainer: popoverContainer || undefined}],
225
200
  [SectionContext, {name: 'MenuSection', render: MenuSection}],
226
201
  [SubmenuTriggerContext, {parentMenuRef: ref}],
227
202
  [MenuItemContext, null],
@@ -233,7 +208,6 @@ function MenuInner<T extends object>({props, collection, menuRef: ref}: MenuInne
233
208
  scrollRef={ref} />
234
209
  </Provider>
235
210
  </div>
236
- <div ref={setPopoverContainer} style={{width: '100vw', position: 'absolute', top: 0, ...leftOffset}} />
237
211
  </FocusScope>
238
212
  );
239
213
  }
@@ -16,7 +16,7 @@ import {PlacementAxis} from 'react-aria';
16
16
  import React, {createContext, CSSProperties, ForwardedRef, forwardRef, HTMLAttributes} from 'react';
17
17
 
18
18
  interface OverlayArrowContextValue extends OverlayArrowProps {
19
- placement: PlacementAxis
19
+ placement: PlacementAxis | null
20
20
  }
21
21
 
22
22
  export const OverlayArrowContext = createContext<ContextValue<OverlayArrowContextValue, HTMLDivElement>>({
@@ -30,7 +30,7 @@ export interface OverlayArrowRenderProps {
30
30
  * The placement of the overlay relative to the trigger.
31
31
  * @selector [data-placement="left | right | top | bottom"]
32
32
  */
33
- placement: PlacementAxis
33
+ placement: PlacementAxis | null
34
34
  }
35
35
 
36
36
  function OverlayArrow(props: OverlayArrowProps, ref: ForwardedRef<HTMLDivElement>) {
@@ -38,9 +38,11 @@ function OverlayArrow(props: OverlayArrowProps, ref: ForwardedRef<HTMLDivElement
38
38
  let placement = (props as OverlayArrowContextValue).placement;
39
39
  let style: CSSProperties = {
40
40
  position: 'absolute',
41
- [placement]: '100%',
42
41
  transform: placement === 'top' || placement === 'bottom' ? 'translateX(-50%)' : 'translateY(-50%)'
43
42
  };
43
+ if (placement != null) {
44
+ style[placement] = '100%';
45
+ }
44
46
 
45
47
  let renderProps = useRenderProps({
46
48
  ...props,
package/src/Popover.tsx CHANGED
@@ -65,7 +65,7 @@ export interface PopoverRenderProps {
65
65
  * The placement of the popover relative to the trigger.
66
66
  * @selector [data-placement="left | right | top | bottom"]
67
67
  */
68
- placement: PlacementAxis,
68
+ placement: PlacementAxis | null,
69
69
  /**
70
70
  * Whether the popover is currently entering. Use this to apply animations.
71
71
  * @selector [data-entering]
@@ -165,7 +165,7 @@ function PopoverInner({state, isExiting, UNSTABLE_portalContainer, ...props}: Po
165
165
  let style = {...popoverProps.style, ...renderProps.style};
166
166
 
167
167
  return (
168
- <Overlay isExiting={isExiting} portalContainer={UNSTABLE_portalContainer}>
168
+ <Overlay {...props} isExiting={isExiting} portalContainer={UNSTABLE_portalContainer}>
169
169
  {!props.isNonModal && state.isOpen && <div data-testid="underlay" {...underlayProps} style={{position: 'fixed', inset: 0}} />}
170
170
  <div
171
171
  {...mergeProps(filterDOMProps(props as any), popoverProps)}
package/src/Table.tsx CHANGED
@@ -1143,7 +1143,7 @@ export const Row = /*#__PURE__*/ createBranchComponent(
1143
1143
  },
1144
1144
  props => {
1145
1145
  if (props.id == null && typeof props.children === 'function') {
1146
- console.warn('No id detected for the Row element. The Row element requires a id to be provided to it when the cells are rendered dynamically.');
1146
+ throw new Error('No id detected for the Row element. The Row element requires a id to be provided to it when the cells are rendered dynamically.');
1147
1147
  }
1148
1148
 
1149
1149
  let dependencies = [props.value].concat(props.dependencies);
@@ -1194,7 +1194,6 @@ export const Cell = /*#__PURE__*/ createLeafComponent('cell', (props: CellProps,
1194
1194
  let {dragState} = useContext(DragAndDropContext);
1195
1195
  let {isVirtualized} = useContext(CollectionRendererContext);
1196
1196
 
1197
- // @ts-ignore
1198
1197
  cell.column = state.collection.columns[cell.index];
1199
1198
 
1200
1199
  let {gridCellProps, isPressed} = useTableCell({
package/src/Tooltip.tsx CHANGED
@@ -55,7 +55,7 @@ export interface TooltipRenderProps {
55
55
  * The placement of the tooltip relative to the trigger.
56
56
  * @selector [data-placement="left | right | top | bottom"]
57
57
  */
58
- placement: PlacementAxis,
58
+ placement: PlacementAxis | null,
59
59
  /**
60
60
  * Whether the tooltip is currently entering. Use this to apply animations.
61
61
  * @selector [data-entering]
@@ -168,7 +168,7 @@ function TooltipInner(props: TooltipProps & {isExiting: boolean, tooltipRef: Ref
168
168
  ref={props.tooltipRef}
169
169
  {...renderProps}
170
170
  style={{...overlayProps.style, ...renderProps.style}}
171
- data-placement={placement}
171
+ data-placement={placement ?? undefined}
172
172
  data-entering={isEntering || undefined}
173
173
  data-exiting={props.isExiting || undefined}>
174
174
  <OverlayArrowContext.Provider value={{...arrowProps, placement, ref: arrowRef}}>
@@ -126,7 +126,7 @@ function renderWrapper(
126
126
  );
127
127
 
128
128
  let {collection, layout} = reusableView.virtualizer;
129
- let {key, type} = reusableView.content;
129
+ let {key, type} = reusableView.content!;
130
130
  if (type === 'item' && renderDropIndicator && layout.getDropTargetLayoutInfo) {
131
131
  rendered = (
132
132
  <React.Fragment key={reusableView.key}>
@@ -146,7 +146,7 @@ function renderDropIndicatorWrapper(
146
146
  dropPosition: DropPosition,
147
147
  renderDropIndicator: (target: ItemDropTarget) => ReactNode
148
148
  ) {
149
- let target: DropTarget = {type: 'item', key: reusableView.content.key, dropPosition};
149
+ let target: DropTarget = {type: 'item', key: reusableView.content!.key, dropPosition};
150
150
  let indicator = renderDropIndicator(target);
151
151
  if (indicator) {
152
152
  let layoutInfo = reusableView.virtualizer.layout.getDropTargetLayoutInfo!(target);