@ariakit/react-core 0.3.9 → 0.3.11

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 (129) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/cjs/__chunks/{WK7AZPHS.cjs → 2GETDAIQ.cjs} +4 -4
  3. package/cjs/__chunks/{OT6DC3ML.cjs → 36QK2QLE.cjs} +2 -2
  4. package/cjs/__chunks/{PFQ3IPWT.cjs → 3RUODFRU.cjs} +16 -1
  5. package/cjs/__chunks/{UBME4GBY.cjs → 63WKH5OP.cjs} +2 -2
  6. package/cjs/__chunks/{S6WUBPBB.cjs → 65LGW5LY.cjs} +4 -2
  7. package/cjs/__chunks/{KIGOGBFU.cjs → 7EEAHTIW.cjs} +2 -2
  8. package/cjs/__chunks/{3KZQJDTV.cjs → APFV5PTX.cjs} +2 -2
  9. package/cjs/__chunks/{VIETWH5C.cjs → BKU5STIE.cjs} +2 -2
  10. package/cjs/__chunks/{HHZJ6KYW.cjs → IAYTETYN.cjs} +2 -2
  11. package/cjs/__chunks/{WABPFCL3.cjs → NVHGMKAE.cjs} +7 -5
  12. package/cjs/__chunks/{CZOBQEIO.cjs → RM2WCNSU.cjs} +16 -22
  13. package/cjs/__chunks/{GF6NWLKX.cjs → WWU35JDJ.cjs} +6 -2
  14. package/cjs/__chunks/{UUTXBBHD.cjs → XAYQLYTN.cjs} +2 -2
  15. package/cjs/checkbox/checkbox-check.d.cts +6 -3
  16. package/cjs/checkbox/checkbox-check.d.ts +6 -3
  17. package/cjs/collection/collection-renderer.d.cts +0 -1
  18. package/cjs/collection/collection-renderer.d.ts +0 -1
  19. package/cjs/combobox/combobox-disclosure.cjs +3 -4
  20. package/cjs/combobox/combobox-item.cjs +5 -3
  21. package/cjs/combobox/combobox-item.d.cts +13 -1
  22. package/cjs/combobox/combobox-item.d.ts +13 -1
  23. package/cjs/combobox/combobox-popover.cjs +39 -10
  24. package/cjs/combobox/combobox-popover.d.cts +1 -1
  25. package/cjs/combobox/combobox-popover.d.ts +1 -1
  26. package/cjs/combobox/combobox.cjs +18 -6
  27. package/cjs/combobox/combobox.d.cts +26 -1
  28. package/cjs/combobox/combobox.d.ts +26 -1
  29. package/cjs/composite/composite-hover.d.cts +10 -1
  30. package/cjs/composite/composite-hover.d.ts +10 -1
  31. package/cjs/composite/composite-item.cjs +2 -2
  32. package/cjs/composite/composite-overflow-disclosure.cjs +2 -2
  33. package/cjs/composite/composite-overflow.cjs +4 -4
  34. package/cjs/composite/composite-renderer.d.cts +0 -1
  35. package/cjs/composite/composite-renderer.d.ts +0 -1
  36. package/cjs/composite/composite.cjs +2 -2
  37. package/cjs/dialog/dialog.cjs +3 -3
  38. package/cjs/form/form-radio.cjs +3 -3
  39. package/cjs/hovercard/hovercard.cjs +5 -5
  40. package/cjs/menu/menu-bar.cjs +3 -3
  41. package/cjs/menu/menu-item-check.d.cts +14 -0
  42. package/cjs/menu/menu-item-check.d.ts +14 -0
  43. package/cjs/menu/menu-item-checkbox.cjs +3 -3
  44. package/cjs/menu/menu-item-radio.cjs +5 -5
  45. package/cjs/menu/menu-item.cjs +3 -3
  46. package/cjs/menu/menu-item.d.cts +8 -1
  47. package/cjs/menu/menu-item.d.ts +8 -1
  48. package/cjs/menu/menu-list.cjs +3 -3
  49. package/cjs/menu/menu-store.d.cts +2 -0
  50. package/cjs/menu/menu-store.d.ts +2 -0
  51. package/cjs/menu/menu.cjs +43 -15
  52. package/cjs/menubar/menubar.cjs +3 -3
  53. package/cjs/popover/popover.cjs +4 -4
  54. package/cjs/popover/popover.d.cts +2 -0
  55. package/cjs/popover/popover.d.ts +2 -0
  56. package/cjs/portal/portal.cjs +2 -2
  57. package/cjs/radio/radio-group.cjs +2 -2
  58. package/cjs/radio/radio.cjs +3 -3
  59. package/cjs/select/select-item.cjs +2 -2
  60. package/cjs/select/select-list.cjs +3 -3
  61. package/cjs/select/select-popover.cjs +8 -8
  62. package/cjs/tab/tab-list.cjs +2 -2
  63. package/cjs/tab/tab-provider.cjs +2 -2
  64. package/cjs/tab/tab-store.cjs +2 -2
  65. package/cjs/tab/tab.cjs +2 -2
  66. package/cjs/toolbar/toolbar-container.cjs +3 -3
  67. package/cjs/toolbar/toolbar-input.cjs +3 -3
  68. package/cjs/toolbar/toolbar-item.cjs +3 -3
  69. package/cjs/toolbar/toolbar.cjs +2 -2
  70. package/cjs/tooltip/tooltip.cjs +6 -6
  71. package/esm/__chunks/{FHDXHZLB.js → 57KNUQTI.js} +16 -22
  72. package/esm/__chunks/{UV2O3GRQ.js → 7D63S66W.js} +1 -1
  73. package/esm/__chunks/{TZJDOU75.js → 7R5VX7DV.js} +1 -1
  74. package/esm/__chunks/{6HKEBMMA.js → 7SHHFY4P.js} +1 -1
  75. package/esm/__chunks/{BJR5BFSV.js → CVFC2LN3.js} +1 -1
  76. package/esm/__chunks/{DHHIMTTV.js → DENCHBDS.js} +1 -1
  77. package/esm/__chunks/{E3XM3D67.js → JPXNJYSO.js} +4 -2
  78. package/esm/__chunks/{K5VQ2XTM.js → LZUSNDXA.js} +6 -2
  79. package/esm/__chunks/{PFM7J2TR.js → PDVJHECS.js} +1 -1
  80. package/esm/__chunks/{YGCD7HIZ.js → R2WNOXYG.js} +16 -1
  81. package/esm/__chunks/{2WETNHXU.js → SXPADS2D.js} +5 -3
  82. package/esm/__chunks/{2ECHI3ER.js → W2TTCKOE.js} +1 -1
  83. package/esm/__chunks/{HQ7YVNMA.js → WEU2EOWJ.js} +2 -2
  84. package/esm/checkbox/checkbox-check.d.ts +6 -3
  85. package/esm/collection/collection-renderer.d.ts +0 -1
  86. package/esm/combobox/combobox-disclosure.js +3 -4
  87. package/esm/combobox/combobox-item.d.ts +13 -1
  88. package/esm/combobox/combobox-item.js +4 -2
  89. package/esm/combobox/combobox-popover.d.ts +1 -1
  90. package/esm/combobox/combobox-popover.js +38 -9
  91. package/esm/combobox/combobox.d.ts +26 -1
  92. package/esm/combobox/combobox.js +17 -5
  93. package/esm/composite/composite-hover.d.ts +10 -1
  94. package/esm/composite/composite-item.js +1 -1
  95. package/esm/composite/composite-overflow-disclosure.js +1 -1
  96. package/esm/composite/composite-overflow.js +3 -3
  97. package/esm/composite/composite-renderer.d.ts +0 -1
  98. package/esm/composite/composite.js +1 -1
  99. package/esm/dialog/dialog.js +2 -2
  100. package/esm/form/form-radio.js +2 -2
  101. package/esm/hovercard/hovercard.js +4 -4
  102. package/esm/menu/menu-bar.js +2 -2
  103. package/esm/menu/menu-item-check.d.ts +14 -0
  104. package/esm/menu/menu-item-checkbox.js +2 -2
  105. package/esm/menu/menu-item-radio.js +3 -3
  106. package/esm/menu/menu-item.d.ts +8 -1
  107. package/esm/menu/menu-item.js +2 -2
  108. package/esm/menu/menu-list.js +2 -2
  109. package/esm/menu/menu-store.d.ts +2 -0
  110. package/esm/menu/menu.js +41 -13
  111. package/esm/menubar/menubar.js +2 -2
  112. package/esm/popover/popover.d.ts +2 -0
  113. package/esm/popover/popover.js +3 -3
  114. package/esm/portal/portal.js +1 -1
  115. package/esm/radio/radio-group.js +1 -1
  116. package/esm/radio/radio.js +2 -2
  117. package/esm/select/select-item.js +1 -1
  118. package/esm/select/select-list.js +2 -2
  119. package/esm/select/select-popover.js +5 -5
  120. package/esm/tab/tab-list.js +1 -1
  121. package/esm/tab/tab-provider.js +1 -1
  122. package/esm/tab/tab-store.js +1 -1
  123. package/esm/tab/tab.js +1 -1
  124. package/esm/toolbar/toolbar-container.js +2 -2
  125. package/esm/toolbar/toolbar-input.js +2 -2
  126. package/esm/toolbar/toolbar-item.js +2 -2
  127. package/esm/toolbar/toolbar.js +1 -1
  128. package/esm/tooltip/tooltip.js +4 -4
  129. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,72 @@
1
1
  # @ariakit/react-core
2
2
 
3
+ ## 0.3.11
4
+
5
+ ### Modal Combobox
6
+
7
+ The [Combobox](https://ariakit.org/component/combobox) components now support the [`modal`](https://ariakit.org/reference/combobox-popover#modal) prop on [`ComboboxPopover`](https://ariakit.org/reference/combobox-popover).
8
+
9
+ When a modal combobox is expanded, users can interact with and tab through all the combobox controls, including [`Combobox`](https://ariakit.org/reference/combobox), [`ComboboxDisclosure`](https://ariakit.org/reference/combobox-disclosure), and [`ComboboxCancel`](https://ariakit.org/reference/combobox-cancel), even if they're rendered outside the popover. The rest of the page will be inert.
10
+
11
+ ### Controlling the auto-select functionality of Combobox
12
+
13
+ The [`Combobox`](https://ariakit.org/reference/combobox) component now includes a new [`getAutoSelectId`](https://ariakit.org/reference/combobox#getautoselectid) prop. This allows you to specify the [`ComboboxItem`](https://ariakit.org/reference/combobox-item) that should be auto-selected if the [`autoSelect`](https://ariakit.org/reference/combobox#autoselect) prop is `true`.
14
+
15
+ By default, the first _enabled_ item is auto-selected. Now you can customize this behavior by returning the id of another item from [`getAutoSelectId`](https://ariakit.org/reference/combobox#getautoselectid):
16
+
17
+ ```jsx
18
+ <Combobox
19
+ autoSelect
20
+ getAutoSelectId={(items) => {
21
+ // Auto select the first enabled item with a value
22
+ const item = items.find((item) => {
23
+ if (item.disabled) return false;
24
+ if (!item.value) return false;
25
+ return true;
26
+ });
27
+ return item?.id;
28
+ }}
29
+ />
30
+ ```
31
+
32
+ ### Styling Combobox without an active descendant
33
+
34
+ The [`Combobox`](https://ariakit.org/reference/combobox) component now includes a [`data-active-item`](https://ariakit.org/guide/styling#data-active-item) attribute when it's the only active item in the composite widget. In other words, when no [`ComboboxItem`](https://ariakit.org/reference/combobox-item) is active and the focus is solely on the combobox input.
35
+
36
+ You can use this as a CSS selector to style the combobox differently, providing additional affordance to users who pressed <kbd>↑</kbd> on the first item or <kbd>↓</kbd> on the last item. This action would place both virtual and actual DOM focus on the combobox input.
37
+
38
+ ```css
39
+ .combobox[data-active-item] {
40
+ outline-width: 2px;
41
+ }
42
+ ```
43
+
44
+ ### Other updates
45
+
46
+ - Fixed [`useTabStore`](https://ariakit.org/reference/use-tab-store) return value not updating its own reference.
47
+ - Fixed keyboard navigation on [Combobox](https://ariakit.org/components/combobox) when the content element is a grid.
48
+ - Fixed [`ComboboxDisclosure`](https://ariakit.org/reference/combobox-disclosure) to update its `aria-expanded` attribute when the combobox expands.
49
+ - Fixed `Maximum update depth exceeded` warning when rendering multiple collection items on the page.
50
+ - Improved JSDocs.
51
+ - Updated dependencies: `@ariakit/core@0.3.9`
52
+
53
+ ## 0.3.10
54
+
55
+ ### Overwriting `aria-selected` value on `ComboboxItem`
56
+
57
+ It's now possible to pass a custom `aria-selected` value to the [`ComboboxItem`](https://ariakit.org/reference/combobox-item) component, overwriting the internal behavior.
58
+
59
+ ### Limiting `slide` on popovers
60
+
61
+ When components like [Popover](https://ariakit.org/components/popover) and [Menu](https://ariakit.org/components/menu) with the [`slide`](https://ariakit.org/reference/popover#slide) prop are positioned to the right or left of the anchor element, they will now cease to slide across the screen, disengaged from the anchor element, upon reaching the edge of said element.
62
+
63
+ ### Other updates
64
+
65
+ - Fixed [`blurOnHoverEnd`](https://ariakit.org/reference/menu-item#bluronhoverend) set to `false` not keeping submenus open.
66
+ - Fixed scroll jump on Safari when selecting a [`CompositeItem`](https://ariakit.org/reference/composite-item).
67
+ - Fixed [`preserveTabOrderAnchor`](https://ariakit.org/reference/menu#preservetaborderanchor) on nested menus.
68
+ - Fixed focus behavior when using the [`preserveTabOrder`](https://ariakit.org/reference/portal#preservetaborder) prop.
69
+
3
70
  ## 0.3.9
4
71
 
5
72
  ### Automatic role on ComboboxGroup
@@ -6,10 +6,10 @@
6
6
  var _KXQOQQ5Bcjs = require('./KXQOQQ5B.cjs');
7
7
 
8
8
 
9
- var _WABPFCL3cjs = require('./WABPFCL3.cjs');
9
+ var _NVHGMKAEcjs = require('./NVHGMKAE.cjs');
10
10
 
11
11
 
12
- var _OT6DC3MLcjs = require('./OT6DC3ML.cjs');
12
+ var _36QK2QLEcjs = require('./36QK2QLE.cjs');
13
13
 
14
14
 
15
15
 
@@ -283,7 +283,7 @@ var useHovercard = _RNZNGEL4cjs.createHook.call(void 0,
283
283
  const autoFocusOnShow = store.useState(
284
284
  (state) => modal || state.autoFocusOnShow
285
285
  );
286
- props = _WABPFCL3cjs.usePopover.call(void 0, _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {
286
+ props = _NVHGMKAEcjs.usePopover.call(void 0, _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {
287
287
  store,
288
288
  modal,
289
289
  portal,
@@ -304,7 +304,7 @@ var useHovercard = _RNZNGEL4cjs.createHook.call(void 0,
304
304
  return props;
305
305
  }
306
306
  );
307
- var Hovercard = _OT6DC3MLcjs.createDialogComponent.call(void 0,
307
+ var Hovercard = _36QK2QLEcjs.createDialogComponent.call(void 0,
308
308
  _RNZNGEL4cjs.createComponent.call(void 0, (props) => {
309
309
  const htmlProps = useHovercard(props);
310
310
  return _RNZNGEL4cjs.createElement.call(void 0, "div", htmlProps);
@@ -33,7 +33,7 @@ var _7566TIRWcjs = require('./7566TIRW.cjs');
33
33
  var _J3OG6T3Bcjs = require('./J3OG6T3B.cjs');
34
34
 
35
35
 
36
- var _S6WUBPBBcjs = require('./S6WUBPBB.cjs');
36
+ var _65LGW5LYcjs = require('./65LGW5LY.cjs');
37
37
 
38
38
 
39
39
 
@@ -504,7 +504,7 @@ var useDialog = _RNZNGEL4cjs.createHook.call(void 0,
504
504
  }));
505
505
  props = _TD5MOASJcjs.useDisclosureContent.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store }, props));
506
506
  props = _Z3GCTNW4cjs.useFocusable.call(void 0, _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {}, props), { focusable }));
507
- props = _S6WUBPBBcjs.usePortal.call(void 0, _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { portal }, props), { portalRef, preserveTabOrder }));
507
+ props = _65LGW5LYcjs.usePortal.call(void 0, _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { portal }, props), { portalRef, preserveTabOrder }));
508
508
  return props;
509
509
  }
510
510
  );
@@ -220,7 +220,7 @@ var useCompositeItem = _RNZNGEL4cjs.createHook.call(void 0,
220
220
  return;
221
221
  if (isEditableElement(event.currentTarget))
222
222
  return;
223
- if (!baseElement2)
223
+ if (!(baseElement2 == null ? void 0 : baseElement2.isConnected))
224
224
  return;
225
225
  hasFocusedComposite.current = true;
226
226
  const fromComposite = event.relatedTarget === baseElement2 || _RV3PHHWMcjs.isItem.call(void 0, store, event.relatedTarget);
@@ -259,18 +259,33 @@ var useCompositeItem = _RNZNGEL4cjs.createHook.call(void 0,
259
259
  const isGrid = !!(item == null ? void 0 : item.rowId);
260
260
  const isVertical = state.orientation !== "horizontal";
261
261
  const isHorizontal = state.orientation !== "vertical";
262
+ const canHomeEnd = () => {
263
+ if (isGrid)
264
+ return true;
265
+ if (isHorizontal)
266
+ return true;
267
+ if (!state.baseElement)
268
+ return true;
269
+ if (!_dom.isTextField.call(void 0, state.baseElement))
270
+ return true;
271
+ return false;
272
+ };
262
273
  const keyMap = {
263
274
  ArrowUp: (isGrid || isVertical) && store.up,
264
275
  ArrowRight: (isGrid || isHorizontal) && store.next,
265
276
  ArrowDown: (isGrid || isVertical) && store.down,
266
277
  ArrowLeft: (isGrid || isHorizontal) && store.previous,
267
278
  Home: () => {
279
+ if (!canHomeEnd())
280
+ return;
268
281
  if (!isGrid || event.ctrlKey) {
269
282
  return store == null ? void 0 : store.first();
270
283
  }
271
284
  return store == null ? void 0 : store.previous(-1);
272
285
  },
273
286
  End: () => {
287
+ if (!canHomeEnd())
288
+ return;
274
289
  if (!isGrid || event.ctrlKey) {
275
290
  return store == null ? void 0 : store.last();
276
291
  }
@@ -8,7 +8,7 @@ var _NGEKJJDHcjs = require('./NGEKJJDH.cjs');
8
8
  var _FQZOOWMHcjs = require('./FQZOOWMH.cjs');
9
9
 
10
10
 
11
- var _CZOBQEIOcjs = require('./CZOBQEIO.cjs');
11
+ var _RM2WCNSUcjs = require('./RM2WCNSU.cjs');
12
12
 
13
13
 
14
14
  var _TD5MOASJcjs = require('./TD5MOASJ.cjs');
@@ -159,7 +159,7 @@ var useMenuList = _RNZNGEL4cjs.createHook.call(void 0,
159
159
  "aria-orientation": orientation
160
160
  }, props);
161
161
  }
162
- props = _CZOBQEIOcjs.useComposite.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store, composite }, props));
162
+ props = _RM2WCNSUcjs.useComposite.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store, composite }, props));
163
163
  props = _FQZOOWMHcjs.useCompositeTypeahead.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store, typeahead: !hasCombobox }, props));
164
164
  return props;
165
165
  }
@@ -133,9 +133,10 @@ var usePortal = _RNZNGEL4cjs.createHook.call(void 0,
133
133
  if (!_events.isFocusEventOutside.call(void 0, event))
134
134
  return;
135
135
  const focusing = event.type === "focusin";
136
- if (focusing)
137
- return _focus.restoreFocusIn.call(void 0, portalNode);
138
136
  cancelAnimationFrame(raf);
137
+ if (focusing) {
138
+ return _focus.restoreFocusIn.call(void 0, portalNode);
139
+ }
139
140
  raf = requestAnimationFrame(() => {
140
141
  _focus.disableFocusIn.call(void 0, portalNode, true);
141
142
  });
@@ -143,6 +144,7 @@ var usePortal = _RNZNGEL4cjs.createHook.call(void 0,
143
144
  portalNode.addEventListener("focusin", onFocus, true);
144
145
  portalNode.addEventListener("focusout", onFocus, true);
145
146
  return () => {
147
+ cancelAnimationFrame(raf);
146
148
  portalNode.removeEventListener("focusin", onFocus, true);
147
149
  portalNode.removeEventListener("focusout", onFocus, true);
148
150
  };
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
2
 
3
3
 
4
- var _PFQ3IPWTcjs = require('./PFQ3IPWT.cjs');
4
+ var _3RUODFRUcjs = require('./3RUODFRU.cjs');
5
5
 
6
6
 
7
7
  var _LYIGAIJFcjs = require('./LYIGAIJF.cjs');
@@ -21,7 +21,7 @@ var useToolbarItem = _RNZNGEL4cjs.createHook.call(void 0,
21
21
  var _b = _a, { store } = _b, props = _AV6KTKLEcjs.__objRest.call(void 0, _b, ["store"]);
22
22
  const context = _LYIGAIJFcjs.useToolbarContext.call(void 0, );
23
23
  store = store || context;
24
- props = _PFQ3IPWTcjs.useCompositeItem.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store }, props));
24
+ props = _3RUODFRUcjs.useCompositeItem.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store }, props));
25
25
  return props;
26
26
  }
27
27
  );
@@ -8,7 +8,7 @@ var _7LBZXSLYcjs = require('./7LBZXSLY.cjs');
8
8
  var _7KFYPSJOcjs = require('./7KFYPSJO.cjs');
9
9
 
10
10
 
11
- var _CZOBQEIOcjs = require('./CZOBQEIO.cjs');
11
+ var _RM2WCNSUcjs = require('./RM2WCNSU.cjs');
12
12
 
13
13
 
14
14
 
@@ -64,7 +64,7 @@ var useMenubar = _RNZNGEL4cjs.createHook.call(void 0,
64
64
  "aria-orientation": orientation
65
65
  }, props);
66
66
  }
67
- props = _CZOBQEIOcjs.useComposite.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store, composite }, props));
67
+ props = _RM2WCNSUcjs.useComposite.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store, composite }, props));
68
68
  return props;
69
69
  }
70
70
  );
@@ -10,7 +10,7 @@ var _7LBZXSLYcjs = require('./7LBZXSLY.cjs');
10
10
  var _IPYAEPOTcjs = require('./IPYAEPOT.cjs');
11
11
 
12
12
 
13
- var _PFQ3IPWTcjs = require('./PFQ3IPWT.cjs');
13
+ var _3RUODFRUcjs = require('./3RUODFRU.cjs');
14
14
 
15
15
 
16
16
 
@@ -110,7 +110,7 @@ var useMenuItem = _RNZNGEL4cjs.createHook.call(void 0,
110
110
  }, props), {
111
111
  onClick
112
112
  });
113
- props = _PFQ3IPWTcjs.useCompositeItem.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store, preventScrollOnKeyDown }, props));
113
+ props = _3RUODFRUcjs.useCompositeItem.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store, preventScrollOnKeyDown }, props));
114
114
  props = _IPYAEPOTcjs.useCompositeHover.call(void 0, _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {
115
115
  store
116
116
  }, props), {
@@ -4,7 +4,7 @@
4
4
  var _HEEQY4DZcjs = require('./HEEQY4DZ.cjs');
5
5
 
6
6
 
7
- var _PFQ3IPWTcjs = require('./PFQ3IPWT.cjs');
7
+ var _3RUODFRUcjs = require('./3RUODFRU.cjs');
8
8
 
9
9
 
10
10
 
@@ -133,7 +133,7 @@ var useRadio = _RNZNGEL4cjs.createHook.call(void 0,
133
133
  onClick,
134
134
  onFocus
135
135
  });
136
- props = _PFQ3IPWTcjs.useCompositeItem.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store, clickOnEnter: !nativeRadio }, props));
136
+ props = _3RUODFRUcjs.useCompositeItem.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store, clickOnEnter: !nativeRadio }, props));
137
137
  return _AV6KTKLEcjs.__spreadValues.call(void 0, {
138
138
  name: nativeRadio ? name : void 0,
139
139
  value: nativeRadio ? value : void 0,
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- var _OT6DC3MLcjs = require('./OT6DC3ML.cjs');
5
+ var _36QK2QLEcjs = require('./36QK2QLE.cjs');
6
6
 
7
7
 
8
8
 
@@ -35,6 +35,7 @@ var _misc = require('@ariakit/core/utils/misc');
35
35
 
36
36
 
37
37
 
38
+
38
39
  var _dom = require('@floating-ui/dom');
39
40
  var _jsxruntime = require('react/jsx-runtime');
40
41
  function createDOMRect(x = 0, y = 0, width = 0, height = 0) {
@@ -112,7 +113,8 @@ function getShiftMiddleware(props) {
112
113
  return _dom.shift.call(void 0, {
113
114
  mainAxis: props.slide,
114
115
  crossAxis: props.overlap,
115
- padding: props.overflowPadding
116
+ padding: props.overflowPadding,
117
+ limiter: _dom.limitShift.call(void 0, )
116
118
  });
117
119
  }
118
120
  function getSizeMiddleware(props) {
@@ -227,7 +229,7 @@ var usePopover = _RNZNGEL4cjs.createHook.call(void 0,
227
229
  const middleware = [
228
230
  getOffsetMiddleware(arrowElement, { gutter, shift: shift2 }),
229
231
  getFlipMiddleware({ flip: flip2, overflowPadding }),
230
- getShiftMiddleware({ slide, overlap, overflowPadding }),
232
+ getShiftMiddleware({ slide, shift: shift2, overlap, overflowPadding }),
231
233
  getArrowMiddleware(arrowElement, { arrowPadding }),
232
234
  getSizeMiddleware({
233
235
  sameWidth,
@@ -354,7 +356,7 @@ var usePopover = _RNZNGEL4cjs.createHook.call(void 0,
354
356
  position: "relative"
355
357
  }, props.style)
356
358
  });
357
- props = _OT6DC3MLcjs.useDialog.call(void 0, _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {
359
+ props = _36QK2QLEcjs.useDialog.call(void 0, _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {
358
360
  store,
359
361
  modal,
360
362
  portal,
@@ -367,7 +369,7 @@ var usePopover = _RNZNGEL4cjs.createHook.call(void 0,
367
369
  return props;
368
370
  }
369
371
  );
370
- var Popover = _OT6DC3MLcjs.createDialogComponent.call(void 0,
372
+ var Popover = _36QK2QLEcjs.createDialogComponent.call(void 0,
371
373
  _RNZNGEL4cjs.createComponent.call(void 0, (props) => {
372
374
  const htmlProps = usePopover(props);
373
375
  return _RNZNGEL4cjs.createElement.call(void 0, "div", htmlProps);
@@ -48,43 +48,32 @@ function isGrid(items) {
48
48
  return items.some((item) => !!item.rowId);
49
49
  }
50
50
  function isPrintableKey(event) {
51
+ const target = event.target;
52
+ if (target && !_dom.isTextField.call(void 0, target))
53
+ return false;
51
54
  return event.key.length === 1 && !event.ctrlKey && !event.metaKey;
52
55
  }
53
56
  function isModifierKey(event) {
54
57
  return event.key === "Shift" || event.key === "Control" || event.key === "Alt" || event.key === "Meta";
55
58
  }
56
- function canProxyKeyboardEvent(event, state) {
57
- if (!_events.isSelfTarget.call(void 0, event))
58
- return false;
59
- if (isModifierKey(event))
60
- return false;
61
- const target = event.target;
62
- if (!target)
63
- return true;
64
- if (_dom.isTextField.call(void 0, target)) {
65
- if (isPrintableKey(event))
66
- return false;
67
- const grid = isGrid(state.renderedItems);
68
- const focusingInputOnly = state.activeId === null;
69
- const allowHorizontalNavigationOnItems = grid && !focusingInputOnly;
70
- const isHomeOrEnd = event.key === "Home" || event.key === "End";
71
- if (!allowHorizontalNavigationOnItems && isHomeOrEnd)
72
- return false;
73
- }
74
- return !event.isPropagationStopped();
75
- }
76
59
  function useKeyboardEventProxy(store, onKeyboardEvent, previousElementRef) {
77
60
  return _EO6LS72Hcjs.useEvent.call(void 0, (event) => {
78
61
  var _a;
79
62
  onKeyboardEvent == null ? void 0 : onKeyboardEvent(event);
80
63
  if (event.defaultPrevented)
81
64
  return;
65
+ if (event.isPropagationStopped())
66
+ return;
67
+ if (!_events.isSelfTarget.call(void 0, event))
68
+ return;
69
+ if (isModifierKey(event))
70
+ return;
71
+ if (isPrintableKey(event))
72
+ return;
82
73
  const state = store.getState();
83
74
  const activeElement = (_a = _RV3PHHWMcjs.getEnabledItem.call(void 0, store, state.activeId)) == null ? void 0 : _a.element;
84
75
  if (!activeElement)
85
76
  return;
86
- if (!canProxyKeyboardEvent(event, state))
87
- return;
88
77
  const _b = event, { view } = _b, eventInit = _AV6KTKLEcjs.__objRest.call(void 0, _b, ["view"]);
89
78
  const previousElement = previousElementRef == null ? void 0 : previousElementRef.current;
90
79
  if (activeElement !== previousElement) {
@@ -269,6 +258,8 @@ var useComposite = _RNZNGEL4cjs.createHook.call(void 0,
269
258
  }
270
259
  } else if (activeElement) {
271
260
  _events.fireBlurEvent.call(void 0, activeElement, event);
261
+ } else if (previousElement) {
262
+ _events.fireBlurEvent.call(void 0, previousElement, event);
272
263
  }
273
264
  event.stopPropagation();
274
265
  } else {
@@ -296,6 +287,9 @@ var useComposite = _RNZNGEL4cjs.createHook.call(void 0,
296
287
  const isVertical = orientation !== "horizontal";
297
288
  const isHorizontal = orientation !== "vertical";
298
289
  const grid = isGrid(renderedItems);
290
+ const isHorizontalKey = event.key === "ArrowLeft" || event.key === "ArrowRight" || event.key === "Home" || event.key === "End";
291
+ if (isHorizontalKey && _dom.isTextField.call(void 0, event.currentTarget))
292
+ return;
299
293
  const up = () => {
300
294
  if (grid) {
301
295
  const item = items && findFirstEnabledItemInTheLastRow(items);
@@ -8,6 +8,9 @@ var _N6CR2VNNcjs = require('./N6CR2VNN.cjs');
8
8
  var _B233QVZEcjs = require('./B233QVZE.cjs');
9
9
 
10
10
 
11
+ var _EO6LS72Hcjs = require('./EO6LS72H.cjs');
12
+
13
+
11
14
 
12
15
  var _AV6KTKLEcjs = require('./AV6KTKLE.cjs');
13
16
 
@@ -18,8 +21,9 @@ function useTabStoreProps(store, update, props) {
18
21
  store = _N6CR2VNNcjs.useCompositeStoreProps.call(void 0, store, update, props);
19
22
  _B233QVZEcjs.useStoreProps.call(void 0, store, props, "selectedId", "setSelectedId");
20
23
  _B233QVZEcjs.useStoreProps.call(void 0, store, props, "selectOnMove");
21
- const [panels] = _B233QVZEcjs.useStore.call(void 0, () => store.panels, {});
22
- return _react.useMemo.call(void 0, () => _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {}, store), { panels }), []);
24
+ const [panels, updatePanels] = _B233QVZEcjs.useStore.call(void 0, () => store.panels, {});
25
+ _EO6LS72Hcjs.useUpdateEffect.call(void 0, updatePanels, [store, updatePanels]);
26
+ return _react.useMemo.call(void 0, () => _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {}, store), { panels }), [store, panels]);
23
27
  }
24
28
  function useTabStore(props = {}) {
25
29
  const [store, update] = _B233QVZEcjs.useStore.call(void 0, Core.createTabStore, props);
@@ -8,7 +8,7 @@ var _FQZOOWMHcjs = require('./FQZOOWMH.cjs');
8
8
  var _2WCJJQSKcjs = require('./2WCJJQSK.cjs');
9
9
 
10
10
 
11
- var _CZOBQEIOcjs = require('./CZOBQEIO.cjs');
11
+ var _RM2WCNSUcjs = require('./RM2WCNSU.cjs');
12
12
 
13
13
 
14
14
  var _TD5MOASJcjs = require('./TD5MOASJ.cjs');
@@ -117,7 +117,7 @@ var useSelectList = _RNZNGEL4cjs.createHook.call(void 0,
117
117
  style,
118
118
  onKeyDown
119
119
  });
120
- props = _CZOBQEIOcjs.useComposite.call(void 0, _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store }, props), { composite }));
120
+ props = _RM2WCNSUcjs.useComposite.call(void 0, _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store }, props), { composite }));
121
121
  props = _FQZOOWMHcjs.useCompositeTypeahead.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store, typeahead: !hasCombobox }, props));
122
122
  return props;
123
123
  }
@@ -28,9 +28,12 @@ export interface CheckboxCheckOptions<T extends As = "span"> extends Options<T>
28
28
  */
29
29
  store?: CheckboxStore;
30
30
  /**
31
- * Whether the check mark should be shown. This value is automatically
32
- * inferred from the `store` prop or the parent `Checkbox` component. Manually
33
- * setting this prop will override the inferred value.
31
+ * Determines if the check mark should be displayed. This value is
32
+ * automatically derived from the
33
+ * [`store`](https://ariakit.org/reference/checkbox-check#store) prop or the
34
+ * parent [`Checkbox`](https://ariakit.org/reference/checkbox) component.
35
+ *
36
+ * Manually setting this prop will supersede the derived value.
34
37
  */
35
38
  checked?: boolean;
36
39
  }
@@ -28,9 +28,12 @@ export interface CheckboxCheckOptions<T extends As = "span"> extends Options<T>
28
28
  */
29
29
  store?: CheckboxStore;
30
30
  /**
31
- * Whether the check mark should be shown. This value is automatically
32
- * inferred from the `store` prop or the parent `Checkbox` component. Manually
33
- * setting this prop will override the inferred value.
31
+ * Determines if the check mark should be displayed. This value is
32
+ * automatically derived from the
33
+ * [`store`](https://ariakit.org/reference/checkbox-check#store) prop or the
34
+ * parent [`Checkbox`](https://ariakit.org/reference/checkbox) component.
35
+ *
36
+ * Manually setting this prop will supersede the derived value.
34
37
  */
35
38
  checked?: boolean;
36
39
  }
@@ -62,7 +62,6 @@ export declare function useCollectionRenderer<T extends Item = any>({ store, ite
62
62
  id?: string | undefined;
63
63
  lang?: string | undefined;
64
64
  nonce?: string | undefined;
65
- placeholder?: string | undefined;
66
65
  slot?: string | undefined;
67
66
  spellCheck?: (boolean | "false" | "true") | undefined;
68
67
  style?: CSSProperties | undefined;
@@ -62,7 +62,6 @@ export declare function useCollectionRenderer<T extends Item = any>({ store, ite
62
62
  id?: string | undefined;
63
63
  lang?: string | undefined;
64
64
  nonce?: string | undefined;
65
- placeholder?: string | undefined;
66
65
  slot?: string | undefined;
67
66
  spellCheck?: (boolean | "false" | "true") | undefined;
68
67
  style?: CSSProperties | undefined;
@@ -75,13 +75,12 @@ var useComboboxDisclosure = _RNZNGEL4cjs.createHook.call(void 0,
75
75
  const { baseElement } = store.getState();
76
76
  store.setDisclosureElement(baseElement);
77
77
  });
78
- const label = store.useState(
79
- (state) => state.open ? "Hide popup" : "Show popup"
80
- );
78
+ const open = store.useState("open");
81
79
  props = _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {
82
80
  children,
83
81
  tabIndex: -1,
84
- "aria-label": label
82
+ "aria-label": open ? "Hide popup" : "Show popup",
83
+ "aria-expanded": open
85
84
  }, props), {
86
85
  onMouseDown,
87
86
  onClick
@@ -9,7 +9,7 @@ var _IPYAEPOTcjs = require('../__chunks/IPYAEPOT.cjs');
9
9
  var _3WCBE6SUcjs = require('../__chunks/3WCBE6SU.cjs');
10
10
 
11
11
 
12
- var _PFQ3IPWTcjs = require('../__chunks/PFQ3IPWT.cjs');
12
+ var _3RUODFRUcjs = require('../__chunks/3RUODFRU.cjs');
13
13
  require('../__chunks/DAJUUBUI.cjs');
14
14
  require('../__chunks/R5A2WTWB.cjs');
15
15
  require('../__chunks/RV3PHHWM.cjs');
@@ -151,7 +151,9 @@ var useComboboxItem = _RNZNGEL4cjs.createHook.call(void 0,
151
151
  (state) => isSelected(state.selectedValue, value)
152
152
  );
153
153
  if (multiSelectable && selected != null) {
154
- props["aria-selected"] = selected;
154
+ props = _AV6KTKLEcjs.__spreadValues.call(void 0, {
155
+ "aria-selected": selected
156
+ }, props);
155
157
  }
156
158
  props = _EO6LS72Hcjs.useWrapElement.call(void 0,
157
159
  props,
@@ -167,7 +169,7 @@ var useComboboxItem = _RNZNGEL4cjs.createHook.call(void 0,
167
169
  onKeyDown
168
170
  });
169
171
  const moveOnKeyPressProp = _EO6LS72Hcjs.useBooleanEvent.call(void 0, moveOnKeyPress);
170
- props = _PFQ3IPWTcjs.useCompositeItem.call(void 0, _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {
172
+ props = _3RUODFRUcjs.useCompositeItem.call(void 0, _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {
171
173
  store
172
174
  }, props), {
173
175
  getItem,
@@ -56,6 +56,11 @@ export interface ComboboxItemOptions<T extends As = "div"> extends CompositeItem
56
56
  * [`setValueOnClick`](https://ariakit.org/reference/combobox-item#setvalueonclick)
57
57
  * is set to `true`, this will be the value of the combobox input when the
58
58
  * user clicks on this item.
59
+ * - If
60
+ * [`selectValueOnClick`](https://ariakit.org/reference/combobox-item#selectvalueonclick)
61
+ * is set to `true`, this will be the value of the
62
+ * [`selectedValue`](https://ariakit.org/reference/combobox-provider#selectedvalue)
63
+ * state.
59
64
  * - If the
60
65
  * [`autoComplete`](https://ariakit.org/reference/combobox#autocomplete)
61
66
  * prop on the [`Combobox`](https://ariakit.org/reference/combobox)
@@ -88,7 +93,12 @@ export interface ComboboxItemOptions<T extends As = "div"> extends CompositeItem
88
93
  * [`selectedValue`](https://ariakit.org/reference/combobox-provider#selectedvalue)
89
94
  * state using this item's
90
95
  * [`value`](https://ariakit.org/reference/combobox-item#value) when the item
91
- * is clicked.
96
+ * is clicked. If a callback is provided, it will only be invoked if the item
97
+ * has a value.
98
+ *
99
+ * Live examples:
100
+ * - [Submenu with
101
+ * Combobox](https://ariakit.org/examples/menu-nested-combobox)
92
102
  * @default true
93
103
  */
94
104
  selectValueOnClick?: BooleanOrCallback<MouseEvent<HTMLElement>>;
@@ -102,6 +112,8 @@ export interface ComboboxItemOptions<T extends As = "div"> extends CompositeItem
102
112
  *
103
113
  * Live examples:
104
114
  * - [Menu with Combobox](https://ariakit.org/examples/menu-combobox)
115
+ * - [Submenu with
116
+ * Combobox](https://ariakit.org/examples/menu-nested-combobox)
105
117
  */
106
118
  setValueOnClick?: BooleanOrCallback<MouseEvent<HTMLElement>>;
107
119
  /**
@@ -56,6 +56,11 @@ export interface ComboboxItemOptions<T extends As = "div"> extends CompositeItem
56
56
  * [`setValueOnClick`](https://ariakit.org/reference/combobox-item#setvalueonclick)
57
57
  * is set to `true`, this will be the value of the combobox input when the
58
58
  * user clicks on this item.
59
+ * - If
60
+ * [`selectValueOnClick`](https://ariakit.org/reference/combobox-item#selectvalueonclick)
61
+ * is set to `true`, this will be the value of the
62
+ * [`selectedValue`](https://ariakit.org/reference/combobox-provider#selectedvalue)
63
+ * state.
59
64
  * - If the
60
65
  * [`autoComplete`](https://ariakit.org/reference/combobox#autocomplete)
61
66
  * prop on the [`Combobox`](https://ariakit.org/reference/combobox)
@@ -88,7 +93,12 @@ export interface ComboboxItemOptions<T extends As = "div"> extends CompositeItem
88
93
  * [`selectedValue`](https://ariakit.org/reference/combobox-provider#selectedvalue)
89
94
  * state using this item's
90
95
  * [`value`](https://ariakit.org/reference/combobox-item#value) when the item
91
- * is clicked.
96
+ * is clicked. If a callback is provided, it will only be invoked if the item
97
+ * has a value.
98
+ *
99
+ * Live examples:
100
+ * - [Submenu with
101
+ * Combobox](https://ariakit.org/examples/menu-nested-combobox)
92
102
  * @default true
93
103
  */
94
104
  selectValueOnClick?: BooleanOrCallback<MouseEvent<HTMLElement>>;
@@ -102,6 +112,8 @@ export interface ComboboxItemOptions<T extends As = "div"> extends CompositeItem
102
112
  *
103
113
  * Live examples:
104
114
  * - [Menu with Combobox](https://ariakit.org/examples/menu-combobox)
115
+ * - [Submenu with
116
+ * Combobox](https://ariakit.org/examples/menu-nested-combobox)
105
117
  */
106
118
  setValueOnClick?: BooleanOrCallback<MouseEvent<HTMLElement>>;
107
119
  /**