@basic-ui/core 0.0.41 → 0.0.44
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/build/cjs/index.js +1312 -464
- package/build/cjs/index.js.map +1 -1
- package/build/esm/Accordion/Accordion.d.ts +0 -0
- package/build/esm/Accordion/Accordion.js +4 -3
- package/build/esm/Accordion/Accordion.js.map +1 -1
- package/build/esm/Accordion/AccordionBody.d.ts +0 -0
- package/build/esm/Accordion/AccordionBody.js +4 -3
- package/build/esm/Accordion/AccordionBody.js.map +1 -1
- package/build/esm/Accordion/AccordionHeader.d.ts +0 -0
- package/build/esm/Accordion/AccordionHeader.js +4 -3
- package/build/esm/Accordion/AccordionHeader.js.map +1 -1
- package/build/esm/Accordion/AccordionItem.d.ts +0 -0
- package/build/esm/Accordion/AccordionItem.js +2 -1
- package/build/esm/Accordion/AccordionItem.js.map +1 -1
- package/build/esm/Accordion/context.d.ts +0 -0
- package/build/esm/Accordion/context.js +0 -0
- package/build/esm/Accordion/context.js.map +1 -1
- package/build/esm/Accordion/index.d.ts +0 -0
- package/build/esm/Accordion/index.js +0 -0
- package/build/esm/Accordion/index.js.map +1 -1
- package/build/esm/Accordion/scopeQuery.d.ts +0 -0
- package/build/esm/Accordion/scopeQuery.js +0 -0
- package/build/esm/Accordion/scopeQuery.js.map +1 -1
- package/build/esm/CheckBox/CheckBox.d.ts +0 -0
- package/build/esm/CheckBox/CheckBox.js +2 -1
- package/build/esm/CheckBox/CheckBox.js.map +1 -1
- package/build/esm/CheckBox/index.d.ts +0 -0
- package/build/esm/CheckBox/index.js +0 -0
- package/build/esm/CheckBox/index.js.map +1 -1
- package/build/esm/ComboBox/Combobox.d.ts +0 -0
- package/build/esm/ComboBox/Combobox.js +3 -2
- package/build/esm/ComboBox/Combobox.js.map +1 -1
- package/build/esm/ComboBox/ComboboxButton.d.ts +0 -0
- package/build/esm/ComboBox/ComboboxButton.js +4 -3
- package/build/esm/ComboBox/ComboboxButton.js.map +1 -1
- package/build/esm/ComboBox/ComboboxInput.d.ts +0 -0
- package/build/esm/ComboBox/ComboboxInput.js +3 -2
- package/build/esm/ComboBox/ComboboxInput.js.map +1 -1
- package/build/esm/ComboBox/ComboboxLabel.d.ts +0 -0
- package/build/esm/ComboBox/ComboboxLabel.js +2 -1
- package/build/esm/ComboBox/ComboboxLabel.js.map +1 -1
- package/build/esm/ComboBox/ComboboxList.d.ts +0 -0
- package/build/esm/ComboBox/ComboboxList.js +3 -2
- package/build/esm/ComboBox/ComboboxList.js.map +1 -1
- package/build/esm/ComboBox/ComboboxOption.d.ts +0 -0
- package/build/esm/ComboBox/ComboboxOption.js +4 -3
- package/build/esm/ComboBox/ComboboxOption.js.map +1 -1
- package/build/esm/ComboBox/ComboboxPopover.d.ts +0 -0
- package/build/esm/ComboBox/ComboboxPopover.js +5 -4
- package/build/esm/ComboBox/ComboboxPopover.js.map +1 -1
- package/build/esm/ComboBox/cities.d.ts +0 -0
- package/build/esm/ComboBox/cities.js +0 -0
- package/build/esm/ComboBox/cities.js.map +1 -1
- package/build/esm/ComboBox/context.d.ts +0 -0
- package/build/esm/ComboBox/context.js +0 -0
- package/build/esm/ComboBox/context.js.map +1 -1
- package/build/esm/ComboBox/hooks.d.ts +0 -0
- package/build/esm/ComboBox/hooks.js +11 -11
- package/build/esm/ComboBox/hooks.js.map +1 -1
- package/build/esm/ComboBox/index.d.ts +0 -0
- package/build/esm/ComboBox/index.js +0 -0
- package/build/esm/ComboBox/index.js.map +1 -1
- package/build/esm/ComboBox/makeHash.d.ts +0 -0
- package/build/esm/ComboBox/makeHash.js +0 -0
- package/build/esm/ComboBox/makeHash.js.map +1 -1
- package/build/esm/ComboBox/scopeQuery.d.ts +0 -0
- package/build/esm/ComboBox/scopeQuery.js +0 -0
- package/build/esm/ComboBox/scopeQuery.js.map +1 -1
- package/build/esm/FocusLock/FocusLock.d.ts +0 -0
- package/build/esm/FocusLock/FocusLock.js +2 -1
- package/build/esm/FocusLock/FocusLock.js.map +1 -1
- package/build/esm/FocusLock/index.d.ts +0 -0
- package/build/esm/FocusLock/index.js +0 -0
- package/build/esm/FocusLock/index.js.map +1 -1
- package/build/esm/FocusLock/tabUtils.d.ts +0 -0
- package/build/esm/FocusLock/tabUtils.js +0 -0
- package/build/esm/FocusLock/tabUtils.js.map +1 -1
- package/build/esm/FocusLock/useFocusLock.d.ts +0 -0
- package/build/esm/FocusLock/useFocusLock.js +0 -0
- package/build/esm/FocusLock/useFocusLock.js.map +1 -1
- package/build/esm/List/List.d.ts +0 -0
- package/build/esm/List/List.js +2 -1
- package/build/esm/List/List.js.map +1 -1
- package/build/esm/List/ListItem.d.ts +0 -0
- package/build/esm/List/ListItem.js +2 -1
- package/build/esm/List/ListItem.js.map +1 -1
- package/build/esm/List/context.d.ts +0 -0
- package/build/esm/List/context.js +0 -0
- package/build/esm/List/context.js.map +1 -1
- package/build/esm/List/index.d.ts +0 -0
- package/build/esm/List/index.js +0 -0
- package/build/esm/List/index.js.map +1 -1
- package/build/esm/Menu/Menu.d.ts +0 -0
- package/build/esm/Menu/Menu.js +2 -1
- package/build/esm/Menu/Menu.js.map +1 -1
- package/build/esm/Menu/MenuButton.d.ts +0 -0
- package/build/esm/Menu/MenuButton.js +3 -2
- package/build/esm/Menu/MenuButton.js.map +1 -1
- package/build/esm/Menu/MenuItem.d.ts +0 -0
- package/build/esm/Menu/MenuItem.js +4 -3
- package/build/esm/Menu/MenuItem.js.map +1 -1
- package/build/esm/Menu/MenuList.d.ts +0 -0
- package/build/esm/Menu/MenuList.js +6 -5
- package/build/esm/Menu/MenuList.js.map +1 -1
- package/build/esm/Menu/MenuPopover.d.ts +0 -0
- package/build/esm/Menu/MenuPopover.js +2 -1
- package/build/esm/Menu/MenuPopover.js.map +1 -1
- package/build/esm/Menu/context.d.ts +0 -0
- package/build/esm/Menu/context.js +0 -0
- package/build/esm/Menu/context.js.map +1 -1
- package/build/esm/Menu/index.d.ts +0 -0
- package/build/esm/Menu/index.js +0 -0
- package/build/esm/Menu/index.js.map +1 -1
- package/build/esm/Menu/scope.d.ts +0 -0
- package/build/esm/Menu/scope.js +0 -0
- package/build/esm/Menu/scope.js.map +1 -1
- package/build/esm/Modal/Modal.d.ts +0 -0
- package/build/esm/Modal/Modal.js +5 -4
- package/build/esm/Modal/Modal.js.map +1 -1
- package/build/esm/Modal/ModalBackdrop.d.ts +0 -0
- package/build/esm/Modal/ModalBackdrop.js +6 -5
- package/build/esm/Modal/ModalBackdrop.js.map +1 -1
- package/build/esm/Modal/index.d.ts +0 -0
- package/build/esm/Modal/index.js +0 -0
- package/build/esm/Modal/index.js.map +1 -1
- package/build/esm/Popper/Popper.d.ts +0 -0
- package/build/esm/Popper/Popper.js +6 -5
- package/build/esm/Popper/Popper.js.map +1 -1
- package/build/esm/Popper/PopperArrow.d.ts +0 -0
- package/build/esm/Popper/PopperArrow.js +5 -5
- package/build/esm/Popper/PopperArrow.js.map +1 -1
- package/build/esm/Popper/context.d.ts +0 -0
- package/build/esm/Popper/context.js +0 -0
- package/build/esm/Popper/context.js.map +1 -1
- package/build/esm/Popper/index.d.ts +0 -0
- package/build/esm/Popper/index.js +0 -0
- package/build/esm/Popper/index.js.map +1 -1
- package/build/esm/Portal/Portal.d.ts +0 -0
- package/build/esm/Portal/Portal.js +0 -0
- package/build/esm/Portal/Portal.js.map +1 -1
- package/build/esm/Portal/index.d.ts +0 -0
- package/build/esm/Portal/index.js +0 -0
- package/build/esm/Portal/index.js.map +1 -1
- package/build/esm/RadioButton/RadioButton.d.ts +0 -0
- package/build/esm/RadioButton/RadioButton.js +5 -2
- package/build/esm/RadioButton/RadioButton.js.map +1 -1
- package/build/esm/RadioButton/RadioGroup.d.ts +0 -0
- package/build/esm/RadioButton/RadioGroup.js +2 -1
- package/build/esm/RadioButton/RadioGroup.js.map +1 -1
- package/build/esm/RadioButton/context.d.ts +0 -0
- package/build/esm/RadioButton/context.js +0 -0
- package/build/esm/RadioButton/context.js.map +1 -1
- package/build/esm/RadioButton/index.d.ts +0 -0
- package/build/esm/RadioButton/index.js +0 -0
- package/build/esm/RadioButton/index.js.map +1 -1
- package/build/esm/SkipNav/SkipNav.d.ts +0 -0
- package/build/esm/SkipNav/SkipNav.js +2 -1
- package/build/esm/SkipNav/SkipNav.js.map +1 -1
- package/build/esm/SkipNav/index.d.ts +0 -0
- package/build/esm/SkipNav/index.js +0 -0
- package/build/esm/SkipNav/index.js.map +1 -1
- package/build/esm/Slider/Slider.d.ts +218 -0
- package/build/esm/Slider/Slider.js +842 -0
- package/build/esm/Slider/Slider.js.map +1 -0
- package/build/esm/Slider/index.d.ts +1 -0
- package/build/esm/Slider/index.js +2 -0
- package/build/esm/Slider/index.js.map +1 -0
- package/build/esm/Spinner/Spinner.d.ts +0 -0
- package/build/esm/Spinner/Spinner.js +2 -1
- package/build/esm/Spinner/Spinner.js.map +1 -1
- package/build/esm/Spinner/SpinnerButton.d.ts +0 -0
- package/build/esm/Spinner/SpinnerButton.js +3 -2
- package/build/esm/Spinner/SpinnerButton.js.map +1 -1
- package/build/esm/Spinner/context.d.ts +0 -0
- package/build/esm/Spinner/context.js +0 -0
- package/build/esm/Spinner/context.js.map +1 -1
- package/build/esm/Spinner/index.d.ts +0 -0
- package/build/esm/Spinner/index.js +0 -0
- package/build/esm/Spinner/index.js.map +1 -1
- package/build/esm/Tabs/Tab.d.ts +0 -0
- package/build/esm/Tabs/Tab.js +3 -2
- package/build/esm/Tabs/Tab.js.map +1 -1
- package/build/esm/Tabs/TabList.d.ts +0 -0
- package/build/esm/Tabs/TabList.js +4 -3
- package/build/esm/Tabs/TabList.js.map +1 -1
- package/build/esm/Tabs/TabPanel.d.ts +0 -0
- package/build/esm/Tabs/TabPanel.js +4 -3
- package/build/esm/Tabs/TabPanel.js.map +1 -1
- package/build/esm/Tabs/TabPanels.d.ts +0 -0
- package/build/esm/Tabs/TabPanels.js +4 -3
- package/build/esm/Tabs/TabPanels.js.map +1 -1
- package/build/esm/Tabs/Tabs.d.ts +0 -0
- package/build/esm/Tabs/Tabs.js +2 -1
- package/build/esm/Tabs/Tabs.js.map +1 -1
- package/build/esm/Tabs/context.d.ts +0 -0
- package/build/esm/Tabs/context.js +0 -0
- package/build/esm/Tabs/context.js.map +1 -1
- package/build/esm/Tabs/index.d.ts +0 -0
- package/build/esm/Tabs/index.js +0 -0
- package/build/esm/Tabs/index.js.map +1 -1
- package/build/esm/Tabs/scopeQuery.d.ts +0 -0
- package/build/esm/Tabs/scopeQuery.js +0 -0
- package/build/esm/Tabs/scopeQuery.js.map +1 -1
- package/build/esm/Tooltip/Tooltip.d.ts +0 -0
- package/build/esm/Tooltip/Tooltip.js +4 -2
- package/build/esm/Tooltip/Tooltip.js.map +1 -1
- package/build/esm/Tooltip/index.d.ts +0 -0
- package/build/esm/Tooltip/index.js +0 -0
- package/build/esm/Tooltip/index.js.map +1 -1
- package/build/esm/Tooltip/stateMachine.d.ts +0 -0
- package/build/esm/Tooltip/stateMachine.js +9 -9
- package/build/esm/Tooltip/stateMachine.js.map +1 -1
- package/build/esm/Tooltip/useTooltip.d.ts +0 -0
- package/build/esm/Tooltip/useTooltip.js +6 -5
- package/build/esm/Tooltip/useTooltip.js.map +1 -1
- package/build/esm/hooks/index.d.ts +0 -0
- package/build/esm/hooks/index.js +0 -0
- package/build/esm/hooks/index.js.map +1 -1
- package/build/esm/hooks/useAutoFocus.d.ts +0 -0
- package/build/esm/hooks/useAutoFocus.js +0 -0
- package/build/esm/hooks/useAutoFocus.js.map +1 -1
- package/build/esm/hooks/useChildrenCounter.d.ts +0 -0
- package/build/esm/hooks/useChildrenCounter.js +0 -0
- package/build/esm/hooks/useChildrenCounter.js.map +1 -1
- package/build/esm/hooks/useControlledState.d.ts +1 -1
- package/build/esm/hooks/useControlledState.js +8 -7
- package/build/esm/hooks/useControlledState.js.map +1 -1
- package/build/esm/hooks/useFocusReturn.d.ts +0 -0
- package/build/esm/hooks/useFocusReturn.js +2 -2
- package/build/esm/hooks/useFocusReturn.js.map +1 -1
- package/build/esm/hooks/useFocusState.d.ts +2 -2
- package/build/esm/hooks/useFocusState.js +1 -1
- package/build/esm/hooks/useFocusState.js.map +1 -1
- package/build/esm/hooks/useGestureHandlers.d.ts +0 -0
- package/build/esm/hooks/useGestureHandlers.js +23 -15
- package/build/esm/hooks/useGestureHandlers.js.map +1 -1
- package/build/esm/hooks/useMeasure.d.ts +0 -0
- package/build/esm/hooks/useMeasure.js +0 -1
- package/build/esm/hooks/useMeasure.js.map +1 -1
- package/build/esm/hooks/useOnClickOutside.d.ts +0 -0
- package/build/esm/hooks/useOnClickOutside.js +0 -0
- package/build/esm/hooks/useOnClickOutside.js.map +1 -1
- package/build/esm/hooks/useOnKeyDown.d.ts +1 -1
- package/build/esm/hooks/useOnKeyDown.js +5 -5
- package/build/esm/hooks/useOnKeyDown.js.map +1 -1
- package/build/esm/hooks/useReducerMachine.d.ts +0 -0
- package/build/esm/hooks/useReducerMachine.js +2 -1
- package/build/esm/hooks/useReducerMachine.js.map +1 -1
- package/build/esm/hooks/useRemoveBodyScroll.d.ts +2 -1
- package/build/esm/hooks/useRemoveBodyScroll.js +12 -8
- package/build/esm/hooks/useRemoveBodyScroll.js.map +1 -1
- package/build/esm/hooks/useScope.d.ts +0 -0
- package/build/esm/hooks/useScope.js +0 -0
- package/build/esm/hooks/useScope.js.map +1 -1
- package/build/esm/hooks/useThrottle.d.ts +0 -0
- package/build/esm/hooks/useThrottle.js +0 -0
- package/build/esm/hooks/useThrottle.js.map +1 -1
- package/build/esm/index.d.ts +1 -0
- package/build/esm/index.js +1 -0
- package/build/esm/index.js.map +1 -1
- package/build/esm/utils/assign-ref.d.ts +3 -0
- package/build/esm/utils/{assignRef.js → assign-ref.js} +1 -1
- package/build/esm/utils/assign-ref.js.map +1 -0
- package/build/esm/utils/can-use-dom.d.ts +1 -0
- package/build/esm/utils/can-use-dom.js +4 -0
- package/build/esm/utils/can-use-dom.js.map +1 -0
- package/build/esm/utils/clamp.d.ts +0 -0
- package/build/esm/utils/clamp.js +0 -0
- package/build/esm/utils/clamp.js.map +1 -1
- package/build/esm/utils/context.d.ts +7 -0
- package/build/esm/utils/context.js +41 -0
- package/build/esm/utils/context.js.map +1 -0
- package/build/esm/utils/{createSubscription.d.ts → create-subscription.d.ts} +0 -0
- package/build/esm/utils/{createSubscription.js → create-subscription.js} +1 -1
- package/build/esm/utils/create-subscription.js.map +1 -0
- package/build/esm/utils/{getCircularIndex.d.ts → get-circular-index.d.ts} +0 -0
- package/build/esm/utils/{getCircularIndex.js → get-circular-index.js} +1 -1
- package/build/esm/utils/get-circular-index.js.map +1 -0
- package/build/esm/utils/index.d.ts +10 -4
- package/build/esm/utils/index.js +10 -4
- package/build/esm/utils/index.js.map +1 -1
- package/build/esm/utils/is-right-click.d.ts +6 -0
- package/build/esm/utils/is-right-click.js +9 -0
- package/build/esm/utils/is-right-click.js.map +1 -0
- package/build/esm/utils/owner-document.d.ts +7 -0
- package/build/esm/utils/owner-document.js +12 -0
- package/build/esm/utils/owner-document.js.map +1 -0
- package/build/esm/utils/polymorphic.d.ts +32 -0
- package/build/esm/utils/polymorphic.js +2 -0
- package/build/esm/utils/polymorphic.js.map +1 -0
- package/build/esm/utils/{rubberBandClamp.d.ts → rubber-band-clamp.d.ts} +0 -0
- package/build/esm/utils/{rubberBandClamp.js → rubber-band-clamp.js} +1 -1
- package/build/esm/utils/rubber-band-clamp.js.map +1 -0
- package/build/esm/utils/use-stable-callback.d.ts +16 -0
- package/build/esm/utils/use-stable-callback.js +43 -0
- package/build/esm/utils/use-stable-callback.js.map +1 -0
- package/build/esm/utils/wrap-event.d.ts +3 -0
- package/build/esm/utils/{wrapEvent.js → wrap-event.js} +1 -1
- package/build/esm/utils/wrap-event.js.map +1 -0
- package/build/tsconfig-build.tsbuildinfo +1 -1
- package/package.json +4 -5
- package/src/ComboBox/ComboboxButton.tsx +2 -2
- package/src/ComboBox/ComboboxOption.tsx +1 -1
- package/src/ComboBox/ComboboxPopover.tsx +2 -2
- package/src/ComboBox/hooks.tsx +1 -1
- package/src/Menu/MenuButton.tsx +1 -1
- package/src/Menu/MenuItem.tsx +1 -1
- package/src/Menu/MenuList.tsx +1 -1
- package/src/Modal/Modal.tsx +1 -1
- package/src/Modal/ModalBackdrop.tsx +2 -2
- package/src/Popper/Popper.tsx +1 -1
- package/src/Popper/PopperArrow.tsx +2 -4
- package/src/Slider/Slider.story.tsx +45 -0
- package/src/Slider/Slider.tsx +1106 -0
- package/src/Slider/index.ts +1 -0
- package/src/Slider/styles.css +131 -0
- package/src/Tooltip/Tooltip.story.tsx +2 -2
- package/src/Tooltip/stateMachine.ts +9 -13
- package/src/Tooltip/useTooltip.ts +2 -2
- package/src/hooks/useControlledState.ts +12 -9
- package/src/hooks/useFocusState.ts +1 -1
- package/src/hooks/useGestureHandlers.ts +22 -12
- package/src/hooks/useMeasure.ts +0 -1
- package/src/hooks/useOnKeyDown.ts +4 -3
- package/src/hooks/useRemoveBodyScroll.ts +18 -8
- package/src/index.ts +1 -0
- package/src/utils/{assignRef.ts → assign-ref.ts} +4 -4
- package/src/utils/can-use-dom.ts +7 -0
- package/src/utils/context.tsx +48 -0
- package/src/utils/{createSubscription.ts → create-subscription.ts} +0 -0
- package/src/utils/{getCircularIndex.ts → get-circular-index.ts} +0 -0
- package/src/utils/index.ts +10 -4
- package/src/utils/is-right-click.ts +14 -0
- package/src/utils/owner-document.ts +13 -0
- package/src/utils/polymorphic.ts +72 -0
- package/src/utils/{rubberBandClamp.ts → rubber-band-clamp.ts} +0 -0
- package/src/utils/use-stable-callback.ts +58 -0
- package/src/utils/wrap-event.ts +22 -0
- package/build/esm/hooks/useId.d.ts +0 -3
- package/build/esm/hooks/useId.js +0 -16
- package/build/esm/hooks/useId.js.map +0 -1
- package/build/esm/utils/assignRef.d.ts +0 -3
- package/build/esm/utils/assignRef.js.map +0 -1
- package/build/esm/utils/createSubscription.js.map +0 -1
- package/build/esm/utils/getCircularIndex.js.map +0 -1
- package/build/esm/utils/rubberBandClamp.js.map +0 -1
- package/build/esm/utils/wrapEvent.d.ts +0 -3
- package/build/esm/utils/wrapEvent.js.map +0 -1
- package/build/tsconfig.tsbuildinfo +0 -1
- package/src/utils/wrapEvent.ts +0 -19
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Slider';
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
--reach-slider: 1;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
[data-reach-slider-input] {
|
|
6
|
+
max-width: 100%;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
[data-reach-slider-input][data-orientation="horizontal"] {
|
|
10
|
+
height: 0.5rem;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
[data-reach-slider-input][data-orientation="vertical"] {
|
|
14
|
+
width: 0.5rem;
|
|
15
|
+
/* the height is somewhat arbitrary but necessary for vertical sliders for
|
|
16
|
+
basic functionality */
|
|
17
|
+
height: 250px;
|
|
18
|
+
max-height: 100%;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
[data-reach-slider-input][data-disabled] {
|
|
22
|
+
opacity: 0.5;
|
|
23
|
+
pointer-events: none;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
[data-reach-slider-track] {
|
|
27
|
+
position: relative;
|
|
28
|
+
border-radius: 0.25rem;
|
|
29
|
+
background: hsl(0, 0%, 95%);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
[data-reach-slider-track][data-orientation="horizontal"] {
|
|
33
|
+
width: 100%;
|
|
34
|
+
height: inherit;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
[data-reach-slider-track][data-orientation="vertical"] {
|
|
38
|
+
width: inherit;
|
|
39
|
+
height: 100%;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* This pseudo element provides an invisible area that increases the touch
|
|
43
|
+
target size of the track */
|
|
44
|
+
[data-reach-slider-track]::before {
|
|
45
|
+
content: "";
|
|
46
|
+
position: absolute;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
[data-reach-slider-track][data-orientation="horizontal"]::before {
|
|
50
|
+
width: 100%;
|
|
51
|
+
height: 1.5rem;
|
|
52
|
+
top: calc(-0.5rem - 1px);
|
|
53
|
+
left: 0;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
[data-reach-slider-track][data-orientation="vertical"]::before {
|
|
57
|
+
width: 1.5rem;
|
|
58
|
+
height: 100%;
|
|
59
|
+
top: 0;
|
|
60
|
+
left: calc(-0.5rem - 1px);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
[data-reach-slider-handle] {
|
|
64
|
+
width: 16px;
|
|
65
|
+
height: 16px;
|
|
66
|
+
background: #1159a6;
|
|
67
|
+
border-radius: 10px;
|
|
68
|
+
z-index: 1;
|
|
69
|
+
transform-origin: center;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
[data-reach-slider-handle][aria-orientation="horizontal"] {
|
|
73
|
+
top: 50%;
|
|
74
|
+
transform: translateY(-50%);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
[data-reach-slider-handle][aria-orientation="horizontal"]:focus {
|
|
78
|
+
transform: translateY(-50%);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
[data-reach-slider-handle][aria-orientation="vertical"] {
|
|
82
|
+
left: 50%;
|
|
83
|
+
transform: translateX(-50%);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
[data-reach-slider-range] {
|
|
87
|
+
border-radius: inherit;
|
|
88
|
+
background: #1159a6;
|
|
89
|
+
left: 0;
|
|
90
|
+
bottom: 0;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
[data-reach-slider-range][data-orientation="horizontal"] {
|
|
94
|
+
height: 100%;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
[data-reach-slider-range][data-orientation="vertical"] {
|
|
98
|
+
width: 100%;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
[data-reach-slider-marker] {
|
|
102
|
+
background: hsl(0, 0%, 50%);
|
|
103
|
+
transform-origin: center;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
[data-reach-slider-marker][data-orientation="horizontal"] {
|
|
107
|
+
top: 50%;
|
|
108
|
+
transform: translate(-50%, -50%);
|
|
109
|
+
width: 3px;
|
|
110
|
+
height: 0.75rem;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
[data-reach-slider-marker][data-orientation="vertical"] {
|
|
114
|
+
left: 50%;
|
|
115
|
+
transform: translate(-50%, -50%);
|
|
116
|
+
width: 0.75rem;
|
|
117
|
+
height: 3px;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
[data-reach-slider-marker][data-state="at-value"],
|
|
121
|
+
[data-reach-slider-marker][data-state="under-value"] {
|
|
122
|
+
/* */
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
[data-reach-slider-track-highlight][data-orientation="horizontal"] {
|
|
126
|
+
height: 100%;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
[data-reach-slider-track-highlight][data-orientation="vertical"] {
|
|
130
|
+
width: 100%;
|
|
131
|
+
}
|
|
@@ -29,7 +29,7 @@ const StyledTooltip = forwardRef<HTMLDivElement, InjectedTooltipProps>(
|
|
|
29
29
|
);
|
|
30
30
|
|
|
31
31
|
const Example = () => {
|
|
32
|
-
const buttonRef = useRef();
|
|
32
|
+
const buttonRef = useRef<HTMLButtonElement | null>(null);
|
|
33
33
|
return (
|
|
34
34
|
<div style={{ margin: 100, display: 'flex' }}>
|
|
35
35
|
<Tooltip label={'Im groot'} as={StyledTooltip}>
|
|
@@ -43,7 +43,7 @@ const Example = () => {
|
|
|
43
43
|
};
|
|
44
44
|
|
|
45
45
|
const ExampleWithHidingButton = () => {
|
|
46
|
-
const buttonRef = useRef();
|
|
46
|
+
const buttonRef = useRef<HTMLButtonElement | null>(null);
|
|
47
47
|
return (
|
|
48
48
|
<ul style={{ margin: 100 }}>
|
|
49
49
|
{Array.from({ length: 20 }).map((_, index) => (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createSubscription } from '../utils/
|
|
1
|
+
import { createSubscription } from '../utils/create-subscription';
|
|
2
2
|
import type { StateChart as GenericStateChart } from '../hooks/useReducerMachine';
|
|
3
3
|
|
|
4
4
|
////////////////////////////////////////////////////////////////////////////////
|
|
@@ -6,31 +6,27 @@ import type { StateChart as GenericStateChart } from '../hooks/useReducerMachine
|
|
|
6
6
|
|
|
7
7
|
// Manages when the user "rests" on an element. Keeps the interface from being
|
|
8
8
|
// flashing tooltips all the time as the user moves the mouse around the screen.
|
|
9
|
-
let restTimeout:
|
|
9
|
+
let restTimeout: NodeJS.Timeout;
|
|
10
10
|
function startRestTimer() {
|
|
11
|
-
|
|
12
|
-
restTimeout =
|
|
11
|
+
clearTimeout(restTimeout);
|
|
12
|
+
restTimeout = setTimeout(() => {
|
|
13
13
|
send(Rest, undefined);
|
|
14
14
|
}, 200);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
function clearRestTimer() {
|
|
18
|
-
|
|
18
|
+
clearTimeout(restTimeout);
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
// Manages the delay to hide the tooltip after rest leaves.
|
|
22
|
-
let leavingVisibleTimer:
|
|
23
|
-
|
|
22
|
+
let leavingVisibleTimer: NodeJS.Timeout;
|
|
24
23
|
function startLeavingVisibleTimer() {
|
|
25
|
-
|
|
26
|
-
leavingVisibleTimer =
|
|
27
|
-
() => send(TimeComplete, undefined),
|
|
28
|
-
100
|
|
29
|
-
);
|
|
24
|
+
clearTimeout(leavingVisibleTimer);
|
|
25
|
+
leavingVisibleTimer = setTimeout(() => send(TimeComplete, undefined), 100);
|
|
30
26
|
}
|
|
31
27
|
|
|
32
28
|
function clearLeavingVisibleTimer() {
|
|
33
|
-
|
|
29
|
+
clearTimeout(leavingVisibleTimer);
|
|
34
30
|
}
|
|
35
31
|
|
|
36
32
|
////////////////////////////////////////////////////////////////////////////////
|
|
@@ -8,8 +8,8 @@ import type {
|
|
|
8
8
|
} from 'react';
|
|
9
9
|
import { useRef, useEffect, useState, useId } from 'react';
|
|
10
10
|
|
|
11
|
-
import { assignMultipleRefs } from '../utils/
|
|
12
|
-
import { wrapEvent } from '../utils/
|
|
11
|
+
import { assignMultipleRefs } from '../utils/assign-ref';
|
|
12
|
+
import { wrapEvent } from '../utils/wrap-event';
|
|
13
13
|
import {
|
|
14
14
|
send,
|
|
15
15
|
state,
|
|
@@ -6,31 +6,34 @@ import { wrapEvent } from '../utils';
|
|
|
6
6
|
|
|
7
7
|
export function useControlledState<
|
|
8
8
|
V,
|
|
9
|
-
E extends SyntheticEvent<any
|
|
9
|
+
E extends SyntheticEvent<any> | Event,
|
|
10
10
|
H extends unknown[]
|
|
11
11
|
>(
|
|
12
12
|
valueProp: V | undefined,
|
|
13
13
|
onChangeProp: CustomEventHandler<E, H> | undefined,
|
|
14
|
-
defaultValue: V,
|
|
14
|
+
defaultValue: V | (() => V),
|
|
15
15
|
defaultOnChange: (
|
|
16
16
|
setValue: Dispatch<SetStateAction<V>>
|
|
17
17
|
) => CustomEventHandler<E, H>
|
|
18
|
-
): [V, CustomEventHandler<E, H>
|
|
19
|
-
const isControlled =
|
|
18
|
+
): [V, CustomEventHandler<E, H>] {
|
|
19
|
+
const isControlled = valueProp !== undefined;
|
|
20
|
+
const wasControlled = useRef(isControlled);
|
|
20
21
|
const [valueState, setValueState] = useState<V>(defaultValue);
|
|
21
22
|
|
|
22
|
-
if (isControlled
|
|
23
|
-
if (
|
|
23
|
+
if (isControlled) {
|
|
24
|
+
if (wasControlled.current && process.env.NODE_ENV !== 'production') {
|
|
24
25
|
console.warn('Trying to change from controlled to uncontrolled.');
|
|
25
26
|
}
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
return [
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
29
|
+
valueProp!,
|
|
30
|
+
wrapEvent(onChangeProp, defaultOnChange(setValueState)),
|
|
31
|
+
];
|
|
28
32
|
}
|
|
29
33
|
|
|
30
34
|
return [
|
|
31
35
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
32
36
|
valueState!,
|
|
33
37
|
wrapEvent(onChangeProp, defaultOnChange(setValueState)),
|
|
34
|
-
setValueState,
|
|
35
38
|
];
|
|
36
39
|
}
|
|
@@ -5,6 +5,8 @@ import type {
|
|
|
5
5
|
} from 'react';
|
|
6
6
|
import { useRef } from 'react';
|
|
7
7
|
|
|
8
|
+
import { getOwnerDocument } from '../utils';
|
|
9
|
+
|
|
8
10
|
export interface GestureHandlersState {
|
|
9
11
|
target: null | EventTarget;
|
|
10
12
|
x: number;
|
|
@@ -211,16 +213,21 @@ export function gestureHandlers(
|
|
|
211
213
|
return;
|
|
212
214
|
}
|
|
213
215
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
216
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
217
|
+
const ownerDocument = getOwnerDocument(e.currentTarget)!;
|
|
218
|
+
const ownerWindow = ownerDocument.defaultView || window;
|
|
219
|
+
ownerWindow.addEventListener('touchmove', handleTouchMove, {
|
|
220
|
+
passive: false,
|
|
221
|
+
});
|
|
222
|
+
ownerWindow.addEventListener('touchend', handleTouchEnd);
|
|
223
|
+
ownerWindow.addEventListener('touchcancel', handleTouchEnd);
|
|
217
224
|
handleDown(e.touches.item(0) as any);
|
|
218
225
|
}
|
|
219
226
|
|
|
220
|
-
function handleTouchEnd() {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
227
|
+
function handleTouchEnd(this: Window) {
|
|
228
|
+
this.removeEventListener('touchmove', handleTouchMove);
|
|
229
|
+
this.removeEventListener('touchend', handleTouchEnd);
|
|
230
|
+
this.removeEventListener('touchcancel', handleTouchEnd);
|
|
224
231
|
handleUp();
|
|
225
232
|
}
|
|
226
233
|
|
|
@@ -234,16 +241,19 @@ export function gestureHandlers(
|
|
|
234
241
|
return;
|
|
235
242
|
}
|
|
236
243
|
|
|
244
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
245
|
+
const ownerDocument = getOwnerDocument(e.currentTarget)!;
|
|
246
|
+
const ownerWindow = ownerDocument.defaultView || window;
|
|
237
247
|
if (e.button === 0) {
|
|
238
|
-
|
|
239
|
-
|
|
248
|
+
ownerWindow.addEventListener('mousemove', handleMove);
|
|
249
|
+
ownerWindow.addEventListener('mouseup', handleMouseUp);
|
|
240
250
|
handleDown(e as any);
|
|
241
251
|
}
|
|
242
252
|
}
|
|
243
253
|
|
|
244
|
-
function handleMouseUp() {
|
|
245
|
-
|
|
246
|
-
|
|
254
|
+
function handleMouseUp(this: Window) {
|
|
255
|
+
this.removeEventListener('mousemove', handleMove);
|
|
256
|
+
this.removeEventListener('mouseup', handleMouseUp);
|
|
247
257
|
handleUp();
|
|
248
258
|
}
|
|
249
259
|
/* eslint-enable @typescript-eslint/no-use-before-define */
|
package/src/hooks/useMeasure.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { MutableRefObject } from 'react';
|
|
2
2
|
import { useRef, useState, useEffect } from 'react';
|
|
3
|
-
import ResizeObserver from 'resize-observer-polyfill';
|
|
4
3
|
|
|
5
4
|
export function useMeasure(ref: MutableRefObject<HTMLElement | null>) {
|
|
6
5
|
const ro = useRef<ResizeObserver | null>(null);
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { useEffect } from 'react';
|
|
2
2
|
|
|
3
3
|
export function useOnKeyDown(
|
|
4
|
+
ownerWindow: Window,
|
|
4
5
|
handler: (e: KeyboardEvent) => void,
|
|
5
6
|
active = true
|
|
6
7
|
) {
|
|
7
8
|
useEffect(() => {
|
|
8
9
|
if (active) {
|
|
9
|
-
|
|
10
|
+
ownerWindow.addEventListener('keydown', handler);
|
|
10
11
|
|
|
11
12
|
return () => {
|
|
12
|
-
|
|
13
|
+
ownerWindow.removeEventListener('keydown', handler);
|
|
13
14
|
};
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
return;
|
|
17
|
-
}, [active, handler]);
|
|
18
|
+
}, [ownerWindow, active, handler]);
|
|
18
19
|
}
|
|
@@ -1,29 +1,39 @@
|
|
|
1
|
+
import type { RefObject } from 'react';
|
|
1
2
|
import { useEffect } from 'react';
|
|
2
3
|
|
|
4
|
+
import { getOwnerDocument } from '../utils';
|
|
5
|
+
|
|
3
6
|
let scrollBodyCount = 0;
|
|
4
|
-
export function useRemoveBodyScroll(
|
|
7
|
+
export function useRemoveBodyScroll(
|
|
8
|
+
open: boolean,
|
|
9
|
+
elementRef: RefObject<HTMLElement | null>
|
|
10
|
+
) {
|
|
5
11
|
useEffect(() => {
|
|
6
|
-
if (open) {
|
|
12
|
+
if (open && elementRef.current) {
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
14
|
+
const ownerDocument = getOwnerDocument(elementRef.current)!;
|
|
15
|
+
const ownerWindow = ownerDocument.defaultView || window;
|
|
7
16
|
scrollBodyCount += 1;
|
|
8
17
|
|
|
9
18
|
// calculate scrollbar width if mounting the first scroll lock
|
|
10
19
|
let scrollBarWidth = 0;
|
|
11
20
|
if (scrollBodyCount === 1) {
|
|
12
|
-
scrollBarWidth =
|
|
21
|
+
scrollBarWidth =
|
|
22
|
+
ownerWindow.innerWidth - ownerDocument.body.clientWidth;
|
|
13
23
|
}
|
|
14
24
|
|
|
15
|
-
|
|
25
|
+
ownerDocument.body.style.overflow = 'hidden';
|
|
16
26
|
if (scrollBarWidth > 0) {
|
|
17
|
-
|
|
27
|
+
ownerDocument.body.style.marginRight = `${scrollBarWidth}px`;
|
|
18
28
|
}
|
|
19
29
|
|
|
20
30
|
return () => {
|
|
21
31
|
scrollBodyCount -= 1;
|
|
22
32
|
if (scrollBodyCount === 0) {
|
|
23
|
-
|
|
24
|
-
|
|
33
|
+
ownerDocument.body.style.overflow = '';
|
|
34
|
+
ownerDocument.body.style.marginRight = '';
|
|
25
35
|
}
|
|
26
36
|
};
|
|
27
37
|
}
|
|
28
|
-
}, [open]);
|
|
38
|
+
}, [elementRef, open]);
|
|
29
39
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MutableRefObject, RefCallback } from 'react';
|
|
2
2
|
|
|
3
3
|
export function assignRef<T>(
|
|
4
|
-
ref:
|
|
4
|
+
ref: MutableRefObject<T> | RefCallback<T> | null | undefined,
|
|
5
5
|
value: T
|
|
6
6
|
) {
|
|
7
7
|
if (ref == null) return;
|
|
@@ -9,7 +9,7 @@ export function assignRef<T>(
|
|
|
9
9
|
ref(value);
|
|
10
10
|
} else {
|
|
11
11
|
try {
|
|
12
|
-
|
|
12
|
+
ref.current = value;
|
|
13
13
|
} catch (error) {
|
|
14
14
|
throw new Error(`Cannot assign value "${value}" to ref "${ref}"`);
|
|
15
15
|
}
|
|
@@ -17,7 +17,7 @@ export function assignRef<T>(
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export function assignMultipleRefs<T>(
|
|
20
|
-
...refs: (
|
|
20
|
+
...refs: (MutableRefObject<T> | RefCallback<T> | null | undefined)[]
|
|
21
21
|
): RefCallback<T> {
|
|
22
22
|
return (node: T | null) => {
|
|
23
23
|
refs.forEach((ref) => {
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { FC, PropsWithChildren } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
useMemo,
|
|
4
|
+
createContext as ReactCreateContext,
|
|
5
|
+
useContext as useReactContext,
|
|
6
|
+
} from 'react';
|
|
7
|
+
|
|
8
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
9
|
+
|
|
10
|
+
type ContextProvider<T> = FC<PropsWithChildren<T>>;
|
|
11
|
+
|
|
12
|
+
export function createContext<ContextValueType extends object | null>(
|
|
13
|
+
rootName: string,
|
|
14
|
+
defaultContext?: ContextValueType
|
|
15
|
+
): [
|
|
16
|
+
ContextProvider<ContextValueType>,
|
|
17
|
+
(childName: string) => ContextValueType
|
|
18
|
+
] {
|
|
19
|
+
const Ctx = ReactCreateContext<ContextValueType | undefined>(defaultContext);
|
|
20
|
+
|
|
21
|
+
function Provider(props: PropsWithChildren<ContextValueType>) {
|
|
22
|
+
const { children, ...context } = props;
|
|
23
|
+
const value = useMemo(
|
|
24
|
+
() => context,
|
|
25
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
26
|
+
Object.values(context)
|
|
27
|
+
) as ContextValueType;
|
|
28
|
+
return <Ctx.Provider value={value}>{children}</Ctx.Provider>;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function useContext(childName: string) {
|
|
32
|
+
const context = useReactContext(Ctx);
|
|
33
|
+
if (context) {
|
|
34
|
+
return context;
|
|
35
|
+
}
|
|
36
|
+
if (defaultContext) {
|
|
37
|
+
return defaultContext;
|
|
38
|
+
}
|
|
39
|
+
throw Error(
|
|
40
|
+
`${childName} must be rendered inside of a ${rootName} component.`
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
Ctx.displayName = `${rootName}Context`;
|
|
45
|
+
Provider.displayName = `${rootName}Provider`;
|
|
46
|
+
|
|
47
|
+
return [Provider, useContext];
|
|
48
|
+
}
|
|
File without changes
|
|
File without changes
|
package/src/utils/index.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './
|
|
3
|
-
export * from './
|
|
4
|
-
export * from './
|
|
1
|
+
export * from './assign-ref';
|
|
2
|
+
export * from './can-use-dom';
|
|
3
|
+
export * from './context';
|
|
4
|
+
export * from './get-circular-index';
|
|
5
|
+
export * from './is-right-click';
|
|
6
|
+
export * from './owner-document';
|
|
7
|
+
export * from './polymorphic';
|
|
8
|
+
export * from './rubber-band-clamp';
|
|
9
|
+
export * from './use-stable-callback';
|
|
10
|
+
export * from './wrap-event';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detects right clicks
|
|
3
|
+
*
|
|
4
|
+
* @param nativeEvent
|
|
5
|
+
*/
|
|
6
|
+
export function isRightClick(
|
|
7
|
+
nativeEvent: MouseEvent | PointerEvent | TouchEvent
|
|
8
|
+
) {
|
|
9
|
+
return 'which' in nativeEvent
|
|
10
|
+
? nativeEvent.which === 3
|
|
11
|
+
: 'button' in nativeEvent
|
|
12
|
+
? (nativeEvent as any).button === 2
|
|
13
|
+
: false;
|
|
14
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { canUseDOM } from './can-use-dom';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Get an element's owner document. Useful when components are used in iframes
|
|
5
|
+
* or other environments like dev tools.
|
|
6
|
+
*
|
|
7
|
+
* @param element
|
|
8
|
+
*/
|
|
9
|
+
export function getOwnerDocument<T extends Element>(
|
|
10
|
+
element: T | null | undefined
|
|
11
|
+
) {
|
|
12
|
+
return canUseDOM() ? (element ? element.ownerDocument : document) : null;
|
|
13
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/ban-types */
|
|
2
|
+
// adapted from https://github.com/radix-ui/primitives/blob/2f139a832ba0cdfd445c937ebf63c2e79e0ef7ed/packages/react/polymorphic/src/polymorphic.ts
|
|
3
|
+
// Would have liked to use it directly instead of copying but they are
|
|
4
|
+
// (rightfully) treating it as an internal utility, so copy/paste it is to
|
|
5
|
+
// prevent any needless churn if they make breaking changes. Big thanks to Jenna
|
|
6
|
+
// for the heavy lifting! https://github.com/jjenzz
|
|
7
|
+
|
|
8
|
+
import type * as React from 'react';
|
|
9
|
+
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
11
|
+
export type Merge<P1 = {}, P2 = {}> = Omit<P1, keyof P2> & P2;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Infers the OwnProps if E is a ForwardRefExoticComponentWithAs
|
|
15
|
+
*/
|
|
16
|
+
export type OwnProps<E> = E extends ForwardRefComponent<any, infer P> ? P : {};
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Infers the JSX.IntrinsicElement if E is a ForwardRefExoticComponentWithAs
|
|
20
|
+
*/
|
|
21
|
+
export type IntrinsicElement<E> = E extends ForwardRefComponent<infer I, any>
|
|
22
|
+
? I
|
|
23
|
+
: never;
|
|
24
|
+
|
|
25
|
+
type ForwardRefExoticComponent<E, OwnProps> = React.ForwardRefExoticComponent<
|
|
26
|
+
Merge<
|
|
27
|
+
E extends React.ElementType ? React.ComponentPropsWithRef<E> : never,
|
|
28
|
+
OwnProps & { as?: E }
|
|
29
|
+
>
|
|
30
|
+
>;
|
|
31
|
+
|
|
32
|
+
export interface ForwardRefComponent<
|
|
33
|
+
IntrinsicElementString,
|
|
34
|
+
OwnProps = {}
|
|
35
|
+
/*
|
|
36
|
+
* Extends original type to ensure built in React types play nice with
|
|
37
|
+
* polymorphic components still e.g. `React.ElementRef` etc.
|
|
38
|
+
*/
|
|
39
|
+
> extends ForwardRefExoticComponent<IntrinsicElementString, OwnProps> {
|
|
40
|
+
/*
|
|
41
|
+
* When `as` prop is passed, use this overload. Merges original own props
|
|
42
|
+
* (without DOM props) and the inferred props from `as` element with the own
|
|
43
|
+
* props taking precendence.
|
|
44
|
+
*
|
|
45
|
+
* We explicitly avoid `React.ElementType` and manually narrow the prop types
|
|
46
|
+
* so that events are typed when using JSX.IntrinsicElements.
|
|
47
|
+
*/
|
|
48
|
+
<As = IntrinsicElementString>(
|
|
49
|
+
props: As extends ''
|
|
50
|
+
? { as: keyof JSX.IntrinsicElements }
|
|
51
|
+
: As extends React.ComponentType<infer P>
|
|
52
|
+
? Merge<P, OwnProps & { as: As }>
|
|
53
|
+
: As extends keyof JSX.IntrinsicElements
|
|
54
|
+
? Merge<JSX.IntrinsicElements[As], OwnProps & { as: As }>
|
|
55
|
+
: never
|
|
56
|
+
): React.ReactElement | null;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface MemoComponent<IntrinsicElementString, OwnProps = {}>
|
|
60
|
+
extends React.MemoExoticComponent<
|
|
61
|
+
ForwardRefComponent<IntrinsicElementString, OwnProps>
|
|
62
|
+
> {
|
|
63
|
+
<As = IntrinsicElementString>(
|
|
64
|
+
props: As extends ''
|
|
65
|
+
? { as: keyof JSX.IntrinsicElements }
|
|
66
|
+
: As extends React.ComponentType<infer P>
|
|
67
|
+
? Merge<P, OwnProps & { as: As }>
|
|
68
|
+
: As extends keyof JSX.IntrinsicElements
|
|
69
|
+
? Merge<JSX.IntrinsicElements[As], OwnProps & { as: As }>
|
|
70
|
+
: never
|
|
71
|
+
): React.ReactElement | null;
|
|
72
|
+
}
|
|
File without changes
|