@octanejs/base-ui 0.1.49 → 0.1.51
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.
- package/LICENSE +21 -0
- package/MIGRATION.md +47 -0
- package/README.md +62 -5
- package/UPSTREAM.md +164 -64
- package/package.json +458 -27
- package/src/accordion/header/AccordionHeader.tsrx +42 -0
- package/src/accordion/header/AccordionHeaderDataAttributes.ts +13 -0
- package/src/accordion/index.parts.ts +5 -0
- package/src/accordion/index.ts +16 -0
- package/src/accordion/item/AccordionItem.tsrx +195 -0
- package/src/accordion/item/AccordionItemContext.ts +26 -0
- package/src/accordion/item/AccordionItemDataAttributes.ts +13 -0
- package/src/accordion/item/stateAttributesMapping.ts +12 -0
- package/src/accordion/panel/AccordionPanel.tsrx +163 -0
- package/src/accordion/panel/AccordionPanelCssVars.ts +10 -0
- package/src/accordion/panel/AccordionPanelDataAttributes.ts +27 -0
- package/src/accordion/root/AccordionRoot.tsrx +240 -0
- package/src/accordion/root/AccordionRootContext.ts +31 -0
- package/src/accordion/root/AccordionRootDataAttributes.ts +8 -0
- package/src/accordion/trigger/AccordionTrigger.tsrx +81 -0
- package/src/accordion/trigger/AccordionTriggerDataAttributes.ts +8 -0
- package/src/alert-dialog/handle.ts +22 -0
- package/src/alert-dialog/index.parts.ts +10 -0
- package/src/alert-dialog/index.ts +39 -0
- package/src/alert-dialog/root/AlertDialogRoot.tsrx +58 -0
- package/src/alert-dialog/trigger/AlertDialogTrigger.tsrx +38 -0
- package/src/alert-dialog/trigger/AlertDialogTriggerDataAttributes.ts +10 -0
- package/src/autocomplete/clear/AutocompleteClearDataAttributes.ts +1 -0
- package/src/autocomplete/index.parts.ts +25 -0
- package/src/autocomplete/index.ts +78 -0
- package/src/autocomplete/input-group/AutocompleteInputGroup.tsrx +53 -0
- package/src/autocomplete/input-group/AutocompleteInputGroupDataAttributes.ts +49 -0
- package/src/autocomplete/item/AutocompleteItem.tsrx +56 -0
- package/src/autocomplete/item/AutocompleteItemDataAttributes.ts +10 -0
- package/src/autocomplete/root/AutocompleteRoot.tsrx +296 -0
- package/src/autocomplete/separator/AutocompleteSeparator.tsrx +37 -0
- package/src/autocomplete/trigger/AutocompleteTrigger.tsrx +57 -0
- package/src/autocomplete/trigger/AutocompleteTriggerDataAttributes.ts +55 -0
- package/src/autocomplete/value/AutocompleteValue.tsrx +38 -0
- package/src/avatar/fallback/AvatarFallback.tsrx +68 -0
- package/src/avatar/image/AvatarImage.tsrx +210 -0
- package/src/avatar/image/AvatarImageDataAttributes.ts +18 -0
- package/src/avatar/image/useImageLoadingStatus.ts +72 -0
- package/src/avatar/index.parts.ts +3 -0
- package/src/avatar/index.ts +5 -0
- package/src/avatar/root/AvatarRoot.tsrx +60 -0
- package/src/avatar/root/AvatarRootContext.ts +21 -0
- package/src/avatar/root/stateAttributesMapping.ts +3 -0
- package/src/button/Button.tsrx +63 -0
- package/src/button/ButtonDataAttributes.tsrx +4 -0
- package/src/button/index.ts +3 -0
- package/src/checkbox/index.parts.ts +2 -0
- package/src/checkbox/index.ts +4 -0
- package/src/checkbox/indicator/CheckboxIndicator.tsrx +96 -0
- package/src/checkbox/indicator/CheckboxIndicatorDataAttributes.ts +58 -0
- package/src/checkbox/root/CheckboxRoot.tsrx +516 -0
- package/src/checkbox/root/CheckboxRootContext.ts +19 -0
- package/src/checkbox/root/CheckboxRootDataAttributes.ts +48 -0
- package/src/checkbox/utils/getCheckboxStateAttributesMapping.ts +24 -0
- package/src/checkbox-group/CheckboxGroup.tsrx +229 -0
- package/src/checkbox-group/CheckboxGroupContext.ts +33 -0
- package/src/checkbox-group/CheckboxGroupDataAttributes.ts +4 -0
- package/src/checkbox-group/index.ts +2 -0
- package/src/checkbox-group/useCheckboxGroupParent.ts +176 -0
- package/src/collapsible/index.parts.ts +3 -0
- package/src/collapsible/index.ts +12 -0
- package/src/collapsible/panel/CollapsiblePanel.tsrx +168 -0
- package/src/collapsible/panel/CollapsiblePanelCssVars.ts +10 -0
- package/src/collapsible/panel/CollapsiblePanelDataAttributes.ts +18 -0
- package/src/collapsible/panel/useCollapsiblePanel.ts +577 -0
- package/src/collapsible/root/CollapsibleRoot.tsrx +116 -0
- package/src/collapsible/root/CollapsibleRootContext.ts +25 -0
- package/src/collapsible/root/CollapsibleRootDataAttributes.ts +18 -0
- package/src/collapsible/root/stateAttributesMapping.ts +9 -0
- package/src/collapsible/root/useCollapsibleRoot.ts +121 -0
- package/src/collapsible/trigger/CollapsibleTrigger.tsrx +78 -0
- package/src/collapsible/trigger/CollapsibleTriggerDataAttributes.ts +4 -0
- package/src/combobox/arrow/ComboboxArrow.tsrx +72 -0
- package/src/combobox/arrow/ComboboxArrowDataAttributes.ts +24 -0
- package/src/combobox/backdrop/ComboboxBackdrop.tsrx +75 -0
- package/src/combobox/backdrop/ComboboxBackdropDataAttributes.ts +18 -0
- package/src/combobox/chip/ComboboxChip.tsrx +150 -0
- package/src/combobox/chip/ComboboxChipContext.ts +19 -0
- package/src/combobox/chip-remove/ComboboxChipRemove.tsrx +138 -0
- package/src/combobox/chips/ComboboxChips.tsrx +78 -0
- package/src/combobox/chips/ComboboxChipsContext.ts +17 -0
- package/src/combobox/clear/ComboboxClear.tsrx +178 -0
- package/src/combobox/clear/ComboboxClearDataAttributes.ts +25 -0
- package/src/combobox/collection/ComboboxCollection.tsrx +34 -0
- package/src/combobox/collection/GroupCollectionContext.tsrx +31 -0
- package/src/combobox/empty/ComboboxEmpty.tsrx +58 -0
- package/src/combobox/group/ComboboxGroup.tsrx +74 -0
- package/src/combobox/group/ComboboxGroupContext.ts +27 -0
- package/src/combobox/group-label/ComboboxGroupLabel.tsrx +52 -0
- package/src/combobox/icon/ComboboxIcon.tsrx +41 -0
- package/src/combobox/index.parts.ts +31 -0
- package/src/combobox/index.ts +36 -0
- package/src/combobox/input/ComboboxInput.tsrx +507 -0
- package/src/combobox/input/ComboboxInputDataAttributes.ts +55 -0
- package/src/combobox/input-group/ComboboxInputGroup.tsrx +110 -0
- package/src/combobox/input-group/ComboboxInputGroupDataAttributes.ts +53 -0
- package/src/combobox/item/ComboboxItem.tsrx +328 -0
- package/src/combobox/item/ComboboxItemContext.ts +20 -0
- package/src/combobox/item/ComboboxItemDataAttributes.ts +12 -0
- package/src/combobox/item-indicator/ComboboxItemIndicator.tsrx +109 -0
- package/src/combobox/item-indicator/ComboboxItemIndicatorDataAttributes.ts +10 -0
- package/src/combobox/items/createItems.ts +168 -0
- package/src/combobox/items/itemCollection.ts +67 -0
- package/src/combobox/label/ComboboxLabel.tsrx +88 -0
- package/src/combobox/list/ComboboxList.tsrx +152 -0
- package/src/combobox/popup/ComboboxPopup.tsrx +214 -0
- package/src/combobox/popup/ComboboxPopupDataAttributes.ts +36 -0
- package/src/combobox/portal/ComboboxPortal.tsrx +56 -0
- package/src/combobox/portal/ComboboxPortalContext.tsrx +12 -0
- package/src/combobox/positioner/ComboboxPositioner.tsrx +172 -0
- package/src/combobox/positioner/ComboboxPositionerContext.tsrx +30 -0
- package/src/combobox/positioner/ComboboxPositionerCssVars.ts +25 -0
- package/src/combobox/positioner/ComboboxPositionerDataAttributes.ts +28 -0
- package/src/combobox/root/AriaCombobox.tsrx +1970 -0
- package/src/combobox/root/ComboboxRoot.tsrx +183 -0
- package/src/combobox/root/ComboboxRootContext.tsrx +66 -0
- package/src/combobox/root/utils/constants.ts +5 -0
- package/src/combobox/root/utils/index.ts +68 -0
- package/src/combobox/root/utils/useFilter.ts +50 -0
- package/src/combobox/root/utils/useFilteredItems.ts +11 -0
- package/src/combobox/row/ComboboxRow.tsrx +37 -0
- package/src/combobox/row/ComboboxRowContext.ts +9 -0
- package/src/combobox/separator/ComboboxSeparator.tsrx +37 -0
- package/src/combobox/status/ComboboxStatus.tsrx +49 -0
- package/src/combobox/store.ts +206 -0
- package/src/combobox/trigger/ComboboxTrigger.tsrx +302 -0
- package/src/combobox/trigger/ComboboxTriggerDataAttributes.ts +59 -0
- package/src/combobox/utils/ComboboxInternalDismissButton.tsrx +47 -0
- package/src/combobox/utils/handleInputPress.ts +38 -0
- package/src/combobox/utils/parts.ts +59 -0
- package/src/combobox/utils/stateAttributesMapping.ts +19 -0
- package/src/combobox/utils/useInitialLiveRegionTextMutation.ts +66 -0
- package/src/combobox/value/ComboboxValue.tsrx +65 -0
- package/src/context-menu/index.parts.ts +21 -0
- package/src/context-menu/index.ts +66 -0
- package/src/context-menu/positioner/ContextMenuPositioner.tsrx +119 -0
- package/src/context-menu/positioner/ContextMenuPositionerCssVars.ts +1 -0
- package/src/context-menu/positioner/ContextMenuPositionerDataAttributes.ts +1 -0
- package/src/context-menu/root/ContextMenuRoot.tsrx +98 -0
- package/src/context-menu/root/ContextMenuRootContext.ts +34 -0
- package/src/context-menu/trigger/ContextMenuTrigger.tsrx +237 -0
- package/src/context-menu/trigger/ContextMenuTriggerDataAttributes.ts +10 -0
- package/src/csp-provider/CSPProvider.tsrx +43 -0
- package/src/csp-provider/index.parts.ts +1 -0
- package/src/csp-provider/index.ts +3 -0
- package/src/dialog/backdrop/DialogBackdrop.tsrx +76 -0
- package/src/dialog/backdrop/DialogBackdropDataAttributes.ts +18 -0
- package/src/dialog/close/DialogClose.tsrx +67 -0
- package/src/dialog/close/DialogCloseDataAttributes.ts +4 -0
- package/src/dialog/description/DialogDescription.tsrx +41 -0
- package/src/dialog/index.parts.ts +10 -0
- package/src/dialog/index.ts +14 -0
- package/src/dialog/popup/DialogPopup.tsrx +170 -0
- package/src/dialog/popup/DialogPopupCssVars.ts +5 -0
- package/src/dialog/popup/DialogPopupDataAttributes.ts +26 -0
- package/src/dialog/portal/DialogPortal.tsrx +63 -0
- package/src/dialog/portal/DialogPortalContext.ts +13 -0
- package/src/dialog/root/DialogRoot.tsrx +117 -0
- package/src/dialog/root/DialogRootContext.ts +20 -0
- package/src/dialog/root/useDialogRoot.ts +128 -0
- package/src/dialog/root/useRenderDialogRoot.tsrx +108 -0
- package/src/dialog/store/DialogHandle.ts +83 -0
- package/src/dialog/store/DialogStore.ts +149 -0
- package/src/dialog/title/DialogTitle.tsrx +41 -0
- package/src/dialog/trigger/DialogTrigger.tsrx +142 -0
- package/src/dialog/trigger/DialogTriggerDataAttributes.ts +10 -0
- package/src/dialog/utils/stateAttributesMapping.ts +22 -0
- package/src/dialog/viewport/DialogViewport.tsrx +89 -0
- package/src/dialog/viewport/DialogViewportDataAttributes.ts +26 -0
- package/src/direction-provider/DirectionProvider.tsrx +37 -0
- package/src/direction-provider/index.parts.ts +5 -0
- package/src/direction-provider/index.ts +2 -0
- package/src/drawer/backdrop/DrawerBackdrop.tsrx +81 -0
- package/src/drawer/backdrop/DrawerBackdropCssVars.ts +5 -0
- package/src/drawer/backdrop/DrawerBackdropDataAttributes.ts +18 -0
- package/src/drawer/close/DrawerClose.tsrx +31 -0
- package/src/drawer/content/DrawerContent.tsrx +37 -0
- package/src/drawer/content/drawerContentAttribute.ts +1 -0
- package/src/drawer/description/DrawerDescription.tsrx +25 -0
- package/src/drawer/handle.ts +22 -0
- package/src/drawer/indent/DrawerIndent.tsrx +104 -0
- package/src/drawer/indent-background/DrawerIndentBackground.tsrx +61 -0
- package/src/drawer/index.parts.ts +16 -0
- package/src/drawer/index.ts +17 -0
- package/src/drawer/popup/DrawerPopup.tsrx +485 -0
- package/src/drawer/popup/DrawerPopupCssVars.ts +35 -0
- package/src/drawer/popup/DrawerPopupDataAttributes.ts +43 -0
- package/src/drawer/portal/DrawerPortal.tsrx +39 -0
- package/src/drawer/provider/DrawerProvider.tsrx +117 -0
- package/src/drawer/provider/DrawerProviderContext.ts +29 -0
- package/src/drawer/root/DrawerRoot.tsrx +478 -0
- package/src/drawer/root/DrawerRootContext.ts +115 -0
- package/src/drawer/root/useDrawerSnapPoints.ts +198 -0
- package/src/drawer/swipe-area/DrawerSwipeArea.tsrx +528 -0
- package/src/drawer/swipe-area/DrawerSwipeAreaDataAttributes.ts +23 -0
- package/src/drawer/title/DrawerTitle.tsrx +25 -0
- package/src/drawer/trigger/DrawerTrigger.tsrx +53 -0
- package/src/drawer/viewport/DrawerViewport.tsrx +1237 -0
- package/src/drawer/viewport/DrawerViewportContext.tsrx +15 -0
- package/src/drawer/viewport/DrawerViewportCssVars.ts +6 -0
- package/src/drawer/viewport/DrawerViewportDataAttributes.ts +22 -0
- package/src/drawer/virtual-keyboard-provider/DrawerVirtualKeyboardContext.tsrx +19 -0
- package/src/drawer/virtual-keyboard-provider/DrawerVirtualKeyboardProvider.tsrx +858 -0
- package/src/field/control/FieldControl.tsrx +241 -0
- package/src/field/control/FieldControlDataAttributes.ts +28 -0
- package/src/field/description/FieldDescription.tsrx +67 -0
- package/src/field/description/FieldDescriptionDataAttributes.ts +28 -0
- package/src/field/error/FieldError.tsrx +160 -0
- package/src/field/error/FieldErrorDataAttributes.ts +38 -0
- package/src/field/index.parts.ts +9 -0
- package/src/field/index.ts +9 -0
- package/src/field/item/FieldItem.tsrx +66 -0
- package/src/field/item/FieldItemContext.ts +15 -0
- package/src/field/item/FieldItemDataAttributes.ts +28 -0
- package/src/field/label/FieldLabel.tsrx +107 -0
- package/src/field/label/FieldLabelDataAttributes.ts +28 -0
- package/src/field/root/FieldRoot.tsrx +336 -0
- package/src/field/root/FieldRootDataAttributes.ts +28 -0
- package/src/field/root/useFieldValidation.ts +418 -0
- package/src/field/utils/getCombinedFieldValidityData.ts +18 -0
- package/src/field/validity/FieldValidity.tsrx +69 -0
- package/src/fieldset/index.parts.ts +2 -0
- package/src/fieldset/index.ts +4 -0
- package/src/fieldset/legend/FieldsetLegend.tsrx +51 -0
- package/src/fieldset/root/FieldsetRoot.tsrx +74 -0
- package/src/fieldset/root/FieldsetRootContext.ts +23 -0
- package/src/floating-ui-react/components/FloatingDelayGroup.tsrx +281 -0
- package/src/floating-ui-react/components/FloatingFocusManager.tsrx +1004 -0
- package/src/floating-ui-react/components/FloatingPortal.tsrx +319 -0
- package/src/floating-ui-react/components/FloatingRootStore.ts +136 -0
- package/src/floating-ui-react/components/FloatingTree.tsrx +95 -0
- package/src/floating-ui-react/components/FloatingTreeStore.ts +24 -0
- package/src/floating-ui-react/hooks/gridNavigation.ts +50 -0
- package/src/floating-ui-react/hooks/useClick.ts +229 -0
- package/src/floating-ui-react/hooks/useClientPoint.ts +261 -0
- package/src/floating-ui-react/hooks/useDismiss.ts +808 -0
- package/src/floating-ui-react/hooks/useFloating.ts +205 -0
- package/src/floating-ui-react/hooks/useFloatingRootContext.ts +84 -0
- package/src/floating-ui-react/hooks/useFocus.ts +253 -0
- package/src/floating-ui-react/hooks/useHover.ts +468 -0
- package/src/floating-ui-react/hooks/useHoverFloatingInteraction.ts +274 -0
- package/src/floating-ui-react/hooks/useHoverInteractionSharedState.ts +132 -0
- package/src/floating-ui-react/hooks/useHoverReferenceInteraction.ts +523 -0
- package/src/floating-ui-react/hooks/useHoverShared.ts +72 -0
- package/src/floating-ui-react/hooks/useListNavigation.ts +941 -0
- package/src/floating-ui-react/hooks/useSyncedFloatingRootContext.ts +115 -0
- package/src/floating-ui-react/hooks/useTypeahead.ts +248 -0
- package/src/floating-ui-react/index.ts +48 -0
- package/src/floating-ui-react/middleware/arrow.ts +128 -0
- package/src/floating-ui-react/middleware/positioning.ts +28 -0
- package/src/floating-ui-react/safePolygon.ts +451 -0
- package/src/floating-ui-react/types.ts +206 -0
- package/src/floating-ui-react/utils/composite.ts +528 -0
- package/src/floating-ui-react/utils/constants.ts +10 -0
- package/src/floating-ui-react/utils/createAttribute.ts +3 -0
- package/src/floating-ui-react/utils/createEventEmitter.ts +19 -0
- package/src/floating-ui-react/utils/element.ts +96 -0
- package/src/floating-ui-react/utils/enqueueFocus.ts +37 -0
- package/src/floating-ui-react/utils/event.ts +60 -0
- package/src/floating-ui-react/utils/getEmptyRootContext.ts +17 -0
- package/src/floating-ui-react/utils/markOthers.ts +219 -0
- package/src/floating-ui-react/utils/nodes.ts +54 -0
- package/src/floating-ui-react/utils/tabbable.ts +283 -0
- package/src/floating-ui-react/utils.ts +5 -0
- package/src/form/Form.tsrx +248 -0
- package/src/form/index.ts +3 -0
- package/src/global.d.ts +9 -0
- package/src/index.ts +45 -39
- package/src/input/Input.tsrx +44 -0
- package/src/input/InputDataAttributes.ts +28 -0
- package/src/input/index.ts +3 -0
- package/src/internals/PrehydrationScript.tsrx +59 -0
- package/src/internals/RequestQueue.ts +126 -0
- package/src/internals/TimeoutManager.ts +29 -0
- package/src/internals/TransitionStatusDataAttributes.ts +9 -0
- package/src/internals/composite/composite.ts +174 -0
- package/src/internals/composite/constants.ts +1 -0
- package/src/internals/composite/index.ts +19 -0
- package/src/internals/composite/item/CompositeItem.tsrx +57 -0
- package/src/internals/composite/item/useCompositeItem.ts +50 -0
- package/src/internals/composite/list/CompositeList.tsrx +325 -0
- package/src/internals/composite/list/CompositeListContext.ts +28 -0
- package/src/internals/composite/list/useCompositeListItem.ts +100 -0
- package/src/internals/composite/root/CompositeRoot.tsrx +138 -0
- package/src/internals/composite/root/CompositeRootContext.ts +33 -0
- package/src/internals/composite/root/gridNavigation.ts +127 -0
- package/src/internals/composite/root/useCompositeRoot.ts +378 -0
- package/src/internals/constants.ts +41 -0
- package/src/internals/createBaseUIEventDetails.ts +166 -0
- package/src/internals/csp-context/CSPContext.tsrx +17 -0
- package/src/internals/csp-context/index.ts +2 -0
- package/src/internals/direction-context/DirectionContext.tsrx +16 -0
- package/src/internals/direction-context/index.ts +5 -0
- package/src/internals/field-constants/constants.ts +44 -0
- package/src/internals/field-constants/index.ts +6 -0
- package/src/internals/field-register-control/index.ts +6 -0
- package/src/internals/field-register-control/useFieldControlRegistration.ts +185 -0
- package/src/internals/field-register-control/useRegisterFieldControl.ts +47 -0
- package/src/internals/field-root-context/FieldRootContext.ts +79 -0
- package/src/internals/field-root-context/index.ts +2 -0
- package/src/internals/filter.ts +82 -0
- package/src/internals/form-context/FormContext.ts +51 -0
- package/src/internals/form-context/index.ts +2 -0
- package/src/internals/getDisabledMountTransitionStyles.ts +10 -0
- package/src/internals/getStateAttributesProps.ts +32 -0
- package/src/internals/itemEquality.ts +134 -0
- package/src/internals/labelable-provider/LabelableContext.ts +49 -0
- package/src/internals/labelable-provider/LabelableProvider.tsrx +120 -0
- package/src/internals/labelable-provider/index.ts +6 -0
- package/src/internals/labelable-provider/useAriaLabelledBy.ts +73 -0
- package/src/internals/labelable-provider/useLabel.ts +113 -0
- package/src/internals/labelable-provider/useLabelableId.ts +101 -0
- package/src/internals/noop.ts +1 -0
- package/src/internals/prehydrationScript.stub.ts +6 -0
- package/src/internals/reason-parts.ts +42 -0
- package/src/internals/reasons.ts +5 -0
- package/src/internals/resolveValueLabel.tsrx +158 -0
- package/src/internals/serializeValue.ts +13 -0
- package/src/internals/stateAttributesMapping.ts +20 -0
- package/src/internals/temporal/index.ts +2 -0
- package/src/internals/temporal/temporal-adapter.ts +382 -0
- package/src/internals/temporal/temporal.ts +49 -0
- package/src/internals/temporal-adapter-date-fns/TemporalAdapterDateFns.ts +474 -0
- package/src/internals/temporal-adapter-date-fns/index.ts +1 -0
- package/src/internals/temporal-adapter-luxon/TemporalAdapterLuxon.ts +380 -0
- package/src/internals/temporal-adapter-luxon/index.ts +1 -0
- package/src/internals/types.ts +97 -0
- package/src/internals/use-button/index.ts +1 -0
- package/src/internals/use-button/useButton.ts +309 -0
- package/src/internals/useAnchorPositioning.ts +828 -0
- package/src/internals/useAnimationsFinished.ts +161 -0
- package/src/internals/useBaseUiId.ts +12 -0
- package/src/internals/useOpenChangeComplete.tsrx +56 -0
- package/src/internals/usePressAndHold.ts +287 -0
- package/src/internals/useRenderElement.tsrx +284 -0
- package/src/internals/useTransitionStatus.ts +98 -0
- package/src/internals/useValueChanged.ts +18 -0
- package/src/menu/arrow/MenuArrow.tsrx +71 -0
- package/src/menu/arrow/MenuArrowDataAttributes.ts +24 -0
- package/src/menu/backdrop/MenuBackdrop.tsrx +75 -0
- package/src/menu/backdrop/MenuBackdropDataAttributes.ts +18 -0
- package/src/menu/checkbox-item/MenuCheckboxItem.tsrx +184 -0
- package/src/menu/checkbox-item/MenuCheckboxItemContext.ts +24 -0
- package/src/menu/checkbox-item/MenuCheckboxItemDataAttributes.ts +16 -0
- package/src/menu/checkbox-item-indicator/MenuCheckboxItemIndicator.tsrx +96 -0
- package/src/menu/checkbox-item-indicator/MenuCheckboxItemIndicatorDataAttributes.ts +22 -0
- package/src/menu/group/MenuGroup.tsrx +47 -0
- package/src/menu/group/MenuGroupContext.ts +18 -0
- package/src/menu/group-label/MenuGroupLabel.tsrx +51 -0
- package/src/menu/index.parts.ts +21 -0
- package/src/menu/index.ts +24 -0
- package/src/menu/item/MenuItem.tsrx +107 -0
- package/src/menu/item/MenuItemDataAttributes.ts +8 -0
- package/src/menu/item/useMenuItem.ts +142 -0
- package/src/menu/item/useMenuItemCommonProps.ts +139 -0
- package/src/menu/link-item/MenuLinkItem.tsrx +106 -0
- package/src/menu/link-item/MenuLinkItemDataAttributes.ts +4 -0
- package/src/menu/popup/MenuPopup.tsrx +199 -0
- package/src/menu/popup/MenuPopupDataAttributes.ts +33 -0
- package/src/menu/portal/MenuPortal.tsrx +60 -0
- package/src/menu/portal/MenuPortalContext.ts +13 -0
- package/src/menu/positioner/MenuPositioner.tsrx +378 -0
- package/src/menu/positioner/MenuPositionerContext.ts +25 -0
- package/src/menu/positioner/MenuPositionerCssVars.ts +37 -0
- package/src/menu/positioner/MenuPositionerDataAttributes.ts +24 -0
- package/src/menu/radio-group/MenuRadioGroup.tsrx +129 -0
- package/src/menu/radio-group/MenuRadioGroupContext.ts +25 -0
- package/src/menu/radio-item/MenuRadioItem.tsrx +156 -0
- package/src/menu/radio-item/MenuRadioItemContext.ts +24 -0
- package/src/menu/radio-item/MenuRadioItemDataAttributes.ts +16 -0
- package/src/menu/radio-item-indicator/MenuRadioItemIndicator.tsrx +96 -0
- package/src/menu/radio-item-indicator/MenuRadioItemIndicatorDataAttributes.ts +22 -0
- package/src/menu/root/MenuRoot.tsrx +818 -0
- package/src/menu/root/MenuRootContext.ts +25 -0
- package/src/menu/store/MenuHandle.ts +54 -0
- package/src/menu/store/MenuStore.ts +234 -0
- package/src/menu/submenu-root/MenuSubmenuRoot.tsrx +64 -0
- package/src/menu/submenu-root/MenuSubmenuRootContext.ts +16 -0
- package/src/menu/submenu-trigger/MenuSubmenuTrigger.tsrx +278 -0
- package/src/menu/submenu-trigger/MenuSubmenuTriggerDataAttributes.ts +14 -0
- package/src/menu/trigger/MenuTrigger.tsrx +395 -0
- package/src/menu/trigger/MenuTriggerDataAttributes.ts +14 -0
- package/src/menu/utils/findRootOwnerId.ts +13 -0
- package/src/menu/utils/stateAttributesMapping.ts +17 -0
- package/src/menu/utils/types.ts +8 -0
- package/src/menu/viewport/MenuViewport.tsrx +75 -0
- package/src/menu/viewport/MenuViewportCssVars.ts +12 -0
- package/src/menu/viewport/MenuViewportDataAttributes.ts +24 -0
- package/src/menubar/Menubar.tsrx +173 -0
- package/src/menubar/MenubarContext.ts +31 -0
- package/src/menubar/MenubarDataAttributes.ts +13 -0
- package/src/menubar/index.ts +3 -0
- package/src/merge-props/index.ts +1 -0
- package/src/merge-props/mergeProps.ts +302 -0
- package/src/meter/index.parts.ts +5 -0
- package/src/meter/index.ts +7 -0
- package/src/meter/indicator/MeterIndicator.tsrx +46 -0
- package/src/meter/label/MeterLabel.tsrx +46 -0
- package/src/meter/root/MeterRoot.tsrx +129 -0
- package/src/meter/root/MeterRootContext.ts +26 -0
- package/src/meter/track/MeterTrack.tsrx +34 -0
- package/src/meter/value/MeterValue.tsrx +51 -0
- package/src/navigation-menu/arrow/NavigationMenuArrow.tsrx +77 -0
- package/src/navigation-menu/arrow/NavigationMenuArrowDataAttributes.ts +24 -0
- package/src/navigation-menu/backdrop/NavigationMenuBackdrop.tsrx +69 -0
- package/src/navigation-menu/backdrop/NavigationMenuBackdropDataAttributes.ts +18 -0
- package/src/navigation-menu/content/NavigationMenuContent.tsrx +208 -0
- package/src/navigation-menu/content/NavigationMenuContentDataAttributes.ts +23 -0
- package/src/navigation-menu/icon/NavigationMenuIcon.tsrx +56 -0
- package/src/navigation-menu/icon/NavigationMenuIconDataAttributes.ts +6 -0
- package/src/navigation-menu/index.parts.ts +13 -0
- package/src/navigation-menu/index.ts +15 -0
- package/src/navigation-menu/item/NavigationMenuItem.tsrx +59 -0
- package/src/navigation-menu/item/NavigationMenuItemContext.ts +21 -0
- package/src/navigation-menu/link/NavigationMenuLink.tsrx +108 -0
- package/src/navigation-menu/link/NavigationMenuLinkDataAttributes.ts +4 -0
- package/src/navigation-menu/list/NavigationMenuDismissContext.ts +12 -0
- package/src/navigation-menu/list/NavigationMenuList.tsrx +144 -0
- package/src/navigation-menu/popup/NavigationMenuPopup.tsrx +106 -0
- package/src/navigation-menu/popup/NavigationMenuPopupCssVars.ts +10 -0
- package/src/navigation-menu/popup/NavigationMenuPopupDataAttributes.ts +32 -0
- package/src/navigation-menu/portal/NavigationMenuPortal.tsrx +58 -0
- package/src/navigation-menu/portal/NavigationMenuPortalContext.ts +13 -0
- package/src/navigation-menu/positioner/NavigationMenuPositioner.tsrx +219 -0
- package/src/navigation-menu/positioner/NavigationMenuPositionerContext.ts +26 -0
- package/src/navigation-menu/positioner/NavigationMenuPositionerCssVars.ts +35 -0
- package/src/navigation-menu/positioner/NavigationMenuPositionerDataAttributes.ts +28 -0
- package/src/navigation-menu/root/NavigationMenuRoot.tsrx +439 -0
- package/src/navigation-menu/root/NavigationMenuRootContext.ts +84 -0
- package/src/navigation-menu/trigger/NavigationMenuTrigger.tsrx +846 -0
- package/src/navigation-menu/trigger/NavigationMenuTriggerDataAttributes.ts +14 -0
- package/src/navigation-menu/utils/constants.ts +3 -0
- package/src/navigation-menu/utils/isOutsideMenuEvent.ts +36 -0
- package/src/navigation-menu/utils/setSharedFixedSize.ts +20 -0
- package/src/navigation-menu/utils/useNavigationMenuAnchorPositioning.ts +18 -0
- package/src/navigation-menu/viewport/NavigationMenuViewport.tsrx +146 -0
- package/src/number-field/decrement/NumberFieldDecrement.tsrx +30 -0
- package/src/number-field/decrement/NumberFieldDecrementDataAttributes.ts +40 -0
- package/src/number-field/group/NumberFieldGroup.tsrx +42 -0
- package/src/number-field/group/NumberFieldGroupDataAttributes.ts +40 -0
- package/src/number-field/increment/NumberFieldIncrement.tsrx +30 -0
- package/src/number-field/increment/NumberFieldIncrementDataAttributes.ts +40 -0
- package/src/number-field/index.parts.ts +7 -0
- package/src/number-field/index.ts +9 -0
- package/src/number-field/input/NumberFieldInput.tsrx +488 -0
- package/src/number-field/input/NumberFieldInputDataAttributes.ts +40 -0
- package/src/number-field/root/NumberFieldRoot.tsrx +735 -0
- package/src/number-field/root/NumberFieldRootContext.ts +52 -0
- package/src/number-field/root/NumberFieldRootDataAttributes.ts +40 -0
- package/src/number-field/root/useNumberFieldStepperButton.ts +191 -0
- package/src/number-field/scrub-area/NumberFieldScrubArea.tsrx +395 -0
- package/src/number-field/scrub-area/NumberFieldScrubAreaContext.ts +24 -0
- package/src/number-field/scrub-area/NumberFieldScrubAreaDataAttributes.ts +40 -0
- package/src/number-field/scrub-area-cursor/NumberFieldScrubAreaCursor.tsrx +73 -0
- package/src/number-field/scrub-area-cursor/NumberFieldScrubAreaCursorDataAttributes.ts +40 -0
- package/src/number-field/utils/constants.ts +2 -0
- package/src/number-field/utils/getViewportRect.ts +34 -0
- package/src/number-field/utils/parse.ts +221 -0
- package/src/number-field/utils/stateAttributesMapping.ts +9 -0
- package/src/number-field/utils/types.ts +27 -0
- package/src/number-field/utils/validate.ts +136 -0
- package/src/otp-field/index.parts.ts +3 -0
- package/src/otp-field/index.ts +4 -0
- package/src/otp-field/input/OTPFieldInput.tsrx +356 -0
- package/src/otp-field/input/OTPFieldInputDataAttributes.ts +40 -0
- package/src/otp-field/root/OTPFieldRoot.tsrx +679 -0
- package/src/otp-field/root/OTPFieldRootContext.ts +58 -0
- package/src/otp-field/root/OTPFieldRootDataAttributes.ts +40 -0
- package/src/otp-field/utils/otp.ts +118 -0
- package/src/otp-field/utils/stateAttributesMapping.ts +16 -0
- package/src/popover/arrow/PopoverArrow.tsrx +69 -0
- package/src/popover/arrow/PopoverArrowDataAttributes.ts +24 -0
- package/src/popover/backdrop/PopoverBackdrop.tsrx +71 -0
- package/src/popover/backdrop/PopoverBackdropDataAttributes.ts +18 -0
- package/src/popover/close/PopoverClose.tsrx +65 -0
- package/src/popover/description/PopoverDescription.tsrx +46 -0
- package/src/popover/index.parts.ts +15 -0
- package/src/popover/index.ts +16 -0
- package/src/popover/popup/PopoverPopup.tsrx +188 -0
- package/src/popover/popup/PopoverPopupCssVars.ts +8 -0
- package/src/popover/popup/PopoverPopupDataAttributes.ts +33 -0
- package/src/popover/portal/PopoverPortal.tsrx +54 -0
- package/src/popover/portal/PopoverPortalContext.ts +13 -0
- package/src/popover/positioner/PopoverPositioner.tsrx +196 -0
- package/src/popover/positioner/PopoverPositionerContext.ts +28 -0
- package/src/popover/positioner/PopoverPositionerCssVars.ts +37 -0
- package/src/popover/positioner/PopoverPositionerDataAttributes.ts +24 -0
- package/src/popover/root/PopoverRoot.tsrx +262 -0
- package/src/popover/root/PopoverRootContext.ts +20 -0
- package/src/popover/store/PopoverHandle.ts +54 -0
- package/src/popover/store/PopoverStore.ts +229 -0
- package/src/popover/title/PopoverTitle.tsrx +46 -0
- package/src/popover/trigger/PopoverTrigger.tsrx +233 -0
- package/src/popover/trigger/PopoverTriggerDataAttributes.ts +14 -0
- package/src/popover/utils/constants.ts +1 -0
- package/src/popover/viewport/PopoverViewport.tsrx +75 -0
- package/src/popover/viewport/PopoverViewportCssVars.ts +12 -0
- package/src/popover/viewport/PopoverViewportDataAttributes.ts +24 -0
- package/src/preview-card/arrow/PreviewCardArrow.tsrx +70 -0
- package/src/preview-card/arrow/PreviewCardArrowDataAttributes.ts +24 -0
- package/src/preview-card/backdrop/PreviewCardBackdrop.tsrx +73 -0
- package/src/preview-card/backdrop/PreviewCardBackdropDataAttributes.ts +18 -0
- package/src/preview-card/index.parts.ts +12 -0
- package/src/preview-card/index.ts +16 -0
- package/src/preview-card/popup/PreviewCardPopup.tsrx +104 -0
- package/src/preview-card/popup/PreviewCardPopupDataAttributes.ts +28 -0
- package/src/preview-card/portal/PreviewCardPortal.tsrx +59 -0
- package/src/preview-card/portal/PreviewCardPortalContext.ts +13 -0
- package/src/preview-card/positioner/PreviewCardPositioner.tsrx +145 -0
- package/src/preview-card/positioner/PreviewCardPositionerContext.ts +24 -0
- package/src/preview-card/positioner/PreviewCardPositionerCssVars.ts +37 -0
- package/src/preview-card/positioner/PreviewCardPositionerDataAttributes.ts +24 -0
- package/src/preview-card/root/PreviewCardContext.ts +23 -0
- package/src/preview-card/root/PreviewCardRoot.tsrx +210 -0
- package/src/preview-card/store/PreviewCardHandle.ts +58 -0
- package/src/preview-card/store/PreviewCardStore.ts +140 -0
- package/src/preview-card/trigger/PreviewCardTrigger.tsrx +148 -0
- package/src/preview-card/trigger/PreviewCardTriggerDataAttributes.ts +6 -0
- package/src/preview-card/utils/constants.ts +2 -0
- package/src/preview-card/viewport/PreviewCardViewport.tsrx +78 -0
- package/src/preview-card/viewport/PreviewCardViewportCssVars.ts +12 -0
- package/src/preview-card/viewport/PreviewCardViewportDataAttributes.ts +24 -0
- package/src/progress/index.parts.ts +7 -0
- package/src/progress/index.ts +7 -0
- package/src/progress/indicator/ProgressIndicator.tsrx +59 -0
- package/src/progress/indicator/ProgressIndicatorDataAttributes.ts +12 -0
- package/src/progress/label/ProgressLabel.tsrx +51 -0
- package/src/progress/label/ProgressLabelDataAttributes.ts +12 -0
- package/src/progress/root/ProgressRoot.tsrx +154 -0
- package/src/progress/root/ProgressRootContext.tsrx +37 -0
- package/src/progress/root/ProgressRootDataAttributes.ts +12 -0
- package/src/progress/root/stateAttributesMapping.ts +18 -0
- package/src/progress/track/ProgressTrack.tsrx +42 -0
- package/src/progress/track/ProgressTrackDataAttributes.ts +12 -0
- package/src/progress/value/ProgressValue.tsrx +62 -0
- package/src/progress/value/ProgressValueDataAttributes.ts +12 -0
- package/src/radio/index.parts.ts +2 -0
- package/src/radio/index.ts +4 -0
- package/src/radio/indicator/RadioIndicator.tsrx +84 -0
- package/src/radio/indicator/RadioIndicatorDataAttributes.ts +54 -0
- package/src/radio/root/RadioRoot.tsrx +337 -0
- package/src/radio/root/RadioRootContext.ts +19 -0
- package/src/radio/root/RadioRootDataAttributes.ts +44 -0
- package/src/radio/utils/stateAttributesMapping.ts +20 -0
- package/src/radio-group/RadioGroup.tsrx +337 -0
- package/src/radio-group/RadioGroupContext.ts +29 -0
- package/src/radio-group/RadioGroupDataAttributes.ts +4 -0
- package/src/radio-group/index.ts +3 -0
- package/src/scroll-area/constants.ts +2 -0
- package/src/scroll-area/content/ScrollAreaContent.tsrx +90 -0
- package/src/scroll-area/content/ScrollAreaContentDataAttributes.ts +28 -0
- package/src/scroll-area/corner/ScrollAreaCorner.tsrx +54 -0
- package/src/scroll-area/index.parts.ts +6 -0
- package/src/scroll-area/index.ts +8 -0
- package/src/scroll-area/root/ScrollAreaRoot.tsrx +424 -0
- package/src/scroll-area/root/ScrollAreaRootContext.ts +61 -0
- package/src/scroll-area/root/ScrollAreaRootCssVars.ts +10 -0
- package/src/scroll-area/root/ScrollAreaRootDataAttributes.ts +28 -0
- package/src/scroll-area/root/stateAttributes.ts +15 -0
- package/src/scroll-area/scrollbar/ScrollAreaScrollbar.tsrx +275 -0
- package/src/scroll-area/scrollbar/ScrollAreaScrollbarContext.ts +19 -0
- package/src/scroll-area/scrollbar/ScrollAreaScrollbarCssVars.ts +10 -0
- package/src/scroll-area/scrollbar/ScrollAreaScrollbarDataAttributes.ts +37 -0
- package/src/scroll-area/thumb/ScrollAreaThumb.tsrx +80 -0
- package/src/scroll-area/thumb/ScrollAreaThumbDataAttributes.ts +9 -0
- package/src/scroll-area/utils/getOffset.ts +21 -0
- package/src/scroll-area/viewport/ScrollAreaViewport.tsrx +492 -0
- package/src/scroll-area/viewport/ScrollAreaViewportContext.ts +21 -0
- package/src/scroll-area/viewport/ScrollAreaViewportCssVars.ts +20 -0
- package/src/scroll-area/viewport/ScrollAreaViewportDataAttributes.ts +28 -0
- package/src/select/arrow/SelectArrow.tsrx +75 -0
- package/src/select/arrow/SelectArrowDataAttributes.ts +24 -0
- package/src/select/backdrop/SelectBackdrop.tsrx +77 -0
- package/src/select/backdrop/SelectBackdropDataAttributes.ts +18 -0
- package/src/select/group/SelectGroup.tsrx +52 -0
- package/src/select/group/SelectGroupContext.ts +20 -0
- package/src/select/group-label/SelectGroupLabel.tsrx +49 -0
- package/src/select/icon/SelectIcon.tsrx +51 -0
- package/src/select/icon/SelectIconDataAttributes.ts +6 -0
- package/src/select/index.parts.ts +19 -0
- package/src/select/index.ts +21 -0
- package/src/select/item/SelectItem.tsrx +291 -0
- package/src/select/item/SelectItemContext.ts +22 -0
- package/src/select/item/SelectItemDataAttributes.ts +12 -0
- package/src/select/item-indicator/SelectItemIndicator.tsrx +108 -0
- package/src/select/item-indicator/SelectItemIndicatorDataAttributes.ts +10 -0
- package/src/select/item-text/SelectItemText.tsrx +56 -0
- package/src/select/label/SelectLabel.tsrx +64 -0
- package/src/select/list/SelectList.tsrx +62 -0
- package/src/select/popup/SelectPopup.tsrx +596 -0
- package/src/select/popup/SelectPopupDataAttributes.ts +28 -0
- package/src/select/popup/utils.ts +13 -0
- package/src/select/portal/SelectPortal.tsrx +45 -0
- package/src/select/positioner/SelectPositioner.tsrx +268 -0
- package/src/select/positioner/SelectPositionerContext.ts +26 -0
- package/src/select/positioner/SelectPositionerCssVars.ts +25 -0
- package/src/select/positioner/SelectPositionerDataAttributes.ts +24 -0
- package/src/select/root/SelectRoot.tsrx +752 -0
- package/src/select/root/SelectRootContext.ts +57 -0
- package/src/select/scroll-arrow/SelectScrollArrow.tsrx +236 -0
- package/src/select/scroll-down-arrow/SelectScrollDownArrow.tsrx +37 -0
- package/src/select/scroll-down-arrow/SelectScrollDownArrowDataAttributes.ts +24 -0
- package/src/select/scroll-up-arrow/SelectScrollUpArrow.tsrx +37 -0
- package/src/select/scroll-up-arrow/SelectScrollUpArrowDataAttributes.ts +24 -0
- package/src/select/separator/SelectSeparator.tsrx +34 -0
- package/src/select/store.ts +155 -0
- package/src/select/trigger/SelectTrigger.tsrx +270 -0
- package/src/select/trigger/SelectTriggerDataAttributes.ts +55 -0
- package/src/select/value/SelectValue.tsrx +112 -0
- package/src/select/value/SelectValueDataAttributes.ts +4 -0
- package/src/separator/Separator.tsrx +49 -0
- package/src/separator/SeparatorDataAttributes.ts +5 -0
- package/src/separator/index.ts +3 -0
- package/src/slider/control/SliderControl.tsrx +540 -0
- package/src/slider/control/SliderControlDataAttributes.ts +33 -0
- package/src/slider/index.parts.ts +7 -0
- package/src/slider/index.ts +9 -0
- package/src/slider/indicator/SliderIndicator.tsrx +102 -0
- package/src/slider/indicator/SliderIndicatorDataAttributes.ts +33 -0
- package/src/slider/label/SliderLabel.tsrx +71 -0
- package/src/slider/root/SliderRoot.tsrx +610 -0
- package/src/slider/root/SliderRootContext.ts +115 -0
- package/src/slider/root/SliderRootDataAttributes.ts +33 -0
- package/src/slider/root/stateAttributesMapping.ts +15 -0
- package/src/slider/thumb/SliderThumb.tsrx +567 -0
- package/src/slider/thumb/SliderThumbDataAttributes.ts +37 -0
- package/src/slider/thumb/prehydrationScript.min.ts +5 -0
- package/src/slider/track/SliderTrack.tsrx +49 -0
- package/src/slider/track/SliderTrackDataAttributes.ts +33 -0
- package/src/slider/utils/asc.ts +3 -0
- package/src/slider/utils/getMidpoint.ts +4 -0
- package/src/slider/utils/getPushedThumbValues.ts +60 -0
- package/src/slider/utils/getSliderValue.ts +22 -0
- package/src/slider/utils/resolveThumbCollision.ts +154 -0
- package/src/slider/utils/roundValueToStep.ts +21 -0
- package/src/slider/utils/test-utils.ts +18 -0
- package/src/slider/utils/validateMinimumDistance.ts +17 -0
- package/src/slider/value/SliderValue.tsrx +82 -0
- package/src/slider/value/SliderValueDataAttributes.ts +33 -0
- package/src/switch/index.parts.ts +2 -0
- package/src/switch/index.ts +4 -0
- package/src/switch/root/SwitchRoot.tsrx +335 -0
- package/src/switch/root/SwitchRootContext.ts +19 -0
- package/src/switch/root/SwitchRootDataAttributes.ts +44 -0
- package/src/switch/stateAttributesMapping.ts +15 -0
- package/src/switch/thumb/SwitchThumb.tsrx +40 -0
- package/src/switch/thumb/SwitchThumbDataAttributes.ts +44 -0
- package/src/tabs/index.parts.ts +5 -0
- package/src/tabs/index.ts +21 -0
- package/src/tabs/indicator/TabsIndicator.tsrx +292 -0
- package/src/tabs/indicator/TabsIndicatorCssVars.ts +30 -0
- package/src/tabs/indicator/TabsIndicatorDataAttributes.ts +10 -0
- package/src/tabs/indicator/prehydrationScript.min.ts +5 -0
- package/src/tabs/list/TabsList.tsrx +153 -0
- package/src/tabs/list/TabsListContext.ts +23 -0
- package/src/tabs/list/TabsListDataAttributes.ts +10 -0
- package/src/tabs/panel/TabsPanel.tsrx +145 -0
- package/src/tabs/panel/TabsPanelDataAttributes.ts +28 -0
- package/src/tabs/root/TabsRoot.tsrx +477 -0
- package/src/tabs/root/TabsRootContext.ts +55 -0
- package/src/tabs/root/TabsRootDataAttributes.ts +10 -0
- package/src/tabs/root/stateAttributesMapping.ts +9 -0
- package/src/tabs/tab/TabsTab.tsrx +280 -0
- package/src/tabs/tab/TabsTabDataAttributes.ts +18 -0
- package/src/toast/action/ToastAction.tsrx +72 -0
- package/src/toast/action/ToastActionDataAttributes.ts +5 -0
- package/src/toast/arrow/ToastArrow.tsrx +57 -0
- package/src/toast/arrow/ToastArrowDataAttributes.ts +16 -0
- package/src/toast/close/ToastClose.tsrx +79 -0
- package/src/toast/close/ToastCloseDataAttributes.ts +5 -0
- package/src/toast/content/ToastContent.tsrx +76 -0
- package/src/toast/content/ToastContentDataAttributes.ts +10 -0
- package/src/toast/createToastManager.ts +104 -0
- package/src/toast/description/ToastDescription.tsrx +54 -0
- package/src/toast/description/ToastDescriptionDataAttributes.ts +5 -0
- package/src/toast/index.parts.ts +14 -0
- package/src/toast/index.ts +18 -0
- package/src/toast/portal/ToastPortal.tsrx +33 -0
- package/src/toast/positioner/ToastPositioner.tsrx +154 -0
- package/src/toast/positioner/ToastPositionerContext.ts +23 -0
- package/src/toast/positioner/ToastPositionerCssVars.ts +25 -0
- package/src/toast/positioner/ToastPositionerDataAttributes.ts +16 -0
- package/src/toast/provider/ToastProvider.tsrx +109 -0
- package/src/toast/provider/ToastProviderContext.ts +16 -0
- package/src/toast/root/ToastRoot.tsrx +563 -0
- package/src/toast/root/ToastRootContext.ts +25 -0
- package/src/toast/root/ToastRootCssVars.ts +25 -0
- package/src/toast/root/ToastRootDataAttributes.ts +35 -0
- package/src/toast/store.ts +527 -0
- package/src/toast/title/ToastTitle.tsrx +53 -0
- package/src/toast/title/ToastTitleDataAttributes.ts +5 -0
- package/src/toast/useToastManager.ts +150 -0
- package/src/toast/utils/focusVisible.ts +1 -0
- package/src/toast/utils/isRenderableNode.ts +18 -0
- package/src/toast/utils/resolvePromiseOptions.ts +22 -0
- package/src/toast/utils/test-utils.tsrx +39 -0
- package/src/toast/utils/useToastLabelPart.ts +53 -0
- package/src/toast/viewport/ToastViewport.tsrx +293 -0
- package/src/toast/viewport/ToastViewportCssVars.ts +5 -0
- package/src/toast/viewport/ToastViewportDataAttributes.ts +5 -0
- package/src/toggle/Toggle.tsrx +198 -0
- package/src/toggle/ToggleDataAttributes.ts +8 -0
- package/src/toggle/index.ts +3 -0
- package/src/toggle-group/ToggleGroup.tsrx +201 -0
- package/src/toggle-group/ToggleGroupContext.ts +28 -0
- package/src/toggle-group/ToggleGroupDataAttributes.ts +13 -0
- package/src/toggle-group/index.ts +3 -0
- package/src/toolbar/button/ToolbarButton.tsrx +108 -0
- package/src/toolbar/button/ToolbarButtonDataAttributes.ts +13 -0
- package/src/toolbar/group/ToolbarGroup.tsrx +69 -0
- package/src/toolbar/group/ToolbarGroupContext.ts +13 -0
- package/src/toolbar/group/ToolbarGroupDataAttributes.ts +9 -0
- package/src/toolbar/index.parts.ts +8 -0
- package/src/toolbar/index.ts +9 -0
- package/src/toolbar/input/ToolbarInput.tsrx +108 -0
- package/src/toolbar/input/ToolbarInputDataAttributes.ts +13 -0
- package/src/toolbar/link/ToolbarLink.tsrx +64 -0
- package/src/toolbar/link/ToolbarLinkDataAttributes.ts +5 -0
- package/src/toolbar/root/ToolbarRoot.tsrx +121 -0
- package/src/toolbar/root/ToolbarRootContext.ts +24 -0
- package/src/toolbar/root/ToolbarRootDataAttributes.ts +9 -0
- package/src/toolbar/separator/ToolbarSeparator.tsrx +37 -0
- package/src/toolbar/separator/ToolbarSeparatorDataAttributes.ts +5 -0
- package/src/tooltip/arrow/TooltipArrow.tsrx +76 -0
- package/src/tooltip/arrow/TooltipArrowDataAttributes.ts +29 -0
- package/src/tooltip/index.parts.ts +12 -0
- package/src/tooltip/index.ts +13 -0
- package/src/tooltip/popup/TooltipPopup.tsrx +108 -0
- package/src/tooltip/popup/TooltipPopupDataAttributes.ts +33 -0
- package/src/tooltip/portal/TooltipPortal.tsrx +54 -0
- package/src/tooltip/portal/TooltipPortalContext.ts +13 -0
- package/src/tooltip/positioner/TooltipPositioner.tsrx +150 -0
- package/src/tooltip/positioner/TooltipPositionerContext.ts +23 -0
- package/src/tooltip/positioner/TooltipPositionerCssVars.ts +37 -0
- package/src/tooltip/positioner/TooltipPositionerDataAttributes.ts +24 -0
- package/src/tooltip/provider/TooltipProvider.tsrx +49 -0
- package/src/tooltip/provider/TooltipProviderContext.ts +12 -0
- package/src/tooltip/root/TooltipRoot.tsrx +282 -0
- package/src/tooltip/root/TooltipRootContext.ts +21 -0
- package/src/tooltip/store/TooltipHandle.ts +54 -0
- package/src/tooltip/store/TooltipStore.ts +148 -0
- package/src/tooltip/trigger/TooltipTrigger.tsrx +351 -0
- package/src/tooltip/trigger/TooltipTriggerDataAttributes.ts +10 -0
- package/src/tooltip/utils/constants.ts +1 -0
- package/src/tooltip/viewport/TooltipViewport.tsrx +75 -0
- package/src/tooltip/viewport/TooltipViewportCssVars.ts +12 -0
- package/src/tooltip/viewport/TooltipViewportDataAttributes.ts +24 -0
- package/src/types/index.ts +29 -0
- package/src/unstable-use-media-query/index.ts +94 -0
- package/src/use-render/index.ts +2 -0
- package/src/use-render/useRender.ts +113 -0
- package/src/utils/CommonPopupCssVars.ts +12 -0
- package/src/utils/CommonPopupDataAttributes.ts +38 -0
- package/src/utils/CommonPositionerCssVars.ts +37 -0
- package/src/utils/CommonTriggerDataAttributes.ts +9 -0
- package/src/utils/CommonViewportDataAttributes.ts +7 -0
- package/src/utils/FloatingPortalLite.tsrx +51 -0
- package/src/utils/FocusGuard.tsrx +44 -0
- package/src/utils/InternalBackdrop.tsrx +50 -0
- package/src/utils/NullStore.ts +26 -0
- package/src/utils/adaptiveOriginConstants.ts +12 -0
- package/src/utils/adaptiveOriginMiddleware.ts +5 -14
- package/src/utils/closePart.tsrx +37 -0
- package/src/utils/collapsibleOpenStateMapping.ts +28 -23
- package/src/utils/dispatchClickWithModifiers.ts +36 -0
- package/src/utils/getCssDimensions.ts +11 -15
- package/src/utils/getElementAtPoint.ts +12 -0
- package/src/utils/getElementTransform.ts +33 -0
- package/src/utils/getPseudoElementBounds.ts +22 -7
- package/src/utils/hideMiddleware.ts +15 -12
- package/src/utils/listbox-separator/ListboxSeparator.tsrx +47 -0
- package/src/utils/mergeStyles.ts +15 -0
- package/src/utils/popupStateMapping.ts +57 -35
- package/src/utils/popups/index.ts +4 -8
- package/src/utils/popups/inlineRect.ts +19 -16
- package/src/utils/popups/popupHandle.ts +291 -0
- package/src/utils/popups/popupStoreUtils.ts +482 -320
- package/src/utils/popups/popupTriggerMap.ts +102 -28
- package/src/utils/popups/store.ts +146 -66
- package/src/utils/popups/usePopupHandleStore.ts +37 -0
- package/src/utils/popups/useTriggerFocusGuards.ts +36 -21
- package/src/utils/resolveAriaLabelledBy.ts +2 -1
- package/src/utils/resolveClassName.ts +8 -3
- package/src/utils/resolveRef.ts +8 -4
- package/src/utils/resolveStyle.ts +10 -6
- package/src/utils/scrollEdges.ts +33 -0
- package/src/utils/scrollable.ts +77 -0
- package/src/utils/styles.tsrx +15 -0
- package/src/utils/useAnchoredPopupScrollLock.ts +31 -37
- package/src/utils/useFocusableWhenDisabled.ts +81 -65
- package/src/utils/useIsHydrating.ts +12 -15
- package/src/utils/useMixedToggleClickHandler.ts +45 -60
- package/src/utils/useOpenInteractionType.ts +43 -45
- package/src/utils/usePopupAutoResize.ts +198 -207
- package/src/utils/usePopupViewport.tsrx +396 -0
- package/src/utils/usePositioner.tsrx +50 -0
- package/src/utils/useRegisteredLabelId.ts +16 -27
- package/src/utils/useSwipeDismiss.ts +1161 -0
- package/src/utils/valueToPercent.ts +1 -2
- package/dist/cjs/accordion.cjs +0 -497
- package/dist/cjs/alert-dialog.cjs +0 -65
- package/dist/cjs/avatar.cjs +0 -234
- package/dist/cjs/button.cjs +0 -54
- package/dist/cjs/checkbox-group.cjs +0 -165
- package/dist/cjs/checkbox.cjs +0 -475
- package/dist/cjs/collapsible.cjs +0 -700
- package/dist/cjs/context-menu.cjs +0 -257
- package/dist/cjs/csp-provider.cjs +0 -40
- package/dist/cjs/dialog.cjs +0 -741
- package/dist/cjs/direction-provider.cjs +0 -35
- package/dist/cjs/field.cjs +0 -559
- package/dist/cjs/fieldset.cjs +0 -101
- package/dist/cjs/form.cjs +0 -177
- package/dist/cjs/index.cjs +0 -133
- package/dist/cjs/input.cjs +0 -32
- package/dist/cjs/internal.cjs +0 -43
- package/dist/cjs/menu.cjs +0 -2420
- package/dist/cjs/menubar.cjs +0 -132
- package/dist/cjs/merge-props.cjs +0 -34
- package/dist/cjs/meter.cjs +0 -169
- package/dist/cjs/number-field.cjs +0 -812
- package/dist/cjs/popover.cjs +0 -966
- package/dist/cjs/preview-card.cjs +0 -632
- package/dist/cjs/progress.cjs +0 -206
- package/dist/cjs/radio-group.cjs +0 -264
- package/dist/cjs/radio.cjs +0 -327
- package/dist/cjs/separator.cjs +0 -44
- package/dist/cjs/slider.cjs +0 -1384
- package/dist/cjs/switch.cjs +0 -306
- package/dist/cjs/tabs.cjs +0 -727
- package/dist/cjs/toast.cjs +0 -1766
- package/dist/cjs/toggle-group.cjs +0 -118
- package/dist/cjs/toggle.cjs +0 -121
- package/dist/cjs/tooltip.cjs +0 -835
- package/dist/cjs/unstable-use-media-query.cjs +0 -79
- package/dist/cjs/use-render.cjs +0 -40
- package/dist/cjs/utils/CSPContext.cjs +0 -38
- package/dist/cjs/utils/CheckboxGroupContext.cjs +0 -40
- package/dist/cjs/utils/CompositeRootContext.cjs +0 -40
- package/dist/cjs/utils/ContextMenuRootContext.cjs +0 -42
- package/dist/cjs/utils/DirectionContext.cjs +0 -34
- package/dist/cjs/utils/FloatingPortalLite.cjs +0 -47
- package/dist/cjs/utils/InternalBackdrop.cjs +0 -49
- package/dist/cjs/utils/MenubarContext.cjs +0 -40
- package/dist/cjs/utils/RadioGroupContext.cjs +0 -34
- package/dist/cjs/utils/RequestQueue.cjs +0 -111
- package/dist/cjs/utils/TimeoutManager.cjs +0 -50
- package/dist/cjs/utils/ToggleGroupContext.cjs +0 -40
- package/dist/cjs/utils/adaptiveOriginMiddleware.cjs +0 -94
- package/dist/cjs/utils/addEventListener.cjs +0 -33
- package/dist/cjs/utils/areArraysEqual.cjs +0 -30
- package/dist/cjs/utils/clamp.cjs +0 -30
- package/dist/cjs/utils/closePart.cjs +0 -70
- package/dist/cjs/utils/collapsibleOpenStateMapping.cjs +0 -42
- package/dist/cjs/utils/composeRefs.cjs +0 -68
- package/dist/cjs/utils/composite/CompositeItem.cjs +0 -59
- package/dist/cjs/utils/composite/CompositeList.cjs +0 -177
- package/dist/cjs/utils/composite/CompositeListContext.cjs +0 -43
- package/dist/cjs/utils/composite/CompositeRoot.cjs +0 -118
- package/dist/cjs/utils/composite/grid-utils.cjs +0 -343
- package/dist/cjs/utils/composite/gridNavigation.cjs +0 -92
- package/dist/cjs/utils/composite/keys.cjs +0 -174
- package/dist/cjs/utils/composite/list-utils.cjs +0 -90
- package/dist/cjs/utils/composite/useCompositeItem.cjs +0 -63
- package/dist/cjs/utils/composite/useCompositeListItem.cjs +0 -104
- package/dist/cjs/utils/composite/useCompositeRoot.cjs +0 -263
- package/dist/cjs/utils/constants.cjs +0 -56
- package/dist/cjs/utils/contains.cjs +0 -46
- package/dist/cjs/utils/createChangeEventDetails.cjs +0 -92
- package/dist/cjs/utils/dom.cjs +0 -35
- package/dist/cjs/utils/empty.cjs +0 -34
- package/dist/cjs/utils/field/FieldItemContext.cjs +0 -34
- package/dist/cjs/utils/field/FieldRootContext.cjs +0 -80
- package/dist/cjs/utils/field/FormContext.cjs +0 -41
- package/dist/cjs/utils/field/LabelableContext.cjs +0 -43
- package/dist/cjs/utils/field/LabelableProvider.cjs +0 -115
- package/dist/cjs/utils/field/constants.cjs +0 -68
- package/dist/cjs/utils/field/getCombinedFieldValidityData.cjs +0 -36
- package/dist/cjs/utils/field/useAriaLabelledBy.cjs +0 -87
- package/dist/cjs/utils/field/useFieldControlRegistration.cjs +0 -165
- package/dist/cjs/utils/field/useFieldValidation.cjs +0 -285
- package/dist/cjs/utils/field/useLabel.cjs +0 -99
- package/dist/cjs/utils/field/useLabelableId.cjs +0 -105
- package/dist/cjs/utils/field/useRegisterFieldControl.cjs +0 -60
- package/dist/cjs/utils/findRootOwnerId.cjs +0 -37
- package/dist/cjs/utils/floating/FloatingDelayGroup.cjs +0 -219
- package/dist/cjs/utils/floating/FloatingFocusManager.cjs +0 -685
- package/dist/cjs/utils/floating/FloatingPortal.cjs +0 -230
- package/dist/cjs/utils/floating/FloatingRootStore.cjs +0 -87
- package/dist/cjs/utils/floating/FloatingTree.cjs +0 -86
- package/dist/cjs/utils/floating/FloatingTreeStore.cjs +0 -41
- package/dist/cjs/utils/floating/FocusGuard.cjs +0 -54
- package/dist/cjs/utils/floating/composite.cjs +0 -42
- package/dist/cjs/utils/floating/constants.cjs +0 -34
- package/dist/cjs/utils/floating/createAttribute.cjs +0 -30
- package/dist/cjs/utils/floating/createEventEmitter.cjs +0 -44
- package/dist/cjs/utils/floating/element.cjs +0 -103
- package/dist/cjs/utils/floating/enqueueFocus.cjs +0 -51
- package/dist/cjs/utils/floating/event.cjs +0 -65
- package/dist/cjs/utils/floating/getEmptyRootContext.cjs +0 -42
- package/dist/cjs/utils/floating/gridNavigation.cjs +0 -45
- package/dist/cjs/utils/floating/markOthers.cjs +0 -181
- package/dist/cjs/utils/floating/nodes.cjs +0 -48
- package/dist/cjs/utils/floating/safePolygon.cjs +0 -301
- package/dist/cjs/utils/floating/tabbable.cjs +0 -242
- package/dist/cjs/utils/floating/types.cjs +0 -16
- package/dist/cjs/utils/floating/useClick.cjs +0 -153
- package/dist/cjs/utils/floating/useClientPoint.cjs +0 -225
- package/dist/cjs/utils/floating/useDismiss.cjs +0 -506
- package/dist/cjs/utils/floating/useFloating.cjs +0 -186
- package/dist/cjs/utils/floating/useFloatingRootContext.cjs +0 -75
- package/dist/cjs/utils/floating/useFocus.cjs +0 -184
- package/dist/cjs/utils/floating/useHoverFloatingInteraction.cjs +0 -231
- package/dist/cjs/utils/floating/useHoverInteractionSharedState.cjs +0 -113
- package/dist/cjs/utils/floating/useHoverReferenceInteraction.cjs +0 -380
- package/dist/cjs/utils/floating/useHoverShared.cjs +0 -65
- package/dist/cjs/utils/floating/useListNavigation.cjs +0 -665
- package/dist/cjs/utils/floating/useSyncedFloatingRootContext.cjs +0 -91
- package/dist/cjs/utils/floating/useTypeahead.cjs +0 -187
- package/dist/cjs/utils/formatNumber.cjs +0 -60
- package/dist/cjs/utils/generateId.cjs +0 -32
- package/dist/cjs/utils/getCssDimensions.cjs +0 -42
- package/dist/cjs/utils/getDefaultFormSubmitter.cjs +0 -42
- package/dist/cjs/utils/getDisabledMountTransitionStyles.cjs +0 -32
- package/dist/cjs/utils/getElementRef.cjs +0 -35
- package/dist/cjs/utils/getPseudoElementBounds.cjs +0 -56
- package/dist/cjs/utils/getStateAttributesProps.cjs +0 -46
- package/dist/cjs/utils/hideMiddleware.cjs +0 -42
- package/dist/cjs/utils/inertValue.cjs +0 -30
- package/dist/cjs/utils/matchesFocusVisible.cjs +0 -38
- package/dist/cjs/utils/mergeCleanups.cjs +0 -37
- package/dist/cjs/utils/mergeObjects.cjs +0 -39
- package/dist/cjs/utils/mergeProps.cjs +0 -182
- package/dist/cjs/utils/noop.cjs +0 -29
- package/dist/cjs/utils/number/constants.cjs +0 -34
- package/dist/cjs/utils/number/parse.cjs +0 -258
- package/dist/cjs/utils/number/types.cjs +0 -16
- package/dist/cjs/utils/number/validate.cjs +0 -104
- package/dist/cjs/utils/owner.cjs +0 -35
- package/dist/cjs/utils/platform.cjs +0 -83
- package/dist/cjs/utils/popupStateMapping.cjs +0 -74
- package/dist/cjs/utils/popups/index.cjs +0 -39
- package/dist/cjs/utils/popups/inlineRect.cjs +0 -218
- package/dist/cjs/utils/popups/popupStoreUtils.cjs +0 -379
- package/dist/cjs/utils/popups/popupTriggerMap.cjs +0 -76
- package/dist/cjs/utils/popups/store.cjs +0 -118
- package/dist/cjs/utils/popups/useTriggerFocusGuards.cjs +0 -72
- package/dist/cjs/utils/resolveAriaLabelledBy.cjs +0 -35
- package/dist/cjs/utils/resolveClassName.cjs +0 -30
- package/dist/cjs/utils/resolveRef.cjs +0 -33
- package/dist/cjs/utils/resolveStyle.cjs +0 -30
- package/dist/cjs/utils/serializeValue.cjs +0 -40
- package/dist/cjs/utils/slider/asc.cjs +0 -30
- package/dist/cjs/utils/slider/getMidpoint.cjs +0 -34
- package/dist/cjs/utils/slider/getPushedThumbValues.cjs +0 -73
- package/dist/cjs/utils/slider/getSliderValue.cjs +0 -42
- package/dist/cjs/utils/slider/replaceArrayItemAtIndex.cjs +0 -33
- package/dist/cjs/utils/slider/resolveThumbCollision.cjs +0 -155
- package/dist/cjs/utils/slider/roundValueToStep.cjs +0 -45
- package/dist/cjs/utils/slider/validateMinimumDistance.cjs +0 -40
- package/dist/cjs/utils/slider/valueArrayToPercentages.cjs +0 -36
- package/dist/cjs/utils/store/ReactStore.cjs +0 -135
- package/dist/cjs/utils/store/Store.cjs +0 -83
- package/dist/cjs/utils/store/createSelector.cjs +0 -74
- package/dist/cjs/utils/store/useStore.cjs +0 -51
- package/dist/cjs/utils/stringifyLocale.cjs +0 -36
- package/dist/cjs/utils/useAnchorPositioning.cjs +0 -421
- package/dist/cjs/utils/useAnchoredPopupScrollLock.cjs +0 -59
- package/dist/cjs/utils/useAnimationFrame.cjs +0 -93
- package/dist/cjs/utils/useAnimationsFinished.cjs +0 -98
- package/dist/cjs/utils/useBaseUiId.cjs +0 -36
- package/dist/cjs/utils/useButton.cjs +0 -177
- package/dist/cjs/utils/useCheckboxGroupParent.cjs +0 -114
- package/dist/cjs/utils/useControlled.cjs +0 -47
- package/dist/cjs/utils/useEnhancedClickHandler.cjs +0 -60
- package/dist/cjs/utils/useFocusableWhenDisabled.cjs +0 -77
- package/dist/cjs/utils/useForcedRerendering.cjs +0 -35
- package/dist/cjs/utils/useIsHydrating.cjs +0 -44
- package/dist/cjs/utils/useMixedToggleClickHandler.cjs +0 -66
- package/dist/cjs/utils/useOnFirstRender.cjs +0 -35
- package/dist/cjs/utils/useOnMount.cjs +0 -36
- package/dist/cjs/utils/useOpenChangeComplete.cjs +0 -57
- package/dist/cjs/utils/useOpenInteractionType.cjs +0 -69
- package/dist/cjs/utils/usePopupAutoResize.cjs +0 -191
- package/dist/cjs/utils/usePopupViewport.cjs +0 -283
- package/dist/cjs/utils/usePositioner.cjs +0 -53
- package/dist/cjs/utils/usePressAndHold.cjs +0 -51
- package/dist/cjs/utils/usePreviousValue.cjs +0 -47
- package/dist/cjs/utils/useRefWithInit.cjs +0 -41
- package/dist/cjs/utils/useRegisteredLabelId.cjs +0 -48
- package/dist/cjs/utils/useRenderElement.cjs +0 -106
- package/dist/cjs/utils/useScrollLock.cjs +0 -232
- package/dist/cjs/utils/useStableCallback.cjs +0 -41
- package/dist/cjs/utils/useTimeout.cjs +0 -66
- package/dist/cjs/utils/useTransitionStatus.cjs +0 -116
- package/dist/cjs/utils/useValueAsRef.cjs +0 -43
- package/dist/cjs/utils/useValueChanged.cjs +0 -55
- package/dist/cjs/utils/valueToPercent.cjs +0 -30
- package/dist/cjs/utils/visuallyHidden.cjs +0 -49
- package/src/accordion.ts +0 -615
- package/src/alert-dialog.ts +0 -49
- package/src/avatar.ts +0 -308
- package/src/button.ts +0 -63
- package/src/checkbox-group.ts +0 -183
- package/src/checkbox.ts +0 -576
- package/src/collapsible.ts +0 -916
- package/src/context-menu.ts +0 -317
- package/src/csp-provider.ts +0 -37
- package/src/dialog.ts +0 -930
- package/src/direction-provider.ts +0 -32
- package/src/field.ts +0 -650
- package/src/fieldset.ts +0 -150
- package/src/form.ts +0 -183
- package/src/input.ts +0 -9
- package/src/internal.ts +0 -29
- package/src/menu.ts +0 -3387
- package/src/menubar.ts +0 -160
- package/src/merge-props.ts +0 -2
- package/src/meter.ts +0 -211
- package/src/number-field.ts +0 -951
- package/src/popover.ts +0 -1282
- package/src/preview-card.ts +0 -812
- package/src/progress.ts +0 -267
- package/src/radio-group.ts +0 -285
- package/src/radio.ts +0 -393
- package/src/separator.ts +0 -43
- package/src/slider.ts +0 -1624
- package/src/switch.ts +0 -363
- package/src/tabs.ts +0 -947
- package/src/toast.ts +0 -2462
- package/src/toggle-group.ts +0 -136
- package/src/toggle.ts +0 -145
- package/src/tooltip.ts +0 -1053
- package/src/unstable-use-media-query.ts +0 -101
- package/src/use-render.ts +0 -41
- package/src/utils/CSPContext.ts +0 -21
- package/src/utils/CheckboxGroupContext.ts +0 -30
- package/src/utils/CompositeRootContext.ts +0 -27
- package/src/utils/ContextMenuRootContext.ts +0 -44
- package/src/utils/DirectionContext.ts +0 -15
- package/src/utils/FloatingPortalLite.ts +0 -34
- package/src/utils/InternalBackdrop.ts +0 -28
- package/src/utils/MenubarContext.ts +0 -38
- package/src/utils/RadioGroupContext.ts +0 -27
- package/src/utils/RequestQueue.ts +0 -132
- package/src/utils/TimeoutManager.ts +0 -32
- package/src/utils/ToggleGroupContext.ts +0 -33
- package/src/utils/addEventListener.ts +0 -13
- package/src/utils/areArraysEqual.ts +0 -11
- package/src/utils/clamp.ts +0 -8
- package/src/utils/closePart.ts +0 -61
- package/src/utils/composeRefs.ts +0 -53
- package/src/utils/composite/CompositeItem.ts +0 -56
- package/src/utils/composite/CompositeList.ts +0 -190
- package/src/utils/composite/CompositeListContext.ts +0 -23
- package/src/utils/composite/CompositeRoot.ts +0 -132
- package/src/utils/composite/grid-utils.ts +0 -437
- package/src/utils/composite/gridNavigation.ts +0 -127
- package/src/utils/composite/keys.ts +0 -179
- package/src/utils/composite/list-utils.ts +0 -106
- package/src/utils/composite/useCompositeItem.ts +0 -58
- package/src/utils/composite/useCompositeListItem.ts +0 -108
- package/src/utils/composite/useCompositeRoot.ts +0 -344
- package/src/utils/constants.ts +0 -41
- package/src/utils/contains.ts +0 -22
- package/src/utils/createChangeEventDetails.ts +0 -95
- package/src/utils/dom.ts +0 -9
- package/src/utils/empty.ts +0 -7
- package/src/utils/field/FieldItemContext.ts +0 -13
- package/src/utils/field/FieldRootContext.ts +0 -98
- package/src/utils/field/FormContext.ts +0 -37
- package/src/utils/field/LabelableContext.ts +0 -32
- package/src/utils/field/LabelableProvider.ts +0 -108
- package/src/utils/field/constants.ts +0 -80
- package/src/utils/field/getCombinedFieldValidityData.ts +0 -16
- package/src/utils/field/useAriaLabelledBy.ts +0 -86
- package/src/utils/field/useFieldControlRegistration.ts +0 -179
- package/src/utils/field/useFieldValidation.ts +0 -311
- package/src/utils/field/useLabel.ts +0 -95
- package/src/utils/field/useLabelableId.ts +0 -99
- package/src/utils/field/useRegisterFieldControl.ts +0 -41
- package/src/utils/findRootOwnerId.ts +0 -19
- package/src/utils/floating/FloatingDelayGroup.ts +0 -280
- package/src/utils/floating/FloatingFocusManager.ts +0 -837
- package/src/utils/floating/FloatingPortal.ts +0 -280
- package/src/utils/floating/FloatingRootStore.ts +0 -127
- package/src/utils/floating/FloatingTree.ts +0 -70
- package/src/utils/floating/FloatingTreeStore.ts +0 -22
- package/src/utils/floating/FocusGuard.ts +0 -34
- package/src/utils/floating/composite.ts +0 -20
- package/src/utils/floating/constants.ts +0 -8
- package/src/utils/floating/createAttribute.ts +0 -4
- package/src/utils/floating/createEventEmitter.ts +0 -20
- package/src/utils/floating/element.ts +0 -88
- package/src/utils/floating/enqueueFocus.ts +0 -38
- package/src/utils/floating/event.ts +0 -53
- package/src/utils/floating/getEmptyRootContext.ts +0 -19
- package/src/utils/floating/gridNavigation.ts +0 -54
- package/src/utils/floating/markOthers.ts +0 -197
- package/src/utils/floating/nodes.ts +0 -31
- package/src/utils/floating/safePolygon.ts +0 -448
- package/src/utils/floating/tabbable.ts +0 -260
- package/src/utils/floating/types.ts +0 -57
- package/src/utils/floating/useClick.ts +0 -174
- package/src/utils/floating/useClientPoint.ts +0 -276
- package/src/utils/floating/useDismiss.ts +0 -639
- package/src/utils/floating/useFloating.ts +0 -198
- package/src/utils/floating/useFloatingRootContext.ts +0 -81
- package/src/utils/floating/useFocus.ts +0 -248
- package/src/utils/floating/useHoverFloatingInteraction.ts +0 -302
- package/src/utils/floating/useHoverInteractionSharedState.ts +0 -139
- package/src/utils/floating/useHoverReferenceInteraction.ts +0 -510
- package/src/utils/floating/useHoverShared.ts +0 -78
- package/src/utils/floating/useListNavigation.ts +0 -1018
- package/src/utils/floating/useSyncedFloatingRootContext.ts +0 -93
- package/src/utils/floating/useTypeahead.ts +0 -287
- package/src/utils/formatNumber.ts +0 -44
- package/src/utils/generateId.ts +0 -10
- package/src/utils/getDefaultFormSubmitter.ts +0 -19
- package/src/utils/getDisabledMountTransitionStyles.ts +0 -12
- package/src/utils/getElementRef.ts +0 -13
- package/src/utils/getStateAttributesProps.ts +0 -34
- package/src/utils/inertValue.ts +0 -5
- package/src/utils/matchesFocusVisible.ts +0 -16
- package/src/utils/mergeCleanups.ts +0 -13
- package/src/utils/mergeObjects.ts +0 -18
- package/src/utils/mergeProps.ts +0 -206
- package/src/utils/noop.ts +0 -4
- package/src/utils/number/constants.ts +0 -4
- package/src/utils/number/parse.ts +0 -227
- package/src/utils/number/types.ts +0 -21
- package/src/utils/number/validate.ts +0 -129
- package/src/utils/owner.ts +0 -9
- package/src/utils/platform.ts +0 -69
- package/src/utils/serializeValue.ts +0 -15
- package/src/utils/slider/asc.ts +0 -4
- package/src/utils/slider/getMidpoint.ts +0 -14
- package/src/utils/slider/getPushedThumbValues.ts +0 -73
- package/src/utils/slider/getSliderValue.ts +0 -27
- package/src/utils/slider/replaceArrayItemAtIndex.ts +0 -8
- package/src/utils/slider/resolveThumbCollision.ts +0 -178
- package/src/utils/slider/roundValueToStep.ts +0 -22
- package/src/utils/slider/validateMinimumDistance.ts +0 -22
- package/src/utils/slider/valueArrayToPercentages.ts +0 -11
- package/src/utils/store/ReactStore.ts +0 -168
- package/src/utils/store/Store.ts +0 -84
- package/src/utils/store/createSelector.ts +0 -66
- package/src/utils/store/useStore.ts +0 -49
- package/src/utils/stringifyLocale.ts +0 -10
- package/src/utils/useAnchorPositioning.ts +0 -581
- package/src/utils/useAnimationFrame.ts +0 -82
- package/src/utils/useAnimationsFinished.ts +0 -100
- package/src/utils/useBaseUiId.ts +0 -19
- package/src/utils/useButton.ts +0 -217
- package/src/utils/useCheckboxGroupParent.ts +0 -113
- package/src/utils/useControlled.ts +0 -42
- package/src/utils/useEnhancedClickHandler.ts +0 -47
- package/src/utils/useForcedRerendering.ts +0 -11
- package/src/utils/useOnFirstRender.ts +0 -11
- package/src/utils/useOnMount.ts +0 -17
- package/src/utils/useOpenChangeComplete.ts +0 -46
- package/src/utils/usePopupViewport.ts +0 -375
- package/src/utils/usePositioner.ts +0 -48
- package/src/utils/usePressAndHold.ts +0 -35
- package/src/utils/usePreviousValue.ts +0 -33
- package/src/utils/useRefWithInit.ts +0 -23
- package/src/utils/useRenderElement.ts +0 -164
- package/src/utils/useScrollLock.ts +0 -253
- package/src/utils/useStableCallback.ts +0 -26
- package/src/utils/useTimeout.ts +0 -51
- package/src/utils/useTransitionStatus.ts +0 -115
- package/src/utils/useValueAsRef.ts +0 -25
- package/src/utils/useValueChanged.ts +0 -37
- package/src/utils/visuallyHidden.ts +0 -24
|
@@ -1,172 +1,261 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import { EMPTY_OBJECT } from '../empty';
|
|
15
|
-
import { FOCUSABLE_ATTRIBUTE } from '../floating/constants';
|
|
16
|
-
import { useFloatingParentNodeId } from '../floating/FloatingTree';
|
|
17
|
-
import { useSyncedFloatingRootContext } from '../floating/useSyncedFloatingRootContext';
|
|
18
|
-
import { createChangeEventDetails, REASONS } from '../createChangeEventDetails';
|
|
19
|
-
import type { ReactStore } from '../store/ReactStore';
|
|
1
|
+
/** @jsxImportSource octane */
|
|
2
|
+
'use client';
|
|
3
|
+
import * as React from 'octane';
|
|
4
|
+
import * as ReactDOM from 'octane';
|
|
5
|
+
import type { ReactStore } from '@octanejs/base-ui-utils/store';
|
|
6
|
+
import { EMPTY_OBJECT } from '@octanejs/base-ui-utils/empty';
|
|
7
|
+
import type { InteractionType } from '@octanejs/base-ui-utils/useEnhancedClickHandler';
|
|
8
|
+
import { useId } from '@octanejs/base-ui-utils/useId';
|
|
9
|
+
import { useStableCallback } from '@octanejs/base-ui-utils/useStableCallback';
|
|
10
|
+
import { useIsoLayoutEffect } from '@octanejs/base-ui-utils/useIsoLayoutEffect';
|
|
11
|
+
import { useRefWithInit } from '@octanejs/base-ui-utils/useRefWithInit';
|
|
12
|
+
import { FOCUSABLE_ATTRIBUTE } from '../../floating-ui-react/utils/constants';
|
|
13
|
+
import { useFloatingParentNodeId } from '../../floating-ui-react/components/FloatingTree.tsrx';
|
|
20
14
|
import {
|
|
15
|
+
useSyncedFloatingRootContext,
|
|
16
|
+
type SyncedFloatingRootContextStore,
|
|
17
|
+
} from '../../floating-ui-react/hooks/useSyncedFloatingRootContext';
|
|
18
|
+
import { useTransitionStatus } from '../../internals/useTransitionStatus';
|
|
19
|
+
import { useOpenChangeComplete } from '../../internals/useOpenChangeComplete.tsrx';
|
|
20
|
+
import type { HTMLProps } from '../../internals/types';
|
|
21
|
+
import {
|
|
22
|
+
createChangeEventDetails,
|
|
23
|
+
type BaseUIChangeEventDetails,
|
|
24
|
+
} from '../../internals/createBaseUIEventDetails';
|
|
25
|
+
import { REASONS } from '../../internals/reasons';
|
|
26
|
+
import type {
|
|
21
27
|
PopupStoreState,
|
|
22
28
|
PopupStoreContext,
|
|
23
29
|
popupStoreSelectors,
|
|
24
|
-
|
|
30
|
+
PopupTriggerDataStore,
|
|
25
31
|
} from './store';
|
|
26
32
|
|
|
27
|
-
export type InteractionType = 'mouse' | 'touch' | 'pen' | 'keyboard';
|
|
28
|
-
|
|
29
33
|
export const FOCUSABLE_POPUP_PROPS = {
|
|
30
34
|
tabIndex: -1,
|
|
31
35
|
[FOCUSABLE_ATTRIBUTE]: '',
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
|
|
36
|
+
} satisfies HTMLProps<HTMLElement> & Record<typeof FOCUSABLE_ATTRIBUTE, string>;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Returns the default `initialFocus` resolver for a popup. When opened by touch it focuses the
|
|
40
|
+
* popup element itself to prevent the virtual keyboard from opening (required for Android
|
|
41
|
+
* specifically; iOS handles this automatically). Otherwise it falls back to the default behavior.
|
|
42
|
+
*/
|
|
43
|
+
export function createDefaultInitialFocus(popupRef: React.RefObject<HTMLElement | null>) {
|
|
36
44
|
return (interactionType: InteractionType) =>
|
|
37
45
|
interactionType === 'touch' ? popupRef.current : true;
|
|
38
46
|
}
|
|
39
47
|
|
|
40
|
-
type
|
|
41
|
-
|
|
42
|
-
|
|
48
|
+
type PopupStoreWithOpen<
|
|
49
|
+
State extends PopupStoreState<unknown>,
|
|
50
|
+
SetOpenEventDetails extends BaseUIChangeEventDetails<string>,
|
|
51
|
+
> = PopupTriggerDataStore<State> &
|
|
52
|
+
Pick<SyncedFloatingRootContextStore<State>, 'useSyncedValue'> & {
|
|
53
|
+
setOpen(open: boolean, eventDetails: SetOpenEventDetails): void;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* The subset of a popup handle that a Root needs to bind its store to. Both the real handle classes
|
|
58
|
+
* and any test double satisfy it.
|
|
59
|
+
*/
|
|
60
|
+
export interface PopupRootStoreHandle<Store> {
|
|
61
|
+
attachStore(store: Store): () => void;
|
|
62
|
+
}
|
|
43
63
|
|
|
44
|
-
|
|
45
|
-
|
|
64
|
+
/**
|
|
65
|
+
* Creates and owns a popup store on behalf of a Root part. The store is created exactly once, with
|
|
66
|
+
* controlled props and root state synced separately after creation. Sets up the synced floating
|
|
67
|
+
* root context and returns the store.
|
|
68
|
+
*
|
|
69
|
+
* @param createStore Factory that builds the store. Called exactly once, receiving the floating id
|
|
70
|
+
* and whether the popup is nested inside another floating element, both resolved on the first render.
|
|
71
|
+
* @param treatPopupAsFloatingElement Whether the popup element is passed to Floating UI as the
|
|
72
|
+
* floating element instead of the default positioner.
|
|
73
|
+
*/
|
|
74
|
+
export function usePopupRootStore<
|
|
75
|
+
State extends PopupStoreState<unknown>,
|
|
76
|
+
SetOpenEventDetails extends BaseUIChangeEventDetails<string>,
|
|
77
|
+
Store extends PopupStoreWithOpen<State, SetOpenEventDetails>,
|
|
78
|
+
>(
|
|
46
79
|
createStore: (floatingId: string | undefined, nested: boolean) => Store,
|
|
47
|
-
treatPopupAsFloatingElement
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
// Raw `useId` (no `base-ui-` prefix), matching Base UI's `@base-ui/utils/useId`.
|
|
51
|
-
const floatingId = useId(subSlot(slot, 'fid'));
|
|
80
|
+
treatPopupAsFloatingElement = false,
|
|
81
|
+
): Store {
|
|
82
|
+
const floatingId = useId();
|
|
52
83
|
const nested = useFloatingParentNodeId() != null;
|
|
53
84
|
|
|
54
|
-
const
|
|
55
|
-
if (externalStore === undefined && internalStoreRef.current === null) {
|
|
56
|
-
internalStoreRef.current = createStore(floatingId, nested);
|
|
57
|
-
}
|
|
85
|
+
const store = useRefWithInit(() => createStore(floatingId, nested)).current;
|
|
58
86
|
|
|
59
|
-
|
|
87
|
+
useSyncedFloatingRootContext({
|
|
88
|
+
popupStore: store,
|
|
89
|
+
treatPopupAsFloatingElement,
|
|
90
|
+
floatingRootContext: store.state.floatingRootContext,
|
|
91
|
+
floatingId,
|
|
92
|
+
nested,
|
|
93
|
+
onOpenChange: store.setOpen,
|
|
94
|
+
});
|
|
60
95
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
popupStore: store,
|
|
64
|
-
treatPopupAsFloatingElement,
|
|
65
|
-
floatingRootContext: store.state.floatingRootContext,
|
|
66
|
-
floatingId,
|
|
67
|
-
nested,
|
|
68
|
-
onOpenChange: store.setOpen,
|
|
69
|
-
},
|
|
70
|
-
subSlot(slot, 'synced'),
|
|
71
|
-
);
|
|
96
|
+
return store;
|
|
97
|
+
}
|
|
72
98
|
|
|
73
|
-
|
|
99
|
+
/**
|
|
100
|
+
* Attaches a Root's store to a handle for this component's committed lifetime. Popup Roots render
|
|
101
|
+
* it before their interactions and user children so its layout effect runs before descendant layout
|
|
102
|
+
* effects. This lets descendants call the handle during the Root's initial commit without attaching
|
|
103
|
+
* during render, which would leak suspended or abandoned stores. Store subscribers are notified by
|
|
104
|
+
* `attachStore` in this ordinary layout phase, where React permits synchronous updates.
|
|
105
|
+
*
|
|
106
|
+
* Popup Roots must render this component only when a handle is present so handle-less Roots avoid
|
|
107
|
+
* mounting an extra fiber and layout effect.
|
|
108
|
+
*/
|
|
109
|
+
export function PopupHandleAttachment<Store>({
|
|
110
|
+
handle,
|
|
111
|
+
store,
|
|
112
|
+
}: {
|
|
113
|
+
handle: PopupRootStoreHandle<Store>;
|
|
114
|
+
store: Store;
|
|
115
|
+
}) {
|
|
116
|
+
useIsoLayoutEffect(() => {
|
|
117
|
+
return handle.attachStore(store);
|
|
118
|
+
}, [handle, store]);
|
|
119
|
+
|
|
120
|
+
return null;
|
|
74
121
|
}
|
|
75
122
|
|
|
76
|
-
|
|
123
|
+
function syncTriggerCount(store: PopupTriggerDataStore<PopupStoreState<unknown>>) {
|
|
124
|
+
const triggerCount = store.context.triggerElements.size;
|
|
125
|
+
if (store.select('open') && store.state.triggerCount !== triggerCount) {
|
|
126
|
+
store.set('triggerCount', triggerCount);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Returns a stable callback ref that registers/unregisters the trigger element in the store.
|
|
132
|
+
*
|
|
133
|
+
* Stable so a downstream ref merger that retains the callback it was first given still reaches the
|
|
134
|
+
* trigger's current store. The registration is tracked as a `(store, id, element)` triple, so
|
|
135
|
+
* unregistering targets the store the element was actually registered in.
|
|
136
|
+
*
|
|
137
|
+
* Since the callback never changes, the caller must re-run it from a layout effect keyed on
|
|
138
|
+
* `[store, id]` to migrate an already-registered element. That effect is also what registers the
|
|
139
|
+
* element in the first place when `id` only resolves after the first commit (React 17's `useId`
|
|
140
|
+
* fallback), because the register call made while the id is still `undefined` does nothing.
|
|
141
|
+
*
|
|
142
|
+
* @param id Id of the trigger.
|
|
143
|
+
* @param store The Store instance where the trigger should be registered.
|
|
144
|
+
*/
|
|
77
145
|
export function useTriggerRegistration<State extends PopupStoreState<unknown>>(
|
|
78
146
|
id: string | undefined,
|
|
79
|
-
store:
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
(element: Element | null) => {
|
|
87
|
-
if (id === undefined) {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
let shouldSyncTriggerCount = false;
|
|
147
|
+
store: PopupTriggerDataStore<State>,
|
|
148
|
+
) {
|
|
149
|
+
const registrationRef = React.useRef<{
|
|
150
|
+
store: PopupTriggerDataStore<State>;
|
|
151
|
+
id: string;
|
|
152
|
+
element: Element;
|
|
153
|
+
} | null>(null);
|
|
92
154
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
const registeredElement = registeredElementRef.current;
|
|
96
|
-
const currentElement = store.context.triggerElements.getById(registeredId);
|
|
155
|
+
return useStableCallback((element: Element | null) => {
|
|
156
|
+
const registration = registrationRef.current;
|
|
97
157
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
158
|
+
if (registration !== null) {
|
|
159
|
+
if (
|
|
160
|
+
registration.element === element &&
|
|
161
|
+
registration.store === store &&
|
|
162
|
+
registration.id === id
|
|
163
|
+
) {
|
|
164
|
+
// Already registered where it belongs, so the caller's migration effect is free on mount.
|
|
165
|
+
return;
|
|
105
166
|
}
|
|
106
167
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
168
|
+
registrationRef.current = null;
|
|
169
|
+
const registeredStore = registration.store;
|
|
170
|
+
if (
|
|
171
|
+
registeredStore.context.triggerElements.getById(registration.id) === registration.element
|
|
172
|
+
) {
|
|
173
|
+
registeredStore.context.triggerElements.delete(registration.id);
|
|
174
|
+
syncTriggerCount(registeredStore);
|
|
112
175
|
}
|
|
176
|
+
}
|
|
113
177
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
},
|
|
121
|
-
[store, id],
|
|
122
|
-
subSlot(slot, 'cb'),
|
|
123
|
-
);
|
|
178
|
+
if (element !== null && id !== undefined) {
|
|
179
|
+
registrationRef.current = { store, id, element };
|
|
180
|
+
store.context.triggerElements.add(id, element);
|
|
181
|
+
syncTriggerCount(store);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
124
184
|
}
|
|
125
185
|
|
|
126
|
-
|
|
127
|
-
|
|
186
|
+
type PopupOpenState = Pick<
|
|
187
|
+
PopupStoreState<unknown>,
|
|
188
|
+
'open' | 'preventUnmountingOnClose' | 'activeTriggerId' | 'activeTriggerElement'
|
|
189
|
+
>;
|
|
190
|
+
|
|
191
|
+
export function createPopupOpenState(
|
|
192
|
+
state: PopupOpenState,
|
|
128
193
|
open: boolean,
|
|
129
194
|
trigger: Element | undefined,
|
|
130
195
|
preventUnmountOnClose = false,
|
|
131
|
-
) {
|
|
196
|
+
): PopupOpenState {
|
|
197
|
+
let preventUnmountingOnClose = state.preventUnmountingOnClose;
|
|
132
198
|
if (open) {
|
|
133
|
-
|
|
199
|
+
// Opening starts a new close cycle, so clear any previous request to keep the popup mounted.
|
|
200
|
+
preventUnmountingOnClose = false;
|
|
134
201
|
} else if (preventUnmountOnClose) {
|
|
135
|
-
|
|
202
|
+
preventUnmountingOnClose = true;
|
|
136
203
|
}
|
|
137
204
|
|
|
138
205
|
const triggerId = trigger?.id ?? null;
|
|
206
|
+
let activeTriggerId = state.activeTriggerId;
|
|
207
|
+
let activeTriggerElement = state.activeTriggerElement;
|
|
139
208
|
|
|
209
|
+
// If a popup is closing, the `trigger` may be undefined.
|
|
210
|
+
// We want to keep the previous value so that exit animations are played and focus is returned correctly.
|
|
140
211
|
if (triggerId || open) {
|
|
141
|
-
|
|
142
|
-
|
|
212
|
+
activeTriggerId = triggerId;
|
|
213
|
+
activeTriggerElement = trigger ?? null;
|
|
143
214
|
}
|
|
215
|
+
|
|
216
|
+
return {
|
|
217
|
+
open,
|
|
218
|
+
preventUnmountingOnClose,
|
|
219
|
+
activeTriggerId,
|
|
220
|
+
activeTriggerElement,
|
|
221
|
+
};
|
|
144
222
|
}
|
|
145
223
|
|
|
146
224
|
export function attachPreventUnmountOnClose(eventDetails: { preventUnmountOnClose(): void }) {
|
|
147
225
|
let preventUnmountOnClose = false;
|
|
226
|
+
|
|
148
227
|
eventDetails.preventUnmountOnClose = () => {
|
|
149
228
|
preventUnmountOnClose = true;
|
|
150
229
|
};
|
|
230
|
+
|
|
151
231
|
return () => preventUnmountOnClose;
|
|
152
232
|
}
|
|
153
233
|
|
|
154
|
-
/**
|
|
234
|
+
/**
|
|
235
|
+
* Runs the shared open-change sequence for a popup store: notifies `onOpenChange`,
|
|
236
|
+
* honors cancellation, dispatches the floating root change, maps the reason to an
|
|
237
|
+
* `instantType`, and commits the state update (synchronously for hover so
|
|
238
|
+
* `getAnimations()` observes it). Stores supply their own differences via
|
|
239
|
+
* `extraState` (e.g. the last change reason) and `onBeforeDispatch` (e.g. updating
|
|
240
|
+
* inline-rect coordinates).
|
|
241
|
+
*/
|
|
155
242
|
export function applyPopupOpenChange<
|
|
156
243
|
State extends PopupStoreState<unknown> & {
|
|
157
244
|
instantType?: 'delay' | 'dismiss' | 'focus' | undefined;
|
|
158
245
|
},
|
|
246
|
+
EventDetails extends BaseUIChangeEventDetails<string>,
|
|
247
|
+
ExtraKey extends keyof State = never,
|
|
159
248
|
>(
|
|
160
249
|
store: {
|
|
161
|
-
readonly context: Pick<PopupStoreContext<
|
|
162
|
-
readonly state:
|
|
163
|
-
update(state:
|
|
250
|
+
readonly context: Pick<PopupStoreContext<EventDetails>, 'onOpenChange'>;
|
|
251
|
+
readonly state: State;
|
|
252
|
+
update<const Key extends keyof State>(state: Pick<State, Key>): void;
|
|
164
253
|
},
|
|
165
254
|
nextOpen: boolean,
|
|
166
|
-
eventDetails:
|
|
255
|
+
eventDetails: EventDetails & { preventUnmountOnClose(): void },
|
|
167
256
|
options: {
|
|
168
257
|
onBeforeDispatch?: (() => void) | undefined;
|
|
169
|
-
extraState?:
|
|
258
|
+
extraState?: Pick<State, ExtraKey> | undefined;
|
|
170
259
|
} = {},
|
|
171
260
|
): void {
|
|
172
261
|
const reason = eventDetails.reason;
|
|
@@ -188,9 +277,17 @@ export function applyPopupOpenChange<
|
|
|
188
277
|
store.state.floatingRootContext.dispatchOpenChange(nextOpen, eventDetails);
|
|
189
278
|
|
|
190
279
|
const changeState = () => {
|
|
191
|
-
const
|
|
192
|
-
|
|
193
|
-
|
|
280
|
+
const popupOpenState = createPopupOpenState(
|
|
281
|
+
store.state,
|
|
282
|
+
nextOpen,
|
|
283
|
+
eventDetails.trigger,
|
|
284
|
+
shouldPreventUnmountOnClose(),
|
|
285
|
+
);
|
|
286
|
+
|
|
287
|
+
const updatedState = { ...options.extraState, ...popupOpenState } as Pick<
|
|
288
|
+
State,
|
|
289
|
+
keyof PopupOpenState | ExtraKey | 'instantType'
|
|
290
|
+
>;
|
|
194
291
|
|
|
195
292
|
if (isFocusOpen) {
|
|
196
293
|
updatedState.instantType = 'focus';
|
|
@@ -200,285 +297,350 @@ export function applyPopupOpenChange<
|
|
|
200
297
|
updatedState.instantType = undefined;
|
|
201
298
|
}
|
|
202
299
|
|
|
203
|
-
|
|
204
|
-
store.update(updatedState as Partial<State>);
|
|
300
|
+
store.update(updatedState);
|
|
205
301
|
};
|
|
206
302
|
|
|
207
303
|
if (isHover) {
|
|
208
|
-
|
|
304
|
+
// Flush synchronously for hover so `node.getAnimations()` sees the new state.
|
|
305
|
+
ReactDOM.flushSync(changeState);
|
|
209
306
|
} else {
|
|
210
307
|
changeState();
|
|
211
308
|
}
|
|
212
309
|
}
|
|
213
310
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
open: true,
|
|
227
|
-
activeTriggerId: defaultTriggerId,
|
|
228
|
-
preventUnmountingOnClose: false,
|
|
229
|
-
};
|
|
230
|
-
}
|
|
231
|
-
},
|
|
232
|
-
subSlot(slot, 'first'),
|
|
233
|
-
);
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
export function useTriggerDataForwarding<State extends PopupStoreState<unknown>>(
|
|
311
|
+
/**
|
|
312
|
+
* Sets up trigger data forwarding to the store.
|
|
313
|
+
*
|
|
314
|
+
* @param triggerId Id of the trigger.
|
|
315
|
+
* @param triggerElementRef Ref for the trigger DOM element.
|
|
316
|
+
* @param store The Store instance managing the popup state.
|
|
317
|
+
* @param stateUpdates An object with state updates to apply when the trigger is active.
|
|
318
|
+
*/
|
|
319
|
+
export function useTriggerDataForwarding<
|
|
320
|
+
State extends PopupStoreState<unknown>,
|
|
321
|
+
const Key extends keyof Omit<State, 'activeTriggerId' | 'activeTriggerElement'>,
|
|
322
|
+
>(
|
|
237
323
|
triggerId: string | undefined,
|
|
238
|
-
triggerElementRef:
|
|
239
|
-
store:
|
|
240
|
-
stateUpdates:
|
|
241
|
-
slot: symbol | undefined,
|
|
324
|
+
triggerElementRef: React.RefObject<Element | null>,
|
|
325
|
+
store: PopupTriggerDataStore<State>,
|
|
326
|
+
stateUpdates: Pick<State, Key>,
|
|
242
327
|
) {
|
|
243
|
-
const isMountedByThisTrigger = store.useState(
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
)
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
if (activeTriggerId === triggerId) {
|
|
263
|
-
store.update({
|
|
264
|
-
activeTriggerElement: element,
|
|
265
|
-
...(open ? stateUpdates : null),
|
|
266
|
-
} as Partial<State>);
|
|
267
|
-
return;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
if (activeTriggerId == null && open) {
|
|
271
|
-
store.update({
|
|
272
|
-
activeTriggerId: triggerId,
|
|
273
|
-
activeTriggerElement: element,
|
|
274
|
-
...stateUpdates,
|
|
275
|
-
} as Partial<State>);
|
|
276
|
-
}
|
|
277
|
-
},
|
|
278
|
-
subSlot(slot, 'regcb'),
|
|
279
|
-
);
|
|
328
|
+
const isMountedByThisTrigger = store.useState('isMountedByTrigger', triggerId);
|
|
329
|
+
|
|
330
|
+
const baseRegisterTrigger = useTriggerRegistration(triggerId, store);
|
|
331
|
+
|
|
332
|
+
// Applies trigger-owned state (active-trigger ownership and payload) when the trigger registers.
|
|
333
|
+
// Stable so payload/`stateUpdates` changes do not change the ref identity (which would needlessly
|
|
334
|
+
// churn registration); it reads the latest closure values when invoked.
|
|
335
|
+
const applyTriggerData = useStableCallback((element: Element) => {
|
|
336
|
+
const open = store.select('open');
|
|
337
|
+
const activeTriggerId = store.select('activeTriggerId');
|
|
338
|
+
|
|
339
|
+
if (activeTriggerId === triggerId) {
|
|
340
|
+
const changes = {
|
|
341
|
+
activeTriggerElement: element,
|
|
342
|
+
...(open ? stateUpdates : null),
|
|
343
|
+
} as Pick<Readonly<State>, Key | 'activeTriggerElement'>;
|
|
344
|
+
store.update(changes);
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
280
347
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
);
|
|
348
|
+
if (activeTriggerId == null && open) {
|
|
349
|
+
// If a popup is already open, a detached trigger can mount before any active trigger
|
|
350
|
+
// has been established. Claim the first registered trigger so trigger-owned focus
|
|
351
|
+
// management and ARIA relationships work.
|
|
352
|
+
const changes = {
|
|
353
|
+
activeTriggerId: triggerId ?? null,
|
|
354
|
+
activeTriggerElement: element,
|
|
355
|
+
...stateUpdates,
|
|
356
|
+
} as Pick<Readonly<State>, Key | 'activeTriggerId' | 'activeTriggerElement'>;
|
|
357
|
+
store.update(changes);
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
// Stable, so the merged ref on the rendered element keeps its identity for the trigger's whole
|
|
362
|
+
// lifetime.
|
|
363
|
+
const registerTrigger = useStableCallback((element: Element | null) => {
|
|
364
|
+
baseRegisterTrigger(element);
|
|
365
|
+
if (element) {
|
|
366
|
+
applyTriggerData(element);
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
// A stable ref does not re-fire on a store or id change, so migrate here instead: unregister from
|
|
371
|
+
// the previous store, then register the element the trigger still renders into the current one.
|
|
372
|
+
useIsoLayoutEffect(() => {
|
|
373
|
+
registerTrigger(triggerElementRef.current);
|
|
374
|
+
return () => registerTrigger(null);
|
|
375
|
+
}, [registerTrigger, triggerElementRef, store, triggerId]);
|
|
376
|
+
|
|
377
|
+
useIsoLayoutEffect(() => {
|
|
378
|
+
if (isMountedByThisTrigger) {
|
|
379
|
+
const changes = {
|
|
380
|
+
activeTriggerElement: triggerElementRef.current,
|
|
381
|
+
...stateUpdates,
|
|
382
|
+
} as Pick<Readonly<State>, Key | 'activeTriggerElement'>;
|
|
383
|
+
store.update(changes);
|
|
384
|
+
}
|
|
385
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
386
|
+
}, [isMountedByThisTrigger, store, triggerElementRef, ...Object.values(stateUpdates)]);
|
|
293
387
|
|
|
294
388
|
return { registerTrigger, isMountedByThisTrigger };
|
|
295
389
|
}
|
|
296
390
|
|
|
391
|
+
export type PayloadChildRenderFunction<Payload> = (arg: {
|
|
392
|
+
payload: Payload | undefined;
|
|
393
|
+
}) => React.OctaneNode;
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* Keeps trigger registration state synchronized while the popup is open.
|
|
397
|
+
*
|
|
398
|
+
* When a popup opens without an explicit trigger id and exactly one trigger is registered, that
|
|
399
|
+
* trigger is claimed as the active trigger. When the active trigger id is still registered but its
|
|
400
|
+
* element changed, the active element is refreshed. When the active trigger id is missing from the
|
|
401
|
+
* registry but the same element is still registered under a different id (e.g. the rendered trigger
|
|
402
|
+
* carries its own DOM `id` that differs from Base UI's internal trigger id), the active id is
|
|
403
|
+
* reassociated to the registered id instead of being treated as lost. When the active trigger
|
|
404
|
+
* unregisters, the default path preserves existing ownership so non-closing popup families do not
|
|
405
|
+
* silently claim a different trigger while staying open.
|
|
406
|
+
*
|
|
407
|
+
* If `closeOnActiveTriggerUnmount` is enabled, unregistering a previously resolved active trigger
|
|
408
|
+
* requests a close after a microtask so a same-tick replacement trigger with the same id can
|
|
409
|
+
* register first. An active trigger id that has not matched a registered trigger yet is treated as
|
|
410
|
+
* pending and does not request a close.
|
|
411
|
+
*
|
|
412
|
+
* This should be called on the Root part.
|
|
413
|
+
*
|
|
414
|
+
* @param store The Store instance managing the popup state.
|
|
415
|
+
* @param options Options for active trigger unmount behavior.
|
|
416
|
+
*/
|
|
297
417
|
export function useImplicitActiveTrigger<State extends PopupStoreState<unknown>>(
|
|
298
|
-
store:
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
slot: symbol | undefined,
|
|
418
|
+
store: PopupStoreWithOpen<State, BaseUIChangeEventDetails<typeof REASONS.none>>,
|
|
419
|
+
options: {
|
|
420
|
+
closeOnActiveTriggerUnmount?: boolean | undefined;
|
|
421
|
+
} = {},
|
|
303
422
|
) {
|
|
304
423
|
const { closeOnActiveTriggerUnmount = false } = options;
|
|
305
|
-
|
|
306
|
-
const
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
424
|
+
// Distinguishes a trigger that unmounted from a new active trigger that has not hydrated yet.
|
|
425
|
+
const resolvedActiveTriggerIdRef = React.useRef<string | null>(null);
|
|
426
|
+
const open = store.useState('open');
|
|
427
|
+
const reactiveTriggerCount = store.useState('triggerCount');
|
|
428
|
+
// Subscribe to the active trigger id so the reconciliation below reruns when ownership moves to
|
|
429
|
+
// another trigger while the popup stays open (e.g. a focus/hover handoff between triggers).
|
|
430
|
+
const activeTriggerId = store.useState('activeTriggerId');
|
|
431
|
+
// Subscribe to the active trigger element so the reconciliation reruns when a pending active
|
|
432
|
+
// trigger registers in a commit where the trigger count nets out unchanged (registration
|
|
433
|
+
// forwards the element to the store when the registering trigger matches the active id).
|
|
434
|
+
// Without this, the id would never be marked resolved and a later genuine unmount would be
|
|
435
|
+
// misclassified as pending, disabling `closeOnActiveTriggerUnmount`.
|
|
436
|
+
const reactiveActiveTriggerElement = store.useState('activeTriggerElement');
|
|
437
|
+
|
|
438
|
+
useIsoLayoutEffect(() => {
|
|
439
|
+
if (!open) {
|
|
440
|
+
resolvedActiveTriggerIdRef.current = null;
|
|
441
|
+
if (store.state.triggerCount !== 0) {
|
|
442
|
+
store.set('triggerCount', 0);
|
|
315
443
|
}
|
|
444
|
+
return;
|
|
445
|
+
}
|
|
316
446
|
|
|
317
|
-
|
|
318
|
-
|
|
447
|
+
const triggerCount = store.context.triggerElements.size;
|
|
448
|
+
const stateUpdates = {} as Pick<
|
|
449
|
+
State,
|
|
450
|
+
'triggerCount' | 'activeTriggerId' | 'activeTriggerElement'
|
|
451
|
+
>;
|
|
319
452
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
453
|
+
if (store.state.triggerCount !== triggerCount) {
|
|
454
|
+
stateUpdates.triggerCount = triggerCount;
|
|
455
|
+
}
|
|
323
456
|
|
|
324
|
-
|
|
325
|
-
|
|
457
|
+
const currentActiveTriggerId = store.select('activeTriggerId');
|
|
458
|
+
let lostActiveTriggerId: string | null = null;
|
|
459
|
+
|
|
460
|
+
if (currentActiveTriggerId) {
|
|
461
|
+
const activeTriggerElement = store.context.triggerElements.getById(currentActiveTriggerId);
|
|
462
|
+
if (!activeTriggerElement) {
|
|
463
|
+
for (const [triggerId, triggerElement] of store.context.triggerElements.entries()) {
|
|
464
|
+
if (triggerElement === store.state.activeTriggerElement) {
|
|
465
|
+
stateUpdates.activeTriggerId = triggerId;
|
|
466
|
+
stateUpdates.activeTriggerElement = triggerElement;
|
|
467
|
+
resolvedActiveTriggerIdRef.current = triggerId;
|
|
468
|
+
break;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
326
471
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
472
|
+
if (stateUpdates.activeTriggerId === undefined) {
|
|
473
|
+
if (resolvedActiveTriggerIdRef.current === currentActiveTriggerId) {
|
|
474
|
+
lostActiveTriggerId = currentActiveTriggerId;
|
|
475
|
+
} else {
|
|
476
|
+
resolvedActiveTriggerIdRef.current = null;
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
} else {
|
|
480
|
+
resolvedActiveTriggerIdRef.current = currentActiveTriggerId;
|
|
481
|
+
if (activeTriggerElement !== store.state.activeTriggerElement) {
|
|
332
482
|
stateUpdates.activeTriggerElement = activeTriggerElement;
|
|
333
483
|
}
|
|
334
484
|
}
|
|
485
|
+
} else {
|
|
486
|
+
resolvedActiveTriggerIdRef.current = null;
|
|
487
|
+
}
|
|
335
488
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
489
|
+
if (!lostActiveTriggerId && !currentActiveTriggerId && triggerCount === 1) {
|
|
490
|
+
const iteratorResult = store.context.triggerElements.entries().next();
|
|
491
|
+
if (!iteratorResult.done) {
|
|
492
|
+
const [implicitTriggerId, implicitTriggerElement] = iteratorResult.value;
|
|
493
|
+
stateUpdates.activeTriggerId = implicitTriggerId;
|
|
494
|
+
stateUpdates.activeTriggerElement = implicitTriggerElement;
|
|
495
|
+
resolvedActiveTriggerIdRef.current = implicitTriggerId;
|
|
343
496
|
}
|
|
497
|
+
}
|
|
344
498
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
499
|
+
if (
|
|
500
|
+
stateUpdates.triggerCount !== undefined ||
|
|
501
|
+
stateUpdates.activeTriggerId !== undefined ||
|
|
502
|
+
stateUpdates.activeTriggerElement !== undefined
|
|
503
|
+
) {
|
|
504
|
+
store.update(stateUpdates);
|
|
505
|
+
}
|
|
352
506
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
)
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
507
|
+
if (lostActiveTriggerId) {
|
|
508
|
+
if (closeOnActiveTriggerUnmount) {
|
|
509
|
+
// Defer so a same-tick replacement trigger with the same id can register first.
|
|
510
|
+
queueMicrotask(() => {
|
|
511
|
+
if (
|
|
512
|
+
store.select('open') &&
|
|
513
|
+
store.select('activeTriggerId') === lostActiveTriggerId &&
|
|
514
|
+
!store.context.triggerElements.getById(lostActiveTriggerId)
|
|
515
|
+
) {
|
|
516
|
+
const eventDetails = createChangeEventDetails(REASONS.none);
|
|
517
|
+
store.setOpen(false, eventDetails);
|
|
518
|
+
// If closing is canceled, keep the previous active trigger ownership for the
|
|
519
|
+
// still-open popup instead of claiming another trigger implicitly.
|
|
520
|
+
if (!eventDetails.isCanceled) {
|
|
521
|
+
store.update({
|
|
522
|
+
activeTriggerId: null,
|
|
523
|
+
activeTriggerElement: null,
|
|
524
|
+
});
|
|
369
525
|
}
|
|
370
|
-
}
|
|
371
|
-
}
|
|
526
|
+
}
|
|
527
|
+
});
|
|
372
528
|
}
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
529
|
+
}
|
|
530
|
+
}, [
|
|
531
|
+
open,
|
|
532
|
+
store,
|
|
533
|
+
reactiveTriggerCount,
|
|
534
|
+
activeTriggerId,
|
|
535
|
+
reactiveActiveTriggerElement,
|
|
536
|
+
closeOnActiveTriggerUnmount,
|
|
537
|
+
]);
|
|
377
538
|
}
|
|
378
539
|
|
|
540
|
+
/**
|
|
541
|
+
* Manages the mounted state of the popup.
|
|
542
|
+
* Sets up the transition status listeners and handles unmounting when needed.
|
|
543
|
+
* Updates the `mounted`, `transitionStatus`, and `preventUnmountingOnClose` states in the store.
|
|
544
|
+
*
|
|
545
|
+
* @param open Whether the popup is open.
|
|
546
|
+
* @param store The Store instance managing the popup state.
|
|
547
|
+
* @param onUnmount Optional callback to be called when the popup is unmounted.
|
|
548
|
+
* @param animateInitialOpen Whether a popup that mounts already open should still play its enter
|
|
549
|
+
* transition. Defaults to `false`, so content that was open on the first render (a `defaultOpen`
|
|
550
|
+
* popup on page load, SSR'd markup) appears without animating. Opt in for popups whose subtree
|
|
551
|
+
* only mounts in response to something the user did, such as a submenu inside a menu popup.
|
|
552
|
+
*
|
|
553
|
+
* @returns A function to forcibly unmount the popup.
|
|
554
|
+
*/
|
|
379
555
|
export function useOpenStateTransitions<State extends PopupStoreState<unknown>>(
|
|
380
556
|
open: boolean,
|
|
381
557
|
store: ReactStore<State, PopupStoreContext<never>, typeof popupStoreSelectors>,
|
|
382
|
-
onUnmount
|
|
383
|
-
|
|
558
|
+
onUnmount?: () => void,
|
|
559
|
+
animateInitialOpen?: boolean,
|
|
384
560
|
) {
|
|
385
561
|
const { mounted, setMounted, transitionStatus } = useTransitionStatus(
|
|
386
562
|
open,
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
);
|
|
391
|
-
const preventUnmountingOnClose = store.useState(
|
|
392
|
-
'preventUnmountingOnClose',
|
|
393
|
-
subSlot(slot, 'puoc'),
|
|
563
|
+
false,
|
|
564
|
+
false,
|
|
565
|
+
animateInitialOpen,
|
|
394
566
|
);
|
|
567
|
+
const preventUnmountingOnClose = store.useState('preventUnmountingOnClose');
|
|
568
|
+
// Opening starts a new close cycle. Clear during render so the close-completion hook below
|
|
569
|
+
// reads the synchronized value on the same pass.
|
|
395
570
|
const syncedPreventUnmountingOnClose = open ? false : preventUnmountingOnClose;
|
|
396
571
|
|
|
397
|
-
store.useSyncedValues(
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
572
|
+
store.useSyncedValues({
|
|
573
|
+
mounted,
|
|
574
|
+
transitionStatus,
|
|
575
|
+
preventUnmountingOnClose: syncedPreventUnmountingOnClose,
|
|
576
|
+
});
|
|
577
|
+
|
|
578
|
+
const forceUnmount = useStableCallback(() => {
|
|
579
|
+
setMounted(false);
|
|
580
|
+
store.update({
|
|
581
|
+
activeTriggerId: null,
|
|
582
|
+
activeTriggerElement: null,
|
|
583
|
+
mounted: false,
|
|
584
|
+
preventUnmountingOnClose: false,
|
|
585
|
+
});
|
|
586
|
+
onUnmount?.();
|
|
587
|
+
store.context.onOpenChangeComplete?.(false);
|
|
588
|
+
});
|
|
589
|
+
|
|
590
|
+
useOpenChangeComplete({
|
|
591
|
+
enabled: mounted && !open && !syncedPreventUnmountingOnClose,
|
|
592
|
+
open,
|
|
593
|
+
ref: store.context.popupRef,
|
|
594
|
+
onComplete() {
|
|
595
|
+
if (!open) {
|
|
596
|
+
forceUnmount();
|
|
597
|
+
}
|
|
417
598
|
},
|
|
418
|
-
|
|
419
|
-
);
|
|
420
|
-
|
|
421
|
-
useOpenChangeComplete(
|
|
422
|
-
{
|
|
423
|
-
enabled: mounted && !open && !syncedPreventUnmountingOnClose,
|
|
424
|
-
open,
|
|
425
|
-
ref: store.context.popupRef,
|
|
426
|
-
onComplete() {
|
|
427
|
-
if (!open) {
|
|
428
|
-
forceUnmount();
|
|
429
|
-
}
|
|
430
|
-
},
|
|
431
|
-
},
|
|
432
|
-
subSlot(slot, 'occ'),
|
|
433
|
-
);
|
|
599
|
+
});
|
|
434
600
|
|
|
435
601
|
return { forceUnmount, transitionStatus };
|
|
436
602
|
}
|
|
437
603
|
|
|
438
|
-
|
|
604
|
+
type PopupInteractionPropKey = 'activeTriggerProps' | 'inactiveTriggerProps' | 'popupProps';
|
|
605
|
+
|
|
606
|
+
export function usePopupInteractionProps<
|
|
607
|
+
State extends PopupStoreState<unknown>,
|
|
608
|
+
const Key extends keyof State,
|
|
609
|
+
>(
|
|
439
610
|
store: ReactStore<State, PopupStoreContext<never>, typeof popupStoreSelectors>,
|
|
440
|
-
statePart:
|
|
441
|
-
slot: symbol | undefined,
|
|
611
|
+
statePart: Pick<State, Key | PopupInteractionPropKey>,
|
|
442
612
|
) {
|
|
443
|
-
store.useSyncedValues(statePart
|
|
613
|
+
store.useSyncedValues(statePart);
|
|
444
614
|
|
|
445
|
-
|
|
615
|
+
useIsoLayoutEffect(
|
|
446
616
|
() => () => {
|
|
447
617
|
store.update({
|
|
448
618
|
activeTriggerProps: EMPTY_OBJECT,
|
|
449
619
|
inactiveTriggerProps: EMPTY_OBJECT,
|
|
450
620
|
popupProps: EMPTY_OBJECT,
|
|
451
|
-
}
|
|
621
|
+
});
|
|
452
622
|
},
|
|
453
623
|
[store],
|
|
454
|
-
subSlot(slot, 'e'),
|
|
455
624
|
);
|
|
456
625
|
}
|
|
457
626
|
|
|
458
627
|
export function usePopupRootSync<
|
|
459
|
-
State extends PopupStoreState<unknown> & {
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
) {
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
store.set('openMethod', null);
|
|
469
|
-
}
|
|
470
|
-
},
|
|
471
|
-
[open, store],
|
|
472
|
-
subSlot(slot, 'e1'),
|
|
473
|
-
);
|
|
628
|
+
State extends PopupStoreState<unknown> & {
|
|
629
|
+
openMethod: InteractionType | null;
|
|
630
|
+
},
|
|
631
|
+
>(store: ReactStore<State, PopupStoreContext<never>, typeof popupStoreSelectors>, open: boolean) {
|
|
632
|
+
useIsoLayoutEffect(() => {
|
|
633
|
+
if (!open && store.state.openMethod !== null) {
|
|
634
|
+
store.set('openMethod', null);
|
|
635
|
+
}
|
|
636
|
+
}, [open, store]);
|
|
474
637
|
|
|
475
|
-
|
|
638
|
+
useIsoLayoutEffect(
|
|
476
639
|
() => () => {
|
|
477
640
|
if (store.state.openMethod !== null) {
|
|
478
641
|
store.set('openMethod', null);
|
|
479
642
|
}
|
|
480
643
|
},
|
|
481
644
|
[store],
|
|
482
|
-
subSlot(slot, 'e2'),
|
|
483
645
|
);
|
|
484
646
|
}
|