@limonify/zest-ui 0.3.1 → 0.4.0
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/README.md +3 -0
- package/lib/alert-dialog/index.parts.d.ts +1 -1
- package/lib/alert-dialog/index.parts.d.ts.map +1 -1
- package/lib/alert-dialog/index.parts.js.map +1 -1
- package/lib/autocomplete/handle.d.ts +15 -0
- package/lib/autocomplete/handle.d.ts.map +1 -0
- package/lib/autocomplete/handle.js +12 -0
- package/lib/autocomplete/handle.js.map +1 -0
- package/lib/autocomplete/index.d.ts +1 -0
- package/lib/autocomplete/index.d.ts.map +1 -1
- package/lib/autocomplete/index.parts.d.ts +1 -0
- package/lib/autocomplete/index.parts.d.ts.map +1 -1
- package/lib/autocomplete/index.parts.js +3 -1
- package/lib/autocomplete/index.parts.js.map +1 -1
- package/lib/autocomplete/root/AutocompleteRoot.d.ts +55 -16
- package/lib/autocomplete/root/AutocompleteRoot.d.ts.map +1 -1
- package/lib/autocomplete/root/AutocompleteRoot.js +2 -18
- package/lib/autocomplete/root/AutocompleteRoot.js.map +1 -1
- package/lib/avatar/fallback/AvatarFallback.d.ts.map +1 -1
- package/lib/avatar/fallback/AvatarFallback.js +3 -1
- package/lib/avatar/fallback/AvatarFallback.js.map +1 -1
- package/lib/avatar/image/AvatarImage.d.ts.map +1 -1
- package/lib/avatar/image/AvatarImage.js +5 -0
- package/lib/avatar/image/AvatarImage.js.map +1 -1
- package/lib/checkbox/root/CheckboxRoot.d.ts.map +1 -1
- package/lib/checkbox/root/CheckboxRoot.js +9 -4
- package/lib/checkbox/root/CheckboxRoot.js.map +1 -1
- package/lib/combobox/backdrop/ComboboxBackdrop.d.ts.map +1 -1
- package/lib/combobox/backdrop/ComboboxBackdrop.js +10 -2
- package/lib/combobox/backdrop/ComboboxBackdrop.js.map +1 -1
- package/lib/combobox/empty/ComboboxEmpty.d.ts.map +1 -1
- package/lib/combobox/empty/ComboboxEmpty.js +4 -1
- package/lib/combobox/empty/ComboboxEmpty.js.map +1 -1
- package/lib/combobox/index.d.ts +2 -0
- package/lib/combobox/index.d.ts.map +1 -1
- package/lib/combobox/index.js +3 -1
- package/lib/combobox/index.js.map +1 -1
- package/lib/combobox/index.parts.d.ts +1 -0
- package/lib/combobox/index.parts.d.ts.map +1 -1
- package/lib/combobox/index.parts.js +4 -1
- package/lib/combobox/index.parts.js.map +1 -1
- package/lib/combobox/input/ComboboxInput.d.ts +24 -3
- package/lib/combobox/input/ComboboxInput.d.ts.map +1 -1
- package/lib/combobox/input/ComboboxInput.js +68 -8
- package/lib/combobox/input/ComboboxInput.js.map +1 -1
- package/lib/combobox/item/ComboboxItem.d.ts +11 -1
- package/lib/combobox/item/ComboboxItem.d.ts.map +1 -1
- package/lib/combobox/item/ComboboxItem.js +9 -4
- package/lib/combobox/item/ComboboxItem.js.map +1 -1
- package/lib/combobox/list/ComboboxList.d.ts +1 -1
- package/lib/combobox/list/ComboboxList.d.ts.map +1 -1
- package/lib/combobox/list/ComboboxList.js +4 -1
- package/lib/combobox/list/ComboboxList.js.map +1 -1
- package/lib/combobox/popup/ComboboxPopup.d.ts +26 -0
- package/lib/combobox/popup/ComboboxPopup.d.ts.map +1 -1
- package/lib/combobox/popup/ComboboxPopup.js +18 -2
- package/lib/combobox/popup/ComboboxPopup.js.map +1 -1
- package/lib/combobox/portal/ComboboxPortal.d.ts.map +1 -1
- package/lib/combobox/portal/ComboboxPortal.js +8 -4
- package/lib/combobox/portal/ComboboxPortal.js.map +1 -1
- package/lib/combobox/portal/ComboboxPortalContext.d.ts +4 -0
- package/lib/combobox/portal/ComboboxPortalContext.d.ts.map +1 -0
- package/lib/combobox/portal/ComboboxPortalContext.js +48 -0
- package/lib/combobox/portal/ComboboxPortalContext.js.map +1 -0
- package/lib/combobox/positioner/ComboboxPositioner.d.ts +11 -1
- package/lib/combobox/positioner/ComboboxPositioner.d.ts.map +1 -1
- package/lib/combobox/positioner/ComboboxPositioner.js +67 -7
- package/lib/combobox/positioner/ComboboxPositioner.js.map +1 -1
- package/lib/combobox/positioner/ComboboxPositionerContext.d.ts +9 -0
- package/lib/combobox/positioner/ComboboxPositionerContext.d.ts.map +1 -0
- package/lib/combobox/positioner/ComboboxPositionerContext.js +48 -0
- package/lib/combobox/positioner/ComboboxPositionerContext.js.map +1 -0
- package/lib/combobox/root/ComboboxItemsContext.d.ts +18 -0
- package/lib/combobox/root/ComboboxItemsContext.d.ts.map +1 -0
- package/lib/combobox/root/ComboboxItemsContext.js +55 -0
- package/lib/combobox/root/ComboboxItemsContext.js.map +1 -0
- package/lib/combobox/root/ComboboxRoot.d.ts +77 -21
- package/lib/combobox/root/ComboboxRoot.d.ts.map +1 -1
- package/lib/combobox/root/ComboboxRoot.js +4 -23
- package/lib/combobox/root/ComboboxRoot.js.map +1 -1
- package/lib/combobox/root/ComboboxRootContext.d.ts +4 -43
- package/lib/combobox/root/ComboboxRootContext.d.ts.map +1 -1
- package/lib/combobox/root/ComboboxRootContext.js.map +1 -1
- package/lib/combobox/root/ComboboxTransitionContext.d.ts +8 -0
- package/lib/combobox/root/ComboboxTransitionContext.d.ts.map +1 -0
- package/lib/combobox/root/ComboboxTransitionContext.js +44 -0
- package/lib/combobox/root/ComboboxTransitionContext.js.map +1 -0
- package/lib/combobox/root/useRenderComboboxRoot.d.ts +39 -0
- package/lib/combobox/root/useRenderComboboxRoot.d.ts.map +1 -0
- package/lib/combobox/root/useRenderComboboxRoot.js +136 -0
- package/lib/combobox/root/useRenderComboboxRoot.js.map +1 -0
- package/lib/combobox/store/ComboboxHandle.d.ts +42 -0
- package/lib/combobox/store/ComboboxHandle.d.ts.map +1 -0
- package/lib/combobox/store/ComboboxHandle.js +65 -0
- package/lib/combobox/store/ComboboxHandle.js.map +1 -0
- package/lib/combobox/store/ComboboxStore.d.ts +147 -0
- package/lib/combobox/store/ComboboxStore.d.ts.map +1 -0
- package/lib/combobox/store/ComboboxStore.js +127 -0
- package/lib/combobox/store/ComboboxStore.js.map +1 -0
- package/lib/combobox/value/ComboboxValue.d.ts.map +1 -1
- package/lib/combobox/value/ComboboxValue.js +2 -1
- package/lib/combobox/value/ComboboxValue.js.map +1 -1
- package/lib/context-menu/positioner/ContextMenuPositioner.d.ts +19 -3
- package/lib/context-menu/positioner/ContextMenuPositioner.d.ts.map +1 -1
- package/lib/context-menu/positioner/ContextMenuPositioner.js +56 -7
- package/lib/context-menu/positioner/ContextMenuPositioner.js.map +1 -1
- package/lib/context-menu/root/ContextMenuRoot.d.ts +8 -0
- package/lib/context-menu/root/ContextMenuRoot.d.ts.map +1 -1
- package/lib/dialog/backdrop/DialogBackdrop.d.ts +9 -0
- package/lib/dialog/backdrop/DialogBackdrop.d.ts.map +1 -1
- package/lib/dialog/backdrop/DialogBackdrop.js +3 -1
- package/lib/dialog/backdrop/DialogBackdrop.js.map +1 -1
- package/lib/dialog/popup/DialogPopup.d.ts +9 -0
- package/lib/dialog/popup/DialogPopup.d.ts.map +1 -1
- package/lib/dialog/popup/DialogPopup.js +2 -2
- package/lib/dialog/popup/DialogPopup.js.map +1 -1
- package/lib/dialog/popup/useDialogPopupProps.d.ts +2 -0
- package/lib/dialog/popup/useDialogPopupProps.d.ts.map +1 -1
- package/lib/dialog/popup/useDialogPopupProps.js +4 -0
- package/lib/dialog/popup/useDialogPopupProps.js.map +1 -1
- package/lib/dialog/root/DialogNestingContext.d.ts +20 -0
- package/lib/dialog/root/DialogNestingContext.d.ts.map +1 -0
- package/lib/dialog/root/DialogNestingContext.js +53 -0
- package/lib/dialog/root/DialogNestingContext.js.map +1 -0
- package/lib/dialog/root/useRenderDialogRoot.d.ts.map +1 -1
- package/lib/dialog/root/useRenderDialogRoot.js +26 -2
- package/lib/dialog/root/useRenderDialogRoot.js.map +1 -1
- package/lib/dialog/store/DialogStore.d.ts +19 -2
- package/lib/dialog/store/DialogStore.d.ts.map +1 -1
- package/lib/dialog/store/DialogStore.js +14 -2
- package/lib/dialog/store/DialogStore.js.map +1 -1
- package/lib/drawer/index.parts.d.ts +1 -1
- package/lib/drawer/index.parts.d.ts.map +1 -1
- package/lib/drawer/index.parts.js.map +1 -1
- package/lib/drawer/popup/DrawerPopup.d.ts +9 -0
- package/lib/drawer/popup/DrawerPopup.d.ts.map +1 -1
- package/lib/drawer/popup/DrawerPopup.js +3 -1
- package/lib/drawer/popup/DrawerPopup.js.map +1 -1
- package/lib/filter/index.d.ts +2 -0
- package/lib/filter/index.d.ts.map +1 -0
- package/lib/filter/index.js +6 -0
- package/lib/filter/index.js.map +1 -0
- package/lib/filter/useFilter.d.ts +45 -0
- package/lib/filter/useFilter.d.ts.map +1 -0
- package/lib/filter/useFilter.js +96 -0
- package/lib/filter/useFilter.js.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/internals/field/useFieldControlRegistration.d.ts +25 -6
- package/lib/internals/field/useFieldControlRegistration.d.ts.map +1 -1
- package/lib/internals/field/useFieldControlRegistration.js +93 -6
- package/lib/internals/field/useFieldControlRegistration.js.map +1 -1
- package/lib/menu/popup/MenuPopup.d.ts +10 -0
- package/lib/menu/popup/MenuPopup.d.ts.map +1 -1
- package/lib/menu/popup/MenuPopup.js +10 -1
- package/lib/menu/popup/MenuPopup.js.map +1 -1
- package/lib/menu/positioner/MenuPositioner.d.ts +10 -0
- package/lib/menu/positioner/MenuPositioner.d.ts.map +1 -1
- package/lib/menu/positioner/MenuPositioner.js +9 -1
- package/lib/menu/positioner/MenuPositioner.js.map +1 -1
- package/lib/menu/store/MenuStore.d.ts +11 -0
- package/lib/menu/store/MenuStore.d.ts.map +1 -1
- package/lib/menu/store/MenuStore.js +4 -0
- package/lib/menu/store/MenuStore.js.map +1 -1
- package/lib/menu/submenu-trigger/MenuSubmenuTrigger.d.ts.map +1 -1
- package/lib/menu/submenu-trigger/MenuSubmenuTrigger.js +3 -0
- package/lib/menu/submenu-trigger/MenuSubmenuTrigger.js.map +1 -1
- package/lib/menu/trigger/MenuTrigger.d.ts.map +1 -1
- package/lib/menu/trigger/MenuTrigger.js +4 -1
- package/lib/menu/trigger/MenuTrigger.js.map +1 -1
- package/lib/meter/indicator/MeterIndicator.d.ts +2 -1
- package/lib/meter/indicator/MeterIndicator.d.ts.map +1 -1
- package/lib/meter/indicator/MeterIndicator.js +1 -2
- package/lib/meter/indicator/MeterIndicator.js.map +1 -1
- package/lib/meter/label/MeterLabel.d.ts +2 -1
- package/lib/meter/label/MeterLabel.d.ts.map +1 -1
- package/lib/meter/label/MeterLabel.js +1 -2
- package/lib/meter/label/MeterLabel.js.map +1 -1
- package/lib/meter/root/MeterRoot.d.ts +21 -0
- package/lib/meter/root/MeterRoot.d.ts.map +1 -1
- package/lib/meter/root/MeterRoot.js +2 -2
- package/lib/meter/root/MeterRoot.js.map +1 -1
- package/lib/meter/root/MeterRootContext.d.ts +5 -0
- package/lib/meter/root/MeterRootContext.d.ts.map +1 -1
- package/lib/meter/root/MeterRootContext.js.map +1 -1
- package/lib/meter/track/MeterTrack.d.ts +2 -1
- package/lib/meter/track/MeterTrack.d.ts.map +1 -1
- package/lib/meter/track/MeterTrack.js +1 -2
- package/lib/meter/track/MeterTrack.js.map +1 -1
- package/lib/meter/value/MeterValue.d.ts +2 -1
- package/lib/meter/value/MeterValue.d.ts.map +1 -1
- package/lib/meter/value/MeterValue.js +1 -2
- package/lib/meter/value/MeterValue.js.map +1 -1
- package/lib/number-field/input/NumberFieldInput.d.ts.map +1 -1
- package/lib/number-field/input/NumberFieldInput.js +11 -2
- package/lib/number-field/input/NumberFieldInput.js.map +1 -1
- package/lib/number-field/root/NumberFieldRoot.d.ts.map +1 -1
- package/lib/number-field/root/NumberFieldRoot.js +5 -2
- package/lib/number-field/root/NumberFieldRoot.js.map +1 -1
- package/lib/otp-field/input/OTPFieldInput.d.ts.map +1 -1
- package/lib/otp-field/input/OTPFieldInput.js +4 -0
- package/lib/otp-field/input/OTPFieldInput.js.map +1 -1
- package/lib/otp-field/root/OTPFieldRoot.d.ts.map +1 -1
- package/lib/otp-field/root/OTPFieldRoot.js +20 -2
- package/lib/otp-field/root/OTPFieldRoot.js.map +1 -1
- package/lib/popover/popup/PopoverPopup.d.ts +10 -0
- package/lib/popover/popup/PopoverPopup.d.ts.map +1 -1
- package/lib/popover/popup/PopoverPopup.js +10 -1
- package/lib/popover/popup/PopoverPopup.js.map +1 -1
- package/lib/popover/positioner/PopoverPositioner.d.ts +10 -0
- package/lib/popover/positioner/PopoverPositioner.d.ts.map +1 -1
- package/lib/popover/positioner/PopoverPositioner.js +4 -0
- package/lib/popover/positioner/PopoverPositioner.js.map +1 -1
- package/lib/popover/store/PopoverStore.d.ts +11 -0
- package/lib/popover/store/PopoverStore.d.ts.map +1 -1
- package/lib/popover/store/PopoverStore.js +4 -0
- package/lib/popover/store/PopoverStore.js.map +1 -1
- package/lib/popover/trigger/PopoverTrigger.d.ts.map +1 -1
- package/lib/popover/trigger/PopoverTrigger.js +4 -1
- package/lib/popover/trigger/PopoverTrigger.js.map +1 -1
- package/lib/progress/root/ProgressRoot.d.ts +21 -0
- package/lib/progress/root/ProgressRoot.d.ts.map +1 -1
- package/lib/progress/root/ProgressRoot.js +1 -1
- package/lib/progress/root/ProgressRoot.js.map +1 -1
- package/lib/radio-group/RadioGroup.d.ts.map +1 -1
- package/lib/radio-group/RadioGroup.js +5 -2
- package/lib/radio-group/RadioGroup.js.map +1 -1
- package/lib/select/backdrop/SelectBackdrop.d.ts.map +1 -1
- package/lib/select/backdrop/SelectBackdrop.js +3 -0
- package/lib/select/backdrop/SelectBackdrop.js.map +1 -1
- package/lib/select/index.parts.d.ts +1 -0
- package/lib/select/index.parts.d.ts.map +1 -1
- package/lib/select/index.parts.js +4 -1
- package/lib/select/index.parts.js.map +1 -1
- package/lib/select/popup/SelectPopup.d.ts +8 -0
- package/lib/select/popup/SelectPopup.d.ts.map +1 -1
- package/lib/select/popup/SelectPopup.js +10 -1
- package/lib/select/popup/SelectPopup.js.map +1 -1
- package/lib/select/positioner/SelectPositioner.d.ts +9 -0
- package/lib/select/positioner/SelectPositioner.d.ts.map +1 -1
- package/lib/select/positioner/SelectPositioner.js +9 -1
- package/lib/select/positioner/SelectPositioner.js.map +1 -1
- package/lib/select/root/SelectRoot.d.ts +45 -4
- package/lib/select/root/SelectRoot.d.ts.map +1 -1
- package/lib/select/root/SelectRoot.js +43 -5
- package/lib/select/root/SelectRoot.js.map +1 -1
- package/lib/select/store/SelectHandle.d.ts +42 -0
- package/lib/select/store/SelectHandle.d.ts.map +1 -0
- package/lib/select/store/SelectHandle.js +69 -0
- package/lib/select/store/SelectHandle.js.map +1 -0
- package/lib/select/store/SelectStore.d.ts +33 -0
- package/lib/select/store/SelectStore.d.ts.map +1 -1
- package/lib/select/store/SelectStore.js +17 -1
- package/lib/select/store/SelectStore.js.map +1 -1
- package/lib/select/trigger/SelectTrigger.d.ts +18 -3
- package/lib/select/trigger/SelectTrigger.d.ts.map +1 -1
- package/lib/select/trigger/SelectTrigger.js +51 -4
- package/lib/select/trigger/SelectTrigger.js.map +1 -1
- package/lib/slider/root/SliderRoot.d.ts.map +1 -1
- package/lib/slider/root/SliderRoot.js +9 -1
- package/lib/slider/root/SliderRoot.js.map +1 -1
- package/lib/slider/thumb/SliderThumb.d.ts.map +1 -1
- package/lib/slider/thumb/SliderThumb.js +10 -2
- package/lib/slider/thumb/SliderThumb.js.map +1 -1
- package/lib/switch/root/SwitchRoot.d.ts.map +1 -1
- package/lib/switch/root/SwitchRoot.js +6 -2
- package/lib/switch/root/SwitchRoot.js.map +1 -1
- package/lib/tabs/tab/TabsTab.d.ts +2 -10
- package/lib/tabs/tab/TabsTab.d.ts.map +1 -1
- package/lib/tooltip/popup/TooltipPopup.d.ts +10 -0
- package/lib/tooltip/popup/TooltipPopup.d.ts.map +1 -1
- package/lib/tooltip/popup/TooltipPopup.js +10 -1
- package/lib/tooltip/popup/TooltipPopup.js.map +1 -1
- package/lib/tooltip/positioner/TooltipPositioner.d.ts +10 -0
- package/lib/tooltip/positioner/TooltipPositioner.d.ts.map +1 -1
- package/lib/tooltip/positioner/TooltipPositioner.js +4 -0
- package/lib/tooltip/positioner/TooltipPositioner.js.map +1 -1
- package/lib/tooltip/store/TooltipStore.d.ts +11 -0
- package/lib/tooltip/store/TooltipStore.d.ts.map +1 -1
- package/lib/tooltip/store/TooltipStore.js +11 -1
- package/lib/tooltip/store/TooltipStore.js.map +1 -1
- package/lib/tooltip/trigger/TooltipTrigger.d.ts.map +1 -1
- package/lib/tooltip/trigger/TooltipTrigger.js +4 -1
- package/lib/tooltip/trigger/TooltipTrigger.js.map +1 -1
- package/package.json +1 -1
- package/src/alert-dialog/index.parts.ts +1 -1
- package/src/autocomplete/handle.ts +18 -0
- package/src/autocomplete/index.parts.ts +1 -0
- package/src/autocomplete/index.ts +1 -0
- package/src/autocomplete/root/AutocompleteRoot.tsx +65 -50
- package/src/avatar/fallback/AvatarFallback.tsx +3 -1
- package/src/avatar/image/AvatarImage.tsx +5 -0
- package/src/checkbox/root/CheckboxRoot.tsx +7 -2
- package/src/combobox/backdrop/ComboboxBackdrop.tsx +10 -2
- package/src/combobox/empty/ComboboxEmpty.tsx +5 -1
- package/src/combobox/index.parts.ts +1 -0
- package/src/combobox/index.ts +2 -0
- package/src/combobox/input/ComboboxInput.tsx +118 -23
- package/src/combobox/item/ComboboxItem.tsx +24 -5
- package/src/combobox/list/ComboboxList.tsx +7 -2
- package/src/combobox/popup/ComboboxPopup.tsx +44 -2
- package/src/combobox/portal/ComboboxPortal.tsx +19 -13
- package/src/combobox/portal/ComboboxPortalContext.ts +15 -0
- package/src/combobox/positioner/ComboboxPositioner.tsx +52 -7
- package/src/combobox/positioner/ComboboxPositionerContext.ts +23 -0
- package/src/combobox/root/ComboboxItemsContext.ts +32 -0
- package/src/combobox/root/ComboboxRoot.tsx +94 -56
- package/src/combobox/root/ComboboxRootContext.ts +3 -43
- package/src/combobox/root/ComboboxTransitionContext.ts +15 -0
- package/src/combobox/root/useRenderComboboxRoot.tsx +189 -0
- package/src/combobox/store/ComboboxHandle.ts +64 -0
- package/src/combobox/store/ComboboxStore.ts +249 -0
- package/src/combobox/value/ComboboxValue.tsx +2 -1
- package/src/context-menu/positioner/ContextMenuPositioner.tsx +90 -10
- package/src/context-menu/root/ContextMenuRoot.tsx +8 -0
- package/src/dialog/backdrop/DialogBackdrop.tsx +12 -1
- package/src/dialog/popup/DialogPopup.tsx +11 -2
- package/src/dialog/popup/useDialogPopupProps.ts +4 -0
- package/src/dialog/root/DialogNestingContext.ts +27 -0
- package/src/dialog/root/useRenderDialogRoot.tsx +37 -2
- package/src/dialog/store/DialogStore.ts +24 -2
- package/src/drawer/index.parts.ts +1 -1
- package/src/drawer/popup/DrawerPopup.tsx +12 -1
- package/src/filter/index.ts +5 -0
- package/src/filter/useFilter.ts +95 -0
- package/src/index.ts +1 -0
- package/src/internals/field/useFieldControlRegistration.ts +86 -6
- package/src/menu/popup/MenuPopup.tsx +20 -1
- package/src/menu/positioner/MenuPositioner.tsx +19 -1
- package/src/menu/store/MenuStore.ts +13 -0
- package/src/menu/submenu-trigger/MenuSubmenuTrigger.tsx +3 -0
- package/src/menu/trigger/MenuTrigger.tsx +5 -2
- package/src/meter/indicator/MeterIndicator.tsx +3 -4
- package/src/meter/label/MeterLabel.tsx +3 -4
- package/src/meter/root/MeterRoot.tsx +29 -4
- package/src/meter/root/MeterRootContext.ts +5 -0
- package/src/meter/track/MeterTrack.tsx +3 -4
- package/src/meter/value/MeterValue.tsx +3 -4
- package/src/number-field/input/NumberFieldInput.tsx +11 -2
- package/src/number-field/root/NumberFieldRoot.tsx +4 -2
- package/src/otp-field/input/OTPFieldInput.tsx +4 -0
- package/src/otp-field/root/OTPFieldRoot.tsx +22 -2
- package/src/popover/popup/PopoverPopup.tsx +20 -1
- package/src/popover/positioner/PopoverPositioner.tsx +14 -0
- package/src/popover/store/PopoverStore.ts +13 -0
- package/src/popover/trigger/PopoverTrigger.tsx +5 -2
- package/src/progress/root/ProgressRoot.tsx +25 -1
- package/src/radio-group/RadioGroup.tsx +5 -2
- package/src/select/backdrop/SelectBackdrop.tsx +4 -0
- package/src/select/index.parts.ts +1 -0
- package/src/select/popup/SelectPopup.tsx +18 -1
- package/src/select/positioner/SelectPositioner.tsx +18 -1
- package/src/select/root/SelectRoot.tsx +109 -9
- package/src/select/store/SelectHandle.ts +68 -0
- package/src/select/store/SelectStore.ts +44 -1
- package/src/select/trigger/SelectTrigger.tsx +81 -8
- package/src/slider/root/SliderRoot.tsx +11 -1
- package/src/slider/thumb/SliderThumb.tsx +10 -1
- package/src/switch/root/SwitchRoot.tsx +5 -2
- package/src/tabs/tab/TabsTab.tsx +2 -10
- package/src/tooltip/popup/TooltipPopup.tsx +20 -1
- package/src/tooltip/positioner/TooltipPositioner.tsx +14 -0
- package/src/tooltip/store/TooltipStore.ts +20 -1
- package/src/tooltip/trigger/TooltipTrigger.tsx +5 -2
- package/lib/combobox/root/useComboboxRoot.d.ts +0 -29
- package/lib/combobox/root/useComboboxRoot.d.ts.map +0 -1
- package/lib/combobox/root/useComboboxRoot.js +0 -168
- package/lib/combobox/root/useComboboxRoot.js.map +0 -1
- package/lib/utils/fastObjectShallowCompare.d.ts +0 -2
- package/lib/utils/fastObjectShallowCompare.d.ts.map +0 -1
- package/lib/utils/fastObjectShallowCompare.js +0 -29
- package/lib/utils/fastObjectShallowCompare.js.map +0 -1
- package/lib/utils/mergeObjects.d.ts +0 -2
- package/lib/utils/mergeObjects.d.ts.map +0 -1
- package/lib/utils/mergeObjects.js +0 -16
- package/lib/utils/mergeObjects.js.map +0 -1
- package/src/combobox/root/useComboboxRoot.ts +0 -190
- package/src/utils/fastObjectShallowCompare.ts +0 -30
- package/src/utils/mergeObjects.ts +0 -15
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createSelector } from '../../store/createSelector';
|
|
2
2
|
import { ReactStore } from '../../store/ReactStore';
|
|
3
|
+
import { PopupTriggerMap } from '../../utils/popups/PopupTriggerMap';
|
|
3
4
|
import type { SelectRoot } from '../root/SelectRoot';
|
|
4
5
|
|
|
5
6
|
/**
|
|
@@ -101,6 +102,7 @@ export type State = {
|
|
|
101
102
|
disabled: boolean;
|
|
102
103
|
readOnly: boolean;
|
|
103
104
|
required: boolean;
|
|
105
|
+
disablePointerDismissal: boolean;
|
|
104
106
|
/**
|
|
105
107
|
* The anchor's native node, carried across the portal boundary.
|
|
106
108
|
*/
|
|
@@ -111,11 +113,37 @@ export type State = {
|
|
|
111
113
|
*/
|
|
112
114
|
labelId: string | undefined;
|
|
113
115
|
update: (() => void) | undefined;
|
|
116
|
+
/**
|
|
117
|
+
* The trigger's measured width, used to size the popup.
|
|
118
|
+
*/
|
|
119
|
+
triggerWidth: number | undefined;
|
|
120
|
+
/**
|
|
121
|
+
* The trigger's measured height.
|
|
122
|
+
*/
|
|
123
|
+
triggerHeight: number | undefined;
|
|
124
|
+
/**
|
|
125
|
+
* The payload of the trigger the select was opened by, handed to the root's
|
|
126
|
+
* children when they are a function.
|
|
127
|
+
*/
|
|
128
|
+
payload: unknown;
|
|
129
|
+
/**
|
|
130
|
+
* The id of the trigger the select is associated with, or `null` for none.
|
|
131
|
+
*/
|
|
132
|
+
triggerId: string | null;
|
|
133
|
+
/**
|
|
134
|
+
* The controlled `triggerId` prop, when provided.
|
|
135
|
+
*/
|
|
136
|
+
triggerIdProp: string | null | undefined;
|
|
114
137
|
};
|
|
115
138
|
|
|
116
139
|
type Context = {
|
|
117
140
|
onValueChange: ((value: any, eventDetails: SelectRoot.ChangeEventDetails) => void) | undefined;
|
|
118
141
|
onOpenChange: ((open: boolean, eventDetails: SelectRoot.ChangeEventDetails) => void) | undefined;
|
|
142
|
+
/**
|
|
143
|
+
* Every trigger bound to this select, by id. A handle resolves `open(id)`
|
|
144
|
+
* through this, which is what lets a trigger rendered outside the root open it.
|
|
145
|
+
*/
|
|
146
|
+
triggerNodes: PopupTriggerMap;
|
|
119
147
|
};
|
|
120
148
|
|
|
121
149
|
const selectors = {
|
|
@@ -132,6 +160,11 @@ const selectors = {
|
|
|
132
160
|
triggerNode: createSelector((state: State) => state.triggerNode),
|
|
133
161
|
labelId: createSelector((state: State) => state.labelId),
|
|
134
162
|
update: createSelector((state: State) => state.update),
|
|
163
|
+
triggerWidth: createSelector((state: State) => state.triggerWidth),
|
|
164
|
+
triggerHeight: createSelector((state: State) => state.triggerHeight),
|
|
165
|
+
disablePointerDismissal: createSelector((state: State) => state.disablePointerDismissal),
|
|
166
|
+
payload: createSelector((state: State) => state.payload),
|
|
167
|
+
triggerId: createSelector((state: State) => state.triggerIdProp ?? state.triggerId),
|
|
135
168
|
};
|
|
136
169
|
|
|
137
170
|
export class SelectStore extends ReactStore<Readonly<State>, Context, typeof selectors> {
|
|
@@ -148,12 +181,22 @@ export class SelectStore extends ReactStore<Readonly<State>, Context, typeof sel
|
|
|
148
181
|
disabled: false,
|
|
149
182
|
readOnly: false,
|
|
150
183
|
required: false,
|
|
184
|
+
disablePointerDismissal: false,
|
|
151
185
|
triggerNode: null,
|
|
152
186
|
labelId: undefined,
|
|
153
187
|
update: undefined,
|
|
188
|
+
triggerWidth: undefined,
|
|
189
|
+
triggerHeight: undefined,
|
|
190
|
+
payload: undefined,
|
|
191
|
+
triggerId: null,
|
|
192
|
+
triggerIdProp: undefined,
|
|
154
193
|
...initialState,
|
|
155
194
|
},
|
|
156
|
-
{
|
|
195
|
+
{
|
|
196
|
+
onValueChange: undefined,
|
|
197
|
+
onOpenChange: undefined,
|
|
198
|
+
triggerNodes: new PopupTriggerMap(),
|
|
199
|
+
},
|
|
157
200
|
selectors,
|
|
158
201
|
);
|
|
159
202
|
}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { Pressable, type GestureResponderEvent } from 'react-native';
|
|
4
|
-
import {
|
|
3
|
+
import { Pressable, type GestureResponderEvent, type LayoutChangeEvent } from 'react-native';
|
|
4
|
+
import { SelectRootContext } from '../root/SelectRootContext';
|
|
5
5
|
import { useRenderElement } from '../../use-render/useRenderElement';
|
|
6
6
|
import { useButton } from '../../internals/use-button/useButton';
|
|
7
|
+
import { useFieldControlRegistration } from '../../internals/field/useFieldControlRegistration';
|
|
8
|
+
import { useId } from '../../hooks/useId';
|
|
9
|
+
import { useIsoLayoutEffect } from '../../hooks/useIsoLayoutEffect';
|
|
7
10
|
import { useMergedRefs } from '../../hooks/useMergedRefs';
|
|
11
|
+
import { usePopupHandleStore } from '../../utils/popups/usePopupHandleStore';
|
|
12
|
+
import type { SelectHandle } from '../store/SelectHandle';
|
|
13
|
+
import type { SelectStore } from '../store/SelectStore';
|
|
8
14
|
import type { ZestUIComponentProps } from '../../types';
|
|
9
15
|
import { createChangeEventDetails } from '../../utils/createChangeEventDetails';
|
|
10
16
|
import { REASONS } from '../../utils/reasons';
|
|
@@ -12,18 +18,42 @@ import { REASONS } from '../../utils/reasons';
|
|
|
12
18
|
/**
|
|
13
19
|
* A button that opens the select popup, and the element it is positioned against.
|
|
14
20
|
* Renders a `<Pressable>`.
|
|
21
|
+
*
|
|
22
|
+
* Pass a `handle` to render a trigger outside of its `Select.Root`: there is no
|
|
23
|
+
* context reaching across, so the handle is what connects the two.
|
|
15
24
|
*/
|
|
16
|
-
export function SelectTrigger(componentProps: SelectTrigger.Props) {
|
|
25
|
+
export function SelectTrigger<Payload = unknown>(componentProps: SelectTrigger.Props<Payload>) {
|
|
17
26
|
const {
|
|
18
27
|
render,
|
|
19
28
|
className,
|
|
20
29
|
style,
|
|
21
30
|
disabled: disabledProp = false,
|
|
31
|
+
handle,
|
|
32
|
+
nativeID: idProp,
|
|
33
|
+
payload,
|
|
22
34
|
ref,
|
|
23
35
|
...elementProps
|
|
24
36
|
} = componentProps;
|
|
25
37
|
|
|
26
|
-
const
|
|
38
|
+
const rootStore = React.useContext(SelectRootContext);
|
|
39
|
+
const handleStore = usePopupHandleStore(handle);
|
|
40
|
+
|
|
41
|
+
// A trigger inside a root uses that root; a detached one follows its handle,
|
|
42
|
+
// which resolves to the attached root's store or to an inert fallback.
|
|
43
|
+
const store = (handleStore ?? rootStore) as SelectStore | undefined;
|
|
44
|
+
|
|
45
|
+
if (store === undefined) {
|
|
46
|
+
throw new Error(
|
|
47
|
+
'Zest: Select.Trigger must be placed within <Select.Root>, or given a `handle` it shares with one.',
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const id = useId(idProp ?? undefined);
|
|
52
|
+
|
|
53
|
+
// The trigger is the element assistive tech announces, so the field's label
|
|
54
|
+
// and messages attach here rather than to the root.
|
|
55
|
+
const { fieldProps } = useFieldControlRegistration();
|
|
56
|
+
|
|
27
57
|
const open = store.useState('open');
|
|
28
58
|
const rootDisabled = store.useState('disabled');
|
|
29
59
|
const readOnly = store.useState('readOnly');
|
|
@@ -36,14 +66,31 @@ export function SelectTrigger(componentProps: SelectTrigger.Props) {
|
|
|
36
66
|
|
|
37
67
|
const { getButtonProps } = useButton({ disabled });
|
|
38
68
|
|
|
69
|
+
const triggerRef = React.useRef<unknown>(null);
|
|
39
70
|
const anchorRef = React.useCallback(
|
|
40
71
|
(node: unknown) => {
|
|
72
|
+
triggerRef.current = node;
|
|
41
73
|
store.set('triggerNode', node);
|
|
42
74
|
},
|
|
43
75
|
[store],
|
|
44
76
|
);
|
|
45
77
|
const mergedRef = useMergedRefs(ref, anchorRef);
|
|
46
78
|
|
|
79
|
+
// Registering into whichever store is current is what lets a handle resolve
|
|
80
|
+
// `open(id)`. The effect re-runs when the handle swaps stores, migrating the
|
|
81
|
+
// registration to the root that just attached.
|
|
82
|
+
useIsoLayoutEffect(() => {
|
|
83
|
+
if (id === undefined) {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
store.context.triggerNodes.add(id, triggerRef.current);
|
|
88
|
+
|
|
89
|
+
return () => {
|
|
90
|
+
store.context.triggerNodes.delete(id);
|
|
91
|
+
};
|
|
92
|
+
}, [store, id]);
|
|
93
|
+
|
|
47
94
|
const state: SelectTriggerState = { disabled, open, pressed, readOnly, required };
|
|
48
95
|
|
|
49
96
|
return useRenderElement(Pressable, componentProps, {
|
|
@@ -51,11 +98,19 @@ export function SelectTrigger(componentProps: SelectTrigger.Props) {
|
|
|
51
98
|
ref: mergedRef,
|
|
52
99
|
props: [
|
|
53
100
|
{
|
|
101
|
+
nativeID: id,
|
|
54
102
|
onPress(event: GestureResponderEvent) {
|
|
55
103
|
if (readOnly) {
|
|
56
104
|
return;
|
|
57
105
|
}
|
|
58
106
|
|
|
107
|
+
if (payload !== undefined) {
|
|
108
|
+
store.set('payload', payload);
|
|
109
|
+
}
|
|
110
|
+
if (id !== undefined) {
|
|
111
|
+
store.set('triggerId', id);
|
|
112
|
+
}
|
|
113
|
+
|
|
59
114
|
store.setOpen(!open, createChangeEventDetails(REASONS.triggerPress, event));
|
|
60
115
|
},
|
|
61
116
|
onPressIn() {
|
|
@@ -64,15 +119,22 @@ export function SelectTrigger(componentProps: SelectTrigger.Props) {
|
|
|
64
119
|
onPressOut() {
|
|
65
120
|
setPressed(false);
|
|
66
121
|
},
|
|
67
|
-
onLayout() {
|
|
122
|
+
onLayout(event: LayoutChangeEvent) {
|
|
123
|
+
const { width, height } = event.nativeEvent.layout;
|
|
124
|
+
store.set('triggerWidth', width);
|
|
125
|
+
store.set('triggerHeight', height);
|
|
68
126
|
store.state.update?.();
|
|
69
127
|
},
|
|
70
128
|
accessibilityRole: 'combobox' as const,
|
|
71
|
-
accessibilityLabelledBy: labelId,
|
|
72
129
|
accessibilityState: { expanded: open, disabled: disabled || undefined },
|
|
73
130
|
'aria-haspopup': 'listbox' as const,
|
|
74
131
|
'aria-readonly': readOnly || undefined,
|
|
75
132
|
'aria-required': required || undefined,
|
|
133
|
+
...fieldProps,
|
|
134
|
+
// A surrounding `Field.Label` names the control; `Select.Label` is the
|
|
135
|
+
// fallback for a select that stands on its own.
|
|
136
|
+
accessibilityLabelledBy: fieldProps.accessibilityLabelledBy ?? labelId,
|
|
137
|
+
'aria-labelledby': fieldProps['aria-labelledby'] ?? labelId,
|
|
76
138
|
},
|
|
77
139
|
elementProps,
|
|
78
140
|
getButtonProps,
|
|
@@ -88,16 +150,27 @@ export interface SelectTriggerState {
|
|
|
88
150
|
required: boolean;
|
|
89
151
|
}
|
|
90
152
|
|
|
91
|
-
export interface SelectTriggerProps
|
|
153
|
+
export interface SelectTriggerProps<Payload = unknown>
|
|
92
154
|
extends ZestUIComponentProps<typeof Pressable, SelectTriggerState> {
|
|
93
155
|
/**
|
|
94
156
|
* Whether the component should ignore user interaction.
|
|
95
157
|
* @default false
|
|
96
158
|
*/
|
|
97
159
|
disabled?: boolean | undefined;
|
|
160
|
+
/**
|
|
161
|
+
* A handle shared with a `Select.Root`, which is what lets this trigger live
|
|
162
|
+
* outside of it. Create one with `Select.createHandle()`.
|
|
163
|
+
*
|
|
164
|
+
* The trigger's `nativeID` is the id a handle's `open(triggerId)` resolves.
|
|
165
|
+
*/
|
|
166
|
+
handle?: SelectHandle<Payload> | undefined;
|
|
167
|
+
/**
|
|
168
|
+
* A payload handed to the root's children when they are a function.
|
|
169
|
+
*/
|
|
170
|
+
payload?: Payload | undefined;
|
|
98
171
|
}
|
|
99
172
|
|
|
100
173
|
export namespace SelectTrigger {
|
|
101
174
|
export type State = SelectTriggerState;
|
|
102
|
-
export type Props = SelectTriggerProps
|
|
175
|
+
export type Props<TPayload = unknown> = SelectTriggerProps<TPayload>;
|
|
103
176
|
}
|
|
@@ -5,6 +5,7 @@ import { useControlled } from '../../hooks/useControlled';
|
|
|
5
5
|
import { useIsoLayoutEffect } from '../../hooks/useIsoLayoutEffect';
|
|
6
6
|
import { useStableCallback } from '../../hooks/useStableCallback';
|
|
7
7
|
import { useRenderElement } from '../../use-render/useRenderElement';
|
|
8
|
+
import { useFieldControlRegistration } from '../../internals/field/useFieldControlRegistration';
|
|
8
9
|
import { clamp } from '../../utils/clamp';
|
|
9
10
|
import type { ZestUIComponentProps, Orientation } from '../../types';
|
|
10
11
|
import type { ZestChangeEventDetails } from '../../utils/createChangeEventDetails';
|
|
@@ -24,7 +25,7 @@ export function SliderRoot<Value extends number | readonly number[] = number>(
|
|
|
24
25
|
const {
|
|
25
26
|
className,
|
|
26
27
|
defaultValue,
|
|
27
|
-
disabled = false,
|
|
28
|
+
disabled: disabledProp = false,
|
|
28
29
|
format,
|
|
29
30
|
locale,
|
|
30
31
|
max = 100,
|
|
@@ -41,6 +42,12 @@ export function SliderRoot<Value extends number | readonly number[] = number>(
|
|
|
41
42
|
...elementProps
|
|
42
43
|
} = componentProps;
|
|
43
44
|
|
|
45
|
+
const { fieldDisabled, markChanged, markTouched } = useFieldControlRegistration({
|
|
46
|
+
initialValue: defaultValue ?? value,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
const disabled = disabledProp || fieldDisabled;
|
|
50
|
+
|
|
44
51
|
// A range slider is just a slider whose value is an array; remember which
|
|
45
52
|
// shape the consumer used so callbacks hand back the same one.
|
|
46
53
|
const isRange = Array.isArray(value ?? defaultValue);
|
|
@@ -123,6 +130,7 @@ export function SliderRoot<Value extends number | readonly number[] = number>(
|
|
|
123
130
|
|
|
124
131
|
valuesRef.current = nextValues;
|
|
125
132
|
setValuesState(nextValues);
|
|
133
|
+
markChanged(fromArray(nextValues, isRange));
|
|
126
134
|
},
|
|
127
135
|
);
|
|
128
136
|
|
|
@@ -154,6 +162,8 @@ export function SliderRoot<Value extends number | readonly number[] = number>(
|
|
|
154
162
|
|
|
155
163
|
const commitValue = useStableCallback((eventDetails: SliderRoot.ChangeEventDetails) => {
|
|
156
164
|
onValueCommitted?.(fromArray(valuesRef.current, isRange) as Value, eventDetails);
|
|
165
|
+
// Releasing the thumb is the end of the interaction — a slider's blur.
|
|
166
|
+
markTouched(fromArray(valuesRef.current, isRange));
|
|
157
167
|
});
|
|
158
168
|
|
|
159
169
|
const state: SliderRootState = React.useMemo(
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { View } from 'react-native';
|
|
3
3
|
import { useSliderRootContext } from '../root/SliderRootContext';
|
|
4
4
|
import { useRenderElement } from '../../use-render/useRenderElement';
|
|
5
|
+
import { useFieldControlRegistration } from '../../internals/field/useFieldControlRegistration';
|
|
5
6
|
import { formatNumber } from '../../utils/formatNumber';
|
|
6
7
|
import type { SliderRootState } from '../root/SliderRoot';
|
|
7
8
|
import type { ZestUIComponentProps } from '../../types';
|
|
@@ -20,6 +21,10 @@ export function SliderThumb(componentProps: SliderThumb.Props) {
|
|
|
20
21
|
const { disabled, format, labelId, locale, max, min, orientation, state, values } =
|
|
21
22
|
useSliderRootContext();
|
|
22
23
|
|
|
24
|
+
// The thumb is what assistive tech announces and adjusts, so a surrounding
|
|
25
|
+
// field's label and messages attach here rather than to the root.
|
|
26
|
+
const { fieldProps } = useFieldControlRegistration();
|
|
27
|
+
|
|
23
28
|
const value = values[index] ?? min;
|
|
24
29
|
const percent = max === min ? 0 : ((value - min) / (max - min)) * 100;
|
|
25
30
|
|
|
@@ -37,7 +42,6 @@ export function SliderThumb(componentProps: SliderThumb.Props) {
|
|
|
37
42
|
{
|
|
38
43
|
style: positionStyle,
|
|
39
44
|
accessibilityRole: 'adjustable' as const,
|
|
40
|
-
accessibilityLabelledBy: labelId,
|
|
41
45
|
accessibilityState: { disabled: disabled || undefined },
|
|
42
46
|
accessibilityValue: {
|
|
43
47
|
min,
|
|
@@ -46,6 +50,11 @@ export function SliderThumb(componentProps: SliderThumb.Props) {
|
|
|
46
50
|
text: formatValue(value, format, locale),
|
|
47
51
|
},
|
|
48
52
|
'aria-orientation': orientation,
|
|
53
|
+
...fieldProps,
|
|
54
|
+
// A surrounding `Field.Label` names the control; `Slider.Label` is the
|
|
55
|
+
// fallback for a slider that stands on its own.
|
|
56
|
+
accessibilityLabelledBy: fieldProps.accessibilityLabelledBy ?? labelId,
|
|
57
|
+
'aria-labelledby': fieldProps['aria-labelledby'] ?? labelId,
|
|
49
58
|
},
|
|
50
59
|
elementProps,
|
|
51
60
|
],
|
|
@@ -35,7 +35,9 @@ export function SwitchRoot(componentProps: SwitchRoot.Props) {
|
|
|
35
35
|
...elementProps
|
|
36
36
|
} = componentProps;
|
|
37
37
|
|
|
38
|
-
const { fieldDisabled, fieldProps,
|
|
38
|
+
const { fieldDisabled, fieldProps, markChanged, markTouched } = useFieldControlRegistration({
|
|
39
|
+
initialValue: defaultChecked ?? checkedProp ?? false,
|
|
40
|
+
});
|
|
39
41
|
|
|
40
42
|
const disabled = disabledProp || fieldDisabled;
|
|
41
43
|
|
|
@@ -78,7 +80,8 @@ export function SwitchRoot(componentProps: SwitchRoot.Props) {
|
|
|
78
80
|
}
|
|
79
81
|
|
|
80
82
|
setCheckedState(nextChecked);
|
|
81
|
-
|
|
83
|
+
markChanged(nextChecked);
|
|
84
|
+
markTouched(nextChecked);
|
|
82
85
|
},
|
|
83
86
|
accessibilityRole: 'switch' as const,
|
|
84
87
|
accessibilityState: {
|
package/src/tabs/tab/TabsTab.tsx
CHANGED
|
@@ -7,7 +7,7 @@ import { useButton } from '../../internals/use-button/useButton';
|
|
|
7
7
|
import { useCompositeListItem } from '../../internals/composite/list/useCompositeListItem';
|
|
8
8
|
import type { CompositeItemLayout } from '../../internals/composite/list/CompositeListContext';
|
|
9
9
|
import { useTabsRootContext } from '../root/TabsRootContext';
|
|
10
|
-
import type { TabsRoot } from '../root/TabsRoot';
|
|
10
|
+
import type { TabsRoot, TabsRootState } from '../root/TabsRoot';
|
|
11
11
|
import type { ZestUIComponentProps } from '../../types';
|
|
12
12
|
import { createChangeEventDetails } from '../../utils/createChangeEventDetails';
|
|
13
13
|
import { REASONS } from '../../utils/reasons';
|
|
@@ -106,7 +106,7 @@ export interface TabsTabMetadata {
|
|
|
106
106
|
layout?: CompositeItemLayout | undefined;
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
export interface TabsTabState {
|
|
109
|
+
export interface TabsTabState extends TabsRootState {
|
|
110
110
|
/**
|
|
111
111
|
* Whether the component should ignore user interaction.
|
|
112
112
|
*/
|
|
@@ -115,14 +115,6 @@ export interface TabsTabState {
|
|
|
115
115
|
* Whether the component is active.
|
|
116
116
|
*/
|
|
117
117
|
active: boolean;
|
|
118
|
-
/**
|
|
119
|
-
* The component orientation.
|
|
120
|
-
*/
|
|
121
|
-
orientation: TabsRoot.Orientation;
|
|
122
|
-
/**
|
|
123
|
-
* The direction used for tab activation.
|
|
124
|
-
*/
|
|
125
|
-
tabActivationDirection: TabsTab.ActivationDirection;
|
|
126
118
|
/**
|
|
127
119
|
* Whether the tab is currently pressed.
|
|
128
120
|
*/
|
|
@@ -20,8 +20,17 @@ export function TooltipPopup(componentProps: TooltipPopup.Props) {
|
|
|
20
20
|
const { transitionStatus } = useTooltipTransitionContext() ?? { transitionStatus: undefined };
|
|
21
21
|
|
|
22
22
|
const open = store.useState('open');
|
|
23
|
+
const triggerWidth = store.useState('triggerWidth');
|
|
24
|
+
const triggerHeight = store.useState('triggerHeight');
|
|
23
25
|
|
|
24
|
-
const state: TooltipPopupState = {
|
|
26
|
+
const state: TooltipPopupState = {
|
|
27
|
+
open,
|
|
28
|
+
transitionStatus,
|
|
29
|
+
side,
|
|
30
|
+
align,
|
|
31
|
+
triggerWidth,
|
|
32
|
+
triggerHeight,
|
|
33
|
+
};
|
|
25
34
|
|
|
26
35
|
return useRenderElement(View, componentProps, {
|
|
27
36
|
state,
|
|
@@ -57,6 +66,16 @@ export interface TooltipPopupState {
|
|
|
57
66
|
* The alignment the popup was actually placed with.
|
|
58
67
|
*/
|
|
59
68
|
align: Align;
|
|
69
|
+
/**
|
|
70
|
+
* The trigger's measured width, available for consumers to size the popup
|
|
71
|
+
* against its anchor. This is the React Native equivalent of the web's
|
|
72
|
+
* `--anchor-width` CSS variable.
|
|
73
|
+
*/
|
|
74
|
+
triggerWidth: number | undefined;
|
|
75
|
+
/**
|
|
76
|
+
* The trigger's measured height.
|
|
77
|
+
*/
|
|
78
|
+
triggerHeight: number | undefined;
|
|
60
79
|
}
|
|
61
80
|
|
|
62
81
|
export interface TooltipPopupProps extends ZestUIComponentProps<typeof View, TooltipPopupState> {}
|
|
@@ -38,6 +38,8 @@ export function TooltipPositioner(componentProps: TooltipPositioner.Props) {
|
|
|
38
38
|
useTooltipPortalContext();
|
|
39
39
|
const store = useTooltipRootContext();
|
|
40
40
|
const open = store.useState('open');
|
|
41
|
+
const triggerWidth = store.useState('triggerWidth');
|
|
42
|
+
const triggerHeight = store.useState('triggerHeight');
|
|
41
43
|
const triggerNode = store.useState('triggerNode');
|
|
42
44
|
|
|
43
45
|
const positioning = useAnchorPositioning({
|
|
@@ -69,6 +71,8 @@ export function TooltipPositioner(componentProps: TooltipPositioner.Props) {
|
|
|
69
71
|
open,
|
|
70
72
|
side: positioning.side,
|
|
71
73
|
align: positioning.align,
|
|
74
|
+
triggerWidth,
|
|
75
|
+
triggerHeight,
|
|
72
76
|
};
|
|
73
77
|
|
|
74
78
|
const contextValue: TooltipPositionerContext = React.useMemo(
|
|
@@ -101,6 +105,16 @@ export interface TooltipPositionerState {
|
|
|
101
105
|
open: boolean;
|
|
102
106
|
side: Side;
|
|
103
107
|
align: Align;
|
|
108
|
+
/**
|
|
109
|
+
* The trigger's measured width, available for consumers to size the popup
|
|
110
|
+
* against its anchor. This is the React Native equivalent of the web's
|
|
111
|
+
* `--anchor-width` CSS variable.
|
|
112
|
+
*/
|
|
113
|
+
triggerWidth: number | undefined;
|
|
114
|
+
/**
|
|
115
|
+
* The trigger's measured height.
|
|
116
|
+
*/
|
|
117
|
+
triggerHeight: number | undefined;
|
|
104
118
|
}
|
|
105
119
|
|
|
106
120
|
export interface TooltipPositionerProps
|
|
@@ -9,6 +9,15 @@ export type State = {
|
|
|
9
9
|
* The anchor's native node, carried across the portal boundary.
|
|
10
10
|
*/
|
|
11
11
|
triggerNode: unknown;
|
|
12
|
+
/**
|
|
13
|
+
* The trigger's measured width, the React Native counterpart of the web's
|
|
14
|
+
* `--anchor-width` CSS variable.
|
|
15
|
+
*/
|
|
16
|
+
triggerWidth: number | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* The trigger's measured height.
|
|
19
|
+
*/
|
|
20
|
+
triggerHeight: number | undefined;
|
|
12
21
|
update: (() => void) | undefined;
|
|
13
22
|
};
|
|
14
23
|
|
|
@@ -19,13 +28,23 @@ type Context = {
|
|
|
19
28
|
const selectors = {
|
|
20
29
|
open: createSelector((state: State) => state.openProp ?? state.open),
|
|
21
30
|
triggerNode: createSelector((state: State) => state.triggerNode),
|
|
31
|
+
triggerWidth: createSelector((state: State) => state.triggerWidth),
|
|
32
|
+
triggerHeight: createSelector((state: State) => state.triggerHeight),
|
|
22
33
|
update: createSelector((state: State) => state.update),
|
|
23
34
|
};
|
|
24
35
|
|
|
25
36
|
export class TooltipStore extends ReactStore<Readonly<State>, Context, typeof selectors> {
|
|
26
37
|
constructor(initialState?: Partial<State>) {
|
|
27
38
|
super(
|
|
28
|
-
{
|
|
39
|
+
{
|
|
40
|
+
open: false,
|
|
41
|
+
openProp: undefined,
|
|
42
|
+
triggerNode: null,
|
|
43
|
+
triggerWidth: undefined,
|
|
44
|
+
triggerHeight: undefined,
|
|
45
|
+
update: undefined,
|
|
46
|
+
...initialState,
|
|
47
|
+
},
|
|
29
48
|
{ onOpenChange: undefined },
|
|
30
49
|
selectors,
|
|
31
50
|
);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { Pressable, type GestureResponderEvent } from 'react-native';
|
|
3
|
+
import { Pressable, type GestureResponderEvent, type LayoutChangeEvent } from 'react-native';
|
|
4
4
|
import { useTooltipRootContext } from '../root/TooltipRootContext';
|
|
5
5
|
import { useRenderElement } from '../../use-render/useRenderElement';
|
|
6
6
|
import { useMergedRefs } from '../../hooks/useMergedRefs';
|
|
@@ -61,7 +61,10 @@ export function TooltipTrigger(componentProps: TooltipTrigger.Props) {
|
|
|
61
61
|
onPressOut() {
|
|
62
62
|
setPressed(false);
|
|
63
63
|
},
|
|
64
|
-
onLayout() {
|
|
64
|
+
onLayout(event: LayoutChangeEvent) {
|
|
65
|
+
const { width, height } = event.nativeEvent.layout;
|
|
66
|
+
store.set('triggerWidth', width);
|
|
67
|
+
store.set('triggerHeight', height);
|
|
65
68
|
store.state.update?.();
|
|
66
69
|
},
|
|
67
70
|
accessibilityState: { expanded: open, disabled: disabled || undefined },
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import type { ZestNativeEvent } from '../../utils/createChangeEventDetails';
|
|
2
|
-
import { ComboboxRootContext, type ComboboxItem } from './ComboboxRootContext';
|
|
3
|
-
export type ComboboxItems = ReadonlyArray<string | {
|
|
4
|
-
value: unknown;
|
|
5
|
-
label: string;
|
|
6
|
-
}>;
|
|
7
|
-
export interface UseComboboxRootParameters {
|
|
8
|
-
mode: 'combobox' | 'autocomplete';
|
|
9
|
-
items: ComboboxItems | undefined;
|
|
10
|
-
value?: unknown;
|
|
11
|
-
defaultValue?: unknown;
|
|
12
|
-
onValueChange?: ((value: unknown) => void) | undefined;
|
|
13
|
-
inputValue?: string | undefined;
|
|
14
|
-
defaultInputValue?: string | undefined;
|
|
15
|
-
onInputValueChange?: ((value: string) => void) | undefined;
|
|
16
|
-
open?: boolean | undefined;
|
|
17
|
-
defaultOpen?: boolean | undefined;
|
|
18
|
-
onOpenChange?: ((open: boolean, event?: ZestNativeEvent) => void) | undefined;
|
|
19
|
-
openOnFocus?: boolean | undefined;
|
|
20
|
-
filter?: ((item: ComboboxItem, query: string) => boolean) | undefined;
|
|
21
|
-
disabled: boolean;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* The state behind `Combobox.Root` and `Autocomplete.Root`: the resolved item
|
|
25
|
-
* list, the filtered view of it, the input text, the selection, and the open
|
|
26
|
-
* state — plus the anchor plumbing the popup needs.
|
|
27
|
-
*/
|
|
28
|
-
export declare function useComboboxRoot(parameters: UseComboboxRootParameters): ComboboxRootContext;
|
|
29
|
-
//# sourceMappingURL=useComboboxRoot.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useComboboxRoot.d.ts","sourceRoot":"","sources":["../../../src/combobox/root/useComboboxRoot.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAYtF,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,UAAU,GAAG,cAAc,CAAC;IAClC,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACvD,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,kBAAkB,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC3D,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC9E,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IACtE,QAAQ,EAAE,OAAO,CAAC;CACnB;AAKD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,yBAAyB,GAAG,mBAAmB,CAgJ1F"}
|