@basic-ui/core 0.0.52 → 0.0.53
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 -3
- package/build/cjs/index.js +105 -89
- package/build/cjs/index.js.map +1 -1
- package/build/esm/Accordion/Accordion.d.ts +9 -9
- package/build/esm/Accordion/Accordion.js.map +1 -1
- package/build/esm/Accordion/AccordionBody.d.ts +6 -6
- package/build/esm/Accordion/AccordionBody.js.map +1 -1
- package/build/esm/Accordion/AccordionHeader.d.ts +7 -7
- package/build/esm/Accordion/AccordionHeader.js.map +1 -1
- package/build/esm/Accordion/AccordionItem.d.ts +9 -9
- package/build/esm/Accordion/AccordionItem.js.map +1 -1
- package/build/esm/Accordion/context.d.ts +19 -19
- package/build/esm/Accordion/context.js.map +1 -1
- package/build/esm/Accordion/index.d.ts +4 -4
- package/build/esm/Accordion/index.js.map +1 -1
- package/build/esm/Accordion/scopeQuery.d.ts +2 -2
- package/build/esm/Accordion/scopeQuery.js.map +1 -1
- package/build/esm/Carousel/Carousel.d.ts +9 -0
- package/build/esm/Carousel/Carousel.js +38 -0
- package/build/esm/Carousel/Carousel.js.map +1 -0
- package/build/esm/Carousel/Fader.d.ts +14 -0
- package/build/esm/Carousel/Fader.js +76 -0
- package/build/esm/Carousel/Fader.js.map +1 -0
- package/build/esm/Carousel/FaderItem.d.ts +5 -0
- package/build/esm/Carousel/FaderItem.js +16 -0
- package/build/esm/Carousel/FaderItem.js.map +1 -0
- package/build/esm/Carousel/Preloader.d.ts +7 -0
- package/build/esm/Carousel/Preloader.js +70 -0
- package/build/esm/Carousel/Preloader.js.map +1 -0
- package/build/esm/Carousel/Slider.d.ts +14 -0
- package/build/esm/Carousel/Slider.js +212 -0
- package/build/esm/Carousel/Slider.js.map +1 -0
- package/build/esm/Carousel/SliderItem.d.ts +12 -0
- package/build/esm/Carousel/SliderItem.js +41 -0
- package/build/esm/Carousel/SliderItem.js.map +1 -0
- package/build/esm/Carousel/context.d.ts +10 -0
- package/build/esm/Carousel/context.js +8 -0
- package/build/esm/Carousel/context.js.map +1 -0
- package/build/esm/Carousel/getSliderParams.d.ts +9 -0
- package/build/esm/Carousel/getSliderParams.js +85 -0
- package/build/esm/Carousel/getSliderParams.js.map +1 -0
- package/build/esm/Carousel/index.d.ts +7 -0
- package/build/esm/Carousel/index.js +8 -0
- package/build/esm/Carousel/index.js.map +1 -0
- package/build/esm/Carousel/useCarouselGestures.d.ts +30 -0
- package/build/esm/Carousel/useCarouselGestures.js +33 -0
- package/build/esm/Carousel/useCarouselGestures.js.map +1 -0
- package/build/esm/CheckBox/CheckBox.d.ts +7 -7
- package/build/esm/CheckBox/CheckBox.js.map +1 -1
- package/build/esm/CheckBox/index.d.ts +1 -1
- package/build/esm/CheckBox/index.js.map +1 -1
- package/build/esm/ComboBox/Combobox.d.ts +18 -18
- package/build/esm/ComboBox/Combobox.js.map +1 -1
- package/build/esm/ComboBox/ComboboxButton.d.ts +9 -9
- package/build/esm/ComboBox/ComboboxButton.js.map +1 -1
- package/build/esm/ComboBox/ComboboxInput.d.ts +17 -17
- package/build/esm/ComboBox/ComboboxInput.js.map +1 -1
- package/build/esm/ComboBox/ComboboxLabel.d.ts +7 -7
- package/build/esm/ComboBox/ComboboxLabel.js.map +1 -1
- package/build/esm/ComboBox/ComboboxList.d.ts +8 -8
- package/build/esm/ComboBox/ComboboxList.js.map +1 -1
- package/build/esm/ComboBox/ComboboxOption.d.ts +11 -11
- package/build/esm/ComboBox/ComboboxOption.js.map +1 -1
- package/build/esm/ComboBox/ComboboxPopover.d.ts +9 -9
- package/build/esm/ComboBox/ComboboxPopover.js.map +1 -1
- package/build/esm/ComboBox/cities.d.ts +5 -5
- package/build/esm/ComboBox/cities.js.map +1 -1
- package/build/esm/ComboBox/context.d.ts +30 -30
- package/build/esm/ComboBox/context.js.map +1 -1
- package/build/esm/ComboBox/hooks.d.ts +37 -37
- package/build/esm/ComboBox/hooks.js.map +1 -1
- package/build/esm/ComboBox/index.d.ts +8 -8
- package/build/esm/ComboBox/index.js.map +1 -1
- package/build/esm/ComboBox/makeHash.d.ts +1 -1
- package/build/esm/ComboBox/makeHash.js.map +1 -1
- package/build/esm/ComboBox/scopeQuery.d.ts +1 -1
- package/build/esm/ComboBox/scopeQuery.js.map +1 -1
- package/build/esm/DatePicker/DatePicker.d.ts +24 -0
- package/build/esm/DatePicker/DatePicker.js +101 -0
- package/build/esm/DatePicker/DatePicker.js.map +1 -0
- package/build/esm/DatePicker/DatePickerSelect.d.ts +8 -0
- package/build/esm/DatePicker/DatePickerSelect.js +201 -0
- package/build/esm/DatePicker/DatePickerSelect.js.map +1 -0
- package/build/esm/DatePicker/RangeDatePicker.d.ts +28 -0
- package/build/esm/DatePicker/RangeDatePicker.js +94 -0
- package/build/esm/DatePicker/RangeDatePicker.js.map +1 -0
- package/build/esm/DatePicker/adjustDates.d.ts +4 -0
- package/build/esm/DatePicker/adjustDates.js +18 -0
- package/build/esm/DatePicker/adjustDates.js.map +1 -0
- package/build/esm/DatePicker/contexts.d.ts +31 -0
- package/build/esm/DatePicker/contexts.js +15 -0
- package/build/esm/DatePicker/contexts.js.map +1 -0
- package/build/esm/DatePicker/dateTypes.d.ts +2 -0
- package/build/esm/DatePicker/dateTypes.js +2 -0
- package/build/esm/DatePicker/dateTypes.js.map +1 -0
- package/build/esm/DatePicker/hooks.d.ts +36 -0
- package/build/esm/DatePicker/hooks.js +98 -0
- package/build/esm/DatePicker/hooks.js.map +1 -0
- package/build/esm/DatePicker/index.d.ts +5 -0
- package/build/esm/DatePicker/index.js +6 -0
- package/build/esm/DatePicker/index.js.map +1 -0
- package/build/esm/FocusLock/FocusLock.d.ts +9 -9
- package/build/esm/FocusLock/FocusLock.js.map +1 -1
- package/build/esm/FocusLock/index.d.ts +1 -1
- package/build/esm/FocusLock/index.js.map +1 -1
- package/build/esm/FocusLock/tabUtils.d.ts +3 -3
- package/build/esm/FocusLock/tabUtils.js.map +1 -1
- package/build/esm/FocusLock/useFocusLock.d.ts +7 -7
- package/build/esm/FocusLock/useFocusLock.js.map +1 -1
- package/build/esm/List/List.d.ts +7 -7
- package/build/esm/List/List.js.map +1 -1
- package/build/esm/List/ListItem.d.ts +7 -7
- package/build/esm/List/ListItem.js.map +1 -1
- package/build/esm/List/context.d.ts +4 -4
- package/build/esm/List/context.js.map +1 -1
- package/build/esm/List/index.d.ts +2 -2
- package/build/esm/List/index.js.map +1 -1
- package/build/esm/Menu/ContextMenuTrigger.d.ts +11 -11
- package/build/esm/Menu/ContextMenuTrigger.js.map +1 -1
- package/build/esm/Menu/Menu.d.ts +10 -10
- package/build/esm/Menu/Menu.js.map +1 -1
- package/build/esm/Menu/MenuButton.d.ts +11 -11
- package/build/esm/Menu/MenuButton.js.map +1 -1
- package/build/esm/Menu/MenuItem.d.ts +8 -8
- package/build/esm/Menu/MenuItem.js.map +1 -1
- package/build/esm/Menu/MenuList.d.ts +7 -7
- package/build/esm/Menu/MenuList.js.map +1 -1
- package/build/esm/Menu/MenuPopover.d.ts +8 -8
- package/build/esm/Menu/MenuPopover.js.map +1 -1
- package/build/esm/Menu/context.d.ts +25 -25
- package/build/esm/Menu/context.js.map +1 -1
- package/build/esm/Menu/fixtures/countryList.d.ts +1 -1
- package/build/esm/Menu/fixtures/countryList.js.map +1 -1
- package/build/esm/Menu/index.d.ts +6 -6
- package/build/esm/Menu/index.js.map +1 -1
- package/build/esm/Menu/scope.d.ts +1 -1
- package/build/esm/Menu/scope.js.map +1 -1
- package/build/esm/Modal/Modal.d.ts +9 -9
- package/build/esm/Modal/Modal.js.map +1 -1
- package/build/esm/Modal/ModalBackdrop.d.ts +10 -10
- package/build/esm/Modal/ModalBackdrop.js.map +1 -1
- package/build/esm/Modal/index.d.ts +2 -2
- package/build/esm/Modal/index.js.map +1 -1
- package/build/esm/Popper/Popper.d.ts +35 -35
- package/build/esm/Popper/Popper.js.map +1 -1
- package/build/esm/Popper/PopperArrow.d.ts +6 -6
- package/build/esm/Popper/PopperArrow.js.map +1 -1
- package/build/esm/Popper/context.d.ts +6 -6
- package/build/esm/Popper/context.js.map +1 -1
- package/build/esm/Popper/index.d.ts +3 -3
- package/build/esm/Popper/index.js.map +1 -1
- package/build/esm/Portal/Portal.d.ts +7 -6
- package/build/esm/Portal/Portal.js +6 -3
- package/build/esm/Portal/Portal.js.map +1 -1
- package/build/esm/Portal/PortalSelectorProvider.d.ts +8 -0
- package/build/esm/Portal/PortalSelectorProvider.js +13 -0
- package/build/esm/Portal/PortalSelectorProvider.js.map +1 -0
- package/build/esm/Portal/index.d.ts +2 -1
- package/build/esm/Portal/index.js +1 -0
- package/build/esm/Portal/index.js.map +1 -1
- package/build/esm/RadioButton/RadioButton.d.ts +10 -10
- package/build/esm/RadioButton/RadioButton.js.map +1 -1
- package/build/esm/RadioButton/RadioGroup.d.ts +12 -12
- package/build/esm/RadioButton/RadioGroup.js.map +1 -1
- package/build/esm/RadioButton/context.d.ts +9 -9
- package/build/esm/RadioButton/context.js.map +1 -1
- package/build/esm/RadioButton/index.d.ts +2 -2
- package/build/esm/RadioButton/index.js.map +1 -1
- package/build/esm/SkipNav/SkipNav.d.ts +7 -7
- package/build/esm/SkipNav/SkipNav.js.map +1 -1
- package/build/esm/SkipNav/index.d.ts +1 -1
- package/build/esm/SkipNav/index.js.map +1 -1
- package/build/esm/Slider/Slider.d.ts +197 -197
- package/build/esm/Slider/Slider.js +82 -82
- package/build/esm/Slider/Slider.js.map +1 -1
- package/build/esm/Slider/index.d.ts +1 -1
- package/build/esm/Slider/index.js.map +1 -1
- package/build/esm/Spinner/Spinner.d.ts +12 -12
- package/build/esm/Spinner/Spinner.js.map +1 -1
- package/build/esm/Spinner/SpinnerButton.d.ts +8 -8
- package/build/esm/Spinner/SpinnerButton.js.map +1 -1
- package/build/esm/Spinner/context.d.ts +12 -12
- package/build/esm/Spinner/context.js.map +1 -1
- package/build/esm/Spinner/index.d.ts +2 -2
- package/build/esm/Spinner/index.js.map +1 -1
- package/build/esm/Tabs/Tab.d.ts +7 -7
- package/build/esm/Tabs/Tab.js.map +1 -1
- package/build/esm/Tabs/TabList.d.ts +9 -9
- package/build/esm/Tabs/TabList.js.map +1 -1
- package/build/esm/Tabs/TabPanel.d.ts +8 -8
- package/build/esm/Tabs/TabPanel.js.map +1 -1
- package/build/esm/Tabs/TabPanels.d.ts +8 -8
- package/build/esm/Tabs/TabPanels.js.map +1 -1
- package/build/esm/Tabs/Tabs.d.ts +10 -10
- package/build/esm/Tabs/Tabs.js.map +1 -1
- package/build/esm/Tabs/context.d.ts +17 -17
- package/build/esm/Tabs/context.js.map +1 -1
- package/build/esm/Tabs/index.d.ts +5 -5
- package/build/esm/Tabs/index.js.map +1 -1
- package/build/esm/Tabs/scopeQuery.d.ts +1 -1
- package/build/esm/Tabs/scopeQuery.js.map +1 -1
- package/build/esm/Tooltip/Tooltip.d.ts +10 -10
- package/build/esm/Tooltip/Tooltip.js.map +1 -1
- package/build/esm/Tooltip/index.d.ts +1 -1
- package/build/esm/Tooltip/index.js.map +1 -1
- package/build/esm/Tooltip/stateMachine.d.ts +28 -28
- package/build/esm/Tooltip/stateMachine.js.map +1 -1
- package/build/esm/Tooltip/useTooltip.d.ts +10 -10
- package/build/esm/Tooltip/useTooltip.js.map +1 -1
- package/build/esm/hooks/index.d.ts +13 -13
- package/build/esm/hooks/index.js.map +1 -1
- package/build/esm/hooks/useAutoFocus.d.ts +2 -2
- package/build/esm/hooks/useAutoFocus.js.map +1 -1
- package/build/esm/hooks/useChildrenCounter.d.ts +7 -7
- package/build/esm/hooks/useChildrenCounter.js.map +1 -1
- package/build/esm/hooks/useControlledState.d.ts +3 -3
- package/build/esm/hooks/useFocusReturn.d.ts +2 -2
- package/build/esm/hooks/useFocusReturn.js.map +1 -1
- package/build/esm/hooks/useFocusState.d.ts +11 -11
- package/build/esm/hooks/useFocusState.js.map +1 -1
- package/build/esm/hooks/useGestureHandlers.d.ts +52 -52
- package/build/esm/hooks/useGestureHandlers.js.map +1 -1
- package/build/esm/hooks/useId.d.ts +1 -0
- package/build/esm/hooks/useId.js +25 -0
- package/build/esm/hooks/useId.js.map +1 -0
- package/build/esm/hooks/useMeasure.d.ts +7 -7
- package/build/esm/hooks/useMeasure.js.map +1 -1
- package/build/esm/hooks/useOnClickOutside.d.ts +2 -2
- package/build/esm/hooks/useOnClickOutside.js.map +1 -1
- package/build/esm/hooks/useOnKeyDown.d.ts +1 -1
- package/build/esm/hooks/useOnKeyDown.js.map +1 -1
- package/build/esm/hooks/useReducerMachine.d.ts +24 -24
- package/build/esm/hooks/useReducerMachine.js.map +1 -1
- package/build/esm/hooks/useRemoveBodyScroll.d.ts +2 -2
- package/build/esm/hooks/useRemoveBodyScroll.js.map +1 -1
- package/build/esm/hooks/useScope.d.ts +11 -11
- package/build/esm/hooks/useScope.js.map +1 -1
- package/build/esm/hooks/useThrottle.d.ts +1 -1
- package/build/esm/hooks/useThrottle.js.map +1 -1
- package/build/esm/index.d.ts +15 -15
- package/build/esm/index.js.map +1 -1
- package/build/esm/utils/assign-ref.d.ts +3 -3
- package/build/esm/utils/assign-ref.js.map +1 -1
- package/build/esm/utils/assignRef.d.ts +3 -0
- package/build/esm/utils/assignRef.js +25 -0
- package/build/esm/utils/assignRef.js.map +1 -0
- package/build/esm/utils/can-use-dom.d.ts +1 -1
- package/build/esm/utils/can-use-dom.js.map +1 -1
- package/build/esm/utils/clamp.d.ts +1 -1
- package/build/esm/utils/clamp.js.map +1 -1
- package/build/esm/utils/context.d.ts +7 -7
- package/build/esm/utils/context.js.map +1 -1
- package/build/esm/utils/create-subscription.d.ts +4 -4
- package/build/esm/utils/create-subscription.js.map +1 -1
- package/build/esm/utils/get-circular-index.d.ts +1 -1
- package/build/esm/utils/get-circular-index.js.map +1 -1
- package/build/esm/utils/getCircularIndex.d.ts +1 -0
- package/build/esm/utils/getCircularIndex.js +8 -0
- package/build/esm/utils/getCircularIndex.js.map +1 -0
- package/build/esm/utils/index.d.ts +10 -10
- package/build/esm/utils/index.js.map +1 -1
- package/build/esm/utils/is-right-click.d.ts +6 -6
- package/build/esm/utils/is-right-click.js +4 -4
- package/build/esm/utils/is-right-click.js.map +1 -1
- package/build/esm/utils/owner-document.d.ts +7 -7
- package/build/esm/utils/owner-document.js +5 -5
- package/build/esm/utils/owner-document.js.map +1 -1
- package/build/esm/utils/polymorphic.d.ts +39 -39
- package/build/esm/utils/polymorphic.js.map +1 -1
- package/build/esm/utils/rubber-band-clamp.d.ts +2 -2
- package/build/esm/utils/rubber-band-clamp.js.map +1 -1
- package/build/esm/utils/rubberBandClamp.d.ts +2 -0
- package/build/esm/utils/rubberBandClamp.js +20 -0
- package/build/esm/utils/rubberBandClamp.js.map +1 -0
- package/build/esm/utils/use-stable-callback.d.ts +16 -16
- package/build/esm/utils/use-stable-callback.js +16 -16
- package/build/esm/utils/use-stable-callback.js.map +1 -1
- package/build/esm/utils/wrap-event.d.ts +3 -3
- package/build/esm/utils/wrap-event.js.map +1 -1
- package/build/esm/utils/wrapEvent.d.ts +3 -0
- package/build/esm/utils/wrapEvent.js +16 -0
- package/build/esm/utils/wrapEvent.js.map +1 -0
- package/build/tsconfig-build.tsbuildinfo +1 -1
- package/build/tsconfig.tsbuildinfo +7270 -0
- package/package.json +2 -2
- package/src/Accordion/Accordion.story.tsx +74 -74
- package/src/Accordion/Accordion.tsx +59 -59
- package/src/Accordion/AccordionBody.tsx +52 -52
- package/src/Accordion/AccordionHeader.tsx +167 -167
- package/src/Accordion/AccordionItem.tsx +50 -50
- package/src/Accordion/context.ts +37 -37
- package/src/Accordion/index.ts +4 -4
- package/src/Accordion/scopeQuery.ts +7 -7
- package/src/Accordion/styles.css +21 -21
- package/src/CheckBox/CheckBox.tsx +41 -41
- package/src/CheckBox/index.ts +1 -1
- package/src/ComboBox/ComboBox.story.tsx +120 -120
- package/src/ComboBox/Combobox.tsx +148 -148
- package/src/ComboBox/ComboboxButton.tsx +61 -61
- package/src/ComboBox/ComboboxInput.tsx +187 -187
- package/src/ComboBox/ComboboxLabel.tsx +33 -33
- package/src/ComboBox/ComboboxList.tsx +47 -47
- package/src/ComboBox/ComboboxOption.tsx +111 -111
- package/src/ComboBox/ComboboxPopover.tsx +64 -64
- package/src/ComboBox/cities.ts +23194 -23194
- package/src/ComboBox/context.ts +35 -35
- package/src/ComboBox/hooks.tsx +451 -451
- package/src/ComboBox/index.ts +8 -8
- package/src/ComboBox/makeHash.ts +19 -19
- package/src/ComboBox/scopeQuery.ts +6 -6
- package/src/ComboBox/styles.css +32 -32
- package/src/FocusLock/FocusLock.tsx +66 -66
- package/src/FocusLock/index.ts +1 -1
- package/src/FocusLock/tabUtils.ts +40 -40
- package/src/FocusLock/useFocusLock.ts +56 -56
- package/src/List/List.story.tsx +18 -18
- package/src/List/List.tsx +17 -17
- package/src/List/ListItem.tsx +23 -23
- package/src/List/context.ts +19 -19
- package/src/List/index.ts +2 -2
- package/src/Menu/ContextMenu.story.tsx +73 -73
- package/src/Menu/ContextMenuTrigger.tsx +76 -76
- package/src/Menu/Menu.story.tsx +160 -160
- package/src/Menu/Menu.tsx +83 -83
- package/src/Menu/MenuButton.tsx +83 -83
- package/src/Menu/MenuComplex.story.tsx +58 -58
- package/src/Menu/MenuItem.tsx +88 -88
- package/src/Menu/MenuList.tsx +254 -254
- package/src/Menu/MenuPopover.tsx +35 -35
- package/src/Menu/context.ts +44 -44
- package/src/Menu/fixtures/countryList.ts +198 -198
- package/src/Menu/index.ts +6 -6
- package/src/Menu/scope.ts +7 -7
- package/src/Menu/styles.css +42 -42
- package/src/Modal/Modal.story.tsx +258 -258
- package/src/Modal/Modal.tsx +48 -48
- package/src/Modal/ModalBackdrop.tsx +78 -78
- package/src/Modal/NavDrawer.story.tsx +158 -158
- package/src/Modal/index.ts +2 -2
- package/src/Modal/styles.css +46 -46
- package/src/Popper/Popper.story.tsx +263 -263
- package/src/Popper/Popper.tsx +154 -154
- package/src/Popper/PopperArrow.tsx +35 -35
- package/src/Popper/context.ts +10 -10
- package/src/Popper/index.ts +3 -3
- package/src/Popper/styles.css +60 -60
- package/src/Portal/Portal.tsx +31 -20
- package/src/Portal/PortalSelectorProvider.tsx +24 -0
- package/src/Portal/index.ts +6 -1
- package/src/RadioButton/RadioButton.story.tsx +77 -77
- package/src/RadioButton/RadioButton.tsx +55 -55
- package/src/RadioButton/RadioGroup.tsx +60 -60
- package/src/RadioButton/context.ts +17 -17
- package/src/RadioButton/index.ts +2 -2
- package/src/SkipNav/SkipNav.tsx +16 -16
- package/src/SkipNav/index.tsx +1 -1
- package/src/Slider/Slider.story.tsx +45 -45
- package/src/Slider/Slider.tsx +1120 -1120
- package/src/Slider/index.ts +1 -1
- package/src/Slider/styles.css +131 -131
- package/src/Spinner/Spinner.story.tsx +31 -31
- package/src/Spinner/Spinner.tsx +117 -117
- package/src/Spinner/SpinnerButton.tsx +54 -54
- package/src/Spinner/context.ts +20 -20
- package/src/Spinner/index.ts +2 -2
- package/src/Spinner/styles.css +23 -23
- package/src/Tabs/Tab.story.tsx +80 -80
- package/src/Tabs/Tab.tsx +136 -136
- package/src/Tabs/TabList.tsx +71 -71
- package/src/Tabs/TabPanel.tsx +53 -53
- package/src/Tabs/TabPanels.tsx +30 -30
- package/src/Tabs/Tabs.tsx +46 -46
- package/src/Tabs/context.ts +30 -30
- package/src/Tabs/index.tsx +5 -5
- package/src/Tabs/scopeQuery.ts +6 -6
- package/src/Tooltip/Tooltip.story.tsx +61 -61
- package/src/Tooltip/Tooltip.tsx +50 -50
- package/src/Tooltip/index.ts +1 -1
- package/src/Tooltip/stateMachine.ts +192 -192
- package/src/Tooltip/styles.css +17 -17
- package/src/Tooltip/useTooltip.ts +136 -136
- package/src/hooks/index.ts +13 -13
- package/src/hooks/useAutoFocus.ts +22 -22
- package/src/hooks/useChildrenCounter.ts +51 -51
- package/src/hooks/useFocusReturn.ts +43 -43
- package/src/hooks/useFocusState.ts +30 -30
- package/src/hooks/useGestureHandlers.ts +286 -286
- package/src/hooks/useMeasure.ts +33 -33
- package/src/hooks/useOnClickOutside.ts +32 -32
- package/src/hooks/useOnKeyDown.ts +19 -19
- package/src/hooks/useReducerMachine.ts +60 -60
- package/src/hooks/useRemoveBodyScroll.ts +39 -39
- package/src/hooks/useScope.ts +52 -52
- package/src/hooks/useThrottle.ts +19 -19
- package/src/index.ts +20 -20
- package/src/utils/assign-ref.ts +27 -27
- package/src/utils/can-use-dom.ts +7 -7
- package/src/utils/clamp.ts +3 -3
- package/src/utils/context.tsx +48 -48
- package/src/utils/create-subscription.ts +16 -16
- package/src/utils/get-circular-index.ts +7 -7
- package/src/utils/index.ts +10 -10
- package/src/utils/is-right-click.ts +14 -14
- package/src/utils/owner-document.ts +13 -13
- package/src/utils/polymorphic.ts +78 -78
- package/src/utils/rubber-band-clamp.ts +25 -25
- package/src/utils/use-stable-callback.ts +58 -58
- package/src/utils/wrap-event.ts +22 -22
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import type { MutableRefObject } from 'react';
|
|
2
|
-
import type { ActionTypes, StateTypes, ReducerState } from './hooks';
|
|
3
|
-
import type { SelectEventHandler } from './Combobox';
|
|
4
|
-
import type { Scope } from '../hooks';
|
|
5
|
-
export interface ComboBoxContextProps {
|
|
6
|
-
data: Omit<ReducerState, 'state'>;
|
|
7
|
-
inputRef: MutableRefObject<HTMLInputElement | null>;
|
|
8
|
-
popoverRef: MutableRefObject<HTMLDivElement | null>;
|
|
9
|
-
buttonRef: MutableRefObject<HTMLButtonElement | null>;
|
|
10
|
-
onSelect?: SelectEventHandler;
|
|
11
|
-
optionsRef: MutableRefObject<{
|
|
12
|
-
[itemId: string]: {
|
|
13
|
-
value: string | unknown;
|
|
14
|
-
text: string;
|
|
15
|
-
};
|
|
16
|
-
}>;
|
|
17
|
-
listScope: Scope<HTMLElement>;
|
|
18
|
-
state: StateTypes;
|
|
19
|
-
transition: (action: ActionTypes, payload?: any) => void;
|
|
20
|
-
listboxIdRef: MutableRefObject<string | undefined>;
|
|
21
|
-
labelIdRef: MutableRefObject<string | undefined>;
|
|
22
|
-
autocompletePropRef: MutableRefObject<boolean>;
|
|
23
|
-
persistSelectionRef: MutableRefObject<boolean>;
|
|
24
|
-
clearOnEscapeRef: MutableRefObject<boolean>;
|
|
25
|
-
isVisible: boolean;
|
|
26
|
-
openOnFocus: boolean;
|
|
27
|
-
selectOnBlur: boolean;
|
|
28
|
-
}
|
|
29
|
-
export declare const ComboBoxProvider: import("react").Provider<ComboBoxContextProps>;
|
|
30
|
-
export declare const useComboBoxContext: () => ComboBoxContextProps;
|
|
1
|
+
import type { MutableRefObject } from 'react';
|
|
2
|
+
import type { ActionTypes, StateTypes, ReducerState } from './hooks';
|
|
3
|
+
import type { SelectEventHandler } from './Combobox';
|
|
4
|
+
import type { Scope } from '../hooks';
|
|
5
|
+
export interface ComboBoxContextProps {
|
|
6
|
+
data: Omit<ReducerState, 'state'>;
|
|
7
|
+
inputRef: MutableRefObject<HTMLInputElement | null>;
|
|
8
|
+
popoverRef: MutableRefObject<HTMLDivElement | null>;
|
|
9
|
+
buttonRef: MutableRefObject<HTMLButtonElement | null>;
|
|
10
|
+
onSelect?: SelectEventHandler;
|
|
11
|
+
optionsRef: MutableRefObject<{
|
|
12
|
+
[itemId: string]: {
|
|
13
|
+
value: string | unknown;
|
|
14
|
+
text: string;
|
|
15
|
+
};
|
|
16
|
+
}>;
|
|
17
|
+
listScope: Scope<HTMLElement>;
|
|
18
|
+
state: StateTypes;
|
|
19
|
+
transition: (action: ActionTypes, payload?: any) => void;
|
|
20
|
+
listboxIdRef: MutableRefObject<string | undefined>;
|
|
21
|
+
labelIdRef: MutableRefObject<string | undefined>;
|
|
22
|
+
autocompletePropRef: MutableRefObject<boolean>;
|
|
23
|
+
persistSelectionRef: MutableRefObject<boolean>;
|
|
24
|
+
clearOnEscapeRef: MutableRefObject<boolean>;
|
|
25
|
+
isVisible: boolean;
|
|
26
|
+
openOnFocus: boolean;
|
|
27
|
+
selectOnBlur: boolean;
|
|
28
|
+
}
|
|
29
|
+
export declare const ComboBoxProvider: import("react").Provider<ComboBoxContextProps>;
|
|
30
|
+
export declare const useComboBoxContext: () => ComboBoxContextProps;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":["createContext","useContext","comboboxContext","ComboBoxProvider","Provider","useComboBoxContext"],"sources":["../../../src/ComboBox/context.ts"],"sourcesContent":["import type { MutableRefObject } from 'react';\
|
|
1
|
+
{"version":3,"file":"context.js","names":["createContext","useContext","comboboxContext","ComboBoxProvider","Provider","useComboBoxContext"],"sources":["../../../src/ComboBox/context.ts"],"sourcesContent":["import type { MutableRefObject } from 'react';\nimport { createContext, useContext } from 'react';\n\nimport type { ActionTypes, StateTypes, ReducerState } from './hooks';\nimport type { SelectEventHandler } from './Combobox';\nimport type { Scope } from '../hooks';\n\nexport interface ComboBoxContextProps {\n data: Omit<ReducerState, 'state'>;\n inputRef: MutableRefObject<HTMLInputElement | null>;\n popoverRef: MutableRefObject<HTMLDivElement | null>;\n buttonRef: MutableRefObject<HTMLButtonElement | null>;\n onSelect?: SelectEventHandler;\n optionsRef: MutableRefObject<{\n [itemId: string]: {\n value: string | unknown;\n text: string;\n };\n }>;\n listScope: Scope<HTMLElement>;\n state: StateTypes;\n transition: (action: ActionTypes, payload?: any) => void;\n listboxIdRef: MutableRefObject<string | undefined>;\n labelIdRef: MutableRefObject<string | undefined>;\n autocompletePropRef: MutableRefObject<boolean>;\n persistSelectionRef: MutableRefObject<boolean>;\n clearOnEscapeRef: MutableRefObject<boolean>;\n isVisible: boolean;\n openOnFocus: boolean;\n selectOnBlur: boolean;\n}\n\nconst comboboxContext = createContext<ComboBoxContextProps>(null as any);\nexport const { Provider: ComboBoxProvider } = comboboxContext;\nexport const useComboBoxContext = () => useContext(comboboxContext);\n"],"mappings":"AACA,SAASA,aAAT,EAAwBC,UAAxB,QAA0C,OAA1C;AA+BA,IAAMC,eAAe,gBAAGF,aAAa,CAAuB,IAAvB,CAArC;AACO,IAAkBG,gBAAlB,GAAuCD,eAAvC,CAAQE,QAAR;;AACP,OAAO,IAAMC,kBAAkB,GAAG,SAArBA,kBAAqB;EAAA,OAAMJ,UAAU,CAACC,eAAD,CAAhB;AAAA,CAA3B"}
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
import type { KeyboardEvent, MutableRefObject } from 'react';
|
|
2
|
-
import type { StateChart as GenericStateChart, StateMachineState } from '../hooks/useReducerMachine';
|
|
3
|
-
export declare const IDLE = "IDLE";
|
|
4
|
-
declare const SUGGESTING = "SUGGESTING";
|
|
5
|
-
export declare const NAVIGATING = "NAVIGATING";
|
|
6
|
-
export declare type StateTypes = typeof IDLE | typeof SUGGESTING | typeof NAVIGATING;
|
|
7
|
-
export declare const INIT = "INIT";
|
|
8
|
-
export declare const CLEAR = "CLEAR";
|
|
9
|
-
export declare const CLEAR_SELECTION = "CLEAR_SELECTION";
|
|
10
|
-
export declare const CHANGE = "CHANGE";
|
|
11
|
-
export declare const NAVIGATE = "NAVIGATE";
|
|
12
|
-
declare const SELECT_WITH_KEYBOARD = "SELECT_WITH_KEYBOARD";
|
|
13
|
-
export declare const SELECT_WITH_CLICK = "SELECT_WITH_CLICK";
|
|
14
|
-
declare const ESCAPE = "ESCAPE";
|
|
15
|
-
declare const BLUR = "BLUR";
|
|
16
|
-
export declare const FOCUS = "FOCUS";
|
|
17
|
-
export declare const OPEN_WITH_BUTTON = "OPEN_WITH_BUTTON";
|
|
18
|
-
export declare const CLOSE_WITH_BUTTON = "CLOSE_WITH_BUTTON";
|
|
19
|
-
export declare type ActionTypes = typeof CLEAR | typeof CLEAR_SELECTION | typeof CHANGE | typeof INIT | typeof NAVIGATE | typeof SELECT_WITH_KEYBOARD | typeof SELECT_WITH_CLICK | typeof ESCAPE | typeof BLUR | typeof FOCUS | typeof OPEN_WITH_BUTTON | typeof CLOSE_WITH_BUTTON;
|
|
20
|
-
export declare const stateChart: GenericStateChart<StateTypes, ActionTypes>;
|
|
21
|
-
export interface ReducerState extends StateMachineState<StateTypes, ActionTypes> {
|
|
22
|
-
item: string;
|
|
23
|
-
navigationItem: string;
|
|
24
|
-
text: string;
|
|
25
|
-
}
|
|
26
|
-
interface ActionObject {
|
|
27
|
-
type: ActionTypes;
|
|
28
|
-
state: StateTypes;
|
|
29
|
-
nextState: StateTypes;
|
|
30
|
-
[rest: string]: any;
|
|
31
|
-
}
|
|
32
|
-
export declare function comboboxReducer(data: Readonly<ReducerState>, action: ActionObject): ReducerState;
|
|
33
|
-
export declare const isVisible: (state: any) => boolean;
|
|
34
|
-
export declare function useFocusManagement(lastActionType: ActionTypes, inputRef: MutableRefObject<HTMLInputElement | null>): void;
|
|
35
|
-
export declare function useKeyDown(): (event: KeyboardEvent<any>) => void;
|
|
36
|
-
export declare function useBlur(): () => void;
|
|
37
|
-
export {};
|
|
1
|
+
import type { KeyboardEvent, MutableRefObject } from 'react';
|
|
2
|
+
import type { StateChart as GenericStateChart, StateMachineState } from '../hooks/useReducerMachine';
|
|
3
|
+
export declare const IDLE = "IDLE";
|
|
4
|
+
declare const SUGGESTING = "SUGGESTING";
|
|
5
|
+
export declare const NAVIGATING = "NAVIGATING";
|
|
6
|
+
export declare type StateTypes = typeof IDLE | typeof SUGGESTING | typeof NAVIGATING;
|
|
7
|
+
export declare const INIT = "INIT";
|
|
8
|
+
export declare const CLEAR = "CLEAR";
|
|
9
|
+
export declare const CLEAR_SELECTION = "CLEAR_SELECTION";
|
|
10
|
+
export declare const CHANGE = "CHANGE";
|
|
11
|
+
export declare const NAVIGATE = "NAVIGATE";
|
|
12
|
+
declare const SELECT_WITH_KEYBOARD = "SELECT_WITH_KEYBOARD";
|
|
13
|
+
export declare const SELECT_WITH_CLICK = "SELECT_WITH_CLICK";
|
|
14
|
+
declare const ESCAPE = "ESCAPE";
|
|
15
|
+
declare const BLUR = "BLUR";
|
|
16
|
+
export declare const FOCUS = "FOCUS";
|
|
17
|
+
export declare const OPEN_WITH_BUTTON = "OPEN_WITH_BUTTON";
|
|
18
|
+
export declare const CLOSE_WITH_BUTTON = "CLOSE_WITH_BUTTON";
|
|
19
|
+
export declare type ActionTypes = typeof CLEAR | typeof CLEAR_SELECTION | typeof CHANGE | typeof INIT | typeof NAVIGATE | typeof SELECT_WITH_KEYBOARD | typeof SELECT_WITH_CLICK | typeof ESCAPE | typeof BLUR | typeof FOCUS | typeof OPEN_WITH_BUTTON | typeof CLOSE_WITH_BUTTON;
|
|
20
|
+
export declare const stateChart: GenericStateChart<StateTypes, ActionTypes>;
|
|
21
|
+
export interface ReducerState extends StateMachineState<StateTypes, ActionTypes> {
|
|
22
|
+
item: string;
|
|
23
|
+
navigationItem: string;
|
|
24
|
+
text: string;
|
|
25
|
+
}
|
|
26
|
+
interface ActionObject {
|
|
27
|
+
type: ActionTypes;
|
|
28
|
+
state: StateTypes;
|
|
29
|
+
nextState: StateTypes;
|
|
30
|
+
[rest: string]: any;
|
|
31
|
+
}
|
|
32
|
+
export declare function comboboxReducer(data: Readonly<ReducerState>, action: ActionObject): ReducerState;
|
|
33
|
+
export declare const isVisible: (state: any) => boolean;
|
|
34
|
+
export declare function useFocusManagement(lastActionType: ActionTypes, inputRef: MutableRefObject<HTMLInputElement | null>): void;
|
|
35
|
+
export declare function useKeyDown(): (event: KeyboardEvent<any>) => void;
|
|
36
|
+
export declare function useBlur(): () => void;
|
|
37
|
+
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","names":["useEffect","getCircularIndex","useComboBoxContext","scopeQuery","IDLE","SUGGESTING","NAVIGATING","INIT","CLEAR","CLEAR_SELECTION","CHANGE","NAVIGATE","SELECT_WITH_KEYBOARD","SELECT_WITH_CLICK","ESCAPE","BLUR","FOCUS","OPEN_WITH_BUTTON","CLOSE_WITH_BUTTON","stateChart","initial","states","on","comboboxReducer","data","action","nextState","state","lastActionType","type","text","navigationItem","item","persistSelection","Error","visibleStates","isVisible","indexOf","useFocusManagement","inputRef","current","focus","getNextItem","currentItem","key","optionsItems","autocomplete","jumpToStartOrEnd","incr","index","findIndex","n","String","id","optionsLen","length","nextIndex","useKeyDown","onSelect","optionsRef","transition","autocompletePropRef","clearOnEscapeRef","persistSelectionRef","listScope","handleKeyDown","event","optionNodes","queryAllNodes","preventDefault","nextItem","scrollIntoView","behavior","block","value","lastValue","tracker","_valueTracker","setValue","Event","bubbles","dispatchEvent","navigationValue","navigationText","useBlur","stateText","popoverRef","buttonRef","selectOnBlur","handleBlur","requestAnimationFrame","document","activeElement","contains"],"sources":["../../../src/ComboBox/hooks.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\r\n/* eslint-disable default-case */\r\nimport type { KeyboardEvent, MutableRefObject } from 'react';\r\nimport { useEffect } from 'react';\r\n\r\nimport type {\r\n StateChart as GenericStateChart,\r\n StateMachineState,\r\n} from '../hooks/useReducerMachine';\r\nimport { getCircularIndex } from '../utils/get-circular-index';\r\nimport { useComboBoxContext } from './context';\r\nimport { scopeQuery } from './scopeQuery';\r\n\r\n////////////////////////////////////////////////////////////////////////////////\r\n// States\r\n\r\n// Nothing going on, waiting for the user to type or use the arrow keys\r\nexport const IDLE = 'IDLE';\r\n\r\n// The component is suggesting options as the user types\r\nconst SUGGESTING = 'SUGGESTING';\r\n\r\n// The user is using the keyboard to navigate the list, not typing\r\nexport const NAVIGATING = 'NAVIGATING';\r\n\r\nexport type StateTypes = typeof IDLE | typeof SUGGESTING | typeof NAVIGATING;\r\n\r\n////////////////////////////////////////////////////////////////////////////////\r\n// Actions:\r\n\r\n// Used to sync the state with controlled state, right after mounting\r\nexport const INIT = 'INIT';\r\n\r\n// User cleared the value w/ backspace, but input still has focus\r\nexport const CLEAR = 'CLEAR';\r\n\r\n// User cleared the value w/ backspace, but input still has focus\r\nexport const CLEAR_SELECTION = 'CLEAR_SELECTION';\r\n\r\n// User is typing\r\nexport const CHANGE = 'CHANGE';\r\n\r\n// User is navigating w/ the keyboard\r\nexport const NAVIGATE = 'NAVIGATE';\r\n\r\n// User can be navigating with keyboard and then click instead, we want the\r\n// value from the click, not the current nav item\r\nconst SELECT_WITH_KEYBOARD = 'SELECT_WITH_KEYBOARD';\r\nexport const SELECT_WITH_CLICK = 'SELECT_WITH_CLICK';\r\n\r\n// Pretty self-explanatory, user can hit escape or blur to close the popover\r\nconst ESCAPE = 'ESCAPE';\r\nconst BLUR = 'BLUR';\r\n\r\nexport const FOCUS = 'FOCUS';\r\n\r\nexport const OPEN_WITH_BUTTON = 'OPEN_WITH_BUTTON';\r\n\r\nexport const CLOSE_WITH_BUTTON = 'CLOSE_WITH_BUTTON';\r\n\r\nexport type ActionTypes =\r\n | typeof CLEAR\r\n | typeof CLEAR_SELECTION\r\n | typeof CHANGE\r\n | typeof INIT\r\n | typeof NAVIGATE\r\n | typeof SELECT_WITH_KEYBOARD\r\n | typeof SELECT_WITH_CLICK\r\n | typeof ESCAPE\r\n | typeof BLUR\r\n | typeof FOCUS\r\n | typeof OPEN_WITH_BUTTON\r\n | typeof CLOSE_WITH_BUTTON;\r\n\r\n////////////////////////////////////////////////////////////////////////////////\r\nexport const stateChart: GenericStateChart<StateTypes, ActionTypes> = {\r\n initial: IDLE,\r\n states: {\r\n [IDLE]: {\r\n on: {\r\n [BLUR]: IDLE,\r\n [CLEAR]: IDLE,\r\n [INIT]: IDLE,\r\n [CLEAR_SELECTION]: IDLE,\r\n [CHANGE]: SUGGESTING,\r\n [FOCUS]: SUGGESTING,\r\n [NAVIGATE]: NAVIGATING,\r\n [OPEN_WITH_BUTTON]: SUGGESTING,\r\n },\r\n },\r\n [SUGGESTING]: {\r\n on: {\r\n [CHANGE]: SUGGESTING,\r\n [FOCUS]: SUGGESTING,\r\n [INIT]: SUGGESTING,\r\n [NAVIGATE]: NAVIGATING,\r\n [CLEAR]: IDLE,\r\n [CLEAR_SELECTION]: SUGGESTING,\r\n [ESCAPE]: IDLE,\r\n [BLUR]: IDLE,\r\n [SELECT_WITH_CLICK]: IDLE,\r\n [CLOSE_WITH_BUTTON]: IDLE,\r\n },\r\n },\r\n [NAVIGATING]: {\r\n on: {\r\n [CHANGE]: SUGGESTING,\r\n [FOCUS]: SUGGESTING,\r\n [INIT]: NAVIGATING,\r\n [CLEAR]: IDLE,\r\n [CLEAR_SELECTION]: NAVIGATING,\r\n [BLUR]: IDLE,\r\n [ESCAPE]: IDLE,\r\n [NAVIGATE]: NAVIGATING,\r\n [SELECT_WITH_KEYBOARD]: IDLE,\r\n [SELECT_WITH_CLICK]: IDLE,\r\n [CLOSE_WITH_BUTTON]: IDLE,\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport interface ReducerState\r\n extends StateMachineState<StateTypes, ActionTypes> {\r\n item: string;\r\n navigationItem: string;\r\n text: string;\r\n}\r\n\r\ninterface ActionObject {\r\n type: ActionTypes;\r\n state: StateTypes;\r\n nextState: StateTypes;\r\n [rest: string]: any;\r\n}\r\n\r\nexport function comboboxReducer(\r\n data: Readonly<ReducerState>,\r\n action: ActionObject\r\n): ReducerState {\r\n const nextState = {\r\n ...data,\r\n state: action.nextState,\r\n lastActionType: action.type,\r\n };\r\n\r\n switch (action.type) {\r\n case INIT:\r\n case CHANGE:\r\n return {\r\n ...nextState,\r\n text: action.text,\r\n navigationItem: '',\r\n item: '',\r\n };\r\n case NAVIGATE:\r\n case OPEN_WITH_BUTTON:\r\n if (action.persistSelection) {\r\n return {\r\n ...nextState,\r\n navigationItem: data.item,\r\n };\r\n }\r\n\r\n return {\r\n ...nextState,\r\n navigationItem: action.item,\r\n };\r\n case CLEAR_SELECTION:\r\n return {\r\n ...nextState,\r\n navigationItem: '',\r\n };\r\n case CLEAR:\r\n return {\r\n ...nextState,\r\n text: '',\r\n navigationItem: '',\r\n item: '',\r\n };\r\n case BLUR:\r\n return {\r\n ...nextState,\r\n text: action.text,\r\n navigationItem: '',\r\n item: action.item,\r\n };\r\n case CLOSE_WITH_BUTTON:\r\n case ESCAPE:\r\n return {\r\n ...nextState,\r\n navigationItem: '',\r\n item: '',\r\n };\r\n case SELECT_WITH_CLICK:\r\n case SELECT_WITH_KEYBOARD:\r\n return {\r\n ...nextState,\r\n text: action.text,\r\n item: action.item,\r\n navigationItem: '',\r\n };\r\n case FOCUS:\r\n return {\r\n ...nextState,\r\n navigationItem: action.item,\r\n };\r\n\r\n default:\r\n throw new Error(`Unknown action ${action.type}`);\r\n }\r\n}\r\n\r\nconst visibleStates = [SUGGESTING, NAVIGATING];\r\nexport const isVisible = (state: any) => visibleStates.indexOf(state) >= 0;\r\n\r\n////////////////////////////////////////////////////////////////////////////////\r\n// The rest is all implementation details\r\n\r\n// Move focus back to the input if we start navigating w/ the\r\n// keyboard after focus has moved to any focusable content in\r\n// the popup.\r\nexport function useFocusManagement(\r\n lastActionType: ActionTypes,\r\n inputRef: MutableRefObject<HTMLInputElement | null>\r\n) {\r\n // useEffect so that the cursor goes to the end of the input instead\r\n // of awkwardly at the beginning, unclear to me why ...\r\n useEffect(() => {\r\n if (\r\n lastActionType === NAVIGATE ||\r\n lastActionType === ESCAPE ||\r\n lastActionType === SELECT_WITH_CLICK ||\r\n lastActionType === OPEN_WITH_BUTTON\r\n ) {\r\n inputRef.current && inputRef.current.focus();\r\n }\r\n });\r\n}\r\n\r\nfunction getNextItem(\r\n currentItem: string,\r\n key: 'ArrowDown' | 'ArrowUp' | 'PageDown' | 'PageUp' | 'Home' | 'End',\r\n optionsItems: HTMLElement[],\r\n autocomplete: boolean\r\n): HTMLElement | null {\r\n const jumpToStartOrEnd = key === 'Home' || key === 'End';\r\n let incr = 1;\r\n switch (key) {\r\n case 'PageUp':\r\n incr = -10;\r\n break;\r\n case 'PageDown':\r\n incr = 10;\r\n break;\r\n case 'End':\r\n case 'ArrowUp':\r\n incr = -1;\r\n break;\r\n case 'Home':\r\n case 'ArrowDown':\r\n incr = 1;\r\n break;\r\n }\r\n\r\n const index =\r\n currentItem === ''\r\n ? -1\r\n : optionsItems.findIndex((n) => String(n.id) === currentItem);\r\n\r\n const optionsLen = optionsItems.length;\r\n\r\n // Nothing selected, either go to start, or end\r\n if (index < 0 || jumpToStartOrEnd) {\r\n if (incr > 0) {\r\n // Go to start\r\n return optionsItems[0];\r\n } else {\r\n // Go to end\r\n return optionsItems[optionsLen - 1];\r\n }\r\n } else if (autocomplete) {\r\n const nextIndex = index + incr;\r\n\r\n if (nextIndex < 0 || nextIndex >= optionsLen) {\r\n // Next is outside the bounds of list, return nothing selected\r\n return null;\r\n }\r\n }\r\n\r\n // I'm sure it won't be null, we already check optionsLen above\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n return optionsItems[getCircularIndex(index + incr, optionsLen)!];\r\n}\r\n\r\n// We want the same events when the input or the popup have focus (HOW COOL ARE\r\n// HOOKS BTW?) This is probably the hairiest piece but it's not bad.\r\nexport function useKeyDown() {\r\n const {\r\n data: { text, navigationItem },\r\n onSelect,\r\n optionsRef,\r\n inputRef,\r\n state,\r\n transition,\r\n autocompletePropRef,\r\n clearOnEscapeRef,\r\n persistSelectionRef,\r\n listScope,\r\n } = useComboBoxContext();\r\n\r\n return function handleKeyDown(event: KeyboardEvent<any>) {\r\n const optionNodes = listScope.current.queryAllNodes(scopeQuery);\r\n\r\n switch (event.key) {\r\n case 'Home':\r\n case 'End':\r\n case 'PageUp':\r\n case 'PageDown':\r\n case 'ArrowUp':\r\n case 'ArrowDown': {\r\n // Don't scroll the page\r\n event.preventDefault();\r\n\r\n const optionsLen = optionNodes.length;\r\n\r\n // If the developer didn't render any options, there's no point in\r\n // trying to navigate--but seriously what the heck? Give us some\r\n // options fam.\r\n if (optionsLen === 0) {\r\n return;\r\n }\r\n\r\n if (state === IDLE) {\r\n // Opening a closed list\r\n transition(NAVIGATE, {\r\n persistSelection: persistSelectionRef.current,\r\n });\r\n } else {\r\n // When autocompletting, we'll not cycle through the list directly\r\n const autocomplete = autocompletePropRef.current;\r\n\r\n // Get next selected item\r\n const nextItem = getNextItem(\r\n navigationItem,\r\n event.key,\r\n optionNodes,\r\n autocomplete\r\n );\r\n\r\n if (nextItem !== null) {\r\n nextItem.scrollIntoView({ behavior: 'auto', block: 'nearest' });\r\n transition(NAVIGATE, {\r\n value: optionsRef.current[nextItem.id].text,\r\n item: nextItem.id,\r\n });\r\n } else {\r\n transition(NAVIGATE, { value: null, item: '' });\r\n }\r\n }\r\n break;\r\n }\r\n case 'Escape': {\r\n if (state !== IDLE) {\r\n transition(ESCAPE);\r\n } else if (state === IDLE && text !== '') {\r\n if (!inputRef.current || !clearOnEscapeRef.current) {\r\n break;\r\n }\r\n\r\n // emulate a inputRef change event, might not work in future versions of React\r\n const lastValue = inputRef.current.value;\r\n inputRef.current.value = '';\r\n\r\n const tracker = (inputRef.current as any)._valueTracker;\r\n if (tracker) {\r\n tracker.setValue(lastValue);\r\n }\r\n\r\n const event = new Event('change', { bubbles: true });\r\n inputRef.current.dispatchEvent(event);\r\n }\r\n break;\r\n }\r\n case 'Enter': {\r\n if (state === NAVIGATING && navigationItem !== '') {\r\n const { value: navigationValue, text: navigationText } =\r\n optionsRef.current[navigationItem];\r\n\r\n // don't want to submit forms\r\n event.preventDefault();\r\n onSelect && onSelect(navigationText, navigationItem, navigationValue);\r\n transition(SELECT_WITH_KEYBOARD, {\r\n text: navigationText,\r\n item: navigationItem,\r\n });\r\n }\r\n break;\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function useBlur() {\r\n const {\r\n data: { navigationItem, text: stateText },\r\n transition,\r\n optionsRef,\r\n popoverRef,\r\n inputRef,\r\n buttonRef,\r\n onSelect,\r\n selectOnBlur, // not implemented yet\r\n } = useComboBoxContext();\r\n\r\n return function handleBlur() {\r\n requestAnimationFrame(() => {\r\n // we on want to close only if focus rests outside the combobox\r\n if (\r\n document.activeElement !== inputRef.current &&\r\n document.activeElement !== buttonRef.current &&\r\n popoverRef.current\r\n ) {\r\n if (popoverRef.current.contains(document.activeElement)) {\r\n // focus landed inside the combobox, keep it open\r\n // in the future, we can make it not close, select, or anything\r\n // this way we can have like... checkboxes available in the\r\n // menu item, etc.\r\n } else {\r\n // focus landed outside the combobox, close it.\r\n if (!selectOnBlur || navigationItem === '') {\r\n // we don't wanna select on blur, or navigationIndex is invalid\r\n transition(BLUR, { text: stateText, item: '' });\r\n } else {\r\n // select the currently selected item\r\n const { value: navigationValue, text: navigationText } =\r\n optionsRef.current[navigationItem];\r\n\r\n onSelect &&\r\n onSelect(navigationText, navigationItem, navigationValue);\r\n\r\n transition(BLUR, {\r\n text: navigationText,\r\n item: navigationItem,\r\n });\r\n }\r\n }\r\n }\r\n });\r\n };\r\n}\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hooks.js","names":["useEffect","getCircularIndex","useComboBoxContext","scopeQuery","IDLE","SUGGESTING","NAVIGATING","INIT","CLEAR","CLEAR_SELECTION","CHANGE","NAVIGATE","SELECT_WITH_KEYBOARD","SELECT_WITH_CLICK","ESCAPE","BLUR","FOCUS","OPEN_WITH_BUTTON","CLOSE_WITH_BUTTON","stateChart","initial","states","on","comboboxReducer","data","action","nextState","state","lastActionType","type","text","navigationItem","item","persistSelection","Error","visibleStates","isVisible","indexOf","useFocusManagement","inputRef","current","focus","getNextItem","currentItem","key","optionsItems","autocomplete","jumpToStartOrEnd","incr","index","findIndex","n","String","id","optionsLen","length","nextIndex","useKeyDown","onSelect","optionsRef","transition","autocompletePropRef","clearOnEscapeRef","persistSelectionRef","listScope","handleKeyDown","event","optionNodes","queryAllNodes","preventDefault","nextItem","scrollIntoView","behavior","block","value","lastValue","tracker","_valueTracker","setValue","Event","bubbles","dispatchEvent","navigationValue","navigationText","useBlur","stateText","popoverRef","buttonRef","selectOnBlur","handleBlur","requestAnimationFrame","document","activeElement","contains"],"sources":["../../../src/ComboBox/hooks.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\n/* eslint-disable default-case */\nimport type { KeyboardEvent, MutableRefObject } from 'react';\nimport { useEffect } from 'react';\n\nimport type {\n StateChart as GenericStateChart,\n StateMachineState,\n} from '../hooks/useReducerMachine';\nimport { getCircularIndex } from '../utils/get-circular-index';\nimport { useComboBoxContext } from './context';\nimport { scopeQuery } from './scopeQuery';\n\n////////////////////////////////////////////////////////////////////////////////\n// States\n\n// Nothing going on, waiting for the user to type or use the arrow keys\nexport const IDLE = 'IDLE';\n\n// The component is suggesting options as the user types\nconst SUGGESTING = 'SUGGESTING';\n\n// The user is using the keyboard to navigate the list, not typing\nexport const NAVIGATING = 'NAVIGATING';\n\nexport type StateTypes = typeof IDLE | typeof SUGGESTING | typeof NAVIGATING;\n\n////////////////////////////////////////////////////////////////////////////////\n// Actions:\n\n// Used to sync the state with controlled state, right after mounting\nexport const INIT = 'INIT';\n\n// User cleared the value w/ backspace, but input still has focus\nexport const CLEAR = 'CLEAR';\n\n// User cleared the value w/ backspace, but input still has focus\nexport const CLEAR_SELECTION = 'CLEAR_SELECTION';\n\n// User is typing\nexport const CHANGE = 'CHANGE';\n\n// User is navigating w/ the keyboard\nexport const NAVIGATE = 'NAVIGATE';\n\n// User can be navigating with keyboard and then click instead, we want the\n// value from the click, not the current nav item\nconst SELECT_WITH_KEYBOARD = 'SELECT_WITH_KEYBOARD';\nexport const SELECT_WITH_CLICK = 'SELECT_WITH_CLICK';\n\n// Pretty self-explanatory, user can hit escape or blur to close the popover\nconst ESCAPE = 'ESCAPE';\nconst BLUR = 'BLUR';\n\nexport const FOCUS = 'FOCUS';\n\nexport const OPEN_WITH_BUTTON = 'OPEN_WITH_BUTTON';\n\nexport const CLOSE_WITH_BUTTON = 'CLOSE_WITH_BUTTON';\n\nexport type ActionTypes =\n | typeof CLEAR\n | typeof CLEAR_SELECTION\n | typeof CHANGE\n | typeof INIT\n | typeof NAVIGATE\n | typeof SELECT_WITH_KEYBOARD\n | typeof SELECT_WITH_CLICK\n | typeof ESCAPE\n | typeof BLUR\n | typeof FOCUS\n | typeof OPEN_WITH_BUTTON\n | typeof CLOSE_WITH_BUTTON;\n\n////////////////////////////////////////////////////////////////////////////////\nexport const stateChart: GenericStateChart<StateTypes, ActionTypes> = {\n initial: IDLE,\n states: {\n [IDLE]: {\n on: {\n [BLUR]: IDLE,\n [CLEAR]: IDLE,\n [INIT]: IDLE,\n [CLEAR_SELECTION]: IDLE,\n [CHANGE]: SUGGESTING,\n [FOCUS]: SUGGESTING,\n [NAVIGATE]: NAVIGATING,\n [OPEN_WITH_BUTTON]: SUGGESTING,\n },\n },\n [SUGGESTING]: {\n on: {\n [CHANGE]: SUGGESTING,\n [FOCUS]: SUGGESTING,\n [INIT]: SUGGESTING,\n [NAVIGATE]: NAVIGATING,\n [CLEAR]: IDLE,\n [CLEAR_SELECTION]: SUGGESTING,\n [ESCAPE]: IDLE,\n [BLUR]: IDLE,\n [SELECT_WITH_CLICK]: IDLE,\n [CLOSE_WITH_BUTTON]: IDLE,\n },\n },\n [NAVIGATING]: {\n on: {\n [CHANGE]: SUGGESTING,\n [FOCUS]: SUGGESTING,\n [INIT]: NAVIGATING,\n [CLEAR]: IDLE,\n [CLEAR_SELECTION]: NAVIGATING,\n [BLUR]: IDLE,\n [ESCAPE]: IDLE,\n [NAVIGATE]: NAVIGATING,\n [SELECT_WITH_KEYBOARD]: IDLE,\n [SELECT_WITH_CLICK]: IDLE,\n [CLOSE_WITH_BUTTON]: IDLE,\n },\n },\n },\n};\n\nexport interface ReducerState\n extends StateMachineState<StateTypes, ActionTypes> {\n item: string;\n navigationItem: string;\n text: string;\n}\n\ninterface ActionObject {\n type: ActionTypes;\n state: StateTypes;\n nextState: StateTypes;\n [rest: string]: any;\n}\n\nexport function comboboxReducer(\n data: Readonly<ReducerState>,\n action: ActionObject\n): ReducerState {\n const nextState = {\n ...data,\n state: action.nextState,\n lastActionType: action.type,\n };\n\n switch (action.type) {\n case INIT:\n case CHANGE:\n return {\n ...nextState,\n text: action.text,\n navigationItem: '',\n item: '',\n };\n case NAVIGATE:\n case OPEN_WITH_BUTTON:\n if (action.persistSelection) {\n return {\n ...nextState,\n navigationItem: data.item,\n };\n }\n\n return {\n ...nextState,\n navigationItem: action.item,\n };\n case CLEAR_SELECTION:\n return {\n ...nextState,\n navigationItem: '',\n };\n case CLEAR:\n return {\n ...nextState,\n text: '',\n navigationItem: '',\n item: '',\n };\n case BLUR:\n return {\n ...nextState,\n text: action.text,\n navigationItem: '',\n item: action.item,\n };\n case CLOSE_WITH_BUTTON:\n case ESCAPE:\n return {\n ...nextState,\n navigationItem: '',\n item: '',\n };\n case SELECT_WITH_CLICK:\n case SELECT_WITH_KEYBOARD:\n return {\n ...nextState,\n text: action.text,\n item: action.item,\n navigationItem: '',\n };\n case FOCUS:\n return {\n ...nextState,\n navigationItem: action.item,\n };\n\n default:\n throw new Error(`Unknown action ${action.type}`);\n }\n}\n\nconst visibleStates = [SUGGESTING, NAVIGATING];\nexport const isVisible = (state: any) => visibleStates.indexOf(state) >= 0;\n\n////////////////////////////////////////////////////////////////////////////////\n// The rest is all implementation details\n\n// Move focus back to the input if we start navigating w/ the\n// keyboard after focus has moved to any focusable content in\n// the popup.\nexport function useFocusManagement(\n lastActionType: ActionTypes,\n inputRef: MutableRefObject<HTMLInputElement | null>\n) {\n // useEffect so that the cursor goes to the end of the input instead\n // of awkwardly at the beginning, unclear to me why ...\n useEffect(() => {\n if (\n lastActionType === NAVIGATE ||\n lastActionType === ESCAPE ||\n lastActionType === SELECT_WITH_CLICK ||\n lastActionType === OPEN_WITH_BUTTON\n ) {\n inputRef.current && inputRef.current.focus();\n }\n });\n}\n\nfunction getNextItem(\n currentItem: string,\n key: 'ArrowDown' | 'ArrowUp' | 'PageDown' | 'PageUp' | 'Home' | 'End',\n optionsItems: HTMLElement[],\n autocomplete: boolean\n): HTMLElement | null {\n const jumpToStartOrEnd = key === 'Home' || key === 'End';\n let incr = 1;\n switch (key) {\n case 'PageUp':\n incr = -10;\n break;\n case 'PageDown':\n incr = 10;\n break;\n case 'End':\n case 'ArrowUp':\n incr = -1;\n break;\n case 'Home':\n case 'ArrowDown':\n incr = 1;\n break;\n }\n\n const index =\n currentItem === ''\n ? -1\n : optionsItems.findIndex((n) => String(n.id) === currentItem);\n\n const optionsLen = optionsItems.length;\n\n // Nothing selected, either go to start, or end\n if (index < 0 || jumpToStartOrEnd) {\n if (incr > 0) {\n // Go to start\n return optionsItems[0];\n } else {\n // Go to end\n return optionsItems[optionsLen - 1];\n }\n } else if (autocomplete) {\n const nextIndex = index + incr;\n\n if (nextIndex < 0 || nextIndex >= optionsLen) {\n // Next is outside the bounds of list, return nothing selected\n return null;\n }\n }\n\n // I'm sure it won't be null, we already check optionsLen above\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return optionsItems[getCircularIndex(index + incr, optionsLen)!];\n}\n\n// We want the same events when the input or the popup have focus (HOW COOL ARE\n// HOOKS BTW?) This is probably the hairiest piece but it's not bad.\nexport function useKeyDown() {\n const {\n data: { text, navigationItem },\n onSelect,\n optionsRef,\n inputRef,\n state,\n transition,\n autocompletePropRef,\n clearOnEscapeRef,\n persistSelectionRef,\n listScope,\n } = useComboBoxContext();\n\n return function handleKeyDown(event: KeyboardEvent<any>) {\n const optionNodes = listScope.current.queryAllNodes(scopeQuery);\n\n switch (event.key) {\n case 'Home':\n case 'End':\n case 'PageUp':\n case 'PageDown':\n case 'ArrowUp':\n case 'ArrowDown': {\n // Don't scroll the page\n event.preventDefault();\n\n const optionsLen = optionNodes.length;\n\n // If the developer didn't render any options, there's no point in\n // trying to navigate--but seriously what the heck? Give us some\n // options fam.\n if (optionsLen === 0) {\n return;\n }\n\n if (state === IDLE) {\n // Opening a closed list\n transition(NAVIGATE, {\n persistSelection: persistSelectionRef.current,\n });\n } else {\n // When autocompletting, we'll not cycle through the list directly\n const autocomplete = autocompletePropRef.current;\n\n // Get next selected item\n const nextItem = getNextItem(\n navigationItem,\n event.key,\n optionNodes,\n autocomplete\n );\n\n if (nextItem !== null) {\n nextItem.scrollIntoView({ behavior: 'auto', block: 'nearest' });\n transition(NAVIGATE, {\n value: optionsRef.current[nextItem.id].text,\n item: nextItem.id,\n });\n } else {\n transition(NAVIGATE, { value: null, item: '' });\n }\n }\n break;\n }\n case 'Escape': {\n if (state !== IDLE) {\n transition(ESCAPE);\n } else if (state === IDLE && text !== '') {\n if (!inputRef.current || !clearOnEscapeRef.current) {\n break;\n }\n\n // emulate a inputRef change event, might not work in future versions of React\n const lastValue = inputRef.current.value;\n inputRef.current.value = '';\n\n const tracker = (inputRef.current as any)._valueTracker;\n if (tracker) {\n tracker.setValue(lastValue);\n }\n\n const event = new Event('change', { bubbles: true });\n inputRef.current.dispatchEvent(event);\n }\n break;\n }\n case 'Enter': {\n if (state === NAVIGATING && navigationItem !== '') {\n const { value: navigationValue, text: navigationText } =\n optionsRef.current[navigationItem];\n\n // don't want to submit forms\n event.preventDefault();\n onSelect && onSelect(navigationText, navigationItem, navigationValue);\n transition(SELECT_WITH_KEYBOARD, {\n text: navigationText,\n item: navigationItem,\n });\n }\n break;\n }\n }\n };\n}\n\nexport function useBlur() {\n const {\n data: { navigationItem, text: stateText },\n transition,\n optionsRef,\n popoverRef,\n inputRef,\n buttonRef,\n onSelect,\n selectOnBlur, // not implemented yet\n } = useComboBoxContext();\n\n return function handleBlur() {\n requestAnimationFrame(() => {\n // we on want to close only if focus rests outside the combobox\n if (\n document.activeElement !== inputRef.current &&\n document.activeElement !== buttonRef.current &&\n popoverRef.current\n ) {\n if (popoverRef.current.contains(document.activeElement)) {\n // focus landed inside the combobox, keep it open\n // in the future, we can make it not close, select, or anything\n // this way we can have like... checkboxes available in the\n // menu item, etc.\n } else {\n // focus landed outside the combobox, close it.\n if (!selectOnBlur || navigationItem === '') {\n // we don't wanna select on blur, or navigationIndex is invalid\n transition(BLUR, { text: stateText, item: '' });\n } else {\n // select the currently selected item\n const { value: navigationValue, text: navigationText } =\n optionsRef.current[navigationItem];\n\n onSelect &&\n onSelect(navigationText, navigationItem, navigationValue);\n\n transition(BLUR, {\n text: navigationText,\n item: navigationItem,\n });\n }\n }\n }\n });\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export * from './Combobox';
|
|
2
|
-
export * from './ComboboxButton';
|
|
3
|
-
export * from './ComboboxInput';
|
|
4
|
-
export * from './ComboboxLabel';
|
|
5
|
-
export * from './ComboboxList';
|
|
6
|
-
export * from './ComboboxOption';
|
|
7
|
-
export * from './ComboboxPopover';
|
|
8
|
-
export * from './context';
|
|
1
|
+
export * from './Combobox';
|
|
2
|
+
export * from './ComboboxButton';
|
|
3
|
+
export * from './ComboboxInput';
|
|
4
|
+
export * from './ComboboxLabel';
|
|
5
|
+
export * from './ComboboxList';
|
|
6
|
+
export * from './ComboboxOption';
|
|
7
|
+
export * from './ComboboxPopover';
|
|
8
|
+
export * from './context';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/ComboBox/index.ts"],"sourcesContent":["export * from './Combobox';\
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/ComboBox/index.ts"],"sourcesContent":["export * from './Combobox';\nexport * from './ComboboxButton';\nexport * from './ComboboxInput';\nexport * from './ComboboxLabel';\nexport * from './ComboboxList';\nexport * from './ComboboxOption';\nexport * from './ComboboxPopover';\nexport * from './context';\n"],"mappings":"AAAA,cAAc,YAAd;AACA,cAAc,kBAAd;AACA,cAAc,iBAAd;AACA,cAAc,iBAAd;AACA,cAAc,gBAAd;AACA,cAAc,kBAAd;AACA,cAAc,mBAAd;AACA,cAAc,WAAd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function makeHash(str: string): number;
|
|
1
|
+
export declare function makeHash(str: string): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makeHash.js","names":["makeHash","str","hash","length","i","char","charCodeAt"],"sources":["../../../src/ComboBox/makeHash.ts"],"sourcesContent":["// We don't want to track the active descendant with indexes because nothing is\
|
|
1
|
+
{"version":3,"file":"makeHash.js","names":["makeHash","str","hash","length","i","char","charCodeAt"],"sources":["../../../src/ComboBox/makeHash.ts"],"sourcesContent":["// We don't want to track the active descendant with indexes because nothing is\n// more annoying in a combobox than having it change values RIGHT AS YOU HIT\n// ENTER. That only happens if you use the index as your data, rather than\n// *your data as your data*. We use this to generate a unique ID based on the\n// value of each item. This function is short, sweet, and good enough™ (I also\n// don't know how it works, tbqh)\n// https://stackoverflow.com/questions/6122571/simple-non-secure-hash-function-for-javascript\nexport function makeHash(str: string) {\n let hash = 0;\n if (str.length === 0) {\n return hash;\n }\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return hash;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,QAAT,CAAkBC,GAAlB,EAA+B;EACpC,IAAIC,IAAI,GAAG,CAAX;;EACA,IAAID,GAAG,CAACE,MAAJ,KAAe,CAAnB,EAAsB;IACpB,OAAOD,IAAP;EACD;;EACD,KAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,GAAG,CAACE,MAAxB,EAAgCC,CAAC,EAAjC,EAAqC;IACnC,IAAMC,IAAI,GAAGJ,GAAG,CAACK,UAAJ,CAAeF,CAAf,CAAb;IACAF,IAAI,GAAG,CAACA,IAAI,IAAI,CAAT,IAAcA,IAAd,GAAqBG,IAA5B;IACAH,IAAI,GAAGA,IAAI,GAAGA,IAAd;EACD;;EACD,OAAOA,IAAP;AACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function scopeQuery(nodeType: string, props: Record<string, unknown>): boolean;
|
|
1
|
+
export declare function scopeQuery(nodeType: string, props: Record<string, unknown>): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scopeQuery.js","names":["scopeQuery","nodeType","props"],"sources":["../../../src/ComboBox/scopeQuery.ts"],"sourcesContent":["export function scopeQuery(\
|
|
1
|
+
{"version":3,"file":"scopeQuery.js","names":["scopeQuery","nodeType","props"],"sources":["../../../src/ComboBox/scopeQuery.ts"],"sourcesContent":["export function scopeQuery(\n nodeType: string,\n props: Record<string, unknown>\n): boolean {\n return props['data-reach-combobox-option'] === '';\n}\n"],"mappings":"AAAA,OAAO,SAASA,UAAT,CACLC,QADK,EAELC,KAFK,EAGI;EACT,OAAOA,KAAK,CAAC,4BAAD,CAAL,KAAwC,EAA/C;AACD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { DayNames, MonthNames } from './dateTypes';
|
|
3
|
+
export declare type DatePickerProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'value' | 'defaultValue' | 'onChange'> & {
|
|
4
|
+
as?: React.ElementType<any>;
|
|
5
|
+
minDate?: Date;
|
|
6
|
+
maxDate?: Date;
|
|
7
|
+
dayNames?: DayNames;
|
|
8
|
+
monthNames?: MonthNames;
|
|
9
|
+
onChange?: (from: Date | null) => void;
|
|
10
|
+
value?: Date | null;
|
|
11
|
+
defaultValue?: Date | null;
|
|
12
|
+
type?: 'from' | 'to';
|
|
13
|
+
};
|
|
14
|
+
export declare const DatePicker: React.ForwardRefExoticComponent<Pick<React.HTMLAttributes<HTMLDivElement>, "dir" | "slot" | "style" | "title" | "children" | "onFocus" | "onBlur" | "id" | "hidden" | "defaultChecked" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "draggable" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocusCapture" | "onBlurCapture" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture"> & {
|
|
15
|
+
as?: "symbol" | "object" | "a" | "abbr" | "address" | "area" | "article" | "aside" | "audio" | "b" | "base" | "bdi" | "bdo" | "blockquote" | "body" | "br" | "button" | "canvas" | "caption" | "cite" | "code" | "col" | "colgroup" | "data" | "datalist" | "dd" | "del" | "details" | "dfn" | "dialog" | "div" | "dl" | "dt" | "em" | "embed" | "fieldset" | "figcaption" | "figure" | "footer" | "form" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "head" | "header" | "hgroup" | "hr" | "html" | "i" | "iframe" | "img" | "input" | "ins" | "kbd" | "label" | "legend" | "li" | "link" | "main" | "map" | "mark" | "menu" | "meta" | "meter" | "nav" | "noscript" | "ol" | "optgroup" | "option" | "output" | "p" | "param" | "picture" | "pre" | "progress" | "q" | "rp" | "rt" | "ruby" | "s" | "samp" | "script" | "section" | "select" | "slot" | "small" | "source" | "span" | "strong" | "style" | "sub" | "summary" | "sup" | "table" | "tbody" | "td" | "template" | "textarea" | "tfoot" | "th" | "thead" | "time" | "title" | "tr" | "track" | "u" | "ul" | "var" | "video" | "wbr" | "circle" | "clipPath" | "defs" | "desc" | "ellipse" | "feBlend" | "feColorMatrix" | "feComponentTransfer" | "feComposite" | "feConvolveMatrix" | "feDiffuseLighting" | "feDisplacementMap" | "feDistantLight" | "feFlood" | "feFuncA" | "feFuncB" | "feFuncG" | "feFuncR" | "feGaussianBlur" | "feImage" | "feMerge" | "feMergeNode" | "feMorphology" | "feOffset" | "fePointLight" | "feSpecularLighting" | "feSpotLight" | "feTile" | "feTurbulence" | "filter" | "foreignObject" | "g" | "image" | "line" | "linearGradient" | "marker" | "mask" | "metadata" | "path" | "pattern" | "polygon" | "polyline" | "radialGradient" | "rect" | "stop" | "svg" | "switch" | "text" | "textPath" | "tspan" | "use" | "view" | "big" | "keygen" | "menuitem" | "noindex" | "webview" | "animate" | "animateMotion" | "animateTransform" | "feDropShadow" | "mpath" | React.ComponentClass<any, any> | React.FunctionComponent<any> | undefined;
|
|
16
|
+
minDate?: Date | undefined;
|
|
17
|
+
maxDate?: Date | undefined;
|
|
18
|
+
dayNames?: DayNames | undefined;
|
|
19
|
+
monthNames?: MonthNames | undefined;
|
|
20
|
+
onChange?: ((from: Date | null) => void) | undefined;
|
|
21
|
+
value?: Date | null | undefined;
|
|
22
|
+
defaultValue?: Date | null | undefined;
|
|
23
|
+
type?: "from" | "to" | undefined;
|
|
24
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
3
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
4
|
+
import React, { forwardRef, useMemo, useRef, useReducer } from 'react';
|
|
5
|
+
import { assignMultipleRefs } from '../utils/assignRef';
|
|
6
|
+
import { reducer } from './hooks';
|
|
7
|
+
import { useRangeDatePickerContext, DatePickerProvider } from './contexts';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Merges props from RangeDatePicker and DatePicker
|
|
11
|
+
*/
|
|
12
|
+
function usePropsMerge(props) {
|
|
13
|
+
var context = useRangeDatePickerContext();
|
|
14
|
+
|
|
15
|
+
if (context && !props.type) {
|
|
16
|
+
throw new Error("<DatePicker /> as a children of <RangeDatePicker /> needs a 'type'");
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (!context) {
|
|
20
|
+
return props;
|
|
21
|
+
} else {
|
|
22
|
+
var mergedProps = _extends(_extends({}, props), {}, {
|
|
23
|
+
minDate: context.minDate,
|
|
24
|
+
maxDate: context.maxDate,
|
|
25
|
+
dayNames: context.dayNames,
|
|
26
|
+
monthNames: context.monthNames
|
|
27
|
+
}, props.type === 'from' ? {
|
|
28
|
+
value: context.from,
|
|
29
|
+
onChange: context.onChangeFrom
|
|
30
|
+
} : {
|
|
31
|
+
// props.type === 'to'
|
|
32
|
+
value: context.to,
|
|
33
|
+
onChange: context.onChangeTo,
|
|
34
|
+
minDate: context.from !== null && context.from !== undefined ? new Date(context.from.valueOf() + 86400000) : context.minDate
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
return mergedProps;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export var DatePicker = forwardRef(function DatePicker(props, ref) {
|
|
42
|
+
var _usePropsMerge = usePropsMerge(props),
|
|
43
|
+
_usePropsMerge$as = _usePropsMerge.as,
|
|
44
|
+
Comp = _usePropsMerge$as === void 0 ? 'div' : _usePropsMerge$as,
|
|
45
|
+
_usePropsMerge$minDat = _usePropsMerge.minDate,
|
|
46
|
+
propMinDate = _usePropsMerge$minDat === void 0 ? new Date(0) : _usePropsMerge$minDat,
|
|
47
|
+
_usePropsMerge$maxDat = _usePropsMerge.maxDate,
|
|
48
|
+
propMaxDate = _usePropsMerge$maxDat === void 0 ? new Date() : _usePropsMerge$maxDat,
|
|
49
|
+
dayNames = _usePropsMerge.dayNames,
|
|
50
|
+
monthNames = _usePropsMerge.monthNames,
|
|
51
|
+
onChange = _usePropsMerge.onChange,
|
|
52
|
+
controlledValue = _usePropsMerge.value,
|
|
53
|
+
defaultValue = _usePropsMerge.defaultValue,
|
|
54
|
+
type = _usePropsMerge.type,
|
|
55
|
+
rest = _objectWithoutProperties(_usePropsMerge, ["as", "minDate", "maxDate", "dayNames", "monthNames", "onChange", "value", "defaultValue", "type"]);
|
|
56
|
+
|
|
57
|
+
var datePickerRef = useRef(null);
|
|
58
|
+
var minDate = propMinDate,
|
|
59
|
+
maxDate = propMaxDate;
|
|
60
|
+
var onChangeRef = useRef(onChange);
|
|
61
|
+
onChangeRef.current = onChange;
|
|
62
|
+
var controlledValueRef = useRef(controlledValue);
|
|
63
|
+
controlledValueRef.current = controlledValue;
|
|
64
|
+
var initialData = {
|
|
65
|
+
isFocused: false,
|
|
66
|
+
navigationDay: -1,
|
|
67
|
+
navigationMonth: -1,
|
|
68
|
+
navigationYear: -1,
|
|
69
|
+
selectedDate: defaultValue !== undefined ? defaultValue : null
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
var _useReducer = useReducer(reducer, initialData),
|
|
73
|
+
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
74
|
+
state = _useReducer2[0],
|
|
75
|
+
dispatch = _useReducer2[1];
|
|
76
|
+
|
|
77
|
+
if (!dayNames || !monthNames) {
|
|
78
|
+
throw new Error('Props dayNames and monthNames not specified in <DatePicker />');
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
var contextValue = useMemo(function () {
|
|
82
|
+
return {
|
|
83
|
+
minDate: minDate,
|
|
84
|
+
maxDate: maxDate,
|
|
85
|
+
dayNames: dayNames,
|
|
86
|
+
monthNames: monthNames,
|
|
87
|
+
datePickerRef: datePickerRef,
|
|
88
|
+
controlledValueRef: controlledValueRef,
|
|
89
|
+
state: state,
|
|
90
|
+
dispatch: dispatch,
|
|
91
|
+
onChangeRef: onChangeRef
|
|
92
|
+
};
|
|
93
|
+
}, [maxDate, minDate, dayNames, monthNames, state]);
|
|
94
|
+
return /*#__PURE__*/React.createElement(DatePickerProvider, {
|
|
95
|
+
value: contextValue
|
|
96
|
+
}, /*#__PURE__*/React.createElement(Comp, _extends({
|
|
97
|
+
ref: assignMultipleRefs(ref, datePickerRef),
|
|
98
|
+
"data-has-focus": state.isFocused ? '' : undefined
|
|
99
|
+
}, rest)));
|
|
100
|
+
});
|
|
101
|
+
//# sourceMappingURL=DatePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/DatePicker/DatePicker.tsx"],"names":["React","forwardRef","useMemo","useRef","useReducer","assignMultipleRefs","reducer","useRangeDatePickerContext","DatePickerProvider","usePropsMerge","props","context","type","Error","mergedProps","minDate","maxDate","dayNames","monthNames","value","from","onChange","onChangeFrom","to","onChangeTo","undefined","Date","valueOf","DatePicker","ref","as","Comp","propMinDate","propMaxDate","controlledValue","defaultValue","rest","datePickerRef","onChangeRef","current","controlledValueRef","initialData","isFocused","navigationDay","navigationMonth","navigationYear","selectedDate","state","dispatch","contextValue"],"mappings":"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","sourcesContent":["import React, { forwardRef, useMemo, useRef, useReducer } from 'react';\nimport { assignMultipleRefs } from '../utils/assignRef';\nimport { reducer, ReducerState } from './hooks';\nimport { DayNames, MonthNames } from './dateTypes';\nimport {\n useRangeDatePickerContext,\n DatePickerContextProps,\n DatePickerProvider,\n} from './contexts';\n\nexport type DatePickerProps = Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'value' | 'defaultValue' | 'onChange'\n> & {\n as?: React.ElementType<any>;\n minDate?: Date;\n maxDate?: Date;\n dayNames?: DayNames;\n monthNames?: MonthNames;\n onChange?: (from: Date | null) => void;\n value?: Date | null;\n defaultValue?: Date | null;\n type?: 'from' | 'to';\n};\n\n/**\n * Merges props from RangeDatePicker and DatePicker\n */\nfunction usePropsMerge(props: DatePickerProps) {\n const context = useRangeDatePickerContext();\n if (context && !props.type) {\n throw new Error(\n \"<DatePicker /> as a children of <RangeDatePicker /> needs a 'type'\"\n );\n }\n\n if (!context) {\n return props;\n } else {\n const mergedProps = {\n ...props,\n minDate: context.minDate,\n maxDate: context.maxDate,\n dayNames: context.dayNames,\n monthNames: context.monthNames,\n ...(props.type === 'from'\n ? {\n value: context.from,\n onChange: context.onChangeFrom,\n }\n : {\n // props.type === 'to'\n value: context.to,\n onChange: context.onChangeTo,\n minDate:\n context.from !== null && context.from !== undefined\n ? new Date(context.from.valueOf() + 86400000)\n : context.minDate,\n }),\n };\n\n return mergedProps;\n }\n}\n\nexport const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(\n function DatePicker(props, ref) {\n const {\n as: Comp = 'div',\n minDate: propMinDate = new Date(0),\n maxDate: propMaxDate = new Date(),\n dayNames,\n monthNames,\n onChange,\n value: controlledValue,\n defaultValue,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n type, // just to avoid passing it to DOM\n ...rest\n } = usePropsMerge(props);\n const datePickerRef = useRef<HTMLDivElement | null>(null);\n const minDate = propMinDate,\n maxDate = propMaxDate;\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const controlledValueRef = useRef(controlledValue);\n controlledValueRef.current = controlledValue;\n\n const initialData: ReducerState = {\n isFocused: false,\n navigationDay: -1,\n navigationMonth: -1,\n navigationYear: -1,\n selectedDate: defaultValue !== undefined ? defaultValue : null,\n };\n const [state, dispatch] = useReducer(reducer, initialData);\n\n if (!dayNames || !monthNames) {\n throw new Error(\n 'Props dayNames and monthNames not specified in <DatePicker />'\n );\n }\n\n const contextValue: DatePickerContextProps = useMemo(\n () => ({\n minDate,\n maxDate,\n dayNames,\n monthNames,\n datePickerRef,\n controlledValueRef,\n state,\n dispatch,\n onChangeRef,\n }),\n [maxDate, minDate, dayNames, monthNames, state]\n );\n\n return (\n <DatePickerProvider value={contextValue}>\n <Comp\n ref={assignMultipleRefs(ref, datePickerRef)}\n data-has-focus={state.isFocused ? '' : undefined}\n {...rest}\n />\n </DatePickerProvider>\n );\n }\n);\n"],"file":"DatePicker.js"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface DatePickerSelectProps extends React.SelectHTMLAttributes<HTMLSelectElement> {
|
|
3
|
+
groupType?: 'from' | 'to';
|
|
4
|
+
type: 'month_year' | 'day';
|
|
5
|
+
emptyOption?: string;
|
|
6
|
+
as?: React.ElementType<any>;
|
|
7
|
+
}
|
|
8
|
+
export declare const DatePickerSelect: React.ForwardRefExoticComponent<DatePickerSelectProps & React.RefAttributes<unknown>>;
|