@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
@@ -9,10 +9,10 @@ require('../__chunks/UZNYSPKP.cjs');
9
9
  require('../__chunks/BZTDJIVT.cjs');
10
10
 
11
11
 
12
- var _WABPFCL3cjs = require('../__chunks/WABPFCL3.cjs');
12
+ var _NVHGMKAEcjs = require('../__chunks/NVHGMKAE.cjs');
13
13
 
14
14
 
15
- var _OT6DC3MLcjs = require('../__chunks/OT6DC3ML.cjs');
15
+ var _36QK2QLEcjs = require('../__chunks/36QK2QLE.cjs');
16
16
  require('../__chunks/RTT4XR27.cjs');
17
17
  require('../__chunks/NKR65BKC.cjs');
18
18
  require('../__chunks/PZL34OVO.cjs');
@@ -29,7 +29,7 @@ require('../__chunks/5GTNIPQ6.cjs');
29
29
  require('../__chunks/V24PR4PW.cjs');
30
30
  require('../__chunks/7566TIRW.cjs');
31
31
  require('../__chunks/J3OG6T3B.cjs');
32
- require('../__chunks/S6WUBPBB.cjs');
32
+ require('../__chunks/65LGW5LY.cjs');
33
33
  require('../__chunks/XB3G2EO2.cjs');
34
34
  require('../__chunks/CVD2AZE2.cjs');
35
35
  require('../__chunks/2BIO7R5N.cjs');
@@ -64,7 +64,7 @@ function isController(target, ...ids) {
64
64
  if (!target)
65
65
  return false;
66
66
  if ("id" in target) {
67
- const selector = ids.filter(Boolean).map((id) => `[aria-controls="${id}"]`).join(", ");
67
+ const selector = ids.filter(Boolean).map((id) => `[aria-controls~="${id}"]`).join(", ");
68
68
  if (!selector)
69
69
  return false;
70
70
  return _dom.matches.call(void 0, target, selector);
@@ -75,11 +75,13 @@ var useComboboxPopover = _RNZNGEL4cjs.createHook.call(void 0,
75
75
  (_a) => {
76
76
  var _b = _a, {
77
77
  store,
78
+ modal,
78
79
  tabIndex,
79
80
  alwaysVisible,
80
81
  hideOnInteractOutside = true
81
82
  } = _b, props = _AV6KTKLEcjs.__objRest.call(void 0, _b, [
82
83
  "store",
84
+ "modal",
83
85
  "tabIndex",
84
86
  "alwaysVisible",
85
87
  "hideOnInteractOutside"
@@ -92,22 +94,49 @@ var useComboboxPopover = _RNZNGEL4cjs.createHook.call(void 0,
92
94
  );
93
95
  const baseElement = store.useState("baseElement");
94
96
  props = _LO3RECODcjs.useComboboxList.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store, alwaysVisible }, props));
95
- props = _WABPFCL3cjs.usePopover.call(void 0, _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {
97
+ props = _NVHGMKAEcjs.usePopover.call(void 0, _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {
96
98
  store,
99
+ modal,
97
100
  alwaysVisible,
101
+ backdrop: false,
98
102
  autoFocusOnShow: false,
99
103
  autoFocusOnHide: false,
100
104
  finalFocus: baseElement,
101
105
  preserveTabOrderAnchor: null
102
106
  }, props), {
103
- // Combobox popovers can't be modal because the focus may be (and is by
104
- // default) outside of it on the combobox input element.
105
- modal: false,
107
+ // When the combobox popover is modal, we make sure to include the
108
+ // combobox input and all the combobox controls (cancel, disclosure) in
109
+ // the list of persistent elements so they make part of the modal context,
110
+ // allowing users to tab through them.
111
+ getPersistentElements() {
112
+ var _a2;
113
+ const elements = ((_a2 = props.getPersistentElements) == null ? void 0 : _a2.call(props)) || [];
114
+ if (!modal)
115
+ return elements;
116
+ if (!store)
117
+ return elements;
118
+ const { contentElement, baseElement: baseElement2 } = store.getState();
119
+ if (!baseElement2)
120
+ return elements;
121
+ const doc = _dom.getDocument.call(void 0, baseElement2);
122
+ const selectors = [];
123
+ if (contentElement == null ? void 0 : contentElement.id) {
124
+ selectors.push(`[aria-controls~="${contentElement.id}"]`);
125
+ }
126
+ if (baseElement2 == null ? void 0 : baseElement2.id) {
127
+ selectors.push(`[aria-controls~="${baseElement2.id}"]`);
128
+ }
129
+ if (!selectors.length)
130
+ return [...elements, baseElement2];
131
+ const selector = selectors.join(",");
132
+ const controlElements = doc.querySelectorAll(selector);
133
+ return [...elements, ...controlElements];
134
+ },
106
135
  // Make sure we don't hide the popover when the user interacts with the
107
136
  // combobox cancel or the combobox disclosure buttons. They will have the
108
137
  // aria-controls attribute pointing to either the combobox input or the
109
138
  // combobox popover elements.
110
- hideOnInteractOutside: (event) => {
139
+ hideOnInteractOutside(event) {
111
140
  var _a2, _b2;
112
141
  const state = store == null ? void 0 : store.getState();
113
142
  const contentId = (_a2 = state == null ? void 0 : state.contentElement) == null ? void 0 : _a2.id;
@@ -121,7 +150,7 @@ var useComboboxPopover = _RNZNGEL4cjs.createHook.call(void 0,
121
150
  return props;
122
151
  }
123
152
  );
124
- var ComboboxPopover = _OT6DC3MLcjs.createDialogComponent.call(void 0,
153
+ var ComboboxPopover = _36QK2QLEcjs.createDialogComponent.call(void 0,
125
154
  _RNZNGEL4cjs.createComponent.call(void 0, (props) => {
126
155
  const htmlProps = useComboboxPopover(props);
127
156
  return _RNZNGEL4cjs.createElement.call(void 0, "div", htmlProps);
@@ -35,6 +35,6 @@ export declare const useComboboxPopover: import("../utils/types.js").Hook<Combob
35
35
  * ```
36
36
  */
37
37
  export declare const ComboboxPopover: import("../utils/types.js").Component<ComboboxPopoverOptions<"div">>;
38
- export interface ComboboxPopoverOptions<T extends As = "div"> extends ComboboxListOptions<T>, Omit<PopoverOptions<T>, "store" | "modal"> {
38
+ export interface ComboboxPopoverOptions<T extends As = "div"> extends ComboboxListOptions<T>, Omit<PopoverOptions<T>, "store"> {
39
39
  }
40
40
  export type ComboboxPopoverProps<T extends As = "div"> = Props<ComboboxPopoverOptions<T>>;
@@ -35,6 +35,6 @@ export declare const useComboboxPopover: import("../utils/types.js").Hook<Combob
35
35
  * ```
36
36
  */
37
37
  export declare const ComboboxPopover: import("../utils/types.js").Component<ComboboxPopoverOptions<"div">>;
38
- export interface ComboboxPopoverOptions<T extends As = "div"> extends ComboboxListOptions<T>, Omit<PopoverOptions<T>, "store" | "modal"> {
38
+ export interface ComboboxPopoverOptions<T extends As = "div"> extends ComboboxListOptions<T>, Omit<PopoverOptions<T>, "store"> {
39
39
  }
40
40
  export type ComboboxPopoverProps<T extends As = "div"> = Props<ComboboxPopoverOptions<T>>;
@@ -7,7 +7,7 @@ var _3QW6ELTGcjs = require('../__chunks/3QW6ELTG.cjs');
7
7
  var _3WCBE6SUcjs = require('../__chunks/3WCBE6SU.cjs');
8
8
 
9
9
 
10
- var _CZOBQEIOcjs = require('../__chunks/CZOBQEIO.cjs');
10
+ var _RM2WCNSUcjs = require('../__chunks/RM2WCNSU.cjs');
11
11
  require('../__chunks/RV3PHHWM.cjs');
12
12
  require('../__chunks/UZNYSPKP.cjs');
13
13
  require('../__chunks/BZTDJIVT.cjs');
@@ -82,6 +82,7 @@ var useCombobox = _RNZNGEL4cjs.createHook.call(void 0,
82
82
  store,
83
83
  focusable = true,
84
84
  autoSelect: autoSelectProp = false,
85
+ getAutoSelectId,
85
86
  showOnChange = true,
86
87
  setValueOnChange = true,
87
88
  showOnMouseDown = true,
@@ -93,6 +94,7 @@ var useCombobox = _RNZNGEL4cjs.createHook.call(void 0,
93
94
  "store",
94
95
  "focusable",
95
96
  "autoSelect",
97
+ "getAutoSelectId",
96
98
  "showOnChange",
97
99
  "setValueOnChange",
98
100
  "showOnMouseDown",
@@ -189,6 +191,8 @@ var useCombobox = _RNZNGEL4cjs.createHook.call(void 0,
189
191
  storeValue
190
192
  ]);
191
193
  const scrollingElementRef = _react.useRef.call(void 0, null);
194
+ const getAutoSelectIdProp = _EO6LS72Hcjs.useEvent.call(void 0, getAutoSelectId);
195
+ const autoSelectIdRef = _react.useRef.call(void 0, null);
192
196
  _react.useEffect.call(void 0, () => {
193
197
  if (!open)
194
198
  return;
@@ -204,10 +208,12 @@ var useCombobox = _RNZNGEL4cjs.createHook.call(void 0,
204
208
  const onScroll = () => {
205
209
  if (!store)
206
210
  return;
211
+ if (!canAutoSelectRef.current)
212
+ return;
207
213
  const { activeId } = store.getState();
208
214
  if (activeId === null)
209
215
  return;
210
- if (activeId === store.first())
216
+ if (activeId === autoSelectIdRef.current)
211
217
  return;
212
218
  canAutoSelectRef.current = false;
213
219
  };
@@ -233,7 +239,7 @@ var useCombobox = _RNZNGEL4cjs.createHook.call(void 0,
233
239
  }, [open]);
234
240
  const resetValueOnSelect = store.useState("resetValueOnSelect");
235
241
  _EO6LS72Hcjs.useUpdateEffect.call(void 0, () => {
236
- var _a2, _b2;
242
+ var _a2;
237
243
  if (!store)
238
244
  return;
239
245
  if (!autoSelect && !resetValueOnSelect)
@@ -249,9 +255,12 @@ var useCombobox = _RNZNGEL4cjs.createHook.call(void 0,
249
255
  return () => observer.disconnect();
250
256
  }
251
257
  if (autoSelect) {
252
- store.move((_a2 = store.first()) != null ? _a2 : null);
258
+ const userAutoSelectId = getAutoSelectIdProp(items);
259
+ const autoSelectId = userAutoSelectId !== void 0 ? userAutoSelectId : store.first();
260
+ autoSelectIdRef.current = autoSelectId;
261
+ store.move(autoSelectId != null ? autoSelectId : null);
253
262
  } else {
254
- const element = (_b2 = store.item(activeId)) == null ? void 0 : _b2.element;
263
+ const element = (_a2 = store.item(activeId)) == null ? void 0 : _a2.element;
255
264
  if (element && "scrollIntoView" in element) {
256
265
  element.scrollIntoView({ block: "nearest", inline: "nearest" });
257
266
  }
@@ -263,6 +272,7 @@ var useCombobox = _RNZNGEL4cjs.createHook.call(void 0,
263
272
  storeValue,
264
273
  autoSelect,
265
274
  resetValueOnSelect,
275
+ getAutoSelectIdProp,
266
276
  items
267
277
  ]);
268
278
  _react.useEffect.call(void 0, () => {
@@ -395,6 +405,7 @@ var useCombobox = _RNZNGEL4cjs.createHook.call(void 0,
395
405
  });
396
406
  const id = _EO6LS72Hcjs.useId.call(void 0, props.id);
397
407
  const ariaAutoComplete = isAriaAutoCompleteValue(autoComplete) ? autoComplete : void 0;
408
+ const isActiveItem = store.useState((state) => state.activeId === null);
398
409
  props = _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {
399
410
  id,
400
411
  role: "combobox",
@@ -402,6 +413,7 @@ var useCombobox = _RNZNGEL4cjs.createHook.call(void 0,
402
413
  "aria-haspopup": _dom.getPopupRole.call(void 0, contentElement, "listbox"),
403
414
  "aria-expanded": open,
404
415
  "aria-controls": contentElement == null ? void 0 : contentElement.id,
416
+ "data-active-item": isActiveItem || void 0,
405
417
  value
406
418
  }, props), {
407
419
  ref: _EO6LS72Hcjs.useMergeRefs.call(void 0, ref, props.ref),
@@ -411,7 +423,7 @@ var useCombobox = _RNZNGEL4cjs.createHook.call(void 0,
411
423
  onKeyDown,
412
424
  onBlur
413
425
  });
414
- props = _CZOBQEIOcjs.useComposite.call(void 0, _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {
426
+ props = _RM2WCNSUcjs.useComposite.call(void 0, _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {
415
427
  store,
416
428
  focusable
417
429
  }, props), {
@@ -3,7 +3,7 @@ import type { BooleanOrCallback, StringWithValue } from "@ariakit/core/utils/typ
3
3
  import type { CompositeOptions } from "../composite/composite.js";
4
4
  import type { PopoverAnchorOptions } from "../popover/popover-anchor.js";
5
5
  import type { As, Props } from "../utils/types.js";
6
- import type { ComboboxStore } from "./combobox-store.js";
6
+ import type { ComboboxStore, ComboboxStoreState } from "./combobox-store.js";
7
7
  /**
8
8
  * Returns props to create a `Combobox` component.
9
9
  * @see https://ariakit.org/components/combobox
@@ -70,6 +70,31 @@ export interface ComboboxOptions<T extends As = "input"> extends CompositeOption
70
70
  * @default false
71
71
  */
72
72
  autoSelect?: boolean;
73
+ /**
74
+ * Function that takes the currently rendered items and returns the id of the
75
+ * item to be auto selected when the
76
+ * [`autoSelect`](https://ariakit.org/reference/combobox#autoselect) prop is
77
+ * `true`.
78
+ *
79
+ * By default, the first enabled item is auto selected. This function is handy
80
+ * if you prefer a different item to be auto selected.
81
+ * @example
82
+ * ```jsx
83
+ * <Combobox
84
+ * autoSelect
85
+ * getAutoSelectId={(items) => {
86
+ * // Auto select the first enabled item with a value
87
+ * const item = items.find((item) => {
88
+ * if (item.disabled) return false;
89
+ * if (!item.value) return false;
90
+ * return true;
91
+ * });
92
+ * return item?.id;
93
+ * }}
94
+ * />
95
+ * ```
96
+ */
97
+ getAutoSelectId?: (renderedItems: ComboboxStoreState["renderedItems"]) => string | null | undefined;
73
98
  /**
74
99
  * Whether the items will be filtered based on
75
100
  * [`value`](https://ariakit.org/reference/combobox-provider#value) and
@@ -3,7 +3,7 @@ import type { BooleanOrCallback, StringWithValue } from "@ariakit/core/utils/typ
3
3
  import type { CompositeOptions } from "../composite/composite.js";
4
4
  import type { PopoverAnchorOptions } from "../popover/popover-anchor.js";
5
5
  import type { As, Props } from "../utils/types.js";
6
- import type { ComboboxStore } from "./combobox-store.js";
6
+ import type { ComboboxStore, ComboboxStoreState } from "./combobox-store.js";
7
7
  /**
8
8
  * Returns props to create a `Combobox` component.
9
9
  * @see https://ariakit.org/components/combobox
@@ -70,6 +70,31 @@ export interface ComboboxOptions<T extends As = "input"> extends CompositeOption
70
70
  * @default false
71
71
  */
72
72
  autoSelect?: boolean;
73
+ /**
74
+ * Function that takes the currently rendered items and returns the id of the
75
+ * item to be auto selected when the
76
+ * [`autoSelect`](https://ariakit.org/reference/combobox#autoselect) prop is
77
+ * `true`.
78
+ *
79
+ * By default, the first enabled item is auto selected. This function is handy
80
+ * if you prefer a different item to be auto selected.
81
+ * @example
82
+ * ```jsx
83
+ * <Combobox
84
+ * autoSelect
85
+ * getAutoSelectId={(items) => {
86
+ * // Auto select the first enabled item with a value
87
+ * const item = items.find((item) => {
88
+ * if (item.disabled) return false;
89
+ * if (!item.value) return false;
90
+ * return true;
91
+ * });
92
+ * return item?.id;
93
+ * }}
94
+ * />
95
+ * ```
96
+ */
97
+ getAutoSelectId?: (renderedItems: ComboboxStoreState["renderedItems"]) => string | null | undefined;
73
98
  /**
74
99
  * Whether the items will be filtered based on
75
100
  * [`value`](https://ariakit.org/reference/combobox-provider#value) and
@@ -43,7 +43,12 @@ export interface CompositeHoverOptions<T extends As = "div"> extends Options<T>
43
43
  */
44
44
  store?: CompositeStore;
45
45
  /**
46
- * Determines if the composite item should be focused on hover.
46
+ * Determines if the composite item should be _focused_ when hovered over.
47
+ *
48
+ * Note that the actual DOM focus will stay on the composite element. This
49
+ * item will get the
50
+ * [`data-active-item`](https://ariakit.org/guide/styling#data-active-item)
51
+ * attribute so it can be styled as if it's focused.
47
52
  *
48
53
  * Live examples:
49
54
  * - [Multi-selectable
@@ -53,6 +58,8 @@ export interface CompositeHoverOptions<T extends As = "div"> extends Options<T>
53
58
  * - [Textarea with inline
54
59
  * Combobox](https://ariakit.org/examples/combobox-textarea)
55
60
  * - [Navigation Menubar](https://ariakit.org/examples/menubar-navigation)
61
+ * - [Submenu with
62
+ * Combobox](https://ariakit.org/examples/menu-nested-combobox)
56
63
  * @default true
57
64
  */
58
65
  focusOnHover?: BooleanOrCallback<ReactMouseEvent<HTMLElement>>;
@@ -66,6 +73,8 @@ export interface CompositeHoverOptions<T extends As = "div"> extends Options<T>
66
73
  * - [Navigation Menubar](https://ariakit.org/examples/menubar-navigation)
67
74
  * - [Combobox with integrated
68
75
  * filter](https://ariakit.org/examples/combobox-filtering-integrated)
76
+ * - [Submenu with
77
+ * Combobox](https://ariakit.org/examples/menu-nested-combobox)
69
78
  */
70
79
  blurOnHoverEnd?: BooleanOrCallback<ReactMouseEvent<HTMLElement>>;
71
80
  }
@@ -43,7 +43,12 @@ export interface CompositeHoverOptions<T extends As = "div"> extends Options<T>
43
43
  */
44
44
  store?: CompositeStore;
45
45
  /**
46
- * Determines if the composite item should be focused on hover.
46
+ * Determines if the composite item should be _focused_ when hovered over.
47
+ *
48
+ * Note that the actual DOM focus will stay on the composite element. This
49
+ * item will get the
50
+ * [`data-active-item`](https://ariakit.org/guide/styling#data-active-item)
51
+ * attribute so it can be styled as if it's focused.
47
52
  *
48
53
  * Live examples:
49
54
  * - [Multi-selectable
@@ -53,6 +58,8 @@ export interface CompositeHoverOptions<T extends As = "div"> extends Options<T>
53
58
  * - [Textarea with inline
54
59
  * Combobox](https://ariakit.org/examples/combobox-textarea)
55
60
  * - [Navigation Menubar](https://ariakit.org/examples/menubar-navigation)
61
+ * - [Submenu with
62
+ * Combobox](https://ariakit.org/examples/menu-nested-combobox)
56
63
  * @default true
57
64
  */
58
65
  focusOnHover?: BooleanOrCallback<ReactMouseEvent<HTMLElement>>;
@@ -66,6 +73,8 @@ export interface CompositeHoverOptions<T extends As = "div"> extends Options<T>
66
73
  * - [Navigation Menubar](https://ariakit.org/examples/menubar-navigation)
67
74
  * - [Combobox with integrated
68
75
  * filter](https://ariakit.org/examples/combobox-filtering-integrated)
76
+ * - [Submenu with
77
+ * Combobox](https://ariakit.org/examples/menu-nested-combobox)
69
78
  */
70
79
  blurOnHoverEnd?: BooleanOrCallback<ReactMouseEvent<HTMLElement>>;
71
80
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- var _PFQ3IPWTcjs = require('../__chunks/PFQ3IPWT.cjs');
5
+ var _3RUODFRUcjs = require('../__chunks/3RUODFRU.cjs');
6
6
  require('../__chunks/DAJUUBUI.cjs');
7
7
  require('../__chunks/R5A2WTWB.cjs');
8
8
  require('../__chunks/RV3PHHWM.cjs');
@@ -18,4 +18,4 @@ require('../__chunks/AV6KTKLE.cjs');
18
18
 
19
19
 
20
20
 
21
- exports.CompositeItem = _PFQ3IPWTcjs.CompositeItem; exports.useCompositeItem = _PFQ3IPWTcjs.useCompositeItem;
21
+ exports.CompositeItem = _3RUODFRUcjs.CompositeItem; exports.useCompositeItem = _3RUODFRUcjs.useCompositeItem;
@@ -8,7 +8,7 @@ require('../__chunks/3QW6ELTG.cjs');
8
8
  require('../__chunks/5UTRYT6E.cjs');
9
9
 
10
10
 
11
- var _PFQ3IPWTcjs = require('../__chunks/PFQ3IPWT.cjs');
11
+ var _3RUODFRUcjs = require('../__chunks/3RUODFRU.cjs');
12
12
  require('../__chunks/DAJUUBUI.cjs');
13
13
  require('../__chunks/R5A2WTWB.cjs');
14
14
  require('../__chunks/RV3PHHWM.cjs');
@@ -69,7 +69,7 @@ var useCompositeOverflowDisclosure = _RNZNGEL4cjs.createHook.call(void 0, (_a) =
69
69
  onFocus,
70
70
  onBlur
71
71
  });
72
- props = _PFQ3IPWTcjs.useCompositeItem.call(void 0, _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {}, props), { shouldRegisterItem }));
72
+ props = _3RUODFRUcjs.useCompositeItem.call(void 0, _AV6KTKLEcjs.__spreadProps.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {}, props), { shouldRegisterItem }));
73
73
  props = _LICANQTIcjs.usePopoverDisclosure.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store }, props));
74
74
  return props;
75
75
  });
@@ -1,8 +1,8 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
2
 
3
3
 
4
- var _WABPFCL3cjs = require('../__chunks/WABPFCL3.cjs');
5
- require('../__chunks/OT6DC3ML.cjs');
4
+ var _NVHGMKAEcjs = require('../__chunks/NVHGMKAE.cjs');
5
+ require('../__chunks/36QK2QLE.cjs');
6
6
  require('../__chunks/RTT4XR27.cjs');
7
7
  require('../__chunks/NKR65BKC.cjs');
8
8
  require('../__chunks/PZL34OVO.cjs');
@@ -19,7 +19,7 @@ require('../__chunks/5GTNIPQ6.cjs');
19
19
  require('../__chunks/V24PR4PW.cjs');
20
20
  require('../__chunks/7566TIRW.cjs');
21
21
  require('../__chunks/J3OG6T3B.cjs');
22
- require('../__chunks/S6WUBPBB.cjs');
22
+ require('../__chunks/65LGW5LY.cjs');
23
23
  require('../__chunks/XB3G2EO2.cjs');
24
24
  require('../__chunks/CVD2AZE2.cjs');
25
25
  require('../__chunks/2BIO7R5N.cjs');
@@ -91,7 +91,7 @@ var useCompositeOverflow = _RNZNGEL4cjs.createHook.call(void 0,
91
91
  }, props), {
92
92
  onFocus
93
93
  });
94
- props = _WABPFCL3cjs.usePopover.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {
94
+ props = _NVHGMKAEcjs.usePopover.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {
95
95
  store,
96
96
  backdropProps,
97
97
  wrapperProps,
@@ -30,7 +30,6 @@ export declare function useCompositeRenderer<T extends Item = any>({ store, orie
30
30
  id?: string | undefined;
31
31
  lang?: string | undefined;
32
32
  nonce?: string | undefined;
33
- placeholder?: string | undefined;
34
33
  slot?: string | undefined;
35
34
  spellCheck?: (boolean | "false" | "true") | undefined;
36
35
  style?: import("react").CSSProperties | undefined;
@@ -30,7 +30,6 @@ export declare function useCompositeRenderer<T extends Item = any>({ store, orie
30
30
  id?: string | undefined;
31
31
  lang?: string | undefined;
32
32
  nonce?: string | undefined;
33
- placeholder?: string | undefined;
34
33
  slot?: string | undefined;
35
34
  spellCheck?: (boolean | "false" | "true") | undefined;
36
35
  style?: import("react").CSSProperties | undefined;
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- var _CZOBQEIOcjs = require('../__chunks/CZOBQEIO.cjs');
5
+ var _RM2WCNSUcjs = require('../__chunks/RM2WCNSU.cjs');
6
6
  require('../__chunks/RV3PHHWM.cjs');
7
7
  require('../__chunks/UZNYSPKP.cjs');
8
8
  require('../__chunks/BZTDJIVT.cjs');
@@ -15,4 +15,4 @@ require('../__chunks/AV6KTKLE.cjs');
15
15
 
16
16
 
17
17
 
18
- exports.Composite = _CZOBQEIOcjs.Composite; exports.useComposite = _CZOBQEIOcjs.useComposite;
18
+ exports.Composite = _RM2WCNSUcjs.Composite; exports.useComposite = _RM2WCNSUcjs.useComposite;
@@ -3,7 +3,7 @@
3
3
 
4
4
 
5
5
 
6
- var _OT6DC3MLcjs = require('../__chunks/OT6DC3ML.cjs');
6
+ var _36QK2QLEcjs = require('../__chunks/36QK2QLE.cjs');
7
7
  require('../__chunks/RTT4XR27.cjs');
8
8
  require('../__chunks/NKR65BKC.cjs');
9
9
  require('../__chunks/PZL34OVO.cjs');
@@ -20,7 +20,7 @@ require('../__chunks/5GTNIPQ6.cjs');
20
20
  require('../__chunks/V24PR4PW.cjs');
21
21
  require('../__chunks/7566TIRW.cjs');
22
22
  require('../__chunks/J3OG6T3B.cjs');
23
- require('../__chunks/S6WUBPBB.cjs');
23
+ require('../__chunks/65LGW5LY.cjs');
24
24
  require('../__chunks/XB3G2EO2.cjs');
25
25
  require('../__chunks/CVD2AZE2.cjs');
26
26
  require('../__chunks/2BIO7R5N.cjs');
@@ -42,4 +42,4 @@ require('../__chunks/AV6KTKLE.cjs');
42
42
 
43
43
 
44
44
 
45
- exports.Dialog = _OT6DC3MLcjs.Dialog; exports.createDialogComponent = _OT6DC3MLcjs.createDialogComponent; exports.useDialog = _OT6DC3MLcjs.useDialog;
45
+ exports.Dialog = _36QK2QLEcjs.Dialog; exports.createDialogComponent = _36QK2QLEcjs.createDialogComponent; exports.useDialog = _36QK2QLEcjs.useDialog;
@@ -7,9 +7,9 @@ var _VCDQISP7cjs = require('../__chunks/VCDQISP7.cjs');
7
7
  var _FROYTN4Bcjs = require('../__chunks/FROYTN4B.cjs');
8
8
 
9
9
 
10
- var _HHZJ6KYWcjs = require('../__chunks/HHZJ6KYW.cjs');
10
+ var _IAYTETYNcjs = require('../__chunks/IAYTETYN.cjs');
11
11
  require('../__chunks/HEEQY4DZ.cjs');
12
- require('../__chunks/PFQ3IPWT.cjs');
12
+ require('../__chunks/3RUODFRU.cjs');
13
13
  require('../__chunks/DAJUUBUI.cjs');
14
14
  require('../__chunks/R5A2WTWB.cjs');
15
15
  require('../__chunks/RV3PHHWM.cjs');
@@ -60,7 +60,7 @@ var useFormRadio = _RNZNGEL4cjs.createHook.call(void 0,
60
60
  checked,
61
61
  onChange
62
62
  });
63
- props = _HHZJ6KYWcjs.useRadio.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { value }, props));
63
+ props = _IAYTETYNcjs.useRadio.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { value }, props));
64
64
  props = _VCDQISP7cjs.useFormField.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, {
65
65
  store,
66
66
  name,
@@ -2,10 +2,10 @@
2
2
 
3
3
 
4
4
 
5
- var _WK7AZPHScjs = require('../__chunks/WK7AZPHS.cjs');
5
+ var _2GETDAIQcjs = require('../__chunks/2GETDAIQ.cjs');
6
6
  require('../__chunks/KXQOQQ5B.cjs');
7
- require('../__chunks/WABPFCL3.cjs');
8
- require('../__chunks/OT6DC3ML.cjs');
7
+ require('../__chunks/NVHGMKAE.cjs');
8
+ require('../__chunks/36QK2QLE.cjs');
9
9
  require('../__chunks/RTT4XR27.cjs');
10
10
  require('../__chunks/NKR65BKC.cjs');
11
11
  require('../__chunks/PZL34OVO.cjs');
@@ -22,7 +22,7 @@ require('../__chunks/5GTNIPQ6.cjs');
22
22
  require('../__chunks/V24PR4PW.cjs');
23
23
  require('../__chunks/7566TIRW.cjs');
24
24
  require('../__chunks/J3OG6T3B.cjs');
25
- require('../__chunks/S6WUBPBB.cjs');
25
+ require('../__chunks/65LGW5LY.cjs');
26
26
  require('../__chunks/XB3G2EO2.cjs');
27
27
  require('../__chunks/CVD2AZE2.cjs');
28
28
  require('../__chunks/2BIO7R5N.cjs');
@@ -45,4 +45,4 @@ require('../__chunks/AV6KTKLE.cjs');
45
45
 
46
46
 
47
47
 
48
- exports.Hovercard = _WK7AZPHScjs.Hovercard; exports.useHovercard = _WK7AZPHScjs.useHovercard;
48
+ exports.Hovercard = _2GETDAIQcjs.Hovercard; exports.useHovercard = _2GETDAIQcjs.useHovercard;
@@ -1,10 +1,10 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
2
 
3
3
 
4
- var _3KZQJDTVcjs = require('../__chunks/3KZQJDTV.cjs');
4
+ var _APFV5PTXcjs = require('../__chunks/APFV5PTX.cjs');
5
5
  require('../__chunks/7LBZXSLY.cjs');
6
6
  require('../__chunks/7KFYPSJO.cjs');
7
- require('../__chunks/CZOBQEIO.cjs');
7
+ require('../__chunks/RM2WCNSU.cjs');
8
8
  require('../__chunks/RV3PHHWM.cjs');
9
9
  require('../__chunks/N6CR2VNN.cjs');
10
10
  require('../__chunks/DKOWT2IJ.cjs');
@@ -24,7 +24,7 @@ require('../__chunks/AV6KTKLE.cjs');
24
24
 
25
25
  // src/menu/menu-bar.tsx
26
26
  var useMenuBar = _RNZNGEL4cjs.createHook.call(void 0, (props) => {
27
- return _3KZQJDTVcjs.useMenubar.call(void 0, props);
27
+ return _APFV5PTXcjs.useMenubar.call(void 0, props);
28
28
  });
29
29
  var MenuBar = _RNZNGEL4cjs.createComponent.call(void 0, (props) => {
30
30
  const htmlProps = useMenuBar(props);
@@ -40,5 +40,19 @@ export interface MenuItemCheckOptions<T extends As = "span"> extends Omit<Checkb
40
40
  * [`useMenuStore`](https://ariakit.org/reference/use-menu-store) hook.
41
41
  */
42
42
  store?: MenuStore;
43
+ /**
44
+ * Determines if the check mark should be displayed. This value is automatically
45
+ * derived from the parent
46
+ * [`MenuItemRadio`](https://ariakit.org/reference/menu-item-radio) or
47
+ * [`MenuItemCheckbox`](https://ariakit.org/reference/menu-item-checkbox)
48
+ * component.
49
+ *
50
+ * Manually setting this prop will supersede the derived value.
51
+ *
52
+ * Live examples:
53
+ * - [Submenu with
54
+ * Combobox](https://ariakit.org/examples/menu-nested-combobox)
55
+ */
56
+ checked?: CheckboxCheckOptions<T>["checked"];
43
57
  }
44
58
  export type MenuItemCheckProps<T extends As = "span"> = Props<MenuItemCheckOptions<T>>;
@@ -40,5 +40,19 @@ export interface MenuItemCheckOptions<T extends As = "span"> extends Omit<Checkb
40
40
  * [`useMenuStore`](https://ariakit.org/reference/use-menu-store) hook.
41
41
  */
42
42
  store?: MenuStore;
43
+ /**
44
+ * Determines if the check mark should be displayed. This value is automatically
45
+ * derived from the parent
46
+ * [`MenuItemRadio`](https://ariakit.org/reference/menu-item-radio) or
47
+ * [`MenuItemCheckbox`](https://ariakit.org/reference/menu-item-checkbox)
48
+ * component.
49
+ *
50
+ * Manually setting this prop will supersede the derived value.
51
+ *
52
+ * Live examples:
53
+ * - [Submenu with
54
+ * Combobox](https://ariakit.org/examples/menu-nested-combobox)
55
+ */
56
+ checked?: CheckboxCheckOptions<T>["checked"];
43
57
  }
44
58
  export type MenuItemCheckProps<T extends As = "span"> = Props<MenuItemCheckOptions<T>>;
@@ -8,14 +8,14 @@ require('../__chunks/63UPRTFZ.cjs');
8
8
  var _VSDH37LIcjs = require('../__chunks/VSDH37LI.cjs');
9
9
 
10
10
 
11
- var _VIETWH5Ccjs = require('../__chunks/VIETWH5C.cjs');
11
+ var _BKU5STIEcjs = require('../__chunks/BKU5STIE.cjs');
12
12
 
13
13
 
14
14
  var _NGEKJJDHcjs = require('../__chunks/NGEKJJDH.cjs');
15
15
  require('../__chunks/7LBZXSLY.cjs');
16
16
  require('../__chunks/IPYAEPOT.cjs');
17
17
  require('../__chunks/ERFHNHON.cjs');
18
- require('../__chunks/PFQ3IPWT.cjs');
18
+ require('../__chunks/3RUODFRU.cjs');
19
19
  require('../__chunks/DAJUUBUI.cjs');
20
20
  require('../__chunks/R5A2WTWB.cjs');
21
21
  require('../__chunks/RV3PHHWM.cjs');
@@ -136,7 +136,7 @@ var useMenuItemCheckbox = _RNZNGEL4cjs.createHook.call(void 0,
136
136
  value,
137
137
  checked
138
138
  }, props));
139
- props = _VIETWH5Ccjs.useMenuItem.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store, hideOnClick }, props));
139
+ props = _BKU5STIEcjs.useMenuItem.call(void 0, _AV6KTKLEcjs.__spreadValues.call(void 0, { store, hideOnClick }, props));
140
140
  return props;
141
141
  }
142
142
  );