Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/react/src/combobox/arrow/ComboboxArrow.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use client';
import * as React from 'react';
import { useStore } from '@base-ui/utils/store';
import { useStore } from '@base-ui/utils/store/core';
import { useComboboxPositionerContext } from '../positioner/ComboboxPositionerContext';
import { useComboboxRootContext } from '../root/ComboboxRootContext';
import { selectors } from '../store';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use client';
import * as React from 'react';
import { useStore } from '@base-ui/utils/store';
import { useStore } from '@base-ui/utils/store/core';
import type { BaseUIComponentProps } from '../../internals/types';
import { useComboboxRootContext } from '../root/ComboboxRootContext';
import { popupStateMapping } from '../../utils/popupStateMapping';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
'use client';
import * as React from 'react';
import { useStore } from '@base-ui/utils/store';
import { useStore } from '@base-ui/utils/store/core';
import { useRenderElement } from '../../internals/useRenderElement';
import { BaseUIComponentProps, NativeButtonProps } from '../../internals/types';
import { useComboboxRootContext } from '../root/ComboboxRootContext';
import { useComboboxChipContext } from '../chip/ComboboxChipContext';
import { useButton } from '../../internals/use-button';
import { stopEvent } from '../../floating-ui-react/utils';
import { stopEvent } from '../../floating-ui-react/utils/event';
import { selectors } from '../store';
import { createChangeEventDetails } from '../../internals/createBaseUIEventDetails';
import { REASONS } from '../../internals/reasons';
Expand Down
4 changes: 2 additions & 2 deletions packages/react/src/combobox/chip/ComboboxChip.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
'use client';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { useStore } from '@base-ui/utils/store';
import { useStore } from '@base-ui/utils/store/core';
import { useRenderElement } from '../../internals/useRenderElement';
import { BaseUIComponentProps } from '../../internals/types';
import { useComboboxChipsContext } from '../chips/ComboboxChipsContext';
import { useComboboxRootContext } from '../root/ComboboxRootContext';
import { useCompositeListItem } from '../../internals/composite/list/useCompositeListItem';
import { ComboboxChipContext } from './ComboboxChipContext';
import { stopEvent } from '../../floating-ui-react/utils';
import { stopEvent } from '../../floating-ui-react/utils/event';
import { selectors } from '../store';
import { createChangeEventDetails } from '../../internals/createBaseUIEventDetails';
import { REASONS } from '../../internals/reasons';
Expand Down
2 changes: 1 addition & 1 deletion packages/react/src/combobox/chips/ComboboxChips.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use client';
import * as React from 'react';
import { useStore } from '@base-ui/utils/store';
import { useStore } from '@base-ui/utils/store/core';
import { EMPTY_OBJECT } from '@base-ui/utils/empty';
import { useRenderElement } from '../../internals/useRenderElement';
import type { BaseUIComponentProps } from '../../internals/types';
Expand Down
2 changes: 1 addition & 1 deletion packages/react/src/combobox/clear/ComboboxClear.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use client';
import * as React from 'react';
import { useStore } from '@base-ui/utils/store';
import { useStore } from '@base-ui/utils/store/core';
import { useComboboxInputValueContext, useComboboxRootContext } from '../root/ComboboxRootContext';
import type { BaseUIComponentProps, NativeButtonProps } from '../../internals/types';
import { useRenderElement } from '../../internals/useRenderElement';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use client';
import * as React from 'react';
import { useStableCallback } from '@base-ui/utils/useStableCallback';
import { useStore } from '@base-ui/utils/store';
import { useStore } from '@base-ui/utils/store/core';
import { useRenderElement } from '../../internals/useRenderElement';
import type { BaseUIComponentProps } from '../../internals/types';
import { useFieldRootContext } from '../../internals/field-root-context/FieldRootContext';
Expand Down
4 changes: 2 additions & 2 deletions packages/react/src/combobox/input/ComboboxInput.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use client';
import * as React from 'react';
import { useStore } from '@base-ui/utils/store';
import { useStore } from '@base-ui/utils/store/core';
import { useStableCallback } from '@base-ui/utils/useStableCallback';
import { isAndroid, isFirefox } from '@base-ui/utils/detectBrowser';
import { BaseUIComponentProps } from '../../internals/types';
Expand All @@ -22,7 +22,7 @@ import {
import { DEFAULT_FIELD_STATE_ATTRIBUTES } from '../../internals/field-constants/constants';
import { useLabelableContext } from '../../internals/labelable-provider/LabelableContext';
import { useComboboxChipsContext } from '../chips/ComboboxChipsContext';
import { stopEvent } from '../../floating-ui-react/utils';
import { stopEvent } from '../../floating-ui-react/utils/event';
import { useComboboxPositionerContext } from '../positioner/ComboboxPositionerContext';
import { createChangeEventDetails } from '../../internals/createBaseUIEventDetails';
import { REASONS } from '../../internals/reasons';
Expand Down
2 changes: 1 addition & 1 deletion packages/react/src/combobox/item/ComboboxItem.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use client';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { useStore } from '@base-ui/utils/store';
import { useStore } from '@base-ui/utils/store/core';
import { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';
import {
useComboboxRootContext,
Expand Down
2 changes: 1 addition & 1 deletion packages/react/src/combobox/label/ComboboxLabel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import * as React from 'react';
import { error } from '@base-ui/utils/error';
import { SafeReact } from '@base-ui/utils/safeReact';
import { useStore } from '@base-ui/utils/store';
import { useStore } from '@base-ui/utils/store/core';
import type { BaseUIComponentProps } from '../../internals/types';
import { useRenderElement } from '../../internals/useRenderElement';
import type { FieldRoot } from '../../field/root/FieldRoot';
Expand Down
4 changes: 2 additions & 2 deletions packages/react/src/combobox/list/ComboboxList.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use client';
import * as React from 'react';
import { useStore } from '@base-ui/utils/store';
import { useStore } from '@base-ui/utils/store/core';
import { useStableCallback } from '@base-ui/utils/useStableCallback';
import type { BaseUIComponentProps } from '../../internals/types';
import { useRenderElement } from '../../internals/useRenderElement';
Expand All @@ -13,7 +13,7 @@ import { useComboboxPositionerContext } from '../positioner/ComboboxPositionerCo
import { selectors } from '../store';
import { ComboboxCollection } from '../collection/ComboboxCollection';
import { CompositeList } from '../../internals/composite/list/CompositeList';
import { stopEvent } from '../../floating-ui-react/utils';
import { stopEvent } from '../../floating-ui-react/utils/event';

/**
* A list container for the items.
Expand Down
6 changes: 3 additions & 3 deletions packages/react/src/combobox/popup/ComboboxPopup.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
'use client';
import * as React from 'react';
import { InteractionType } from '@base-ui/utils/useEnhancedClickHandler';
import { useStore } from '@base-ui/utils/store';
import { FloatingFocusManager } from '../../floating-ui-react';
import { useStore } from '@base-ui/utils/store/core';
import { FloatingFocusManager } from '../../floating-ui-react/components/FloatingFocusManager';
import { BaseUIComponentProps } from '../../internals/types';
import { useRenderElement } from '../../internals/useRenderElement';
import {
Expand All @@ -18,7 +18,7 @@ import { useOpenChangeComplete } from '../../internals/useOpenChangeComplete';
import type { TransitionStatus } from '../../internals/useTransitionStatus';
import { transitionStatusMapping } from '../../internals/stateAttributesMapping';
import { StateAttributesMapping } from '../../internals/getStateAttributesProps';
import { contains, getTarget } from '../../floating-ui-react/utils';
import { contains, getTarget } from '../../internals/shadowDom';
import { getDisabledMountTransitionStyles } from '../../utils/getDisabledMountTransitionStyles';
import { ComboboxInternalDismissButton } from '../utils/ComboboxInternalDismissButton';

Expand Down
4 changes: 2 additions & 2 deletions packages/react/src/combobox/portal/ComboboxPortal.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use client';
import * as React from 'react';
import { useStore } from '@base-ui/utils/store';
import { FloatingPortal } from '../../floating-ui-react';
import { useStore } from '@base-ui/utils/store/core';
import { FloatingPortal } from '../../floating-ui-react/components/FloatingPortal';
import { useComboboxRootContext } from '../root/ComboboxRootContext';
import { ComboboxPortalContext } from './ComboboxPortalContext';
import { selectors } from '../store';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use client';
import * as React from 'react';
import { useStore } from '@base-ui/utils/store';
import { useStore } from '@base-ui/utils/store/core';
import { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';
import { useStableCallback } from '@base-ui/utils/useStableCallback';
import { inertValue } from '@base-ui/utils/inertValue';
Expand Down
44 changes: 17 additions & 27 deletions packages/react/src/combobox/root/AriaCombobox.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,13 @@ import { useMergedRefs } from '@base-ui/utils/useMergedRefs';
import { useValueAsRef } from '@base-ui/utils/useValueAsRef';
import { visuallyHidden, visuallyHiddenInput } from '@base-ui/utils/visuallyHidden';
import { useRefWithInit } from '@base-ui/utils/useRefWithInit';
import { Store, useStore } from '@base-ui/utils/store';
import { Store, useStore } from '@base-ui/utils/store/core';
import { EMPTY_ARRAY, EMPTY_OBJECT } from '@base-ui/utils/empty';
import {
ElementProps,
useDismiss,
useFloatingRootContext,
useListNavigation,
useClick,
} from '../../floating-ui-react';
import { contains, getTarget } from '../../floating-ui-react/utils';
import type { ElementProps } from '../../floating-ui-react/types';
import { useDismissCore as useDismiss } from '../../floating-ui-react/hooks/useDismissCore';
import { useFloatingRootContext } from '../../floating-ui-react/hooks/useFloatingRootContext';
import { useListNavigation } from '../../floating-ui-react/hooks/useListNavigation';
import { contains, getTarget } from '../../internals/shadowDom';
import {
createChangeEventDetails,
createGenericEventDetails,
Expand All @@ -41,10 +38,11 @@ import { createCollatorItemFilter, createSingleSelectionCollatorFilter } from '.
import { useCoreFilter } from './utils/useFilter';
import { useTransitionStatus } from '../../internals/useTransitionStatus';
import { useOpenInteractionType } from '../../utils/useOpenInteractionType';
import { HTMLProps } from '../../internals/types';
import { useInputPress } from '../../utils/popups/useTriggerPress';
import type { HTMLProps } from '../../internals/types';
import { useValueChanged } from '../../internals/useValueChanged';
import { NOOP } from '../../internals/noop';
import { FOCUSABLE_POPUP_PROPS } from '../../utils/popups';
import { FOCUSABLE_POPUP_PROPS } from '../../utils/popups/popupStoreUtils';
import { mergeProps } from '../../merge-props';
import {
stringifyAsLabel,
Expand Down Expand Up @@ -266,11 +264,10 @@ export function AriaCombobox<Value = any, Mode extends SelectionMode = 'none'>(
}

if (isGrouped) {
const groupedItems = items;
const resultingGroups: Group<Value>[] = [];
let currentCount = 0;

for (const group of groupedItems) {
for (const group of items) {
if (limit > -1 && currentCount >= limit) {
break;
}
Expand All @@ -284,14 +281,10 @@ export function AriaCombobox<Value = any, Mode extends SelectionMode = 'none'>(
continue;
}

const remainingLimit = limit > -1 ? limit - currentCount : Infinity;
const itemsToTake = candidateItems.slice(0, remainingLimit);

if (itemsToTake.length > 0) {
const newGroup = { ...group, items: itemsToTake };
resultingGroups.push(newGroup);
currentCount += itemsToTake.length;
}
const itemsToTake =
limit > -1 ? candidateItems.slice(0, limit - currentCount) : candidateItems;
resultingGroups.push({ ...group, items: itemsToTake });
currentCount += itemsToTake.length;
}

return resultingGroups;
Expand Down Expand Up @@ -385,9 +378,9 @@ export function AriaCombobox<Value = any, Mode extends SelectionMode = 'none'>(
inline: inlineProp,
activeIndex: null,
selectedIndex: null,
popupProps: {},
popupProps: EMPTY_OBJECT,
inputProps: {},
triggerProps: {},
triggerProps: EMPTY_OBJECT,
itemProps: EMPTY_OBJECT,
positionerElement: null,
listElement: null,
Expand Down Expand Up @@ -1021,14 +1014,11 @@ export function AriaCombobox<Value = any, Mode extends SelectionMode = 'none'>(
};
}, [inputElement, open, ariaExpanded, ariaHasPopup, listElement?.id, autoComplete]);

const click = useClick(floatingRootContext, {
const click = useInputPress(floatingRootContext, {
enabled: !readOnly && !disabled && openOnInputClick,
event: 'mousedown-only',
toggle: false,
// Apply a small delay for touch to let mobile viewport/keyboard positioning settle.
// This avoids top-bottom flip flickers if the preferred position is "top" when first tapping.
touchOpenDelay: inputInsidePopup ? 0 : 100,
reason: REASONS.inputPress,
});

const dismiss = useDismiss(floatingRootContext, {
Expand Down
2 changes: 1 addition & 1 deletion packages/react/src/combobox/root/ComboboxRoot.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import { Dialog } from '@base-ui/react/dialog';
import { Field } from '@base-ui/react/field';
import { Form } from '@base-ui/react/form';
import { Input } from '@base-ui/react/input';
import { useStore } from '@base-ui/utils/store';
import { useStore } from '@base-ui/utils/store/core';
import { CompositeRoot } from '../../internals/composite/root/CompositeRoot';
import { CompositeItem } from '../../internals/composite/item/CompositeItem';
import { REASONS } from '../../internals/reasons';
Expand Down
2 changes: 1 addition & 1 deletion packages/react/src/combobox/root/ComboboxRootContext.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use client';
import * as React from 'react';
import { ComboboxStore } from '../store';
import type { FloatingRootContext } from '../../floating-ui-react';
import type { FloatingRootContext } from '../../floating-ui-react/types';

export interface ComboboxDerivedItemsContext {
query: string;
Expand Down
2 changes: 1 addition & 1 deletion packages/react/src/combobox/store.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Store, createSelector } from '@base-ui/utils/store';
import { Store, createSelector } from '@base-ui/utils/store/core';
import type { InteractionType } from '@base-ui/utils/useEnhancedClickHandler';
import type { TransitionStatus } from '../internals/useTransitionStatus';
import type { HTMLProps } from '../internals/types';
Expand Down
10 changes: 6 additions & 4 deletions packages/react/src/combobox/trigger/ComboboxTrigger.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use client';
import * as React from 'react';
import { useStore } from '@base-ui/utils/store';
import { useStore } from '@base-ui/utils/store/core';
import { useStableCallback } from '@base-ui/utils/useStableCallback';
import { useTimeout } from '@base-ui/utils/useTimeout';
import { ownerDocument } from '@base-ui/utils/owner';
Expand All @@ -17,15 +17,17 @@ import { triggerStateAttributesMapping } from '../utils/stateAttributesMapping';
import { selectors } from '../store';
import { useFieldRootContext } from '../../internals/field-root-context/FieldRootContext';
import { useLabelableContext } from '../../internals/labelable-provider/LabelableContext';
import { stopEvent, contains, getTarget } from '../../floating-ui-react/utils';
import { stopEvent } from '../../floating-ui-react/utils/event';
import { contains, getTarget } from '../../internals/shadowDom';
import { getPseudoElementBounds } from '../../utils/getPseudoElementBounds';
import type { FieldRootState } from '../../field/root/FieldRoot';
import { createChangeEventDetails } from '../../internals/createBaseUIEventDetails';
import { REASONS } from '../../internals/reasons';
import { useClick, useTypeahead } from '../../floating-ui-react';
import { useTypeahead } from '../../floating-ui-react/hooks/useTypeahead';
import type { Side } from '../../utils/useAnchorPositioning';
import { useLabelableId } from '../../internals/labelable-provider/useLabelableId';
import { resolveAriaLabelledBy } from '../../utils/resolveAriaLabelledBy';
import { useTriggerPress } from '../../utils/popups/useTriggerPress';

const BOUNDARY_OFFSET = 2;

Expand Down Expand Up @@ -125,7 +127,7 @@ export const ComboboxTrigger = React.forwardRef(function ComboboxTrigger(
},
});

const { reference: triggerClickProps } = useClick(floatingRootContext, {
const { reference: triggerClickProps } = useTriggerPress(floatingRootContext, {
enabled: !readOnly && !comboboxDisabled,
event: 'mousedown',
});
Expand Down
2 changes: 1 addition & 1 deletion packages/react/src/combobox/value/ComboboxValue.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use client';
import * as React from 'react';
import { useStore } from '@base-ui/utils/store';
import { useStore } from '@base-ui/utils/store/core';
import { useComboboxRootContext } from '../root/ComboboxRootContext';
import { resolveMultipleLabels, resolveSelectedLabel } from '../../internals/resolveValueLabel';
import { selectors } from '../store';
Expand Down
4 changes: 2 additions & 2 deletions packages/react/src/dialog/popup/DialogPopup.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use client';
import * as React from 'react';
import { InteractionType } from '@base-ui/utils/useEnhancedClickHandler';
import { FloatingFocusManager } from '../../floating-ui-react';
import { FloatingFocusManager } from '../../floating-ui-react/components/FloatingFocusManager';
import { useDialogRootContext } from '../root/DialogRootContext';
import { useRenderElement } from '../../internals/useRenderElement';
import { type BaseUIComponentProps } from '../../internals/types';
Expand All @@ -14,7 +14,7 @@ import { DialogPopupDataAttributes } from './DialogPopupDataAttributes';
import { useDialogPortalContext } from '../portal/DialogPortalContext';
import { useOpenChangeComplete } from '../../internals/useOpenChangeComplete';
import { COMPOSITE_KEYS } from '../../internals/composite/composite';
import { FOCUSABLE_POPUP_PROPS } from '../../utils/popups';
import { FOCUSABLE_POPUP_PROPS } from '../../utils/popups/popupStoreUtils';

const stateAttributesMapping: StateAttributesMapping<DialogPopupState> = {
...baseMapping,
Expand Down
2 changes: 1 addition & 1 deletion packages/react/src/dialog/portal/DialogPortal.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use client';
import * as React from 'react';
import { inertValue } from '@base-ui/utils/inertValue';
import { FloatingPortal } from '../../floating-ui-react';
import { FloatingPortal } from '../../floating-ui-react/components/FloatingPortal';
import { useDialogRootContext } from '../root/DialogRootContext';
import { DialogPortalContext } from './DialogPortalContext';
import { InternalBackdrop } from '../../utils/InternalBackdrop';
Expand Down
2 changes: 1 addition & 1 deletion packages/react/src/dialog/root/DialogRoot.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import type { BaseUIChangeEventDetails } from '../../internals/createBaseUIEvent
import { REASONS } from '../../internals/reasons';
import { DialogStore } from '../store/DialogStore';
import { DialogHandle } from '../store/DialogHandle';
import { type PayloadChildRenderFunction } from '../../utils/popups';
import { type PayloadChildRenderFunction } from '../../utils/popups/popupStoreUtils';

export const IsDrawerContext = React.createContext(false);

Expand Down
6 changes: 3 additions & 3 deletions packages/react/src/dialog/root/useDialogRoot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import * as React from 'react';
import { useScrollLock } from '@base-ui/utils/useScrollLock';
import { EMPTY_OBJECT } from '@base-ui/utils/empty';
import { mergeProps } from '../../merge-props';
import { useDismiss } from '../../floating-ui-react';
import { contains, getTarget } from '../../floating-ui-react/utils';
import { useDismissCore as useDismiss } from '../../floating-ui-react/hooks/useDismissCore';
import { contains, getTarget } from '../../internals/shadowDom';
import { createChangeEventDetails } from '../../internals/createBaseUIEventDetails';
import { REASONS } from '../../internals/reasons';
import { type DialogRoot } from './DialogRoot';
Expand All @@ -15,7 +15,7 @@ import {
useOpenStateTransitions,
usePopupInteractionProps,
usePopupRootSync,
} from '../../utils/popups';
} from '../../utils/popups/popupStoreUtils';

export function useDialogRoot(params: UseDialogRootParameters): UseDialogRootReturnValue {
const { store, parentContext, actionsRef, isDrawer } = params;
Expand Down
Loading
Loading